From 06145fe03c61c3d9c0cfd87ce710c197aaa9eafd Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Thu, 9 Nov 2023 22:20:27 -0800 Subject: [PATCH 001/313] misc/wasm: support new wasmtime CLI Wasmtime 14.0.0 introduced new CLI flags and removed the existing flags, in particular the --max-wasm-stack flag we were using to avoid errors in some tests. This introduces a regular expression based switch that uses the old flags for wasmtime versions < 14 and the new flags otherwise. Fixes #63718 Change-Id: I44673e7d9f8729065757abdbf8c41e8a61897d6a Reviewed-on: https://go-review.googlesource.com/c/go/+/541219 Reviewed-by: David Chase LUCI-TryBot-Result: Go LUCI Reviewed-by: Dmitri Shuralyov Reviewed-by: Dmitri Shuralyov Reviewed-by: Mauri de Souza Meneguzzo --- misc/wasm/go_wasip1_wasm_exec | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/misc/wasm/go_wasip1_wasm_exec b/misc/wasm/go_wasip1_wasm_exec index dc110327af..cd16b96ea7 100755 --- a/misc/wasm/go_wasip1_wasm_exec +++ b/misc/wasm/go_wasip1_wasm_exec @@ -14,8 +14,15 @@ case "$GOWASIRUNTIME" in exec wazero run -mount /:/ -env-inherit -cachedir "${TMPDIR:-/tmp}"/wazero ${GOWASIRUNTIMEARGS:-} "$1" "${@:2}" ;; "wasmtime" | "") - # TODO(go.dev/issue/63718): Switch to the new CLI offered in the major version 14 of Wasmtime. - exec env WASMTIME_NEW_CLI=0 wasmtime run --dir=/ --env PWD="$PWD" --env PATH="$PATH" --max-wasm-stack 1048576 ${GOWASIRUNTIMEARGS:-} "$1" -- "${@:2}" + # Match the major version in "wasmtime-cli 14.0.0". For versions before 14 + # we need to use the old CLI. This requires Bash v3.0 and above. + # TODO(johanbrandhorst): Remove this condition once 1.22 is released. + # From 1.23 onwards we'll only support the new wasmtime CLI. + if [[ "$(wasmtime --version)" =~ wasmtime-cli[[:space:]]([0-9]+)\.[0-9]+\.[0-9]+ && "${BASH_REMATCH[1]}" -lt 14 ]]; then + exec wasmtime run --dir=/ --env PWD="$PWD" --env PATH="$PATH" --max-wasm-stack 1048576 ${GOWASIRUNTIMEARGS:-} "$1" -- "${@:2}" + else + exec wasmtime run --dir=/ --env PWD="$PWD" --env PATH="$PATH" -W max-wasm-stack=1048576 ${GOWASIRUNTIMEARGS:-} "$1" "${@:2}" + fi ;; *) echo "Unknown Go WASI runtime specified: $GOWASIRUNTIME" From 6382893890b82bbc0439eade5b132d9d1b3fb3a7 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Sat, 5 Aug 2023 23:18:31 -0400 Subject: [PATCH 002/313] math/rand/v2: add ChaCha8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ChaCha8 provides a cryptographically strong generator alongside PCG, so that people who want stronger randomness have access to that. On systems with 128-bit vector math assembly (amd64 and arm64), ChaCha8 runs at about the same speed as PCG (25% slower on amd64, 2% faster on arm64). Obviously all the claimed benchmark variation other than the new ChaCha8 benchmark is a lie. goos: linux goarch: amd64 pkg: math/rand/v2 cpu: AMD Ryzen 9 7950X 16-Core Processor │ afa459a2f0.amd64 │ bbb48afeb7.amd64 │ │ sec/op │ sec/op vs base │ PCG_DXSM-32 1.488n ± 2% 1.492n ± 2% ~ (p=0.309 n=20) ChaCha8-32 1.861n ± 2% SourceUint64-32 1.450n ± 3% 1.590n ± 2% +9.69% (p=0.000 n=20) GlobalInt64-32 2.067n ± 2% 2.061n ± 1% ~ (p=0.952 n=20) GlobalInt64Parallel-32 0.1044n ± 2% 0.1041n ± 1% ~ (p=0.498 n=20) GlobalUint64-32 2.085n ± 0% 2.256n ± 2% +8.23% (p=0.000 n=20) GlobalUint64Parallel-32 0.1008n ± 1% 0.1018n ± 1% ~ (p=0.041 n=20) Int64-32 1.779n ± 1% 1.779n ± 1% ~ (p=0.410 n=20) Uint64-32 1.854n ± 2% 1.882n ± 1% ~ (p=0.044 n=20) GlobalIntN1000-32 3.140n ± 3% 3.115n ± 3% ~ (p=0.673 n=20) IntN1000-32 2.496n ± 1% 2.509n ± 1% ~ (p=0.171 n=20) Int64N1000-32 2.510n ± 2% 2.493n ± 1% ~ (p=0.804 n=20) Int64N1e8-32 2.471n ± 2% 2.521n ± 1% +1.98% (p=0.003 n=20) Int64N1e9-32 2.488n ± 2% 2.506n ± 1% ~ (p=0.663 n=20) Int64N2e9-32 2.478n ± 2% 2.482n ± 2% ~ (p=0.533 n=20) Int64N1e18-32 3.088n ± 1% 3.216n ± 1% +4.15% (p=0.000 n=20) Int64N2e18-32 3.493n ± 1% 3.635n ± 2% +4.05% (p=0.000 n=20) Int64N4e18-32 5.060n ± 2% 5.122n ± 1% +1.22% (p=0.000 n=20) Int32N1000-32 2.620n ± 1% 2.672n ± 1% +2.00% (p=0.002 n=20) Int32N1e8-32 2.652n ± 0% 2.646n ± 1% ~ (p=0.743 n=20) Int32N1e9-32 2.644n ± 1% 2.660n ± 2% ~ (p=0.163 n=20) Int32N2e9-32 2.619n ± 2% 2.652n ± 1% ~ (p=0.132 n=20) Float32-32 2.261n ± 1% 2.267n ± 1% ~ (p=0.516 n=20) Float64-32 2.241n ± 2% 2.276n ± 1% ~ (p=0.080 n=20) ExpFloat64-32 3.716n ± 1% 3.779n ± 1% +1.68% (p=0.007 n=20) NormFloat64-32 3.718n ± 1% 3.747n ± 1% ~ (p=0.011 n=20) Perm3-32 34.11n ± 2% 34.23n ± 2% ~ (p=0.779 n=20) Perm30-32 200.6n ± 0% 202.3n ± 2% ~ (p=0.055 n=20) Perm30ViaShuffle-32 109.7n ± 1% 115.5n ± 2% +5.34% (p=0.000 n=20) ShuffleOverhead-32 107.2n ± 1% 113.3n ± 1% +5.74% (p=0.000 n=20) Concurrent-32 2.108n ± 6% 2.107n ± 1% ~ (p=0.448 n=20) goos: darwin goarch: arm64 pkg: math/rand/v2 cpu: Apple M1 │ afa459a2f0.arm64 │ bbb48afeb7.arm64 │ │ sec/op │ sec/op vs base │ PCG_DXSM-8 2.531n ± 0% 2.529n ± 0% ~ (p=0.586 n=20) ChaCha8-8 2.480n ± 0% SourceUint64-8 2.531n ± 0% 2.534n ± 0% ~ (p=0.227 n=20) GlobalInt64-8 2.177n ± 1% 2.173n ± 1% ~ (p=0.733 n=20) GlobalInt64Parallel-8 0.4319n ± 0% 0.4304n ± 0% -0.32% (p=0.003 n=20) GlobalUint64-8 2.185n ± 1% 2.185n ± 0% ~ (p=0.541 n=20) GlobalUint64Parallel-8 0.4295n ± 1% 0.4294n ± 0% ~ (p=0.203 n=20) Int64-8 4.104n ± 0% 4.107n ± 0% ~ (p=0.193 n=20) Uint64-8 4.080n ± 0% 4.081n ± 0% ~ (p=0.053 n=20) GlobalIntN1000-8 2.814n ± 1% 2.814n ± 0% ~ (p=0.879 n=20) IntN1000-8 4.140n ± 0% 4.141n ± 0% ~ (p=0.428 n=20) Int64N1000-8 4.139n ± 0% 4.140n ± 0% ~ (p=0.114 n=20) Int64N1e8-8 4.140n ± 0% 4.140n ± 0% ~ (p=0.898 n=20) Int64N1e9-8 4.139n ± 0% 4.140n ± 0% ~ (p=0.593 n=20) Int64N2e9-8 4.140n ± 0% 4.139n ± 0% ~ (p=0.158 n=20) Int64N1e18-8 5.273n ± 0% 5.274n ± 0% ~ (p=0.308 n=20) Int64N2e18-8 6.059n ± 0% 6.058n ± 0% ~ (p=0.053 n=20) Int64N4e18-8 8.803n ± 0% 8.800n ± 0% ~ (p=0.673 n=20) Int32N1000-8 4.131n ± 0% 4.131n ± 0% ~ (p=0.342 n=20) Int32N1e8-8 4.131n ± 0% 4.131n ± 0% ~ (p=0.091 n=20) Int32N1e9-8 4.131n ± 0% 4.131n ± 0% ~ (p=0.273 n=20) Int32N2e9-8 4.131n ± 0% 4.131n ± 0% ~ (p=0.425 n=20) Float32-8 4.110n ± 0% 4.112n ± 0% ~ (p=0.203 n=20) Float64-8 4.104n ± 0% 4.106n ± 0% ~ (p=0.409 n=20) ExpFloat64-8 5.338n ± 0% 5.339n ± 0% ~ (p=0.037 n=20) NormFloat64-8 5.731n ± 0% 5.733n ± 0% ~ (p=0.692 n=20) Perm3-8 26.62n ± 0% 26.65n ± 0% +0.09% (p=0.000 n=20) Perm30-8 194.6n ± 2% 194.9n ± 0% ~ (p=0.141 n=20) Perm30ViaShuffle-8 156.4n ± 0% 156.5n ± 0% +0.06% (p=0.000 n=20) ShuffleOverhead-8 125.8n ± 0% 125.0n ± 0% -0.64% (p=0.000 n=20) Concurrent-8 2.654n ± 6% 2.441n ± 6% -8.06% (p=0.009 n=20) goos: linux goarch: 386 pkg: math/rand/v2 cpu: AMD Ryzen 9 7950X 16-Core Processor │ afa459a2f0.386 │ bbb48afeb7.386 │ │ sec/op │ sec/op vs base │ PCG_DXSM-32 7.793n ± 2% 7.647n ± 1% ~ (p=0.021 n=20) ChaCha8-32 11.48n ± 2% SourceUint64-32 7.680n ± 1% 7.714n ± 1% ~ (p=0.713 n=20) GlobalInt64-32 3.474n ± 3% 3.491n ± 28% ~ (p=0.337 n=20) GlobalInt64Parallel-32 0.3253n ± 0% 0.3194n ± 0% -1.81% (p=0.000 n=20) GlobalUint64-32 3.433n ± 2% 3.610n ± 2% +5.14% (p=0.000 n=20) GlobalUint64Parallel-32 0.3156n ± 0% 0.3164n ± 0% ~ (p=0.073 n=20) Int64-32 7.707n ± 1% 7.824n ± 0% +1.52% (p=0.005 n=20) Uint64-32 7.714n ± 1% 7.732n ± 2% ~ (p=0.441 n=20) GlobalIntN1000-32 6.236n ± 1% 6.176n ± 2% ~ (p=0.499 n=20) IntN1000-32 10.41n ± 1% 10.31n ± 2% ~ (p=0.782 n=20) Int64N1000-32 10.97n ± 2% 11.22n ± 2% +2.19% (p=0.002 n=20) Int64N1e8-32 10.98n ± 1% 11.07n ± 1% ~ (p=0.056 n=20) Int64N1e9-32 10.95n ± 0% 11.15n ± 2% ~ (p=0.016 n=20) Int64N2e9-32 11.11n ± 1% 11.00n ± 1% ~ (p=0.654 n=20) Int64N1e18-32 15.18n ± 2% 14.97n ± 2% ~ (p=0.387 n=20) Int64N2e18-32 15.61n ± 1% 15.91n ± 1% +1.92% (p=0.003 n=20) Int64N4e18-32 19.23n ± 2% 18.98n ± 1% ~ (p=1.000 n=20) Int32N1000-32 10.35n ± 1% 10.31n ± 2% ~ (p=0.081 n=20) Int32N1e8-32 10.33n ± 1% 10.38n ± 1% ~ (p=0.335 n=20) Int32N1e9-32 10.35n ± 1% 10.37n ± 1% ~ (p=0.497 n=20) Int32N2e9-32 10.35n ± 1% 10.41n ± 1% ~ (p=0.605 n=20) Float32-32 13.57n ± 1% 13.78n ± 2% ~ (p=0.047 n=20) Float64-32 22.95n ± 4% 23.43n ± 3% ~ (p=0.218 n=20) ExpFloat64-32 15.23n ± 2% 15.46n ± 1% ~ (p=0.095 n=20) NormFloat64-32 13.78n ± 1% 13.73n ± 2% ~ (p=0.031 n=20) Perm3-32 46.62n ± 2% 47.46n ± 2% +1.82% (p=0.004 n=20) Perm30-32 400.7n ± 1% 403.5n ± 1% ~ (p=0.098 n=20) Perm30ViaShuffle-32 350.5n ± 1% 348.1n ± 2% ~ (p=0.703 n=20) ShuffleOverhead-32 326.0n ± 2% 326.2n ± 2% ~ (p=0.440 n=20) Concurrent-32 3.290n ± 0% 3.297n ± 4% ~ (p=0.189 n=20) For #61716. Change-Id: Id2a7e1c1db0beb81f563faaefba65fe292497269 Reviewed-on: https://go-review.googlesource.com/c/go/+/516859 LUCI-TryBot-Result: Go LUCI Reviewed-by: Filippo Valsorda Reviewed-by: Heschi Kreinick --- api/next/61716.txt | 6 + src/go/build/deps_test.go | 13 +- src/internal/chacha8rand/chacha8.go | 175 +++++++ src/internal/chacha8rand/chacha8_amd64.s | 177 +++++++ src/internal/chacha8rand/chacha8_arm64.s | 106 ++++ src/internal/chacha8rand/chacha8_generic.go | 222 ++++++++ src/internal/chacha8rand/chacha8_stub.s | 12 + src/internal/chacha8rand/export_test.go | 8 + src/internal/chacha8rand/rand_test.go | 186 +++++++ src/math/rand/v2/chacha8.go | 46 ++ src/math/rand/v2/chacha8_test.go | 531 ++++++++++++++++++++ 11 files changed, 1479 insertions(+), 3 deletions(-) create mode 100644 src/internal/chacha8rand/chacha8.go create mode 100644 src/internal/chacha8rand/chacha8_amd64.s create mode 100644 src/internal/chacha8rand/chacha8_arm64.s create mode 100644 src/internal/chacha8rand/chacha8_generic.go create mode 100644 src/internal/chacha8rand/chacha8_stub.s create mode 100644 src/internal/chacha8rand/export_test.go create mode 100644 src/internal/chacha8rand/rand_test.go create mode 100644 src/math/rand/v2/chacha8.go create mode 100644 src/math/rand/v2/chacha8_test.go diff --git a/api/next/61716.txt b/api/next/61716.txt index 05b9bb8429..30036799e6 100644 --- a/api/next/61716.txt +++ b/api/next/61716.txt @@ -9,6 +9,7 @@ pkg math/rand/v2, func Int64N(int64) int64 #61716 pkg math/rand/v2, func IntN(int) int #61716 pkg math/rand/v2, func N[$0 intType]($0) $0 #61716 pkg math/rand/v2, func New(Source) *Rand #61716 +pkg math/rand/v2, func NewChaCha8([32]uint8) *ChaCha8 #61716 pkg math/rand/v2, func NewPCG(uint64, uint64) *PCG #61716 pkg math/rand/v2, func NewZipf(*Rand, float64, float64, uint64) *Zipf #61716 pkg math/rand/v2, func NormFloat64() float64 #61716 @@ -19,6 +20,10 @@ pkg math/rand/v2, func Uint32N(uint32) uint32 #61716 pkg math/rand/v2, func Uint64() uint64 #61716 pkg math/rand/v2, func Uint64N(uint64) uint64 #61716 pkg math/rand/v2, func UintN(uint) uint #61716 +pkg math/rand/v2, method (*ChaCha8) MarshalBinary() ([]uint8, error) #61716 +pkg math/rand/v2, method (*ChaCha8) Seed([32]uint8) #61716 +pkg math/rand/v2, method (*ChaCha8) Uint64() uint64 #61716 +pkg math/rand/v2, method (*ChaCha8) UnmarshalBinary([]uint8) error #61716 pkg math/rand/v2, method (*PCG) MarshalBinary() ([]uint8, error) #61716 pkg math/rand/v2, method (*PCG) Seed(uint64, uint64) #61716 pkg math/rand/v2, method (*PCG) Uint64() uint64 #61716 @@ -41,6 +46,7 @@ pkg math/rand/v2, method (*Rand) Uint64() uint64 #61716 pkg math/rand/v2, method (*Rand) Uint64N(uint64) uint64 #61716 pkg math/rand/v2, method (*Rand) UintN(uint) uint #61716 pkg math/rand/v2, method (*Zipf) Uint64() uint64 #61716 +pkg math/rand/v2, type ChaCha8 struct #61716 pkg math/rand/v2, type PCG struct #61716 pkg math/rand/v2, type Rand struct #61716 pkg math/rand/v2, type Source interface { Uint64 } #61716 diff --git a/src/go/build/deps_test.go b/src/go/build/deps_test.go index 3d54fc7aac..e3863eea46 100644 --- a/src/go/build/deps_test.go +++ b/src/go/build/deps_test.go @@ -55,10 +55,17 @@ var depsRules = ` unsafe < maps; + unsafe < internal/chacha8rand; + # RUNTIME is the core runtime group of packages, all of them very light-weight. - internal/abi, internal/cpu, internal/goarch, - internal/coverage/rtcov, internal/godebugs, internal/goexperiment, - internal/goos, unsafe + internal/abi, + internal/chacha8rand, + internal/coverage/rtcov, + internal/cpu, + internal/goarch, + internal/godebugs, + internal/goexperiment, + internal/goos < internal/bytealg < internal/itoa < internal/unsafeheader diff --git a/src/internal/chacha8rand/chacha8.go b/src/internal/chacha8rand/chacha8.go new file mode 100644 index 0000000000..196e3ca3dc --- /dev/null +++ b/src/internal/chacha8rand/chacha8.go @@ -0,0 +1,175 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package chacha8rand implements a pseudorandom generator +// based on ChaCha8. It is used by both runtime and math/rand/v2 +// and must have no dependencies. +package chacha8rand + +import "unsafe" + +const ( + ctrInc = 4 // increment counter by 4 between block calls + ctrMax = 16 // reseed when counter reaches 16 + chunk = 32 // each chunk produced by block is 32 uint64s + reseed = 4 // reseed with 4 words +) + +// block is the chacha8rand block function. +func block(seed *[4]uint64, blocks *[32]uint64, counter uint32) + +// A State holds the state for a single random generator. +// It must be used from one goroutine at a time. +// If used by multiple goroutines at a time, the goroutines +// may see the same random values, but the code will not +// crash or cause out-of-bounds memory accesses. +type State struct { + buf [32]uint64 + seed [4]uint64 + i uint32 + n uint32 + c uint32 +} + +// Next returns the next random value, along with a boolean +// indicating whether one was available. +// If one is not available, the caller should call Refill +// and then repeat the call to Next. +// +// Next is //go:nosplit to allow its use in the runtime +// with per-m data without holding the per-m lock. +//go:nosplit +func (s *State) Next() (uint64, bool) { + i := s.i + if i >= s.n { + return 0, false + } + s.i = i + 1 + return s.buf[i&31], true // i&31 eliminates bounds check +} + +// Init seeds the State with the given seed value. +func (s *State) Init(seed [32]byte) { + s.Init64(*(*[4]uint64)(unsafe.Pointer(&seed))) +} + +// Init64 seeds the state with the given seed value. +func (s *State) Init64(seed [4]uint64) { + s.seed = seed + block(&s.seed, &s.buf, 0) + s.c = 0 + s.i = 0 + s.n = chunk +} + +// Refill refills the state with more random values. +// After a call to Refill, an immediate call to Next will succeed +// (unless multiple goroutines are incorrectly sharing a state). +func (s *State) Refill() { + s.c += ctrInc + if s.c == ctrMax { + // Reseed with generated uint64s for forward secrecy. + // Normally this is done immediately after computing a block, + // but we do it immediately before computing the next block, + // to allow a much smaller serialized state (just the seed plus offset). + // This gives a delayed benefit for the forward secrecy + // (you can reconstruct the recent past given a memory dump), + // which we deem acceptable in exchange for the reduced size. + s.seed[0] = s.buf[len(s.buf)-reseed+0] + s.seed[1] = s.buf[len(s.buf)-reseed+1] + s.seed[2] = s.buf[len(s.buf)-reseed+2] + s.seed[3] = s.buf[len(s.buf)-reseed+3] + s.c = 0 + } + block(&s.seed, &s.buf, s.c) + s.i = 0 + s.n = uint32(len(s.buf)) + if s.c == ctrMax-ctrInc { + s.n = uint32(len(s.buf)) - reseed + } +} + +// Marshal marshals the state into a byte slice. +// Marshal and Unmarshal are functions, not methods, +// so that they will not be linked into the runtime +// when it uses the State struct, since the runtime +// does not need these. +func Marshal(s *State) []byte { + data := make([]byte, 6*8) + copy(data, "chacha8:") + used := (s.c/ctrInc)*chunk + s.i + bePutUint64(data[1*8:], uint64(used)) + for i, seed := range s.seed { + lePutUint64(data[(2+i)*8:], seed) + } + return data +} + +type errUnmarshalChaCha8 struct{} + +func (*errUnmarshalChaCha8) Error() string { + return "invalid ChaCha8 encoding" +} + +// Unmarshal unmarshals the state from a byte slice. +func Unmarshal(s *State, data []byte) error { + if len(data) != 6*8 || string(data[:8]) != "chacha8:" { + return new(errUnmarshalChaCha8) + } + used := beUint64(data[1*8:]) + if used > (ctrMax/ctrInc)*chunk-reseed { + return new(errUnmarshalChaCha8) + } + for i := range s.seed { + s.seed[i] = leUint64(data[(2+i)*8:]) + } + s.c = ctrInc * (uint32(used) / chunk) + block(&s.seed, &s.buf, s.c) + s.i = uint32(used) % chunk + s.n = chunk + if s.c == ctrMax-ctrInc { + s.n = chunk - reseed + } + return nil +} + +// binary.bigEndian.Uint64, copied to avoid dependency +func beUint64(b []byte) uint64 { + _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 | + uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56 +} + +// binary.bigEndian.PutUint64, copied to avoid dependency +func bePutUint64(b []byte, v uint64) { + _ = b[7] // early bounds check to guarantee safety of writes below + b[0] = byte(v >> 56) + b[1] = byte(v >> 48) + b[2] = byte(v >> 40) + b[3] = byte(v >> 32) + b[4] = byte(v >> 24) + b[5] = byte(v >> 16) + b[6] = byte(v >> 8) + b[7] = byte(v) +} + +// binary.littleEndian.Uint64, copied to avoid dependency +func leUint64(b []byte) uint64 { + _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | + uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 +} + +// binary.littleEndian.PutUint64, copied to avoid dependency +func lePutUint64(b []byte, v uint64) { + _ = b[7] // early bounds check to guarantee safety of writes below + b[0] = byte(v) + b[1] = byte(v >> 8) + b[2] = byte(v >> 16) + b[3] = byte(v >> 24) + b[4] = byte(v >> 32) + b[5] = byte(v >> 40) + b[6] = byte(v >> 48) + b[7] = byte(v >> 56) +} diff --git a/src/internal/chacha8rand/chacha8_amd64.s b/src/internal/chacha8rand/chacha8_amd64.s new file mode 100644 index 0000000000..cadd516c09 --- /dev/null +++ b/src/internal/chacha8rand/chacha8_amd64.s @@ -0,0 +1,177 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include "textflag.h" + +// ChaCha8 is ChaCha with 8 rounds. +// See https://cr.yp.to/chacha/chacha-20080128.pdf. +// See chacha8_generic.go for additional details. + +// ROL rotates the uint32s in register R left by N bits, using temporary T. +#define ROL(N, R, T) \ + MOVO R, T; PSLLL $(N), T; PSRLL $(32-(N)), R; PXOR T, R + +// ROL16 rotates the uint32s in register R left by 16, using temporary T if needed. +#ifdef GOAMD64_v2 +#define ROL16(R, T) PSHUFB ·rol16<>(SB), R +#else +#define ROL16(R, T) ROL(16, R, T) +#endif + +// ROL8 rotates the uint32s in register R left by 8, using temporary T if needed. +#ifdef GOAMD64_v2 +#define ROL8(R, T) PSHUFB ·rol8<>(SB), R +#else +#define ROL8(R, T) ROL(8, R, T) +#endif + +// QR is the ChaCha quarter-round on A, B, C, and D. T is an available temporary. +#define QR(A, B, C, D, T) \ + PADDD B, A; PXOR A, D; ROL16(D, T); \ + PADDD D, C; PXOR C, B; MOVO B, T; PSLLL $12, T; PSRLL $20, B; PXOR T, B; \ + PADDD B, A; PXOR A, D; ROL8(D, T); \ + PADDD D, C; PXOR C, B; MOVO B, T; PSLLL $7, T; PSRLL $25, B; PXOR T, B + +// REPLREG replicates the register R into 4 uint32s in XR. +#define REPLREG(R, XR) \ + MOVQ R, XR; \ + PSHUFD $0, XR, XR + +// REPL replicates the uint32 constant val into 4 uint32s in XR. It smashes DX. +#define REPL(val, XR) \ + MOVL $val, DX; \ + REPLREG(DX, XR) + +// SEED copies the off'th uint32 of the seed into the register XR, +// replicating it into all four stripes of the register. +#define SEED(off, reg, XR) \ + MOVL (4*off)(AX), reg; \ + REPLREG(reg, XR) \ + +// block runs 4 ChaCha8 block transformations in the four stripes of the X registers. + +// func block(seed *[8]uint32, blocks *[16][4]uint32, counter uint32) +TEXT ·block(SB), NOSPLIT, $16 + // seed in AX + // blocks in BX + // counter in CX + MOVQ seed+0(FP), AX + MOVQ blocks+8(FP), BX + MOVL counter+16(FP), CX + + // Load initial constants into top row. + REPL(0x61707865, X0) + REPL(0x3320646e, X1) + REPL(0x79622d32, X2) + REPL(0x6b206574, X3) + + // Load counter into bottom left cell. + // Each stripe gets a different counter: 0, 1, 2, 3. + // (PINSRD is not available in GOAMD64_v1, + // so just do it in memory on all systems. + // This is not on the critical path.) + MOVL CX, 0(SP) + INCL CX + MOVL CX, 4(SP) + INCL CX + MOVL CX, 8(SP) + INCL CX + MOVL CX, 12(SP) + MOVOU 0(SP), X12 + + // Load seed words into next two rows and into DI, SI, R8..R13 + SEED(0, DI, X4) + SEED(1, SI, X5) + SEED(2, R8, X6) + SEED(3, R9, X7) + SEED(4, R10, X8) + SEED(5, R11, X9) + SEED(6, R12, X10) + SEED(7, R13, X11) + + // Zeros for remaining two matrix entries. + // We have just enough XMM registers to hold the state, + // without one for the temporary, so we flush and restore + // some values to and from memory to provide a temporary. + // The initial temporary is X15, so zero its memory instead + // of X15 itself. + MOVL $0, DX + MOVQ DX, X13 + MOVQ DX, X14 + MOVOU X14, (15*16)(BX) + + // 4 iterations. Each iteration is 8 quarter-rounds. + MOVL $4, DX +loop: + QR(X0, X4, X8, X12, X15) + MOVOU X4, (4*16)(BX) // save X4 + QR(X1, X5, X9, X13, X15) + MOVOU (15*16)(BX), X15 // reload X15; temp now X4 + QR(X2, X6, X10, X14, X4) + QR(X3, X7, X11, X15, X4) + + QR(X0, X5, X10, X15, X4) + MOVOU X15, (15*16)(BX) // save X15 + QR(X1, X6, X11, X12, X4) + MOVOU (4*16)(BX), X4 // reload X4; temp now X15 + QR(X2, X7, X8, X13, X15) + QR(X3, X4, X9, X14, X15) + + DECL DX + JNZ loop + + // Store interlaced blocks back to output buffer, + // adding original seed along the way. + + // First the top and bottom rows. + MOVOU X0, (0*16)(BX) + MOVOU X1, (1*16)(BX) + MOVOU X2, (2*16)(BX) + MOVOU X3, (3*16)(BX) + MOVOU X12, (12*16)(BX) + MOVOU X13, (13*16)(BX) + MOVOU X14, (14*16)(BX) + // X15 has already been stored. + + // Now we have X0-X3, X12-X15 available for temporaries. + // Add seed rows back to output. We left seed in DI, SI, R8..R13 above. + REPLREG(DI, X0) + REPLREG(SI, X1) + REPLREG(R8, X2) + REPLREG(R9, X3) + REPLREG(R10, X12) + REPLREG(R11, X13) + REPLREG(R12, X14) + REPLREG(R13, X15) + PADDD X0, X4 + PADDD X1, X5 + PADDD X2, X6 + PADDD X3, X7 + PADDD X12, X8 + PADDD X13, X9 + PADDD X14, X10 + PADDD X15, X11 + MOVOU X4, (4*16)(BX) + MOVOU X5, (5*16)(BX) + MOVOU X6, (6*16)(BX) + MOVOU X7, (7*16)(BX) + MOVOU X8, (8*16)(BX) + MOVOU X9, (9*16)(BX) + MOVOU X10, (10*16)(BX) + MOVOU X11, (11*16)(BX) + + MOVL $0, AX + MOVQ AX, X15 // must be 0 on return + + RET + +// rotate left 16 indexes for PSHUFB +GLOBL ·rol16<>(SB), NOPTR|RODATA, $16 +DATA ·rol16<>+0(SB)/8, $0x0504070601000302 +DATA ·rol16<>+8(SB)/8, $0x0D0C0F0E09080B0A + +// rotate left 8 indexes for PSHUFB +GLOBL ·rol8<>(SB), NOPTR|RODATA, $16 +DATA ·rol8<>+0(SB)/8, $0x0605040702010003 +DATA ·rol8<>+8(SB)/8, $0x0E0D0C0F0A09080B diff --git a/src/internal/chacha8rand/chacha8_arm64.s b/src/internal/chacha8rand/chacha8_arm64.s new file mode 100644 index 0000000000..4f36a7021c --- /dev/null +++ b/src/internal/chacha8rand/chacha8_arm64.s @@ -0,0 +1,106 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include "textflag.h" + +// QR is the ChaCha quarter-round on A, B, C, and D. +// V30 is used as a temporary, and V31 is assumed to +// hold the index table for rotate left 8. +#define QR(A, B, C, D) \ + VADD A.S4, B.S4, A.S4; VEOR D.B16, A.B16, D.B16; VREV32 D.H8, D.H8; \ + VADD C.S4, D.S4, C.S4; VEOR B.B16, C.B16, V30.B16; VSHL $12, V30.S4, B.S4; VSRI $20, V30.S4, B.S4 \ + VADD A.S4, B.S4, A.S4; VEOR D.B16, A.B16, D.B16; VTBL V31.B16, [D.B16], D.B16; \ + VADD C.S4, D.S4, C.S4; VEOR B.B16, C.B16, V30.B16; VSHL $7, V30.S4, B.S4; VSRI $25, V30.S4, B.S4 + +// block runs 4 ChaCha8 block transformations in the four stripes of the V registers. + +// func block(seed *[8]uint32, blocks *[4][16]uint32, counter uint32) +TEXT ·block(SB), NOSPLIT, $16 + // seed in R0 + // blocks in R1 + MOVD seed+0(FP), R0 + MOVD blocks+8(FP), R1 + MOVW counter+16(FP), R2 + + // Load initial constants into top row. + MOVD $·chachaConst(SB), R10 + VLD4R (R10), [V0.S4, V1.S4, V2.S4, V3.S4] + + // Load increment and rotate 8 constants into V30, V31. + MOVD $·chachaIncRot(SB), R11 + VLD1 (R11), [V30.S4, V31.S4] + + VLD4R.P 16(R0), [V4.S4, V5.S4, V6.S4, V7.S4] + VLD4R.P 16(R0), [V8.S4, V9.S4, V10.S4, V11.S4] + + // store counter to memory to replicate its uint32 halfs back out + MOVW R2, 0(RSP) + VLD1R 0(RSP), [V12.S4] + + // Add 0, 1, 2, 3 to counter stripes. + VADD V30.S4, V12.S4, V12.S4 + + // Zeros for remaining two matrix entries. + VEOR V13.B16, V13.B16, V13.B16 + VEOR V14.B16, V14.B16, V14.B16 + VEOR V15.B16, V15.B16, V15.B16 + + // Save seed state for adding back later. + VMOV V4.B16, V20.B16 + VMOV V5.B16, V21.B16 + VMOV V6.B16, V22.B16 + VMOV V7.B16, V23.B16 + VMOV V8.B16, V24.B16 + VMOV V9.B16, V25.B16 + VMOV V10.B16, V26.B16 + VMOV V11.B16, V27.B16 + + // 4 iterations. Each iteration is 8 quarter-rounds. + MOVD $4, R0 +loop: + QR(V0, V4, V8, V12) + QR(V1, V5, V9, V13) + QR(V2, V6, V10, V14) + QR(V3, V7, V11, V15) + + QR(V0, V5, V10, V15) + QR(V1, V6, V11, V12) + QR(V2, V7, V8, V13) + QR(V3, V4, V9, V14) + + SUB $1, R0 + CBNZ R0, loop + + // Add seed back. + VADD V4.S4, V20.S4, V4.S4 + VADD V5.S4, V21.S4, V5.S4 + VADD V6.S4, V22.S4, V6.S4 + VADD V7.S4, V23.S4, V7.S4 + VADD V8.S4, V24.S4, V8.S4 + VADD V9.S4, V25.S4, V9.S4 + VADD V10.S4, V26.S4, V10.S4 + VADD V11.S4, V27.S4, V11.S4 + + // Store interlaced blocks back to output buffer. + VST1.P [ V0.B16, V1.B16, V2.B16, V3.B16], 64(R1) + VST1.P [ V4.B16, V5.B16, V6.B16, V7.B16], 64(R1) + VST1.P [ V8.B16, V9.B16, V10.B16, V11.B16], 64(R1) + VST1.P [V12.B16, V13.B16, V14.B16, V15.B16], 64(R1) + RET + +GLOBL ·chachaConst(SB), NOPTR|RODATA, $32 +DATA ·chachaConst+0x00(SB)/4, $0x61707865 +DATA ·chachaConst+0x04(SB)/4, $0x3320646e +DATA ·chachaConst+0x08(SB)/4, $0x79622d32 +DATA ·chachaConst+0x0c(SB)/4, $0x6b206574 + +GLOBL ·chachaIncRot(SB), NOPTR|RODATA, $32 +DATA ·chachaIncRot+0x00(SB)/4, $0x00000000 +DATA ·chachaIncRot+0x04(SB)/4, $0x00000001 +DATA ·chachaIncRot+0x08(SB)/4, $0x00000002 +DATA ·chachaIncRot+0x0c(SB)/4, $0x00000003 +DATA ·chachaIncRot+0x10(SB)/4, $0x02010003 +DATA ·chachaIncRot+0x14(SB)/4, $0x06050407 +DATA ·chachaIncRot+0x18(SB)/4, $0x0A09080B +DATA ·chachaIncRot+0x1c(SB)/4, $0x0E0D0C0F diff --git a/src/internal/chacha8rand/chacha8_generic.go b/src/internal/chacha8rand/chacha8_generic.go new file mode 100644 index 0000000000..4e99111850 --- /dev/null +++ b/src/internal/chacha8rand/chacha8_generic.go @@ -0,0 +1,222 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// ChaCha8 is ChaCha with 8 rounds. +// See https://cr.yp.to/chacha/chacha-20080128.pdf. +// +// ChaCha8 operates on a 4x4 matrix of uint32 values, initially set to: +// +// const1 const2 const3 const4 +// seed seed seed seed +// seed seed seed seed +// counter64 0 0 +// +// We use the same constants as ChaCha20 does, a random seed, +// and a counter. Running ChaCha8 on this input produces +// a 4x4 matrix of pseudo-random values with as much entropy +// as the seed. +// +// Given SIMD registers that can hold N uint32s, it is possible +// to run N ChaCha8 block transformations in parallel by filling +// the first register with the N copies of const1, the second +// with N copies of const2, and so on, and then running the operations. +// +// Each iteration of ChaCha8Rand operates over 32 bytes of input and +// produces 992 bytes of RNG output, plus 32 bytes of input for the next +// iteration. +// +// The 32 bytes of input are used as a ChaCha8 key, with a zero nonce, to +// produce 1024 bytes of output (16 blocks, with counters 0 to 15). +// First, for each block, the values 0x61707865, 0x3320646e, 0x79622d32, +// 0x6b206574 are subtracted from the 32-bit little-endian words at +// position 0, 1, 2, and 3 respectively, and an increasing counter +// starting at zero is subtracted from each word at position 12. Then, +// this stream is permuted such that for each sequence of four blocks, +// first we output the first four bytes of each block, then the next four +// bytes of each block, and so on. Finally, the last 32 bytes of output +// are used as the input of the next iteration, and the remaining 992 +// bytes are the RNG output. +// +// See https://github.com/C2SP/C2SP/blob/main/chacha8rand/chacha8rand.md +// for additional details. +// +// Normal ChaCha20 implementations for encryption use this same +// parallelism but then have to deinterlace the results so that +// it appears the blocks were generated separately. For the purposes +// of generating random numbers, the interlacing is fine. +// We are simply locked in to preserving the 4-way interlacing +// in any future optimizations. +package chacha8rand + +import ( + "unsafe" +) + +// setup sets up 4 ChaCha8 blocks in b32 with the counter and seed. +// Note that b32 is [16][4]uint32 not [4][16]uint32: the blocks are interlaced +// the same way they would be in a 4-way SIMD implementations. +func setup(seed *[8]uint32, b32 *[16][4]uint32, counter uint32) { + // Convert to uint64 to do half as many stores to memory. + b := (*[16][2]uint64)(unsafe.Pointer(b32)) + + // Constants; same as in ChaCha20: "expand 32-byte k" + b[0][0] = 0x61707865_61707865 + b[0][1] = 0x61707865_61707865 + + b[1][0] = 0x3320646e_3320646e + b[1][1] = 0x3320646e_3320646e + + b[2][0] = 0x79622d32_79622d32 + b[2][1] = 0x79622d32_79622d32 + + b[3][0] = 0x6b206574_6b206574 + b[3][1] = 0x6b206574_6b206574 + + // Seed values. + var x64 uint64 + var x uint32 + + x = seed[0] + x64 = uint64(x)<<32 | uint64(x) + b[4][0] = x64 + b[4][1] = x64 + + x = seed[1] + x64 = uint64(x)<<32 | uint64(x) + b[5][0] = x64 + b[5][1] = x64 + + x = seed[2] + x64 = uint64(x)<<32 | uint64(x) + b[6][0] = x64 + b[6][1] = x64 + + x = seed[3] + x64 = uint64(x)<<32 | uint64(x) + b[7][0] = x64 + b[7][1] = x64 + + x = seed[4] + x64 = uint64(x)<<32 | uint64(x) + b[8][0] = x64 + b[8][1] = x64 + + x = seed[5] + x64 = uint64(x)<<32 | uint64(x) + b[9][0] = x64 + b[9][1] = x64 + + x = seed[6] + x64 = uint64(x)<<32 | uint64(x) + b[10][0] = x64 + b[10][1] = x64 + + x = seed[7] + x64 = uint64(x)<<32 | uint64(x) + b[11][0] = x64 + b[11][1] = x64 + + // Counters. + b[12][0] = uint64(counter+0) | uint64(counter+1)<<32 + b[12][1] = uint64(counter+2) | uint64(counter+3)<<32 + + // Zeros. + b[13][0] = 0 + b[13][1] = 0 + b[14][0] = 0 + b[14][1] = 0 + + b[15][0] = 0 + b[15][1] = 0 +} + +func _() { + // block and block_generic must have same type + x := block + x = block_generic + _ = x +} + +// block_generic is the non-assembly block implementation, +// for use on systems without special assembly. +// Even on such systems, it is quite fast: on GOOS=386, +// ChaCha8 using this code generates random values faster than PCG-DXSM. +func block_generic(seedW *[4]uint64, buf *[32]uint64, counter uint32) { + seed := (*[8]uint32)(unsafe.Pointer(seedW)) + b := (*[16][4]uint32)(unsafe.Pointer(buf)) + + setup(seed, b, counter) + + for i := range b[0] { + // Load block i from b[*][i] into local variables. + b0 := b[0][i] + b1 := b[1][i] + b2 := b[2][i] + b3 := b[3][i] + b4 := b[4][i] + b5 := b[5][i] + b6 := b[6][i] + b7 := b[7][i] + b8 := b[8][i] + b9 := b[9][i] + b10 := b[10][i] + b11 := b[11][i] + b12 := b[12][i] + b13 := b[13][i] + b14 := b[14][i] + b15 := b[15][i] + + // 4 iterations of eight quarter-rounds each is 8 rounds + for round := 0; round < 4; round++ { + b0, b4, b8, b12 = qr(b0, b4, b8, b12) + b1, b5, b9, b13 = qr(b1, b5, b9, b13) + b2, b6, b10, b14 = qr(b2, b6, b10, b14) + b3, b7, b11, b15 = qr(b3, b7, b11, b15) + + b0, b5, b10, b15 = qr(b0, b5, b10, b15) + b1, b6, b11, b12 = qr(b1, b6, b11, b12) + b2, b7, b8, b13 = qr(b2, b7, b8, b13) + b3, b4, b9, b14 = qr(b3, b4, b9, b14) + } + + // Store block i back into b[*][i]. + // Add b4..b11 back to the original key material, + // like in ChaCha20, to avoid trivial invertibility. + // There is no entropy in b0..b3 and b12..b15 + // so we can skip the additions and save some time. + b[0][i] = b0 + b[1][i] = b1 + b[2][i] = b2 + b[3][i] = b3 + b[4][i] += b4 + b[5][i] += b5 + b[6][i] += b6 + b[7][i] += b7 + b[8][i] += b8 + b[9][i] += b9 + b[10][i] += b10 + b[11][i] += b11 + b[12][i] = b12 + b[13][i] = b13 + b[14][i] = b14 + b[15][i] = b15 + } +} + +// qr is the (inlinable) ChaCha8 quarter round. +func qr(a, b, c, d uint32) (_a, _b, _c, _d uint32) { + a += b + d ^= a + d = d<<16 | d>>16 + c += d + b ^= c + b = b<<12 | b>>20 + a += b + d ^= a + d = d<<8 | d>>24 + c += d + b ^= c + b = b<<7 | b>>25 + return a, b, c, d +} diff --git a/src/internal/chacha8rand/chacha8_stub.s b/src/internal/chacha8rand/chacha8_stub.s new file mode 100644 index 0000000000..09be558fcb --- /dev/null +++ b/src/internal/chacha8rand/chacha8_stub.s @@ -0,0 +1,12 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !amd64 && !arm64 + +#include "textflag.h" + +// func block(counter uint64, seed *[8]uint32, blocks *[16][4]uint32) +TEXT ·block(SB), NOSPLIT, $0 + JMP ·block_generic(SB) + diff --git a/src/internal/chacha8rand/export_test.go b/src/internal/chacha8rand/export_test.go new file mode 100644 index 0000000000..70478a45c3 --- /dev/null +++ b/src/internal/chacha8rand/export_test.go @@ -0,0 +1,8 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package chacha8rand + +var Block = block +var Block_generic = block_generic diff --git a/src/internal/chacha8rand/rand_test.go b/src/internal/chacha8rand/rand_test.go new file mode 100644 index 0000000000..0a6c876b47 --- /dev/null +++ b/src/internal/chacha8rand/rand_test.go @@ -0,0 +1,186 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package chacha8rand_test + +import ( + "bytes" + "fmt" + . "internal/chacha8rand" + "slices" + "testing" + "unsafe" +) + +func TestOutput(t *testing.T) { + var s State + s.Init(seed) + for i := range output { + for { + x, ok := s.Next() + if ok { + if x != output[i] { + t.Errorf("#%d: have %#x want %#x", i, x, output[i]) + } + break + } + s.Refill() + } + } +} + +func TestMarshal(t *testing.T) { + var s State + s.Init(seed) + for i := range output { + for { + b := Marshal(&s) + s = State{} + err := Unmarshal(&s, b) + if err != nil { + t.Fatalf("#%d: Unmarshal: %v", i, err) + } + x, ok := s.Next() + if ok { + if x != output[i] { + t.Fatalf("#%d: have %#x want %#x", i, x, output[i]) + } + break + } + s.Refill() + } + } +} + +func BenchmarkBlock(b *testing.B) { + var seed [4]uint64 + var blocks [32]uint64 + + for i := 0; i < b.N; i++ { + Block(&seed, &blocks, 0) + } + b.SetBytes(32 * 8) +} + +func TestBlockGeneric(t *testing.T) { + var b1, b2 [32]uint64 + seed := *(*[4]uint64)(unsafe.Pointer(&seed)) + + Block(&seed, &b1, 4) + Block_generic(&seed, &b2, 4) + if !slices.Equal(b1[:], b2[:]) { + var out bytes.Buffer + fmt.Fprintf(&out, "%-18s %-18s\n", "block", "block_generic") + for i := range b1 { + suffix := "" + if b1[i] != b2[i] { + suffix = " mismatch!" + } + fmt.Fprintf(&out, "%#016x %#016x%s\n", b1[i], b2[i], suffix) + } + t.Errorf("block and block_generic disagree:\n%s", out.String()) + } +} + +// Golden output test to make sure algorithm never changes, +// so that its use in math/rand/v2 stays stable. +// See https://github.com/C2SP/C2SP/blob/main/chacha8rand/chacha8rand.md + +var seed = [32]byte([]byte("ABCDEFGHIJKLMNOPQRSTUVWXYZ123456")) + +var output = []uint64{ + 0xb773b6063d4616a5, 0x1160af22a66abc3c, 0x8c2599d9418d287c, 0x7ee07e037edc5cd6, + 0xcfaa9ee02d1c16ad, 0x0e090eef8febea79, 0x3c82d271128b5b3e, 0x9c5addc11252a34f, + 0xdf79bb617d6ceea6, 0x36d553591f9d736a, 0xeef0d14e181ee01f, 0x089bfc760ae58436, + 0xd9e52b59cc2ad268, 0xeb2fb4444b1b8aba, 0x4f95c8a692c46661, 0xc3c6323217cae62c, + 0x91ebb4367f4e2e7e, 0x784cf2c6a0ec9bc6, 0x5c34ec5c34eabe20, 0x4f0a8f515570daa8, + 0xfc35dcb4113d6bf2, 0x5b0da44c645554bc, 0x6d963da3db21d9e1, 0xeeaefc3150e500f3, + 0x2d37923dda3750a5, 0x380d7a626d4bc8b0, 0xeeaf68ede3d7ee49, 0xf4356695883b717c, + 0x846a9021392495a4, 0x8e8510549630a61b, 0x18dc02545dbae493, 0x0f8f9ff0a65a3d43, + 0xccf065f7190ff080, 0xfd76d1aa39673330, 0x95d232936cba6433, 0x6c7456d1070cbd17, + 0x462acfdaff8c6562, 0x5bafab866d34fc6a, 0x0c862f78030a2988, 0xd39a83e407c3163d, + 0xc00a2b7b45f22ebf, 0x564307c62466b1a9, 0x257e0424b0c072d4, 0x6fb55e99496c28fe, + 0xae9873a88f5cd4e0, 0x4657362ac60d3773, 0x1c83f91ecdf23e8e, 0x6fdc0792c15387c0, + 0x36dad2a30dfd2b5c, 0xa4b593290595bdb7, 0x4de18934e4cc02c5, 0xcdc0d604f015e3a7, + 0xfba0dbf69ad80321, 0x60e8bea3d139de87, 0xd18a4d851ef48756, 0x6366447c2215f34a, + 0x05682e97d3d007ee, 0x4c0e8978c6d54ab2, 0xcf1e9f6a6712edc2, 0x061439414c80cfd3, + 0xd1a8b6e2745c0ead, 0x31a7918d45c410e8, 0xabcc61ad90216eec, 0x4040d92d2032a71a, + 0x3cd2f66ffb40cd68, 0xdcd051c07295857a, 0xeab55cbcd9ab527e, 0x18471dce781bdaac, + 0xf7f08cd144dc7252, 0x5804e0b13d7f40d1, 0x5cb1a446e4b2d35b, 0xe6d4a728d2138a06, + 0x05223e40ca60dad8, 0x2d61ec3206ac6a68, 0xab692356874c17b8, 0xc30954417676de1c, + 0x4f1ace3732225624, 0xfba9510813988338, 0x997f200f52752e11, 0x1116aaafe86221fa, + 0x07ce3b5cb2a13519, 0x2956bc72bc458314, 0x4188b7926140eb78, 0x56ca6dbfd4adea4d, + 0x7fe3c22349340ce5, 0x35c08f9c37675f8a, 0x11e1c7fbef5ed521, 0x98adc8464ec1bc75, + 0xd163b2c73d1203f8, 0x8c761ee043a2f3f3, 0x24b99d6accecd7b7, 0x793e31aa112f0370, + 0x8e87dc2a19285139, 0x4247ae04f7096e25, 0x514f3122926fe20f, 0xdc6fb3f045d2a7e9, + 0x15cb30cecdd18eba, 0xcbc7fdecf6900274, 0x3fb5c696dc8ba021, 0xd1664417c8d274e6, + 0x05f7e445ea457278, 0xf920bbca1b9db657, 0x0c1950b4da22cb99, 0xf875baf1af09e292, + 0xbed3d7b84250f838, 0xf198e8080fd74160, 0xc9eda51d9b7ea703, 0xf709ef55439bf8f6, + 0xd20c74feebf116fc, 0x305668eb146d7546, 0x829af3ec10d89787, 0x15b8f9697b551dbc, + 0xfc823c6c8e64b8c9, 0x345585e8183b40bc, 0x674b4171d6581368, 0x1234d81cd670e9f7, + 0x0e505210d8a55e19, 0xe8258d69eeeca0dc, 0x05d4c452e8baf67e, 0xe8dbe30116a45599, + 0x1cf08ce1b1176f00, 0xccf7d0a4b81ecb49, 0x303fea136b2c430e, 0x861d6c139c06c871, + 0x5f41df72e05e0487, 0x25bd7e1e1ae26b1d, 0xbe9f4004d662a41d, 0x65bf58d483188546, + 0xd1b27cff69db13cc, 0x01a6663372c1bb36, 0x578dd7577b727f4d, 0x19c78f066c083cf6, + 0xdbe014d4f9c391bb, 0x97fbb2dd1d13ffb3, 0x31c91e0af9ef8d4f, 0x094dfc98402a43ba, + 0x069bd61bea37b752, 0x5b72d762e8d986ca, 0x72ee31865904bc85, 0xd1f5fdc5cd36c33e, + 0xba9b4980a8947cad, 0xece8f05eac49ab43, 0x65fe1184abae38e7, 0x2d7cb9dea5d31452, + 0xcc71489476e467e3, 0x4c03a258a578c68c, 0x00efdf9ecb0fd8fc, 0x9924cad471e2666d, + 0x87f8668318f765e9, 0xcb4dc57c1b55f5d8, 0xd373835a86604859, 0xe526568b5540e482, + 0x1f39040f08586fec, 0xb764f3f00293f8e6, 0x049443a2f6bd50a8, 0x76fec88697d3941a, + 0x3efb70d039bae7a2, 0xe2f4611368eca8a8, 0x7c007a96e01d2425, 0xbbcce5768e69c5bf, + 0x784fb4985c42aac3, 0xf72b5091aa223874, 0x3630333fb1e62e07, 0x8e7319ebdebbb8de, + 0x2a3982bca959fa00, 0xb2b98b9f964ba9b3, 0xf7e31014adb71951, 0xebd0fca3703acc82, + 0xec654e2a2fe6419a, 0xb326132d55a52e2c, 0x2248c57f44502978, 0x32710c2f342daf16, + 0x0517b47b5acb2bec, 0x4c7a718fca270937, 0xd69142bed0bcc541, 0xe40ebcb8ff52ce88, + 0x3e44a2dbc9f828d4, 0xc74c2f4f8f873f58, 0x3dbf648eb799e45b, 0x33f22475ee0e86f8, + 0x1eb4f9ee16d47f65, 0x40f8d2b8712744e3, 0xb886b4da3cb14572, 0x2086326fbdd6f64d, + 0xcc3de5907dd882b9, 0xa2e8b49a5ee909df, 0xdbfb8e7823964c10, 0x70dd6089ef0df8d5, + 0x30141663cdd9c99f, 0x04b805325c240365, 0x7483d80314ac12d6, 0x2b271cb91aa7f5f9, + 0x97e2245362abddf0, 0x5a84f614232a9fab, 0xf71125fcda4b7fa2, 0x1ca5a61d74b27267, + 0x38cc6a9b3adbcb45, 0xdde1bb85dc653e39, 0xe9d0c8fa64f89fd4, 0x02c5fb1ecd2b4188, + 0xf2bd137bca5756e5, 0xadefe25d121be155, 0x56cd1c3c5d893a8e, 0x4c50d337beb65bb9, + 0x918c5151675cf567, 0xaba649ffcfb56a1e, 0x20c74ab26a2247cd, 0x71166bac853c08da, + 0xb07befe2e584fc5d, 0xda45ff2a588dbf32, 0xdb98b03c4d75095e, 0x60285ae1aaa65a4c, + 0xf93b686a263140b8, 0xde469752ee1c180e, 0xcec232dc04129aae, 0xeb916baa1835ea04, + 0xd49c21c8b64388ff, 0x72a82d9658864888, 0x003348ef7eac66a8, 0x7f6f67e655b209eb, + 0x532ffb0b7a941b25, 0xd940ade6128deede, 0xdf24f2a1af89fe23, 0x95aa3b4988195ae0, + 0x3da649404f94be4a, 0x692dad132c3f7e27, 0x40aee76ecaaa9eb8, 0x1294a01e09655024, + 0x6df797abdba4e4f5, 0xea2fb6024c1d7032, 0x5f4e0492295489fc, 0x57972914ea22e06a, + 0x9a8137d133aad473, 0xa2e6dd6ae7cdf2f3, 0x9f42644f18086647, 0x16d03301c170bd3e, + 0x908c416fa546656d, 0xe081503be22e123e, 0x077cf09116c4cc72, 0xcbd25cd264b7f229, + 0x3db2f468ec594031, 0x46c00e734c9badd5, 0xd0ec0ac72075d861, 0x3037cb3cf80b7630, + 0x574c3d7b3a2721c6, 0xae99906a0076824b, 0xb175a5418b532e70, 0xd8b3e251ee231ddd, + 0xb433eec25dca1966, 0x530f30dc5cff9a93, 0x9ff03d98b53cd335, 0xafc4225076558cdf, + 0xef81d3a28284402a, 0x110bdbf51c110a28, 0x9ae1b255d027e8f6, 0x7de3e0aa24688332, + 0xe483c3ecd2067ee2, 0xf829328b276137e6, 0xa413ccad57562cad, 0xe6118e8b496acb1f, + 0x8288dca6da5ec01f, 0xa53777dc88c17255, 0x8a00f1e0d5716eda, 0x618e6f47b7a720a8, + 0x9e3907b0c692a841, 0x978b42ca963f34f3, 0x75e4b0cd98a7d7ef, 0xde4dbd6e0b5f4752, + 0x0252e4153f34493f, 0x50f0e7d803734ef9, 0x237766a38ed167ee, 0x4124414001ee39a0, + 0xd08df643e535bb21, 0x34f575b5a9a80b74, 0x2c343af87297f755, 0xcd8b6d99d821f7cb, + 0xe376fd7256fc48ae, 0xe1b06e7334352885, 0xfa87b26f86c169eb, 0x36c1604665a971de, + 0xdba147c2239c8e80, 0x6b208e69fc7f0e24, 0x8795395b6f2b60c3, 0x05dabee9194907f4, + 0xb98175142f5ed902, 0x5e1701e2021ddc81, 0x0875aba2755eed08, 0x778d83289251de95, + 0x3bfbe46a039ecb31, 0xb24704fce4cbd7f9, 0x6985ffe9a7c91e3d, 0xc8efb13df249dabb, + 0xb1037e64b0f4c9f6, 0x55f69fd197d6b7c3, 0x672589d71d68a90c, 0xbebdb8224f50a77e, + 0x3f589f80007374a7, 0xd307f4635954182a, 0xcff5850c10d4fd90, 0xc6da02dfb6408e15, + 0x93daeef1e2b1a485, 0x65d833208aeea625, 0xe2b13fa13ed3b5fa, 0x67053538130fb68e, + 0xc1042f6598218fa9, 0xee5badca749b8a2e, 0x6d22a3f947dae37d, 0xb62c6d1657f4dbaf, + 0x6e007de69704c20b, 0x1af2b913fc3841d8, 0xdc0e47348e2e8e22, 0x9b1ddef1cf958b22, + 0x632ed6b0233066b8, 0xddd02d3311bed8f2, 0xf147cfe1834656e9, 0x399aaa49d511597a, + 0x6b14886979ec0309, 0x64fc4ac36b5afb97, 0xb82f78e07f7cf081, 0x10925c9a323d0e1b, + 0xf451c79ee13c63f6, 0x7c2fc180317876c7, 0x35a12bd9eecb7d22, 0x335654a539621f90, + 0xcc32a3f35db581f0, 0xc60748a80b2369cb, 0x7c4dd3b08591156b, 0xac1ced4b6de22291, + 0xa32cfa2df134def5, 0x627108918dea2a53, 0x0555b1608fcb4ff4, 0x143ee7ac43aaa33c, + 0xdae90ce7cf4fc218, 0x4d68fc2582bcf4b5, 0x37094e1849135d71, 0xf7857e09f3d49fd8, + 0x007538c503768be7, 0xedf648ba2f6be601, 0xaa347664dd72513e, 0xbe63893c6ef23b86, + 0x130b85710605af97, 0xdd765c6b1ef6ab56, 0xf3249a629a97dc6b, 0x2a114f9020fab8e5, + 0x5a69e027cfc6ad08, 0x3c4ccb36f1a5e050, 0x2e9e7d596834f0a5, 0x2430be6858fce789, + 0xe90b862f2466e597, 0x895e2884f159a9ec, 0x26ab8fa4902fcb57, 0xa6efff5c54e1fa50, + 0x333ac4e5811a8255, 0xa58d515f02498611, 0xfe5a09dcb25c6ef4, 0x03898988ab5f5818, + 0x289ff6242af6c617, 0x3d9dd59fd381ea23, 0x52d7d93d8a8aae51, 0xc76a123d511f786f, + 0xf68901edaf00c46c, 0x8c630871b590de80, 0x05209c308991e091, 0x1f809f99b4788177, + 0x11170c2eb6c19fd8, 0x44433c779062ba58, 0xc0acb51af1874c45, 0x9f2e134284809fa1, + 0xedb523bd15c619fa, 0x02d97fd53ecc23c0, 0xacaf05a34462374c, 0xddd9c6d34bffa11f, +} diff --git a/src/math/rand/v2/chacha8.go b/src/math/rand/v2/chacha8.go new file mode 100644 index 0000000000..6b9aa72782 --- /dev/null +++ b/src/math/rand/v2/chacha8.go @@ -0,0 +1,46 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package rand + +import "internal/chacha8rand" + +// A ChaCha8 is a ChaCha8-based cryptographically strong +// random number generator. +type ChaCha8 struct { + state chacha8rand.State +} + +// NewChaCha8 returns a new ChaCha8 seeded with the given seed. +func NewChaCha8(seed [32]byte) *ChaCha8 { + c := new(ChaCha8) + c.state.Init(seed) + return c +} + +// Seed resets the ChaCha8 to behave the same way as NewChaCha8(seed). +func (c *ChaCha8) Seed(seed [32]byte) { + c.state.Init(seed) +} + +// Uint64 returns a uniformly distributed random uint64 value. +func (c *ChaCha8) Uint64() uint64 { + for { + x, ok := c.state.Next() + if ok { + return x + } + c.state.Refill() + } +} + +// UnmarshalBinary implements the encoding.BinaryUnmarshaler interface. +func (c *ChaCha8) UnmarshalBinary(data []byte) error { + return chacha8rand.Unmarshal(&c.state, data) +} + +// MarshalBinary implements the encoding.BinaryMarshaler interface. +func (c *ChaCha8) MarshalBinary() ([]byte, error) { + return chacha8rand.Marshal(&c.state), nil +} diff --git a/src/math/rand/v2/chacha8_test.go b/src/math/rand/v2/chacha8_test.go new file mode 100644 index 0000000000..2c55b479b2 --- /dev/null +++ b/src/math/rand/v2/chacha8_test.go @@ -0,0 +1,531 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package rand_test + +import ( + . "math/rand/v2" + "testing" +) + +func TestChaCha8(t *testing.T) { + p := NewChaCha8(chacha8seed) + for i, x := range chacha8output { + if u := p.Uint64(); u != x { + t.Errorf("ChaCha8 #%d = %#x, want %#x", i, u, x) + } + } + + p.Seed(chacha8seed) + for i, x := range chacha8output { + if u := p.Uint64(); u != x { + t.Errorf("ChaCha8 #%d = %#x, want %#x", i, u, x) + } + } +} + +func TestChaCha8Marshal(t *testing.T) { + p := NewChaCha8(chacha8seed) + for i, x := range chacha8output { + enc, err := p.MarshalBinary() + if err != nil { + t.Fatalf("#%d: MarshalBinary: %v", i, err) + } + if string(enc) != chacha8marshal[i] { + t.Fatalf("#%d: MarshalBinary=%q, want %q", i, enc, chacha8marshal[i]) + } + *p = ChaCha8{} + if err := p.UnmarshalBinary(enc); err != nil { + t.Fatalf("#%d: UnmarshalBinary: %v", i, err) + } + if u := p.Uint64(); u != x { + t.Errorf("ChaCha8 #%d = %#x, want %#x", i, u, x) + } + } +} + +func BenchmarkChaCha8(b *testing.B) { + p := NewChaCha8([32]byte{1, 2, 3, 4, 5}) + var t uint64 + for n := b.N; n > 0; n-- { + t += p.Uint64() + } + Sink = t +} + +// Golden output test to make sure algorithm never changes, +// so that its use in math/rand/v2 stays stable. + +var chacha8seed = [32]byte([]byte("ABCDEFGHIJKLMNOPQRSTUVWXYZ123456")) + +var chacha8output = []uint64{ + 0xb773b6063d4616a5, 0x1160af22a66abc3c, 0x8c2599d9418d287c, 0x7ee07e037edc5cd6, + 0xcfaa9ee02d1c16ad, 0x0e090eef8febea79, 0x3c82d271128b5b3e, 0x9c5addc11252a34f, + 0xdf79bb617d6ceea6, 0x36d553591f9d736a, 0xeef0d14e181ee01f, 0x089bfc760ae58436, + 0xd9e52b59cc2ad268, 0xeb2fb4444b1b8aba, 0x4f95c8a692c46661, 0xc3c6323217cae62c, + 0x91ebb4367f4e2e7e, 0x784cf2c6a0ec9bc6, 0x5c34ec5c34eabe20, 0x4f0a8f515570daa8, + 0xfc35dcb4113d6bf2, 0x5b0da44c645554bc, 0x6d963da3db21d9e1, 0xeeaefc3150e500f3, + 0x2d37923dda3750a5, 0x380d7a626d4bc8b0, 0xeeaf68ede3d7ee49, 0xf4356695883b717c, + 0x846a9021392495a4, 0x8e8510549630a61b, 0x18dc02545dbae493, 0x0f8f9ff0a65a3d43, + 0xccf065f7190ff080, 0xfd76d1aa39673330, 0x95d232936cba6433, 0x6c7456d1070cbd17, + 0x462acfdaff8c6562, 0x5bafab866d34fc6a, 0x0c862f78030a2988, 0xd39a83e407c3163d, + 0xc00a2b7b45f22ebf, 0x564307c62466b1a9, 0x257e0424b0c072d4, 0x6fb55e99496c28fe, + 0xae9873a88f5cd4e0, 0x4657362ac60d3773, 0x1c83f91ecdf23e8e, 0x6fdc0792c15387c0, + 0x36dad2a30dfd2b5c, 0xa4b593290595bdb7, 0x4de18934e4cc02c5, 0xcdc0d604f015e3a7, + 0xfba0dbf69ad80321, 0x60e8bea3d139de87, 0xd18a4d851ef48756, 0x6366447c2215f34a, + 0x05682e97d3d007ee, 0x4c0e8978c6d54ab2, 0xcf1e9f6a6712edc2, 0x061439414c80cfd3, + 0xd1a8b6e2745c0ead, 0x31a7918d45c410e8, 0xabcc61ad90216eec, 0x4040d92d2032a71a, + 0x3cd2f66ffb40cd68, 0xdcd051c07295857a, 0xeab55cbcd9ab527e, 0x18471dce781bdaac, + 0xf7f08cd144dc7252, 0x5804e0b13d7f40d1, 0x5cb1a446e4b2d35b, 0xe6d4a728d2138a06, + 0x05223e40ca60dad8, 0x2d61ec3206ac6a68, 0xab692356874c17b8, 0xc30954417676de1c, + 0x4f1ace3732225624, 0xfba9510813988338, 0x997f200f52752e11, 0x1116aaafe86221fa, + 0x07ce3b5cb2a13519, 0x2956bc72bc458314, 0x4188b7926140eb78, 0x56ca6dbfd4adea4d, + 0x7fe3c22349340ce5, 0x35c08f9c37675f8a, 0x11e1c7fbef5ed521, 0x98adc8464ec1bc75, + 0xd163b2c73d1203f8, 0x8c761ee043a2f3f3, 0x24b99d6accecd7b7, 0x793e31aa112f0370, + 0x8e87dc2a19285139, 0x4247ae04f7096e25, 0x514f3122926fe20f, 0xdc6fb3f045d2a7e9, + 0x15cb30cecdd18eba, 0xcbc7fdecf6900274, 0x3fb5c696dc8ba021, 0xd1664417c8d274e6, + 0x05f7e445ea457278, 0xf920bbca1b9db657, 0x0c1950b4da22cb99, 0xf875baf1af09e292, + 0xbed3d7b84250f838, 0xf198e8080fd74160, 0xc9eda51d9b7ea703, 0xf709ef55439bf8f6, + 0xd20c74feebf116fc, 0x305668eb146d7546, 0x829af3ec10d89787, 0x15b8f9697b551dbc, + 0xfc823c6c8e64b8c9, 0x345585e8183b40bc, 0x674b4171d6581368, 0x1234d81cd670e9f7, + 0x0e505210d8a55e19, 0xe8258d69eeeca0dc, 0x05d4c452e8baf67e, 0xe8dbe30116a45599, + 0x1cf08ce1b1176f00, 0xccf7d0a4b81ecb49, 0x303fea136b2c430e, 0x861d6c139c06c871, + 0x5f41df72e05e0487, 0x25bd7e1e1ae26b1d, 0xbe9f4004d662a41d, 0x65bf58d483188546, + 0xd1b27cff69db13cc, 0x01a6663372c1bb36, 0x578dd7577b727f4d, 0x19c78f066c083cf6, + 0xdbe014d4f9c391bb, 0x97fbb2dd1d13ffb3, 0x31c91e0af9ef8d4f, 0x094dfc98402a43ba, + 0x069bd61bea37b752, 0x5b72d762e8d986ca, 0x72ee31865904bc85, 0xd1f5fdc5cd36c33e, + 0xba9b4980a8947cad, 0xece8f05eac49ab43, 0x65fe1184abae38e7, 0x2d7cb9dea5d31452, + 0xcc71489476e467e3, 0x4c03a258a578c68c, 0x00efdf9ecb0fd8fc, 0x9924cad471e2666d, + 0x87f8668318f765e9, 0xcb4dc57c1b55f5d8, 0xd373835a86604859, 0xe526568b5540e482, + 0x1f39040f08586fec, 0xb764f3f00293f8e6, 0x049443a2f6bd50a8, 0x76fec88697d3941a, + 0x3efb70d039bae7a2, 0xe2f4611368eca8a8, 0x7c007a96e01d2425, 0xbbcce5768e69c5bf, + 0x784fb4985c42aac3, 0xf72b5091aa223874, 0x3630333fb1e62e07, 0x8e7319ebdebbb8de, + 0x2a3982bca959fa00, 0xb2b98b9f964ba9b3, 0xf7e31014adb71951, 0xebd0fca3703acc82, + 0xec654e2a2fe6419a, 0xb326132d55a52e2c, 0x2248c57f44502978, 0x32710c2f342daf16, + 0x0517b47b5acb2bec, 0x4c7a718fca270937, 0xd69142bed0bcc541, 0xe40ebcb8ff52ce88, + 0x3e44a2dbc9f828d4, 0xc74c2f4f8f873f58, 0x3dbf648eb799e45b, 0x33f22475ee0e86f8, + 0x1eb4f9ee16d47f65, 0x40f8d2b8712744e3, 0xb886b4da3cb14572, 0x2086326fbdd6f64d, + 0xcc3de5907dd882b9, 0xa2e8b49a5ee909df, 0xdbfb8e7823964c10, 0x70dd6089ef0df8d5, + 0x30141663cdd9c99f, 0x04b805325c240365, 0x7483d80314ac12d6, 0x2b271cb91aa7f5f9, + 0x97e2245362abddf0, 0x5a84f614232a9fab, 0xf71125fcda4b7fa2, 0x1ca5a61d74b27267, + 0x38cc6a9b3adbcb45, 0xdde1bb85dc653e39, 0xe9d0c8fa64f89fd4, 0x02c5fb1ecd2b4188, + 0xf2bd137bca5756e5, 0xadefe25d121be155, 0x56cd1c3c5d893a8e, 0x4c50d337beb65bb9, + 0x918c5151675cf567, 0xaba649ffcfb56a1e, 0x20c74ab26a2247cd, 0x71166bac853c08da, + 0xb07befe2e584fc5d, 0xda45ff2a588dbf32, 0xdb98b03c4d75095e, 0x60285ae1aaa65a4c, + 0xf93b686a263140b8, 0xde469752ee1c180e, 0xcec232dc04129aae, 0xeb916baa1835ea04, + 0xd49c21c8b64388ff, 0x72a82d9658864888, 0x003348ef7eac66a8, 0x7f6f67e655b209eb, + 0x532ffb0b7a941b25, 0xd940ade6128deede, 0xdf24f2a1af89fe23, 0x95aa3b4988195ae0, + 0x3da649404f94be4a, 0x692dad132c3f7e27, 0x40aee76ecaaa9eb8, 0x1294a01e09655024, + 0x6df797abdba4e4f5, 0xea2fb6024c1d7032, 0x5f4e0492295489fc, 0x57972914ea22e06a, + 0x9a8137d133aad473, 0xa2e6dd6ae7cdf2f3, 0x9f42644f18086647, 0x16d03301c170bd3e, + 0x908c416fa546656d, 0xe081503be22e123e, 0x077cf09116c4cc72, 0xcbd25cd264b7f229, + 0x3db2f468ec594031, 0x46c00e734c9badd5, 0xd0ec0ac72075d861, 0x3037cb3cf80b7630, + 0x574c3d7b3a2721c6, 0xae99906a0076824b, 0xb175a5418b532e70, 0xd8b3e251ee231ddd, + 0xb433eec25dca1966, 0x530f30dc5cff9a93, 0x9ff03d98b53cd335, 0xafc4225076558cdf, + 0xef81d3a28284402a, 0x110bdbf51c110a28, 0x9ae1b255d027e8f6, 0x7de3e0aa24688332, + 0xe483c3ecd2067ee2, 0xf829328b276137e6, 0xa413ccad57562cad, 0xe6118e8b496acb1f, + 0x8288dca6da5ec01f, 0xa53777dc88c17255, 0x8a00f1e0d5716eda, 0x618e6f47b7a720a8, + 0x9e3907b0c692a841, 0x978b42ca963f34f3, 0x75e4b0cd98a7d7ef, 0xde4dbd6e0b5f4752, + 0x0252e4153f34493f, 0x50f0e7d803734ef9, 0x237766a38ed167ee, 0x4124414001ee39a0, + 0xd08df643e535bb21, 0x34f575b5a9a80b74, 0x2c343af87297f755, 0xcd8b6d99d821f7cb, + 0xe376fd7256fc48ae, 0xe1b06e7334352885, 0xfa87b26f86c169eb, 0x36c1604665a971de, + 0xdba147c2239c8e80, 0x6b208e69fc7f0e24, 0x8795395b6f2b60c3, 0x05dabee9194907f4, + 0xb98175142f5ed902, 0x5e1701e2021ddc81, 0x0875aba2755eed08, 0x778d83289251de95, + 0x3bfbe46a039ecb31, 0xb24704fce4cbd7f9, 0x6985ffe9a7c91e3d, 0xc8efb13df249dabb, + 0xb1037e64b0f4c9f6, 0x55f69fd197d6b7c3, 0x672589d71d68a90c, 0xbebdb8224f50a77e, + 0x3f589f80007374a7, 0xd307f4635954182a, 0xcff5850c10d4fd90, 0xc6da02dfb6408e15, + 0x93daeef1e2b1a485, 0x65d833208aeea625, 0xe2b13fa13ed3b5fa, 0x67053538130fb68e, + 0xc1042f6598218fa9, 0xee5badca749b8a2e, 0x6d22a3f947dae37d, 0xb62c6d1657f4dbaf, + 0x6e007de69704c20b, 0x1af2b913fc3841d8, 0xdc0e47348e2e8e22, 0x9b1ddef1cf958b22, + 0x632ed6b0233066b8, 0xddd02d3311bed8f2, 0xf147cfe1834656e9, 0x399aaa49d511597a, + 0x6b14886979ec0309, 0x64fc4ac36b5afb97, 0xb82f78e07f7cf081, 0x10925c9a323d0e1b, + 0xf451c79ee13c63f6, 0x7c2fc180317876c7, 0x35a12bd9eecb7d22, 0x335654a539621f90, + 0xcc32a3f35db581f0, 0xc60748a80b2369cb, 0x7c4dd3b08591156b, 0xac1ced4b6de22291, + 0xa32cfa2df134def5, 0x627108918dea2a53, 0x0555b1608fcb4ff4, 0x143ee7ac43aaa33c, + 0xdae90ce7cf4fc218, 0x4d68fc2582bcf4b5, 0x37094e1849135d71, 0xf7857e09f3d49fd8, + 0x007538c503768be7, 0xedf648ba2f6be601, 0xaa347664dd72513e, 0xbe63893c6ef23b86, + 0x130b85710605af97, 0xdd765c6b1ef6ab56, 0xf3249a629a97dc6b, 0x2a114f9020fab8e5, + 0x5a69e027cfc6ad08, 0x3c4ccb36f1a5e050, 0x2e9e7d596834f0a5, 0x2430be6858fce789, + 0xe90b862f2466e597, 0x895e2884f159a9ec, 0x26ab8fa4902fcb57, 0xa6efff5c54e1fa50, + 0x333ac4e5811a8255, 0xa58d515f02498611, 0xfe5a09dcb25c6ef4, 0x03898988ab5f5818, + 0x289ff6242af6c617, 0x3d9dd59fd381ea23, 0x52d7d93d8a8aae51, 0xc76a123d511f786f, + 0xf68901edaf00c46c, 0x8c630871b590de80, 0x05209c308991e091, 0x1f809f99b4788177, + 0x11170c2eb6c19fd8, 0x44433c779062ba58, 0xc0acb51af1874c45, 0x9f2e134284809fa1, + 0xedb523bd15c619fa, 0x02d97fd53ecc23c0, 0xacaf05a34462374c, 0xddd9c6d34bffa11f, +} + +var chacha8marshal = []string{ + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x00ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x01ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x02ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x03ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x04ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x05ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x06ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\aABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\bABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\tABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\nABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\vABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\fABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\rABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x0eABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x0fABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x10ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x11ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x12ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x13ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x14ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x15ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x16ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x17ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x18ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x19ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1aABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1bABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1cABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1dABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1eABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1fABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00 ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00!ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\"ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00#ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00$ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00%ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00&ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00'ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00(ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00)ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00*ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00+ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00,ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00-ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00.ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00/ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x000ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x001ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x002ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x003ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x004ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x005ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x006ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x007ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x008ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x009ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00;ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00?ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00@ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00AABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00BABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00CABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00DABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00EABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00FABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00GABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00HABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00IABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00JABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00KABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00LABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00MABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00NABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00OABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00PABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00QABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00RABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00SABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00TABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00UABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00VABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00WABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00XABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00YABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00ZABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00[ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\\ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00]ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00^ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00_ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00`ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00aABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00bABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00cABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00dABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00eABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00fABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00gABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00hABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00iABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00jABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00kABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00lABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00mABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00nABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00oABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00pABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00qABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00rABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00sABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00tABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00uABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00vABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00wABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00xABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00yABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00zABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00{ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00|ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x01>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x02>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x03>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x04>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x05>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x06>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\a>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\b>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\t>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\n>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\v>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\f>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\r>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x0e>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x0f>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x10>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x11>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x12>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x13>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x14>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x15>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x16>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x17>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x18>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x19>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1a>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1b>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1c>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1d>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1e>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1f>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00 >\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00!>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\">\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00#>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00$>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00%>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00&>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00'>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00(>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00)>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00*>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00+>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00,>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00->\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00.>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00/>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x000>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x001>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x002>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x003>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x004>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x005>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x006>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x007>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x008>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x009>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00:>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00;>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00<>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00=>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00>>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00?>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00@>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00A>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00B>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00C>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00D>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00E>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00F>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00G>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00H>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00I>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00J>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00K>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00L>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00M>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00N>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00O>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00P>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00Q>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00R>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00S>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00T>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00U>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00V>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00W>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00X>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00Y>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00Z>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00[>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\\>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00]>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00^>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00_>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00`>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00a>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00b>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00c>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00d>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00e>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00f>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00g>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00h>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00i>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00j>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00k>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00l>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00m>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00n>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00o>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00p>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00q>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00r>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00s>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00t>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00u>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00v>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00w>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00x>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00y>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00z>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00{>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00|>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x01K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x02K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x03K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x04K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x05K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x06K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\aK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\bK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\tK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\nK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\vK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\fK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\rK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x0eK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x0fK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x10K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x11K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x12K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x13K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x14K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x15K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x16K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x17K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x18K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x19K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1aK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1bK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1cK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1dK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1eK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1fK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00 K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00!K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\"K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00#K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00$K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00%K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00&K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00'K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00(K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00)K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00*K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00+K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00,K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00-K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00.K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00/K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x000K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x001K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x002K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x003K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x004K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x005K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x006K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x007K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x008K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x009K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00:K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00;K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00?K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00@K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00AK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00BK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00CK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00DK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00EK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00FK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00GK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00HK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00IK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00JK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00KK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00LK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00MK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00NK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00OK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00PK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00QK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00RK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00SK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00TK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00UK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00VK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00WK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00XK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00YK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00ZK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00[K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\\K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00]K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00^K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00_K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00`K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00aK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00bK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00cK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00dK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00eK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00fK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00gK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00hK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00iK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00jK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00kK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00lK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00mK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00nK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00oK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00pK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00qK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00rK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00sK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00tK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00uK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00vK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00wK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00xK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00yK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00zK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00{K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", +} From 237715cf7c4c2aabf6d3c04473488c1b2477f8ea Mon Sep 17 00:00:00 2001 From: Mauri de Souza Meneguzzo Date: Sat, 18 Nov 2023 17:52:22 +0000 Subject: [PATCH 003/313] runtime/internal/atomic: add generic implementation for And/Or Without having all the architectures implementing the And/Or operators merged I can't proceed with the public sync/atomic apis. This CL adds a generic implementation that should work for all the remaining arches, while waiting for the native assembly implementations in CL 531835, CL 531678, CL 531895. I regret the oversight of not pushing this earlier. For #61395 Change-Id: Ib2d67f359fe324b4743eb79e9c8e52e8f6f5476c GitHub-Last-Rev: d350927ba1c51d1f708be2f2904f826fdb79b8cd GitHub-Pull-Request: golang/go#64214 Reviewed-on: https://go-review.googlesource.com/c/go/+/543175 Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI TryBot-Result: Gopher Robot Reviewed-by: David Chase Run-TryBot: Cherry Mui --- .../internal/atomic/atomic_andor_generic.go | 67 +++++++++++++++++++ .../internal/atomic/atomic_andor_test.go | 3 - 2 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 src/runtime/internal/atomic/atomic_andor_generic.go diff --git a/src/runtime/internal/atomic/atomic_andor_generic.go b/src/runtime/internal/atomic/atomic_andor_generic.go new file mode 100644 index 0000000000..c790e062c5 --- /dev/null +++ b/src/runtime/internal/atomic/atomic_andor_generic.go @@ -0,0 +1,67 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build s390x || loong64 || mips || mipsle || mips64 || mips64le + +package atomic + +//go:nosplit +func And32(ptr *uint32, val uint32) uint32 { + for { + old := *ptr + if Cas(ptr, old, old&val) { + return old + } + } +} + +//go:nosplit +func Or32(ptr *uint32, val uint32) uint32 { + for { + old := *ptr + if Cas(ptr, old, old|val) { + return old + } + } +} + +//go:nosplit +func And64(ptr *uint64, val uint64) uint64 { + for { + old := *ptr + if Cas64(ptr, old, old&val) { + return old + } + } +} + +//go:nosplit +func Or64(ptr *uint64, val uint64) uint64 { + for { + old := *ptr + if Cas64(ptr, old, old|val) { + return old + } + } +} + +//go:nosplit +func Anduintptr(ptr *uintptr, val uintptr) uintptr { + for { + old := *ptr + if Casuintptr(ptr, old, old&val) { + return old + } + } +} + +//go:nosplit +func Oruintptr(ptr *uintptr, val uintptr) uintptr { + for { + old := *ptr + if Casuintptr(ptr, old, old|val) { + return old + } + } +} diff --git a/src/runtime/internal/atomic/atomic_andor_test.go b/src/runtime/internal/atomic/atomic_andor_test.go index 9dd8b60ae4..a2f3b6f3a9 100644 --- a/src/runtime/internal/atomic/atomic_andor_test.go +++ b/src/runtime/internal/atomic/atomic_andor_test.go @@ -1,6 +1,3 @@ -//go:build 386 || amd64 || arm || arm64 || ppc64 || ppc64le || riscv64 || wasm - -// // Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. From 468bc941886ae83b8d16af5deaaf12ea5cabb05b Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Mon, 20 Nov 2023 06:27:20 +0000 Subject: [PATCH 004/313] Revert "runtime: profile contended lock calls" This reverts commit go.dev/cl/528657. Reason for revert: broke a lot of builders. Change-Id: I70c33062020e997c4df67b3eaa2e886cf0da961e Reviewed-on: https://go-review.googlesource.com/c/go/+/543660 Reviewed-by: Than McIntosh Auto-Submit: Matthew Dempsky LUCI-TryBot-Result: Go LUCI --- src/runtime/debug.go | 11 -- src/runtime/export_test.go | 21 --- src/runtime/extern.go | 8 - src/runtime/lock_futex.go | 6 - src/runtime/lock_sema.go | 4 - src/runtime/metrics.go | 2 +- src/runtime/metrics_test.go | 308 ------------------------------------ src/runtime/mprof.go | 236 +-------------------------- src/runtime/proc.go | 4 +- src/runtime/runtime1.go | 42 +++-- src/runtime/runtime2.go | 8 - 11 files changed, 23 insertions(+), 627 deletions(-) diff --git a/src/runtime/debug.go b/src/runtime/debug.go index 3233ce8ee7..0e61692f3d 100644 --- a/src/runtime/debug.go +++ b/src/runtime/debug.go @@ -52,17 +52,6 @@ func NumCgoCall() int64 { return n } -func totalMutexWaitTimeNanos() int64 { - total := sched.totalMutexWaitTime.Load() - - total += sched.totalRuntimeLockWaitTime.Load() - for mp := (*m)(atomic.Loadp(unsafe.Pointer(&allm))); mp != nil; mp = mp.alllink { - total += mp.mLockProfile.waitTime.Load() - } - - return total -} - // NumGoroutine returns the number of goroutines that currently exist. func NumGoroutine() int { return int(gcount()) diff --git a/src/runtime/export_test.go b/src/runtime/export_test.go index 5f0e24d4f1..d2f3563956 100644 --- a/src/runtime/export_test.go +++ b/src/runtime/export_test.go @@ -1340,27 +1340,6 @@ func PageCachePagesLeaked() (leaked uintptr) { return } -type Mutex = mutex - -var Lock = lock -var Unlock = unlock - -func MutexContended(l *mutex) bool { - switch atomic.Loaduintptr(&l.key) { - case 0: // unlocked - return false - case 1: // locked - return false - default: // an M is sleeping - return true - } -} - -func SemRootLock(addr *uint32) *mutex { - root := semtable.rootFor(addr) - return &root.lock -} - var Semacquire = semacquire var Semrelease1 = semrelease1 diff --git a/src/runtime/extern.go b/src/runtime/extern.go index d199720b9b..f8db296e6b 100644 --- a/src/runtime/extern.go +++ b/src/runtime/extern.go @@ -145,14 +145,6 @@ It is a comma-separated list of name=val pairs setting these named variables: risk in that scenario. Currently not supported on Windows, plan9 or js/wasm. Setting this option for some applications can produce large traces, so use with care. - profileruntimelocks: setting profileruntimelocks=1 includes call stacks related to - contention on runtime-internal locks in the "mutex" profile, subject to the - MutexProfileFraction setting. The call stacks will correspond to the unlock call that - released the lock. But instead of the value corresponding to the amount of contention that - call stack caused, it corresponds to the amount of time the caller of unlock had to wait - in its original call to lock. A future release is expected to align those and remove this - setting. - invalidptr: invalidptr=1 (the default) causes the garbage collector and stack copier to crash the program if an invalid pointer value (for example, 1) is found in a pointer-typed location. Setting invalidptr=0 disables this check. diff --git a/src/runtime/lock_futex.go b/src/runtime/lock_futex.go index b4f57d5259..cc7d465ef1 100644 --- a/src/runtime/lock_futex.go +++ b/src/runtime/lock_futex.go @@ -71,8 +71,6 @@ func lock2(l *mutex) { // its wakeup call. wait := v - timer := &lockTimer{lock: l} - timer.begin() // On uniprocessors, no point spinning. // On multiprocessors, spin for ACTIVE_SPIN attempts. spin := 0 @@ -84,7 +82,6 @@ func lock2(l *mutex) { for i := 0; i < spin; i++ { for l.key == mutex_unlocked { if atomic.Cas(key32(&l.key), mutex_unlocked, wait) { - timer.end() return } } @@ -95,7 +92,6 @@ func lock2(l *mutex) { for i := 0; i < passive_spin; i++ { for l.key == mutex_unlocked { if atomic.Cas(key32(&l.key), mutex_unlocked, wait) { - timer.end() return } } @@ -105,7 +101,6 @@ func lock2(l *mutex) { // Sleep. v = atomic.Xchg(key32(&l.key), mutex_sleeping) if v == mutex_unlocked { - timer.end() return } wait = mutex_sleeping @@ -127,7 +122,6 @@ func unlock2(l *mutex) { } gp := getg() - gp.m.mLockProfile.recordUnlock(l) gp.m.locks-- if gp.m.locks < 0 { throw("runtime·unlock: lock count") diff --git a/src/runtime/lock_sema.go b/src/runtime/lock_sema.go index 84cd344db8..9afba08b0b 100644 --- a/src/runtime/lock_sema.go +++ b/src/runtime/lock_sema.go @@ -48,8 +48,6 @@ func lock2(l *mutex) { } semacreate(gp.m) - timer := &lockTimer{lock: l} - timer.begin() // On uniprocessor's, no point spinning. // On multiprocessors, spin for ACTIVE_SPIN attempts. spin := 0 @@ -62,7 +60,6 @@ Loop: if v&locked == 0 { // Unlocked. Try to lock. if atomic.Casuintptr(&l.key, v, v|locked) { - timer.end() return } i = 0 @@ -122,7 +119,6 @@ func unlock2(l *mutex) { } } } - gp.m.mLockProfile.recordUnlock(l) gp.m.locks-- if gp.m.locks < 0 { throw("runtime·unlock: lock count") diff --git a/src/runtime/metrics.go b/src/runtime/metrics.go index f97a3804ab..4bd167135d 100644 --- a/src/runtime/metrics.go +++ b/src/runtime/metrics.go @@ -470,7 +470,7 @@ func initMetrics() { "/sync/mutex/wait/total:seconds": { compute: func(_ *statAggregate, out *metricValue) { out.kind = metricKindFloat64 - out.scalar = float64bits(nsToSec(totalMutexWaitTimeNanos())) + out.scalar = float64bits(nsToSec(sched.totalMutexWaitTime.Load())) }, }, } diff --git a/src/runtime/metrics_test.go b/src/runtime/metrics_test.go index 56f3340b16..1e82897381 100644 --- a/src/runtime/metrics_test.go +++ b/src/runtime/metrics_test.go @@ -6,21 +6,15 @@ package runtime_test import ( "bytes" - "fmt" - "internal/goexperiment" - "internal/profile" "os" "reflect" "runtime" "runtime/debug" "runtime/metrics" - "runtime/pprof" "runtime/trace" - "slices" "sort" "strings" "sync" - "sync/atomic" "testing" "time" "unsafe" @@ -945,305 +939,3 @@ func TestSchedPauseMetrics(t *testing.T) { }) } } - -func TestRuntimeLockMetricsAndProfile(t *testing.T) { - old := runtime.SetMutexProfileFraction(0) // enabled during sub-tests - defer runtime.SetMutexProfileFraction(old) - if old != 0 { - t.Fatalf("need MutexProfileRate 0, got %d", old) - } - - { - before := os.Getenv("GODEBUG") - for _, s := range strings.Split(before, ",") { - if strings.HasPrefix(s, "profileruntimelocks=") { - t.Logf("GODEBUG includes explicit setting %q", s) - } - } - defer func() { os.Setenv("GODEBUG", before) }() - os.Setenv("GODEBUG", fmt.Sprintf("%s,profileruntimelocks=1", before)) - } - - loadProfile := func(t *testing.T) *profile.Profile { - var w bytes.Buffer - pprof.Lookup("mutex").WriteTo(&w, 0) - p, err := profile.Parse(&w) - if err != nil { - t.Fatalf("failed to parse profile: %v", err) - } - if err := p.CheckValid(); err != nil { - t.Fatalf("invalid profile: %v", err) - } - return p - } - - measureDelta := func(t *testing.T, fn func()) (metricGrowth, profileGrowth float64, p *profile.Profile) { - beforeProfile := loadProfile(t) - beforeMetrics := []metrics.Sample{{Name: "/sync/mutex/wait/total:seconds"}} - metrics.Read(beforeMetrics) - - fn() - - afterProfile := loadProfile(t) - afterMetrics := []metrics.Sample{{Name: "/sync/mutex/wait/total:seconds"}} - metrics.Read(afterMetrics) - - sumSamples := func(p *profile.Profile, i int) int64 { - var sum int64 - for _, s := range p.Sample { - sum += s.Value[i] - } - return sum - } - - metricGrowth = afterMetrics[0].Value.Float64() - beforeMetrics[0].Value.Float64() - profileGrowth = float64(sumSamples(afterProfile, 1)-sumSamples(beforeProfile, 1)) * time.Nanosecond.Seconds() - - // The internal/profile package does not support compaction; this delta - // profile will include separate positive and negative entries. - p = afterProfile.Copy() - if len(beforeProfile.Sample) > 0 { - err := p.Merge(beforeProfile, -1) - if err != nil { - t.Fatalf("Merge profiles: %v", err) - } - } - - return metricGrowth, profileGrowth, p - } - - testcase := func(stk []string, workers int, fn func() bool) func(t *testing.T) (metricGrowth, profileGrowth float64, n, value int64) { - return func(t *testing.T) (metricGrowth, profileGrowth float64, n, value int64) { - metricGrowth, profileGrowth, p := measureDelta(t, func() { - var started, stopped sync.WaitGroup - started.Add(workers) - stopped.Add(workers) - for i := 0; i < workers; i++ { - w := &contentionWorker{ - before: func() { - started.Done() - started.Wait() - }, - after: func() { - stopped.Done() - }, - fn: fn, - } - go w.run() - } - stopped.Wait() - }) - - if profileGrowth == 0 { - t.Errorf("no increase in mutex profile") - } - if metricGrowth == 0 { - t.Errorf("no increase in /sync/mutex/wait/total:seconds metric") - } - // This comparison is possible because the time measurements in support of - // runtime/pprof and runtime/metrics for runtime-internal locks are so close - // together. It doesn't work as well for user-space contention, where the - // involved goroutines are not _Grunnable the whole time and so need to pass - // through the scheduler. - t.Logf("lock contention growth in runtime/pprof's view (%fs)", profileGrowth) - t.Logf("lock contention growth in runtime/metrics' view (%fs)", metricGrowth) - - if goexperiment.StaticLockRanking { - if !slices.ContainsFunc(stk, func(s string) bool { - return s == "runtime.systemstack" || s == "runtime.mcall" || s == "runtime.mstart" - }) { - // stk is a call stack that is still on the user stack when - // it calls runtime.unlock. Add the extra function that - // we'll see, when the static lock ranking implementation of - // runtime.unlockWithRank switches to the system stack. - stk = append([]string{"runtime.unlockWithRank"}, stk...) - } - } - - var stks [][]string - for _, s := range p.Sample { - var have []string - for _, loc := range s.Location { - for _, line := range loc.Line { - have = append(have, line.Function.Name) - } - } - stks = append(stks, have) - if slices.Equal(have, stk) { - n += s.Value[0] - value += s.Value[1] - } - } - t.Logf("stack %v has samples totaling n=%d value=%d", stk, n, value) - if n == 0 && value == 0 { - t.Logf("profile:\n%s", p) - for _, have := range stks { - t.Logf("have stack %v", have) - } - t.Errorf("want stack %v", stk) - } - - return metricGrowth, profileGrowth, n, value - } - } - - name := t.Name() - - t.Run("runtime.lock", func(t *testing.T) { - mus := make([]runtime.Mutex, 100) - var needContention atomic.Int64 - delay := 10 * time.Microsecond - delayMicros := delay.Microseconds() - - // The goroutine that acquires the lock will only proceed when it - // detects that its partner is contended for the lock. That will lead to - // live-lock if anything (such as a STW) prevents the partner goroutine - // from running. Allowing the contention workers to pause and restart - // (to allow a STW to proceed) makes it harder to confirm that we're - // counting the correct number of contention events, since some locks - // will end up contended twice. Instead, disable the GC. - defer debug.SetGCPercent(debug.SetGCPercent(-1)) - - const workers = 2 - if runtime.GOMAXPROCS(0) < workers { - t.Skipf("contention on runtime-internal locks requires GOMAXPROCS >= %d", workers) - } - - fn := func() bool { - n := int(needContention.Load()) - if n < 0 { - return false - } - mu := &mus[n] - - runtime.Lock(mu) - for int(needContention.Load()) == n { - if runtime.MutexContended(mu) { - // make them wait a little while - for start := runtime.Nanotime(); (runtime.Nanotime()-start)/1000 < delayMicros; { - runtime.Usleep(uint32(delayMicros)) - } - break - } - } - runtime.Unlock(mu) - needContention.Store(int64(n - 1)) - - return true - } - - stk := []string{ - "runtime.unlock", - "runtime_test." + name + ".func5.1", - "runtime_test.(*contentionWorker).run", - } - - t.Run("sample-1", func(t *testing.T) { - old := runtime.SetMutexProfileFraction(1) - defer runtime.SetMutexProfileFraction(old) - - needContention.Store(int64(len(mus) - 1)) - metricGrowth, profileGrowth, n, _ := testcase(stk, workers, fn)(t) - - if have, want := metricGrowth, delay.Seconds()*float64(len(mus)); have < want { - // The test imposes a delay with usleep, verified with calls to - // nanotime. Compare against the runtime/metrics package's view - // (based on nanotime) rather than runtime/pprof's view (based - // on cputicks). - t.Errorf("runtime/metrics reported less than the known minimum contention duration (%fs < %fs)", have, want) - } - if have, want := n, int64(len(mus)); have != want { - t.Errorf("mutex profile reported contention count different from the known true count (%d != %d)", have, want) - } - - const slop = 1.5 // account for nanotime vs cputicks - if profileGrowth > slop*metricGrowth || metricGrowth > slop*profileGrowth { - t.Errorf("views differ by more than %fx", slop) - } - }) - - t.Run("sample-2", func(t *testing.T) { - old := runtime.SetMutexProfileFraction(2) - defer runtime.SetMutexProfileFraction(old) - - needContention.Store(int64(len(mus) - 1)) - metricGrowth, profileGrowth, n, _ := testcase(stk, workers, fn)(t) - - // With 100 trials and profile fraction of 2, we expect to capture - // 50 samples. Allow the test to pass if we get at least 20 samples; - // the CDF of the binomial distribution says there's less than a - // 1e-9 chance of that, which is an acceptably low flakiness rate. - const samplingSlop = 2.5 - - if have, want := metricGrowth, delay.Seconds()*float64(len(mus)); samplingSlop*have < want { - // The test imposes a delay with usleep, verified with calls to - // nanotime. Compare against the runtime/metrics package's view - // (based on nanotime) rather than runtime/pprof's view (based - // on cputicks). - t.Errorf("runtime/metrics reported less than the known minimum contention duration (%f * %fs < %fs)", samplingSlop, have, want) - } - if have, want := n, int64(len(mus)); float64(have) > float64(want)*samplingSlop || float64(want) > float64(have)*samplingSlop { - t.Errorf("mutex profile reported contention count too different from the expected count (%d far from %d)", have, want) - } - - const timerSlop = 1.5 * samplingSlop // account for nanotime vs cputicks, plus the two views' independent sampling - if profileGrowth > timerSlop*metricGrowth || metricGrowth > timerSlop*profileGrowth { - t.Errorf("views differ by more than %fx", timerSlop) - } - }) - }) - - t.Run("runtime.semrelease", func(t *testing.T) { - old := runtime.SetMutexProfileFraction(1) - defer runtime.SetMutexProfileFraction(old) - - const workers = 3 - if runtime.GOMAXPROCS(0) < workers { - t.Skipf("creating and observing contention on runtime-internal semaphores requires GOMAXPROCS >= %d", workers) - } - - var sem uint32 = 1 - var sawContention atomic.Int32 - var need int32 = 1000 // counteract low timer resolution by requiring more samples - fn := func() bool { - if sawContention.Load() >= need { - return false - } - runtime.Semacquire(&sem) - runtime.Semrelease1(&sem, false, 0) - if runtime.MutexContended(runtime.SemRootLock(&sem)) { - sawContention.Add(1) - } - return true - } - - stk := []string{ - "runtime.unlock", - "runtime.semrelease1", - "runtime_test.TestRuntimeLockMetricsAndProfile.func6.1", - "runtime_test.(*contentionWorker).run", - } - - // Verify that we get call stack we expect, with anything more than zero - // nanoseconds / zero samples. The duration of each contention event is - // too small relative to the expected overhead for us to verify its - // value more directly. Leave that to the explicit lock/unlock test. - - testcase(stk, workers, fn)(t) - }) -} - -// contentionWorker provides cleaner call stacks for lock contention profile tests -type contentionWorker struct { - before func() - fn func() bool - after func() -} - -func (w *contentionWorker) run() { - defer w.after() - w.before() - - for w.fn() { - } -} diff --git a/src/runtime/mprof.go b/src/runtime/mprof.go index b1930b3020..af461eef1a 100644 --- a/src/runtime/mprof.go +++ b/src/runtime/mprof.go @@ -234,10 +234,6 @@ func newBucket(typ bucketType, nstk int) *bucket { // stk returns the slice in b holding the stack. func (b *bucket) stk() []uintptr { stk := (*[maxStack]uintptr)(add(unsafe.Pointer(b), unsafe.Sizeof(*b))) - if b.nstk > maxStack { - // prove that slicing works; otherwise a failure requires a P - throw("bad profile stack count") - } return stk[:b.nstk:b.nstk] } @@ -513,237 +509,7 @@ func saveblockevent(cycles, rate int64, skip int, which bucketType) { } else { nstk = gcallers(gp.m.curg, skip, stk[:]) } - - saveBlockEventStack(cycles, rate, stk[:nstk], which) -} - -// lockTimer assists with profiling contention on runtime-internal locks. -// -// There are several steps between the time that an M experiences contention and -// when that contention may be added to the profile. This comes from our -// constraints: We need to keep the critical section of each lock small, -// especially when those locks are contended. The reporting code cannot acquire -// new locks until the M has released all other locks, which means no memory -// allocations and encourages use of (temporary) M-local storage. -// -// The M will have space for storing one call stack that caused contention, and -// for the magnitude of that contention. It will also have space to store the -// magnitude of additional contention the M caused, since it only has space to -// remember one call stack and might encounter several contention events before -// it releases all of its locks and is thus able to transfer the local buffer -// into the profile. -// -// The M will collect the call stack when it unlocks the contended lock. That -// minimizes the impact on the critical section of the contended lock, and -// matches the mutex profile's behavior for contention in sync.Mutex: measured -// at the Unlock method. -// -// The profile for contention on sync.Mutex blames the caller of Unlock for the -// amount of contention experienced by the callers of Lock which had to wait. -// When there are several critical sections, this allows identifying which of -// them is responsible. -// -// Matching that behavior for runtime-internal locks will require identifying -// which Ms are blocked on the mutex. The semaphore-based implementation is -// ready to allow that, but the futex-based implementation will require a bit -// more work. Until then, we report contention on runtime-internal locks with a -// call stack taken from the unlock call (like the rest of the user-space -// "mutex" profile), but assign it a duration value based on how long the -// previous lock call took (like the user-space "block" profile). -// -// Thus, reporting the call stacks of runtime-internal lock contention is -// guarded by GODEBUG for now. Set GODEBUG=profileruntimelocks=1 to enable. -// -// TODO(rhysh): plumb through the delay duration, remove GODEBUG, update comment -// -// The M will track this by storing a pointer to the lock; lock/unlock pairs for -// runtime-internal locks are always on the same M. -// -// Together, that demands several steps for recording contention. First, when -// finally acquiring a contended lock, the M decides whether it should plan to -// profile that event by storing a pointer to the lock in its "to be profiled -// upon unlock" field. If that field is already set, it uses the relative -// magnitudes to weight a random choice between itself and the other lock, with -// the loser's time being added to the "additional contention" field. Otherwise -// if the M's call stack buffer is occupied, it does the comparison against that -// sample's magnitude. -// -// Second, having unlocked a mutex the M checks to see if it should capture the -// call stack into its local buffer. Finally, when the M unlocks its last mutex, -// it transfers the local buffer into the profile. As part of that step, it also -// transfers any "additional contention" time to the profile. Any lock -// contention that it experiences while adding samples to the profile will be -// recorded later as "additional contention" and not include a call stack, to -// avoid an echo. -type lockTimer struct { - lock *mutex - timeRate int64 - timeStart int64 - tickStart int64 -} - -func (lt *lockTimer) begin() { - rate := int64(atomic.Load64(&mutexprofilerate)) - - lt.timeRate = gTrackingPeriod - if rate != 0 && rate < lt.timeRate { - lt.timeRate = rate - } - if int64(fastrand())%lt.timeRate == 0 { - lt.timeStart = nanotime() - } - - if rate > 0 && int64(fastrand())%rate == 0 { - lt.tickStart = cputicks() - } -} - -func (lt *lockTimer) end() { - gp := getg() - - if lt.timeStart != 0 { - nowTime := nanotime() - gp.m.mLockProfile.waitTime.Add((nowTime - lt.timeStart) * lt.timeRate) - } - - if lt.tickStart != 0 { - nowTick := cputicks() - gp.m.mLockProfile.recordLock(nowTick-lt.tickStart, lt.lock) - } -} - -type mLockProfile struct { - waitTime atomic.Int64 // total nanoseconds spent waiting in runtime.lockWithRank - stack [maxStack]uintptr // stack that experienced contention in runtime.lockWithRank - pending uintptr // *mutex that experienced contention (to be traceback-ed) - cycles int64 // cycles attributable to "pending" (if set), otherwise to "stack" - cyclesLost int64 // contention for which we weren't able to record a call stack - disabled bool // attribute all time to "lost" -} - -func (prof *mLockProfile) recordLock(cycles int64, l *mutex) { - if cycles <= 0 { - return - } - - if prof.disabled { - // We're experiencing contention while attempting to report contention. - // Make a note of its magnitude, but don't allow it to be the sole cause - // of another contention report. - prof.cyclesLost += cycles - return - } - - if uintptr(unsafe.Pointer(l)) == prof.pending { - // Optimization: we'd already planned to profile this same lock (though - // possibly from a different unlock site). - prof.cycles += cycles - return - } - - if prev := prof.cycles; prev > 0 { - // We can only store one call stack for runtime-internal lock contention - // on this M, and we've already got one. Decide which should stay, and - // add the other to the report for runtime._LostContendedLock. - prevScore := fastrand64() % uint64(prev) - thisScore := fastrand64() % uint64(cycles) - if prevScore > thisScore { - prof.cyclesLost += cycles - return - } else { - prof.cyclesLost += prev - } - } - // Saving the *mutex as a uintptr is safe because: - // - lockrank_on.go does this too, which gives it regular exercise - // - the lock would only move if it's stack allocated, which means it - // cannot experience multi-M contention - prof.pending = uintptr(unsafe.Pointer(l)) - prof.cycles = cycles -} - -// From unlock2, we might not be holding a p in this code. -// -//go:nowritebarrierrec -func (prof *mLockProfile) recordUnlock(l *mutex) { - if uintptr(unsafe.Pointer(l)) == prof.pending { - prof.captureStack() - } - if gp := getg(); gp.m.locks == 1 && gp.m.mLockProfile.cycles != 0 { - prof.store() - } -} - -func (prof *mLockProfile) captureStack() { - skip := 3 // runtime.(*mLockProfile).recordUnlock runtime.unlock2 runtime.unlockWithRank - if staticLockRanking { - // When static lock ranking is enabled, we'll always be on the system - // stack at this point. There will be a runtime.unlockWithRank.func1 - // frame, and if the call to runtime.unlock took place on a user stack - // then there'll also be a runtime.systemstack frame. To keep stack - // traces somewhat consistent whether or not static lock ranking is - // enabled, we'd like to skip those. But it's hard to tell how long - // we've been on the system stack so accept an extra frame in that case, - // with a leaf of "runtime.unlockWithRank runtime.unlock" instead of - // "runtime.unlock". - skip += 1 // runtime.unlockWithRank.func1 - } - prof.pending = 0 - - if debug.profileruntimelocks.Load() == 0 { - prof.stack[0] = abi.FuncPCABIInternal(_LostContendedLock) + sys.PCQuantum - prof.stack[1] = 0 - return - } - - var nstk int - gp := getg() - sp := getcallersp() - pc := getcallerpc() - systemstack(func() { - var u unwinder - u.initAt(pc, sp, 0, gp, unwindSilentErrors|unwindJumpStack) - nstk = tracebackPCs(&u, skip, prof.stack[:]) - }) - if nstk < len(prof.stack) { - prof.stack[nstk] = 0 - } -} - -func (prof *mLockProfile) store() { - // Report any contention we experience within this function as "lost"; it's - // important that the act of reporting a contention event not lead to a - // reportable contention event. This also means we can use prof.stack - // without copying, since it won't change during this function. - mp := acquirem() - prof.disabled = true - - nstk := maxStack - for i := 0; i < nstk; i++ { - if pc := prof.stack[i]; pc == 0 { - nstk = i - break - } - } - - cycles, lost := prof.cycles, prof.cyclesLost - prof.cycles, prof.cyclesLost = 0, 0 - - rate := int64(atomic.Load64(&mutexprofilerate)) - saveBlockEventStack(cycles, rate, prof.stack[:nstk], mutexProfile) - if lost > 0 { - lostStk := [...]uintptr{ - abi.FuncPCABIInternal(_LostContendedLock) + sys.PCQuantum, - } - saveBlockEventStack(lost, rate, lostStk[:], mutexProfile) - } - - prof.disabled = false - releasem(mp) -} - -func saveBlockEventStack(cycles, rate int64, stk []uintptr, which bucketType) { - b := stkbucket(which, 0, stk, true) + b := stkbucket(which, 0, stk[:nstk], true) bp := b.bp() lock(&profBlockLock) diff --git a/src/runtime/proc.go b/src/runtime/proc.go index 66d7da887e..ea011e3192 100644 --- a/src/runtime/proc.go +++ b/src/runtime/proc.go @@ -919,7 +919,7 @@ func mcommoninit(mp *m, id int64) { // when it is just in a register or thread-local storage. mp.alllink = allm - // NumCgoCall() and others iterate over allm w/o schedlock, + // NumCgoCall() iterates over allm w/o schedlock, // so we need to publish it safely. atomicstorep(unsafe.Pointer(&allm), unsafe.Pointer(mp)) unlock(&sched.lock) @@ -1852,7 +1852,6 @@ found: unlock(&sched.lock) atomic.Xadd64(&ncgocall, int64(mp.ncgocall)) - sched.totalRuntimeLockWaitTime.Add(mp.mLockProfile.waitTime.Load()) // Release the P. handoffp(releasep()) @@ -5271,7 +5270,6 @@ func _ExternalCode() { _ExternalCode() } func _LostExternalCode() { _LostExternalCode() } func _GC() { _GC() } func _LostSIGPROFDuringAtomic64() { _LostSIGPROFDuringAtomic64() } -func _LostContendedLock() { _LostContendedLock() } func _VDSO() { _VDSO() } // Called if we receive a SIGPROF signal. diff --git a/src/runtime/runtime1.go b/src/runtime/runtime1.go index 877d94eef2..489dcdd79c 100644 --- a/src/runtime/runtime1.go +++ b/src/runtime/runtime1.go @@ -307,27 +307,26 @@ type dbgVar struct { // existing int var for that value, which may // already have an initial value. var debug struct { - cgocheck int32 - clobberfree int32 - dontfreezetheworld int32 - efence int32 - gccheckmark int32 - gcpacertrace int32 - gcshrinkstackoff int32 - gcstoptheworld int32 - gctrace int32 - invalidptr int32 - madvdontneed int32 // for Linux; issue 28466 - profileruntimelocks atomic.Int32 - scavtrace int32 - scheddetail int32 - schedtrace int32 - tracebackancestors int32 - asyncpreemptoff int32 - harddecommit int32 - adaptivestackstart int32 - tracefpunwindoff int32 - traceadvanceperiod int32 + cgocheck int32 + clobberfree int32 + dontfreezetheworld int32 + efence int32 + gccheckmark int32 + gcpacertrace int32 + gcshrinkstackoff int32 + gcstoptheworld int32 + gctrace int32 + invalidptr int32 + madvdontneed int32 // for Linux; issue 28466 + scavtrace int32 + scheddetail int32 + schedtrace int32 + tracebackancestors int32 + asyncpreemptoff int32 + harddecommit int32 + adaptivestackstart int32 + tracefpunwindoff int32 + traceadvanceperiod int32 // debug.malloc is used as a combined debug check // in the malloc function and should be set @@ -353,7 +352,6 @@ var dbgvars = []*dbgVar{ {name: "gctrace", value: &debug.gctrace}, {name: "invalidptr", value: &debug.invalidptr}, {name: "madvdontneed", value: &debug.madvdontneed}, - {name: "profileruntimelocks", atomic: &debug.profileruntimelocks}, {name: "sbrk", value: &debug.sbrk}, {name: "scavtrace", value: &debug.scavtrace}, {name: "scheddetail", value: &debug.scheddetail}, diff --git a/src/runtime/runtime2.go b/src/runtime/runtime2.go index 6bdd66766d..e64c3c5695 100644 --- a/src/runtime/runtime2.go +++ b/src/runtime/runtime2.go @@ -593,8 +593,6 @@ type m struct { lockedInt uint32 // tracking for internal lockOSThread nextwaitm muintptr // next m waiting for lock - mLockProfile mLockProfile // fields relating to runtime.lock contention - // wait* are used to carry arguments from gopark into park_m, because // there's no stack to put them on. That is their sole purpose. waitunlockf func(*g, unsafe.Pointer) bool @@ -902,12 +900,6 @@ type schedt struct { // stwTotalTimeOther covers the others. stwTotalTimeGC timeHistogram stwTotalTimeOther timeHistogram - - // totalRuntimeLockWaitTime (plus the value of lockWaitTime on each M in - // allm) is the sum of time goroutines have spent in _Grunnable and with an - // M, but waiting for locks within the runtime. This field stores the value - // for Ms that have exited. - totalRuntimeLockWaitTime atomic.Int64 } // Values for the flags field of a sigTabT. From 0709f1bb00287371da61a1fc94f6e2a086aa0f29 Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Sun, 19 Nov 2023 20:18:50 -0800 Subject: [PATCH 005/313] cmd/compile/internal/ir: add CallExpr.GoDefer The devirtualizer and inliner both want to recognize call expressions that are part of a go or defer statement. This CL refactors them to use a single CallExpr.GoDefer flag, which gets set during normalization of go/defer statements during typecheck. While here, drop some OCALLMETH assertions. Typecheck has been responsible for desugaring them into OCALLFUNC for a while now, and ssagen will check this again for us later anyway. Change-Id: I3fc370f4417431aae97239313da6fe523f512a2e Reviewed-on: https://go-review.googlesource.com/c/go/+/543657 Reviewed-by: Than McIntosh LUCI-TryBot-Result: Go LUCI Auto-Submit: Matthew Dempsky --- .../internal/devirtualize/devirtualize.go | 30 ++++++++-------- src/cmd/compile/internal/inline/inl.go | 16 +-------- src/cmd/compile/internal/ir/expr.go | 3 +- src/cmd/compile/internal/typecheck/stmt.go | 36 ++++++++++--------- 4 files changed, 38 insertions(+), 47 deletions(-) diff --git a/src/cmd/compile/internal/devirtualize/devirtualize.go b/src/cmd/compile/internal/devirtualize/devirtualize.go index 7b3a869d8e..b5e55c6d48 100644 --- a/src/cmd/compile/internal/devirtualize/devirtualize.go +++ b/src/cmd/compile/internal/devirtualize/devirtualize.go @@ -23,24 +23,10 @@ import ( func Static(fn *ir.Func) { ir.CurFunc = fn - // For promoted methods (including value-receiver methods promoted to pointer-receivers), - // the interface method wrapper may contain expressions that can panic (e.g., ODEREF, ODOTPTR, ODOTINTER). - // Devirtualization involves inlining these expressions (and possible panics) to the call site. - // This normally isn't a problem, but for go/defer statements it can move the panic from when/where - // the call executes to the go/defer statement itself, which is a visible change in semantics (e.g., #52072). - // To prevent this, we skip devirtualizing calls within go/defer statements altogether. - goDeferCall := make(map[*ir.CallExpr]bool) ir.VisitList(fn.Body, func(n ir.Node) { switch n := n.(type) { - case *ir.GoDeferStmt: - if call, ok := n.Call.(*ir.CallExpr); ok { - goDeferCall[call] = true - } - return case *ir.CallExpr: - if !goDeferCall[n] { - staticCall(n) - } + staticCall(n) } }) } @@ -48,6 +34,20 @@ func Static(fn *ir.Func) { // staticCall devirtualizes the given call if possible when the concrete callee // is available statically. func staticCall(call *ir.CallExpr) { + // For promoted methods (including value-receiver methods promoted + // to pointer-receivers), the interface method wrapper may contain + // expressions that can panic (e.g., ODEREF, ODOTPTR, + // ODOTINTER). Devirtualization involves inlining these expressions + // (and possible panics) to the call site. This normally isn't a + // problem, but for go/defer statements it can move the panic from + // when/where the call executes to the go/defer statement itself, + // which is a visible change in semantics (e.g., #52072). To prevent + // this, we skip devirtualizing calls within go/defer statements + // altogether. + if call.GoDefer { + return + } + if call.Op() != ir.OCALLINTER { return } diff --git a/src/cmd/compile/internal/inline/inl.go b/src/cmd/compile/internal/inline/inl.go index 2677ae3086..d89be8437d 100644 --- a/src/cmd/compile/internal/inline/inl.go +++ b/src/cmd/compile/internal/inline/inl.go @@ -845,15 +845,6 @@ func inlnode(callerfn *ir.Func, n ir.Node, bigCaller bool, inlCalls *[]*ir.Inlin } switch n.Op() { - case ir.ODEFER, ir.OGO: - n := n.(*ir.GoDeferStmt) - switch call := n.Call; call.Op() { - case ir.OCALLMETH: - base.FatalfAt(call.Pos(), "OCALLMETH missed by typecheck") - case ir.OCALLFUNC: - call := call.(*ir.CallExpr) - call.NoInline = true - } case ir.OTAILCALL: n := n.(*ir.TailCallStmt) n.Call.NoInline = true // Not inline a tail call for now. Maybe we could inline it just like RETURN fn(arg)? @@ -862,8 +853,6 @@ func inlnode(callerfn *ir.Func, n ir.Node, bigCaller bool, inlCalls *[]*ir.Inlin // so escape analysis can avoid more heapmoves. case ir.OCLOSURE: return n - case ir.OCALLMETH: - base.FatalfAt(n.Pos(), "OCALLMETH missed by typecheck") case ir.OCALLFUNC: n := n.(*ir.CallExpr) if n.Fun.Op() == ir.OMETHEXPR { @@ -889,12 +878,9 @@ func inlnode(callerfn *ir.Func, n ir.Node, bigCaller bool, inlCalls *[]*ir.Inlin // transmogrify this node itself unless inhibited by the // switch at the top of this function. switch n.Op() { - case ir.OCALLMETH: - base.FatalfAt(n.Pos(), "OCALLMETH missed by typecheck") - case ir.OCALLFUNC: call := n.(*ir.CallExpr) - if call.NoInline { + if call.GoDefer || call.NoInline { break } if base.Flag.LowerM > 3 { diff --git a/src/cmd/compile/internal/ir/expr.go b/src/cmd/compile/internal/ir/expr.go index ca2a2d5008..1bf9a15ae0 100644 --- a/src/cmd/compile/internal/ir/expr.go +++ b/src/cmd/compile/internal/ir/expr.go @@ -190,7 +190,8 @@ type CallExpr struct { RType Node `mknode:"-"` // see reflectdata/helpers.go KeepAlive []*Name // vars to be kept alive until call returns IsDDD bool - NoInline bool + GoDefer bool // whether this call is part of a go or defer statement + NoInline bool // whether this call must not be inlined } func NewCallExpr(pos src.XPos, op Op, fun Node, args []Node) *CallExpr { diff --git a/src/cmd/compile/internal/typecheck/stmt.go b/src/cmd/compile/internal/typecheck/stmt.go index e54d5256e6..8d792485d8 100644 --- a/src/cmd/compile/internal/typecheck/stmt.go +++ b/src/cmd/compile/internal/typecheck/stmt.go @@ -198,32 +198,36 @@ func tcFor(n *ir.ForStmt) ir.Node { return n } -// tcGoDefer typechecks an OGO/ODEFER statement. +// tcGoDefer typechecks (normalizes) an OGO/ODEFER statement. +func tcGoDefer(n *ir.GoDeferStmt) { + call := normalizeGoDeferCall(n.Pos(), n.Op(), n.Call, n.PtrInit()) + call.GoDefer = true + n.Call = call +} + +// normalizeGoDeferCall normalizes call into a normal function call +// with no arguments and no results, suitable for use in an OGO/ODEFER +// statement. // -// Really, this means normalizing the statement to always use a simple -// function call with no arguments and no results. For example, it -// rewrites: +// For example, it normalizes: // -// defer f(x, y) +// f(x, y) // // into: // -// x1, y1 := x, y -// defer func() { f(x1, y1) }() -func tcGoDefer(n *ir.GoDeferStmt) { - call := n.Call - - init := n.PtrInit() +// x1, y1 := x, y // added to init +// func() { f(x1, y1) }() // result +func normalizeGoDeferCall(pos src.XPos, op ir.Op, call ir.Node, init *ir.Nodes) *ir.CallExpr { init.Append(ir.TakeInit(call)...) - if call, ok := n.Call.(*ir.CallExpr); ok && call.Op() == ir.OCALLFUNC { + if call, ok := call.(*ir.CallExpr); ok && call.Op() == ir.OCALLFUNC { if sig := call.Fun.Type(); sig.NumParams()+sig.NumResults() == 0 { - return // already in normal form + return call // already in normal form } } // Create a new wrapper function without parameters or results. - wrapperFn := ir.NewClosureFunc(n.Pos(), n.Pos(), n.Op(), types.NewSignature(nil, nil, nil), ir.CurFunc, Target) + wrapperFn := ir.NewClosureFunc(pos, pos, op, types.NewSignature(nil, nil, nil), ir.CurFunc, Target) wrapperFn.DeclareParams(true) wrapperFn.SetWrapper(true) @@ -372,8 +376,8 @@ func tcGoDefer(n *ir.GoDeferStmt) { // evaluate there. wrapperFn.Body = []ir.Node{call} - // Finally, rewrite the go/defer statement to call the wrapper. - n.Call = Call(call.Pos(), wrapperFn.OClosure, nil, false) + // Finally, construct a call to the wrapper. + return Call(call.Pos(), wrapperFn.OClosure, nil, false).(*ir.CallExpr) } // tcIf typechecks an OIF node. From 28a8896d57f315b241b77eff26d9302cfe88c13b Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Sun, 19 Nov 2023 21:00:17 -0800 Subject: [PATCH 006/313] cmd/compile/internal/inline: allow inlining of checkptr arguments The early return here is meant to suppress inlining of the function call itself. However, it also suppresses recursing to visit the call arguments, which are safe to inline. Change-Id: I75887574c00931cb622277d04a822bc84c29bfa2 Reviewed-on: https://go-review.googlesource.com/c/go/+/543658 Auto-Submit: Matthew Dempsky Reviewed-by: Than McIntosh LUCI-TryBot-Result: Go LUCI --- src/cmd/compile/internal/inline/inl.go | 2 +- .../{issue35073.go => issue35073a.go} | 0 test/fixedbugs/issue35073b.go | 23 +++++++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) rename test/fixedbugs/{issue35073.go => issue35073a.go} (100%) create mode 100644 test/fixedbugs/issue35073b.go diff --git a/src/cmd/compile/internal/inline/inl.go b/src/cmd/compile/internal/inline/inl.go index d89be8437d..d808c438ca 100644 --- a/src/cmd/compile/internal/inline/inl.go +++ b/src/cmd/compile/internal/inline/inl.go @@ -863,7 +863,7 @@ func inlnode(callerfn *ir.Func, n ir.Node, bigCaller bool, inlCalls *[]*ir.Inlin if base.Debug.Checkptr != 0 { switch types.ReflectSymName(s) { case "Value.UnsafeAddr", "Value.Pointer": - return n + n.NoInline = true } } } diff --git a/test/fixedbugs/issue35073.go b/test/fixedbugs/issue35073a.go similarity index 100% rename from test/fixedbugs/issue35073.go rename to test/fixedbugs/issue35073a.go diff --git a/test/fixedbugs/issue35073b.go b/test/fixedbugs/issue35073b.go new file mode 100644 index 0000000000..8cdc6c184d --- /dev/null +++ b/test/fixedbugs/issue35073b.go @@ -0,0 +1,23 @@ +// errorcheck -0 -d=checkptr -m + +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Test that we can inline the receiver arguments for +// reflect.Value.UnsafeAddr/Pointer, even in checkptr mode. + +package main + +import ( + "reflect" + "unsafe" +) + +func main() { + n := 10 // ERROR "moved to heap: n" + m := make(map[string]string) // ERROR "moved to heap: m" "make\(map\[string\]string\) escapes to heap" + + _ = unsafe.Pointer(reflect.ValueOf(&n).Elem().UnsafeAddr()) // ERROR "inlining call" + _ = unsafe.Pointer(reflect.ValueOf(&m).Elem().Pointer()) // ERROR "inlining call" +} From 95712fe70bb8d6f3c00662acdff79db3da067026 Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Sun, 19 Nov 2023 22:01:07 -0800 Subject: [PATCH 007/313] cmd/compile/internal/inline: remove useless code There doesn't appear to be any need for this code. EditChildren won't recurse into the closure body anyway. Split out into a separate commit in case I'm overlooking something. Change-Id: I004d1aa04865896de972bf3323b1622cc08a0d18 Reviewed-on: https://go-review.googlesource.com/c/go/+/543659 LUCI-TryBot-Result: Go LUCI Reviewed-by: Than McIntosh Auto-Submit: Matthew Dempsky --- src/cmd/compile/internal/inline/inl.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/cmd/compile/internal/inline/inl.go b/src/cmd/compile/internal/inline/inl.go index d808c438ca..7aed532c99 100644 --- a/src/cmd/compile/internal/inline/inl.go +++ b/src/cmd/compile/internal/inline/inl.go @@ -848,11 +848,6 @@ func inlnode(callerfn *ir.Func, n ir.Node, bigCaller bool, inlCalls *[]*ir.Inlin case ir.OTAILCALL: n := n.(*ir.TailCallStmt) n.Call.NoInline = true // Not inline a tail call for now. Maybe we could inline it just like RETURN fn(arg)? - - // TODO do them here (or earlier), - // so escape analysis can avoid more heapmoves. - case ir.OCLOSURE: - return n case ir.OCALLFUNC: n := n.(*ir.CallExpr) if n.Fun.Op() == ir.OMETHEXPR { From 752379113b7c3e2170f790ec8b26d590defc71d1 Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Sun, 19 Nov 2023 10:24:22 -0500 Subject: [PATCH 008/313] runtime/race: update race syso for PPC64LE Following CL 543035, this CL updates race syso for Linux/PPC64LE. Now we have update all of them (except OpenBSD). For #61395. Fixes #62624. Change-Id: I9e1d758355114a50ff206e5d78dc4ea8a06367d8 Reviewed-on: https://go-review.googlesource.com/c/go/+/543397 Run-TryBot: Cherry Mui Reviewed-by: Than McIntosh Reviewed-by: Mauri de Souza Meneguzzo TryBot-Result: Gopher Robot --- src/runtime/race/README | 2 +- src/runtime/race/race_linux_ppc64le.syso | Bin 669736 -> 727720 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/race/README b/src/runtime/race/README index 75484f71eb..47c51ca9c1 100644 --- a/src/runtime/race/README +++ b/src/runtime/race/README @@ -13,5 +13,5 @@ internal/amd64v1/race_windows.syso built with LLVM 51bfeff0e4b0757ff773da6882f4d internal/amd64v3/race_linux.syso built with LLVM 51bfeff0e4b0757ff773da6882f4d538996c9b04 and Go e7d582b55dda36e76ce4d0ce770139ca0915b7c5. race_darwin_arm64.syso built with LLVM 51bfeff0e4b0757ff773da6882f4d538996c9b04 and Go e7d582b55dda36e76ce4d0ce770139ca0915b7c5. race_linux_arm64.syso built with LLVM 51bfeff0e4b0757ff773da6882f4d538996c9b04 and Go e7d582b55dda36e76ce4d0ce770139ca0915b7c5. -race_linux_ppc64le.syso built with LLVM 41cb504b7c4b18ac15830107431a0c1eec73a6b2 and Go 851ecea4cc99ab276109493477b2c7e30c253ea8. +race_linux_ppc64le.syso built with LLVM 51bfeff0e4b0757ff773da6882f4d538996c9b04 and Go e7d582b55dda36e76ce4d0ce770139ca0915b7c5. race_linux_s390x.syso built with LLVM 51bfeff0e4b0757ff773da6882f4d538996c9b04 and Go e7d582b55dda36e76ce4d0ce770139ca0915b7c5. diff --git a/src/runtime/race/race_linux_ppc64le.syso b/src/runtime/race/race_linux_ppc64le.syso index 1939f29ac0aeed9ce225f0d58e34b819b497ee09..49824a9d18ce59af7e4e3d8eb7c17dc5048a7848 100644 GIT binary patch literal 727720 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�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

-~9Im7^qTD;2WHu$9J6< zgf8DYZ(s!9fh<$Y0;tyH;JO^w_$Fc#znfm6M)3*kId@mxT{%>aZ{#jipC41<^Pz?6 zi<3XY=Wp8^U&-Z%mj&>x@0PQ-zU#(6u|Hd;#ye{kS7zOZ>xKd=MqPJf-O#14opIfJ z>W288LU%BzS*J45;P^#tsA4 zfyTzILyyn>W=B51wMkW}b&YLXhAus!+?u)Ha?3A|bySyc9db8z4>ixJ+kN`ht$?L& z$Wac~5zIeagKwCsaAhLghVNwKx&qJa{Uq>L>AN4p{Q}?p8@N~Mmf-7Zq$Qx9y;`Nd zKH;dtS1Z+5)?U8#Sb7oKBVF(<=c^(0HoooJ>7!4lk3RcApZ%cEe$eL?(B~+ApP0Nj z_nP~&eBN#E{N17aa4>LLX!Q4>(b%CfH3}N-$5<}p0xO;ZttvH*VwFSgib~MucHs7j ztBx8QP?PzGIM(vZZ$0GxJU`qia0i0!#yLYjR!72sc>?fH0L}@(IT6NpH2w4phv((q z$G3Hf8(v?;HSxmhpWvD};q?dCj)c$4w|sTmAE0fe>Ypxc{}jsb+qv!dwx|7eC$7hA zIex#B-x-hJ`}c>=HjIIfzB1|FQ#n-Aygw^Egt2mrRqAiSLmcNTlM7M4dCu&PP@n>1 zuL!}=sx`Up+|t*7tlWOhW@XT-z;DG@wjC4mTdFrq7JoZ zQ7!-+gvTm!XY)tGkp11^$;#Zx{0RDPewzLGaq!W{7x#hM zA$QlNAwNF+d}ZlH{#x{L{sH&ruMT(OHxwQl#@AtkBhr3%_G?F9bE{it4Fy%@v*A6J zxo)&io-O~u9d7fSw;ozDs4K#m=@P;P<*Db;4KboFyCs41gq+U1c8G2*P)6#nr>Q!+(rraqhHx;g9C^rWB z!Y=y0EzBEjU$7GPFkS?q>$cO@lwZEk0lTxF-=wFF$g8@jqn2lR|5varWvV_9s5snm zaqg=w?9BR0PgLUFx9*~ysczjmMB73=d%Wzco=vHlRcuqLaW8UbY)%F4h0f;wgYqLS zwC}L(O_y)2eDr2wt3f z!EFc3j{4z1`Q^&p>hcde+>K|U`@S_o`w6c;=&m@OgDz`np7U-;DD-W-gTAYvUi{XG zecyri_T8m9)P;q2A>X^+dDKat2i;acFUE%!$-6G-hq=Lpct`zg^|7^Mv`s;jW)X**NCyB73zz?hvuWp;91%qeD{5AUfura31d$yePtZfQ))xd?^hiCn9qVw z=d?_ADuWM;?*VyE{FDEC!Tb;oNRn*UYjrLP@z-C6s=_wY%V?uQ@n z6uzDP+$2u6qt7#$p-u;(5vFV%Wov zJJjUuxf;L%+61ccD>g&HZ>_L4^@~jfn|jO8Baq87(C87bor~_0(eC4u2j`Jx_b#E8`d*v$nSv zy802|XUXUv1C|Y0H90r;I>sATx8zoXKg!h^z%n}*_}Gr=J@^R)SRO(9E)mH#dK%pHKth_Qk-(H@CucT>F;5qOk;|AiT z6SyZ%JAfO@dzuDQdG8G$@3GDZ$6@&Og(-Zc`LzSMWIvN=AHPK~fL8>Db9l%0ES*Ls z3++OmPAdl=eWcqxYU(}$+*q7y_~(KKBQD$Z<8}3wk+2KBM!eeoh}#9|lX~?mV50pY z?^&4kdx-4$N-M=A6#?Kk?+DT26DO@G_zy5 z;FGiS!Y}mYA1{=Lj6DbZusnHh$!Hg3r564?`0<~pBfG(CmBF9<6KOIAe}4aNuP?+q zFa6U<_)XBm&!bOCJ*`_uq~28B+KqarQP1*n{GZwWyJ#Oe*vbT8*!Ir_-A8)3r~}^j z`RLX^f8sE7g81jp!arAP$$I92{JEfGvk$``n~l7Wv%Y3-WwvJSx83&eY~+9Hvf;)+ zu6pZ!_~rYv+sbs#=;GXQw=ujG+JMV(%A-x|K7cde%AifEvH{O_)XO_{7z*O+U%T7EeX z-|m(X@Gf+?6Le?Yk^2&Su}?Kt4!s0EMB5YSe**nYbb2|R*3Pi9{_rg$yw?7(zSjP* zzTO00q(95{;7f#U8}2<9a%ITBSzJoq4fyoq(&ABYYH<1DwXcScf*%Fehlhp;Z-@Aa z>!02x&$WM?&pSNK5p)q_4;vzH`}S#el}>k{GidAUd6n^ma7 zJ>&`eQMg}+`vt!HAnxfGax8C395aSErVeq;Scki7^N{<%Jo3Zg=e;;;&d?-$(&jmv zc846TvvYIkhu;ET)p?sYn6ohNCJ~cV`rf_dd)I+?3w-ZR$vd6DI)-;uYAIrwy4?+1 z9vC_bT?Yy2Bt7U`4)}6sxE>>&=_AnB3#ll4-`hIEu>Z|-PVNr9@fD2W_TU?!A>c&3 z@NMvs=9fnCm~kwHAK;ozU|w@C%~I z7apE?3ieW|^-mv#Eg`@BggO#*w6s&x(2lV`$8)1{i1iSM&CiXXP12Uv8C;XDq*OeO&o>Zf zG2i;V5cv!-)s;&1Q{?}@K1tp3V=vw*Ltawz5_yngCJxyL`}gxK-!BI*lCq$JlG$1?1gT@XKu`J~)Z^Kq0n|PE`Nw3B(8|zaCbLa*L3Uv+%e-A03wb zCUPESCQhN;3*Y#7j&SY~xODr+^R&U!w|@%0Ec2SAljd>eeHRB`06$YNEl|Jb$-^GN z?!NPT!|ZP%@WeVg_IU*KTbx5)3%O90Lp}>QM{I#y$z(Zk{yD@J-$p!H(2rk|xO61+ z6#DkdRt|kohDyhD?8=ew2N;w4^Vfz+3(bQMJUt+OG;_tDgTAiFu|8?N8ggf02*AIj z{8P65I(lqU%Xb;%+X4TU{~(e@t^|JEV#K6(=(aGP0pQQJ6&FA5k*6u+gpqI%o-z8l zZHu8x76)IHxN~Zb`jm+~DFe11^H+Xal6EJ>XRbqA^McGNoxXJ(zTE}4dh1feuyxNe zPxU7Fg8g48Q*D$h=A)ZOBcxsKb>N>c5jP>FdEl(XCe!nP3%E{#o|L&Iqo0Hfo!G5j zUzqCv4}>o)%E4d3__Yj$gr4gyJx8qmx&U25`Pl|MHjh5Fo3f}nZ_l}mvy{$F_X=LV zCwyLQ<6ywsf&Q6`r!9&5VAj6>%ewq~Ux!S*{PnQ9J@4XNw2KPg)CK zxD4@3!S+@oreT{4B&PX8;NZ7hb>Wl1!5?O;P$ztDQSQ9NG@6DlN=&mJIQTYk;L&gq z@KxG2+kN353CC^5C%7&6rr@M=ZS$PZKvouj&Y#R-K2dn3Q)ET=(;>35{^{o+<81fE ze?~j%B6OZIxq;6DAOHOj-&G5JZ$A}&UFD7=Ht>&6>s(z=i7tBvG4|gc(maHm2V`^% z^1ya3psyl%fG&6+uu&dP2yJycFF>E1zIDCy@9+Dh#7t!qBWQ>CTZG>wqtq|q-O7P3 zkQhkIW?W*RC-q#2Pd2w923iOGUJ3_!jBtEFe1LNG)^!d5-vhYDd)l2GzxHf_B&jv2$RCsxg`2LeRXNWismZ@#-+OZts zobBWh0exO!02=;NKKOqG_($F9Rp*h%A^dX${!_E(XD5Gj%kDkuy+!qVForc8!?!So z*+VtHF}#jGPtE?8JNcut9eY&$?e$@l-MV#X#HX!#2yWyA5jeJ`FCpmIeF8jibz#bUQbbKDe*rU^0MjPWQ+05i_jc z+`@wfu*Zx`gFY=s_ZD!iuXKD*{u;|ad-Zbu`&TFP^iRtsIS-dz`b_R6#I%T;$K2Z< z&xIQ|V6gN4uO|+zPA$hN9VAFI^Y(Dz>aT|_(Q@OLKEUOs}~Sg25zb#;AP-o5%R^y8V(r>2x; zTZOv5Hna@SLQDA9sDD&{QeVjT5pa38d7j0YX#B@>Eck2okDEn?zB4-Z@@shd*a{qh zTKK>^E6KkC{rt3h8nkn7>&dyGAMsDTlLnRQN0>X%xF+2iK`Uq-&O-tx&0ih>zKQ4Q zaopPJZ_D4#ORz;Vy*qWCcaG#s3h?>cME)aO=7TLR^qjuz8`8&KjPnx4S)dQc1Jcek zCQY+)rB(?pd7cQqA&|z>Qgc5eUHsplz=qD5DRdqBSlU3YNE^RwkT$CgZ8(NX^|^7< z$WI&QSm~!0WMF3caNcw#`kcJZyPKg8k_Ob{;EkF4*Yug5c8^?#2g3617p5y<(eP;8 zHNy^ug~yBWx5bY?j~7r^$zpn5nDq(Nk5(^=Y_0en*8D9Ucb7hqJPri zlOT+&$x`YE(7n{>qaos*`kC?$)U^R$oi~T?Uqu_}jsBX@Y-aj!{a`77{9>^B`>`A` zbAQwE<1fn(*eAKN8JiHz5i_0_b3^|{?{&aBWFD7|FUMu?S*174Y54yX_Nh|Uj?>pf zT!7g0*{fxhr`Lv&pJG0{run;v+7M5>w+-j2|KXM4?#s?l-#>kuUKN)^}f?%aSpLAa@1smmwsp9dYV<;u;ssq@9;VUCw$ zwY~|*YWx2(x`Gx##^UdzhUl|UlXD1zXc+y`6*JF4-hUYS8&itKl4S98z z=ARku8BeC0)`}JQ&F^0v2L0yKp96i|rC-J06S+=xICS|BR*rY8JFgJO7WPUN8OMAD z=D@4&SH$e+A<|{y%&CetkQ=zyAfFzdrLtwO>GrPV7sIb!ia+KzUPZsN;CpYla{AUS*)sLbP&s0u zaHuxdiMAO()GR*j)+}zzRxf#FxVrU;p?W7aR3Dy|3-57q>rf^fs>>ZiemC4+o9jit zT*qC1=PcwnzKK0O^;o~fc3*`KFSN~duB^xUmzIs{_E(|p#wT+1;aA{8)*wfPW&Q1S zxrJzxWjW^h7RK<~uAD{veE!|ltMf;~)W_7t%#E^W&HbJ*1zrk75cZ`zwvLU#1FsGC)4Ybl6~Yn>({Zz0XaATXs{lCIQnuE4`{%4 z@hRoIQptlnK7||axk*vj%- z@P}T{w_JTAAH8}pfB0%?tP_QQnE&a;4UYQyhI~FB8=ad!ge(MN$o1p6?{aT@O!5ZI zc~q*QwfX!-Y^}-1EA=v0c^0P=z|T&i$JN zbZQ~allsVSAm_fW;L|pb*DU`0p^O?H4s_-Y)qmJesusg$vR5+b(rID|9Ye6 z`?3v`8D~3~dkJGM08^`n)?)lue~dLC`TzSA;&0;m9F~2Y={!Gs)E%9B#=TXY!8FR5 z&P|my+3>>p?8eEXZu!{OEavaR=W7DlS#MWnbAT(KN3Ltt)}h}Yn-6`jnq)qA>|#!} znfY8F-f7>S7Z|VxuZ*zN1drnPl<~8{Cllb43Gm6pjppy(UL42<0n5@@4Q!)oI)=H4 zP@sN@{ITQmd+yZzTdGMR_Rw<>t)1@1d7$rT$nwxRtVcvUo%*k}^Uc}I0?1P_=XACD zXIq9sp{;tZdIp|arb5Hl7B@X~0Wi6L6D!~!xOHD!Hq3cKv^8P-Ye#=?FRlm9Mnk7j z$IrjNKh~B#I~E4-)*Iec9`BBzEa@flj(SZ1U~a|V*FeX;>jm zk~h5wzk=n~75octe#VY>=K1pL=g)p)|E9Np%KKNaFQqm`uSd8(elIQi)y3PFmi^m} zw`sG>AhY3x%i!0q8){S0$#%>q?7_T3qx$}2NWDD?dAP!S{#ldHe;x8nzJCMjY{$5k z*jYMs8FLtukZ;bpxX7n)-I06G-@>;45#%%6R8>}nod3DCAa5t-^?6yFv-rum>OJVH z{Mr#U@6paV^RoB0bB_n~`vY$cV_jQ#gPI>WKl?D&Y27*g)GSqX0X_iQX!>-yx;y~5 z{_D}drVX*xZ7Q!$BJ2jx9A=>ExaB2Gj`>8|vg)ldZ#|417t3*fM9t#!hn`p8|L{fi z_J`F=mJXf6TG0!%4Q)%2dvCe=0@hGZ=8uLZ^IXI91bnAX;tjah_-}tB0^dY6VgEdy zhnw^|vBLY;g+3cVpR|=5_ zZp9k0w}$7b(W_x+S?)`q;|S#aPy0 z&C1$N)v}gjX8(H3N^l)6Y6P!i}}LZRLk04zFId1u^)O!A!W7VtXq3tb0l`1e^{`R{ra}4c};p(kHJbS9C6FQ??9lipeKYSd#duiD>-7@vV zko(u0VEa#nPC>_%^7$r=hx~F1GUNW|*B*D@d20A2J%yFz3uad-CdPK?c&3>c7~zf*I`|BK|bFa4ocs;J?cw4h7pYQviHuskDVOi zz7o(~+PAuodXn?tR{v4=oxq+D7v=d5#X}!q9PT~mbI;3og5!M0^}z0mZ$Q@J=R(&1 zoya)X?G*f6s{`DnUqHDtq4Q;IZ|Zx#`(epD+D8kcA2w?b&7K=z?MK&pAI+1HDP# zTVbxAYyaBe7yI*Xq$kJ2wF~IE`=N%S@)~rUCK{^-~M&^*MDv;4%!Uz ztn)5>U6~k@!Zz^I|lpOlQ@(UCqU}bcw?jhc|x8ViQ`m#g*Wn%91nlv z^U@3Jzj)>?z9k%ubr+6J_X%Ag-aC~){NeNY?|*n9f2WsIv}+#!^kd97ulRp*?rjI4 zD_S83I2Q_Y&sE6JVcujNF8}`3aN7o~)%@zGgL6j0OVsH@mE~`L zSXEwjwPx{?ZlFARwR-El@OOH!c4cXB56Z{#;r`OH|LZa4 z8!zWqH>t9VYmQv5&z_oFhnVNR$B$foDEn7iej9%C_~T0bb`WdKHvI2@zHs@|S;^Vm`Iowkj6Lf#SwbwiEJHr4@PtSAjAM-xa%sYFp{k8VmYp=ET+I!FOmu0UB zbH8sP@|}y{CHVdBUzPTiymeDwXz0#(YfgWN^5#(1&ptLh`;9Lh$olZ(iL4)8Y+v-l z=MH6MT^!E(;>8)o=X-O<{${@&Q-*FT|rPMxU`JpW79 zTtDPd=q)F)Pv~ObQtaXPS{3kR&Z`Oy`_WHZ$GJv@^G-f4n_k|NWsT0MX!>sa0P^r! z)zH1l1Mm+HJ(86lXI`*#LjJ10DE@aZPlLYT5$6AKskIdAQfoqUegCq^_u2EkbAd0m9Xi4s;+lB2 zAm8y^3)ovjdps;BA7%OjZRk6@?y!f3o&3iz54J&;ID`4qDF^*^8vS${{c{HWa|Zo# z2K{md{dNZQb_Voz7JYLT^mZ0Bd3KM^rQ|PPwPyOef#3E;Kkq5IcXPZVT7~(xJa7rJ z{^VpH{2YJLQ_?&W^71cwD;9jdm$=Tcet|W}a=?GSw`}?^dWwh72P+~~y%k+cFebdG z1I;+Q2IFLB(1y?D$nmLQ#+L#lYA`5br`W^QJ-mnD+4okqPM^V$Jg* zjpZ4ey$9*q7rp!(tYys(yovEZ+dumvcA0ed##QN? zc{=n*IEU^)-{EWZBWcd2Kb!W5#~@|sXZC~6jIR7O(VKS!e9ZO1Sq}Pa?hzXOZq@4I;m=i7 zM316Be?49iS<)N$iqdBY^f?>!8FuKCXI8RqvA_J=)qX4daqRDJN$3~k(Gl3^5q_HE zWK8JBw1GU6ywcbJhJrS)q>TR+$oMv|q%28(YR?1YnVbhWSAf>U7H{Ll&NKGOKlfSQ zv1)goWuGEXJHOapzU}CP*vo3?Z`YM|d^SZ7iM`j*$9?boCN5I(5W4hyn0*lkj9pK= zes){0-%iWuE1%=K;ulvw*<~(ua<432*H63?w|FJ3G8%ax-MS+8T~OD_@_u_x?2eQ0 z%igkzdQZujx8og^@DKm$)%?SMGNb{EcxxyPeF@8jkz}gLUiGG(JK^npM3fr*o zFNaV0N2>rc?zL8p)5jI-57pE&2CPPm!Djqd1n`bI_j%X^8b7W~&;jg4Nb63Qng;88 z7zgE5>#f^de&mCz{^G;Ay%m&FAM=^lx`?*k7Qp#8kS9*VX7T&5 z-IQ0AS`Ssxrph@y)t;FL`&1tI|HPzK)4phMm1SK94YdVJ{&8zxsWpQ9W&{H0H`r~0 z^a;G)TIE-9hO`fISNo#TSjlg;qAlECP!aH=P8H{;_lBbW_z2nq#I&)0%I3Zk%d*CU zoJUK3vkdD}Io(4boKR@d5G}euE{xtRD zez`dND{EWO3JnF@7x{Zm&A0{UQBChHp`8HdT+)}wYptIswmK%hX61d+;4QDW)SCZs z>~g5)t5_fJ2HitG_76b@`t{`0s^`y7h0L1Y^R?ig#h*Vv9(#9z7rfWo`%-N~?-z0Q z&mQ2AW7A{h2YL2taZUl`IV)!6JOSBm{>Q~3OUf-?(A>-NO04E@vOKSrM_VzRcvC-O;B#z)PVKD6x!Hy|MYn2;W?Ps4bLTwjQ!U1BT)aTaK-+ai#7We%6X`J zoydk}K7jlRIc-PqUsGs5c6JA7^q*kk{~74Wl+AwUSSrCdQvA=cvMk`gt?EkrPqFb2 zzxGu8*MHm%`#15={j}-vKQ#sa^9BEr1pXga{7(V?R{;Mz;9pS>{AZ`ZfBnZBF)m2M zJd?-9$6mz;{moMQ#O@Cp|4eJseF^YCCcGqBF4&cVLyQeGZ{)h}<)zcDrxjwA5OinJFQ+4PJ^?e+h zu?)T{b)4utoUOV>u7*MH+*jZaSAT2&Q!Bi@Dd zA^$v_lQ+_L$hx&R7~z`FC~UTCLM0bR`$Ffd{UU@v4vnE{fo73W_ z*N!u1qvOqeIaW{g&`p%%v3_g4@(FYf=)}i9=_rMab<>qH);Z*tV^!TbaN|4Ulf1tI zb=-Ah)9F1oo<`li9bAt#Zo4t>^uUcTOq5#3Cb-^Ea_>W!2fS6G=xy=ag3wV&%z-PQ}xNwx*K26TDyojLSL ztHk;*eaPUO75v(T*ZP9~Z}*)C9nG@#$G1%#g>Lyy-|D0LTj5vKQSz11zOTY=kt1@* z$f}Zm+!C)CyHjLaA8bS7V>}mW=!=H+*oqIou6qBd$Q)(U5%-To%dbA_hCOe z^EZ9b@jnxKQh8b@*JoUNQKmC!6J$L@39m*c08=e`&@*Lko?o<3*q*;M|jnD^O zbN0t3_vwyclft_3ZTF{}26#4Gsy)J;hW$xjPdUR4W857_ z-4Ew{g^3T2C-&p+gl);tpG_mhTx*2iOu)n&d1fl^b2az9*~hNxaoaPt z%z*o#olE?5np)|Ti?g442Dh#I9_E$1i7TPZe04S5YC%G;>IJVlb=HDB7Q6kgF?Su0 z*Gx>V3Sr*i{1IEYthas9W2>UkWmu!X6SDpbfUSn!O5R-oehOVA@>7hbTLYIc=h3d2 z16z#O`W0;5&9D_d)Js1L+IuH(Rx9-`p7olncX9o^0{WI;^ewC@p56r>89UxCzN^$_ zsbA5zhJK*Y2+t$C%rj@i=O1G{@>Q$a|0Z}P{A509U$l8u$z{K?7j zVAKe!##F6Zrx+nrURP?vA*OF)KgOFk9oP_3DZH_)O+>V_x9sH zcRa$OPhxK^>;ecMXWL~S5?LG=;vOH+nOkn`x`xDvbsQ1MmOc1bd+h5F)$XJWhPz6U z6(8P{8&e7HDRbwdbBUio82Y1(#I@!goO=-x+nuk9YYZXCK-|L@%Arrwym%$%H{vA6 zIsw_{GGv?Es@l;0s>tcScE}$&*6Ql$#7BKbzObr{Oo7E+@N=%g*!%iB09%T+f%P}8 zhJV!eVik+Ak7Qzo++&kt&4sLSdOQ>?iyy)|1on!GApI=8)=%aE zZldD++kMf{8LS2E4^qb-zUii_iY0GD|9@=)@DsZLv+2gXO=9z=O_BPy%cjV@$B>5c zqNAsQVVsd6?%eD}y}5_i?sK$X*1CZ!@jHuROxUsle8WD0E#{M(txr~!O^;(O|jf{cj`P&D1llBva;XbAC%_}di`in#K*T|Fc>Q2*%crT7(BOOhHJn$EX)?%Dh z2XMYG)~7JO#2))9{MH|uS90t%@CReVIEVO(;n8>~3SS|-m(6_vFb(hnhwb9n7mV%V z=tI55!w;zK;xcR(UbS6#dv_jEnc^m3LsNNK;s9ZZ>T*k0m> z_W^JoA&xernJ?V=ua`W`{9>oK=Ru}tKIJKPQoD~fUafpR2a4&xm!^Ds{HMwv|3zU* z`*s=jd_{if4kvx^tR{|go<|D$Z8QJQe3;5xY@OPjkIZeflh8&1-M}5kGT66v8OBaw z!A{gxMLUsQo@1~0g4&C0dxbZRz39`}D<17lXD|96wO5dKThV8<-(1UHK{$>}+K@Kg z{{`5LsLRxy=DDeYFV0Qi!Kt_+o({O@cGxP+WB4J{a-I5W^KvozojTH4rZXn)JY8~e33S0c-9zKY9vbR0H=&=JUL3-_ zz&yAYocmvxS0b(EY4)Dn2_2C8U*Z_&<$(zJm)QeDT!X$p#U7Y-kcI3$Ffoxe((Hj5 z8*}!+xbW`Y1A{e#5cj}9jtWsn1TBnnUGsXjW%7sA{Vy9J2e|jYfDn@SgC*;m{Xug! zn%Up77xEryrsOwff6LCR(8>(m+tPuyBA+&vZ|@D^Jrw+H%kwrLB@exF?@1iC0%z|@ zA?j%Mo-o|d$^`gY^8T6X#Qqt3?@TH5L3{5^HE`#qd)YfP7IOB^eCX_*DHVJpKk#ZZ zW~)yRVeE2G3)ggoH|GqYAAYy}EEu=g&vH)pvz&=-2cEV~X~4OYO|qwDv9*8NzNu$% zHs+7xKmD(fML(U=v)Snds-gEo|cJi&YqT!ufL~d{PW%(pH+@MEsZ~1Y?a?c znZ=x0S%LYtX${vJ?6MAHZ2Yc!T6lkz#fNevI>)_!135f#_Tw)_ulO$Z{r*in=vj-k zFPwFD$7nnnDeLY2!mY4zReX74))d^!=J!tny>(kny;+l9k-?w;C1miLb@9vCBOF`U z&`W!{O$V^2tif2vy*Fz@7UZhS&?6$Edpz#))p;Dg@|0obttqx9A;-+cd8Bz&1~#`x z;4A+wUeWY-kX@$Z3}n*pLmyY_ShMvB@^GJXo@!RV$7%1+&^{MWOx$PMJr#Bu+$UEy z_4QZ~`x@k4xsX*&TL^Kn{f6=$AP@Zj+YopR_FMOJ&o^=oOu&!aeP7%K)C+#}UH&-- zV!SV_%mbYgBIGdPk#2U_&-nX!4Z|?r-i?X1jVVwc%kxjig0~mD!jf9$4hC=!AR+KL^ zqrd9}r%pU^Txg6C@P$$8#Wu(hjzI>KWXL`c8jkXh%F690!Yo zycgYpvtxhWJ~wwqYb=}ZJK973eDvqeSev#h$9e&6M_UozqHXh9r{~yVL2X|pbd*Bt zokTe0W5JWQk#_*Z=F?aIZw3I1xwE{=-0@J;#$P4$Kh6!%zOY?zR}laVWZa*frGGZ>4K=t_ev7kk>8H&4OipeK zRt9&(gSStS_S)_6S=(c{ms0wY^~rIy1^t6@(zM3i?sMAiLMsnzPzFE42y?f&TX^Q{ z(%ultXFKNRejWEeWiJYj=KvQufx29_+3+0Ff*<~E7WjOyv<2sKe;wzq6$Z8gFD&1t z7u?$s;@rnJ??Rnze9oe*mRpPbztb8lU61kN4S1&{=YKwj`CC=NU@h{;Ir3I^Ae57w ze+<84pPYt1;}3)|H!^?DRX6W{EoR}~FX%WS-mBFOTzjl_t)bE!-Wdwq<$+JUv)1k# z(mw6mlh%o6_5v56kF|xazKfvljO!9SRlqOrdG@vRBmIqvt@)?z-?Jy17tLId*UPid zZ{AiWyWz~;SbU)eeK@BZ>)tni4|`_TZ42R?|H9uo_XiQ4yd(DD zir%pCy^5ee}FQz#JAo=|Csw@NAGv%w-M)u%efArhn^isz%=8ISuHb~ z6CXgkSXMX3O=$F6bqbeSw*c~@T;!vEy}t$g5_c+$6~+&NhC-z`#mDjOv6>e_|EUgD z=EsL~NGGokxaoN(WM`zunYpCh63N=5AJ9v=a898%5k>3QygZ4FbDfSW4 z!WQzgPdM+o=Man)=>NRyB}WrjDVTct0!Zm@RZ+>S*WzejVVCuMfC+ zGWQhObv%H)Ja28qy~vZe4*+~}^25U&(V{hh4Y4Y8dwk5RT=tJq+6?cQ9hiZRw>8H)>y0H^$T(G3wPPGFh6*KS9hQ8q0*l zgu$M%T}}R8kM(HC-_?%%4IiS=*t`-C%sE1Vy&ANSU-kHu;aK)?A@ z$lnb;#nzjU+jwX5!3o}_v=6jG`5Ur#n-8-0x)j;l^Hw(e&6=y`?$237*&D5EGx~DV z8jcy*x4=)#do|uUr!c${@1!%nJMuPVPcw&%qg>1#SIFBtRo=#3QNM${4gXq^xAR5b zK8$r0BX48QyF%W61N$86ap&HSc*vg%e*9yO7ik0K>`-({yiVIeS(CqKXXwq8tP0GiHm-Ry)g50h+utY{#_D$HJLkZbd;|?MWs#aheV|W<( z@Gc1`hgc`whW=|>QwjgH;G8LF19gS%vBN4iV~jy=eqHJf9whz2dP63ZupET3Unn!P z9T(6xx4b+c{o>5U^qakTKXtIqR;w*P4%rxdEeHEI*`{O}f_NkE2>KlPVGwv>d2acE zdj$-Pksl&}p`6=k^o#^=>qsL@cjnl*G<4LOBun!?qU^wVHaA2jzJ9>mVM^P{S2o)mN>B>qjCL)@F9d7+1r5)Ku%(M z(tr>78oWFG?-SX3**8Z7=YhbbOJ@GGz?=bpA3J%VR-II8C^pzIW z$BlzdX^&s@6}`{+>>&E~dNRrO8@8Hx^5R+C6*KwcP;|Q7N6U1SU2OR%lp+UHE()Rk zq&=aZ+|{jC^b7GZ#a9d3Oc|f^OAg>{e2!~8=o$4-mgz@uw-a%B7~jm7xZRF1!90f0 z7SCIKxR)8U3c0|7+y#3d z$@3)d`wRLUd2+GztyMLE^63ZqpVsYj<|AKzywasFTn$HdeTb_P)W_t5JDzM=6!qG7 zsXw$QQATpyLEK{%ON`I8z;8Ad!_WrYZ;kt6uNa?{+hu%;>}JM_=?8~qZ5i({`ot~c zy@`A|e)cJi+I6?(JjzUS_pdehgiPRhYi(>$>#_}Vd@4TU@XL409k`=g>Sp?HMXQB8 zLQD^t4re1J^&jPJgR5jYq!75`eixSQ;4E2otAk)37wB^croJx_)=s!bv zn;tl}b|DYbzGNA#3vD1zv-tdfB%k^HW~Zp}4|oQ?x^H=BN{)g}d^qy$wbtq=^MFoIT-+LS9-K~KQdfA$8_zljpW_+2(et6RhlA(O8F@PYW9*NBzmZiF8oL$y0AA?(E!Ok)Af1Va9|+E< z9|R7Ht?8(TKX3?mxz%dCX%g!ZKFjI};*M$WZIK?{QCw0Z=bef?4EYu9HvR&Z>|q;1 z8+Qc%AjL<(a`i`+oMqIHWfaIv(x+u;BjhNYOKRkbQxjNUhOKeg8tMo5evxB81Ru~= z@N2v8AjiX(3HN1{z7U@V8Hl(px%t(2uyh^TxHhp~V(V4cUput*57Qpo|1R}>3Y(sM z)<4Hm>1j9S#w=a0BVD1c6FYxP+PEcf$`!}(!{BcQ|Lo(fpKJmS+d?PDx4|x-WthDL4_CX#h7+IMUiRCS=XBJxCHL=+;0;&wt-Jqs1P8AY z&wX?(5TCHHpp&5TB{CvHj{>xAHU`2pw>;mi1@ zZQN@;i1pu!K$+3g+Q?5z9^m<`PgDgXc^D^8fM=KYn0-iQyt7S{lVt(U!**MzVXSzq z+|%d-{Er1=wOCi3e|xWGJ&JMDXpbGqpJih0IZ_R0Kv!NtQ5BzX9s;o~_U5oNHIkeDG754>%6&F>nbw{Tum1ItKRZ7}&34U_Zvd7{i&EVius8`ulgzH%l-c#7agpl^R{MfbAKl}~*+5e}sB zx$Zuy&gZ_R8>dVHmpnZ%8NRq_a{0v>{R6!`yJhF(kL3K8J(C|^9Gb+rgf9O$*oG(I z_nmZ3H2l(E%o0BgUlq>?+>q@n4*APqll|XdC;f1Oc4wXuI0o9_`Hyf`{MhUv#+@N| z9Erzjr}v)!lRqDi!A4E~-GwvfLiq2;nS#HlDu=&cUVIF8u-Gjxfp+`RKV^XzC)?&) z)=Ov5n5y4S;@k)9`3m8jhb%p_@6_67p5s`$1pacXH4A*RuF7ZCgCBEzje&2L_rzYk z1w4~`byftUIQ#1PMYr_CexE$^7Uh|@fM=Spvgz1+i@3MGr@xOnFmK&p!h(@z@XW9D zkSCW~k54Q4{f^$5r5!lt0_)$X$0WW7^T^|#po|`fpiQWMoA67V(M%tqVDt^}%l$Ft zu~&G7iDw$CbQbOtcs^wK#|N`RyS^&6^Db*mf18yBo=JSLePw|{!1=6wG51;1UDk*F z^!4C*HU=jj1>4}K?z4Us!+5A-T7#D|#ml;2)JMFO^~7!_Udj|NWx$IGE1O=1I|zsu z{e9GddFuuf77W^R$qUm;Zax#A>H98lg1f*`k4b!=Dk4t4BlE%DBFI?q(czx5VB~e+ z!V7$s_v}mH!r&u>^YEfryCA*TV;R1^@Jaq~JUaG=z0u$#_;z{K+}tzwb1!*Y?&(#} z&YkRo3@7*tVc#X5NHlW3!Fj%9`Bpl{}!TDxl1Uii4Puga!>5VL^q zid}!SntgQ&>1`TiKl-c?=(G*}*jB~1$By5j{qfA~=qC2Z9X+vE*dKRjf82roFkxlW z@8~H(+*{w%-$xyow{9?DhEDJ3F?3o1-oCzfX2jq7+ezHdD05+6U`XgRfH}525W<{j zS+`R^!o3Zhz1Y*UrrNu{wdCdw=+EU*_@yoNiKOBI~e+_)V0zS;woydo>3BIvT68HhmBD`2^wfum6$T=FmR0Hd=UQ@B_ zZ&$NVSr+>;x@#WR^Zbk2aw~eCom-CeP4jwQ+*2VSK7cX*-xbj?4(xyFL1E;OXtauPKQ}X*9+bb}( zsWYsQvAzC^`L3V+9jsJ+%qhn`FAV`^NAQ2YLbtgsKp!UTIYGaC8~yU9=$Cx-OFsG~ zyN7Ei7hs#}MEvD(#MdU2J{l z2NCqmTjM+@v>Y}=+EsY&Eze1(e6=kY`^$Z+0sC>uz0TRUt+2Imd|SR*@v=*DPoT(S zKI@jAbqRUsHla28$xue};=E4M-pFsEj{+x`AdhER@8JAR>|p@kNO%5bCuq+;e-rDE zq1fBmZrSa0EAma|hv79`tJ=tQ3haey!F`jLUxT!sZ^1zfvpjrjnX}j?WC` zVvKkL*gFb%Z=kGzd}}J|=@0CNPgO|;`PL5DPMR_9);e5(d@F*Liw`dL3|t2pQR z5Nti;#9fxHr|+B_ufv!ie{lM~EU>YFyk>O##mUf};FYN37tfwr%X&=#&c}kcS~G4E z98ZLbKN&qv#5v+Wpdsw+a8lx+MBGFVO8}`#NQwF3dyw z?kz+6nsrVh{>xl*68x>NXq%y}Ang8zwtgh-VxI-0kENlnKkA(ce@fC{&nXK);fpzg$Rp4I{7<9yU&jFU=?Q=EB!k#rKo`O=p4TkzBq7l~`Hb?3*H^%nH> z(X*x2Dd^{`MgKW~F>l+j;3uUvtgS}>ah?drdqW6BE6itoDgd`SGv)GlL> zi`e`bz2t-D%vZt~=|U#+Fx2-*z|5*F?^B+QzYF zVL#U<-~@VX6>M#5Ly@n>=>rSiFc1Ab`_$S8R!vUcIFoD9mtfTx|Xm;2*RD+zwkoGh__I8@6{kyy17UA4Kxemz6z~ zWlF8Kn@S#7(mQi;Pj6_r05)FITR~tDb-#>n!%H5A4dM2{5azLx*&##cA`6qwLoQj^ z@RP~OSpnFr(LYztk4IAG$IF1txeDxX3ar=q?rE!SR=f@H#n$6%;kP~~H1X9qX+-48 z;SX?z7v;*I-)H2?cb6!Rf z>R8{2pGO?dS_E$gJlaj0n8<#2{2X${yTNMjcUor`AAp?kXYkLU&)?t2d>&iw`%Y`g zS0ML6_6r5Q@qX+hg?s_|u3`=OD&monHW5m^xFB^;xH4$#uy>UHkzb>as1%)MW!`!)KL(A3gpY>l1ss z89XTuJgvEkYe2MX`mEd@+BP|l(!OayUi&xOIH8-cou-Z8Puj+D=?`y!Yg0}e^QDcn z6*{ucJ7}Ykb=XETo@OM*)6NUVZ*AKJ&Mi3s|F1b7zaw_RX?Pb~GrnVU{yARwYr^CO zHp!Unl=)|aj9GtRos8M_y>X07)(7Jh`52gU0s|dVVAl1H$k@#nnRGE|!PMzit<&v2 z-H=D~#-yqN0!d~BR zI4{l!gf5~@*k=#~JnK7tf%Tm#_#44HdCp;c$L5@h9|Ugfc`r+4VVp-G_2)X4DUWwz zao)bYXZI&ahx)%MI>oQXt>CP9m%=gJhTDL6wt@ccUTp*RrG*Y*-Zy!cCAFdb*W`U0 z;!DvF93wajManVy*sXy=v_H16zSr0aec(~$RsZ+hJOe$ko|D~Q42t$YsQCBc_zdw)gNJR5Z5(65}WRyjDFNkoN}()+451_yH%5YjW3T?Z}_htwQb)Yx|47} z__OBajW2)HzJF?S55s@?VDriejMpEYZeAXn{ZSw7Rk)Yp?7Isl`^LU^dR44>vXAev z+43Df1^aIRbJ4pC%6rGYH?JplabB-09%(MGis9U(cNdJ}egCQ$&du5Rx#3kMZ+)_Q z=FptJHf!FhkoDj^wtKZzbwAEHnq7&xVz1H@%lF@M8t3TXu1c)kSm$wG62`XIIwQE+ zi1*m5r|cevdY& z&>#GjvtM`{=f+*12R}Ob+-|goxOh|AID1YR@Q_q@+*#uTec0_^cdhoj#wc=y!FzOqD|X)pJP`VaY_uUF0agJ1gk=r@f)-{M2xwplY) zg(~O8<7i{Leq#Oox0J8qUagYmx8+P9?oEz;aw?(!d#%y$vy7QPo72~N`TM8`$IG3Y zBVvcCX|s6`7A{cdnl=M_e6?TWZ8=l!b%PAQ;R^Zuxr80E+q4Z`XJz;20|W9n>$}Am zb01eI&rPhjs4Zx?q*VK)u2T3xn6T8xzy^hq2%kghj4HY-Nc&Iq<;{*8KSKPFD z82_%ck}~s=!N9*216jA!Kl;Ld{=fbO={bX5LNzY{*j9|y{J7oXxm>2!B!g#4c z&}`pRa~!`wm)mmi@5O%s{-@%<6#t*c zKcD<)^s)BYc)^@*KV$aGzu|iY4v1RWzU+~wzwzX<&c_~3c+yMTK;@^>n{8>f5IgdNhbeMrZL z^*yCwJ_g`n*o20ylMoYDm~DQ9Twy*9>vDz7(l9q|MAC#U)i5{Cy3&NLOB1$9!>V27 zzL^GYNW`CTe52gbLwC7 zgtulrIubq+9u1!iOJ}v%L#^HpWhUW->r&Z1mdEVi=<<3g8i(DMPU>o#8S(ohugJd28j3!bp6kQ=Vsn$`50=PqPa z^O~n-YgXfy>}F}g(ydvM{FC8=g(vF>om!C*DK^3?=WoegP=IPiPehr`)~qOU8a;Wp z77_vE)-1H4eiTL2=Z}U9n(Zj9KiN_9D6&992XhvTNCkjY!>Gb;>=87KW)?Jz)StKu znW2hp=Bs(M=44b$GI`~naLN*71BCT3v8JcoWfQ*PL?c^a7hY#jT7zO9aS!hu6mh8Jwbym9oU=gBcp~M664X=4x zM(a-2FxO4quw)T_b;=bTI(+olag_J!l=|ZU;zR-P=Hc+sV<J#CD^z{{0QnXp9$|*2s8(60^yC;6aY1dX*mG`U_VPw zX@(2{QagI0=#> z@7(Ui2cE^|%PPb79t|62SYuHe_yn=D5|mb#8$OAlXVQ)-oIUq2zY7}X=F48n5qLJ5 zFDZALhPmM?HOxI{*QE(ttYLP!obx(0Y&XkjEDC9zTb(-BYwbf!n8HqzgVwJDdjYT$=pkLNLI)^DE&T zg2yMHCO^N1wYtKpH7x21i>682u3;e;Tuj4GxxzMR80*i6b&~mv-}twhgl6pVv#7{w zAgP}iK@`&*Oi53CjA_^a-mQqFH;i^+kp;Gb)F!RBkO1c0{+^~`J_g`n8I>C5##fz& z4GNTjTdZNWEX=f>8a7MeNEiJY7Gs!A7YiT&qHY{J+cdtPGHb)uEYE!>r5<}UTxbwc z(tZtV$8SCi8%q;*LBni$IRrQ_=Px|C0M)XZi=v=Uhr2Gsyl|`;!?e-h`*=-3gu>|}oIn_-P#$M(4U-9z!(^gMYaX(XozA9!~0qp|3GmR9^hhcO9UK;iZh&YkB& zc8&(;tqRvgI6TGp@6fPr2{B=D4U1@4CB6qVY!k!ki$Ytn!6rC2z2>1T2=NVbA?j6o z5)uqRnD;(SvzTe{kiLf9<<%8cLMA~jHOK;eh<<~Z!$AD5F~o*6%&YhYeBgLAUj-u{v*~+xlx6caqY&@V!#{n!K8=xCLyIn8`f(&8yBRHK@B^{aw9^M zX6)XD^k(RX3mOyo))auBnqb2_Ml}5%rnl>TFW_0-x&oyZ1M6ku@f_lZ4ZB2PF)Q0` zB-kv4T}oIytZPKWib-!xiSa}FzsCq|TDOtobp??V_Q)AI4)75E*K2y1AMEs$VA$UI z5Vp2vEriH|J|hlCPaHp1TL1}!zaezsk>>3)tKtt)H9c9o8_r ze+W0OVLrU`Vb~=NQ?wcS|C~fy5yep5t%jWTn@7DM(Cmu7NB)5DB+o=RFD&BMctqdr-q#7+~fW zyIRtwa~e-rKGN^n(IE*jVI>-7(*WW8DR9iATEjLnt<5tQ8@9+aOEq4~!Eb(dX_$UV z*t(Q3=DkV7f_T@qBzE!7)11?=RtDJh1sCLO$oRtlzzFa%ei-~U z+Wo@#fX0WM_=H@{GFvphl<|0c_;1rN=_jWz@3H%m`L0u#PP`}T1&Se?X1?1sp6`74 zy(dlBK@F=GC<8a9VQ*^KVtilFFkWKKv9UFaDo7Z57j<5lW=-L+%h3j*fpyRr^_9w_ z^Qv!BujucYf_&yn!rD{9*yfmqrR!g|Z{Sm1($LKJyA{SRLMVtQa{6 zKN-LH%6N=l(9*1;U9ZbSqsRS-%@0mCw|}><(HxST^b+5yNxq;F6Ur- zkh7k{*C}U0<3lDN;wiz)nZEQ!Mu5)wVfrR%{t0Tl&J|3bG*>Lvc%6$GpO}kDqcM#i zVgAiU+bD-R3g@y!2amwINcf!!zlrd!c?5u*CSXH^+$3t983V(=WBy(?8qcT6pP)g7 z*Y^2R+qYQb_c7C^q5-zg9yHV|b)bm;L(uif`6c0tQ9G{_e?a4vE}1?-_dcW_*Z4Tz z(Vs)C56#jboEqwpj4r&1kw$jav5}yO5W)i*-(u!X@Rb(k0KUR`6ZTxnmP;Vhaxz%J zFR?{K)I~VbldpDZ9*6OsG^VL*8MQo7pFxGa8jbC>>%+VfW7Wu!Y|qGb(qFnx`e|Qa z#tB;macU1S;j`5mznwr>b1@3lA~d8H3ISvUV1-R5*Js;16@HNLZhpp&Fm116Uy$B6 zDeRks6&Z!92DF1juF!PR!{p)2`+&mlC44>Q{jFIE1 z%xgfyPcgb%f<^b*so`ZDdk+6o*~{4b%Mf));dbL4aEFL5F+$iR2CNZef**J`@I(2* zLW9@D_?z}cMy98K;;mZab^d0%6LX~x@k=#c`mVw7z^z&2e#UUbJo*(zanC%GaKBCC zTLG)MZ^kYKn*oI9YWe##-qps0jKcgw8eh#!3~eOQ zR+~G$OXuRG#q|BxNxx0w)6pK&4_zmIOyie2^-Gd>tXmk7p#3ZG@6-4QflT|*KSmx3 zASk5qLdVKWoO!$(U7<7G@!A5`w@cx#hR*?w4*?eC`9KeeIf&_ZT_^sK##cM(lltSl z#;22OIDU%xf#)1QoHeRP(GcO#WIC)zP~lv3i+UQo6eE7I9iPRFjI7?NVI?L= z7sSJ$#=CK|OT)DKRtRwWG_25r9}Pv@JSbvo*1fQOZprS1xsVorj<=eE7EaNNxPo3& zP=_UMv0Dnxy)%#&k6jk)H%-IRjXlCur%4mluztjYenY5=vemHIE4$L9S*Kx(O&Zet ze4EFyob4JfJPN-VwnxMEG7TPv9n`RW5@Kw2V;XjtVQ!hD-4;2F{NTOKBoe*e4Yxco zgcGvKEQLMAB&lmfoSf|;kC}vY)voZB+4vDPbJCSwYOn`;LPb^!=p{EogQ|F{)dD=7 zPaANA1mO=>2Mb@q`lb&>9MUe2o#ClBNu5fQESrTk72#5_+P z2@ls8Uj!P<4e^iEAj4~jUrQl))g7TX!iiDieo_nDKKwFX^KdNq%khDyjvtA608PP9 zj>U+^uVZ{&Q5SrQFzV}pHjF%Q;JTAWj_6XjVFO1raCq8+EsbvtgE^+$s4?~%aRKn; zo4Yi9gy~H^L`OZK;ljI|{+e%7V{O4Iyb244JghbYWWl!OR4_Aqv#*E<`Hq)F-^mT|7keK#w-or&P26Ez6ddE zETWC$6eeTM6If)aOkNR~qD)6`z=W8ZJJSu-RhL^3>8k z%RHfp!mS2_tbi_-Qa?^fjIMzb93WJE1tIc>PFKvEb@8zQcsB6kep8o9yaqM=62l?a znR${*)>2u>syQi28-6#-7-8RaYMM$zXIx{q$&7P^t|QeI)Z>SGHVD6BJ$7nZ!HLpT z8^VV)yq$U06-D8nh?Y@NlcB2%J`ci43#>rc59V&DX$3WQ2&QuOA048Q5`!Kbg{#e= zB2Ys@ZJmMpZwP+{nKK7Q(SG5HXzLLvY5pj*jkkf-szNnQf z6CMw{6T8Z(18YBKb)$@pT2?jZ%jVS8P;p>r)Cn?N@ZctIqR8RoBEjuwh~Pw8mzs;a zV9X=KY-8b<@PS9ljkwY0q4S4e9_Bc0q@ey75VXW;BuX@mtZ}Dym&HbsMq*l)%ong% z0ApN);qWVHLHs6-?;s9Z#3r4*g6vreaEvW&U`@fYP2PpWG^LhJxb5C-vbo?#GuFXttYd;~~-$nNCa@O>}mg^zHq6Y4W2uWP=V zc`QaIf`@o_&nW{MF5}$rYT@BKHGF{ZCOl!jBR&sk{6Qyvfx#!%W)U{7@qRi;rVbp-+}I>&q-8p)->YHybI&*hpG6{vgYmZ)`U1 z#ea`$)tsx|4{n}%-_eKiH%~=L<`b_+;fWePDz>fdn%@u$b<3vYnx@)fvmmcJq_CR^ z`=H_1rFb3JaE>qJ!8$_^&JD-$Gv_M|g#1i?Q(H9PX-fFqP+Pf2RF|iX00*NRXOl3X z)O(^aU*hWuYQ(uhyt$1}1jRJW3&^4d9-g3VP>Je637aU{_d2_LR>HCEu>VA0sVx9{ z<;}<|yA?h}ctZ;b{>uCgYy4rxJNdc%EOl{p)X4rhcMuRd1wU*X1x>pc+)$bT%)*VF zSE;aj3G3*`Np>jG$YO<4I_CIBBaFPreu`;4@o(K{`e`>_2Q++N4t_+6#yp1kL)O1* zYt}LjJ4mI-tnN5waZL1$uTJqa9+!!&J~skpSC>cw0Xxzc!Ayu$O-O?I)l+jE9{VO2 zbPY3VkewFDRez(+$U6l{O{i`l*Zzz;%q5XoYzT0ekB>;vE)PX*L-bL0JGjIqZw*Kq znlw89#T#m2TK&OiAhe@gQkmyhw4}ZVJ1V4i*iy}Oof`)B8^FQeKO9D;*Egbm^vieO z`v77*Jc>bZ(o`|y*8JczwBbrMXvsAmJEmxD-F4wSi`<#leY(ueqPp6WuTcr0jdU~c zRea!4x=G?KK7{Ym_)Y>fh+YPle3|q~qLvT;hd%|(#C2f&$Y~oN2=*g}qukInMVgjQAJL7oRgX zn|<1LvIF^u9DeTF@LfgLe0x3>ACPH($co~jtdv;aAX}nXVZ>&VE|4I^z-bS90LWb? zK+_yJ*s@-T}aNW4b`?qOv(>B5!Q;m#ur2aJR8lIv}KltN#B^ZPz4g%g>7xs_-dvx z@kx4Kx5m5mm=b_)(C`@3shsV@>vj#_$?yhaKXKd933EVUq)rac#~eqR8WmmUT$=pZ zuAC}-;F0}owMAV<@h4w`^rR9k7zelpW;!!-^&A0<;$jb&%&_cIp;ZusQPh>jvI85K zSQfa?!Ayg-FXz=7^Mx^J80(WnY$%G7+{nGf z%0ijc$XCOf){SEyvN^BeyYY_XvJSd6i;9I=lVCrT%w}Y=Z05u7fQA!iu6gx78^^43 zRAHpAbRDjN698%kBBdgV6*;p$halL}P5)3l+n{O3*xoD0v!@2NR3(vOlZ??JO|#eF z2zn^RLYh-rSgP?Fejp!~S_^$u2Op>Ue0-~)XF-Fk)T6xH%$k>`s&6cv2j===>5^=PnT)&<(G70M>$hj3YXHYgj&b z1%)~)JK%6&aDzFtX3H;~$F^isBY2qm`KV~y`EAKYDBBa2K@S<3`6ctI4rGf~Q(*}g zz`(2TX5L$`>4dfn?jNw_rD9~YQ{(&b&Zi&$do?U*E@bYDON1f5L_zM;$_U;sZ}9>i{kDm0VCoEfT?w zAlw4m4xi08OT#v0gpV1C!=5{^-pfr=L}wzQ5tHC&j4Dy9R9u7n?N@`hAuWG9E0MzM ziMKJ0U&?qq?DGp67GNJ?Unh2Sa*?A>c#GOSmdYXq*&AsoTohulXi>sA!iphzH~#D9 z;seiOlV7ynv>iZ8N#bH;|T$54?;mhBXCp8FuJyo=VdK zV;YZQ4oVc8RJnTTmCaLK_DcPMdK_ga#$5f;-0&upeK^D#fIhD5_x1#?YYG-6_4Ir* z(I@(LiN-3*l3)!wU&&1yXQL>o{$kuB&31*QYG!|l;d2o4j9%D=r~!=+a1BKHF*Z;% zVuk^jFl7_~{hAf^G>n`;`_U$_Yt>>9jD7{T5|-@wUjB(%a&Yz_Q?rZ#rr^<6a$AqZj1|Q7DaMfIL_nh$O7Mx1a!lH`xCVLSIZvL@2pfnkVK$@s zoTI?h*co+ZI-mhkCrB!mqz1HtT&Wqa$RdLOH#N^)%oF|;oWox8+-tL~Zedwwbsqd> zKvid1XNq7URyp|AtTH5@(7X=fUFs)!ZOx)0FQx{p_7TokO90qL_`!ChfeRoiqHr5I z52UQ2a0yW-yTlq|OyLKZZ+%f0M@aZH)92@7*#aG<#%R-a=D$&HaBcvkO zQ}92m@Uo9g>%&fFISatHwq$=D1L!Drpt$zpgt7MHW>P2~OJO~nISD0gfJ5SyP<6*n zaL#)r7t=%i(U#3qpFWBynDpLOhYx=9!_Yf4ddCjZuko!Wp6iSvi*3^IkO?P^CTu)@ zgzeFI(am79$|8eo$_E(c=lX&gW85%$=P8AyodURXuRBn8Qhf)ToDf}H&jK+H32To( zWDSIoJ|Cgr16dMei#ai|gQ$+f5KvgRGvd3@&Qi_m95Zy=?H*SeI|2Ga)H;RRKsZNt zxmPhR>w7yDM%Iv<3?14-%JYCjV6|p4Gh!B~f%%`(wA=9R%72M1dzT^D+rUU&<7js6 z6K%E;WaN!Xh3g=2!d7N-BArGxzIrNtq^^x;|8-;O8D1OCK=Xvk;@vC|3Epw83LoU_ST(*sZ5r{$iy+?xlD|( zu!~i(M;Qxlh?5jZ1o#2ABs&S=8-icdc@be2@3>YTZDfTY59Z<{;aj+Qs$sAXyp#{h zT>Sl_8n_gi6>N-|*E|v9ZMd<}^DTN59SZlm1jb#p;Nu)f{aRxac@eGltwwQJ4WYSoTo^j%9zGamNTB`BmjCaPhZSew=w~fr0yaB@TGoWeKC8uG-KzW?O!3O2cjGrNeKg_nZ zh&?bFMGqO2C`P0l@|g)ux1H&*&%C7~+19!V7CRxKGIb%x_rZ zcd~sc`B4#7rk}{qJ0Ea((>vxL@OU5eWEVdt|z)FW|f&@=1%r3=; zFBDO&Z7$LxI}l~;HmFI+(JM)Zn>4RhL$e{2VUR&x#Z+F_d=3J3pTZWC=iXJci!w?o z6aD7Pd39hu;4lvyrj6Z$J=+Ou=h5L>q}o_`6-T3%!yg=}&9|Lwz_%h0_mY3Qe$~C- z^uvOM?>~cK{eC3>hXq(*z$cc{@CqNBBVm)&SmU8#NmBjwzQu8~u>~J^nGb|6Zq zaFa45jWHeq>;X-)iTHva0K6H{Lu9Q$#-p^;u^Zr&fFpYZ?f2OWQlNE!kfsXn!UrD7 z%J>*0_I$8U0vbO^pv2sV%FuL%LrctykvSGC?DhJO<*rlMIP*2Mj4kv=Mq>PSjqhN5 zqFloUXmi`A@tepe8;zeaiKQ9#kdv}>4TeF7{PujH1>GT^TeFzAbvHlK)BQGt`!s$7 z^R7qUo2PEgnorawrY{&;wq)1+u%HI(E0D#3Oz`m4^oTd}m#x-I7u24_X6S*et9rpN z1BDC=(=aou`rapI2ipY7X#yn)FW9Gb6#Uuvf%L>~Vc02+KS$bt&lI0*Mc^9oB}mtz@w=Ewy{U5muk9L6`3SsN_>(QW zaxACv;*AR525@apLT6w-cWeAo#@qefZ2Ft+J*@E?81I(5K@$dZ2FI5a?s{XC{o!B0 z%o2Ja^%3H*Zc1kk#%h$@D7O>wlxbTPwvzpwZcgq(qa81eM4xZabeE7!+pYMoE#Q_v z3Y(-4;$V-$w&C5nTb7FwYb?b1u*Q20&9l!F{t}pJmgHk$JHmsR0L%Qm_u>N&`H7aD z;C+nuYy4s-KH;NF{6sWg?yH3exV%vNU?w3JEb#!5juY3jY)U}^B7ThAK}e@25F$03MuZxMh`kQ zPC9gwG**8g0nHE^D?!q-`|yE>I6%F`M#K74Yxo4iX@ham3y?=T10H3X79P{7@acHW zEM&1k0RHr5 zP8v|S-Gno9mm2NlxJs?Yh%DRfRan7)y^(BXo=6yjZTjNqS!{aOFyhflWPeH1A8^Vt z%_ZM9#3T!Kh8G(et&|Bs?Roax3(1$@?ANHq%XzJL8Cf({7va&IPA?9N4#u<_G_6IP zI=)rdw6aKt67*lAN1;6!8d66y=N@pUH8hIlz^HgW)40 z;$@fSL0U?c(^?U9NaM#1UkWV*2gWii?DDc$^_pje?O2D&34=*#fj$F`W@DT1Y`1%y z(5-(d3xu7<!zd0E)QlMwXnyquPGDISl)u%VT}0tYn}z8^(RRolrIYA=Zl@Ov4C1QG!f!!K+|_I zeUjeGsnQHAGH>$ky$b6Z3zElS4Zj{9ry&n(89y-husoaq2etU#d?Q{SU5H;V9#<78PbD`91+hkEhC;p4u@WCes|61nDc`TKxD9Ri? zaReu=i0>NG(u4x;0?QBlkhkQ2Ag;T{U<|=)*#~mE?@3zs>=a5lR6J*)i2gQw;Mq+) zq_y#T*jPtg0KcYeyQd8wcn*>O-(zel>CBh)Q#uPhe~%pQ242mo0Qi1xC&wJ~v6k}# z?Phz^%&DF=NSl~c>*%Y$@aPh(zBCqKX*7HkA2NSLG@o%54R$>bOY3ORZ!VYF3VZ_K(h7OYDQs#T;Q|7xDu$L5eC+)^{&`Uu{I=1c2Q&i6$ zc6Lfp9pMt0Cy6mUB97H&J0^7I?A$C6g7M;p7_yk|*vFzy=hR7nvG^J%ND$I;3B=w@ z+Zrx;CQ(h&oJ3mP`!GK6h<@o>o4*&#$yUHUcj@v4tRrIULOZiWX@e(<2Gt_SEk~iv zF`6I~iy0_`xDBjeX`nrRwCEYedMqqG3yr#G_8cx&*u{i3dl?fpxfTS)G+z2&Wp`>L z2^SCAR8f(8^G{$3q$!3>$zEqByT;ssSsgDze+M+bjVw?60gV@*s_y^;0%*cKY1%TO z@B;~W4l}YIvUlbWY$1+yEo&zb#4OU^ze8QSHNWl5RO%{Xwd&ncwwW3cO<8NZ!Us+H zmG@{3jluoyqDtyn)f@E%^Hx%|bygKEPKmJ@TPLP2`Jh9A)oer<$LIicrjCl_$ytaKD+TXIP#6Tt? z_c<|g^n=6L3!d{S50j~rvt-_T|5$@N0e56H+c9;iF}=xEI40FQj-vvS0nK{ut5aU{ zJgr&LU_V+b$L2T-yFd7hS>rZ7)a3dw%efL<7v2Uwc11;7UD=F=Q;zGw77JNhcbAJU zi{k&>Bly6xi*%HNS>ibB}>DD=8OL5 zW+h_RvS%J%tdL~r^KgPltY3>A_!P3+sCl+gPiTa^Z0Z5+6I=~fSdd3!?m>M$j~)f} zHqb`^ybM%wybj>*3Ooy7c$Lxs@F1*dX48ssoinUKb80$zOc%tsUh=rP1sCweKeH4br`r;3iDdk57&Pxy&=_n~y0o{NPPBoKZY?=ZM4H2pyt$PsUh zXe>CPoVHV8Lrjvg#=-al8sElv+y2~a7u05J)N0+7xG5?fy_z^Uq@!L(jEE-3VRgzB_ zY8*iPUWMIFSjS#M6OftexOGk5jIH9_?*PxbOnaOeW4!P~eW7%Ya{SX!7vewShPCmA zHD(si_zsPaFfTh^=Vao2y~fMj>YQJ|;)D`tcO%|+DV)p&>F~}G=SYhQypL--nePnV zX{{vhmvec%Pq1QY(=FAcL*E1}12nrAo5O|moC%`|;`K;cs8o1`Q7gZt~h zc6(S?Lp!uH;ua2=`deWpQ;XXuwD|CeR@%{!&nSeykgj-=cS%r90pt)!wv8ti;w+96 z^|&R6i_G##)3%%`-qFbh0FOEN;HhX>a+NKFE;*0uEiPwo@+{8_2}#mE{2HpGZb2Q( za)inxR=vmwlg@S2yR~w?OMd78^7_=|h``akDGM|ULcvec?0StK<5)^hv(&^B!V+gx&VfUk?mXV9cZ025Rqtjw z=M{d4@X70gTpt%^&a>?8)dikqe*mEVZ!!UFB&;9(Z(jn=DFnl`d_S=QW11~@(iQ{1 zMq!GipeJ}NkR-^dplR$c`UY&x;>t4n3xW{wRQfa{!Atm&>@&@UHMQr9 z&MWd0@x*?PYPulPnSM_A5s;3$G+x$FThR8D7DxK%;MSZl($^LcyW}LxbHlR54X^iz z{CzKcb(9{B>~>J|-p#VzbLIUuvomw$1%-Q)a1IaUs+Y7&uJn*M)26a#2x!(yQpXA9 zq&kh?M4)7v!Yw;WQi$^5ze{0-UY)X^v;{TdaHGN;#Cu{qJz~121wp$tUi26lm-aPx z7#?DC!l+}f!ciR~%$&qS(oh!W+VmrRmeb9GfHHoVvq;RsH-3^2lxe)si&JMFQf$~# zfx%OY!lmnb*1J>V50YmtG;I8`e0)pgpvR>czk*ks?}cH4f!gn1Ua%?MHweW_6yx3*m? z5etmF_ItHpIi7=RhJ&_Nu*98ly-9wbJFLcp!4us%WI@B!HQZEL!vqg#FnJN`-7r2%%q07PlhsIeoRQ}|hg$6YR{Hv}{>b>0K%Lk=z$4me*#6QO! zo5=F8=3h!#o8tlv-Q=}b>)^6hxDvAiHXw>Pw1QjNAx2=ktyXgw=5eG-y9kEF&mFmv=8sE;gLJr2t4d*af05h^8~u`sRXW{eIg6B!io=$#Ig5+=;ZNBa(xu*Lpv_n^~{rcxXgXr z>|r1Gr5i)pCvv9Q@>g=K*l{6vTImC_^J_T9Q`?U9xburHVkDkjIe4^U*vzTZ})tHsHnNZ3%&{8E0y z%XtfrEJ-ZS71Vy98+eIC7I&l`x$rJdw8dnLQ1+!Sjt@L4+t6-?<01?_Gd`s8>E`@0 z;J8iW$8G@d0@H_A>A4sT<}cpRy0H*5E+$vc;zKwN=x|g1FT?NS;7@#d{^rWbqrSki z5uF7o!R3~6^(=k|<7wS{!wGb*nXZv_8nUh$aM9`yJ{!)C4?er^yMJQtZ3`#+-HR}= zeHUXcQouM_I|@igI<=jydYhCo`n3Gfa~7+1vy62|c;EO+&HP#V>=v%qh<$vy8hfC< z5dZHZ{gU?Ans0UJ(5f-n5Nx{pgV?2F#|5y!fun~oW=J1B3p!M;5&5HIuUTagrE3Kf zxiX|P?E~DfwZQZp)z;E!p!~!L1+CDRNWX~h&X_F@GGlR@w|Ky0Mz=Njm?OO@7n$Fg zaD@#x(8CfiFmvtvHzEpn_V2sv1P1t28f*e9nvsdUj~_T{cp$%e=oq+C|N8 zA;BodQW8I_jLB!s;18}tGG=I8n=Er}!AU}O zLxOQ$Ts0Wr%(;i98Q~f|zRLJGJ0o{F&&D~0C{4Gxad>rjIbI?|I0^lsI9O#}z5zTQ zn86=h*T|ome;o1pY7|~5_&enf`i#u$H;2}5>Lix4%6r|KOJ(_gmm~mkX*(G{pTYN_ zjVk;H{)_zQR^WdH_%GP|tMEhP7v;$0eXLJ8=oCc{fz|Z|_tXXkfxzNL_%@8U2OmO- zNg+!c!*QB@_wAHfk>;=AUEqsryZmwbkBsG#zYOm`-SV5^^BLhEu<@n6&hfr?5`NU? zp3)4AwJMWA>9=>1ZcgYn!mogaV@*_PeVefP4Y|5u4PN^WU-dR@Pg-{$JZleMYy+J0_hAQ{jE>R|ynRUK!gu2jE|aD$dxYsCt{UzZ#53Zobr{y2 zh^T@)32jcc7gx7Vnt;?!@!!cA*yb)?l`h&CqFZ_(Zu7?-q$l~kooPQ(haWg^P4$DE z1R%3zRV(UG7c&me^IxLbW-9K5tEP2FaYiAAfL} zcqH9ZEoP+g^x-rQs(fv0cxo#a!%^5cLlj}}aDT~(yW6DkVK_j_GQE&CxBZ8xhE0j&*;xtR6VQ zD`sSmSVA!KN~sNz0UXq>+W)7fSiMI@2X#W`9vuDh12h4VAH^VspeYlrP>H#6j|Zw7 zM@*tdIhr{G{OAv(1UlDjxp8&hJ(r_o?&+2g95;N=n1;SmHcUAWfq?7oQP~>aqq5!i zG-WIN56LFF;TUBb5fN2)$gqm$)ls!kME5^Jx{|b+K8+P#$?r6A-E&}nUJh4E-P^>} zgYCHp>niMtS_fW2uo5$rC5%h;a3J~p_&@nx{J~}Rw<5~Y1U9Sjpa(u(Wa>{N*3Ax$ z9;g(fPx?e(Jk+DFm_Q}NRVn%b+gu+)_qxAZfAsk3+Gu{A%+>050O>zTIgB4sW878Q zAkqMx3FF4WQ=u-mp>3_hXn}WD!bIzO7^>1Yoe>=%Ee2Yo;~{fyk@OPqmssk7tMCQa zRcGPPre`lDKKSg~M94h3;T>`^{YLTliW0u>yEwHNEnX%?;zGwZQ>gA6)^r^>ZO{qz z=)C?}b#Ie65aW}x$8WeXD8`jkJ6r&)z_D)JJTq)w6d+nh%Fy~=YCbtVJ73*+Ca9!~pkwR)uMJ0$W3ukYQ{ zB_#wEtFqXd6w<5`;Et;7I7W%x38{5G%l2VkMX8t6Rp2;b?x_%)dDyStul4$*eAMOv zVpkdCxN8lZT52X6`tyttjlIFrvHku{vw@kb95Q_{`vta>eo|tXV)wbot~KWr0_=0S z666Q??D?XvG3Oh>HcOaNx_=X|Z5Oq1iSL(L%#}%SmyUfMYs#Dqs$&gzFe=Ck5L_bR z(?p!ly-b4-I4MJ8(>1_MyV9b(cJZDXnZH!R(pq)Mzk9 z1o83Xs2G|3$*3*UUzy9|t3*aYI1J0gQMS;=Z^T4)&2Bwh2BL=K#KX7NLB=kTP#jlM zK1V6vQ5}<$1BktNs^wFNC?9cL1>0123b)VD^+K#Ault8!a zw?bWA@-SwcC?8ByBg;nyH(&W+GrdzNFr8&--V~UUULl*6v8oFcb`uM!Dy*SF3t5f$ zQM0Yt#C6|C8IOu@?+s=iX}hVfvtxNxJeWcMky&HP;?af=;190bR^!jMJ zV^it_Z?FtD$s_C5T;e_gKXCPt9>lJgS_m48atz%%X`nq)btWZ|Gy5Q#F8oFEjZ*bI zh^?|62)Z?gi$2f=?l^Z+Qj>_R2Fw7>U zpgPuEfxnpIpeE#}h`kf}(E34lk)jBf6v8a6hZyD*s&T_Zh%dw>Q5ea328vN!%TkJN z;a~LNLomi}MG!Gaq(@4cYj!+nnc){W3&jQ&Z?CU-r39fE zxf3B<_ujWoDK^NAO13-Pvl~V!CVka8p3Ik|46@hb53Vy+?<`1qaf;{a7{zlgo9_W*7!xamdgUwMO>N!RULEfYk?m4!&Oedgd!Oq<7Kbzm2Ac<*jl z+pv48M%KD}MV509;14cS?}2%i4Hy!iL@((cki2iwvJNO)it~1gBk>Bh-cZn2T8Zi~ z-|f41NJN^z3dKchHiQI25(n{rfoa|*Y2s`ZfBjy9X*RqN=w8NNs{4dmgc!@9Akh2x zZkPpl2_jcJ3tT}rV_;oQ&NZsLL=HCUL)}9c;%n6qGnU4>?*m)+eO*e4r3ZxlWAcHpo2d`?1s9dnl@i#W=02$DR@w}znOL9WB(=o zpNr#f`p#8Ix0KA~B>ifvjTk;LURv9Xu6bPjxrCJHYfvbZ8|x z{t8cHH6G)Z{~TOAeUUCXjYyThRjRz-*8(v&K=Ma^k7Q~3kd(?(Dwhw%lnY7&N?*#Q zN@{`~i+T$X=NWZ91*x$-70m)k|ZY*L?nEv)xVMx#K_ z)LpO6O|B3^XG`2*&5I=FiDP-L@kBhp+#0v`o zGBiKv^VC&KYQuf^BdlS={c!NXttbU_xs*@$eQ&&9$01WV_q_!x1#2$G0D9lWtMS5x zLHP+eMb@@MT4ulRvdY-;2xYxpYy{miQfp=~|2EpyhPs`mrLDsV?N}!3*7Q{gh7G}b zZG3f;wN~adxVllmW?|)~Q}#-WvrmhSUAjffP1--~I*Fs+Z-0mA+WPqP%f+_dS~d z-qS4);ts@0;{VvK_=Bro+IM)bT-}py-q6ydyyp1K48GG2uAT!TJQsL>mH3$=%Ijg5 zCmbkufb0oAv;DdFu}#n8TG55S;T?(BoTQ;48`iwRgmA#8UpHmGRq$;uQqgcD|BN3q zE`4l0w*DDv*%@QL;6P0CS@-V6uJ3eNEGx?ib>Ce4&X9b$bn!bT9uw#4UTlajBcQhL zu@6IjTxRcjH};>%%CCe7bUq9tQRbsKa6vQ(6bITFP6>dqU)QZi1i+Jj^T|N5Yyh)T zrj)fsV8A7;7eSM79tv-S+3;tc7&dFhyy>pesRK*n#kS8G(TuKuT`tkcwLXUxc-w|I zfNVc$&sN{!yx8zJoubN0&H&MgBXp1GCe?#DmhIrFQ(RlZs+YLNjGuCmyq>^s_yQz; zKt>1gYnq4`oLIwe8t3ADLE%l^o;9t1Ii`{$AF0r9y>{J-V~;||`;CS_cm z2dD+FWl`5>UC^>c6GbLt7#xSPPgAxKgnKFE1;<^EZ7$F09<|#jgYk249%lU<(iiUH z{k!lTd6!r%$vgLeA)*Fxk~UvbVA8+5kIJ9uc#QLaH}L-CN%-MAk3-Jl(jX$?CA7Vy zoyYfpj~KgZIsM12HvHd5+GBP2v043Uc2*CsXqCKk&5qg+%zVxT`B6T58@~JE2e;MY z{4==q0O_s~*~7Y_0LIl*A>fa~PiRI4o696iZ2B@cX@GZz40b4yV0Uf0!{+ z%JvFA+b;~XzAm=)RS)P&-oH@puW*TOTjl-icTpq>^?HSFCG5ejfjbFrO8|jBMr>Xk z_$)T)t-B1Xui@{B4 zhVCW2Z6Qp6gm*~{erX7oY)d)V>uwoOc_lOg#{M*)QY=D0BLf_+F8%Pz_%!87-1IYG z(q08$CVm#_rjXvnw`yE8%hDV&GQ7D+Unw^_gy#b8_1rZXv#Wmp*dGs@kIokDIY-kolG{ zttbHEXTrR3DGHwogNA-@3_cx$zcmJbTL}LLTh2ezTSpvexORvMiRK2@ZJ+ZJnwIrZl+Pwbu~`H zc%%G}{F3wwXW$F20rOY?B)qGgU;6dzgyw7Z{mOqI^DB1~8m;Ji=5o@{d{zmsaPB5N zE_6AVd`);C2q2#KcJj%7gM66oH!S~?RDN@&5}!_Z*M;~9knreu4%|(6bV`PBc8U;w zFo5XKgh%H<;BLaK&;~&KOn96G1#Trg8p$F2BLPHzCcKZu;2)2{KM{kwy`e^u@IG1l z;e1Qzi4zW@UlZP^LYM#v@6$2(XJYWr#^6U|@V}11|0V|id<_1D82nfa{-qfF%Q5&@ zV(_nq@WQny=$VFs;%46z@DCBMf3xCt9Qii!8R8@CN6$W4`DA~n z^d_!K62g`6zNTLSe-qx{2N3<4@V*g)|6>gP%^3V!G5BH({@ob-dm;R-%x}XBP$0O> z{0*NUBc6Go;!l{n`X}Li-}zPhn(*$a{cye|y!)JAwXX^9{@M?I`-MrjhP!rk!h0Y@ zFF?Y3C?{NX$-y`ga14RcWbFelJI_6`{8^`c)xOf z>DT9Ao^q0dYwdg9{~~UGpT;NC#A(Kw`MccONjyV3YldGL_-U>=;z-0?_4?uc zt-&|*7ve(sZQ0;ksyH9>R)OFo%;PMb{cIp^`P$ER;tk|v>30x6kGSRkLEucGG7XJ9_dTO&pN%^AXc6O#2W(mG2-VDxB2}c@g(uH z$p2*c9;Dnh1n6H+yqCD`PZi=>;#QvPh;Ogr`oyP*51iiPlm7wYqr|P8&q0S3c?tpi zHNf7!D%-D?7TE+#%p+~&7L{9pk8An`fk zwjCa``0G{98J7RU#2Yex{Qp{d;x=C|d$!7Xgt(Olo<>t{^8tJZ@de@y9OAAg?!9oU zk)%XPgUg~x_)6$$`k@;M?|C6ifQ0w_82kk>xYdsS+X?T5et^Fc-iu=JKZwEY z=I zWek3P4F0MZ{DK(#)iHQ722aJ{=@`5*25*YNn`7{n7`!zGceQVgB;mE!emLI}-fNs+ zwXX^9k83}iZwa&0*#Y=9;k`Bt0!etUi@{$XgJ)v!ju?Dh4Bi=ocg5gpqXlm!y!AoI z{7!fm#o!xaaJ8X=Hxu5)LCE}0cpF3b>!GsG@WSgamlF@Jzw9F(Tz@$Le66$oLi5-A ziow;Ek;EBULwAq_!o&=6DvdfLBUaO8T2Q)O8Vjb zItG6(Od_G5C%tXY=f~jPz)#2gt8LGJ7|yH6zhCI390GiX$fur#XUp)d#2W(m0piI3 z{%PVF;ukXAugBmI5}yh1IR&PkcLA4j@Fuk!P9=V$ z(AyWS0K0;w{nv#*$|v~}oimudXt-Yo6VsI2E@g0td|pU={tuM?N#eu6*AC?P3o%J- z?*~Y~*sAnquMw#3GW3I0dYPBXbutv1q&wT8^kz>H@NU6TK1t{yxwh+vR|0;H_ZWZG z+UI+LOF1Oj9&9;$NcaeU^0|*sE(#9*CFlvc&@9dMYvQxSSqj-8t`89}1@Hypv&5}Dj|q-+=ZPOBpVcts*LuVJRZI5*;3i*WVCA`j z_)GxbM|_re13BIlgC8S4Px=|sKSn%>_AXaaKfHQOEkynS;u+#e;&a5?i1)_eqk^NH zmq@>X^w*L;iFPeluYP!+B0fXBf%t=#e*ixN1E0vbK-}t|*AibQelGbGh&P~J%Vp^g z5YG~CFn2xg?}(QI^#4YDE*hW(*@k8&_n(PHnc41uO}}3 zMy>|)*Yp0G_$=`Z@q36%|B&ku{qSUJXXHV9l*_iOvjj)Fi^S*5UC(7~8MW$8ag`Uc_+=C0>`hx8fZw)~fgmxv!C{aQ>xMgDq}w_N=!w=v=+ z(sl@q@%)gmMx7NltaQ z6JIAd>T8y`*{O1$* zS`}Za)6YJ^k?vBv{vOc}Z<=`aH40dHK0-e8#2ZL|59t?)*AxE<@g?GC5`P(7Fe0a& zdf!KUnE28kD{vn3bp-f1&bp*6|8JAN{`@p*D2vB>5mAG@|+=lHt`3D&k=7RUJuujq`N@ew)0Nn1Fu)Y0n)$M(i6As z_HT(NGfH?R=^qmu^2`(8NBmXiMdLDm7I~5#N{AXV*L)1VOg=NDxA}b$^oyiBM?6D5 zoy3=j+xGBg;@&zXwDcbl9P(s{A0VG^SU$vUds`;HOx*H+8T6XSQ{Sl!EWTB6$uIFX z@*g8!3gB0h&ph${r2jk8XSx*VC;mtbehT!dq&r9Y4WvIm2H#42ne-Xbmtyd11xJ39 z-AZ^C>Ay<)EOFZ&egoW=AxX{0>ho33Abp1TBKeH*p>hm5mYfBYqq4Zxhd6q=0#M3cmh^_$(`=f%NBM zToL~B0lbg+B5~V(%7P=m^*zeK_KWL?CyCo~_#*L4fc|0fA0Teq)hdin!heCdt=~rC zOT^Ek{5y!(U#x(ozfN%ED@okiMPDL5yHV+FJNb#_)2q1cN6$~HJW1jOD z`D_PnX(*!k$dP^~K>yAd`fCmSNR@@n?1-l|037{^;KzVU(Nw8lX#}jpY9Rjv&1d`Zxdf4Zu^By z985X0;BC6EAU;n#L-{umUnXwb!!F{tHXMa=TOkOaF4>_Fd+d{td(zw=2C(_Z`F={zUOR$o~_>mx){YZxYX3=I8SS@mb=w z++GO#RpeYEekJ+8p7_A!3S@{65T7I7%K_uP#FyD{?k4>gi7&oU0b9-w5pQ^t;#U4= z!fqCMO2jSwtBEfJ=(iKE&nce^neID@XNeys{wd<#fC7hzf1mgq@!N=>iUwoqaZrI{ z#9vRmen^4Cr|9QR#1}^O_Yu+o^L4RM+0NWNxD3fTPaBECS}>VfwVuYa@B+w%OVr6+F7^V^obtn~d%w+{0h)2@hH zInO1YtoZ3KB|aO#-${I#xRvuSiDxF2kImONfuHWg!<^Ni_a7(y4CyVOQ}Ce3xftN{ zO5*iX`n;|8Jn?}5el_uV;#cTn-e)YIJqp-zd&u%3zJc_z1S|5)6SwWBm3U^K5?cA+ zPJEVlhI|%?F9z@g=3~O&zWV@TnCqp$>-pXNcqQrWyAEtS-%5OTTB#rBL({}(-lBlb z?_uJL7H50DOK=bVy(^XeO!DzC4;0*BJm{C z{WWp#Z3(9#?uo+N%Q zpIHVj^N5DPy1*G7D$fAvPpi`h&IfLJl7;zb5qhLsdZ(h6=1<6HhPZA2`+-{;m(O)V z4?c^ew={nvILc><_zWL<5V)mr`TRua!DrxIidvcrFz=Q8p2z&I;zNDFg@1|k+lgN* zxX44ipZGrjU+e5sJ4RgQ$!nc`YIhJn2weCl->tyi#Q$FC2RMiT>pw|v{EqZXO$u}o zZ|G7!4HX6MBcBf9$?FtYMfw8q`nwdj^1s*O`xSqLd_GTn;X4Z4zFI#YB0hhU{(h45 zFTng(^0n}GP0-eFhWN|_N@&v^BR+SP;sfOKKHzHy#`p_14gJ8uM6@$DY9lvCZ{L;-wGh@BPF_flGVXKJ_04vE$VHNN+c)+H(FJ@ugX1VD;@k z17AD9K@+!*QvR1>{w(rjKB)9IhuetH6Q}y{_7hKDuk^MZeu4Nb@eB2~cMtJJ;#UxV zCImC>?SKMp#9u17hjt#odr3bZz^92X6VH;*EyOc7C}8V-f%q)(!=(SErN2>uBg9|b zqjD}2?Q=pK&qkEyFiNH8T_qPdfR>^ z%wFVKdO&ZnIJ`@NuN|OKgj-gggQTB-Q0eVD$k!~Nhy3{C#Os$7_t?MA+N$Z+|C8dj z9NLM`5^rLCT|s>DpOxO~`TdsuUlg}`ZytC(lXO46K>Ey&{e1p4hW>G(_j>VCa-}~& zW^4LX{yE~dd^QrV|2HMPko1!=_$|b44sQC_V+tH0-bs9sxRvKU zG59x#XMUm#EdOV1Q~nFYFJ$?zC+_`J>8+jfHsbaFuDF%|GsFjoAElh%2Od=~{~Ck; zntU3TmBA?aG+m-{&JsUBe3bao&lFfQE{y~l{xKdHFQ*YmeS9<;-G;xl^N zdyU}ezsdijKpX3;LcH`l#m#%7@%59$XHQZ=Y=8M4`Df}Bzk>Wv{uAXtNBn%sKT3Qt zp}=m}L;4R9pM8Pi$B2KMc$Vi6 zWGVkims9@0xdayxUpz^oT>*hf73M~W}&hxcXTnU^atPy83a*ABd!sUe<>-x^SW zYX{yF!Z!k!`dWU4GC08c`b*-ouTp%LPkx(t!v%`hGu_`2Prh1#+c?f%_D1EulvaFz zeD)Hb<2eZ#;-9kg#I1h*5%FY;@|k72r@u+osoCkkqk(+dflIy?T9xo|;`@oub0O;* z;-4j+X;*rC9>~MQOBX6WNBU>wlz;te6~B`B>xj=1xB4L$gUnD&(KG=13$<6k^aEn27bG4KC1llZ(Dle^W<~Vi1gp9_^ak0=mRe8+#Dc-yY;N!>xtLDRr#Cu z#o+!YWALvKZ+M&1AEccBV(H(Zz#&R-YF^W=58$r^zINd1ketK7&#{9w?hcURE#xy# zKDHlyI0nCicydPNvHj~8#OH_~tkVQqcBq`0cPo7t)14+hOZ*zr|8L?A?@@Xy&yR@D z5r157d;iz+xrzY!oWE1koxNJ|+nMel@hs18$q;`l@%lgWr+bs-6Tm-b>919K+fKes ze1Z4|iuIqCo{DpT>8?cqO8Y4hxBcji#21NMJ^6m%YX|JFT08t2=?AXU1n(mMXBU)z z5Wkdo@`FmBWVu~q={d1}l6;NuH-NVjUm$)e%V!Vq z#Tyl9BcCJ0>p!G8%o1~bop_1(G2+WH_=|R{JV|z}Wv08Hc*9K!oR?5WZvkFUp6RYJxSNSQcTDA6CcghlUsIl&fk&0|$1VL|DZOnEUnkzc312r%J2P+AAddZMdBQ0 zyrCHUPl;zfuYAtc5AT!2OJ7jnQKox0@qsTYZs$9{CEmb+%a+57iz;Wsmz4fa^64SI zOniX&IPvV?D*X|b!!5wq4t#)A_|V(lU8MKELVzFt20W_#e_`qWP6;=VAyvM{vQ;u_R@3T94+TdfE)YyJ4%0q{beih zxqB6#q5Lz%8}3v55z>E#c>P0)Tf5=`;)@R}eu#WdD{H!?CE};(jdO|D|EuD*-L??V z5`R>0dj;Z|e^bB?V>c6Dd`$7PNPj2s<)0{E_2(~$d;hQEP1Iu@6_qnXg=h8rF5qhi zu48U$0Da_p(XlKk$U&cj|}tPU6X5Do`SRg!tUA6tLxUE}Cq8 zHPzaeqo7|qa6=X7C!fR=aPLD^{2Jozf)5<5;+Fnh2EQqUe*w6(pC!tZB%gmLUjG{f zZe#yiyGQ94{*#2%x4SL=JH@G%)nb^~8K@aZc3oh+Y|F;K1@I9kPR`Ai%9 zvsHYa>Hep|zfi^Pylmoanru4bN5jW90Z?4E`J9OQg3YCF|Bw&a-DKAM5vfLk#{d;)~B$dMnSTWAF!v*S|pN zZ9P6`M$=s&ZcDs{_zVlu;={x1(BtG{drQbmMFIjrxww=G~ohr}# zA1J+TS9#*gJUGp^+s_c6`9r0@g8UyKzC?UK@w#`heqXHghxNmIIq`;b6qqFa81Xsc zwthcNd|<88@7E9S--$1utAKgG6L`J&-I{L0%M~BscyS5wne!F5{NGAE^D4z*E}H9O z#OH}y{r_d)YX`nWD!iYH<7@#LH~sh3%I6UAdxCA}CvlaO+gJGu@22OsZNQ~|2i7V7yNH)!@b?o>b}GHqpSQ)}-z2`&rSu!f z|FIbS8ShhhlHE#g%m3BH>(?u8%ej+ymiS#KYXW)V4ZTYLXuaasSUzu5JVSYIvwVox zpQJawM||K-O5a5Mx4_Ag9Q0%L)hhp7PU%a$nkUd9z0j`R^rQL^~{h4~>oy3#xA|K*Mh|j-Yaoe81Pds~#;=Hq0sg z2>Dlt&l0!!Iz&AA5v5-w{db9bAN9-g2=N8tw!NJN`&{ZJ$$VM-<-}(>a2+E5%ZPh_ zq5N%oxQh4;@eRz^QR0iAPWb{F{l- ze#y_jm-r%aJFh=raXI)J*Bs09UgD(%KfdaNnr{8yDgKClcV;=75@|Gfea zFkgQ~eD*HIA7%Ofi1^H+;^y7+kn4GvQc8XY?pEBk+Y5*<5-*Ye4a74)PFyuTyv zJ*c>OH#zvf{DAVG{e|M@o!7v}i7%a`0-ASJ1OFWH`Lh+jQXlgkwfM^vKcDhEVfnmV z@h*-Fi5oQC`tzvY9yjJc@g?HcJ}eTie}krL-scHkbC!=B zY>vykn-ibkBECGL_?eWa?n9bx{RH`#r#$aP#Ak_H`i;cr_bR=We+Th~eTtj+RD##7 z#JzVZZr&vc{F|1~`xQ6uaRmM|;-%~T`17DJjefgXar53p(5Hwme$@UfO_4`fYSx-C4e(;d1`zC46-_jrWYuo=J;8M;@q(4AD z-yuG;TKSmwOyRjxZYKTdiqDW^8}PLQi~NOmtem1>Z#MY%sT1q)_HXabZrn32B&k#` z2a>{M;Vt=cZ)0kGVPd3zw45It=`2o6=J!pmo8D6C8R;Ax8ygxN-fftqTKyD*m3()0 zk8s=QW0z{*lpimar#B6jN`;A?y@S)msmbQcSaI7#`3CR)t;MRO4 zKN)(^<}uYeG*uWI$qg4LDuv2qeqwmK+sNb-sW;u!H#%6(k7Ub*iOC(E#gY8x;<~9F zJM!i3q3m!WyK%TLnY%!kOqR;U(gn$oaJ{LPAPYRYaX33Hq*k0Ju-Ma$5>F+!=1ax$ zWdC$2-+e)8usj*bGu=@tjlx%hw9H&P|hlYm20;C)J%Y(!DverUZAz!VX zaE8;#KGbaI*kGm7F(ySmSu8iEdmva-N47ED-JNRg%A<1SPJZ3s>$e-F=O@@$8V3SfEtfI*a3_a=ubAy!#|| zqnrZzHj~I=u z-LJPeyt_&MAoa%a%1)PWI=Q=Vs${ZRC{94Dj6kdG?siF1EiTDcC^7%-R`<3kcmMr1 z_r7+b6$rH0`~*G$HWw!X0<^mch4{;L0L2(8I`mO9i1x}*RBr8o z@-6JicNe-_cW2A_9ff_qQfYQm?JW#Nq?m3WEAGvW<@e;razbEWjt@@f%K6Eu@=q|+GMhtV5z6N6G3gTtfwTxGH>+%9W$4WiuO@SCR!WzdudE2E%+KJ895q2wJP zTnMe3)^8{lcbkS0DCJZ;dgRDZaUTpKq`X2os)f=qF`_-MI>v{SOC=%L@NQKrq1%3? z(wk}?rY_1&nkE`ihHaCh`7T&3lM(mQNvroA!y_`M&D$#ZvO^TXEY;pQnjhZ1ZDKFX z&J}a0l~h$I{-&EwncE{dsn=X3KZZs(Sc>YG?HA=Ix1s`y;}|!`hq}}0%I-obw=+Kp zy9Q{kGF_2ck(S`Exm3!Cx_%JW!HA5Bg}zj7db+!PN11M5+TxF^vhGD*(E5IfloS@3|7eHeY)~vCMR5_ULCt9EY4S|t0 zBK36I{|MNlV~tNmkwT%k+;gQdXvWdv7^I3KZ}pQKVYL2~eV}C1joQM+j*#M=D(BJa z(QsgN!W>WKpb%5d<^1qexq^WO7Cy=>TtVq(vYDC)F+yFR7?T#Xk8T+5NVuD7G@O!4 z)S92zQz#cFR;Fqk%L|3SMfIjrLxqXK@^pk63Q(q+hNS6Z*oI*!v!F1uR1)>!+^)98 z_DzE&Ojt&Wd%MTSyHlx=!O21C9?*?OXg1jZS+i0=d4n45PZG3^yKQ_B8W8O>LX0$& zquW+$m2ZeGi*%#gKLYKkno{c~qz>^@DKq!$lrpHm@@O`#$rTA&ZE|0zUE0*7_3Shw zanoDO`KQ~c%T#BgA;$Cb;|@N_9s$2 zl7lWZ3XIs%5~bFU4esQ`sz-Wpb9S%{|AeuQs|~Bojy3JuCJJw!%J&yo9&9m~=ej}t1+liYI_k#W{ofkMNBTVHNK6Jm!pXu;@|MTf|Pj&q55d|`wFTp5= z`f`Lwx7CO!bjQR5tk+2lbbiuQOHZYHUkUT;}x{^5saPMm#1rbc{jr z!@Jj)VOI+)<9^JINoN$U zF~Yjt=ABA!nW$C0uT8W<8TE}7Cj*jIVSi52Et>|Xhw^=;!MzjfQ1m;?u#VWLm96bD zQhFOOi^;#ad+SCxIUO<6%^}|@CS&l!Kymt-YqGyQZ5%7=aO)VBS(GX>Y7Nu;&@z2( zvvtq-py{SgnyK_t0{bQ(HF}`b2){cO81Qxr^c-M4A-~A&A98`XIs=4rYWyO&uGV}q$6dw zZ{))Afbp8uDBGak%tWudurf!`!KH*X0420NH_XwoBus;@QYO)or;QG-MD_EOaVm69 zmCJCr8!~7b%nMwxnlw|e6IE@6i^-NT8ZgF|f*t0}pyhH3J5&QYEfqoGS8ov%DfsI5 zm zTD$VYmWbVf785e#OgkfdkG}iHA2bF(=b%(#4*sj$j&eSq z8x_~1kCGH}Bh(5~Oh0hK23wYOw>0 z5Vv%7Wk;tg1^5H0=M9hMuCCtVP6stg-PcZ1NwI6q#IxL1sN^aoS?MtA!?AR!X5)$6 zI||pm(uWHOK1kF4;;d#r^Jbsl0^S;|`4_^CI#u)TjpxV9!|{ZEhT|n+h|%9SdL+eS z-&TT?2{8dE#j4F78F1iVCTy+bC$~*uDvo)3gq&{Xv7lC(mRUzlf7&syI!kRt@A3_8 z?IN2Q*SfQ#KH;P-*oo!%NONu!cCzHo&6*us0wY2d=3o$42UuSiHbo{L%~0EODglHO zHOh!`s8xgTG}Sd6(FSYPDrA+?gcR%X(_VpNbKhjSP}0?5qp!d)oD-jT@Ow(KVXC%j zoH#K`q^*>a z_;Go%fR0Buc4GNPS>j)8MQa6S2Pa2$5i*vru|Gc!r|e{&%i}Q(r&iU-wB}^R;+CQz zSvbS#7HI#tMK25is38mj&iIINxFk_LQo(-jR;tZeh-MfFjOf~mj9TMH!JfdAZJ0JY z51Xk$bfb2tm@EcB6H|i{Oy{y@07*GiGOS_Vp+k`AKfn2960qx*Yt`ou@ z1X3A0Bci4wiCc_3BT=(~b~7P2>+S(5{MFl5qciHVDy*MOlQ&K?#}`d)?!pL-OgB4AI^tswoL;r8SrH!Of~nK2*m7g z&x8S@giCQ|CWUUTFn^wX6wwA*HFj*o6k{}>U{D%VX1Idey0DTOD@*Ne)U(hVHtek| z5fyvjYZ04SjVoD;iAd0W$cdXP8-J7Za& zyEgI^o`@_JI4LDo)&!jOO(B4%tRa}{=Q9+|QGy9(yWVwro;|rms{HBaBt5NvuDq_u(=G z<6$jfPq@BP%{>({S`nK&h=^81k4H=>n&8YDsuagihe9i+ZN!++s3CjSCX_WW>+Uff zJfQCb>w969;y=FvK+qUse^`iol-7i6>PqfSYx zVqlFRc0wZW*Xxuz8&$M$R23ymn50;`i85`)9l6aclJA5=Ph*|@Y04<5rcWQ@uh6hd z>=P1>6>1yJ9YfO3_jrTy8M@ulfu1OJe;MeNi@VlWpHv5Q5*qxs1rkFMF(A3V#6xp=tk4b!j+pHujb5mJH$^~Ei~37 zBI)qB#4Ci0zrCk|@-M(Y7ty5g{06wTBHDUwT3SGeoouHVkE+|o>Kt1_AtC>Gp->2C zyj|Rrrnx9dRQ;z~g=l?YUw&kBk!w!TEd}d(!mdgbDwj0YYasQWyjk{#qZRRZJM&Fu z6-e4%cxITY%`?YMaF@s#;_FhC^UUygf!=q2W35G~AuQYIAd~el&lanrY8i@1xk@Fw z2)1A;m`n44L@h6&(g8|WN&RHC${imZ*@FrOvvA8v%OpzI@e_K9joDN{H7MREg8B)fFF6ZW4>N=u`K zVKdZerAD{mn!{@cOmOjIq3pud69QU$t=2k*QJ?fh;gfw}#G}7#S>&tRJaFkhRIEWl9z~llgL!{7{Wzn(oSq3~8sM zOgbkM(on_<6VTVPCo7_aYuaRL!V-o{rACFdQdyhWmZ%Wm$|^(X-vCK(SP#Y}b)4 z)G0$%gjs5qQ#z-I$MVKL)a8^DT_G{PcCPk^&1*+-Pr-|rFLj5XV1p z7t5OpV`GI%lryZ^lJvpqnLq=LU{kC3JmwGBv?1+iV|ExJAK_L~Qz_V!0E5MJ96L*H zN7Ej|`kr*F>SEUT_z+Bp+IoXsKWKyfWGXOf=G%%@G2NosUo4Ip-&shOm{|&U>x9U$ zMkVTdAEugSi&u!CUF@s)+hP$`!zO(rSWExTjmUU+VLGfv+BOeP6#KCUC8~+lR1C%) zL>9pElI<#@^~2Jwm&w|tgA5HzHDg|YkiXm%#;(S6ZZe`~u`Ud&U=+4slX)(l>26)S zIuWK$<1HC?2eeamPo&XN8`$?k>=LZ$LN;P{>TpB>2w7OrR7$6wIcZwxQGtn>y=kJh zeRbokGYRt;?zIsCL?Z|lfhIQDBf)V>_-ZP~CH(Rph9VXTtR@5TrhZUatVE|rHT z(NJu-m`_w!u@-g?j#(>wGrBsgBbcj;{(f0pfOZ1p+p>s7y}WE z{ZhbK93CI6AYW1(>7=jVO=Lb=UeqX&@}-ViL-A-(V+@l}gZB%9<(bLpr^+Igx(F*Q zun`$DD|=mv6XD5ON_3G}@fTrJ%+%N*jHRf()EG1hLuI&VL?0nIHD-Wxs(VTY($=ZT zihK*@F(q+L8oaIZbYl^OTTnVxt4r~{+nr2sb4%Cjj_Q6+`Rzi?eDx92xdMY~VA?NB z3C6UOb$4xAD?X4;^;G)HQ~C80^@{1Y&%@wrq=4WzEN)LKA}Sui1+E6u8b9TN^cOoY<@`m zb(pmYeiHY`CQO2nxIPl_N?_t$L_m0PqA=_Xoxbrg#5vs_u5u@Egu$sU5@L~R#cnH6 z@;QXs4HYY*0YXG*=hdd=ax+7P8?9j;^>>*SHz0_6P9m|yzA(0+wWyl9@)MPO-`L;~ zI!SR@cAB?rQmd(VJl&E`H8pkjjyEOSTe^Fv8`J4jI^EpVn(ppy?kaa!lAph?V}nc z+lP>niJdKa`bA_9XuqUyvxWsA@Ph|*gxEG>HB{W;9h>`ly0L?^gyRdauLrv&D`szk zNd?b`9!y~twv!!DssRJbjz}?_8D?d|EOLQvSR7Vw2{CP{@d@8d`L-wx*$qlYU)0)Q z(y+jcQ5=tE`2!K-vNocSBx#$g2KDM)(z+qhKI@Q{p>Y~wYw5VGu!O{ytx9HwYBZkd z&F)qu0b1i{bB$9IyC;f!86+9ef*V!TZ4=niS=>1x`%_IoTf}hV2GXTcJK%2_lhrMB z3>KGfnDCdZI2T$%#zahUb7j0|r&xsR;83Hk@NEZhr){Zb9gp;h?g<7M`skfXO7n)2 zOHlg?iD(2n_Uj|gAL3vTnHbIuiBJy5RJ$vHaEucok{!2n`pVA?vzrF@T~a7dPT`0Z z#=%Amc_zGiaG$IyMG@PU=?@<9@AQkN@oj%3Nt>v{OEKjLDn}h>s&)Y!YHstVP*vp|xjR zeY-f=*~()Pg2>zsS0Cy9WfDvz1xo_QlIa;ByG|%}Eh2CS=BT*fHgdzCKgkICR8zKC zGB%9aBpS8L!VPn2!yv@n1+o+zrIm1$z$A8-j^_6k%QykSIN{1U@oa^(L%J!FG?LbC zD-$oN1Y5{bR?m*jc`?i-EG0ZD`ks*GaJ6$xGypwnz#KA7-Sp1vFe$zTCywoPmV=mDgl?g9-cF zjJ4Z#GlRqGV5DksV*k*<@FZNb;g*=jim2JWt0sy#LMn(C>Emjz&1kEv2yezgO1h4W zI*eQnPL1csbJ)d#10r!CUGxI|CJ7FZWAkVfflOC9e0fbb(x$|AM}6{B5kQq%7>n4Gh1&Ycp@9E3ZXjTU=#y!lX!DQgU0w_ zBb~WzI(IdW2X$0dqQ{pg!pH%pw&)~lm*(KV=*R`1e{CdxJU4QL8I^X$UMcILV#Q!= zcDA|qbd>dML=+B^P+k5%r8k&Zn$f?+V!h7n$X$HGO` zj2>=nxz6l1>FBz`jIJ`cV@Cl4FXrw!#fD2$_FSaEW{4F%ZAd~bfS#@hr;(lH+OtB+ zsU}(3gYV7SmJzzAdOn!z;AvF{&w9}x5iXISZPN6HDMb3=u)2wSc1pHlp>iX3GDOr* z#Lf?CqDVHP6+{uEF-8-&*7USYsZan3r(aNoo0h`8^eVde4;Ul9jta~o+?3` zHfPPE2x8h^ZEEA|>cJ$^jkTE)!%nNbPhi@#GH*l}*p@}!=D22TP&IS@uxl?U9sDiG z_HO??IVtm5jat;67xHSYER{Gvv=n82vTj=3L_Kg`M32QvsosS0G)@G>$v0EuoCw=T zMLSxvrA42xbTITy75RjW2!MN9XA+0Ca!^&JQ3W_qOJ#~!5|_Z4R^v@wm)`+zp6e%w z^{Pg>=f!^2EyZc|_zIvg!+NexRD1VXr{e+Vr@t0`q=f*fEqfdpU?<wGe*@MPs(QO~P|kQ-`D6q-$z_oz=1jzJ(?pItxLX_~1ax%CNz@CU0SsY=xTPU=z)7Qg>x}~UBrYW2N4Fo;` zs&PYOJDT`2v`YJN8m+BQU!!(2Y^qj|>N>v6q5&e7UBc}uh3z^jgxhAGPP2lFO(%6v zK;XcJa6OqgM%r0<3`&|_;2=IBJu3B=bzHXI0Hh9#3H-7FU6iD)sJRrWJPlxL)+61_g7 z1s3@LDqOU8H4T`%QJO27ZyPFtbr$^;)?dUcxGCrT0xGntwHo<5a-?8h_J{dnrR7xw9 z)GmK{1l2dXd05c_lqsk*OK1qyw&B_Vk!-zOk*K{3R=Ii8Lbczm{D7#Pv{5_U3V$5M z6(v?W#b*P$)o9Le1bB!=3ic6V%Z+!CZ(2b&kT;x+%PD$M@&0B*hkEBq7{H}JBc!4@ zEIZ54FDk+&T+R~D#j~58rj}~18I^XV>&tO8lhIz6r+g~k9sE-2OjPs0oH(P$Lx=Jy z$!GUQdTnK!AtaM?q9aTP*{#=6-nl2@7K+YnVhxXDu88f%fRPdw^CdiPU_r%9s6{w~`wIOF^80&OVCvv(T}Gdhh9S-l1n*(# zRCZ09caPNG4^ozJdAxljR9WsC6Z+lLXOuR>EZ67%YeNaE#!Ov6Qpr4ELL>H)|`Zxq5#k!A`}`nGK(rQ{?X&9iBz*}(*V1! z{Ls|Sorux53*iA}t@eeK4dSVN%dSu-zJ*taxAMYkldS#8P=i%oH0y{Qq$I9L2H}gu zQjS{oPPcVoi!t01ozS3Qs;CjL=(4ivYDO>fVIf`xQ!oy9f+2|@K)i8}1;jUne8ISa8!!=_`%@*{CEZ`u8 zsUh@%No-P*ZVOM{C4*yAW_*t18R3cH!S$vI2RgdGHKn7kcPp9*npdSLXSGJ`X-C%O z{VJP_UDz3i0x;(QMATf$jO}9G^cSPlUJ9p7mv}%qPe4Y?-x~JW$Z^zuLa0ZKj)N7P z?GV{p!fQ-0dc*;Yd7moUsBr~HLSc2Ke>9KxVPUr=-1KI~fu)0pW9>1_m?$J?e`dI! zg#5bd0JnZ!-G^a2D_eT3k33>kBj|ZgB_$xp&)%=sjAg+s_ngI}2&38qoT1~KX~H|3 z$9vd9^pxE9mJg^#c|Vvec;+hRTx)lTXwlKZ=yY9fH->n?%^uMN(8qNnuwh9qvd3Sg z4-eINC!>jF&@~@(zH86Ky6H)2GNFnx#BLaY8$=Ku5v8x{+(TpKjlP7rw}K4{e_Hgc zL@P_oO!t*u5fa+nk0h`!jFKJWKR#_kFtYE4*AJa+$guf!-ah)(7t=4?9n@eMn? zia=KlYf|?_q+^Uuwx+Z?x5>s4hh3IrZCE0Ke!{-;a0{|+a0d*fr&5xJQ#jCW#d2us zgTtg}+*AU5j$)4XVtDC+bF{mAPqsfd-XGz`TA><*Q`-Nc!xgq*tiWh`rRrN@0pISM zh_KrjpKkSG8K#k{Myi~MM||UVDkTkFi8%+4Y9Z56ldDkLtxP+h(}S~|6>{n}yHt~Z z2hWLb14^kk(I`pXHe}k-)7cSpV*8FTmhF(e&?_h7)B7tllkq?^@yE)pPAnR_g zU`X!ELdQw-jjB`hhbWh6{LUjVY8k=YrZ9$AD##8k7y;SALb(U?l*Sx7*9yI&z4tA9 zcy!OndzTW&$3O2OCu+an3^rv#@neY}xJ8Np*4aaREdtJAbw@o0@4DR~lIW4eD z90$jpo*JZv5Joy#oxY)J@p8 zSqQDZfW!`d_JDlf8%QuR>wBKEE0W1eS8A*g(!&AOmWWRbOaKjSNCHc3w&rmG7`_;t zg^EK9uho@z2ZnS=s%m>ku%2viHrC63SNjX6=d zhQnm;A-d*xt}#88){H55!c3r&ign<10b$WoE3)9)uy5WJmcm)-LHLDvBfX5aTlP-m z%jRfe`8Fc2fr!pUL~QR09<|6Ra-*)R*@NX+SZu`Z`~AW*U!UFJ9I`uN3>SHkyHDxC zps~jRi@QH!Ufg0btH&!1K-;TjXNhajyuCfZucg8*V zY=ZE+&+J02ZC4Q#ftDAhU`5&en3h%BmLWM&#eMUenWKgo7*|-hWZ)h19b0FOBMCqb z%1txK+zJRBGPQ!wh6w^3eAZF$Y5&c@lZcuw4l|a;)TGn4d`5_~92;nyffrFbm5;r2 zsz)MPl|zYff9SNU|>~~o|DU8M96TRthObjC7vM*r++*rV^-L0EF^9h@#sP2#0!SPb=v zY^q@ehnJ+~lLD!DXI$+B zUn0PIvnV;J0Lqj=` zidGAXFNk!LNSUUIfEak+qtft6uW!oZ%STptk+73M&0Vm9TxFg9=f?AJPB{+;oe0Ng z;d@w14|7;-w~EM{Eft)b#KVnPmN9OTg+t+OE z-Y+>B1#TMdlkoSSz;3X%uC8!=ID?iEGZ>>~1A4W^$O3X%?qBH<20WM-y$qTCc=Dbc z-z(cgC6#KH%sNUK^8_>=`zr8VE7X@M+3E`^jpUVn)9i1={OaM-em*v z4KWY}2ZEZ-c+IMXpwY9tOxuhw?**?(mrEC(CChy@m-<@s?i=YRg^d?fYFg4_w4r83s9Bv#Na z-o>(rdoY}CARMIGbg1rK;XRlUi&oCFa!#c2M>?1shSl9$Na24PBUfVPflz|)FY0{PBpo%6T2DM-y$6HHhWMAUfw51nE2f|44zwIkc6yNRcUMnhd0g@ zs^r9frw6s`*>!e&GzYxvjR=#IgmSZnH|KD%R0e&Y7enf+pgXiS9!<8>cXt8=pE3S<2;Y%xqs4 zQcc)=B&TR17B3HO5fp9iNlT3W_vD&gV?Mkm@o~XP`d$7WApTq8t9Wak_-gz<&!JDA zrUXGgO~iwIE+n4DW0tpY$PiBk@PPpRsX~lvgm?zug^$G-h>M&pj+{%xgK|DXJSgX* z#6`~c;=jEfCoXcj_^%!MJ1nt$K1+WHy^AM_2jyuZ9+anzcu<}T9saI78ytE!-K<0J z;xoj9^6V!bl;d?FVZ+GZj{7#47<+JF}yZ9px zz02oOhu+1XaOhn=zjo+dJo{{I55aQoCmt;4?ZlT^4*%yn{2wQt0p{Y%^-2_! z{|Vwj`B$B;^rBBLcJ#?C@gScA#DjcpCobh6@-R8?81YO1zmK@2+w7#f6yS3f?#uN^ zfRDxd&(QlpeK6W7dd;J{4U4f zr=DrpdqMiP7<_=8Bq+}a@t{0&G4zLH=#LT?c}5-ilWcs!beo6=)18T--ycJN6>+JT zRrqh))iuPE0emio|KS+^M*{pCz)!B*h-dI!(rv(hxfWvh-x0(A&H(@Ol#O>6aVx*Y zmt*)p5ySt<82;W1G@&5>2I9f`I+u8`zRn|V%m3w+|NH=di)Ul__s8(x9>f2N82+Ug z{*y8M_XYUBg7RM(;BWD{82*Q2_#cVke_IUy1}c_N`4bP7KXI#<8f^I!&)~N-fd>4S zE91~hyOsKvYXfoH9xPrW9+YR2cu<~w0sa}o-Se&t@VEGE4F3Z${0|2C*J}cELH@)S zWBA`4!~f9$|19}DPF&=ca9X)(1ahtA{|Fi%;M|tXrTlp>hnE~9=&kzsFxu5uNA&<GCBOTf{3c&)*o62r5fAcdBQA2vP|RxdE)3wx75$yKl$%SR4d9l3 zyTeE9Rm*?Op?C3v4!!WV^V7o)y^G)F&HhgFf!H zIea8tOWz;BE&beDeK1&$hlvNvKlxInmwJ4jQ;($>{LUD>{@mzv&mEKs8c*eo6b?_@4-1WoE5)aCAfOt@zqr`1Hw|3w$;XA%#}nISH6y7FA(;LmsDyfX&(q~YKS z*4HZH!F2nHOS*3Vx+Vr+h~a-n4F6=K5y#A1UH&66_%iXJ{7(=M%71QCjlWxNZ4Uln zr`$#z+%3=BV{oro`3L1$MLa0a`NV_ucwr2_-@)JK$XVYKo$i^$gXwk=mvlek@Y(L* zZuxkv(fn5t5Ar`sT=={F`py{q*ADK=b84HW8!VqC2Y2b09o&`w?DiTTm;QVQcj?C* z+@-(L!Cm_K*F=}kQR2b!xt+LlgH`x{ga*?w;+X*M{V@Psp>{<)$bW>ml-mcL`dy0Q z^GFPzh6_!yra%6r!)MaLUH;cN_{SXj`qwI-p!{bN56XWwaVekYrQ*BZd$0AfN5Th0o_5KACmVe7cB- z_z<`KYo7hwR;=<>v4xdsC zpUD_L`(yZIx}xRjA|8}ygt*A#j=ys;d=AI(xx?Xer<1Sc7(P$L@HwqpSwYz3FM5lXzcre|A#BI7~ov!j9BAx*|$*;xdWB4D9;eUI8e*^g+3-Gu2VhsPg zWB5NpT*~2or`-(fABri5>LVTKt2l;dn7e4>&@Yzn>wr7g% zT|qnpdTGxVKkU#y4|oax6aE@l_j@K;)Nn zNA;(7Dsd~1#m^1U|9^Dd4}7eBJ|6ygcC%zx*jRaXgM*um6&kx^#Yze8B?t{W$Pxsz z8f}nemSAYKgQ&C(1}URG7;XBKYP3@grj;MlHrlBkHQM|tCEDq)K@c@dN<4yozjI&L z&Xwz&`+mLVJjwff^7&rhKXYf2lXIRb>SwK+- zm*7w3fqR~c^!XF%)6D5}nA7Kp^wIo-oIbZXeP%ynG_QNfvmySc;!U{E_Ym&$?MNTp z$3ae?+nheLpE=5@eM)f8vkLb-)to-foIZy+ecICJxff;G;;)08KDRl2#y@K`FYS}U zeO^m&pVwMWpL$N8gPcBX>7(o1&*^iO)8`ic`Y=7c|KGt=^NH2bI=n>Ib3Vt*a9^Jd zxUWw&r%x-V&q+?7C(=jPXOPq9HmA?nn@95&0Z zIepG^`Ye9-XkMCUMO^Qz4e>X~eWnHXbvS|hI-E3=7EUM~HU&wcj#%)mWo74GY^ zC;lL(xUSCt?(1_4_i?8`Z?w*O-cq>tS%Q0?&73~i2ny;;)qayW)D^dz|AZIesCo z>o9=dW4>9s@N+V7Ux!CuFv|bya{o!i-$nATitBma6n~Y}*WvN=;I}bM_-_MVH1EMZ z|2f?A-@^TQmwaJ1nD?21d!J>v_o?Lc+0N;6kkhA=)8{Ow&vj0p$uD~Lyr$qjuUWXy ztCZ7cHK)(H^m!lI-$MD>dB)(LXBQsxysz|W!hOFEbNY&nn#WY{KLD z)bH1Ana|?;Q5ASRw_0B{XZ;P_b54G7O#k%vou=TPa}^%@=zV5G{F|N|wjBPlvXQ+V z=k+(kBj%0QDm=cgeh!cQwNLsb@uRYJ{ub%Kif`cfytZ?^1NVJ7gZq4EzjQRN-k(>+ z^}bhud;e{?_peKzSHCD5EB@Na>2sFT=OU+1;mfj~o@Wg1c@lVBPt8-x>9d;Crz(AP z-I_Ul4s-gP=JYuef0LYteop_Zoc{N4f8G_oJX<$^el5de{VT&G$;t{V@HD)yz7Bs` z@EggwDLyOvUW5C7?ZSP(_TkJkjy!cZ^Uw!dSwYOB>o)n;%zfM`xQ{yx_i-P=ecV3W z$1Qxtv&S8S`?!zbvCnVIdd|R^CypPlS$G=Wj{6e-8?TbpFJxR;wR(CT9>>+s7l-2d z`KW9COX&Z^`qM9@PebN)Ej}sdWFYzPUPzk|nftA3x;XY4Dp59GQf=raya!~1%k zC*g4&^xPKVetzcRzK`qDM_=z9iN8YT+Y{IO?EvoM-oky{sY*7%m|y#EifjKG-23ms zy?;ac=zXt~)8{Ow&vj0p$+u`M>s`Oo2=|62O! zIhp*L&^TP)XA16p7T~^~<(xhnIeqqW`m}QToaFSm&gnDxwK?;G`@D+qr{LSo-Mt^m6)~=k&SB=`;EDIp+uN^O}Xn{rV(%o|ba@tmgFDkUpO%ed;-V z4s!YwzG1YF`g&qT92KRm3g})Hm>G$OxOCR0GUQVC$oIY1@-Ve)J?7}rX4e!4) zJj&q_ujH>~|7CrWy<3=pr{VorpM*!eDmnGrIra6N`h%SMR!;p%PJJ(@{ye9CkW+t~ zQ=fceHgDg@8Tbp~w{;)O@VK7w`y|Ww{>cWsXuf6j{JExz)zj;6zpoyO>-Q(S(*OA| zb|XCE)sz0}=hEk8@_e}x*Z!ryp7o1)^v_?`#kIa7uHOgli0l2Z5BK%Ig8Ta4N}o4N z{_@|*a(bT)xcAwG`}1NCo`!b%yl6;$T+gFyxWXYk?z{RCJg(ccj#f{zCd#J;Xdva+{YdN=B#1tQyIy^3UzoI#*OPw zKZM6TZ+TJp1y}J~vNwF(dAN_e2akQeMEZ2a|BCqJ?z8((!M*=7JoeYmce~>HI-x19 zuYWGYHziNuTc4e04DNYW;5&f~=JPCF25w96|%>U(*b6#A({z}EGvTn<8KEIOKJX|aAG`y|%;ce;j zHW{~-pg2jS!5 z)wcfh)0{qixUa(%+}GhA&gV-FS;zi%Ha_P?pMb}CY5ut!FTvTL_uO^!HpVT(IWFtB ztiFZ%9jmAB!e3@N53HW!9>JM&0sW87*Wf4S%kZ{&34Utchj+~RcS6qKTnFaqnlsN6 zbLQ!pGtap>^IVuS&kg)#ww}{}Cp#zZ#T-w?x8?lT;9UQA?4x;tkJ&RHU_JNEIj_1o z=XC(*I&<8HImdl$&T*UO9QV+i`UFeg8BpaQ|oNb{*TSsziH0?PvE|ugB-sX*L7R`_GhnKHOCt{ekiW}&&Bor*@tue zt60w~IMu1_b& zFT}OamALjvzB5}N|NJ-u_s@?DaIWV7>$V8z`p{Fj&$j~iakt?7&onuJnmtSMvLWPs~^FeaN2l*ZOmF)=zx*u<7vYP+iYQ;;)hQN#VZE zOK@N38vONPn79rNti!H(7rqbY`mp}Mob?TOJSX~fXbbK+PvD-j@IBc&yxww-nRDC; zxaXWQXZ2sdbr*QCaUzmT)ocSlz2ZO-In0KZX0l(=Vj#CH0QWmaOPzF zwmIvoaL-wXd(H#6=RAiqXBjy!%xmyIoH<#4ZO-}u+;fh7@56m;qW`!#`%J<)F6*bw zS)agt+!XHXvjq3`*@JU^I>@^SXP-0c&-y3ktUrhQ zxC6Ma&n?{7=MEm%Cq^vc^YuMEHJ|>z0O8_#7G9FQ|HwRn&%n8!te-PyeG%^SD#3kT zt8ky!CY(7_RkxZ7~%Wc`jg>uYe&*@Sz}L%8QWg~yz)43F__ISUG{deHZTIo?HJq#=SIWpDXLn`WtiB-@<*|vA>tCb98;(o51~C&A|O!&BNn<;icHH z@d7+GU(Bgb;c*|ePfhBd55IST_1QHqyi@qiaP3PUtv@hleFN_6(}MdtoWNfQW9iRD z%>Vu2@WZbozF)o$s=#@ki^#ccp2BzFJkPA(HD~=E{Hgr#r}D!+e;*!m#{0u&Hl4y1 zJT;$soE5}z|4in)mg9Tk`seR0IM=6wbvQAv!#i-U59_<;tbYRc_36X!L;kprysqHB zKG$%r&jLQ+2A+oZFgX>IqU0ipKlB9^F4w4d<#F6 zO@#Z>K%OykjynNoPS#JEvwj-xIg4=5IS==okDCv3_K>q_-i9B+nUj8O&OR-;=j_2f z=Q-SS-bkPCl&{w&f4DHbyw4Qe`z*m@o{x||WjObXFI+avr}2WO0_QrgzG}|;9k{PU z9q#!L;GX~ZA7=B7edZ)sxZ7|a_XzIma12kwFuD$hKbegi>*MF6pb_bvOHY3 zD%P!N-h?l}xo)ga%~`($_jN17J?94eg%C?$Z|}gF^8$Hl;;#%JGn-APunSMa`|5jA zAJ54(`qbf^7yCENS>J^FygG27*BShUFs9Bc`RM@R;=GcVX7A6KbKD}FIa$A8&iX~T z=PbcJ=PKNDcHqoeLC!OCj@yGXC+jcFS$_%loCE7$$GErV>~nAZSwD7~tt<1eejM)O zCU9S$8Mv>{jr7rf?|1oUvTaqf2^Jsmx`Z=7>#xL)Xb>^|pPdt~s z9e>^WH`&|K^}G$>Tz{UQTk#}(OneNlf1CZs&)c|o5=!DDUK4O%{{+r)dEREsxsUVG zU(eg3IqOrnk6W_-)3G32tLE%ew*IW&G-v%5+{fJ$*YkFi;{&+w`z_qh+u~U^k2vo0 zvhOuG*LfN9-8J8Y*Wuh>);G*q{}}G`ZNWYN3EcBP`nfDWb2gACG3U6maOPxv(VX@3 zaL-wSd(Kt3=iG)fXA3#2=6!e#&YY~@GiUui+;jHep7R{;IUoJI(Ro;SQTBHHbp{^u z$NN$(JmNJAPs7{l>(b|?(q}`wD(7v>`X`}Zyeif|8EW|Vaiu;!uP5In`;EtNt{eRb z9@pn>lBZ*R67=a>ANqMtpMiK&<~8>3vs`i9X&HAF&h^~O$_i`nG`t_zlYSuealZWi zUemnr&fz!1)q-;!Sl>2heFyI6=Tcn1?z@8XJkMg?Zmd83PWm)teWvhQX-zelMPvcpbpw`|4e(kDnLH?-HvEg(p(4-h;>WdGPo3#PvQl zfct!J;XdEaFARr&$M+wmC$jguaGrm95B^jham{n|i&?)|uYZs4y!UY2JFG(=&T;A2 za36OduH#Pp(!>52=syi-e|iG<{1)zQ_pvOl{kN=t1O2PkpI(zb z+J8@6`!~h)bwUU3=jROW=V$4^JY45ZoS$X$Bls$u>(BaibJmyPabNWNuIc$`-1vN~ zXYUr4;AwbYefPg+1-w5mAkP7udFa>hIPM2$A3FSX{+F|N+y^;6{ok^Bj$3}$?EOdP zobN20d01aGXZ<|f*XPdqr)bGB zpQiO^{h>MQPvJi9t@UqU+`{F<=NEkz?tM1I^*&sK--mYk^D4XW7vS-=MZ8+lNB_Qm zKc~-CPM_r0vVJ^2EzGM3=Q*J-!sER3>#~aUnaNrXf2~R%^_`qPE%<%-XkCXBxUWMW z9`nbw;s3Yp%6u3m{BjMC^V0eobJh>walWVW_0H;l&nn`$@$=4R_HJPfo|tt>v;wD^_=`4VX$y+mZCqb!&<1x^={VLcYG3?1#a^ z<;3-|f9;IU5<9-Qw9+~<1=k9~B$XW}~FzW7UYzW*~c z2-j2dh5PxLfpfn6`gazdhF)>L^fEl={3#i?Dy})}aL;o9_dNUmD>M#Q%oD%P>f!!Y zcYo(t6}~2g$Mw|uraS5n;W59yUhTm>=Q-SS7Ovvx+4oiS`;b%O&&&E0;aq3lf9Bz7 z=%wdsTl(n#cWGDr?zxyCyE@`}zv{uco&&7sx%uR~WqtZ^t|#lS%~^i~_w_9Nde)EQ zrszLr&OVcHj?4OKbJjnC`?y8xU&gre=IoPNf7UOXvwj8cheKBvsC*a%{)=!zUej4uUlZfl0JSJ$)WE;W5w8$U5AM>-WtjeluI2Sg+5oqWHMsf_!{aIf#XZKCj8&dUpOPxaXgR$37j& zU&`sTn$u?!&iU3buPt-t--dI(tlu$beGTsOZNi`0FSyTl0B6o7a^9MA+&egPvcB-! z**eo%KL+=l3EXqez&+=x^!WtYmkseV@$DSn71#Ye5!dtIgL}?%xaYi;K0haUCVwYe zpO=OI=+7slaPPka_x^Rb@7IAj*S`VhzHq;q=Bz)2$DH~)tpoR*XK>GXbd$|D=G4y% z$MDp=^t)Mo9QVO}JI8n7v40XCmGFqy9z4!B2@m?d^wH1z2jcp9zbXCW>)S4#7suvY zw+@`^%=(@=>#yOy&V~OS1`C(3^BCOM`3%nU&_~XmImhk8nUnR`=ByvUJ?G@_Jv-+V z+;h&tnR9$H`}jF?jyn%$PS!7)vp$7;&NAHBa|7-<52Vj8$n*DD{6C5J;hfhp=5=Mh z2fu-HUaY@0XZ;=A=T#VF>la<`R|(wbI|KLmuEUwXGnw@*n_t5>;l)rEpBJpJn6rKx z?)mF*&v^j%oE_=&i?aR~;%^YY5`T?+y;gjCHa{PC9`55V!Q=Xj4L|f#hQBVui{@o` zoUi`e(Wdl?_rqFv#A^$lhPTxZrB6@h)rWijE4b%h`~5gd_Vu#|FFxY65BKwSApK*X z*>@k77aHbA_;Zk^^w;_$bJicjecTS*_v;Mq`&GNma>YJBCFi#Ee=_H~m5_hcoIi)T z4(GbDe#4ygn{dxxgM0p6xaWT&eRSV%;mps!2XSX!!@LTAn9Y~@>Eq_?GXeMf3EcC~ zz&-yeJm$=v?^%wur##!7b@TpY=4JTk{*d+Ac*?W-O>_1cz~j91{{yx1M_Iq<`t!7F z;w$p}-4=g8@ndoQd6hPt`_;z2oSI+2yKwFo>wD&`KZpB%4dA|Cw{YLDvAb*?M*Eem z=eYS9_GJP-+Lx?;(wy}>a9`&=ab4$2ab3>=+}HEgoamL4{=chdDa|@62()-Co3?44`B*zzW zJcY;kzA`*EW7BXg!PD@z`eW&%``Z%NuU~p_U;lG>{Ez; zRiTj0xA>>e9(Nw@R=GXIl3+MVw zVtoqFW%YFay@M$@*Nycv=B%HC$8q)h4=dJx7UP!8*=NoAv%YN3`VF{`TZj8PAHaQ` z+tTO3_y1q?aDA%p7A6?3F>`*Ob^^|IWBrsl>!;zKKM~jS(}erH4&gqp-4{R1U&8v= z&G~cqhj8X+eaoEnZMf&}!9C|W+;d)zJv-;MImf++d(MfMWPRwYpMrbNBHVM%!#(FR zJU(CI)4diOhHC{L$5k)EV_9GB4>h=ty9@VmFW%|l`V`+Ijv9KJ^Xq~eIM;#ox8|(B zhx_`BjXxZ>f%7wA-i1%YIWFrHbJowoecXBLe~12y=Ipa<{aIf!XZ;%7$DMd-Hs9#_ z_YIH4^>zD`951{q>*M=72KW6vhR1Ui@AK2)5w8|J4R5QbFCXR9Je3@OEUxp~!|Q9G z@65YD-1jw{w>fkEJDl@y?mO!j%~`($_w_G}>%8hYKK_c)I_SKb;@T&Dk7w`865RJC zof`H3=h>TaTMB*rVSuk&?Ukc?9k-R^=kU1i@pTKIFPG*#x7Tp4GwTQDtiOZ%I*;K+ zImhMmWx||&rr{iy^@%y_XW>3>$@|B}4A-i765fxGc&&T?j0+p$NwD~c*CyP@t;7BK zcmVf(KY7n=AGtnNoc~jE-aor=t`F;b=B&Sfd(M^j8l4|K&*yOF>1NX{T#6^b;v-&H zaOPqCjd&93;v-(SaL+UL-VfJ-=WW8A`#uflxU5giSw9Q+ap$f79@c-+oa?z{{aL?a z&iYljkGo<0dCs@YnZIiNSzj|}{T|%MZHnuCqnG2QN7=skd0vJ4dESJ_^P`_fw&1Dx z4m{@kb$Q*=g!{OMa3A*s9>lnM(6Dh z<-9!>{{ivB`)BWPzAc=eF>~ghfODN$KV{DPX}HffvHs&&=NWVMnX~?^pEqay0^G+< ztv~xLnX}J|^=JL6IqTQpK5p6iv(JV(`)pZ%)^D4$z6$qoYu5i7>%42uKKs_6^#|sx zZ@_)rruAq3Lv!{yw*IU?F=u@n?&J30em_5lKXpI!R`pX3pp1czh8Zt_^d3-rt7v`N;YmbJo}3zHW8v&(~K6;z`I6 zAMt8hf7Ty~C!sDr;&lx7aXZpKPL==u%$Yg!pG$wOzcgokAMWGciRDP?*MZE;) zzAR&3R?Ru?2AuoC`Ym(TSKywrX8mU|?yfoe99VzWKQ?E56Yk?4S%1FnJvQg-z*Fnb z`ZIIZci}#6&-(NA=eariTv>nC-9xcwhZo>c0)O@jn;vIIjBa+$d-CwOAakIXLU-3-Flp zyCrAI`fLungzsNjANscR`BCY!Cw=0)D(JHhPs97_J*gkwdR~%!z`1z>@5AG~wEo(h z^*3-oC%4i+u3I@9ws0qX)C(W_aGg`skHNXl^a-mkp?=cp>2vUyQ`d7<`o#J6OCSAwu_dn0i*51Qto88MI^3Tx2XKGB9K-o}a2&l_@HD(1qtmaXKIWf%Rrn=b z*KqDHeE^T^qw~7AJ}LU}524wIK88P>_C6Eh`g7L_+}B|S?(0yMK7TCFi@Lb}eWF`9 zKOa?)fBbdX2Qxo?67KmQiR=Cr;hujU?)g{YF^}Hg*5EOZdKDh?=zZ^4`ow*2hDW?w z@HD)w-j;g3zn#M4xa!lzY<=RmdLLVd$NaIL_q{Tledt>`eRidfKEL*)k9te`=<~Oi z=b?Fn=f%okLIM;#Rl=?WY0`9km=De?-N*}F1 zGiQAl9&_r?QS_vL%vlbPc%4fh^-HTyht=V}X!Z1Kt1qGc#_H+G>qqBG_c6`!a*kKv zydQEOx8X6L?qgl*^;{jm<9?|(;J)uq#Ah+r_@6%9?*mtGzYioIK3a!YOP>_(eU{+f zXHEK4vX;YcWjNP|>%Rd{LseWK`j*tkb!g!}S%GtX=v8=JpSR2RXKLbak~~eg&+8EG z^E!dY{KNA<9o`668_qoZ1MgF~=jp?J+$*?`dk2r>X7^$IJRUrbt3ENGO_Dj+kaHT& zob*TVm{b2=(u}ySTS@%aWIfC9r}h_~hW@(0dr}|Qvx}VjaOR}f;l7>?>ofVDp;@>d zoAdwEbY%Tm-!f&g51G&~Ka zz7CK1|3vm{OI%-{)Wm;Go<|*V{dv3#c-;3SJSyQ4uSi&iT?W;c>oSD)YUPKJosLgh#xt;c0kVz4VdU;fQ^7e=Bg`-)*?>Z&mu} z{?^2Gf9uje&UX#-Juol4Q~1qrHQ`(b)*qR({umzT_2Bsn_kBNu`@UaEpSNa9HOw=B z$MuQ%dELU9lYS?CZe_m;3t7|HC!U8Re83nyHJ_0BIBo;$Hfi30Pr;do^^eS1KM#-V z_8pRQQC!zySzPC}3g`NCk!Q`k@Lpk{aIM3cll2?stlxoq&KBJF_XO_ydm(*(NcQ(i zT<1Fw*ZGe9#nJQVdFhkFJ zPS*F$SwDb#&O33lV}d=1W=tS_6hz5@50RdLO^E3P@~aOUhH&w+XRzS(*<;LOSTra9|daL?Hm*PLhK znzILI&NbvYH?P4j;LOSTzB%g$aL;)st~tlv`0VpJ0gpN3=hJq!Y=ud9YCbLX@$+mQ z`5&2I!xK2?#rj!u)-S+)Ua7dwYeihwe-+Mobwbv7t-;gqcARe~JmOWB`Z%vUZZ z3itI~7T27s;+nGzXU-z>Y?xQzn{ei2eZ`#hHMr;86W5#v;+nGwXU-b(9GZ9FM{wq3 zeaoEn9k}Q0ifhhuam{%Nk2&Lgpc@|X>ci9Uw)(Zy$NR%Y5`GESjd}Y1nGfKc7whlL zSwH>>&kaA&=QSy=^Liw%^O}Wo{Y%I*XFmA>S`eB2Z^4<9 z^=)(3cj2D1C$2d!#Wm*@oH>_~=i0mmzkxF+>j&nnAN#~-pU)J2AEu8VK^iW^68r@? zzrVL5eRN)X@R(m;H}0GB^>bbN=sGm4zBNn}{@fOxqCdSU^~3LLVSNtGCqFQ2bOh(R zHBf(S&iW4A_qQvq>u@fv^SXpHeSHF3?k0cXx0 z@@$&l!MEVd$@*<`*6+eS=f1e+Y=~>lCOi$>9q;G7Zy&*#e;hwtc5GgPx8Tgr`nEai zyKv9n6W9Eg;+p>&&YYXbb7S6z58%wn`a5&hk1s#_+)j#X&PU>!a~95=1LT=A-~8b0 zc~^upC+io?S-%YT^(={N&UJCkxd~^^D)MZZAHged=45@!udbZ%q$@;cA>$`Bz*%Q~Cm*Sf98qS>4$a7;}h7aJ($@)8U){lQm&iNGA zoR7pc=PaB#E66ivK7beD%*px%bJj1zUlz7QzfV;X*PQF(nsXD*oQ1!T?eCU(30{FS zC+n-`tlxus&bqkfd@QaxkKoL?i9E;Vd+-*VIa%K}XMGp$IeX%o^HN-MUc;HQfjl?n z3v<~z58%wn`a5&hkAG^;`4rcjkHj_SESxz@$TMf&gcsq=$@&Fz)-S_-Jxk)6b6s3> zZo-+fgFIX2lOLL`X9dojtgo80eh=*AX8vAE_uf-`4=Jjdoo@D`joS>HBieHZRI zd*Yh&Qe1Oh!u}H65Z9cC;+nGsXU;w3IWb?3!NS#sGbigi=B)3*J?DkE=DZTuoC7#>t|8B@`Sgcn zIq%@i$@;=dc5dmcpM-nPX>rXtBd$4%aORvvo_X_Y_yU}HSf84+z6AH2YvP)7LtJxK z;LLf4Jlp2&SP-r%oHw9p| zc_FSjuf#Ry0M48xM_gV*59$@)EW);Hjuvnj4QkHs}-8_t|%o4G*voEeW zZ^Sj{9h^C@k>}og?+w{`DBy>-nUnS7=B%HFd(K2$bIyrt&ILGgHj!u1ys(hvOySJQ z`ek$0ufaWMSzL2&iEGX(oH?hFXUDt_ufds<^?T;5Z@@igQ(SW%i)+p{oH>t>=hVCh z@4%Up^<8t;U%)+QUtDwEh-=O}ICJ)q=ia>a7jZsI5AUC>A2(1^pR6A@XZ^MxaTa3YtAik%~^#rXNo*K<_&la&YY~@GiQAR z?m3&{n)6s(bGG5k*+QOE^YM?**0Td=PS$tLS$_fdoPBZ4c_Xel@8HatAkV#d1zvdb zbHl*Q$@+0~)=$GdXCkgS=fpMV0-QPbkY~}n2T$S5$@*n;)~~@mXIWfxZi#EoDx5j5 zk!Q!e_zBs**Wk>_`aN^jH{hPLDXuw>#WiOe&Ya80b86m%ci_y)`mQYr>&MMmKMnVsiMZyR6W5#zaORvwo<;L2JcV;TS-)(~ z`Zc)cEQ@Q-Epg3Rg)?Uzd3MY%;59gNvVPB;^$ob^Y>I2nV{y&dhBM~?c}~rjKN0s& zICHYTYtH%$xaaJPYt9>S&3OlB&Nbw@H*dfTpY!m1vVPp0_0w?AnTTu7IdRRo0B6n? z@+_K_`aN^jH{hPLDXuw> z#WiOe&YV@`IW_OVJ8^w)mH_4=BNzlfDj*IloHQr(u2WFyBM#LqC>2 zI^S#Y_m%!*U+^&JG;&UuCvno@nuaq!>l1U<&%)!p^xxZ@xBeHH*Md3wELnfnub8ub z74G9!;J)wMaNqYP-1q$uo`!kpdFV?0^Wpc_u%1ugTsL|T9&_rx?|)&oFVVkAo)=GY z{P9~x_1`S@$8bJh##chaaJAsfLvKqT&2uIG;QV~?v&Wr+`?%9^A2*RcI_{G7sbf8t ztq*-Ar_ZMN2gv!~v;GTMpMC33Kaf6}^U(VAk@Lv<&|5iuF2!H+;%u+tuhV}yTW79k z8~q=d^Zd`jxz4O#G-v%f+@CLXxIbSG;QoB+!u|R31fGVu==0@H>f`gJjP<{VGe5ns zF*&%>EH`}C|o>o3e%e+l<-2iCuf`QDnd&)8qd_L1{t{e(H|C*eMB0_XE3 z`LuAj!ZqWL&uc~RkNO37)Gxw)+!EZMFRO5WzSQ7+zHDYO3%l?%ydQ_8pTXm}f08X# zcq{z7sp5Cy*W&u`w-^6vRuuc_zwf;ak9m^tsDwwnR^V}8lJKCHq>ujl-fQCc(XjAQ z;p3!#e7-Nd=a36E>94*kee~aN-xq&_%(n^m^*@CB`uE_z{^#&C#MAYk+8nK$uK$d< zuK$9#u76Ej*S`Vx^?wZa^>0caUH>C-UH=p5AJ;j>IX{#B>Rsuh>)#XC^&h}}{cqvE z{evf&tvKHGjbk!@VK6FUTc`|1w5{&dSCjyO!6dOHp;25e^R*T zT!MSf4e6sf8{+RG4pGi2!W&N}{>mR{=+>-du%6X{fcnj|Pcmnr*T*epMaol&6b>0wvUdG)O z*F1%pb zV;;SK4#f5TIrf#=`owy@f0o4c{<)Lmb$HB~ghwSj;&lLz>zRZHy&-+{zSrAHmiU|WoJjxpd58P{MEa{=N*_HB*WL&Fe&>DQ_tHnt!`N4i)>F@I0)Oh9z@IuN z(&ydvoaFS`&gruUkL#a(&+jwBTZO_tJg&d`W2ukpR>Je^Q0mo>;PL!C*e`M2ueS7$ z=d%7viAdHPP_1LO785AOr4A2(Os>dIRgpUlL zr^LTT`ZvY#E%sskt+?h{#-hhO>IdS#EB(*JHBY&k<&5hY&-no7bHjY{O~W{a8l2~! z^?T;5--rA8Y+C;!`X8FJPsjSRzH83f$3_O}LMHB>iKbCdNG$PlCrsyxP)V>pS8}sEdzy zoxy$FOYt{6m(|8!Z^iZV&g5Uqiv0dI1^4?~86L;|F6m!^$Ni1Rq4SFDP}JaYAJuoI z&reIAYw=GOzuU>)iR0=yOujL5&p!kA{8f1Dvnl8HSp2QxPsG>7FU1ceXW_4pa(bJ$U|DL$!JQUac?ZAB<&fvZdT{u5aC1E|{^#q=Vx8vujBs}7E4Ug+KE%$-R zzmZMG$DM-vxbyJX=T6pPMO@cyTYOyBb5~sJTX4^F0{1)@aIV8eoNTx*;c0j~t^<9% zmW7V_-&@w92={U4;XdvPocF_P+#goqyzkN1;c;C3^VTi#_mw9d!92m*P#-| ziB}h%hPUH7&~KzZ-mmzAbpU66`Yk->*FR6$`KHl&;?3BtF!jwN*VipO;=29^;`)8F zR*s*+x&Hk8(iKlaj`)bzIh^xi{iS#k>f$3_eR!O&zV5x2{(7Ik5l_O$#7DgDq`%e| zz9n0qm?yy_{HHJm_i-oSoG(8QPKs-vY3U!wWql&9^)qlEH--B-T!Q;KEK47KUe|N_ z9OU%r!Fitf=NjkmG|VZUXL@lrTTiY}QVPErt_3*vou0zud^P8)xIRy}#i!*y))#+Q z@jG$tKlZIz&N%K%rG7KVo8tO?iJrLjAOD-9{`&bPf%`trzq%dO z$9a8#-pAlR?jhXAJ%Pt@_3QUD^ZnOlU+;I}F;A?g_sk20tbY94M(fka-V7gAC@hNq zE%BN--W=9n;2o~dGS=r7&h??+OCMdI>fR`i?pGb|>vjP5b?d@o9{s%k1fH7r;c>sP zRN<}g^_lp-tizr3kN1-@=6et4eCY)&V(dR7=V2Vqb*rM!6r6qNOVUU4l*B(;a;}Tt z%kyhX{5i?9BmQFXUGa~S{tfXLr2lb__r(9Q)L+24UzND{;ktyU;cfkVo&N37Ir)0& zvnKxA;v3?6uD0M@|2o#c0_XbEx24a6&->!~^++B5)VYQGxjmIWdQQ&ZzCK;Jug|sA z$MboCc@5y47yT9<&!^67{O^p`S@*XH=eqUKe;&^M^b*|HVHNJ{uwniC=)Y05Ar ze%0YV?g8A#J%Mvx*BJK{&Uw*$@Hno1e!Lae`&$!FTK30nxNvA*dU)Y^{M_;GiitG8G{Pt{reSN0jzCJT>=1;OuBZWCQbJ7>#F%SL;3t;ySN7+~;)w_jw({eO||KpVuke=hd-3%ztKm=udL`+==VFCch(Rzu-QvB0T2& zV7Z?!iqDF#z_|_!*xwSI>p)+XJ|86a+p@TRUA%4mtLR^~{`4K`qxYp<@dx)?>%WZt z2j+W|!(&)z!Z|P2ADOfM81B!n4&2Y%8Qk~f79Q7GU$@`EQ}g-n9NmZYesTckel;-P z$8gSz-jqJNo*i+$&-cXjb#-4{Ux(j{KRCDboO28J^;v<(b=Gk!IeoTs`s_=epUEPG zj)lUZ_?(>oUQYk>ocxQ|_9UPbFajsElI?6YY7S-)h?`enF}TZTWio^W5! zEqGj?_pEVCZg&SiQ=HPLEv+t8+K5x!G2XN1SD6ZdkJrRF{-cR5@-*fm=^OZgyDf6BD zzO1SDnSy(t8F(BbO zIqOg1KJK~ouVUOwbN0Ei{;VIEv;G$D<4*iN*%#Tz1n%c#2JYviDt%66-y7n3eh$U; z{9KFcd6@kBSva1D>CXxq7p^IDew~uQc^+6lYtH&PxUWx1{A1mGbN0Ei{;VIEv;G$D;}(A4;d#5pe8HBtuf#Ra zt+=kky9Xz7F$nK3^I*KP5Q#i@pVq`=Z}x*cbm*xxYOY*LCQLYyJV;^WVZf z|3>rK`?3X(^NO!Gu7|4`zAl8P=DX78%0Ny zdakWzeYW9TPkL4Q{F3a;uK3rAABgMor7NyE`*6;;l*K7r!PD@5oG*RsM@IA2bxz>E z&NFad=T$hz<@sNOb6on)(P&(q*V#YLoa?!X^?YL9#dER;=Q^|g!kqP&aQ{5A_M@Xb zdJYHTdY+SiGOAZE!+qU0;J$8q@HpS>>(KBIN*_I+N8)di{vEiV&oj86&kK0W6Ytw=!_^Nz z=KxR5`|$XDS(fMNWGf5d<4(bS+!c82qpyco;as1|H;007t;4xK^bP5wf8M=qeNyzP znJ4gl>rbznvrhx=_l=IY{&`kUTwk~M;hb*?d9L7`Fa28j=y|vk*Zc6;KOdcQef^)R z%lRq8eIGaAzK;z!^H-3+31@zK2Oih$UdFu;|73aIP5t;Nzt%6qd2UO?Qxg7t19%$V z*ViE>seeBFUJW@{;mk>2hx`6+h<~b_|1I%1$-HWCU(a2*ujc{W=hcAwybj?p=P$~* zC(Wb^U`f#7u72M}_2j{$!kSSjG@HD)wualSl#c1F4`&VW0 zPm}fE71!69`*4oSb5e(MT>4|_qw9Gred2l+K0E#r{{1C5*OT6sKDwSAab3@@_#3m< z!(aRGr`8$n>wGJHR%CsWlWaY`&kWrAY{TQZO6B?ZSbSW(mE&hQKJ^o${k_ZH9L{$Z z9``G*^DNeR4$gI^7p0G`^P;$(hZS+nzb^isGOtZ>t>4M z=Un`gB>zBM>nDG5wEiC?^^e47#fxx1Kl5-uKkL%xBc;!lxbAxk&gW@mcpAc=v%}Ny ze!M@>pGbW?CncPd9-QZdeh&Bhd0+euat;eWmA&Kh9fSLP=isrw&UZmv=UapOe0Sk# z=%e#}EcH6yCfw(H2>1E6#C5(sxX~*kIv7g?C*y7t7JX5;e1}#uwOMe^V9dG z&)cN`WAT@Xx5V#c+yR{9)-moKoa55(rH|fErvK%$=Q}H|>zTrRJ(u9Vo*QuHT)@vo zY{8k6z7LQ4`(CmRkHvKzZmoZt>tOxq_tHn#VeDUJ>%g3yFn+uy;mp|?YWTZs@R(Eg zv1om!KPUTud2{|8>7w;#{gOHBm*H_-{qw|gL!MgpwIqL@Zbz6qV zoS!56Sb}psxelx5{Chxaa9_7|bJmyPaa^6(vH0_H9tLnf54Uii*Tm0c9~}Fy$-Jh; zb)8Fa@4pK7{*9j<_5WPy-x9A%{z7L|uYdkhgY&+W;=a0TUV_)*ykD`tVb1!;@VE|o zUp=+{HT3V8vrpIhv%Y7}`g6FCdnK;-x5B^9*2mX>4DRcnz+?X}ko8aDaXt0**b+Q7 zU(e~YCH^7Oza{$)b^?F7z!p|_=veqQcbpDMnQcW%zlkA3UU`fGF6-@twS3;!l( zo#DRDGjN{IHge9wIbZr5JdUgLofp@yqf2n#_f@#(*_A$jF3+#J_?>tM&iuX44Z*^7 zX3n20=)pNJ)?b*j{u1u%JdpnJ9F~TohJSYgo`(0;@1#DSt83&O|F_v>n1?LocU+1KkJL;te=Pbd`s}B_7VQnK1v_`{^5oApUOT?o@MXEalc5Ok4cV~ z;Bg(2@Ti1GyjJ0HJ(KXDuSp;MIq24Ty4B#^#}exI%vrw=_jPW< zeVq^CzRnXrH(EDc=M8aP=cc%>b1TPt;(weC6;?I;9o2s~8n+-{?<~N1KKDLrA5y11T)zVwghp@RLrGUxsd;G7rh z@61_$5BGUZ{`+j5xt>joJ7vy3kKi1a^)u$IpN0FlMeEZKda{Kvu^!azhTb$O}LL+vHlAfciWtOYSy3id*-a)hx@pP)_)V@9+|UG%lfmv zZO-~rxR2X|`+epd?)RCg?&$gc8o3WVg7bXdA%9|i0iT8Qe6qf1&iZ9|%>RpWpV<(9 zgLp+;Unf-IF{i$6+<~X&P3fcay%X2hKePW~v_9(d;`(~H1o!n{h5Pz9q|g79^>4!C zyt1DU$^Hj9hw!-0>TT)s|4W}I;-4n#*%$wG@mukd`1sFfO?e(>*F%7CO~SeF^eK4U zU;XphqWBlf>wyL7ABQczJ$4WO9)X)llg9m>-W{S#d|WZJvir8#=Q37oEN<= zef0B7LtH<+kf{W^3R&hyWI2WADHhCcCmLEn`6`1!7m z`BvbZFTDzndGycy_rzZ$Ime!i&PhC<&5z5zuQG1V?(6m##kK#OIs2@@E zW9g&M(-Z5nmz5XV)`xy6eKb$y7f1WDA@|P%as6|#rnsJyQ#j|vbJBsQA)lU;E9s-> zWUM#JqdBMGJSTV9$7wkCi~dOZ=;zsv^|?l$Gk2Vap7m$_g*)mm;eH+l)_?X3vJJbn zKJ+{3qxq+PX|z82^QblP?~>>H;~a10_*stk#P#*b0Dd2)^V%%haALP`|9sT?FQfcF zAUQkY|5?0tp4IbQm9k|k?84LVemqz7J*khMkIGo*eRwgL`T;!dm#%aB{~P7hbx!~5 zC{OIu4Uc#&i6`Ox_=wjEoa3^7RXhoG@e!{zxSyZ0^pE4VUpg!=Y?xn%;mfbJkD8J!b;vxOeD3W6nPF)}Qr@ z=B!WQK5i54=l>Ay=l>KQbH;PapL_4XQ}c6p9QRA){ydOAaew!CKQW)pUet#lBzw5d ztRFXL{RG_So4|d(GjN~pB3?|#KKK!*@K$(UivOTI-z(yJA1MDymOu7+AE{sd)sgG@ zEW>#o_`KT?PeQNwh}RaJ=aBW=;z_8Bk9bw#zCJbSug|+(b3X6t(qHQv=B$4V_i@|e zx(?^!dLJuaX6wdtSjwhV*np?ueZ8-4N`1`Pz2q+;Id6TI(Pz>6(3hmo zm&$qQSf3;G=~^FpFQ?C~_35L}`2Whz8|Ouzfcw0z;9Q>)`dnKd`b|!si>qv0_F?`@ zIP=hN;4zP`&%L-lPt#w2*nb&0SK#bVFTuV4_-~A!k9wb<&GBV%{e0blbG~ilIWy8 zJ_)}cuQRJph8q6=ev`PKtE#xxpX7K?Tt9E# zh-;rmzco5ndTwWOJcau{F2Q{tx22E%dGUUZx5U3r*5`@1uFoZ$`%WX~ zcg@*n-}2 zdq73;Uz7c+;`%!6vG^OaBQ^ZB3Fmn(;r9;V zX?Q=LXL?Ke;9H@?kLXCB`1*l=FX;@7)DDlRmnS=Wx!8`*fST`@hH{e_!)^C}!z5@4sZ;I>Z(^GMsSK;@v z(9Bsxo-uQdI|*k_)=!(W{t?`BZi?&Q$JrCte;=SNuIqd*uJt$K+CLeL_Di1^DcsN1 z65P+#CY|JaBB|D9Ak2_7HuT9*D=UlLD3U3|oA74GA%i|g~H0{7?3Hr$^t zbARyMaGcm*&u3fwtL6On;9O^(lXLMT^ooyoUBbD)tiKXZLS1~s>l*I!9Y}xOuUqjX ze0+Sw>t6b6{n%|b-CQOiO>=-$Y#NXW%~WvbgSV8SeYL z0r&mgg~$By`$#4Hd$W7+)Vu|cdA4QWr~Xg2ZqfD6{b%6sSf6qz2-hr}``#@NxiBYv z^!s2-)~E26tbWD%&?`B8>f-w6_}v`u!08oA&+WGK(fL;4z7BiR=WFEo)r9-LAHsd#Pv9|sd|tQked9Jfj;nqOkL&!kGVYmp zRlE=PJXdhfQ^X&Z#Qx9A`tOVHNdL!hu0KEjHpP?BD?Z|N4ClVE{zN18g{Nv}c-w(gOHhXjU{uJEzaTy-_Y{>KONL+tz`9vHMhW)#6-XAJM4gcR# zcpBc1&lmc=^wFR1ns^}#9rI}aVvcW#YtEXu_OFX;|F-xy%DL^sd2ZL<5`u;68qV`c zzmY!rbu|C5)7NJVe;ApDp1M9WaE?2Rap&M1mtKU&b<=Uz#UHGX^{=A;9-RH@`*81n zB>skM>q3I?=bv!DpPa${9P%G^@_paE&zeU67&)J9@mI;X7vhUjej_Xg0drDeH)28vWXYJds_4zR(31rAJr z0!0dLpo2vV1gKD@I2q_bXDCCMsZgXsgbG!v1guc7V8DV^do^Okf)%0`Em-f3*DCc| zHC`(eIckuK)qAe~_nYr|&wldE*=rpZvetjyHG8eyB)>j+zW00I@B8-7PMQ{pzmfDC z#NR;ti12#^{A&g)wX+~VZFJ2=kJUlRRB@;uvmdP06YpZ<48z2Fu< z`{%(e{_hG;HJe<&=-odeZgTgJ$%p$jMf|DcUnX9maaaNOdX+oTB=0YP$H`+pzORwb zpVN5QCC=mjFoW0b5`wcl@I3Ml-&j1h&J4dK`H^fr_)w1JlX)+=`S3bFNSwz*4DSBD z@E;X_=VRo;b zmbXEQbBH*vOGR*9mnOhRe$6phF*KY`S{U*4!+aUiaDQ!8FH@8bZ%=gG=_D&EdH%;QaZnwbwxG;%v zek|PMya?{&$MvVeU4I6y{mS9ZX>YfHc6)@oPafRcb$!2Z*PjR1b_?LT9u9%)dN@Zu zOSJy9Gki`ne9nJMD2Da7a~(1tY7>E5znBkzTl_yx?H0i`{t0l6zXa~>`v1|J0rz&D zZ-HC8Z=-hG;M(pfxVD?am$qxWz2Mqz30&K)fNQ&p;M#5#JZ<->okXvKr|ky5aXWoD z=+$qh54;U-asCwLr;rcz)i{U1HO>iejdKcI<1F1yAL5z0oj&k2aEtRND9*mSr{mC$ zYt@%_(v#~K-T*%jZt<{wK)CBKfLptKTpK6Oc`Ji!-sZqHZ=2-vSz6y3#8;`mZSXYD z;q&CD!YlY*!87nQ|3RO-M`+Bs>mzXMFUK=Poa31w{-lul&d+J$e0;BfYkn5NH9u?Q z^B&4WBg1Dm!{?ZM-b+5G#OqffidFAmx0IqRPfLq>fCZ7`VLE`hoIi5PW)z`-7 z8OH6FaQ__j4!DnJ*Y65<{T{fE=N7ouor7tD1^{ypb4(|IRMxE9Fx!csg4(kUm*Ydy~6|b?*mu=3b^KT znK;jvMuz`xhW{z~yn^a7h!5LoyF+>LSeqCPx*Y#ltJWhOgeHa(L zuLDKVJFkIje%8TnmmhG8|HCx?+ZjHm89qbz3-dzrFixEFPzLur6qELCn*)!N`<4gi z3#7N>!r*lBBiRtrYR zS{Xja89q6jY*{?3l>dI>?0r${_^$M2wca> z0Jx5mBKdG0Y8gK389sX%K7$WV{VBNCeRv>^^IDomW8fZ-kE?OwQ8J!vw`~I4<8l2I@hH*R zZd(al<0+HB9oPKx0CU8ngxhXgh5T8+L_A7#w%fK0uI;Xnzxnv*2Udwk3Af$0b@FHZ zCh;iI*=}1MT-)6yfAjIr8}AU05^lR~yX4RMed1A~v)#5PxVGB{*YSS}uH%38A?Y|- zxh8nq&-sT2ZsVlu`~*A}ULn23pS#h1Bz9c~iOzQ0s^Hr0E^$6CG{HR&KF$w_M~ScPwjF_c9$bG+JW6!7 z+jau3@wCaG=jkc&D0#l^ww;kb>vIna^|g2+?8!~82VC2Yz;%8Nfb0BPC!ZM_=Lf`j z++HNk=M}k!hbQ}dEL)Jt)&m|V_idg!9|X7f`Txtr#D9&(bCLMX6lW=eFA?W{)xbT@ zV$!~C>)>&6pVyNO(py~yv2JXETV0s%fLp(K-8drNx+eK0w)`VPXH3s=juGel&k*PT z>#<1uX3Eb7@pn_ZP2%q*engztu~Xu#@4-bGi=W#)Pn`QTN}T8EIJnlO2p%W?T$c&b zTmFlv%M`fR#rZV2)@7DBujdtTokxq{I*(StE&iTl_xF9)ZpS;n%+j#9peh}Q^e+9)KgKJ$z!L=^4tN9y$YMm$-d3e5pf|^Am83hxNzAS$_hq^QcY!<}(QYQ{wE?^VpC#Z`bvC z;;ioj*LEXt>#ynkSU5oZ1qm-Bo`U$hewaAxN5Hk+B5_;_>aUjq#$H{%mf0XRDEs)P7AK$^XUt8eX zuOo18w>Q}5THtZ=*xGeI^Tag%mxa5XXEca&zlOi_%K9?#8_8z}+{eQq8g2;p`tF1K zcyRrJaMvG#>v-sWQW__pCr99#&jE1FXAExfhx6V}dUB)S7ANyD()0Wp2agjy^D^np z$LlgjdgdG8*53w=+Y{n^ev%srdC>m$fNOt;!Ob5p0h4>ld#S{^-ByPGafbhChEMe5 zE5|tiu5nI)>o}hTkCT{roL8Qbj)%w5{5m22Ny_KgccpqB{}aU7XO;LT$Y+l@&#yD$ zJU;XBmGjUCu6dXQw|c#o+MOlN*X1h2c|C7}>o_?8*LHJHP4mM(qr^F$3b^_&f~)^3 z`TRchtC8Weo8faQ!>8|QY5bg@61c`W4X$x6lMf%?*E9G|20zH)7c+Rz)6@95-2%AA zKLoDvkAwR>^7DZrxX&Z!ZEzcJ`&5^n(KH?&4^`st2$JNP$=a2{Ti_c1F}TKmMn0dV zdEJ8#&0Cy*L~$0t)qed@pn+{lOP z+ae!3U#j8Yb1b|9ei7V{r>;L0?)o!ui=VG!q3A^IcF-d;x-Hr$UeerjFll(tR^=;iwAAH)R=XeIk z!jmmdu5U4e_dYY#bGt?2{CX$)-c--8*M^Dne4NbSbHw@ca&6-5AB~50b({=<>o}PJ zxBButngox9&pa#b7su24yui)J=EWgick~JO&vOod`@C@dkZ{+Jf$O{|5$Aj^X7JhP zcgNZPvLx7KD+~8_7r;GE*Dnfp{SvswIq-c~&Ra8smtSyY{Q(hd8 zkAIx}SwAJ*^(Am^cSigt?-}Bp74ANB;_vze;jXWMYr9qAJf24<)4K3_wF>U@*I&P^ zfyYVMd>+0d`f})2t|5BohorZB&SSnDgL{3QpMYDxZl&?l79amU@Jr(3Joo)+fBE~6 z`-%Sv9oI%*l5WUmWtO$D=-QJsw>EH~#~wZ!yDXBEx5ae0aWW z66f=QHgVPu{$M&Dn3uq{U(?{)uRZelGwRnFxQz#EDSl;Wujl%3Yjt7X4{rH6B%fL0 zuP0t1&etVs;2QrrxW>OvJ{H|kAhpj{+!~UBF?W9YZ?CQ8UDE& zLOh=5wl$P&d2r9O^J#FC@%zy$#CiPG#lLnwyclYVzw`4i>5iv~cp`9*$9W0dWN)R{ zS#!ic87!?^xwQ;_0PgG0U|&a`I~3l;@$MMh*9X^M6z=*qxW&om4`VM)`)kLMNwhmI z+tPGr$A8_&x$w*V1^2qR{#3Z@&%iZ5zKD3cy{JnMf_Cmc=fJ&P z*Y^o`eLuLiJ1G9{b3wTK42i$%M})gR2G@4S#NU0!g}cv$_`7~exa&*c+U|__pCHe( z!rf<1{9V5w-1QZ3ZFfohJ^p3k?z1BPu3r=G`Wm>lyD9$udB{5PD48?1+qNbCuHPXZ zB|6(}Yk+IJd*pBHc@5udy-z$!xb3zbkU#5>h)0RecH3Iu+U^PYn~#6q@*?pl;kMh> zCV$qS5swm`?Y3P4*LHhuO4m0&kBY$cJZAu0&vQ1&hmSk^;JywtaNgbo_jSPe0r~K8 zs*Ho2#m|3F)FRHusRjt~tx+elvl_xOE0EE10rYujyG0r!5n zew}!f=xn!b16=E}L;hA@AJ2QlqlDXT+dlcT{)l*#=xn#G1+ML$kUx*Bi^QYk`L^43 zM*ght#reMFA;O;Ay92~|9Qx}99fzaP>o{B^A6!DRW^+Baq;k5 zPtti&nK++!trF*U*NL-!k2uG3Oq}zOdsT>E^UwpXd6)sWJoD?CHR4aAer*!}3*y_v zA5Z*TIn5`}qlh@iAA@WBqu?6<6#4M$(@KWVVusIphR;?8-_78M#Ce?LUw!4e^nq)? z3gA|kzoLAO62}tR8J|VsU3mc4d@h1(y9ea+8`N$A7himR+e70+!t*!|#^AobxqeKz z>&L-$zAq5}Yl>%?IKR)^2G{#m>7WwdcvYWvVGWZE`9{>6I z&|i(G4_xCJ0k?W_JhK^mA%ibx@Fuv%a{#XK6knH)Po8%Z;BgWs^W%lIzWllR%^ykm zP`H~sGdWLt!&6vupGRj{w-<%`7^;H%{Br%OaM!Pa>$<&7oZ~#p z;Qf^=_iLE=49%BC;(R_I{b=y<{;2LL3{QI%k91C}!w)ngLOt|YWfor=xZ%XUS>rw$+=iLyv&byg6 zr#?Ji&Ml^O=XsY0kCQpYyz$o5=kI8JUR_Fk>~%_v{HzK0{%(VNU0lB_-1U3lnxFn3 zPvhbFGMvG;iE|zXf1*2ne;@XOaF1sM+~arssBqVhfouGe#5w-i48BX8;~#q4mGe*s z*Kx81uH)p8d_G6@ZGqdo{Y9dKWNHZaZ`!oBWC;66@Ve^I#W+u%A*@<^ib3$&gWi2o$< zdE#HB_*aOtPw`!$zuvDs^lL&nyvpF-FV|O;L%#^F{aPi?B{DaWXF4$H@%1_sjM3 z!d<@ruK8ag&hfM}_|$u^oSzkN&wmB^Uls20tb=>}uHO{y`Z~DAe@2|+pZVD<$GHRU zakhQ_3io!8z&%daUli{8Hn_%_Tf1^RQ^fiBUIy27at>VA$$j$q0?qfr`$D_wGX$Q?e`TLhaP^r7H=lnXpCxe1za2;Xb4SbIvGAtoqvZFt9f&^a(Bysjp9^ui z{|tB^c$_@8cAZavTb$oV>t~rbe~xIGIO`8Gc$@fjA+)5W z901q+$K>;ml>ZX(S>n|U|CJ2?Bl6*KQux4?$H@@5#yJVD<87Dtrzp+5V*#<0B&)9nc}Hs_^fC6jIF2RisPw*>-bp# z*Ld0)K7|iu^b1^lw!yW&xes62rw3epis0tM=VO%&pT!KHI=HV7{`V1E;Bn&5=eI}T z*6z!xE|-Y&-%SktLYjX*pP3}i=PhM$KOQZ;IB6)^=7bO8?*b~|emrvhl5p2AgIoNs z2%&ZSH<;79w?&+fM@?`YKL_Aiubz$2nC7_`JWitEJV)Rb=Pu=Wh&bnSi#UIOY4nR} z{yEQe;(VSk_)Dpt&-cpU+TS^F?e8-AoKgJs44;hdJ`$JXDBt z{B>}Ra|>MKJR={DGxw{ZzZz!`xW+jGuH(N({O4(073yidzCwJ2IQJ{}YpK4gzQnm+ z8yUO}uK76y*ZiFONZRftin9Q&K11N@GfzI8=L)#yc@bRmyhA=b9-?1Q<6NgW>%=+F zJH$E9m95l=^W6IzDd#*7X7Dn&=4TFE^RrAo|H1KR_-tkP^nWzOsrft)uKBzGZsWG= zI4C|*@_XBc#V6{} z+li-?!RLwd_*o^+<0t>I)St)6Dsdhs+ZntKuH)nsT*t||kEiW+-azg2D)|fvajs(# zT>U4&)qjcjaT{Oy!;{>L(S z6e43HNiDM2jH5Y@!ZB`@2e<`&$Rsx^IDNe=m~Hi|BRV&|ZjB*OOuJI2k8=+&locynTS`p8Is#-(FhZ z^2EP^_yF-Kif5fTf4*pk_+7}S|1)X3-$wBa5N{H16K9{LKTLi2xX`noay~BfXYev{ zu2&UY>$L)|_1XgWxzn4|B>psF1^i^b6uv0bN(yfn*T*`&Hp;M z_cua5H^9BW&W}a!c|H-n^Wi^EN)=J5$|1^!0kAv&P zW11HOf0pX`xL+d9>v@$ppP!un?3H~ch_g?LIKOYZK%C$ItrF*T_!4pMZ|`9m5BGPT zILEU@oR3qzf1diVzMnYjFA(Q(5`*hF83osIvO+$8L+gC}ztVWPUKQdT=UE2t{fpFx z;~yf<@fX20{t0l6{}TCdobgfGF2`9S&YzP!B+mL1;v9eOFN43v*#oX|j)Lp@GX}2f zPp*~5e=W_UHR2B=KKeI7Z~pcOZ(K}xfeG~d+(L1k-z6Je?=$$u24|#4EypRCPzi;RNHm$FXtI3)0n*ngs zGam%EadK;TYUc?B;{3kt`Qy}|$4LYpC(mX+LVAnS>ll-s`Kai9yp4(8`MBsCNgK8m zMc?Sq5G}&VN2#A8cIp&x8&~!u{`hE`S#j8S96HyM7p4k882`52M{t;qFru zf7ee6cl{K&wp%AY6uRE&@Bl92+q~fMJO~~OzaV-a&jryt9};~d@w07M^oo~K3c{8;p!w-eDjzbN_!;%|%I z`Kjm+p+6J7^Gl-lJmkI*22Gqi-^Pja9&jH&-mhNKJ3lA-J;ak2z4JcNH=*wrz4P;; zZ$Tf4-ubxbA;oo|bN8%8^#cis?v1NvRjJKqz13;KQ0J8z2K z>v$k~=ZB*Ax*Un#c}w(Omt)a8zbN`P;%|%I`RU)M$AuYaJ2ziU*KCqoQ{{CVH>e zxagfvh~DcpDSGE8qCZ4`FN)rITlAjiQ_(v=6MX~zmqhP8cQGA5R`(Y4J>YTjn0c@0 zJsMh&vT#Xo%f60^L$?P&Id&Ac^(wK^E&ByUTl$``9A3_51!|y@J8}G+YZRb z^bLc_b|`wU?~&-8w?yyxJQlt46VZDjN(&fa_Hz zy}iEh{>~AP5^lR~74l(ym3WlsY`1L_TwfPl_@@x3alXzuOPsG;R*3Wa3o98sYN!5> zpx0kR#Mx&igBQP)=F|G?*NY~>EuYM%z^z|=y=a;^UmvLc^OgNq!PS2aT>aOHv;Q&i zhf^M+FQ@sLNn-VF=QQP<|9#^8I`+Mx=y^g&CuGg_Ifm{4`-0APQCqKRt8jF*=%$NT)jfdawUMJ4)vuqLP?>E>d z{uz3o;+QzUAKfN?E!A=GERE+|>HV)U;_Nd;{98yrOPt>~pC``OF&2sY-#l6Bs>Jzy z_T7I^<7A&EarQYP&OYT!sn0vYU28U1`;U|l5uf_cl(T+5gRf@rE#mAylnceP`N({m zIJbM4!H2I&eON!4!RIshY6jmR&hw=OuJh#>T<6Q+okE;GUwS*)PhMYu$H`+pf2)97 ze)w}HxjT3J_`K@@cOU1g;GI0v_;2^5dE@z&yUUgNFmaxDMdI(I@iR}H=iS6zQ-7X! zeczaJ9_JBp9_JS_cbi zd=2Y-4DRc>^HFd;PVEurao+sqG)|sJW8ac;*5|%8<*aXJ@YVd4_4&J}oc#wgc$~pY z8GJs2S2K9)9%(#WuQs^W>l9q;)qBt2V|uRFIdH949$f3SPMq^|Nc;n#sidW3>r3PR zW;(tMX7E|!cP0H2aXwCM66fR8HgP^)9Na67=Xx6d{r65ew>#XQay~CzAkODSd&K#? zs|oJ;-wWBv9T1NaX1i^N;9eKkw}?lH&UV|5!L43=UKHOaji2YmJaMjLHG}UF=i|i@ zarQaQ;1l<~ay(1KIiG99`8;!*IJeu(;Pv~3cJ;Wn1+K@nzVm6Ecc*bUL7YDyHAkHF z72^DPtvdMa;sMuqdhVab!+$q@4&2uPKmO*y<77N^9e*E?`V@KmKQQGyZVTWV=McEY zxd5*5RKPW!2Dpveiy?&MUUJ>$L1{e9>km#j$GP+EDd&FG9}>96zXh)G?|^Ik4e&UL zjq^G79cjDIrhJYJrkvwkAkJ~N9(Lt8kHIz0iH8Th#yJVDan>J^#`C3cH|a_8|9pvm zig@3JRNvJv;$J5H;v-W%_ji{#_qT9u&}&_Wz_q_4;M(69T>HCKNaNx77ayH+j&p}N z$Ju_&mE$}G*Epvi8}u6I47kQwA4=otsta+h%elv;dd~j{aqjQT<5NBNw?>@%+k8UM zYh4b&wZF5&sXx!t3b^KB5nS`o8cBUP&cP?Aoa3B-%9VNbsexK!okAiFbGvKy<-kXk7)eN7N44-ZCxi9&&GJK9R zd#Re(F76S20)7s>kZ4)oC*1Y@;1&;`=Pxj) z{w`V1y&XQ1uLMb=NY+o{Jbzb-uamw8u6bSuj}uSMbK!q!n-N*SZ`S3VD zHEF}SxICGpxe3LYo-IsPfpdpsr4J6{6Vd9-?S8V`@pE#f?$3$IA^ zJZ^W0^SIq5&f~T*oBHs$&EFEZj@v$P9k(Ok)~^T9dH4+Rh*73mRoX8;UJMiG<3*A9=fYEyo+R&+gL}I^U#7slUFS>W!}F-G98BFOGV^5X2al8c zJg&CEEuTCu#$Vm-zbzW?N>%2GwxBNVi#{Vht z2NRFxuk1enuKs0kA6Gv9=fJ&Q&bPrW9-bFX;yf=-i1WN?gL}I^{!hWZUFXs3(tPr~ z*aml>D2dCq9q>50&+}sDhf^P(7e}uTTzy*L>T@P~pD&k0@4RmzZI_QPo5Xn@HNia| z_c;Lfc$}Y*5BnE>ByE@H(I|1AM|0rbZj|KDwt4V4xzG7rB_Ez&`8TBP@_bw+&iW>C zo_Aw!OnuhFT?;2y0=GEr^`pO@nilS_U*^CIqF)g1`U<#>bAG+KL7dlt9pbzWY**6w zc^$~TDR5l}dcbv_4uN}Jd|nKL$4Q)47w5C!7C+CIb>ci93vUkbxPO#9&$c1(IJwVt zUj#S*k5gUx7rT9Y-8c{KKF<4oEa=UL=VO65uP1|Vxw5_q?(zG)H~{x{owvz{=ga(C zQ-A)P#v1WFt+%%A+-N(oCI=K5dKO!F<=hHux`t$ku zCE`5ZDsNBqpQ3oG#J@zmPMq^UQB8e#Jj@aQGWjeL{}AzA;=DfR-jVwA`02~w8^pQp z$L~yixbEej4qWR#2d;IWS_yium)Exh?)7p$`7>#|T=x>V`*?k)!QIFC8u@VD2j7+Y zbKM)nx$g11Q$5$cNSy0lCeC&5TTOkq?nA`6?xV!H?u*2^?hWEx_k#>R^PV&wuKW6X zQ_giS{A}P__aSht`xdy@%j>%h?)AFN*V1;m?hSDF@%rw9yN~lrue~hohNX8*NJm|>%_Uf z#Sf=(ev14{#JRqOUr6;_-*w_#-&5jT-@c91hwD3-!B>cLeOten`fz>AzZAIEcMe?Z zdkXG#@j9M?dtEN`UryWQ`sOwRcOS1~54ig{9|70%(i(BD@7RA!+vWOB5a;@~iF18( zzmocJeVfF&zN5dI>bbrv#JRp(#JRqE8GNXo`g46Nzm{^YZ~h~JYkm8`wZ1FhUKg+9 zD!A9>GXM3oU9N8p+)`I={D^#b{>EFWKiBt!IM?@-IM=uO8>tW1w?>@nTmERO z=lUKK|8kJzY#aK`RL}LDAkOuj$>0aXxxUfIQh%;*9bD_X1+MiS!iz4ii`Q`&-0O0g z|5n;A*Ea@tAFtymxcfL?ARn%8i#XSJX(w%$>$^gn>s$EkRL}K|iF1APpGfsw-$mkF z-vi=Y-&5jT-`-EA{>ZKH>)Qf% zAFtyvxcfLi|9hzq*SA8P>pKXMt>;|dA>v%$CULHBi#XS}4w3nDeFuI&jg#v;N1W@s zLY(Wkk-_`^Aob_^miAK4^=*S|eNVx)zH^@rK3*5E<2<<6HT5$F0I5a;@q_fsFPZ-qG5xA;e?p6k0yoa@{7-%~x; zcZfLGcPxW%5$F2mnyEk6w+gQHT>;nn_Wg12@w#{&`@y{~m-+up+vWO3;O^sf8~}G8 z=Tqdv^=%O6`p*1G+Ai03jyTshe~{|Az7cV*Z<{#Rclu9LAFl5fajx$Hajx%42A}w| z)Sv5H`)ta&zJc1ZD=4?A7&h_p2i&W3`-6hWTJtfZd?K?_+xQ->_T=$v3O!ZvHr3~I6&f}r~uTmeb z@AO}%oa@^L*ZQ7U7XMVP1-Kkw*u}yUdKgn_i?^MK3w1Ef2aOj z-)-Vt-(BKd-^IU8eYn0`#JRo)#JRrFaq7eM9sIkLbA87$c!fCE_mDW(ci{7>Ki9Vo zuJzpl*ZRgM!AI*d3a)jT2G`fE%fz|vC&c+WWbq4W{9Kn3xX0t;Y8u?*ai0HT>hq~^ zH)q=bajsW^IM=sGobz8N-c{d=X}etCCULIU)<2|ru2=L=for`6z_ng=aLuT(8M?8YkDQL7eN=1owEnE(hQqkMqhur~X{872;g48gZ^ygE-eK!jttp zd6hWVD?Ux*;d%}HOUk)kRV*%AuN82uR}C_|b>bZV@c&7D zn2!>FQm04ZNBL6FTYv5S?lXM8caHdr5=+CG%q4>k7on%3=n7k3*a7)>xYQ5ei&TiiOK)^kowNgQR3`VB!AXV z5@-DsxVBp+|0rp(jJD^{W=EMer;Y8I%EESMgDX6r&&IJ%CE2}lh11jKf#H}BDlxz`eos+ zuYy~3F@?lX5-|*1&Jw(#d8>W99oiCNZJwIoNXIi+oTL$<1xPD%^>leT^&K2U1 zr}Z5iht!fn7_oM1lexek@&m*n0S=v zY`5(MT-zPMhiJXOHMBcOJW8H#yKTeZ-e1?p#G^!KyKST3+U_{{+wo`*?G}kg3Af$0 zDe`CiH1R0W*>2kmxVF1UoIg*v0`7TOx;gl)k-xR;yhc8^((!A9I3FJ`66f(&!9P9H z)>f-PEZQ-up0oQh$;vZpL9SC=yBk_0rv2fR)fNQ&#i1Yc(624^0 z^gLhs@uh6W`M5Kj!HeKNZvA*SA>7yJ61b0B*Ut!d{Vcflt0Mk>{8|+5K2`B|{i<-+ zuYqg3efTi9=4~Z|*TFqMe*D@J?(H_fJwLAB6YlzbaE-HtFIUoa?-*Ryy-VO0C;weQ z?jB+NiG}xpTf4(_+%JH8f0tgI2$F3`_#mDWgL{8nKPKGu&D19)o+o<}rVZ;2yv8N%FZHou@4me-h{*j-1RHq7Uz>GKc~bw z{^|Z8@;vzbodJ&%AIp#Pd2sXR`B){NDEVDE*=<_^xA>!EcfLwKJZ@{mdEC~C{|4p% z7~JD8CT-Yu0v;##Eq>>{_euL}=aWs$)AQgKC-VVt>o3pu7+lBOD7cQd61d0dd6))| z6Mr6u74S~G$?tqyBF^VmP4V~s9*Dp5L(*G+^REmo9D#ctoF9X09@^x?c|HY?6Igj_wiQ(xA>V)lh60kd|4vS=iBSV`FOemZtYsV z%BWXE_~G4?UnbigxYyD3P2sLT0Jr|~_1h!je4J{7Yu!)5weI=z>3p|)t^73>X08w1 z>+ZZC+~WDJ@YIez2G@2+!L{8g`NZV2pTXP2`Th6&{lk;B-9B(_cLvudYFWMdlj}up`uk#A&ZC+O~uNR4%zL@N`Es2lwWzl1L<*K50z5?#+gSWdzKArUZ z^Yc3G)=1BMo%9xe4e@V~o_QVI^86Q6mmT8wraJDDKhKLj@Hp{den370{`!KZf!-PW;*AGeP{Zq%RSFCh2F0|2pw9xc93Z!q3ft$H`;sm-7|!;d!@C{95YQ z4so83E#lWv{O2E(*6V>3XMwnX=EXuC0k`;Vd~RUe#^63LoR5(YpMRE!v;VC4pTWN@ z{?6yghy5$$WBK%L5j;)+^EL9}{4~kO`rAT02g3J|yCZPVgX@olyZ!{+<_n)c@Oo97+^t_e8<3w-c#CiWf>horrFN4JS zbzcmw@sEOQ{L|oG$E4}bHUqACUI({+%~Cu~^0D~+yyyTtP8jnx`HWG1dLNSZm;DRi zz7CAtk{Bl2knj?C4DR#7^<%;vM|@0A`3!lDa>Y`pk2#ChJ# zlTG7{IyAWslH78fHPph|eIB*DK=E*#{ofFbG|pNE59;Lqc_w!rMgCcN?#B}}e(zVD z{GQ_+`k;$(ev*Hq8>zu0?a9_ZEgs}E1Gc>aOn{AzuM@dVG$3?7f* zHcoCWKhCGYO&=xu5+3{S3&Q8{dyDfXny3Ce##c2voAE!4t!1b!ae{arsG-1URt+HOJo%kUo( zALqm5!`Jy^;yfQ=ch&Q208g;~`h7zez^%W`hrq30??eoSJYM(dg>D|V?&Ev`Tz!_o z-6xO7E8^pv#~a79AwK&f}K* zbq+aqAA6o{K5pH|c|VO4etjCAb@l62geQ2r{(O(u+jZ{kYaYtt(~HORxOE@rcZ`#e zn6G7=*tw2xJWiPNIN|Z;>zLKu^j;TV$E;q=eI3)fkJ7j`z0W&;ZQ?%8{g`V$U(2}l z@oDitJlTEY^^G~NZ?C4~mp{+u<<*?GaJ$}?dH8+nuirQR^=Q|w7d6a0*}N@lm-&BH zyYBDnL%!2$a{ULl#;??_{oal*t{;KkIO|8jZ9H&Y%HZCv=Y5Vi`{+93`U>>g?h?4R z3w+hbS#L-4;Ca(_?XhkDmF;?4=Ii&Z9lvk*LV;-%jg54MtYSC*Z!_Y~a4d$$S&se0Uw(CeH7p z0bljFx|%qj=%&dn$I1Nb9p^A&u)Oi>5syC>K12E_xxa+Rv$(Z9N6GHo=e6aTU#C=) z$F>>g*C{oF$!7fjrPnEb9QXVbJH1SDMe{34nC-Ut>le!d&m*5-R<9`8%gJt=AK%^I z`Pch(${ph;&WYEl>FYugP#X_eeHL)-7$Vb9`0CwLLTlI zKOqmc-q~jJYXxhmJ&x^1ve`U(TIXK)F^>E8JmwSN=EKJ+Kdu@70lJP|A^jtWuMp?s z*FJI917G!d#U1Ny$k-k0t&f~=YsZ5@^Q!b33;&d?XSoCs$0SS^5-tfc)X3AQ^-TM0k8Q^J@1e@z9*@5s zo)ccNCnwt?xW#R8x_()BCHb9gRd8#UuRGO<^WWEOW$+fb$JsGYe&A~wFXzqqDfw{T z@O5{cJbW$39e=;r`t>HXa=#}QxiO}asxKer#z`fTsR?wL5*{BL}89q`ZZ*>QyR1^5_`uqQV;{`@2# zN2)#c+i+at_kA|#bAWH5^|?u$^(VwR4=dl0`g0z7@wq|m*E!d4&B z_bh%sA8Xr_lFc}O9@4M38|U}0|Nr)W+#Pwd>ZRM&uB-o5d8?yo9dAAk|6dz#L+G!~ zJDZPZcsz{TIJsqB0=GOohSvEVtmo$Qf@Cj3*AQL?-vhTiv)+#v&Ru^%#|u6lP1EsW zh2p7zdpu}1=buYA&YzR<&((XouCK$#IP3SRU5@8K+8u<^A#wIOC4b9<>w9S3W_{Li z%8y4@7yf?WA^3QI5l+sJN6!243qS67e_hYV7mlY$#|zHGEOD;O7V-azX9f z*Mx|T^EzJvxBgBBN$2OHaL+>(-15NsRpG8*1GjcL58l+(u47Ypg8BRm^=lm07A*d^ zBzv6fwoQOroXjiW>eD12tD|oR#BCgw@rxt!XZ*d#x+~3cWd@egLC4RQ~^(FUr z{RYLu?QUkY+XQ$27V>sToX6X-_`Cihan_%LYk%?eke%@pCH?X7fUgz2{J9|KJ`T-? zuQTB5Qf_y>YY5}Y`eoyxnC!L*uX-}QUKUB3^mb!>@$4(%Qbcb~TS zyZ%hL>o0+8y9GMWvAp?lXh^vG#NeJ!*N+Kz{W!R`TN3{Y`a3P$eP+eq^>e~qKM$_$ zR>Z%Cb{B=a&yx7NzAD`HE8yDhy7-@=-A&>C-4k2l?|MI9_58bjH>2GH@_#`toxlF~ zk2bH3my_K#zrJDqtZ!31tUt?Ww-4usmIq&Z%|9m2=Q;K}+phL}gRe(DE%O~rr#96-ruKlW$ zKmR|PE#mC6PyVd;^G1t@^@kblwutk%ZBx7E@2`VSiL-wX9p71>C(io5jN?9EFExD& zbsB_T=k<{IyMBZ?&+E~QcK!U#>cX$r7Ny-{@_XBsg!{PlF=_edalV!j&w55Y4dQ%$ zUZ>+GpP&12+}dS+k&chtFYAMCS36&}gZ%RKL+|enc%0ncE7_el!L43bdOz3VWPS|2 z<)7cL?4fze*A>Tz?;uxZ;p?9HybNR2IFDy*cgA3{@pv{~F=!jri}k(2D;;qzcaG}C zuT#zw=l6LF89XLFMDcHddp^-@&c})8)A=s>a6b2m^Lp;jyV~*KubV8-zYS0Ku-mKk z@j95#r^#m-X2ze0S_5@%uGaq?o@9Bm@!5;VdECayE%O-~SN)hfCiU|)i>FBO`1O3{ zn{-{}YsvGVHJ)td@2{ckacn=5%{acYxAWM4e7*8BN%_H7X?B|Q*9#U8_xF_6AI@9W z_i22!@n21T@D-|V-MPKm{8aHQ8$b4yWIkS3hoN_uNw_; zAGhA_E_j^W+PHNdqb?rjBy{|D#}uN;Dchmd2KR}%0FMxZ0UGL}b##uiC zz4mvTIG>O4y4~@?`)<5$M@bvD+veA`F1HJP57rjr5%%Qf^0gg}$In|d|9;*QC(q^l z^LozjbB)t_%eP+kY=N7<<p#}6jYHS>!N=oqy|2~UZba=` z{2m9shVAn8rO1AlY!}4e^+Uv?L}$Bg!{FL(Ozm3yzWMhZX@AGbpY;>OJLCTz!D%w1 z-Dzpp@?_f#arT)de{0wEbHrIc53c>~G?M(dV_glIu>A14>gWH)d40P?^Um_`>!*)9 z9Va?3T>rJs3;#b{S356U|Fz5uUO#2mV`qoE0O1SN| z_0#nq)LT`Ff+(v0~z68=`i39*vMc>qm*R-mgPyyG8PklJ?5hXtGU^ zPn0}%J_&9mqS$*LK^M!EJr9ez|^yc$8q;F&6 z>*eFhkMCX=A3v^dXgoMRdc8EC({!D->+^5K7b!oNh;u%d==B}1=L@~o>+rga^^^EN zv09fiaO*FxdzZjt;TOyx+3bef-30f%RdC*0CmtowvE8-?xaZULd&HweXS;3t;C92W zQx1sp`VfCp=V_huE32=s!=uEbgxhZ01h~iJ`YGa3qO;w$61c`QL;judj6BQ|kCNxx zZreQhv%W$+N_4i{wg|56E|Y&bNIO5P!iVv@HS%Zux^UNTfNQ&ZxWM6c_y1eBFWl$R zA-Lz+^)2D9KL*!!PsQK=Z{3-2_v!iO&~b0q_2-1UJ`b+#Ho&dFQL=mP_Q{8NlYIDi zcSxL%cNf1kF-&mmZxPoZ_bg6A5) zKb~t5*1#=qa|W=j6Swi-cxm{>Cb-p$^?n`F>*)Gz=(S${y45(xA6mKk38 z#lKn~EYF>FDWvV1js?owIj%Ez|A!`bUh5B%Th|-!4;G!@_CsU*KExy9_a#0^{C>nO zzqXmrdE&kv7{5R9IC*TF@dps+IB%ozz;XT>an`?{IP15Fv;Kk9F6-+V`isO_|Et8= z|BJ*~|0~2<|1_ExtdA&8*8dp!u>QfMk1WZ_W_f-O>A8;Y!(1?3!G0v0=^sQs!yOv9 zzlUfjCjK$<;W&GUbDR$%9+A&46X!Vpk~qitTIv_a`3i%pRhwN|bZ5`j+ z&vACvVeniWoNWBOHQ9^dVXik0cbw0I=Y>y#_Y0o^kA#=N2ZiU*=YnuN%ncK__{;wP z2!vO_$Aqtf`#OK$#G^OaeJkLOahw`=$S83;Hu&cKHa$+AI=`BQz&K7-I;27zrv@G3 z*ZEEVEzsD_2JRcjDMN?s5a;30i~N}${{pR}^tIi%>09Vrf%L}n=-jCA7~J2Nai0qK ztmvEI72$1g|IQ!x$s>6iqA!5&2>0{;rtl*4$HM(Q{!Dlo`g2I4$5RErAiM=03vYu@ z2>0U82+w0sEC?@vZwmMG=7#VB2GN1=3b=nR*ZWn(;PUq`oR`7#Sc{zdpc@b#V=xX2 zuY>#h5$@9hFNr>ng=$WC1n!@IaGwIWU*~ilgZuj(&MV-4e(1ak?w>Dp-U9dcK%KY2 z{ko`eUrUp_xd>~o@%tFSwolxC=iBHvgnP#B=Px47m zRq%6|_wHWeDbBjHu> zw(vT557r^iL%|Lv$<{Bt1U@Xh20kgg1wJdhU>9AIZCQ8)ye7N`z9qZ??$=K|{xz4B}c)#!(_yyq&a9@wzC&J|L>n+a9;C}tYc@=y?{F~su9=pDQ zN#@rvoHxOn;!`$3vKppo*%1C$wJ|sK_9}`{%pAw$OU@r?V-#^5;D7+57 zF1+x7px+T*e_-HE;calg-s1f&MM3Y^Rh&1${rZXX+Jl3>h~td&{6OGy!Ykk_!W-Zl z!pnofXGeJMVSyhBFM{{tIOg%R9v<`s;nhb3J}JC-A@Et@4e*Na_>n=sBD@N|C%o{e zpg$5`1@FUg(&Nux8}x(1OW+g2o8ZgB8-?Ig6P|x`;C_7eb~_g?l3$&}anE_t6!BE4+m-UH1Rq>-yq%2A_+fuY>1s+;e>s zyia%wd{B7qNx{D)yam24JpbgN-xgj0KN6mQO3?S>IO%a#z|RY>ffs}~z$b;5zAO08 z3vYn03NOS#zazX3-V|PVYS6cZSHOF49QJk>7r=Lfm%)#O*TLJu);E*o8W80^Un-Eb>Ri@UEwkK zq3{y;neYbqIh^l!{4H=l&vKsso)FKF=nLRW!mHmK^c%wSX|h0zVR7ng~9ZgxA5(<9ybBZR4a3J|evEeZgl+cm;excoTe6c>M*z=SX<* zg@K>Ld9=qyak@eWb-&nFA6>d;Wh9% z;q9rQuL*CyIPiw>=m!ID2`_`^9uR)-@if3A;rZ)>E*4${FAL9=f__bS4SZjC@rIy3 z6P|xb;Oh?zx0mCb36J-Lmv0LEM0f+dH|qAu-5eed3NM0>39o^dgtx#KgjZgX>uf8+ z^REniQ+V!{zz>8MUKRKy;cf8fLE-nFpGrAAj)gbCOTzQ74*Esm4e)j0`CEg2S9lrx zSa{*KpznEbxb--z-~+T9PfBrS$ z@qq9W_^9wY_?+-~KKQH%uYzw0Z-O5P&%ZACoC+_3_u+N+<@|$>2(SEb@R<_c1TPDZ z7J`0JcnrQOya>K2ybSKw13bqEe@OVf`$ymv;jK3WT}^oO z#=y6P7r^&~m%z_Gw7cE%kA}yQ@CtY=ya_%byahfdy!58vza+d2z9GB`zC#>Ka>uAi z97}A69}~Y*LJDsV?VkINaBF#fP`KOqIZWL2`Ni7XwQuYy;FH^DcA7gmDLp71jGiSRmjFRr(FKHK1t@c3tf z|FG~X_>A!QT|vJpybWF#UVJy=7hVG&xDbBtaYpYAk4J>p!OO~jHt08nx7GsR6&}AY z@WDrhTW`1i{_xnZFFG&$T;P+UZ`J~z7oPt>;H$!`;HS#hgZ{#!!mYR4`Vf4Cw>JX! z>y)l9YzDq?ZMRSPSHt5q;kkO?7loI99X^F_pZ3SX;}zkhj|aXfyaB#1y!cx|e^Gd} z6Zr6>!>#wL@yYObQh3w|d_#Eq_X0l(DW#V?cXd#|8;wW85-ym-K`d@Z%t}VRv zSAj=Q2)AC}d@DSjRsJ`DFAJ}NZwhbzZO|VIul`-&XTsyp1wJqwZatpdNq9Ugyaqlg zJpYBDpBG*PuL`e$ZwQb6KKSelZ-Tdl$6pNk-Y14zkG}z46Q29WpgR(t|EIuDg_pql zzq8vvYKO-K;Z^Vn;e{^+eN}i1d{=nm%R!%iQg^$Re?hy%F{L`cSR`)aF#1Z+?+9=I zYv4U2;r71CO-KK4;qip<=D!ENEIfZH@J-=$@P_ch{|)-lCx=^axBQ>s@viXdHP>{0 zaV$K(Q{ZR9Yv5x~>Gp5lIq3cU5O23|m%v-1uYmjeB(BfhE$AoWZvXh6fgcL5;>(-o zp4zQ1;saSL!fW7X!kZ5Y{!>pApYI5~EU0bSo}T)AXSmz>IZoWhL;K;u zXF+)Nk%4atkMPf|j)WJk4f^TPv|aOWJtpu);qhYwUlU#f-x1ydKT$pueEP2IZnuCB z(U*ibo)Gj)!t29%OgR5?it!gDVQ z{785aeB!&i<0-#5=xbx$y!z6>PlOj=7I@z?yY;n~2k!5y_Ufi>D6# zhVTMD$hjxH2Hx}R?s(!ihjs^qSHbs$M{f!G6X7-Rndfx-SC@i*P5Dm*?teGzc__XO z{;CJh7rXuQKN<7|;Z^XW@cd5&{fzJi_^R-HHR!j6m%$H(H^FnyP2-Hi-OkSo#I25{ zcLe`Q;e~ewUKL(i34BNS&jfxXya9ghc_9eTbMsw6e?fTu-GPq_FN4nuFRTWALwNMw zz-OM{-EQ%Hfv*YA|6Jg^!rS2aiEf|Dhl1YU2lIYKzYzF==u5vGc<%eUeTtib`}<(- z(*&=IzVWL;Ul*RQ2i_81`nA9ZU(nrdERpHTA;CsRg9}WDX@Z4_( zo_}F?JWcQs;qk|UepYz-?Chahy_hggeA>O4Z>f#BH3E|2ga z;f1dR?(fImH+h=*)c!T_L(=2atYh4Bed>=>qz)J$j#Hiv_xEqjAEzW8zCe0ww}p0V z!t?(Y;^`}Oo_6{342}O2_@eUv417m;<(kfH%Jtlk`rs6!1ICHt)S$x`h~tpn;Ty!w zxp>#$e?T0E){Z{+l5k^rz#*;!8pO?^-5Y!gFHQAE3f~;~l<+qA0&yIIItKg1&7t@$ z!RM0jHu&Il+Aa=39WYPa94g-$d^Us^@_`=_$04QTbK%C+A4_Zpv|pBTEIA!8`tp=x zspx=J;+Se3UYSYt7D@T;A)Za)m3sufFT4SMQFwIEpzph>+rI@qBD~rc^mD?S_X>PP zc>dmj`{xLJJ~qJHqObG^eROkoJn?-39~a&RpA}xaZ_qCbZ-Z|Muir1|FA8s;5B%IK zy5p(fkG3xeZ-Ezum+_^o>%yZ41^<2FHSkNqOAikE+1c)R+W6wP_?6u}dRWj`g;(&0 zSzE&6M+W_&@H%+@mee0hX$Q;_F9k{G=g6zV1Fw7K+TibB2;e+=T;Nf;TVDbn6W#!y z6<&RO@L48~rK@ASOZ+9Fsm{++;^xqX&xKb9k;hqoLhwHm9z7}W^S5^Eb0dLI2ycPU z36Gu}^iARU80`vgf)C!--EQTnK|dzE0X|0@OJ>JlmAE;So)&zzg%_S4c<)?yyRFf{ z2Za}|3%n>i|BS%P!i(Sy;n8@|*Iv`zZvMrAH-s0#+rmpf81w_L?e?i%ANaWNd@1mG z;Wh9>;Ss)6Y-zsRKYnHKX$jB0D)7G7iM|~8knjrlgz)^UgMLnU1-v1=eQVI42ruJH z2rm4v#PgbZPJox06x_R+00-qM1`%A?06W#jizXZN4ymif;JHktE>(u7D69ON2d$+#&)WGM7ssOFtt%ZwvZ{@G|~MTJ)}Nec@+= zep7h!gMkmfyIWuWCB!2<|B=9ptKIrKzEtK&c=30Fe&#*h`Zm5`_*8fmUoc#GZ@0dH zKiu#A*>2wc>)>A%UjKaHBWvCI=$`^V5nlaD;B)Wm))(=Gk}JgV(xD^VBiY=H-4_$zjTk_Gga&6<$DFbBs{{GyB`RT?-TSr zAL#ap?;H39;y)B5ou75$mWMXJ#Jwpz#y`&L`C#ggQ{4_2AZ|YS`-gUm!mAGmd_j2p zz`(bK=N=q*OL!f8;OEnL?v&h(@rAV|;iZQJp9*oDN(X~S-S)ay&fV~m+@o%ryEWX- z_`O?ioW0>ub2rY<+j1T7sOx{=*^hqo_1E8a!!0+>-SopZ-umb# zOw8PR;|`r170-Hf;W@WF z)cn_T=KN1Ctdw&pZ0|3-158|Z@Y2stBKHhHhSaS z4KKBxWvArP&zQa8M)9HG{t?furbPj)id8R@;-+wXpU``h2{+xPChyOC_}*v^CH!fliJfr9U|S_OL; zV<6Vi?RBW0ujCr!@#sKpYM_?Q<@e`HmD<#|i-tEF6L8(kqdx0MjvyHLK&XOs!C!*gaXR<;xS$#@w;~ zV&z0C(8$Shv2ZM3oN7?V5_|IH@qB+VJF=@-tmOK@U&;M9!rrk|x)e{wV~GUpB%(W$ zsq|E5JRXb3yAnI%sZ`gVTDDMDR_+W|vK!+f<;2?2KUK~h%GQ7pizd3eb^r$U;s6ax zqew9)fOw)0Mt%)kyuXyK9?It?DzyWZ-SEFJm)dc29-^+2OO=cWBOeE*633dLmsQM~ zmc#)ZPLAd`M6~p5ur4{sXrjSIvG)~jwsS?cG@u65J zOzGwE!}*#j+EEyy8Jm2`UR#xe?{hZl(^WEXT+D)1fxqXnVq~j zf4ERAUUY@Ip&%#)J8UC;4#Almh4Y_6F&6jNzWcM)Ott_gIi>#2A&67AsM?wSz==Ki z94y3CyeIn8`H@(>TjkYK8Ho9T*bu~fe_{wK)~Bj{fk6Z3I43IU{PBDdEWx8~tP763 zr9y6K5>5^}<3khvf_g`?8@9==uFhl%3dLh-I1U$gjgI2{++T&Wr$dGOiBu}7P9$y1 z;+KbQ1XMF>R!w_r z`Fy%C4$EciXLI3%nVsSy%nk6w*n0exY3n6;vy;}F7h8k6 zyVB*frFjouW}A#y4s>DD2*GF;qexrI!#uG*M<<55Gx?go@K0r6uEOgN^xX9+HxnSYZrPNx>#Oy1UmbrH^SQfm%6)R(e*Rg5TTYi?%=jptnJ36a*!rOg z%iPOP*JiMxn7FjIFuQLWf%RWmzwYXfweMRzs5yx z=_vZRz8uHZ44yMWro2=y9R<@9M{01b{HVi-ygVQym;zJfI>Bo5QD~6RO#cvutGPbd z)0zb|*=u;>kt(YbkIX**T$|55RCWz~LuVdcc=F-kpwM+%t&3?(dHlf6A6HtQTHY68 zsdOO@A=8v!r75xgc~yyJWJxD|{Emkk}2JJn1N(_ytxK9bH(RbXh?S{<~mtABF5 znlHnZG1azlJjF~G%9AIt0yT}~#wTJ)eq~f^yzIa${6()LS1Fa?b4jnGT$#vsyzjul zcSGpsj#26S*wEoxwv_ieU>=6ya2e7ITY|se!d3RrP77!Jmik>Vbr(YY=T1GFzE{xW z?}xeSGlCv}XUtVUDCjqb&<_iG{K^DZ{+OV@HiVu#SNH!rLg-Hl{4F8$(}F${LVrro z?+c-)+x7ToZ9EUO`$OpIHmiXCk3;C^$o?y7i~Rl&`um0UXG7>85cGMtLC7`!9uoA2 zL+BqNz21KOZ6R0wvY^LX zN!R18+^+WHST*%{%eSk3yP&^6gr2^}#JgIV;g8=>z^#t1{ItNw-%E7W4+{F{L+D2Z z{na7tuL^p+_1e|`I|M!6LhY)judN8g58h(zs;94M2#6{5wPF>9O-Ji2ruM{@;Y)Cj|YkL+E=1y%)lMdi*QU z{zD=BKPd43IfR}b8w>EUPh9)2D)8}9Lsvbnb0uWqkycS_v znkD}I^xO=;72zG)ZiX$|)I+a%GyNyO?e9i-A_GVoa(F%2Mg`vmTjUdtay@VGdeu@c z&u^Hox5FElXX>X(|DNN&V5z^I4!rWb7`*n|4}GI2*0<`Juy4K|g*-_=LwvKm`5GUW zlk~HW`o}E#c}M;0050(t9Q8dG{gR`8!lGYs)St2F*GL}$|LDo||B6N5x=qC&$0^rg z>R$_S16AS=$BsC(@Sp?=&@uEXV7-` zEwA_Ydbwh#=N8CeKDTQN@v$9xihNS>SM*HSH`_mA(R-g#`df{O#nita^uGNDfAtz= z{~Ytd{`bSaY5%7!{Nc|k{_O8?1!`;Zah)jfXWpv#3oHlz5bT?Ld<-4C$n>9gM)9j} z;0n~%I_| zmcQ5jHi|#a2O~#e-}K)h=7S&fG*5iKj?3?v_CILRSHG$(eTap$HT6*_hW?8i<+>kG zdU`y${w~{(8ccVP-t7Ms(hqP!RlH&RoB%zNdW`m0$$#~Hs0W|ZXFiW#bdzZR*RfX5 zyVd`{{*U!+)_;@Uw11ZLypYLWq+y9Wo{tMq!d}I2n z>)EU;paAZh_InR1J^D;frv1OM*gq3d_Mc=iKx(jW+Mgu88UIz{!|)0u*0cS`E%r}4 z+J779CI7d)v(bKhZk_q;|1%c;nj?SC!k-rS_`JBuf7Zeu{+8;$g@E@OkDvcx;a?zr zgdGiA{OTl=e=RJtv4|Nzk%tt2tO>sj^pgMEey`F0w+sA13x9_A&EmJ;!k-cN9~AhX zA-);E-nUizZ!+4?{$saZ4;hmGGNk9v5x5$2{A~rj}#Co>>Jn7B;_a0XIM|3gloA&<%^pgFHWd9uN0eC0uGoS6>^g4O|ULyYQ zv!1rBXZr_8-(dfuoBcO|Ub4S>o$|kK|3?J-@3Qchh~Mn^{b38g?OlprKQ2OpPYL|z zEd1#ARQsFppSJJ^+Z*|J3H)tP4Ew_L|IGK@_~>TI|EIBHNP7G4hS%Kx96v{iZ^r-X zBZ~hPzn1lXtmpVSW3k`+fztbpTbDP)|D47C7{rvH_lYgIu@7WD zfd5&6U$pS6|L(>=V&R|q!^Zgeyug3d!e9Ea;?KeQOi!l&ziZ(yzE|;Aweznp2>eY~ zDgT@Cd-7Suhwu(0?muv+pFT?ZhT|XUoAuv4pqKh@{zhegH-lh12Sn!c@uLMCf<;XJ z+H-FG_iE5f{MFr!{C^bqcUbtDpStl+Soo1tBmav6|4HJT{WteB#s3G;=!yNuZvF6^ zWd9BSTW{uy5Mm3kxhM{vy93`_+bPX;?q)2ED{zCH^8e6t;Lz zr^$bi`0+YH?F{3EDM)1=|0=t#=W0I)H^@o$Fa59555xJjo=pFp1ifVc{66JByguM3 zfP5KtO#8QOlKVgUD!4EMDeeDX|Hpc^|6bCY{Xb3mHlzKf{a*yVWdGpJ%KkA1!S*X) z2J<<7w_PLKfBFh#|M0r${vPYO+Evn<_Is~U`YY9@UW;k}GoY93U+7o%NBII20KW#c zFrV%J^jqcrZ+*Q2udtphF!`rJFY(t7DSj*aANb!8_?y8H^o7~}wKpjK8gY4J@~;8C z#P|MG@q1YakZ;1i+5W$=@K@gG#=pzL?Rf|5x6w_+zZ6t;z2Iz2yI~Ta^EYSr7b&Vc+CWTlksHir)_B=Xx^v zw_Es v@B@V^WDCjVgze|oE1`yaIMPyJbA`@b*nuX?*Yf2BOir&m=9s+r>89ZS^QuE5?-IzlgWS5!tco{ z|LOcCsL14};06lxg?ap&iz+^T=BOvuv;RItdeeWcF{K}b-NW8|Cs$C+=GJ4gIs&IkU#!M@pl zKLSj{3(I|BIw~Q@6~*qB~T0Tdl}66#_RuL zzM+p2e~!xoQvaV8 z_^Sf{77KsPk$=#_UljO16Zm&p_^p4W#(ytp^u+PYc^|UyFA#r@3qt(kwK&#u{NHEc z4-$Wv^|WO@XP>d~XR9jy*SH|?Ux0nqGyg{x{yE}DSWjElbM_M!{>*KS;}30NJ@Yqh zk>hWf`0Wg`@LNGI#oq$)dsz?d|4)IRvGBcps{fnu_gVNYHPwEd|4V^?H}T)hcG5OV z{EU&`O0RkQNzxnBzc)?#R%o}LSjTyP&+X?7+Rmg^``aSHH(G)(z0Yy`jr>pB0dg+E_Z{7g@|Q49a+ yBlrr&C=}cTf2JN!?~Em?U%vaC((n0<|FZrMd3u7&kD`9HqY?G+%XtA(rWiVJnweQj{ zyZ;lJ$xMK1VzC>j+YL2fkPid3F5RWO>{cNPrRa8dsqJ>DwHlO`3Gu(BpC$o0|KIO< z&NJuCWD>x7z1Q_#FV{7klXISr`@Wz1>$#u%c~0`CTR!IXc!d7v5&xHP{?bo{NRLjF ze|Yh~A@2+^Dn?}4oAEd6++tsEwXdJBub;H9QTuwEeZAeje#*Xn+P*Hvb%}ld=eXW! z-`|Dn-S+)w>}w3yW%m8OxVG5$%W=KWzW*$)_uKcaxUR78KZolB_Wgsne%`+Se{lT^ z`+g;^U$F1Li0fb4_p5OIEBpShas6NRy@_j^eg6=ytL^(Zt_l2}!f%`XtR2^+eV@X$ z!@ggG>stGM9j;%p?;pnX5&OOq*Dm}1QCz=l->=8@G5h{2xc-fO-;L`A`+g&?U$yTa z$MtXR`>)~pclLb`uAA)pujBfJecy}gX8V2%u20(ceYkG5@3-T+!@l2%>(lmqKd!s% z``x&H!@hq8*KgYQ&*J*`_Wd4Qzh&S51FrvQ-|xls+xGoG;rh?^{XSg(#lGK<>jC?I z0M{4n`xkLNXx|^g^}F`{VO+mw-ygyCCHwwmT>s6!|30q&Zr}e0uK#J@AI0?t_Wdik z{?NYv5w8D*-(>$*S}%;6*6~q)<@R{W@{Dy_v&XuvhOr)N*;t>|G1hNw9ou8QFt*P+ zJ~m)^&K$93pE+tZoH=GKJ2Pl?oJm_-&z!biI5T1$KhtV08;Mz4M|`4S%?z=iqgbq6 z;}ZSh%J{EKki8 zCr}p8pSn8{5M^u2#JY}habnFpaVX{gqAzhIeM4=v*uLgQv3+e&l&z@|3)lK1R`S#T zToI}ZT8sTJRwVqlTggC~zcx71n>249L|eVdpRV+U{LQ^d|DC=>U95NU{ue%1?;q<; z{?C7`4hIKC+qgr$9 zWZd*Vne@MUGG2Mu7pmKHa*_W{U&8M_88^hbU@!>y=UUaF*ChV zSaFBnYbE{jD-s`n_iyThjjNNMzwHg1-WZ<6*>A#ZJ{zx#`R?dg@sS#TvoB#5Oo<1L z-sG{KDM54oBS|w-lkkt7O!}Keyspz)eAAcTt|9(^|IW!E@%2Xl8}Ky8rX~EZ_9iXs zf7RFR>0SJ-yH1HY@Ui=A9_)umRLcoL6b5M|!PZ~n}<|J8~_&%25Gy3UF_zWN391swhJ z(N`m2@urf*i}?gDNz zf!m7YmA?A zWYv$qSZ~f3@y`?kXW-{=UY)FK^xYxHE)qxtgCf4r`%aAs{66IeE^nqJE_Ew=7yBcC z<4utWHj4OD$L80X;Jc1r5SPKEA9Stj13$kBUK&d!gNBIz=;W2PC?7v^#>Qm~yj(68 z`Nu#z?-`71Jo)DA2kT9Y^Dq9LV*r{1{<=o+r^IWfq~ZU4@K?aAH~Hft;st&pUMn?T zXMtC5^1pujCpG4Lz{hcl%uGD;!70JIKH>!$k}tuB!C-Il&YMPoTW|7z6F2Z1$EmJd z<90c4Tai4mD^YJoDiTwM$b;ayHwlx*tqZtSBu=0G0C1~FjBEpL-f56G;I>lZHY9oW zFYf;v;8v0NiMJQH4FR{_WL=-eZ5nW^NK`)dJK$E4c=Q(F1|Cskwqmh+%*HG=W|2_# zm_2^>_B!Gg>brfuX^-6(A0d7im)~cPUH@N%>N$R&Y!8Ly7*bw<YA-0A4?T7c?i2QwL#8W(1)R0;?DMo59=Qna96zU7ZQ~nXgiA&c+XH@2Rg_a&pna zQ!_zV$QyXqoL>W315Ox^H*VfiUzhUTvFkrc3-rOULjPvujMP=%`TZ|z>h@LK5xbf4 zgElcPCi*d(XF*S`P7dtM}JmZw{P|0FI7)N|ErUog{8G7+X0VD zo_-bM8?Y8nxdQcN`;_ZxXulQhS0w)HCvVr(EvdL8bQJJ|p8m1>0lP2p+An@r1Dyr= z1J9!WpKmGx{OF&wMc-!R8o*zlcxu+y>xutJ9PmfLbCfmeZNdtAR{Zuqfd9!w&m4LH zcHm_EzE7_Xo50JQkFscg;Z+|B)-3_Q&mRD7i63zzeK8go&$$bJ3H&SW_&e*DAw}O` z0;ZGkr%SJ!kM=>&>)Pw~S&Q$w@7v%hD|ztGzdb*=0CGKcdwb0C43QT;_%}bU^M6sq zH-7)e^Xsa`qGOd0fOkYZ{QTjX;LXsf-fy>4mQP#n)cGIkO(uT(&iuM)@8We|Dyb*$ z|KKwv;ozAkAx}SUH@#N!qv!6d_dioB@ZT9qni~(tH~er$(EksI<8{%)i~M&U zjt9T`y}1ASJCo*}pw+)ZADEEQ>!H8z8jkztw~QR{{ZOwKq7bp+j<^0 z^Kjh%GTN!O+X){*J1?Of(Ekk3l_4O@~ix#xsvdAB4i3e}EKkmOQ zuEyvT`t3)*m!aPUY4i*JxNKU&|7+;gYNhLfm(NM~*Gy|?zX4JFkblg^p&2-^@2`Kh zojey1fBBH~8%(?Zo6*iwo$coJ6?pgfLw+yX>_?lFv)h~SthsH*J6nuaYxa;?x;E|; z(>Bf!O&f|u*G9isu@U~)5d5zp_+F>rd!2&sbqc=MDfnKe;Cr2d?{x~k*D3g3!|=U^ z;d>3k_Zo)pH4NWt7{1pqe6QhvNPPl6mJrkM`y+W56N3I$*-)P-9rfYbk880g>*x`s z8?wsF;`GrXu|Bb2NQgj4h=rs5xcA}8`m8&?P9%o+L!I8rF3bk1{9;Q3>zbchkifG| zs(dUszMkU`21MzQXxyGGk##d=0gHlXrD#d*D{5JEqiBh@|D&Omh|{~Zg^dE29UXB&-XXbnv@=x#nxaPf;-`hnU}8szbugS zEEb-T=jojVKJaV?E>8+C@h`^lbUl|3&-eF*!Y9O4wL(im9M{ssw>JzvJjhCgX$H5-~%vtnt;iB-- z^s)QuFdDZdXNq2ff1jAsVgja6WyuPg9^=}RG{Ar8=fd0bU&e9Je31p;B<)3N&C6Rs zlgbVun(^CRrFc97y2XNc7BZs!$$;p+72||w%^j9ifoHptw@7>iez{9~imGyq zNKVK@U4!x-&p@z56pR}92{9Nf7YjDb6ALi?-iG<)!R{I2t)52w9fa~K*G|7acQ zxd{De1h!EIZz0Zv2mIDu2;7PxPa{_8hO_t?CEF=?D3kx)_pQwhd}(I1)ysM{`P=B8^C83wWeo9 zn)D8cuA!X;U5VMYu8l#@3Q<2qTS0%p5cQ+<8OGTSuMqT6^5dfL8UHSu9|;p-S?6i$ zqRuOaeya8sbO_N|RVKC=Q^mTuv==jQy%EJI=dEtTX5D zhqL|`E;*hE-ctBMUESmH(Bq}`d~RF%y8k5t~VOf1bm!#DgPBk8hPm2Iq78GRbON1N9_QhD3=;wLN-$?Xreqqa}9)WB}k z`b0B$eQjFADwdsCyP)lrrgeFE*BLM2?SmYo=rc)QO4A$i#%B}wQBM7ftEc&;Y#!+n zka{}c!d<=J^ofG_rcac`BR)~Q33|U6{>$5W@YeKl>pS9eaWF+J2;v9F@=X@l>-POJf+Y_EzdUaG~If@h@P7NTujmGxZx9W8D`ncY<;-o;$^ zE9E`s4ZEwrE4LIvpG*O-otV?y=D)onQC&Q3G+5lF*4GTniq%+FODrH%d>|UAOpL8DYSSNRUbgB_DiVi_n%gR)1$XpSHQ%>(fAg|e zZbKZWxik?FrETMJC4C>R!kSihpV(}`7IrZXVp(%S=FM|Zr=qP7K92{uMm;BLC@*`9 z4#(GfPX-Y;0S^fLV!WaqJwE-YUyd>Ih4vP)yf5KH8|Do!#r>k<3ZJ+?g%!;dY-z|Z zP6h|9&yDz-%MwvfMeTZTMaPKsxeceS-6LtMa`dcqO~+ZQa>FyQC)CfK-m*Q_AZBd#ctZzR17DQ#B{nt}}bAwcuOM@gE5N7QEC`MBk=#lSixr%sYbR zcvp?Tg-3*fxHoVg#k^~!IJoCE{2mnxHtoUhb^LlhE9hSj590l4{0cn_Hl+cB&$D)< z*t2b<#8a@Lr#@%SEXRQKzj|J^)WZw9MBq`(Pp!CvI?wcMY50(+oXv7avHqo>$MF2b z)Lka|>@<9Q@9~N@)~CK9JUyQ-j5D5447&Ulv}akPafdw~O`&HSPsEMrj^wjVZ^bzW z_llw5v(ZCwBZz0W9hA=s1j+^RjO9Y=Sz(@XQ}UFXnx|Y*o^rlC<)-B+H$6|e59BE~ zBTu;x<|+3f(CXPJXaJf#dz+%cvyBTA&o-&~vPV>gENh*#kCs)6aajmnXxcmiT8`%{ zj=!T1GyY&{ubjU!r-S|$V-k#2aBlG}8FMb}C=>-9{^pw!=S1@zM&qMNf%x1E#3? zKIOX1oR@VB=o#~;%ai8twxs`+-sF8hvu;NH;Q1HQL;=I64m`O}t6 z{ir>M%eOY-_@0<^*#H)u(pNrBd6jjb-$Kh zhu#6PW3D>}6o5`8jTs;J5iii4{g;DQPXFi5Xj{YBOB4 z*MN?OpSk%KtQSEK6oiUPTzVkjOB6Twpv$NSd?9mzBk$D(`Sm~vo=>a?NGnCJ^Xr4c zgpm56AffcZG$|j#aO6Yk1LH(omTOQlQz*ulllma1+|)efq&~D{t2(7V7qdCeM}_lzrPSyB(C2{=pZ9#CDBknQ z>ChMOvyEM}KZe%fQP=_6Tgz&K9xsF)*p4r&&$9ZflwR9%>$@xmd}TQ~ zZd-0Wo2T5FJmtpnlpD=cZX{2+ck-0`eV%f^%Tw;RdCL7JPq|-%KF>x;gI&P4AaTpN zEe7@T`Sf=by51cxv#e>4S=Q7E^}9KDMf?&`@dd;W8x$WXf2VHhxuEo(>cv!24Z_xKLeBW{v$tf&yD zPt2*5_MA4H_Itd|ar7Vk-V*3|0pC)^N|o-@x{i8|{x)=CI=hj zA+z+!c!}69^(teqLM%`9O>F_pr6K=i3loOe75E7Jydvmg|7FWjcKW8Xn7ak>oN#Ga z5ch!1TiU_chqOz8D_Bx-$0D(G1Kz>5)o=LjkFA>#hv*>8JvLrK)NSIkx)&?%@Zf&B zsNd?v^#h{5s{q#-vR!p$nJIYoA(WYl>m?{tgljR%`0OjoOvC*jq0Dq#{}^RHfU6&6 zX4qGj`5^B91Z6&i>xWV15?nPdIwq4p{^8&(@nozA_ze9Q>>_Mr5O}4}W!48>v16sL zCmRpOm1y5C#W)1S@i5!fFv*zr@DAD6KJh|0^Zd+-r1_hJnR2JW6GF6Ojc7}ne32gq zutg@W?eH7tSK7y+-Q_$hAP(BGrM|G7`-oIHfccf1C&@Q`!m1bI9*jlZXrb8hRiD^@ zM#BidwYEe&`NT|d;H&g&IEM>}17}ipJLO{Os4lB%f8p`40{Hj~rH>yFzBbJB+iIk* z-_P}912Tts3u&+DZ-}oofVbiEEqp8>%G-=+7ksn+Ygz9E=K|5r3FZQN{LVlBpdTm1 zc(@kYa8)B7pyoo67-KLK!GrZbV-PVIfR4Ed=RA?v1n{|H0i|8kU4}hJWBd{J1Mn#L z*%#imtLI<4mG;MJAEl<@r~bv%{73Nzbq93@c~t3%wVjOBEhjFBl~xP#%OK*9?eQph zxWt|>dJqGBc4Q0m=ytiDPZ`l;jrBpsgBwsDxeYJK^)-$^`JQ}Bou=>}45yu#noFi4 zfU&fT^Go7j<9h4NtTESPZ;xN&I@jE?@-fzV8#GY;0PzX%C+=-nucGfckMm35Tm}7S z09OZ}Qm$Pz;91%u-U`!?);e0_!guaxj;}5I_N34l{>9W!;iu$I{A{!|!8zn_ z0k^Z(hZ93b=kvcAWz3+gG-$H*tmUmY@DCJ`)Ia0D5vCb`+KbOMadN;@z#Iwdi z;J#btPMHg)!5@QP)b#O0TE-!akmMim*t1QaVJ^)?`Y#5E@x%N^+V~5ur|>L5ZM(i( zpKIOeUN7MKu$-sZy4{VpF|sX5d0CJ79d)206!D z>yoX2q6OM|cC<#);zHVETOP4L$n^`&*OI2^he^>!u2T>;1)rNfj4kEzV4u{L3+1>! zp3#c|#A;Q%iM~3=yAki6ZCWblQ2yp*T#dK#jWnEEu5x);!J^=amNN$B*zn2gfIpy% zF0i~y2Hg0U&8v|(G8Xk{mD2rPfWg2#5&Ue+@(kcd*=9V=k!i}mdwn06WXU++JMzYO z1bJ{g|Lup|Jt5_e@d-^Y=~F--WQ}#n{^WYV5>49G5Qm7z7h%p#zm_ov z-G=|yuYo=R$R~WPQ%TktH~-Hw4+q?8JXBi;GJfQ9O3!EBN1>Dazh<6*C#_=@dD>I7 zpMq9h^w9fm%*!7Fzu3Ac9~~IOam7ZAlIN4%kjZM%ai&omm-LLLw*k+=u;NQ+d}HEo z8~kIhBEIq^>4&*#L)&Mh55U%LtKzyE+8aiDl0I6-b$%-C9r1GMRM3F&N~ewx1K|s( zr)VMLDh_{8?r6WLf1Z>4xE;I*-3)!q@uod1$9P9w_N)zb@uRHUzw}@BF6dC-buH`< z@>8VkM!n%&`%N1{o9aQ?DwHMuXglo%P2A;==8QMn(LR7~1A_`$D1PA>xYpNPzJPwO zVUkLiSrCs-kuDJ`n z^qY27b>d3;Ajb%?xekx z_%~u{?q@F@trX-58NKiu`rpC*%KkVpSz z%$cg+B*cDcPlb5CiaN$P{V&P8VQ0+C+wh(~(*ZjVxgK;O?z^gLB(F9M17C~<`HwRF z!Z7fZIUk_ea13(ESUG6h!943gM|Xnb%`%|NxVo%E-e#Yyn_ExQk2sgmuQ?B%QWk+@ zAcudjFT%T!6@gvq6 z{*-GU@L{^JE)_OEwKVa}yK;Ug`y;*c(d+SZTN+49O}Fo(U5>*#TsgjFsvpXFL8=JU z%g9G*2l<=!((#KO`6(2YU*ftA%P_9w{u}cjgJY=L((k5(Dz7rAuE#a2G~%q(9#5@Ub5Z@qrx^vU+l*PoJawH7#jz1(gq11r|8)49(S z>>7U69`mvY*IvXnDC>^BP`PT#u2QB{44QhB_8W1B4l&Y|T!MP=Ux&(O4ar#f-lDUR zQ7c@Tvle<3G^T#@zxlfK@esT2oY*hJd=F(wlVb3~#O1PR=1FCIFw)cU4``>gO(Z_V zk$!ln|)%^P0L_zA6Y{ZY@Kw^coZu?>jYA@Xb=bqRDJ?IZ1y_Sg8{IK3-r zf*!@<-Qn%mzO-7cTf7chB(eX^%IGf2I_cpP$+X*Uaz3)pqOKl;zI`EMGf4w&FEuT4 z?WMcCrrRWST(&ZsA5>oNn>AQ3PLpo*!+c^b@*suG@x^-IsKA;rb9_tWI&A3%6VFok zt-=~C@{%_(KdBS%E`OpGvorfE#^p3hdK3UQ)JF{Sg6k=o zlA=;SI`A=9$V5&waxmd9ln$9U9Ez{Rx}Y20lAK)R0O-eY8#iWo+V@F3jZit-FGl{t zDsixf?dQ@2vB8Eo@)RTt3knm+ySWg0xbPycWb+I8m;6E=CeH}z+ep7Xv!4aI3SZSc ztz_ekufj)>IV0scc$064H+d&7&q^MO#B~0Bxky1q){giEbN_+_H~+@3Z$cT4fDX?1 zTGl{~WgW(|!C*ifHq9HpD|P8{$dAVReB;Ude%Qqt=F_`m2IS^H^jFMzBlEkM6HL9N z$3l$<>59Dun^-3Q`oiS)koB2AR$hW!%Bz|ZAN`2o%B8Gm^IwI$22uL?^X2nteTLkd zdI3AwSDfT{N?y>kU|+-mcCvnNaXnx*pyS**zmeGT4_6{zZ)xIa@pP#N+J)~9+;8BT z4D-DPF<;ial9x}=nM0#UESIK*dFiZa8j0=nw#IYoxZ87&zm{W--{fOGUVh$7eI@g| z=C(@zV;jPxTw@-z^Z)4IPl3I5@R=rVLVj+4GHR41kf+-oMQ(^sJZ?k-FXP&aYk9(` z-j$qz_RLQ;Cd}|#(9b8a=Si?w(+=tWXs>2ZY>y_@ztrV@ zuH5MNtNmQw&;47|PsuX#^O)ytKrc0IvU7L!-=pK}Mq;|YT{bjm=kRj=lD6+LUu`&T z-^Xx2;(9JFW&W=~f4i#|;hnjF>*ab5!}g6(*(~m(5FzIM4i>K%amuKC-oeZqQswh9 zCc#`@?(<{bF!E{6yWdaQy*KOWD^cGK7B9sfu5HPv!~=Pej5FhJ`pu{9cY7r+s@!w9 z7nkB5zP@POogBd5)N9mfZhSbd9`Gp3(eEl0+X92d^}unRxwmLXylhsB>A$KA*BvJJ zVFK?)%0GQF?K5(ID=rq%j7@Gqu*qzC=X6=_!)ypsQ7s(Q*A|gKNxSx+tXRZ(fvcSy7$Py1*E(^&?0CMJm>(`gp0vEWhgL&Od-|s+-!3JeWu4R>O~b63?j5`D_ZF zG3V`owL-QtMYIIij>e1S#`im(UY4~@#s`$W8whiM6YUk(3Y_^q$7?(GLkxtOTS1;c zTmUhrClNbv*3EH`bpgzWQJ3R|IpGGz57?g57SQJ!b0&5$o*%d#Y=+Z_VSNv=tesf% z`V!(=%j0(fCyoWz05mVg(DvkGF~0pw%nWfdJ=bL%gg&wvemAqW%{8`w*a|wn(5?Hs zO1zL(Yea{zeuBKK%kR&M+Y8uAwx!E6HpX~Glr+Vf0b$iKuRL>N&{@H2GDj$9f9wUe zq3D~59gfG}ocnbAi(&x!yDzU^x>$O0Y)A{s8VufRw@dlwSY7y>*^xIP=FHP^Tl!;M z+mhom_j&0XFlK9TJ?n;p89E!FuTQ*jrWpB1gdZn7VlR+$PK--`fW}x4#(KUUql>7k zXj=emUHVJ&=Uwj;f9B);Z5Q3PLr=F1B_?TSZ&6F!MJJa|i-2ZMdz0~v)_M8cAuo>S zN35qz$Sd!qJvYAp{=VR=Y`*5_-`eND%!6EC0@yVl(az+^P6po(O+$p{e!uAh zd7U~5UGk5eGya+mli)omK3ZP5kCScvq59lC-tVo=Z2orgFIKzOk9uK?o|mzG!n_PR zD2Dt^yNhhohpw2`4yZ?X*%gV4gEK5!x5~T^to(<&W)HrcPY9~ffTvq zQR_-Gd`_)B-0((5PwKu@--(RQW8W&j@&N2Q*MGM(U=8^Ubs>3pg8no7%yPDlpQx;Y zRqDzJ>N))Le$too(rg^FZSVgd=}Y-y>{{970XfINIGN2JuZ+Ls+CQ&zoWEep!OWcX zVJ#2HlY%_Jm%;v{&zxthz7JXGcFDpdev;y?jE|EIuhuW0Lx1m!ezE<}2j1uQ9(VCSFEj~ z4@aMkK3oarG1MLOg`Jp~idPlD&LM9I>rN^7+{=K=KsXBAw0r}onEFLx{;}B!wh<67 zJ)z(4ElMKh^<>ovdEVD-%+I^3f}p`{q3)TteU*KWc%IB-%FR=9XyND;UH=f~KGc=E zKi$?oJZBtDKL^anoypFBa@qw3=b8Ux^m!)VmU(|qj??KJ<4)iKoROoH3f>Lc?(y^m z-MQJ+`=pCIw}|zKzx&zbdOrfXuc=x7VQaO(+0Op46UnLK$@Jryn4*eL*g1bLz3+@y z7C+hYRDaPtH9>o>IpQ7fsZHYN*eCM)^owrCRo}*M&PBJ8AHOXZ-HwBg<|Uc4WbYTE zEHeMa$$?b)QhST6WDDfSkmtPA$@o?pI=S_9Ao2O%^+8_sIUwBoysL`(ntbE-6&Q11 ze84TYln3&^+G}d_e*vy8d3Mv^fm!WYA?!1ehd&eNq7*|P5dPK?!1V5Tm?-Z&uZ8Eb z@VtV_`P!kkTNYgF1a@AcLr>~5#!A#2-@w{*ORyDdte?NaeNKv^59SBP2Su`zYbx$| z5aajQ54EWpw9`6}G|P>pkY-u1cr?u%cy#=N>$A)uBy3!_K+#airAtGtI7{dAcL>)R zE($gSumvuyAF^YZ4ds{48mh*+1@fRqi^Y{V1Mr?vy{=nwse)CUHX~v zAHvKtR3xMsJ?Fs7Gw%p9VO4y%OP-Hb?B%-JF6Ji5F=JosNAXAm3mwO?56K7x#9Q@h z?8no4riVF5g=nW==FROan3gCMWd)?2m{;_m}`Kgb~^=Pz}p#fr9n+PM|7$%%|L+2BwfH+rAxJq!oSqkg@6Y;_x z@}+m-P@i}m>*%|wf019;lz3Q756u+&0iUnUA1QRfR}T1^LnANExub8&HEsUu--s^} zCuf$3!|7{7JL5A&-3IgKs}skto{M%faF$^I8(}2hJ2X`GRoTmqkzCotxq5Qk4rOv4 zRe3z0uu#&O(=WdC;8uPw-Py@Im@& zDA(74cfq%EolA(GlslK(1DT=BwT>8&`+$p|o1`u}J!OkAT`WB%#Kx)_Q#TtPUWJwR zi&;49WNAmSsI5g#8P2dgJ_`KDmWbJ7tzy~OO3^W9imhXv;`msPn0=-Xxxjmn8$19% zWW9H2F;(ZO?FU0%3c>f&U zAHw@$yf4K2M!b*W{Sv%Cg7-)9{uth$20u)}`@8XeIo>~r_pjmo3A}$B?~mgBRJ>n_ z_a@$_@cuO3kKny1Xxae&YAC|{b$GuX?;pqe!h)fZ83ofu{dnJv_ddMu!TUbE@5lQR zybs`gIo_|t`)PRp4Bqd>`{(d}9^T)G_ceGQ#e1WmB7~fv;54qKg5UkuGp7LOxO6|7 z^j|*>y!#0DD?W|=iYHThi<%Ra*L5Kmp?}0L4r7ed-OLfx@~3qR*1vNkKb*Vdwg7b6dXF#p$*3#fmesXt3%+`Q{dH8;MG&$)l=ZrQ{dH8;MHO9>M(e9 z7`!@s6!H!kN<+5f+1Zdkd0sYcGi{8^|BNyIX<5CXXKzxi=W_qz>n@%1!UK`^2?~xnBF#nb3*T#X0E5C##~~ z&4ypxeuW43GsNqV!*l7Gpp{2lFY|r;w{u@tGtO>$88UWiq}Mxr!`mDmob^N>K7cyq zs8fwPUU56>@I1v@)ZuwgFQLv5>P*|PPu8itq5ySnM4cMcS%^9Xlhj#f*C|AuM%0O- z&JxrqoTLur-!Ce!n1VWYqt0^Fc@TA`Oi~B-NY;U`47q(Ba(gbFLY=9T)JcP9*iRAa ztV5mksPj1L6irfx`3J1yL!BPf=|i1<)bUMHCuP@}hC0un{9bV-Wd0sG&Wgs4?puVi ziwcV8Gp68Qb4B|!=wjqG1pV_1bMvc9+kfPmZ@B%njNTvH+~CMl{ie53PyM}g z)1Ycw%}wMv@s7Q^e1TEB=Jn=fm*8woo`YsYDwh4ze>dO9bF6=QWAm~L>l^Eu>(YCp$@)hnTn;eY%be6bb=e^#}{oK5^a%KVL2tV*l}@0weK zoDSyS4HQzY6<@(6K8Y(*QdeBX`tR@M0DTwfN~2WnZC<#4tj z=23Hon1fU-9v*RgaRuKS;8}6H1u-PM{a>o~8_`a+U9UP*FA_U2dwidWSHLGxefTnE zHU2x0TS31X`>molzXfnq-u7@@!4ZiC@NWEb)>ZYb(((PZA}+MDOyM{ax`e!*D<`O* z!#f%tr7xUZxQd}`L4OnQRpGiF^nNkjWm=XI;#}h^%bVJeL)XE%0_Iu`!l?YK2gMo# zXV%ru;Mn8uyYaXAawYtG%uQ}@Oe}%zE5X?E%=>wEUGBF7O2J(EvoBF*V7!{!*q`~S zibS_dKaTusCFV61IMWg5OyZ1j)_*VfvJT~hGNa|hli^*N6Ff{EOP{G9b8_H3ZwB!C z=I8+O2UNTO=O_RNnJWaoH$oH5kr=P!oEZI#%NN&u4gyD`aeuPhB~R>M_uY*?*>@-Q zoxCmSq1Nt%7#eol4C)Z~--K^2<{|>~dEJ*D>*+XO+<9j6#{}}~rWa{Knl-reIrnas zVeOjnmjU2P81msu`-l0L3l_D<26MZ$tf%YDDYO=gl=T2@4CWrm_Mcdb*(QBHn`ab1 zPXaGtybUns_Q&`I_70}@*!|5ZY*{3XmR8l5JGV~7lgX!q>wNa^KlAABnB7PIx{;XM zzPatm*d%RT=z6x|?LLe>=c1mG4$vZ&dv42_6G^Une**n!UVz;ng1sL~0rszlV>ROC zmKgCT?O(aAB~E{U_-Oe9=cutj16lak@xtFvf=hn7IQlNTy@xTc=6qS@WzcU+0rsE0 z5ABmyw3VETBge6W`t3%@B4rR~G=<7BKNpSDv3FsO@zGI{&^jQ9zbV_AFDWOaH+eNT zhJ-m`2l3qw`3;DswqB*zT(ryKhtl!*cDzsc63*N_q{}XvjydomUd=Jl>r`L-1Kace zf%Q42_Wq7x^1t+jL^6}}Bz1BiIih)c953eZv+)PQv`IUG-QJbCO9>mw`mj zu(K`dOILeJ2j=8|P+r)!=A&mP8UJx@0YLYBgYrUKVcE9u!snt6|FFL1kM~mlN*n$Q zuN#TE?H_sn!t0LL7vypJyc`p@^#XVtwhr?+d;@^IhduEn8J@PsSLUpqLOgUj&IdRJ z{QKp3R7UVX@+js~M)W{(FRnO4V=nnO8m*Uk_d0)w&)2i<1=ADUuZ6SFALDt+eEuMx zBVUp6c+Kay2hZFm{qAf(HW1Ql|IePTPy7)3$ap5PM^wxnyhNTsyutv_G1r`Ym&;=w zu@v=@ABpn~*2C`d3d4T089o)~JtjD~x8f_^Hd*?X&iK>scxVzHoLC2umf7Q>_bvp^ zvv+|NQ~34aH-O(DegeeeFTi{C{eht+*mL2*UWfp`C4h%9^^3$-+BtoEPW>6ktUYOX z)I4IjtN!;D4bVmeKlQ%V_1<3Z%z7Vly(fKj|GNI&uJ;e-dH{4OTY8wJ?r9J;cp9M@~U^xaXkok&y@Du19|xeWwB2FyI;nOwvYh z4EiA3lxdqDnepFSgl~)TY%%7PXPw>Ww$IzD`Vnt%zh^(pdCBdoC&PP+zhFN*=71Nf zQJ-sd#3y)Zc+)&tj`KsO9lmqJZS%3qwnYH9qfd(8gFesY2WSE4wQELI{OoF6%f|7L zk`*m4PXAgqX%`3!eV%=`z6c`5uf|Q;JongH)>@nagtIbGhUzUzWrGN}{xP59p2ytf zPb2olb>|u2xkIQoAkWWKW$^r3-EJD+bYtJsg*A)ckXP+kVRu{1uj03A@SPg)Y2P+M+)BUHT1?=^bT{1yvw=RQzZyPgzLvGI33S5IB?^DkmS*Cn2Vo%-yN zh2pK0c|)^Y)4;n;^pynGXB{|{PwLPcO=j`}6@EB-0s4Oz^Xm}9r7f5~#BVG!Udxy` z;`L-{OX6(97*qB#^S8_9IQ*;SpXYz=vyRJr0-h1kD&^P+(NE>MU^o*7 z`uVDQJ!ethZG5xNyx}!h?)GNnZhr?pa>oYBFnqadc|K0Jhv!>_Wc;5pEyO$X8UN>c zPE2^hJ)iW%J3SlKck1L^2Ir!39rvgAWn|SqhI0i+w#c=tJ&1j~b>~F)TAz@9nqDl+ zedM$4edF%Bt?>0?;0ZlGS~ht07HD&dYrT_wBUz54eXf`0my~z`>&dgR&Wm#=e|Wcq z-)KC5xawwu^BwxDTw7qj(UDz{g%rNU+LEzDjC-wwE!rwIx%V_-f7X5Vw4oyqy z(`s8MBhRyexX6&cIXYyIXEM2U^bhM%<{M>x&sN0pmd9}>8E760E)g$) z|BsKfB5wjP`8S63xPMN(kuG8W3w;>QecWRzEZIKo2ij(v z!{}!ieGjL`!H)64b7i+3Uu%3hKtsJ(h^tGVG9O;)ku}JHP0tK@2x@H;|yXWpi>02X$kHD-2gXa<=*;~@SH(B z1n;QBR)_mRL)|aV;U20+d_{;m!#sna2L1Y z*qs~!Zlu4W9qAUqk2GBkT9Iy~8R!mLKA7>(BC%WK96|MqT&i@V*q?Tv{}>ZnQVN%K zbD5u_X|NLhmA==oM2$-1T|6I_^h@tbE{D!8o3+cP-^)qFt~$VX*LuKnoz~Z2do{jS z4k2GL9Yl_Z!TzQGc|KeXcyt+eAG-bR@CjEk9w+HA5a##0doy&P0>sb4{YBD-vb1u%3(lyyB(IcohSN%CvJnh&yLe!$_JE&Q(`dCN_SmEGq<{QW^A0UMk`sq zr=pi`PuqX$W1i2w0c~;Jo$+GkN6dq4&}QO$K9FJ6C-^E2{>bQQ+{-mftliggo`}5L zWw3qlSDV}LO$*Ewm&(|#%g1(|eUc52vI}oQ7OY{~zo)QIf_vwS!N;^O)bnhIFll(Y zU9j{?o6&{*;LV1%k>n~@9F!(0t{a`)gnL0!l}q3`C{ zLG%GQI4_?aL|OX5E_-9sSlYR4d=#82w#B%HhFOmrX{mWcUpesEV-|_&@nU=Q+3ByF z;W6jitUR+4`N53G$g#ZPr!uz5e!c)Y(l2+~SMUTx(&Re15HDq9+B|bAY5uSYK6)$m zoIN7_1i~!W3*a}n{YsS^Cff?tT-p>WkBS7&W|a90AH8iblfS@kQWsx}SQKnIV_ms9 zKN>E^4Sge>8Q&B!dGu$~VuJ5u&GYh1L*~_XRpEXE=L2$GHC1sRuJ)OeDj!?>%Whx! zN6;0-iF7*dlA}z&^2VY6wO%!EgU&~+%js9eL-9>(!8}*pFL^=ngW?0_ueXW8j>rG(1;OaFPh4}y zYI4}J@$0kU1Ks4=WBGVumK{UP?I)Wj)O?^%9E4ujiG169?d=H8x94J$x8>m1<2{rn z-Pz_m=saP!AH{u-clii$<@ss0E}ewGb_B1r@u+s`$BFrIN08s~pe*E+&(THM^wjVg zB|DP}-Z?l|Z&#A=A`d-8czclNEX2n~9hmL?6gd0Cq5qEHpXTo$IA+VQS^5ah`k4b= zvm^Lt`RnAs?9kWNzZkP^9J2{!r`~RN@^K?Avgt9AEZ+4V+cV0yw=>Rl+Viyr@Pa3*8@6%x5_&39a5aPx(o5yt2ZFNVD#JlnJ<^CJibUlVu@%% z9-nW>e|veNGMbJvm(PFaN$|?9s><8a@m19Ec0M5W{vr5I6Vd&Hw)`1cGC=%xAp98! z5r4Dv(KzuxYpoBG250eYhqKnBp|jRtxY~|~`o|F87*qHSuz#WOn}@m7_`Y`pr{wL| z;TQJLe%U|!W&flf`(B4Wb(S!==(C>#Dvwqf$T5 zmS?v;+qrMd&I}O?!vk4jDL`pJR9fpfF+wY>RjbT;9ESGJ}-Sj(vtmX-*lY5I&%_! z%#Psa@{EPB>C5&!;vmi|^~IOC9cu)|2t^ptS zkQ|$*>JbkbmfuxC?uo#>k2;U>BjYq;r8txK7Q_wsT_O6xj2)sY$i9f7J?tC7`V;1R z=7>7e#{cVf1I3rHFN?o=BY=l+?6t>yayuM}IsNaL zdpGv6Vtu_UfHU5XfZyM-*Zpw5%-nq#!?}1qi02>0bsw&Ki<%N9^ayAbI*L7`JTLAn z;NSF-z8c^d+O%m0z8$~A#C19EDUU{Ze-iudkngk^d$!Uuk76!B`^tIq2x4bsddFSNx}e8Ba{mY`Y- zR`kO6G>|8AFo-iK&~8(rQRxi8mi?YM@qKyDd-j9xFgF~<8H((KXIbD3XuH4dT$2YM zeHnIoIb?`yOU(?uV~{$l4K zPJEu<;?VqpyjhuBTaG>E-2d^>j|4L3cx#>>KYt)Uji0M%e_GcAtzEdN{yG1~oS>dM znrEL=7jge?)N?Lu9q6my0G(u6&$oa_!-tEWUrpNL@B7J1h?5NQ-SKOh+B!XJ0-v zOP)@0Jza?M4uNkYreW_+SYJatxD~qU>LG!>D`gn_odqvp&2M)c7{*wCz_QmPVdJ?T zSu7f{_QhD-?kbjNEP&r)FUNj)%KJxebJMvmY@HjZiF)nUlZpZUtgK{N_tuw#xKO&X!IRZKaO`__-;I7{upJAV~{$xrs1_I+vcu=&S-?5 zEEbiu918_k{_&V2%;dRQs}~;y{8Cn6E2_m-=-G~u0Bl~$rAtW<{EcsZv>>PC=_LAq z-hTmhp#%1JtMo4j$H=>D8jgRs32?UrJ8inqcV(X2Cr+2Q$-NuV3Y$hw&iHbaWgl#t z-`XKOOFZqc^QoX44#F@I{j|N-bRmo}w8eIp;A-BC*s5H!10@+}ly-siRPvDW7JwfS z6a4#Ft(@0d4=l5+zTn}a2im&5rJD{-*%QBv8qU}T-?O*gl- z0td|#*zbdw0`^c=He(!5!L|(s&R=@(Mc2=gOaj3`yF$=g+v8 zlf>dzIsq!?#ZLyLp?&@hB^lG zudvcF0`gWbbl*I8GH<>n@gIX9ZwnfyuqOzz*QjOBq3dr! zC+qL~YJy__FwRRrdjmmX?T8(ka@eGuyhQ9+j_>2ea>p_*$Fdyq?Q2^p$C5J1v79bt zG9&MK`ZU8s_E`2;EtmFvdsQ#4^m8cppviE4*;o4O_^fi*_=?cu9N%(|?;ytal*u_4 zs2x*3@-JzX3O;C$FZ<^lLeuOhbb~6Z+J9}z&bjmtk%Mx^|7KGnXf)e;B0ml1h$YYy zcP{pU_EJwk2gF>ufpo>+SSS1#bVGj&4rL7+Z5hGUn%C@5{`(gXPRWeMx@l*U9z&DDiE8K7qrio}yU7>ZZ=I=7Jkz1eT z8Z&G8s=o|e z5M?D-M*6T1U&~1|^E5@xXb@wOD>J4`X0ZPe`tQBTOw5*>Ek8bt6y#gmXSY3}oyccTw9l&T35FbUMxQmmJz0K{a^gpM zuJO%)AGri@Gq)6TKlwN04}UY?bf^5gTK+v}lrmL<`&_xwGLCW26Kqay!8h% z_Ov1me;)A{oNEQ&-DA(kuCnt}i-8Mav3*gOujj}o+vj>OZ5i_T!?aY?#$Tn}~j7j=5HJiq_M+ShS!wJ-)G#QY&Wo=37| zw;aA;V_PsdJ<)#@^PNU}{`mvP7c^0RiMRqX${1PzHlSag&DAJAgKt1$Up-=B=3DEL zm&CjpxKl97|QJ0VA#?9q(F0tjl8&~Rcotr(G9d*W*@{#R-a(}(s|5S4C=zl0_ z&=S6vtq*+S+}gs7j|%&W{Zej!^p&Ugx6kE+mUy#iosrM9OFoAj`8)>sJStvC z40h+-Uhn1x+R>HX`k@qH91wNGKJhPeN36Cm__{%TL+~R*KJn+I0rHoyClYfj=7jr1 zBW&>W(VqIt<446kXO4*`#6y-sCoRq7O$u>#cq_hPm+C-Hbk=^1nxSGbigklOKf~u+ z;rs6Em=-$H(KNKL<0a&zeq@yApcRXsATIoik$oLQBY1~rYD_@~*q+%~vx06$`~l-I z47wp+{=zWEV3<7P$eJ2YmeKE&e%)T>70p}w3US^CVgOeCqjT@39+LX|sT%P18IFfq zA0EV>^WAA_PQR&mgCPc(r`j%W9k=)G53iwOxSRq8uC(j=9hCG z<1z8l2x(g^-WVyt&!3TP&5xLib6zW&MnPxr;nLC58Jp$Ee_HZ$Bu0PwK`rm}r?tFK zz!zHH_vOetc~JS#_h-rbddRyQKP~%CJc_XcTlUi~*&lLbpYbT!{!i~u(zd$W)A3f0 z1LHcRdDy0PKKi<4`~=RXV!N;LoGZ*1f8;)^D#zdDcx#`RW1G+4b;nNVkD@Vr0+p|A3 zo|12VsQCHf;wfqJGkjZzXYgHBR}4kluO&J5Qu8zA!Leo6z?MxMKY1KwIbQUU&*tzm z_#(@$T^LB43}jin3tGPcRQ;tmHN5{@0=V_lG+>>cXjxx{Ob`=pt=a zA|;s68sixIL0&)! z_7`xUEY~!uVGm)?(gQeOVXHVlD_@o}sL zzXUzj58K-u3PAsth+VL6-yIR+2<+R(N7=6ru^;A3?ZKJ~{b#m!tm7J-m9P}~FU+&p zH5Y%69>qFiG48p)=qTzjH+LrP2hk7n5Wy!Qo_jTjvT1w=yBqb{9`y^(4jdZ9Gpt|8 z=PSLu)@ST1?TqF#+AGTch55A(zq<7|jVng`vQ5}Hk0GtnZC6fUdlv1cxSlarH}3CFdN>}E}Q%-$0jd9S=lDweNNfU80XL0zV^#!XVa8{ zR_Yf$@8Dd3_SW?`l9ynI>xWkHIrPwj_I2cpD}I|}k8vJ#+6X)iUt=@Y6kF2UuU&`l zcB(aL;qs@npQdu59){1oBe)y$BY}A}bzapAPw75+qvTb`yHq<@)iNhT@vOtE zSE4=L7VDCxt&R`kMt)MxBc9J1=j$@$m4=Arx&?Eh(muW1CgCuexM@9JT*vU&yhaU1f_ zxi{~v6!x6Vje4=~24|aUT3l?rG6lKRaf?+G#VsaSpQCS});;^HMr_}%81QJ_KDlqF z#w#~o(VY{oQ0ty7tH)QxD_XPSm(F@wPmaH(&Va~WUt?h@3Q#$Z!f3G};2PX6P3Q<<}1Ap(ijBeNXEB+=vI!|-_K3u1NEe|a3 zmhr*yase7U^2738TZZ1uTUNoNW2c(`3UmBN6*pv+?v_u@t#6zt&Qds|v z)zfdKzQFn1E&Sft;iBHv%yq=y_tSSJJRPtVI144Ld`aqtUg!q;mX6Qboy8ZWh=VS` zn)v79{ikDC6E9V3sV+Z~eg)2?A2Og{xZlx;Zii1*5yIc2eyJzA%*w`AsV8ofdV>2n zcFkQvJrVu|_TsX<^7WOj;5t3@>IKXL*SU0sIgze7J?O0EyWn=~inF$^@B^llZI3`_ zc@8@CZdP86W2Y3qu_t@H&VVoVZ*vfz?nLg*?2OJp*^J&eEB#KrzHvC1tuIP3 zKU~n(pXFP{GVAL~U!V`P-=8C2TKzp%VpU*wOGWS3`7hezAp z3H)*F1x*aH`l1LUpQA4XeaIS)s8}UNIpg%S@8@_-+-9YX4&zl+VT2T>81kWp!AUs_MZML_ZvooC*rfk zkcnsA0pz4}{lkMZP&iNIcj;eDSG4&gycHq(S!g7tevw#ZpfoWJKIaI|EMuH7pTGNe zHauFVYJGt=a&#ugU%}TS^N-aT%I-GZJapg0?V=sR7>V`S?L3EhY7h1w^@(lJp_wya zJSh~!znJV@(ywstLZ4VRk}hIgab1;J`b50Mx7om+ z-Y(19KHt3DjQe+QYv)|tn5N>i1K4wa1pD{7Kk*pk;Ixd#r{)Lnor@8~W`*Ykd^6=| z@jjfV=<^&ubF~mBUa&z zxBA51qE(R1CdkiH_|dzo(ufOOjT~N&7z&dX(BYjQ6!_TR8sP zPeSJ|MQ-v*ob`AT>x|C%NHOexJztsUkjIQ5jMU$xPbK$HOd%ZgUBm(Fe8z)#whGT4 zlxu@-{#aWT-S^qV;3W^V5jP=mdte3e#l6I_-0H>HDE=djOR(2wIod4*t~}3f3GU(7 zHniZ1Jvk`*jjBUa<@Z1lS9v~cG=3ZVQ8>Q$bO_OeG3I$K6&PclmAMMEtVeG2D$+oX zZMi&CMfC@sfv+-q2t0QRJa-EGHVl3n2A>Us&xXNYQhylzyOPgL-Q3`R)l3@4b|sNh zjs6V4-?XXNgLT4fYumy9r@;I2oEdFTZP|$l8^5c8!`&Ej$XYG^C*>F7+c1E)1ZOE@ z-5u+q4Ws3NeH!)^=i-M%BD2iazQrqy1^p z34RdTC(J(l6#m2u`(q5^q0WD3d~9#g>lmlqRc<<}^VI{WN1hb;F4rLDT?0X$bD{TF zlg`{f;(w|I=ftdv(=K>K<6~@Bx7jV>ySR23U(oRW6>wDf^Sg280nT=ST&Z^oAFMs6 zS!Ri-gse3urUS+`Kj8lKEr_cP;2ZEK7YWA8a^ZezZTsG$$J<4wFV&ujwiZc#QT_Ev z__tT}$ZKDf!e@U<<$W^$ItiKha#aubmG@ld#@}<9k40Jbh*_NviWI*4qU3&|l;>|$ zQ8o^p#knDO#S-RS55i_3CsE20#w!C;Bqqc&RepS1hkE95oO?!jxf^Zaj4^wRcUCQz ze}7E!`Z39Cq_<6<#w^=cd`OQ4rlJU%A)*6HSqGdES zrpH>3r=mOZd4Xfy&|jacOmGa%=9}c$M$31{d0r>^a-Q^MzESlc{95uZ^@2D{{9gJx z^#FO&&C~4jZ56YM37bCVT`Lkw2a7Bn9G7sB{@Bl9kNrwqy?{yOjw*OL9^aR+j@QvI z+4k3C%diLIdo0KQBF*(!koKMDfH%f03LZQvN+tbMnL30ghOx!jhu|A8^f6)g%6)Jt z@S3t81EZRzs(d`-(?w!l>=*MwFH)9R@9s=lP5;-^N5x6(=XoA7d@{~;nq} zO^wtghl72t_LT2&Z;iI$jH_uIu5CAMb^x~8p@Y(Ce@I=ePfa<`R{9j@Glfm)Q=HQ^ zid>?+`gD&PSE-A;U3E>=?MB@c>UK_0ca^JdqpL3F72!tI4Wh0wLEWIMZp>8|d$GbX z)QzI+9&1t zSNH|glvB0=EC!S7nKFOu<{TVxjtadVop$GahZRcHZub*1`=$Z?EK;}^oVqIRi zcqkK#ko)`)^Tqy^Lg=~au%SF(vKaTp0j&Sv?6sM=KMJ4n7<|cG9@Oh)Gl~y{XNWi8 z+tomi%J1VgF!on%%eIL&Xp?Q}c5>(cdTycV$JjMv!yFHe7wIw2)^pk8^I|>a5q2u9*20y{^Ncd> z$MUQ)o(-bM#Em=4Fm}RNPHwrw$WTf~FyP~Wm$myD>fL1Fxh z<&KYD(=c&{k6vphFY!Dd%} zAqtt&aNs`8bqBU5MEeMF3zbwRp0U>0`GC5t+Fuh5tc@3nzF=+}?!Ly+C$D@f{s;fb zbx^J^^4nU>r{}k|sB8RJt&NLf_3f^*q878P2r9PDu3pg3 zv+1nH2fPd)sd=cIXVoHy0&;b$;xjLv`$GK&_T64qk@#kVvmdk@<-PaeJ88(3#9n9n z93IId7dXbw`0{+)>6r6mE} z(CJ#_Y=>_Y8*%@%++ScJ7NX{Y{Z-FNoBkyDwl8c1_9x$#XXq>W-FU;7;zs$--#`h?wSm_=bguXdkWIvkbh8{r4_^Mvn!)DL1zl^F89QvS6dc?MIm35w{=7JWsWs z6=N1-|7>e-(V4h7wl=vCXUsBBI}Vz7#1z20%fvTFfhXgXzBa<{kJKarE`NpRC1Ot> zV1FKGx8m#)j}aNQreVzcs~*R^inQhaW8?I8jH$prdd~3*H>q~l1#umDF5^=~Vgd2= z>VVh@p1VIdf-@NX*K@8n1#`_7#C7p4XYh>w`jen5zU>y730hW!s$t_*+%ys!waSO0 z!RHZA*byh+VNWyqdlI<>`|X(Cp&obNgrBe<0ewM>;V5D=;0>M?k+rT7u+RDZsI(Jh zS@6$r&968{(PP`U$lZ308}6YO&ID0*2z7?`7X3U< z**0aHkr?4-K2Nn=7s;mEI+W4y4|+BthrKVz@{DcegHxBatS?pV!I+Q^oHH&%+l+VM z0mgZ^SvS>p2VI&XboC$~ zJD0Zp%58Fg#@?cBaZO_(c~kMHzqvf|d(8XUXRqXwifdPijRyI7A@IBqnQ*sPY;A0K z%{5*dZ@4<4;9g@K4#Sq1FE8xY>s#?;7bc4RcdT&au8*7_E8ZriI-W*PlW`V-q#hO+}i<{O$CL7)KDIQ0k z*A;#6EeeM|;l$woA@6OVqrA>@(LIuk214Q?opqx4kHILmBuJzrTz7^M=#xxhf!*72 zLmKK*d-${E#Jx*txap`GX+}UCiO^n=_~eLKHX=e;P}hg9lDlXPmarXyd%Swc&*~vD z24P4&l6-H~#7##CGxvG+{`P!(ekGgSv+i1#wZzPP-~N5~yWju)ZcjFR^f}dz0`TdW zGki3>2q(hG`>UPu{v+lpC7cK|%qyJ-p)joS!K-q)mX!#Hy}%is*Iqqu_xh4uJ&`Wh z^k4c;^%qZ+*L-oTyt-|5*}5-A?k64LecsiZsB^8J*S-GxyS^E@^YoM8EsURs&T8l^ ztr$0dbL^CLY3ujLk8N7 z=g5Whh5I`q!FQtPUC6=i8;t!7pCSJs@V^v(y2JQ<731&))LlagURK>O#!g%A@Se!B zYUCUcO;+f+m_S{Z_z~P93j$W%kyywomvTTIo_j*4qn=Nnj-C~#qx1_2@g(mcqU^iZ z(F_{v!85n<40mK$6?o<`o-t0(hi4VWvxVx}INP>DgE8K%!T5*ec#iv=0wLeJ4hwf1 zz^(y!)hrj{L-6sfgB|iK0oHjZwZqyD8|IE5Z;AM%Pq8Wda^fb;cgX*`qO z@K-eW`}L$FI^O1^wr`s_Yw8IKpL~I^;s;r}LN5L*`U%+$=j#M;knK@t(0E9D3FJxe z#8WeVX^W!Xuk03xF#ug2l=qgLM;YoEv^QZ-G%z2R&chYQJ4sWTzl{4$VC#m?L7MBY zNa2o|AK|;$L5eZubOOBuO()JL}k9+VHxfe}eyDG2Zut()S{b5cS!dAmqmDlaE&C^B7 z+v8JfC3Q|mADj<3a80Odf`_MJ(gxdG75JCWIA2Mh!gj!wb2sseG)nOxHTDg;V=?fg z3G;CJCvDXCJt{q;L+b4j=pGywd90B3wZYnRSmy=e@@;jnD_T>}#jeP`vI+1SLryxi z25rbcPzU;oGC0%Z(8U7u8)In---S6+w~ze#hu}RL_qsB0g1Fa*{%a7=61luT_7TJ- z9tU0F`BPno?db3Cr+;0CbHiMddVZDi{u>3`$gfWWhll)nU+Ov>KgSUHRVua}ckb%v z9LtU$r`q*z`;Ig@U%g%*feyenZ?*TjE(<&}aHR=#?uBl`vjU907tLYupW%ysrm+P1 zl&;)$I^zAznP}vXzYJQsbQ&}X{& z{W7xvxUS(w+}l;UqtS=+6{h`&bb)=i#9F}bk!jlBKMDJL1Ujc#&Yho)xuSga@Gv^q=9KG15tW##x;hevQxvs~!TJiZnf$^=#Gd{Lel5PuUOLF?x z>s*aKj3MdFb3GE_e#y!ojR^*?6@QZ4Km<$?dNK^X)_60QZk- zquR!c$Gcr=el}Qp1$u{%wt%sNF-!WID|>vH(+a>eG*&6^jRes`J0^cpWgyc5Z+H1o zKgs(eE9|_P#4jIm$gqAYbpf#@FCjhx@n{D9T^XN}c+pZ$LMEbn#RWCw1U_5B6vue94= zS>V0yzhHd7tMu`Zf10uzdAe8fbfxDwGK?B8X*}Wabk2CNx@o^+W`A0y zGy8%5FZZs~ezE$xZ?1*v|6fbu_&%4jD4Fy>mD&ZH+LO^#=^@^=(75Brrz0=T+qIs# zJFg?ho5zPcE9!Pe{mr|gHJ{#T^Au%2);J-`IF2EItaPqp$b<*^4|QRkKSIkfjZ(gX zuiVhv_chufI~x6nLA2nbM=ri#Wa;;!%n`T& z@^g!nnYT>dBW^w57cUO_#LVPBH=aaJ*cqAAf_6yn#7N9ajL2M!)Ma>fs0y)-bvXYV z0*?-Z*T=CJl+KBK)i@((HJ^k`FL_^=3q0Z-&^ZszD_Wtyht7|?4pAoZg+G$z&PyMa zL*GK@02YD4Nsg@r z?do?NBcF4e8)0+ebFDXOcq<)%=lxyK<(5FMSNoak%Ju9oQ+tYQ!nNhPaDBNpx*y<} zqBZm7x3Gz?9N$3+W8|yD=gnewEA@i`z>PWDs?Y~zXFuAOb_mF05#HUgY%m%L{u287 zybi{1M-UeY*UuWXx4h)zryr;jr!D#}rm=TP$2cGQ8V;5Abntx45*y|iqpTOX^(&Bf zw{)OC=!q(~Gj$CG)28qQVo^=_YB=ffNj)1e>Kvzr(V3eRY{L0qA?=n9{+aYXO}8X3 zQSkn$TeX!<|0P7zbUc51l%3;}{wx0RV480IGOb%MPdM{CQm>AK&*-%~YSSRf%Rc14 zb?A>t2cwKx!yRVmOjsj_!Q*8*%hhrJ+5_uFbd-@lOAdNMa7(XNE6y{ z_@}mGx^W%`a&?d}{4rnvLyIlrnEF29Jpi7w6}~YC4yGJO7+Fc!#c+0*c3^1UtPK27zD(F@WiHw(>>0e5d6GB= z-M@pYsy}o5EKmJ`&cr_y6~;OQ2XU5x9YA2Td<$RoVNpposxk(UhT zJICXq2lmjNNxokwNQwQ^Dl!8d=0XvIS-tadC$4Ss$O%goz112hSD!9(9#P<6;eTVG(G-zI0)}At9#v8cH$N(rM0SzT243CtOnyxs>XcC13h1!Kl|h*=NvceM;7;L8Sl3` zyIVH`a4XZU7u|5Yvgjg8t@cqOfCsQGHRkKsAK2ab9E zIM9OJ&VTwvD0wNBKa{>Y;@=+N?Qu^KxY{G{@*edBC0a^{&+9yPY-z7(&fT7?U_qXf@4PeD*o1_j(Hv_2#a9}3nfoMwvv8JA7qA6&&A17IlqRzqcG;G)P2|Gu z`-R{p>8QeYP5b^kS(gHT0-49hUjRLl}E}QLG?6r%Xh6|IwntuwDq8 z!G=Zqza_*8$xHN{|7a2CtZb?I`%v?zEE8We5~Pd+J61y#_~Mz{c?TnG>yV+!#L0%R z0iOrO>Q(VY`=3V4PCd(XWBkpvkI#hghp|dJ6^HLz+&Yj!S6DuNYlpwNWC--c(Um~+ z03XLEuo3uBCK^`#9(}c+#NA?_>`b~pxmw}|=^0?S595K%tnQ8AS}m0OR?X*+FdlQf zEXy+VgX{6puBZI#Hm%CzU#9;<(WA}vdOfMzay{a;_e#2YioC4=J%GFmTBP6sJO)j= z+z^L-F@Ea^V5{)6WeT+9-{Y}tTCxFkkf>ST;MOqsy-tDp^|w{P*cAcy~--frd4 zpEams*))QFj(qy0xqk-8ziJ)2yht@K!4FCp zQeV;fb2IiI=s$Gmr=uZT&tgty@-6CHpmo7G_95CtziRwKY)jkx+HP%&PJ#c?@5A^{ z#?+Z{n}8ws(O@n27vW6#yF?s@zHXN8GF>6Kf~{-)Lj9qc_?-U@G2Ka zT1TZ^(+$7XGnNpa8;>me>nQ!~!+6j5!2vuk7x#U&59N4<8t0rLJH4H-DxQO#qQ8-T zf5`HUCAizuCGNnTIP2Pc;*N-0Ebgs&Fop5mKh8M5N{*ol{(6oH_v<#x{_p#$g?26L zS^BQg|3rd1x>fZY@=vhbb7-66{AFu}?EiC!BbcCHUiA+-3orrhT$&7L;ft;JOvAsL zgq=94&!)E;{083>mT--u3}p9Hp!)~F_qza36%r~>QDDHGad{1pcNgL zv^Wl+>H3-;=i^V<^MqG{T*G?5EBIDmp5*P9?yhco9X{y|m?v-#dztrS9jSdD^VIaa zS(IY_KG2k|8O9ATew{Jvz*pekSTKY&Qg<$^ycgipxL4*dXxlEtr9Uri3qIuZ)%0zH zczB#Sf347n)Nh-`9WsZo&YSV7wC$yWtiv)aJAnMaq_^mcdjmGh1C!`q+7U7CNz2}M z95Zp7e23%Jc0Z1r^V2phj=k0u_fy{C_;c{Gj393cYj_i0lywQOcO|?^$0<(|F3izP zIab>C5KBTD-Hi4v+22@@xI-VKh9~4T>_4?0I)Adxn@l^1;t$BD4BAgypN1RhYX~w> zq5R2cSFSzgNLe>+|HD`&*%rnF`)ejYV;#OT%d;Houq=5XanXdUn)l{!e z=G--GIoBN6rfr4}eA&LbH+cuzRp&ZPdNDh0XW}>IS;kH>cMR-(K`ra*`%}0N4`4l2 z4p8PgJlW1UFsBq_U3k`%@0d$U=N7v1K64H}h4LH3MdXoc7{8tpXfup>+|!XH?g;aK z=C!ERdoF9$a@Qc@ zkDrg#R6G&oeT>LgfP4)j@qT$P_U)J#gB-bbyOYmL2w`5@P6ofz54 zJRx(YN2%O6T#j z?;EJglW#EsnTP8v^L6R`!Ugjes{3u2A6V{T=+mIPNfQ^i_V{hzaq}E#ej{w~U5ZcH z;~2iSBb{gb0klQ^NZoByJg*_}!(#iq`)UK@s_i_5?4udK`Od;8$EI`Nm}BF(NaL92 zMwXFz#$*0`Wta<$ar9GWp2Ku3awh#DeNpu1a$fpF`sC0bb$^pXe`tToy}#*QmkF2I z^Vl6k`2m>|;|SwVfd>a`r*L-UIzE{L^%J7ZE;UAe0UX9N<_ znox6x)k=olpD`~r69#`ty@QVW1sDBWaOL4{pu&ii_GUoU= z_96FhLhnc9@H6va`SRq$+GFm=Io>zLd{}xvLiV97l(i@Advxra$$C$sY{tIq&7u!F zpC0cQarS8O{K>bWtj?#mBAqKh?H9E#JHe~sdG}oQ{TI#{*=n zIAxYc_EKiqAX1<;Cu8*`q%)6z&Kz#9!JVsBxC7Vn!JZ)byM;RkVW&m@JjxeU$fM7@ z>3Bz-z9Wb{Ap4#mQ#t7RoM)#a#j9mHR{oc1ldV~Bfpl!3`_r^T(gT_}a z(~3OwCYq1l6u=36za8Ra()1>m)|mW%I4}Q?WaZzBpuHUWl97MUx!-ON$|@OPI98d5 zzL@(zGI=OQn}^Q7XYzT>X`=Yjof?dOyC6n#`V`^>Rw{>r;m z6fQXUpmKiZmti($mDl({`k#PYLpYA%Q}Q$98PDZspJ?;eU@uoa2Yxmb^CM>wbdA~w zZw)n$?Mt(XZjH;VQ0kVZr1yowx&wlzw;^3PPW1LRK}kt;6sQ*uF3X;P?zD_v8{8E z_q})Sm*;F**4wlgW2qcB>p=ILc9)Fw0!EO@>ASD*;@Ds}U$zx?e^hkjm< z^V?zWQ=fP{qWJod-*4|Z=2|)%=yTF|>*nAQ)PAVP@ivz(V>>ji`(I&RWw#R#~uI=C*^30c{#(5h0_7RC^ z74R{e?YhK9oGsWW@1XBS`{dbiF(C7vc&}D>c#u~Yaf#5`bMuN{6sNic@BD#1fjT?u zQYVT-HvOPuh{H#MIU*Mf&KbZSBwS8xkhTkP4IH^jo&V!H>Uk03(w87%-xN0Cui*Z& z%;ih}G3{oX0CQ_mC+0a=dlYLB$Nq`~&V7KbvODfi>llpD#5tfw<^w$;_hdsC*XAf- z(1Ki8V3EYX+Sl&tm^ z9W+1WdXUd`X88{K06(7P)Afh(`-Jhk7r&o3e#h~<-}tTfBywWG4pl8_k-h`NEp`Jh z)c(|PWI4(Sh3+JW?l(^O`f*N+u;%)6&3O+i@xjCe(m&4AZd>8)O_+&+4;p`oyW}hM zi)vq(w&yp%mQNb`Q`q@vgL8=^%dj7(y`Yt?u=S&EMt%`Jr?^;b*h-(xnX8_&98o&1 z&7@~bmuowx9v{y($~?Nrm+HZO`YOgtd3OUy+Q%76oVTN25AfUT zJRd|n%d=K5_77vf(O$yjCFCL5`-%C8`waTM8GbI#m-oy?EGe_6fE9isPHs=Za}kWCG0A3PL1ay4_m?Sg+S`|l|{J6Pav1qQ;u z?Rc+n4E|okQ}>GR8T4~d=I;=QEhn7=eQyj&+S8FZE*`>JuG7+woG~Y|O4DCVjeu z{n{+^EgeWkZrut$8uQ?V{meI*FV~9&I#dL2oZ zereO9o^;HjQw~j%?&1Odg|pk&be!!UFxm$VEiy)De9TS6dN}`Pp)K(DuLO40-rvPo zPWqkMek&vv-&OmeUZ_&bjVN3o)IgPZLK4QXxep4ME630ALj*Xg*JtFHoJmgiz zq~8giL7qffqsQr!{Kz?fPnwSNk%;rZoZjQ~SJIb>J`3_C-JZ%*(up%8H62m=%m~-> zPCJ)iHwD}Vg8}&Zj-x%9zYJ%KWPDY{ zNsMs^)|a}%AikTq>=a&jCzf_ZZf(I?fKIH%5$Xri#3|~D^32v39_UzN#~)F5aKk4M zYOX@A-w}EK5#vZ;Y?8lwuO?y^VU2h*+*ix_rsWw2P94b*=zyLR=fSZ$@Adx4#lL3? z;a@4C@8F-7b%W#O3Hld?6-`SdbvT{DyaA9v1Rf-jRTCAei?J&`kuyK#yDlJ zJ?JICO^y|3!}h^v3*GZIO>3nb!G1NoX%on9hj_v^IA_*pTWo{v>3Z*P?oDBHeMkd1 zZ?2D|53utPKlOZdAEe1P?F7x;pB^)5vBXWRsV+-fgTy_o)eF-iGe1De9Lm*LEY zi~+>==@*)JV=f1I23eM6o^O*zk#4;X9?v?g`$F@Aj#bD510QuGWLWgkHN*VXTyI5t zoV~2-j35WlI^?3m-56h3(_ywW#W4aTc z@8FYT+4Cu36_FXTXd z{?e-J0d2#xFMJL*!p{K)k4(Q1x|{n$o;T08E(&J*k@s!L?|o}mRIZJ|m$=TE^W#|` z=Uzs_h(5&G=hPG?en=QLzZB)&Eef6|qAEr(7iYRrhIPmr&Pvl+59^i(F zA9|k5zk)VQ9lNMJ%JWCmhk5Q$^Ge!toORj{Sdgy_LDm8tr)Y?tk8e9~e0&Lu(P-_-c`NfA&7sHZsfDW?S3% zEcFY~0GtIbNc(ze0=<>(w>b8ObO^V7cL zMb_l+=g{xyto`;Br2%Jdu>RTiSzp8ST#6nXbXk$2~dynD0Ay9;)Yxk#|>%yqhWV?pl#| z?-hA>y~w*%k$1vXnD)Agyeld4uC&OzGQ67&H{Gt;Xl8!gSXiXr4;Oj&ks|MIp2K)O zvyL}&FKAq@DAMo8i@dv~$h%wfyrXTJI*ZmhXm6$-$Q;c1;)`=^Q8KpEu|H}3OzUQ8 zy$pI-WGQtsNB^RJNIN>|hwdLbjnu<%uVGQ%sN@Yt56h-Oxc{qY{cL$7yME~n)-Suk z`ZwKR{dqT7zx)R4yKk`m{2Q#l;0Eh|=mzUAyutcf_x8-v&TP83*3ByB)J|dD%r{GY z#5fj}%Vx77%vQhZ2K!$=YyC_*oJ|itd4u(}&96=@E=rf&V*a%0r^z0Nf7WpnUx)fx z>lcTEHEaE~Me(3{*80W!Uweb~*UeIYHoju|o0NS~`L2}Rk7FNC+c!QKFKx=OulAON zrJawq?%t9uc=vwKkvi>>Crh7|JkJ}G{%rb%JU+%YT7g12N!Df9)({v3Ngjo$umzP!@J*-zw&Rx`P z7?X><1?gN%xX*AOeIUepj913v&_1levcSK|3m)&Q~H53 zNAQA@pC;%( zw~&M7wws6>?eSjRlkOI8PMkw5Chsa3ML9R_Rj*upF~T!t-mAYxez4b~?vkJOGKK^( zM!h^=E)bthoT1-`v7(Xtm#2OI3sGi4$!FpJ>#2=OpXAeV-Zg?)F7)+wI1M&Tl_A@(Zh4;T+0cp3s3S0;cb6Tr_2;K~H>WDuXb|(>v8IJ=NfbED^NE3yoWBE zwCAg78|IsisnhHEuJlR!Rvu@c%qea3MVbdX*SlPvNAj&)fifl7H_P#f9D6G(@mYq? z+wgf4_Y*#qO<;4qrZtwG7l-tVbmxrC6G+D}21(0+pOTINKWBhrX&N>UZH{7m<@h{~ zPwv^Ha=gGU@&yk*jd&!|f2~81H;@lRkh6+$$6Cja1g{|m`J@xC^w|qCHffXO4=ceR zobySFKP(1scFxCW*m@8T3)-Ks>hyV}L$$lGFLl0EAy%gMAY#sj`W z8KzA9$zC_^USM85#?8;KMv=c)V;}W5dcrQpm@r!F2>v?7r{?@z)w1D zeiB41OJkC`^z!qR&fWog&zt*Q%Pe{P_hA4Qe@*yv=E3twoZmH!mF<;@Re+Z(VYW#c z$#%^)QEo43i;|0SVR=R3jqWe^{T_2azp*uD#`O|rfK~5#*#^g}WDCMW#Z(UYKjwxS6+RpJz9`?&9;MGVNLd(sS;{qe;ySyr zCOWS3Da0pc+;j9k<2pA&ZZ_jXs4r;!fa_?ktt0Cyc)DzQYQ}eN&x!90`xoL)uICYR z!}XGM2XQBQy>uH`BL$aI`7NyQ(XrqCw&AmRj&ZNq@F8pnBkqOY4t(Yc6XKTxkI2&9 zh%a^SMxbmlj9iX9lk_(qckYFiaW=@ErQz(eX@kT2ZMaLYJM9zRN+(nCMWkU1?fw{N zR7fY=lZ8+E+?bMmd}u@EP9^+uaSO1JaVkUpxQN&5F{`?<B<*xnpPkKowJ^>-;RIUkAR_J;}4ktE}dOG46HpG3qen zZ5$8tHKtNqgIouWXD{I154w!H$o;*hL9Y4O816l2==hsU&YF9#z7Z?gcDcP|+l6+k z;-y#uYXZG^739oKKIF;Zx!Qx0zW);Zw^N=+x^mZ+NXsp$cHXn9$KPtt)q8ad^)Gq< zA;vseh?f)}&$t|qm^vKWZqtHn9r6!tc|rHD={t2t;o;eqA>j1$YD9q^mG@cwbU zdovKC!4}tU$@x0lWWU$);M-uytwQD)^edZxYG^2G$q18 z@_^Ozp8HZA&OI>?gFHvZdkf&3XvNwelWqHOzU_~3=k7yze+Xmx#B}7RYhuW`i9VN1 zU-{h0_Q)H&S5(KD?#H?4ZS9O>CaqxHv3`g0b{>F&xxJ;YrV0Dj*&l=%>NhZ#uZEqBFNeQI z?}tVy$MJrk!?m#gfG6S%K=VZG40s~%pY>k7f@H$Dcf9!m&cA&#_8FVzXZx1A<#`9j z@oKoq`z12@B6Rpsdp{Jy|6ZJ>(QV*6VpK0fSI7OM$;WXg><-|@U@gbQJ3Tlq^Ii=; zV_Bs)DEg&kdEKV|6gGY97E7RqGfq?CT^RHR>lBcDmU{;Kr3(8cazD-^;O-+`f44q& zVbiOEytoWK$-eY>ob`z;-3i$mF`S?Mp_HjFVJ&p~z!~YQ%g-L!`?tTg|L?3P?~mvHRq}(ne~ngXi<2s+b#8uY#Mi?%1-6MhmSKNdhFE3rxSh=XNL~lqO2b~Cyn}uRWKP=OoY;Qu z!}TZ!{Z^LKas|%f?1P>v&naV!I7{AzO^oySIu6*r$6W6}J?>t~=bOTed(GDu^KZLu zs4unuC>!ZM%g`ruY|_a3g#2*5U+bQ?F@Hnx(khglMKk_`nhsDUZK8!pFJo|73 zzj^)|+Z(^__5ml|K4HZ31&D)wI`gc|V6C!ijy&xWBmW26Is@Ao&wFD$lgAAGF1sGi zVp#SapIP@`@m^N)_ff<}Z=+4yug77w!E@7v%IWfIE^0m;5A7D5r-IeydaN(zyv1KG zR`p;%P0tg5(sL8Omx$bxZ~4NP01va!DCj$7)bsBCY6> zeEu5tWvXG9YvfzRxizru)|D*nQh7vrYPa$ZP1t@k4CL7@*hoUg*^lET7jRyO=bsMA z^2bX$lYYpFIHM5s3s(@nT*x{NIEz=)vHcF*4R-c$Y&mS{m5bN5V;{sLuiS+F@lcR? zvHXU8jk(fah2AT~MvU>HhL8(q#SPmUZ8dsaLPRHz9PzC}f8$4vRBt+syS{N&v8xK_ ztp`MV1DvVGpkmr*CU@ zwI{=_cK9p?{65Gs-p_1t;9!m;>mIqbTic^?+_@G99?;hWKSPjok2LIf$?9pW$K+h( zezoVC!iWiw=dAD>@N5hUne&@8MD54Q#q$*$aSq-kDgejb>2VT+DF~5sGCEitz?|a>_D{{?% zzcX4!d4FrA;FWJ5f48KtewDBMf0=XnA^-QX%IZBq+6nwk(|qDQ@mu8=Q#L!&n19c* zrRn-uFGXwI@>>}H;2&SNbzgaey#75<{I*> zY=53nZjSZTIMI0a__Y6-bdYBXIbLZ4ST-W%YefUAVS{}&Vfr+AuO#lgPh{%~9&rKB z_Q!FzBXi@x-h5X^-mEb4W>qdOMZV0>;|wlxX8CrV~TY0rC12Ib=o(&v91-qXC|wB9m%a9d!?QFA8i7>(?X9?%YYu= zs(ok!vP|LgjvNoqa(k712e_c{&3ntEGXIyiX&zw8+)>Q;b*T4U+g`2vB7eUETN1}8 zr2SvT7UEv12>1imZBX9FtZlqJ)9zizyC8W7{RPNCJL*BJGtP8z3{}393Ct5bE*jnX zv7w0W4`#uH56|^)pYP2X!U|=j{YTwXLHm^>U$$b*y8JuV3k;_YT>Yxl zZQ*~!U3Ij%z$P^P1o$T9uWp%}>8%FlGC?l(t0DNe=!cIiI}X{baVEkX{`cO}LAxIF z49BJX8TLoui?ZMo+aUSAE7>Y#`NOqOU=LZ%FCxEHOyVzm0;`4i=Lw%!5)`5@y@qoA z=`S>R3iHd5&(Mw_L~K)#7y9{3bzekUycA#7z z+UiJ;*_7qs2TWl86M)$SV1_eVOR#qvA(M7Z0%q8MrzQbgNppL#7bAZ?*on26pbd($ zFX<=SJ9x8mx4m_41m_@ezYbu>ezWt{MDB0sP-l15e$}v{tjO|&JJx8L^}FG(WsXHX z2f%x!F0XJKJC1(I58<-_zwwAy{J0|zI?Yyj)>YAH5r8cd`&ZfSX-n7b(#Fg?Pk8s9 zTgqdxB=6np`~Ahy0(>YhKOqmnzLIz2MIdKDUJf2WKi##fdZ-H~u$H~G%5FA_?|t@n z*cc^FQ(m=zj~js7t%hFFTl?N5aR@My?J%EHi24Waj93Buapr-$X@FBNj5XlAeNXK< zvfay2bsG6 zh5R@S+yMBcZ4&dgaYL;y_oqw3aWmkp;NDmJrXO(FN1JJH?K7ym#c$40uL1k&t?fv% z50xLQDXgBYLL84f`YLE5f4f8!HtAE79GCZ&SQIb=9;>??h^u-`EXy){&-%@Zcc}G~ zdC!`{ro2KLL>-B7O0w$Z52M6>uav5 zluc<*l{&uCcb#^WPOkJ^HMdIaAIb={m0)i8z8U!|XhU(vA@g|<2MjqZUPPu*@~Gz5 zI4_>n-cb`@OF6lwusI)%U&P0`^Ik_j*S-WbS1$fh z#JjFL>Rq`F{qH6oHU9VVCu?g0-vF)QU1Tn_a~ksT>8M%%Sb_SyUneAK6k<6+129i% zPsG@!Ne2`!)A*s_|KH2UFvcPO|CS{SsdktH#cbzsNu%s`6wXN>XXg44$ILbQTkr!v z;HBWX132u!x)6+&{O}jhZli1TbzK2ciH^)clx#Mfr-lCA_`sCIG{A zfccq-w`n93-i;|6-fUCD+o?}@=c}*b&3#JxMp#jIqulnv;2le{E!~dMhQWLF`Z@Ug z|0j6+aYvwu;~x~>+{3!94+3x0k+wpOzr@${chEB(^Jn62IK2nBhJ&@svEMh#```-F z^)x`>f>e5nJ!ygni0*ROYLr zel6n9EsF>j;wbvz=NR+*%HCcd1`TWh4TS8RLI2ty*YbWJ%KIxYuK~~@jmw4kp0i*7 zLi)eKTfj$5n9Z#n%1d3yiTOjRA5iwzYte$|t-u-md#>&2^31tM9Y^WaHhiUS=)hOU z$D9>6br3JelVp4XV`Q3cBu2)8kIDbI-!=a>W%@SAH(t<2!aa^VYxNx7k33H~R?7=6 zF(`Aes{ApRVXr-jKbOq6#y+@K$V(N}{aA?+ILYXL8j!Iy9x)WAyq$huR3@-tTZ&JE z-_tHZ{t>9C?s&kp!_K9*332gTVfQ^S6FAocS>_q&EQoD^egGYBCX6wLQPz9sPVB>& z@*NwwM=9qw15SZ+uf@E->W>|hc&qjYbu;eGUf{5{iL7B;SFgupZoYN!@mE}qSrsQ@ z*uNI~n$taNp)tqzIM+G=L|FYf@*#1t1@e*i7o8Z-$(TRU5ep>{H#PZE+6Jcgx}J+4 zYci^2s&so?XVMhj`9|0&em&+VObJJQHv-}LMXBd+@e{6kEm>FB(PeXEYI4SJ$f?Hu z0qxNH#w{)cn?{}|4X^HIB%35m(RvA zgLh)iP2oDMr?+Me^uM*!bE`*PW$m!j^58-~@^j?Gy2>l(d ztsoq8VAd4ox|?^VR}{I&dn?+gTC^Yg=3p&+7?uxmYZc@%(4BGLqQ%oyiy)sZQg@_N zPO88?*k~WRbx!O?7{I|_Q`oo2v5Qk5sKDLW8uy+u^#eRK;YqyK@Y3b;;DoUjsy~yy zX4ltiWWx)&HLH<-4{_1P`I_Q=G+|B-z7tNmO-ai^qjY@bDanHyq@7HUpR`tgw``bE z?s0G&@PaO_%kUm${T(^SzDHrW3kSPeeC745; zb^&AD=6BLx-Unu#I}tkrdIP`c3~VGp(wzwYc0u>ivAcR6QeJ{g0{5vkDQmW zeTQxPHSTK0vva6xHJ^x$;*J9=^kVEd{9)*0((Hc>Fr@B=vC4ecluxv-q+yz`|K~wN z^7T)7hyDrnzd^=2=F-OVHVt*=lUrsor;I~CJu-LR_v<~MJ{@)FF7wx(_P>!+kNjdZ z=r;GsO;}HZpJ;sKTDD;w7h%m7mMA+j=vVDo@C3%d370Fm0={3uKLMIR``Q@RXc%{T z^B!Ny0D4ZNutB#0m)Df+u;TE^N}Mo#!p3*Dw+FtIb8`JJ+3OFv27U1Slw4!PZzhQg zkms_`kgz`1-|`U`P>%PN=sIT$tU-GYoE-T2fUm>YLvj3>xT5Dq8-@PfhP=zYkO_t% z2gfM~7r=ACV0@T#)`j?O+ZM-|X}GMX;lG~-j3=jni?j_ny17mNP}iC|67vI(hw)ul zVwGhbkv3;xS*t>b>0>**M_1aRzwk&$sJWp7@Pz(Zk66un)8l3TSR0(rI)$@ZI8TbP zuwUZ3)Au#d`x(SU&<^dKzvP+{7c|asy}16G=MyJdY`79vG>kMqWPR4r@f)nmI^>a$ z7g-NopLH1G$OM9@03#=A z);V?ak!54>D;xz47oNjD_Um2e#8?~!ZxtTZE@>v}Ph0pyjK_2YZFBE%{hHBknW+A1 z3+QY%EhGIMOYN|ZLpNeSdMxJn1?-lZMgktQ@b z&)l$GGj5D9@R+npu8YGjHIJd}pzT7+7cDaU8%oAeHaf^2)1U|7qg{R-FO`W=myNOpHPhGl-xC!WO zeNnC{TRb-+)%zsJ?(9}rvWTZ}qF{APk>cyI3k z@gJ+>UH>E4-SuDKt6V*<@13hC&Ai|3pT_QM^IH?q;R5%}odK^9;t$7p*I&HrcXRF% zJ|Nbu()azH?V6Z8_^niX_MLw#(1yNSv*1Uo_~6Kbx< zUron@&5v}nxZ;gtsH4Y^bsY!2O-#u;U5S!y58-S?d;1u0{~X457JIMhA5OM=z#~ew z^|$j*fs$>h_5){ zjpuPsp}(pI=cC8`|LfF5*3`@?gj--A2TzIE=A$kUH@M*e!Z z6KzfC{`O?`r|)weMt$Orx^vmS&$YmPi@Q)(wvV>!(s!Mz@oV@mx98v8_2c=V(0a+sG6J4+$Et!b}*Kpjo*#$e6 zWsSt1fUVO5dUo(r6YZ4MkTbuF_bTuXbvJCI9-Pf3KY2N!;v+Z6xSzX%t>7s_+&+mj z(=)s`*$ukk{Y)gP?q70jWIo)#z<&Cnm!NO(8rLMofq0HhlNdLAwg)CL=E)XYUTlS& zM*i!QaR^)swH|>puSI#!25bfmLR3svE)KK{5dm${cS18Q+h@_5iMoCtX8%J~%CX(z<_)Tiz+5=BDPS#aHA`! zapM8thVl!X4qCtu#Ai%aAjdfI1LeR|h$GHfAT4Wv_vh%NfvMM`^{`oP7yrn03plVY z?_g}#3Rgd1y`aMiy%cLk95G?dSnY(=g_^>E8SvyJ@Z=5_DaUEp`*3Fufdr@XFJyF&B@c{{q6Yu7@r*w7aIP_btx9_x(?av z;UMF@G!KYE4svLHRmVS#HMjZw3p$3A0{6XCMHhk={LQr0F_qe3Eq93rmP^^|_VELv zYSo#pwXhR`&H*QgOJTkD^}EY90h$^Bj$HRu^K$z73>M0Hynuza<$xvlh)yKOu6rIa~qsyqHFF~1GC72rAyC&!{9bhiz6UmEU_ z;6(H&)_{Bq_iy0yVC^VAN$ZcMg#Vw!r5I^Gb@OcBnc@SKUz*#NV+>2TtZ5VIuNP+m z{1t0$`DHwUU|i_&+&g;zDEWoHgUJ1N;m)APqNJnbfqGxXz|S*n+D`q*z4PHyJMGuF z)+g_EcHUFI;r-HV&-)9=H;`Wy4D#dNUBVx`zBurucQ6Oy8|@XuExk|UUA!X|z7-ks z_stl2q_oZ5S=08)*t)igtp2sU^E}!!_rPBzn%jnx7Vy8uUI&q0hi;T*KRmB_B1=Bu zn7X?5OS#XPKg%nbr_-OWygVCZ!;o`%0R6G=HTa~=Q?L40JSQt(gVyi9 z3O+;JZL#eNv?p+%(Vh^7j6DGORlr6X2F=xQ1WsZ99hUo=Ik-@6yj#lIV>s(w9e5eI z%s2_!w3DftfX0{k@V$7%?zs2P6mk}&VpF)6Shq<%^H}*d;LqlI6JK;+4`3h0rH$xi z@SL$A??Pg~m5ayQ6)#E2b1iP%_l~h)-}l6I+iZhp#?MOmh;mR@B5dg6m}3ItpX{~m zS9(9>E0i}!|ZulJ8*kHDV9p4lN|9&ukrFqH}iNzX~wN$*L+ zIqycXvB6i?{v|CVFm6%9SNRsJJGKG`6-*quMp;xKzVr#ekudYFTiG$@d2Nz-Es!UL zvZ&@MnwK91tlw1>pzTQuaPaxmy)u}GbG|c6o_E%y zQ~G!9-wF>)u~LTri16Utvt!r%J{7z6W6%lRp0sZnu_<*J57&%qlV>~z-aGhi!oO9N z21tWU*t>x@q(#K@1LzyM*{1uxv=}lT;g5BIObl2g>*V=2J{zn(3*1hnUI|*z)tcoR zT!_7nHE38oXs?03`_5hiBeu{385HMDJ5 zuqIuTVZZ@*M$F(2l&2%&;&%v-Fuu3oFN)uNcsGDQ@*LdXJKYUD>cxCC%oN>m@KwVb z^G#NzGGNfcQm&D7hAlcfAxOe5q?B zQ%m>h{`?|}IYqxiTxdaju!Zkyobb{oFe z;d=;we*A5~ZwsHz_}hr@eZPN8G>q?!JU*M+|0UG7aRvj@MCZ{yz{bs&|xT}j-%Y&_^g?Zg9n}mk0aemLC#_PCUN3u*M%fy zvEHuL)A{5vDU)C?x4O=w%|pwclKR$LSWDhF8v{NL%Da6vy?+WgJ|ZsLI8GnV4$#s8 z&@^>tpI+Bi*NH^f)i3Exg&4X`KX1V^tVJ5fTU^&>!mblD!(G=o*2Ea(5?vPkC%dH_ zsCb`S(#|1&wti%nSGYP45R>|rv;S$groEcB2939orTYNyiXeF*ahCQK&HpqV=*6Dz z!=CSjFA%o9It8-5StY^ewL zQIeK~lDO;nr=N%Xu?u#?PsF@$Ild8|Lkrc_cUZVfa{%jrJ1i#;-uzy>l{^_6ND+5V z)b6QId2q3r7MO6c-0jJ*aJ9I72a zJOybLaj}?<6R^*S2XLbu=9_Jn_z1Wqa$#!bKhxtU&S)42$PVf`_B-S34LbnmGi>0N z;>$z+M_u`Jh$ieog@dZxDDXYs`7DRN=<*Td7-QLNoYn8yUMi*9`@eGgRyge@PCNLl zX{;$r6MsnyY11VBQr1>-^`#(XYjfROZJD|XYtsV$Lj86MxTECM!#;_-hR+V`hqz+u zU!;dS5F7WySS$T?prPFNh%?#;8W_}T5QcnHZdw71rC!WoSdD7$Z+2hvZ75qouD!=5m_dr&AS}xaXuH+}4744Ag&Ui|__M6gc ze@d;rf%o~={;48s&v;mK{kiU3?>Op6TwpGZ8Rk6z{WtnCb)M`s8L(l2Ipx?10gkY; zcL6_)_Big12K~`+2M?T7HWJh%JWB~s2cDF_N#hAW!bk5N`%I9ON&XGKN%|zi@JE|C zY4Wzz&Ed3ekh+=sfWBOW3_~}GV}Bh7U!X1-k+yq<`@ZxZ0R4f#wgo;b=(cIvn(fyn zujQP7200{K=b>*pb+d!7<~ThrMPIXREjhR**l!{U1uF~4bX0M9DDrd_8Ga? z@jcTA?*p8v^WaRji|0Wh`y)RS##HRi<1p9X?9(N7*0xCgxf--C4qjfp>f5fz6N%C- zX}Ls?TYsAMv&S5g`s?O;;8W1FALx11c z>H6|Z=6Z6?+HlUD^#3-0MYa{hYb;h%>E_fvmBS7|y;oZcXDtQ`nlKoB$t6@&xi6 zKVx|(QnAp~n=%HQxXk`^TLOKYr7Vth#uz6trb&!((zKg6bGj3{w7MsjYXLk=?=Rh+ z{!GK|CVq4HsltEN4q?6*up?d3^-9Dba5eYbn0}vb7Z30+Y|pQPL9N9pN{Zye**HY5Gr^vt)3 zkS}UKWE7nH#@tgW$FIxhw39NHgL(=5t7a}9_@mS9$WTD+y+L@aien+zt#RPJYGH4 zMbQ&^d}OWZ$J4%r@jy9{~eG%N{6;4yMfDjJ4)6_5orJVAf6&Q=wx%Q2ZT zdYrGE8^*)=neu(53I9^!Mkf5V{D`?r|E9v1lYsX(WLySiZ+SKweG>lUy?UMs-=k@K z=e!YbE%`F(0O?N=xea)r=ARF5^`4i7LXX2gYgEEf}Y*+F=6P26cZ!u?|eZIKP*zcV0deAF8Q|H^Tw>504vSJlY znKoqO1^Ij?9Z>Mdj(aRpUd>C!IkK**Z|*P6gDBUkwY?A|?$jX%gUutPZC;Pt94BQS z{anCKQ-`_wAVU%MQod(y24l|Nx0sX07pO!2M3jRqwNsx5fuRcSyS4jBD^S;v_0W1Aex~i6 zk3K3KdnfGik3CwkMbk2G&B53wpugz7ol30&J!9TPrSDmY2X7FYK=1W>tb~2zu#`Ql zGb6E4*!Vty91$C^{;=1;F8vVnJ^I^JIi77`xjvNRd-7zCf37w_7uwm1_9;iT;gxAu{)}PL_SdJ}Iq=HaU%20?)rWkelyiATo_ycd z*NNZKf2hZ=KhdXZM}E=$D|&8K9E7f{Y=(L-YM4F%T_@y&ZVcP5$=fMYIc=-_yc$lL z?q|bG^MBKReYiAdzF`aze@*z)dL-qp_m|)Fh1_=4{L?&`?K}FVrb#@nrC~r>mh_%J zM&t|#-ZPexvK4urp8Gvholz_KQp^pzLS*JT&NP#L<2!Ip`>XnZd#TjPAajO$Z^3zE z_!PVo&&Ir0`{h}C-4=0={44_eOQjyhzHA5trq*?AKz;AJ)g5QW1?0i2?(k2o?g&lM z)~fcq_g5WJ?^{kTRq{8=W2AM({B63v1MggX94Q1x!+t?{rBamv!i)PbFa^4SxVUCJ zjyUq!H*m)I1mN*Qe_-r%v>ES+yNJ_8y%&R3$io&mcL;KeYlg8;7GmMKZ{xt_jVMc4 z>al8=Zgml+DI2ED8BbmE6@Q>Ywf~b#*E^XP%sT!e?h8b&P^^mwpIbk6wf*4D)9v10 zASb_ZzDvPA5?zjSdZ|<(5IBP~X6VEFk0;^33dnV{M5>)@7fL)GrR_+M$ve>&_5P$U zJ;un3S2_Vxh_^y_DuXdsxD_9A;|lqdaBuw{q7IxDWdz;5wyjf$H~*sZNgV z{Plk83V4Ndu+pLZ^%E6HgtW`V&at3hRJ`1{1Z8F%6$KS z7kF>d@9CT}oV%KTJ{{;nZh1wg=A)KDpR~^y>(-!Y74>bvQ0fcZgHqp=v0{wpZ2i!E5Wv@C<(<(*u(?pr(eG3&zLqmIeIBgc4qi&W zDs>{{qtiK0VP^#|O(Ea;pwkBIiFyosa5i(m=C6zqm6drbL&I0+zn3rsp979IXd4o9@wt%)f1bEQ=D}|SJZUEdER*o1B+Wh8 znsx3K=Xv_f_fLsUz2@(}toL!8F`|zK=Y5o|H_O%#TJ#=lKO?mkX#r?UGxFu@b&${dOX{P}med=Jzw=wpyU<+amVe^@3 zr5q>3H7OjB|TN?D#q1#E$>m zi5-ulJjRG|zKp+q?AZ&!qYY92HR}9^PG8}=5Om~l2Y=@wR;w&)Z&4PZ{j|>N$DTvH z0d#+mpEU3JK{?J1px?NRKja$Iza{WD<`2VmBFcxt-k&fog?GcAa{Om9m;ZpYo0_;o zJmj87oQkn7kO!rYPSXdqPdz2D>l(S$rF|FYX!JUq1zut;Cb1ScXRTyz;7XUajpyjO z1@3pqSaUexh#*MQ-#qW7Hhl1sh z|AnkIH~AQ8MC9_5u&uov(=nP6d@%ylS zmT$m0%U2pN;P0SJK>md@wungwt%Uq9&me=oK4{1Q%q>wRVK5dvN<9Jl7c^Mfe<`n- zww*rE-DBm?02YurK}#qTcnn(7l4WBJL#9O>0_bQ{1J0_$U%G^J8Nby%mAu#aHk{|$ zirmQLp~S1mf2+)}Zz?R3c>W#%MtnA{R z=U!CsQv8@Qo-0jHFy5?roWq{nT%hgaYELTpDvg_ZK8}8^?c0&hzN!4HM!r1VH}mXJ z=3E9m@k4HO!zUC6Uw*`OWZBQ8th#@4IpU%!7cWH~{HQ!TN4l!(qb%N&pIro90ZxD~ zEyUc=ZrbM*&ca#RiPYROdDXjs(E!%3R1CJPKpuDQ5tILP{(Q@N#x+vUq5a5**antY z@|Kiq(y`%gd6zhKpHo1~3jx<8CHxe@Db|5j^n*aIm0 zalI)=lQ(JFlzkr@brZlu@*(QC@;gl}y zZ0pBT?Jp;uZU3vS4Q)rQV9(Z%U4Xv9vqY(ezuNk68}yAJ?VG?e&&)&6%gD9IL;w^X&-d$~khrkzgvuxpJP7;DuQBJa2<8*?{~jz#Cr0mett&MTVvnGp{m zXI%Q_y)Oo-8!*-}LJ0Sx>G9`Htq3+OE}weN8=wZ9479ImwtxmV?d3(B%=+ z2ie6etK-o?Z_@IlLu1VOQkEa`e?4bTn$~~7Sj+iwhmIo$8RzT4-9lsb zokFb!tqei`-2nbUpBL=IGZES?W$ql>p&o{>WXVh~=!6jePz!xo(M!Y~3(P~WySn?Q zE!v9rRyx;?3-PDjUIYnNXhkJvT!e8mg zH*L5xsTK40*>)uF)z@Nij&}<6e|<5w9(H}!(Q`shA32sPj1hN%j5Egy^ZuxD@!TQC zWt{inm@xNAz$yWl!N1gqygr*Ic}Ei93ZMKb=uMZPZ>t=PSeJ=Rp5V}T#sjf^(s`Z< zHFX0G>pp4o8(Z0H@CUXH{e30-%-6ogN9~*D{`-5`k3&C%#3h?QK_4~kM_kXA4Eg?0tttqgN^zs48BG&diUy*8!z z%%VSBpQFfuNIDd`_3I9=L5@L%*Q1~f%8z2+kw{w~^s`3Ji@cR{LpySxV68K3eWZ8u zWd6bdz%uUdgO7Fqv}YLfif2}lb93el=$Tvm2KQd-%a?$ zFQFSKxt@1$B0mpkhC?ffUm^GvFs@1O)fYRh;St0I_ctDtbq=f8yW|gIv=h@dgE->@ zYW)u{^Zr4K`H#VGM}r?lEY?}*g{$XPe{nuyyj}*05ZEb+LmX`y^J!0cH z&qJ<(u1MHHW)AYq4!?7({Cy0+58k}Gjn7EqNmnUjp9k%h@SVzquUdzHhHdyY(3b(M z&1momNkeS9!yK`mF|7ZP|L?N=(t&~3coqb?vvzknd9&`0Sp(0-j$^&<3Dw~H5%3z7 zqs$N59tpmSHQu~hh_6jlE`I7S@G13(5cq_Q<3P@=^)AM?Jk_aeTu&ix0`?u`>fyQ*VS+We3QfJ-}ag^KilAwfa{PyH}95R#(tlh zy9?M#e(_;^8uAe75o4khJyQ96Nq;thH`HKFeDIH&z9wyZ;TeKvsmrVL0*D=%hEAT~ z8DXvgEx_K!!Rc?KY%)-1KJ^ZNSJ)_UcW5$HmbG zk9ZHT#MzM4g)P9ohSTNDx5u2h7amK=Sjh|Uz4y0Qh>o=H{oT?`U)yYX+YX{U^W{=D zlChVmq429WosOI?XTGu_E32{dm91-=LM)ojk$a_3j$Gy|Yu5S79A7_k zb?SU&EoIMIJa-zGpLaIE{T?)BJMINUMXCcR)$>ILCmEk(ta%sd#=5nH`aRsYdwLro*c#bY`y=nZ{

Sdj7L=6xR~Oq_g@ zY%7+00Bvjky!Ng8vhwrN{~w0jLtOU0HJ5yO8xRBV(3f}@kx45_1DFqmdK_V;`#U2sFS|mOuT2=Qj{Hq>;U~J zupQ^H$cyB8NakUg123XKQu89@r-s}l0^ZN8L+;E4ZCE3fJF~!iOkUIv-HE*D7(N-V z0QjZlgZy-XYo*q!3iD(U_CDF_I7Ed5Gt)RiRWyze%DE&%zeF{ z=kv_xGm`{yd%t_`ALSfQl9|uv`SE_CxVc%mElCe|hj)Kbd{e}wv-%V9Me(h{7{-LYhx$h7z8cTxG734?ygOU}Zk z@k`xY;flJG^3G%;?_LL=MLSOUso~??Yn^M-Uey}71PA}?%*-F}$!r)Gu24PmYZKO8 z7~o^e%fzITm`%J zdsT;^|FnuvOa3|=yw-g9+IH}`AOIGEO|`Tdd86gx(~=kQJ|vl!<#@(?cxAiO=g0Nt z>-JOf)8FLr(`nZ32u(2!*SOg?L?YHk=$mgdTX3bLXXawvOf7Se%{OJ_*De?yIx1mpgKlM$s zXYeN6t+4v$h@=fgkDA`zmvjhz_-~(uU+N**D__s8`Soq*ZGMd&&g1#Kx)y6BeLL@M z=+D=eUMk4?h$N4C__}uUxn#S>!T2=%@6c5IuhYT*x@`V8sQDkpEz9FCn!Xt~nVR=K z4t ztaQ6s>3c=$UpAy7ZWc{P_Jbg;UErnmC@4M+I{)qZV z3(kbLN%b_k2gYM@^v!6RzA=)Xcgxy6Iv8C=(pl-*xU8Q|43#e~0_@%x%L5XV^+gHL(FhyJTV%FKk{ zyZVdKuefGK%$rt5(I0tC_SyZ6D*}Hq{LU|CV+?UIUTgUGqAxS{?C60)S&+)pd)=@F z0jph3U4?W*Ki_P8-fig;IE%d4ouY5REICuu1mfb2TJIH)L=4{n^f@E%5x^7lC-5D| zSO)sk^QVxuQ6_Vsvq-eyohMpDmpox!V;qb4L`&Gbx+&TZ+0K5xfHUHL8~xlzFZgG3 z$rk9wzPioxz6xLGld%?jCSmNTr&a4-Kf$~q^Yu+RIYZnh_sG5K^T7Fy03T?>$UbWq zvv2(_>s+XFG>Fc{Uc}D~?1ldHYYf!KU)vOAPMdf2^T?0b2w(Kxi8Nw8v?=xbA<1VN zLz-TQOTGYaqa`)B3Rjq`av!&;EI>_@ZTKYP-%x#R2S(Z5F0@Lx{xyj~y93Tw09 zFUI{F#GeIu@8sjxuk-LruUGGjW0dBNfw>$uk)r?bf-c^PZeST$YuxX%^4A#$QZ_^i zHpHgLHQV1npZ<-0@256N+v(@v3wjUX%kPR9IFoANaLcDMZQk*__)M}geLu$-;n`5{ zz2aCGeDD?F`b)O2F|XeaTx71i+CSgbYv8+l&$hR$bz?&PyyjoC#kM$o9ITh%`_A=i zpPaV!^m-@Ta~O4+d``jueVDi5jOx%+Kfryvx1Vb(EA2A9O_kB+kKHMG74w_=K9OnT zK9;68%6;qF0iG}68T{B?egk%=UI%`ccdiU7--ud+++$-%@9$#gug3hOE3UyizA;h` zo=yMA-+a;+eK(`{HrGbD5=IwV&!G#fhkB`d`zDj?A}rwB4wRL4nk&SrI@+4v#wOgw zaF>J$^4la%lrO-&7RVE0K7ez6tgp@xcj7Ju@SiE*a&*!oKaIj2#6o;EYV38P~>hTOlgzT(~Qdx!ps>GgFEO^;NMS17R^#tj>|^cov^w&8As% zF5=8#;CT^-KJg9n3bEZJejY=9r@7#q1DEys;u4=P{QVGWPq$-zA>1i>E~3U(^&?!9 zP1F1Rk685Xgp-1Wn$Hk-)l!BLmKwkCcM^d$+b4?`)H^nQaUPy!7&SZ80~k{!y*v$A zBA$tOCF2+Ss+s{4pF>B)@5sOT19<<-Sv!p~n>u}O->@A*S(tK7T#q3Z1pMw; znrDd`qqN~}7$Xfkcyma>PwB5p{_OWZFrDm?`^bei*G_n_)*08in2-QvuMi5|T0At5iQA~h*K?9`tmD*s%$zZB$Ckq}_U^CwPdc}x5ADeYf+#j4kxW_(?*djt43h)?2=jyWm6RwF)h;?n@=algN6 zGEU(+>wSk^?PrXJwY&fJIlFcj@d)*-dS2VF!93Vp=sv76JS)e>xXdMTj>pft@fq!{ zPW7F_ogzGy$6tu!^gZiy*FP_;mni%rtq5_By(}kQ#2Dn)?2EvD5I)%p!Ur2*Rdm;l z^CG)$Y=|^^MDecAmqvDdejaG60{uNjqk;3|*%8;ZE+E|0ojTIZSesst6aUEX@txFH zF#p6(r(BUVol76&J&LZCzR0!e9uCW}R;L}r^#CRplo!Z5N^_0Vtqo&OJT+-eJZp8{ zTA!l4BkcbFy1t7)U!3WU^*C3Yv2fvx|NG8Ytx?HHU*Tl=<||a+Iq^sHYTBs0b4v4Z z)o)MvI?2a157)e#f9Lb=lEPTpDKm-34teCzqo+Q9g_o22BWjt)9EA&y*$BL{@f|W| z32}v}cE{9o#r4?ZYaC&|pr!%xdwX3@ zeqh@ts{bi`{=h5ySzmzifVlsivHB?2Gfl37+G_zfo4X$3GS@*LAlJsdb~x6<+gA3aq<@ITc5Y0IlXS?lny}0;F#;6_q9SFg??EBdu<{JeJ}() zP(RDuxpLwkdf~!Gleu!#3Atxyz8uaZ+e4f8w6TYFIr6a~3#aX&U4>j(tg!~~q8F5o zqY^&#UCd$ez^Cehez+Vs;LL+)F8M&7gLnLqm|N6hZ3kqYJm*rilfTc}dDXBhfv3oq zK^-V)?>l1^`0k8feZC>ddX7!_ob?*=o(D&+JfCriQ`k4(eg|r^Wv;n!zF8xa9;3NzBuxh zic=_D^I-Pu`A>oWSD&_Y9%ai=zbEcFX`uvn=aKiIufqiKT-sFNLl=kV#669F_WWA* zkl*Ioe489FU7zAyy!VQIV$mmJtOU7Ah(qk~$$Pr?%laKdypSd@;Ci%<=->g_`I)OT z$C01GG58+epXOZ!!zt`Pol~q~<&%7~B1OAtowS$QBPC)Z_$O;(kUtCF@5B`^aGJ8f z4_bo#iF4h9p9iW~UujC5X$VC)f|8~2EHkFZvWaLR=d;&n1-^+=6gC+;~*Vob(1tQwOSVrx)G;Q|a3 z*pCpqM5V;5c>lS6pYw8l&W$-SmYRR^+zLM~{9Gf>QOOg+%7PpC{{a3^ zwzKpa!tk{Xfo~Ef@52`_WPh_>+?k#Mm?MxIj=TI&|G``&Z&N0w>OXi7!`51@|K#>K zIf8e2Pn_!eqUU36x(A=@zj;@jg5hrP(wP4Q=vjY<`E%~_Q~Y828VvpY z9B{GamWG`kBfplzT9d-}LQt$jKDD40=_<$~^5R3tccE`>5O~YF?vua++9z@G;&>-& zw7MZXdLTQXJ2xcYPw0bOf!Y9^3f1&Oo*a^R9(9c-J;|@;E=^f8}|@@gI&#anG++x^XYMmZt&ew`@5K1a zu|M>k!n|+Rh=J{~ZYlQ?*oTtO&Fju&b3IUF44yT!jWopXUE*v0%3x(Q>AZ&2Y6l&c55aIn=dVcID zO@F%f&1*W>wPmr#lvkukv zAde)0nqenCQ7$oe8=vEjke9N0Y$yKaTJ#*`QP`7|>(kgAAC!0(5Mb2Nke=+Jma4$G$82XNWKIeDx zqc|FGdfk8rr#^6=xcZkDX6K z$4}!Poerp;9ZQR;tK;VTLxe}srOFSl@+aOooX5Q zb*>I!t$hl8nCn*dD}B3)*SEswLV9!B>`wn$HE@^f^x#fz;_&44Oh2FY|A5A8wEqWq zo4t!j`Iy_FJ1ATF9>9~nI(-g4_MS%1U9Kl&$vgcW@@z($VRy*-N6^e6(6Ii_hx7IW zU+)&{9}Y3Lgj(kocn%lm zi?Yr}#tO84VB<6SZy2@@;ZHl5c(4a&fd2WcVTInO?PB!uf&Pbj56D|zU>#(PQCJb? zJ;wrmgFA$~b?E*Av?!2`Gmek(qU)ix)ej1A1Cerp7#%k}C<{#1#Wo9ev$v1D1P z2v>@u5hM9TtPh{#-mSXs%TuuX`(lI0-$Xx&+Dzt6*tWN)`Y*pT)pz-wc;~!H+wA1r zmy>ulT{(I**1Ya6obN_|bM7lt-rkaDuDVY1& zF~+b4=KlT>RdW{2@+ZI`8~@yD(auk=Ql%^z?O#IxwmR3bolR_cmwk1g{s@|`QHlk zIdG#7>e>n1L(mHwZY6N-U={Bks606*YBcx7R^pwq`c#`s1Otq(>Gd-=!TX!{BZcrm zR{r`nz~;6(#@@u9l%-2-BsN9N6 z;vB$>2Kx$lh`T#$&)Gg_Cw{zF`-} zgj~;+vHFY%gXz9g`ii{=y?(C!yOa4USdd-s%v!_z_j%6x-fY6)fk|UDVhnpe`TVt) zNS%w%KRCtn@hUr}{x0Mt^WroNc*jz|T!%d-ZO3b@{ILGK@pw+2!rS2crY{u!JhxFJ zTtHzX;m2K!0oXA9hzQ|a$SV}T_*?WJq<&P)K7^3TqnVk3t)oTZMA0STYy4l0Y#mLS zzqra1^)B~Bed3bvx32zuL>T|H*eBjJm*IIK?jQ4rSz{Ov^H#t=h2IOC0@rXn@HFBv z)-_UV!LwdGDP?~>_TUyj_3yj%O_T4lM}|?|2YMJz&!!I$ghw<1Cq*EHahP{P7&_$u>8lU9 zuK78MA({WG#^!o_Y8^^xAX=*ZQ=Q zMT1htE&RztS=EP9Mwlr}+ZSSWD32Z~5N^@g3JqK8yJsJXYbh zlQyr&!)pmD=Gn z87cU%K1{EtA9Z2of^SJZpquqv&;_Wk@$6B9v||JCfc;3zAYa&z^udDN@WHVi4RGouQq)>eP z;bqx(;LmkmlZs=H)am%lrpqeB-qkllW`cLQuNf9YN1p?KN<)(89j-cSE3;;sA!#KZToZSe{ZUkqB{%Reve+bS-(s2TK4Ls@q zZVdz1hJjmBk79kAFPp2Y&+D4h5s|rtX8>M@yO&rGqSnT>c*He`X$(JH4q4ce0POZp zhFw2siG837g}0+Xl%Y>v&3)dRu2V>=Bi^7%F zzl|&nT!K4amjQ0&(IE-9?U?sl5^h4Qfu49xszvg8(BmT;vwk$z$T{gkl=b5b24u zMH(SJX<8x;k!DConqKr=n2&tHs_RnlaPl{cKXd`lz(<=>lGlN+WqBQJ0_w5kb5BcI zF^ssyinIrMouVIQZ~J7gwaNAqK1U4j37P9j8(%d5wtmDh z6i+N55bW`s``0!r<3rp#_bqGm7avjaINnia*-hNPUORm(>k!XCyn96ULZnUs8&djq z3Nvj*fKM6jhM}IJ-{F3_e!%jAwe)-raLV2fKw8pv$rNx>dz_*7*cfu|kLPyrx`=|e ze%~oS4xy&lT>L}Csa>+CkGY@+J!M~)^077Z;uzyElqF{7>=@-s4{DSXR&6rnN}{|f4BnlWefnEBlAW$!l3yET2h z>E^_YRa=~AK=?cPEZ59A62dji^)3P$UTKmKYRmh zR(WQUw_5zeQGYZ?{2v`0mv%Mp1M!IfY?EEdKJZu3Nvj>EALKN+U)jXa;vR5t&^&6~x&?eK9wwDsrrZgE+1z$fn7 zvQAt*m+!d5>gDE5Ux=FU)qK_^zkd#5+@Qf7KZsg$1ibL?pP-lf)+oU zT8fwy$C!;fZi!d8&qd}Rmxy0~8+erJg$>ExH3`w%5J#^C4Ub~?3rX0!fjQz-oNL*1 z*^_38`%S-hc_#9H=5x@Wg4oY0=udMkx`*zxY7n~9Z9B}Hu8XpsZ6LEBy3-4m4&V!v zh}vDCm(*d(Z}=0RWseB-8r&@H*wFGJ{7o83fIf&nPWq63!NLLH3GYa<&B21-qa~RnvBeSU)zV7%)+aSC|MPXzd~Qth zdHFP-<80*l=a0|x;~8U}4u1fSDQoLDX3tCWWWA@%cSCj3f06mS4Vg>=^-zBoK00H+ zDPWUbD*o=v8GN1qkMIlJ6yU!_08_cAY@ za3Bn*Bb+T=6kdY0ss0^9eiONY{&no%G2p*(^c7RtB~E>I$j`HEw(J#-smF8poB&6K zA8K9XNpZh(eR?f$z{4)F$LI6xxv>&_Y^vvHtLGhOX7e+RcRoi>0e;W=-}U)B)~Uw9 z0@NDp^XED=jp=a(a${BQ_Y+l}68=Ad9(a0$b*JP*Di6r!zZ!?MPiBdv1LOh}J_bKp zMV-zaS9dez_UBTzhfOnj?fLvE*QVR=pVpT(1wZ1x{;T>r;RC(Xin%8o`PYv(_)hK* zk#72-hqGpm_(ENNwRp6_ME+>&C*QB(-1mT2bDz9-MdPUc>9gWzxJ#}MbvKFI>ssH2&iMB5MC;qL;J+;&8=PA&V>R?` zCg;}g@`=l_4g<2-^i$qX7h{@@aTB7g!6#ma?)3xqQDnSsJOtag1pTIiu$MCpL-p0L zpIblKyBxKB~+s zcJD7v$C{B-Lb*o1rs32qj*JIo&fxk0pA&`mS5lXu9~b?9@SJ@QttfnK@jCRC4B{Q1 zIR6mmqR+^MTrFep2eHlg9s3x@y5W!617FNp_+sXdU|%ETPlQv6u`#^6u ziRT;QZ{MCeIrmJ`eEWlB>)Ufv>^CPw5zaH2J~?;&Sm)bysiC>+Q{L66pPk#_IA6PW z0q}Ad`1m1t_X_?BPV2*j+vfA%%EBs$`u$%*@7L!rYQ-D$-)k)XsQ)(Q_c&R~n!m(P z>-@ETK-sSI6k8EDIf2}8(pTmTdW5=+Y>YdTX+zE3t!>oXR)Btv6}16hPL1Gm)Y!G5 zw(fkx9@N*p<~kb_Zp6bnPS-g7kwW(M-dD8;b;jKt6|k$|PeqT0pzNQ3yi@c9-Xv`j z_R|_d8j%Q~ZZF&8wi&X5xS(qE7NT$Abz#5pN~ACCkX;TtshhdxkYCivbx$PbpX>df zn(^e~2yC5B(1-UIs^628h0~0;Q25b5GjK}}>}&EM`anXc2Ro4?`x;XCJ8AxG5&Ax~ z#4t8+xI@Z5y@p!32HhX#O+Wj~IQR9<&x9hy0>TGFw*xBDJLj9oJ?(cPXp8VElO_(#^j=UdZ2Uc42KzKZh z&v|wU)VcHQ;$m3(pK{NzR>q0q9e3vS@vcqrEcc*}zq{j=q~UuaRtP^%Psgk-7w#kM z?zlhAoW&A+Mi~qG3k-t8w~3x)onr>Mi)zinx1~wDnIQ|B-QY+WoZm zZU7$^Vh+9w`S%D<-Jy<_K##O38bc?U(_VfcMxVxDM=<3R2a-3BmyWU*nMXW{z5G7i z^RF`__->5jy2Qc7uVQQu@;ebjP4c-Ck@9=QK0JG0+9M83;PVMQi~8p$CJuEBCVk@0 zF^)~!+avw}9kDWSs3Vyk>?oIG>UG|Ybq>fp)xA~e%tDTv3?Zh$JftNub`BpH&XH$F zy+gxH<)u(B-0wdn&wHcad6s-0c?ePmbbd}6r7m`xg%8yGW;0*fLCg9Xzr>{j@WUB_ zlh|7^a%MHWN3rfC&cUcY5L0)^-3HugsvGK4%l`^IS&4P#<4KE!CxueJhy0z`7x7i&RyjWB zxvk6Nm)&^A4Y(Hzo)7OVd17&K!J~lj6IF!K0KWI2uT~m(4*g+iA>J>>{qg*+1V8x> zKhtNTaZ=wKbAKM(^Pi)P)46XC<~@tC(7S&A2zd>0qrYP~Nm`)pnE-D2Mc?AVj3>an zeN%t)BpoY?DbiPX;8pcig-N$PVbu`tG=cuz* z=bg;7Cr@RLpcaRDV5CLcCLrE&ZGCcGxT6MZN@nWEM)6;WpTf?qA9D#0_{jP6ko@d4 z=>OORzMF{ip7)MfW4ynq7i-YAiU6+vBC`r{I^1`Qx)1uv6QF(JiR0cx^Z@aNY6(N$ z-ACNl_{_Sp?WloaeMRQGMgwGCjX)_Ol3}=3s^Yge@Pf`g5#PohN<* zkK=wQP|zLY;M;aSPA@*wJW#`dbfj@s_gecN-gEl-23+cFHc2|TqgK;^^BFy!{!ahR zJ^*F^nYo^Q9`t9VE%Z|XZ^J+8s~-7VXexgeWm@q^vLkJKUE9~R9h9D+?hulG7Wj_z zdPr9SwucA!0-ulH2iuUeg|i=HT^Qf(xurCspGRIuDk#o8LVF`9X~yQCu(6>jdXPZSP?Hq?=yoxiQ&i)SJy{X>mxxhOTnuM#g$!&PhW+qGs55n|m z==bQg+r^kD>>v2);Fp!PGR2ypEw~@vv0{Q|KLuO=1n#{;&velD)>?lF?}JF- ztdQ^Q$cMM@nvO)_^rO-*j5EB5nqd3YX^kOuF*(awFAF|u0A?V?Z7BwRmBRosmpirJ|M*Am~)4*#`+L@J9?w9A%R%e z5a!Zry78^RM!=!|SW%!2dI9ioZ`E5z178ImqFyr&zYTpi1IytXS#BbS2=r3(@{N3F zHDX;Mc@G!HgkPvy(k=7IRm_3>YxfH16Dic74O7SWSw1cwXn^-nfEFGy@O#gbF5vZx z-);_GmCfVe^X3Crwwv1u+gtfOd@DUab!B;;^zB2I>V3ec0{h@h^5cVVMpPZu6U`aZtHd0e53V(e1mX99`(2orQ?Lx$*j)W2>MXEKXsq{nk~}L zW>M+5o9wIYhW}{@w_en3-PLY1KOO6auY>jEL0Px;cBDMZn-qT{?mO#sfUBuF()Ll` z>%9O5=|YEY!1Y|P7VCk9fXP(#R+cTpJG!iACf92T#Umhvo&15cPC6&AC#{ozF;}A; zG@a$0GFJolu|T$wpU7Mj@KN#wh5tjyqj04^27cNNzZc|E4S57jMsQ1UWg08w2Q&$(F2XwVORVaQF zFBd-s9-=>n%$-#4dz-dL*ek6+^s->TTazLReq zt@!fGH&$%;cu>>s3$eGX8f^IKRtT#Gy9IfHjar=Z`jgZ#RBiSQd)=k*mWR_VoewsAN4O?$TLN zVDY2bqRp?*jr8up-ub=|U+myIFJ>)fhW0vXN6`<@!FgXDYsF8&MqsTt?i|OnvVRKn zt2aw^tvLCmt_yt^yy&CWiaT|b533bt9-`(kx^6q4&lHO1;>F^ToW2;`7jxcictz5x zMosgpAspoZ{_pqyNp<2g0Z9iuH9zo(E4!4gpnC6Y06jAnP2Ke^(3;1}Hy;2j=?|jp z?}Qv{0nL(su%?i*pEi;5>8=>-2VZc~c&k+(RgUpkKS(+b0Vh<=-vJ+WdS@TZ5S|A- z<&SJO%9{Hwo)^?q|^IpWY0-AU}4@qxjAx z7{y`FQh!)u$)0@t=6Ce1`Y@Ic{gUy$)jv`M`5DL8pV@oS=O4m5GJdA!<+RiAJMub3 zBkjNqh38yL2XF@ZZ4GlvcosH}UQtJXtgIQHIEQ{$lXKn?pU0UWsG<&A4%pMyM63ol zqu#|Cf!7n??u1Qa=cdqK`%B=Ki7{#C>NzQw+3U^+U7;GjafA9Td=QY$Z#P3ux8jUL zIB$;ClM&ILs?uoBXYjuP|38QSx8VQhOS5^Z0=Z?g#qAx{w8t?feV85*jjw~BWD|1l zTJf_*oaqs$|3&>~cM$%x5bBuV!^_GttRFQXiWehyO!hG%obqTh#PinAN;?D3@Z13R zDSTDx{J4MT-nmEaPs2d(ov`5E36G22y8$^%c!G!31u-V~jCkD!?DrAw+b5dB$}h%V zTYFJkxE?-_QY5$A`5i%=Z#DMJGba8ruS2i58f$5W9^}W^J=eJ+gpm)=5;o-+OYfay zPKK4nUx_DyK50uf0)}_gk{0P36a1GW!}-0#EXk-ZK_2>K1vwnNzJakoAJL!Y_8+Qymgd|-;R`s55UV$m+CvE8PihyQ>_UJ3|Ss=B9pt$ zlX-vhPU=C(5d&+bY~XrvzcS)dFG?Telxr{G+H>ItACmMlvNoj0QRC4MU*jRm_kend z9rQhLUzEY13BS|lsCn)R>^Y9SW|P7(h*NzR`8Af$nmz}{qL3D~kufXg z*5L223fDmWrGoi2apXDO3ms{whR>bb_Ny)UeK{76zuOS&>TUBww!)_l*{kX6OYjA< zj&TUF|JC*Jj)#_ac6<--EJNSx^6*PTp74W(I`;&;7X5%;8@eRy_YX$;5(9QV=pGT( z`6sn_o;m^JVci`EhWFu)H@_$af9<1RV?}?*s+0l$pPfgL1l|>m_54R^1mBHyyZ`uY zfjG!Y&q~}ay~?^Z_W4$!`4IS5+o|s&#Trgd1(P9;`9ZkpjNGfcR;qrW1dAMQI2AM%?s_weDem zeW7QqM_92_tUc4vS=HZ>N=Ig(UIe|PZ;-K6dmJM>&SMzo1#6t2TH~nv2*N;(b3EeuOf^3z#6jzNbW#P8=z$ zSnEZ+4F5ao@q4DBt19%tZsbv1jddKT+6j1g#S7cOm&W7nKTc5hsxN&07GXTPxNipe z!Mqgw#a%w}WLu~Erj!@*n)xg)arLh54o^xL2ce^phHvV4Dt@pHKX({dj}N#>-nQ@3 zitr8YKgL;qQzrI2(_9jaE)mZ>1Kp>4^Sma=waS1IJO~@T7xA_j`bpG6JqUQe^~qJpzaB#Vb;?X+eZQKYhyeH2DL-faS}^=R z?1lv!)%&;Mero6YH^`m>d{@1%^0S(7N2cOEofBJeuJ-q*W*l668)Pf-&-=ZZQNQ04 zosJJ77Z3L@UUlz-nN)6f@Vk@0egRhg&Y(6Q%Lto#!!B~!->50ce+0@ zwnW^UrAy6A$cM;FG#?>v(R_sbMe`E!muDw>SIm)g&=?{fbs}#=!;f(9bgXwO`*Z}b zpAKHU527;*qsGwI(O|gM@wa!l1^Q(y-77!Cei5T)uVD=j=<7K;pM6)mI*+N=^T`XG z-&D`%-zCU3Z+{QQ0Nhfef7bf)Jw>YQ8p&Xrs2AMA=s z=#ow0MBaUy`u-5qkLSQ%-nX5T-)!GEyA02A9_C7|%=&uOezN<;yed}Fkn-Uf`k_kH zv&t69^S=~|1s&8+a9%fP-!E-z>g}|P^f_q1MFwY19gjXO<_QaT6Z;8C*{oo%)`Psk zF0YscgRdz-9^h?ifKD;=c;dYZ6&uKq#ZD$>8gT0yW2U2^*g4CKCL;8K% zEVMoPGJDYfq&>ntYnz4k3T+kIE}E`rOOxg}=LXE#?Pe^ZV(D#{P)~duHp=rOv{zc) z=*{dJs+V>OXp?pdbp;_FMGe5MUp=?&y)FE%AN03}b*mk-_PQWjh##WX<1*wx!5wbxjJn(2LWs`8nT- zLXJHX`s*sp_a^kc0e`ccFNk+$jrDwHW(4D)x8I?dw`jNF$NL8El`MlUD$pM;H=p>; z$PjWieRu}XjXBpsIMFU6j0l%^p`V_Vw$DLXYsq|V{5{6Ldm1;490iKm0XV=Pw@iPY&pM$5fE+nwA-_pXV7h=)n;x~Ts zOyCgW^tX}c>%;z z_ArCr0cW@fdsR9g@M;`3H}GKq|M&Z!E{Nl&Q}1gG1>Ik&fx0Pkqrl&?J|5%b-dHEr zs_#W0zR`ZyI0b&%L4JM%)+8MI>M}9Et6ZFo!)FbelzreZC+>5=nHE@b*jbatag6i< z_>0iTSoTh6%g(_y#AU98qN#WX?)Y@@^thWfWw(O{k=75o4`MCEbpv$~%){OzX4Uz{ zaf`1!nU=K_i)O+H(wXe*Nb()%uc@?O8~~2c&+yYUzQfPMRm`VkjZ}$v-#-9a9F#OX z2;UuS3o!?Ir>F4FAMh;eC_vASbv+AzOu~{Cv>PD<+XB`-Mte&F`@l<*c3ZTCN>7p<27r?}C^^>vT)fn#WR~ zE{C5k815Sce+^pv^|_nG|?=XK1^;=F`L#?0t)$wHBeZ^R^fjF~S z^FI1N{8rwp;M>b%sEi-2#0Wmyq=6+vFf zm=EL9$P?t*zUa`w8KbTRZ#FO=bmF+q;lOh_xz-u6Kjahp<=wZKKd9Ew7~*^R&vM;4 zXI;Q0D|kECtMP1!TiG(qA#_<|`>b&tV}*FW7x>&H~7KgLr6Yf6Z3+_EM09(C2_)~x zCQZ4`^`O2VbUjFW3bL_5#-0c-#~S7NIOkUHm4Ywv9rZr_wtRsmtoUIrl|)TQHXAGu8U_{syf5F|Tc^J@!x9V=DVSy zM@=!~h)MZCSUe3F{N#a*NjcUc&$cqP>9XhB_ANc#cJA?Sv^9gS%$hf0>(2@dwN-@O zofTpBK{iKFzw^h6=wEfNYFjQAt)-lR{nb+}E+1oF4(6ZIH%I=+{e^P)&=&!BC9k|# z1HO~FIGg2JHiq~&ZB^oM$a%hb{wC6+#NQdaP3}#eFYr_IIKRSO-3;OhxQI(s+nl%wgupf-WcE()-9kgpHZb&r(M7B0`UOE zHj_&nHKx{hlkhFyKdb$)#65HI6Eatq@Bv(L_Cw%X3H(?2B;*@Y<(DBYnX{K>>1R4n zbrO4IKBNKJn0X=Iz&gfErgtOtTKXzx0xrjjdg0gXwR}yz8@(c0b9T|H@F?sU+JcPl z&@Sv7h0n6NT-j=G+y10OcnIeX8XAE@PB51Gud(7A2L(D(BgSP1oh5eR*1QTW>A znf-2aw=*H2ZeO59kNe_{e?Bn86$0kTC)U@`^o}PvK+lMm?{l5%Z77WX~gfj#?o4 z3rQcj`If|Mna=?lVmx4`)VJ4X`|9NOpZW0E82ig|Jjy~3{E6%}!#*=}#JnA4;!8XJ zJNwPt&Hez$ZFv?yRV|dVw?fvrOs4}l&MSnY!haP%ch=K?Sic#(2N=Zty5CYZK4rzj zp2~}dk)G}bJ%R5|cz*-`jA8j_rj5s`enV;Cyt5vXFgJg;5IwFsk!v}BMEihh^XAjO zn!zl6(O0twH2=B0{z7*Ajd4#oKE@u(%m2uar~j$&X8heNX;z(?p=dCB9vYt9;~K1m z>*8G{^!2P%Yg6=Egp-iElTB}w9hA4cUzRf0Y4=g~PNJi1@9uNtTkz*krXweh)iRbm zmb#9U&vG@nxvRPQK)$@2k~d)8IlKXM`;mDA_cVdrR=F4O2iPi8^9J}mByWgL;tjWD zeU!um_PTnumM0S+E5E0?)|4?-p?S*3bt@NA@v zoQ7tIGddR#^;rgagGt`t$m4bXe(`)_GJlZ$Djof(S|;gBia#`4@>Kgb_enf&3{Bz( z+Fv^jY!_Pn$4Jk){GiU_2j9ry2f=Ch0pUv+sy=F#?=~kMZ_C@wk{@7v$lJF*gdg{F{7R^H~#pEb{4{d@!E}YQN<=(0{A@ z40u|*vDB!QT*cl_(9LHT#YQ9c;Q+#?u!81s%`{1L1XYl)^=kHYuUnfB}$K2g@DZI0F~ zziv-s|0AeLeMI|Nv^_kPf5rRGE6AaCAzt4h=jzGAUctW@K2!6h8Ckz!G473U?qj9% zJZ4fX*z$(wL73B5Mwr9*+}(-0c)KwMYkfBVwO!+bJ5>zaF*ea7q9X=j4qx!5%j#9V z&tI#0AKnkjdY@|eK5+*b#;!yx~w5QJ?ytcb`tjQp#Eokd9+j9 zK7siWOI^YF0S|RIFV>pwL9HUz?k~g{yq~f2<+Pnj_-fdC-)Vtgx5Lk|^f-Kv<9yh= z#CPP_<LsX^n<{^LCg{@n>?rc4Nn6>NA#zMKozZVuEps91%Tcwyq%RxCcaM-? z6eADO2Y=_y?)clS;{Bv44v+Md#-oUnpr6Y&)QfM6HYYy^I<)bjQ{uz?iMXhhbzcU~ zym@dD=x{k|{}04Ean~a5^Z_oo6dwFS)qhnp{}DKl78k1j`Y~wFjL={29Y%idJN{^^ zn1l15kMnoo+*XWWjhuUobjR~dXKb4p{ii@*4Tu%SK$CSleA0JYH`a>JkdJvM@@Jy$ zzpg+Gv2K@!1>^Pf&6WTUB6!Xx>UV6xd*#Td_2Ty)5sTZ;&d2BN>2jQuV0?;HI9OoQEP`j=~rgyy%qgi zo%DVp&tKpjeiA^KpM{zAy~0lq@YLc5#LsoW&yWK@5jQ}eT;}vAlOEg;Eszhp46r(y>y8E?+JGyJ;SBj9 zi^fC1fgZ@D%$cEvZpbd-8o)CX!b|1v^IAe?f9RvPU?osavys3kB^PGZ55kL3< z&%|p=#0zouMdh3a%tZyY@wYJ#}uq!oM{<1B|(Eeh+!)4xZ6#U(~rIevWtEg`qMSe0uP6Qha<#Y;3;~fbc_HO zM}U{m>s3CAjmrxD8eWQTPxhy`A};N`-@(eU3F-60Pwq(W$#*_r*m=({+P?GK@T?pY z<2{HPP>s8DAlEv@*MV;~{q*58S^p|OSMji&_)PDU>j`2Ej)z7~(nk&j@p`~S@uS)N zMd@e7;&`i1Y`sDIx@e=2H^IO4fDk{D`NupX>h8X5&XsNwq3VwDgavJ_1V^_c%^wzu&ch2quU2cK=w)JAo7ghYK4L$DPSUwYZ$ILP4 zwqjS=d=17`biT%zFI!`_4$l?2j@>(795+iqC*|n#Smdg_XEyQU`eVqQe7$=PKD)tv zdxzwIpj+w=0=+oN6RO2?;D<*g?Q1_F^{IS6VMgYFeDQ)gAWvcbYj+M<4%x5w@-NH#Ycx%gt~E^)*ECJzoF~z>#v7ea(hRzF=98E|D~}-|Ae(Qo zS?Y1hU&DM7$UNvLj(n17&PCTJAO>i#N3mY32fBu=Pk5;aIZH1N^Q=o8`6PGac}1f> zJD-Gisp@=^F`GtVw?JNDJdCC8jL|ya&S0J>TnJn_p=8tNnu+ z@!MAVMUPx|Y)!w_H_E*Jn&{!8Gi%tNdBEyZUtgHH#kM2E(vD2vPH`z;;RC^%(tWJu zu1TX8|7Eha+q~)4=v9#E=ERvu5;sj@BAbDaDN;1 ziRZ`5;UlSr&y9QH{>+yOp>xVo%(Md{?LLj(++h ztVxCb(+wYQ3UeiEai@j!M>=4;9rkIp`0X(LD9!zY?VIPl-fo;c5G#glKp!91NL`p` z_^$i;tljZ!(et?b_~OsdfZrt~R*d__8qD>#;TGH*+1wq(d^fclJ@9WxpC|9?p0E4| z-@Xu>r|Wn04B&iEG%hcPZ}UEcAy89L#zvHm=IN3C_zeCFk> zoQE$uNqt}AXi)Moo8C@X^a@%T27L^J#y+&xm9)(`BlTYI!IlWurPt)kTTi*znKU2% zY<4~6pbO`Ee9B*-_|2tc2HHPbwgmdO%rVz-5%#ww9q-BU0qw1#--q>pA!{#Oo8~{T z31QE^FhU!$1^rA7;80NevmN-;ZTYjC9sX>IOOF0kN9EZnf3~C{tA|yucWraWR(68_k9 zKK-hA!hG<#GR8J0*k@Vx4;w6pZ?0DM4?CBIziT1{KI=S#srlG+^u@C!lZ#8vw1NJ~5~_8a0l^cn!K^mfPjaZabdSM@=*>ATuVPaa@FmY(jY z6XNeuQU+fA|3oM^&70OmyKxT;d<-(rQ;452e_&z-?s?fGuB(fqrs3?OrtlK<5=@A% z)Wya1^6xqL+a*@ku|IsFfnH!W??lS#o5CjU*{N)PB64=olV%#d_Rt?S;9dO$K0AgO z&wa^e-){5{-3~osAMS8m894eEwEu8-p6e`ntb9Gv?b*Fzwm6+I(*G3O?s-)Dn(0p} zL>?sLAB2xf{2spYVRPx~YokW`{+O4v=X)}i#QlF}&F>-iMPpg%esgL0X^_D`Rh_`+ z#LWS$U5Mk|obM#&HL4HB`o-eZ370E9I_pt`_e1u$)P1ept`)G++t5G5Xb8DF#yef} zCwO-x`$;BT9pEQ%_z~M+e<%1;-sjqnJdb{{yXKInuQ9LnMz!C=TcqtMNA71i{DVUd zpV3*{KX~#I_R&Dj%-+s+`p@D8ysNJsbaS9;Gk$M%y*OU&dU4F}Iy+{#T;oC4{PA_J z4dX+oxfm3uhfl%}kj~s3;2mHm@H@w#Zcq$8;UxSChgchfyJtLZ*O+-d{DQa($AkNH zG|u94;kc<&Xn z0C!XD!~H@t@bfVAl`Br4G9T|fVH(Na*lp-Nk`cX&ck+(NwsF89gt3md4nhaqUv%7j z3O-u&9SInN-;MRb=g4(%{z0tYBYriE^MK#;2eI2`azDSiX3b2}hbzTcpVE^buhnOy zd$;McBA;OGJ^ix|LcGYwS0(CgMOvl z20hE(tcaD!JZkb2!b!i2vmY_cA0ck^DE8oo54B6yrSOgq_SI!i-OAuy4qbM^68ho! zY`J?ys#uhOehz|eSK-;~!r6DK2hoFf5d3W24&qt4dp@4KGo8S>4T`hym8m>5(u`h< z$7SC=1URLD%PGKTIOv)`47dyfF2jJwa1V4>o)6E8^ev3;#f6{&o*~cd2J{f;xtUuh zVw*){!#hfrVb8dKs7?q^D*4w<;e)G#QQm99SeCCa ze&d5Pgm|@32%q(Twv=m1ev%dlZ@qS|4QG?&IpC~Da8|Nz2xm2dvl`*KkiTE(T!8Z- z^`G|H=W8q-2%j~Ez6|{91MCv$3*9?otHIoa&FJw--5Q^#Tk`ZP?Q0a`Qoy|;<^FPE zcqwulh9KMQ?-cJ>xVRDe*W`!|I*3P)= zf6pEb?6Ed)k8`j`2$o>}{@~}Het*>mz*}}3_Sq|Z(>*#es5i)1yy5|iN9eulXM{22 z7lz^|59U2Xmdr@S}T39 z&96kf2j7W2TZB7*c%Ki>Bt8Du)>mzqirXj+z4A?+gV4v4(w%Wvl@_Pu>|`Zq@KiBNMd`v$p^~Oh?}> z%3SlAqwVZ*M1G-VZg+aC6>He;-;Q_eSc6r!Gi2DYhO>6v&LKQ2$HaJs>@k_}KZ|}S z9`X0d64#4q_m?-C`V5L)8`1)wyMJqchG(D;ei!ug`Bbs1Bk994lwaeQ99t8LtP11q z))t?+f6ZobEaGk2A7Oustv|Q#nBsYLj#0+_aB+ML_bRy{cW_3V@w*SdQ?9n)`y_fZ z4be_UjjQgL(=7Y7ke~d0Qp~W|Bt#YHlk3@#_U&y7yT803{JU2x!X>U1V;D0lA2_#p z`TrI1V0_|-kn_7zhVlK_yXoE)c)r8uIvX!*S+&-CaCOwXydo-nBaIcnlY_AnY4X^r z)TnTEoIg{!Ry23U4ySj62R&2uEPvwt^Z#BUacCd@&hFvfm$Q3#P{JHAb-^8Hu{YvO#Y%kdukc=X7>R<5mX9#**fsivrb9%HpwlXE>w@NSy8Y^`Gs z*Cn2<^5SQ!)SDZ@gY)NyKjZRE5uT&V@}-;uPBi1rIwAfesdCX~2ACVL75#og;El|M z=?5PxE4?(_9Av)QBHWGD7kf+EFT-Xr=-Rv7=@+;zY*br4%g|@6tn_lwZo*&UI-3R# zjH!NTw*18BN#cfi`CSqA&FZ5av*oUc_cwRNAUDP+C;Aa*qAwX zd%{vDfee=Vq`nUuvRLXUpslQ40y&qblMK~tX3rptzDb9L|1)zv*TZ$t79~xMzMHu| zVc{%sQNxmYf>SprcCAP)lV?F0Mcxk{XYs*@@_3vcgS9T*7@s(6Ss&*w%Ktz;j{ZhzCtdw3z}ej(M9Ih@^sT?**uQV#nrKTgE+|}ydUL@pY5&sp zr47v9K023$HE6s8v>3h%=x4AkdN*c}hd^7a2YvBf;=KmesnTEhbJ$*mMy7_fs%7=e zKj_`an!$71zK=OeQk7}wE}t5VdB>A6-xaH5uRiLl&RETBL*>Xpm>KPxCMI+k&kJ!9 z{U{Ul*fnw+zJCYzbFAq5=sh{)Pl(eE`0OkE{M@#kTjH>5Iz{{PIL=Y?*uLzX4!g!r zyGGb`9}c@_-G|J%Cx6b4dFXqIIXmn*y*a$xQAao6n9~t|KZ-ef9Jv;kICM~RWWT&i zl(_-WZL<0uV}Xd*;Vw`m)6AchA!fQCI0C=7>~E)Kow^T0<}*0*7@U2yp)V!-VAnjp z{bl%b&$XK)2V;o!L${($G(Ql6K4rfC73!Dl_n6g>sWVg05b(wD&W%ZP@NQ2zXCnKK z%z1FE&$$j~eAAf=p=Afw6LQAzX;-`6y$=tK5)%h5aR z`02BlOOB7R6Dl7e3oo6!py^Ir?Ea>q3B5m0{{BE`Q|+&Nn*Fs*wZCa{IF3R;CLI%Y z%kuZcGgL1-d3L1-~Mc=>UYqBF`Yc`n@RLLm?l1b1D=&*W8D1y^BTT9 z(;i1pK>qEOJ-^qddSsuyRZ)}QBSy`BKXi`|C2Q_bV6 z+g{idKDP}$lUHw-y-9^IYTyT5(U|_WNtx=TY4Vg3j3IEp)H?VXLN3=tkL&D2b>VKn z#t5JnTh)=vDsDMknT&B%e1|=szaFfqZWWLz#S>gKaS0Te+e~ifpb<5 z>sH(irq@T_+KIcYvwu5!e9)(M0_ItMsyTsDE0o;LIXy87ldiLaAjeD4{b--A`H7<58H}`IHeE#*}J>p*6k#p~I zC+~#s39`;LZr*zoy1obU^hqfPW#5h0@8X^UiS1Xm0km0p#&cW)ymF4?oXfc$?n$p7 zdrV<(!`SmM_BV|E4Lkd&IAt4f0rrZ9mpad4*Usgw0`$sUtem}l2KZc2=XcG7ugc2V zUsxIKhit;LID>NJ^S>zlAQESx52MFS(x~3A@b&7KBg7#CeSeFECr}GICBJBO8I6=_ z{0x1!QU?4262EZ|h6g?w-p8xP8;%&w2Vy4>=hS=!yrF|Omnq7!zuF(@ z0)DnV@UxwTpUpJ_9ss|UlJVeE!^}$p51Q2TOUKhrh%ZGu#O}rZ=2x(;p_*l)332i! z#L1hYhv8Fj@)6BL$UlzC?|cEqUKw*eDS2ySh`emTrFhvgeD&I%iiCO zdx(buOY-GS&Y8Y9k`S4OVpk@I?ls@=yEZ2c(0p@nLG&MS*5DU7Yufm%-PnV(JrIkd zenE(Wlu_On+l2T&?ZDas6}v!RIGpK_zc!0w)K?s54P20Cz4(ASYs4hvSzrB%JnMJe zy@<2C>3SAJhtDm1$83%lv~OPcv3A~7E(&^4XHmI@bj>;r z@BL0Yb5)prIyoos^W4I#!?ZI=W0V(~hJ<(;zJR}v41iyHzg-peKJ@nyzw2GtiW`Ov z*XDH4wQP*{>$SqR9ED#}zvrYa!q7>FolsEf;!xe$Q`GPO{ zZf2{o#3gQUj)lFaf?D5O+!wKXBmkbElXy0!jlUhbE8i=gRrSSPT;&@Bg^}rPFlYseqfO2I(2IJ%CJB79&AVrp^x_e%ijAyM|GU} zf+e9p4c0#QyrZ|##Mrb!0SOUW855_4gt!tU7BV|WiAB)bPTU^kSax{3*d}joN8NM_ z2_s?7tcblcIF><GRF+!9QZ!V4a3$LMO=oanGiRjY~|Pp z%CcU&ea@EoVj=d4AvPin8!7oS;N;5o!w)XRJBdTU2Uhuuaet0l!&+S470tmOXF0CM z`_{m*_)+*9?U(jJXToP@Jd?Hqbc=3N+A{+KoAP8P`8$)WrCjECm^?v#^3Gb(`gHyZ zVxEtbZN@k+k+MX+U-+F3QSxXQ;~vUF>_L03s~b30$sv=G}tR|L1EPKS(Yf0{HLEc)D_1zFNL3NV1K*`a=vfrY~%@iEzUC*z3)CB zJTA|PzDD{Pd*FNEccYESetPw(HcoB(dg*iHnI3_x9cVxDKL_^9_A4JapR@hmbF=;Q z`~JGye_Hyq5+NVPGYk3nDdQN=QJytttZ(Umwi~P*&~LUppZ;z9-u$VB5kLA`SU(t@ zC0;0_%-uS1%CkNz}P_-cMUkaa#;l6B%D+A&#@_3&tbvKDcc!=}tM#{qmyjHY=~%X!Lj;#p$k zCIh?cu_}DDBU+NRBiRGLSq^mGMmZm}|7>4K`}1^pj+?zIHb zSpi=oe_tYfa^MixPp0Rq=P#o_YyRL_n|4e}>@8zl744Y6M7$31agG>iXFU4+!Bi{q zA#W0vg}ENUTv@#s%VcpSMYNgiS0>8OEIT$tNQG*lXgKx-nPK`^@vano# z!MrGkUuB8-NjK|2Oc~B zo3vnjMREQaoAhC_;;6dVH-39~WjlG5SSz^2;*~A*h613rp z^G8~Re|Y6cd#bhYQb&~eviolAumj?Ny&1H&96I6K)8*DeJDu^%8F2OYbl*H8@y)S> z`8|;{P?`D7r8)KM_K5wB_MP?e?7Ql`mm1rUlXd=JuiY!o!5$SA0m!#x>dY5}80pTz znESCFluYI9x{QB}e;1;-jdO@+CZ2*U3pFi>3DF*Gk-XzQgC29Ab>kWM#(l5Xc*eO1 zesZ667|)L2nIHMImZwVBEnU+WZ2^DJA6yU-MG2m>UDJ2t2K(g>oVWPtSagZl&}-GT z$D_dBl#?8{EC!oIZb))(VMP~OHlq^ zl-KP8-4&nC;ze!Pt)~e50HniRtv;S&=*c02Yuw#d8ze%H=b!N znMm5jh!INnQQYqGx(^syh`DXZvD#+;%TIBB!0foN>L0Ktp$D-JiM{lZX2gT!;5mQi zZ`fl6zk+wa8utap{W9Fs7qJ95-7liRT{j?4`Rq;1QJ94_H`<>8;8L!?@ywV)T<3@n z9!{nHwA}wU8=~1*hc4pzHP+vRL~d(qk*Jy+&fnkqi_{CP4JG~2RD55VkaP5gvA!D@ zN18u%*3J^X`?uo!RZ&zLvF}<8AJUrGgOxajX%~^)uSe$o1zw z3mMM@o)s9+7{84JX;5cp@F09Aeo^Jji#^dzjvN6`d}LfGb$abp{CbRu07ZxWlVJ& z_Tswb5bK3{`-8)XLFqN-r$C%p-_p`Z^X)^nPn01>@ukq#q56mjAwKR-_z+i>#xAUQ z$o~7>#p_@@BiDA>MZB|1&CN38t=2qoG|60XS&p2coTwg5G*UiwGZww+aqN5KUh2|y z*2%7TSniG7-pw|e<8ED%vH9pvU|mS4{v^?Mj(>sCAFkEQK9_HhGMBQG{S)Zl1llow zums<4ZxmL0yc~RIg&vO|$20x?BUgGbj(Z^2uOME}~yiEQ?g<#T!M_-uP~o7mvr^H~KLu`?0;7 zv@z#M68;3m6N-06anF7wF!rIkHRwlI@U-m5L-zMN?tss%3OO4}pR&e6$@chKv?p|OImYh0LF+Q> z_eG@ss-25=_@1-skmvL=)}_sHz!)Ycy>Ykz`**r=czY7#V7`a(>oeZlJ;QqmyvKZ` zp}ITJ@9n{-W@uLw?Mgd)aE{=AVN+jeZ1Q*1EoCoaUMjyhW6tOoF9J_ee--EN0M?k* zM*YOt(Zc%r*p~dR#=aZtBjt7bu=ish-dzlxv9CEGUb1mc&;wQp#t8M~;P)Ic2QfA3 zH_UO!ti_o3I}op^e(S++1^BH%oN&u^;y22Z1meF-WS*1v5YNkVBhFS%-1x?0o8a#* zf{#e#cG*QZ(?eLkTML)_VySq4S*Mg^sm^8MT;nWp4t-ATR{c(mE-A~8*p;Kvg5Ht{ zdr0X7DTQOYFhG zdY*oV_<2amuX*Ta3OGH5eEL4@LGj&>Z#r^m9^{g4!+UZ~zdEmZU3K2db)mpHIkpXG zOO807U_1ibyovF8!1mDhjiF=$G*1L~q72R(aLWwH_5<&2*bxgs{^&Mwt|(ctWu2JV z9%nf#fVd*e>(olIf-(nZ>D_N3{%B|FSquIo$Q`d<>Y6Nkn{m^m1;>KpV$xv#;ILgi zi2B8z_?wic$&PrlTmLzvBWC^E;|-`k2lbonCRStp)p=JMLldfR;0wr9uMPL&-oEY4 zXn?e}R(@*)`plbK@3}JWP0VFEUaRtA_Fb#t2fO-Mao=-w-me-%fdNTV;#le~%3_|G zplPUZ?SUwDNcOAY2y8CM%7R9b+=;kn^mn2Iebe;x`dfwm`p{pqFD=j^@|*B2QO-3< zox=VL$lh_xw^%gucuHEnbXUN~d*H!~$*>_4aZQ;x%5PI9ZjyYW z_VZ6ymS@s5O>=3tyo zpr0oUxje^_%X1)?H7(C352GE`dBecCUkBD3f?VzlD!H7~Ml5GT#vl(U#?->xy#-}n zN11Iw`U`x*E5mp)$W*KWG=mPn2cSvcmG9Ij3{VHm@nNGFMSLIUJmjY*m+Kw5yu*>p z#qjHR^(wh+Nx3|KFxRPPTl`I@o~V=^16A4J8=mc8m3PKlr2M6C$g5|Ql)p|NCUT?f z!)eq}V3eUew(r>hy`shjeV7az<1MVOe`{3A6yl`%b%nL_6i!0i;z=!&5nsu%oNj#d zIPU!LJ2mt*+c=v<=2N$P-#RSo?T7q%-FE9O>5TWF-hQ;FI&T(e|A1__lHUh{JyL$l zIX1pLRljcOmy2WNsGD&v*{}Z6o$IVGL6 zOUdt1^!KM;fAJpW_Yuw`(4<+?q-6?C)`BL6OrDjPh1n|S{`KL%I*I=*;J+>h|J5t} z_Z8&!%HIL}M}LLJe{0%^{j7#=5t4`!!g{$DHe`;JuQIYubn(3d9)B zO5TR`Y9$v>OS#B%Z;15mjzlk&Q**XXtrXhia@>o%bMc*lO6cofzBB;9-=t)&-Av zWzZkg4f(L4E7oJ+F#QcF+YCI(HBHNyOSn$Mlg-rYA`dkD739{hq};;2BeU`#vveQd zOU^~v`Gb@x#Cn~|CJS{S_l4?jT3_V67Zr>Toj+KQcfyD>PGCPVhDCyJqauTGN& zDVx!TP>yUvw?p%%g{|JFZ=}HBrNdIjG)LYBU1=xDd5ryaOGG{F z*B$XD%;O^W*>Ss2KSQ0c`z_MVo;5p4IjG)GFY^>|*C~_{{LjT*>GPXDa_0Y{|B>fR z5QhRI9|j6zubBfcVSJ$yx6$F*yolQ$i{GS?FV+SYXN)It%8 zl^{OJ)U&v6!@a~-fvgbrT=}A%iWkrZ4_{sFU5&N$`&D?qI&WOzoF;{HM$tFoTrKx{ zC4X?y1bvVbKBG*D#G8c6-F@drg_p$xN zev|_m`vo#+fqO*@hYp93??dGkNym5?&uQ@;ai)@$z+cw0aqerhn)bwfQdSacdHpYO z=D)zaWgE>gQL^(&qnOx%JqfI1TO9od{fM)?Iz}AdU3K27b)ljMAmg?L8&RG-tm%w7 zW7)H2MXBdyxh92csvO$(!Y4-CL1UVuA8xJTITgf90Z7O;qzFW#U zVj1sy4QP{UPYc@98MK@>Dmk~WQIzb6Z*<;INI6%$s}A3s>&hlzvaj5yWE;v(KsL!S z1lB`rtd!%#djZ7QnKZ+_Gj>gqhu^=vwPpx7$di{&osgG4$jgJSyiEVzamdSV`D`lg zw9uB#ct&icus>!g<>f5=m2tk-X7uXd(xy@Y*+muMf_Wq%cAKM<#ViTenK^WV1n zu|I)pIbz~xSX0>X)g#VY4t-;=29KJzU%XKXfzt7$6Dusvd$c0rTf~3v%XWK?a@ZW zyyW0FeGl6hvdX((hWi5Jz8Lp@@!t@maR<)rtbb%P=68|!{3VfF|82i`5w_wT7lpWE zEOfFyX8*W87CME$uhqu_v*4@$+xpm7^S%Th{UG$s9T#(agP{FSyZz#aNw!P#e-(8F z&YLd*&hm@BA@F(|ZH8u}-L%0AjdsERf_8ZA?#2CF~`9ys|`jXBPZ{c_N>?CbjhJHEHmDg)=O`6iTYvG#oJS?#m`C$?Gq4bev z$OZC4-_obP{pc-&>qYKYG+$gIUu+#(gLNCsmFJhm?AyAw6!eyU`>UY4TDMsQo~XYc z<*<(Z!(@}x8@1pOH4aUXK|DN__E=Q;2n7-*e!1)jYLR zzI!xy2(pu9`%zXn^FJjPJyMQ+EgW;{({a8RmN?(S9{L53^dh#OM1|}s|KVqYu92fYA-FCuOLY+s0KG{y>hH~1A z#M#hOcL1N~;JoLKc)*z>eUQf~u?_q3xo%Xy&N{Rsz8f))Lac=D^5)bLxwg_9>Vzy* z^~^#&?eW##Ttht_Wj>>x%aAF^jSv0h)w9W|hwVoW3-Eh9Q6Ss@JaqmyqQKELDe>T@ z({gXpKDln<7wa5dwK7(Yeq_1pZ;R2NeApY?*EBlhnnt}^Yx&ALrB|>P zy%B2~YTY_FX3D_Bk~Uliy8(TAB2K?WO0<_XU`*)Owsv>LvAzSEw-p#;9DvT}_@9#fIS{Nv+nC>S{vg|)i?(m$9&LPYdl}Z{-0vO!kl)L}81!N7 z&XX5D=X(di7fN5}?0O%uMWNkl{W*#{sQ=_TlhOBP=&>A(U8wFM(5Nej{p%<-Ui;)k9~ z9zS$rKlF4ou`l&F>!=c6Xk(r6y{Z|$SB&owTg@MQ80#FE zhYcOlw&r{-MBm8+1^AmS9&Y436ySjZ%%3XkBc`v3^UlJYJ0#`C(I9LmIp;Rxub#Ut zm~*fdfX}=+cNzP1Dc9b|9&A}h(e`+ee0N*fF!tH%ci+bTU4HLP#2$u6gx?Z~gVg+8DA#1C^7m!% z1!a)nf3wA`#EtSQjQ`_bE&h4&Yd-Or3Szz^z>UP4#n=-h{MHKYi6wSysQV0ld&MS( zgsz`tJp4#Iuv6;Yi-}a$rNXbI;u@nempkzy@u_{=Dd0_>|U&E{v~3M{!{DxX9`;n=Y4BEaO(0`QsL!h9y%e`w^2r1 zhJVjom(j5&#kq*p`@ic^@5(m&uGixM(Qk(&-cxJDr=g4GIW5kb@te5EJOOT1&yV6B zyzky0#Jyj9;NlYEROpt@BJqXEzNNp4JbKGR>$&&z--X-1y-ai50BWCi>H=;`_XSV{gv_fXVpZKRqwpZhUq@3434EixA6ef8Q z;k&gM|3kqG`0bE^`7oYi7|-(`h5d;6z!z!zM~L|_mTnB9hy4`45$`Jex3Z1b3je8V zh5yv`Fl4%JA2AWP489M!3f$byHDu5?tm#j`KqlSryh5Fc zrs^mFjTzTV-Bq1;2fn!gJ_O~P%z=HO@T-SUN95i_`fC_>^&Z;R9!xrYH*sun4(o-_ zW^yEcFWSeLXM8)X{t?f93Vy;8iSL)dMi-)_OUCtN`9$4h z4s1`9d0O?Y1ehN(j+nm{YpRu{F>el)U=IC5atY`t=e9GJCxMX!Vy0EQ6-_sz@0{-n zD?4K@>G8v0FLZ)H{;rx3lu-&Vt3J?< zGRrKJe9{+u6S~IZwO67?q1&!{|?_j{6zfgZ)wm>)5gn+_;Nw z=-?wR-LCJwM8-TPaFk3I8L-r^*Hsz z1}MNdZIW1%eN$t5RPz!3@|}diBb&h^$VZ5E0dH)}ffePL6)AsN0QdZU7I>Dtg0%p& zy%ad4E4U2bS2%shF0B88!s&>ynG2tlq&eoCsV7eZV`cKlFvcw)F^kuRH}P9P%Ifd* z%dyq=fb$*1$#r9FcT3tb*3p80qdiW%X*F$UoSLG|Xjl9K@(aNSGsQky3(N+-gA8G; z<9kwu(7vLKH0`8;NzKQq40Rx73NW9={o&cKt^#Is;tJ6QGT>t3^9+6mlDzEhdbIBML(2p{)5AP_xzY{r>p5PiJ{GB)(81L))hcB^y?u!_y zG<5^=-^f0ma@wil8Mgr6?on%JSRdlLu&yV^X=f(B4WJ%1mz7NRJN5cNf95|XKXl0c zJOrHkn#T`CIBx^}i4y0Is`&h6vYd`L^ycbZlxviDSk-4s{$f01dVOK=*AkR7WzuGh zH}lG9o;f7HF_mX_;~UN3w@i7v4DWN_zU~WbWAOHD2eW%T=fk%TL4H7gC_MZJ@+yq~ z<6kZQDLfo0I}p|RXu0Q5#%D7w_0D2okgVjpz^LFo8D9rKKm34R4s6t={J8SsH&Y*d zzs!ZFQv z{!9J++=q;~MR^{0epc!+-EWPR?e`v+Ia3(3i)ZlX4g;q?1bl1k6}{;pxv!@LYnb+3 zDV*6l_N1>fi21}m1H?u#=JT$7kOjqU z#OcJC#E1_5K%Tj6@euBnzpPo_m*8H>jOGeHFTy?T0YB!FA9*%?h!N$!0pzs+7OX~G z=g!t5@$zKDC}Oa%XFe6*Up6Gy`cGi3f3OkxNy0*$aB%twto1L9kcSF-yMS9416SMv zZ0`A86n5(C?giFBj2*Dk63DY1kTE-g0`kz52gqrFwpoyQh-()Y(9fMtyt-E()*&sf zanb+BoQZvy5Eyg;&ZvUC2g*r=+ zb4ril{6XZ87%V`(ubuHi%5caf#;e1}1nl9p?WkP8Vf%>>^U+3NQnc5^wRLR&JzoNwc->r+nN4>{Q*V>E+N#*b7Py zt*B@c?_R>X9CB!-%cBSA%s^85#N(+$>H$UqkoP)DCQUv*c^8#@W zPTeEOd1Bdjm12Fode>a+k4UAuf^VbGYqRfbV_rqIzVijSFL=AN?;N-U?_)28Rr)O( zd!>YUAy{}~5a*tq={}5i&F`9h2aV2yM&o+jCetQ2?eTP(T8r^Liu?(I%FU1yn$|p5 z34@PkcrN8_ALQ+Q8S-}j6nQHK7-QdWqx~|*J`DR*%U%5&ZB{LN^>0|~apkZ6tr)*i z{sD_Z2H)q(;1SRT_Bdql%aFl)CmV)68Qe09Ylun)V=pG!Kb;JI1AUurYj<) z*(=A2a#rEoiCZsn4|xgp_I7}OxX;}F+eOGFz_?Vzq-H&YSd2F4;{_-?^?aqw{yO~k z0Qr{wWSu*Z?IVBa+{-aGiel(0wN{8aLf?(|Id#mHwh;E&4GdQatR)n<7{se%NZO6*^uahn zS9@g`f5~`au2*S&+6|jl#iA&h_M(jR@iBKQWRk`dE$&(b?aE7y;v{T+lw}`#-1ZGr ziE_qGb6kiqylFYr`!T%TsGn*IQ`UJ5@WWh5sk6POPjk1>| z1|k07I)Z)MY3$c%!#cgfA4ieLN82g_GKl=h9BaVcaxdAv$SbYzMs*tAK<-AI3+mZG zo3m*H9Z#E&yyu!Z@j>crV5R17(lV8**udOoB1^cxyE0$y{pUOv70hQ$oPzQX@~l3- zH_~3zYGM}3-4t?lG8d6gJYPx7f-^&x>pX$J9GxF8BR}V;@bYtxdFKu=_i;jWJ+@Hn z8SepBLEh0yA$o$vV$YMIeCpo$&`lN4R~1rU?S>9iGA&VQ_EBH!a>UNi6X%IXKtG8| zxQ~Q>H)Bhn5^Z(||!uqk&U zK3DqT{z=&I7j<9cnSjs{)SK6(BdG6qMxY_DKQS#N{^DMsO#Jo6N8+zW*jkzRi}7=r z_-hG%)Ap~%Uq$#$+Q3*}HSrg5sls3H0Dr|NQU2D#e?&|dY~T^O7yhI0*Zyhom*wEE z%zT)p?%;e(K%YP;gw;Q+=g5329#0myx>n;e<{K$pdaYw#E?$r9KBHDsnK9Ut%JUz8>~@cn0jF z`TJ~=esPWiWPr3`$-kPuF8(>WBYu+DWi%o8XPWp2>n~^zeH^R74{FaG^2AI017+ah zpOf3;un*yLc{Yx9PX`Yu{1d>v^1*m@RJnKpv>43?#@H_RjhPrk;~&O6Yy6Wl1OB;y zI1dy5oOZCs{J{+TgFaph{^^mvYQ`Wd{IgT~syTMoj(?gyA^s`44*bL1ur|tP;XIor zVn4A0c<9++Vg@|a0-VE`V2!U7ZkmdRh?`nGJTxmI_sLJiL-f564-xxFpA7sj^vTdq zL%*<%{IePlF}7lD&Q{C?&-apvhYlM4mrcOz3D}>R{+IqK{ugD-g1%gYIpbmHxjzsE!L(q#DgK><(xEZ5C9}n>G__RKA7f028BL5BJ z3p4RU!8HDxy8hjW7RNeDKvY zjM@JeaS{0Nf3vgi8(SuhAr9u<MDy_$<9z@y8gK3YB|bJ63BN9L5Lzv61= z^-ApOl>NoIMZj7E@G-1dYQ8s}9|-LSX8*}~wEcXcOGD;s6%~blv>5t)HuSuxpugOt z7iEW*5ff6EE4f0N=)R}*8*|Y9HDT+IKQFxT_6ejqg&acPq|es|R&%k2J~P0;8fpF) zaRNAEM{qaB$<)!yT&&^wUyh)Ri8V&$*iPqv(d#cW;S0~VA}|)@JI!-?9CTk4#+VBq zOONugVDC0!=H*(k_OW1X4E&#tF-jaC3yeYsW1x;ukLzQ>`dJ#r!1~z~j4|S3437pg z`B;($#yF@khO=&?eJoF9_*gp9d@Pq6#qjm{SXQHbrjKQr+um!(7{Y18$MvxcTnEO; z7Rtx6dj?FA09NQVFvU|d_*kMSXZToVC2qiMHsqh_Z(;shu6z5P^=`-`U{CriDO0>T zgZZ7g{vB3z*5dC+mNnMOS>D4p#4nKrJ#vpI@eQ#JeL%!EHhezBI~v!t0oNR!#?R9L z>|*+Q7$c>9J(-v$=Og?(dS02j8vasXhGXMSE=PrZ+;yiId>-Z+IDIx7D$Sg^dTmJI zlND+BWHWS{)>HJqXy4JJV!6Zy?@LUh>|1R!B8PL0S^sHZ3A4TCwXWx+tS3`$w`KT5 zR(w3UP5*U{a)^s>-V=D2j6n!lw{=3U`>7yT`JmA~Z|%HMKW?hF2S{+7AGzLfj^41KQgQs;-$<0aZE z!jKnO>&WnDC_6y$R_W4~55I$0vJD=lH+1P{e4F@zbChc-Tt6}~mBJ6x^CA5-lr7im zrx`KzJADZm>nj4!U0;GYAoV-e)zb8Pz}4@bFM)nfQ@_7$==Xz&O(L!PBtFvmeWtY& z&ws!i0$S#{F%YMAIJ*2<8J}SK3+|mpmzPf}e?g8eNV! zHR*GZzLSse7Zl(-+Fx*3`ek6pXXtY5gGuuj>_j;ggF%16ByyfSqt;8V(O<9@?K5>b z_Q*Kxy>?yhbK3B6b@`CA`94g%4E)0PhV3XM-X>LpTl(en)+Pp>qnrkS5M=IXo8O{oT0NV z*B?{lG>IxyYLTC4+>uh3u87mUKMxD)lC|$u#(6>6K19Pf|@-qwZ z6!43Gi~a!9=FHUJevF6K+f9gznMqD+Jxx3S`iz4<fp&MW;^bWQ$%F4(wJ<2jZ&{(zAT{k9PPWcqlC zr&7ox_QU+eF|IG+ENF?f=89Y7`chLm-g-iazX>v)1rzL#r|PKZGO$vW#7aC1f_mzD zb(F~m_loaW@4J0qe%+OA@MBj>-w@=-N9kX4Jps1fj67z}56y3|A<*AUTsVDSuhz$D z<0+6sBoh~Y9Nt#zLrP{OrG8cTL+yF1g?v)@crA3PYu8in^ZN!C;T{I1_p6|%tIKz#2Wl@C+EDE(1f{E6YvA5UVpWL_Rpt!1tzpr|pf{CFsu9 zag?dxx&w8(+|P+vbLxM&-XLSp-;w!4?6May*2Cc6Ui?eYPatDLQAe7djliZafUUz= zSiN4h2{=IWF7|dKHglD0N8o&f$B-|nJs?tBdA4B*-p}%vSdMPJx55MtB_Z&8}Ez}K{ zAqUJjUg6AVo@9oFn=@bL}87OT0Smcow=cSHS z>-5EKQfJ~EkmJ%uv9Q+5y#4baJN5?YE9dy=GR*6x_ct7cTssM#z}a+|M~FG)H+hDy z@!j2$Zfmfw;SI!3l|pCIPFv&bYgmJQ4SFojBsZfj(p9(F)R|n5vBX}vPOo&N*QRB_ zO5A%;XV|}7|JU*MW~@E-m7qU}w=>%KKIo_RP|U*~ioNku{1*1>`CNP4`xf#U$Zwf@ zC|0Aqxle(6O1OuD@r!1;9{kQ&0_HI>_d#sN_q}}(DeQyT%lvgR#;_l4$lM39I%6Ni zvT61~gq-*FJ_tX)q4qSS?^`HF93kTj`27LUZ@PUCYq{?MWu|+d`L_PZQ_ZX>l^4s2tJ_kFLSh`8_-NG@y_|h29sq3#Bj*H=yQO5Cqe~lM6 zXJ6VI55xA_EaX`z<6HkO1-s?LXHcigL7cH)iTfs)%Md(;Jkqa3%c0Xk*f*o%_uhaU zIk5@rHpv#)LEy8&c#DB(T=$X!T*jtACvNYAWO~>L#AuqIFqCgK*{kUtcC85A4Qui@pK%y zV$q(iAkR?Bl;=Z^JZGG_rkUDvk2(gn$BFk?N1;(=4aA?Y)eAN6b=kA_N4 zt2lF0PFFc}L%e31oGwRSw12gjV<>apEP&rM3BM`&#&!)Un}>aS3hm02-Q2Tg?qNIa z>J$1)k(bZHIS8x=d)T5*|2Cr@#+4tEdcG^jeK}r^CvQ(%4rDp`${g3I^G-SN6ZYgz z+0#~py6Jaidq-rw+=HC1Bi=;4{Z1LIVWJ)#XYTD`W4sh|BakM`WLcr~fe(LO`&#RR zRazgkPt^xITzya=zSPEfUn2FvJgE;pYv=>mAFZ5&_NA^ka!kZH2eD2$zUAko>u}!K z)6@$AS0||ar`Mtn)c&vQ*9YZS(FXjho|(xf4B~P z(DWPB2PIM;IDC<&4|=3NAb+g=7&-wq?MLVY=1%l<0(mb}Cy)m~_YJsm|k`{?%>r{FsC~JBGQl6rNw*1`H!}l`A~Ix{YVX@VUbCtJ`>9 z4DS`5?{x6I-k7mcMfpsO z0Ke(9=i3Ug5OzY|Sbv=r`~Dh%7$~o8uvIU5*dkM&&l@{RSzxSj5F2Uveh|+;aTHl?%MPEl3}N z85co(%9v;RZV)g$ru4hP4l=SF{D%4zPC@PXEy!4WB^ zNq?U6atHQ_Zo|QcCXQD$f?dArh?KcIg3S_d9{}D?&s)yi6gKj&N-S^iklKH>gEkW| z_|)};LeOsrG@!q9Sl0dUl)8sdcb`*cKw|l+xzYQ9;LdOD6dN(uRr_o<@J-lL3!O)0(t$}sqz|mA#^VEPcE;m-w}B& zZG_*;>)*@k-;liKx--|6r^DFY9}{DTX2jSr7h{`inI68Tzg(Zo_<%f@@wbbww_FFl z)@KJ^KfZ>(Rk7{#m&-W0On*7?HFD1xd-F15U6lWPAYS-Zb?o~;55(Sgu&nuxiC4{Q zg|XjpF*f!q!$z7OW1IN;YHR0eJvI;c`d6c}ZI%@)T)sH={Ti=r=@`2)~tesriKXnm+%G*yri-^`1|TuaWoU+VHj4 zuYVJK?c`%2R(%S%73&shXAk`zU)KU>Yk&E*t z`x}Ir{Zfp9{;xT+V#QzUS9v+ACh@i z+(-CBPG%eaYvhHXY^ML3er&mq68Sqdw%+CXuhm)S$3GUfem)tU5nDe4Y|Yrw(zNq8 ztFR|i#iDdbY#lO5j#H4sWZ1^655m&oD><$@|;`y+F zuWINw+bCmFJRf!g_K~WyINyN}8+#IR_qZ6lL&l_B&4;aJM7qodO)UB*iD^@3t(6)l zx;|{|KXEZO@HKNPr&4!spdWiM|8C?E>s^Wa2S?hE;S7|!H<XOrxAb;cR--5GWT*2mE{`i*IOybeCx7Nnov^xKc%UiM z;hx3^Fdw!BOB}kC$aqT6zh8uYY5#r!uIa}%{qpbQJ;v7@clvo0{iI)h7<)ySPiVFC zj>@6*Bbh@IYi^P@h))Jhb_B!I*et!1T)Xww1iEn#x>RuOhwm(z!QWpvgTKE)?p@gt ze18UC{%O3Y{rv}L@a1zqqxSc|E$f-OZg3R!(BCikA9Fv-n4Q{irv33dsL!U@9@nDJ zuEhrVx7KIZV}tzvM4vtRJEG5Ij2ZNqVY?`Or)3)bP5-0lv#Z%%zbpDo+GM}iXYM-l z@AVntRdr5f(__dlzB1N}~n z(aW&QV&e+uJ9~_9P6D)Xg}Hw(Gp;6b)3>9&!1%=f++*Mq%e}o~M(lip_%8CKn|amL zw^A~%-rZNttM?{iAtfds8jcE`OYe>JTzYQ;D-)k$KYm&+J;uyy8!OZ9?4(WRo^PPn zboNcVreiPI4!q~YO${(^>NALwu77}MXB>3x&gPK*&4{0>(7$>1XO3HLlVgLnxHf2g z<;0D3kCn)M5h{*K==6LzU!YTHd&W~6Qdnhxv++1L5Q{RPQJLr2} zXWDOJ;6>ZXk54JSwfx`?4zNrulAdHv1N#}uOW}CGU^OD#@?8= z&xE8MVwUcCFg74#mKN<&dk|{FJ`urw1utg??VilIs^KZ?^m>fWCK>C>d87NOY@wsb zXVw`%PTM8)tdkek%kgeW{GT4@RD#?DsG~yVg+(0EAnGXU;W;C+4lgh4fXqA3eczdO z5OX%N4wdKSJ@9+`^m$=t-4Nw|E&HYiQD)ID#*$U%-RYj=NE&l4G6xyg?UtwN*Dd{W zag4Ode)V~K{@|UF>bxkI^fr=Z@{=*==9M8Nux; zFFwwXOQ3()H|3rKunG6HuY}Wvsd-))1C=hrnHQfiP~jreKZW2#(33_t4}6Arar;>qtoe=_J2ctBENMl`sDO==o7~Onqz-8eFB|2 zqdv*B_pYW-;CpfWn4Ugie6HimboB}Sn~Xs$5S~6sIQqoS&?lj*=#xW^K3N7|(xMPMix8JfTSeI`j()+q&u>(}NP7wTWs1F|^-EwH{Zf#jUm73_wA|(ON9h-d`G3p$ zWwUIj_W!B4-SAcPOT+K=%kTBeuR*_1r_c_Gl>J!h7M0io)`HS(n`OiXDFB~hZKNscw#{6e3tNfMtNPbU^ z6?!H9W-ff4H?4rpv!aAu6iMO*rAaH+K?_edCyvC z_xZ$4U&FfxDl10E;tly*t%}h#XxHMHAGrGv?hBDW>m+g)@@!>m;#j;YhwZ^WU&d(i zj1nV83+G)ewPC{*GEbdsbra z%h;itj*a%;^v-DUy!ULBNuIj-^628CmS{uCeyls-oQTj^bn&e%QJmvUa5H@|(f` zIS&8hEON>J+2sF9kN}}X#5E3Xh_bERWvLD@0VgOwBUTp z)_AC{HU3l%*UuFH4_MD4M@V}-%RLWH@qYmPZ=HHso|{*NymO3kG;`fBX8_;h`}$pl zZ37jF;EJcoJIA4$kzYj0nGooa{lKNxKyH2O4;m;_x`K6Bi^+bz33BZZTMJKAL55T~ za&3Pw2|E3|AU^m_kLMV3{ub)vtuH-CTY?O5;JI`Os0TWgNR3%_zKPI>Y6 zbN0Wy6F+X`FOzhT=k%$3>Ew6%&?!&JSL7#6AL6N*cz9^Xw`snQ-045SAJeRUq-vv z&%X;>?Nc9;MjJvRD_psC;vu^?e}jEHcnH_6Z~b9utneQniXWC3OyOP41C&<-H&;D9 zUH-O*;2%iO-{#2+>aud=ICJR@+G<|abfkQyoNmTAkf%5YjyQOAzPJb)t!OPge-!Vn zaQUeb`PO_QCTY}x+>-MjNVfi9K+z~9pLu0_Xty|d=QxgL?z#UfqwTtF<~-2t<616r zNgT&tuk8;-i-AFP|MYj5*Y2kobu0Y+%PDg#5q#&F9;d&gx284Q+U?e@#>1?CXqx)T zXQZE&A*x<)JXHU`SH&|LO*)ijO*e*KeA#ZCUC#FF@7t5-;BVR&dLyF^l;L$4M?F{g zJxwdVp9scW`7(lha9)2;@9vW{nA*0_P1`n)KTUe+?>0H~)ZaddZ<+09yL2C($moL_ zOI5#qzZkjfr@Rk*L>lb8%KQ9|Zd0dWpV>Gsd;s%8^Kduj^$!NKx6ic}~7qVpW&^VE1*|EW1+i`Ps-?=O;=!GCJ;#R-h7{aQ{MW@<*eber{fE4~@VJRiWneW8EM z=(Ea)<>{SGm?I+l2M z;%U&)kH3Auyc4O}&>i`a-u%4C?V$&wTPH^Cw?5}X+`KOq5P6Y5zwMV%VLe_J5a;Y= zC=XvKe9d!!&A5M{w8GEpocfB}Ss#3I95=M<{8~AWYs1yz#WG^+YV!aZ7k%h-vsTYsF&s@Xr#1FrZ@nMcJLmxNG`J}$X zw$b;Dw$WENOPyn>=8N{%(VjwF%M!o4rn9x?-v>T}`Lds9Fj{Ywc0}#lUI)fidRF`5 zz4M!$H5%ksX)ym-E6?<1A3g_r56>Pf60cQq4$!yH zvLo$1Si7i6ZbFHjJ3GMN?wZcB8!MhokOq z5%(v1C2o4Y9XN3X^7-B$5Ty}OcMNexN8`ws3>}zCSfQiw-N2li#A_hI3qhXsTn^hJ zBvPQ&8zC$70^+sKCJVt=wCxzrglEa)*i(;oLx=VS-^3i~7JDl`#e!WfZgb0o14E>;KAHiDCQP72B7MA|xUsMb6!TI8ONn40NmE%%~F-)c2 z3sn@2MejwOh0BZLC&h+nsHg~i-wM3d8)AP1Vo!CwP2kl!*z5L9e;O^Gx6jtU*TH^o z!0-CLLCl*Z?|?^ur|b~(o0)iowB46MJ3eQ>HX8cX#C*49Cm>JFyvwy1b2T3JYk6|K z{#yq23WyQg)C)G`LneNpoKST1@FQrHR5?G*@m5&kuQR@p*@k5q?Nl`R6VTIZyQULk z3!}>3Q0qvuF`CABn)-?Qfbj^F|I`K40jaYCD~oXcFm(ZSMk;ki>Vv`jGpzxfZG-y< zDgUVx=mS)G;EdD*<>I+C9q@iy46LC8Mu$BeV4PXZe7sGN5p@_dE7TXy$?CC+=XKbN z18-m~UJjDKHp#P7_Xk6`&H=^<<8O&L1O9s<*nzdsa>zo;aq?OT@+DIKQoi&2Kg!TU z_V=y~MW4V4>u26?xj=lg>^=Z*Zd8#-FeAxP#kU>+` zHl?qoD}U-Lthzqx1YH3Y|SCbt22K;Q@&lnH&+A06n?rMw%UeJsNp~qvc;Zm?sdZF#WubP zTSADJ5EBhQ&pj=%CW*ga3LeGp_Np6VhjCBY*CAy+D8d+Hxp&6H!x7|Tq1<{Gaw{a~ zoP)7}!x{I~D>hWM7&0~BjG2eYryq~iQ|YU|k7j6jOZghX*(tZ;+jGIo!>AiFs*-#{ zY!#4kHnrga(KdM!xnv8(D%evZ&9`hL2Rrv*FUb;XwT~Hgv-LlT>Movj!QZk(S6L_I z5Ai=S-Vx-Hnn0gXR~;G?jvz-8baRb>t~4iGn8VkhQRH|7)cftBG8I{TVVhPc^vSIX&I1$YNzJC3m( z=h&x@yC8fC->UY- z!g&iL;A=~jRrAq8&irNI^@JDQ1#Kql{w5Y zKl~!)_R%7Le)>#&81!u*e_-ySj!}H`YB|J|oXN#kB#+dF&Gr)8X}eyCUtqqZWV`N% z4AQjKv6GZ5z5aM;LX@^`x>6jo>${>2bsf>_ybjo{T6SQ47yQ-h$VJpYC9heHNUaQG zouCD>12#MC>6%HK`LHKB&qZY?))RDnC;clc0y!1yffcZ)tu^|e|5!vZcv4R3{-jb1 zFsDmnE%+|tVpq_fpsWiOEr=C`qx-%Vg2&huwTU|Qigz@HJP&F zAZV=H!1~F%{6;VMUi(?}bNyGh$Gca$1F?{8{0{dCq2I7=Z-gKQZdBuc z)2iXBhEr!i3-$iiGv~sEuWpDA=AW|*fAL!Mum9m(GkrX4$3HDQ7vB0;+gks9=t^|! zUk%#i>#dv5*}4rpV;t>LJmBL+ZP*-t@}x8F94G7t-6HiLaXZhzmNFJ}yVs?;vR6#K zPz2qgWZ3@T2^{alvv5Eii z9YtTW{~qtZ3f>Q3oX>#Ic($m*0Y8y+crDrM-x4AQguZwEBe)(b5b9 zej0Vusl8LRVg61%G=$#={8zvyFTzj8aru*~L;gJ(GV%G~fPYJ}O4b{wIO4Ac9!-P} zp}(w?G&8?57vpi*c-De@%3i*=Nsg74p~?>Em|}0EM&d4aOgR1?{-VrOaxyE~2HNv% z3(h_GgOl(Pw{wmB5cGHeSfLzeG=$*KwjfLDAWIq`N9Yr4f-DIGBW(gkqW|wRpC7K` zy#H?1xiDirIFA_X@qe5-*Q|A9|Jrlmw<=QcJN{z0YUf{_3-=8URI%KXFAj$9_=|JR zgZYCtfB(CC2Ah+>@&D)8VAx)ME>3+;8hQVyf6tG<^|@4h_=&MryFL}?wY^;ajgBBz zWQn-7?XAxt9^r|V5&P20nDHF%Txqp0oxwZU2k^uh+y1X-qJdd&wDMf~=1(n;;B0#6 zgV4&tw<=;M{ax)_L=W~yM^@e{_O_n#w^r7OWOX^@;8C|-wc(NlqpgLtt73~Sto=>w zk2hef;R~0vWc*-uhmN!P0_37vQze!*^)Bn+`>cm`49Iz|<`c%@JjUTX#sR*UTanwc z2J0;Mk7EoV=YBG7`fL-<93h^?I7p z6yk3rFD4d0P?8MCMcqv*7xzVP-|}Jf-8zLctwg+a2z?{JAeOtv5*Mp$#O{@+{2weY zcWI;AU$THY0raT@ed=D02f$yNK8)A*=u?$WpC7;H`hAZ|-dFWeSA7&sF1RwE{PGvU z9;{pm4$3EAH(2A4((u$J01oT-?QYoku^4--+!x_bChX+*kAdzyJBp{$IKIiRjP|b&aRJP|{I2Ui31x2>Z3s+#*L%;@ zOP+t8F@tHcOJbN>=zb5s(4L|kBbH>JXbYGN3Yk7Btz$pJE=0SPeo3Xm zsN1VQm1^A(5Us5Wd)J2fP0m|OyzAP8xR!hQm}g$MS=Yg`0%zGgCrVdzw=wUnhnY<* zz&e(hx6bmIyk>fsk&+{JMVh&^k`;~r0B zuOJV&eZX36hV6s3tYNfgE5@S-xc7VbOMijF!ua4t#47A|`(?x)Xd8|`BY~XjZW;I; z^tJvA`wZ)N(EZ3I)r&DoWIYtp&ocjNyZBMDLiT9{_(GTAnMwM3roScdy=6Z0`mF5Y zL$Xda4jenMrQ4p!P2Y$HvbMV4RO7|*eL(syb=~X}t}A-Q8jQj0rw?YSF(4k&W%Rtb z%9w_geY_WEFZQfVWJTR}*jdq}&%r;szQg&=(M(@J2xYGJ+~X0>J&hL^w~=3xunYCO z*Vb13zP7o@JNrW4&n68$yoK)=yjmO9{F=_2^9|mN%J~JmHfh5j?ab@SFT+;7ruio4 z|K-Wv;1!n-Ey(8G*&HJaJfFRSvX(2jVRr#*Q=pZINOqju$oQeNC|$P4C6qR)diJkAt^kF&Ib^P>4vizCqKA)eXC zGu4>q2YK?_?H`?3UsC)=>*9vHVK2;y71r;F7v%J}E?zSymM1PBTAN*gy;xQ5nvUjm zpNK-1tDIM~zk*nov=Lj<3%a~InrdZ?bMvQCt)$DJHLr{a>&$~XzC!b>5NDs%^zvxL z_z_iyC=RU9b&Mc)R%RXcohgaE_^w%(Lu>Gb;wSpzI8Fia?UgO35V!u0HDzA~<7aZj zJ>c5|!2(>vuZ0+|o5pkCi}#CXMn&C`IQIkU{?i9`IG=HM`^$>q_mK0(FV_pJ?ALN3 zvpjy4?@JjSuF~^ivzU!CQodF!4Ck)j`gh!`@p>pA7Db-^s)(M;dLcHl5PkON-};TL z{OHbE9e?oh#GG~9JHmChfbd1Qc0@n*lMg@l&o9hc6Wf)2>jdVRKhcuq_lq?ZiSVud zo!Q|(_`@|K`iEZ*#{&3mXZD6a*qNQ}=Y2WuE%?;`@XI3lChYj-V)i<#t`oM@B9twO zyp3_qLYcyPti$?uAePt{Sz6N$US1u+9#^b^%&r(&*kKEQXIbG_z7$(}>ngmL6Y0UT zS$I!9+fi0nn}=t!@N9L2x<6-z_nPr6cZT=id#lNt;XTGC>u2qtbvVCh- z#R?ZM!kEokajQ`CVIno!T|6(pHA@s>?@i?{jQjZFif;pB-E=Vl48t>o>>sUJS5kaO zWN{th$X3n9`#$hC>a4HET)O2VXuWGC@DXEwmWCF_SWlHONqPSLVlWO>CwMhj&)MgkFgg1fAXs0 zaqYYLlPcjKz}hv}6g)oEyoY(AJj(*GdsZ{k2;UE&tv zK(%(#7qpQMZZ(RA-~6=V$)--!S#d0CdZ~ z&|4WcJ}IN|kR+4*Vfz0WvRxMVP2W?-tM%)yWahWn0LCQ#arQ%_(>`kiwom*DJR{k@^2vECvC zI;{Rvcty|CzXbl!Sb#EsSYR2jfWk%_+OovhrtOVWtfT&p2{cs+_d4@1EB zh%vKZ41>_6S&zkY9KpaRwwg;(0PReI}n79uyCBKp{P5RFtoQFIpa~nmn zN99tP=!icBtdNa72Ub&Oyc1^_!S+B*)`?1!HakJLEZNSv>q5h-olDRk@t(kLdj#Ww;gTgeW|OS%onpNKXr#+g+IDl^B9 zZQ%N_s$(Adu`M3p*fh<k1b?A6+8$^;*`p_+{h@(Y(m~CH7sb zA;&zP)HK!fByV0IRvO2iVYE8{oMivY33*+J>+DzOA$MhJ{ro`@5y?cn5B;=8JLK87 zx*s@$8~v!>#e4%SKY#FMQ^k89#!4v;CYGA&au$iQpzl zBOh|R9QVowI^#`j+4ZktMw!{;*cwq%UqQ+&@EL&UG)y{Tik3GY>9yk{Bj;k@-}-N$a)A~#0{||_s|AjWZ5WcbOi4%>~XZD@-v6MWI zwPY+H?ueLq_^YsAe>ndQ*gay!NIT@5*uS(me?P{eG{&>s@xiu(S%0o{RzqhzfISVc zd6bUAJ>(DMv3D=Sr*lDZ}!hBk@ZetS57z!no{ z8&T$B_JnBkizh1VSt;0*H;f%zI%Ge3%TPl>Z>Rm$JOP<2AaifHnBya6xS<{wg8HPG?Kj#)ThQ#oaon4IIE;I<513DQ|E1t?{*Yac{shG9 zo3bZ->%_$CjrOX3$jSW)C7b)A6VPd!QNB9wTw^Ho5}rK~EP{+itg~CD5zqCrwX-Q- zy=NigSqq*Oh=1(P=)xXem?@4N!qZ?L0s#1dvUGbeIM^CEL9s`EoJJOT{^x&>XJK` z0RP+&drCfAyNmNn^KzCU=P1|eq>elX{nXn?9T5`al4ghvkTlB?Z$R%*@AXBwmzcc6 z_EzV;(iln(qiiB*gNI2&pBQt?=HPwOZ2)_#wH!T-cJLc1amyneh%sb8b3_;VuK0$$ zi@ApSMJOe1exx5|*ngi z%RT@{_bt64!g=uMEoZ^=Z$if%1okW#-8z(Oi_kvXzUL+Qy&s4b^lk(1_kr&ZCYOnh z#vETqScskA{nuERY{y1?pXdFO9y>vI$=^=D)Hx~Y*;??8QQFgYeKE$kdi&1eH2q1w;$CNtWp&=M#t`H8K^OSE z(7*kO0)tN=&!nDV>>zX)pG1v8~(V-T0d=_BB#>cg&(5T?0Ju2JnD4Z+o!k zmGY(q^$_!<#N0>d8z(&r4F17hZ|res8$XJ2Y@eddhoH@~an6^N*i+VlzfuoFXEINe z`d$}&I*_x@*!Y3HFqcA%$>jIu58eVAUj~lpi4)tU5Yr3$!L8?ltYG=|UW?M}wy@o*FCZ`RJ2- zf7{0EWZOs4_D-kmL%YXnSX~lrX|V_QDd14%$2bD%*Cc+ zTl~nS9yvcbPEUb`)p;*BhPdYw^9TAz%2d9i$FlPx{A1Xg&Nf4i0DB#@ML2;4KD2jY zd;Fxt^NJS7B?i53m-&7j-<97`a=#9GhVzK+KLi@vlVg%LY!Bx_5z6zLd+)WpQ2m)I zFHGLl?HvL=I5!!?4_haw>BQ%6ez3=y>+ofD-WlNOn&tpR=vfmb&yF3oY_|f~P2m1-Mq02(Gz;rY!|?f)V_zNZ0{Xk?_sX6aZluqP{w;gM9LR*vY$#re0m7 zaU8iJwFFtWv~gY~V>9pf+xzU9GmP_P6CoNNN`vLM82-pt4K)qi;CetpMzHeaC0DN(x#hUOcXmkmm4Zc)409#_9xuW(o zd{liFp25HK2K2qp^__y=PJUobm>z!xvgePg3lo>1|Dmrd=o@k2@5_5ojC5=?`&rUz ziru!p{kcAVH>AF;zAJrOeRl!3EYEg%e+y%y*_L(B`M49#(x(VmJK?NhEa7d#dH?lq znf+K-a?B5IPjKAO`_V`Jlgsd&x>=vY*M;vmQ?6t$>or2|HbZZypZE;;_OurFz;-F; zmqC{<5KlZ>Abtd0`jsl{mj{#kpm#HGkSSw$1^h!#Kj1#U4dwr=st-Bb3Q@k$QT_tp z$8j-l2kJoP`{2{tapfgxbJRb11bjzGJSlj5D04v?o+7c?Q;l3;c;^{zEK~Hgwj6Y| z5r+#SqueG>X7VZrZ5@SSkr zci1Nq2K-(C8r+p`TftMe@1%3$Aa5KT^n>P<-N(ABK6#!HtDdYzyIi~V6R8Kl*En1d z=iEwRZ*aYW55U%X5j3S>Yl5aoe_Yq#wYJZ3I_ey(azn2p96?v<@_szyIbiFTPb4{3 z(vx17FT-9?v0qDC6;1DlU+@cP>)9$7WVhr&_S)unS=XTavdfqlqvT6=8J;=O?+Wp5 zs`$~P0_T^l-~592!QkDyp#A+-`+!r}M1yRvCM8-b^X4X~U(ils?)Iy?Z(U)lN6oCC3cj$MUxhCI1a$GtT7=#XSw|YAuUOF_{Tf`a zm}i;>`>>XjZ(Nmu?IdZE_;=!<^drCmaL7O7joENjzSfJ+CXxRLdVHU}_ehURNIiZ7 z^!O*B$7ja%W3;d5NPWX?y1*}XRb7(y@mT-rk73J<9*c$_{YQXlBiAiu0bv+Nn;fI^ z9Yfb0K7c$c3T~8FdVJHQ-oD{U&XMiwbyp|HM1GC1 z5b{RBP4R>ZspI##IX7DtU3rRnt35xZGtplAg~c*Xoid2_rlCFS%8NhOlqx=YKJJa_|-~*_C*}}ZZj}5HvCq}Qu44JK`s00osbXsQgsrX>)YkATP5ap8e8z?HP8w6J>{E9OJgHW3B}5 z#bjKtj=f@j8peNfUy8YDkT(;$(xbJ^Pm@aVp3L{`J2c;G)44=~@YOJWOyweTAs1O= z%? zbb;RGeUonczR4T(HCtH70n_`yKJ-bLG2cL|!|r12Gk&Wx0l#?@eh;5IS2wdf_Qt@< zm}^x3I{y>SS7gokzYI3Ujt!fc`zJ?4Lf=1$`~aqm8%O&;#yV1SQS;IBWxproyTwDt z@X1^ohg8{d{RuoLL7b&tJ1y~txSVUR+c+csh%X_Q;*9NKnN!HdUEBL}nqnL5vFC|$ zj~hABB%Yczo{aRkOHs}Qo}96BHeCT1di+zMx14jc-Io9>=I03lKL%_E#2YSR`=pH< z^)XxQ1Ag{Dfcvc#eh`D-oP{6n5PlEJ_&dN4?MnQxzdH2y{(ovh9Md^>1|NpUTHBbo z@2U&+5+S*ywu)U`2hg^vRH4gXW?mGF<< zbudmG{20CpwLafK{0h#kAV%5+S;2hWoE!3`HHcC9H4w9b_~}R89-}jkd_`vQ%v4h4 z_M#7OXB~79H)LMcJt{@w2ZI9fKGq!x_$ZX_Scu;|3<1DjYS(kP6`Nr{cZP_rL zK$vFurRGT%;HqIz1o+W!R*2Xt=b016h%SI!0|(~5GR9W_G<`TIZ=YvUzLnAR%XZb7 zn@r9$w#9wc8@=2ADeu6WZ&(lhCNs}5K6NH^{QfV>J_xrWWQxzc2>=2>yb+s`FPS{>$JL z@J!*6e7R&Gp3WEghi01hGcV)G)J~KBAjX){x6_YL>KK_d#QT_Cu?qBaS6gWegY{4b zxLxHqH!$G7@9Jf1ztWFd@eco%@Y5rp2h*PrZ1K^CiGiV zu_i{BXIYyT6fDtM8h*GZkMb~;I@fyX(Q_6*Q>k){MR;02KPR>n`7(XC{E;`|NI>mc?*@!6x`4R57+zvh2MB}vKai~g`JPMJbD@y;)MEDBa2 z2=$lY7q`-1{=aj7|D)%J*y7#vmo!S6KLeVf{5t0*oGI^|=lyRDzQ2n$fEn5e5=S@2 z4{`?&j;04xX+-VTTN|shA4LtHmHvKL^iU{f4bcX{zE;(*!Glfc9(jdlYa8KPp>0%J z|BGHXbQ0=5#n^A`fUdXYld)&5xL3(@&1|Oy?UdH@%yXHic;E0*Ei@{wJl zbY!nMGR!qk9ip`Uz20yC)1n0WxPrc~pkMgboV-u1-}b!Q;-&R(_X;r!zFzRxHH)AR zo1SJNuI{^cGI(2)yf@|6+Eo0IG{?Dd&RXB%ytU5tJ@8NJ1le|s8V~sd^%>}E!_Z-e zon>g};Q1h)OI|eS)MqDT;~R3Og7T(S$_#TrLI5^S%m#w(AGwL zZpP=%I_U6&BA;^T@A2;g=;`@*R|xyF!E*@tk+8_|Y$l$S4N*q50_VujJc9F9BYnVS zH{{ALoFm_h+#%Oo;-&Te_U*wKh z)i$oa?<{{2vb%VGS%P)U#upIFf1sg=x#^mZ%D8VyTR7{jXtE7=d}LzvHJ?%A*K^mf zxH$}fTg-dq&;a1Txf2$L#0k>?OGCxF3_y!&XG zO=jvt&A}rpPFx($80>BJOFydunThg^G^+}z0706LigI(m2*xiojtMu|d}@BHheRRJE? zM;v3_qwY=Y9q6(+d+xL;Zc+@#8GU|NQaCa33*k^$QMLoi;Az3GH0u zWV*(@_RYYBvey+Ymxwo~^X@CcANnwKYUJZ~cg6=nXT>$wrGDiuNnwp}y(@d2w!2;* z$YF@O2Vk>rkC%v})AV!X=)&{Nd4Kc^yZsZ61H9ztV{CV&yJhlgU`)gGMM~Nm$6n`r zG;h7J&Ay~n^HuW6(Y89*k3C*R6H;c3M-SU^R`VeKJsO_{Sw(s#tV`gB(DT*s({Li} zrH`X1lfOU|0e-*->6&>cbY1v8b|Kf&p!1n1>XUgZn8QJrLz`F3PhA&`2e#XSovrJ! z4%ZR=XrOWFXP~ddVT+8JKjH&+P{(KmO$bpi^giaxoS%L8eI1|2@HtB~-pMoaLi}>j z5T!9UVss4Lw{U58InE5f882_X7x`C@F2uPerAE^WzOF*N3!yF zw0gMD#Cm+svsPMOW^kI3uR6zZHE^Tn{b}WOj$>!}>*$+2m*>P~p5eybaYN=A9y_OM z_%k@xAA_$l?t49cTZlnzmgBVZ4Bzvk_{%r2fBv=WwRHM*$dcd9dUfW{|6hH*GVenk zXwm(n?B)^?Jjf|CJgbW z#Ws*{*IXGh5|^Ecx5W?VB%z7H52FwYF`?==U$pR^_( zXlTB881>t%;?Jvg1bDfwi#phMRB+>Y$Ko@dM4!m}XqTArk!bvGa<6FkXrJ(XbV%&@ z=$Lr!qm#%tc?$cnt(ebnY9Dehf7e|+^J(lEwYr`7HHTkK_JQW$cL&`p_VkHH;P>8` zg*Y7(_tLcDT^`=?Y;2!s`r5I&#+X%Gm}tBWbTjC+>89MihjdA6b)KddFX&|s+FOD4 zR^aZXb8+Us;CWF^F9z~n7cc2eP8NY{rg1bG1+S_`u1t;zva^PF;*g(XF9%~gi2fDr zb)at(`-`V=J_TdO*!XS^#0Z^xDG^yhU-Hy?YC0rNsk!kRLXfBM(B(}Zzl3*B>Y z_8aR3u`qglkzVoL!~3o%53JfjoZnb%*KPXR0Ac}oZxvzA{SkSu)W8pri+`I3`c6%G zwFh)LPzzeA5u#=Uv4#>h%)tqtAf7P?r%~$`zFOQT0a(@nmeYWjIl#;8*dg3`Ynrbn z*CWm-5AP5oAmMzht`xZHkMAkausk#_e=zc$@cf}$<7lCa{Nab-5B+fk&#%ul^8wG9 zf4jYS%@^_R+%{2tJjpvS2-ji61rV-g^dnLG!}%NzQFJ zbq=&#<7uw`N^&^$InSBFuk6e?A&#Zg{;;P2k3Qre}LI;7J;_{$>@{dBYItr(ec<($3EC*U|9cSu&2Z5%&n` zasC?XWIT9O+$ua8pU;8^;>?DeFd^L(0#1Y15153-Fz?X?EXK?~b->iRjrAw@Zns{1 zemnKn(Ra!?=f^cnK2~DuN9y`j;EhNzqJlOy4`wW@pkLc;&j>b7_$>Tl)EKP ze(>T8+m9iRLX`nOcyJqH96wZTIdo>q1MvUL;QyDw`!9p{Uk2~L4Bmeky#F$I|K($d z!+^X4d^;6<8yPP*cVwyqzK~IFC;hTr$|;^Tu$KPEG!Gm8$jQV0cKaaW3kg3xU&znl z^XM-vlc<~gEOtY=G!6ARw;<+D7+jR?DSoQyYP3D{2cUtE0l!S2-NU36-RF&DpejFi zi2W6zKKrYX^l10@OuM9G?bFJ%Z@*s!zHOJ$zARnF`q{(DX21&gQZ@>llG%UCUd!0- z+d(6yhrZU1tMH-zcB~Ke$FM7SPf+p9>)?IKLFFSo%zO6Id9=CT+6-HT_7ZI+r2{E{ zCViP$r;GJ{60NW~sN48aU+16S2R*C+`RA$A&_*JCldhSE-f2IxZ;W9WZ4A;k%ipxi zgw*fGjzPnP``J$c#?q&Qe1_1E*hbp+VSCh>*jBN!L0TR3G{)ZheS{zL_y4Z~Kb#BS zf%CFe)lvtz)JJ={P@El1r5>w#7j$tQpQU&=OH8_RmRND8Ku*(CY7h5NJ)o@^M3(y; z&d2cVfwgu@;@qUh7|&)jH#a7Bu4{@}D_16t1e@$kZ_}N{YYGyT&C6hyKgO74(Cg!JKjJz*xu1_ah=ynf z3ptM^t;JtqY(8Xkp8cg=qoYnLDR zhV|E2H?4W}Uq7E*hPa}cqTec={PFM(0aNtHL?FL1uYckt5JVSjc?-b}tLDPT;j zBcEpchkEa0U&{B9Rr?#nAHZhBJ*n2*zrwvtkI4IB$ajlGYn^q^&(wZ6{0&98=SKP% zKau-|Y5O(?A8QBv4Kr{D0Pp=mE`>$-9C_-tohI#{{J<}ITl2Wr@mlho+X%a}y&^yF zT4DZ-Ys~*%l;3czc;!OCQRVe7n88g#K53r+LDDSPZvvjziqE{49L#&}BR)Ho_x{M~yu6R-S2&+H z-dG4qvA7PN60ba5GUarq+d?g2eWeIw(WWgacH=gs+4 ziPz@thkngFEXo_-O{~ZH$3pCzv7 z0~@}}z~p7vGxe?ixXx&}ny3f9luiS^74YZXPn-|$?e2#y=3jTBw|LE;!e{)S(dY3h zoVAB+8gdt1EE+1Ue-(E!EW(}AuO`d?=wGnU{c3ITng<~JUhU<4j;`y#bMU99TU928io%)vfufY#x0@mT+&2f~GKb#}ycSzbHOIn5bIC9;YwFRFX zXs8Dr(l3Hv@G=zNkHk`u=sX zZIF$%#c%&->VQ}W0{)1;8raS?Q-KWg>TAjBPYyueMV{KmSCXGjFYkd~P9(>p7q+A5 zDEt0*eA@C($KU4_egpJp zdMMXmH(e{O$KB4zw+!BP?McXX?h_VYek0yd4cqLCV{J1P--7jhd3&;auwL?lAm~Zj zIoCdrca-#H$?d~cFM+4)vZ&usTK^BdD1-gR-ofJe?}1;Ot0O<%D^`G?Gbj6rDtsSt zquqV@thVt>e#E-YdZX)Hko!Jmo?T+LBMxSN@3-HtPjo}?AP*n!902Ku?Q>k@D;&>h z(4CyuJ#S!-_PJsBu7?fi9?to(JpJEzH;8xAo*QuZ7c@;c@zpSjZi%JL8UBoZqH)H1 zA~n9a|3MsaKZQ6W?y$CopOf}Xsg#FxunqFW_QjI^Ed?0QH8uFpqVeo z{mHZVURpoYn^n|&5x z{Pb-WU9279xRl=@Grz(D-qQ*HpJ)XS?}L5?UDQ0}MmPfUp|*PBXwwOgFG6O}uTX@~ zm!(cN*|YQNB~`Asguro*4VqJ->X*+l+J*r8Lv ze+2q1^Az!W!Aj3Uv{#3H4z_;;`T^oFt`&;MWjWeGY79$S>%|Lmu{Q{LHGna`={|D% z2f!osi*pw9H{cF};i=HIprd#Wsd}D$j`|A?*Sbry=fu9X^tObFv!p+kcICqu(`Dcl z`V_`e^zp+ZC9=+vR<4cGap>E?{+tW@I@%8Wmr*n>@4w)ANcciD9TLATw59777CdCb zUI6w+t;hqcCG7h=7{42^_YfYm*9q?&a3=j>Jjnk8|03kX zXMyiY8@|Ur1-{VLur{fuK8$fdM+JO2r=pLi4AV{rJpj+;fTQprU>JB-{9eO|YkDDY zO}>9}6pVG7#C55xtMJI*N0gqT_)H;MPyZ=?Ls<|*tncgKBiN$^-Mu#VEc8tmd}&;p z)vyPYY{1=HgY=Q%{y@wnm1;ulVhZ{nboR^Fkyw--@5DThzSAhA}?olxx@6y;0$OUblds_`3ukY@Hf{9f4dYdD7a4`&=tJN&*6Up zzbqYc@_F)i;^J$-!;<0mdQIGM#`SHjs!#aWy=^r&UQg22E)mDk$5F`1XHDEcBX#WZ z##iHfMtLicpMcK`#SdXyGN1cb6V-T5J(G9hkt>gtUE8zybi_71WbWn`@2F<}ABs~KO{dS%^@HBSBi!q1dHIF7e7m-H}`#PQh_yPFr?|+Vc$HPfK{=^yg{XKdS%7=uPT$FMLZ*j%PA^Ydl<2s@`O)|U(x_+A z-aFnJOeLS6TZev5-qAF4>W(3d`5W$CnE#e>9el|?m#d`#Jp8(?|%kK_g zey822GlFs>`|fyaUm;^p5sQm9Q2sD2ELEr*~q}1 z#|H_=fji&2ruGy}&*?jxo@OiqaDn}#9ajMND+Lbu2HL=0c@j9goV*0OxgfkaYl8b~ zp+n$|%_6h;c+!nK)6Hhsarm@WElP;ISLbd3-ftJLy7S*ZYGrIh(8u2&Og0bfk~rwY z-nQoNPW^E67`~q2XSzIThq%@CNH3HLUmjJL2)rOPaTHS;nVVBw4SNvf7@g8-v{iac4<@(X(^}INzBy}+KtLZx`j$@rF zy1Sk_?&e)3)wsWYVa2f|ee%4&!rlBT@`N8p4wd7{L-5-dFF6|D{!`wkUe;N>@@TwR z?m3R%Utr9*GVs^){7~*uj$c3cDfO*8Hi1WL8}6uk%b2p6cU@!NErCiv*>CFv1s}8! zKL2q{xy*Pq%=+YfZT>lFEdQiDip~8&oHpPz#J+Z#oJ-!Yr}3?%0sd7Wl6B2j-%M)$a3j9J96s<95AM1nIaoUVF{|AD zM%=vmyv*4E*#&;lG-Ng(N$$zp554Rt_UTr7)L!!9{6jPk=M58g5K%*8vGgBQ#iYHln{4BUB}v=dL? z`KxC}pJm0I26e6uz(MkP+K{v*40-N;NoynGxMqr<^_EUg_VQc^&weQ0a=hw1cFOoblL+{MV!+FVktKh?g193xo-18~) zsA*T%*X!I_ziiZc2epDPWb+eUpJ%Gsr>_6RsJ;!@?RpL1`=H9hn`uw$hip%ce`B2< z6Wjd@yFJpkZpS$usqY~E#XvlxvkYm6{pmf4LK}YL_2<+_wNCGBOZGwi6LQM=oP7}Y z)IZq1o|YV6*E;Jo<&Bh(m0;`>DL;$iseO?lkC`QRsPj z;BTeVSH^b!^-<_Q{qgIdKWo)&#J~K~p_eY+k%zq->;;(26>uH8NF&yAdE>+2d0G#@ zs{&_n$a{7aiRtjC{Gf_K#><-q!AHEve?=H>ALhOs#yj454mEFiCPV4l zTBo4BDD1n^rlK95O*%j6SyL35$R~N+y7VY=^_gN3_rO*D_@*83xyyT-5trV_+~viH zeJjFQS=i+=C;U{IBW=oVH)PKw@gj0O{>V~!(O$IRA8}XXK8Qlt&!wW!2YdNxr8i6& zs;E7WJZQTtJR3pIwc!EiYm=bg3vqHgpM}a&)$T5ifXcRwVJRfte?}I;0i07*s@gDQOVgeVGF{CTllWE?A@5;vr9z98X z-Ca7V-)c6#4xRl-QpM*9 zXcMvp_w?EPkA0-XLtmr)Qy_EMn;xCdek%4mX{V<|;%j?hpCIn>QS61{J#+1yO};E) zhu8qyS8x__2rtWaGyI%(D&qlo&Y5GXMt)8A(ho4-U-=~-<(v;$%mq2#oTsMejDGF; z4cmB?dBW{y^nGOJydv>o0r7fV&R60OW8hqvOTB*LSCL2Vb8+VWFT&c8G-T7mhnO=+ z0rbZ*Dn}vn<4L-*%izugwEd!-H*;EQn3jT{=AS9B*w4&!tB~vLK#LfBA{j*=%(c7+ zpQ**C>+;3Qbv%D=RzIG!CLKWA$M;G)mF=%c(1%e!an(Ba`az6wSCtF(G>kcyDEgUs zZaZ=x?@6`*2h1hz2ki63X5`~W{zb%1A{ROM$XkzUTyZT>M^A~LM_$1?oQik2yC98A z=E>x{ZoDJi6rsHClXshtAL!pTsg>(0|7ddJ9X#he#ri$TtFS4V8~qiT&u=Bh!JL=m ziIZ`kqlw(;ouEf`Pr^$mLzppt^~`fW>Sg@__)R#Ee)u5r#d{AR_j1z0ekk&ZsOl&?T}UKOhqI3C zr--_ixw)tKlby)@^dsbcde$n|Iqt7Mk^J~$mEVj!faP_5`v$cqDg7?w37j8sMcH+h zwu$-kt;epjP3Ad9elJIxdyzBmCE4#oJ$uq+R<28zX?`NP2m9{qubb=3d~d61mm57k z7uuqq5__AV!H1B)ZW{6}KAU_B>w$R|s}TPVoPdY69Zd63b$`J_xRXegfeit?zgSg(m;jAC=BmfNHdqt92d5Fa40lO9 zFuxgdkEIq1_$aw93Vr15rzP%>@749mv(93_jcugoHu2*Jn0x&c`s3Vi#%j#mo`QVI zUSG@X^~LcP%Jt<(J*$B|7(+wZ!?~k<>3c={*GPwX zww_TxaT4z7KrUSOE;+9S;0+nxwjzPtmf&py_{7}ZXOoDltm51=cwdn?gx}VKoxts} zs?*4)M>^gE`o;S7@H=JYyNIh5=0iOfMl?NV)9NYYtJ89lc;|R$o?8Z5yc7JeAHF!? z%l)j(H#(Xh?#&-fiz^ZZ*AyLLo@(q@FJXTDRZk(0XJ)OhNI>5)nU8)MV5Rt{Di_Cd zdp;)lm|mNTj~$PfVm{3Ae*t(>V{KGpH4h|rp|0ufPg?jKO{0FP^Bv#ogzE? z>;sM|59%lOBd3%%9!KQgVKIW@uJ9Uy)mf5sY z2>twBAU$B&a%SiW2Go0UCN6%FGafj2X>g?>H+kI?v8hO*3?%X$OokMt#F7x~8e z{mFig7i(+3oPRdo*fnPU%Mzz>Pl%@VR{+{GvkzbzW>QGL@eXqT?RND_@4dd=A-8T5$JGeWG^F0eW zni<36>W(W%xtHv6q+zU^aeUo;nDKW@djn@ii?AmDEA;Sc>`$YgVeV05Y*IFGPa4l4 zA8w9e1|#?$*-sRP|a@Ba{d9=^OC)P)9dmdL61<4iN& zP1#Ldf0B3sdjFf&)Z1Qg==_(53vQzGpR{%Ul<4qL-)AlerSDIY`hNYyOD)v*sozuI zrw(U=rW-LXt}A}8!*}v1e&?PE*F3+M%CS?QuRuNO^Jd}_=oEMKjM3+h+4?-rGn&-p z0W+z$8_?+iUWpqx&Y;8J=3(A_=G^CgE$>&P{<3}2QRwhPeayArTzwuo{7O%?YdP!_ z=x7fXEzhCfJZuY zcFGd28|v3=Dh`g#EVEY9zc1sz}F1vCuXglY1 zI%|$A67Zv8EEyTkIr=e{nder5|3Y_eK9Jmi9NuQ@W7w;qEOY88W?~uo0PY|YRzsdq zA30bx4Ky$H6Yw-W=U33LEYr$!`3I}cLRY0cSb)2y$Okkm2;Ua)1U`FL>e#DeqP0I+ zaT|EQI5_tyz)I<}1GO2RZzlHQImgaiq`JNRvOa9>=Kf?e#!lThigHRX*ZQfMPEA>wg2EH~9fn-tym`Kcceeg{{}(bm9rB_?=5NJW{RtE0eN(1GALn?d zV!Vp3KG!1F;|?~=%`_fM7C{bY)76SZ32X*MSG2*D4zUNYA#M~+t$=@3=^B?X9_tGB zoFu-fH?V#1EVd850e2bzZ`nG+DZrBL_oJ>;Pbozm!g?R-IOQhCuXPp5Yw8qoE)$={ zy$FvdU&dIdQ?z0(*}5+9jJ}+x8qDKK7^UW$PXW^xE^_FXOez`)Ftf9l3q1j_hWSjx`8fSG9j< z22X>JC;RMr3}WWNZriEfQ^yGCv8nMy z?na*1KWFu!UHWBtpU|b*z1VwuB~D%G(rm`m+?6mJkJVX8est*dJItzb3-rWS+q;D8?m?jM!ejdkTBiHsILMhe_l5_PHNt`durTIKE`}5 z(AR{!0P|Av@E?HR74YYIcTiX69sy~Xd8)|sHSU%HW-^Cx$?kX~bid-6z0l1bjk^th zR=g=_0DEB#@J~GlzxL}_XnTORWE^g`{jsDKu_bZpznOE)_d+jz0q0K+;2d)kz8_D% zi~V3j41tD@LqA#k7V3{&4CzVtI){vG)BoO}G%Z_c3|#OjUPXQn>;qOPsm)8kRJckmkJzmw+Z z2PVDoT$ZLe?thJ?x1}RkyKd5(^1(Z41V;%5Z;V4=& zUyyeRk$!j{LEx^Ovxu>$OnOD}GQczwzo+q{=<=wWyg{EgCXdkbR(SmLI%jzc=Z{&Q zaMb6Iopltf^!mx3-{{y8O%K-JtdMy5i&1!S@-IXDgQaD!hRCQoP1P>?^i+BfzAJo!CB&0(`Jcf;IqB8dDt&EL~AeD z1IF@!rOy6dMy`8(&bR5`e)jjG^X%_0Bh(erb62-Ouywl7?k_ z?1SfTnU9b@^$qBYW%qe;R!hv@QG`31xUWpueuak87BF@O2*_0Nf8(@g8{nj?bAV zB3s_5@?+%9&)U(>jpdD!C$C+zKu=tQdi}vyfb}hwDmUu^s#iL1Tu%~ZyIEpqQ&v~^Jw{#nX@YIln2Di&E!X>{`TQGCws+s?z_DcMS#OsSyZs420c~2PNHAbHFrSd*Hmcm(F7vkZNU(CSTJ%zK%r&D== z3C?WZ^?$}0|I9c(b$+=!-ko}V#7ezCBJ-xz4##(;W_+|a)$ozE^v=XSoOwQ!+VRmz zoOwQ*DEnWuqtY zNoseM;%B?7nr|l$E(L!)UNu-qI56J35d8O?+if0$o^%c}qA+&a!GB4ACdO<6U#-Yd zhZr09id9T4Wci)d;@mXEY78Eeb3a_w_a7+FpSR`tiR3rez7hZR?FZnC%7Z=h7VM$2 z8P$keG{ht+&++`pg^eqr`=3Z2!T6LsUlBY12dbUHKhW~rl{g6;4u5W^c?f#}#VgCD zT-P>HX5Ab{etF;U>d(>tHDiYm-_4TePhor|;w#fnBBv91i3>O?{>gXahyGx!OsBu} z#1yee$@D^>lIex;!&9ag23|Z-==({-XkJqOO~`NX4_khphmG{3isZ+V?pE($K8!wm zr%ZHD;TYfV;~BPoJS!Aahe#{4#QA9_u@90;ec*-+2dxZPl;OnBIh>QX?jhaGw&~_v zeCN8iENkVt_>tgSpqq2f^Mw8Tr@G#3Y{&-x! z=UIT#>C0nFhRb55(_OK0Glj9ffEd~RChe*6vK0K8<%#l!U&Ogj&heR$XQ%MJbo%Dr zRO)B$;;$qVy1kLq=RgO{cW!!cf9?qLD;>GL3F~wUY}n&ClLou7`e+h&m7#r{-<!bs(#|}2YTvXO}0)fkMZ6K6Zz~ITh}L6`uYpZC48SJ-oqJzho08u zknaucy;}7yV8-(A;J118RI&x}2|_&dG|N-xtN>j+nQE;cPA#srewKjTHYKkFFRd}e z`yRJ=-P0%d9Ny1>Wk3ct}(JoEW@o@n&c z6y3YdbUlXHI^6jtUhlg;_*hG`aW39mO`i66(gfak4g~eUH=A~F{m11xYLa>?^kWl? zTkfZkzEq#5-R#p4XDzGumsn%!y%qUk!upeC+nvuKlR&%2tB%Rokv!Sy%D0*U^KkJtVlIF$lCEo$BARJtPr+M-Dq=dy}zzKQUoO{6LslQDA8hcVg zd~xU#=yjkqKFlNn?BMNg4 zS4rGy-0(@ts4W4!i^TbzMR;dj`z>J_XX(!2|DsIKra?Aw-sUdq=M&wNwz*N#b~nfF06kAr4Dh&O`|^B(AyNe2MmV^#0K z4q;u^!zbv+1>Ehf>cChk@SNv(@cCr(>4y@{C+iaX{yS})UEh@Z!{2#lyNU-bU)NJ# zme_YMa6J+C%%yRs=)n{#ZGKSb^GkkEjx#3Y2VVd`z&T~qQT*Vz%@0?AMv)=eZ@@46p(DI^lNUT4RwBU=$=q4R$ z-DKG)dBOTJF2R-`N@t_~HcUL!g~w zkfojroybAi1lhp+h$~swvskR0!Mo@dHckSM`Cjr+!G4Sp`AM5y7&HAMkQMIlCtKl% z=DkE{cacC|0-l*bthw~NFu!FgwG@8l#>5fYxNATo(5vWcc9-yc2Xcw8x(hm2X5H{E zm(uC8dXGWB(rXFthmK)A>9uLCT7Vo$-ZalD7^M%4XOI3rqkMR}jP;{ANz1keN9U;I zS;xKb$uftq9?LGoiCEA0w>zI<{{-`Wp=uZSAaTC{G)Fy)em~+->tDP6Kll{dNBb0r zk2m3efZyj|p2eDcu?l(_;^3K!dsBktiEFOWBC%SoQ_uk7FK587u*YMz9!*X~yT>Gt z?v!x1ux50A;tKej>2Icw%59V;oH>*^m%Yg2$oc5`aV`r0PmZ5{&SjvHefVu6o?h)| z7?7jX?^bxMd)|tBAcLAeB;C9PS|96^4q~r?&!zrdeF8D5^h;lcI68rNhlVHp*q?wO zb425Vc8fkAKiY?I66G+@G>^q^&;{50!^8WeKeey6f;J=8>pNKQh2n)l#Be7M{g!aO zRX@W8#7h)iD-wIJ32|mI{fX4^apvI){fQ-FXgc}sdg*)O9!h!Qe2PB6#kQ>g7(4wp zSbxpTL;dK4?XWe6U~3M+PQ45}^D@^YY|YECGcUu=ybRkloks~a>lN6XS739Fn;XJF zjEvO7PVRT;VY{J+?H^YUyNDd!^%HkH^e|OU@!eO(=wZh|e;GYY!{ow8+)F(LJe+jI zPvJXlvmrbmqFn}CZMfr~DPIm(9sB2JP2x?{7t0ZEEVJjIi6fWfMNi?L-Tg8qQ|l?) zhsnD&-t-zBo$r&lhQno*@>OdbXYQWS{VF?b#;K3H|xp)_IwU$mw zj2^f4-RpL)Ll&RDN}aJ3>+yKi%lJ-S^AbMU&XKFPhL0%E-Htj}Id;EA!;fol?7l|^ z7n^|Nqwa;H&XMUct2Nm<9LE~u`C|k4xend;sbS8e6Z3enY8SqvjjBF;%KN{iY*O+$ z-Ot(;kP$dvHfsMtzgN6s?AcfH(DVO$d`Pm%`L|Q{42!2&*2}BCYIpeAL1YXrZhKq`r(Du ze{H^CFyQyLheKPu!Oo5PvCwc#KgfN_K_CZ#90YO@$Uz_nfgA*K5XeCw2Z0;}auCQt zAP0dQ1ac6_K_CZ#90YO@$Uz_nfgA*K5XeCw2Z0;}auCQtAP0dQ1ac6_K_CZ#90YO@ z$Uz_nfgA*K5XeCw2Z0;}auCQtAP0dQ1ac6_K_CZ#90YO@$Uz_nfgA*K5XeCw2Z0;} zauCQtAP0dQ1ac6_K_CZ#90YO@$Uz_nfgA*K5XeCw2Z0;}auCQtAP0dQ1ac6_K_CZ# z90YO@$Uz_nfgA*K5XeCw2Z0;}auCQtAP0fpTL{dzM;5T!f<2MWNA!gU%h#;Ae@%_i z)b)rj*y%U$|DJ%+9ts=k0tKVP*X0ie!bYe&+8OGqG3LyQ%;60V)pmPbA@!x*7mTpY zyY1((Ktz6vhI?dJH|%F)C=?vix)3)k-`N!%r?{BqR~_H5UQc&)>?|-3Yt}a27vXX> zMH+&*G$P=4bypbOzD)sdq;p%qTUJ(P%vfZ&s>@^tE>~MePuJ#%_rXrT^;NuEgmArhwj9HNyV`*s1#!mEPUp@h7<8}yMLje#Qp+^GY z_F!mhjUmToY>Y(%5o2p-w8MS?L~ZKY5&#^+fv@$*TQ{bN%E~JI7x8scQ`PGmMr+91MkMbrcZ%#Ha^0E z2<{Kjv(83{6K}HI4KU|&;jJ+jWW6l_^wbk;_BbT&M!m1o?*mS@-p9 zSt`lEf%k9#q!|czhXYY>n=cZrBgNIT+cIOe;YyF+m}lJ0IY`2()(w0H`~kI+dWb%; zBIw)HsMcsx7nZi)Uf3>|JyV-@)4xfWuDjQ*UTxIjYfm>|!r^4-S3}5IuBTg6L*E^a#hU}q$X5xZO)=hZI_^>jsL3-#zl!r-R$GxXaX?%V?Ey=OiFFb4md z*910U8LgFg&I}RjHt35)yq!R&T%4PULp}n2F!|5WKUZoHC~oTrNEFz7p)0Tz54(MB zozWQjNY6|yfSb0j7Hqmfg)eX)Ly}^4<7l#pw1yjQxLUs)Xp4sIn`%}xv^1nc zE(Kvl#-y20yK6~L+vY&DrOYTd0A2M8m6PnQyue$s;w%K}}I zz?XQ#j{0-ijiMPRxuHGRra&~)i%TxD(T~(pbFMYe?+Q?#|I5B$R*Nnd7H)f|g}Z^k zJNf z#Jbv?PuAVH>c0CQxX)PIbnkr)tHHOLm&+C#maJ*vm$l39{W3q7tXsL9I0EW<)K)-)_t zU=(_Qv#`vg#w_3@X0V+tK3vANDHIO%;PS0NjV>nAkBnJj_#Tj4EEF*%a+yD$f`|Hs9dwU%j{uf#@9|R!b$XWg`rSw>H>NB zjdqA*SEMWhXVMAVrrKxgrm`!k1~x8Vy2@q*QZYnpGiOC+LfNENTA?^Wnc<3d`WMaW zkz;VVaHHA0dT4-P8D0`u#EZq?mE=SwIacn3qrs{u)~gp^D%-jhYt3$lt2MhW_@w>N zA>=_%;CIgUyy||nbhB7*b~VX1yLy5_XhBk5$Z>NOL)}nPBlC7_yDXS#mGXm6=GCK> z@v7tf*!EdNFZgll%ci(S_=j=#bb~&?O+(PzqtxM@Gk4D0Q8J>(2)Ss?o^8zB(uo#8 zhR^^5GaYT9{V+i+MW{a#)#J))7g)%&7ulwZQ$cdM%2CU^B@p%DaYlEP_6GFJ%~S-} zDl|IBP5r1jv^5aEza63^qlJ!A-#&x>qeh7NU>s77#yD?5f3o$P4E>EAmvc-vm8+^f z-lf;(4|Hp=0Zv_B*k@g#tzBL&#)wp*3NP4~LxFsLVGz9whg`<&q^;Ec|UL*BNtVP)z z;1;l8I)ZZJao*WDuf82NjF&PsP#NeBwRJ$l0@-a|&hM-7&K^?QF1FkMqnebEZa=gVT@dJ=MR`5;Xg*juG;HaBmsK7S12^Dk> z5I~+|?k!4(lfTy}xlL$|UtonT(6dHCJ|jIPcq-ShAM2UQuSNsjJ9}|7B8#i8SQz{+ z!=#i6B@szJv^Z;|OKtgDll9adza9r0n^&J{e$+VZHf~s2@=p*J3P`fryp~#13uyq$ z?w0ri`fl5-sD_}=&^>TU`|5+C8Hw<8qV>?I5(+l7_xc!E)+S>R3a9*J$)7z(0& zwY;n848mU>g;Tu{aD{F0MW=|3xDAvBz$Un1>Wylx4q%)!r0LMsNx?yeSWTJ;2HKTB%nB(9K%|y9$c&n)uUM! zr0)&`hPE-w^DSf8kchKPR;&iiVn(1ywlC>z1! zwkgfw&?B9G>NB#n8r(cA`&9s7$C$T#vbEC>h>V@F0|gSElIl^Ba3qaLcmi!2kS>=m z8rss?<_(5?e%EYLV!&HrYzb@$g=5}O*bkppI1uz%Tr2kCA@jN^{1hLgt3>|Iid6Ey zZ9R_P{9)^6OMP8)=wA$U8ST(2F>(9PfFs8jp$Bx9pDfcC-0F+L#>kRl8>th*H33b{ z6%9q*j zl%RIMH(EB2zNgG;y#+m@I~3`((#rw;wJYYJ8ihj(>Ly#|VDXoEpRE{6x0B+*a2kXq z3V>ob8fWu|J=$9x&lokt0SAMk*Y+mE|6!{F@WCz6bS!muFFZ9}A;-AO{l2KrTM4ca zhOc+-TwQw3Jn)a3(>;}65LX04>*~n>jC$k^+BMiN^~L+U0{6F%Dpz5kU;HoZWL^@! zpI(0JXDn~sdie;)(>FN{;a> zT5p5(>!+Ru56mp%?uB*>dK}Oo{0)!5-RFao=u48DuJLtk3K*Rcqbn3OeEOYZjB4FP zsF!%LIDGANPQc|`4cI_XV!UnLJ=jKwVgX~lENxx~ZQ2GZpv&qvr%wsD@zxCn9MC%` zwo=v!BX^W$cvHNAMlpZQ@vn!fr#Xx z#3Q|;WTBMBwguV30t5x@5p4r2T-sC8h`xn+0JE@gLQ%=|)3=Xv!#u<7K6fMW)ri>wK0I!TvRgp&TL>0`9tXh{I7Q(#>e{Y>y5 zRTx|O4bH|gLp}?@qeJEA)9S&82=33#+9@|Hhs9{XUOrhq6mXWjK~+dXpMG+4~`5 zs`YfSg3_G7{G|p19_3BcqU`c=j{qJ}KPJFstqLw!hAn^;)o#Q>J%&F-ZMF@5Si=Y1Gz!B$0QFMt2}NXyExs7#U8YN{v=|ia zXivBc{4E$Q7Ze`z4gZ}6&JzWxhm>@eCC6rK3yP_o#$$I*U-%BeH_{u!6btkXnj}dBy4qZ_>E@<={urUI5 zPyr}A9NI!a8Jn>1lo^12I_=HXTPkn3fPl`Z0hdZ78j%!l*Y|d|d(~5W0z|wG!+_O| z1qV`|vuF;80pJ33oDW$g{W}tX!v!`If*Qg`AQZIQqYDbr3*Z_c6Sbouw{GA=3WTBj zOIJG_9C$5jG{MDSs5@gR~o1_Z}>X-ChfX2Czr^?DvqRp7GF+dRexiW*nN4CsM*M*g(8pK)$@oRNV!%2?I zn{H981?sv1+zu3nvVk2-g&=|&c#n2ONIGhjg`qXT=O>#Y%Dd&vy{eiGcg#QCXNC&s z`$N0FErEI6A<38K(eUJE$5!fRAiAy$zgn8!$LN9jqed>hhpM!f4)u;e+h%t8Z|JWb zc1zG^UK%`NR6nxJzp)>f#~|0L_HZCjIl6uIj`QGpYJ>VE1%ir_GCD(T(V&jXQGify zyz&jl1vSxt`cLbcn`V-3B%mY4X0}GT8h}esb1^uTu;pp9H2lyLR|COTHO67VPYb=A z&8vMz>~3w63vedBNTgSGclu{m!UKq<4KC9ux9%Wav0Dh%H!~9TLp;osbKwur4@v`9 z5R)uUCsu{w548Jwf>G77E+u;vLU&~U6kmejLx)%wXoxcnSkPsZY~0!bwyJ28OiIxz z#i~#G9-KvGZLBmo9~XA;K--x)p-nGK$jOx{$Z#C`Img2FVhc>wx@t`cXjX`y3O-(-7ED7!n)d6r4Ir zY{D2a<3osns)+G@IS}3mk46+blHBIU)*mET1dF)~O!;m~Gw=tg0jORpjQMl%R7os3 z4mEKEjj48Q1U%3YkfXqG!m#=tQQSSlzonF0_Q$K2d7JKAyL?THcXiW}H4ST;mapXu ze2;_>4A_n67y=LdWzw$H2f5!ovudjZ#gQV#RJB{a{gG3L0&R!t5Hl+Fva&r?8B^pS31v?6B1 zHPfHJGa^+b=^$p4Y9U2>pg4s)v9d=|^A{ z-g3KKYT8O4mc*)*Oxcd2SoxKbG=~2HhBl0KdxRa_Z1X|Is-&+StW+^Q#T7`=@|9Qh zP3zB|zF0~@qAEgig*Wxk!va<-X$GPV!m6ERmx3{dLqQ-KPIxMGP#O>dh42$bnrLED z%grB>3cT9-34}q_K&4F%YD)T*^NnPdMAueI_Ar--ZH1}H={i}>$x13*Mplx`khDe) zfrVC9X{ed1?%`zFq*m08=YxnDJ=ovh=?Fca&P^M8xZrO*A4UZI{!hrB56r5tbZwmXk=LbfXem!4FC1rPS^^#{vp5#>} z!qn%r{m1}QX>3IyBa~tbLFhb303N5?Lre6#qlPS+ZU?%qbU$UZ1xo9H)F%9>Y|DCG z%#QLCLWZszkq)09{Ftma1m%mmEjD&T^I#oO+T-8@xGWtDuKVs^vmAQQmzP5u$jE0% zV$8+`F5E%`iwX`z0bRBc#+OO=H|45~$(K`UgJJ-X$bRK+pNxo-r6nU@8VZKOP|j_I z7uG&vaJY3C?}EM;jx)ZJ@~(~LP($fW5iMk;J>ZW)QSEFq5E>Fzq8)}Pqu1o206c{g zSo$UASI)2eqJnS`8-r~zul2>M_&f~PRt6Di!a#MRLcxtFFut_0R&7W~X*#bR zanvZl&LlC@NfUuaLHh{jA!MYA#0}&+iGY2;&9636@w?F%_8V)~t_9FIAlZRj09~Q3 zd87$=@(}3Uws{jmBVl{k5Cp~}-99){W#A%66J8Ct^*TCXk#z^cogoAQL*~bTPDI|x z4y5HmF`$S=t2xj6xqYRK0GqPxUgX+WMpzVl$}xjV!3M{JJNQ_J zGR909p{$#z;;}X9dZE3o0AT~b-sLe|fQha4f6Ap6qqoLy|QUSN6W`?Hlwf#k^0!j_&8 zsbwk${V4iZ9;~!K9-M`By{fA15Ag@Kz(l7Csmf*ef_|gtr}`(v0UCSHgWAWJJ0sj4 zSsR7o14ltLh5{~l9%~GV9@pK~6$|ELi?Fg%(Me`JkC4@%xatAxkP%Rf`GO#jo)bw@ z6uLfJ?UvI7&yR$(hXqiCf`Zq!Gjua}xN_)&8sw_Y_@r%^N%By;ER1C7Y$qxDd+<%o zibyA#^d^I`-10Hv1xJLJEnl{-+1qmes^$0LoKq--y@T*P9z>aw20c~lYR*))37(D- z+3{#p~*8(pVeFEK{iBv^*pPls5=*ogIp~W3Y-fJGIwJ zV;y9leX5DlNODix!KsQ%gve&Ss$KP1jdLmZF=IaLG08v;HWNXZrmgVG`sCXzr^d&? zjga&k0H5@ss+}#{d;x5vZbRP^NDi%G{sxzWJeLdxE<{(z%Lj1oZ$cyrMr7L{YE*ii zDOajm>NfJzJ~L?@K^{TRfE1+uG7lov-Xat%jU#WWl5%`XPKEJi>^+Tx2Ke&OF_t5S!O-JYnBzr3zW%YwPw9`wT}v)W&GI0(0J+M_nY;_wzK*}rO(n|7ueIyI>~CE73>af30@sg zzDZ;qVJsK0Uqy5LeY0+}=YEF6 z_y~CHDub|~PXhdvR;}&d(2jeuF1Q^aV7l*?bMA&$2w)(8NOzV6KOX{NBukJB24(Oc zwq0(p^yN^q#*gBT@qaqML0J^2!be+oj308d3(aA~k}Edq?Co9k_|B8!0vikT4#Yc#^!Y=R1~eVNb00Z z5RW3E9&G2Qbv6tDPS9YcC1tU5GYong4RGku!5A$t^`|v@FT5tON@1F)=Sm;M5`qHh zhbIHEHBh;fhhV&Rq%!Ai+u~^D#_Hf`T}}Xd_n5|cQ3S~w1CX8^sRx$31O|K)0&m6qs=FEF@0QHusT#` zumdRbDCL!|QAwAM_N5<4+6f322Kaf#iVA}a1+X{dxIGWmMmaEa7>u%3jP(*#IMkPh zx9m6FkfT4W`%UoGplx56C#zK-IxugZBMw2TP8f{Lp`x6{8+Rm-9li z0~dqojz+XU*w8LuUl%k(6-k9XZeS?96%H4o3SJ+WdR?J;Az1i`6O$fu91TvFSN$=V zQR=Hcggk=a71?n0ZVk+V%IXVp9@x26F%CXdXE1}atn@mQI3nN}kcZH>ArI_!ZTgo_ zxdeU({YlcZd$V&SjOovQ4hClbwIC>s1lJDt)h2tE#4Q|ZaE(CWb%Bnx-)Cc>tE~gO z=9^K%UeXFKUQ||1u93?NfR<=xG(g(0U(7D;^6GsitU=iI;4jxJgocxkjD{Y3c{+&= z*!5+(PzCgE zmBSRn;@NF`$7Wu{*B(Gv3XRlC+l2})Og60|&R}igBm=#Z7y$f|3UKy3)GM6CWh)ql zo(JiO{@v)-0F^^|f0izk&h7NzSIS(wYHtbxf z1`rCuGi#&}E#Cvc4(+L+4;liZxW?IIKofeRz-Z8CI}05mZ>vuo#brsK8jyrLxJi0L z2Xu&&xk8O6vyovR$cO)!ZeQsiXzzqYW-kGdoD_^{KAI)uFpsstK%kq_PbQAA$=#0N zpbY04;;@t+>FbIaaG2?}gz>>SfN9SJ99ep%WE}7X3k(*&y%9D~pRI;h)~1SbE80W= zB}2MV(5UQ8da)1}BA?nUlKGE%5MpB+&UQ_1ti>QRwtx|~^Sxb~{o3WzF`^hSwq@XA zb<`n!sd{NIOj!Gw*90Qag19Xrd9>c&!T!|}>bJhmEg;8AN>?yQ3|5BFkoKT_GnNKC zTGf;mf0xk$fo<=ojGYOvqzY$tiT;1y-Udpl>pBy?T?Ghrp?1q*GRm05Wd+4;8%b@O zIM^Xh{q-L-P|yuR0-2W7NJv7cEVU%$V7u)Qha|*mOGrYffp(%yGD?3BXinJ;nQ*I@ngj+o8s|!36C9|5}CSkwr&2<8^Ti z#ir>u_`&9NyEfgn^DfxXxR(dA!#%z*rMb`yhPH_8B81&h9A(K8gS?b|FqeM4{xgmKtZz4a^GIT?@J#F+>860^LR2y$ex zLTOh#vmH;=?tg%G28IC0v@geSJ1o#`q3MiYSWiX(y^uUDL30N}$=!giAKXTxiemw} z|K2T1KRu@%XiP0m4{LQv5^WSi2?jAl;3^^?Sg=1DGQ&M+w)#Nb1Mw$;XNN%tWRD-w}w~Sg!42F_;|)_5ryZw>@ZM#RxLzM zoIgVK(__884=YvJ_<0w0c=LiAKcbPKv#5T)sUK#_yPa-ocD{-6P&x7GCOe-sa{cFZ zGzzDd;*75K#r{yv=J|kIk>i||y4iUtOBc2x#O%7^>py>;&B*R$3EzdUPSJ4V;at9X z_R%@j0OkI`qjL{?HAp9pUt1k$FFP<+a~2KJf!i@J;C6;J9Jid4|0-X2M-oTF>|B^? z{(eeREt@C^0TdyI6E5*ERp<|z`51g2(082o+KEQQ@wsqT(=KVi*-*oA?aGbR_xK(I zTRL$PEVSbd?{#0Lbr1|wNU?g_o8`Bz97{-nxfno7-L@JK*n`e|^*4;%c2_7QIF8_g zfje-vL3cA+p!csZ>cD79Uc(m7H`(zN^l`W<(9d^a+2*=CYX4#3hH~WF;_a_3bk^J} z;8$H$7iV$3K%?_h=*#Mg4bD-)vI;r84hOJ0I3%qKaA6br-5BpZKZ67Lwc7@6UQ<}t-*-#bhHYgW z6=DeQ<@(9%aL5YB(gw2Et#N9MA2z{*Q3g{N+k|*3FU-8miDAaC2I*|aeOMmgD)E-i z8*cd2tvt=P(pJbnANjGx)~I|_$yl$&`pUreN;eh;^A9|58@F!QQzy^2J%EKABn<1p z?=VP|v+5K=%mfav1nbiVW*%pULx7h)c0BMfFEgOuj`s?vr_+RE{nM3!>As&3)1kyz z*@J)epdU?v+QV_Y1Nd`tzJ>9j?w%=@q2{2kw>NTOik-oJ7az_YqrX)zW;J!x_i4FaIYx)Ma4GiXstL2eVu7 z<<`&H1}&b6T~qj+rd+t#k4~?V+w6sQr6XWvFWjDFFXl$FH^`}}Hz$NyPYuo+0=c-3 z&UX7fcz*~3C|m{hhPnU&@)LIH@%^D2@gMz7dj9&)+x1g7l<%)}qwo9WvL;K!Ar5o; z^%|WUh7AyOn%Tx3I4Q-ETSuD_jIL})F|BIm*jaJ?`-$gmTd-(_OM*H+*6`SKG_Y~a zn*4^FF@D&&X6!G}DGQ%YqTZlkp#2}w+3G8=t6YCwg{PxEp)Q!@m_US?rG_m;(|xTv zxICQYEgxoG9pv?0=;HezT~l$6Z8M+_Q)}R;Bg8k!Wg=%` zs2|0uQiq(n++R0*JB^K9OaDU zda-Ojuw5?y?Zeje(34mkz*K%GZ#2Q4?rn+h**)2OskC9++I8DDPejF zyzw)i{G>@OX4u%I%Z-?DNAWsl@%}jl7)7B)N_ncJRTP3y~U-2=~$57Z0JMX>?+iGYu z`8Dg|Tf=+Sc^}Jt*l~+E@GT)i@@s<_xNn*6Eh+bq${cJ?OxOp0CLlyfew{ zPz_dsB?uGuue*Cjz4kiqQ*5YWd=Cc24$^IIoS4ooet>Tc`r0)x{WOp|EGOQz0~^zP zB>`6v+vJ9KihXH!wsMDF9<2BaL~R3<#KYU+9V^0!pxe8{Ir;dWz%?!m+=1RXJU|oT zCiI=2hv4pKeo;Rf@z&m-w~NeVh}}gB7dYHMr*CeqCQU=g#lxZQDT&>FF@_x;ptiE> z)LBARLH!6+H(r^w6B9QbwUYG=TaNXNZWn49R#Sa4QQoM~ZZ&ja6vTLz95+oB)A;fX z@WeOMV0r2pSKFH#=Hi9e_iFZpeNfd0?{l^biSS$`Zw~QpML#*ro$v+i3(@D6>jZ2% z(Qj71-sB5g3a}PruL2-nu*dP!6xr*tJ=;gtfJqMqG_2p^UKjhxgE{^Z(06eB>a#63hj2IH6PCq{XeH}C$A0dA9SPRV=caXo5{L2@VD0bp-)_V>0w zxGg-~{>yZ!QmYJnUdYoBmW1ZF!9K%ZYD1hH^>{di7T*WvmtQUK{H$Gl=60M3a=e?J zi@tW+!E{oMc^7vC)IvgeyoXXj{dTLrKZFHBKl0+e@Ii5;dG9)t<~om-VExONADvJw zg>lmyv*C6^##@CeH{LxK>kld#7g{M*I#L1) z{oA+;k{Px&f)CEi1z*PfG+ljw3ik(X+!f!D!%N!cTp)y-+Ty$gm!X&aAxj4<0&Wh6 zug)In!Wj;80i(pHKgA0sd8a3SYs7l6L7sK58{Ha--~DLf{NOHa zYM4)cYDFl&jXVB(9~2v|pWJ^3FaN>54BKAA-9r9TLgqBZ1%s?`+)IV2^v8J{71#4^ zZiiV2Ty^yLV!Z~p)L^#{YR|~G;r3g$^GEF7NTgkLf&hQde$Sa0l-PsVq{Lq&3MwG@ z;o$$m$|dql*G_^r3sfB;EWBo(9uytv*xNZq)y(5b>D z4JV z3lhpE+^+|&KQqejw=jUEhNmi;(RX4F!#-)w&vlM}WAE2`t(Zd@xgU@9Wi!^3ei zI7M6zs-8H%s^&TJ5KA#+!oBTSy~DYlhcKnYFKp1lrz!kTjc4i!5jpNBe;NY)y=I-j zmfJ$7Mu{MITmiS0y+-RxbHZyzEymx41J!W$@kh1UK(PZ?C1V~4(=67<^>p-- zRLNkF=?hh!B3b_C#ACBm0!8xoq?5PsRJ&5(F~K#>58llk1h?(lj$ft0y1SVT)n9~x4+5KCcHgmmI~GM@ z@Kfzji3GdEMN&TxIGB`Mw_8~2wA#=CpoRHs3ntc#{~q>*c*gBH$DT2zADjGdD>yLZQS?n2^yo>+WEK5y_9_uAHAyulsY{g&iEW zzJ&S+wPE#X^`Sf>Z7ZHD<@YR)MQvEBs+~k53j1!%l+rIU`M8i>eYfpR;%I?aA0jrw zO=n)Wd%54seDK&zL`!SCt@v|zG2Xan0$xfTzJ)W~nIwiCV-JIYD+Snc{~wQLxNqn>sC zTS_12lii?ScW~EO9c}jEPh*pY?Tx^l&3urj&|fSsxD5F2UEW#ha@pd5@oWx|^Gxu>Nn~eP@p?D_|%u7IB+JY5VPWV+-4g8$NwQ z=k=fYn7>3(yR(m4zO*5lw>#hRp+zl*T_Ze%^Y5|-Sgrv!*Z>O`IVSn-X+SsD0DDf@ z68+`E@QZq%x)Lt~-~8ZXSC6%S>jRIsJ#p26MNej)YJK|3gA1Rz;?RO;=a0`joIa8| z+LGRux^RAW=G^qzsWYcvKlR$HKREgQ?^#*r=?B-6WxhsOhtjd~3rp5RPT2AU-JmdE zQT96CAuN=E{PqY-raLBVaf07-!jg6OVgu}z2H3?0*kxfM4d!Vfe^3sOExPx%Wv|YE zrPLM`7UY33-42B(^RTi3R&Ia|3rnWATi6H_UE9`)^tzMj9aMO-4qs@1oe=gC`QTyx zP6^8rz(ed!Vfzhn>>Xjb1lFGRFG+b_Dl91rD;i+^!jg3~)Bqc4fbA2uGLe_@26U6c zlJ)XZ9Ua?qO4thW>$3JNhWcgr+X`PoStuNBxwG{`DN|^@P{<%Ipljyg1J8>K@X^&) zzUN4)Fg~yAXiNUt`2&a3eY5M%u1-BVRuMHOudH}NMs*7 z`L@bFX74?mUZrUH+2|z7ds$_B2W5@=+REFHwrsiZC6ptd89Lh1eId^Ff_&*ns_$sa z8kQ4zIg;uHGi0@Nq0e$RZ~@sq+OpN7G|2h6nc4Hm>d{SQ#)~KYO9z z9FMl3AvnK{s~{koAJzM)0!Z=6s!@>XcIkbLU}RBm9-s3A9~FQm?_XZpQK zgZeEYle6b9tPPZLF1-$%EDy2Bbf4>DR1&Vj%XzE20xA%RXI3G#t=16!)v*ft@ynD` zJeRJ*M{ir@J{09h3evU3%h48<+A8a;jms)2c&iX4t5b(v{#HM8MgGu&{ACk4w^1xNl4F1)Fg34vt+MJPOdW%*2=RfH-)?W2NMn>?S- z&mKvY&Py0kv0dj-@U9?Jvps<`%U?}$K^}>QlI4+7rhBT(+r4T-bhn;C3D2ya$`k88 z(=|mMzmm2Gp3VLzT8h7AVUxsI80%DRLr`NkwME?v@)yqAc(hw|VN4{y{lb#t$Aqwh z<$My^B6vlCCLRgMi&)jkBgu+)ayl$LhIu{jgb`8Fh z=Vf6l@g8;8@?@OF92f9p?bGwtAuMSFtQ5v}=fk+=26V#>`0Z{$x4!}1gs?$N!P7V< zten7Ju8T_>bw=1Y>Dbm(5k(4QkG1w%3FPby>^qPwT0}y~AwPm_l!9!msgZ{jqRo*O z56j*!>pM>J-KcOPv@ZMqFZTnb7lN(g&$AYj*Hqz97SXP$LcXFtW1pQg?fZF$<&qs#zeuMy`g;6 zDa9Z+sY0w&@)?t}kz_hS&brzzwH$3hU91abw)y6SXpb|6Udiy0R1dR3jWv*vVYbuB zkQd95x6>QKMibcE!a^H&B5ctIoWOK#>2MmBQd^F)gJGtKv|t8eJVI%T7hqmG@0{Xn z7H`Vnps*2QsE0yZC&&E)SfG8;rWj4zI<2q;mqzEcU-5z*vu-DZRmdwT$6d?^8X%uR z^|K|Si1AK}{!P+{x{dYwrdY&E88o0vTT}w+LRKE0#i0$UD`5SGR_u*q&Xh24w?!~w zIh`(LFm036GX1jnTqZN7ALL~aahT0ghB@b(4KaLSlzoa9>M;jwTv&U^6Gv_3sf@~8 zeK@@aMvEk1<{UD{ZxbEq!xxF{ZQYj}QWPIb4L4G0!}u;7li48S%*lQ8D_*>lsy z3=AQDM;ZCOjHn$~;{(qd{IE97L6a6K9I)Lf95k%r*3G#s2)x^IWEphDk8WE4cn!-EMgyH=bzFN^Oovgz5Fr59FDxu598yE!ay>8F;if%XQ z@R0XbVf_SF%^idGDBSV^5-Y#39OK}z@(a@+!(ObT%Yyb5VFwt|+ro3Y(N!gRT@nr7 z`S9<&e`T+cf(*N+4r3md38OsL+nNmTf0uBkvs2-F86Qs;|3`%l5=f4(((2^AGAXMH3qfzvf4cG_rivg_GwBh4Y;c|MoY) zhJ>v&DyJI}c1+l2{M{#P1^cLvnFEk#juM=#+VHDkgF|PY&JBVkOg#0Fsr%YTX|>PrvyKVt+03_`Jd|<2{~3*jx_A4A`-=$P7!GWXAgq#kIO}{SotKUCsM9WD47j zAKusF@a2G(DtwaRG)&yM=`sVH)|?N#MOvc%>h-o&@suuoATeL2yQenYIpO09xACJd z)Cr7U#AW>BN&fLXzS_n!?-BmayYOGiG(Ln6JiGbf{kVq>2{$K;8jrCh(OEeg1CNETVn=aT$;Lp@Y=^-Bu3@gc4!52rl7p>S(Ij^SoUn*r4};gc>*qhvju z^LfNIOc>7#{7B3r+}c`$YH&Xh^lzAfne3Mp@1K&^-hW0~jB;G@8rc`i5I&>u=R+Ad zr|E7RYoQGTVH}LRjLXxaA15J92YxiD=Vk8^-v2J)l&75vA0q#*wn^qe0%bNUC7W43 zAi5msdTQHyC7@#pU+QB3rW2-L;OXU1iTMJ}O4_qwhPXbwLWd##WyL>5{-JF#=6c(5 zj_7U6wIJqa=}(ZbdA*br-bnr!e^}u;GN~&M!}q=i|K}9WvP0L`^dFYzC51o7aLn6L z0i0t|B^EJ9g)hO(YXW5P4Tb`-0I@5aE_$l@~5xeZ$(%GfGzYKOuTs$HgQP9*J%; zKab)5Xv^&v&}>+`vvI_mpGFayk0T9-8N5c6|2M^F($@13_*Cn`h48#%m8I<@bim_n zAm04V59S}cIzQH)|JDccPh6Ehuqgjz1}<-{RoH4rYT|qO@8?hEe~^DIe=7fa{*1Zi zxp3erWcJ+D=~s*3`F_^qk!EW0d*46#gV#>Ie&+1-jE{u}vdA!=QGTp#tAMIs>el4( zSe5}^KeC5w#+6f93yvf&S;VgizpQZ9Z=?8&KjQHl$@5|aEmyedYnNxsSHEzVL)5X& zlx#L_bBmn{-`fHvsjVh>~nt_)*vQ*q3q&?`L>C_V^f` z1vI4aQM{wBN13OiEoe>{EA&~B$6nEtoTjFKGyFM)4>G*YHe&yKN#Xk$ZvAgY_i#kR6lD_vUo%<5<7uTlT$IS1#-Eziy`Vq9c#cIfgNVcE7+h+9@1(8u4Iwr@|Zc4ThKBBfO$;%fsrqWgJs@iJ53H22UzH$M9Gl zUEWx4Clx-)_F-S3tz#>*(3B;pCCJ~MXslrE6tPX9Em}oC2HZSozP6}OUraW$*D)c8 z9X}ehNlxK8hS$x#Ssz315k9JL)%P4-HKFiEwjpKzMBpFFdlc4<59A{#n7Y2p-&>-! zx{b$Sue)~eTJ%%+z*8bGJjAlXsHgZ4TP}?6eE7Gw0o~TX�WP(je|$VVw!OgAM3j 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 From 1d187fd0be9cb7b79e5a4d4f389685856fe8e065 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Sat, 18 Nov 2023 11:58:34 +0000 Subject: [PATCH 009/313] src: a/an grammar fixes Change-Id: I179b50ae8e73677d4d408b83424afbbfe6aa17a1 GitHub-Last-Rev: 2e2d9c1e45556155d02db4df381b99f2d1bc5c0e GitHub-Pull-Request: golang/go#63478 Reviewed-on: https://go-review.googlesource.com/c/go/+/534015 Auto-Submit: Dmitri Shuralyov Reviewed-by: Dmitri Shuralyov Reviewed-by: Dmitri Shuralyov LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek --- src/cmd/compile/internal/devirtualize/devirtualize.go | 2 +- src/cmd/compile/internal/escape/graph.go | 2 +- src/cmd/compile/internal/ir/expr.go | 2 +- src/cmd/compile/internal/ssa/magic.go | 2 +- src/cmd/compile/internal/types2/builtins.go | 2 +- src/cmd/compile/internal/walk/closure.go | 2 +- src/cmd/internal/obj/loong64/obj.go | 2 +- src/cmd/link/internal/loader/loader.go | 2 +- src/go/types/builtins.go | 2 +- src/net/conf.go | 2 +- src/net/fd_fake.go | 2 +- src/net/http/transport.go | 2 +- src/os/os_windows_test.go | 2 +- src/reflect/all_test.go | 2 +- src/runtime/iface.go | 2 +- src/runtime/metrics_test.go | 2 +- src/runtime/mgcpacer.go | 2 +- src/runtime/race.go | 2 +- src/strings/strings.go | 2 +- src/sync/map_test.go | 2 +- 20 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/cmd/compile/internal/devirtualize/devirtualize.go b/src/cmd/compile/internal/devirtualize/devirtualize.go index b5e55c6d48..9e26f66a1c 100644 --- a/src/cmd/compile/internal/devirtualize/devirtualize.go +++ b/src/cmd/compile/internal/devirtualize/devirtualize.go @@ -70,7 +70,7 @@ func staticCall(call *ir.CallExpr) { return } - // If typ *has* a shape type, then it's an shaped, instantiated + // If typ *has* a shape type, then it's a shaped, instantiated // type like T[go.shape.int], and its methods (may) have an extra // dictionary parameter. We could devirtualize this call if we // could derive an appropriate dictionary argument. diff --git a/src/cmd/compile/internal/escape/graph.go b/src/cmd/compile/internal/escape/graph.go index f3baa67223..75e2546a7b 100644 --- a/src/cmd/compile/internal/escape/graph.go +++ b/src/cmd/compile/internal/escape/graph.go @@ -38,7 +38,7 @@ import ( // e.value(k, n.Left) // } -// An location represents an abstract location that stores a Go +// A location represents an abstract location that stores a Go // variable. type location struct { n ir.Node // represented variable or expression, if any diff --git a/src/cmd/compile/internal/ir/expr.go b/src/cmd/compile/internal/ir/expr.go index 1bf9a15ae0..1bcd648282 100644 --- a/src/cmd/compile/internal/ir/expr.go +++ b/src/cmd/compile/internal/ir/expr.go @@ -350,7 +350,7 @@ func NewKeyExpr(pos src.XPos, key, value Node) *KeyExpr { return n } -// A StructKeyExpr is an Field: Value composite literal key. +// A StructKeyExpr is a Field: Value composite literal key. type StructKeyExpr struct { miniExpr Field *types.Field diff --git a/src/cmd/compile/internal/ssa/magic.go b/src/cmd/compile/internal/ssa/magic.go index df4b568134..235b0e5e5c 100644 --- a/src/cmd/compile/internal/ssa/magic.go +++ b/src/cmd/compile/internal/ssa/magic.go @@ -170,7 +170,7 @@ func smagicOK(n uint, c int64) bool { return c&(c-1) != 0 } -// smagicOKn reports whether we should strength reduce an signed n-bit divide by c. +// smagicOKn reports whether we should strength reduce a signed n-bit divide by c. func smagicOK8(c int8) bool { return smagicOK(8, int64(c)) } func smagicOK16(c int16) bool { return smagicOK(16, int64(c)) } func smagicOK32(c int32) bool { return smagicOK(32, int64(c)) } diff --git a/src/cmd/compile/internal/types2/builtins.go b/src/cmd/compile/internal/types2/builtins.go index 01b8e46304..575a1daed2 100644 --- a/src/cmd/compile/internal/types2/builtins.go +++ b/src/cmd/compile/internal/types2/builtins.go @@ -954,7 +954,7 @@ func hasVarSize(t Type, seen map[*Named]bool) (varSized bool) { } // applyTypeFunc applies f to x. If x is a type parameter, -// the result is a type parameter constrained by an new +// the result is a type parameter constrained by a new // interface bound. The type bounds for that interface // are computed by applying f to each of the type bounds // of x. If any of these applications of f return nil, diff --git a/src/cmd/compile/internal/walk/closure.go b/src/cmd/compile/internal/walk/closure.go index 6fc2317afb..38c6c03dc4 100644 --- a/src/cmd/compile/internal/walk/closure.go +++ b/src/cmd/compile/internal/walk/closure.go @@ -144,7 +144,7 @@ func walkClosure(clo *ir.ClosureExpr, init *ir.Nodes) ir.Node { return walkExpr(cfn, init) } -// closureArgs returns a slice of expressions that an be used to +// closureArgs returns a slice of expressions that can be used to // initialize the given closure's free variables. These correspond // one-to-one with the variables in clo.Func.ClosureVars, and will be // either an ONAME node (if the variable is captured by value) or an diff --git a/src/cmd/internal/obj/loong64/obj.go b/src/cmd/internal/obj/loong64/obj.go index 1eedd46c69..d15d0dfd4c 100644 --- a/src/cmd/internal/obj/loong64/obj.go +++ b/src/cmd/internal/obj/loong64/obj.go @@ -290,7 +290,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) { // NOP // // The NOP is needed to give the jumps somewhere to land. - // It is a liblink NOP, not an hardware NOP: it encodes to 0 instruction bytes. + // It is a liblink NOP, not a hardware NOP: it encodes to 0 instruction bytes. // // We don't generate this for leafs because that means the wrapped // function was inlined into the wrapper. diff --git a/src/cmd/link/internal/loader/loader.go b/src/cmd/link/internal/loader/loader.go index 5dd657b4d7..3edb5e2f6f 100644 --- a/src/cmd/link/internal/loader/loader.go +++ b/src/cmd/link/internal/loader/loader.go @@ -988,7 +988,7 @@ func (l *Loader) AttrExternal(i Sym) bool { return l.attrExternal.Has(l.extIndex(i)) } -// SetAttrExternal sets the "external" property for an host object +// SetAttrExternal sets the "external" property for a host object // symbol (see AttrExternal). func (l *Loader) SetAttrExternal(i Sym, v bool) { if !l.IsExternal(i) { diff --git a/src/go/types/builtins.go b/src/go/types/builtins.go index 72b4c5370d..3a3cee1726 100644 --- a/src/go/types/builtins.go +++ b/src/go/types/builtins.go @@ -953,7 +953,7 @@ func hasVarSize(t Type, seen map[*Named]bool) (varSized bool) { } // applyTypeFunc applies f to x. If x is a type parameter, -// the result is a type parameter constrained by an new +// the result is a type parameter constrained by a new // interface bound. The type bounds for that interface // are computed by applying f to each of the type bounds // of x. If any of these applications of f return nil, diff --git a/src/net/conf.go b/src/net/conf.go index 649ebcfb18..15d73cf6ce 100644 --- a/src/net/conf.go +++ b/src/net/conf.go @@ -522,7 +522,7 @@ func isGateway(h string) bool { return stringsEqualFold(h, "_gateway") } -// isOutbound reports whether h should be considered a "outbound" +// isOutbound reports whether h should be considered an "outbound" // name for the myhostname NSS module. func isOutbound(h string) bool { return stringsEqualFold(h, "_outbound") diff --git a/src/net/fd_fake.go b/src/net/fd_fake.go index b9361a3c4e..ae567acc69 100644 --- a/src/net/fd_fake.go +++ b/src/net/fd_fake.go @@ -30,7 +30,7 @@ type netFD struct { raddr Addr // The only networking available in WASI preview 1 is the ability to - // sock_accept on an pre-opened socket, and then fd_read, fd_write, + // sock_accept on a pre-opened socket, and then fd_read, fd_write, // fd_close, and sock_shutdown on the resulting connection. We // intercept applicable netFD calls on this instance, and then pass // the remainder of the netFD calls to fakeNetFD. diff --git a/src/net/http/transport.go b/src/net/http/transport.go index 1cf41a5474..170ba86cc4 100644 --- a/src/net/http/transport.go +++ b/src/net/http/transport.go @@ -237,7 +237,7 @@ type Transport struct { // TLSNextProto specifies how the Transport switches to an // alternate protocol (such as HTTP/2) after a TLS ALPN - // protocol negotiation. If Transport dials an TLS connection + // protocol negotiation. If Transport dials a TLS connection // with a non-empty protocol name and TLSNextProto contains a // map entry for that key (such as "h2"), then the func is // called with the request's authority (such as "example.com" diff --git a/src/os/os_windows_test.go b/src/os/os_windows_test.go index f8edaeb876..7436b9a969 100644 --- a/src/os/os_windows_test.go +++ b/src/os/os_windows_test.go @@ -581,7 +581,7 @@ func TestStatLxSymLink(t *testing.T) { } if m := fi.Mode(); m&fs.ModeSymlink != 0 { // This can happen depending on newer WSL versions when running as admin or in developer mode. - t.Skip("skipping: WSL created reparse tag IO_REPARSE_TAG_SYMLINK instead of a IO_REPARSE_TAG_LX_SYMLINK") + t.Skip("skipping: WSL created reparse tag IO_REPARSE_TAG_SYMLINK instead of an IO_REPARSE_TAG_LX_SYMLINK") } // Stat'ing a IO_REPARSE_TAG_LX_SYMLINK from outside WSL always return ERROR_CANT_ACCESS_FILE. // We check this condition to validate that os.Stat has tried to follow the link. diff --git a/src/reflect/all_test.go b/src/reflect/all_test.go index a28f2a4bed..e77537c9a5 100644 --- a/src/reflect/all_test.go +++ b/src/reflect/all_test.go @@ -4755,7 +4755,7 @@ func TestConvertSlice2Array(t *testing.T) { // Converting a slice to non-empty array needs to return // a non-addressable copy of the original memory. if v.CanAddr() { - t.Fatalf("convert slice to non-empty array returns a addressable copy array") + t.Fatalf("convert slice to non-empty array returns an addressable copy array") } for i := range s { ov.Index(i).Set(ValueOf(i + 1)) diff --git a/src/runtime/iface.go b/src/runtime/iface.go index 4563809a9d..b8c7caeebc 100644 --- a/src/runtime/iface.go +++ b/src/runtime/iface.go @@ -567,7 +567,7 @@ func interfaceSwitch(s *abi.InterfaceSwitch, t *_type) (int, *itab) { return case_, tab } -// buildInterfaceSwitchCache constructs a interface switch cache +// buildInterfaceSwitchCache constructs an interface switch cache // containing all the entries from oldC plus the new entry // (typ,case_,tab). func buildInterfaceSwitchCache(oldC *abi.InterfaceSwitchCache, typ *_type, case_ int, tab *itab) *abi.InterfaceSwitchCache { diff --git a/src/runtime/metrics_test.go b/src/runtime/metrics_test.go index 1e82897381..acaa5ca375 100644 --- a/src/runtime/metrics_test.go +++ b/src/runtime/metrics_test.go @@ -40,7 +40,7 @@ func TestReadMetrics(t *testing.T) { oldLimit := debug.SetMemoryLimit(limit) defer debug.SetMemoryLimit(oldLimit) - // Set an GC percent to check the metric for it + // Set a GC percent to check the metric for it gcPercent := 99 oldGCPercent := debug.SetGCPercent(gcPercent) defer debug.SetGCPercent(oldGCPercent) diff --git a/src/runtime/mgcpacer.go b/src/runtime/mgcpacer.go index 716e3efccc..3d07cc70e8 100644 --- a/src/runtime/mgcpacer.go +++ b/src/runtime/mgcpacer.go @@ -1377,7 +1377,7 @@ func (c *gcControllerState) needIdleMarkWorker() bool { return n < max } -// removeIdleMarkWorker must be called when an new idle mark worker stops executing. +// removeIdleMarkWorker must be called when a new idle mark worker stops executing. func (c *gcControllerState) removeIdleMarkWorker() { for { old := c.idleMarkWorkers.Load() diff --git a/src/runtime/race.go b/src/runtime/race.go index f9cbc1f54b..ca4f051979 100644 --- a/src/runtime/race.go +++ b/src/runtime/race.go @@ -179,7 +179,7 @@ func raceSymbolizeCode(ctx *symbolizeCodeContext) { // Ignore wrappers, unless we're at the outermost frame of u. // A non-inlined wrapper frame always means we have a physical // frame consisting entirely of wrappers, in which case we'll - // take a outermost wrapper over nothing. + // take an outermost wrapper over nothing. continue } diff --git a/src/strings/strings.go b/src/strings/strings.go index ce79bccf8c..f3f0723721 100644 --- a/src/strings/strings.go +++ b/src/strings/strings.go @@ -521,7 +521,7 @@ func Map(mapping func(rune) rune, s string) string { if r < utf8.RuneSelf { b.WriteByte(byte(r)) } else { - // r is not a ASCII rune. + // r is not an ASCII rune. b.WriteRune(r) } } diff --git a/src/sync/map_test.go b/src/sync/map_test.go index 20872f3b72..316f87bacc 100644 --- a/src/sync/map_test.go +++ b/src/sync/map_test.go @@ -278,7 +278,7 @@ func TestCompareAndSwap_NonExistingKey(t *testing.T) { m := &sync.Map{} if m.CompareAndSwap(m, nil, 42) { // See https://go.dev/issue/51972#issuecomment-1126408637. - t.Fatalf("CompareAndSwap on an non-existing key succeeded") + t.Fatalf("CompareAndSwap on a non-existing key succeeded") } } From d33ad2d8f357d83dfdc14c3358e3956aac76a9b0 Mon Sep 17 00:00:00 2001 From: Jes Cok Date: Wed, 15 Nov 2023 13:08:23 +0000 Subject: [PATCH 010/313] syscall: support O_SYNC flag for os.OpenFile on windows os.OpenFile on windows did not use the O_SYNC flag. This meant that even if the user set O_SYNC, os.OpenFile would ignore it. This change adds a new flag FILE_FLAG_WRITE_THROUGH, which is the equivalent of O_SYNC flag on Linux and is documented in https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea Fixes #35358 Change-Id: Ib338caed5bb2f215723bfe30a2551a83998d92c9 GitHub-Last-Rev: 82c6275cb49602d7903b2bff7d60b7c772a5d91a GitHub-Pull-Request: golang/go#64027 Reviewed-on: https://go-review.googlesource.com/c/go/+/541015 Reviewed-by: Than McIntosh Reviewed-by: Emmanuel Odeke Run-TryBot: Jes Cok TryBot-Result: Gopher Robot Reviewed-by: David Chase Reviewed-by: Quim Muntal --- src/syscall/syscall_windows.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/syscall/syscall_windows.go b/src/syscall/syscall_windows.go index 33876c7fe0..d13acc5c44 100644 --- a/src/syscall/syscall_windows.go +++ b/src/syscall/syscall_windows.go @@ -409,6 +409,10 @@ func Open(path string, mode int, perm uint32) (fd Handle, err error) { // Necessary for opening directory handles. attrs |= FILE_FLAG_BACKUP_SEMANTICS } + if mode&O_SYNC != 0 { + const _FILE_FLAG_WRITE_THROUGH = 0x80000000 + attrs |= _FILE_FLAG_WRITE_THROUGH + } return CreateFile(pathp, access, sharemode, sa, createmode, attrs, 0) } From e6b154defba046609b6a36313298cfc207945df7 Mon Sep 17 00:00:00 2001 From: Andrei Matei Date: Mon, 5 Jun 2023 19:14:01 -0400 Subject: [PATCH 011/313] ssa: clarify semantics of ID-to-PC translation function Make it clear that the `block` argument is not always used, and stop passing it in a case where it didn't really make sense - at the end of a function. Change-Id: I2fa86bed6ceb53a1b1cbfda5c3392e7e9da9579d Reviewed-on: https://go-review.googlesource.com/c/go/+/502115 TryBot-Result: Gopher Robot Reviewed-by: Than McIntosh Run-TryBot: David Chase Reviewed-by: David Chase --- src/cmd/compile/internal/ssa/debug.go | 7 +++++-- src/cmd/compile/internal/ssagen/ssa.go | 6 +++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/cmd/compile/internal/ssa/debug.go b/src/cmd/compile/internal/ssa/debug.go index 7e0e1f34a8..05a72787f3 100644 --- a/src/cmd/compile/internal/ssa/debug.go +++ b/src/cmd/compile/internal/ssa/debug.go @@ -42,7 +42,10 @@ type FuncDebug struct { OptDcl []*ir.Name // Filled in by the user. Translates Block and Value ID to PC. - GetPC func(ID, ID) int64 + // + // NOTE: block is only used if value is BlockStart.ID or BlockEnd.ID. + // Otherwise, it is ignored. + GetPC func(block, value ID) int64 } type BlockDebug struct { @@ -1368,7 +1371,7 @@ func (state *debugState) buildLocationLists(blockLocs []*BlockDebug) { // Flush any leftover entries live at the end of the last block. for varID := range state.lists { - state.writePendingEntry(VarID(varID), state.f.Blocks[len(state.f.Blocks)-1].ID, FuncEnd.ID) + state.writePendingEntry(VarID(varID), -1, FuncEnd.ID) list := state.lists[varID] if state.loggingLevel > 0 { if len(list) == 0 { diff --git a/src/cmd/compile/internal/ssagen/ssa.go b/src/cmd/compile/internal/ssagen/ssa.go index 8d1e30e1e6..45bf0e6dc4 100644 --- a/src/cmd/compile/internal/ssagen/ssa.go +++ b/src/cmd/compile/internal/ssagen/ssa.go @@ -7578,9 +7578,9 @@ func genssa(f *ssa.Func, pp *objw.Progs) { for i, b := range f.Blocks { idToIdx[b.ID] = i } - // Note that at this moment, Prog.Pc is a sequence number; it's - // not a real PC until after assembly, so this mapping has to - // be done later. + // Register a callback that will be used later to fill in PCs into location + // lists. At the moment, Prog.Pc is a sequence number; it's not a real PC + // until after assembly, so the translation needs to be deferred. debugInfo.GetPC = func(b, v ssa.ID) int64 { switch v { case ssa.BlockStart.ID: From ee6b34797b66b957fdf9b7211ee3f0b80ac57758 Mon Sep 17 00:00:00 2001 From: Ludi Rehak Date: Sat, 29 Jul 2023 18:25:42 -0700 Subject: [PATCH 012/313] all: add floating point option for ARM targets This change introduces new options to set the floating point mode on ARM targets. The GOARM version number can optionally be followed by ',hardfloat' or ',softfloat' to select whether to use hardware instructions or software emulation for floating point computations, respectively. For example, GOARM=7,softfloat. Previously, software floating point support was limited to GOARM=5. With these options, software floating point is now extended to all ARM versions, including GOARM=6 and 7. This change also extends hardware floating point to GOARM=5. GOARM=5 defaults to softfloat and GOARM=6 and 7 default to hardfloat. For #61588 Change-Id: I23dc86fbd0733b262004a2ed001e1032cf371e94 Reviewed-on: https://go-review.googlesource.com/c/go/+/514907 Run-TryBot: Michael Knyszek Reviewed-by: Michael Knyszek Reviewed-by: Keith Randall TryBot-Result: Gopher Robot Reviewed-by: Keith Randall Auto-Submit: Michael Knyszek --- src/cmd/asm/internal/asm/endtoend_test.go | 4 +- src/cmd/compile/internal/arm/galign.go | 2 +- src/cmd/compile/internal/arm/ssa.go | 4 +- src/cmd/compile/internal/ssa/_gen/ARM.rules | 58 ++++----- src/cmd/compile/internal/ssa/rewriteARM.go | 124 ++++++++++---------- src/cmd/go/alldocs.go | 2 + src/cmd/go/internal/help/helpdoc.go | 2 + src/cmd/internal/obj/arm/asm5.go | 10 +- src/cmd/internal/obj/arm/obj5.go | 2 +- src/cmd/internal/testdir/testdir_test.go | 2 +- src/cmd/link/internal/ld/lib.go | 12 +- src/internal/buildcfg/cfg.go | 63 ++++++++-- src/math/rand/rand_test.go | 3 +- src/runtime/asm_arm.s | 22 ++-- src/runtime/cgo/asm_arm.s | 14 +-- src/runtime/mkpreempt.go | 4 +- src/runtime/os_freebsd_arm.go | 10 +- src/runtime/os_linux_arm.go | 10 +- src/runtime/preempt_arm.s | 12 +- src/runtime/runtime2.go | 4 +- 20 files changed, 212 insertions(+), 152 deletions(-) diff --git a/src/cmd/asm/internal/asm/endtoend_test.go b/src/cmd/asm/internal/asm/endtoend_test.go index a2de63685c..592d7b4b76 100644 --- a/src/cmd/asm/internal/asm/endtoend_test.go +++ b/src/cmd/asm/internal/asm/endtoend_test.go @@ -372,10 +372,10 @@ func Test386EndToEnd(t *testing.T) { } func TestARMEndToEnd(t *testing.T) { - defer func(old int) { buildcfg.GOARM = old }(buildcfg.GOARM) + defer func(old int) { buildcfg.GOARM.Version = old }(buildcfg.GOARM.Version) for _, goarm := range []int{5, 6, 7} { t.Logf("GOARM=%d", goarm) - buildcfg.GOARM = goarm + buildcfg.GOARM.Version = goarm testEndToEnd(t, "arm", "arm") if goarm == 6 { testEndToEnd(t, "arm", "armv6") diff --git a/src/cmd/compile/internal/arm/galign.go b/src/cmd/compile/internal/arm/galign.go index 23e52bacbf..43d811832e 100644 --- a/src/cmd/compile/internal/arm/galign.go +++ b/src/cmd/compile/internal/arm/galign.go @@ -15,7 +15,7 @@ func Init(arch *ssagen.ArchInfo) { arch.LinkArch = &arm.Linkarm arch.REGSP = arm.REGSP arch.MAXWIDTH = (1 << 32) - 1 - arch.SoftFloat = buildcfg.GOARM == 5 + arch.SoftFloat = buildcfg.GOARM.SoftFloat arch.ZeroRange = zerorange arch.Ginsnop = ginsnop diff --git a/src/cmd/compile/internal/arm/ssa.go b/src/cmd/compile/internal/arm/ssa.go index 7fcbb4d024..638ed3ed4e 100644 --- a/src/cmd/compile/internal/arm/ssa.go +++ b/src/cmd/compile/internal/arm/ssa.go @@ -289,7 +289,7 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) { case ssa.OpARMANDconst, ssa.OpARMBICconst: // try to optimize ANDconst and BICconst to BFC, which saves bytes and ticks // BFC is only available on ARMv7, and its result and source are in the same register - if buildcfg.GOARM == 7 && v.Reg() == v.Args[0].Reg() { + if buildcfg.GOARM.Version == 7 && v.Reg() == v.Args[0].Reg() { var val uint32 if v.Op == ssa.OpARMANDconst { val = ^uint32(v.AuxInt) @@ -646,7 +646,7 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) { default: } } - if buildcfg.GOARM >= 6 { + if buildcfg.GOARM.Version >= 6 { // generate more efficient "MOVB/MOVBU/MOVH/MOVHU Reg@>0, Reg" on ARMv6 & ARMv7 genshift(s, v, v.Op.Asm(), 0, v.Args[0].Reg(), v.Reg(), arm.SHIFT_RR, 0) return diff --git a/src/cmd/compile/internal/ssa/_gen/ARM.rules b/src/cmd/compile/internal/ssa/_gen/ARM.rules index a60afb000a..ed0ed80afa 100644 --- a/src/cmd/compile/internal/ssa/_gen/ARM.rules +++ b/src/cmd/compile/internal/ssa/_gen/ARM.rules @@ -66,17 +66,17 @@ // count trailing zero for ARMv5 and ARMv6 // 32 - CLZ(x&-x - 1) -(Ctz32 x) && buildcfg.GOARM<=6 => +(Ctz32 x) && buildcfg.GOARM.Version<=6 => (RSBconst [32] (CLZ (SUBconst (AND x (RSBconst [0] x)) [1]))) -(Ctz16 x) && buildcfg.GOARM<=6 => +(Ctz16 x) && buildcfg.GOARM.Version<=6 => (RSBconst [32] (CLZ (SUBconst (AND (ORconst [0x10000] x) (RSBconst [0] (ORconst [0x10000] x))) [1]))) -(Ctz8 x) && buildcfg.GOARM<=6 => +(Ctz8 x) && buildcfg.GOARM.Version<=6 => (RSBconst [32] (CLZ (SUBconst (AND (ORconst [0x100] x) (RSBconst [0] (ORconst [0x100] x))) [1]))) // count trailing zero for ARMv7 -(Ctz32 x) && buildcfg.GOARM==7 => (CLZ (RBIT x)) -(Ctz16 x) && buildcfg.GOARM==7 => (CLZ (RBIT (ORconst [0x10000] x))) -(Ctz8 x) && buildcfg.GOARM==7 => (CLZ (RBIT (ORconst [0x100] x))) +(Ctz32 x) && buildcfg.GOARM.Version==7 => (CLZ (RBIT x)) +(Ctz16 x) && buildcfg.GOARM.Version==7 => (CLZ (RBIT (ORconst [0x10000] x))) +(Ctz8 x) && buildcfg.GOARM.Version==7 => (CLZ (RBIT (ORconst [0x100] x))) // bit length (BitLen32 x) => (RSBconst [32] (CLZ x)) @@ -90,13 +90,13 @@ // t5 = x right rotate 8 bits -- (d, a, b, c ) // result = t4 ^ t5 -- (d, c, b, a ) // using shifted ops this can be done in 4 instructions. -(Bswap32 x) && buildcfg.GOARM==5 => +(Bswap32 x) && buildcfg.GOARM.Version==5 => (XOR (SRLconst (BICconst (XOR x (SRRconst [16] x)) [0xff0000]) [8]) (SRRconst x [8])) // byte swap for ARMv6 and above -(Bswap32 x) && buildcfg.GOARM>=6 => (REV x) +(Bswap32 x) && buildcfg.GOARM.Version>=6 => (REV x) // boolean ops -- booleans are represented with 0=false, 1=true (AndB ...) => (AND ...) @@ -741,10 +741,10 @@ (SUBconst [c] x) && !isARMImmRot(uint32(c)) && isARMImmRot(uint32(-c)) => (ADDconst [-c] x) (ANDconst [c] x) && !isARMImmRot(uint32(c)) && isARMImmRot(^uint32(c)) => (BICconst [int32(^uint32(c))] x) (BICconst [c] x) && !isARMImmRot(uint32(c)) && isARMImmRot(^uint32(c)) => (ANDconst [int32(^uint32(c))] x) -(ADDconst [c] x) && buildcfg.GOARM==7 && !isARMImmRot(uint32(c)) && uint32(c)>0xffff && uint32(-c)<=0xffff => (SUBconst [-c] x) -(SUBconst [c] x) && buildcfg.GOARM==7 && !isARMImmRot(uint32(c)) && uint32(c)>0xffff && uint32(-c)<=0xffff => (ADDconst [-c] x) -(ANDconst [c] x) && buildcfg.GOARM==7 && !isARMImmRot(uint32(c)) && uint32(c)>0xffff && ^uint32(c)<=0xffff => (BICconst [int32(^uint32(c))] x) -(BICconst [c] x) && buildcfg.GOARM==7 && !isARMImmRot(uint32(c)) && uint32(c)>0xffff && ^uint32(c)<=0xffff => (ANDconst [int32(^uint32(c))] x) +(ADDconst [c] x) && buildcfg.GOARM.Version==7 && !isARMImmRot(uint32(c)) && uint32(c)>0xffff && uint32(-c)<=0xffff => (SUBconst [-c] x) +(SUBconst [c] x) && buildcfg.GOARM.Version==7 && !isARMImmRot(uint32(c)) && uint32(c)>0xffff && uint32(-c)<=0xffff => (ADDconst [-c] x) +(ANDconst [c] x) && buildcfg.GOARM.Version==7 && !isARMImmRot(uint32(c)) && uint32(c)>0xffff && ^uint32(c)<=0xffff => (BICconst [int32(^uint32(c))] x) +(BICconst [c] x) && buildcfg.GOARM.Version==7 && !isARMImmRot(uint32(c)) && uint32(c)>0xffff && ^uint32(c)<=0xffff => (ANDconst [int32(^uint32(c))] x) (ADDconst [c] (MOVWconst [d])) => (MOVWconst [c+d]) (ADDconst [c] (ADDconst [d] x)) => (ADDconst [c+d] x) (ADDconst [c] (SUBconst [d] x)) => (ADDconst [c-d] x) @@ -1139,7 +1139,7 @@ // UBFX instruction is supported by ARMv6T2, ARMv7 and above versions, REV16 is supported by // ARMv6 and above versions. So for ARMv6, we need to match SLLconst, SRLconst and ORshiftLL. ((ADDshiftLL|ORshiftLL|XORshiftLL) [8] (BFXU [int32(armBFAuxInt(8, 8))] x) x) => (REV16 x) -((ADDshiftLL|ORshiftLL|XORshiftLL) [8] (SRLconst [24] (SLLconst [16] x)) x) && buildcfg.GOARM>=6 => (REV16 x) +((ADDshiftLL|ORshiftLL|XORshiftLL) [8] (SRLconst [24] (SLLconst [16] x)) x) && buildcfg.GOARM.Version>=6 => (REV16 x) // use indexed loads and stores (MOVWload [0] {sym} (ADD ptr idx) mem) && sym == nil => (MOVWloadidx ptr idx mem) @@ -1209,25 +1209,25 @@ (BIC x x) => (MOVWconst [0]) (ADD (MUL x y) a) => (MULA x y a) -(SUB a (MUL x y)) && buildcfg.GOARM == 7 => (MULS x y a) -(RSB (MUL x y) a) && buildcfg.GOARM == 7 => (MULS x y a) +(SUB a (MUL x y)) && buildcfg.GOARM.Version == 7 => (MULS x y a) +(RSB (MUL x y) a) && buildcfg.GOARM.Version == 7 => (MULS x y a) -(NEGF (MULF x y)) && buildcfg.GOARM >= 6 => (NMULF x y) -(NEGD (MULD x y)) && buildcfg.GOARM >= 6 => (NMULD x y) -(MULF (NEGF x) y) && buildcfg.GOARM >= 6 => (NMULF x y) -(MULD (NEGD x) y) && buildcfg.GOARM >= 6 => (NMULD x y) +(NEGF (MULF x y)) && buildcfg.GOARM.Version >= 6 => (NMULF x y) +(NEGD (MULD x y)) && buildcfg.GOARM.Version >= 6 => (NMULD x y) +(MULF (NEGF x) y) && buildcfg.GOARM.Version >= 6 => (NMULF x y) +(MULD (NEGD x) y) && buildcfg.GOARM.Version >= 6 => (NMULD x y) (NMULF (NEGF x) y) => (MULF x y) (NMULD (NEGD x) y) => (MULD x y) // the result will overwrite the addend, since they are in the same register -(ADDF a (MULF x y)) && a.Uses == 1 && buildcfg.GOARM >= 6 => (MULAF a x y) -(ADDF a (NMULF x y)) && a.Uses == 1 && buildcfg.GOARM >= 6 => (MULSF a x y) -(ADDD a (MULD x y)) && a.Uses == 1 && buildcfg.GOARM >= 6 => (MULAD a x y) -(ADDD a (NMULD x y)) && a.Uses == 1 && buildcfg.GOARM >= 6 => (MULSD a x y) -(SUBF a (MULF x y)) && a.Uses == 1 && buildcfg.GOARM >= 6 => (MULSF a x y) -(SUBF a (NMULF x y)) && a.Uses == 1 && buildcfg.GOARM >= 6 => (MULAF a x y) -(SUBD a (MULD x y)) && a.Uses == 1 && buildcfg.GOARM >= 6 => (MULSD a x y) -(SUBD a (NMULD x y)) && a.Uses == 1 && buildcfg.GOARM >= 6 => (MULAD a x y) +(ADDF a (MULF x y)) && a.Uses == 1 && buildcfg.GOARM.Version >= 6 => (MULAF a x y) +(ADDF a (NMULF x y)) && a.Uses == 1 && buildcfg.GOARM.Version >= 6 => (MULSF a x y) +(ADDD a (MULD x y)) && a.Uses == 1 && buildcfg.GOARM.Version >= 6 => (MULAD a x y) +(ADDD a (NMULD x y)) && a.Uses == 1 && buildcfg.GOARM.Version >= 6 => (MULSD a x y) +(SUBF a (MULF x y)) && a.Uses == 1 && buildcfg.GOARM.Version >= 6 => (MULSF a x y) +(SUBF a (NMULF x y)) && a.Uses == 1 && buildcfg.GOARM.Version >= 6 => (MULAF a x y) +(SUBD a (MULD x y)) && a.Uses == 1 && buildcfg.GOARM.Version >= 6 => (MULSD a x y) +(SUBD a (NMULD x y)) && a.Uses == 1 && buildcfg.GOARM.Version >= 6 => (MULAD a x y) (AND x (MVN y)) => (BIC x y) @@ -1259,8 +1259,8 @@ (CMPD x (MOVDconst [0])) => (CMPD0 x) // bit extraction -(SRAconst (SLLconst x [c]) [d]) && buildcfg.GOARM==7 && uint64(d)>=uint64(c) && uint64(d)<=31 => (BFX [(d-c)|(32-d)<<8] x) -(SRLconst (SLLconst x [c]) [d]) && buildcfg.GOARM==7 && uint64(d)>=uint64(c) && uint64(d)<=31 => (BFXU [(d-c)|(32-d)<<8] x) +(SRAconst (SLLconst x [c]) [d]) && buildcfg.GOARM.Version==7 && uint64(d)>=uint64(c) && uint64(d)<=31 => (BFX [(d-c)|(32-d)<<8] x) +(SRLconst (SLLconst x [c]) [d]) && buildcfg.GOARM.Version==7 && uint64(d)>=uint64(c) && uint64(d)<=31 => (BFXU [(d-c)|(32-d)<<8] x) // comparison simplification ((EQ|NE) (CMP x (RSBconst [0] y))) => ((EQ|NE) (CMN x y)) // sense of carry bit not preserved; see also #50854 diff --git a/src/cmd/compile/internal/ssa/rewriteARM.go b/src/cmd/compile/internal/ssa/rewriteARM.go index 70cacb90ed..971c9a5d55 100644 --- a/src/cmd/compile/internal/ssa/rewriteARM.go +++ b/src/cmd/compile/internal/ssa/rewriteARM.go @@ -1496,7 +1496,7 @@ func rewriteValueARM_OpARMADDD(v *Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] // match: (ADDD a (MULD x y)) - // cond: a.Uses == 1 && buildcfg.GOARM >= 6 + // cond: a.Uses == 1 && buildcfg.GOARM.Version >= 6 // result: (MULAD a x y) for { for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { @@ -1506,7 +1506,7 @@ func rewriteValueARM_OpARMADDD(v *Value) bool { } y := v_1.Args[1] x := v_1.Args[0] - if !(a.Uses == 1 && buildcfg.GOARM >= 6) { + if !(a.Uses == 1 && buildcfg.GOARM.Version >= 6) { continue } v.reset(OpARMMULAD) @@ -1516,7 +1516,7 @@ func rewriteValueARM_OpARMADDD(v *Value) bool { break } // match: (ADDD a (NMULD x y)) - // cond: a.Uses == 1 && buildcfg.GOARM >= 6 + // cond: a.Uses == 1 && buildcfg.GOARM.Version >= 6 // result: (MULSD a x y) for { for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { @@ -1526,7 +1526,7 @@ func rewriteValueARM_OpARMADDD(v *Value) bool { } y := v_1.Args[1] x := v_1.Args[0] - if !(a.Uses == 1 && buildcfg.GOARM >= 6) { + if !(a.Uses == 1 && buildcfg.GOARM.Version >= 6) { continue } v.reset(OpARMMULSD) @@ -1541,7 +1541,7 @@ func rewriteValueARM_OpARMADDF(v *Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] // match: (ADDF a (MULF x y)) - // cond: a.Uses == 1 && buildcfg.GOARM >= 6 + // cond: a.Uses == 1 && buildcfg.GOARM.Version >= 6 // result: (MULAF a x y) for { for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { @@ -1551,7 +1551,7 @@ func rewriteValueARM_OpARMADDF(v *Value) bool { } y := v_1.Args[1] x := v_1.Args[0] - if !(a.Uses == 1 && buildcfg.GOARM >= 6) { + if !(a.Uses == 1 && buildcfg.GOARM.Version >= 6) { continue } v.reset(OpARMMULAF) @@ -1561,7 +1561,7 @@ func rewriteValueARM_OpARMADDF(v *Value) bool { break } // match: (ADDF a (NMULF x y)) - // cond: a.Uses == 1 && buildcfg.GOARM >= 6 + // cond: a.Uses == 1 && buildcfg.GOARM.Version >= 6 // result: (MULSF a x y) for { for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { @@ -1571,7 +1571,7 @@ func rewriteValueARM_OpARMADDF(v *Value) bool { } y := v_1.Args[1] x := v_1.Args[0] - if !(a.Uses == 1 && buildcfg.GOARM >= 6) { + if !(a.Uses == 1 && buildcfg.GOARM.Version >= 6) { continue } v.reset(OpARMMULSF) @@ -1979,12 +1979,12 @@ func rewriteValueARM_OpARMADDconst(v *Value) bool { return true } // match: (ADDconst [c] x) - // cond: buildcfg.GOARM==7 && !isARMImmRot(uint32(c)) && uint32(c)>0xffff && uint32(-c)<=0xffff + // cond: buildcfg.GOARM.Version==7 && !isARMImmRot(uint32(c)) && uint32(c)>0xffff && uint32(-c)<=0xffff // result: (SUBconst [-c] x) for { c := auxIntToInt32(v.AuxInt) x := v_0 - if !(buildcfg.GOARM == 7 && !isARMImmRot(uint32(c)) && uint32(c) > 0xffff && uint32(-c) <= 0xffff) { + if !(buildcfg.GOARM.Version == 7 && !isARMImmRot(uint32(c)) && uint32(c) > 0xffff && uint32(-c) <= 0xffff) { break } v.reset(OpARMSUBconst) @@ -2099,7 +2099,7 @@ func rewriteValueARM_OpARMADDshiftLL(v *Value) bool { return true } // match: (ADDshiftLL [8] (SRLconst [24] (SLLconst [16] x)) x) - // cond: buildcfg.GOARM>=6 + // cond: buildcfg.GOARM.Version>=6 // result: (REV16 x) for { if v.Type != typ.UInt16 || auxIntToInt32(v.AuxInt) != 8 || v_0.Op != OpARMSRLconst || v_0.Type != typ.UInt16 || auxIntToInt32(v_0.AuxInt) != 24 { @@ -2110,7 +2110,7 @@ func rewriteValueARM_OpARMADDshiftLL(v *Value) bool { break } x := v_0_0.Args[0] - if x != v_1 || !(buildcfg.GOARM >= 6) { + if x != v_1 || !(buildcfg.GOARM.Version >= 6) { break } v.reset(OpARMREV16) @@ -2551,12 +2551,12 @@ func rewriteValueARM_OpARMANDconst(v *Value) bool { return true } // match: (ANDconst [c] x) - // cond: buildcfg.GOARM==7 && !isARMImmRot(uint32(c)) && uint32(c)>0xffff && ^uint32(c)<=0xffff + // cond: buildcfg.GOARM.Version==7 && !isARMImmRot(uint32(c)) && uint32(c)>0xffff && ^uint32(c)<=0xffff // result: (BICconst [int32(^uint32(c))] x) for { c := auxIntToInt32(v.AuxInt) x := v_0 - if !(buildcfg.GOARM == 7 && !isARMImmRot(uint32(c)) && uint32(c) > 0xffff && ^uint32(c) <= 0xffff) { + if !(buildcfg.GOARM.Version == 7 && !isARMImmRot(uint32(c)) && uint32(c) > 0xffff && ^uint32(c) <= 0xffff) { break } v.reset(OpARMBICconst) @@ -3052,12 +3052,12 @@ func rewriteValueARM_OpARMBICconst(v *Value) bool { return true } // match: (BICconst [c] x) - // cond: buildcfg.GOARM==7 && !isARMImmRot(uint32(c)) && uint32(c)>0xffff && ^uint32(c)<=0xffff + // cond: buildcfg.GOARM.Version==7 && !isARMImmRot(uint32(c)) && uint32(c)>0xffff && ^uint32(c)<=0xffff // result: (ANDconst [int32(^uint32(c))] x) for { c := auxIntToInt32(v.AuxInt) x := v_0 - if !(buildcfg.GOARM == 7 && !isARMImmRot(uint32(c)) && uint32(c) > 0xffff && ^uint32(c) <= 0xffff) { + if !(buildcfg.GOARM.Version == 7 && !isARMImmRot(uint32(c)) && uint32(c) > 0xffff && ^uint32(c) <= 0xffff) { break } v.reset(OpARMANDconst) @@ -7590,7 +7590,7 @@ func rewriteValueARM_OpARMMULD(v *Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] // match: (MULD (NEGD x) y) - // cond: buildcfg.GOARM >= 6 + // cond: buildcfg.GOARM.Version >= 6 // result: (NMULD x y) for { for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { @@ -7599,7 +7599,7 @@ func rewriteValueARM_OpARMMULD(v *Value) bool { } x := v_0.Args[0] y := v_1 - if !(buildcfg.GOARM >= 6) { + if !(buildcfg.GOARM.Version >= 6) { continue } v.reset(OpARMNMULD) @@ -7614,7 +7614,7 @@ func rewriteValueARM_OpARMMULF(v *Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] // match: (MULF (NEGF x) y) - // cond: buildcfg.GOARM >= 6 + // cond: buildcfg.GOARM.Version >= 6 // result: (NMULF x y) for { for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { @@ -7623,7 +7623,7 @@ func rewriteValueARM_OpARMMULF(v *Value) bool { } x := v_0.Args[0] y := v_1 - if !(buildcfg.GOARM >= 6) { + if !(buildcfg.GOARM.Version >= 6) { continue } v.reset(OpARMNMULF) @@ -8247,7 +8247,7 @@ func rewriteValueARM_OpARMMVNshiftRLreg(v *Value) bool { func rewriteValueARM_OpARMNEGD(v *Value) bool { v_0 := v.Args[0] // match: (NEGD (MULD x y)) - // cond: buildcfg.GOARM >= 6 + // cond: buildcfg.GOARM.Version >= 6 // result: (NMULD x y) for { if v_0.Op != OpARMMULD { @@ -8255,7 +8255,7 @@ func rewriteValueARM_OpARMNEGD(v *Value) bool { } y := v_0.Args[1] x := v_0.Args[0] - if !(buildcfg.GOARM >= 6) { + if !(buildcfg.GOARM.Version >= 6) { break } v.reset(OpARMNMULD) @@ -8267,7 +8267,7 @@ func rewriteValueARM_OpARMNEGD(v *Value) bool { func rewriteValueARM_OpARMNEGF(v *Value) bool { v_0 := v.Args[0] // match: (NEGF (MULF x y)) - // cond: buildcfg.GOARM >= 6 + // cond: buildcfg.GOARM.Version >= 6 // result: (NMULF x y) for { if v_0.Op != OpARMMULF { @@ -8275,7 +8275,7 @@ func rewriteValueARM_OpARMNEGF(v *Value) bool { } y := v_0.Args[1] x := v_0.Args[0] - if !(buildcfg.GOARM >= 6) { + if !(buildcfg.GOARM.Version >= 6) { break } v.reset(OpARMNMULF) @@ -8583,7 +8583,7 @@ func rewriteValueARM_OpARMORshiftLL(v *Value) bool { return true } // match: (ORshiftLL [8] (SRLconst [24] (SLLconst [16] x)) x) - // cond: buildcfg.GOARM>=6 + // cond: buildcfg.GOARM.Version>=6 // result: (REV16 x) for { if v.Type != typ.UInt16 || auxIntToInt32(v.AuxInt) != 8 || v_0.Op != OpARMSRLconst || v_0.Type != typ.UInt16 || auxIntToInt32(v_0.AuxInt) != 24 { @@ -8594,7 +8594,7 @@ func rewriteValueARM_OpARMORshiftLL(v *Value) bool { break } x := v_0_0.Args[0] - if x != v_1 || !(buildcfg.GOARM >= 6) { + if x != v_1 || !(buildcfg.GOARM.Version >= 6) { break } v.reset(OpARMREV16) @@ -9048,7 +9048,7 @@ func rewriteValueARM_OpARMRSB(v *Value) bool { return true } // match: (RSB (MUL x y) a) - // cond: buildcfg.GOARM == 7 + // cond: buildcfg.GOARM.Version == 7 // result: (MULS x y a) for { if v_0.Op != OpARMMUL { @@ -9057,7 +9057,7 @@ func rewriteValueARM_OpARMRSB(v *Value) bool { y := v_0.Args[1] x := v_0.Args[0] a := v_1 - if !(buildcfg.GOARM == 7) { + if !(buildcfg.GOARM.Version == 7) { break } v.reset(OpARMMULS) @@ -10534,7 +10534,7 @@ func rewriteValueARM_OpARMSRAconst(v *Value) bool { return true } // match: (SRAconst (SLLconst x [c]) [d]) - // cond: buildcfg.GOARM==7 && uint64(d)>=uint64(c) && uint64(d)<=31 + // cond: buildcfg.GOARM.Version==7 && uint64(d)>=uint64(c) && uint64(d)<=31 // result: (BFX [(d-c)|(32-d)<<8] x) for { d := auxIntToInt32(v.AuxInt) @@ -10543,7 +10543,7 @@ func rewriteValueARM_OpARMSRAconst(v *Value) bool { } c := auxIntToInt32(v_0.AuxInt) x := v_0.Args[0] - if !(buildcfg.GOARM == 7 && uint64(d) >= uint64(c) && uint64(d) <= 31) { + if !(buildcfg.GOARM.Version == 7 && uint64(d) >= uint64(c) && uint64(d) <= 31) { break } v.reset(OpARMBFX) @@ -10590,7 +10590,7 @@ func rewriteValueARM_OpARMSRLconst(v *Value) bool { return true } // match: (SRLconst (SLLconst x [c]) [d]) - // cond: buildcfg.GOARM==7 && uint64(d)>=uint64(c) && uint64(d)<=31 + // cond: buildcfg.GOARM.Version==7 && uint64(d)>=uint64(c) && uint64(d)<=31 // result: (BFXU [(d-c)|(32-d)<<8] x) for { d := auxIntToInt32(v.AuxInt) @@ -10599,7 +10599,7 @@ func rewriteValueARM_OpARMSRLconst(v *Value) bool { } c := auxIntToInt32(v_0.AuxInt) x := v_0.Args[0] - if !(buildcfg.GOARM == 7 && uint64(d) >= uint64(c) && uint64(d) <= 31) { + if !(buildcfg.GOARM.Version == 7 && uint64(d) >= uint64(c) && uint64(d) <= 31) { break } v.reset(OpARMBFXU) @@ -10830,7 +10830,7 @@ func rewriteValueARM_OpARMSUB(v *Value) bool { return true } // match: (SUB a (MUL x y)) - // cond: buildcfg.GOARM == 7 + // cond: buildcfg.GOARM.Version == 7 // result: (MULS x y a) for { a := v_0 @@ -10839,7 +10839,7 @@ func rewriteValueARM_OpARMSUB(v *Value) bool { } y := v_1.Args[1] x := v_1.Args[0] - if !(buildcfg.GOARM == 7) { + if !(buildcfg.GOARM.Version == 7) { break } v.reset(OpARMMULS) @@ -10852,7 +10852,7 @@ func rewriteValueARM_OpARMSUBD(v *Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] // match: (SUBD a (MULD x y)) - // cond: a.Uses == 1 && buildcfg.GOARM >= 6 + // cond: a.Uses == 1 && buildcfg.GOARM.Version >= 6 // result: (MULSD a x y) for { a := v_0 @@ -10861,7 +10861,7 @@ func rewriteValueARM_OpARMSUBD(v *Value) bool { } y := v_1.Args[1] x := v_1.Args[0] - if !(a.Uses == 1 && buildcfg.GOARM >= 6) { + if !(a.Uses == 1 && buildcfg.GOARM.Version >= 6) { break } v.reset(OpARMMULSD) @@ -10869,7 +10869,7 @@ func rewriteValueARM_OpARMSUBD(v *Value) bool { return true } // match: (SUBD a (NMULD x y)) - // cond: a.Uses == 1 && buildcfg.GOARM >= 6 + // cond: a.Uses == 1 && buildcfg.GOARM.Version >= 6 // result: (MULAD a x y) for { a := v_0 @@ -10878,7 +10878,7 @@ func rewriteValueARM_OpARMSUBD(v *Value) bool { } y := v_1.Args[1] x := v_1.Args[0] - if !(a.Uses == 1 && buildcfg.GOARM >= 6) { + if !(a.Uses == 1 && buildcfg.GOARM.Version >= 6) { break } v.reset(OpARMMULAD) @@ -10891,7 +10891,7 @@ func rewriteValueARM_OpARMSUBF(v *Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] // match: (SUBF a (MULF x y)) - // cond: a.Uses == 1 && buildcfg.GOARM >= 6 + // cond: a.Uses == 1 && buildcfg.GOARM.Version >= 6 // result: (MULSF a x y) for { a := v_0 @@ -10900,7 +10900,7 @@ func rewriteValueARM_OpARMSUBF(v *Value) bool { } y := v_1.Args[1] x := v_1.Args[0] - if !(a.Uses == 1 && buildcfg.GOARM >= 6) { + if !(a.Uses == 1 && buildcfg.GOARM.Version >= 6) { break } v.reset(OpARMMULSF) @@ -10908,7 +10908,7 @@ func rewriteValueARM_OpARMSUBF(v *Value) bool { return true } // match: (SUBF a (NMULF x y)) - // cond: a.Uses == 1 && buildcfg.GOARM >= 6 + // cond: a.Uses == 1 && buildcfg.GOARM.Version >= 6 // result: (MULAF a x y) for { a := v_0 @@ -10917,7 +10917,7 @@ func rewriteValueARM_OpARMSUBF(v *Value) bool { } y := v_1.Args[1] x := v_1.Args[0] - if !(a.Uses == 1 && buildcfg.GOARM >= 6) { + if !(a.Uses == 1 && buildcfg.GOARM.Version >= 6) { break } v.reset(OpARMMULAF) @@ -11383,12 +11383,12 @@ func rewriteValueARM_OpARMSUBconst(v *Value) bool { return true } // match: (SUBconst [c] x) - // cond: buildcfg.GOARM==7 && !isARMImmRot(uint32(c)) && uint32(c)>0xffff && uint32(-c)<=0xffff + // cond: buildcfg.GOARM.Version==7 && !isARMImmRot(uint32(c)) && uint32(c)>0xffff && uint32(-c)<=0xffff // result: (ADDconst [-c] x) for { c := auxIntToInt32(v.AuxInt) x := v_0 - if !(buildcfg.GOARM == 7 && !isARMImmRot(uint32(c)) && uint32(c) > 0xffff && uint32(-c) <= 0xffff) { + if !(buildcfg.GOARM.Version == 7 && !isARMImmRot(uint32(c)) && uint32(c) > 0xffff && uint32(-c) <= 0xffff) { break } v.reset(OpARMADDconst) @@ -12710,7 +12710,7 @@ func rewriteValueARM_OpARMXORshiftLL(v *Value) bool { return true } // match: (XORshiftLL [8] (SRLconst [24] (SLLconst [16] x)) x) - // cond: buildcfg.GOARM>=6 + // cond: buildcfg.GOARM.Version>=6 // result: (REV16 x) for { if v.Type != typ.UInt16 || auxIntToInt32(v.AuxInt) != 8 || v_0.Op != OpARMSRLconst || v_0.Type != typ.UInt16 || auxIntToInt32(v_0.AuxInt) != 24 { @@ -12721,7 +12721,7 @@ func rewriteValueARM_OpARMXORshiftLL(v *Value) bool { break } x := v_0_0.Args[0] - if x != v_1 || !(buildcfg.GOARM >= 6) { + if x != v_1 || !(buildcfg.GOARM.Version >= 6) { break } v.reset(OpARMREV16) @@ -13062,12 +13062,12 @@ func rewriteValueARM_OpBswap32(v *Value) bool { v_0 := v.Args[0] b := v.Block // match: (Bswap32 x) - // cond: buildcfg.GOARM==5 + // cond: buildcfg.GOARM.Version==5 // result: (XOR (SRLconst (BICconst (XOR x (SRRconst [16] x)) [0xff0000]) [8]) (SRRconst x [8])) for { t := v.Type x := v_0 - if !(buildcfg.GOARM == 5) { + if !(buildcfg.GOARM.Version == 5) { break } v.reset(OpARMXOR) @@ -13090,11 +13090,11 @@ func rewriteValueARM_OpBswap32(v *Value) bool { return true } // match: (Bswap32 x) - // cond: buildcfg.GOARM>=6 + // cond: buildcfg.GOARM.Version>=6 // result: (REV x) for { x := v_0 - if !(buildcfg.GOARM >= 6) { + if !(buildcfg.GOARM.Version >= 6) { break } v.reset(OpARMREV) @@ -13177,12 +13177,12 @@ func rewriteValueARM_OpCtz16(v *Value) bool { b := v.Block typ := &b.Func.Config.Types // match: (Ctz16 x) - // cond: buildcfg.GOARM<=6 + // cond: buildcfg.GOARM.Version<=6 // result: (RSBconst [32] (CLZ (SUBconst (AND (ORconst [0x10000] x) (RSBconst [0] (ORconst [0x10000] x))) [1]))) for { t := v.Type x := v_0 - if !(buildcfg.GOARM <= 6) { + if !(buildcfg.GOARM.Version <= 6) { break } v.reset(OpARMRSBconst) @@ -13204,12 +13204,12 @@ func rewriteValueARM_OpCtz16(v *Value) bool { return true } // match: (Ctz16 x) - // cond: buildcfg.GOARM==7 + // cond: buildcfg.GOARM.Version==7 // result: (CLZ (RBIT (ORconst [0x10000] x))) for { t := v.Type x := v_0 - if !(buildcfg.GOARM == 7) { + if !(buildcfg.GOARM.Version == 7) { break } v.reset(OpARMCLZ) @@ -13228,12 +13228,12 @@ func rewriteValueARM_OpCtz32(v *Value) bool { v_0 := v.Args[0] b := v.Block // match: (Ctz32 x) - // cond: buildcfg.GOARM<=6 + // cond: buildcfg.GOARM.Version<=6 // result: (RSBconst [32] (CLZ (SUBconst (AND x (RSBconst [0] x)) [1]))) for { t := v.Type x := v_0 - if !(buildcfg.GOARM <= 6) { + if !(buildcfg.GOARM.Version <= 6) { break } v.reset(OpARMRSBconst) @@ -13252,12 +13252,12 @@ func rewriteValueARM_OpCtz32(v *Value) bool { return true } // match: (Ctz32 x) - // cond: buildcfg.GOARM==7 + // cond: buildcfg.GOARM.Version==7 // result: (CLZ (RBIT x)) for { t := v.Type x := v_0 - if !(buildcfg.GOARM == 7) { + if !(buildcfg.GOARM.Version == 7) { break } v.reset(OpARMCLZ) @@ -13274,12 +13274,12 @@ func rewriteValueARM_OpCtz8(v *Value) bool { b := v.Block typ := &b.Func.Config.Types // match: (Ctz8 x) - // cond: buildcfg.GOARM<=6 + // cond: buildcfg.GOARM.Version<=6 // result: (RSBconst [32] (CLZ (SUBconst (AND (ORconst [0x100] x) (RSBconst [0] (ORconst [0x100] x))) [1]))) for { t := v.Type x := v_0 - if !(buildcfg.GOARM <= 6) { + if !(buildcfg.GOARM.Version <= 6) { break } v.reset(OpARMRSBconst) @@ -13301,12 +13301,12 @@ func rewriteValueARM_OpCtz8(v *Value) bool { return true } // match: (Ctz8 x) - // cond: buildcfg.GOARM==7 + // cond: buildcfg.GOARM.Version==7 // result: (CLZ (RBIT (ORconst [0x100] x))) for { t := v.Type x := v_0 - if !(buildcfg.GOARM == 7) { + if !(buildcfg.GOARM.Version == 7) { break } v.reset(OpARMCLZ) diff --git a/src/cmd/go/alldocs.go b/src/cmd/go/alldocs.go index a5148ad486..a40d0556ff 100644 --- a/src/cmd/go/alldocs.go +++ b/src/cmd/go/alldocs.go @@ -2285,6 +2285,8 @@ // GOARM // For GOARCH=arm, the ARM architecture for which to compile. // Valid values are 5, 6, 7. +// The value can be followed by an option specifying how to implement floating point instructions. +// Valid options are ,softfloat (default for 5) and ,hardfloat (default for 6 and 7). // GO386 // For GOARCH=386, how to implement floating point instructions. // Valid values are sse2 (default), softfloat. diff --git a/src/cmd/go/internal/help/helpdoc.go b/src/cmd/go/internal/help/helpdoc.go index 93613ac65e..c5d1e2af16 100644 --- a/src/cmd/go/internal/help/helpdoc.go +++ b/src/cmd/go/internal/help/helpdoc.go @@ -601,6 +601,8 @@ Architecture-specific environment variables: GOARM For GOARCH=arm, the ARM architecture for which to compile. Valid values are 5, 6, 7. + The value can be followed by an option specifying how to implement floating point instructions. + Valid options are ,softfloat (default for 5) and ,hardfloat (default for 6 and 7). GO386 For GOARCH=386, how to implement floating point instructions. Valid values are sse2 (default), softfloat. diff --git a/src/cmd/internal/obj/arm/asm5.go b/src/cmd/internal/obj/arm/asm5.go index 177ffd9797..24b9bdd980 100644 --- a/src/cmd/internal/obj/arm/asm5.go +++ b/src/cmd/internal/obj/arm/asm5.go @@ -979,7 +979,7 @@ func (c *ctxt5) aclass(a *obj.Addr) int { if immrot(^uint32(c.instoffset)) != 0 { return C_NCON } - if uint32(c.instoffset) <= 0xffff && buildcfg.GOARM == 7 { + if uint32(c.instoffset) <= 0xffff && buildcfg.GOARM.Version == 7 { return C_SCON } if x, y := immrot2a(uint32(c.instoffset)); x != 0 && y != 0 { @@ -3044,16 +3044,16 @@ func (c *ctxt5) omvl(p *obj.Prog, a *obj.Addr, dr int) uint32 { } func (c *ctxt5) chipzero5(e float64) int { - // We use GOARM=7 to gate the use of VFPv3 vmov (imm) instructions. - if buildcfg.GOARM < 7 || math.Float64bits(e) != 0 { + // We use GOARM.Version=7 and !GOARM.SoftFloat to gate the use of VFPv3 vmov (imm) instructions. + if buildcfg.GOARM.Version < 7 || buildcfg.GOARM.SoftFloat || math.Float64bits(e) != 0 { return -1 } return 0 } func (c *ctxt5) chipfloat5(e float64) int { - // We use GOARM=7 to gate the use of VFPv3 vmov (imm) instructions. - if buildcfg.GOARM < 7 { + // We use GOARM.Version=7 and !GOARM.SoftFloat to gate the use of VFPv3 vmov (imm) instructions. + if buildcfg.GOARM.Version < 7 || buildcfg.GOARM.SoftFloat { return -1 } diff --git a/src/cmd/internal/obj/arm/obj5.go b/src/cmd/internal/obj/arm/obj5.go index fb7c260f89..def4f526ad 100644 --- a/src/cmd/internal/obj/arm/obj5.go +++ b/src/cmd/internal/obj/arm/obj5.go @@ -66,7 +66,7 @@ func progedit(ctxt *obj.Link, p *obj.Prog, newprog obj.ProgAlloc) { ctxt.Diag("%v: TLS MRC instruction must write to R0 as it might get translated into a BL instruction", p.Line()) } - if buildcfg.GOARM < 7 { + if buildcfg.GOARM.Version < 7 { // Replace it with BL runtime.read_tls_fallback(SB) for ARM CPUs that lack the tls extension. if progedit_tlsfallback == nil { progedit_tlsfallback = ctxt.Lookup("runtime.read_tls_fallback") diff --git a/src/cmd/internal/testdir/testdir_test.go b/src/cmd/internal/testdir/testdir_test.go index 1b91dbe3ce..0fb56e6c78 100644 --- a/src/cmd/internal/testdir/testdir_test.go +++ b/src/cmd/internal/testdir/testdir_test.go @@ -1458,7 +1458,7 @@ var ( archVariants = map[string][]string{ "386": {"GO386", "sse2", "softfloat"}, "amd64": {"GOAMD64", "v1", "v2", "v3", "v4"}, - "arm": {"GOARM", "5", "6", "7"}, + "arm": {"GOARM", "5", "6", "7", "7,softfloat"}, "arm64": {}, "loong64": {}, "mips": {"GOMIPS", "hardfloat", "softfloat"}, diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go index b603fba6c7..eab74dc328 100644 --- a/src/cmd/link/internal/ld/lib.go +++ b/src/cmd/link/internal/ld/lib.go @@ -878,7 +878,17 @@ func (ctxt *Link) linksetup() { sb := ctxt.loader.MakeSymbolUpdater(goarm) sb.SetType(sym.SDATA) sb.SetSize(0) - sb.AddUint8(uint8(buildcfg.GOARM)) + sb.AddUint8(uint8(buildcfg.GOARM.Version)) + + goarmsoftfp := ctxt.loader.LookupOrCreateSym("runtime.goarmsoftfp", 0) + sb2 := ctxt.loader.MakeSymbolUpdater(goarmsoftfp) + sb2.SetType(sym.SDATA) + sb2.SetSize(0) + if buildcfg.GOARM.SoftFloat { + sb2.AddUint8(1) + } else { + sb2.AddUint8(0) + } } // Set runtime.disableMemoryProfiling bool if diff --git a/src/internal/buildcfg/cfg.go b/src/internal/buildcfg/cfg.go index b97b9c1b53..8b97a653d7 100644 --- a/src/internal/buildcfg/cfg.go +++ b/src/internal/buildcfg/cfg.go @@ -69,22 +69,61 @@ func goamd64() int { return int(defaultGOAMD64[len("v")] - '0') } -func goarm() int { +type goarmFeatures struct { + Version int + SoftFloat bool +} + +func (g goarmFeatures) String() string { + armStr := strconv.Itoa(g.Version) + if g.SoftFloat { + armStr += ",softfloat" + } else { + armStr += ",hardfloat" + } + return armStr +} + +func goarm() (g goarmFeatures) { + const ( + softFloatOpt = ",softfloat" + hardFloatOpt = ",hardfloat" + ) def := defaultGOARM if GOOS == "android" && GOARCH == "arm" { // Android arm devices always support GOARM=7. def = "7" } - switch v := envOr("GOARM", def); v { - case "5": - return 5 - case "6": - return 6 - case "7": - return 7 + v := envOr("GOARM", def) + + floatSpecified := false + if strings.HasSuffix(v, softFloatOpt) { + g.SoftFloat = true + floatSpecified = true + v = v[:len(v)-len(softFloatOpt)] } - Error = fmt.Errorf("invalid GOARM: must be 5, 6, 7") - return int(def[0] - '0') + if strings.HasSuffix(v, hardFloatOpt) { + floatSpecified = true + v = v[:len(v)-len(hardFloatOpt)] + } + + switch v { + case "5": + g.Version = 5 + case "6": + g.Version = 6 + case "7": + g.Version = 7 + default: + Error = fmt.Errorf("invalid GOARM: must start with 5, 6, or 7, and may optionally end in either %q or %q", hardFloatOpt, softFloatOpt) + g.Version = int(def[0] - '0') + } + + // 5 defaults to softfloat. 6 and 7 default to hardfloat. + if !floatSpecified && g.Version == 5 { + g.SoftFloat = true + } + return } func gomips() string { @@ -182,7 +221,7 @@ func GOGOARCH() (name, value string) { case "amd64": return "GOAMD64", fmt.Sprintf("v%d", GOAMD64) case "arm": - return "GOARM", strconv.Itoa(GOARM) + return "GOARM", GOARM.String() case "mips", "mipsle": return "GOMIPS", GOMIPS case "mips64", "mips64le": @@ -207,7 +246,7 @@ func gogoarchTags() []string { return list case "arm": var list []string - for i := 5; i <= GOARM; i++ { + for i := 5; i <= GOARM.Version; i++ { list = append(list, fmt.Sprintf("%s.%d", GOARCH, i)) } return list diff --git a/src/math/rand/rand_test.go b/src/math/rand/rand_test.go index 4ad2ae2230..9f074fea00 100644 --- a/src/math/rand/rand_test.go +++ b/src/math/rand/rand_test.go @@ -14,6 +14,7 @@ import ( . "math/rand" "os" "runtime" + "strings" "sync" "testing" "testing/iotest" @@ -331,7 +332,7 @@ func TestExpTables(t *testing.T) { func hasSlowFloatingPoint() bool { switch runtime.GOARCH { case "arm": - return os.Getenv("GOARM") == "5" + return os.Getenv("GOARM") == "5" || strings.HasSuffix(os.Getenv("GOARM"), ",softfloat") case "mips", "mipsle", "mips64", "mips64le": // Be conservative and assume that all mips boards // have emulated floating point. diff --git a/src/runtime/asm_arm.s b/src/runtime/asm_arm.s index e3206a1d27..31a0584fb5 100644 --- a/src/runtime/asm_arm.s +++ b/src/runtime/asm_arm.s @@ -39,10 +39,10 @@ TEXT _rt0_arm_lib(SB),NOSPLIT,$104 MOVW g, 32(R13) MOVW R11, 36(R13) - // Skip floating point registers on GOARM < 6. - MOVB runtime·goarm(SB), R11 - CMP $6, R11 - BLT skipfpsave + // Skip floating point registers on goarmsoftfp != 0. + MOVB runtime·goarmsoftfp(SB), R11 + CMP $0, R11 + BNE skipfpsave MOVD F8, (40+8*0)(R13) MOVD F9, (40+8*1)(R13) MOVD F10, (40+8*2)(R13) @@ -77,9 +77,9 @@ nocgo: BL runtime·newosproc0(SB) rr: // Restore callee-save registers and return. - MOVB runtime·goarm(SB), R11 - CMP $6, R11 - BLT skipfprest + MOVB runtime·goarmsoftfp(SB), R11 + CMP $0, R11 + BNE skipfprest MOVD (40+8*0)(R13), F8 MOVD (40+8*1)(R13), F9 MOVD (40+8*2)(R13), F10 @@ -197,10 +197,10 @@ TEXT runtime·breakpoint(SB),NOSPLIT,$0-0 RET TEXT runtime·asminit(SB),NOSPLIT,$0-0 - // disable runfast (flush-to-zero) mode of vfp if runtime.goarm > 5 - MOVB runtime·goarm(SB), R11 - CMP $5, R11 - BLE 4(PC) + // disable runfast (flush-to-zero) mode of vfp if runtime.goarmsoftfp == 0 + MOVB runtime·goarmsoftfp(SB), R11 + CMP $0, R11 + BNE 4(PC) WORD $0xeef1ba10 // vmrs r11, fpscr BIC $(1<<24), R11 WORD $0xeee1ba10 // vmsr fpscr, r11 diff --git a/src/runtime/cgo/asm_arm.s b/src/runtime/cgo/asm_arm.s index 095e9c06c9..425899ebe5 100644 --- a/src/runtime/cgo/asm_arm.s +++ b/src/runtime/cgo/asm_arm.s @@ -32,10 +32,10 @@ TEXT crosscall2(SB),NOSPLIT|NOFRAME,$0 // starting at 4(R13). MOVW.W R14, -4(R13) - // Skip floating point registers on GOARM < 6. - MOVB runtime·goarm(SB), R11 - CMP $6, R11 - BLT skipfpsave + // Skip floating point registers if goarmsoftfp!=0. + MOVB runtime·goarmsoftfp(SB), R11 + CMP $0, R11 + BNE skipfpsave MOVD F8, (13*4+8*1)(R13) MOVD F9, (13*4+8*2)(R13) MOVD F10, (13*4+8*3)(R13) @@ -50,9 +50,9 @@ skipfpsave: // We set up the arguments to cgocallback when saving registers above. BL runtime·cgocallback(SB) - MOVB runtime·goarm(SB), R11 - CMP $6, R11 - BLT skipfprest + MOVB runtime·goarmsoftfp(SB), R11 + CMP $0, R11 + BNE skipfprest MOVD (13*4+8*1)(R13), F8 MOVD (13*4+8*2)(R13), F9 MOVD (13*4+8*3)(R13), F10 diff --git a/src/runtime/mkpreempt.go b/src/runtime/mkpreempt.go index a96ae59c15..17544d6b21 100644 --- a/src/runtime/mkpreempt.go +++ b/src/runtime/mkpreempt.go @@ -317,11 +317,11 @@ func genARM() { p("MOVW.W R14, -%d(R13)", lfp.stack) // allocate frame, save LR l.save() - p("MOVB ·goarm(SB), R0\nCMP $6, R0\nBLT nofp") // test goarm, and skip FP registers if goarm=5. + p("MOVB ·goarmsoftfp(SB), R0\nCMP $0, R0\nBNE nofp") // test goarmsoftfp, and skip FP registers if goarmsoftfp!=0. lfp.save() label("nofp:") p("CALL ·asyncPreempt2(SB)") - p("MOVB ·goarm(SB), R0\nCMP $6, R0\nBLT nofp2") // test goarm, and skip FP registers if goarm=5. + p("MOVB ·goarmsoftfp(SB), R0\nCMP $0, R0\nBNE nofp2") // test goarmsoftfp, and skip FP registers if goarmsoftfp!=0. lfp.restore() label("nofp2:") l.restore() diff --git a/src/runtime/os_freebsd_arm.go b/src/runtime/os_freebsd_arm.go index df8c709b8f..ae80119fe1 100644 --- a/src/runtime/os_freebsd_arm.go +++ b/src/runtime/os_freebsd_arm.go @@ -15,14 +15,16 @@ const ( ) func checkgoarm() { - if goarm > 5 && cpu.HWCap&_HWCAP_VFP == 0 { + if cpu.HWCap&_HWCAP_VFP == 0 && goarmsoftfp == 0 { print("runtime: this CPU has no floating point hardware, so it cannot run\n") - print("this GOARM=", goarm, " binary. Recompile using GOARM=5.\n") + print("a binary compiled for hard floating point. Recompile adding ,softfloat\n") + print("to GOARM.\n") exit(1) } - if goarm > 6 && cpu.HWCap&_HWCAP_VFPv3 == 0 { + if goarm > 6 && cpu.HWCap&_HWCAP_VFPv3 == 0 && goarmsoftfp == 0 { print("runtime: this CPU has no VFPv3 floating point hardware, so it cannot run\n") - print("this GOARM=", goarm, " binary. Recompile using GOARM=5 or GOARM=6.\n") + print("a binary compiled for VFPv3 hard floating point. Recompile adding ,softfloat\n") + print("to GOARM or changing GOARM to 6.\n") exit(1) } diff --git a/src/runtime/os_linux_arm.go b/src/runtime/os_linux_arm.go index 6e0c729855..b9779159ad 100644 --- a/src/runtime/os_linux_arm.go +++ b/src/runtime/os_linux_arm.go @@ -23,14 +23,16 @@ func checkgoarm() { if GOOS == "android" { return } - if goarm > 5 && cpu.HWCap&_HWCAP_VFP == 0 { + if cpu.HWCap&_HWCAP_VFP == 0 && goarmsoftfp == 0 { print("runtime: this CPU has no floating point hardware, so it cannot run\n") - print("this GOARM=", goarm, " binary. Recompile using GOARM=5.\n") + print("a binary compiled for hard floating point. Recompile adding ,softfloat\n") + print("to GOARM.\n") exit(1) } - if goarm > 6 && cpu.HWCap&_HWCAP_VFPv3 == 0 { + if goarm > 6 && cpu.HWCap&_HWCAP_VFPv3 == 0 && goarmsoftfp == 0 { print("runtime: this CPU has no VFPv3 floating point hardware, so it cannot run\n") - print("this GOARM=", goarm, " binary. Recompile using GOARM=5 or GOARM=6.\n") + print("a binary compiled for VFPv3 hard floating point. Recompile adding ,softfloat\n") + print("to GOARM or changing GOARM to 6.\n") exit(1) } } diff --git a/src/runtime/preempt_arm.s b/src/runtime/preempt_arm.s index 8f243c0dcd..b68df5d6b1 100644 --- a/src/runtime/preempt_arm.s +++ b/src/runtime/preempt_arm.s @@ -19,9 +19,9 @@ TEXT ·asyncPreempt(SB),NOSPLIT|NOFRAME,$0-0 MOVW R12, 48(R13) MOVW CPSR, R0 MOVW R0, 52(R13) - MOVB ·goarm(SB), R0 - CMP $6, R0 - BLT nofp + MOVB ·goarmsoftfp(SB), R0 + CMP $0, R0 + BNE nofp MOVW FPCR, R0 MOVW R0, 56(R13) MOVD F0, 60(R13) @@ -42,9 +42,9 @@ TEXT ·asyncPreempt(SB),NOSPLIT|NOFRAME,$0-0 MOVD F15, 180(R13) nofp: CALL ·asyncPreempt2(SB) - MOVB ·goarm(SB), R0 - CMP $6, R0 - BLT nofp2 + MOVB ·goarmsoftfp(SB), R0 + CMP $0, R0 + BNE nofp2 MOVD 180(R13), F15 MOVD 172(R13), F14 MOVD 164(R13), F13 diff --git a/src/runtime/runtime2.go b/src/runtime/runtime2.go index e64c3c5695..fb283a3ab4 100644 --- a/src/runtime/runtime2.go +++ b/src/runtime/runtime2.go @@ -1230,7 +1230,9 @@ var ( processorVersionInfo uint32 isIntel bool - goarm uint8 // set by cmd/link on arm systems + // set by cmd/link on arm systems + goarm uint8 + goarmsoftfp uint8 ) // Set by the linker so the runtime can determine the buildmode. From 4a90cdb03d9c103abb0d44ff42dde7121ac6cd34 Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Sat, 18 Nov 2023 20:16:47 -0800 Subject: [PATCH 013/313] cmd/compile: interleave devirtualization and inlining This CL interleaves devirtualization and inlining, so that devirtualized calls can be inlined. Fixes #52193. Change-Id: I681e7c55bdb90ebf6df315d334e7a58f05110d9c Reviewed-on: https://go-review.googlesource.com/c/go/+/528321 Auto-Submit: Matthew Dempsky Reviewed-by: Than McIntosh Reviewed-by: Cherry Mui TryBot-Bypass: Matthew Dempsky --- .../internal/devirtualize/devirtualize.go | 18 +- src/cmd/compile/internal/gc/main.go | 25 +- src/cmd/compile/internal/inline/inl.go | 242 ++++++------------ .../inline/interleaved/interleaved.go | 132 ++++++++++ src/cmd/compile/internal/noder/reader.go | 3 +- src/cmd/compile/internal/noder/unified.go | 2 +- test/fixedbugs/issue42284.dir/a.go | 2 +- test/fixedbugs/issue42284.dir/b.go | 2 +- test/fixedbugs/issue52193.go | 46 ++++ 9 files changed, 265 insertions(+), 207 deletions(-) create mode 100644 src/cmd/compile/internal/inline/interleaved/interleaved.go create mode 100644 test/fixedbugs/issue52193.go diff --git a/src/cmd/compile/internal/devirtualize/devirtualize.go b/src/cmd/compile/internal/devirtualize/devirtualize.go index 9e26f66a1c..5d1b952627 100644 --- a/src/cmd/compile/internal/devirtualize/devirtualize.go +++ b/src/cmd/compile/internal/devirtualize/devirtualize.go @@ -18,22 +18,9 @@ import ( "cmd/compile/internal/types" ) -// Static devirtualizes calls within fn where possible when the concrete callee +// StaticCall devirtualizes the given call if possible when the concrete callee // is available statically. -func Static(fn *ir.Func) { - ir.CurFunc = fn - - ir.VisitList(fn.Body, func(n ir.Node) { - switch n := n.(type) { - case *ir.CallExpr: - staticCall(n) - } - }) -} - -// staticCall devirtualizes the given call if possible when the concrete callee -// is available statically. -func staticCall(call *ir.CallExpr) { +func StaticCall(call *ir.CallExpr) { // For promoted methods (including value-receiver methods promoted // to pointer-receivers), the interface method wrapper may contain // expressions that can panic (e.g., ODEREF, ODOTPTR, @@ -51,6 +38,7 @@ func staticCall(call *ir.CallExpr) { if call.Op() != ir.OCALLINTER { return } + sel := call.Fun.(*ir.SelectorExpr) r := ir.StaticValue(sel.X) if r.Op() != ir.OCONVIFACE { diff --git a/src/cmd/compile/internal/gc/main.go b/src/cmd/compile/internal/gc/main.go index a19962dabb..7e5069fced 100644 --- a/src/cmd/compile/internal/gc/main.go +++ b/src/cmd/compile/internal/gc/main.go @@ -9,10 +9,10 @@ import ( "bytes" "cmd/compile/internal/base" "cmd/compile/internal/coverage" - "cmd/compile/internal/devirtualize" "cmd/compile/internal/dwarfgen" "cmd/compile/internal/escape" "cmd/compile/internal/inline" + "cmd/compile/internal/inline/interleaved" "cmd/compile/internal/ir" "cmd/compile/internal/logopt" "cmd/compile/internal/loopvar" @@ -224,30 +224,15 @@ func Main(archInit func(*ssagen.ArchInfo)) { } } - base.Timer.Start("fe", "pgo-devirtualization") - if profile != nil && base.Debug.PGODevirtualize > 0 { - // TODO(prattmic): No need to use bottom-up visit order. This - // is mirroring the PGO IRGraph visit order, which also need - // not be bottom-up. - ir.VisitFuncsBottomUp(typecheck.Target.Funcs, func(list []*ir.Func, recursive bool) { - for _, fn := range list { - devirtualize.ProfileGuided(fn, profile) - } - }) - ir.CurFunc = nil - } + // Interleaved devirtualization and inlining. + base.Timer.Start("fe", "devirtualize-and-inline") + interleaved.DevirtualizeAndInlinePackage(typecheck.Target, profile) - // Inlining - base.Timer.Start("fe", "inlining") - if base.Flag.LowerL != 0 { - inline.InlinePackage(profile) - } noder.MakeWrappers(typecheck.Target) // must happen after inlining - // Devirtualize and get variable capture right in for loops + // Get variable capture right in for loops. var transformed []loopvar.VarAndLoop for _, fn := range typecheck.Target.Funcs { - devirtualize.Static(fn) transformed = append(transformed, loopvar.ForCapture(fn)...) } ir.CurFunc = nil diff --git a/src/cmd/compile/internal/inline/inl.go b/src/cmd/compile/internal/inline/inl.go index 7aed532c99..74f0d341c7 100644 --- a/src/cmd/compile/internal/inline/inl.go +++ b/src/cmd/compile/internal/inline/inl.go @@ -76,8 +76,8 @@ var ( inlineHotMaxBudget int32 = 2000 ) -// pgoInlinePrologue records the hot callsites from ir-graph. -func pgoInlinePrologue(p *pgo.Profile, funcs []*ir.Func) { +// PGOInlinePrologue records the hot callsites from ir-graph. +func PGOInlinePrologue(p *pgo.Profile, funcs []*ir.Func) { if base.Debug.PGOInlineCDFThreshold != "" { if s, err := strconv.ParseFloat(base.Debug.PGOInlineCDFThreshold, 64); err == nil && s >= 0 && s <= 100 { inlineCDFHotCallSiteThresholdPercent = s @@ -134,79 +134,52 @@ func hotNodesFromCDF(p *pgo.Profile) (float64, []pgo.NamedCallEdge) { return 0, p.NamedEdgeMap.ByWeight } -// InlinePackage finds functions that can be inlined and clones them before walk expands them. -func InlinePackage(p *pgo.Profile) { - if base.Debug.PGOInline == 0 { - p = nil +// CanInlineFuncs computes whether a batch of functions are inlinable. +func CanInlineFuncs(funcs []*ir.Func, profile *pgo.Profile) { + if profile != nil { + PGOInlinePrologue(profile, funcs) } - inlheur.SetupScoreAdjustments() - - InlineDecls(p, typecheck.Target.Funcs, true) - - // Perform a garbage collection of hidden closures functions that - // are no longer reachable from top-level functions following - // inlining. See #59404 and #59638 for more context. - garbageCollectUnreferencedHiddenClosures() - - if base.Debug.DumpInlFuncProps != "" { - inlheur.DumpFuncProps(nil, base.Debug.DumpInlFuncProps) - } - if inlheur.Enabled() { - postProcessCallSites(p) - inlheur.TearDown() - } + ir.VisitFuncsBottomUp(funcs, func(list []*ir.Func, recursive bool) { + CanInlineSCC(list, recursive, profile) + }) } -// InlineDecls applies inlining to the given batch of declarations. -func InlineDecls(p *pgo.Profile, funcs []*ir.Func, doInline bool) { - if p != nil { - pgoInlinePrologue(p, funcs) +// CanInlineSCC computes the inlinability of functions within an SCC +// (strongly connected component). +// +// CanInlineSCC is designed to be used by ir.VisitFuncsBottomUp +// callbacks. +func CanInlineSCC(funcs []*ir.Func, recursive bool, profile *pgo.Profile) { + if base.Flag.LowerL == 0 { + return } - doCanInline := func(n *ir.Func, recursive bool, numfns int) { + numfns := numNonClosures(funcs) + + for _, fn := range funcs { if !recursive || numfns > 1 { // We allow inlining if there is no // recursion, or the recursion cycle is // across more than one function. - CanInline(n, p) + CanInline(fn, profile) } else { - if base.Flag.LowerM > 1 && n.OClosure == nil { - fmt.Printf("%v: cannot inline %v: recursive\n", ir.Line(n), n.Nname) + if base.Flag.LowerM > 1 && fn.OClosure == nil { + fmt.Printf("%v: cannot inline %v: recursive\n", ir.Line(fn), fn.Nname) } } if inlheur.Enabled() { - analyzeFuncProps(n, p) + analyzeFuncProps(fn, profile) } } - - ir.VisitFuncsBottomUp(funcs, func(list []*ir.Func, recursive bool) { - numfns := numNonClosures(list) - // We visit functions within an SCC in fairly arbitrary order, - // so by computing inlinability for all functions in the SCC - // before performing any inlining, the results are less - // sensitive to the order within the SCC (see #58905 for an - // example). - - // First compute inlinability for all functions in the SCC ... - for _, n := range list { - doCanInline(n, recursive, numfns) - } - // ... then make a second pass to do inlining of calls. - if doInline { - for _, n := range list { - InlineCalls(n, p) - } - } - }) } -// garbageCollectUnreferencedHiddenClosures makes a pass over all the +// GarbageCollectUnreferencedHiddenClosures makes a pass over all the // top-level (non-hidden-closure) functions looking for nested closure // functions that are reachable, then sweeps through the Target.Decls // list and marks any non-reachable hidden closure function as dead. // See issues #59404 and #59638 for more context. -func garbageCollectUnreferencedHiddenClosures() { +func GarbageCollectUnreferencedHiddenClosures() { liveFuncs := make(map[*ir.Func]bool) @@ -336,7 +309,7 @@ func CanInline(fn *ir.Func, profile *pgo.Profile) { visitor := hairyVisitor{ curFunc: fn, - isBigFunc: isBigFunc(fn), + isBigFunc: IsBigFunc(fn), budget: budget, maxBudget: budget, extraCallCost: cc, @@ -732,14 +705,16 @@ opSwitch: // particular, to avoid breaking the existing inlinability regress // tests), we need to compensate for this here. // - // See also identical logic in isBigFunc. - if init := n.Rhs[0].Init(); len(init) == 1 { - if _, ok := init[0].(*ir.AssignListStmt); ok { - // 4 for each value, because each temporary variable now - // appears 3 times (DCL, LHS, RHS), plus an extra DCL node. - // - // 1 for the extra "tmp1, tmp2 = f()" assignment statement. - v.budget += 4*int32(len(n.Lhs)) + 1 + // See also identical logic in IsBigFunc. + if len(n.Rhs) > 0 { + if init := n.Rhs[0].Init(); len(init) == 1 { + if _, ok := init[0].(*ir.AssignListStmt); ok { + // 4 for each value, because each temporary variable now + // appears 3 times (DCL, LHS, RHS), plus an extra DCL node. + // + // 1 for the extra "tmp1, tmp2 = f()" assignment statement. + v.budget += 4*int32(len(n.Lhs)) + 1 + } } } @@ -771,12 +746,15 @@ opSwitch: return ir.DoChildren(n, v.do) } -func isBigFunc(fn *ir.Func) bool { +// IsBigFunc reports whether fn is a "big" function. +// +// Note: The criteria for "big" is heuristic and subject to change. +func IsBigFunc(fn *ir.Func) bool { budget := inlineBigFunctionNodes return ir.Any(fn, func(n ir.Node) bool { // See logic in hairyVisitor.doNode, explaining unified IR's // handling of "a, b = f()" assignments. - if n, ok := n.(*ir.AssignListStmt); ok && n.Op() == ir.OAS2 { + if n, ok := n.(*ir.AssignListStmt); ok && n.Op() == ir.OAS2 && len(n.Rhs) > 0 { if init := n.Rhs[0].Init(); len(init) == 1 { if _, ok := init[0].(*ir.AssignListStmt); ok { budget += 4*len(n.Lhs) + 1 @@ -789,109 +767,40 @@ func isBigFunc(fn *ir.Func) bool { }) } -// InlineCalls/inlnode walks fn's statements and expressions and substitutes any -// calls made to inlineable functions. This is the external entry point. -func InlineCalls(fn *ir.Func, profile *pgo.Profile) { - if inlheur.Enabled() && !fn.Wrapper() { - inlheur.ScoreCalls(fn) - defer inlheur.ScoreCallsCleanup() +// TryInlineCall returns an inlined call expression for call, or nil +// if inlining is not possible. +func TryInlineCall(callerfn *ir.Func, call *ir.CallExpr, bigCaller bool, profile *pgo.Profile) *ir.InlinedCallExpr { + if base.Flag.LowerL == 0 { + return nil } - if base.Debug.DumpInlFuncProps != "" && !fn.Wrapper() { - inlheur.DumpFuncProps(fn, base.Debug.DumpInlFuncProps) + if call.Op() != ir.OCALLFUNC { + return nil } - savefn := ir.CurFunc - ir.CurFunc = fn - bigCaller := isBigFunc(fn) - if bigCaller && base.Flag.LowerM > 1 { - fmt.Printf("%v: function %v considered 'big'; reducing max cost of inlinees\n", ir.Line(fn), fn) - } - var inlCalls []*ir.InlinedCallExpr - var edit func(ir.Node) ir.Node - edit = func(n ir.Node) ir.Node { - return inlnode(fn, n, bigCaller, &inlCalls, edit, profile) - } - ir.EditChildren(fn, edit) - - // If we inlined any calls, we want to recursively visit their - // bodies for further inlining. However, we need to wait until - // *after* the original function body has been expanded, or else - // inlCallee can have false positives (e.g., #54632). - for len(inlCalls) > 0 { - call := inlCalls[0] - inlCalls = inlCalls[1:] - ir.EditChildren(call, edit) + if call.GoDefer || call.NoInline { + return nil } - ir.CurFunc = savefn -} - -// inlnode recurses over the tree to find inlineable calls, which will -// be turned into OINLCALLs by mkinlcall. When the recursion comes -// back up will examine left, right, list, rlist, ninit, ntest, nincr, -// nbody and nelse and use one of the 4 inlconv/glue functions above -// to turn the OINLCALL into an expression, a statement, or patch it -// in to this nodes list or rlist as appropriate. -// NOTE it makes no sense to pass the glue functions down the -// recursion to the level where the OINLCALL gets created because they -// have to edit /this/ n, so you'd have to push that one down as well, -// but then you may as well do it here. so this is cleaner and -// shorter and less complicated. -// The result of inlnode MUST be assigned back to n, e.g. -// -// n.Left = inlnode(n.Left) -func inlnode(callerfn *ir.Func, n ir.Node, bigCaller bool, inlCalls *[]*ir.InlinedCallExpr, edit func(ir.Node) ir.Node, profile *pgo.Profile) ir.Node { - if n == nil { - return n - } - - switch n.Op() { - case ir.OTAILCALL: - n := n.(*ir.TailCallStmt) - n.Call.NoInline = true // Not inline a tail call for now. Maybe we could inline it just like RETURN fn(arg)? - case ir.OCALLFUNC: - n := n.(*ir.CallExpr) - if n.Fun.Op() == ir.OMETHEXPR { - // Prevent inlining some reflect.Value methods when using checkptr, - // even when package reflect was compiled without it (#35073). - if meth := ir.MethodExprName(n.Fun); meth != nil { - s := meth.Sym() - if base.Debug.Checkptr != 0 { - switch types.ReflectSymName(s) { - case "Value.UnsafeAddr", "Value.Pointer": - n.NoInline = true - } - } + // Prevent inlining some reflect.Value methods when using checkptr, + // even when package reflect was compiled without it (#35073). + if base.Debug.Checkptr != 0 && call.Fun.Op() == ir.OMETHEXPR { + if method := ir.MethodExprName(call.Fun); method != nil { + switch types.ReflectSymName(method.Sym()) { + case "Value.UnsafeAddr", "Value.Pointer": + return nil } } } - lno := ir.SetPos(n) - - ir.EditChildren(n, edit) - - // with all the branches out of the way, it is now time to - // transmogrify this node itself unless inhibited by the - // switch at the top of this function. - switch n.Op() { - case ir.OCALLFUNC: - call := n.(*ir.CallExpr) - if call.GoDefer || call.NoInline { - break - } - if base.Flag.LowerM > 3 { - fmt.Printf("%v:call to func %+v\n", ir.Line(n), call.Fun) - } - if ir.IsIntrinsicCall(call) { - break - } - if fn := inlCallee(callerfn, call.Fun, profile); fn != nil && typecheck.HaveInlineBody(fn) { - n = mkinlcall(callerfn, call, fn, bigCaller, inlCalls) - } + if base.Flag.LowerM > 3 { + fmt.Printf("%v:call to func %+v\n", ir.Line(call), call.Fun) } - - base.Pos = lno - - return n + if ir.IsIntrinsicCall(call) { + return nil + } + if fn := inlCallee(callerfn, call.Fun, profile); fn != nil && typecheck.HaveInlineBody(fn) { + return mkinlcall(callerfn, call, fn, bigCaller) + } + return nil } // inlCallee takes a function-typed expression and returns the underlying function ONAME @@ -1082,17 +991,16 @@ func canInlineCallExpr(callerfn *ir.Func, n *ir.CallExpr, callee *ir.Func, bigCa return true } -// If n is a OCALLFUNC node, and fn is an ONAME node for a -// function with an inlinable body, return an OINLCALL node that can replace n. -// The returned node's Ninit has the parameter assignments, the Nbody is the -// inlined function body, and (List, Rlist) contain the (input, output) -// parameters. +// mkinlcall returns an OINLCALL node that can replace OCALLFUNC n, or +// nil if it cannot be inlined. callerfn is the function that contains +// n, and fn is the function being called. +// // The result of mkinlcall MUST be assigned back to n, e.g. // // n.Left = mkinlcall(n.Left, fn, isddd) -func mkinlcall(callerfn *ir.Func, n *ir.CallExpr, fn *ir.Func, bigCaller bool, inlCalls *[]*ir.InlinedCallExpr) ir.Node { +func mkinlcall(callerfn *ir.Func, n *ir.CallExpr, fn *ir.Func, bigCaller bool) *ir.InlinedCallExpr { if !canInlineCallExpr(callerfn, n, fn, bigCaller, true) { - return n + return nil } typecheck.AssertFixedCall(n) @@ -1170,8 +1078,6 @@ func mkinlcall(callerfn *ir.Func, n *ir.CallExpr, fn *ir.Func, bigCaller bool, i inlheur.UpdateCallsiteTable(callerfn, n, res) } - *inlCalls = append(*inlCalls, res) - return res } @@ -1275,7 +1181,7 @@ func isAtomicCoverageCounterUpdate(cn *ir.CallExpr) bool { return v } -func postProcessCallSites(profile *pgo.Profile) { +func PostProcessCallSites(profile *pgo.Profile) { if base.Debug.DumpInlCallSiteScores != 0 { budgetCallback := func(fn *ir.Func, prof *pgo.Profile) (int32, bool) { v := inlineBudget(fn, prof, false, false) diff --git a/src/cmd/compile/internal/inline/interleaved/interleaved.go b/src/cmd/compile/internal/inline/interleaved/interleaved.go new file mode 100644 index 0000000000..a6f19d470d --- /dev/null +++ b/src/cmd/compile/internal/inline/interleaved/interleaved.go @@ -0,0 +1,132 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package interleaved implements the interleaved devirtualization and +// inlining pass. +package interleaved + +import ( + "cmd/compile/internal/base" + "cmd/compile/internal/devirtualize" + "cmd/compile/internal/inline" + "cmd/compile/internal/inline/inlheur" + "cmd/compile/internal/ir" + "cmd/compile/internal/pgo" + "cmd/compile/internal/typecheck" + "fmt" +) + +// DevirtualizeAndInlinePackage interleaves devirtualization and inlining on +// all functions within pkg. +func DevirtualizeAndInlinePackage(pkg *ir.Package, profile *pgo.Profile) { + if profile != nil && base.Debug.PGODevirtualize > 0 { + // TODO(mdempsky): Integrate into DevirtualizeAndInlineFunc below. + ir.VisitFuncsBottomUp(typecheck.Target.Funcs, func(list []*ir.Func, recursive bool) { + for _, fn := range list { + devirtualize.ProfileGuided(fn, profile) + } + }) + ir.CurFunc = nil + } + + if base.Flag.LowerL != 0 { + inlheur.SetupScoreAdjustments() + } + + var inlProfile *pgo.Profile // copy of profile for inlining + if base.Debug.PGOInline != 0 { + inlProfile = profile + } + if inlProfile != nil { + inline.PGOInlinePrologue(inlProfile, pkg.Funcs) + } + + ir.VisitFuncsBottomUp(pkg.Funcs, func(funcs []*ir.Func, recursive bool) { + // We visit functions within an SCC in fairly arbitrary order, + // so by computing inlinability for all functions in the SCC + // before performing any inlining, the results are less + // sensitive to the order within the SCC (see #58905 for an + // example). + + // First compute inlinability for all functions in the SCC ... + inline.CanInlineSCC(funcs, recursive, inlProfile) + + // ... then make a second pass to do devirtualization and inlining + // of calls. + for _, fn := range funcs { + DevirtualizeAndInlineFunc(fn, inlProfile) + } + }) + + if base.Flag.LowerL != 0 { + // Perform a garbage collection of hidden closures functions that + // are no longer reachable from top-level functions following + // inlining. See #59404 and #59638 for more context. + inline.GarbageCollectUnreferencedHiddenClosures() + + if base.Debug.DumpInlFuncProps != "" { + inlheur.DumpFuncProps(nil, base.Debug.DumpInlFuncProps) + } + if inlheur.Enabled() { + inline.PostProcessCallSites(inlProfile) + inlheur.TearDown() + } + } +} + +// DevirtualizeAndInlineFunc interleaves devirtualization and inlining +// on a single function. +func DevirtualizeAndInlineFunc(fn *ir.Func, profile *pgo.Profile) { + ir.WithFunc(fn, func() { + if base.Flag.LowerL != 0 { + if inlheur.Enabled() && !fn.Wrapper() { + inlheur.ScoreCalls(fn) + defer inlheur.ScoreCallsCleanup() + } + if base.Debug.DumpInlFuncProps != "" && !fn.Wrapper() { + inlheur.DumpFuncProps(fn, base.Debug.DumpInlFuncProps) + } + } + + bigCaller := base.Flag.LowerL != 0 && inline.IsBigFunc(fn) + if bigCaller && base.Flag.LowerM > 1 { + fmt.Printf("%v: function %v considered 'big'; reducing max cost of inlinees\n", ir.Line(fn), fn) + } + + // Walk fn's body and apply devirtualization and inlining. + var inlCalls []*ir.InlinedCallExpr + var edit func(ir.Node) ir.Node + edit = func(n ir.Node) ir.Node { + switch n := n.(type) { + case *ir.TailCallStmt: + n.Call.NoInline = true // can't inline yet + } + + ir.EditChildren(n, edit) + + if call, ok := n.(*ir.CallExpr); ok { + devirtualize.StaticCall(call) + + if inlCall := inline.TryInlineCall(fn, call, bigCaller, profile); inlCall != nil { + inlCalls = append(inlCalls, inlCall) + n = inlCall + } + } + + return n + } + ir.EditChildren(fn, edit) + + // If we inlined any calls, we want to recursively visit their + // bodies for further devirtualization and inlining. However, we + // need to wait until *after* the original function body has been + // expanded, or else inlCallee can have false positives (e.g., + // #54632). + for len(inlCalls) > 0 { + call := inlCalls[0] + inlCalls = inlCalls[1:] + ir.EditChildren(call, edit) + } + }) +} diff --git a/src/cmd/compile/internal/noder/reader.go b/src/cmd/compile/internal/noder/reader.go index c1145f980e..99e778fd70 100644 --- a/src/cmd/compile/internal/noder/reader.go +++ b/src/cmd/compile/internal/noder/reader.go @@ -15,6 +15,7 @@ import ( "cmd/compile/internal/base" "cmd/compile/internal/dwarfgen" "cmd/compile/internal/inline" + "cmd/compile/internal/inline/interleaved" "cmd/compile/internal/ir" "cmd/compile/internal/objw" "cmd/compile/internal/reflectdata" @@ -3794,7 +3795,7 @@ func finishWrapperFunc(fn *ir.Func, target *ir.Package) { // We generate wrappers after the global inlining pass, // so we're responsible for applying inlining ourselves here. // TODO(prattmic): plumb PGO. - inline.InlineCalls(fn, nil) + interleaved.DevirtualizeAndInlineFunc(fn, nil) // The body of wrapper function after inlining may reveal new ir.OMETHVALUE node, // we don't know whether wrapper function has been generated for it or not, so diff --git a/src/cmd/compile/internal/noder/unified.go b/src/cmd/compile/internal/noder/unified.go index a803e53502..d2ca1f37a9 100644 --- a/src/cmd/compile/internal/noder/unified.go +++ b/src/cmd/compile/internal/noder/unified.go @@ -280,7 +280,7 @@ func readBodies(target *ir.Package, duringInlining bool) { oldLowerM := base.Flag.LowerM base.Flag.LowerM = 0 - inline.InlineDecls(nil, inlDecls, false) + inline.CanInlineFuncs(inlDecls, nil) base.Flag.LowerM = oldLowerM for _, fn := range inlDecls { diff --git a/test/fixedbugs/issue42284.dir/a.go b/test/fixedbugs/issue42284.dir/a.go index f7fd80bd20..ccf54fad54 100644 --- a/test/fixedbugs/issue42284.dir/a.go +++ b/test/fixedbugs/issue42284.dir/a.go @@ -20,7 +20,7 @@ func F(i I) I { // ERROR "can inline F" "leaking param: i to result ~r0 level=0" func g() { h := E() // ERROR "inlining call to E" "T\(0\) does not escape" - h.M() // ERROR "devirtualizing h.M to T" + h.M() // ERROR "devirtualizing h.M to T" "inlining call to T.M" // BAD: T(0) could be stack allocated. i := F(T(0)) // ERROR "inlining call to F" "T\(0\) escapes to heap" diff --git a/test/fixedbugs/issue42284.dir/b.go b/test/fixedbugs/issue42284.dir/b.go index 8cd93b8db4..559de59184 100644 --- a/test/fixedbugs/issue42284.dir/b.go +++ b/test/fixedbugs/issue42284.dir/b.go @@ -8,7 +8,7 @@ import "./a" func g() { h := a.E() // ERROR "inlining call to a.E" "T\(0\) does not escape" - h.M() // ERROR "devirtualizing h.M to a.T" + h.M() // ERROR "devirtualizing h.M to a.T" "inlining call to a.T.M" // BAD: T(0) could be stack allocated. i := a.F(a.T(0)) // ERROR "inlining call to a.F" "a.T\(0\) escapes to heap" diff --git a/test/fixedbugs/issue52193.go b/test/fixedbugs/issue52193.go new file mode 100644 index 0000000000..40e6dcb33b --- /dev/null +++ b/test/fixedbugs/issue52193.go @@ -0,0 +1,46 @@ +// errorcheck -0 -m + +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package p + +import ( + "crypto/ecdh" + "crypto/rand" +) + +func F(peerShare []byte) ([]byte, error) { // ERROR "leaking param: peerShare" + p256 := ecdh.P256() // ERROR "inlining call to ecdh.P256" + + ourKey, err := p256.GenerateKey(rand.Reader) // ERROR "devirtualizing p256.GenerateKey" "inlining call to ecdh.*GenerateKey" + if err != nil { + return nil, err + } + + peerPublic, err := p256.NewPublicKey(peerShare) // ERROR "devirtualizing p256.NewPublicKey" "inlining call to ecdh.*NewPublicKey" + if err != nil { + return nil, err + } + + return ourKey.ECDH(peerPublic) +} + +// Test that inlining doesn't break if devirtualization exposes a new +// inlinable callee. + +func f() { // ERROR "can inline f" + var i interface{ m() } = T(0) // ERROR "T\(0\) does not escape" + i.m() // ERROR "devirtualizing i.m" +} + +type T int + +func (T) m() { // ERROR "can inline T.m" + if never { + f() // ERROR "inlining call to f" "devirtualizing i.m" "T\(0\) does not escape" + } +} + +var never bool From 82fc03f9c9a1e3539d60ce085500dde3af5ff0b7 Mon Sep 17 00:00:00 2001 From: Michael Knyszek Date: Mon, 20 Nov 2023 18:02:20 +0000 Subject: [PATCH 014/313] Revert "math/rand/v2: add ChaCha8" This reverts commit 6382893890b82bbc0439eade5b132d9d1b3fb3a7. Reason for revert: Causes failures on big endian platforms and riscv64. Possibly a bug in the generic implementation. For #64284. For #64285. Change-Id: Ic1bb8533d9641fae28d0337b36d434b9a575cd7e Reviewed-on: https://go-review.googlesource.com/c/go/+/543895 Reviewed-by: Heschi Kreinick Auto-Submit: Michael Knyszek TryBot-Bypass: Michael Knyszek --- api/next/61716.txt | 6 - src/go/build/deps_test.go | 13 +- src/internal/chacha8rand/chacha8.go | 175 ------- src/internal/chacha8rand/chacha8_amd64.s | 177 ------- src/internal/chacha8rand/chacha8_arm64.s | 106 ---- src/internal/chacha8rand/chacha8_generic.go | 222 -------- src/internal/chacha8rand/chacha8_stub.s | 12 - src/internal/chacha8rand/export_test.go | 8 - src/internal/chacha8rand/rand_test.go | 186 ------- src/math/rand/v2/chacha8.go | 46 -- src/math/rand/v2/chacha8_test.go | 531 -------------------- 11 files changed, 3 insertions(+), 1479 deletions(-) delete mode 100644 src/internal/chacha8rand/chacha8.go delete mode 100644 src/internal/chacha8rand/chacha8_amd64.s delete mode 100644 src/internal/chacha8rand/chacha8_arm64.s delete mode 100644 src/internal/chacha8rand/chacha8_generic.go delete mode 100644 src/internal/chacha8rand/chacha8_stub.s delete mode 100644 src/internal/chacha8rand/export_test.go delete mode 100644 src/internal/chacha8rand/rand_test.go delete mode 100644 src/math/rand/v2/chacha8.go delete mode 100644 src/math/rand/v2/chacha8_test.go diff --git a/api/next/61716.txt b/api/next/61716.txt index 30036799e6..05b9bb8429 100644 --- a/api/next/61716.txt +++ b/api/next/61716.txt @@ -9,7 +9,6 @@ pkg math/rand/v2, func Int64N(int64) int64 #61716 pkg math/rand/v2, func IntN(int) int #61716 pkg math/rand/v2, func N[$0 intType]($0) $0 #61716 pkg math/rand/v2, func New(Source) *Rand #61716 -pkg math/rand/v2, func NewChaCha8([32]uint8) *ChaCha8 #61716 pkg math/rand/v2, func NewPCG(uint64, uint64) *PCG #61716 pkg math/rand/v2, func NewZipf(*Rand, float64, float64, uint64) *Zipf #61716 pkg math/rand/v2, func NormFloat64() float64 #61716 @@ -20,10 +19,6 @@ pkg math/rand/v2, func Uint32N(uint32) uint32 #61716 pkg math/rand/v2, func Uint64() uint64 #61716 pkg math/rand/v2, func Uint64N(uint64) uint64 #61716 pkg math/rand/v2, func UintN(uint) uint #61716 -pkg math/rand/v2, method (*ChaCha8) MarshalBinary() ([]uint8, error) #61716 -pkg math/rand/v2, method (*ChaCha8) Seed([32]uint8) #61716 -pkg math/rand/v2, method (*ChaCha8) Uint64() uint64 #61716 -pkg math/rand/v2, method (*ChaCha8) UnmarshalBinary([]uint8) error #61716 pkg math/rand/v2, method (*PCG) MarshalBinary() ([]uint8, error) #61716 pkg math/rand/v2, method (*PCG) Seed(uint64, uint64) #61716 pkg math/rand/v2, method (*PCG) Uint64() uint64 #61716 @@ -46,7 +41,6 @@ pkg math/rand/v2, method (*Rand) Uint64() uint64 #61716 pkg math/rand/v2, method (*Rand) Uint64N(uint64) uint64 #61716 pkg math/rand/v2, method (*Rand) UintN(uint) uint #61716 pkg math/rand/v2, method (*Zipf) Uint64() uint64 #61716 -pkg math/rand/v2, type ChaCha8 struct #61716 pkg math/rand/v2, type PCG struct #61716 pkg math/rand/v2, type Rand struct #61716 pkg math/rand/v2, type Source interface { Uint64 } #61716 diff --git a/src/go/build/deps_test.go b/src/go/build/deps_test.go index e3863eea46..3d54fc7aac 100644 --- a/src/go/build/deps_test.go +++ b/src/go/build/deps_test.go @@ -55,17 +55,10 @@ var depsRules = ` unsafe < maps; - unsafe < internal/chacha8rand; - # RUNTIME is the core runtime group of packages, all of them very light-weight. - internal/abi, - internal/chacha8rand, - internal/coverage/rtcov, - internal/cpu, - internal/goarch, - internal/godebugs, - internal/goexperiment, - internal/goos + internal/abi, internal/cpu, internal/goarch, + internal/coverage/rtcov, internal/godebugs, internal/goexperiment, + internal/goos, unsafe < internal/bytealg < internal/itoa < internal/unsafeheader diff --git a/src/internal/chacha8rand/chacha8.go b/src/internal/chacha8rand/chacha8.go deleted file mode 100644 index 196e3ca3dc..0000000000 --- a/src/internal/chacha8rand/chacha8.go +++ /dev/null @@ -1,175 +0,0 @@ -// Copyright 2023 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package chacha8rand implements a pseudorandom generator -// based on ChaCha8. It is used by both runtime and math/rand/v2 -// and must have no dependencies. -package chacha8rand - -import "unsafe" - -const ( - ctrInc = 4 // increment counter by 4 between block calls - ctrMax = 16 // reseed when counter reaches 16 - chunk = 32 // each chunk produced by block is 32 uint64s - reseed = 4 // reseed with 4 words -) - -// block is the chacha8rand block function. -func block(seed *[4]uint64, blocks *[32]uint64, counter uint32) - -// A State holds the state for a single random generator. -// It must be used from one goroutine at a time. -// If used by multiple goroutines at a time, the goroutines -// may see the same random values, but the code will not -// crash or cause out-of-bounds memory accesses. -type State struct { - buf [32]uint64 - seed [4]uint64 - i uint32 - n uint32 - c uint32 -} - -// Next returns the next random value, along with a boolean -// indicating whether one was available. -// If one is not available, the caller should call Refill -// and then repeat the call to Next. -// -// Next is //go:nosplit to allow its use in the runtime -// with per-m data without holding the per-m lock. -//go:nosplit -func (s *State) Next() (uint64, bool) { - i := s.i - if i >= s.n { - return 0, false - } - s.i = i + 1 - return s.buf[i&31], true // i&31 eliminates bounds check -} - -// Init seeds the State with the given seed value. -func (s *State) Init(seed [32]byte) { - s.Init64(*(*[4]uint64)(unsafe.Pointer(&seed))) -} - -// Init64 seeds the state with the given seed value. -func (s *State) Init64(seed [4]uint64) { - s.seed = seed - block(&s.seed, &s.buf, 0) - s.c = 0 - s.i = 0 - s.n = chunk -} - -// Refill refills the state with more random values. -// After a call to Refill, an immediate call to Next will succeed -// (unless multiple goroutines are incorrectly sharing a state). -func (s *State) Refill() { - s.c += ctrInc - if s.c == ctrMax { - // Reseed with generated uint64s for forward secrecy. - // Normally this is done immediately after computing a block, - // but we do it immediately before computing the next block, - // to allow a much smaller serialized state (just the seed plus offset). - // This gives a delayed benefit for the forward secrecy - // (you can reconstruct the recent past given a memory dump), - // which we deem acceptable in exchange for the reduced size. - s.seed[0] = s.buf[len(s.buf)-reseed+0] - s.seed[1] = s.buf[len(s.buf)-reseed+1] - s.seed[2] = s.buf[len(s.buf)-reseed+2] - s.seed[3] = s.buf[len(s.buf)-reseed+3] - s.c = 0 - } - block(&s.seed, &s.buf, s.c) - s.i = 0 - s.n = uint32(len(s.buf)) - if s.c == ctrMax-ctrInc { - s.n = uint32(len(s.buf)) - reseed - } -} - -// Marshal marshals the state into a byte slice. -// Marshal and Unmarshal are functions, not methods, -// so that they will not be linked into the runtime -// when it uses the State struct, since the runtime -// does not need these. -func Marshal(s *State) []byte { - data := make([]byte, 6*8) - copy(data, "chacha8:") - used := (s.c/ctrInc)*chunk + s.i - bePutUint64(data[1*8:], uint64(used)) - for i, seed := range s.seed { - lePutUint64(data[(2+i)*8:], seed) - } - return data -} - -type errUnmarshalChaCha8 struct{} - -func (*errUnmarshalChaCha8) Error() string { - return "invalid ChaCha8 encoding" -} - -// Unmarshal unmarshals the state from a byte slice. -func Unmarshal(s *State, data []byte) error { - if len(data) != 6*8 || string(data[:8]) != "chacha8:" { - return new(errUnmarshalChaCha8) - } - used := beUint64(data[1*8:]) - if used > (ctrMax/ctrInc)*chunk-reseed { - return new(errUnmarshalChaCha8) - } - for i := range s.seed { - s.seed[i] = leUint64(data[(2+i)*8:]) - } - s.c = ctrInc * (uint32(used) / chunk) - block(&s.seed, &s.buf, s.c) - s.i = uint32(used) % chunk - s.n = chunk - if s.c == ctrMax-ctrInc { - s.n = chunk - reseed - } - return nil -} - -// binary.bigEndian.Uint64, copied to avoid dependency -func beUint64(b []byte) uint64 { - _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 - return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 | - uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56 -} - -// binary.bigEndian.PutUint64, copied to avoid dependency -func bePutUint64(b []byte, v uint64) { - _ = b[7] // early bounds check to guarantee safety of writes below - b[0] = byte(v >> 56) - b[1] = byte(v >> 48) - b[2] = byte(v >> 40) - b[3] = byte(v >> 32) - b[4] = byte(v >> 24) - b[5] = byte(v >> 16) - b[6] = byte(v >> 8) - b[7] = byte(v) -} - -// binary.littleEndian.Uint64, copied to avoid dependency -func leUint64(b []byte) uint64 { - _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 - return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | - uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 -} - -// binary.littleEndian.PutUint64, copied to avoid dependency -func lePutUint64(b []byte, v uint64) { - _ = b[7] // early bounds check to guarantee safety of writes below - b[0] = byte(v) - b[1] = byte(v >> 8) - b[2] = byte(v >> 16) - b[3] = byte(v >> 24) - b[4] = byte(v >> 32) - b[5] = byte(v >> 40) - b[6] = byte(v >> 48) - b[7] = byte(v >> 56) -} diff --git a/src/internal/chacha8rand/chacha8_amd64.s b/src/internal/chacha8rand/chacha8_amd64.s deleted file mode 100644 index cadd516c09..0000000000 --- a/src/internal/chacha8rand/chacha8_amd64.s +++ /dev/null @@ -1,177 +0,0 @@ -// Copyright 2023 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -#include "textflag.h" - -// ChaCha8 is ChaCha with 8 rounds. -// See https://cr.yp.to/chacha/chacha-20080128.pdf. -// See chacha8_generic.go for additional details. - -// ROL rotates the uint32s in register R left by N bits, using temporary T. -#define ROL(N, R, T) \ - MOVO R, T; PSLLL $(N), T; PSRLL $(32-(N)), R; PXOR T, R - -// ROL16 rotates the uint32s in register R left by 16, using temporary T if needed. -#ifdef GOAMD64_v2 -#define ROL16(R, T) PSHUFB ·rol16<>(SB), R -#else -#define ROL16(R, T) ROL(16, R, T) -#endif - -// ROL8 rotates the uint32s in register R left by 8, using temporary T if needed. -#ifdef GOAMD64_v2 -#define ROL8(R, T) PSHUFB ·rol8<>(SB), R -#else -#define ROL8(R, T) ROL(8, R, T) -#endif - -// QR is the ChaCha quarter-round on A, B, C, and D. T is an available temporary. -#define QR(A, B, C, D, T) \ - PADDD B, A; PXOR A, D; ROL16(D, T); \ - PADDD D, C; PXOR C, B; MOVO B, T; PSLLL $12, T; PSRLL $20, B; PXOR T, B; \ - PADDD B, A; PXOR A, D; ROL8(D, T); \ - PADDD D, C; PXOR C, B; MOVO B, T; PSLLL $7, T; PSRLL $25, B; PXOR T, B - -// REPLREG replicates the register R into 4 uint32s in XR. -#define REPLREG(R, XR) \ - MOVQ R, XR; \ - PSHUFD $0, XR, XR - -// REPL replicates the uint32 constant val into 4 uint32s in XR. It smashes DX. -#define REPL(val, XR) \ - MOVL $val, DX; \ - REPLREG(DX, XR) - -// SEED copies the off'th uint32 of the seed into the register XR, -// replicating it into all four stripes of the register. -#define SEED(off, reg, XR) \ - MOVL (4*off)(AX), reg; \ - REPLREG(reg, XR) \ - -// block runs 4 ChaCha8 block transformations in the four stripes of the X registers. - -// func block(seed *[8]uint32, blocks *[16][4]uint32, counter uint32) -TEXT ·block(SB), NOSPLIT, $16 - // seed in AX - // blocks in BX - // counter in CX - MOVQ seed+0(FP), AX - MOVQ blocks+8(FP), BX - MOVL counter+16(FP), CX - - // Load initial constants into top row. - REPL(0x61707865, X0) - REPL(0x3320646e, X1) - REPL(0x79622d32, X2) - REPL(0x6b206574, X3) - - // Load counter into bottom left cell. - // Each stripe gets a different counter: 0, 1, 2, 3. - // (PINSRD is not available in GOAMD64_v1, - // so just do it in memory on all systems. - // This is not on the critical path.) - MOVL CX, 0(SP) - INCL CX - MOVL CX, 4(SP) - INCL CX - MOVL CX, 8(SP) - INCL CX - MOVL CX, 12(SP) - MOVOU 0(SP), X12 - - // Load seed words into next two rows and into DI, SI, R8..R13 - SEED(0, DI, X4) - SEED(1, SI, X5) - SEED(2, R8, X6) - SEED(3, R9, X7) - SEED(4, R10, X8) - SEED(5, R11, X9) - SEED(6, R12, X10) - SEED(7, R13, X11) - - // Zeros for remaining two matrix entries. - // We have just enough XMM registers to hold the state, - // without one for the temporary, so we flush and restore - // some values to and from memory to provide a temporary. - // The initial temporary is X15, so zero its memory instead - // of X15 itself. - MOVL $0, DX - MOVQ DX, X13 - MOVQ DX, X14 - MOVOU X14, (15*16)(BX) - - // 4 iterations. Each iteration is 8 quarter-rounds. - MOVL $4, DX -loop: - QR(X0, X4, X8, X12, X15) - MOVOU X4, (4*16)(BX) // save X4 - QR(X1, X5, X9, X13, X15) - MOVOU (15*16)(BX), X15 // reload X15; temp now X4 - QR(X2, X6, X10, X14, X4) - QR(X3, X7, X11, X15, X4) - - QR(X0, X5, X10, X15, X4) - MOVOU X15, (15*16)(BX) // save X15 - QR(X1, X6, X11, X12, X4) - MOVOU (4*16)(BX), X4 // reload X4; temp now X15 - QR(X2, X7, X8, X13, X15) - QR(X3, X4, X9, X14, X15) - - DECL DX - JNZ loop - - // Store interlaced blocks back to output buffer, - // adding original seed along the way. - - // First the top and bottom rows. - MOVOU X0, (0*16)(BX) - MOVOU X1, (1*16)(BX) - MOVOU X2, (2*16)(BX) - MOVOU X3, (3*16)(BX) - MOVOU X12, (12*16)(BX) - MOVOU X13, (13*16)(BX) - MOVOU X14, (14*16)(BX) - // X15 has already been stored. - - // Now we have X0-X3, X12-X15 available for temporaries. - // Add seed rows back to output. We left seed in DI, SI, R8..R13 above. - REPLREG(DI, X0) - REPLREG(SI, X1) - REPLREG(R8, X2) - REPLREG(R9, X3) - REPLREG(R10, X12) - REPLREG(R11, X13) - REPLREG(R12, X14) - REPLREG(R13, X15) - PADDD X0, X4 - PADDD X1, X5 - PADDD X2, X6 - PADDD X3, X7 - PADDD X12, X8 - PADDD X13, X9 - PADDD X14, X10 - PADDD X15, X11 - MOVOU X4, (4*16)(BX) - MOVOU X5, (5*16)(BX) - MOVOU X6, (6*16)(BX) - MOVOU X7, (7*16)(BX) - MOVOU X8, (8*16)(BX) - MOVOU X9, (9*16)(BX) - MOVOU X10, (10*16)(BX) - MOVOU X11, (11*16)(BX) - - MOVL $0, AX - MOVQ AX, X15 // must be 0 on return - - RET - -// rotate left 16 indexes for PSHUFB -GLOBL ·rol16<>(SB), NOPTR|RODATA, $16 -DATA ·rol16<>+0(SB)/8, $0x0504070601000302 -DATA ·rol16<>+8(SB)/8, $0x0D0C0F0E09080B0A - -// rotate left 8 indexes for PSHUFB -GLOBL ·rol8<>(SB), NOPTR|RODATA, $16 -DATA ·rol8<>+0(SB)/8, $0x0605040702010003 -DATA ·rol8<>+8(SB)/8, $0x0E0D0C0F0A09080B diff --git a/src/internal/chacha8rand/chacha8_arm64.s b/src/internal/chacha8rand/chacha8_arm64.s deleted file mode 100644 index 4f36a7021c..0000000000 --- a/src/internal/chacha8rand/chacha8_arm64.s +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright 2023 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -#include "textflag.h" - -// QR is the ChaCha quarter-round on A, B, C, and D. -// V30 is used as a temporary, and V31 is assumed to -// hold the index table for rotate left 8. -#define QR(A, B, C, D) \ - VADD A.S4, B.S4, A.S4; VEOR D.B16, A.B16, D.B16; VREV32 D.H8, D.H8; \ - VADD C.S4, D.S4, C.S4; VEOR B.B16, C.B16, V30.B16; VSHL $12, V30.S4, B.S4; VSRI $20, V30.S4, B.S4 \ - VADD A.S4, B.S4, A.S4; VEOR D.B16, A.B16, D.B16; VTBL V31.B16, [D.B16], D.B16; \ - VADD C.S4, D.S4, C.S4; VEOR B.B16, C.B16, V30.B16; VSHL $7, V30.S4, B.S4; VSRI $25, V30.S4, B.S4 - -// block runs 4 ChaCha8 block transformations in the four stripes of the V registers. - -// func block(seed *[8]uint32, blocks *[4][16]uint32, counter uint32) -TEXT ·block(SB), NOSPLIT, $16 - // seed in R0 - // blocks in R1 - MOVD seed+0(FP), R0 - MOVD blocks+8(FP), R1 - MOVW counter+16(FP), R2 - - // Load initial constants into top row. - MOVD $·chachaConst(SB), R10 - VLD4R (R10), [V0.S4, V1.S4, V2.S4, V3.S4] - - // Load increment and rotate 8 constants into V30, V31. - MOVD $·chachaIncRot(SB), R11 - VLD1 (R11), [V30.S4, V31.S4] - - VLD4R.P 16(R0), [V4.S4, V5.S4, V6.S4, V7.S4] - VLD4R.P 16(R0), [V8.S4, V9.S4, V10.S4, V11.S4] - - // store counter to memory to replicate its uint32 halfs back out - MOVW R2, 0(RSP) - VLD1R 0(RSP), [V12.S4] - - // Add 0, 1, 2, 3 to counter stripes. - VADD V30.S4, V12.S4, V12.S4 - - // Zeros for remaining two matrix entries. - VEOR V13.B16, V13.B16, V13.B16 - VEOR V14.B16, V14.B16, V14.B16 - VEOR V15.B16, V15.B16, V15.B16 - - // Save seed state for adding back later. - VMOV V4.B16, V20.B16 - VMOV V5.B16, V21.B16 - VMOV V6.B16, V22.B16 - VMOV V7.B16, V23.B16 - VMOV V8.B16, V24.B16 - VMOV V9.B16, V25.B16 - VMOV V10.B16, V26.B16 - VMOV V11.B16, V27.B16 - - // 4 iterations. Each iteration is 8 quarter-rounds. - MOVD $4, R0 -loop: - QR(V0, V4, V8, V12) - QR(V1, V5, V9, V13) - QR(V2, V6, V10, V14) - QR(V3, V7, V11, V15) - - QR(V0, V5, V10, V15) - QR(V1, V6, V11, V12) - QR(V2, V7, V8, V13) - QR(V3, V4, V9, V14) - - SUB $1, R0 - CBNZ R0, loop - - // Add seed back. - VADD V4.S4, V20.S4, V4.S4 - VADD V5.S4, V21.S4, V5.S4 - VADD V6.S4, V22.S4, V6.S4 - VADD V7.S4, V23.S4, V7.S4 - VADD V8.S4, V24.S4, V8.S4 - VADD V9.S4, V25.S4, V9.S4 - VADD V10.S4, V26.S4, V10.S4 - VADD V11.S4, V27.S4, V11.S4 - - // Store interlaced blocks back to output buffer. - VST1.P [ V0.B16, V1.B16, V2.B16, V3.B16], 64(R1) - VST1.P [ V4.B16, V5.B16, V6.B16, V7.B16], 64(R1) - VST1.P [ V8.B16, V9.B16, V10.B16, V11.B16], 64(R1) - VST1.P [V12.B16, V13.B16, V14.B16, V15.B16], 64(R1) - RET - -GLOBL ·chachaConst(SB), NOPTR|RODATA, $32 -DATA ·chachaConst+0x00(SB)/4, $0x61707865 -DATA ·chachaConst+0x04(SB)/4, $0x3320646e -DATA ·chachaConst+0x08(SB)/4, $0x79622d32 -DATA ·chachaConst+0x0c(SB)/4, $0x6b206574 - -GLOBL ·chachaIncRot(SB), NOPTR|RODATA, $32 -DATA ·chachaIncRot+0x00(SB)/4, $0x00000000 -DATA ·chachaIncRot+0x04(SB)/4, $0x00000001 -DATA ·chachaIncRot+0x08(SB)/4, $0x00000002 -DATA ·chachaIncRot+0x0c(SB)/4, $0x00000003 -DATA ·chachaIncRot+0x10(SB)/4, $0x02010003 -DATA ·chachaIncRot+0x14(SB)/4, $0x06050407 -DATA ·chachaIncRot+0x18(SB)/4, $0x0A09080B -DATA ·chachaIncRot+0x1c(SB)/4, $0x0E0D0C0F diff --git a/src/internal/chacha8rand/chacha8_generic.go b/src/internal/chacha8rand/chacha8_generic.go deleted file mode 100644 index 4e99111850..0000000000 --- a/src/internal/chacha8rand/chacha8_generic.go +++ /dev/null @@ -1,222 +0,0 @@ -// Copyright 2023 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// ChaCha8 is ChaCha with 8 rounds. -// See https://cr.yp.to/chacha/chacha-20080128.pdf. -// -// ChaCha8 operates on a 4x4 matrix of uint32 values, initially set to: -// -// const1 const2 const3 const4 -// seed seed seed seed -// seed seed seed seed -// counter64 0 0 -// -// We use the same constants as ChaCha20 does, a random seed, -// and a counter. Running ChaCha8 on this input produces -// a 4x4 matrix of pseudo-random values with as much entropy -// as the seed. -// -// Given SIMD registers that can hold N uint32s, it is possible -// to run N ChaCha8 block transformations in parallel by filling -// the first register with the N copies of const1, the second -// with N copies of const2, and so on, and then running the operations. -// -// Each iteration of ChaCha8Rand operates over 32 bytes of input and -// produces 992 bytes of RNG output, plus 32 bytes of input for the next -// iteration. -// -// The 32 bytes of input are used as a ChaCha8 key, with a zero nonce, to -// produce 1024 bytes of output (16 blocks, with counters 0 to 15). -// First, for each block, the values 0x61707865, 0x3320646e, 0x79622d32, -// 0x6b206574 are subtracted from the 32-bit little-endian words at -// position 0, 1, 2, and 3 respectively, and an increasing counter -// starting at zero is subtracted from each word at position 12. Then, -// this stream is permuted such that for each sequence of four blocks, -// first we output the first four bytes of each block, then the next four -// bytes of each block, and so on. Finally, the last 32 bytes of output -// are used as the input of the next iteration, and the remaining 992 -// bytes are the RNG output. -// -// See https://github.com/C2SP/C2SP/blob/main/chacha8rand/chacha8rand.md -// for additional details. -// -// Normal ChaCha20 implementations for encryption use this same -// parallelism but then have to deinterlace the results so that -// it appears the blocks were generated separately. For the purposes -// of generating random numbers, the interlacing is fine. -// We are simply locked in to preserving the 4-way interlacing -// in any future optimizations. -package chacha8rand - -import ( - "unsafe" -) - -// setup sets up 4 ChaCha8 blocks in b32 with the counter and seed. -// Note that b32 is [16][4]uint32 not [4][16]uint32: the blocks are interlaced -// the same way they would be in a 4-way SIMD implementations. -func setup(seed *[8]uint32, b32 *[16][4]uint32, counter uint32) { - // Convert to uint64 to do half as many stores to memory. - b := (*[16][2]uint64)(unsafe.Pointer(b32)) - - // Constants; same as in ChaCha20: "expand 32-byte k" - b[0][0] = 0x61707865_61707865 - b[0][1] = 0x61707865_61707865 - - b[1][0] = 0x3320646e_3320646e - b[1][1] = 0x3320646e_3320646e - - b[2][0] = 0x79622d32_79622d32 - b[2][1] = 0x79622d32_79622d32 - - b[3][0] = 0x6b206574_6b206574 - b[3][1] = 0x6b206574_6b206574 - - // Seed values. - var x64 uint64 - var x uint32 - - x = seed[0] - x64 = uint64(x)<<32 | uint64(x) - b[4][0] = x64 - b[4][1] = x64 - - x = seed[1] - x64 = uint64(x)<<32 | uint64(x) - b[5][0] = x64 - b[5][1] = x64 - - x = seed[2] - x64 = uint64(x)<<32 | uint64(x) - b[6][0] = x64 - b[6][1] = x64 - - x = seed[3] - x64 = uint64(x)<<32 | uint64(x) - b[7][0] = x64 - b[7][1] = x64 - - x = seed[4] - x64 = uint64(x)<<32 | uint64(x) - b[8][0] = x64 - b[8][1] = x64 - - x = seed[5] - x64 = uint64(x)<<32 | uint64(x) - b[9][0] = x64 - b[9][1] = x64 - - x = seed[6] - x64 = uint64(x)<<32 | uint64(x) - b[10][0] = x64 - b[10][1] = x64 - - x = seed[7] - x64 = uint64(x)<<32 | uint64(x) - b[11][0] = x64 - b[11][1] = x64 - - // Counters. - b[12][0] = uint64(counter+0) | uint64(counter+1)<<32 - b[12][1] = uint64(counter+2) | uint64(counter+3)<<32 - - // Zeros. - b[13][0] = 0 - b[13][1] = 0 - b[14][0] = 0 - b[14][1] = 0 - - b[15][0] = 0 - b[15][1] = 0 -} - -func _() { - // block and block_generic must have same type - x := block - x = block_generic - _ = x -} - -// block_generic is the non-assembly block implementation, -// for use on systems without special assembly. -// Even on such systems, it is quite fast: on GOOS=386, -// ChaCha8 using this code generates random values faster than PCG-DXSM. -func block_generic(seedW *[4]uint64, buf *[32]uint64, counter uint32) { - seed := (*[8]uint32)(unsafe.Pointer(seedW)) - b := (*[16][4]uint32)(unsafe.Pointer(buf)) - - setup(seed, b, counter) - - for i := range b[0] { - // Load block i from b[*][i] into local variables. - b0 := b[0][i] - b1 := b[1][i] - b2 := b[2][i] - b3 := b[3][i] - b4 := b[4][i] - b5 := b[5][i] - b6 := b[6][i] - b7 := b[7][i] - b8 := b[8][i] - b9 := b[9][i] - b10 := b[10][i] - b11 := b[11][i] - b12 := b[12][i] - b13 := b[13][i] - b14 := b[14][i] - b15 := b[15][i] - - // 4 iterations of eight quarter-rounds each is 8 rounds - for round := 0; round < 4; round++ { - b0, b4, b8, b12 = qr(b0, b4, b8, b12) - b1, b5, b9, b13 = qr(b1, b5, b9, b13) - b2, b6, b10, b14 = qr(b2, b6, b10, b14) - b3, b7, b11, b15 = qr(b3, b7, b11, b15) - - b0, b5, b10, b15 = qr(b0, b5, b10, b15) - b1, b6, b11, b12 = qr(b1, b6, b11, b12) - b2, b7, b8, b13 = qr(b2, b7, b8, b13) - b3, b4, b9, b14 = qr(b3, b4, b9, b14) - } - - // Store block i back into b[*][i]. - // Add b4..b11 back to the original key material, - // like in ChaCha20, to avoid trivial invertibility. - // There is no entropy in b0..b3 and b12..b15 - // so we can skip the additions and save some time. - b[0][i] = b0 - b[1][i] = b1 - b[2][i] = b2 - b[3][i] = b3 - b[4][i] += b4 - b[5][i] += b5 - b[6][i] += b6 - b[7][i] += b7 - b[8][i] += b8 - b[9][i] += b9 - b[10][i] += b10 - b[11][i] += b11 - b[12][i] = b12 - b[13][i] = b13 - b[14][i] = b14 - b[15][i] = b15 - } -} - -// qr is the (inlinable) ChaCha8 quarter round. -func qr(a, b, c, d uint32) (_a, _b, _c, _d uint32) { - a += b - d ^= a - d = d<<16 | d>>16 - c += d - b ^= c - b = b<<12 | b>>20 - a += b - d ^= a - d = d<<8 | d>>24 - c += d - b ^= c - b = b<<7 | b>>25 - return a, b, c, d -} diff --git a/src/internal/chacha8rand/chacha8_stub.s b/src/internal/chacha8rand/chacha8_stub.s deleted file mode 100644 index 09be558fcb..0000000000 --- a/src/internal/chacha8rand/chacha8_stub.s +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2023 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !amd64 && !arm64 - -#include "textflag.h" - -// func block(counter uint64, seed *[8]uint32, blocks *[16][4]uint32) -TEXT ·block(SB), NOSPLIT, $0 - JMP ·block_generic(SB) - diff --git a/src/internal/chacha8rand/export_test.go b/src/internal/chacha8rand/export_test.go deleted file mode 100644 index 70478a45c3..0000000000 --- a/src/internal/chacha8rand/export_test.go +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright 2023 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package chacha8rand - -var Block = block -var Block_generic = block_generic diff --git a/src/internal/chacha8rand/rand_test.go b/src/internal/chacha8rand/rand_test.go deleted file mode 100644 index 0a6c876b47..0000000000 --- a/src/internal/chacha8rand/rand_test.go +++ /dev/null @@ -1,186 +0,0 @@ -// Copyright 2023 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package chacha8rand_test - -import ( - "bytes" - "fmt" - . "internal/chacha8rand" - "slices" - "testing" - "unsafe" -) - -func TestOutput(t *testing.T) { - var s State - s.Init(seed) - for i := range output { - for { - x, ok := s.Next() - if ok { - if x != output[i] { - t.Errorf("#%d: have %#x want %#x", i, x, output[i]) - } - break - } - s.Refill() - } - } -} - -func TestMarshal(t *testing.T) { - var s State - s.Init(seed) - for i := range output { - for { - b := Marshal(&s) - s = State{} - err := Unmarshal(&s, b) - if err != nil { - t.Fatalf("#%d: Unmarshal: %v", i, err) - } - x, ok := s.Next() - if ok { - if x != output[i] { - t.Fatalf("#%d: have %#x want %#x", i, x, output[i]) - } - break - } - s.Refill() - } - } -} - -func BenchmarkBlock(b *testing.B) { - var seed [4]uint64 - var blocks [32]uint64 - - for i := 0; i < b.N; i++ { - Block(&seed, &blocks, 0) - } - b.SetBytes(32 * 8) -} - -func TestBlockGeneric(t *testing.T) { - var b1, b2 [32]uint64 - seed := *(*[4]uint64)(unsafe.Pointer(&seed)) - - Block(&seed, &b1, 4) - Block_generic(&seed, &b2, 4) - if !slices.Equal(b1[:], b2[:]) { - var out bytes.Buffer - fmt.Fprintf(&out, "%-18s %-18s\n", "block", "block_generic") - for i := range b1 { - suffix := "" - if b1[i] != b2[i] { - suffix = " mismatch!" - } - fmt.Fprintf(&out, "%#016x %#016x%s\n", b1[i], b2[i], suffix) - } - t.Errorf("block and block_generic disagree:\n%s", out.String()) - } -} - -// Golden output test to make sure algorithm never changes, -// so that its use in math/rand/v2 stays stable. -// See https://github.com/C2SP/C2SP/blob/main/chacha8rand/chacha8rand.md - -var seed = [32]byte([]byte("ABCDEFGHIJKLMNOPQRSTUVWXYZ123456")) - -var output = []uint64{ - 0xb773b6063d4616a5, 0x1160af22a66abc3c, 0x8c2599d9418d287c, 0x7ee07e037edc5cd6, - 0xcfaa9ee02d1c16ad, 0x0e090eef8febea79, 0x3c82d271128b5b3e, 0x9c5addc11252a34f, - 0xdf79bb617d6ceea6, 0x36d553591f9d736a, 0xeef0d14e181ee01f, 0x089bfc760ae58436, - 0xd9e52b59cc2ad268, 0xeb2fb4444b1b8aba, 0x4f95c8a692c46661, 0xc3c6323217cae62c, - 0x91ebb4367f4e2e7e, 0x784cf2c6a0ec9bc6, 0x5c34ec5c34eabe20, 0x4f0a8f515570daa8, - 0xfc35dcb4113d6bf2, 0x5b0da44c645554bc, 0x6d963da3db21d9e1, 0xeeaefc3150e500f3, - 0x2d37923dda3750a5, 0x380d7a626d4bc8b0, 0xeeaf68ede3d7ee49, 0xf4356695883b717c, - 0x846a9021392495a4, 0x8e8510549630a61b, 0x18dc02545dbae493, 0x0f8f9ff0a65a3d43, - 0xccf065f7190ff080, 0xfd76d1aa39673330, 0x95d232936cba6433, 0x6c7456d1070cbd17, - 0x462acfdaff8c6562, 0x5bafab866d34fc6a, 0x0c862f78030a2988, 0xd39a83e407c3163d, - 0xc00a2b7b45f22ebf, 0x564307c62466b1a9, 0x257e0424b0c072d4, 0x6fb55e99496c28fe, - 0xae9873a88f5cd4e0, 0x4657362ac60d3773, 0x1c83f91ecdf23e8e, 0x6fdc0792c15387c0, - 0x36dad2a30dfd2b5c, 0xa4b593290595bdb7, 0x4de18934e4cc02c5, 0xcdc0d604f015e3a7, - 0xfba0dbf69ad80321, 0x60e8bea3d139de87, 0xd18a4d851ef48756, 0x6366447c2215f34a, - 0x05682e97d3d007ee, 0x4c0e8978c6d54ab2, 0xcf1e9f6a6712edc2, 0x061439414c80cfd3, - 0xd1a8b6e2745c0ead, 0x31a7918d45c410e8, 0xabcc61ad90216eec, 0x4040d92d2032a71a, - 0x3cd2f66ffb40cd68, 0xdcd051c07295857a, 0xeab55cbcd9ab527e, 0x18471dce781bdaac, - 0xf7f08cd144dc7252, 0x5804e0b13d7f40d1, 0x5cb1a446e4b2d35b, 0xe6d4a728d2138a06, - 0x05223e40ca60dad8, 0x2d61ec3206ac6a68, 0xab692356874c17b8, 0xc30954417676de1c, - 0x4f1ace3732225624, 0xfba9510813988338, 0x997f200f52752e11, 0x1116aaafe86221fa, - 0x07ce3b5cb2a13519, 0x2956bc72bc458314, 0x4188b7926140eb78, 0x56ca6dbfd4adea4d, - 0x7fe3c22349340ce5, 0x35c08f9c37675f8a, 0x11e1c7fbef5ed521, 0x98adc8464ec1bc75, - 0xd163b2c73d1203f8, 0x8c761ee043a2f3f3, 0x24b99d6accecd7b7, 0x793e31aa112f0370, - 0x8e87dc2a19285139, 0x4247ae04f7096e25, 0x514f3122926fe20f, 0xdc6fb3f045d2a7e9, - 0x15cb30cecdd18eba, 0xcbc7fdecf6900274, 0x3fb5c696dc8ba021, 0xd1664417c8d274e6, - 0x05f7e445ea457278, 0xf920bbca1b9db657, 0x0c1950b4da22cb99, 0xf875baf1af09e292, - 0xbed3d7b84250f838, 0xf198e8080fd74160, 0xc9eda51d9b7ea703, 0xf709ef55439bf8f6, - 0xd20c74feebf116fc, 0x305668eb146d7546, 0x829af3ec10d89787, 0x15b8f9697b551dbc, - 0xfc823c6c8e64b8c9, 0x345585e8183b40bc, 0x674b4171d6581368, 0x1234d81cd670e9f7, - 0x0e505210d8a55e19, 0xe8258d69eeeca0dc, 0x05d4c452e8baf67e, 0xe8dbe30116a45599, - 0x1cf08ce1b1176f00, 0xccf7d0a4b81ecb49, 0x303fea136b2c430e, 0x861d6c139c06c871, - 0x5f41df72e05e0487, 0x25bd7e1e1ae26b1d, 0xbe9f4004d662a41d, 0x65bf58d483188546, - 0xd1b27cff69db13cc, 0x01a6663372c1bb36, 0x578dd7577b727f4d, 0x19c78f066c083cf6, - 0xdbe014d4f9c391bb, 0x97fbb2dd1d13ffb3, 0x31c91e0af9ef8d4f, 0x094dfc98402a43ba, - 0x069bd61bea37b752, 0x5b72d762e8d986ca, 0x72ee31865904bc85, 0xd1f5fdc5cd36c33e, - 0xba9b4980a8947cad, 0xece8f05eac49ab43, 0x65fe1184abae38e7, 0x2d7cb9dea5d31452, - 0xcc71489476e467e3, 0x4c03a258a578c68c, 0x00efdf9ecb0fd8fc, 0x9924cad471e2666d, - 0x87f8668318f765e9, 0xcb4dc57c1b55f5d8, 0xd373835a86604859, 0xe526568b5540e482, - 0x1f39040f08586fec, 0xb764f3f00293f8e6, 0x049443a2f6bd50a8, 0x76fec88697d3941a, - 0x3efb70d039bae7a2, 0xe2f4611368eca8a8, 0x7c007a96e01d2425, 0xbbcce5768e69c5bf, - 0x784fb4985c42aac3, 0xf72b5091aa223874, 0x3630333fb1e62e07, 0x8e7319ebdebbb8de, - 0x2a3982bca959fa00, 0xb2b98b9f964ba9b3, 0xf7e31014adb71951, 0xebd0fca3703acc82, - 0xec654e2a2fe6419a, 0xb326132d55a52e2c, 0x2248c57f44502978, 0x32710c2f342daf16, - 0x0517b47b5acb2bec, 0x4c7a718fca270937, 0xd69142bed0bcc541, 0xe40ebcb8ff52ce88, - 0x3e44a2dbc9f828d4, 0xc74c2f4f8f873f58, 0x3dbf648eb799e45b, 0x33f22475ee0e86f8, - 0x1eb4f9ee16d47f65, 0x40f8d2b8712744e3, 0xb886b4da3cb14572, 0x2086326fbdd6f64d, - 0xcc3de5907dd882b9, 0xa2e8b49a5ee909df, 0xdbfb8e7823964c10, 0x70dd6089ef0df8d5, - 0x30141663cdd9c99f, 0x04b805325c240365, 0x7483d80314ac12d6, 0x2b271cb91aa7f5f9, - 0x97e2245362abddf0, 0x5a84f614232a9fab, 0xf71125fcda4b7fa2, 0x1ca5a61d74b27267, - 0x38cc6a9b3adbcb45, 0xdde1bb85dc653e39, 0xe9d0c8fa64f89fd4, 0x02c5fb1ecd2b4188, - 0xf2bd137bca5756e5, 0xadefe25d121be155, 0x56cd1c3c5d893a8e, 0x4c50d337beb65bb9, - 0x918c5151675cf567, 0xaba649ffcfb56a1e, 0x20c74ab26a2247cd, 0x71166bac853c08da, - 0xb07befe2e584fc5d, 0xda45ff2a588dbf32, 0xdb98b03c4d75095e, 0x60285ae1aaa65a4c, - 0xf93b686a263140b8, 0xde469752ee1c180e, 0xcec232dc04129aae, 0xeb916baa1835ea04, - 0xd49c21c8b64388ff, 0x72a82d9658864888, 0x003348ef7eac66a8, 0x7f6f67e655b209eb, - 0x532ffb0b7a941b25, 0xd940ade6128deede, 0xdf24f2a1af89fe23, 0x95aa3b4988195ae0, - 0x3da649404f94be4a, 0x692dad132c3f7e27, 0x40aee76ecaaa9eb8, 0x1294a01e09655024, - 0x6df797abdba4e4f5, 0xea2fb6024c1d7032, 0x5f4e0492295489fc, 0x57972914ea22e06a, - 0x9a8137d133aad473, 0xa2e6dd6ae7cdf2f3, 0x9f42644f18086647, 0x16d03301c170bd3e, - 0x908c416fa546656d, 0xe081503be22e123e, 0x077cf09116c4cc72, 0xcbd25cd264b7f229, - 0x3db2f468ec594031, 0x46c00e734c9badd5, 0xd0ec0ac72075d861, 0x3037cb3cf80b7630, - 0x574c3d7b3a2721c6, 0xae99906a0076824b, 0xb175a5418b532e70, 0xd8b3e251ee231ddd, - 0xb433eec25dca1966, 0x530f30dc5cff9a93, 0x9ff03d98b53cd335, 0xafc4225076558cdf, - 0xef81d3a28284402a, 0x110bdbf51c110a28, 0x9ae1b255d027e8f6, 0x7de3e0aa24688332, - 0xe483c3ecd2067ee2, 0xf829328b276137e6, 0xa413ccad57562cad, 0xe6118e8b496acb1f, - 0x8288dca6da5ec01f, 0xa53777dc88c17255, 0x8a00f1e0d5716eda, 0x618e6f47b7a720a8, - 0x9e3907b0c692a841, 0x978b42ca963f34f3, 0x75e4b0cd98a7d7ef, 0xde4dbd6e0b5f4752, - 0x0252e4153f34493f, 0x50f0e7d803734ef9, 0x237766a38ed167ee, 0x4124414001ee39a0, - 0xd08df643e535bb21, 0x34f575b5a9a80b74, 0x2c343af87297f755, 0xcd8b6d99d821f7cb, - 0xe376fd7256fc48ae, 0xe1b06e7334352885, 0xfa87b26f86c169eb, 0x36c1604665a971de, - 0xdba147c2239c8e80, 0x6b208e69fc7f0e24, 0x8795395b6f2b60c3, 0x05dabee9194907f4, - 0xb98175142f5ed902, 0x5e1701e2021ddc81, 0x0875aba2755eed08, 0x778d83289251de95, - 0x3bfbe46a039ecb31, 0xb24704fce4cbd7f9, 0x6985ffe9a7c91e3d, 0xc8efb13df249dabb, - 0xb1037e64b0f4c9f6, 0x55f69fd197d6b7c3, 0x672589d71d68a90c, 0xbebdb8224f50a77e, - 0x3f589f80007374a7, 0xd307f4635954182a, 0xcff5850c10d4fd90, 0xc6da02dfb6408e15, - 0x93daeef1e2b1a485, 0x65d833208aeea625, 0xe2b13fa13ed3b5fa, 0x67053538130fb68e, - 0xc1042f6598218fa9, 0xee5badca749b8a2e, 0x6d22a3f947dae37d, 0xb62c6d1657f4dbaf, - 0x6e007de69704c20b, 0x1af2b913fc3841d8, 0xdc0e47348e2e8e22, 0x9b1ddef1cf958b22, - 0x632ed6b0233066b8, 0xddd02d3311bed8f2, 0xf147cfe1834656e9, 0x399aaa49d511597a, - 0x6b14886979ec0309, 0x64fc4ac36b5afb97, 0xb82f78e07f7cf081, 0x10925c9a323d0e1b, - 0xf451c79ee13c63f6, 0x7c2fc180317876c7, 0x35a12bd9eecb7d22, 0x335654a539621f90, - 0xcc32a3f35db581f0, 0xc60748a80b2369cb, 0x7c4dd3b08591156b, 0xac1ced4b6de22291, - 0xa32cfa2df134def5, 0x627108918dea2a53, 0x0555b1608fcb4ff4, 0x143ee7ac43aaa33c, - 0xdae90ce7cf4fc218, 0x4d68fc2582bcf4b5, 0x37094e1849135d71, 0xf7857e09f3d49fd8, - 0x007538c503768be7, 0xedf648ba2f6be601, 0xaa347664dd72513e, 0xbe63893c6ef23b86, - 0x130b85710605af97, 0xdd765c6b1ef6ab56, 0xf3249a629a97dc6b, 0x2a114f9020fab8e5, - 0x5a69e027cfc6ad08, 0x3c4ccb36f1a5e050, 0x2e9e7d596834f0a5, 0x2430be6858fce789, - 0xe90b862f2466e597, 0x895e2884f159a9ec, 0x26ab8fa4902fcb57, 0xa6efff5c54e1fa50, - 0x333ac4e5811a8255, 0xa58d515f02498611, 0xfe5a09dcb25c6ef4, 0x03898988ab5f5818, - 0x289ff6242af6c617, 0x3d9dd59fd381ea23, 0x52d7d93d8a8aae51, 0xc76a123d511f786f, - 0xf68901edaf00c46c, 0x8c630871b590de80, 0x05209c308991e091, 0x1f809f99b4788177, - 0x11170c2eb6c19fd8, 0x44433c779062ba58, 0xc0acb51af1874c45, 0x9f2e134284809fa1, - 0xedb523bd15c619fa, 0x02d97fd53ecc23c0, 0xacaf05a34462374c, 0xddd9c6d34bffa11f, -} diff --git a/src/math/rand/v2/chacha8.go b/src/math/rand/v2/chacha8.go deleted file mode 100644 index 6b9aa72782..0000000000 --- a/src/math/rand/v2/chacha8.go +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2023 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package rand - -import "internal/chacha8rand" - -// A ChaCha8 is a ChaCha8-based cryptographically strong -// random number generator. -type ChaCha8 struct { - state chacha8rand.State -} - -// NewChaCha8 returns a new ChaCha8 seeded with the given seed. -func NewChaCha8(seed [32]byte) *ChaCha8 { - c := new(ChaCha8) - c.state.Init(seed) - return c -} - -// Seed resets the ChaCha8 to behave the same way as NewChaCha8(seed). -func (c *ChaCha8) Seed(seed [32]byte) { - c.state.Init(seed) -} - -// Uint64 returns a uniformly distributed random uint64 value. -func (c *ChaCha8) Uint64() uint64 { - for { - x, ok := c.state.Next() - if ok { - return x - } - c.state.Refill() - } -} - -// UnmarshalBinary implements the encoding.BinaryUnmarshaler interface. -func (c *ChaCha8) UnmarshalBinary(data []byte) error { - return chacha8rand.Unmarshal(&c.state, data) -} - -// MarshalBinary implements the encoding.BinaryMarshaler interface. -func (c *ChaCha8) MarshalBinary() ([]byte, error) { - return chacha8rand.Marshal(&c.state), nil -} diff --git a/src/math/rand/v2/chacha8_test.go b/src/math/rand/v2/chacha8_test.go deleted file mode 100644 index 2c55b479b2..0000000000 --- a/src/math/rand/v2/chacha8_test.go +++ /dev/null @@ -1,531 +0,0 @@ -// Copyright 2023 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package rand_test - -import ( - . "math/rand/v2" - "testing" -) - -func TestChaCha8(t *testing.T) { - p := NewChaCha8(chacha8seed) - for i, x := range chacha8output { - if u := p.Uint64(); u != x { - t.Errorf("ChaCha8 #%d = %#x, want %#x", i, u, x) - } - } - - p.Seed(chacha8seed) - for i, x := range chacha8output { - if u := p.Uint64(); u != x { - t.Errorf("ChaCha8 #%d = %#x, want %#x", i, u, x) - } - } -} - -func TestChaCha8Marshal(t *testing.T) { - p := NewChaCha8(chacha8seed) - for i, x := range chacha8output { - enc, err := p.MarshalBinary() - if err != nil { - t.Fatalf("#%d: MarshalBinary: %v", i, err) - } - if string(enc) != chacha8marshal[i] { - t.Fatalf("#%d: MarshalBinary=%q, want %q", i, enc, chacha8marshal[i]) - } - *p = ChaCha8{} - if err := p.UnmarshalBinary(enc); err != nil { - t.Fatalf("#%d: UnmarshalBinary: %v", i, err) - } - if u := p.Uint64(); u != x { - t.Errorf("ChaCha8 #%d = %#x, want %#x", i, u, x) - } - } -} - -func BenchmarkChaCha8(b *testing.B) { - p := NewChaCha8([32]byte{1, 2, 3, 4, 5}) - var t uint64 - for n := b.N; n > 0; n-- { - t += p.Uint64() - } - Sink = t -} - -// Golden output test to make sure algorithm never changes, -// so that its use in math/rand/v2 stays stable. - -var chacha8seed = [32]byte([]byte("ABCDEFGHIJKLMNOPQRSTUVWXYZ123456")) - -var chacha8output = []uint64{ - 0xb773b6063d4616a5, 0x1160af22a66abc3c, 0x8c2599d9418d287c, 0x7ee07e037edc5cd6, - 0xcfaa9ee02d1c16ad, 0x0e090eef8febea79, 0x3c82d271128b5b3e, 0x9c5addc11252a34f, - 0xdf79bb617d6ceea6, 0x36d553591f9d736a, 0xeef0d14e181ee01f, 0x089bfc760ae58436, - 0xd9e52b59cc2ad268, 0xeb2fb4444b1b8aba, 0x4f95c8a692c46661, 0xc3c6323217cae62c, - 0x91ebb4367f4e2e7e, 0x784cf2c6a0ec9bc6, 0x5c34ec5c34eabe20, 0x4f0a8f515570daa8, - 0xfc35dcb4113d6bf2, 0x5b0da44c645554bc, 0x6d963da3db21d9e1, 0xeeaefc3150e500f3, - 0x2d37923dda3750a5, 0x380d7a626d4bc8b0, 0xeeaf68ede3d7ee49, 0xf4356695883b717c, - 0x846a9021392495a4, 0x8e8510549630a61b, 0x18dc02545dbae493, 0x0f8f9ff0a65a3d43, - 0xccf065f7190ff080, 0xfd76d1aa39673330, 0x95d232936cba6433, 0x6c7456d1070cbd17, - 0x462acfdaff8c6562, 0x5bafab866d34fc6a, 0x0c862f78030a2988, 0xd39a83e407c3163d, - 0xc00a2b7b45f22ebf, 0x564307c62466b1a9, 0x257e0424b0c072d4, 0x6fb55e99496c28fe, - 0xae9873a88f5cd4e0, 0x4657362ac60d3773, 0x1c83f91ecdf23e8e, 0x6fdc0792c15387c0, - 0x36dad2a30dfd2b5c, 0xa4b593290595bdb7, 0x4de18934e4cc02c5, 0xcdc0d604f015e3a7, - 0xfba0dbf69ad80321, 0x60e8bea3d139de87, 0xd18a4d851ef48756, 0x6366447c2215f34a, - 0x05682e97d3d007ee, 0x4c0e8978c6d54ab2, 0xcf1e9f6a6712edc2, 0x061439414c80cfd3, - 0xd1a8b6e2745c0ead, 0x31a7918d45c410e8, 0xabcc61ad90216eec, 0x4040d92d2032a71a, - 0x3cd2f66ffb40cd68, 0xdcd051c07295857a, 0xeab55cbcd9ab527e, 0x18471dce781bdaac, - 0xf7f08cd144dc7252, 0x5804e0b13d7f40d1, 0x5cb1a446e4b2d35b, 0xe6d4a728d2138a06, - 0x05223e40ca60dad8, 0x2d61ec3206ac6a68, 0xab692356874c17b8, 0xc30954417676de1c, - 0x4f1ace3732225624, 0xfba9510813988338, 0x997f200f52752e11, 0x1116aaafe86221fa, - 0x07ce3b5cb2a13519, 0x2956bc72bc458314, 0x4188b7926140eb78, 0x56ca6dbfd4adea4d, - 0x7fe3c22349340ce5, 0x35c08f9c37675f8a, 0x11e1c7fbef5ed521, 0x98adc8464ec1bc75, - 0xd163b2c73d1203f8, 0x8c761ee043a2f3f3, 0x24b99d6accecd7b7, 0x793e31aa112f0370, - 0x8e87dc2a19285139, 0x4247ae04f7096e25, 0x514f3122926fe20f, 0xdc6fb3f045d2a7e9, - 0x15cb30cecdd18eba, 0xcbc7fdecf6900274, 0x3fb5c696dc8ba021, 0xd1664417c8d274e6, - 0x05f7e445ea457278, 0xf920bbca1b9db657, 0x0c1950b4da22cb99, 0xf875baf1af09e292, - 0xbed3d7b84250f838, 0xf198e8080fd74160, 0xc9eda51d9b7ea703, 0xf709ef55439bf8f6, - 0xd20c74feebf116fc, 0x305668eb146d7546, 0x829af3ec10d89787, 0x15b8f9697b551dbc, - 0xfc823c6c8e64b8c9, 0x345585e8183b40bc, 0x674b4171d6581368, 0x1234d81cd670e9f7, - 0x0e505210d8a55e19, 0xe8258d69eeeca0dc, 0x05d4c452e8baf67e, 0xe8dbe30116a45599, - 0x1cf08ce1b1176f00, 0xccf7d0a4b81ecb49, 0x303fea136b2c430e, 0x861d6c139c06c871, - 0x5f41df72e05e0487, 0x25bd7e1e1ae26b1d, 0xbe9f4004d662a41d, 0x65bf58d483188546, - 0xd1b27cff69db13cc, 0x01a6663372c1bb36, 0x578dd7577b727f4d, 0x19c78f066c083cf6, - 0xdbe014d4f9c391bb, 0x97fbb2dd1d13ffb3, 0x31c91e0af9ef8d4f, 0x094dfc98402a43ba, - 0x069bd61bea37b752, 0x5b72d762e8d986ca, 0x72ee31865904bc85, 0xd1f5fdc5cd36c33e, - 0xba9b4980a8947cad, 0xece8f05eac49ab43, 0x65fe1184abae38e7, 0x2d7cb9dea5d31452, - 0xcc71489476e467e3, 0x4c03a258a578c68c, 0x00efdf9ecb0fd8fc, 0x9924cad471e2666d, - 0x87f8668318f765e9, 0xcb4dc57c1b55f5d8, 0xd373835a86604859, 0xe526568b5540e482, - 0x1f39040f08586fec, 0xb764f3f00293f8e6, 0x049443a2f6bd50a8, 0x76fec88697d3941a, - 0x3efb70d039bae7a2, 0xe2f4611368eca8a8, 0x7c007a96e01d2425, 0xbbcce5768e69c5bf, - 0x784fb4985c42aac3, 0xf72b5091aa223874, 0x3630333fb1e62e07, 0x8e7319ebdebbb8de, - 0x2a3982bca959fa00, 0xb2b98b9f964ba9b3, 0xf7e31014adb71951, 0xebd0fca3703acc82, - 0xec654e2a2fe6419a, 0xb326132d55a52e2c, 0x2248c57f44502978, 0x32710c2f342daf16, - 0x0517b47b5acb2bec, 0x4c7a718fca270937, 0xd69142bed0bcc541, 0xe40ebcb8ff52ce88, - 0x3e44a2dbc9f828d4, 0xc74c2f4f8f873f58, 0x3dbf648eb799e45b, 0x33f22475ee0e86f8, - 0x1eb4f9ee16d47f65, 0x40f8d2b8712744e3, 0xb886b4da3cb14572, 0x2086326fbdd6f64d, - 0xcc3de5907dd882b9, 0xa2e8b49a5ee909df, 0xdbfb8e7823964c10, 0x70dd6089ef0df8d5, - 0x30141663cdd9c99f, 0x04b805325c240365, 0x7483d80314ac12d6, 0x2b271cb91aa7f5f9, - 0x97e2245362abddf0, 0x5a84f614232a9fab, 0xf71125fcda4b7fa2, 0x1ca5a61d74b27267, - 0x38cc6a9b3adbcb45, 0xdde1bb85dc653e39, 0xe9d0c8fa64f89fd4, 0x02c5fb1ecd2b4188, - 0xf2bd137bca5756e5, 0xadefe25d121be155, 0x56cd1c3c5d893a8e, 0x4c50d337beb65bb9, - 0x918c5151675cf567, 0xaba649ffcfb56a1e, 0x20c74ab26a2247cd, 0x71166bac853c08da, - 0xb07befe2e584fc5d, 0xda45ff2a588dbf32, 0xdb98b03c4d75095e, 0x60285ae1aaa65a4c, - 0xf93b686a263140b8, 0xde469752ee1c180e, 0xcec232dc04129aae, 0xeb916baa1835ea04, - 0xd49c21c8b64388ff, 0x72a82d9658864888, 0x003348ef7eac66a8, 0x7f6f67e655b209eb, - 0x532ffb0b7a941b25, 0xd940ade6128deede, 0xdf24f2a1af89fe23, 0x95aa3b4988195ae0, - 0x3da649404f94be4a, 0x692dad132c3f7e27, 0x40aee76ecaaa9eb8, 0x1294a01e09655024, - 0x6df797abdba4e4f5, 0xea2fb6024c1d7032, 0x5f4e0492295489fc, 0x57972914ea22e06a, - 0x9a8137d133aad473, 0xa2e6dd6ae7cdf2f3, 0x9f42644f18086647, 0x16d03301c170bd3e, - 0x908c416fa546656d, 0xe081503be22e123e, 0x077cf09116c4cc72, 0xcbd25cd264b7f229, - 0x3db2f468ec594031, 0x46c00e734c9badd5, 0xd0ec0ac72075d861, 0x3037cb3cf80b7630, - 0x574c3d7b3a2721c6, 0xae99906a0076824b, 0xb175a5418b532e70, 0xd8b3e251ee231ddd, - 0xb433eec25dca1966, 0x530f30dc5cff9a93, 0x9ff03d98b53cd335, 0xafc4225076558cdf, - 0xef81d3a28284402a, 0x110bdbf51c110a28, 0x9ae1b255d027e8f6, 0x7de3e0aa24688332, - 0xe483c3ecd2067ee2, 0xf829328b276137e6, 0xa413ccad57562cad, 0xe6118e8b496acb1f, - 0x8288dca6da5ec01f, 0xa53777dc88c17255, 0x8a00f1e0d5716eda, 0x618e6f47b7a720a8, - 0x9e3907b0c692a841, 0x978b42ca963f34f3, 0x75e4b0cd98a7d7ef, 0xde4dbd6e0b5f4752, - 0x0252e4153f34493f, 0x50f0e7d803734ef9, 0x237766a38ed167ee, 0x4124414001ee39a0, - 0xd08df643e535bb21, 0x34f575b5a9a80b74, 0x2c343af87297f755, 0xcd8b6d99d821f7cb, - 0xe376fd7256fc48ae, 0xe1b06e7334352885, 0xfa87b26f86c169eb, 0x36c1604665a971de, - 0xdba147c2239c8e80, 0x6b208e69fc7f0e24, 0x8795395b6f2b60c3, 0x05dabee9194907f4, - 0xb98175142f5ed902, 0x5e1701e2021ddc81, 0x0875aba2755eed08, 0x778d83289251de95, - 0x3bfbe46a039ecb31, 0xb24704fce4cbd7f9, 0x6985ffe9a7c91e3d, 0xc8efb13df249dabb, - 0xb1037e64b0f4c9f6, 0x55f69fd197d6b7c3, 0x672589d71d68a90c, 0xbebdb8224f50a77e, - 0x3f589f80007374a7, 0xd307f4635954182a, 0xcff5850c10d4fd90, 0xc6da02dfb6408e15, - 0x93daeef1e2b1a485, 0x65d833208aeea625, 0xe2b13fa13ed3b5fa, 0x67053538130fb68e, - 0xc1042f6598218fa9, 0xee5badca749b8a2e, 0x6d22a3f947dae37d, 0xb62c6d1657f4dbaf, - 0x6e007de69704c20b, 0x1af2b913fc3841d8, 0xdc0e47348e2e8e22, 0x9b1ddef1cf958b22, - 0x632ed6b0233066b8, 0xddd02d3311bed8f2, 0xf147cfe1834656e9, 0x399aaa49d511597a, - 0x6b14886979ec0309, 0x64fc4ac36b5afb97, 0xb82f78e07f7cf081, 0x10925c9a323d0e1b, - 0xf451c79ee13c63f6, 0x7c2fc180317876c7, 0x35a12bd9eecb7d22, 0x335654a539621f90, - 0xcc32a3f35db581f0, 0xc60748a80b2369cb, 0x7c4dd3b08591156b, 0xac1ced4b6de22291, - 0xa32cfa2df134def5, 0x627108918dea2a53, 0x0555b1608fcb4ff4, 0x143ee7ac43aaa33c, - 0xdae90ce7cf4fc218, 0x4d68fc2582bcf4b5, 0x37094e1849135d71, 0xf7857e09f3d49fd8, - 0x007538c503768be7, 0xedf648ba2f6be601, 0xaa347664dd72513e, 0xbe63893c6ef23b86, - 0x130b85710605af97, 0xdd765c6b1ef6ab56, 0xf3249a629a97dc6b, 0x2a114f9020fab8e5, - 0x5a69e027cfc6ad08, 0x3c4ccb36f1a5e050, 0x2e9e7d596834f0a5, 0x2430be6858fce789, - 0xe90b862f2466e597, 0x895e2884f159a9ec, 0x26ab8fa4902fcb57, 0xa6efff5c54e1fa50, - 0x333ac4e5811a8255, 0xa58d515f02498611, 0xfe5a09dcb25c6ef4, 0x03898988ab5f5818, - 0x289ff6242af6c617, 0x3d9dd59fd381ea23, 0x52d7d93d8a8aae51, 0xc76a123d511f786f, - 0xf68901edaf00c46c, 0x8c630871b590de80, 0x05209c308991e091, 0x1f809f99b4788177, - 0x11170c2eb6c19fd8, 0x44433c779062ba58, 0xc0acb51af1874c45, 0x9f2e134284809fa1, - 0xedb523bd15c619fa, 0x02d97fd53ecc23c0, 0xacaf05a34462374c, 0xddd9c6d34bffa11f, -} - -var chacha8marshal = []string{ - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x00ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x01ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x02ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x03ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x04ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x05ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x06ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\aABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\bABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\tABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\nABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\vABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\fABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\rABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x0eABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x0fABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x10ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x11ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x12ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x13ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x14ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x15ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x16ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x17ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x18ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x19ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1aABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1bABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1cABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1dABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1eABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1fABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00 ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00!ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\"ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00#ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00$ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00%ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00&ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00'ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00(ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00)ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00*ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00+ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00,ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00-ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00.ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00/ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x000ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x001ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x002ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x003ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x004ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x005ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x006ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x007ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x008ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x009ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00;ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00?ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00@ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00AABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00BABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00CABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00DABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00EABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00FABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00GABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00HABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00IABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00JABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00KABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00LABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00MABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00NABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00OABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00PABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00QABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00RABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00SABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00TABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00UABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00VABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00WABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00XABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00YABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00ZABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00[ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\\ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00]ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00^ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00_ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00`ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00aABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00bABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00cABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00dABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00eABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00fABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00gABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00hABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00iABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00jABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00kABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00lABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00mABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00nABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00oABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00pABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00qABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00rABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00sABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00tABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00uABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00vABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00wABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00xABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00yABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00zABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00{ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00|ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x01>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x02>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x03>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x04>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x05>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x06>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\a>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\b>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\t>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\n>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\v>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\f>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\r>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x0e>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x0f>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x10>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x11>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x12>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x13>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x14>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x15>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x16>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x17>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x18>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x19>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1a>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1b>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1c>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1d>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1e>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1f>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00 >\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00!>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\">\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00#>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00$>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00%>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00&>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00'>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00(>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00)>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00*>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00+>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00,>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00->\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00.>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00/>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x000>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x001>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x002>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x003>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x004>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x005>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x006>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x007>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x008>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x009>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00:>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00;>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00<>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00=>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00>>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00?>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00@>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00A>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00B>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00C>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00D>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00E>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00F>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00G>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00H>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00I>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00J>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00K>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00L>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00M>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00N>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00O>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00P>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00Q>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00R>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00S>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00T>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00U>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00V>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00W>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00X>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00Y>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00Z>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00[>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\\>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00]>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00^>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00_>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00`>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00a>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00b>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00c>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00d>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00e>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00f>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00g>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00h>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00i>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00j>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00k>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00l>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00m>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00n>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00o>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00p>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00q>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00r>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00s>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00t>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00u>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00v>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00w>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00x>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00y>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00z>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00{>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00|>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x01K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x02K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x03K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x04K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x05K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x06K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\aK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\bK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\tK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\nK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\vK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\fK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\rK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x0eK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x0fK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x10K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x11K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x12K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x13K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x14K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x15K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x16K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x17K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x18K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x19K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1aK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1bK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1cK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1dK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1eK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1fK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00 K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00!K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\"K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00#K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00$K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00%K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00&K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00'K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00(K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00)K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00*K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00+K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00,K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00-K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00.K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00/K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x000K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x001K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x002K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x003K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x004K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x005K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x006K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x007K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x008K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x009K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00:K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00;K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00?K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00@K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00AK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00BK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00CK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00DK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00EK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00FK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00GK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00HK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00IK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00JK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00KK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00LK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00MK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00NK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00OK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00PK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00QK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00RK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00SK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00TK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00UK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00VK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00WK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00XK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00YK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00ZK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00[K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00\\K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00]K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00^K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00_K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00`K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00aK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00bK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00cK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00dK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00eK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00fK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00gK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00hK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00iK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00jK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00kK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00lK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00mK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00nK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00oK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00pK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00qK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00rK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00sK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00tK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00uK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00vK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00wK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00xK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00yK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00zK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", - "chacha8:\x00\x00\x00\x00\x00\x00\x00{K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", -} From ddb38c3f540c17a0437132532f49f6f0061d82af Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Mon, 20 Nov 2023 08:19:49 -0800 Subject: [PATCH 015/313] cmd/compile/internal/devirtualize: use CallExpr.GoDefer for PGO CL 543657 dedup'd the go/defer statement recognition between the inliner and static devirtualizer. This CL extends that for PGO-based devirtualization too. Change-Id: I998753132af1ef17329676f4e17515f16e0acb03 Reviewed-on: https://go-review.googlesource.com/c/go/+/543775 Auto-Submit: Matthew Dempsky LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Pratt --- src/cmd/compile/internal/devirtualize/pgo.go | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/cmd/compile/internal/devirtualize/pgo.go b/src/cmd/compile/internal/devirtualize/pgo.go index 05b37d6be6..170bf74673 100644 --- a/src/cmd/compile/internal/devirtualize/pgo.go +++ b/src/cmd/compile/internal/devirtualize/pgo.go @@ -107,9 +107,6 @@ func ProfileGuided(fn *ir.Func, p *pgo.Profile) { name := ir.LinkFuncName(fn) - // Can't devirtualize go/defer calls. See comment in Static. - goDeferCall := make(map[*ir.CallExpr]bool) - var jsonW *json.Encoder if base.Debug.PGODebug >= 3 { jsonW = json.NewEncoder(os.Stdout) @@ -121,12 +118,6 @@ func ProfileGuided(fn *ir.Func, p *pgo.Profile) { return n } - if gds, ok := n.(*ir.GoDeferStmt); ok { - if call, ok := gds.Call.(*ir.CallExpr); ok { - goDeferCall[call] = true - } - } - ir.EditChildren(n, edit) call, ok := n.(*ir.CallExpr) @@ -156,7 +147,7 @@ func ProfileGuided(fn *ir.Func, p *pgo.Profile) { fmt.Printf("%v: PGO devirtualize considering call %v\n", ir.Line(call), call) } - if goDeferCall[call] { + if call.GoDefer { if base.Debug.PGODebug >= 2 { fmt.Printf("%v: can't PGO devirtualize go/defer call %v\n", ir.Line(call), call) } From 369ce90d2c734f7a8d08547219d2f39fa521ff71 Mon Sep 17 00:00:00 2001 From: Mauri de Souza Meneguzzo Date: Sun, 19 Nov 2023 20:21:22 +0000 Subject: [PATCH 016/313] runtime: add crash stack support for wasm Currently if morestack on g0 happens the wasm runtime prints "RuntimeError: memory access out of bounds", which is quite misleading. By switching to a crash stack we can get better stacktraces for the error. There is no way to automate tests for this feature on wasm, since TestG0StackOverflow relies on spawning a subprocess which is not supported by the wasm port. The way I got this tested manually is to comment everything in TestG0StackOverflow, leaving just runtime.G0StackOverflow(). Then it is a matter of invoking the test: GOOS=js GOARCH=wasm go test runtime -v -run=TestG0StackOverflow Change-Id: If450f3ee5209bb32efc1abd0a34b1cc4a29d0c46 GitHub-Last-Rev: 0d7c396e4cfeadc1188cae2b55661af10c8189e7 GitHub-Pull-Request: golang/go#63956 Reviewed-on: https://go-review.googlesource.com/c/go/+/539995 TryBot-Result: Gopher Robot Reviewed-by: David Chase Run-TryBot: Cherry Mui Reviewed-by: Cherry Mui --- src/runtime/asm.s | 2 ++ src/runtime/asm_wasm.s | 45 ++++++++++++++++++++++++++++++++++++------ src/runtime/proc.go | 2 +- 3 files changed, 42 insertions(+), 7 deletions(-) diff --git a/src/runtime/asm.s b/src/runtime/asm.s index 45ba467806..24cd0c95db 100644 --- a/src/runtime/asm.s +++ b/src/runtime/asm.s @@ -20,6 +20,7 @@ TEXT ·mapinitnoop(SB),NOSPLIT,$0-0 #ifndef GOARCH_ppc64 #ifndef GOARCH_ppc64le #ifndef GOARCH_riscv64 +#ifndef GOARCH_wasm // stub to appease shared build mode. TEXT ·switchToCrashStack0(SB),NOSPLIT,$0-0 UNDEF @@ -30,3 +31,4 @@ TEXT ·switchToCrashStack0(SB),NOSPLIT,$0-0 #endif #endif #endif +#endif diff --git a/src/runtime/asm_wasm.s b/src/runtime/asm_wasm.s index a96115b02c..b44a4f7dd4 100644 --- a/src/runtime/asm_wasm.s +++ b/src/runtime/asm_wasm.s @@ -140,6 +140,7 @@ TEXT runtime·systemstack(SB), NOSPLIT, $0-8 I64Ne If CALLNORESUME runtime·badsystemstack(SB) + CALLNORESUME runtime·abort(SB) End // switch: @@ -181,6 +182,9 @@ TEXT runtime·systemstack(SB), NOSPLIT, $0-8 TEXT runtime·systemstack_switch(SB), NOSPLIT, $0-0 RET +TEXT runtime·abort(SB),NOSPLIT|NOFRAME,$0-0 + UNDEF + // AES hashing not implemented for wasm TEXT runtime·memhash(SB),NOSPLIT|NOFRAME,$0-32 JMP runtime·memhashFallback(SB) @@ -208,6 +212,33 @@ TEXT runtime·procyield(SB), NOSPLIT, $0-0 // FIXME TEXT runtime·breakpoint(SB), NOSPLIT, $0-0 UNDEF +// func switchToCrashStack0(fn func()) +TEXT runtime·switchToCrashStack0(SB), NOSPLIT, $0-8 + MOVD fn+0(FP), CTXT // context register + MOVD g_m(g), R2 // curm + + // set g to gcrash + MOVD $runtime·gcrash(SB), g // g = &gcrash + MOVD R2, g_m(g) // g.m = curm + MOVD g, m_g0(R2) // curm.g0 = g + + // switch to crashstack + I64Load (g_stack+stack_hi)(g) + I64Const $(-4*8) + I64Add + I32WrapI64 + Set SP + + // call target function + Get CTXT + I32WrapI64 + I64Load $0 + CALL + + // should never return + CALL runtime·abort(SB) + UNDEF + // Called during function prolog when more stack is needed. // // The traceback routines see morestack on a g0 as being @@ -221,12 +252,19 @@ TEXT runtime·morestack(SB), NOSPLIT, $0-0 // R2 = g0 MOVD m_g0(R1), R2 + // Set g->sched to context in f. + NOP SP // tell vet SP changed - stop checking offsets + MOVD 0(SP), g_sched+gobuf_pc(g) + MOVD $8(SP), g_sched+gobuf_sp(g) // f's SP + MOVD CTXT, g_sched+gobuf_ctxt(g) + // Cannot grow scheduler stack (m->g0). Get g Get R2 I64Eq If CALLNORESUME runtime·badmorestackg0(SB) + CALLNORESUME runtime·abort(SB) End // Cannot grow signal stack (m->gsignal). @@ -235,20 +273,15 @@ TEXT runtime·morestack(SB), NOSPLIT, $0-0 I64Eq If CALLNORESUME runtime·badmorestackgsignal(SB) + CALLNORESUME runtime·abort(SB) End // Called from f. // Set m->morebuf to f's caller. - NOP SP // tell vet SP changed - stop checking offsets MOVD 8(SP), m_morebuf+gobuf_pc(R1) MOVD $16(SP), m_morebuf+gobuf_sp(R1) // f's caller's SP MOVD g, m_morebuf+gobuf_g(R1) - // Set g->sched to context in f. - MOVD 0(SP), g_sched+gobuf_pc(g) - MOVD $8(SP), g_sched+gobuf_sp(g) // f's SP - MOVD CTXT, g_sched+gobuf_ctxt(g) - // Call newstack on m->g0's stack. MOVD R2, g MOVD g_sched+gobuf_sp(R2), SP diff --git a/src/runtime/proc.go b/src/runtime/proc.go index ea011e3192..18826abb06 100644 --- a/src/runtime/proc.go +++ b/src/runtime/proc.go @@ -576,7 +576,7 @@ func switchToCrashStack(fn func()) { abort() } -const crashStackImplemented = GOARCH == "amd64" || GOARCH == "arm64" || GOARCH == "mips64" || GOARCH == "mips64le" || GOARCH == "ppc64" || GOARCH == "ppc64le" || GOARCH == "riscv64" +const crashStackImplemented = GOARCH == "amd64" || GOARCH == "arm64" || GOARCH == "mips64" || GOARCH == "mips64le" || GOARCH == "ppc64" || GOARCH == "ppc64le" || GOARCH == "riscv64" || GOARCH == "wasm" //go:noescape func switchToCrashStack0(fn func()) // in assembly From af1242932e121f510ad04282277740cceff2e550 Mon Sep 17 00:00:00 2001 From: Tim King Date: Mon, 20 Nov 2023 12:56:26 -0800 Subject: [PATCH 017/313] cmd: go get golang.org/x/tools@8966034e and revendor go get golang.org/x/tools@8966034e # CL 542639 go mod tidy go mod vendor Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest Change-Id: Id2a7322006ff3985e3c97482cd78c8963c4df140 Reviewed-on: https://go-review.googlesource.com/c/go/+/543975 TryBot-Result: Gopher Robot Run-TryBot: Tim King LUCI-TryBot-Result: Go LUCI Reviewed-by: Robert Findley --- src/cmd/go.mod | 6 +- src/cmd/go.sum | 12 +- .../go/analysis/passes/errorsas/errorsas.go | 3 - .../go/analysis/passes/loopclosure/doc.go | 13 +- .../passes/loopclosure/loopclosure.go | 16 +- .../go/analysis/unitchecker/unitchecker.go | 2 + .../x/tools/go/analysis/validate.go | 2 + .../x/tools/internal/versions/gover.go | 172 ++++++++++++++++++ .../x/tools/internal/versions/types.go | 19 ++ .../x/tools/internal/versions/types_go121.go | 20 ++ .../x/tools/internal/versions/types_go122.go | 24 +++ .../tools/internal/versions/versions_go121.go | 49 +++++ .../tools/internal/versions/versions_go122.go | 38 ++++ src/cmd/vendor/modules.txt | 7 +- 14 files changed, 363 insertions(+), 20 deletions(-) create mode 100644 src/cmd/vendor/golang.org/x/tools/internal/versions/gover.go create mode 100644 src/cmd/vendor/golang.org/x/tools/internal/versions/types.go create mode 100644 src/cmd/vendor/golang.org/x/tools/internal/versions/types_go121.go create mode 100644 src/cmd/vendor/golang.org/x/tools/internal/versions/types_go122.go create mode 100644 src/cmd/vendor/golang.org/x/tools/internal/versions/versions_go121.go create mode 100644 src/cmd/vendor/golang.org/x/tools/internal/versions/versions_go122.go diff --git a/src/cmd/go.mod b/src/cmd/go.mod index 1e94f5dab0..8f66963c14 100644 --- a/src/cmd/go.mod +++ b/src/cmd/go.mod @@ -5,11 +5,11 @@ go 1.22 require ( github.com/google/pprof v0.0.0-20230811205829-9131a7e9cc17 golang.org/x/arch v0.5.1-0.20231011141335-a6bdeed49307 - golang.org/x/mod v0.13.1-0.20231025225536-6e58e47c7bd6 - golang.org/x/sync v0.4.1-0.20231011140417-10739b037d36 + golang.org/x/mod v0.14.0 + golang.org/x/sync v0.5.0 golang.org/x/sys v0.13.1-0.20231011215430-1bfbee0e20e3 golang.org/x/term v0.13.1-0.20231011140651-6a610bc55bff - golang.org/x/tools v0.14.1-0.20231019165902-71f6a46884ab + golang.org/x/tools v0.15.1-0.20231120183520-8966034e4e53 ) require github.com/ianlancetaylor/demangle v0.0.0-20230524184225-eabc099b10ab // indirect diff --git a/src/cmd/go.sum b/src/cmd/go.sum index ab476f84f9..ea29f9f3a3 100644 --- a/src/cmd/go.sum +++ b/src/cmd/go.sum @@ -4,13 +4,13 @@ github.com/ianlancetaylor/demangle v0.0.0-20230524184225-eabc099b10ab h1:BA4a7pe github.com/ianlancetaylor/demangle v0.0.0-20230524184225-eabc099b10ab/go.mod h1:gx7rwoVhcfuVKG5uya9Hs3Sxj7EIvldVofAWIUtGouw= golang.org/x/arch v0.5.1-0.20231011141335-a6bdeed49307 h1:1nIbNxjxQ3+dss3xYMxayoIZONazUTg8/BENwc19sAQ= golang.org/x/arch v0.5.1-0.20231011141335-a6bdeed49307/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= -golang.org/x/mod v0.13.1-0.20231025225536-6e58e47c7bd6 h1:YSyE+/SK6vfYAxf27iVtUZ/tTZOHGN6epnMgE1al/+M= -golang.org/x/mod v0.13.1-0.20231025225536-6e58e47c7bd6/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/sync v0.4.1-0.20231011140417-10739b037d36 h1:+lDu3sHZVY5Qqb7ynMbjaT4IsYicvoxypEOIE4aYlYE= -golang.org/x/sync v0.4.1-0.20231011140417-10739b037d36/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= +golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= +golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.13.1-0.20231011215430-1bfbee0e20e3 h1:G9se7UpoI67yWrFY0IIFGf6H3nwLLUZFDBCyOJwWeSc= golang.org/x/sys v0.13.1-0.20231011215430-1bfbee0e20e3/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.13.1-0.20231011140651-6a610bc55bff h1:4lCCwEX5qbLiqBk8cqIlwrDbmkzfggoqDXYLTU+jr30= golang.org/x/term v0.13.1-0.20231011140651-6a610bc55bff/go.mod h1:tfGnZ3a6ww9diaioGSzdPRgIfpk6Odt1UPXNhRcgfag= -golang.org/x/tools v0.14.1-0.20231019165902-71f6a46884ab h1:wNyFWaRZ6iFNvDL/8TK0HF5x3mGttsqpXPuHeKN88G8= -golang.org/x/tools v0.14.1-0.20231019165902-71f6a46884ab/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg= +golang.org/x/tools v0.15.1-0.20231120183520-8966034e4e53 h1:OvqfI3Xzb220PLbcIqYXf6DUnr4RyR1MJOhkg8qsnaA= +golang.org/x/tools v0.15.1-0.20231120183520-8966034e4e53/go.mod h1:Qt/ThNq1+Jt2UJeOwUFFL3xcU1EExDk5yYNCBwMKeyA= diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/errorsas/errorsas.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/errorsas/errorsas.go index 43996b80a5..7f62ad4c82 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/errorsas/errorsas.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/errorsas/errorsas.go @@ -66,9 +66,6 @@ func run(pass *analysis.Pass) (interface{}, error) { var errorType = types.Universe.Lookup("error").Type() -// pointerToInterfaceOrError reports whether the type of e is a pointer to an interface or a type implementing error, -// or is the empty interface. - // checkAsTarget reports an error if the second argument to errors.As is invalid. func checkAsTarget(pass *analysis.Pass, e ast.Expr) error { t := pass.TypesInfo.Types[e].Type diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/loopclosure/doc.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/loopclosure/doc.go index dc544df1bf..c95b1c1c98 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/loopclosure/doc.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/loopclosure/doc.go @@ -14,8 +14,12 @@ // in such a way (e.g. with go or defer) that it may outlive the loop // iteration and possibly observe the wrong value of the variable. // +// Note: An iteration variable can only outlive a loop iteration in Go versions <=1.21. +// In Go 1.22 and later, the loop variable lifetimes changed to create a new +// iteration variable per loop iteration. (See go.dev/issue/60078.) +// // In this example, all the deferred functions run after the loop has -// completed, so all observe the final value of v. +// completed, so all observe the final value of v [ y, interpreted as toolchain versions. +// The versions x and y must not begin with a "go" prefix: just "1.21" not "go1.21". +// Malformed versions compare less than well-formed versions and equal to each other. +// The language version "1.21" compares less than the release candidate and eventual releases "1.21rc1" and "1.21.0". +func compare(x, y string) int { + vx := parse(x) + vy := parse(y) + + if c := cmpInt(vx.major, vy.major); c != 0 { + return c + } + if c := cmpInt(vx.minor, vy.minor); c != 0 { + return c + } + if c := cmpInt(vx.patch, vy.patch); c != 0 { + return c + } + if c := strings.Compare(vx.kind, vy.kind); c != 0 { // "" < alpha < beta < rc + return c + } + if c := cmpInt(vx.pre, vy.pre); c != 0 { + return c + } + return 0 +} + +// lang returns the Go language version. For example, lang("1.2.3") == "1.2". +func lang(x string) string { + v := parse(x) + if v.minor == "" || v.major == "1" && v.minor == "0" { + return v.major + } + return v.major + "." + v.minor +} + +// isValid reports whether the version x is valid. +func isValid(x string) bool { + return parse(x) != gover{} +} + +// parse parses the Go version string x into a version. +// It returns the zero version if x is malformed. +func parse(x string) gover { + var v gover + + // Parse major version. + var ok bool + v.major, x, ok = cutInt(x) + if !ok { + return gover{} + } + if x == "" { + // Interpret "1" as "1.0.0". + v.minor = "0" + v.patch = "0" + return v + } + + // Parse . before minor version. + if x[0] != '.' { + return gover{} + } + + // Parse minor version. + v.minor, x, ok = cutInt(x[1:]) + if !ok { + return gover{} + } + if x == "" { + // Patch missing is same as "0" for older versions. + // Starting in Go 1.21, patch missing is different from explicit .0. + if cmpInt(v.minor, "21") < 0 { + v.patch = "0" + } + return v + } + + // Parse patch if present. + if x[0] == '.' { + v.patch, x, ok = cutInt(x[1:]) + if !ok || x != "" { + // Note that we are disallowing prereleases (alpha, beta, rc) for patch releases here (x != ""). + // Allowing them would be a bit confusing because we already have: + // 1.21 < 1.21rc1 + // But a prerelease of a patch would have the opposite effect: + // 1.21.3rc1 < 1.21.3 + // We've never needed them before, so let's not start now. + return gover{} + } + return v + } + + // Parse prerelease. + i := 0 + for i < len(x) && (x[i] < '0' || '9' < x[i]) { + if x[i] < 'a' || 'z' < x[i] { + return gover{} + } + i++ + } + if i == 0 { + return gover{} + } + v.kind, x = x[:i], x[i:] + if x == "" { + return v + } + v.pre, x, ok = cutInt(x) + if !ok || x != "" { + return gover{} + } + + return v +} + +// cutInt scans the leading decimal number at the start of x to an integer +// and returns that value and the rest of the string. +func cutInt(x string) (n, rest string, ok bool) { + i := 0 + for i < len(x) && '0' <= x[i] && x[i] <= '9' { + i++ + } + if i == 0 || x[0] == '0' && i != 1 { // no digits or unnecessary leading zero + return "", "", false + } + return x[:i], x[i:], true +} + +// cmpInt returns cmp.Compare(x, y) interpreting x and y as decimal numbers. +// (Copied from golang.org/x/mod/semver's compareInt.) +func cmpInt(x, y string) int { + if x == y { + return 0 + } + if len(x) < len(y) { + return -1 + } + if len(x) > len(y) { + return +1 + } + if x < y { + return -1 + } else { + return +1 + } +} diff --git a/src/cmd/vendor/golang.org/x/tools/internal/versions/types.go b/src/cmd/vendor/golang.org/x/tools/internal/versions/types.go new file mode 100644 index 0000000000..562eef21fa --- /dev/null +++ b/src/cmd/vendor/golang.org/x/tools/internal/versions/types.go @@ -0,0 +1,19 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package versions + +import ( + "go/types" +) + +// GoVersion returns the Go version of the type package. +// It returns zero if no version can be determined. +func GoVersion(pkg *types.Package) string { + // TODO(taking): x/tools can call GoVersion() [from 1.21] after 1.25. + if pkg, ok := any(pkg).(interface{ GoVersion() string }); ok { + return pkg.GoVersion() + } + return "" +} diff --git a/src/cmd/vendor/golang.org/x/tools/internal/versions/types_go121.go b/src/cmd/vendor/golang.org/x/tools/internal/versions/types_go121.go new file mode 100644 index 0000000000..a7b79207ae --- /dev/null +++ b/src/cmd/vendor/golang.org/x/tools/internal/versions/types_go121.go @@ -0,0 +1,20 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !go1.22 +// +build !go1.22 + +package versions + +import ( + "go/ast" + "go/types" +) + +// FileVersions always reports the a file's Go version as the +// zero version at this Go version. +func FileVersions(info *types.Info, file *ast.File) string { return "" } + +// InitFileVersions is a noop at this Go version. +func InitFileVersions(*types.Info) {} diff --git a/src/cmd/vendor/golang.org/x/tools/internal/versions/types_go122.go b/src/cmd/vendor/golang.org/x/tools/internal/versions/types_go122.go new file mode 100644 index 0000000000..7b9ba89a82 --- /dev/null +++ b/src/cmd/vendor/golang.org/x/tools/internal/versions/types_go122.go @@ -0,0 +1,24 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.22 +// +build go1.22 + +package versions + +import ( + "go/ast" + "go/types" +) + +// FileVersions maps a file to the file's semantic Go version. +// The reported version is the zero version if a version cannot be determined. +func FileVersions(info *types.Info, file *ast.File) string { + return info.FileVersions[file] +} + +// InitFileVersions initializes info to record Go versions for Go files. +func InitFileVersions(info *types.Info) { + info.FileVersions = make(map[*ast.File]string) +} diff --git a/src/cmd/vendor/golang.org/x/tools/internal/versions/versions_go121.go b/src/cmd/vendor/golang.org/x/tools/internal/versions/versions_go121.go new file mode 100644 index 0000000000..cf4a7d0360 --- /dev/null +++ b/src/cmd/vendor/golang.org/x/tools/internal/versions/versions_go121.go @@ -0,0 +1,49 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !go1.22 +// +build !go1.22 + +package versions + +// Lang returns the Go language version for version x. +// If x is not a valid version, Lang returns the empty string. +// For example: +// +// Lang("go1.21rc2") = "go1.21" +// Lang("go1.21.2") = "go1.21" +// Lang("go1.21") = "go1.21" +// Lang("go1") = "go1" +// Lang("bad") = "" +// Lang("1.21") = "" +func Lang(x string) string { + v := lang(stripGo(x)) + if v == "" { + return "" + } + return x[:2+len(v)] // "go"+v without allocation +} + +// Compare returns -1, 0, or +1 depending on whether +// x < y, x == y, or x > y, interpreted as Go versions. +// The versions x and y must begin with a "go" prefix: "go1.21" not "1.21". +// Invalid versions, including the empty string, compare less than +// valid versions and equal to each other. +// The language version "go1.21" compares less than the +// release candidate and eventual releases "go1.21rc1" and "go1.21.0". +// Custom toolchain suffixes are ignored during comparison: +// "go1.21.0" and "go1.21.0-bigcorp" are equal. +func Compare(x, y string) int { return compare(stripGo(x), stripGo(y)) } + +// IsValid reports whether the version x is valid. +func IsValid(x string) bool { return isValid(stripGo(x)) } + +// stripGo converts from a "go1.21" version to a "1.21" version. +// If v does not start with "go", stripGo returns the empty string (a known invalid version). +func stripGo(v string) string { + if len(v) < 2 || v[:2] != "go" { + return "" + } + return v[2:] +} diff --git a/src/cmd/vendor/golang.org/x/tools/internal/versions/versions_go122.go b/src/cmd/vendor/golang.org/x/tools/internal/versions/versions_go122.go new file mode 100644 index 0000000000..c1c1814b28 --- /dev/null +++ b/src/cmd/vendor/golang.org/x/tools/internal/versions/versions_go122.go @@ -0,0 +1,38 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.22 +// +build go1.22 + +package versions + +import ( + "go/version" +) + +// Lang returns the Go language version for version x. +// If x is not a valid version, Lang returns the empty string. +// For example: +// +// Lang("go1.21rc2") = "go1.21" +// Lang("go1.21.2") = "go1.21" +// Lang("go1.21") = "go1.21" +// Lang("go1") = "go1" +// Lang("bad") = "" +// Lang("1.21") = "" +func Lang(x string) string { return version.Lang(x) } + +// Compare returns -1, 0, or +1 depending on whether +// x < y, x == y, or x > y, interpreted as Go versions. +// The versions x and y must begin with a "go" prefix: "go1.21" not "1.21". +// Invalid versions, including the empty string, compare less than +// valid versions and equal to each other. +// The language version "go1.21" compares less than the +// release candidate and eventual releases "go1.21rc1" and "go1.21.0". +// Custom toolchain suffixes are ignored during comparison: +// "go1.21.0" and "go1.21.0-bigcorp" are equal. +func Compare(x, y string) int { return version.Compare(x, y) } + +// IsValid reports whether the version x is valid. +func IsValid(x string) bool { return version.IsValid(x) } diff --git a/src/cmd/vendor/modules.txt b/src/cmd/vendor/modules.txt index 9b2335f20e..dfde4b287b 100644 --- a/src/cmd/vendor/modules.txt +++ b/src/cmd/vendor/modules.txt @@ -23,7 +23,7 @@ golang.org/x/arch/arm/armasm golang.org/x/arch/arm64/arm64asm golang.org/x/arch/ppc64/ppc64asm golang.org/x/arch/x86/x86asm -# golang.org/x/mod v0.13.1-0.20231025225536-6e58e47c7bd6 +# golang.org/x/mod v0.14.0 ## explicit; go 1.18 golang.org/x/mod/internal/lazyregexp golang.org/x/mod/modfile @@ -34,7 +34,7 @@ golang.org/x/mod/sumdb/dirhash golang.org/x/mod/sumdb/note golang.org/x/mod/sumdb/tlog golang.org/x/mod/zip -# golang.org/x/sync v0.4.1-0.20231011140417-10739b037d36 +# golang.org/x/sync v0.5.0 ## explicit; go 1.18 golang.org/x/sync/semaphore # golang.org/x/sys v0.13.1-0.20231011215430-1bfbee0e20e3 @@ -45,7 +45,7 @@ golang.org/x/sys/windows # golang.org/x/term v0.13.1-0.20231011140651-6a610bc55bff ## explicit; go 1.18 golang.org/x/term -# golang.org/x/tools v0.14.1-0.20231019165902-71f6a46884ab +# golang.org/x/tools v0.15.1-0.20231120183520-8966034e4e53 ## explicit; go 1.18 golang.org/x/tools/cmd/bisect golang.org/x/tools/cover @@ -95,3 +95,4 @@ golang.org/x/tools/go/types/typeutil golang.org/x/tools/internal/bisect golang.org/x/tools/internal/facts golang.org/x/tools/internal/typeparams +golang.org/x/tools/internal/versions From 841e63e480ca2626e0cd0bbf8df31f8c6d8ee597 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Mon, 20 Nov 2023 15:20:58 -0500 Subject: [PATCH 018/313] cmd/go: don't warn about GOROOT equal to GOPATH when both are the empty string As of Go 1.19, runtime.GOROOT() reports the empty string if the binary was built with -trimpath. cmd/go/internal/cfg uses the path of the go command executable to reverse-engineer the correct GOROOT setting, but that means that cmd/go's "GOPATH set to GOROOT" warning needs to use cfg.GOROOT instead of runtime.GOROOT(). In addition, if we fail to find the GOROOT then there is no point in complaining about GOPATH also being empty: the missing GOROOT will stop everything right away anyway, so there is no point confusing the user with an additional warning about GOPATH. Updates #51461. Updates #18678. Updates #3207. Change-Id: Id7d0f4dc2f229c202dfda4e6e8af5dea909bb16f Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest,gotip-windows-amd64-longtest Reviewed-on: https://go-review.googlesource.com/c/go/+/543955 Reviewed-by: Michael Matloob Auto-Submit: Bryan Mills LUCI-TryBot-Result: Go LUCI --- src/cmd/go/main.go | 21 +++++++++---------- .../script/goroot_executable_trimpath.txt | 10 +++++++++ 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/cmd/go/main.go b/src/cmd/go/main.go index 7d4dedc1bb..d380aae489 100644 --- a/src/cmd/go/main.go +++ b/src/cmd/go/main.go @@ -16,7 +16,6 @@ import ( "log" "os" "path/filepath" - "runtime" rtrace "runtime/trace" "slices" "strings" @@ -107,10 +106,19 @@ func main() { return } + if cfg.GOROOT == "" { + fmt.Fprintf(os.Stderr, "go: cannot find GOROOT directory: 'go' binary is trimmed and GOROOT is not set\n") + os.Exit(2) + } + if fi, err := os.Stat(cfg.GOROOT); err != nil || !fi.IsDir() { + fmt.Fprintf(os.Stderr, "go: cannot find GOROOT directory: %v\n", cfg.GOROOT) + os.Exit(2) + } + // Diagnose common mistake: GOPATH==GOROOT. // This setting is equivalent to not setting GOPATH at all, // which is not what most people want when they do it. - if gopath := cfg.BuildContext.GOPATH; filepath.Clean(gopath) == filepath.Clean(runtime.GOROOT()) { + if gopath := cfg.BuildContext.GOPATH; filepath.Clean(gopath) == filepath.Clean(cfg.GOROOT) { fmt.Fprintf(os.Stderr, "warning: GOPATH set to GOROOT (%s) has no effect\n", gopath) } else { for _, p := range filepath.SplitList(gopath) { @@ -139,15 +147,6 @@ func main() { } } - if cfg.GOROOT == "" { - fmt.Fprintf(os.Stderr, "go: cannot find GOROOT directory: 'go' binary is trimmed and GOROOT is not set\n") - os.Exit(2) - } - if fi, err := os.Stat(cfg.GOROOT); err != nil || !fi.IsDir() { - fmt.Fprintf(os.Stderr, "go: cannot find GOROOT directory: %v\n", cfg.GOROOT) - os.Exit(2) - } - cmd, used := lookupCmd(args) cfg.CmdName = strings.Join(args[:used], " ") if len(cmd.Commands) > 0 { diff --git a/src/cmd/go/testdata/script/goroot_executable_trimpath.txt b/src/cmd/go/testdata/script/goroot_executable_trimpath.txt index dc1e25e606..a3f0c39a83 100644 --- a/src/cmd/go/testdata/script/goroot_executable_trimpath.txt +++ b/src/cmd/go/testdata/script/goroot_executable_trimpath.txt @@ -29,12 +29,20 @@ wait env TESTGOROOT=$GOROOT env GOROOT= +# Unset GOPATH and any variables that its default may be derived from, +# so that we can check for a spurious warning. +env GOPATH= +env HOME='' +env USERPROFILE='' +env home='' + # Relocated Executable # Since we built with -trimpath and the binary isn't installed in a # normal-looking GOROOT, this command should fail. ! exec $WORK/new/bin/go$GOEXE env GOROOT stderr '^go: cannot find GOROOT directory: ''go'' binary is trimmed and GOROOT is not set$' +! stderr 'GOPATH set to GOROOT' # Cross-compiled binaries in cmd are installed to a ${GOOS}_${GOARCH} subdirectory, # so we also want to try a copy there. @@ -44,6 +52,7 @@ stderr '^go: cannot find GOROOT directory: ''go'' binary is trimmed and GOROOT i cp $WORK/new/bin/go$GOEXE $WORK/new/bin/${GOOS}_${GOARCH}/go$GOEXE ! exec $WORK/new/bin/${GOOS}_${GOARCH}/go$GOEXE env GOROOT stderr '^go: cannot find GOROOT directory: ''go'' binary is trimmed and GOROOT is not set$' +! stderr 'GOPATH set to GOROOT' # Relocated Tree: # If the binary is sitting in a bin dir next to ../pkg/tool, that counts as a GOROOT, @@ -51,6 +60,7 @@ stderr '^go: cannot find GOROOT directory: ''go'' binary is trimmed and GOROOT i mkdir $WORK/new/pkg/tool exec $WORK/bin/check$GOEXE $WORK/new/bin/go$GOEXE $WORK/new exec $WORK/bin/check$GOEXE $WORK/new/bin/${GOOS}_${GOARCH}/go$GOEXE $WORK/new +! stderr 'GOPATH set to GOROOT' -- check.go -- package main From cc7b4b3c3685a688638363bf5be9150b04b75945 Mon Sep 17 00:00:00 2001 From: Anton Telyshev Date: Sun, 29 Oct 2023 23:06:44 +0200 Subject: [PATCH 019/313] cmd/vet: add lost checks in doc Change-Id: Iacbcb582e263149fede734822cba2df4b8162968 Reviewed-on: https://go-review.googlesource.com/c/go/+/544015 Reviewed-by: Cherry Mui TryBot-Result: Gopher Robot Run-TryBot: Tim King LUCI-TryBot-Result: Go LUCI --- src/cmd/vet/doc.go | 54 +++++++++++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/src/cmd/vet/doc.go b/src/cmd/vet/doc.go index ba5b5ed967..5b2fa3d72f 100644 --- a/src/cmd/vet/doc.go +++ b/src/cmd/vet/doc.go @@ -27,28 +27,38 @@ program correctness. To list the available checks, run "go tool vet help": - asmdecl report mismatches between assembly files and Go declarations - assign check for useless assignments - atomic check for common mistakes using the sync/atomic package - bools check for common mistakes involving boolean operators - buildtag check that +build tags are well-formed and correctly located - cgocall detect some violations of the cgo pointer passing rules - composites check for unkeyed composite literals - copylocks check for locks erroneously passed by value - httpresponse check for mistakes using HTTP responses - loopclosure check references to loop variables from within nested functions - lostcancel check cancel func returned by context.WithCancel is called - nilfunc check for useless comparisons between functions and nil - printf check consistency of Printf format strings and arguments - shift check for shifts that equal or exceed the width of the integer - slog check for incorrect arguments to log/slog functions - stdmethods check signature of methods of well-known interfaces - structtag check that struct field tags conform to reflect.StructTag.Get - tests check for common mistaken usages of tests and examples - unmarshal report passing non-pointer or non-interface values to unmarshal - unreachable check for unreachable code - unsafeptr check for invalid conversions of uintptr to unsafe.Pointer - unusedresult check for unused results of calls to some functions + appends check for missing values after append + asmdecl report mismatches between assembly files and Go declarations + assign check for useless assignments + atomic check for common mistakes using the sync/atomic package + bools check for common mistakes involving boolean operators + buildtag check //go:build and // +build directives + cgocall detect some violations of the cgo pointer passing rules + composites check for unkeyed composite literals + copylocks check for locks erroneously passed by value + defers report common mistakes in defer statements + directive check Go toolchain directives such as //go:debug + errorsas report passing non-pointer or non-error values to errors.As + framepointer report assembly that clobbers the frame pointer before saving it + httpresponse check for mistakes using HTTP responses + ifaceassert detect impossible interface-to-interface type assertions + loopclosure check references to loop variables from within nested functions + lostcancel check cancel func returned by context.WithCancel is called + nilfunc check for useless comparisons between functions and nil + printf check consistency of Printf format strings and arguments + shift check for shifts that equal or exceed the width of the integer + sigchanyzer check for unbuffered channel of os.Signal + slog check for invalid structured logging calls + stdmethods check signature of methods of well-known interfaces + stringintconv check for string(int) conversions + structtag check that struct field tags conform to reflect.StructTag.Get + testinggoroutine report calls to (*testing.T).Fatal from goroutines started by a test + tests check for common mistaken usages of tests and examples + timeformat check for calls of (time.Time).Format or time.Parse with 2006-02-01 + unmarshal report passing non-pointer or non-interface values to unmarshal + unreachable check for unreachable code + unsafeptr check for invalid conversions of uintptr to unsafe.Pointer + unusedresult check for unused results of calls to some functions For details and flags of a particular check, such as printf, run "go tool vet help printf". From 195c88b202695e90b2ff41b3f1a03bc19685baa6 Mon Sep 17 00:00:00 2001 From: Jorropo Date: Wed, 8 Nov 2023 16:08:26 +0100 Subject: [PATCH 020/313] net/http: use pointers to array for copyBufPool This is inspired by CL 539915, I'm only submitting now that CL 456435 has been merged. This divide the number of objects kept alive by the heap by two and remove the slice header allocation in New and in the put back. Change-Id: Ibcd5166bac5a37f365a533e09a28f3b79f81ad58 Reviewed-on: https://go-review.googlesource.com/c/go/+/543515 Reviewed-by: Damien Neil Auto-Submit: Damien Neil Reviewed-by: qiulaidongfeng <2645477756@qq.com> LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek --- src/net/http/server.go | 22 ++++++++++++++-------- src/net/http/transfer.go | 5 ++--- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/net/http/server.go b/src/net/http/server.go index 7fa785dfee..36a03f4a32 100644 --- a/src/net/http/server.go +++ b/src/net/http/server.go @@ -575,9 +575,8 @@ type writerOnly struct { // to a *net.TCPConn with sendfile, or from a supported src type such // as a *net.TCPConn on Linux with splice. func (w *response) ReadFrom(src io.Reader) (n int64, err error) { - bufp := copyBufPool.Get().(*[]byte) - buf := *bufp - defer copyBufPool.Put(bufp) + buf := getCopyBuf() + defer putCopyBuf(buf) // Our underlying w.conn.rwc is usually a *TCPConn (with its // own ReadFrom method). If not, just fall back to the normal @@ -807,11 +806,18 @@ var ( bufioWriter4kPool sync.Pool ) -var copyBufPool = sync.Pool{ - New: func() any { - b := make([]byte, 32*1024) - return &b - }, +const copyBufPoolSize = 32 * 1024 + +var copyBufPool = sync.Pool{New: func() any { return new([copyBufPoolSize]byte) }} + +func getCopyBuf() []byte { + return copyBufPool.Get().(*[copyBufPoolSize]byte)[:] +} +func putCopyBuf(b []byte) { + if len(b) != copyBufPoolSize { + panic("trying to put back buffer of the wrong size in the copyBufPool") + } + copyBufPool.Put((*[copyBufPoolSize]byte)(b)) } func bufioWriterPool(size int) *sync.Pool { diff --git a/src/net/http/transfer.go b/src/net/http/transfer.go index dffff56b31..d787258487 100644 --- a/src/net/http/transfer.go +++ b/src/net/http/transfer.go @@ -410,9 +410,8 @@ func (t *transferWriter) writeBody(w io.Writer) (err error) { // // This function is only intended for use in writeBody. func (t *transferWriter) doBodyCopy(dst io.Writer, src io.Reader) (n int64, err error) { - bufp := copyBufPool.Get().(*[]byte) - buf := *bufp - defer copyBufPool.Put(bufp) + buf := getCopyBuf() + defer putCopyBuf(buf) n, err = io.CopyBuffer(dst, src, buf) if err != nil && err != io.EOF { From dc094f9c9613a2a8ed24ace1b5416170aa3a334b Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Mon, 20 Nov 2023 16:33:29 -0500 Subject: [PATCH 021/313] runtime: disable crash stack on Windows Apparently, on Windows, throwing an exception on a non-system- allocated crash stack causes EXCEPTION_STACK_OVERFLOW and hangs the process (see issue #63938). Disable crash stack for now, which gets us back the the behavior of Go 1.21. Fixes #63938. Change-Id: I4c090315b93b484e756b242f0de7a9e02f199261 Reviewed-on: https://go-review.googlesource.com/c/go/+/543996 Reviewed-by: Michael Knyszek TryBot-Result: Gopher Robot Run-TryBot: Cherry Mui Reviewed-by: Quim Muntal --- src/runtime/crash_test.go | 4 +--- src/runtime/proc.go | 5 ++++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/runtime/crash_test.go b/src/runtime/crash_test.go index ffd99f3a87..2ed0fd8f07 100644 --- a/src/runtime/crash_test.go +++ b/src/runtime/crash_test.go @@ -795,14 +795,12 @@ func TestG0StackOverflow(t *testing.T) { if runtime.GOOS == "ios" { testenv.SkipFlaky(t, 62671) } - if runtime.GOOS == "windows" && runtime.GOARCH == "arm64" { - testenv.SkipFlaky(t, 63938) // TODO(cherry): fix and unskip - } if os.Getenv("TEST_G0_STACK_OVERFLOW") != "1" { cmd := testenv.CleanCmdEnv(testenv.Command(t, os.Args[0], "-test.run=^TestG0StackOverflow$", "-test.v")) cmd.Env = append(cmd.Env, "TEST_G0_STACK_OVERFLOW=1") out, err := cmd.CombinedOutput() + t.Logf("output:\n%s", out) // Don't check err since it's expected to crash. if n := strings.Count(string(out), "morestack on g0\n"); n != 1 { t.Fatalf("%s\n(exit status %v)", out, err) diff --git a/src/runtime/proc.go b/src/runtime/proc.go index 18826abb06..edf692fd1a 100644 --- a/src/runtime/proc.go +++ b/src/runtime/proc.go @@ -576,7 +576,10 @@ func switchToCrashStack(fn func()) { abort() } -const crashStackImplemented = GOARCH == "amd64" || GOARCH == "arm64" || GOARCH == "mips64" || GOARCH == "mips64le" || GOARCH == "ppc64" || GOARCH == "ppc64le" || GOARCH == "riscv64" || GOARCH == "wasm" +// Disable crash stack on Windows for now. Apparently, throwing an exception +// on a non-system-allocated crash stack causes EXCEPTION_STACK_OVERFLOW and +// hangs the process (see issue 63938). +const crashStackImplemented = (GOARCH == "amd64" || GOARCH == "arm64" || GOARCH == "mips64" || GOARCH == "mips64le" || GOARCH == "ppc64" || GOARCH == "ppc64le" || GOARCH == "riscv64" || GOARCH == "wasm") && GOOS != "windows" //go:noescape func switchToCrashStack0(fn func()) // in assembly From 515f3c0da643a3c2dfcf494ac0a7cf8f65002f38 Mon Sep 17 00:00:00 2001 From: Jes Cok Date: Mon, 20 Nov 2023 13:37:33 +0000 Subject: [PATCH 022/313] reflect: tweak logic for 'case Array' in IsZero For 'case Array' in IsZero, check 'v.flag&flagIndir == 0' in the first place, rename 'array' to 'typ' for consistency, and remove stale comment. Add line breaks for long sentence in isZero. Change-Id: Id06d01fd61eefd205bf4626e6b920ae82b459455 GitHub-Last-Rev: 7225ca3f7b55cbef58387365ed8f3ff104236a06 GitHub-Pull-Request: golang/go#64270 Reviewed-on: https://go-review.googlesource.com/c/go/+/543656 TryBot-Result: Gopher Robot Reviewed-by: Keith Randall Run-TryBot: Jes Cok Reviewed-by: Keith Randall Auto-Submit: Keith Randall Reviewed-by: Cherry Mui --- src/reflect/value.go | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/reflect/value.go b/src/reflect/value.go index 2bd41f37fd..068bac0050 100644 --- a/src/reflect/value.go +++ b/src/reflect/value.go @@ -1598,24 +1598,23 @@ func (v Value) IsZero() bool { case Complex64, Complex128: return v.Complex() == 0 case Array: - array := (*abi.ArrayType)(unsafe.Pointer(v.typ())) - // Avoid performance degradation of small benchmarks. + if v.flag&flagIndir == 0 { + return v.ptr == nil + } + typ := (*abi.ArrayType)(unsafe.Pointer(v.typ())) // If the type is comparable, then compare directly with zero. - if array.Equal != nil && array.Size() <= maxZero { - if v.flag&flagIndir == 0 { - return v.ptr == nil - } + if typ.Equal != nil && typ.Size() <= maxZero { // v.ptr doesn't escape, as Equal functions are compiler generated // and never escape. The escape analysis doesn't know, as it is a // function pointer call. - return array.Equal(noescape(v.ptr), unsafe.Pointer(&zeroVal[0])) + return typ.Equal(noescape(v.ptr), unsafe.Pointer(&zeroVal[0])) } - if array.TFlag&abi.TFlagRegularMemory != 0 { + if typ.TFlag&abi.TFlagRegularMemory != 0 { // For some types where the zero value is a value where all bits of this type are 0 // optimize it. - return isZero(unsafe.Slice(((*byte)(v.ptr)), array.Size())) + return isZero(unsafe.Slice(((*byte)(v.ptr)), typ.Size())) } - n := int(array.Len) + n := int(typ.Len) for i := 0; i < n; i++ { if !v.Index(i).IsZero() { return false @@ -1663,7 +1662,7 @@ func isZero(b []byte) bool { return true } const n = 32 - // Align memory addresses to 8 bytes + // Align memory addresses to 8 bytes. for uintptr(unsafe.Pointer(&b[0]))%8 != 0 { if b[0] != 0 { return false @@ -1690,7 +1689,14 @@ func isZero(b []byte) bool { w = w[1:] } for len(w) >= n { - if w[0] != 0 || w[1] != 0 || w[2] != 0 || w[3] != 0 || w[4] != 0 || w[5] != 0 || w[6] != 0 || w[7] != 0 || w[8] != 0 || w[9] != 0 || w[10] != 0 || w[11] != 0 || w[12] != 0 || w[13] != 0 || w[14] != 0 || w[15] != 0 || w[16] != 0 || w[17] != 0 || w[18] != 0 || w[19] != 0 || w[20] != 0 || w[21] != 0 || w[22] != 0 || w[23] != 0 || w[24] != 0 || w[25] != 0 || w[26] != 0 || w[27] != 0 || w[28] != 0 || w[29] != 0 || w[30] != 0 || w[31] != 0 { + if w[0] != 0 || w[1] != 0 || w[2] != 0 || w[3] != 0 || + w[4] != 0 || w[5] != 0 || w[6] != 0 || w[7] != 0 || + w[8] != 0 || w[9] != 0 || w[10] != 0 || w[11] != 0 || + w[12] != 0 || w[13] != 0 || w[14] != 0 || w[15] != 0 || + w[16] != 0 || w[17] != 0 || w[18] != 0 || w[19] != 0 || + w[20] != 0 || w[21] != 0 || w[22] != 0 || w[23] != 0 || + w[24] != 0 || w[25] != 0 || w[26] != 0 || w[27] != 0 || + w[28] != 0 || w[29] != 0 || w[30] != 0 || w[31] != 0 { return false } w = w[n:] From 8be8bfeaa2e9fb9372d8507f076c6307e8237c54 Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Thu, 2 Nov 2023 11:25:07 -0400 Subject: [PATCH 023/313] cmd/compile/internal/ir: add batch-mode reassignment detection oracle Add a new helper type 'ReassignOracle', useful for doing "batch mode" reassignment analysis, e.g. deciding whether a given ir.Name or (chain of connected names) has a single definition and is never reassigned. The intended usage model is for clients to create/initialize a ReassignOracle for a given function, then make a series of queries using it (with the understanding that changing/mutating the func body IR can invalidate the info cached in the oracle). This oracle is intended to provide the same sort of analysis that ir.StaticValue and ir.Reassigned carry out, but at a much reduced cost in compile time. Notes: - the new helper isn't actually used for anything useful in this patch; it will be hooked into the inline heuristics code as part of a subsequent CL. - this is probably not an ideal long-term solution; it would be better to switch to a scheme based a flag on ir.Name, as opposed to a side table. Change-Id: I283e748e440a9f595df495f6aa48ee9c498702d9 Reviewed-on: https://go-review.googlesource.com/c/go/+/539319 Reviewed-by: Matthew Dempsky LUCI-TryBot-Result: Go LUCI --- .../compile/internal/ir/check_reassign_no.go | 9 + .../compile/internal/ir/check_reassign_yes.go | 9 + src/cmd/compile/internal/ir/expr.go | 2 + .../internal/ir/reassign_consistency_check.go | 46 ++++ src/cmd/compile/internal/ir/reassignment.go | 205 ++++++++++++++++++ 5 files changed, 271 insertions(+) create mode 100644 src/cmd/compile/internal/ir/check_reassign_no.go create mode 100644 src/cmd/compile/internal/ir/check_reassign_yes.go create mode 100644 src/cmd/compile/internal/ir/reassign_consistency_check.go create mode 100644 src/cmd/compile/internal/ir/reassignment.go diff --git a/src/cmd/compile/internal/ir/check_reassign_no.go b/src/cmd/compile/internal/ir/check_reassign_no.go new file mode 100644 index 0000000000..8290a7da7e --- /dev/null +++ b/src/cmd/compile/internal/ir/check_reassign_no.go @@ -0,0 +1,9 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !checknewoldreassignment + +package ir + +const consistencyCheckEnabled = false diff --git a/src/cmd/compile/internal/ir/check_reassign_yes.go b/src/cmd/compile/internal/ir/check_reassign_yes.go new file mode 100644 index 0000000000..30876cca20 --- /dev/null +++ b/src/cmd/compile/internal/ir/check_reassign_yes.go @@ -0,0 +1,9 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build checknewoldreassignment + +package ir + +const consistencyCheckEnabled = true diff --git a/src/cmd/compile/internal/ir/expr.go b/src/cmd/compile/internal/ir/expr.go index 1bcd648282..da5b437f99 100644 --- a/src/cmd/compile/internal/ir/expr.go +++ b/src/cmd/compile/internal/ir/expr.go @@ -923,6 +923,8 @@ FindRHS: // NB: global variables are always considered to be re-assigned. // TODO: handle initial declaration not including an assignment and // followed by a single assignment? +// NOTE: any changes made here should also be made in the corresponding +// code in the ReassignOracle.Init method. func Reassigned(name *Name) bool { if name.Op() != ONAME { base.Fatalf("reassigned %v", name) diff --git a/src/cmd/compile/internal/ir/reassign_consistency_check.go b/src/cmd/compile/internal/ir/reassign_consistency_check.go new file mode 100644 index 0000000000..e4d928d132 --- /dev/null +++ b/src/cmd/compile/internal/ir/reassign_consistency_check.go @@ -0,0 +1,46 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ir + +import ( + "cmd/compile/internal/base" + "cmd/internal/src" + "fmt" + "path/filepath" + "strings" +) + +// checkStaticValueResult compares the result from ReassignOracle.StaticValue +// with the corresponding result from ir.StaticValue to make sure they agree. +// This method is called only when turned on via build tag. +func checkStaticValueResult(n Node, newres Node) { + oldres := StaticValue(n) + if oldres != newres { + base.Fatalf("%s: new/old static value disagreement on %v:\nnew=%v\nold=%v", fmtFullPos(n.Pos()), n, newres, oldres) + } +} + +// checkStaticValueResult compares the result from ReassignOracle.Reassigned +// with the corresponding result from ir.Reassigned to make sure they agree. +// This method is called only when turned on via build tag. +func checkReassignedResult(n *Name, newres bool) { + origres := Reassigned(n) + if newres != origres { + base.Fatalf("%s: new/old reassigned disagreement on %v (class %s) newres=%v oldres=%v", fmtFullPos(n.Pos()), n, n.Class.String(), newres, origres) + } +} + +// fmtFullPos returns a verbose dump for pos p, including inlines. +func fmtFullPos(p src.XPos) string { + var sb strings.Builder + sep := "" + base.Ctxt.AllPos(p, func(pos src.Pos) { + fmt.Fprintf(&sb, sep) + sep = "|" + file := filepath.Base(pos.Filename()) + fmt.Fprintf(&sb, "%s:%d:%d", file, pos.Line(), pos.Col()) + }) + return sb.String() +} diff --git a/src/cmd/compile/internal/ir/reassignment.go b/src/cmd/compile/internal/ir/reassignment.go new file mode 100644 index 0000000000..9974292471 --- /dev/null +++ b/src/cmd/compile/internal/ir/reassignment.go @@ -0,0 +1,205 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ir + +import ( + "cmd/compile/internal/base" +) + +// A ReassignOracle efficiently answers queries about whether local +// variables are reassigned. This helper works by looking for function +// params and short variable declarations (e.g. +// https://go.dev/ref/spec#Short_variable_declarations) that are +// neither address taken nor subsequently re-assigned. It is intended +// to operate much like "ir.StaticValue" and "ir.Reassigned", but in a +// way that does just a single walk of the containing function (as +// opposed to a new walk on every call). +type ReassignOracle struct { + fn *Func + // maps candidate name to its defining assignment (or for + // for params, defining func). + singleDef map[*Name]Node +} + +// Init initializes the oracle based on the IR in function fn, laying +// the groundwork for future calls to the StaticValue and Reassigned +// methods. If the fn's IR is subsequently modified, Init must be +// called again. +func (ro *ReassignOracle) Init(fn *Func) { + ro.fn = fn + + // Collect candidate map. Start by adding function parameters + // explicitly. + ro.singleDef = make(map[*Name]Node) + sig := fn.Type() + numParams := sig.NumRecvs() + sig.NumParams() + for _, param := range fn.Dcl[:numParams] { + if IsBlank(param) { + continue + } + // For params, use func itself as defining node. + ro.singleDef[param] = fn + } + + // Walk the function body to discover any locals assigned + // via ":=" syntax (e.g. "a := "). + var findLocals func(n Node) bool + findLocals = func(n Node) bool { + if nn, ok := n.(*Name); ok { + if nn.Defn != nil && !nn.Addrtaken() && nn.Class == PAUTO { + ro.singleDef[nn] = nn.Defn + } + } else if nn, ok := n.(*ClosureExpr); ok { + Any(nn.Func, findLocals) + } + return false + } + Any(fn, findLocals) + + outerName := func(x Node) *Name { + if x == nil { + return nil + } + n, ok := OuterValue(x).(*Name) + if ok { + return n.Canonical() + } + return nil + } + + // pruneIfNeeded examines node nn appearing on the left hand side + // of assignment statement asn to see if it contains a reassignment + // to any nodes in our candidate map ro.singleDef; if a reassignment + // is found, the corresponding name is deleted from singleDef. + pruneIfNeeded := func(nn Node, asn Node) { + oname := outerName(nn) + if oname == nil { + return + } + defn, ok := ro.singleDef[oname] + if !ok { + return + } + // any assignment to a param invalidates the entry. + paramAssigned := oname.Class == PPARAM + // assignment to local ok iff assignment is its orig def. + localAssigned := (oname.Class == PAUTO && asn != defn) + if paramAssigned || localAssigned { + // We found an assignment to name N that doesn't + // correspond to its original definition; remove + // from candidates. + delete(ro.singleDef, oname) + } + } + + // Prune away anything that looks assigned. This code modeled after + // similar code in ir.Reassigned; any changes there should be made + // here as well. + var do func(n Node) bool + do = func(n Node) bool { + switch n.Op() { + case OAS: + asn := n.(*AssignStmt) + pruneIfNeeded(asn.X, n) + case OAS2, OAS2FUNC, OAS2MAPR, OAS2DOTTYPE, OAS2RECV, OSELRECV2: + asn := n.(*AssignListStmt) + for _, p := range asn.Lhs { + pruneIfNeeded(p, n) + } + case OASOP: + asn := n.(*AssignOpStmt) + pruneIfNeeded(asn.X, n) + case ORANGE: + rs := n.(*RangeStmt) + pruneIfNeeded(rs.Key, n) + pruneIfNeeded(rs.Value, n) + case OCLOSURE: + n := n.(*ClosureExpr) + Any(n.Func, do) + } + return false + } + Any(fn, do) +} + +// StaticValue method has the same semantics as the ir package function +// of the same name; see comments on [StaticValue]. +func (ro *ReassignOracle) StaticValue(n Node) Node { + arg := n + for { + if n.Op() == OCONVNOP { + n = n.(*ConvExpr).X + continue + } + + if n.Op() == OINLCALL { + n = n.(*InlinedCallExpr).SingleResult() + continue + } + + n1 := ro.staticValue1(n) + if n1 == nil { + if consistencyCheckEnabled { + checkStaticValueResult(arg, n) + } + return n + } + n = n1 + } +} + +func (ro *ReassignOracle) staticValue1(nn Node) Node { + if nn.Op() != ONAME { + return nil + } + n := nn.(*Name).Canonical() + if n.Class != PAUTO { + return nil + } + + defn := n.Defn + if defn == nil { + return nil + } + + var rhs Node +FindRHS: + switch defn.Op() { + case OAS: + defn := defn.(*AssignStmt) + rhs = defn.Y + case OAS2: + defn := defn.(*AssignListStmt) + for i, lhs := range defn.Lhs { + if lhs == n { + rhs = defn.Rhs[i] + break FindRHS + } + } + base.Fatalf("%v missing from LHS of %v", n, defn) + default: + return nil + } + if rhs == nil { + base.Fatalf("RHS is nil: %v", defn) + } + + if _, ok := ro.singleDef[n]; !ok { + return nil + } + + return rhs +} + +// Reassigned method has the same semantics as the ir package function +// of the same name; see comments on [Reassigned] for more info. +func (ro *ReassignOracle) Reassigned(n *Name) bool { + _, ok := ro.singleDef[n] + result := !ok + if consistencyCheckEnabled { + checkReassignedResult(n, result) + } + return result +} From 78d037b0e016260819f2ff1dac745eda71070a18 Mon Sep 17 00:00:00 2001 From: qiulaidongfeng <2645477756@qq.com> Date: Mon, 20 Nov 2023 23:08:53 +0000 Subject: [PATCH 024/313] os: avoid TestFileChdir fail when GOROOT is a symbolic link If GOROOT is a symbolic link, the paths obtained from the first and second Getwd of TestFileChdir are different, and this CL fixes the test failure in this situation. Fixes #64281 Change-Id: I53026b6c54a54be08833396e2c7081ca3ab8c282 GitHub-Last-Rev: 5cc418e6255f6fa530e5a43e3b4d96759e604571 GitHub-Pull-Request: golang/go#64001 Reviewed-on: https://go-review.googlesource.com/c/go/+/540521 Reviewed-by: Michael Knyszek TryBot-Result: Gopher Robot Auto-Submit: Bryan Mills Reviewed-by: Bryan Mills LUCI-TryBot-Result: Go LUCI --- src/os/os_test.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/os/os_test.go b/src/os/os_test.go index ae12b9ce1b..7e0e0b90be 100644 --- a/src/os/os_test.go +++ b/src/os/os_test.go @@ -1620,8 +1620,17 @@ func TestFileChdir(t *testing.T) { if err != nil { t.Fatalf("Getwd: %s", err) } - if !equal(wdNew, wd) { - t.Fatalf("fd.Chdir failed, got %s, want %s", wdNew, wd) + + wdInfo, err := fd.Stat() + if err != nil { + t.Fatal(err) + } + newInfo, err := Stat(wdNew) + if err != nil { + t.Fatal(err) + } + if !SameFile(wdInfo, newInfo) { + t.Fatalf("fd.Chdir failed: got %s, want %s", wdNew, wd) } } From 8eecf26e3f13192be66e908cc55646b7f71c568c Mon Sep 17 00:00:00 2001 From: Filippo Valsorda Date: Tue, 21 Nov 2023 16:37:07 +0100 Subject: [PATCH 025/313] crypto/tls: disable ExportKeyingMaterial without EMS Fixes #43922 Change-Id: Idaad7daa6784807ae3a5e4d944e88e13d01fd0b2 Reviewed-on: https://go-review.googlesource.com/c/go/+/544155 Reviewed-by: Michael Knyszek Reviewed-by: Roland Shoemaker LUCI-TryBot-Result: Go LUCI Auto-Submit: Filippo Valsorda --- doc/godebug.md | 6 ++++++ src/crypto/tls/common.go | 10 ++++++---- src/crypto/tls/conn.go | 13 ++++++++++++- src/crypto/tls/prf.go | 11 +++++++++-- src/internal/godebugs/table.go | 1 + src/runtime/metrics/doc.go | 4 ++++ 6 files changed, 38 insertions(+), 7 deletions(-) diff --git a/doc/godebug.md b/doc/godebug.md index 9235635bdd..50033b6f17 100644 --- a/doc/godebug.md +++ b/doc/godebug.md @@ -159,6 +159,12 @@ Go 1.22 changed the default TLS cipher suites used by clients and servers when not explicitly configured, removing the cipher suites which used RSA based key exchange. The default can be revert using the [`tlsrsakex` setting](/pkg/crypto/tls/#Config). +Go 1.22 disabled +[`ConnectionState.ExportKeyingMaterial`](/pkg/crypto/tls/#ConnectionState.ExportKeyingMaterial) +when the connection supports neither TLS 1.3 nor Extended Master Secret +(implemented in Go 1.21). It can be reenabled with the [`tlsunsafeekm` +setting](/pkg/crypto/tls/#ConnectionState.ExportKeyingMaterial). + ### Go 1.21 Go 1.21 made it a run-time error to call `panic` with a nil interface value, diff --git a/src/crypto/tls/common.go b/src/crypto/tls/common.go index 6058824ded..faa460e7fa 100644 --- a/src/crypto/tls/common.go +++ b/src/crypto/tls/common.go @@ -304,11 +304,13 @@ type ConnectionState struct { // ExportKeyingMaterial returns length bytes of exported key material in a new // slice as defined in RFC 5705. If context is nil, it is not used as part of // the seed. If the connection was set to allow renegotiation via -// Config.Renegotiation, this function will return an error. +// Config.Renegotiation, or if the connections supports neither TLS 1.3 nor +// Extended Master Secret, this function will return an error. // -// There are conditions in which the returned values might not be unique to a -// connection. See the Security Considerations sections of RFC 5705 and RFC 7627, -// and https://mitls.org/pages/attacks/3SHAKE#channelbindings. +// Exporting key material without Extended Master Secret or TLS 1.3 was disabled +// in Go 1.22 due to security issues (see the Security Considerations sections +// of RFC 5705 and RFC 7627), but can be re-enabled with the GODEBUG setting +// tlsunsafeekm=1. func (cs *ConnectionState) ExportKeyingMaterial(label string, context []byte, length int) ([]byte, error) { return cs.ekm(label, context, length) } diff --git a/src/crypto/tls/conn.go b/src/crypto/tls/conn.go index 647e5b85b6..3e8832f947 100644 --- a/src/crypto/tls/conn.go +++ b/src/crypto/tls/conn.go @@ -15,6 +15,7 @@ import ( "errors" "fmt" "hash" + "internal/godebug" "io" "net" "sync" @@ -1599,6 +1600,8 @@ func (c *Conn) ConnectionState() ConnectionState { return c.connectionStateLocked() } +var ekmgodebug = godebug.New("tlsunsafeekm") + func (c *Conn) connectionStateLocked() ConnectionState { var state ConnectionState state.HandshakeComplete = c.isHandshakeComplete.Load() @@ -1620,7 +1623,15 @@ func (c *Conn) connectionStateLocked() ConnectionState { } } if c.config.Renegotiation != RenegotiateNever { - state.ekm = noExportedKeyingMaterial + state.ekm = noEKMBecauseRenegotiation + } else if c.vers != VersionTLS13 && !c.extMasterSecret { + state.ekm = func(label string, context []byte, length int) ([]byte, error) { + if ekmgodebug.Value() == "1" { + ekmgodebug.IncNonDefault() + return c.ekm(label, context, length) + } + return noEKMBecauseNoEMS(label, context, length) + } } else { state.ekm = c.ekm } diff --git a/src/crypto/tls/prf.go b/src/crypto/tls/prf.go index 20bac96e86..a7fa3370e6 100644 --- a/src/crypto/tls/prf.go +++ b/src/crypto/tls/prf.go @@ -252,13 +252,20 @@ func (h *finishedHash) discardHandshakeBuffer() { h.buffer = nil } -// noExportedKeyingMaterial is used as a value of +// noEKMBecauseRenegotiation is used as a value of // ConnectionState.ekm when renegotiation is enabled and thus // we wish to fail all key-material export requests. -func noExportedKeyingMaterial(label string, context []byte, length int) ([]byte, error) { +func noEKMBecauseRenegotiation(label string, context []byte, length int) ([]byte, error) { return nil, errors.New("crypto/tls: ExportKeyingMaterial is unavailable when renegotiation is enabled") } +// noEKMBecauseNoEMS is used as a value of ConnectionState.ekm when Extended +// Master Secret is not negotiated and thus we wish to fail all key-material +// export requests. +func noEKMBecauseNoEMS(label string, context []byte, length int) ([]byte, error) { + return nil, errors.New("crypto/tls: ExportKeyingMaterial is unavailable when neither TLS 1.3 nor Extended Master Secret are negotiated; override with GODEBUG=tlsunsafeekm=1") +} + // ekmFromMasterSecret generates exported keying material as defined in RFC 5705. func ekmFromMasterSecret(version uint16, suite *cipherSuite, masterSecret, clientRandom, serverRandom []byte) func(string, []byte, int) ([]byte, error) { return func(label string, context []byte, length int) ([]byte, error) { diff --git a/src/internal/godebugs/table.go b/src/internal/godebugs/table.go index 92a0d089ca..3a76214b39 100644 --- a/src/internal/godebugs/table.go +++ b/src/internal/godebugs/table.go @@ -48,6 +48,7 @@ var All = []Info{ {Name: "tls10server", Package: "crypto/tls", Changed: 22, Old: "1"}, {Name: "tlsmaxrsasize", Package: "crypto/tls"}, {Name: "tlsrsakex", Package: "crypto/tls", Changed: 22, Old: "1"}, + {Name: "tlsunsafeekm", Package: "crypto/tls", Changed: 22, Old: "1"}, {Name: "x509sha1", Package: "crypto/x509"}, {Name: "x509usefallbackroots", Package: "crypto/x509"}, {Name: "zipinsecurepath", Package: "archive/zip"}, diff --git a/src/runtime/metrics/doc.go b/src/runtime/metrics/doc.go index 5be6c32bfa..8df475666e 100644 --- a/src/runtime/metrics/doc.go +++ b/src/runtime/metrics/doc.go @@ -314,6 +314,10 @@ Below is the full list of supported metrics, ordered lexicographically. The number of non-default behaviors executed by the crypto/tls package due to a non-default GODEBUG=tlsrsakex=... setting. + /godebug/non-default-behavior/tlsunsafeekm:events + The number of non-default behaviors executed by the crypto/tls + package due to a non-default GODEBUG=tlsunsafeekm=... setting. + /godebug/non-default-behavior/x509sha1:events The number of non-default behaviors executed by the crypto/x509 package due to a non-default GODEBUG=x509sha1=... setting. From bbcd85528cbad2dca72378181cb230e59a43ef80 Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Fri, 27 Oct 2023 08:58:16 -0400 Subject: [PATCH 026/313] cmd/compile/internal/inline: rework use of ir.StaticValue When running the code to compute function properties that feed inlining heuristics, the existing heuristics implementation makes fairly extensive use of ir.StaticValue and ir.Reassigned to sharpen the analysis. These calls turn out to cause a significant compile time increase, due to the fact that each call can potentially walk every node in the IR for the function. To help with this problem, switch the heuristics code over to using the new "batch mode" reassignment helper added in the previous CL. Change-Id: Ib15a62416134386e34b7cfa1130a4b413a37b225 Reviewed-on: https://go-review.googlesource.com/c/go/+/537977 LUCI-TryBot-Result: Go LUCI Reviewed-by: Matthew Dempsky --- .../internal/inline/inlheur/analyze.go | 15 +- .../inline/inlheur/analyze_func_callsites.go | 144 ++++++++++-------- .../inline/inlheur/analyze_func_params.go | 16 +- .../inline/inlheur/analyze_func_returns.go | 122 ++++----------- .../compile/internal/inline/inlheur/names.go | 129 ++++++++++++++++ .../inline/inlheur/score_callresult_uses.go | 6 +- .../internal/inline/inlheur/scoring.go | 40 +++-- 7 files changed, 287 insertions(+), 185 deletions(-) create mode 100644 src/cmd/compile/internal/inline/inlheur/names.go diff --git a/src/cmd/compile/internal/inline/inlheur/analyze.go b/src/cmd/compile/internal/inline/inlheur/analyze.go index 6c3db92afe..93073b9851 100644 --- a/src/cmd/compile/internal/inline/inlheur/analyze.go +++ b/src/cmd/compile/internal/inline/inlheur/analyze.go @@ -98,12 +98,13 @@ func AnalyzeFunc(fn *ir.Func, canInline func(*ir.Func), budgetForFunc func(*ir.F // inlinable; if it is over the default hairyness limit and it // doesn't have any interesting properties, then we don't want // the overhead of writing out its inline body. + nameFinder := newNameFinder(fn) for i := len(funcs) - 1; i >= 0; i-- { f := funcs[i] if f.OClosure != nil && !f.InlinabilityChecked() { canInline(f) } - funcProps := analyzeFunc(f, inlineMaxBudget) + funcProps := analyzeFunc(f, inlineMaxBudget, nameFinder) revisitInlinability(f, funcProps, budgetForFunc) if f.Inl != nil { f.Inl.Properties = funcProps.SerializeToString() @@ -122,11 +123,11 @@ func TearDown() { scoreCallsCache.csl = nil } -func analyzeFunc(fn *ir.Func, inlineMaxBudget int) *FuncProps { +func analyzeFunc(fn *ir.Func, inlineMaxBudget int, nf *nameFinder) *FuncProps { if funcInlHeur, ok := fpmap[fn]; ok { return funcInlHeur.props } - funcProps, fcstab := computeFuncProps(fn, inlineMaxBudget) + funcProps, fcstab := computeFuncProps(fn, inlineMaxBudget, nf) file, line := fnFileLine(fn) entry := fnInlHeur{ fname: fn.Sym().Name, @@ -163,7 +164,7 @@ func revisitInlinability(fn *ir.Func, funcProps *FuncProps, budgetForFunc func(* // computeFuncProps examines the Go function 'fn' and computes for it // a function "properties" object, to be used to drive inlining // heuristics. See comments on the FuncProps type for more info. -func computeFuncProps(fn *ir.Func, inlineMaxBudget int) (*FuncProps, CallSiteTab) { +func computeFuncProps(fn *ir.Func, inlineMaxBudget int, nf *nameFinder) (*FuncProps, CallSiteTab) { if debugTrace&debugTraceFuncs != 0 { fmt.Fprintf(os.Stderr, "=-= starting analysis of func %v:\n%+v\n", fn, fn) @@ -171,13 +172,13 @@ func computeFuncProps(fn *ir.Func, inlineMaxBudget int) (*FuncProps, CallSiteTab funcProps := new(FuncProps) ffa := makeFuncFlagsAnalyzer(fn) analyzers := []propAnalyzer{ffa} - analyzers = addResultsAnalyzer(fn, analyzers, funcProps, inlineMaxBudget) - analyzers = addParamsAnalyzer(fn, analyzers, funcProps) + analyzers = addResultsAnalyzer(fn, analyzers, funcProps, inlineMaxBudget, nf) + analyzers = addParamsAnalyzer(fn, analyzers, funcProps, nf) runAnalyzersOnFunction(fn, analyzers) for _, a := range analyzers { a.setResults(funcProps) } - cstab := computeCallSiteTable(fn, fn.Body, nil, ffa.panicPathTable(), 0) + cstab := computeCallSiteTable(fn, fn.Body, nil, ffa.panicPathTable(), 0, nf) return funcProps, cstab } diff --git a/src/cmd/compile/internal/inline/inlheur/analyze_func_callsites.go b/src/cmd/compile/internal/inline/inlheur/analyze_func_callsites.go index 3e285d5181..36ebe18b82 100644 --- a/src/cmd/compile/internal/inline/inlheur/analyze_func_callsites.go +++ b/src/cmd/compile/internal/inline/inlheur/analyze_func_callsites.go @@ -14,23 +14,37 @@ import ( ) type callSiteAnalyzer struct { + fn *ir.Func + *nameFinder +} + +type callSiteTableBuilder struct { + fn *ir.Func + *nameFinder cstab CallSiteTab - fn *ir.Func ptab map[ir.Node]pstate nstack []ir.Node loopNest int isInit bool } -func makeCallSiteAnalyzer(fn *ir.Func, cstab CallSiteTab, ptab map[ir.Node]pstate, loopNestingLevel int) *callSiteAnalyzer { - isInit := fn.IsPackageInit() || strings.HasPrefix(fn.Sym().Name, "init.") +func makeCallSiteAnalyzer(fn *ir.Func) *callSiteAnalyzer { return &callSiteAnalyzer{ - fn: fn, - cstab: cstab, - ptab: ptab, - isInit: isInit, - loopNest: loopNestingLevel, - nstack: []ir.Node{fn}, + fn: fn, + nameFinder: newNameFinder(fn), + } +} + +func makeCallSiteTableBuilder(fn *ir.Func, cstab CallSiteTab, ptab map[ir.Node]pstate, loopNestingLevel int, nf *nameFinder) *callSiteTableBuilder { + isInit := fn.IsPackageInit() || strings.HasPrefix(fn.Sym().Name, "init.") + return &callSiteTableBuilder{ + fn: fn, + cstab: cstab, + ptab: ptab, + isInit: isInit, + loopNest: loopNestingLevel, + nstack: []ir.Node{fn}, + nameFinder: nf, } } @@ -39,22 +53,22 @@ func makeCallSiteAnalyzer(fn *ir.Func, cstab CallSiteTab, ptab map[ir.Node]pstat // specific subtree within the AST for a function. The main intended // use cases are for 'region' to be either A) an entire function body, // or B) an inlined call expression. -func computeCallSiteTable(fn *ir.Func, region ir.Nodes, cstab CallSiteTab, ptab map[ir.Node]pstate, loopNestingLevel int) CallSiteTab { - csa := makeCallSiteAnalyzer(fn, cstab, ptab, loopNestingLevel) +func computeCallSiteTable(fn *ir.Func, region ir.Nodes, cstab CallSiteTab, ptab map[ir.Node]pstate, loopNestingLevel int, nf *nameFinder) CallSiteTab { + cstb := makeCallSiteTableBuilder(fn, cstab, ptab, loopNestingLevel, nf) var doNode func(ir.Node) bool doNode = func(n ir.Node) bool { - csa.nodeVisitPre(n) + cstb.nodeVisitPre(n) ir.DoChildren(n, doNode) - csa.nodeVisitPost(n) + cstb.nodeVisitPost(n) return false } for _, n := range region { doNode(n) } - return csa.cstab + return cstb.cstab } -func (csa *callSiteAnalyzer) flagsForNode(call *ir.CallExpr) CSPropBits { +func (cstb *callSiteTableBuilder) flagsForNode(call *ir.CallExpr) CSPropBits { var r CSPropBits if debugTrace&debugTraceCalls != 0 { @@ -63,21 +77,21 @@ func (csa *callSiteAnalyzer) flagsForNode(call *ir.CallExpr) CSPropBits { } // Set a bit if this call is within a loop. - if csa.loopNest > 0 { + if cstb.loopNest > 0 { r |= CallSiteInLoop } // Set a bit if the call is within an init function (either // compiler-generated or user-written). - if csa.isInit { + if cstb.isInit { r |= CallSiteInInitFunc } // Decide whether to apply the panic path heuristic. Hack: don't // apply this heuristic in the function "main.main" (mostly just // to avoid annoying users). - if !isMainMain(csa.fn) { - r = csa.determinePanicPathBits(call, r) + if !isMainMain(cstb.fn) { + r = cstb.determinePanicPathBits(call, r) } return r @@ -88,15 +102,15 @@ func (csa *callSiteAnalyzer) flagsForNode(call *ir.CallExpr) CSPropBits { // panic/exit. Do this by walking back up the node stack to see if we // can find either A) an enclosing panic, or B) a statement node that // we've determined leads to a panic/exit. -func (csa *callSiteAnalyzer) determinePanicPathBits(call ir.Node, r CSPropBits) CSPropBits { - csa.nstack = append(csa.nstack, call) +func (cstb *callSiteTableBuilder) determinePanicPathBits(call ir.Node, r CSPropBits) CSPropBits { + cstb.nstack = append(cstb.nstack, call) defer func() { - csa.nstack = csa.nstack[:len(csa.nstack)-1] + cstb.nstack = cstb.nstack[:len(cstb.nstack)-1] }() - for ri := range csa.nstack[:len(csa.nstack)-1] { - i := len(csa.nstack) - ri - 1 - n := csa.nstack[i] + for ri := range cstb.nstack[:len(cstb.nstack)-1] { + i := len(cstb.nstack) - ri - 1 + n := cstb.nstack[i] _, isCallExpr := n.(*ir.CallExpr) _, isStmt := n.(ir.Stmt) if isCallExpr { @@ -104,7 +118,7 @@ func (csa *callSiteAnalyzer) determinePanicPathBits(call ir.Node, r CSPropBits) } if debugTrace&debugTraceCalls != 0 { - ps, inps := csa.ptab[n] + ps, inps := cstb.ptab[n] fmt.Fprintf(os.Stderr, "=-= callpar %d op=%s ps=%s inptab=%v stmt=%v\n", i, n.Op().String(), ps.String(), inps, isStmt) } @@ -112,7 +126,7 @@ func (csa *callSiteAnalyzer) determinePanicPathBits(call ir.Node, r CSPropBits) r |= CallSiteOnPanicPath break } - if v, ok := csa.ptab[n]; ok { + if v, ok := cstb.ptab[n]; ok { if v == psCallsPanic { r |= CallSiteOnPanicPath break @@ -126,16 +140,15 @@ func (csa *callSiteAnalyzer) determinePanicPathBits(call ir.Node, r CSPropBits) } // propsForArg returns property bits for a given call argument expression arg. -func (csa *callSiteAnalyzer) propsForArg(arg ir.Node) ActualExprPropBits { - _, islit := isLiteral(arg) - if islit { +func (cstb *callSiteTableBuilder) propsForArg(arg ir.Node) ActualExprPropBits { + if cval := cstb.constValue(arg); cval != nil { return ActualExprConstant } - if isConcreteConvIface(arg) { + if cstb.isConcreteConvIface(arg) { return ActualExprIsConcreteConvIface } - fname, isfunc, _ := isFuncName(arg) - if isfunc { + fname := cstb.funcName(arg) + if fname != nil { if fn := fname.Func; fn != nil && typecheck.HaveInlineBody(fn) { return ActualExprIsInlinableFunc } @@ -149,11 +162,11 @@ func (csa *callSiteAnalyzer) propsForArg(arg ir.Node) ActualExprPropBits { // expression; these will be stored in the CallSite object for a given // call and then consulted when scoring. If no arg has any interesting // properties we try to save some space and return a nil slice. -func (csa *callSiteAnalyzer) argPropsForCall(ce *ir.CallExpr) []ActualExprPropBits { +func (cstb *callSiteTableBuilder) argPropsForCall(ce *ir.CallExpr) []ActualExprPropBits { rv := make([]ActualExprPropBits, len(ce.Args)) somethingInteresting := false for idx := range ce.Args { - argProp := csa.propsForArg(ce.Args[idx]) + argProp := cstb.propsForArg(ce.Args[idx]) somethingInteresting = somethingInteresting || (argProp != 0) rv[idx] = argProp } @@ -163,9 +176,9 @@ func (csa *callSiteAnalyzer) argPropsForCall(ce *ir.CallExpr) []ActualExprPropBi return rv } -func (csa *callSiteAnalyzer) addCallSite(callee *ir.Func, call *ir.CallExpr) { - flags := csa.flagsForNode(call) - argProps := csa.argPropsForCall(call) +func (cstb *callSiteTableBuilder) addCallSite(callee *ir.Func, call *ir.CallExpr) { + flags := cstb.flagsForNode(call) + argProps := cstb.argPropsForCall(call) if debugTrace&debugTraceCalls != 0 { fmt.Fprintf(os.Stderr, "=-= props %+v for call %v\n", argProps, call) } @@ -173,12 +186,12 @@ func (csa *callSiteAnalyzer) addCallSite(callee *ir.Func, call *ir.CallExpr) { cs := &CallSite{ Call: call, Callee: callee, - Assign: csa.containingAssignment(call), + Assign: cstb.containingAssignment(call), ArgProps: argProps, Flags: flags, - ID: uint(len(csa.cstab)), + ID: uint(len(cstb.cstab)), } - if _, ok := csa.cstab[call]; ok { + if _, ok := cstb.cstab[call]; ok { fmt.Fprintf(os.Stderr, "*** cstab duplicate entry at: %s\n", fmtFullPos(call.Pos())) fmt.Fprintf(os.Stderr, "*** call: %+v\n", call) @@ -189,38 +202,38 @@ func (csa *callSiteAnalyzer) addCallSite(callee *ir.Func, call *ir.CallExpr) { // on heuristics. cs.Score = int(callee.Inl.Cost) - if csa.cstab == nil { - csa.cstab = make(CallSiteTab) + if cstb.cstab == nil { + cstb.cstab = make(CallSiteTab) } - csa.cstab[call] = cs + cstb.cstab[call] = cs if debugTrace&debugTraceCalls != 0 { fmt.Fprintf(os.Stderr, "=-= added callsite: caller=%v callee=%v n=%s\n", - csa.fn, callee, fmtFullPos(call.Pos())) + cstb.fn, callee, fmtFullPos(call.Pos())) } } -func (csa *callSiteAnalyzer) nodeVisitPre(n ir.Node) { +func (cstb *callSiteTableBuilder) nodeVisitPre(n ir.Node) { switch n.Op() { case ir.ORANGE, ir.OFOR: if !hasTopLevelLoopBodyReturnOrBreak(loopBody(n)) { - csa.loopNest++ + cstb.loopNest++ } case ir.OCALLFUNC: ce := n.(*ir.CallExpr) callee := pgo.DirectCallee(ce.Fun) if callee != nil && callee.Inl != nil { - csa.addCallSite(callee, ce) + cstb.addCallSite(callee, ce) } } - csa.nstack = append(csa.nstack, n) + cstb.nstack = append(cstb.nstack, n) } -func (csa *callSiteAnalyzer) nodeVisitPost(n ir.Node) { - csa.nstack = csa.nstack[:len(csa.nstack)-1] +func (cstb *callSiteTableBuilder) nodeVisitPost(n ir.Node) { + cstb.nstack = cstb.nstack[:len(cstb.nstack)-1] switch n.Op() { case ir.ORANGE, ir.OFOR: if !hasTopLevelLoopBodyReturnOrBreak(loopBody(n)) { - csa.loopNest-- + cstb.loopNest-- } } } @@ -281,8 +294,8 @@ func hasTopLevelLoopBodyReturnOrBreak(loopBody ir.Nodes) bool { // call to a pair of auto-temps, then the second one assigning the // auto-temps to the user-visible vars. This helper will return the // second (outer) of these two. -func (csa *callSiteAnalyzer) containingAssignment(n ir.Node) ir.Node { - parent := csa.nstack[len(csa.nstack)-1] +func (cstb *callSiteTableBuilder) containingAssignment(n ir.Node) ir.Node { + parent := cstb.nstack[len(cstb.nstack)-1] // assignsOnlyAutoTemps returns TRUE of the specified OAS2FUNC // node assigns only auto-temps. @@ -315,12 +328,12 @@ func (csa *callSiteAnalyzer) containingAssignment(n ir.Node) ir.Node { // OAS1({x,y},OCONVNOP(OAS2FUNC({auto1,auto2},OCALLFUNC(bar)))) // if assignsOnlyAutoTemps(parent) { - par2 := csa.nstack[len(csa.nstack)-2] + par2 := cstb.nstack[len(cstb.nstack)-2] if par2.Op() == ir.OAS2 { return par2 } if par2.Op() == ir.OCONVNOP { - par3 := csa.nstack[len(csa.nstack)-3] + par3 := cstb.nstack[len(cstb.nstack)-3] if par3.Op() == ir.OAS2 { return par3 } @@ -378,18 +391,23 @@ func UpdateCallsiteTable(callerfn *ir.Func, n *ir.CallExpr, ic *ir.InlinedCallEx loopNestLevel = 1 } ptab := map[ir.Node]pstate{ic: icp} - icstab := computeCallSiteTable(callerfn, ic.Body, nil, ptab, loopNestLevel) + nf := newNameFinder(nil) + icstab := computeCallSiteTable(callerfn, ic.Body, nil, ptab, loopNestLevel, nf) // Record parent callsite. This is primarily for debug output. for _, cs := range icstab { cs.parent = oldcs } - // Score the calls in the inlined body. Note the setting of "doCallResults" - // to false here: at the moment there isn't any easy way to localize - // or region-ize the work done by "rescoreBasedOnCallResultUses", which - // currently does a walk over the entire function to look for uses - // of a given set of results. + // Score the calls in the inlined body. Note the setting of + // "doCallResults" to false here: at the moment there isn't any + // easy way to localize or region-ize the work done by + // "rescoreBasedOnCallResultUses", which currently does a walk + // over the entire function to look for uses of a given set of + // results. Similarly we're passing nil to makeCallSiteAnalyzer, + // so as to run name finding without the use of static value & + // friends. + csa := makeCallSiteAnalyzer(nil) const doCallResults = false - scoreCallsRegion(callerfn, ic.Body, icstab, doCallResults, ic) + csa.scoreCallsRegion(callerfn, ic.Body, icstab, doCallResults, ic) } diff --git a/src/cmd/compile/internal/inline/inlheur/analyze_func_params.go b/src/cmd/compile/internal/inline/inlheur/analyze_func_params.go index 0ce0af43a2..5e61485532 100644 --- a/src/cmd/compile/internal/inline/inlheur/analyze_func_params.go +++ b/src/cmd/compile/internal/inline/inlheur/analyze_func_params.go @@ -19,6 +19,7 @@ type paramsAnalyzer struct { params []*ir.Name top []bool *condLevelTracker + *nameFinder } // getParams returns an *ir.Name slice containing all params for the @@ -34,8 +35,8 @@ func getParams(fn *ir.Func) []*ir.Name { // new list. If the function in question doesn't have any interesting // parameters then the analyzer list is returned unchanged, and the // params flags in "fp" are updated accordingly. -func addParamsAnalyzer(fn *ir.Func, analyzers []propAnalyzer, fp *FuncProps) []propAnalyzer { - pa, props := makeParamsAnalyzer(fn) +func addParamsAnalyzer(fn *ir.Func, analyzers []propAnalyzer, fp *FuncProps, nf *nameFinder) []propAnalyzer { + pa, props := makeParamsAnalyzer(fn, nf) if pa != nil { analyzers = append(analyzers, pa) } else { @@ -48,7 +49,7 @@ func addParamsAnalyzer(fn *ir.Func, analyzers []propAnalyzer, fp *FuncProps) []p // of function fn. If the function doesn't have any interesting // params, a nil helper is returned along with a set of default param // flags for the func. -func makeParamsAnalyzer(fn *ir.Func) (*paramsAnalyzer, []ParamPropBits) { +func makeParamsAnalyzer(fn *ir.Func, nf *nameFinder) (*paramsAnalyzer, []ParamPropBits) { params := getParams(fn) // includes receiver if applicable if len(params) == 0 { return nil, nil @@ -98,6 +99,7 @@ func makeParamsAnalyzer(fn *ir.Func) (*paramsAnalyzer, []ParamPropBits) { params: params, top: top, condLevelTracker: new(condLevelTracker), + nameFinder: nf, } return pa, nil } @@ -162,7 +164,7 @@ func (pa *paramsAnalyzer) callCheckParams(ce *ir.CallExpr) { return } sel := ce.Fun.(*ir.SelectorExpr) - r := ir.StaticValue(sel.X) + r := pa.staticValue(sel.X) if r.Op() != ir.ONAME { return } @@ -193,8 +195,8 @@ func (pa *paramsAnalyzer) callCheckParams(ce *ir.CallExpr) { return name == p, false }) } else { - cname, isFunc, _ := isFuncName(called) - if isFunc { + cname := pa.funcName(called) + if cname != nil { pa.deriveFlagsFromCallee(ce, cname.Func) } } @@ -238,7 +240,7 @@ func (pa *paramsAnalyzer) deriveFlagsFromCallee(ce *ir.CallExpr, callee *ir.Func } // See if one of the caller's parameters is flowing unmodified // into this actual expression. - r := ir.StaticValue(arg) + r := pa.staticValue(arg) if r.Op() != ir.ONAME { return } diff --git a/src/cmd/compile/internal/inline/inlheur/analyze_func_returns.go b/src/cmd/compile/internal/inline/inlheur/analyze_func_returns.go index 58b0f54697..2aaa68d1b7 100644 --- a/src/cmd/compile/internal/inline/inlheur/analyze_func_returns.go +++ b/src/cmd/compile/internal/inline/inlheur/analyze_func_returns.go @@ -20,6 +20,7 @@ type resultsAnalyzer struct { props []ResultPropBits values []resultVal inlineMaxBudget int + *nameFinder } // resultVal captures information about a specific result returned from @@ -28,7 +29,7 @@ type resultsAnalyzer struct { // the same function, etc. This container stores info on a the specific // scenarios we're looking for. type resultVal struct { - lit constant.Value + cval constant.Value fn *ir.Name fnClo bool top bool @@ -40,8 +41,8 @@ type resultVal struct { // new list. If the function in question doesn't have any returns (or // any interesting returns) then the analyzer list is left as is, and // the result flags in "fp" are updated accordingly. -func addResultsAnalyzer(fn *ir.Func, analyzers []propAnalyzer, fp *FuncProps, inlineMaxBudget int) []propAnalyzer { - ra, props := makeResultsAnalyzer(fn, inlineMaxBudget) +func addResultsAnalyzer(fn *ir.Func, analyzers []propAnalyzer, fp *FuncProps, inlineMaxBudget int, nf *nameFinder) []propAnalyzer { + ra, props := makeResultsAnalyzer(fn, inlineMaxBudget, nf) if ra != nil { analyzers = append(analyzers, ra) } else { @@ -54,7 +55,7 @@ func addResultsAnalyzer(fn *ir.Func, analyzers []propAnalyzer, fp *FuncProps, in // in function fn. If the function doesn't have any interesting // results, a nil helper is returned along with a set of default // result flags for the func. -func makeResultsAnalyzer(fn *ir.Func, inlineMaxBudget int) (*resultsAnalyzer, []ResultPropBits) { +func makeResultsAnalyzer(fn *ir.Func, inlineMaxBudget int, nf *nameFinder) (*resultsAnalyzer, []ResultPropBits) { results := fn.Type().Results() if len(results) == 0 { return nil, nil @@ -84,6 +85,7 @@ func makeResultsAnalyzer(fn *ir.Func, inlineMaxBudget int) (*resultsAnalyzer, [] props: props, values: vals, inlineMaxBudget: inlineMaxBudget, + nameFinder: nf, } return ra, nil } @@ -143,29 +145,6 @@ func (ra *resultsAnalyzer) nodeVisitPost(n ir.Node) { } } -// isFuncName returns the *ir.Name for the func or method -// corresponding to node 'n', along with a boolean indicating success, -// and another boolean indicating whether the func is closure. -func isFuncName(n ir.Node) (*ir.Name, bool, bool) { - sv := ir.StaticValue(n) - if sv.Op() == ir.ONAME { - name := sv.(*ir.Name) - if name.Sym() != nil && name.Class == ir.PFUNC { - return name, true, false - } - } - if sv.Op() == ir.OCLOSURE { - cloex := sv.(*ir.ClosureExpr) - return cloex.Func.Nname, true, true - } - if sv.Op() == ir.OMETHEXPR { - if mn := ir.MethodExprName(sv); mn != nil { - return mn, true, false - } - } - return nil, false, false -} - // analyzeResult examines the expression 'n' being returned as the // 'ii'th argument in some return statement to see whether has // interesting characteristics (for example, returns a constant), then @@ -173,18 +152,22 @@ func isFuncName(n ir.Node) (*ir.Name, bool, bool) { // previous result (for the given return slot) that we've already // processed. func (ra *resultsAnalyzer) analyzeResult(ii int, n ir.Node) { - isAllocMem := isAllocatedMem(n) - isConcConvItf := isConcreteConvIface(n) - lit, isConst := isLiteral(n) - rfunc, isFunc, isClo := isFuncName(n) + isAllocMem := ra.isAllocatedMem(n) + isConcConvItf := ra.isConcreteConvIface(n) + constVal := ra.constValue(n) + isConst := (constVal != nil) + isNil := ra.isNil(n) + rfunc := ra.funcName(n) + isFunc := (rfunc != nil) + isClo := (rfunc != nil && rfunc.Func.OClosure != nil) curp := ra.props[ii] - dprops, isDerivedFromCall := deriveReturnFlagsFromCallee(n) + dprops, isDerivedFromCall := ra.deriveReturnFlagsFromCallee(n) newp := ResultNoInfo - var newlit constant.Value + var newcval constant.Value var newfunc *ir.Name if debugTrace&debugTraceResults != 0 { - fmt.Fprintf(os.Stderr, "=-= %v: analyzeResult n=%s ismem=%v isconcconv=%v isconst=%v isfunc=%v isclo=%v\n", ir.Line(n), n.Op().String(), isAllocMem, isConcConvItf, isConst, isFunc, isClo) + fmt.Fprintf(os.Stderr, "=-= %v: analyzeResult n=%s ismem=%v isconcconv=%v isconst=%v isnil=%v isfunc=%v isclo=%v\n", ir.Line(n), n.Op().String(), isAllocMem, isConcConvItf, isConst, isNil, isFunc, isClo) } if ra.values[ii].top { @@ -201,7 +184,10 @@ func (ra *resultsAnalyzer) analyzeResult(ii int, n ir.Node) { newfunc = rfunc case isConst: newp = ResultAlwaysSameConstant - newlit = lit + newcval = constVal + case isNil: + newp = ResultAlwaysSameConstant + newcval = nil case isDerivedFromCall: newp = dprops ra.values[ii].derived = true @@ -214,17 +200,20 @@ func (ra *resultsAnalyzer) analyzeResult(ii int, n ir.Node) { // the previous returns. switch curp { case ResultIsAllocatedMem: - if isAllocatedMem(n) { + if isAllocMem { newp = ResultIsAllocatedMem } case ResultIsConcreteTypeConvertedToInterface: - if isConcreteConvIface(n) { + if isConcConvItf { newp = ResultIsConcreteTypeConvertedToInterface } case ResultAlwaysSameConstant: - if isConst && isSameLiteral(lit, ra.values[ii].lit) { + if isNil && ra.values[ii].cval == nil { newp = ResultAlwaysSameConstant - newlit = lit + newcval = nil + } else if isConst && constant.Compare(constVal, token.EQL, ra.values[ii].cval) { + newp = ResultAlwaysSameConstant + newcval = constVal } case ResultAlwaysSameFunc: if isFunc && isSameFuncName(rfunc, ra.values[ii].fn) { @@ -236,7 +225,7 @@ func (ra *resultsAnalyzer) analyzeResult(ii int, n ir.Node) { } ra.values[ii].fn = newfunc ra.values[ii].fnClo = isClo - ra.values[ii].lit = newlit + ra.values[ii].cval = newcval ra.props[ii] = newp if debugTrace&debugTraceResults != 0 { @@ -245,15 +234,6 @@ func (ra *resultsAnalyzer) analyzeResult(ii int, n ir.Node) { } } -func isAllocatedMem(n ir.Node) bool { - sv := ir.StaticValue(n) - switch sv.Op() { - case ir.OMAKESLICE, ir.ONEW, ir.OPTRLIT, ir.OSLICELIT: - return true - } - return false -} - // deriveReturnFlagsFromCallee tries to set properties for a given // return result where we're returning call expression; return value // is a return property value and a boolean indicating whether the @@ -270,7 +250,7 @@ func isAllocatedMem(n ir.Node) bool { // set foo's return property to that of bar. In the case of "two", however, // even though each return path returns a constant, we don't know // whether the constants are identical, hence we need to be conservative. -func deriveReturnFlagsFromCallee(n ir.Node) (ResultPropBits, bool) { +func (ra *resultsAnalyzer) deriveReturnFlagsFromCallee(n ir.Node) (ResultPropBits, bool) { if n.Op() != ir.OCALLFUNC { return 0, false } @@ -282,8 +262,8 @@ func deriveReturnFlagsFromCallee(n ir.Node) (ResultPropBits, bool) { if called.Op() != ir.ONAME { return 0, false } - cname, isFunc, _ := isFuncName(called) - if !isFunc { + cname := ra.funcName(called) + if cname == nil { return 0, false } calleeProps := propsForFunc(cname.Func) @@ -295,41 +275,3 @@ func deriveReturnFlagsFromCallee(n ir.Node) (ResultPropBits, bool) { } return calleeProps.ResultFlags[0], true } - -func isLiteral(n ir.Node) (constant.Value, bool) { - sv := ir.StaticValue(n) - switch sv.Op() { - case ir.ONIL: - return nil, true - case ir.OLITERAL: - return sv.Val(), true - } - return nil, false -} - -// isSameLiteral checks to see if 'v1' and 'v2' correspond to the same -// literal value, or if they are both nil. -func isSameLiteral(v1, v2 constant.Value) bool { - if v1 == nil && v2 == nil { - return true - } - if v1 == nil || v2 == nil { - return false - } - return constant.Compare(v1, token.EQL, v2) -} - -func isConcreteConvIface(n ir.Node) bool { - sv := ir.StaticValue(n) - if sv.Op() != ir.OCONVIFACE { - return false - } - return !sv.(*ir.ConvExpr).X.Type().IsInterface() -} - -func isSameFuncName(v1, v2 *ir.Name) bool { - // NB: there are a few corner cases where pointer equality - // doesn't work here, but this should be good enough for - // our purposes here. - return v1 == v2 -} diff --git a/src/cmd/compile/internal/inline/inlheur/names.go b/src/cmd/compile/internal/inline/inlheur/names.go new file mode 100644 index 0000000000..022385087b --- /dev/null +++ b/src/cmd/compile/internal/inline/inlheur/names.go @@ -0,0 +1,129 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package inlheur + +import ( + "cmd/compile/internal/ir" + "go/constant" +) + +// nameFinder provides a set of "isXXX" query methods for clients to +// ask whether a given AST node corresponds to a function, a constant +// value, and so on. These methods use an underlying ir.ReassignOracle +// to return more precise results in cases where an "interesting" +// value is assigned to a singly-defined local temp. Example: +// +// const q = 101 +// fq := func() int { return q } +// copyOfConstant := q +// copyOfFunc := f +// interestingCall(copyOfConstant, copyOfFunc) +// +// A name finder query method invoked on the arguments being passed to +// "interestingCall" will be able detect that 'copyOfConstant' always +// evaluates to a constant (even though it is in fact a PAUTO local +// variable). A given nameFinder can also operate without using +// ir.ReassignOracle (in cases where it is not practical to look +// at the entire function); in such cases queries will still work +// for explicit constant values and functions. +type nameFinder struct { + ro *ir.ReassignOracle +} + +// newNameFinder returns a new nameFinder object with a reassignment +// oracle initialized based on the function fn, or if fn is nil, +// without an underlying ReassignOracle. +func newNameFinder(fn *ir.Func) *nameFinder { + var ro *ir.ReassignOracle + if fn != nil { + ro = &ir.ReassignOracle{} + ro.Init(fn) + } + return &nameFinder{ro: ro} +} + +// funcName returns the *ir.Name for the func or method +// corresponding to node 'n', or nil if n can't be proven +// to contain a function value. +func (nf *nameFinder) funcName(n ir.Node) *ir.Name { + sv := n + if nf.ro != nil { + sv = nf.ro.StaticValue(n) + } + if name := ir.StaticCalleeName(sv); name != nil { + return name + } + return nil +} + +// isAllocatedMem returns true if node n corresponds to a memory +// allocation expression (make, new, or equivalent). +func (nf *nameFinder) isAllocatedMem(n ir.Node) bool { + sv := n + if nf.ro != nil { + sv = nf.ro.StaticValue(n) + } + switch sv.Op() { + case ir.OMAKESLICE, ir.ONEW, ir.OPTRLIT, ir.OSLICELIT: + return true + } + return false +} + +// constValue returns the underlying constant.Value for an AST node n +// if n is itself a constant value/expr, or if n is a singly assigned +// local containing constant expr/value (or nil not constant). +func (nf *nameFinder) constValue(n ir.Node) constant.Value { + sv := n + if nf.ro != nil { + sv = nf.ro.StaticValue(n) + } + if sv.Op() == ir.OLITERAL { + return sv.Val() + } + return nil +} + +// isNil returns whether n is nil (or singly +// assigned local containing nil). +func (nf *nameFinder) isNil(n ir.Node) bool { + sv := n + if nf.ro != nil { + sv = nf.ro.StaticValue(n) + } + return sv.Op() == ir.ONIL +} + +func (nf *nameFinder) staticValue(n ir.Node) ir.Node { + if nf.ro == nil { + return n + } + return nf.ro.StaticValue(n) +} + +func (nf *nameFinder) reassigned(n *ir.Name) bool { + if nf.ro == nil { + return true + } + return nf.ro.Reassigned(n) +} + +func (nf *nameFinder) isConcreteConvIface(n ir.Node) bool { + sv := n + if nf.ro != nil { + sv = nf.ro.StaticValue(n) + } + if sv.Op() != ir.OCONVIFACE { + return false + } + return !sv.(*ir.ConvExpr).X.Type().IsInterface() +} + +func isSameFuncName(v1, v2 *ir.Name) bool { + // NB: there are a few corner cases where pointer equality + // doesn't work here, but this should be good enough for + // our purposes here. + return v1 == v2 +} diff --git a/src/cmd/compile/internal/inline/inlheur/score_callresult_uses.go b/src/cmd/compile/internal/inline/inlheur/score_callresult_uses.go index 1d31f09ac0..b95ea37d59 100644 --- a/src/cmd/compile/internal/inline/inlheur/score_callresult_uses.go +++ b/src/cmd/compile/internal/inline/inlheur/score_callresult_uses.go @@ -46,7 +46,7 @@ type resultUseAnalyzer struct { // rescoreBasedOnCallResultUses examines how call results are used, // and tries to update the scores of calls based on how their results // are used in the function. -func rescoreBasedOnCallResultUses(fn *ir.Func, resultNameTab map[*ir.Name]resultPropAndCS, cstab CallSiteTab) { +func (csa *callSiteAnalyzer) rescoreBasedOnCallResultUses(fn *ir.Func, resultNameTab map[*ir.Name]resultPropAndCS, cstab CallSiteTab) { enableDebugTraceIfEnv() rua := &resultUseAnalyzer{ resultNameTab: resultNameTab, @@ -65,7 +65,7 @@ func rescoreBasedOnCallResultUses(fn *ir.Func, resultNameTab map[*ir.Name]result disableDebugTrace() } -func examineCallResults(cs *CallSite, resultNameTab map[*ir.Name]resultPropAndCS) map[*ir.Name]resultPropAndCS { +func (csa *callSiteAnalyzer) examineCallResults(cs *CallSite, resultNameTab map[*ir.Name]resultPropAndCS) map[*ir.Name]resultPropAndCS { if debugTrace&debugTraceScoring != 0 { fmt.Fprintf(os.Stderr, "=-= examining call results for %q\n", EncodeCallSiteKey(cs)) @@ -103,7 +103,7 @@ func examineCallResults(cs *CallSite, resultNameTab map[*ir.Name]resultPropAndCS if rprop&interesting == 0 { continue } - if ir.Reassigned(n) { + if csa.nameFinder.reassigned(n) { continue } if resultNameTab == nil { diff --git a/src/cmd/compile/internal/inline/inlheur/scoring.go b/src/cmd/compile/internal/inline/inlheur/scoring.go index 2b210fce8e..efbca79ae3 100644 --- a/src/cmd/compile/internal/inline/inlheur/scoring.go +++ b/src/cmd/compile/internal/inline/inlheur/scoring.go @@ -182,13 +182,14 @@ func mustToMay(x scoreAdjustTyp) scoreAdjustTyp { return 0 } -// computeCallSiteScore takes a given call site whose ir node is 'call' and -// callee function is 'callee' and with previously computed call site -// properties 'csflags', then computes a score for the callsite that -// combines the size cost of the callee with heuristics based on -// previously parameter and function properties, then stores the score -// and the adjustment mask in the appropriate fields in 'cs' -func (cs *CallSite) computeCallSiteScore(calleeProps *FuncProps) { +// computeCallSiteScore takes a given call site whose ir node is +// 'call' and callee function is 'callee' and with previously computed +// call site properties 'csflags', then computes a score for the +// callsite that combines the size cost of the callee with heuristics +// based on previously computed argument and function properties, +// then stores the score and the adjustment mask in the appropriate +// fields in 'cs' +func (cs *CallSite) computeCallSiteScore(csa *callSiteAnalyzer, calleeProps *FuncProps) { callee := cs.Callee csflags := cs.Flags call := cs.Call @@ -438,8 +439,13 @@ type scoreCallsCacheType struct { // after foo has been analyzed, but it's conceivable that CanInline // might visit bar before foo for this SCC. func ScoreCalls(fn *ir.Func) { + if len(fn.Body) == 0 { + return + } enableDebugTraceIfEnv() + nameFinder := newNameFinder(fn) + if debugTrace&debugTraceScoring != 0 { fmt.Fprintf(os.Stderr, "=-= ScoreCalls(%v)\n", ir.FuncName(fn)) } @@ -461,21 +467,25 @@ func ScoreCalls(fn *ir.Func) { fmt.Fprintf(os.Stderr, "=-= building cstab for non-inl func %s\n", ir.FuncName(fn)) } - cstab = computeCallSiteTable(fn, fn.Body, scoreCallsCache.tab, nil, 0) + cstab = computeCallSiteTable(fn, fn.Body, scoreCallsCache.tab, nil, 0, + nameFinder) } + csa := makeCallSiteAnalyzer(fn) const doCallResults = true - scoreCallsRegion(fn, fn.Body, cstab, doCallResults, nil) + csa.scoreCallsRegion(fn, fn.Body, cstab, doCallResults, nil) + + disableDebugTrace() } // scoreCallsRegion assigns numeric scores to each of the callsites in // region 'region' within function 'fn'. This can be called on // an entire function, or with 'region' set to a chunk of // code corresponding to an inlined call. -func scoreCallsRegion(fn *ir.Func, region ir.Nodes, cstab CallSiteTab, doCallResults bool, ic *ir.InlinedCallExpr) { +func (csa *callSiteAnalyzer) scoreCallsRegion(fn *ir.Func, region ir.Nodes, cstab CallSiteTab, doCallResults bool, ic *ir.InlinedCallExpr) { if debugTrace&debugTraceScoring != 0 { - fmt.Fprintf(os.Stderr, "=-= scoreCallsRegion(%v, %s)\n", - ir.FuncName(fn), region[0].Op().String()) + fmt.Fprintf(os.Stderr, "=-= scoreCallsRegion(%v, %s) len(cstab)=%d\n", + ir.FuncName(fn), region[0].Op().String(), len(cstab)) } // Sort callsites to avoid any surprises with non deterministic @@ -510,13 +520,13 @@ func scoreCallsRegion(fn *ir.Func, region ir.Nodes, cstab CallSiteTab, doCallRes continue } } - cs.computeCallSiteScore(cprops) + cs.computeCallSiteScore(csa, cprops) if doCallResults { if debugTrace&debugTraceScoring != 0 { fmt.Fprintf(os.Stderr, "=-= examineCallResults at %s: flags=%d score=%d funcInlHeur=%v deser=%v\n", fmtFullPos(cs.Call.Pos()), cs.Flags, cs.Score, fihcprops, desercprops) } - resultNameTab = examineCallResults(cs, resultNameTab) + resultNameTab = csa.examineCallResults(cs, resultNameTab) } if debugTrace&debugTraceScoring != 0 { @@ -525,7 +535,7 @@ func scoreCallsRegion(fn *ir.Func, region ir.Nodes, cstab CallSiteTab, doCallRes } if resultNameTab != nil { - rescoreBasedOnCallResultUses(fn, resultNameTab, cstab) + csa.rescoreBasedOnCallResultUses(fn, resultNameTab, cstab) } disableDebugTrace() From 0cb45bac014715433c0110675cc4e32d871a5ff0 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Wed, 28 Jun 2023 15:04:24 -0400 Subject: [PATCH 027/313] testing: use subprocesses in TestTBHelper and TestTBHelperParallel These tests are checking the output of test functions that call the Helper methods. However, they were reaching into package internals instead of running those test functions as actual tests. That not only produced significant differences in formatting (such as indentation for subtests), but also caused test flags such as "-failfast" passed for the overall test run to interfere with the output formatting. Now, we run the test functions as real tests in a subprocess, so that we get the real output and formatting of those tests. This makes the tests not only more realistic, but also less sensitive to otherwise-irrelevant implementation details (such as the names and signatures of unexported types and functions in the testing package). Fixes #61016. Change-Id: I646fbbd7cfeb00382054677f726c05fc9d35d0dc Reviewed-on: https://go-review.googlesource.com/c/go/+/506955 Auto-Submit: Bryan Mills Reviewed-by: Alan Donovan LUCI-TryBot-Result: Go LUCI --- src/testing/helper_test.go | 151 +++++++++++++++++--------------- src/testing/helperfuncs_test.go | 40 +++++---- 2 files changed, 101 insertions(+), 90 deletions(-) diff --git a/src/testing/helper_test.go b/src/testing/helper_test.go index 6e8986a2ab..da5622f85f 100644 --- a/src/testing/helper_test.go +++ b/src/testing/helper_test.go @@ -2,98 +2,107 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -package testing +package testing_test import ( + "internal/testenv" + "os" "regexp" "strings" + "testing" ) -func TestTBHelper(t *T) { - var buf strings.Builder - ctx := newTestContext(1, allMatcher()) - t1 := &T{ - common: common{ - signal: make(chan bool), - w: &buf, - }, - context: ctx, - } - t1.Run("Test", testHelper) +func TestTBHelper(t *testing.T) { + if os.Getenv("GO_WANT_HELPER_PROCESS") == "1" { + testTestHelper(t) - want := `--- FAIL: Test (?s) -helperfuncs_test.go:12: 0 -helperfuncs_test.go:40: 1 -helperfuncs_test.go:21: 2 -helperfuncs_test.go:42: 3 -helperfuncs_test.go:49: 4 ---- FAIL: Test/sub (?s) -helperfuncs_test.go:52: 5 -helperfuncs_test.go:21: 6 -helperfuncs_test.go:51: 7 -helperfuncs_test.go:63: 8 ---- FAIL: Test/sub2 (?s) -helperfuncs_test.go:78: 11 -helperfuncs_test.go:82: recover 12 -helperfuncs_test.go:84: GenericFloat64 -helperfuncs_test.go:85: GenericInt -helperfuncs_test.go:71: 9 -helperfuncs_test.go:67: 10 + // Check that calling Helper from inside a top-level test function + // has no effect. + t.Helper() + t.Error("8") + return + } + + testenv.MustHaveExec(t) + t.Parallel() + + exe, err := os.Executable() + if err != nil { + t.Fatal(err) + } + + cmd := testenv.Command(t, exe, "-test.run=^TestTBHelper$") + cmd = testenv.CleanCmdEnv(cmd) + cmd.Env = append(cmd.Env, "GO_WANT_HELPER_PROCESS=1") + out, _ := cmd.CombinedOutput() + + want := `--- FAIL: TestTBHelper \([^)]+\) + helperfuncs_test.go:15: 0 + helperfuncs_test.go:47: 1 + helperfuncs_test.go:24: 2 + helperfuncs_test.go:49: 3 + helperfuncs_test.go:56: 4 + --- FAIL: TestTBHelper/sub \([^)]+\) + helperfuncs_test.go:59: 5 + helperfuncs_test.go:24: 6 + helperfuncs_test.go:58: 7 + --- FAIL: TestTBHelper/sub2 \([^)]+\) + helperfuncs_test.go:80: 11 + helperfuncs_test.go:84: recover 12 + helperfuncs_test.go:86: GenericFloat64 + helperfuncs_test.go:87: GenericInt + helper_test.go:22: 8 + helperfuncs_test.go:73: 9 + helperfuncs_test.go:69: 10 ` - lines := strings.Split(buf.String(), "\n") - durationRE := regexp.MustCompile(`\(.*\)$`) - for i, line := range lines { - line = strings.TrimSpace(line) - line = durationRE.ReplaceAllString(line, "(?s)") - lines[i] = line - } - got := strings.Join(lines, "\n") - if got != want { - t.Errorf("got output:\n\n%s\nwant:\n\n%s", got, want) + if !regexp.MustCompile(want).Match(out) { + t.Errorf("got output:\n\n%s\nwant matching:\n\n%s", out, want) } } -func TestTBHelperParallel(t *T) { - var buf strings.Builder - ctx := newTestContext(1, newMatcher(regexp.MatchString, "", "", "")) - t1 := &T{ - common: common{ - signal: make(chan bool), - w: &buf, - }, - context: ctx, +func TestTBHelperParallel(t *testing.T) { + if os.Getenv("GO_WANT_HELPER_PROCESS") == "1" { + parallelTestHelper(t) + return } - t1.Run("Test", parallelTestHelper) - lines := strings.Split(strings.TrimSpace(buf.String()), "\n") - if len(lines) != 6 { - t.Fatalf("parallelTestHelper gave %d lines of output; want 6", len(lines)) + testenv.MustHaveExec(t) + t.Parallel() + + exe, err := os.Executable() + if err != nil { + t.Fatal(err) } - want := "helperfuncs_test.go:21: parallel" + + cmd := testenv.Command(t, exe, "-test.run=^TestTBHelperParallel$") + cmd = testenv.CleanCmdEnv(cmd) + cmd.Env = append(cmd.Env, "GO_WANT_HELPER_PROCESS=1") + out, _ := cmd.CombinedOutput() + + t.Logf("output:\n%s", out) + + lines := strings.Split(strings.TrimSpace(string(out)), "\n") + + // We expect to see one "--- FAIL" line at the start + // of the log, five lines of "parallel" logging, + // and a final "FAIL" line at the end of the test. + const wantLines = 7 + + if len(lines) != wantLines { + t.Fatalf("parallelTestHelper gave %d lines of output; want %d", len(lines), wantLines) + } + want := "helperfuncs_test.go:24: parallel" if got := strings.TrimSpace(lines[1]); got != want { - t.Errorf("got output line %q; want %q", got, want) + t.Errorf("got second output line %q; want %q", got, want) } } -type noopWriter int - -func (nw *noopWriter) Write(b []byte) (int, error) { return len(b), nil } - -func BenchmarkTBHelper(b *B) { - w := noopWriter(0) - ctx := newTestContext(1, allMatcher()) - t1 := &T{ - common: common{ - signal: make(chan bool), - w: &w, - }, - context: ctx, - } +func BenchmarkTBHelper(b *testing.B) { f1 := func() { - t1.Helper() + b.Helper() } f2 := func() { - t1.Helper() + b.Helper() } b.ResetTimer() b.ReportAllocs() diff --git a/src/testing/helperfuncs_test.go b/src/testing/helperfuncs_test.go index b63bc91ac2..f0295f35df 100644 --- a/src/testing/helperfuncs_test.go +++ b/src/testing/helperfuncs_test.go @@ -2,38 +2,45 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -package testing +package testing_test -import "sync" +import ( + "sync" + "testing" +) // The line numbering of this file is important for TestTBHelper. -func notHelper(t *T, msg string) { +func notHelper(t *testing.T, msg string) { t.Error(msg) } -func helper(t *T, msg string) { +func helper(t *testing.T, msg string) { t.Helper() t.Error(msg) } -func notHelperCallingHelper(t *T, msg string) { +func notHelperCallingHelper(t *testing.T, msg string) { helper(t, msg) } -func helperCallingHelper(t *T, msg string) { +func helperCallingHelper(t *testing.T, msg string) { t.Helper() helper(t, msg) } -func genericHelper[G any](t *T, msg string) { +func genericHelper[G any](t *testing.T, msg string) { t.Helper() t.Error(msg) } var genericIntHelper = genericHelper[int] -func testHelper(t *T) { +func testTestHelper(t *testing.T) { + testHelper(t) +} + +func testHelper(t *testing.T) { // Check combinations of directly and indirectly // calling helper functions. notHelper(t, "0") @@ -48,7 +55,7 @@ func testHelper(t *T) { } fn("4") - t.Run("sub", func(t *T) { + t.Run("sub", func(t *testing.T) { helper(t, "5") notHelperCallingHelper(t, "6") // Check that calling Helper from inside a subtest entry function @@ -57,11 +64,6 @@ func testHelper(t *T) { t.Error("7") }) - // Check that calling Helper from inside a top-level test function - // has no effect. - t.Helper() - t.Error("8") - // Check that right caller is reported for func passed to Cleanup when // multiple cleanup functions have been registered. t.Cleanup(func() { @@ -85,7 +87,7 @@ func testHelper(t *T) { genericIntHelper(t, "GenericInt") } -func parallelTestHelper(t *T) { +func parallelTestHelper(t *testing.T) { var wg sync.WaitGroup for i := 0; i < 5; i++ { wg.Add(1) @@ -97,15 +99,15 @@ func parallelTestHelper(t *T) { wg.Wait() } -func helperSubCallingHelper(t *T, msg string) { +func helperSubCallingHelper(t *testing.T, msg string) { t.Helper() - t.Run("sub2", func(t *T) { + t.Run("sub2", func(t *testing.T) { t.Helper() t.Fatal(msg) }) } -func recoverHelper(t *T, msg string) { +func recoverHelper(t *testing.T, msg string) { t.Helper() defer func() { t.Helper() @@ -116,7 +118,7 @@ func recoverHelper(t *T, msg string) { doPanic(t, msg) } -func doPanic(t *T, msg string) { +func doPanic(t *testing.T, msg string) { t.Helper() panic(msg) } From 3255fca99395bb0c0dff491f92cc85c0a859dd25 Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Mon, 30 Oct 2023 12:55:42 -0400 Subject: [PATCH 028/313] cmd/compile/internal/inline: fix bug in param flags heuristics Fix a bug in the code that analyzes how function parameters are used, which wasn't properly handling certain types of closures. The code in question has support for deriving flags for a given parameter based on whether it is passed to a call. Example: func foo(f1 func(int)) { bar(32, f1) } func bar(x int, f2 func()) { f2(x) } When analyzing "bar", we can derive the "FeedsIndirectCall" flag for parameter "f1" by virtue of the fact that it is passed directly to "bar", and bar's corresponding parameter "f2" has the flag set. For a more complex example such as func foo(f1 func(int)) func() int { return func(q int) int { <<-- HERE bar(99, f1) return q } } func bar(x int, f2 func()) { f2(x) } The heuristics code would panic when examining the closure marked above due to the fact that the call to "bar" was passing an ir.Name with class PPARAM, but no such param was present in the enclosing function. Change-Id: I30436ce716b51bfb03e42e7abe76a4514e6b9285 Reviewed-on: https://go-review.googlesource.com/c/go/+/539320 LUCI-TryBot-Result: Go LUCI Reviewed-by: Matthew Dempsky --- .../internal/inline/inlheur/analyze_func_params.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/cmd/compile/internal/inline/inlheur/analyze_func_params.go b/src/cmd/compile/internal/inline/inlheur/analyze_func_params.go index 5e61485532..d85d73b2ef 100644 --- a/src/cmd/compile/internal/inline/inlheur/analyze_func_params.go +++ b/src/cmd/compile/internal/inline/inlheur/analyze_func_params.go @@ -249,7 +249,13 @@ func (pa *paramsAnalyzer) deriveFlagsFromCallee(ce *ir.CallExpr, callee *ir.Func return } callerParamIdx := pa.findParamIdx(name) - if callerParamIdx == -1 || pa.params[callerParamIdx] == nil { + // note that callerParamIdx may return -1 in the case where + // the param belongs not to the current closure func we're + // analyzing but to an outer enclosing func. + if callerParamIdx == -1 { + return + } + if pa.params[callerParamIdx] == nil { panic("something went wrong") } if !pa.top[callerParamIdx] && From 5239c913510633ce9fdfaf993ab5f31d7ba7e83e Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Fri, 3 Nov 2023 14:04:57 -0400 Subject: [PATCH 029/313] cmd/compile/internal/inline: minor compile time improvements in func flags Some small changes to help reduce compile time for function flags computation. The current implementation of panic path detection adds an entry to a map for every node in the function, which is wasteful (and shows up in cpu profiles). Switch to only adding entries where they are useful. This is especially important for functions with large map literals and other constructs with many non-statement nodes. Change-Id: I9cfb2cd1cbf480f21298e6102aa99e2d77219f3d Reviewed-on: https://go-review.googlesource.com/c/go/+/539696 Reviewed-by: Matthew Dempsky LUCI-TryBot-Result: Go LUCI --- .../inline/inlheur/analyze_func_flags.go | 32 ++++++------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/src/cmd/compile/internal/inline/inlheur/analyze_func_flags.go b/src/cmd/compile/internal/inline/inlheur/analyze_func_flags.go index 588d2f4f59..b7403a4f8c 100644 --- a/src/cmd/compile/internal/inline/inlheur/analyze_func_flags.go +++ b/src/cmd/compile/internal/inline/inlheur/analyze_func_flags.go @@ -66,34 +66,24 @@ func (ffa *funcFlagsAnalyzer) setResults(funcProps *FuncProps) { funcProps.Flags = rv } -func (ffa *funcFlagsAnalyzer) getstate(n ir.Node) pstate { - val, ok := ffa.nstate[n] - if !ok { - base.Fatalf("funcFlagsAnalyzer: fn %q node %s line %s: internal error, no setting for node:\n%+v\n", ffa.fn.Sym().Name, n.Op().String(), ir.Line(n), n) - } - return val +func (ffa *funcFlagsAnalyzer) getState(n ir.Node) pstate { + return ffa.nstate[n] } -func (ffa *funcFlagsAnalyzer) setstate(n ir.Node, st pstate) { - if _, ok := ffa.nstate[n]; ok { - base.Fatalf("funcFlagsAnalyzer: fn %q internal error, existing setting for node:\n%+v\n", ffa.fn.Sym().Name, n) - } else { +func (ffa *funcFlagsAnalyzer) setState(n ir.Node, st pstate) { + if st != psNoInfo { ffa.nstate[n] = st } } -func (ffa *funcFlagsAnalyzer) updatestate(n ir.Node, st pstate) { - if _, ok := ffa.nstate[n]; !ok { - base.Fatalf("funcFlagsAnalyzer: fn %q internal error, expected existing setting for node:\n%+v\n", ffa.fn.Sym().Name, n) +func (ffa *funcFlagsAnalyzer) updateState(n ir.Node, st pstate) { + if st == psNoInfo { + delete(ffa.nstate, n) } else { ffa.nstate[n] = st } } -func (ffa *funcFlagsAnalyzer) setstateSoft(n ir.Node, st pstate) { - ffa.nstate[n] = st -} - func (ffa *funcFlagsAnalyzer) panicPathTable() map[ir.Node]pstate { return ffa.nstate } @@ -164,13 +154,13 @@ func (ffa *funcFlagsAnalyzer) stateForList(list ir.Nodes) pstate { // line 10 will be on a panic path). for i := len(list) - 1; i >= 0; i-- { n := list[i] - psi := ffa.getstate(n) + psi := ffa.getState(n) if debugTrace&debugTraceFuncFlags != 0 { fmt.Fprintf(os.Stderr, "=-= %v: stateForList n=%s ps=%s\n", ir.Line(n), n.Op().String(), psi.String()) } st = blockCombine(psi, st) - ffa.updatestate(n, st) + ffa.updateState(n, st) } if st == psTop { st = psNoInfo @@ -237,8 +227,6 @@ func (ffa *funcFlagsAnalyzer) nodeVisitPost(n ir.Node) { ir.Line(n), n.Op().String(), shouldVisit(n)) } if !shouldVisit(n) { - // invoke soft set, since node may be shared (e.g. ONAME) - ffa.setstateSoft(n, psNoInfo) return } var st pstate @@ -361,7 +349,7 @@ func (ffa *funcFlagsAnalyzer) nodeVisitPost(n ir.Node) { fmt.Fprintf(os.Stderr, "=-= %v: visit n=%s returns %s\n", ir.Line(n), n.Op().String(), st.String()) } - ffa.setstate(n, st) + ffa.setState(n, st) } func (ffa *funcFlagsAnalyzer) nodeVisitPre(n ir.Node) { From 4f55a5af5e5d325a534222050564766c249218aa Mon Sep 17 00:00:00 2001 From: Carlo Alberto Ferraris Date: Sun, 2 Apr 2023 23:54:35 +0900 Subject: [PATCH 030/313] sync: do not unnecessarily keep alive functions wrapped by Once(Func|Value|Values) The function passed to OnceFunc/OnceValue/OnceValues may transitively keep more allocations alive. As the passed function is guaranteed to be called at most once, it is safe to drop it after the first call is complete. This avoids keeping the passed function (and anything it transitively references) alive until the returned function is GCed. Change-Id: I2faf397b481d2f693ab3aea8e2981b02adbc7a21 Reviewed-on: https://go-review.googlesource.com/c/go/+/481515 Reviewed-by: Austin Clements Reviewed-by: David Chase TryBot-Result: Gopher Robot Run-TryBot: qiulaidongfeng <2645477756@qq.com> --- src/runtime/export_test.go | 18 +------------- src/runtime/mfinal.go | 21 ++++++++++++++++ src/sync/oncefunc.go | 5 +++- src/sync/oncefunc_test.go | 50 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 76 insertions(+), 18 deletions(-) diff --git a/src/runtime/export_test.go b/src/runtime/export_test.go index d2f3563956..2b34929ba0 100644 --- a/src/runtime/export_test.go +++ b/src/runtime/export_test.go @@ -1920,24 +1920,8 @@ func UserArenaClone[T any](s T) T { var AlignUp = alignUp -// BlockUntilEmptyFinalizerQueue blocks until either the finalizer -// queue is emptied (and the finalizers have executed) or the timeout -// is reached. Returns true if the finalizer queue was emptied. func BlockUntilEmptyFinalizerQueue(timeout int64) bool { - start := nanotime() - for nanotime()-start < timeout { - lock(&finlock) - // We know the queue has been drained when both finq is nil - // and the finalizer g has stopped executing. - empty := finq == nil - empty = empty && readgstatus(fing) == _Gwaiting && fing.waitreason == waitReasonFinalizerWait - unlock(&finlock) - if empty { - return true - } - Gosched() - } - return false + return blockUntilEmptyFinalizerQueue(timeout) } func FrameStartLine(f *Frame) int { diff --git a/src/runtime/mfinal.go b/src/runtime/mfinal.go index be501e6fca..7d9d547c0f 100644 --- a/src/runtime/mfinal.go +++ b/src/runtime/mfinal.go @@ -300,6 +300,27 @@ func isGoPointerWithoutSpan(p unsafe.Pointer) bool { return false } +// blockUntilEmptyFinalizerQueue blocks until either the finalizer +// queue is emptied (and the finalizers have executed) or the timeout +// is reached. Returns true if the finalizer queue was emptied. +// This is used by the runtime and sync tests. +func blockUntilEmptyFinalizerQueue(timeout int64) bool { + start := nanotime() + for nanotime()-start < timeout { + lock(&finlock) + // We know the queue has been drained when both finq is nil + // and the finalizer g has stopped executing. + empty := finq == nil + empty = empty && readgstatus(fing) == _Gwaiting && fing.waitreason == waitReasonFinalizerWait + unlock(&finlock) + if empty { + return true + } + Gosched() + } + return false +} + // SetFinalizer sets the finalizer associated with obj to the provided // finalizer function. When the garbage collector finds an unreachable block // with an associated finalizer, it clears the association and runs diff --git a/src/sync/oncefunc.go b/src/sync/oncefunc.go index 9ef8344132..db286283d1 100644 --- a/src/sync/oncefunc.go +++ b/src/sync/oncefunc.go @@ -25,7 +25,8 @@ func OnceFunc(f func()) func() { } }() f() - valid = true // Set only if f does not panic + f = nil // Do not keep f alive after invoking it. + valid = true // Set only if f does not panic. } return func() { once.Do(g) @@ -54,6 +55,7 @@ func OnceValue[T any](f func() T) func() T { } }() result = f() + f = nil valid = true } return func() T { @@ -85,6 +87,7 @@ func OnceValues[T1, T2 any](f func() (T1, T2)) func() (T1, T2) { } }() r1, r2 = f() + f = nil valid = true } return func() (T1, T2) { diff --git a/src/sync/oncefunc_test.go b/src/sync/oncefunc_test.go index 3c523a5b62..5f0d564063 100644 --- a/src/sync/oncefunc_test.go +++ b/src/sync/oncefunc_test.go @@ -6,10 +6,13 @@ package sync_test import ( "bytes" + "math" "runtime" "runtime/debug" "sync" + "sync/atomic" "testing" + _ "unsafe" ) // We assume that the Once.Do tests have already covered parallelism. @@ -182,6 +185,53 @@ func onceFuncPanic() { panic("x") } +func TestOnceXGC(t *testing.T) { + fns := map[string]func([]byte) func(){ + "OnceFunc": func(buf []byte) func() { + return sync.OnceFunc(func() { buf[0] = 1 }) + }, + "OnceValue": func(buf []byte) func() { + f := sync.OnceValue(func() any { buf[0] = 1; return nil }) + return func() { f() } + }, + "OnceValues": func(buf []byte) func() { + f := sync.OnceValues(func() (any, any) { buf[0] = 1; return nil, nil }) + return func() { f() } + }, + } + for n, fn := range fns { + t.Run(n, func(t *testing.T) { + buf := make([]byte, 1024) + var gc atomic.Bool + runtime.SetFinalizer(&buf[0], func(_ *byte) { + gc.Store(true) + }) + f := fn(buf) + gcwaitfin() + if gc.Load() != false { + t.Fatal("wrapped function garbage collected too early") + } + f() + gcwaitfin() + if gc.Load() != true { + // Even if f is still alive, the function passed to Once(Func|Value|Values) + // is not kept alive after the first call to f. + t.Fatal("wrapped function should be garbage collected, but still live") + } + f() + }) + } +} + +// gcwaitfin performs garbage collection and waits for all finalizers to run. +func gcwaitfin() { + runtime.GC() + runtime_blockUntilEmptyFinalizerQueue(math.MaxInt64) +} + +//go:linkname runtime_blockUntilEmptyFinalizerQueue runtime.blockUntilEmptyFinalizerQueue +func runtime_blockUntilEmptyFinalizerQueue(int64) bool + var ( onceFunc = sync.OnceFunc(func() {}) From f43581131e96f0a4a7745250218ace6c4ea2e557 Mon Sep 17 00:00:00 2001 From: Guoqi Chen Date: Thu, 17 Aug 2023 03:58:10 +0800 Subject: [PATCH 031/313] cmd/compile, cmd/internal, runtime: change the registers used by the duff device for loong64 Add R21 to the allocatable registers, use R20 and R21 in duff device. This CL is in preparation for subsequent regABI support. Updates #40724 Co-authored-by: Xiaolin Zhao Change-Id: If1661adc0f766925fbe74827a369797f95fa28a9 Reviewed-on: https://go-review.googlesource.com/c/go/+/521775 Reviewed-by: David Chase Run-TryBot: David Chase Reviewed-by: Cherry Mui Reviewed-by: Meidan Li Reviewed-by: Than McIntosh TryBot-Result: Gopher Robot --- src/cmd/compile/internal/loong64/ssa.go | 2 +- .../compile/internal/ssa/_gen/LOONG64Ops.go | 44 +- src/cmd/compile/internal/ssa/opGen.go | 426 +++--- src/cmd/internal/obj/loong64/a.out.go | 8 +- src/runtime/duff_loong64.s | 1280 ++++++++--------- src/runtime/mkduff.go | 10 +- 6 files changed, 885 insertions(+), 885 deletions(-) diff --git a/src/cmd/compile/internal/loong64/ssa.go b/src/cmd/compile/internal/loong64/ssa.go index 6e81da3ef8..ad465ba3bb 100644 --- a/src/cmd/compile/internal/loong64/ssa.go +++ b/src/cmd/compile/internal/loong64/ssa.go @@ -362,7 +362,7 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) { p.To.Type = obj.TYPE_REG p.To.Reg = v.Reg() case ssa.OpLOONG64DUFFZERO: - // runtime.duffzero expects start address in R19 + // runtime.duffzero expects start address in R20 p := s.Prog(obj.ADUFFZERO) p.To.Type = obj.TYPE_MEM p.To.Name = obj.NAME_EXTERN diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go index 3442fc8d7c..97aa9590a7 100644 --- a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go +++ b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go @@ -123,7 +123,7 @@ func init() { // Common individual register masks var ( - gp = buildReg("R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31") // R1 is LR, R2 is thread pointer, R3 is stack pointer, R21-unused, R22 is g, R30 is REGTMP + gp = buildReg("R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31") // R1 is LR, R2 is thread pointer, R3 is stack pointer, R22 is g, R30 is REGTMP gpg = gp | buildReg("g") gpsp = gp | buildReg("SP") gpspg = gpg | buildReg("SP") @@ -283,22 +283,22 @@ func init() { // arg1 = mem // auxint = offset into duffzero code to start executing // returns mem - // R19 aka loong64.REGRT1 changed as side effect + // R20 aka loong64.REGRT1 changed as side effect { name: "DUFFZERO", aux: "Int64", argLength: 2, reg: regInfo{ - inputs: []regMask{buildReg("R19")}, - clobbers: buildReg("R19 R1"), + inputs: []regMask{buildReg("R20")}, + clobbers: buildReg("R20 R1"), }, typ: "Mem", faultOnNilArg0: true, }, // duffcopy - // arg0 = address of dst memory (in R20, changed as side effect) REGRT2 - // arg1 = address of src memory (in R19, changed as side effect) REGRT1 + // arg0 = address of dst memory (in R21, changed as side effect) + // arg1 = address of src memory (in R20, changed as side effect) // arg2 = mem // auxint = offset into duffcopy code to start executing // returns mem @@ -307,8 +307,8 @@ func init() { aux: "Int64", argLength: 3, reg: regInfo{ - inputs: []regMask{buildReg("R20"), buildReg("R19")}, - clobbers: buildReg("R19 R20 R1"), + inputs: []regMask{buildReg("R21"), buildReg("R20")}, + clobbers: buildReg("R20 R21 R1"), }, typ: "Mem", faultOnNilArg0: true, @@ -316,45 +316,45 @@ func init() { }, // large or unaligned zeroing - // arg0 = address of memory to zero (in R19, changed as side effect) + // arg0 = address of memory to zero (in R20, changed as side effect) // arg1 = address of the last element to zero // arg2 = mem // auxint = alignment // returns mem - // MOVx R0, (R19) - // ADDV $sz, R19 - // BGEU Rarg1, R19, -2(PC) + // MOVx R0, (R20) + // ADDV $sz, R20 + // BGEU Rarg1, R20, -2(PC) { name: "LoweredZero", aux: "Int64", argLength: 3, reg: regInfo{ - inputs: []regMask{buildReg("R19"), gp}, - clobbers: buildReg("R19"), + inputs: []regMask{buildReg("R20"), gp}, + clobbers: buildReg("R20"), }, typ: "Mem", faultOnNilArg0: true, }, // large or unaligned move - // arg0 = address of dst memory (in R20, changed as side effect) - // arg1 = address of src memory (in R19, changed as side effect) + // arg0 = address of dst memory (in R21, changed as side effect) + // arg1 = address of src memory (in R20, changed as side effect) // arg2 = address of the last element of src // arg3 = mem // auxint = alignment // returns mem - // MOVx (R19), Rtmp - // MOVx Rtmp, (R20) - // ADDV $sz, R19 + // MOVx (R20), Rtmp + // MOVx Rtmp, (R21) // ADDV $sz, R20 - // BGEU Rarg2, R19, -4(PC) + // ADDV $sz, R21 + // BGEU Rarg2, R20, -4(PC) { name: "LoweredMove", aux: "Int64", argLength: 4, reg: regInfo{ - inputs: []regMask{buildReg("R20"), buildReg("R19"), gp}, - clobbers: buildReg("R19 R20"), + inputs: []regMask{buildReg("R21"), buildReg("R20"), gp}, + clobbers: buildReg("R20 R21"), }, typ: "Mem", faultOnNilArg0: true, diff --git a/src/cmd/compile/internal/ssa/opGen.go b/src/cmd/compile/internal/ssa/opGen.go index 80ac8e4f8b..55a50fa284 100644 --- a/src/cmd/compile/internal/ssa/opGen.go +++ b/src/cmd/compile/internal/ssa/opGen.go @@ -23193,11 +23193,11 @@ var opcodeTable = [...]opInfo{ asm: loong64.AADDVU, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23208,10 +23208,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.AADDVU, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693244}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741820}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23221,11 +23221,11 @@ var opcodeTable = [...]opInfo{ asm: loong64.ASUBVU, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23236,10 +23236,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.ASUBVU, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23250,11 +23250,11 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMULV, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23265,11 +23265,11 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMULHV, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23280,11 +23280,11 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMULHVU, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23294,11 +23294,11 @@ var opcodeTable = [...]opInfo{ asm: loong64.ADIVV, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23308,11 +23308,11 @@ var opcodeTable = [...]opInfo{ asm: loong64.ADIVVU, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23322,11 +23322,11 @@ var opcodeTable = [...]opInfo{ asm: loong64.AREMV, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23336,11 +23336,11 @@ var opcodeTable = [...]opInfo{ asm: loong64.AREMVU, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23467,11 +23467,11 @@ var opcodeTable = [...]opInfo{ asm: loong64.AAND, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23482,10 +23482,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.AAND, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23496,11 +23496,11 @@ var opcodeTable = [...]opInfo{ asm: loong64.AOR, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23511,10 +23511,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.AOR, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23525,11 +23525,11 @@ var opcodeTable = [...]opInfo{ asm: loong64.AXOR, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23540,10 +23540,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.AXOR, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23554,11 +23554,11 @@ var opcodeTable = [...]opInfo{ asm: loong64.ANOR, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23569,10 +23569,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.ANOR, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23581,10 +23581,10 @@ var opcodeTable = [...]opInfo{ argLen: 1, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23646,11 +23646,11 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMASKEQZ, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23660,11 +23660,11 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMASKNEZ, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23674,11 +23674,11 @@ var opcodeTable = [...]opInfo{ asm: loong64.ASLLV, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23689,10 +23689,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.ASLLV, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23702,11 +23702,11 @@ var opcodeTable = [...]opInfo{ asm: loong64.ASRLV, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23717,10 +23717,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.ASRLV, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23730,11 +23730,11 @@ var opcodeTable = [...]opInfo{ asm: loong64.ASRAV, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23745,10 +23745,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.ASRAV, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23758,11 +23758,11 @@ var opcodeTable = [...]opInfo{ asm: loong64.AROTR, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23772,11 +23772,11 @@ var opcodeTable = [...]opInfo{ asm: loong64.AROTRV, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23787,10 +23787,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.AROTR, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23801,10 +23801,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.AROTRV, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23814,11 +23814,11 @@ var opcodeTable = [...]opInfo{ asm: loong64.ASGT, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23829,10 +23829,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.ASGT, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23842,11 +23842,11 @@ var opcodeTable = [...]opInfo{ asm: loong64.ASGTU, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23857,10 +23857,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.ASGTU, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23938,7 +23938,7 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVV, reg: regInfo{ outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23978,7 +23978,7 @@ var opcodeTable = [...]opInfo{ {0, 4611686018427387908}, // SP SB }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -23991,10 +23991,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVB, reg: regInfo{ inputs: []inputInfo{ - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24007,10 +24007,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVBU, reg: regInfo{ inputs: []inputInfo{ - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24023,10 +24023,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVH, reg: regInfo{ inputs: []inputInfo{ - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24039,10 +24039,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVHU, reg: regInfo{ inputs: []inputInfo{ - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24055,10 +24055,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVW, reg: regInfo{ inputs: []inputInfo{ - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24071,10 +24071,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVWU, reg: regInfo{ inputs: []inputInfo{ - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24087,10 +24087,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVV, reg: regInfo{ inputs: []inputInfo{ - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24103,7 +24103,7 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVF, reg: regInfo{ inputs: []inputInfo{ - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, outputs: []outputInfo{ {0, 4611686017353646080}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 @@ -24119,7 +24119,7 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVD, reg: regInfo{ inputs: []inputInfo{ - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, outputs: []outputInfo{ {0, 4611686017353646080}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 @@ -24135,8 +24135,8 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVB, reg: regInfo{ inputs: []inputInfo{ - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, }, }, @@ -24149,8 +24149,8 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVH, reg: regInfo{ inputs: []inputInfo{ - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, }, }, @@ -24163,8 +24163,8 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVW, reg: regInfo{ inputs: []inputInfo{ - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, }, }, @@ -24177,8 +24177,8 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVV, reg: regInfo{ inputs: []inputInfo{ - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, }, }, @@ -24191,7 +24191,7 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVF, reg: regInfo{ inputs: []inputInfo{ - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB {1, 4611686017353646080}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 }, }, @@ -24205,7 +24205,7 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVD, reg: regInfo{ inputs: []inputInfo{ - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB {1, 4611686017353646080}, // F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 }, }, @@ -24219,7 +24219,7 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVB, reg: regInfo{ inputs: []inputInfo{ - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, }, }, @@ -24232,7 +24232,7 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVH, reg: regInfo{ inputs: []inputInfo{ - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, }, }, @@ -24245,7 +24245,7 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVW, reg: regInfo{ inputs: []inputInfo{ - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, }, }, @@ -24258,7 +24258,7 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVV, reg: regInfo{ inputs: []inputInfo{ - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, }, }, @@ -24268,10 +24268,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVB, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24281,10 +24281,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVBU, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24294,10 +24294,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVH, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24307,10 +24307,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVHU, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24320,10 +24320,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVW, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24333,10 +24333,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVWU, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24346,10 +24346,10 @@ var opcodeTable = [...]opInfo{ asm: loong64.AMOVV, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24359,10 +24359,10 @@ var opcodeTable = [...]opInfo{ resultInArg0: true, reg: regInfo{ inputs: []inputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24503,7 +24503,7 @@ var opcodeTable = [...]opInfo{ clobberFlags: true, call: true, reg: regInfo{ - clobbers: 4611686018426339320, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 + clobbers: 4611686018427387896, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 }, }, { @@ -24514,7 +24514,7 @@ var opcodeTable = [...]opInfo{ call: true, tailCall: true, reg: regInfo{ - clobbers: 4611686018426339320, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 + clobbers: 4611686018427387896, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 }, }, { @@ -24526,9 +24526,9 @@ var opcodeTable = [...]opInfo{ reg: regInfo{ inputs: []inputInfo{ {1, 268435456}, // R29 - {0, 1070596092}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644668}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, - clobbers: 4611686018426339320, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 + clobbers: 4611686018427387896, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 }, }, { @@ -24539,9 +24539,9 @@ var opcodeTable = [...]opInfo{ call: true, reg: regInfo{ inputs: []inputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, - clobbers: 4611686018426339320, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 + clobbers: 4611686018427387896, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31 }, }, { @@ -24551,9 +24551,9 @@ var opcodeTable = [...]opInfo{ faultOnNilArg0: true, reg: regInfo{ inputs: []inputInfo{ - {0, 262144}, // R19 + {0, 524288}, // R20 }, - clobbers: 262146, // R1 R19 + clobbers: 524290, // R1 R20 }, }, { @@ -24564,10 +24564,10 @@ var opcodeTable = [...]opInfo{ faultOnNilArg1: true, reg: regInfo{ inputs: []inputInfo{ - {0, 524288}, // R20 - {1, 262144}, // R19 + {0, 1048576}, // R21 + {1, 524288}, // R20 }, - clobbers: 786434, // R1 R19 R20 + clobbers: 1572866, // R1 R20 R21 }, }, { @@ -24577,10 +24577,10 @@ var opcodeTable = [...]opInfo{ faultOnNilArg0: true, reg: regInfo{ inputs: []inputInfo{ - {0, 262144}, // R19 - {1, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 524288}, // R20 + {1, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, - clobbers: 262144, // R19 + clobbers: 524288, // R20 }, }, { @@ -24591,11 +24591,11 @@ var opcodeTable = [...]opInfo{ faultOnNilArg1: true, reg: regInfo{ inputs: []inputInfo{ - {0, 524288}, // R20 - {1, 262144}, // R19 - {2, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1048576}, // R21 + {1, 524288}, // R20 + {2, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, - clobbers: 786432, // R19 R20 + clobbers: 1572864, // R20 R21 }, }, { @@ -24604,10 +24604,10 @@ var opcodeTable = [...]opInfo{ faultOnNilArg0: true, reg: regInfo{ inputs: []inputInfo{ - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24617,10 +24617,10 @@ var opcodeTable = [...]opInfo{ faultOnNilArg0: true, reg: regInfo{ inputs: []inputInfo{ - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24630,10 +24630,10 @@ var opcodeTable = [...]opInfo{ faultOnNilArg0: true, reg: regInfo{ inputs: []inputInfo{ - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24644,8 +24644,8 @@ var opcodeTable = [...]opInfo{ hasSideEffects: true, reg: regInfo{ inputs: []inputInfo{ - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, }, }, @@ -24656,8 +24656,8 @@ var opcodeTable = [...]opInfo{ hasSideEffects: true, reg: regInfo{ inputs: []inputInfo{ - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, }, }, @@ -24668,8 +24668,8 @@ var opcodeTable = [...]opInfo{ hasSideEffects: true, reg: regInfo{ inputs: []inputInfo{ - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, }, }, @@ -24680,7 +24680,7 @@ var opcodeTable = [...]opInfo{ hasSideEffects: true, reg: regInfo{ inputs: []inputInfo{ - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, }, }, @@ -24691,7 +24691,7 @@ var opcodeTable = [...]opInfo{ hasSideEffects: true, reg: regInfo{ inputs: []inputInfo{ - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, }, }, @@ -24704,11 +24704,11 @@ var opcodeTable = [...]opInfo{ unsafePoint: true, reg: regInfo{ inputs: []inputInfo{ - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24721,11 +24721,11 @@ var opcodeTable = [...]opInfo{ unsafePoint: true, reg: regInfo{ inputs: []inputInfo{ - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24738,11 +24738,11 @@ var opcodeTable = [...]opInfo{ unsafePoint: true, reg: regInfo{ inputs: []inputInfo{ - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24755,11 +24755,11 @@ var opcodeTable = [...]opInfo{ unsafePoint: true, reg: regInfo{ inputs: []inputInfo{ - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24773,10 +24773,10 @@ var opcodeTable = [...]opInfo{ unsafePoint: true, reg: regInfo{ inputs: []inputInfo{ - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24790,10 +24790,10 @@ var opcodeTable = [...]opInfo{ unsafePoint: true, reg: regInfo{ inputs: []inputInfo{ - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24806,12 +24806,12 @@ var opcodeTable = [...]opInfo{ unsafePoint: true, reg: regInfo{ inputs: []inputInfo{ - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {2, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {2, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24824,12 +24824,12 @@ var opcodeTable = [...]opInfo{ unsafePoint: true, reg: regInfo{ inputs: []inputInfo{ - {1, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {2, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 - {0, 4611686019500081148}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 SB + {1, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {2, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 4611686019501129724}, // SP R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 SB }, outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24840,7 +24840,7 @@ var opcodeTable = [...]opInfo{ faultOnNilArg0: true, reg: regInfo{ inputs: []inputInfo{ - {0, 1072693240}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 g R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1073741816}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 g R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24849,7 +24849,7 @@ var opcodeTable = [...]opInfo{ argLen: 1, reg: regInfo{ outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24858,7 +24858,7 @@ var opcodeTable = [...]opInfo{ argLen: 1, reg: regInfo{ outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24878,7 +24878,7 @@ var opcodeTable = [...]opInfo{ rematerializeable: true, reg: regInfo{ outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -24888,7 +24888,7 @@ var opcodeTable = [...]opInfo{ rematerializeable: true, reg: regInfo{ outputs: []outputInfo{ - {0, 1070596088}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R23 R24 R25 R26 R27 R28 R29 R31 + {0, 1071644664}, // R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R23 R24 R25 R26 R27 R28 R29 R31 }, }, }, @@ -40707,16 +40707,16 @@ var registersLOONG64 = [...]Register{ {17, loong64.REG_R18, 14, "R18"}, {18, loong64.REG_R19, 15, "R19"}, {19, loong64.REG_R20, 16, "R20"}, - {20, loong64.REG_R21, -1, "R21"}, + {20, loong64.REG_R21, 17, "R21"}, {21, loong64.REGG, -1, "g"}, - {22, loong64.REG_R23, 17, "R23"}, - {23, loong64.REG_R24, 18, "R24"}, - {24, loong64.REG_R25, 19, "R25"}, - {25, loong64.REG_R26, 20, "R26"}, - {26, loong64.REG_R27, 21, "R27"}, - {27, loong64.REG_R28, 22, "R28"}, - {28, loong64.REG_R29, 23, "R29"}, - {29, loong64.REG_R31, 24, "R31"}, + {22, loong64.REG_R23, 18, "R23"}, + {23, loong64.REG_R24, 19, "R24"}, + {24, loong64.REG_R25, 20, "R25"}, + {25, loong64.REG_R26, 21, "R26"}, + {26, loong64.REG_R27, 22, "R27"}, + {27, loong64.REG_R28, 23, "R28"}, + {28, loong64.REG_R29, 24, "R29"}, + {29, loong64.REG_R31, 25, "R31"}, {30, loong64.REG_F0, -1, "F0"}, {31, loong64.REG_F1, -1, "F1"}, {32, loong64.REG_F2, -1, "F2"}, @@ -40753,7 +40753,7 @@ var registersLOONG64 = [...]Register{ } var paramIntRegLOONG64 = []int8{3, 4, 5, 6, 7, 8, 9, 10} var paramFloatRegLOONG64 = []int8{30, 31, 32, 33, 34, 35, 36, 37} -var gpRegMaskLOONG64 = regMask(1070596088) +var gpRegMaskLOONG64 = regMask(1071644664) var fpRegMaskLOONG64 = regMask(4611686017353646080) var specialRegMaskLOONG64 = regMask(0) var framepointerRegLOONG64 = int8(-1) diff --git a/src/cmd/internal/obj/loong64/a.out.go b/src/cmd/internal/obj/loong64/a.out.go index 99a7da388f..a4bb7b40a3 100644 --- a/src/cmd/internal/obj/loong64/a.out.go +++ b/src/cmd/internal/obj/loong64/a.out.go @@ -157,14 +157,14 @@ const ( REGZERO = REG_R0 // set to zero REGLINK = REG_R1 REGSP = REG_R3 - REGRET = REG_R19 + REGRET = REG_R20 // not use REGARG = -1 // -1 disables passing the first argument in register - REGRT1 = REG_R19 // reserved for runtime, duffzero and duffcopy - REGRT2 = REG_R20 // reserved for runtime, duffcopy + REGRT1 = REG_R20 // reserved for runtime, duffzero and duffcopy + REGRT2 = REG_R21 // reserved for runtime, duffcopy REGCTXT = REG_R29 // context for closures REGG = REG_R22 // G in loong64 REGTMP = REG_R30 // used by the assembler - FREGRET = REG_F0 + FREGRET = REG_F0 // not use ) var LOONG64DWARFRegisters = map[int16]int16{} diff --git a/src/runtime/duff_loong64.s b/src/runtime/duff_loong64.s index 63fa3bcca1..df8b653965 100644 --- a/src/runtime/duff_loong64.s +++ b/src/runtime/duff_loong64.s @@ -5,903 +5,903 @@ #include "textflag.h" TEXT runtime·duffzero(SB), NOSPLIT|NOFRAME, $0-0 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 - MOVV R0, (R19) - ADDV $8, R19 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 + MOVV R0, (R20) + ADDV $8, R20 RET TEXT runtime·duffcopy(SB), NOSPLIT|NOFRAME, $0-0 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 - MOVV (R19), R30 - ADDV $8, R19 - MOVV R30, (R20) + MOVV (R20), R30 ADDV $8, R20 + MOVV R30, (R21) + ADDV $8, R21 RET diff --git a/src/runtime/mkduff.go b/src/runtime/mkduff.go index e8d4fcc93e..77674254d4 100644 --- a/src/runtime/mkduff.go +++ b/src/runtime/mkduff.go @@ -183,8 +183,8 @@ func zeroLOONG64(w io.Writer) { // On return, R19 points to the last zeroed dword. fmt.Fprintln(w, "TEXT runtime·duffzero(SB), NOSPLIT|NOFRAME, $0-0") for i := 0; i < 128; i++ { - fmt.Fprintln(w, "\tMOVV\tR0, (R19)") - fmt.Fprintln(w, "\tADDV\t$8, R19") + fmt.Fprintln(w, "\tMOVV\tR0, (R20)") + fmt.Fprintln(w, "\tADDV\t$8, R20") } fmt.Fprintln(w, "\tRET") } @@ -192,10 +192,10 @@ func zeroLOONG64(w io.Writer) { func copyLOONG64(w io.Writer) { fmt.Fprintln(w, "TEXT runtime·duffcopy(SB), NOSPLIT|NOFRAME, $0-0") for i := 0; i < 128; i++ { - fmt.Fprintln(w, "\tMOVV\t(R19), R30") - fmt.Fprintln(w, "\tADDV\t$8, R19") - fmt.Fprintln(w, "\tMOVV\tR30, (R20)") + fmt.Fprintln(w, "\tMOVV\t(R20), R30") fmt.Fprintln(w, "\tADDV\t$8, R20") + fmt.Fprintln(w, "\tMOVV\tR30, (R21)") + fmt.Fprintln(w, "\tADDV\t$8, R21") fmt.Fprintln(w) } fmt.Fprintln(w, "\tRET") From 346e06c46dd1791e924ce4fffc879747bdabedf5 Mon Sep 17 00:00:00 2001 From: Guoqi Chen Date: Tue, 10 Oct 2023 20:16:36 +0800 Subject: [PATCH 032/313] cmd/internal/obj,cmd/link: access global data via GOT in -dynlink mode on loong64 Updates #58784 Change-Id: Ic98d10a512fea0c3ca321ab52693d9f6775126a6 Reviewed-on: https://go-review.googlesource.com/c/go/+/480875 Reviewed-by: David Chase Reviewed-by: Cherry Mui Reviewed-by: Meidan Li TryBot-Result: Gopher Robot Run-TryBot: WANG Xuerui Reviewed-by: WANG Xuerui --- .../compile/internal/ssa/_gen/LOONG64.rules | 79 ++------ .../compile/internal/ssa/rewriteLOONG64.go | 190 +++++++++++------- src/cmd/internal/obj/loong64/a.out.go | 1 + src/cmd/internal/obj/loong64/asm.go | 21 ++ src/cmd/internal/obj/loong64/cnames.go | 1 + src/cmd/internal/obj/loong64/obj.go | 117 +++++++++++ src/cmd/internal/objabi/reloctype.go | 5 + src/cmd/internal/objabi/reloctype_string.go | 22 +- src/cmd/link/internal/loong64/asm.go | 19 +- 9 files changed, 310 insertions(+), 145 deletions(-) diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules index 4a47c4cd47..b9aaa3ff7f 100644 --- a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +++ b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules @@ -455,66 +455,31 @@ (ADDVconst [off1] (MOVVaddr [off2] {sym} ptr)) && is32Bit(off1+int64(off2)) => (MOVVaddr [int32(off1)+int32(off2)] {sym} ptr) // fold address into load/store -(MOVBload [off1] {sym} (ADDVconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => (MOVBload [off1+int32(off2)] {sym} ptr mem) -(MOVBUload [off1] {sym} (ADDVconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => (MOVBUload [off1+int32(off2)] {sym} ptr mem) -(MOVHload [off1] {sym} (ADDVconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => (MOVHload [off1+int32(off2)] {sym} ptr mem) -(MOVHUload [off1] {sym} (ADDVconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => (MOVHUload [off1+int32(off2)] {sym} ptr mem) -(MOVWload [off1] {sym} (ADDVconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => (MOVWload [off1+int32(off2)] {sym} ptr mem) -(MOVWUload [off1] {sym} (ADDVconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => (MOVWUload [off1+int32(off2)] {sym} ptr mem) -(MOVVload [off1] {sym} (ADDVconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => (MOVVload [off1+int32(off2)] {sym} ptr mem) -(MOVFload [off1] {sym} (ADDVconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => (MOVFload [off1+int32(off2)] {sym} ptr mem) -(MOVDload [off1] {sym} (ADDVconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => (MOVDload [off1+int32(off2)] {sym} ptr mem) +// Do not fold global variable access in -dynlink mode, where it will be rewritten +// to use the GOT via REGTMP, which currently cannot handle large offset. +(MOV(B|BU|H|HU|W|WU|V|F|D)load [off1] {sym} (ADDVconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) + && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) => + (MOV(B|BU|H|HU|W|WU|V|F|D)load [off1+int32(off2)] {sym} ptr mem) -(MOVBstore [off1] {sym} (ADDVconst [off2] ptr) val mem) && is32Bit(int64(off1)+off2) => (MOVBstore [off1+int32(off2)] {sym} ptr val mem) -(MOVHstore [off1] {sym} (ADDVconst [off2] ptr) val mem) && is32Bit(int64(off1)+off2) => (MOVHstore [off1+int32(off2)] {sym} ptr val mem) -(MOVWstore [off1] {sym} (ADDVconst [off2] ptr) val mem) && is32Bit(int64(off1)+off2) => (MOVWstore [off1+int32(off2)] {sym} ptr val mem) -(MOVVstore [off1] {sym} (ADDVconst [off2] ptr) val mem) && is32Bit(int64(off1)+off2) => (MOVVstore [off1+int32(off2)] {sym} ptr val mem) -(MOVFstore [off1] {sym} (ADDVconst [off2] ptr) val mem) && is32Bit(int64(off1)+off2) => (MOVFstore [off1+int32(off2)] {sym} ptr val mem) -(MOVDstore [off1] {sym} (ADDVconst [off2] ptr) val mem) && is32Bit(int64(off1)+off2) => (MOVDstore [off1+int32(off2)] {sym} ptr val mem) -(MOVBstorezero [off1] {sym} (ADDVconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => (MOVBstorezero [off1+int32(off2)] {sym} ptr mem) -(MOVHstorezero [off1] {sym} (ADDVconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => (MOVHstorezero [off1+int32(off2)] {sym} ptr mem) -(MOVWstorezero [off1] {sym} (ADDVconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => (MOVWstorezero [off1+int32(off2)] {sym} ptr mem) -(MOVVstorezero [off1] {sym} (ADDVconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) => (MOVVstorezero [off1+int32(off2)] {sym} ptr mem) +(MOV(B|H|W|V|F|D)store [off1] {sym} (ADDVconst [off2] ptr) val mem) && is32Bit(int64(off1)+off2) + && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) => + (MOV(B|H|W|V|F|D)store [off1+int32(off2)] {sym} ptr val mem) -(MOVBload [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => - (MOVBload [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) -(MOVBUload [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => - (MOVBUload [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) -(MOVHload [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => - (MOVHload [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) -(MOVHUload [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => - (MOVHUload [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) -(MOVWload [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => - (MOVWload [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) -(MOVWUload [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => - (MOVWUload [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) -(MOVVload [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => - (MOVVload [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) -(MOVFload [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => - (MOVFload [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) -(MOVDload [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => - (MOVDload [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) +(MOV(B|H|W|V)storezero [off1] {sym} (ADDVconst [off2] ptr) mem) && is32Bit(int64(off1)+off2) + && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) => + (MOV(B|H|W|V)storezero [off1+int32(off2)] {sym} ptr mem) -(MOVBstore [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) val mem) && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => - (MOVBstore [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr val mem) -(MOVHstore [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) val mem) && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => - (MOVHstore [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr val mem) -(MOVWstore [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) val mem) && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => - (MOVWstore [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr val mem) -(MOVVstore [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) val mem) && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => - (MOVVstore [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr val mem) -(MOVFstore [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) val mem) && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => - (MOVFstore [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr val mem) -(MOVDstore [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) val mem) && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => - (MOVDstore [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr val mem) -(MOVBstorezero [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => - (MOVBstorezero [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) -(MOVHstorezero [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => - (MOVHstorezero [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) -(MOVWstorezero [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => - (MOVWstorezero [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) -(MOVVstorezero [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) && canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) => - (MOVVstorezero [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) +(MOV(B|BU|H|HU|W|WU|V|F|D)load [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) && canMergeSym(sym1,sym2) + && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) => + (MOV(B|BU|H|HU|W|WU|V|F|D)load [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) + +(MOV(B|H|W|V|F|D)store [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) val mem) && canMergeSym(sym1,sym2) + && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) => + (MOV(B|H|W|V|F|D)store [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr val mem) + +(MOV(B|H|W|V)storezero [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) && canMergeSym(sym1,sym2) + && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) => + (MOV(B|H|W|V)storezero [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) (LoweredAtomicStore(32|64) ptr (MOVVconst [0]) mem) => (LoweredAtomicStorezero(32|64) ptr mem) (LoweredAtomicAdd32 ptr (MOVVconst [c]) mem) && is32Bit(c) => (LoweredAtomicAddconst32 [int32(c)] ptr mem) diff --git a/src/cmd/compile/internal/ssa/rewriteLOONG64.go b/src/cmd/compile/internal/ssa/rewriteLOONG64.go index e88b74cb22..757524bdbb 100644 --- a/src/cmd/compile/internal/ssa/rewriteLOONG64.go +++ b/src/cmd/compile/internal/ssa/rewriteLOONG64.go @@ -1724,8 +1724,10 @@ func rewriteValueLOONG64_OpLOONG64MASKNEZ(v *Value) bool { func rewriteValueLOONG64_OpLOONG64MOVBUload(v *Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] + b := v.Block + config := b.Func.Config // match: (MOVBUload [off1] {sym} (ADDVconst [off2] ptr) mem) - // cond: is32Bit(int64(off1)+off2) + // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVBUload [off1+int32(off2)] {sym} ptr mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -1736,7 +1738,7 @@ func rewriteValueLOONG64_OpLOONG64MOVBUload(v *Value) bool { off2 := auxIntToInt64(v_0.AuxInt) ptr := v_0.Args[0] mem := v_1 - if !(is32Bit(int64(off1) + off2)) { + if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVBUload) @@ -1746,7 +1748,7 @@ func rewriteValueLOONG64_OpLOONG64MOVBUload(v *Value) bool { return true } // match: (MOVBUload [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) - // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) + // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVBUload [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -1758,7 +1760,7 @@ func rewriteValueLOONG64_OpLOONG64MOVBUload(v *Value) bool { sym2 := auxToSym(v_0.Aux) ptr := v_0.Args[0] mem := v_1 - if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2))) { + if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVBUload) @@ -1809,8 +1811,10 @@ func rewriteValueLOONG64_OpLOONG64MOVBUreg(v *Value) bool { func rewriteValueLOONG64_OpLOONG64MOVBload(v *Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] + b := v.Block + config := b.Func.Config // match: (MOVBload [off1] {sym} (ADDVconst [off2] ptr) mem) - // cond: is32Bit(int64(off1)+off2) + // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVBload [off1+int32(off2)] {sym} ptr mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -1821,7 +1825,7 @@ func rewriteValueLOONG64_OpLOONG64MOVBload(v *Value) bool { off2 := auxIntToInt64(v_0.AuxInt) ptr := v_0.Args[0] mem := v_1 - if !(is32Bit(int64(off1) + off2)) { + if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVBload) @@ -1831,7 +1835,7 @@ func rewriteValueLOONG64_OpLOONG64MOVBload(v *Value) bool { return true } // match: (MOVBload [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) - // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) + // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVBload [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -1843,7 +1847,7 @@ func rewriteValueLOONG64_OpLOONG64MOVBload(v *Value) bool { sym2 := auxToSym(v_0.Aux) ptr := v_0.Args[0] mem := v_1 - if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2))) { + if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVBload) @@ -1895,8 +1899,10 @@ func rewriteValueLOONG64_OpLOONG64MOVBstore(v *Value) bool { v_2 := v.Args[2] v_1 := v.Args[1] v_0 := v.Args[0] + b := v.Block + config := b.Func.Config // match: (MOVBstore [off1] {sym} (ADDVconst [off2] ptr) val mem) - // cond: is32Bit(int64(off1)+off2) + // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVBstore [off1+int32(off2)] {sym} ptr val mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -1908,7 +1914,7 @@ func rewriteValueLOONG64_OpLOONG64MOVBstore(v *Value) bool { ptr := v_0.Args[0] val := v_1 mem := v_2 - if !(is32Bit(int64(off1) + off2)) { + if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVBstore) @@ -1918,7 +1924,7 @@ func rewriteValueLOONG64_OpLOONG64MOVBstore(v *Value) bool { return true } // match: (MOVBstore [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) val mem) - // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) + // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVBstore [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr val mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -1931,7 +1937,7 @@ func rewriteValueLOONG64_OpLOONG64MOVBstore(v *Value) bool { ptr := v_0.Args[0] val := v_1 mem := v_2 - if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2))) { + if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVBstore) @@ -2047,8 +2053,10 @@ func rewriteValueLOONG64_OpLOONG64MOVBstore(v *Value) bool { func rewriteValueLOONG64_OpLOONG64MOVBstorezero(v *Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] + b := v.Block + config := b.Func.Config // match: (MOVBstorezero [off1] {sym} (ADDVconst [off2] ptr) mem) - // cond: is32Bit(int64(off1)+off2) + // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVBstorezero [off1+int32(off2)] {sym} ptr mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -2059,7 +2067,7 @@ func rewriteValueLOONG64_OpLOONG64MOVBstorezero(v *Value) bool { off2 := auxIntToInt64(v_0.AuxInt) ptr := v_0.Args[0] mem := v_1 - if !(is32Bit(int64(off1) + off2)) { + if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVBstorezero) @@ -2069,7 +2077,7 @@ func rewriteValueLOONG64_OpLOONG64MOVBstorezero(v *Value) bool { return true } // match: (MOVBstorezero [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) - // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) + // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVBstorezero [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -2081,7 +2089,7 @@ func rewriteValueLOONG64_OpLOONG64MOVBstorezero(v *Value) bool { sym2 := auxToSym(v_0.Aux) ptr := v_0.Args[0] mem := v_1 - if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2))) { + if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVBstorezero) @@ -2095,8 +2103,10 @@ func rewriteValueLOONG64_OpLOONG64MOVBstorezero(v *Value) bool { func rewriteValueLOONG64_OpLOONG64MOVDload(v *Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] + b := v.Block + config := b.Func.Config // match: (MOVDload [off1] {sym} (ADDVconst [off2] ptr) mem) - // cond: is32Bit(int64(off1)+off2) + // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVDload [off1+int32(off2)] {sym} ptr mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -2107,7 +2117,7 @@ func rewriteValueLOONG64_OpLOONG64MOVDload(v *Value) bool { off2 := auxIntToInt64(v_0.AuxInt) ptr := v_0.Args[0] mem := v_1 - if !(is32Bit(int64(off1) + off2)) { + if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVDload) @@ -2117,7 +2127,7 @@ func rewriteValueLOONG64_OpLOONG64MOVDload(v *Value) bool { return true } // match: (MOVDload [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) - // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) + // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVDload [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -2129,7 +2139,7 @@ func rewriteValueLOONG64_OpLOONG64MOVDload(v *Value) bool { sym2 := auxToSym(v_0.Aux) ptr := v_0.Args[0] mem := v_1 - if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2))) { + if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVDload) @@ -2144,8 +2154,10 @@ func rewriteValueLOONG64_OpLOONG64MOVDstore(v *Value) bool { v_2 := v.Args[2] v_1 := v.Args[1] v_0 := v.Args[0] + b := v.Block + config := b.Func.Config // match: (MOVDstore [off1] {sym} (ADDVconst [off2] ptr) val mem) - // cond: is32Bit(int64(off1)+off2) + // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVDstore [off1+int32(off2)] {sym} ptr val mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -2157,7 +2169,7 @@ func rewriteValueLOONG64_OpLOONG64MOVDstore(v *Value) bool { ptr := v_0.Args[0] val := v_1 mem := v_2 - if !(is32Bit(int64(off1) + off2)) { + if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVDstore) @@ -2167,7 +2179,7 @@ func rewriteValueLOONG64_OpLOONG64MOVDstore(v *Value) bool { return true } // match: (MOVDstore [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) val mem) - // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) + // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVDstore [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr val mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -2180,7 +2192,7 @@ func rewriteValueLOONG64_OpLOONG64MOVDstore(v *Value) bool { ptr := v_0.Args[0] val := v_1 mem := v_2 - if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2))) { + if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVDstore) @@ -2194,8 +2206,10 @@ func rewriteValueLOONG64_OpLOONG64MOVDstore(v *Value) bool { func rewriteValueLOONG64_OpLOONG64MOVFload(v *Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] + b := v.Block + config := b.Func.Config // match: (MOVFload [off1] {sym} (ADDVconst [off2] ptr) mem) - // cond: is32Bit(int64(off1)+off2) + // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVFload [off1+int32(off2)] {sym} ptr mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -2206,7 +2220,7 @@ func rewriteValueLOONG64_OpLOONG64MOVFload(v *Value) bool { off2 := auxIntToInt64(v_0.AuxInt) ptr := v_0.Args[0] mem := v_1 - if !(is32Bit(int64(off1) + off2)) { + if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVFload) @@ -2216,7 +2230,7 @@ func rewriteValueLOONG64_OpLOONG64MOVFload(v *Value) bool { return true } // match: (MOVFload [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) - // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) + // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVFload [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -2228,7 +2242,7 @@ func rewriteValueLOONG64_OpLOONG64MOVFload(v *Value) bool { sym2 := auxToSym(v_0.Aux) ptr := v_0.Args[0] mem := v_1 - if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2))) { + if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVFload) @@ -2243,8 +2257,10 @@ func rewriteValueLOONG64_OpLOONG64MOVFstore(v *Value) bool { v_2 := v.Args[2] v_1 := v.Args[1] v_0 := v.Args[0] + b := v.Block + config := b.Func.Config // match: (MOVFstore [off1] {sym} (ADDVconst [off2] ptr) val mem) - // cond: is32Bit(int64(off1)+off2) + // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVFstore [off1+int32(off2)] {sym} ptr val mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -2256,7 +2272,7 @@ func rewriteValueLOONG64_OpLOONG64MOVFstore(v *Value) bool { ptr := v_0.Args[0] val := v_1 mem := v_2 - if !(is32Bit(int64(off1) + off2)) { + if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVFstore) @@ -2266,7 +2282,7 @@ func rewriteValueLOONG64_OpLOONG64MOVFstore(v *Value) bool { return true } // match: (MOVFstore [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) val mem) - // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) + // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVFstore [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr val mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -2279,7 +2295,7 @@ func rewriteValueLOONG64_OpLOONG64MOVFstore(v *Value) bool { ptr := v_0.Args[0] val := v_1 mem := v_2 - if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2))) { + if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVFstore) @@ -2293,8 +2309,10 @@ func rewriteValueLOONG64_OpLOONG64MOVFstore(v *Value) bool { func rewriteValueLOONG64_OpLOONG64MOVHUload(v *Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] + b := v.Block + config := b.Func.Config // match: (MOVHUload [off1] {sym} (ADDVconst [off2] ptr) mem) - // cond: is32Bit(int64(off1)+off2) + // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVHUload [off1+int32(off2)] {sym} ptr mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -2305,7 +2323,7 @@ func rewriteValueLOONG64_OpLOONG64MOVHUload(v *Value) bool { off2 := auxIntToInt64(v_0.AuxInt) ptr := v_0.Args[0] mem := v_1 - if !(is32Bit(int64(off1) + off2)) { + if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVHUload) @@ -2315,7 +2333,7 @@ func rewriteValueLOONG64_OpLOONG64MOVHUload(v *Value) bool { return true } // match: (MOVHUload [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) - // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) + // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVHUload [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -2327,7 +2345,7 @@ func rewriteValueLOONG64_OpLOONG64MOVHUload(v *Value) bool { sym2 := auxToSym(v_0.Aux) ptr := v_0.Args[0] mem := v_1 - if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2))) { + if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVHUload) @@ -2400,8 +2418,10 @@ func rewriteValueLOONG64_OpLOONG64MOVHUreg(v *Value) bool { func rewriteValueLOONG64_OpLOONG64MOVHload(v *Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] + b := v.Block + config := b.Func.Config // match: (MOVHload [off1] {sym} (ADDVconst [off2] ptr) mem) - // cond: is32Bit(int64(off1)+off2) + // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVHload [off1+int32(off2)] {sym} ptr mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -2412,7 +2432,7 @@ func rewriteValueLOONG64_OpLOONG64MOVHload(v *Value) bool { off2 := auxIntToInt64(v_0.AuxInt) ptr := v_0.Args[0] mem := v_1 - if !(is32Bit(int64(off1) + off2)) { + if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVHload) @@ -2422,7 +2442,7 @@ func rewriteValueLOONG64_OpLOONG64MOVHload(v *Value) bool { return true } // match: (MOVHload [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) - // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) + // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVHload [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -2434,7 +2454,7 @@ func rewriteValueLOONG64_OpLOONG64MOVHload(v *Value) bool { sym2 := auxToSym(v_0.Aux) ptr := v_0.Args[0] mem := v_1 - if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2))) { + if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVHload) @@ -2530,8 +2550,10 @@ func rewriteValueLOONG64_OpLOONG64MOVHstore(v *Value) bool { v_2 := v.Args[2] v_1 := v.Args[1] v_0 := v.Args[0] + b := v.Block + config := b.Func.Config // match: (MOVHstore [off1] {sym} (ADDVconst [off2] ptr) val mem) - // cond: is32Bit(int64(off1)+off2) + // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVHstore [off1+int32(off2)] {sym} ptr val mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -2543,7 +2565,7 @@ func rewriteValueLOONG64_OpLOONG64MOVHstore(v *Value) bool { ptr := v_0.Args[0] val := v_1 mem := v_2 - if !(is32Bit(int64(off1) + off2)) { + if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVHstore) @@ -2553,7 +2575,7 @@ func rewriteValueLOONG64_OpLOONG64MOVHstore(v *Value) bool { return true } // match: (MOVHstore [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) val mem) - // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) + // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVHstore [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr val mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -2566,7 +2588,7 @@ func rewriteValueLOONG64_OpLOONG64MOVHstore(v *Value) bool { ptr := v_0.Args[0] val := v_1 mem := v_2 - if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2))) { + if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVHstore) @@ -2648,8 +2670,10 @@ func rewriteValueLOONG64_OpLOONG64MOVHstore(v *Value) bool { func rewriteValueLOONG64_OpLOONG64MOVHstorezero(v *Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] + b := v.Block + config := b.Func.Config // match: (MOVHstorezero [off1] {sym} (ADDVconst [off2] ptr) mem) - // cond: is32Bit(int64(off1)+off2) + // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVHstorezero [off1+int32(off2)] {sym} ptr mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -2660,7 +2684,7 @@ func rewriteValueLOONG64_OpLOONG64MOVHstorezero(v *Value) bool { off2 := auxIntToInt64(v_0.AuxInt) ptr := v_0.Args[0] mem := v_1 - if !(is32Bit(int64(off1) + off2)) { + if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVHstorezero) @@ -2670,7 +2694,7 @@ func rewriteValueLOONG64_OpLOONG64MOVHstorezero(v *Value) bool { return true } // match: (MOVHstorezero [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) - // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) + // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVHstorezero [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -2682,7 +2706,7 @@ func rewriteValueLOONG64_OpLOONG64MOVHstorezero(v *Value) bool { sym2 := auxToSym(v_0.Aux) ptr := v_0.Args[0] mem := v_1 - if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2))) { + if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVHstorezero) @@ -2696,8 +2720,10 @@ func rewriteValueLOONG64_OpLOONG64MOVHstorezero(v *Value) bool { func rewriteValueLOONG64_OpLOONG64MOVVload(v *Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] + b := v.Block + config := b.Func.Config // match: (MOVVload [off1] {sym} (ADDVconst [off2] ptr) mem) - // cond: is32Bit(int64(off1)+off2) + // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVVload [off1+int32(off2)] {sym} ptr mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -2708,7 +2734,7 @@ func rewriteValueLOONG64_OpLOONG64MOVVload(v *Value) bool { off2 := auxIntToInt64(v_0.AuxInt) ptr := v_0.Args[0] mem := v_1 - if !(is32Bit(int64(off1) + off2)) { + if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVVload) @@ -2718,7 +2744,7 @@ func rewriteValueLOONG64_OpLOONG64MOVVload(v *Value) bool { return true } // match: (MOVVload [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) - // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) + // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVVload [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -2730,7 +2756,7 @@ func rewriteValueLOONG64_OpLOONG64MOVVload(v *Value) bool { sym2 := auxToSym(v_0.Aux) ptr := v_0.Args[0] mem := v_1 - if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2))) { + if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVVload) @@ -2772,8 +2798,10 @@ func rewriteValueLOONG64_OpLOONG64MOVVstore(v *Value) bool { v_2 := v.Args[2] v_1 := v.Args[1] v_0 := v.Args[0] + b := v.Block + config := b.Func.Config // match: (MOVVstore [off1] {sym} (ADDVconst [off2] ptr) val mem) - // cond: is32Bit(int64(off1)+off2) + // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVVstore [off1+int32(off2)] {sym} ptr val mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -2785,7 +2813,7 @@ func rewriteValueLOONG64_OpLOONG64MOVVstore(v *Value) bool { ptr := v_0.Args[0] val := v_1 mem := v_2 - if !(is32Bit(int64(off1) + off2)) { + if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVVstore) @@ -2795,7 +2823,7 @@ func rewriteValueLOONG64_OpLOONG64MOVVstore(v *Value) bool { return true } // match: (MOVVstore [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) val mem) - // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) + // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVVstore [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr val mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -2808,7 +2836,7 @@ func rewriteValueLOONG64_OpLOONG64MOVVstore(v *Value) bool { ptr := v_0.Args[0] val := v_1 mem := v_2 - if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2))) { + if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVVstore) @@ -2822,8 +2850,10 @@ func rewriteValueLOONG64_OpLOONG64MOVVstore(v *Value) bool { func rewriteValueLOONG64_OpLOONG64MOVVstorezero(v *Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] + b := v.Block + config := b.Func.Config // match: (MOVVstorezero [off1] {sym} (ADDVconst [off2] ptr) mem) - // cond: is32Bit(int64(off1)+off2) + // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVVstorezero [off1+int32(off2)] {sym} ptr mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -2834,7 +2864,7 @@ func rewriteValueLOONG64_OpLOONG64MOVVstorezero(v *Value) bool { off2 := auxIntToInt64(v_0.AuxInt) ptr := v_0.Args[0] mem := v_1 - if !(is32Bit(int64(off1) + off2)) { + if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVVstorezero) @@ -2844,7 +2874,7 @@ func rewriteValueLOONG64_OpLOONG64MOVVstorezero(v *Value) bool { return true } // match: (MOVVstorezero [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) - // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) + // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVVstorezero [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -2856,7 +2886,7 @@ func rewriteValueLOONG64_OpLOONG64MOVVstorezero(v *Value) bool { sym2 := auxToSym(v_0.Aux) ptr := v_0.Args[0] mem := v_1 - if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2))) { + if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVVstorezero) @@ -2870,8 +2900,10 @@ func rewriteValueLOONG64_OpLOONG64MOVVstorezero(v *Value) bool { func rewriteValueLOONG64_OpLOONG64MOVWUload(v *Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] + b := v.Block + config := b.Func.Config // match: (MOVWUload [off1] {sym} (ADDVconst [off2] ptr) mem) - // cond: is32Bit(int64(off1)+off2) + // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVWUload [off1+int32(off2)] {sym} ptr mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -2882,7 +2914,7 @@ func rewriteValueLOONG64_OpLOONG64MOVWUload(v *Value) bool { off2 := auxIntToInt64(v_0.AuxInt) ptr := v_0.Args[0] mem := v_1 - if !(is32Bit(int64(off1) + off2)) { + if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVWUload) @@ -2892,7 +2924,7 @@ func rewriteValueLOONG64_OpLOONG64MOVWUload(v *Value) bool { return true } // match: (MOVWUload [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) - // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) + // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVWUload [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -2904,7 +2936,7 @@ func rewriteValueLOONG64_OpLOONG64MOVWUload(v *Value) bool { sym2 := auxToSym(v_0.Aux) ptr := v_0.Args[0] mem := v_1 - if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2))) { + if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVWUload) @@ -2999,8 +3031,10 @@ func rewriteValueLOONG64_OpLOONG64MOVWUreg(v *Value) bool { func rewriteValueLOONG64_OpLOONG64MOVWload(v *Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] + b := v.Block + config := b.Func.Config // match: (MOVWload [off1] {sym} (ADDVconst [off2] ptr) mem) - // cond: is32Bit(int64(off1)+off2) + // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVWload [off1+int32(off2)] {sym} ptr mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -3011,7 +3045,7 @@ func rewriteValueLOONG64_OpLOONG64MOVWload(v *Value) bool { off2 := auxIntToInt64(v_0.AuxInt) ptr := v_0.Args[0] mem := v_1 - if !(is32Bit(int64(off1) + off2)) { + if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVWload) @@ -3021,7 +3055,7 @@ func rewriteValueLOONG64_OpLOONG64MOVWload(v *Value) bool { return true } // match: (MOVWload [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) - // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) + // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVWload [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -3033,7 +3067,7 @@ func rewriteValueLOONG64_OpLOONG64MOVWload(v *Value) bool { sym2 := auxToSym(v_0.Aux) ptr := v_0.Args[0] mem := v_1 - if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2))) { + if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVWload) @@ -3162,8 +3196,10 @@ func rewriteValueLOONG64_OpLOONG64MOVWstore(v *Value) bool { v_2 := v.Args[2] v_1 := v.Args[1] v_0 := v.Args[0] + b := v.Block + config := b.Func.Config // match: (MOVWstore [off1] {sym} (ADDVconst [off2] ptr) val mem) - // cond: is32Bit(int64(off1)+off2) + // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVWstore [off1+int32(off2)] {sym} ptr val mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -3175,7 +3211,7 @@ func rewriteValueLOONG64_OpLOONG64MOVWstore(v *Value) bool { ptr := v_0.Args[0] val := v_1 mem := v_2 - if !(is32Bit(int64(off1) + off2)) { + if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVWstore) @@ -3185,7 +3221,7 @@ func rewriteValueLOONG64_OpLOONG64MOVWstore(v *Value) bool { return true } // match: (MOVWstore [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) val mem) - // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) + // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVWstore [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr val mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -3198,7 +3234,7 @@ func rewriteValueLOONG64_OpLOONG64MOVWstore(v *Value) bool { ptr := v_0.Args[0] val := v_1 mem := v_2 - if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2))) { + if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVWstore) @@ -3246,8 +3282,10 @@ func rewriteValueLOONG64_OpLOONG64MOVWstore(v *Value) bool { func rewriteValueLOONG64_OpLOONG64MOVWstorezero(v *Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] + b := v.Block + config := b.Func.Config // match: (MOVWstorezero [off1] {sym} (ADDVconst [off2] ptr) mem) - // cond: is32Bit(int64(off1)+off2) + // cond: is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVWstorezero [off1+int32(off2)] {sym} ptr mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -3258,7 +3296,7 @@ func rewriteValueLOONG64_OpLOONG64MOVWstorezero(v *Value) bool { off2 := auxIntToInt64(v_0.AuxInt) ptr := v_0.Args[0] mem := v_1 - if !(is32Bit(int64(off1) + off2)) { + if !(is32Bit(int64(off1)+off2) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVWstorezero) @@ -3268,7 +3306,7 @@ func rewriteValueLOONG64_OpLOONG64MOVWstorezero(v *Value) bool { return true } // match: (MOVWstorezero [off1] {sym1} (MOVVaddr [off2] {sym2} ptr) mem) - // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) + // cond: canMergeSym(sym1,sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink) // result: (MOVWstorezero [off1+int32(off2)] {mergeSym(sym1,sym2)} ptr mem) for { off1 := auxIntToInt32(v.AuxInt) @@ -3280,7 +3318,7 @@ func rewriteValueLOONG64_OpLOONG64MOVWstorezero(v *Value) bool { sym2 := auxToSym(v_0.Aux) ptr := v_0.Args[0] mem := v_1 - if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2))) { + if !(canMergeSym(sym1, sym2) && is32Bit(int64(off1)+int64(off2)) && (ptr.Op != OpSB || !config.ctxt.Flag_dynlink)) { break } v.reset(OpLOONG64MOVWstorezero) diff --git a/src/cmd/internal/obj/loong64/a.out.go b/src/cmd/internal/obj/loong64/a.out.go index a4bb7b40a3..d944fcfcb8 100644 --- a/src/cmd/internal/obj/loong64/a.out.go +++ b/src/cmd/internal/obj/loong64/a.out.go @@ -227,6 +227,7 @@ const ( C_ADDR C_TLS_LE C_TLS_IE + C_GOTADDR C_TEXTSIZE C_NCLASS // must be the last diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go index 19250c94ee..64c9226079 100644 --- a/src/cmd/internal/obj/loong64/asm.go +++ b/src/cmd/internal/obj/loong64/asm.go @@ -349,6 +349,8 @@ var optab = []Optab{ {AWORD, C_LCON, C_NONE, C_NONE, C_NONE, C_NONE, 40, 4, 0, 0}, {AWORD, C_DCON, C_NONE, C_NONE, C_NONE, C_NONE, 61, 4, 0, 0}, + {AMOVV, C_GOTADDR, C_NONE, C_NONE, C_REG, C_NONE, 65, 8, 0, 0}, + {ATEQ, C_SCON, C_REG, C_NONE, C_REG, C_NONE, 15, 8, 0, 0}, {ATEQ, C_SCON, C_NONE, C_NONE, C_REG, C_NONE, 15, 8, 0, 0}, @@ -676,6 +678,9 @@ func (c *ctxt0) aclass(a *obj.Addr) int { return C_SOREG } return C_LOREG + + case obj.NAME_GOTREF: + return C_GOTADDR } return C_GOK @@ -1776,6 +1781,22 @@ func (c *ctxt0) asmout(p *obj.Prog, o *Optab, out []uint32) { case 64: // movv c_reg, c_fcc0 ==> movgr2cf cd, rj a := OP_TEN(8, 1334) o1 = OP_RR(a, uint32(p.From.Reg), uint32(p.To.Reg)) + + case 65: // mov sym@GOT, r ==> pcalau12i + ld.d + o1 = OP_IR(c.opir(APCALAU12I), uint32(0), uint32(p.To.Reg)) + rel := obj.Addrel(c.cursym) + rel.Off = int32(c.pc) + rel.Siz = 4 + rel.Sym = p.From.Sym + rel.Type = objabi.R_LOONG64_GOT_HI + rel.Add = 0x0 + o2 = OP_12IRR(c.opirr(-p.As), uint32(0), uint32(p.To.Reg), uint32(p.To.Reg)) + rel2 := obj.Addrel(c.cursym) + rel2.Off = int32(c.pc + 4) + rel2.Siz = 4 + rel2.Sym = p.From.Sym + rel2.Type = objabi.R_LOONG64_GOT_LO + rel2.Add = 0x0 } out[0] = o1 diff --git a/src/cmd/internal/obj/loong64/cnames.go b/src/cmd/internal/obj/loong64/cnames.go index 8b8af6ba31..94b1b54c93 100644 --- a/src/cmd/internal/obj/loong64/cnames.go +++ b/src/cmd/internal/obj/loong64/cnames.go @@ -39,6 +39,7 @@ var cnames0 = []string{ "ADDR", "TLS_LE", "TLS_IE", + "GOTADDR", "TEXTSIZE", "NCLASS", } diff --git a/src/cmd/internal/obj/loong64/obj.go b/src/cmd/internal/obj/loong64/obj.go index d15d0dfd4c..fe98f8c11b 100644 --- a/src/cmd/internal/obj/loong64/obj.go +++ b/src/cmd/internal/obj/loong64/obj.go @@ -6,6 +6,7 @@ package loong64 import ( "cmd/internal/obj" + "cmd/internal/objabi" "cmd/internal/sys" "internal/abi" "log" @@ -84,6 +85,122 @@ func progedit(ctxt *obj.Link, p *obj.Prog, newprog obj.ProgAlloc) { p.As = AADDVU } } + + if ctxt.Flag_dynlink { + rewriteToUseGot(ctxt, p, newprog) + } +} + +func rewriteToUseGot(ctxt *obj.Link, p *obj.Prog, newprog obj.ProgAlloc) { + // ADUFFxxx $offset + // becomes + // MOVV runtime.duffxxx@GOT, REGTMP + // ADD $offset, REGTMP + // JAL REGTMP + if p.As == obj.ADUFFCOPY || p.As == obj.ADUFFZERO { + var sym *obj.LSym + if p.As == obj.ADUFFZERO { + sym = ctxt.Lookup("runtime.duffzero") + } else { + sym = ctxt.Lookup("runtime.duffcopy") + } + offset := p.To.Offset + p.As = AMOVV + p.From.Type = obj.TYPE_MEM + p.From.Sym = sym + p.From.Name = obj.NAME_GOTREF + p.To.Type = obj.TYPE_REG + p.To.Reg = REGTMP + p.To.Name = obj.NAME_NONE + p.To.Offset = 0 + p.To.Sym = nil + p1 := obj.Appendp(p, newprog) + p1.As = AADDV + p1.From.Type = obj.TYPE_CONST + p1.From.Offset = offset + p1.To.Type = obj.TYPE_REG + p1.To.Reg = REGTMP + p2 := obj.Appendp(p1, newprog) + p2.As = AJAL + p2.To.Type = obj.TYPE_MEM + p2.To.Reg = REGTMP + } + + // We only care about global data: NAME_EXTERN means a global + // symbol in the Go sense, and p.Sym.Local is true for a few + // internally defined symbols. + if p.From.Type == obj.TYPE_ADDR && p.From.Name == obj.NAME_EXTERN && !p.From.Sym.Local() { + // MOVV $sym, Rx becomes MOVV sym@GOT, Rx + // MOVV $sym+, Rx becomes MOVV sym@GOT, Rx; ADD , Rx + if p.As != AMOVV { + ctxt.Diag("do not know how to handle TYPE_ADDR in %v with -shared", p) + } + if p.To.Type != obj.TYPE_REG { + ctxt.Diag("do not know how to handle LEAQ-type insn to non-register in %v with -shared", p) + } + p.From.Type = obj.TYPE_MEM + p.From.Name = obj.NAME_GOTREF + if p.From.Offset != 0 { + q := obj.Appendp(p, newprog) + q.As = AADDV + q.From.Type = obj.TYPE_CONST + q.From.Offset = p.From.Offset + q.To = p.To + p.From.Offset = 0 + } + } + if p.GetFrom3() != nil && p.GetFrom3().Name == obj.NAME_EXTERN { + ctxt.Diag("don't know how to handle %v with -shared", p) + } + + var source *obj.Addr + // MOVx sym, Ry becomes MOVV sym@GOT, REGTMP; MOVx (REGTMP), Ry + // MOVx Ry, sym becomes MOVV sym@GOT, REGTMP; MOVx Ry, (REGTMP) + // An addition may be inserted between the two MOVs if there is an offset. + if p.From.Name == obj.NAME_EXTERN && !p.From.Sym.Local() { + if p.To.Name == obj.NAME_EXTERN && !p.To.Sym.Local() { + ctxt.Diag("cannot handle NAME_EXTERN on both sides in %v with -shared", p) + } + source = &p.From + } else if p.To.Name == obj.NAME_EXTERN && !p.To.Sym.Local() { + source = &p.To + } else { + return + } + if p.As == obj.ATEXT || p.As == obj.AFUNCDATA || p.As == obj.ACALL || p.As == obj.ARET || p.As == obj.AJMP { + return + } + if source.Sym.Type == objabi.STLSBSS { + return + } + if source.Type != obj.TYPE_MEM { + ctxt.Diag("don't know how to handle %v with -shared", p) + } + p1 := obj.Appendp(p, newprog) + p2 := obj.Appendp(p1, newprog) + p1.As = AMOVV + p1.From.Type = obj.TYPE_MEM + p1.From.Sym = source.Sym + p1.From.Name = obj.NAME_GOTREF + p1.To.Type = obj.TYPE_REG + p1.To.Reg = REGTMP + + p2.As = p.As + p2.From = p.From + p2.To = p.To + if p.From.Name == obj.NAME_EXTERN { + p2.From.Reg = REGTMP + p2.From.Name = obj.NAME_NONE + p2.From.Sym = nil + } else if p.To.Name == obj.NAME_EXTERN { + p2.To.Reg = REGTMP + p2.To.Name = obj.NAME_NONE + p2.To.Sym = nil + } else { + return + } + + obj.Nopout(p) } func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) { diff --git a/src/cmd/internal/objabi/reloctype.go b/src/cmd/internal/objabi/reloctype.go index e3e042a511..54429840b0 100644 --- a/src/cmd/internal/objabi/reloctype.go +++ b/src/cmd/internal/objabi/reloctype.go @@ -345,6 +345,11 @@ const ( R_LOONG64_TLS_IE_PCREL_HI R_LOONG64_TLS_IE_LO + // R_LOONG64_GOT_HI and R_LOONG64_GOT_LO resolves a GOT-relative instruction sequence, + // usually an pcalau12i followed by another ld or addi instruction. + R_LOONG64_GOT_HI + R_LOONG64_GOT_LO + // R_JMPLOONG64 resolves to non-PC-relative target address of a JMP instruction, // by encoding the address into the instruction. R_JMPLOONG64 diff --git a/src/cmd/internal/objabi/reloctype_string.go b/src/cmd/internal/objabi/reloctype_string.go index e8793dedc1..c8923c0f4a 100644 --- a/src/cmd/internal/objabi/reloctype_string.go +++ b/src/cmd/internal/objabi/reloctype_string.go @@ -89,19 +89,21 @@ func _() { _ = x[R_CALLLOONG64-79] _ = x[R_LOONG64_TLS_IE_PCREL_HI-80] _ = x[R_LOONG64_TLS_IE_LO-81] - _ = x[R_JMPLOONG64-82] - _ = x[R_ADDRMIPSU-83] - _ = x[R_ADDRMIPSTLS-84] - _ = x[R_ADDRCUOFF-85] - _ = x[R_WASMIMPORT-86] - _ = x[R_XCOFFREF-87] - _ = x[R_PEIMAGEOFF-88] - _ = x[R_INITORDER-89] + _ = x[R_LOONG64_GOT_HI-82] + _ = x[R_LOONG64_GOT_LO-83] + _ = x[R_JMPLOONG64-84] + _ = x[R_ADDRMIPSU-85] + _ = x[R_ADDRMIPSTLS-86] + _ = x[R_ADDRCUOFF-87] + _ = x[R_WASMIMPORT-88] + _ = x[R_XCOFFREF-89] + _ = x[R_PEIMAGEOFF-90] + _ = x[R_INITORDER-91] } -const _RelocType_name = "R_ADDRR_ADDRPOWERR_ADDRARM64R_ADDRMIPSR_ADDROFFR_SIZER_CALLR_CALLARMR_CALLARM64R_CALLINDR_CALLPOWERR_CALLMIPSR_CONSTR_PCRELR_TLS_LER_TLS_IER_GOTOFFR_PLT0R_PLT1R_PLT2R_USEFIELDR_USETYPER_USEIFACER_USEIFACEMETHODR_USENAMEDMETHODR_METHODOFFR_KEEPR_POWER_TOCR_GOTPCRELR_JMPMIPSR_DWARFSECREFR_DWARFFILEREFR_ARM64_TLS_LER_ARM64_TLS_IER_ARM64_GOTPCRELR_ARM64_GOTR_ARM64_PCRELR_ARM64_PCREL_LDST8R_ARM64_PCREL_LDST16R_ARM64_PCREL_LDST32R_ARM64_PCREL_LDST64R_ARM64_LDST8R_ARM64_LDST16R_ARM64_LDST32R_ARM64_LDST64R_ARM64_LDST128R_POWER_TLS_LER_POWER_TLS_IER_POWER_TLSR_POWER_TLS_IE_PCREL34R_POWER_TLS_LE_TPREL34R_ADDRPOWER_DSR_ADDRPOWER_GOTR_ADDRPOWER_GOT_PCREL34R_ADDRPOWER_PCRELR_ADDRPOWER_TOCRELR_ADDRPOWER_TOCREL_DSR_ADDRPOWER_D34R_ADDRPOWER_PCREL34R_RISCV_JALR_RISCV_JAL_TRAMPR_RISCV_CALLR_RISCV_PCREL_ITYPER_RISCV_PCREL_STYPER_RISCV_TLS_IER_RISCV_TLS_LER_RISCV_GOT_HI20R_RISCV_PCREL_HI20R_RISCV_PCREL_LO12_IR_RISCV_PCREL_LO12_SR_RISCV_BRANCHR_RISCV_RVC_BRANCHR_RISCV_RVC_JUMPR_PCRELDBLR_ADDRLOONG64R_ADDRLOONG64UR_ADDRLOONG64TLSR_ADDRLOONG64TLSUR_CALLLOONG64R_LOONG64_TLS_IE_PCREL_HIR_LOONG64_TLS_IE_LOR_JMPLOONG64R_ADDRMIPSUR_ADDRMIPSTLSR_ADDRCUOFFR_WASMIMPORTR_XCOFFREFR_PEIMAGEOFFR_INITORDER" +const _RelocType_name = "R_ADDRR_ADDRPOWERR_ADDRARM64R_ADDRMIPSR_ADDROFFR_SIZER_CALLR_CALLARMR_CALLARM64R_CALLINDR_CALLPOWERR_CALLMIPSR_CONSTR_PCRELR_TLS_LER_TLS_IER_GOTOFFR_PLT0R_PLT1R_PLT2R_USEFIELDR_USETYPER_USEIFACER_USEIFACEMETHODR_USENAMEDMETHODR_METHODOFFR_KEEPR_POWER_TOCR_GOTPCRELR_JMPMIPSR_DWARFSECREFR_DWARFFILEREFR_ARM64_TLS_LER_ARM64_TLS_IER_ARM64_GOTPCRELR_ARM64_GOTR_ARM64_PCRELR_ARM64_PCREL_LDST8R_ARM64_PCREL_LDST16R_ARM64_PCREL_LDST32R_ARM64_PCREL_LDST64R_ARM64_LDST8R_ARM64_LDST16R_ARM64_LDST32R_ARM64_LDST64R_ARM64_LDST128R_POWER_TLS_LER_POWER_TLS_IER_POWER_TLSR_POWER_TLS_IE_PCREL34R_POWER_TLS_LE_TPREL34R_ADDRPOWER_DSR_ADDRPOWER_GOTR_ADDRPOWER_GOT_PCREL34R_ADDRPOWER_PCRELR_ADDRPOWER_TOCRELR_ADDRPOWER_TOCREL_DSR_ADDRPOWER_D34R_ADDRPOWER_PCREL34R_RISCV_JALR_RISCV_JAL_TRAMPR_RISCV_CALLR_RISCV_PCREL_ITYPER_RISCV_PCREL_STYPER_RISCV_TLS_IER_RISCV_TLS_LER_RISCV_GOT_HI20R_RISCV_PCREL_HI20R_RISCV_PCREL_LO12_IR_RISCV_PCREL_LO12_SR_RISCV_BRANCHR_RISCV_RVC_BRANCHR_RISCV_RVC_JUMPR_PCRELDBLR_ADDRLOONG64R_ADDRLOONG64UR_ADDRLOONG64TLSR_ADDRLOONG64TLSUR_CALLLOONG64R_LOONG64_TLS_IE_PCREL_HIR_LOONG64_TLS_IE_LOR_LOONG64_GOT_HIR_LOONG64_GOT_LOR_JMPLOONG64R_ADDRMIPSUR_ADDRMIPSTLSR_ADDRCUOFFR_WASMIMPORTR_XCOFFREFR_PEIMAGEOFFR_INITORDER" -var _RelocType_index = [...]uint16{0, 6, 17, 28, 38, 47, 53, 59, 68, 79, 88, 99, 109, 116, 123, 131, 139, 147, 153, 159, 165, 175, 184, 194, 210, 226, 237, 243, 254, 264, 273, 286, 300, 314, 328, 344, 355, 368, 387, 407, 427, 447, 460, 474, 488, 502, 517, 531, 545, 556, 578, 600, 614, 629, 652, 669, 687, 708, 723, 742, 753, 770, 782, 801, 820, 834, 848, 864, 882, 902, 922, 936, 954, 970, 980, 993, 1007, 1023, 1040, 1053, 1078, 1097, 1109, 1120, 1133, 1144, 1156, 1166, 1178, 1189} +var _RelocType_index = [...]uint16{0, 6, 17, 28, 38, 47, 53, 59, 68, 79, 88, 99, 109, 116, 123, 131, 139, 147, 153, 159, 165, 175, 184, 194, 210, 226, 237, 243, 254, 264, 273, 286, 300, 314, 328, 344, 355, 368, 387, 407, 427, 447, 460, 474, 488, 502, 517, 531, 545, 556, 578, 600, 614, 629, 652, 669, 687, 708, 723, 742, 753, 770, 782, 801, 820, 834, 848, 864, 882, 902, 922, 936, 954, 970, 980, 993, 1007, 1023, 1040, 1053, 1078, 1097, 1113, 1129, 1141, 1152, 1165, 1176, 1188, 1198, 1210, 1221} func (i RelocType) String() string { i -= 1 diff --git a/src/cmd/link/internal/loong64/asm.go b/src/cmd/link/internal/loong64/asm.go index 3c58c27d82..fc7bad9039 100644 --- a/src/cmd/link/internal/loong64/asm.go +++ b/src/cmd/link/internal/loong64/asm.go @@ -78,6 +78,16 @@ func elfreloc1(ctxt *ld.Link, out *ld.OutBuf, ldr *loader.Loader, s loader.Sym, out.Write64(uint64(sectoff)) out.Write64(uint64(elf.R_LARCH_PCALA_HI20) | uint64(elfsym)<<32) out.Write64(uint64(r.Xadd)) + + case objabi.R_LOONG64_GOT_HI: + out.Write64(uint64(sectoff)) + out.Write64(uint64(elf.R_LARCH_GOT_PC_HI20) | uint64(elfsym)<<32) + out.Write64(uint64(0x0)) + + case objabi.R_LOONG64_GOT_LO: + out.Write64(uint64(sectoff)) + out.Write64(uint64(elf.R_LARCH_GOT_PC_LO12) | uint64(elfsym)<<32) + out.Write64(uint64(0x0)) } return true @@ -111,7 +121,9 @@ func archreloc(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r loade objabi.R_CALLLOONG64, objabi.R_JMPLOONG64, objabi.R_LOONG64_TLS_IE_PCREL_HI, - objabi.R_LOONG64_TLS_IE_LO: + objabi.R_LOONG64_TLS_IE_LO, + objabi.R_LOONG64_GOT_HI, + objabi.R_LOONG64_GOT_LO: return val, 1, true } } @@ -156,7 +168,10 @@ func archrelocvariant(*ld.Target, *loader.Loader, loader.Reloc, sym.RelocVariant func extreloc(target *ld.Target, ldr *loader.Loader, r loader.Reloc, s loader.Sym) (loader.ExtReloc, bool) { switch r.Type() { case objabi.R_ADDRLOONG64, - objabi.R_ADDRLOONG64U: + objabi.R_ADDRLOONG64U, + objabi.R_LOONG64_GOT_HI, + objabi.R_LOONG64_GOT_LO: + return ld.ExtrelocViaOuterSym(ldr, r, s), true case objabi.R_ADDRLOONG64TLS, From 08b9640333af248316e168d5a8d3331200fec9e9 Mon Sep 17 00:00:00 2001 From: WANG Xuerui Date: Tue, 13 Dec 2022 16:51:02 +0800 Subject: [PATCH 033/313] cmd/compile: teach regalloc to rightly do nothing on loong64 in case of dynlinking This is needed before actual support for buildmode=plugin is added. Should not affect current behavior. Change-Id: I86371d7e373fd529cb8710850d7b0fbbf1eb52ca Reviewed-on: https://go-review.googlesource.com/c/go/+/480877 Reviewed-by: David Chase Reviewed-by: Meidan Li Reviewed-by: abner chenc Reviewed-by: Cherry Mui Run-TryBot: WANG Xuerui TryBot-Result: Gopher Robot --- src/cmd/compile/internal/ssa/regalloc.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cmd/compile/internal/ssa/regalloc.go b/src/cmd/compile/internal/ssa/regalloc.go index fcd3f5c8b5..2325b9ee45 100644 --- a/src/cmd/compile/internal/ssa/regalloc.go +++ b/src/cmd/compile/internal/ssa/regalloc.go @@ -672,6 +672,8 @@ func (s *regAllocState) init(f *Func) { s.allocatable &^= 1 << 9 // R9 case "arm64": // nothing to do + case "loong64": // R2 (aka TP) already reserved. + // nothing to do case "ppc64le": // R2 already reserved. // nothing to do case "riscv64": // X3 (aka GP) and X4 (aka TP) already reserved. From 945c2bc74e9f3f6a2a011a35b1f03e21f2ad5d4d Mon Sep 17 00:00:00 2001 From: Guoqi Chen Date: Tue, 15 Aug 2023 17:11:19 +0800 Subject: [PATCH 034/313] cmd/compile: add ABI register definations for loong64 Updates #40724 Co-authored-by: Xiaolin Zhao Change-Id: I56f7382dda58a565b8c3256f1c7845a3031f67de Reviewed-on: https://go-review.googlesource.com/c/go/+/521776 Reviewed-by: Cherry Mui Run-TryBot: David Chase Auto-Submit: David Chase TryBot-Result: Gopher Robot Reviewed-by: David Chase --- src/cmd/compile/abi-internal.md | 50 +++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/src/cmd/compile/abi-internal.md b/src/cmd/compile/abi-internal.md index 43dc39689b..eae230dc07 100644 --- a/src/cmd/compile/abi-internal.md +++ b/src/cmd/compile/abi-internal.md @@ -633,6 +633,56 @@ modifying or saving the FPCR. Functions are allowed to modify it between calls (as long as they restore it), but as of this writing Go code never does. +### loong64 architecture + +The loong64 architecture uses R4 – R19 for integer arguments and integer results. + +It uses F0 – F15 for floating-point arguments and results. + +Registers R20 - R21, R23 – R28, R30 - R31, F16 – F31 are permanent scratch registers. + +Register R2 is reserved and never used. + +Register R20, R21 is Used by runtime.duffcopy, runtime.duffzero. + +Special-purpose registers used within Go generated code and Go assembly code +are as follows: + +| Register | Call meaning | Return meaning | Body meaning | +| --- | --- | --- | --- | +| R0 | Zero value | Same | Same | +| R1 | Link register | Link register | Scratch | +| R3 | Stack pointer | Same | Same | +| R20,R21 | Scratch | Scratch | Used by duffcopy, duffzero | +| R22 | Current goroutine | Same | Same | +| R29 | Closure context pointer | Same | Same | +| R30, R31 | used by the assembler | Same | Same | + +*Rationale*: These register meanings are compatible with Go’s stack-based +calling convention. + +#### Stack layout + +The stack pointer, R3, grows down and is aligned to 8 bytes. + +A function's stack frame, after the frame is created, is laid out as +follows: + + +------------------------------+ + | ... locals ... | + | ... outgoing arguments ... | + | return PC | ← R3 points to + +------------------------------+ ↓ lower addresses + +This stack layout is used by both register-based (ABIInternal) and +stack-based (ABI0) calling conventions. + +The "return PC" is loaded to the link register, R1, as part of the +loong64 `JAL` operation. + +#### Flags +All bits in CSR are system flags and are not modified by Go. + ### ppc64 architecture The ppc64 architecture uses R3 – R10 and R14 – R17 for integer arguments From 070139a130bfd914e05dba7245a33e25b5e96399 Mon Sep 17 00:00:00 2001 From: Guoqi Chen Date: Tue, 15 Aug 2023 19:23:51 +0800 Subject: [PATCH 035/313] cmd/compile,cmd/internal,runtime: change registers on loong64 to avoid regABI arguments Update #40724 Co-authored-by: Xiaolin Zhao Change-Id: Ic7e2e7fb4c1d3670e6abbfb817aa6e4e654e08d3 Reviewed-on: https://go-review.googlesource.com/c/go/+/521777 Reviewed-by: David Chase Reviewed-by: Meidan Li Reviewed-by: Cherry Mui Reviewed-by: Than McIntosh Auto-Submit: David Chase TryBot-Result: Gopher Robot Run-TryBot: David Chase --- .../compile/internal/ssa/_gen/LOONG64Ops.go | 8 +- src/cmd/compile/internal/ssa/opGen.go | 12 +-- src/cmd/internal/obj/loong64/obj.go | 68 ++++++++--------- src/runtime/asm_loong64.s | 74 +++++++++---------- 4 files changed, 81 insertions(+), 81 deletions(-) diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go index 97aa9590a7..10ffcb8b97 100644 --- a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go +++ b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go @@ -130,10 +130,10 @@ func init() { gpspsbg = gpspg | buildReg("SB") fp = buildReg("F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 F25 F26 F27 F28 F29 F30 F31") callerSave = gp | fp | buildReg("g") // runtime.setg (and anything calling it) may clobber g - r1 = buildReg("R19") - r2 = buildReg("R18") - r3 = buildReg("R17") - r4 = buildReg("R4") + r1 = buildReg("R20") + r2 = buildReg("R21") + r3 = buildReg("R23") + r4 = buildReg("R24") ) // Common regInfo var ( diff --git a/src/cmd/compile/internal/ssa/opGen.go b/src/cmd/compile/internal/ssa/opGen.go index 55a50fa284..e39190aaf7 100644 --- a/src/cmd/compile/internal/ssa/opGen.go +++ b/src/cmd/compile/internal/ssa/opGen.go @@ -24911,8 +24911,8 @@ var opcodeTable = [...]opInfo{ call: true, reg: regInfo{ inputs: []inputInfo{ - {0, 65536}, // R17 - {1, 8}, // R4 + {0, 4194304}, // R23 + {1, 8388608}, // R24 }, }, }, @@ -24923,8 +24923,8 @@ var opcodeTable = [...]opInfo{ call: true, reg: regInfo{ inputs: []inputInfo{ - {0, 131072}, // R18 - {1, 65536}, // R17 + {0, 1048576}, // R21 + {1, 4194304}, // R23 }, }, }, @@ -24935,8 +24935,8 @@ var opcodeTable = [...]opInfo{ call: true, reg: regInfo{ inputs: []inputInfo{ - {0, 262144}, // R19 - {1, 131072}, // R18 + {0, 524288}, // R20 + {1, 1048576}, // R21 }, }, }, diff --git a/src/cmd/internal/obj/loong64/obj.go b/src/cmd/internal/obj/loong64/obj.go index fe98f8c11b..bc9cf2ec22 100644 --- a/src/cmd/internal/obj/loong64/obj.go +++ b/src/cmd/internal/obj/loong64/obj.go @@ -396,13 +396,13 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) { if c.cursym.Func().Text.From.Sym.Wrapper() && c.cursym.Func().Text.Mark&LEAF == 0 { // if(g->panic != nil && g->panic->argp == FP) g->panic->argp = bottom-of-frame // - // MOV g_panic(g), R1 - // BEQ R1, end - // MOV panic_argp(R1), R2 - // ADD $(autosize+FIXED_FRAME), R29, R3 - // BNE R2, R3, end - // ADD $FIXED_FRAME, R29, R2 - // MOV R2, panic_argp(R1) + // MOV g_panic(g), R20 + // BEQ R20, end + // MOV panic_argp(R20), R24 + // ADD $(autosize+FIXED_FRAME), R3, R30 + // BNE R24, R30, end + // ADD $FIXED_FRAME, R3, R24 + // MOV R24, panic_argp(R20) // end: // NOP // @@ -419,12 +419,12 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) { q.From.Reg = REGG q.From.Offset = 4 * int64(c.ctxt.Arch.PtrSize) // G.panic q.To.Type = obj.TYPE_REG - q.To.Reg = REG_R19 + q.To.Reg = REG_R20 q = obj.Appendp(q, newprog) q.As = ABEQ q.From.Type = obj.TYPE_REG - q.From.Reg = REG_R19 + q.From.Reg = REG_R20 q.To.Type = obj.TYPE_BRANCH q.Mark |= BRANCH p1 = q @@ -432,10 +432,10 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) { q = obj.Appendp(q, newprog) q.As = mov q.From.Type = obj.TYPE_MEM - q.From.Reg = REG_R19 + q.From.Reg = REG_R20 q.From.Offset = 0 // Panic.argp q.To.Type = obj.TYPE_REG - q.To.Reg = REG_R4 + q.To.Reg = REG_R24 q = obj.Appendp(q, newprog) q.As = add @@ -443,13 +443,13 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) { q.From.Offset = int64(autosize) + ctxt.Arch.FixedFrameSize q.Reg = REGSP q.To.Type = obj.TYPE_REG - q.To.Reg = REG_R5 + q.To.Reg = REG_R30 q = obj.Appendp(q, newprog) q.As = ABNE q.From.Type = obj.TYPE_REG - q.From.Reg = REG_R4 - q.Reg = REG_R5 + q.From.Reg = REG_R24 + q.Reg = REG_R30 q.To.Type = obj.TYPE_BRANCH q.Mark |= BRANCH p2 = q @@ -460,14 +460,14 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) { q.From.Offset = ctxt.Arch.FixedFrameSize q.Reg = REGSP q.To.Type = obj.TYPE_REG - q.To.Reg = REG_R4 + q.To.Reg = REG_R24 q = obj.Appendp(q, newprog) q.As = mov q.From.Type = obj.TYPE_REG - q.From.Reg = REG_R4 + q.From.Reg = REG_R24 q.To.Type = obj.TYPE_MEM - q.To.Reg = REG_R19 + q.To.Reg = REG_R20 q.To.Offset = 0 // Panic.argp q = obj.Appendp(q, newprog) @@ -690,7 +690,7 @@ func (c *ctxt0) stacksplit(p *obj.Prog, framesize int32) *obj.Prog { // Jump back to here after morestack returns. startPred := p - // MOV g_stackguard(g), R19 + // MOV g_stackguard(g), R20 p = obj.Appendp(p, c.newprog) p.As = mov @@ -701,7 +701,7 @@ func (c *ctxt0) stacksplit(p *obj.Prog, framesize int32) *obj.Prog { p.From.Offset = 3 * int64(c.ctxt.Arch.PtrSize) // G.stackguard1 } p.To.Type = obj.TYPE_REG - p.To.Reg = REG_R19 + p.To.Reg = REG_R20 // Mark the stack bound check and morestack call async nonpreemptible. // If we get preempted here, when resumed the preemption request is @@ -712,15 +712,15 @@ func (c *ctxt0) stacksplit(p *obj.Prog, framesize int32) *obj.Prog { var q *obj.Prog if framesize <= abi.StackSmall { // small stack: SP < stackguard - // AGTU SP, stackguard, R19 + // AGTU SP, stackguard, R20 p = obj.Appendp(p, c.newprog) p.As = ASGTU p.From.Type = obj.TYPE_REG p.From.Reg = REGSP - p.Reg = REG_R19 + p.Reg = REG_R20 p.To.Type = obj.TYPE_REG - p.To.Reg = REG_R19 + p.To.Reg = REG_R20 } else { // large stack: SP-framesize < stackguard-StackSmall offset := int64(framesize) - abi.StackSmall @@ -732,8 +732,8 @@ func (c *ctxt0) stacksplit(p *obj.Prog, framesize int32) *obj.Prog { // stack guard to incorrectly succeed. We explicitly // guard against underflow. // - // SGTU $(framesize-StackSmall), SP, R4 - // BNE R4, label-of-call-to-morestack + // SGTU $(framesize-StackSmall), SP, R24 + // BNE R24, label-of-call-to-morestack p = obj.Appendp(p, c.newprog) p.As = ASGTU @@ -741,13 +741,13 @@ func (c *ctxt0) stacksplit(p *obj.Prog, framesize int32) *obj.Prog { p.From.Offset = offset p.Reg = REGSP p.To.Type = obj.TYPE_REG - p.To.Reg = REG_R4 + p.To.Reg = REG_R24 p = obj.Appendp(p, c.newprog) q = p p.As = ABNE p.From.Type = obj.TYPE_REG - p.From.Reg = REG_R4 + p.From.Reg = REG_R24 p.To.Type = obj.TYPE_BRANCH p.Mark |= BRANCH } @@ -759,35 +759,35 @@ func (c *ctxt0) stacksplit(p *obj.Prog, framesize int32) *obj.Prog { p.From.Offset = -offset p.Reg = REGSP p.To.Type = obj.TYPE_REG - p.To.Reg = REG_R4 + p.To.Reg = REG_R24 p = obj.Appendp(p, c.newprog) p.As = ASGTU p.From.Type = obj.TYPE_REG - p.From.Reg = REG_R4 - p.Reg = REG_R19 + p.From.Reg = REG_R24 + p.Reg = REG_R20 p.To.Type = obj.TYPE_REG - p.To.Reg = REG_R19 + p.To.Reg = REG_R20 } - // q1: BNE R19, done + // q1: BNE R20, done p = obj.Appendp(p, c.newprog) q1 := p p.As = ABNE p.From.Type = obj.TYPE_REG - p.From.Reg = REG_R19 + p.From.Reg = REG_R20 p.To.Type = obj.TYPE_BRANCH p.Mark |= BRANCH - // MOV LINK, R5 + // MOV LINK, R31 p = obj.Appendp(p, c.newprog) p.As = mov p.From.Type = obj.TYPE_REG p.From.Reg = REGLINK p.To.Type = obj.TYPE_REG - p.To.Reg = REG_R5 + p.To.Reg = REG_R31 if q != nil { q.To.SetTarget(p) p.Mark |= LABEL diff --git a/src/runtime/asm_loong64.s b/src/runtime/asm_loong64.s index 6ffa1392c4..93550b9342 100644 --- a/src/runtime/asm_loong64.s +++ b/src/runtime/asm_loong64.s @@ -214,7 +214,7 @@ noswitch: // Called during function prolog when more stack is needed. // Caller has already loaded: -// loong64: R5: LR +// loong64: R31: LR // // The traceback routines see morestack on a g0 as being // the top of a stack (for example, morestack calling newstack @@ -238,12 +238,12 @@ TEXT runtime·morestack(SB),NOSPLIT|NOFRAME,$0-0 // Set g->sched to context in f. MOVV R3, (g_sched+gobuf_sp)(g) MOVV R1, (g_sched+gobuf_pc)(g) - MOVV R5, (g_sched+gobuf_lr)(g) + MOVV R31, (g_sched+gobuf_lr)(g) MOVV REGCTXT, (g_sched+gobuf_ctxt)(g) // Called from f. // Set m->morebuf to f's caller. - MOVV R5, (m_morebuf+gobuf_pc)(R7) // f's caller's PC + MOVV R31, (m_morebuf+gobuf_pc)(R7) // f's caller's PC MOVV R3, (m_morebuf+gobuf_sp)(R7) // f's caller's SP MOVV g, (m_morebuf+gobuf_g)(R7) @@ -775,70 +775,70 @@ TEXT runtime·gcWriteBarrier8(SB),NOSPLIT,$0 // then tail call to the corresponding runtime handler. // The tail call makes these stubs disappear in backtraces. TEXT runtime·panicIndex(SB),NOSPLIT,$0-16 - MOVV R19, x+0(FP) - MOVV R18, y+8(FP) + MOVV R20, x+0(FP) + MOVV R21, y+8(FP) JMP runtime·goPanicIndex(SB) TEXT runtime·panicIndexU(SB),NOSPLIT,$0-16 - MOVV R19, x+0(FP) - MOVV R18, y+8(FP) + MOVV R20, x+0(FP) + MOVV R21, y+8(FP) JMP runtime·goPanicIndexU(SB) TEXT runtime·panicSliceAlen(SB),NOSPLIT,$0-16 - MOVV R18, x+0(FP) - MOVV R17, y+8(FP) + MOVV R21, x+0(FP) + MOVV R23, y+8(FP) JMP runtime·goPanicSliceAlen(SB) TEXT runtime·panicSliceAlenU(SB),NOSPLIT,$0-16 - MOVV R18, x+0(FP) - MOVV R17, y+8(FP) + MOVV R21, x+0(FP) + MOVV R23, y+8(FP) JMP runtime·goPanicSliceAlenU(SB) TEXT runtime·panicSliceAcap(SB),NOSPLIT,$0-16 - MOVV R18, x+0(FP) - MOVV R17, y+8(FP) + MOVV R21, x+0(FP) + MOVV R23, y+8(FP) JMP runtime·goPanicSliceAcap(SB) TEXT runtime·panicSliceAcapU(SB),NOSPLIT,$0-16 - MOVV R18, x+0(FP) - MOVV R17, y+8(FP) + MOVV R21, x+0(FP) + MOVV R23, y+8(FP) JMP runtime·goPanicSliceAcapU(SB) TEXT runtime·panicSliceB(SB),NOSPLIT,$0-16 - MOVV R19, x+0(FP) - MOVV R18, y+8(FP) + MOVV R20, x+0(FP) + MOVV R21, y+8(FP) JMP runtime·goPanicSliceB(SB) TEXT runtime·panicSliceBU(SB),NOSPLIT,$0-16 - MOVV R19, x+0(FP) - MOVV R18, y+8(FP) + MOVV R20, x+0(FP) + MOVV R21, y+8(FP) JMP runtime·goPanicSliceBU(SB) TEXT runtime·panicSlice3Alen(SB),NOSPLIT,$0-16 - MOVV R17, x+0(FP) - MOVV R4, y+8(FP) + MOVV R23, x+0(FP) + MOVV R24, y+8(FP) JMP runtime·goPanicSlice3Alen(SB) TEXT runtime·panicSlice3AlenU(SB),NOSPLIT,$0-16 - MOVV R17, x+0(FP) - MOVV R4, y+8(FP) + MOVV R23, x+0(FP) + MOVV R24, y+8(FP) JMP runtime·goPanicSlice3AlenU(SB) TEXT runtime·panicSlice3Acap(SB),NOSPLIT,$0-16 - MOVV R17, x+0(FP) - MOVV R4, y+8(FP) + MOVV R23, x+0(FP) + MOVV R24, y+8(FP) JMP runtime·goPanicSlice3Acap(SB) TEXT runtime·panicSlice3AcapU(SB),NOSPLIT,$0-16 - MOVV R17, x+0(FP) - MOVV R4, y+8(FP) + MOVV R23, x+0(FP) + MOVV R24, y+8(FP) JMP runtime·goPanicSlice3AcapU(SB) TEXT runtime·panicSlice3B(SB),NOSPLIT,$0-16 - MOVV R18, x+0(FP) - MOVV R17, y+8(FP) + MOVV R21, x+0(FP) + MOVV R23, y+8(FP) JMP runtime·goPanicSlice3B(SB) TEXT runtime·panicSlice3BU(SB),NOSPLIT,$0-16 - MOVV R18, x+0(FP) - MOVV R17, y+8(FP) + MOVV R21, x+0(FP) + MOVV R23, y+8(FP) JMP runtime·goPanicSlice3BU(SB) TEXT runtime·panicSlice3C(SB),NOSPLIT,$0-16 - MOVV R19, x+0(FP) - MOVV R18, y+8(FP) + MOVV R20, x+0(FP) + MOVV R21, y+8(FP) JMP runtime·goPanicSlice3C(SB) TEXT runtime·panicSlice3CU(SB),NOSPLIT,$0-16 - MOVV R19, x+0(FP) - MOVV R18, y+8(FP) + MOVV R20, x+0(FP) + MOVV R21, y+8(FP) JMP runtime·goPanicSlice3CU(SB) TEXT runtime·panicSliceConvert(SB),NOSPLIT,$0-16 - MOVV R17, x+0(FP) - MOVV R4, y+8(FP) + MOVV R23, x+0(FP) + MOVV R24, y+8(FP) JMP runtime·goPanicSliceConvert(SB) From 7b26cb954050291b593b36170d25214e948ceba5 Mon Sep 17 00:00:00 2001 From: Guoqi Chen Date: Tue, 15 Aug 2023 19:38:33 +0800 Subject: [PATCH 036/313] internal/abi: define loong64 regABI constants Update #40724 Co-authored-by: Xiaolin Zhao Change-Id: Id580d9e22a562adee2ae02a467ac38a54949e737 Reviewed-on: https://go-review.googlesource.com/c/go/+/521778 Reviewed-by: David Chase Auto-Submit: David Chase Reviewed-by: Meidan Li Reviewed-by: Cherry Mui TryBot-Result: Gopher Robot Run-TryBot: David Chase --- src/internal/abi/abi_loong64.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/internal/abi/abi_loong64.go diff --git a/src/internal/abi/abi_loong64.go b/src/internal/abi/abi_loong64.go new file mode 100644 index 0000000000..c2306ae8d8 --- /dev/null +++ b/src/internal/abi/abi_loong64.go @@ -0,0 +1,19 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build goexperiment.regabiargs + +package abi + +const ( + // See abi_generic.go. + + // R4 - R19 + IntArgRegs = 16 + + // F0 - F15 + FloatArgRegs = 16 + + EffectiveFloatRegSize = 8 +) From d7fcb5cf80953f1d63246f1ae9defa60c5ce2d76 Mon Sep 17 00:00:00 2001 From: WANG Xuerui Date: Tue, 13 Dec 2022 16:30:45 +0800 Subject: [PATCH 037/313] cmd/dist, cmd/link, internal, runtime: implement buildmode=plugin for linux/loong64 According to review, buildmode=shared has unfixed shortcomings and should be considered legacy at this time. So only buildmode=plugin is going to be added for loong64 which is a relatively new platform. Change-Id: Iac0b9f57e4ee01755458e180bb24d1b2a146fdf0 Reviewed-on: https://go-review.googlesource.com/c/go/+/480878 TryBot-Result: Gopher Robot Reviewed-by: Michael Knyszek Run-TryBot: WANG Xuerui Reviewed-by: David Chase Reviewed-by: abner chenc Reviewed-by: Meidan Li --- src/cmd/dist/test.go | 2 +- src/cmd/link/internal/loong64/asm.go | 42 +++++++++++++++++++++++++++- src/internal/platform/supported.go | 2 +- src/runtime/asm_loong64.s | 11 ++++++++ 4 files changed, 54 insertions(+), 3 deletions(-) diff --git a/src/cmd/dist/test.go b/src/cmd/dist/test.go index 9635c4fb61..4450129e08 100644 --- a/src/cmd/dist/test.go +++ b/src/cmd/dist/test.go @@ -1627,7 +1627,7 @@ func buildModeSupported(compiler, buildmode, goos, goarch string) bool { case "plugin": switch platform { - case "linux/amd64", "linux/arm", "linux/arm64", "linux/386", "linux/s390x", "linux/ppc64le", + case "linux/amd64", "linux/arm", "linux/arm64", "linux/386", "linux/loong64", "linux/s390x", "linux/ppc64le", "android/amd64", "android/386", "darwin/amd64", "darwin/arm64", "freebsd/amd64": diff --git a/src/cmd/link/internal/loong64/asm.go b/src/cmd/link/internal/loong64/asm.go index fc7bad9039..6607e5dc64 100644 --- a/src/cmd/link/internal/loong64/asm.go +++ b/src/cmd/link/internal/loong64/asm.go @@ -14,7 +14,47 @@ import ( "log" ) -func gentext(ctxt *ld.Link, ldr *loader.Loader) {} +func gentext(ctxt *ld.Link, ldr *loader.Loader) { + initfunc, addmoduledata := ld.PrepareAddmoduledata(ctxt) + if initfunc == nil { + return + } + + o := func(op uint32) { + initfunc.AddUint32(ctxt.Arch, op) + } + + // Emit the following function: + // + // local.dso_init: + // la.pcrel $a0, local.moduledata + // b runtime.addmoduledata + + // 0000000000000000 : + // 0: 1a000004 pcalau12i $a0, 0 + // 0: R_LARCH_PCALA_HI20 local.moduledata + o(0x1a000004) + rel, _ := initfunc.AddRel(objabi.R_ADDRLOONG64U) + rel.SetOff(0) + rel.SetSiz(4) + rel.SetSym(ctxt.Moduledata) + + // 4: 02c00084 addi.d $a0, $a0, 0 + // 4: R_LARCH_PCALA_LO12 local.moduledata + o(0x02c00084) + rel2, _ := initfunc.AddRel(objabi.R_ADDRLOONG64) + rel2.SetOff(4) + rel2.SetSiz(4) + rel2.SetSym(ctxt.Moduledata) + + // 8: 50000000 b 0 + // 8: R_LARCH_B26 runtime.addmoduledata + o(0x50000000) + rel3, _ := initfunc.AddRel(objabi.R_CALLLOONG64) + rel3.SetOff(8) + rel3.SetSiz(4) + rel3.SetSym(addmoduledata) +} func adddynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loader.Sym, r loader.Reloc, rIdx int) bool { log.Fatalf("adddynrel not implemented") diff --git a/src/internal/platform/supported.go b/src/internal/platform/supported.go index 4589903550..82c66e2195 100644 --- a/src/internal/platform/supported.go +++ b/src/internal/platform/supported.go @@ -206,7 +206,7 @@ func BuildModeSupported(compiler, buildmode, goos, goarch string) bool { case "plugin": switch platform { - case "linux/amd64", "linux/arm", "linux/arm64", "linux/386", "linux/s390x", "linux/ppc64le", + case "linux/amd64", "linux/arm", "linux/arm64", "linux/386", "linux/loong64", "linux/s390x", "linux/ppc64le", "android/amd64", "android/386", "darwin/amd64", "darwin/arm64", "freebsd/amd64": diff --git a/src/runtime/asm_loong64.s b/src/runtime/asm_loong64.s index 93550b9342..8a1eae3740 100644 --- a/src/runtime/asm_loong64.s +++ b/src/runtime/asm_loong64.s @@ -642,6 +642,17 @@ TEXT runtime·goexit(SB),NOSPLIT|NOFRAME|TOPFRAME,$0-0 // traceback from goexit1 must hit code range of goexit NOOP +// This is called from .init_array and follows the platform, not Go, ABI. +TEXT runtime·addmoduledata(SB),NOSPLIT,$0-0 + ADDV $-0x10, R3 + MOVV R30, 8(R3) // The access to global variables below implicitly uses R30, which is callee-save + MOVV runtime·lastmoduledatap(SB), R12 + MOVV R4, moduledata_next(R12) + MOVV R4, runtime·lastmoduledatap(SB) + MOVV 8(R3), R30 + ADDV $0x10, R3 + RET + TEXT ·checkASM(SB),NOSPLIT,$0-1 MOVW $1, R19 MOVB R19, ret+0(FP) From 4bfed5ce748a2dbb3f1e35b42949dd3a53601186 Mon Sep 17 00:00:00 2001 From: Mauri de Souza Meneguzzo Date: Tue, 21 Nov 2023 01:02:31 +0000 Subject: [PATCH 038/313] runtime/internal/atomic: deduplicate And/Or code on arm Turns out after adding the generic implementation for And/Or we ended up with duplicated ops that are exactly the same for arm. Apologies for the oversight, this CL removes the redundant arm code and adds arm to the generic build flags. For #61395 Change-Id: Id5e5a5cf113774948f8e772592e898d0810ad1f6 GitHub-Last-Rev: 4d8c857d15f0267ee0c8bb88a202afd49a6075dc GitHub-Pull-Request: golang/go#64299 Reviewed-on: https://go-review.googlesource.com/c/go/+/544017 LUCI-TryBot-Result: Go LUCI Reviewed-by: Cherry Mui TryBot-Result: Gopher Robot Reviewed-by: Michael Knyszek Run-TryBot: Cherry Mui --- .../internal/atomic/atomic_andor_generic.go | 2 +- src/runtime/internal/atomic/atomic_arm.go | 60 ------------------- 2 files changed, 1 insertion(+), 61 deletions(-) diff --git a/src/runtime/internal/atomic/atomic_andor_generic.go b/src/runtime/internal/atomic/atomic_andor_generic.go index c790e062c5..57f80ff871 100644 --- a/src/runtime/internal/atomic/atomic_andor_generic.go +++ b/src/runtime/internal/atomic/atomic_andor_generic.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build s390x || loong64 || mips || mipsle || mips64 || mips64le +//go:build arm || s390x || loong64 || mips || mipsle || mips64 || mips64le package atomic diff --git a/src/runtime/internal/atomic/atomic_arm.go b/src/runtime/internal/atomic/atomic_arm.go index ae609cf4db..567e951244 100644 --- a/src/runtime/internal/atomic/atomic_arm.go +++ b/src/runtime/internal/atomic/atomic_arm.go @@ -208,66 +208,6 @@ func And(addr *uint32, v uint32) { } } -//go:nosplit -func Or32(addr *uint32, v uint32) uint32 { - for { - old := *addr - if Cas(addr, old, old|v) { - return old - } - } -} - -//go:nosplit -func And32(addr *uint32, v uint32) uint32 { - for { - old := *addr - if Cas(addr, old, old&v) { - return old - } - } -} - -//go:nosplit -func Or64(addr *uint64, v uint64) uint64 { - for { - old := *addr - if Cas64(addr, old, old|v) { - return old - } - } -} - -//go:nosplit -func And64(addr *uint64, v uint64) uint64 { - for { - old := *addr - if Cas64(addr, old, old&v) { - return old - } - } -} - -//go:nosplit -func Oruintptr(addr *uintptr, v uintptr) uintptr { - for { - old := *addr - if Casuintptr(addr, old, old|v) { - return old - } - } -} - -//go:nosplit -func Anduintptr(addr *uintptr, v uintptr) uintptr { - for { - old := *addr - if Casuintptr(addr, old, old&v) { - return old - } - } -} - //go:nosplit func armcas(ptr *uint32, old, new uint32) bool From ebca52eeb77f24f44c9b556b99508a9a6fada743 Mon Sep 17 00:00:00 2001 From: Guoqi Chen Date: Tue, 15 Aug 2023 19:54:51 +0800 Subject: [PATCH 039/313] cmd/compile/internal: add register info for loong64 regABI Update #40724 Co-authored-by: Xiaolin Zhao Change-Id: Ifd7d94147b01e4fc83978b53dca2bcc0ad1ac4e3 Reviewed-on: https://go-review.googlesource.com/c/go/+/521779 Reviewed-by: David Chase Run-TryBot: David Chase TryBot-Result: Gopher Robot Auto-Submit: David Chase Reviewed-by: Cherry Mui Reviewed-by: Meidan Li --- src/cmd/compile/internal/loong64/ssa.go | 2 ++ src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go | 4 ++-- src/cmd/compile/internal/ssa/config.go | 2 ++ src/cmd/compile/internal/ssa/opGen.go | 4 ++-- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/cmd/compile/internal/loong64/ssa.go b/src/cmd/compile/internal/loong64/ssa.go index ad465ba3bb..06490a7ba5 100644 --- a/src/cmd/compile/internal/loong64/ssa.go +++ b/src/cmd/compile/internal/loong64/ssa.go @@ -144,6 +144,8 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) { p.From.Type = obj.TYPE_REG p.From.Reg = r ssagen.AddrAuto(&p.To, v) + case ssa.OpArgIntReg, ssa.OpArgFloatReg: + ssagen.CheckArgReg(v) case ssa.OpLOONG64ADDV, ssa.OpLOONG64SUBV, ssa.OpLOONG64AND, diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go index 10ffcb8b97..845d5491e2 100644 --- a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go +++ b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go @@ -476,8 +476,8 @@ func init() { blocks: blocks, regnames: regNamesLOONG64, // TODO: support register ABI on loong64 - ParamIntRegNames: "R4 R5 R6 R7 R8 R9 R10 R11", - ParamFloatRegNames: "F0 F1 F2 F3 F4 F5 F6 F7", + ParamIntRegNames: "R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19", + ParamFloatRegNames: "F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15", gpregmask: gp, fpregmask: fp, framepointerreg: -1, // not used diff --git a/src/cmd/compile/internal/ssa/config.go b/src/cmd/compile/internal/ssa/config.go index da4294d871..c36ac4cd5d 100644 --- a/src/cmd/compile/internal/ssa/config.go +++ b/src/cmd/compile/internal/ssa/config.go @@ -283,6 +283,8 @@ func NewConfig(arch string, types Types, ctxt *obj.Link, optimize, softfloat boo c.registers = registersLOONG64[:] c.gpRegMask = gpRegMaskLOONG64 c.fpRegMask = fpRegMaskLOONG64 + // c.intParamRegs = paramIntRegLOONG64 + // c.floatParamRegs = paramFloatRegLOONG64 c.FPReg = framepointerRegLOONG64 c.LinkReg = linkRegLOONG64 c.hasGReg = true diff --git a/src/cmd/compile/internal/ssa/opGen.go b/src/cmd/compile/internal/ssa/opGen.go index e39190aaf7..7ad7209366 100644 --- a/src/cmd/compile/internal/ssa/opGen.go +++ b/src/cmd/compile/internal/ssa/opGen.go @@ -40751,8 +40751,8 @@ var registersLOONG64 = [...]Register{ {61, loong64.REG_F31, -1, "F31"}, {62, 0, -1, "SB"}, } -var paramIntRegLOONG64 = []int8{3, 4, 5, 6, 7, 8, 9, 10} -var paramFloatRegLOONG64 = []int8{30, 31, 32, 33, 34, 35, 36, 37} +var paramIntRegLOONG64 = []int8{3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18} +var paramFloatRegLOONG64 = []int8{30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45} var gpRegMaskLOONG64 = regMask(1071644664) var fpRegMaskLOONG64 = regMask(4611686017353646080) var specialRegMaskLOONG64 = regMask(0) From bd224fa5222ffb5f8dcbba59400d36f1f777b3ec Mon Sep 17 00:00:00 2001 From: Guoqi Chen Date: Tue, 15 Aug 2023 20:10:33 +0800 Subject: [PATCH 040/313] cmd/compile/internal: add spill support for loong64 regABI Update #40724 Co-authored-by: Xiaolin Zhao Change-Id: Ic01d59bd81420b89c6d4b90c5975bf069d08e7cc Reviewed-on: https://go-review.googlesource.com/c/go/+/521780 Reviewed-by: David Chase Auto-Submit: David Chase Reviewed-by: Cherry Mui Reviewed-by: Meidan Li TryBot-Result: Gopher Robot Run-TryBot: David Chase --- src/cmd/compile/internal/loong64/galign.go | 2 ++ src/cmd/compile/internal/loong64/ssa.go | 31 +++++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/cmd/compile/internal/loong64/galign.go b/src/cmd/compile/internal/loong64/galign.go index 99ab7bdfb5..a613165054 100644 --- a/src/cmd/compile/internal/loong64/galign.go +++ b/src/cmd/compile/internal/loong64/galign.go @@ -20,4 +20,6 @@ func Init(arch *ssagen.ArchInfo) { arch.SSAMarkMoves = func(s *ssagen.State, b *ssa.Block) {} arch.SSAGenValue = ssaGenValue arch.SSAGenBlock = ssaGenBlock + arch.LoadRegResult = loadRegResult + arch.SpillArgReg = spillArgReg } diff --git a/src/cmd/compile/internal/loong64/ssa.go b/src/cmd/compile/internal/loong64/ssa.go index 06490a7ba5..e7298bdb9f 100644 --- a/src/cmd/compile/internal/loong64/ssa.go +++ b/src/cmd/compile/internal/loong64/ssa.go @@ -10,6 +10,7 @@ import ( "cmd/compile/internal/base" "cmd/compile/internal/ir" "cmd/compile/internal/logopt" + "cmd/compile/internal/objw" "cmd/compile/internal/ssa" "cmd/compile/internal/ssagen" "cmd/compile/internal/types" @@ -145,6 +146,16 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) { p.From.Reg = r ssagen.AddrAuto(&p.To, v) case ssa.OpArgIntReg, ssa.OpArgFloatReg: + // The assembler needs to wrap the entry safepoint/stack growth code with spill/unspill + // The loop only runs once. + for _, a := range v.Block.Func.RegArgs { + // Pass the spill/unspill information along to the assembler, offset by size of + // the saved LR slot. + addr := ssagen.SpillSlotAddr(a, loong64.REGSP, base.Ctxt.Arch.FixedFrameSize) + s.FuncInfo().AddSpill( + obj.RegSpill{Reg: a.Reg, Addr: addr, Unspill: loadByType(a.Type, a.Reg), Spill: storeByType(a.Type, a.Reg)}) + } + v.Block.Func.RegArgs = nil ssagen.CheckArgReg(v) case ssa.OpLOONG64ADDV, ssa.OpLOONG64SUBV, @@ -370,7 +381,6 @@ func ssaGenValue(s *ssagen.State, v *ssa.Value) { p.To.Name = obj.NAME_EXTERN p.To.Sym = ir.Syms.Duffzero p.To.Offset = v.AuxInt - case ssa.OpLOONG64LoweredZero: // MOVx R0, (Rarg0) // ADDV $sz, Rarg0 @@ -799,3 +809,22 @@ func ssaGenBlock(s *ssagen.State, b, next *ssa.Block) { b.Fatalf("branch not implemented: %s", b.LongString()) } } + +func loadRegResult(s *ssagen.State, f *ssa.Func, t *types.Type, reg int16, n *ir.Name, off int64) *obj.Prog { + p := s.Prog(loadByType(t, reg)) + p.From.Type = obj.TYPE_MEM + p.From.Name = obj.NAME_AUTO + p.From.Sym = n.Linksym() + p.From.Offset = n.FrameOffset() + off + p.To.Type = obj.TYPE_REG + p.To.Reg = reg + return p +} + +func spillArgReg(pp *objw.Progs, p *obj.Prog, f *ssa.Func, t *types.Type, reg int16, n *ir.Name, off int64) *obj.Prog { + p = pp.Append(p, storeByType(t, reg), obj.TYPE_REG, reg, 0, obj.TYPE_MEM, 0, n.FrameOffset()+off) + p.To.Name = obj.NAME_PARAM + p.To.Sym = n.Linksym() + p.Pos = p.Pos.WithNotStmt() + return p +} From 6b77d1b73694b50f2eccc1a2e1e09cc951393cce Mon Sep 17 00:00:00 2001 From: Guoqi Chen Date: Tue, 15 Aug 2023 20:23:46 +0800 Subject: [PATCH 041/313] cmd/compile: update loong64 CALL* ops allow the loong64 CALL* ops to take variable number of args Update #40724 Co-authored-by: Xiaolin Zhao Change-Id: I4706d9651fcbf9a0f201af6820c97b1a924f14e3 Reviewed-on: https://go-review.googlesource.com/c/go/+/521781 Auto-Submit: David Chase Reviewed-by: Cherry Mui Run-TryBot: David Chase TryBot-Result: Gopher Robot Reviewed-by: Meidan Li Reviewed-by: David Chase --- src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go | 8 ++++---- src/cmd/compile/internal/ssa/opGen.go | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go index 845d5491e2..3fbf5be499 100644 --- a/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go +++ b/src/cmd/compile/internal/ssa/_gen/LOONG64Ops.go @@ -273,10 +273,10 @@ func init() { {name: "MOVDF", argLength: 1, reg: fp11, asm: "MOVDF"}, // float64 -> float32 // function calls - {name: "CALLstatic", argLength: 1, reg: regInfo{clobbers: callerSave}, aux: "CallOff", clobberFlags: true, call: true}, // call static function aux.(*obj.LSym). arg0=mem, auxint=argsize, returns mem - {name: "CALLtail", argLength: 1, reg: regInfo{clobbers: callerSave}, aux: "CallOff", clobberFlags: true, call: true, tailCall: true}, // tail call static function aux.(*obj.LSym). arg0=mem, auxint=argsize, returns mem - {name: "CALLclosure", argLength: 3, reg: regInfo{inputs: []regMask{gpsp, buildReg("R29"), 0}, clobbers: callerSave}, aux: "CallOff", clobberFlags: true, call: true}, // call function via closure. arg0=codeptr, arg1=closure, arg2=mem, auxint=argsize, returns mem - {name: "CALLinter", argLength: 2, reg: regInfo{inputs: []regMask{gp}, clobbers: callerSave}, aux: "CallOff", clobberFlags: true, call: true}, // call fn by pointer. arg0=codeptr, arg1=mem, auxint=argsize, returns mem + {name: "CALLstatic", argLength: -1, reg: regInfo{clobbers: callerSave}, aux: "CallOff", clobberFlags: true, call: true}, // call static function aux.(*obj.LSym). last arg=mem, auxint=argsize, returns mem + {name: "CALLtail", argLength: -1, reg: regInfo{clobbers: callerSave}, aux: "CallOff", clobberFlags: true, call: true, tailCall: true}, // tail call static function aux.(*obj.LSym). last arg=mem, auxint=argsize, returns mem + {name: "CALLclosure", argLength: -1, reg: regInfo{inputs: []regMask{gpsp, buildReg("R29"), 0}, clobbers: callerSave}, aux: "CallOff", clobberFlags: true, call: true}, // call function via closure. arg0=codeptr, arg1=closure, last arg=mem, auxint=argsize, returns mem + {name: "CALLinter", argLength: -1, reg: regInfo{inputs: []regMask{gp}, clobbers: callerSave}, aux: "CallOff", clobberFlags: true, call: true}, // call fn by pointer. arg0=codeptr, last arg=mem, auxint=argsize, returns mem // duffzero // arg0 = address of memory to zero diff --git a/src/cmd/compile/internal/ssa/opGen.go b/src/cmd/compile/internal/ssa/opGen.go index 7ad7209366..c552832520 100644 --- a/src/cmd/compile/internal/ssa/opGen.go +++ b/src/cmd/compile/internal/ssa/opGen.go @@ -24499,7 +24499,7 @@ var opcodeTable = [...]opInfo{ { name: "CALLstatic", auxType: auxCallOff, - argLen: 1, + argLen: -1, clobberFlags: true, call: true, reg: regInfo{ @@ -24509,7 +24509,7 @@ var opcodeTable = [...]opInfo{ { name: "CALLtail", auxType: auxCallOff, - argLen: 1, + argLen: -1, clobberFlags: true, call: true, tailCall: true, @@ -24520,7 +24520,7 @@ var opcodeTable = [...]opInfo{ { name: "CALLclosure", auxType: auxCallOff, - argLen: 3, + argLen: -1, clobberFlags: true, call: true, reg: regInfo{ @@ -24534,7 +24534,7 @@ var opcodeTable = [...]opInfo{ { name: "CALLinter", auxType: auxCallOff, - argLen: 2, + argLen: -1, clobberFlags: true, call: true, reg: regInfo{ From 3107fa99acdcf26394e4bd96a176622d4034b10f Mon Sep 17 00:00:00 2001 From: Guoqi Chen Date: Tue, 15 Aug 2023 20:54:16 +0800 Subject: [PATCH 042/313] runtime: make duff device as ABIInternal for loong64 Update #40724 Co-authored-by: Xiaolin Zhao Change-Id: I243e60489dc5fd162ad91d6426bf32cf0e13d9e2 Reviewed-on: https://go-review.googlesource.com/c/go/+/521782 Reviewed-by: Meidan Li Reviewed-by: David Chase Run-TryBot: David Chase Reviewed-by: Cherry Mui TryBot-Result: Gopher Robot Auto-Submit: David Chase --- src/runtime/duff_loong64.s | 4 ++-- src/runtime/mkduff.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/runtime/duff_loong64.s b/src/runtime/duff_loong64.s index df8b653965..b05502d91d 100644 --- a/src/runtime/duff_loong64.s +++ b/src/runtime/duff_loong64.s @@ -4,7 +4,7 @@ #include "textflag.h" -TEXT runtime·duffzero(SB), NOSPLIT|NOFRAME, $0-0 +TEXT runtime·duffzero(SB), NOSPLIT|NOFRAME, $0-0 MOVV R0, (R20) ADDV $8, R20 MOVV R0, (R20) @@ -263,7 +263,7 @@ TEXT runtime·duffzero(SB), NOSPLIT|NOFRAME, $0-0 ADDV $8, R20 RET -TEXT runtime·duffcopy(SB), NOSPLIT|NOFRAME, $0-0 +TEXT runtime·duffcopy(SB), NOSPLIT|NOFRAME, $0-0 MOVV (R20), R30 ADDV $8, R20 MOVV R30, (R21) diff --git a/src/runtime/mkduff.go b/src/runtime/mkduff.go index 77674254d4..b7f07b5087 100644 --- a/src/runtime/mkduff.go +++ b/src/runtime/mkduff.go @@ -181,7 +181,7 @@ func zeroLOONG64(w io.Writer) { // R0: always zero // R19 (aka REGRT1): ptr to memory to be zeroed // On return, R19 points to the last zeroed dword. - fmt.Fprintln(w, "TEXT runtime·duffzero(SB), NOSPLIT|NOFRAME, $0-0") + fmt.Fprintln(w, "TEXT runtime·duffzero(SB), NOSPLIT|NOFRAME, $0-0") for i := 0; i < 128; i++ { fmt.Fprintln(w, "\tMOVV\tR0, (R20)") fmt.Fprintln(w, "\tADDV\t$8, R20") @@ -190,7 +190,7 @@ func zeroLOONG64(w io.Writer) { } func copyLOONG64(w io.Writer) { - fmt.Fprintln(w, "TEXT runtime·duffcopy(SB), NOSPLIT|NOFRAME, $0-0") + fmt.Fprintln(w, "TEXT runtime·duffcopy(SB), NOSPLIT|NOFRAME, $0-0") for i := 0; i < 128; i++ { fmt.Fprintln(w, "\tMOVV\t(R20), R30") fmt.Fprintln(w, "\tADDV\t$8, R20") From f6f141ab80853b0b45f7e33aa148e497ceeb7d38 Mon Sep 17 00:00:00 2001 From: Guoqi Chen Date: Tue, 15 Aug 2023 21:09:16 +0800 Subject: [PATCH 043/313] runtime: support regABI and add spill functions in runtime for loong64 Update #40724 Co-authored-by: Xiaolin Zhao Change-Id: I709b818ef15c33f95251186d749ac13260ad36be Reviewed-on: https://go-review.googlesource.com/c/go/+/521783 Reviewed-by: David Chase Reviewed-by: Meidan Li Run-TryBot: David Chase Auto-Submit: David Chase Reviewed-by: Cherry Mui TryBot-Result: Gopher Robot --- src/runtime/asm_loong64.s | 295 ++++++++++++++++++++++++++++------- src/runtime/stubs_loong64.go | 7 + 2 files changed, 243 insertions(+), 59 deletions(-) diff --git a/src/runtime/asm_loong64.s b/src/runtime/asm_loong64.s index 8a1eae3740..586bd23ed4 100644 --- a/src/runtime/asm_loong64.s +++ b/src/runtime/asm_loong64.s @@ -72,7 +72,7 @@ nocgo: MOVV R0, 1(R0) RET -DATA runtime·mainPC+0(SB)/8,$runtime·main(SB) +DATA runtime·mainPC+0(SB)/8,$runtime·main(SB) GLOBL runtime·mainPC(SB),RODATA,$8 TEXT runtime·breakpoint(SB),NOSPLIT|NOFRAME,$0-0 @@ -123,26 +123,31 @@ TEXT gogo<>(SB), NOSPLIT|NOFRAME, $0 // Switch to m->g0's stack, call fn(g). // Fn must never return. It should gogo(&g->sched) // to keep running g. -TEXT runtime·mcall(SB), NOSPLIT|NOFRAME, $0-8 +TEXT runtime·mcall(SB), NOSPLIT|NOFRAME, $0-8 +#ifdef GOEXPERIMENT_regabiargs + MOVV R4, REGCTXT +#else + MOVV fn+0(FP), REGCTXT +#endif + // Save caller state in g->sched MOVV R3, (g_sched+gobuf_sp)(g) MOVV R1, (g_sched+gobuf_pc)(g) MOVV R0, (g_sched+gobuf_lr)(g) // Switch to m->g0 & its stack, call fn. - MOVV g, R19 - MOVV g_m(g), R4 - MOVV m_g0(R4), g + MOVV g, R4 // arg = g + MOVV g_m(g), R20 + MOVV m_g0(R20), g JAL runtime·save_g(SB) - BNE g, R19, 2(PC) + BNE g, R4, 2(PC) JMP runtime·badmcall(SB) - MOVV fn+0(FP), REGCTXT // context - MOVV 0(REGCTXT), R5 // code pointer + MOVV 0(REGCTXT), R20 // code pointer MOVV (g_sched+gobuf_sp)(g), R3 // sp = m->g0->sched.sp ADDV $-16, R3 - MOVV R19, 8(R3) + MOVV R4, 8(R3) MOVV R0, 0(R3) - JAL (R5) + JAL (R20) JMP runtime·badmcall2(SB) // systemstack_switch is a dummy routine that systemstack leaves at the bottom @@ -272,7 +277,7 @@ TEXT runtime·morestack_noctxt(SB),NOSPLIT|NOFRAME,$0-0 JMP runtime·morestack(SB) // reflectcall: call a function with the given argument list -// func call(argtype *_type, f *FuncVal, arg *byte, argsize, retoffset uint32). +// func call(stackArgsType *_type, f *FuncVal, stackArgs *byte, stackArgsSize, stackRetOffset, frameSize uint32, regArgs *abi.RegArgs). // we don't have variable-sized frames, so we use a small number // of constant-sized-frame functions to encode a few bits of size in the pc. // Caution: ugly multiline assembly macros in your future! @@ -286,7 +291,7 @@ TEXT runtime·morestack_noctxt(SB),NOSPLIT|NOFRAME,$0-0 // Note: can't just "BR NAME(SB)" - bad inlining results. TEXT ·reflectcall(SB), NOSPLIT|NOFRAME, $0-48 - MOVWU stackArgsSize+24(FP), R19 + MOVWU frameSize+32(FP), R19 DISPATCH(runtime·call32, 32) DISPATCH(runtime·call64, 64) DISPATCH(runtime·call128, 128) @@ -317,7 +322,7 @@ TEXT ·reflectcall(SB), NOSPLIT|NOFRAME, $0-48 JMP (R4) #define CALLFN(NAME,MAXSIZE) \ -TEXT NAME(SB), WRAPPER, $MAXSIZE-24; \ +TEXT NAME(SB), WRAPPER, $MAXSIZE-48; \ NO_LOCAL_POINTERS; \ /* copy arguments to stack */ \ MOVV arg+16(FP), R4; \ @@ -331,12 +336,17 @@ TEXT NAME(SB), WRAPPER, $MAXSIZE-24; \ MOVBU R6, (R12); \ ADDV $1, R12; \ JMP -5(PC); \ + /* set up argument registers */ \ + MOVV regArgs+40(FP), R25; \ + JAL ·unspillArgs(SB); \ /* call function */ \ MOVV f+8(FP), REGCTXT; \ - MOVV (REGCTXT), R6; \ + MOVV (REGCTXT), R25; \ PCDATA $PCDATA_StackMapIndex, $0; \ - JAL (R6); \ + JAL (R25); \ /* copy return values back */ \ + MOVV regArgs+40(FP), R25; \ + JAL ·spillArgs(SB); \ MOVV argtype+0(FP), R7; \ MOVV arg+16(FP), R4; \ MOVWU n+24(FP), R5; \ @@ -352,11 +362,13 @@ TEXT NAME(SB), WRAPPER, $MAXSIZE-24; \ // separate function so it can allocate stack space for the arguments // to reflectcallmove. It does not follow the Go ABI; it expects its // arguments in registers. -TEXT callRet<>(SB), NOSPLIT, $32-0 +TEXT callRet<>(SB), NOSPLIT, $40-0 + NO_LOCAL_POINTERS MOVV R7, 8(R3) MOVV R4, 16(R3) MOVV R12, 24(R3) MOVV R5, 32(R3) + MOVV R25, 40(R3) JAL runtime·reflectcallmove(SB) RET @@ -567,7 +579,7 @@ havem: // If the m on entry wasn't nil, // 1. the thread might be a Go thread, // 2. or it wasn't the first call from a C thread on pthread platforms, - // since then we skip dropm to reuse the m in the first call. + // since then we skip dropm to resue the m in the first call. MOVV savedm-8(SP), R12 BNE R12, droppedm @@ -604,14 +616,14 @@ TEXT runtime·abort(SB),NOSPLIT|NOFRAME,$0-0 UNDEF // AES hashing not implemented for loong64 -TEXT runtime·memhash(SB),NOSPLIT|NOFRAME,$0-32 - JMP runtime·memhashFallback(SB) -TEXT runtime·strhash(SB),NOSPLIT|NOFRAME,$0-24 - JMP runtime·strhashFallback(SB) -TEXT runtime·memhash32(SB),NOSPLIT|NOFRAME,$0-24 - JMP runtime·memhash32Fallback(SB) -TEXT runtime·memhash64(SB),NOSPLIT|NOFRAME,$0-24 - JMP runtime·memhash64Fallback(SB) +TEXT runtime·memhash(SB),NOSPLIT|NOFRAME,$0-32 + JMP runtime·memhashFallback(SB) +TEXT runtime·strhash(SB),NOSPLIT|NOFRAME,$0-24 + JMP runtime·strhashFallback(SB) +TEXT runtime·memhash32(SB),NOSPLIT|NOFRAME,$0-24 + JMP runtime·memhash32Fallback(SB) +TEXT runtime·memhash64(SB),NOSPLIT|NOFRAME,$0-24 + JMP runtime·memhash64Fallback(SB) TEXT runtime·return0(SB), NOSPLIT, $0 MOVW $0, R19 @@ -658,6 +670,86 @@ TEXT ·checkASM(SB),NOSPLIT,$0-1 MOVB R19, ret+0(FP) RET +#ifdef GOEXPERIMENT_regabiargs +// spillArgs stores return values from registers to a *internal/abi.RegArgs in R25. +TEXT ·spillArgs(SB),NOSPLIT,$0-0 + MOVV R4, (0*8)(R25) + MOVV R5, (1*8)(R25) + MOVV R6, (2*8)(R25) + MOVV R7, (3*8)(R25) + MOVV R8, (4*8)(R25) + MOVV R9, (5*8)(R25) + MOVV R10, (6*8)(R25) + MOVV R11, (7*8)(R25) + MOVV R12, (8*8)(R25) + MOVV R13, (9*8)(R25) + MOVV R14, (10*8)(R25) + MOVV R15, (11*8)(R25) + MOVV R16, (12*8)(R25) + MOVV R17, (13*8)(R25) + MOVV R18, (14*8)(R25) + MOVV R19, (15*8)(R25) + MOVD F0, (16*8)(R25) + MOVD F1, (17*8)(R25) + MOVD F2, (18*8)(R25) + MOVD F3, (19*8)(R25) + MOVD F4, (20*8)(R25) + MOVD F5, (21*8)(R25) + MOVD F6, (22*8)(R25) + MOVD F7, (23*8)(R25) + MOVD F8, (24*8)(R25) + MOVD F9, (25*8)(R25) + MOVD F10, (26*8)(R25) + MOVD F11, (27*8)(R25) + MOVD F12, (28*8)(R25) + MOVD F13, (29*8)(R25) + MOVD F14, (30*8)(R25) + MOVD F15, (31*8)(R25) + RET + +// unspillArgs loads args into registers from a *internal/abi.RegArgs in R25. +TEXT ·unspillArgs(SB),NOSPLIT,$0-0 + MOVV (0*8)(R25), R4 + MOVV (1*8)(R25), R5 + MOVV (2*8)(R25), R6 + MOVV (3*8)(R25), R7 + MOVV (4*8)(R25), R8 + MOVV (5*8)(R25), R9 + MOVV (6*8)(R25), R10 + MOVV (7*8)(R25), R11 + MOVV (8*8)(R25), R12 + MOVV (9*8)(R25), R13 + MOVV (10*8)(R25), R14 + MOVV (11*8)(R25), R15 + MOVV (12*8)(R25), R16 + MOVV (13*8)(R25), R17 + MOVV (14*8)(R25), R18 + MOVV (15*8)(R25), R19 + MOVD (16*8)(R25), F0 + MOVD (17*8)(R25), F1 + MOVD (18*8)(R25), F2 + MOVD (19*8)(R25), F3 + MOVD (20*8)(R25), F4 + MOVD (21*8)(R25), F5 + MOVD (22*8)(R25), F6 + MOVD (23*8)(R25), F7 + MOVD (24*8)(R25), F8 + MOVD (25*8)(R25), F9 + MOVD (26*8)(R25), F10 + MOVD (27*8)(R25), F11 + MOVD (28*8)(R25), F12 + MOVD (29*8)(R25), F13 + MOVD (30*8)(R25), F14 + MOVD (31*8)(R25), F15 + RET +#else +TEXT ·spillArgs(SB),NOSPLIT,$0-0 + RET + +TEXT ·unspillArgs(SB),NOSPLIT,$0-0 + RET +#endif + // gcWriteBarrier informs the GC about heap pointer writes. // // gcWriteBarrier does NOT follow the Go ABI. It accepts the @@ -785,71 +877,156 @@ TEXT runtime·gcWriteBarrier8(SB),NOSPLIT,$0 // in the caller's stack frame. These stubs write the args into that stack space and // then tail call to the corresponding runtime handler. // The tail call makes these stubs disappear in backtraces. -TEXT runtime·panicIndex(SB),NOSPLIT,$0-16 +TEXT runtime·panicIndex(SB),NOSPLIT,$0-16 +#ifdef GOEXPERIMENT_regabiargs + MOVV R20, R4 + MOVV R21, R5 +#else MOVV R20, x+0(FP) MOVV R21, y+8(FP) - JMP runtime·goPanicIndex(SB) -TEXT runtime·panicIndexU(SB),NOSPLIT,$0-16 +#endif + JMP runtime·goPanicIndex(SB) +TEXT runtime·panicIndexU(SB),NOSPLIT,$0-16 +#ifdef GOEXPERIMENT_regabiargs + MOVV R20, R4 + MOVV R21, R5 +#else MOVV R20, x+0(FP) MOVV R21, y+8(FP) - JMP runtime·goPanicIndexU(SB) -TEXT runtime·panicSliceAlen(SB),NOSPLIT,$0-16 +#endif + JMP runtime·goPanicIndexU(SB) +TEXT runtime·panicSliceAlen(SB),NOSPLIT,$0-16 +#ifdef GOEXPERIMENT_regabiargs + MOVV R21, R4 + MOVV R23, R5 +#else MOVV R21, x+0(FP) MOVV R23, y+8(FP) - JMP runtime·goPanicSliceAlen(SB) -TEXT runtime·panicSliceAlenU(SB),NOSPLIT,$0-16 +#endif + JMP runtime·goPanicSliceAlen(SB) +TEXT runtime·panicSliceAlenU(SB),NOSPLIT,$0-16 +#ifdef GOEXPERIMENT_regabiargs + MOVV R21, R4 + MOVV R23, R5 +#else MOVV R21, x+0(FP) MOVV R23, y+8(FP) - JMP runtime·goPanicSliceAlenU(SB) -TEXT runtime·panicSliceAcap(SB),NOSPLIT,$0-16 +#endif + JMP runtime·goPanicSliceAlenU(SB) +TEXT runtime·panicSliceAcap(SB),NOSPLIT,$0-16 +#ifdef GOEXPERIMENT_regabiargs + MOVV R21, R4 + MOVV R23, R5 +#else MOVV R21, x+0(FP) MOVV R23, y+8(FP) - JMP runtime·goPanicSliceAcap(SB) -TEXT runtime·panicSliceAcapU(SB),NOSPLIT,$0-16 +#endif + JMP runtime·goPanicSliceAcap(SB) +TEXT runtime·panicSliceAcapU(SB),NOSPLIT,$0-16 +#ifdef GOEXPERIMENT_regabiargs + MOVV R21, R4 + MOVV R23, R5 +#else MOVV R21, x+0(FP) MOVV R23, y+8(FP) - JMP runtime·goPanicSliceAcapU(SB) -TEXT runtime·panicSliceB(SB),NOSPLIT,$0-16 +#endif + JMP runtime·goPanicSliceAcapU(SB) +TEXT runtime·panicSliceB(SB),NOSPLIT,$0-16 +#ifdef GOEXPERIMENT_regabiargs + MOVV R20, R4 + MOVV R21, R5 +#else MOVV R20, x+0(FP) MOVV R21, y+8(FP) - JMP runtime·goPanicSliceB(SB) -TEXT runtime·panicSliceBU(SB),NOSPLIT,$0-16 +#endif + JMP runtime·goPanicSliceB(SB) +TEXT runtime·panicSliceBU(SB),NOSPLIT,$0-16 +#ifdef GOEXPERIMENT_regabiargs + MOVV R20, R4 + MOVV R21, R5 +#else MOVV R20, x+0(FP) MOVV R21, y+8(FP) - JMP runtime·goPanicSliceBU(SB) -TEXT runtime·panicSlice3Alen(SB),NOSPLIT,$0-16 +#endif + JMP runtime·goPanicSliceBU(SB) +TEXT runtime·panicSlice3Alen(SB),NOSPLIT,$0-16 +#ifdef GOEXPERIMENT_regabiargs + MOVV R23, R4 + MOVV R24, R5 +#else MOVV R23, x+0(FP) MOVV R24, y+8(FP) - JMP runtime·goPanicSlice3Alen(SB) -TEXT runtime·panicSlice3AlenU(SB),NOSPLIT,$0-16 +#endif + JMP runtime·goPanicSlice3Alen(SB) +TEXT runtime·panicSlice3AlenU(SB),NOSPLIT,$0-16 +#ifdef GOEXPERIMENT_regabiargs + MOVV R23, R4 + MOVV R24, R5 +#else MOVV R23, x+0(FP) MOVV R24, y+8(FP) - JMP runtime·goPanicSlice3AlenU(SB) -TEXT runtime·panicSlice3Acap(SB),NOSPLIT,$0-16 +#endif + JMP runtime·goPanicSlice3AlenU(SB) +TEXT runtime·panicSlice3Acap(SB),NOSPLIT,$0-16 +#ifdef GOEXPERIMENT_regabiargs + MOVV R23, R4 + MOVV R24, R5 +#else MOVV R23, x+0(FP) MOVV R24, y+8(FP) - JMP runtime·goPanicSlice3Acap(SB) -TEXT runtime·panicSlice3AcapU(SB),NOSPLIT,$0-16 +#endif + JMP runtime·goPanicSlice3Acap(SB) +TEXT runtime·panicSlice3AcapU(SB),NOSPLIT,$0-16 +#ifdef GOEXPERIMENT_regabiargs + MOVV R23, R4 + MOVV R24, R5 +#else MOVV R23, x+0(FP) MOVV R24, y+8(FP) - JMP runtime·goPanicSlice3AcapU(SB) -TEXT runtime·panicSlice3B(SB),NOSPLIT,$0-16 +#endif + JMP runtime·goPanicSlice3AcapU(SB) +TEXT runtime·panicSlice3B(SB),NOSPLIT,$0-16 +#ifdef GOEXPERIMENT_regabiargs + MOVV R21, R4 + MOVV R23, R5 +#else MOVV R21, x+0(FP) MOVV R23, y+8(FP) - JMP runtime·goPanicSlice3B(SB) -TEXT runtime·panicSlice3BU(SB),NOSPLIT,$0-16 +#endif + JMP runtime·goPanicSlice3B(SB) +TEXT runtime·panicSlice3BU(SB),NOSPLIT,$0-16 +#ifdef GOEXPERIMENT_regabiargs + MOVV R21, R4 + MOVV R23, R5 +#else MOVV R21, x+0(FP) MOVV R23, y+8(FP) - JMP runtime·goPanicSlice3BU(SB) -TEXT runtime·panicSlice3C(SB),NOSPLIT,$0-16 +#endif + JMP runtime·goPanicSlice3BU(SB) +TEXT runtime·panicSlice3C(SB),NOSPLIT,$0-16 +#ifdef GOEXPERIMENT_regabiargs + MOVV R20, R4 + MOVV R21, R5 +#else MOVV R20, x+0(FP) MOVV R21, y+8(FP) - JMP runtime·goPanicSlice3C(SB) -TEXT runtime·panicSlice3CU(SB),NOSPLIT,$0-16 +#endif + JMP runtime·goPanicSlice3C(SB) +TEXT runtime·panicSlice3CU(SB),NOSPLIT,$0-16 +#ifdef GOEXPERIMENT_regabiargs + MOVV R20, R4 + MOVV R21, R5 +#else MOVV R20, x+0(FP) MOVV R21, y+8(FP) - JMP runtime·goPanicSlice3CU(SB) -TEXT runtime·panicSliceConvert(SB),NOSPLIT,$0-16 +#endif + JMP runtime·goPanicSlice3CU(SB) +TEXT runtime·panicSliceConvert(SB),NOSPLIT,$0-16 +#ifdef GOEXPERIMENT_regabiargs + MOVV R23, R4 + MOVV R24, R5 +#else MOVV R23, x+0(FP) MOVV R24, y+8(FP) - JMP runtime·goPanicSliceConvert(SB) +#endif + JMP runtime·goPanicSliceConvert(SB) diff --git a/src/runtime/stubs_loong64.go b/src/runtime/stubs_loong64.go index 556983cad1..4576089b0b 100644 --- a/src/runtime/stubs_loong64.go +++ b/src/runtime/stubs_loong64.go @@ -10,6 +10,13 @@ package runtime func load_g() func save_g() +// Used by reflectcall and the reflect package. +// +// Spills/loads arguments in registers to/from an internal/abi.RegArgs +// respectively. Does not follow the Go ABI. +func spillArgs() +func unspillArgs() + // getfp returns the frame pointer register of its caller or 0 if not implemented. // TODO: Make this a compiler intrinsic func getfp() uintptr { return 0 } From 4e6bbbe61f554dbd9ed78fcd55ff46fe59736785 Mon Sep 17 00:00:00 2001 From: Guoqi Chen Date: Wed, 16 Aug 2023 08:28:28 +0800 Subject: [PATCH 044/313] reflect, runtime: add reflect support for regABI on loong64 Update #40724 Co-authored-by: Xiaolin Zhao Change-Id: I0549fd1a2192ffb041034ff41bf0cc4be0b1662c Reviewed-on: https://go-review.googlesource.com/c/go/+/521784 Reviewed-by: Cherry Mui Reviewed-by: Meidan Li Reviewed-by: David Chase Auto-Submit: David Chase Run-TryBot: David Chase TryBot-Result: Gopher Robot --- src/reflect/asm_loong64.s | 77 ++++++++++++++++++++++++++++++++------- src/runtime/stkframe.go | 2 +- 2 files changed, 64 insertions(+), 15 deletions(-) diff --git a/src/reflect/asm_loong64.s b/src/reflect/asm_loong64.s index 341a6d55c1..520f0afdd5 100644 --- a/src/reflect/asm_loong64.s +++ b/src/reflect/asm_loong64.s @@ -7,34 +7,83 @@ #define REGCTXT R29 +// The frames of each of the two functions below contain two locals, at offsets +// that are known to the runtime. +// +// The first local is a bool called retValid with a whole pointer-word reserved +// for it on the stack. The purpose of this word is so that the runtime knows +// whether the stack-allocated return space contains valid values for stack +// scanning. +// +// The second local is an abi.RegArgs value whose offset is also known to the +// runtime, so that a stack map for it can be constructed, since it contains +// pointers visible to the GC. +#define LOCAL_RETVALID 40 +#define LOCAL_REGARGS 48 + +// The frame size of the functions below is +// 32 (args of callReflect) + 8 (bool + padding) + 392 (abi.RegArgs) = 432. + // makeFuncStub is the code half of the function returned by MakeFunc. // See the comment on the declaration of makeFuncStub in makefunc.go // for more details. // No arg size here, runtime pulls arg map out of the func value. -TEXT ·makeFuncStub(SB),(NOSPLIT|WRAPPER),$40 +TEXT ·makeFuncStub(SB),(NOSPLIT|WRAPPER),$432 NO_LOCAL_POINTERS + ADDV $LOCAL_REGARGS, R3, R25 // spillArgs using R25 + JAL runtime·spillArgs(SB) + MOVV REGCTXT, 32(R3) // save REGCTXT > args of moveMakeFuncArgPtrs < LOCAL_REGARGS + +#ifdef GOEXPERIMENT_regabiargs + MOVV REGCTXT, R4 + MOVV R25, R5 +#else MOVV REGCTXT, 8(R3) - MOVV $argframe+0(FP), R19 - MOVV R19, 16(R3) - MOVB R0, 40(R3) - ADDV $40, R3, R19 - MOVV R19, 24(R3) - MOVV R0, 32(R3) + MOVV R25, 16(R3) +#endif + JAL ·moveMakeFuncArgPtrs(SB) + MOVV 32(R3), REGCTXT // restore REGCTXT + + MOVV REGCTXT, 8(R3) + MOVV $argframe+0(FP), R20 + MOVV R20, 16(R3) + MOVV R0, LOCAL_RETVALID(R3) + ADDV $LOCAL_RETVALID, R3, R20 + MOVV R20, 24(R3) + ADDV $LOCAL_REGARGS, R3, R20 + MOVV R20, 32(R3) JAL ·callReflect(SB) + ADDV $LOCAL_REGARGS, R3, R25 //unspillArgs using R25 + JAL runtime·unspillArgs(SB) RET // methodValueCall is the code half of the function returned by makeMethodValue. // See the comment on the declaration of methodValueCall in makefunc.go // for more details. // No arg size here; runtime pulls arg map out of the func value. -TEXT ·methodValueCall(SB),(NOSPLIT|WRAPPER),$40 +TEXT ·methodValueCall(SB),(NOSPLIT|WRAPPER),$432 NO_LOCAL_POINTERS + ADDV $LOCAL_REGARGS, R3, R25 // spillArgs using R25 + JAL runtime·spillArgs(SB) + MOVV REGCTXT, 32(R3) // save REGCTXT > args of moveMakeFuncArgPtrs < LOCAL_REGARGS +#ifdef GOEXPERIMENT_regabiargs + MOVV REGCTXT, R4 + MOVV R25, R5 +#else MOVV REGCTXT, 8(R3) - MOVV $argframe+0(FP), R19 - MOVV R19, 16(R3) - MOVB R0, 40(R3) - ADDV $40, R3, R19 - MOVV R19, 24(R3) - MOVV R0, 32(R3) + MOVV R25, 16(R3) +#endif + JAL ·moveMakeFuncArgPtrs(SB) + MOVV 32(R3), REGCTXT // restore REGCTXT + MOVV REGCTXT, 8(R3) + MOVV $argframe+0(FP), R20 + MOVV R20, 16(R3) + MOVB R0, LOCAL_RETVALID(R3) + ADDV $LOCAL_RETVALID, R3, R20 + MOVV R20, 24(R3) + ADDV $LOCAL_REGARGS, R3, R20 + MOVV R20, 32(R3) // frame size to 32+SP as callreflect args) JAL ·callMethod(SB) + ADDV $LOCAL_REGARGS, R3, R25 // unspillArgs using R25 + JAL runtime·unspillArgs(SB) RET diff --git a/src/runtime/stkframe.go b/src/runtime/stkframe.go index a2f40c92d5..becb729e59 100644 --- a/src/runtime/stkframe.go +++ b/src/runtime/stkframe.go @@ -234,7 +234,7 @@ func (frame *stkframe) getStackMap(debug bool) (locals, args bitvector, objs []s } // stack objects. - if (GOARCH == "amd64" || GOARCH == "arm64" || GOARCH == "ppc64" || GOARCH == "ppc64le" || GOARCH == "riscv64") && + if (GOARCH == "amd64" || GOARCH == "arm64" || GOARCH == "loong64" || GOARCH == "ppc64" || GOARCH == "ppc64le" || GOARCH == "riscv64") && unsafe.Sizeof(abi.RegArgs{}) > 0 && isReflect { // For reflect.makeFuncStub and reflect.methodValueCall, // we need to fake the stack object record. From 1052d09dd768d658bda2aa99d13ce4c032f09dc0 Mon Sep 17 00:00:00 2001 From: Guoqi Chen Date: Wed, 16 Aug 2023 08:55:13 +0800 Subject: [PATCH 045/313] internal/bytealg: add regABI support in bytealg functions on loong64 Update #40724 Co-authored-by: Xiaolin Zhao Change-Id: I4a7392afd7238d44e7d09aaca7e0d733649926ac Reviewed-on: https://go-review.googlesource.com/c/go/+/521785 TryBot-Result: Gopher Robot Reviewed-by: Cherry Mui Run-TryBot: David Chase Reviewed-by: Meidan Li Reviewed-by: David Chase Auto-Submit: David Chase --- src/internal/bytealg/compare_loong64.s | 95 ++++++++++++++---------- src/internal/bytealg/equal_loong64.s | 21 +++++- src/internal/bytealg/indexbyte_loong64.s | 32 ++++++-- 3 files changed, 101 insertions(+), 47 deletions(-) diff --git a/src/internal/bytealg/compare_loong64.s b/src/internal/bytealg/compare_loong64.s index c89c5a9256..311449ab18 100644 --- a/src/internal/bytealg/compare_loong64.s +++ b/src/internal/bytealg/compare_loong64.s @@ -5,83 +5,102 @@ #include "go_asm.h" #include "textflag.h" -TEXT ·Compare(SB),NOSPLIT,$0-56 - MOVV a_base+0(FP), R6 - MOVV b_base+24(FP), R7 - MOVV a_len+8(FP), R4 - MOVV b_len+32(FP), R5 +TEXT ·Compare(SB),NOSPLIT,$0-56 +#ifndef GOEXPERIMENT_regabiargs + MOVV a_base+0(FP), R4 + MOVV a_len+8(FP), R5 + MOVV b_base+24(FP), R6 + MOVV b_len+32(FP), R7 MOVV $ret+48(FP), R13 +#else + // R4 = a_base + // R5 = a_len + // R6 = a_cap (unused) + // R7 = b_base (want in R6) + // R8 = b_len (want in R7) + // R9 = b_cap (unused) + MOVV R7, R6 + MOVV R8, R7 +#endif JMP cmpbody<>(SB) -TEXT runtime·cmpstring(SB),NOSPLIT,$0-40 - MOVV a_base+0(FP), R6 - MOVV b_base+16(FP), R7 - MOVV a_len+8(FP), R4 - MOVV b_len+24(FP), R5 +TEXT runtime·cmpstring(SB),NOSPLIT,$0-40 +#ifndef GOEXPERIMENT_regabiargs + MOVV a_base+0(FP), R4 + MOVV b_base+16(FP), R6 + MOVV a_len+8(FP), R5 + MOVV b_len+24(FP), R7 MOVV $ret+32(FP), R13 +#endif + // R4 = a_base + // R5 = a_len + // R6 = b_base + // R7 = b_len JMP cmpbody<>(SB) // On entry: -// R4 length of a -// R5 length of b -// R6 points to the start of a -// R7 points to the start of b +// R5 length of a +// R7 length of b +// R4 points to the start of a +// R6 points to the start of b // R13 points to the return value (-1/0/1) TEXT cmpbody<>(SB),NOSPLIT|NOFRAME,$0 - BEQ R6, R7, samebytes // same start of a and b + BEQ R4, R6, samebytes // same start of a and b - SGTU R4, R5, R9 + SGTU R5, R7, R9 BNE R0, R9, r2_lt_r1 - MOVV R4, R14 + MOVV R5, R14 JMP entry r2_lt_r1: - MOVV R5, R14 // R14 is min(R4, R5) + MOVV R7, R14 // R14 is min(R4, R5) entry: - ADDV R6, R14, R12 // R6 start of a, R14 end of a - BEQ R6, R12, samebytes // length is 0 + ADDV R4, R14, R12 // R6 start of a, R14 end of a + BEQ R4, R12, samebytes // length is 0 SRLV $4, R14 // R14 is number of chunks BEQ R0, R14, byte_loop // make sure both a and b are aligned. - OR R6, R7, R15 + OR R4, R6, R15 AND $7, R15 BNE R0, R15, byte_loop PCALIGN $16 chunk16_loop: BEQ R0, R14, byte_loop - MOVV (R6), R8 - MOVV (R7), R9 + MOVV (R4), R8 + MOVV (R6), R9 BNE R8, R9, byte_loop - MOVV 8(R6), R16 - MOVV 8(R7), R17 + MOVV 8(R4), R16 + MOVV 8(R6), R17 + ADDV $16, R4 ADDV $16, R6 - ADDV $16, R7 SUBVU $1, R14 BEQ R16, R17, chunk16_loop + SUBV $8, R4 SUBV $8, R6 - SUBV $8, R7 byte_loop: - BEQ R6, R12, samebytes - MOVBU (R6), R8 + BEQ R4, R12, samebytes + MOVBU (R4), R8 + ADDVU $1, R4 + MOVBU (R6), R9 ADDVU $1, R6 - MOVBU (R7), R9 - ADDVU $1, R7 BEQ R8, R9, byte_loop byte_cmp: - SGTU R8, R9, R12 // R12 = 1 if (R8 > R9) - BNE R0, R12, ret - MOVV $-1, R12 + SGTU R8, R9, R4 // R12 = 1 if (R8 > R9) + BNE R0, R4, ret + MOVV $-1, R4 JMP ret samebytes: - SGTU R4, R5, R8 - SGTU R5, R4, R9 - SUBV R9, R8, R12 + SGTU R5, R7, R8 + SGTU R7, R5, R9 + SUBV R9, R8, R4 ret: - MOVV R12, (R13) +#ifndef GOEXPERIMENT_regabiargs + MOVV R4, (R13) +#endif RET diff --git a/src/internal/bytealg/equal_loong64.s b/src/internal/bytealg/equal_loong64.s index ba2a5578c3..a3ad5c1b35 100644 --- a/src/internal/bytealg/equal_loong64.s +++ b/src/internal/bytealg/equal_loong64.s @@ -8,17 +8,21 @@ #define REGCTXT R29 // memequal(a, b unsafe.Pointer, size uintptr) bool -TEXT runtime·memequal(SB),NOSPLIT|NOFRAME,$0-25 +TEXT runtime·memequal(SB),NOSPLIT|NOFRAME,$0-25 +#ifndef GOEXPERIMENT_regabiargs MOVV a+0(FP), R4 MOVV b+8(FP), R5 - BEQ R4, R5, eq MOVV size+16(FP), R6 +#endif + BEQ R4, R5, eq ADDV R4, R6, R7 PCALIGN $16 loop: BNE R4, R7, test MOVV $1, R4 +#ifndef GOEXPERIMENT_regabiargs MOVB R4, ret+24(FP) +#endif RET test: MOVBU (R4), R9 @@ -27,17 +31,24 @@ test: ADDV $1, R5 BEQ R9, R10, loop + MOVB R0, R4 +#ifndef GOEXPERIMENT_regabiargs MOVB R0, ret+24(FP) +#endif RET eq: MOVV $1, R4 +#ifndef GOEXPERIMENT_regabiargs MOVB R4, ret+24(FP) +#endif RET // memequal_varlen(a, b unsafe.Pointer) bool -TEXT runtime·memequal_varlen(SB),NOSPLIT,$40-17 +TEXT runtime·memequal_varlen(SB),NOSPLIT,$40-17 +#ifndef GOEXPERIMENT_regabiargs MOVV a+0(FP), R4 MOVV b+8(FP), R5 +#endif BEQ R4, R5, eq MOVV 8(REGCTXT), R6 // compiler stores size at offset 8 in the closure MOVV R4, 8(R3) @@ -45,9 +56,13 @@ TEXT runtime·memequal_varlen(SB),NOSPLIT,$40-17 MOVV R6, 24(R3) JAL runtime·memequal(SB) MOVBU 32(R3), R4 +#ifndef GOEXPERIMENT_regabiargs MOVB R4, ret+16(FP) +#endif RET eq: MOVV $1, R4 +#ifndef GOEXPERIMENT_regabiargs MOVB R4, ret+16(FP) +#endif RET diff --git a/src/internal/bytealg/indexbyte_loong64.s b/src/internal/bytealg/indexbyte_loong64.s index 604970549f..03e0660973 100644 --- a/src/internal/bytealg/indexbyte_loong64.s +++ b/src/internal/bytealg/indexbyte_loong64.s @@ -5,11 +5,18 @@ #include "go_asm.h" #include "textflag.h" -TEXT ·IndexByte(SB),NOSPLIT,$0-40 +TEXT ·IndexByte(SB),NOSPLIT,$0-40 +#ifndef GOEXPERIMENT_regabiargs MOVV b_base+0(FP), R4 MOVV b_len+8(FP), R5 - MOVBU c+24(FP), R6 // byte to find - MOVV R4, R7 // store base for later + MOVBU c+24(FP), R7 // byte to find +#endif + // R4 = b_base + // R5 = b_len + // R6 = b_cap (unused) + // R7 = byte to find + AND $0xff, R7 + MOVV R4, R6 // store base for later ADDV R4, R5 // end ADDV $-1, R4 @@ -18,21 +25,30 @@ loop: ADDV $1, R4 BEQ R4, R5, notfound MOVBU (R4), R8 - BNE R6, R8, loop + BNE R7, R8, loop - SUBV R7, R4 // remove base + SUBV R6, R4 // remove base +#ifndef GOEXPERIMENT_regabiargs MOVV R4, ret+32(FP) +#endif RET notfound: MOVV $-1, R4 +#ifndef GOEXPERIMENT_regabiargs MOVV R4, ret+32(FP) +#endif RET -TEXT ·IndexByteString(SB),NOSPLIT,$0-32 +TEXT ·IndexByteString(SB),NOSPLIT,$0-32 +#ifndef GOEXPERIMENT_regabiargs MOVV s_base+0(FP), R4 MOVV s_len+8(FP), R5 MOVBU c+16(FP), R6 // byte to find +#endif + // R4 = s_base + // R5 = s_len + // R6 = byte to find MOVV R4, R7 // store base for later ADDV R4, R5 // end ADDV $-1, R4 @@ -45,10 +61,14 @@ loop: BNE R6, R8, loop SUBV R7, R4 // remove base +#ifndef GOEXPERIMENT_regabiargs MOVV R4, ret+24(FP) +#endif RET notfound: MOVV $-1, R4 +#ifndef GOEXPERIMENT_regabiargs MOVV R4, ret+24(FP) +#endif RET From c83b5fefabe514ce5315135621b962f120277d23 Mon Sep 17 00:00:00 2001 From: Guoqi Chen Date: Wed, 16 Aug 2023 09:05:30 +0800 Subject: [PATCH 046/313] runtime: add regABI support in memclr and memmove functions on loong64 Update #40724 Co-authored-by: Xiaolin Zhao Change-Id: I55c78bab5c697ea6c30f9d81f5f8fb75abb3987c Reviewed-on: https://go-review.googlesource.com/c/go/+/521786 TryBot-Result: Gopher Robot Reviewed-by: Cherry Mui Reviewed-by: Meidan Li Run-TryBot: David Chase Auto-Submit: David Chase Reviewed-by: David Chase --- src/runtime/memclr_loong64.s | 32 +++++++++++++++++--------------- src/runtime/memmove_loong64.s | 4 +++- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/runtime/memclr_loong64.s b/src/runtime/memclr_loong64.s index 7bb6f3dfc9..313e4d4f33 100644 --- a/src/runtime/memclr_loong64.s +++ b/src/runtime/memclr_loong64.s @@ -6,37 +6,39 @@ #include "textflag.h" // func memclrNoHeapPointers(ptr unsafe.Pointer, n uintptr) -TEXT runtime·memclrNoHeapPointers(SB),NOSPLIT,$0-16 - MOVV ptr+0(FP), R6 - MOVV n+8(FP), R7 - ADDV R6, R7, R4 +TEXT runtime·memclrNoHeapPointers(SB),NOSPLIT,$0-16 +#ifndef GOEXPERIMENT_regabiargs + MOVV ptr+0(FP), R4 + MOVV n+8(FP), R5 +#endif + ADDV R4, R5, R6 // if less than 8 bytes, do one byte at a time - SGTU $8, R7, R8 + SGTU $8, R5, R8 BNE R8, out // do one byte at a time until 8-aligned - AND $7, R6, R8 + AND $7, R4, R8 BEQ R8, words - MOVB R0, (R6) - ADDV $1, R6 + MOVB R0, (R4) + ADDV $1, R4 JMP -4(PC) words: // do 8 bytes at a time if there is room - ADDV $-7, R4, R7 + ADDV $-7, R6, R5 PCALIGN $16 - SGTU R7, R6, R8 + SGTU R5, R4, R8 BEQ R8, out - MOVV R0, (R6) - ADDV $8, R6 + MOVV R0, (R4) + ADDV $8, R4 JMP -4(PC) out: - BEQ R6, R4, done - MOVB R0, (R6) - ADDV $1, R6 + BEQ R4, R6, done + MOVB R0, (R4) + ADDV $1, R4 JMP -3(PC) done: RET diff --git a/src/runtime/memmove_loong64.s b/src/runtime/memmove_loong64.s index 0f139bcc13..5b7aeba698 100644 --- a/src/runtime/memmove_loong64.s +++ b/src/runtime/memmove_loong64.s @@ -7,10 +7,12 @@ // See memmove Go doc for important implementation constraints. // func memmove(to, from unsafe.Pointer, n uintptr) -TEXT runtime·memmove(SB), NOSPLIT|NOFRAME, $0-24 +TEXT runtime·memmove(SB), NOSPLIT|NOFRAME, $0-24 +#ifndef GOEXPERIMENT_regabiargs MOVV to+0(FP), R4 MOVV from+8(FP), R5 MOVV n+16(FP), R6 +#endif BNE R6, check RET From e58c9baa9f7b708bcd6a3abf5a8426b0531ed002 Mon Sep 17 00:00:00 2001 From: Guoqi Chen Date: Wed, 16 Aug 2023 09:16:21 +0800 Subject: [PATCH 047/313] cmd/internal/obj: set morestack arg spilling and regabi prologue on loong64 Update #40724 Co-authored-by: Xiaolin Zhao Change-Id: Ie92da57e29bae0e5cccb2a49a7cbeaf02cbf3a8d Reviewed-on: https://go-review.googlesource.com/c/go/+/521787 Reviewed-by: Meidan Li Run-TryBot: David Chase TryBot-Result: Gopher Robot Reviewed-by: Cherry Mui Reviewed-by: David Chase Auto-Submit: David Chase --- src/cmd/internal/obj/loong64/obj.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/cmd/internal/obj/loong64/obj.go b/src/cmd/internal/obj/loong64/obj.go index bc9cf2ec22..5fa67f3acd 100644 --- a/src/cmd/internal/obj/loong64/obj.go +++ b/src/cmd/internal/obj/loong64/obj.go @@ -620,6 +620,10 @@ func (c *ctxt0) stacksplit(p *obj.Prog, framesize int32) *obj.Prog { p = c.ctxt.StartUnsafePoint(p, c.newprog) + // Spill Arguments. This has to happen before we open + // any more frame space. + p = c.cursym.Func().SpillRegisterArgs(p, c.newprog) + // MOV REGLINK, -8/-16(SP) p = obj.Appendp(p, c.newprog) p.As = mov @@ -684,6 +688,8 @@ func (c *ctxt0) stacksplit(p *obj.Prog, framesize int32) *obj.Prog { p.To.Reg = REGSP p.Spadj = int32(-frameSize) + // Unspill arguments + p = c.cursym.Func().UnspillRegisterArgs(p, c.newprog) p = c.ctxt.EndUnsafePoint(p, c.newprog, -1) } @@ -795,6 +801,10 @@ func (c *ctxt0) stacksplit(p *obj.Prog, framesize int32) *obj.Prog { p = c.ctxt.EmitEntryStackMap(c.cursym, p, c.newprog) + // Spill the register args that could be clobbered by the + // morestack code + p = c.cursym.Func().SpillRegisterArgs(p, c.newprog) + // JAL runtime.morestack(SB) p = obj.Appendp(p, c.newprog) @@ -809,6 +819,7 @@ func (c *ctxt0) stacksplit(p *obj.Prog, framesize int32) *obj.Prog { } p.Mark |= BRANCH + p = c.cursym.Func().UnspillRegisterArgs(p, c.newprog) p = c.ctxt.EndUnsafePoint(p, c.newprog, -1) // JMP start From b3b442449b0b979a035b5a26b8e62d8f6158fa69 Mon Sep 17 00:00:00 2001 From: Guoqi Chen Date: Wed, 16 Aug 2023 10:22:13 +0800 Subject: [PATCH 048/313] cmd/compile: fix If lowering on loong64 Update #40724 Co-authored-by: Xiaolin Zhao Change-Id: I44477e32db765e0299d8361bd2b8d2c95564ed28 Reviewed-on: https://go-review.googlesource.com/c/go/+/521788 Reviewed-by: Meidan Li Reviewed-by: David Chase Auto-Submit: David Chase TryBot-Result: Gopher Robot Run-TryBot: David Chase Reviewed-by: Cherry Mui --- .../compile/internal/ssa/_gen/LOONG64.rules | 3 ++- .../compile/internal/ssa/rewriteLOONG64.go | 27 +++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules index b9aaa3ff7f..2af9519113 100644 --- a/src/cmd/compile/internal/ssa/_gen/LOONG64.rules +++ b/src/cmd/compile/internal/ssa/_gen/LOONG64.rules @@ -416,7 +416,7 @@ (GetCallerSP ...) => (LoweredGetCallerSP ...) (GetCallerPC ...) => (LoweredGetCallerPC ...) -(If cond yes no) => (NE cond yes no) +(If cond yes no) => (NE (MOVBUreg cond) yes no) // Write barrier. (WB ...) => (LoweredWB ...) @@ -450,6 +450,7 @@ (EQ (SGTconst [0] x) yes no) => (GEZ x yes no) (NE (SGT x (MOVVconst [0])) yes no) => (GTZ x yes no) (EQ (SGT x (MOVVconst [0])) yes no) => (LEZ x yes no) +(MOVBUreg x:((SGT|SGTU) _ _)) => x // fold offset into address (ADDVconst [off1] (MOVVaddr [off2] {sym} ptr)) && is32Bit(off1+int64(off2)) => (MOVVaddr [int32(off1)+int32(off2)] {sym} ptr) diff --git a/src/cmd/compile/internal/ssa/rewriteLOONG64.go b/src/cmd/compile/internal/ssa/rewriteLOONG64.go index 757524bdbb..edd3ffe6b9 100644 --- a/src/cmd/compile/internal/ssa/rewriteLOONG64.go +++ b/src/cmd/compile/internal/ssa/rewriteLOONG64.go @@ -1773,6 +1773,26 @@ func rewriteValueLOONG64_OpLOONG64MOVBUload(v *Value) bool { } func rewriteValueLOONG64_OpLOONG64MOVBUreg(v *Value) bool { v_0 := v.Args[0] + // match: (MOVBUreg x:(SGT _ _)) + // result: x + for { + x := v_0 + if x.Op != OpLOONG64SGT { + break + } + v.copyOf(x) + return true + } + // match: (MOVBUreg x:(SGTU _ _)) + // result: x + for { + x := v_0 + if x.Op != OpLOONG64SGTU { + break + } + v.copyOf(x) + return true + } // match: (MOVBUreg x:(MOVBUload _ _)) // result: (MOVVreg x) for { @@ -7608,6 +7628,7 @@ func rewriteValueLOONG64_OpZero(v *Value) bool { return false } func rewriteBlockLOONG64(b *Block) bool { + typ := &b.Func.Config.Types switch b.Kind { case BlockLOONG64EQ: // match: (EQ (FPFlagTrue cmp) yes no) @@ -7807,10 +7828,12 @@ func rewriteBlockLOONG64(b *Block) bool { } case BlockIf: // match: (If cond yes no) - // result: (NE cond yes no) + // result: (NE (MOVBUreg cond) yes no) for { cond := b.Controls[0] - b.resetWithControl(BlockLOONG64NE, cond) + v0 := b.NewValue0(cond.Pos, OpLOONG64MOVBUreg, typ.UInt64) + v0.AddArg(cond) + b.resetWithControl(BlockLOONG64NE, v0) return true } case BlockLOONG64LEZ: From 2e77b51df5b9f7753f500c6cbba8f0dab5bf2250 Mon Sep 17 00:00:00 2001 From: Guoqi Chen Date: Tue, 22 Aug 2023 19:50:03 +0800 Subject: [PATCH 049/313] runtime/internal/syscall: use ABIInternal for Syscall6 on loong64 Updates #40724 Co-authored-by: Xiaolin Zhao Change-Id: Ifcc2de35a797fd987a10f564206b14b54d736d1d Reviewed-on: https://go-review.googlesource.com/c/go/+/521789 Auto-Submit: David Chase Reviewed-by: Meidan Li Reviewed-by: Cherry Mui Run-TryBot: David Chase Reviewed-by: David Chase TryBot-Result: Gopher Robot --- .../internal/syscall/asm_linux_loong64.s | 41 ++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/src/runtime/internal/syscall/asm_linux_loong64.s b/src/runtime/internal/syscall/asm_linux_loong64.s index d6a33f90a7..11c5bc2468 100644 --- a/src/runtime/internal/syscall/asm_linux_loong64.s +++ b/src/runtime/internal/syscall/asm_linux_loong64.s @@ -5,7 +5,32 @@ #include "textflag.h" // func Syscall6(num, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, errno uintptr) -TEXT ·Syscall6(SB),NOSPLIT,$0-80 +// +// We need to convert to the syscall ABI. +// +// arg | ABIInternal | Syscall +// --------------------------- +// num | R4 | R11 +// a1 | R5 | R4 +// a2 | R6 | R5 +// a3 | R7 | R6 +// a4 | R8 | R7 +// a5 | R9 | R8 +// a6 | R10 | R9 +// +// r1 | R4 | R4 +// r2 | R5 | R5 +// err | R6 | part of R4 +TEXT ·Syscall6(SB),NOSPLIT,$0-80 +#ifdef GOEXPERIMENT_regabiargs + MOVV R4, R11 // syscall entry + MOVV R5, R4 + MOVV R6, R5 + MOVV R7, R6 + MOVV R8, R7 + MOVV R9, R8 + MOVV R10, R9 +#else MOVV num+0(FP), R11 // syscall entry MOVV a1+8(FP), R4 MOVV a2+16(FP), R5 @@ -13,7 +38,15 @@ TEXT ·Syscall6(SB),NOSPLIT,$0-80 MOVV a4+32(FP), R7 MOVV a5+40(FP), R8 MOVV a6+48(FP), R9 +#endif SYSCALL +#ifdef GOEXPERIMENT_regabiargs + MOVV R0, R5 // r2 is not used. Always set to 0. + MOVW $-4096, R12 + BGEU R12, R4, ok + SUBVU R4, R0, R6 // errno + MOVV $-1, R4 // r1 +#else MOVW $-4096, R12 BGEU R12, R4, ok MOVV $-1, R12 @@ -21,9 +54,15 @@ TEXT ·Syscall6(SB),NOSPLIT,$0-80 MOVV R0, r2+64(FP) SUBVU R4, R0, R4 MOVV R4, errno+72(FP) +#endif RET ok: +#ifdef GOEXPERIMENT_regabiargs + // r1 already in R4 + MOVV R0, R6 // errno +#else MOVV R4, r1+56(FP) MOVV R0, r2+64(FP) // r2 is not used. Always set to 0. MOVV R0, errno+72(FP) +#endif RET From cfb281754ec94859e86962ee3a66b8347e3161ab Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Tue, 7 Nov 2023 10:28:56 -0500 Subject: [PATCH 050/313] cmd/compile/internal/inline: revise -m=2 status messages This patch revises the compiler's "-m=2" status messages related to inlining. The "can inline" remarks will continue to use the same format, but the remarks when a specific call site is inlined will be changed to refer to the score used; before we had runtime/traceback.go:1131:28: inlining call to gotraceback runtime/traceback.go:1183:25: inlining call to readgstatus and with GOEXPERIMENT=newinliner the new messages will be: runtime/traceback.go:1131:28: inlining call to gotraceback with score 62 runtime/traceback.go:1183:25: inlining call to readgstatus with score 9 Change-Id: Ia86cf5351d29eda64a5426ca0a2a2ec0c2900d81 Reviewed-on: https://go-review.googlesource.com/c/go/+/540775 Reviewed-by: Matthew Dempsky LUCI-TryBot-Result: Go LUCI --- src/cmd/compile/internal/inline/inl.go | 71 ++++++++++++------- .../internal/inline/inlheur/analyze.go | 2 +- .../internal/inline/inlheur/scoring.go | 12 +++- 3 files changed, 55 insertions(+), 30 deletions(-) diff --git a/src/cmd/compile/internal/inline/inl.go b/src/cmd/compile/internal/inline/inl.go index 74f0d341c7..b365008c76 100644 --- a/src/cmd/compile/internal/inline/inl.go +++ b/src/cmd/compile/internal/inline/inl.go @@ -29,6 +29,7 @@ package inline import ( "fmt" "go/constant" + "internal/buildcfg" "strconv" "cmd/compile/internal/base" @@ -327,14 +328,22 @@ func CanInline(fn *ir.Func, profile *pgo.Profile) { CanDelayResults: canDelayResults(fn), } + if base.Flag.LowerM != 0 || logopt.Enabled() { + noteInlinableFunc(n, fn, budget-visitor.budget) + } +} +// noteInlinableFunc issues a message to the user that the specified +// function is inlinable. +func noteInlinableFunc(n *ir.Name, fn *ir.Func, cost int32) { if base.Flag.LowerM > 1 { - fmt.Printf("%v: can inline %v with cost %d as: %v { %v }\n", ir.Line(fn), n, budget-visitor.budget, fn.Type(), ir.Nodes(fn.Body)) + fmt.Printf("%v: can inline %v with cost %d as: %v { %v }\n", ir.Line(fn), n, cost, fn.Type(), ir.Nodes(fn.Body)) } else if base.Flag.LowerM != 0 { fmt.Printf("%v: can inline %v\n", ir.Line(fn), n) } + // JSON optimization log output. if logopt.Enabled() { - logopt.LogOpt(fn.Pos(), "canInlineFunction", "inline", ir.FuncName(fn), fmt.Sprintf("cost: %d", budget-visitor.budget)) + logopt.LogOpt(fn.Pos(), "canInlineFunction", "inline", ir.FuncName(fn), fmt.Sprintf("cost: %d", cost)) } } @@ -558,7 +567,7 @@ opSwitch: // Check whether we'd actually inline this call. Set // log == false since we aren't actually doing inlining // yet. - if canInlineCallExpr(v.curFunc, n, callee, v.isBigFunc, false) { + if ok, _ := canInlineCallExpr(v.curFunc, n, callee, v.isBigFunc, false); ok { // mkinlcall would inline this call [1], so use // the cost of the inline body as the cost of // the call, as that is what will actually @@ -851,9 +860,10 @@ var InlineCall = func(callerfn *ir.Func, call *ir.CallExpr, fn *ir.Func, inlInde // inlineCostOK returns true if call n from caller to callee is cheap enough to // inline. bigCaller indicates that caller is a big function. // -// If inlineCostOK returns false, it also returns the max cost that the callee -// exceeded. -func inlineCostOK(n *ir.CallExpr, caller, callee *ir.Func, bigCaller bool) (bool, int32) { +// In addition to the "cost OK" boolean, it also returns the "max +// cost" limit used to make the decision (which may differ depending +// on func size), and the score assigned to this specific callsite. +func inlineCostOK(n *ir.CallExpr, caller, callee *ir.Func, bigCaller bool) (bool, int32, int32) { maxCost := int32(inlineMaxBudget) if bigCaller { // We use this to restrict inlining into very big functions. @@ -867,12 +877,11 @@ func inlineCostOK(n *ir.CallExpr, caller, callee *ir.Func, bigCaller bool) (bool if ok { metric = int32(score) } - } if metric <= maxCost { // Simple case. Function is already cheap enough. - return true, 0 + return true, 0, metric } // We'll also allow inlining of hot functions below inlineHotMaxBudget, @@ -882,7 +891,7 @@ func inlineCostOK(n *ir.CallExpr, caller, callee *ir.Func, bigCaller bool) (bool csi := pgo.CallSiteInfo{LineOffset: lineOffset, Caller: caller} if _, ok := candHotEdgeMap[csi]; !ok { // Cold - return false, maxCost + return false, maxCost, metric } // Hot @@ -891,47 +900,49 @@ func inlineCostOK(n *ir.CallExpr, caller, callee *ir.Func, bigCaller bool) (bool if base.Debug.PGODebug > 0 { fmt.Printf("hot-big check disallows inlining for call %s (cost %d) at %v in big function %s\n", ir.PkgFuncName(callee), callee.Inl.Cost, ir.Line(n), ir.PkgFuncName(caller)) } - return false, maxCost + return false, maxCost, metric } if metric > inlineHotMaxBudget { - return false, inlineHotMaxBudget + return false, inlineHotMaxBudget, metric } if !base.PGOHash.MatchPosWithInfo(n.Pos(), "inline", nil) { // De-selected by PGO Hash. - return false, maxCost + return false, maxCost, metric } if base.Debug.PGODebug > 0 { fmt.Printf("hot-budget check allows inlining for call %s (cost %d) at %v in function %s\n", ir.PkgFuncName(callee), callee.Inl.Cost, ir.Line(n), ir.PkgFuncName(caller)) } - return true, 0 + return true, 0, metric } -// canInlineCallsite returns true if the call n from caller to callee can be -// inlined. bigCaller indicates that caller is a big function. log indicates -// that the 'cannot inline' reason should be logged. +// canInlineCallsite returns true if the call n from caller to callee +// can be inlined, plus the score computed for the call expr in +// question. bigCaller indicates that caller is a big function. log +// indicates that the 'cannot inline' reason should be logged. // // Preconditions: CanInline(callee) has already been called. -func canInlineCallExpr(callerfn *ir.Func, n *ir.CallExpr, callee *ir.Func, bigCaller bool, log bool) bool { +func canInlineCallExpr(callerfn *ir.Func, n *ir.CallExpr, callee *ir.Func, bigCaller bool, log bool) (bool, int32) { if callee.Inl == nil { // callee is never inlinable. if log && logopt.Enabled() { logopt.LogOpt(n.Pos(), "cannotInlineCall", "inline", ir.FuncName(callerfn), fmt.Sprintf("%s cannot be inlined", ir.PkgFuncName(callee))) } - return false + return false, 0 } - if ok, maxCost := inlineCostOK(n, callerfn, callee, bigCaller); !ok { + ok, maxCost, callSiteScore := inlineCostOK(n, callerfn, callee, bigCaller) + if !ok { // callee cost too high for this call site. if log && logopt.Enabled() { logopt.LogOpt(n.Pos(), "cannotInlineCall", "inline", ir.FuncName(callerfn), fmt.Sprintf("cost %d of %s exceeds max caller cost %d", callee.Inl.Cost, ir.PkgFuncName(callee), maxCost)) } - return false + return false, 0 } if callee == callerfn { @@ -939,7 +950,7 @@ func canInlineCallExpr(callerfn *ir.Func, n *ir.CallExpr, callee *ir.Func, bigCa if log && logopt.Enabled() { logopt.LogOpt(n.Pos(), "cannotInlineCall", "inline", fmt.Sprintf("recursive call to %s", ir.FuncName(callerfn))) } - return false + return false, 0 } if base.Flag.Cfg.Instrumenting && types.IsNoInstrumentPkg(callee.Sym().Pkg) { @@ -953,7 +964,7 @@ func canInlineCallExpr(callerfn *ir.Func, n *ir.CallExpr, callee *ir.Func, bigCa logopt.LogOpt(n.Pos(), "cannotInlineCall", "inline", ir.FuncName(callerfn), fmt.Sprintf("call to runtime function %s in instrumented build", ir.PkgFuncName(callee))) } - return false + return false, 0 } if base.Flag.Race && types.IsNoRacePkg(callee.Sym().Pkg) { @@ -961,7 +972,7 @@ func canInlineCallExpr(callerfn *ir.Func, n *ir.CallExpr, callee *ir.Func, bigCa logopt.LogOpt(n.Pos(), "cannotInlineCall", "inline", ir.FuncName(callerfn), fmt.Sprintf(`call to into "no-race" package function %s in race build`, ir.PkgFuncName(callee))) } - return false + return false, 0 } // Check if we've already inlined this function at this particular @@ -984,11 +995,11 @@ func canInlineCallExpr(callerfn *ir.Func, n *ir.CallExpr, callee *ir.Func, bigCa fmt.Sprintf("repeated recursive cycle to %s", ir.PkgFuncName(callee))) } } - return false + return false, 0 } } - return true + return true, callSiteScore } // mkinlcall returns an OINLCALL node that can replace OCALLFUNC n, or @@ -999,7 +1010,8 @@ func canInlineCallExpr(callerfn *ir.Func, n *ir.CallExpr, callee *ir.Func, bigCa // // n.Left = mkinlcall(n.Left, fn, isddd) func mkinlcall(callerfn *ir.Func, n *ir.CallExpr, fn *ir.Func, bigCaller bool) *ir.InlinedCallExpr { - if !canInlineCallExpr(callerfn, n, fn, bigCaller, true) { + ok, score := canInlineCallExpr(callerfn, n, fn, bigCaller, true) + if !ok { return nil } typecheck.AssertFixedCall(n) @@ -1058,7 +1070,12 @@ func mkinlcall(callerfn *ir.Func, n *ir.CallExpr, fn *ir.Func, bigCaller bool) * } if base.Flag.LowerM != 0 { - fmt.Printf("%v: inlining call to %v\n", ir.Line(n), fn) + if buildcfg.Experiment.NewInliner { + fmt.Printf("%v: inlining call to %v with score %d\n", + ir.Line(n), fn, score) + } else { + fmt.Printf("%v: inlining call to %v\n", ir.Line(n), fn) + } } if base.Flag.LowerM > 2 { fmt.Printf("%v: Before inlining: %+v\n", ir.Line(n), n) diff --git a/src/cmd/compile/internal/inline/inlheur/analyze.go b/src/cmd/compile/internal/inline/inlheur/analyze.go index 93073b9851..a1b6f358e1 100644 --- a/src/cmd/compile/internal/inline/inlheur/analyze.go +++ b/src/cmd/compile/internal/inline/inlheur/analyze.go @@ -154,7 +154,7 @@ func revisitInlinability(fn *ir.Func, funcProps *FuncProps, budgetForFunc func(* if fn.Inl == nil { return } - maxAdj := int32(largestScoreAdjustment(fn, funcProps)) + maxAdj := int32(LargestNegativeScoreAdjustment(fn, funcProps)) budget := budgetForFunc(fn) if fn.Inl.Cost+maxAdj > budget { fn.Inl = nil diff --git a/src/cmd/compile/internal/inline/inlheur/scoring.go b/src/cmd/compile/internal/inline/inlheur/scoring.go index efbca79ae3..623ba8adf0 100644 --- a/src/cmd/compile/internal/inline/inlheur/scoring.go +++ b/src/cmd/compile/internal/inline/inlheur/scoring.go @@ -354,7 +354,7 @@ func setupFlagToAdjMaps() { } } -// largestScoreAdjustment tries to estimate the largest possible +// LargestNegativeScoreAdjustment tries to estimate the largest possible // negative score adjustment that could be applied to a call of the // function with the specified props. Example: // @@ -373,7 +373,7 @@ func setupFlagToAdjMaps() { // given call _could_ be rescored down as much as -35 points-- thus if // the size of "bar" is 100 (for example) then there is at least a // chance that scoring will enable inlining. -func largestScoreAdjustment(fn *ir.Func, props *FuncProps) int { +func LargestNegativeScoreAdjustment(fn *ir.Func, props *FuncProps) int { if resultFlagToPositiveAdj == nil { setupFlagToAdjMaps() } @@ -398,6 +398,14 @@ func largestScoreAdjustment(fn *ir.Func, props *FuncProps) int { return score } +// LargestPositiveScoreAdjustment tries to estimate the largest possible +// positive score adjustment that could be applied to a given callsite. +// At the moment we don't have very many positive score adjustments, so +// this is just hard-coded, not table-driven. +func LargestPositiveScoreAdjustment(fn *ir.Func) int { + return adjValues[panicPathAdj] + adjValues[initFuncAdj] +} + // callSiteTab contains entries for each call in the function // currently being processed by InlineCalls; this variable will either // be set to 'cstabCache' below (for non-inlinable routines) or to the From f7b2779086683bf00570427ce08bebfb54c53b76 Mon Sep 17 00:00:00 2001 From: Kir Kolyshkin Date: Thu, 16 Nov 2023 00:42:04 -0800 Subject: [PATCH 051/313] syscall: fix getting pidfd when using CLONE_NEWUSER While working on CL 528798, I found out that sys.PidFD field (added in CL 520266) is not filled in when CLONE_NEWUSER is used. This happens because the code assumed that the parent and the child run in the same memory space. This assumption is right only when CLONE_VM is used for clone syscall, and the code only sets CLONE_VM when CLONE_NEWUSER is not used. Fix this, and add a test case (which fails before the fix). Updates #51246. Change-Id: I805203c1369cadd63d769568b132a9ffd92cc184 Reviewed-on: https://go-review.googlesource.com/c/go/+/542698 LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Pratt Reviewed-by: Michael Knyszek Auto-Submit: Michael Pratt --- src/syscall/exec_linux.go | 13 ++++++------- src/syscall/exec_linux_test.go | 15 ++++++++++++--- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/syscall/exec_linux.go b/src/syscall/exec_linux.go index e1c71b5a34..e6d6343ed8 100644 --- a/src/syscall/exec_linux.go +++ b/src/syscall/exec_linux.go @@ -133,7 +133,7 @@ func runtime_AfterForkInChild() func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr *ProcAttr, sys *SysProcAttr, pipe int) (pid int, err Errno) { // Set up and fork. This returns immediately in the parent or // if there's an error. - upid, err, mapPipe, locked := forkAndExecInChild1(argv0, argv, envv, chroot, dir, attr, sys, pipe) + upid, pidfd, err, mapPipe, locked := forkAndExecInChild1(argv0, argv, envv, chroot, dir, attr, sys, pipe) if locked { runtime_AfterFork() } @@ -143,6 +143,9 @@ func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr // parent; return PID pid = int(upid) + if sys.PidFD != nil { + *sys.PidFD = int(pidfd) + } if sys.UidMappings != nil || sys.GidMappings != nil { Close(mapPipe[0]) @@ -210,7 +213,7 @@ type cloneArgs struct { //go:noinline //go:norace //go:nocheckptr -func forkAndExecInChild1(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr *ProcAttr, sys *SysProcAttr, pipe int) (pid uintptr, err1 Errno, mapPipe [2]int, locked bool) { +func forkAndExecInChild1(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr *ProcAttr, sys *SysProcAttr, pipe int) (pid uintptr, pidfd int32, err1 Errno, mapPipe [2]int, locked bool) { // Defined in linux/prctl.h starting with Linux 4.3. const ( PR_CAP_AMBIENT = 0x2f @@ -241,12 +244,12 @@ func forkAndExecInChild1(argv0 *byte, argv, envv []*byte, chroot, dir *byte, att uidmap, setgroups, gidmap []byte clone3 *cloneArgs pgrp int32 - pidfd _C_int = -1 dirfd int cred *Credential ngroups, groups uintptr c uintptr ) + pidfd = -1 rlim := origRlimitNofile.Load() @@ -341,10 +344,6 @@ func forkAndExecInChild1(argv0 *byte, argv, envv []*byte, chroot, dir *byte, att // Fork succeeded, now in child. - if sys.PidFD != nil { - *sys.PidFD = int(pidfd) - } - // Enable the "keep capabilities" flag to set ambient capabilities later. if len(sys.AmbientCaps) > 0 { _, _, err1 = RawSyscall6(SYS_PRCTL, PR_SET_KEEPCAPS, 1, 0, 0, 0, 0) diff --git a/src/syscall/exec_linux_test.go b/src/syscall/exec_linux_test.go index f255930aa8..a7af00d2c0 100644 --- a/src/syscall/exec_linux_test.go +++ b/src/syscall/exec_linux_test.go @@ -522,7 +522,7 @@ func TestCloneTimeNamespace(t *testing.T) { } } -func testPidFD(t *testing.T) error { +func testPidFD(t *testing.T, userns bool) error { testenv.MustHaveExec(t) if os.Getenv("GO_WANT_HELPER_PROCESS") == "1" { @@ -541,6 +541,9 @@ func testPidFD(t *testing.T) error { cmd.SysProcAttr = &syscall.SysProcAttr{ PidFD: &pidfd, } + if userns { + cmd.SysProcAttr.Cloneflags = syscall.CLONE_NEWUSER + } if err := cmd.Start(); err != nil { return err } @@ -572,7 +575,13 @@ func testPidFD(t *testing.T) error { } func TestPidFD(t *testing.T) { - if err := testPidFD(t); err != nil { + if err := testPidFD(t, false); err != nil { + t.Fatal("can't start a process:", err) + } +} + +func TestPidFDWithUserNS(t *testing.T) { + if err := testPidFD(t, true); err != nil { t.Fatal("can't start a process:", err) } } @@ -581,7 +590,7 @@ func TestPidFDClone3(t *testing.T) { *syscall.ForceClone3 = true defer func() { *syscall.ForceClone3 = false }() - if err := testPidFD(t); err != nil { + if err := testPidFD(t, false); err != nil { if testenv.SyscallIsNotSupported(err) { t.Skip("clone3 not supported:", err) } From e5615ad876aee4974aa1eb2683d545d82e173a58 Mon Sep 17 00:00:00 2001 From: Guoqi Chen Date: Wed, 16 Aug 2023 10:39:38 +0800 Subject: [PATCH 052/313] cmd/compile, internal/buildcfg: enable regABI on loong64, and add loong64 in test func hasRegisterABI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit goos: linux goarch: loong64 pkg: test/bench/go1 cpu: Loongson-3A5000 @ 2500.00MHz │ bench.old │ bench.new │ │ sec/op │ sec/op vs base │ Template 116.4m ± 1% 101.3m ± 0% -12.94% (p=0.000 n=20) Gzip 417.2m ± 0% 419.4m ± 0% +0.53% (p=0.000 n=20) Gunzip 87.41m ± 0% 84.61m ± 0% -3.20% (p=0.000 n=20) FmtFprintfEmpty 97.87n ± 0% 81.05n ± 0% -17.19% (p=0.000 n=20) FmtFprintfString 151.1n ± 0% 140.9n ± 0% -6.75% (p=0.000 n=20) FmtFprintfInt 155.6n ± 0% 143.0n ± 0% -8.10% (p=0.000 n=20) FmtFprintfIntInt 236.9n ± 0% 225.1n ± 0% -5.00% (p=0.000 n=20) FmtFprintfPrefixedInt 316.8n ± 0% 331.9n ± 0% +4.77% (p=0.000 n=20) FmtFprintfFloat 401.5n ± 0% 380.0n ± 0% -5.35% (p=0.000 n=20) FmtManyArgs 925.3n ± 0% 910.1n ± 0% -1.64% (p=0.000 n=20) BinaryTree17 14.04 ± 1% 12.84 ± 0% -8.52% (p=0.000 n=20) RegexpMatchEasy0_32 133.1n ± 0% 121.3n ± 0% -8.87% (p=0.000 n=20) RegexpMatchEasy0_1K 1.363µ ± 0% 1.337µ ± 0% -1.91% (p=0.000 n=20) RegexpMatchEasy1_32 162.7n ± 0% 152.6n ± 0% -6.24% (p=0.000 n=20) RegexpMatchEasy1_1K 1.505µ ± 0% 1.740µ ± 0% +15.61% (p=0.000 n=20) RegexpMatchMedium_32 1.429µ ± 0% 1.299µ ± 0% -9.10% (p=0.000 n=20) RegexpMatchMedium_1K 41.76µ ± 0% 38.16µ ± 0% -8.61% (p=0.000 n=20) RegexpMatchHard_32 2.094µ ± 0% 2.157µ ± 0% +3.01% (p=0.000 n=20) RegexpMatchHard_1K 63.25µ ± 0% 64.72µ ± 0% +2.33% (p=0.000 n=20) JSONEncode 18.00m ± 1% 17.46m ± 1% -3.05% (p=0.000 n=20) JSONDecode 79.49m ± 0% 72.42m ± 0% -8.89% (p=0.000 n=20) Revcomp 1.147 ± 0% 1.255 ± 0% +9.39% (p=0.000 n=20) Fannkuch11 3.623 ± 0% 3.410 ± 0% -5.87% (p=0.000 n=20) Fannkuch11 3.623 ± 0% 3.410 ± 0% -5.87% (p=0.000 n=20) GobDecode 14.26m ± 0% 12.92m ± 0% -9.36% (p=0.000 n=20) GobEncode 16.86m ± 1% 14.96m ± 0% -11.28% (p=0.000 n=20) GoParse 8.721m ± 0% 8.125m ± 1% -6.84% (p=0.000 n=20) Mandelbrot200 7.203m ± 0% 7.171m ± 0% -0.44% (p=0.000 n=20) HTTPClientServer 83.96µ ± 0% 80.83µ ± 0% -3.72% (p=0.000 n=20) TimeParse 415.3n ± 0% 389.1n ± 0% -6.31% (p=0.000 n=20) TimeFormat 506.4n ± 0% 495.9n ± 0% -2.06% (p=0.000 n=20) geomean 102.6µ 98.04µ -4.40% │ bench.old │ bench.new │ │ B/s │ B/s vs base │ Template 15.90Mi ± 1% 18.26Mi ± 0% +14.88% (p=0.000 n=20) Gzip 44.36Mi ± 0% 44.12Mi ± 0% -0.53% (p=0.000 n=20) Gunzip 211.7Mi ± 0% 218.7Mi ± 0% +3.31% (p=0.000 n=20) RegexpMatchEasy0_32 229.3Mi ± 0% 251.6Mi ± 0% +9.72% (p=0.000 n=20) RegexpMatchEasy0_1K 716.4Mi ± 0% 730.3Mi ± 0% +1.94% (p=0.000 n=20) RegexpMatchEasy1_32 187.6Mi ± 0% 200.0Mi ± 0% +6.64% (p=0.000 n=20) RegexpMatchEasy1_1K 649.1Mi ± 0% 561.3Mi ± 0% -13.52% (p=0.000 n=20) RegexpMatchMedium_32 21.35Mi ± 0% 23.50Mi ± 0% +10.05% (p=0.000 n=20) RegexpMatchMedium_1K 23.38Mi ± 0% 25.59Mi ± 0% +9.42% (p=0.000 n=20) RegexpMatchHard_32 14.57Mi ± 0% 14.14Mi ± 0% -2.95% (p=0.000 n=20) RegexpMatchHard_1K 15.44Mi ± 0% 15.09Mi ± 0% -2.29% (p=0.000 n=20) JSONEncode 102.8Mi ± 1% 106.0Mi ± 1% +3.15% (p=0.000 n=20) JSONDecode 23.28Mi ± 0% 25.55Mi ± 0% +9.75% (p=0.000 n=20) Revcomp 211.3Mi ± 0% 193.1Mi ± 0% -8.58% (p=0.000 n=20) GobDecode 51.34Mi ± 0% 56.64Mi ± 0% +10.33% (p=0.000 n=20) GobEncode 43.42Mi ± 1% 48.93Mi ± 0% +12.71% (p=0.000 n=20) GoParse 6.337Mi ± 0% 6.800Mi ± 1% +7.30% (p=0.000 n=20) geomean 61.24Mi 63.63Mi +3.91% Update #40724 Co-authored-by: Xiaolin Zhao Change-Id: I5993460da8c5926c70cb6fbe551b8e4655dea9d0 Reviewed-on: https://go-review.googlesource.com/c/go/+/521790 Reviewed-by: Meidan Li Reviewed-by: Cherry Mui Auto-Submit: David Chase Run-TryBot: David Chase TryBot-Result: Gopher Robot Reviewed-by: David Chase --- src/cmd/compile/internal/ssa/config.go | 4 ++-- src/cmd/compile/internal/ssa/debug_lines_test.go | 2 +- src/internal/buildcfg/exp.go | 4 +++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/cmd/compile/internal/ssa/config.go b/src/cmd/compile/internal/ssa/config.go index c36ac4cd5d..debcf1a0f4 100644 --- a/src/cmd/compile/internal/ssa/config.go +++ b/src/cmd/compile/internal/ssa/config.go @@ -283,8 +283,8 @@ func NewConfig(arch string, types Types, ctxt *obj.Link, optimize, softfloat boo c.registers = registersLOONG64[:] c.gpRegMask = gpRegMaskLOONG64 c.fpRegMask = fpRegMaskLOONG64 - // c.intParamRegs = paramIntRegLOONG64 - // c.floatParamRegs = paramFloatRegLOONG64 + c.intParamRegs = paramIntRegLOONG64 + c.floatParamRegs = paramFloatRegLOONG64 c.FPReg = framepointerRegLOONG64 c.LinkReg = linkRegLOONG64 c.hasGReg = true diff --git a/src/cmd/compile/internal/ssa/debug_lines_test.go b/src/cmd/compile/internal/ssa/debug_lines_test.go index cf115107a1..af9e2a34cf 100644 --- a/src/cmd/compile/internal/ssa/debug_lines_test.go +++ b/src/cmd/compile/internal/ssa/debug_lines_test.go @@ -44,7 +44,7 @@ func testGoArch() string { func hasRegisterABI() bool { switch testGoArch() { - case "amd64", "arm64", "ppc64", "ppc64le", "riscv": + case "amd64", "arm64", "loong64", "ppc64", "ppc64le", "riscv": return true } return false diff --git a/src/internal/buildcfg/exp.go b/src/internal/buildcfg/exp.go index c6a6c84f3c..75ed7b2459 100644 --- a/src/internal/buildcfg/exp.go +++ b/src/internal/buildcfg/exp.go @@ -65,6 +65,8 @@ func ParseGOEXPERIMENT(goos, goarch, goexp string) (*ExperimentFlags, error) { case "amd64", "arm64", "ppc64le", "ppc64", "riscv64": regabiAlwaysOn = true regabiSupported = true + case "loong64": + regabiSupported = true } baseline := goexperiment.Flags{ @@ -130,7 +132,7 @@ func ParseGOEXPERIMENT(goos, goarch, goexp string) (*ExperimentFlags, error) { flags.RegabiWrappers = true flags.RegabiArgs = true } - // regabi is only supported on amd64, arm64, riscv64, ppc64 and ppc64le. + // regabi is only supported on amd64, arm64, loong64, riscv64, ppc64 and ppc64le. if !regabiSupported { flags.RegabiWrappers = false flags.RegabiArgs = false From 00715d089d68c1dd43ed1f508e8937c5208fb6f0 Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Fri, 10 Nov 2023 18:03:00 -0800 Subject: [PATCH 053/313] cmd/compile/internal/walk: copy SSA-able variables order.go ensures expressions that are passed to the runtime by address are in fact addressable. However, in the case of local variables, if the variable hasn't already been marked as addrtaken, then taking its address here will effectively prevent the variable from being converted to SSA form. Instead, it's better to just copy the variable into a new temporary, which we can pass by address instead. This ensures the original variable can still be converted to SSA form. Fixes #63332. Change-Id: I182376d98d419df8bf07c400d84c344c9b82c0fb Reviewed-on: https://go-review.googlesource.com/c/go/+/541715 LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall Reviewed-by: Keith Randall Auto-Submit: Matthew Dempsky --- src/cmd/compile/internal/walk/order.go | 52 ++++++++++++++++++++++++-- test/codegen/issue63332.go | 14 +++++++ 2 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 test/codegen/issue63332.go diff --git a/src/cmd/compile/internal/walk/order.go b/src/cmd/compile/internal/walk/order.go index 4d9b2fbee5..179fbdb99e 100644 --- a/src/cmd/compile/internal/walk/order.go +++ b/src/cmd/compile/internal/walk/order.go @@ -11,6 +11,7 @@ import ( "cmd/compile/internal/base" "cmd/compile/internal/ir" "cmd/compile/internal/reflectdata" + "cmd/compile/internal/ssa" "cmd/compile/internal/staticinit" "cmd/compile/internal/typecheck" "cmd/compile/internal/types" @@ -231,14 +232,29 @@ func (o *orderState) addrTemp(n ir.Node) ir.Node { vstat = typecheck.Expr(vstat).(*ir.Name) return vstat } + + // Prevent taking the address of an SSA-able local variable (#63332). + // + // TODO(mdempsky): Note that OuterValue unwraps OCONVNOPs, but + // IsAddressable does not. It should be possible to skip copying for + // at least some of these OCONVNOPs (e.g., reinsert them after the + // OADDR operation), but at least walkCompare needs to be fixed to + // support that (see trybot failures on go.dev/cl/541715, PS1). if ir.IsAddressable(n) { + if name, ok := ir.OuterValue(n).(*ir.Name); ok && name.Op() == ir.ONAME { + if name.Class == ir.PAUTO && !name.Addrtaken() && ssa.CanSSA(name.Type()) { + goto Copy + } + } + return n } + +Copy: return o.copyExpr(n) } // mapKeyTemp prepares n to be a key in a map runtime call and returns n. -// It should only be used for map runtime calls which have *_fast* versions. // The first parameter is the position of n's containing node, for use in case // that n's position is not unique (e.g., if n is an ONAME). func (o *orderState) mapKeyTemp(outerPos src.XPos, t *types.Type, n ir.Node) ir.Node { @@ -603,8 +619,38 @@ func (o *orderState) stmt(n ir.Node) { case ir.OAS: n := n.(*ir.AssignStmt) t := o.markTemp() + + // There's a delicate interaction here between two OINDEXMAP + // optimizations. + // + // First, we want to handle m[k] = append(m[k], ...) with a single + // runtime call to mapassign. This requires the m[k] expressions to + // satisfy ir.SameSafeExpr in walkAssign. + // + // But if k is a slow map key type that's passed by reference (e.g., + // byte), then we want to avoid marking user variables as addrtaken, + // if that might prevent the compiler from keeping k in a register. + // + // TODO(mdempsky): It would be better if walk was responsible for + // inserting temporaries as needed. + mapAppend := n.X.Op() == ir.OINDEXMAP && n.Y.Op() == ir.OAPPEND && + ir.SameSafeExpr(n.X, n.Y.(*ir.CallExpr).Args[0]) + n.X = o.expr(n.X, nil) - n.Y = o.expr(n.Y, n.X) + if mapAppend { + indexLHS := n.X.(*ir.IndexExpr) + indexLHS.X = o.cheapExpr(indexLHS.X) + indexLHS.Index = o.cheapExpr(indexLHS.Index) + + call := n.Y.(*ir.CallExpr) + indexRHS := call.Args[0].(*ir.IndexExpr) + indexRHS.X = indexLHS.X + indexRHS.Index = indexLHS.Index + + o.exprList(call.Args[1:]) + } else { + n.Y = o.expr(n.Y, n.X) + } o.mapAssign(n) o.popTemp(t) @@ -1158,7 +1204,7 @@ func (o *orderState) expr1(n, lhs ir.Node) ir.Node { } } - // key must be addressable + // key may need to be be addressable n.Index = o.mapKeyTemp(n.Pos(), n.X.Type(), n.Index) if needCopy { return o.copyExpr(n) diff --git a/test/codegen/issue63332.go b/test/codegen/issue63332.go new file mode 100644 index 0000000000..dbe671d247 --- /dev/null +++ b/test/codegen/issue63332.go @@ -0,0 +1,14 @@ +// asmcheck + +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package codegen + +func issue63332(c chan int) { + x := 0 + // amd64:-`MOVQ` + x += 2 + c <- x +} From 3548f9a01f12f691f32ea7f0279b7949650e69b7 Mon Sep 17 00:00:00 2001 From: Kir Kolyshkin Date: Mon, 20 Nov 2023 13:16:13 -0800 Subject: [PATCH 054/313] os: remove useless if from Wait on unix Back in the day, Wait used to accept options argument. CL 4962042 fixed the issue of setting process.done flag when WNOHANG option was used. Later, CL 5688046 removed options argument from Wait, but did not remove pid1 != 0 check which was meant to be used with WNOHANG only. Remove the check, which is useless and also confusing. Change-Id: I73b9ef4a0dbe35466e659ca58b896d515ba86d02 Reviewed-on: https://go-review.googlesource.com/c/go/+/543736 LUCI-TryBot-Result: Go LUCI Reviewed-by: Cherry Mui Auto-Submit: Michael Pratt Reviewed-by: Michael Pratt --- src/os/exec_unix.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/os/exec_unix.go b/src/os/exec_unix.go index f9063b4db4..36b320df18 100644 --- a/src/os/exec_unix.go +++ b/src/os/exec_unix.go @@ -48,9 +48,7 @@ func (p *Process) wait() (ps *ProcessState, err error) { if e != nil { return nil, NewSyscallError("wait", e) } - if pid1 != 0 { - p.setDone() - } + p.setDone() ps = &ProcessState{ pid: pid1, status: status, From 748952f494f359acf945b7984929024c248bedab Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Tue, 14 Nov 2023 17:03:24 +0000 Subject: [PATCH 055/313] cmd/trace: add almost full support for v2 traces in the trace viewer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This change refactors the cmd/trace package and adds most of the support for v2 traces. The following features of note are missing in this CL and will be implemented in follow-up CLs: - The focustask filter for the trace viewer - The taskid filter for the trace viewer - The goid filter for the trace viewer - Pprof profiles - The MMU graph - The goroutine analysis pages - The task analysis pages - The region analysis pages This CL makes one notable change to the trace CLI: it makes the -d flag accept an integer to set the debug mode. For old traces -d != 0 works just like -d. For new traces -d=1 means the high-level events and -d=2 means the low-level events. Thanks to Felix Geisendörfer (felix.geisendoerfer@datadoghq.com) for doing a lot of work on this CL; I picked this up from him and got a massive headstart as a result. For #60773. For #63960. Change-Id: I3626e22473227c5980134a85f1bb6a845f567b1b Reviewed-on: https://go-review.googlesource.com/c/go/+/542218 Reviewed-by: Michael Pratt Auto-Submit: Michael Knyszek TryBot-Bypass: Michael Knyszek --- src/cmd/go/internal/trace/trace.go | 12 +- src/cmd/trace/main.go | 238 +- src/cmd/trace/mmu.go | 3 +- src/cmd/trace/trace.go | 776 +-- src/cmd/trace/trace_test.go | 21 +- src/cmd/trace/trace_unix_test.go | 9 +- src/cmd/trace/v2/gen.go | 249 + src/cmd/trace/v2/gstate.go | 362 ++ src/cmd/trace/v2/jsontrace.go | 67 + src/cmd/trace/v2/jsontrace_test.go | 291 ++ src/cmd/trace/v2/main.go | 136 + src/cmd/trace/v2/procgen.go | 209 + src/cmd/trace/v2/testdata/generate.go | 6 + src/cmd/trace/v2/testdata/go122.test | 4366 +++++++++++++++++ src/cmd/trace/v2/testdata/mktests.go | 60 + src/cmd/trace/v2/testdata/testprog/main.go | 129 + src/cmd/trace/v2/viewer.go | 56 + src/go/build/deps_test.go | 11 + src/internal/trace/parser.go | 15 +- src/internal/trace/traceviewer/emitter.go | 666 +++ .../trace/traceviewer/format}/format.go | 43 +- src/internal/trace/traceviewer/http.go | 375 ++ .../trace/traceviewer}/static/README.md | 0 .../static/trace_viewer_full.html | 0 .../traceviewer}/static/webcomponents.min.js | 0 src/internal/trace/v2/version/version.go | 3 +- 26 files changed, 7196 insertions(+), 907 deletions(-) create mode 100644 src/cmd/trace/v2/gen.go create mode 100644 src/cmd/trace/v2/gstate.go create mode 100644 src/cmd/trace/v2/jsontrace.go create mode 100644 src/cmd/trace/v2/jsontrace_test.go create mode 100644 src/cmd/trace/v2/main.go create mode 100644 src/cmd/trace/v2/procgen.go create mode 100644 src/cmd/trace/v2/testdata/generate.go create mode 100644 src/cmd/trace/v2/testdata/go122.test create mode 100644 src/cmd/trace/v2/testdata/mktests.go create mode 100644 src/cmd/trace/v2/testdata/testprog/main.go create mode 100644 src/cmd/trace/v2/viewer.go create mode 100644 src/internal/trace/traceviewer/emitter.go rename src/{cmd/internal/traceviewer => internal/trace/traceviewer/format}/format.go (60%) create mode 100644 src/internal/trace/traceviewer/http.go rename src/{cmd/trace => internal/trace/traceviewer}/static/README.md (100%) rename src/{cmd/trace => internal/trace/traceviewer}/static/trace_viewer_full.html (100%) rename src/{cmd/trace => internal/trace/traceviewer}/static/webcomponents.min.js (100%) diff --git a/src/cmd/go/internal/trace/trace.go b/src/cmd/go/internal/trace/trace.go index 17d3ee9e7f..f96aa40002 100644 --- a/src/cmd/go/internal/trace/trace.go +++ b/src/cmd/go/internal/trace/trace.go @@ -5,10 +5,10 @@ package trace import ( - "cmd/internal/traceviewer" "context" "encoding/json" "errors" + "internal/trace/traceviewer/format" "os" "strings" "sync/atomic" @@ -47,7 +47,7 @@ func StartSpan(ctx context.Context, name string) (context.Context, *Span) { return ctx, nil } childSpan := &Span{t: tc.t, name: name, tid: tc.tid, start: time.Now()} - tc.t.writeEvent(&traceviewer.Event{ + tc.t.writeEvent(&format.Event{ Name: childSpan.name, Time: float64(childSpan.start.UnixNano()) / float64(time.Microsecond), TID: childSpan.tid, @@ -77,7 +77,7 @@ func Flow(ctx context.Context, from *Span, to *Span) { } id := tc.t.getNextFlowID() - tc.t.writeEvent(&traceviewer.Event{ + tc.t.writeEvent(&format.Event{ Name: from.name + " -> " + to.name, Category: "flow", ID: id, @@ -85,7 +85,7 @@ func Flow(ctx context.Context, from *Span, to *Span) { Phase: phaseFlowStart, TID: from.tid, }) - tc.t.writeEvent(&traceviewer.Event{ + tc.t.writeEvent(&format.Event{ Name: from.name + " -> " + to.name, Category: "flow", // TODO(matloob): Add Category to Flow? ID: id, @@ -110,7 +110,7 @@ func (s *Span) Done() { return } s.end = time.Now() - s.t.writeEvent(&traceviewer.Event{ + s.t.writeEvent(&format.Event{ Name: s.name, Time: float64(s.end.UnixNano()) / float64(time.Microsecond), TID: s.tid, @@ -125,7 +125,7 @@ type tracer struct { nextFlowID atomic.Uint64 } -func (t *tracer) writeEvent(ev *traceviewer.Event) error { +func (t *tracer) writeEvent(ev *format.Event) error { f := <-t.file defer func() { t.file <- f }() var err error diff --git a/src/cmd/trace/main.go b/src/cmd/trace/main.go index 9e9e7f3e49..b269050499 100644 --- a/src/cmd/trace/main.go +++ b/src/cmd/trace/main.go @@ -7,10 +7,11 @@ package main import ( "bufio" "cmd/internal/browser" + cmdv2 "cmd/trace/v2" "flag" "fmt" - "html/template" "internal/trace" + "internal/trace/traceviewer" "io" "log" "net" @@ -46,7 +47,7 @@ Supported profile types are: Flags: -http=addr: HTTP service address (e.g., ':6060') -pprof=type: print a pprof-like profile instead - -d: print debug info such as parsed events + -d=int: print debug info such as parsed events (1 for high-level, 2 for low-level) Note that while the various profiles available when launching 'go tool trace' work on every browser, the trace viewer itself @@ -57,7 +58,7 @@ and is only actively tested on that browser. var ( httpFlag = flag.String("http", "localhost:0", "HTTP service address (e.g., ':6060')") pprofFlag = flag.String("pprof", "", "print a pprof-like profile instead") - debugFlag = flag.Bool("d", false, "print debug information such as parsed events list") + debugFlag = flag.Int("d", 0, "print debug information (1 for basic debug info, 2 for lower-level info)") // The binary file name, left here for serveSVGProfile. programBinary string @@ -83,6 +84,13 @@ func main() { flag.Usage() } + if isTraceV2(traceFile) { + if err := cmdv2.Main(traceFile, *httpFlag, *pprofFlag, *debugFlag); err != nil { + dief("%s\n", err) + } + return + } + var pprofFunc func(io.Writer, *http.Request) error switch *pprofFlag { case "net": @@ -115,7 +123,7 @@ func main() { dief("%v\n", err) } - if *debugFlag { + if *debugFlag != 0 { trace.Print(res.Events) os.Exit(0) } @@ -132,12 +140,27 @@ func main() { browser.Open(addr) // Start http server. - http.HandleFunc("/", httpMain) + http.Handle("/", traceviewer.MainHandler(ranges)) err = http.Serve(ln, nil) dief("failed to start http server: %v\n", err) } -var ranges []Range +// isTraceV2 returns true if filename holds a v2 trace. +func isTraceV2(filename string) bool { + file, err := os.Open(filename) + if err != nil { + return false + } + defer file.Close() + + ver, _, err := trace.ReadVersion(file) + if err != nil { + return false + } + return ver >= 1022 +} + +var ranges []traceviewer.Range var loader struct { once sync.Once @@ -175,209 +198,6 @@ func parseTrace() (trace.ParseResult, error) { return loader.res, loader.err } -// httpMain serves the starting page. -func httpMain(w http.ResponseWriter, r *http.Request) { - if err := templMain.Execute(w, ranges); err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } -} - -var templMain = template.Must(template.New("").Parse(` - - - -

cmd/trace: the Go trace event viewer

-

- This web server provides various visualizations of an event log gathered during - the execution of a Go program that uses the runtime/trace package. -

- -

Event timelines for running goroutines

-{{if $}} -

- Large traces are split into multiple sections of equal data size - (not duration) to avoid overwhelming the visualizer. -

- -{{else}} - -{{end}} -

- This view displays a timeline for each of the GOMAXPROCS logical - processors, showing which goroutine (if any) was running on that - logical processor at each moment. - - Each goroutine has an identifying number (e.g. G123), main function, - and color. - - A colored bar represents an uninterrupted span of execution. - - Execution of a goroutine may migrate from one logical processor to another, - causing a single colored bar to be horizontally continuous but - vertically displaced. -

-

- Clicking on a span reveals information about it, such as its - duration, its causal predecessors and successors, and the stack trace - at the final moment when it yielded the logical processor, for example - because it made a system call or tried to acquire a mutex. - - Directly underneath each bar, a smaller bar or more commonly a fine - vertical line indicates an event occurring during its execution. - Some of these are related to garbage collection; most indicate that - a goroutine yielded its logical processor but then immediately resumed execution - on the same logical processor. Clicking on the event displays the stack trace - at the moment it occurred. -

-

- The causal relationships between spans of goroutine execution - can be displayed by clicking the Flow Events button at the top. -

-

- At the top ("STATS"), there are three additional timelines that - display statistical information. - - "Goroutines" is a time series of the count of existing goroutines; - clicking on it displays their breakdown by state at that moment: - running, runnable, or waiting. - - "Heap" is a time series of the amount of heap memory allocated (in orange) - and (in green) the allocation limit at which the next GC cycle will begin. - - "Threads" shows the number of kernel threads in existence: there is - always one kernel thread per logical processor, and additional threads - are created for calls to non-Go code such as a system call or a - function written in C. -

-

- Above the event trace for the first logical processor are - traces for various runtime-internal events. - - The "GC" bar shows when the garbage collector is running, and in which stage. - Garbage collection may temporarily affect all the logical processors - and the other metrics. - - The "Network", "Timers", and "Syscalls" traces indicate events in - the runtime that cause goroutines to wake up. -

-

- The visualization allows you to navigate events at scales ranging from several - seconds to a handful of nanoseconds. - - Consult the documentation for the Chromium Trace Event Profiling Tool - for help navigating the view. -

- - -

- This view displays information about each set of goroutines that - shares the same main function. - - Clicking on a main function shows links to the four types of - blocking profile (see below) applied to that subset of goroutines. - - It also shows a table of specific goroutine instances, with various - execution statistics and a link to the event timeline for each one. - - The timeline displays only the selected goroutine and any others it - interacts with via block/unblock events. (The timeline is - goroutine-oriented rather than logical processor-oriented.) -

- -

Profiles

-

- Each link below displays a global profile in zoomable graph form as - produced by pprof's "web" command. - - In addition there is a link to download the profile for offline - analysis with pprof. - - All four profiles represent causes of delay that prevent a goroutine - from running on a logical processor: because it was waiting for the network, - for a synchronization operation on a mutex or channel, for a system call, - or for a logical processor to become available. -

- - -

User-defined tasks and regions

-

- The trace API allows a target program to annotate a region of code - within a goroutine, such as a key function, so that its performance - can be analyzed. - - Log events may be - associated with a region to record progress and relevant values. - - The API also allows annotation of higher-level - tasks, - which may involve work across many goroutines. -

-

- The links below display, for each region and task, a histogram of its execution times. - - Each histogram bucket contains a sample trace that records the - sequence of events such as goroutine creations, log events, and - subregion start/end times. - - For each task, you can click through to a logical-processor or - goroutine-oriented view showing the tasks and regions on the - timeline. - - Such information may help uncover which steps in a region are - unexpectedly slow, or reveal relationships between the data values - logged in a request and its running time. -

- - -

Garbage collection metrics

- -

- This chart indicates the maximum GC pause time (the largest x value - for which y is zero), and more generally, the fraction of time that - the processors are available to application goroutines ("mutators"), - for any time window of a specified size, in the worst case. -

- - -`)) - func dief(msg string, args ...any) { fmt.Fprintf(os.Stderr, msg, args...) os.Exit(1) diff --git a/src/cmd/trace/mmu.go b/src/cmd/trace/mmu.go index b71dcd6411..43017c857e 100644 --- a/src/cmd/trace/mmu.go +++ b/src/cmd/trace/mmu.go @@ -29,6 +29,7 @@ import ( "encoding/json" "fmt" "internal/trace" + "internal/trace/traceviewer" "log" "math" "net/http" @@ -393,7 +394,7 @@ type linkedUtilWindow struct { func newLinkedUtilWindow(ui trace.UtilWindow, window time.Duration) linkedUtilWindow { // Find the range containing this window. - var r Range + var r traceviewer.Range for _, r = range ranges { if r.EndTime > ui.Time { break diff --git a/src/cmd/trace/trace.go b/src/cmd/trace/trace.go index 618df42033..865bc612a9 100644 --- a/src/cmd/trace/trace.go +++ b/src/cmd/trace/trace.go @@ -5,29 +5,24 @@ package main import ( - "cmd/internal/traceviewer" - "embed" - "encoding/json" "fmt" "internal/trace" - "io" + "internal/trace/traceviewer" "log" "math" "net/http" "runtime/debug" "sort" "strconv" - "strings" "time" -) -//go:embed static/trace_viewer_full.html static/webcomponents.min.js -var staticContent embed.FS + "internal/trace/traceviewer/format" +) func init() { http.HandleFunc("/trace", httpTrace) http.HandleFunc("/jsontrace", httpJsonTrace) - http.Handle("/static/", http.FileServer(http.FS(staticContent))) + http.Handle("/static/", traceviewer.StaticHandler()) } // httpTrace serves either whole trace (goid==0) or trace for goid goroutine. @@ -37,143 +32,9 @@ func httpTrace(w http.ResponseWriter, r *http.Request) { http.Error(w, err.Error(), http.StatusInternalServerError) return } - if err := r.ParseForm(); err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } - html := strings.ReplaceAll(templTrace, "{{PARAMS}}", r.Form.Encode()) - w.Write([]byte(html)) - + traceviewer.TraceHandler().ServeHTTP(w, r) } -// https://chromium.googlesource.com/catapult/+/9508452e18f130c98499cb4c4f1e1efaedee8962/tracing/docs/embedding-trace-viewer.md -// This is almost verbatim copy of https://chromium-review.googlesource.com/c/catapult/+/2062938/2/tracing/bin/index.html -var templTrace = ` - - - - - - - - - - - - - -` - // httpJsonTrace serves json trace, requested from within templTrace HTML. func httpJsonTrace(w http.ResponseWriter, r *http.Request) { defer debug.FreeOSMemory() @@ -203,7 +64,7 @@ func httpJsonTrace(w http.ResponseWriter, r *http.Request) { log.Printf("failed to find goroutine %d", goid) return } - params.mode = modeGoroutineOriented + params.mode = traceviewer.ModeGoroutineOriented params.startTime = g.StartTime if g.EndTime != 0 { params.endTime = g.EndTime @@ -225,7 +86,7 @@ func httpJsonTrace(w http.ResponseWriter, r *http.Request) { return } goid := task.events[0].G - params.mode = modeGoroutineOriented | modeTaskOriented + params.mode = traceviewer.ModeGoroutineOriented | traceviewer.ModeTaskOriented params.startTime = task.firstTimestamp() - 1 params.endTime = task.lastTimestamp() + 1 params.maing = goid @@ -250,7 +111,7 @@ func httpJsonTrace(w http.ResponseWriter, r *http.Request) { log.Printf("failed to find task with id %d", taskid) return } - params.mode = modeTaskOriented + params.mode = traceviewer.ModeTaskOriented params.startTime = task.firstTimestamp() - 1 params.endTime = task.lastTimestamp() + 1 params.tasks = task.descendants() @@ -272,247 +133,31 @@ func httpJsonTrace(w http.ResponseWriter, r *http.Request) { } } - c := viewerDataTraceConsumer(w, start, end) + c := traceviewer.ViewerDataTraceConsumer(w, start, end) if err := generateTrace(params, c); err != nil { log.Printf("failed to generate trace: %v", err) return } } -type Range struct { - Name string - Start int - End int - StartTime int64 - EndTime int64 -} - -func (r Range) URL() string { - return fmt.Sprintf("/trace?start=%d&end=%d", r.Start, r.End) -} - // splitTrace splits the trace into a number of ranges, // each resulting in approx 100MB of json output // (trace viewer can hardly handle more). -func splitTrace(res trace.ParseResult) []Range { +func splitTrace(res trace.ParseResult) []traceviewer.Range { params := &traceParams{ parsed: res, endTime: math.MaxInt64, } - s, c := splittingTraceConsumer(100 << 20) // 100M + s, c := traceviewer.SplittingTraceConsumer(100 << 20) // 100M if err := generateTrace(params, c); err != nil { dief("%v\n", err) } return s.Ranges } -type splitter struct { - Ranges []Range -} - -// walkStackFrames calls fn for id and all of its parent frames from allFrames. -func walkStackFrames(allFrames map[string]traceviewer.Frame, id int, fn func(id int)) { - for id != 0 { - f, ok := allFrames[strconv.Itoa(id)] - if !ok { - break - } - fn(id) - id = f.Parent - } -} - -func stackFrameEncodedSize(id uint, f traceviewer.Frame) int { - // We want to know the marginal size of traceviewer.Data.Frames for - // each event. Running full JSON encoding of the map for each event is - // far too slow. - // - // Since the format is fixed, we can easily compute the size without - // encoding. - // - // A single entry looks like one of the following: - // - // "1":{"name":"main.main:30"}, - // "10":{"name":"pkg.NewSession:173","parent":9}, - // - // The parent is omitted if 0. The trailing comma is omitted from the - // last entry, but we don't need that much precision. - const ( - baseSize = len(`"`) + len(`":{"name":"`) + len(`"},`) - - // Don't count the trailing quote on the name, as that is - // counted in baseSize. - parentBaseSize = len(`,"parent":`) - ) - - size := baseSize - - size += len(f.Name) - - // Bytes for id (always positive). - for id > 0 { - size += 1 - id /= 10 - } - - if f.Parent > 0 { - size += parentBaseSize - // Bytes for parent (always positive). - for f.Parent > 0 { - size += 1 - f.Parent /= 10 - } - } - - return size -} - -func splittingTraceConsumer(max int) (*splitter, traceConsumer) { - type eventSz struct { - Time float64 - Sz int - Frames []int - } - - var ( - // data.Frames contains only the frames for required events. - data = traceviewer.Data{Frames: make(map[string]traceviewer.Frame)} - - allFrames = make(map[string]traceviewer.Frame) - - sizes []eventSz - cw countingWriter - ) - - s := new(splitter) - - return s, traceConsumer{ - consumeTimeUnit: func(unit string) { - data.TimeUnit = unit - }, - consumeViewerEvent: func(v *traceviewer.Event, required bool) { - if required { - // Store required events inside data so flush - // can include them in the required part of the - // trace. - data.Events = append(data.Events, v) - walkStackFrames(allFrames, v.Stack, func(id int) { - s := strconv.Itoa(id) - data.Frames[s] = allFrames[s] - }) - walkStackFrames(allFrames, v.EndStack, func(id int) { - s := strconv.Itoa(id) - data.Frames[s] = allFrames[s] - }) - return - } - enc := json.NewEncoder(&cw) - enc.Encode(v) - size := eventSz{Time: v.Time, Sz: cw.size + 1} // +1 for ",". - // Add referenced stack frames. Their size is computed - // in flush, where we can dedup across events. - walkStackFrames(allFrames, v.Stack, func(id int) { - size.Frames = append(size.Frames, id) - }) - walkStackFrames(allFrames, v.EndStack, func(id int) { - size.Frames = append(size.Frames, id) // This may add duplicates. We'll dedup later. - }) - sizes = append(sizes, size) - cw.size = 0 - }, - consumeViewerFrame: func(k string, v traceviewer.Frame) { - allFrames[k] = v - }, - flush: func() { - // Calculate size of the mandatory part of the trace. - // This includes thread names and stack frames for - // required events. - cw.size = 0 - enc := json.NewEncoder(&cw) - enc.Encode(data) - requiredSize := cw.size - - // Then calculate size of each individual event and - // their stack frames, grouping them into ranges. We - // only include stack frames relevant to the events in - // the range to reduce overhead. - - var ( - start = 0 - - eventsSize = 0 - - frames = make(map[string]traceviewer.Frame) - framesSize = 0 - ) - for i, ev := range sizes { - eventsSize += ev.Sz - - // Add required stack frames. Note that they - // may already be in the map. - for _, id := range ev.Frames { - s := strconv.Itoa(id) - _, ok := frames[s] - if ok { - continue - } - f := allFrames[s] - frames[s] = f - framesSize += stackFrameEncodedSize(uint(id), f) - } - - total := requiredSize + framesSize + eventsSize - if total < max { - continue - } - - // Reached max size, commit this range and - // start a new range. - startTime := time.Duration(sizes[start].Time * 1000) - endTime := time.Duration(ev.Time * 1000) - ranges = append(ranges, Range{ - Name: fmt.Sprintf("%v-%v", startTime, endTime), - Start: start, - End: i + 1, - StartTime: int64(startTime), - EndTime: int64(endTime), - }) - start = i + 1 - frames = make(map[string]traceviewer.Frame) - framesSize = 0 - eventsSize = 0 - } - if len(ranges) <= 1 { - s.Ranges = nil - return - } - - if end := len(sizes) - 1; start < end { - ranges = append(ranges, Range{ - Name: fmt.Sprintf("%v-%v", time.Duration(sizes[start].Time*1000), time.Duration(sizes[end].Time*1000)), - Start: start, - End: end, - StartTime: int64(sizes[start].Time * 1000), - EndTime: int64(sizes[end].Time * 1000), - }) - } - s.Ranges = ranges - }, - } -} - -type countingWriter struct { - size int -} - -func (cw *countingWriter) Write(data []byte) (int, error) { - cw.size += len(data) - return len(data), nil -} - type traceParams struct { parsed trace.ParseResult - mode traceviewMode + mode traceviewer.Mode startTime int64 endTime int64 maing uint64 // for goroutine-oriented view, place this goroutine on the top row @@ -520,59 +165,18 @@ type traceParams struct { tasks []*taskDesc // Tasks to be displayed. tasks[0] is the top-most task } -type traceviewMode uint - -const ( - modeGoroutineOriented traceviewMode = 1 << iota - modeTaskOriented -) - type traceContext struct { *traceParams - consumer traceConsumer - frameTree frameNode - frameSeq int - arrowSeq uint64 - gcount uint64 - - heapStats, prevHeapStats heapStats - threadStats, prevThreadStats threadStats - gstates, prevGstates [gStateCount]int64 - + consumer traceviewer.TraceConsumer + emitter *traceviewer.Emitter + arrowSeq uint64 + gcount uint64 regionID int // last emitted region id. incremented in each emitRegion call. } -type heapStats struct { - heapAlloc uint64 - nextGC uint64 -} - -type threadStats struct { - insyscallRuntime int64 // system goroutine in syscall - insyscall int64 // user goroutine in syscall - prunning int64 // thread running P -} - -type frameNode struct { - id int - children map[uint64]frameNode -} - -type gState int - -const ( - gDead gState = iota - gRunnable - gRunning - gWaiting - gWaitingGC - - gStateCount -) - type gInfo struct { - state gState // current state - name string // name chosen for this goroutine at first EvGoStart + state traceviewer.GState // current state + name string // name chosen for this goroutine at first EvGoStart isSystemG bool start *trace.Event // most recent EvGoStart markAssist *trace.Event // if non-nil, the mark assist currently running. @@ -596,19 +200,6 @@ type SortIndexArg struct { Index int `json:"sort_index"` } -type traceConsumer struct { - consumeTimeUnit func(unit string) - consumeViewerEvent func(v *traceviewer.Event, required bool) - consumeViewerFrame func(key string, f traceviewer.Frame) - flush func() -} - -const ( - procsSection = 0 // where Goroutines or per-P timelines are presented. - statsSection = 1 // where counters are presented. - tasksSection = 2 // where Task hierarchy & timeline is presented. -) - // generateTrace generates json trace for trace-viewer: // https://github.com/google/trace-viewer // Trace format is described at: @@ -616,14 +207,23 @@ const ( // If mode==goroutineMode, generate trace for goroutine goid, otherwise whole trace. // startTime, endTime determine part of the trace that we are interested in. // gset restricts goroutines that are included in the resulting trace. -func generateTrace(params *traceParams, consumer traceConsumer) error { - defer consumer.flush() +func generateTrace(params *traceParams, consumer traceviewer.TraceConsumer) error { + emitter := traceviewer.NewEmitter( + consumer, + params.mode, + time.Duration(params.startTime), + time.Duration(params.endTime), + ) + if params.mode&traceviewer.ModeGoroutineOriented != 0 { + emitter.SetResourceType("G") + } else { + emitter.SetResourceType("PROCS") + } + defer emitter.Flush() - ctx := &traceContext{traceParams: params} - ctx.frameTree.children = make(map[uint64]frameNode) + ctx := &traceContext{traceParams: params, emitter: emitter} ctx.consumer = consumer - ctx.consumer.consumeTimeUnit("ns") maxProc := 0 ginfos := make(map[uint64]*gInfo) stacks := params.parsed.Stacks @@ -640,17 +240,17 @@ func generateTrace(params *traceParams, consumer traceConsumer) error { // Since we make many calls to setGState, we record a sticky // error in setGStateErr and check it after every event. var setGStateErr error - setGState := func(ev *trace.Event, g uint64, oldState, newState gState) { + setGState := func(ev *trace.Event, g uint64, oldState, newState traceviewer.GState) { info := getGInfo(g) - if oldState == gWaiting && info.state == gWaitingGC { - // For checking, gWaiting counts as any gWaiting*. + if oldState == traceviewer.GWaiting && info.state == traceviewer.GWaitingGC { + // For checking, traceviewer.GWaiting counts as any traceviewer.GWaiting*. oldState = info.state } if info.state != oldState && setGStateErr == nil { setGStateErr = fmt.Errorf("expected G %d to be in state %d, but got state %d", g, oldState, info.state) } - ctx.gstates[info.state]-- - ctx.gstates[newState]++ + + emitter.GoroutineTransition(time.Duration(ev.Ts), info.state, newState) info.state = newState } @@ -658,13 +258,13 @@ func generateTrace(params *traceParams, consumer traceConsumer) error { // Handle state transitions before we filter out events. switch ev.Type { case trace.EvGoStart, trace.EvGoStartLabel: - setGState(ev, ev.G, gRunnable, gRunning) + setGState(ev, ev.G, traceviewer.GRunnable, traceviewer.GRunning) info := getGInfo(ev.G) info.start = ev case trace.EvProcStart: - ctx.threadStats.prunning++ + emitter.IncThreadStateCount(time.Duration(ev.Ts), traceviewer.ThreadStateRunning, 1) case trace.EvProcStop: - ctx.threadStats.prunning-- + emitter.IncThreadStateCount(time.Duration(ev.Ts), traceviewer.ThreadStateRunning, -1) case trace.EvGoCreate: newG := ev.Args[0] info := getGInfo(newG) @@ -682,58 +282,59 @@ func generateTrace(params *traceParams, consumer traceConsumer) error { info.isSystemG = trace.IsSystemGoroutine(fname) ctx.gcount++ - setGState(ev, newG, gDead, gRunnable) + setGState(ev, newG, traceviewer.GDead, traceviewer.GRunnable) case trace.EvGoEnd: ctx.gcount-- - setGState(ev, ev.G, gRunning, gDead) + setGState(ev, ev.G, traceviewer.GRunning, traceviewer.GDead) case trace.EvGoUnblock: - setGState(ev, ev.Args[0], gWaiting, gRunnable) + setGState(ev, ev.Args[0], traceviewer.GWaiting, traceviewer.GRunnable) case trace.EvGoSysExit: - setGState(ev, ev.G, gWaiting, gRunnable) + setGState(ev, ev.G, traceviewer.GWaiting, traceviewer.GRunnable) if getGInfo(ev.G).isSystemG { - ctx.threadStats.insyscallRuntime-- + emitter.IncThreadStateCount(time.Duration(ev.Ts), traceviewer.ThreadStateInSyscallRuntime, -1) } else { - ctx.threadStats.insyscall-- + emitter.IncThreadStateCount(time.Duration(ev.Ts), traceviewer.ThreadStateInSyscall, -1) } case trace.EvGoSysBlock: - setGState(ev, ev.G, gRunning, gWaiting) + setGState(ev, ev.G, traceviewer.GRunning, traceviewer.GWaiting) if getGInfo(ev.G).isSystemG { - ctx.threadStats.insyscallRuntime++ + emitter.IncThreadStateCount(time.Duration(ev.Ts), traceviewer.ThreadStateInSyscallRuntime, 1) } else { - ctx.threadStats.insyscall++ + emitter.IncThreadStateCount(time.Duration(ev.Ts), traceviewer.ThreadStateInSyscall, 1) } case trace.EvGoSched, trace.EvGoPreempt: - setGState(ev, ev.G, gRunning, gRunnable) + setGState(ev, ev.G, traceviewer.GRunning, traceviewer.GRunnable) case trace.EvGoStop, trace.EvGoSleep, trace.EvGoBlock, trace.EvGoBlockSend, trace.EvGoBlockRecv, trace.EvGoBlockSelect, trace.EvGoBlockSync, trace.EvGoBlockCond, trace.EvGoBlockNet: - setGState(ev, ev.G, gRunning, gWaiting) + setGState(ev, ev.G, traceviewer.GRunning, traceviewer.GWaiting) case trace.EvGoBlockGC: - setGState(ev, ev.G, gRunning, gWaitingGC) + setGState(ev, ev.G, traceviewer.GRunning, traceviewer.GWaitingGC) case trace.EvGCMarkAssistStart: getGInfo(ev.G).markAssist = ev case trace.EvGCMarkAssistDone: getGInfo(ev.G).markAssist = nil case trace.EvGoWaiting: - setGState(ev, ev.G, gRunnable, gWaiting) + setGState(ev, ev.G, traceviewer.GRunnable, traceviewer.GWaiting) case trace.EvGoInSyscall: // Cancel out the effect of EvGoCreate at the beginning. - setGState(ev, ev.G, gRunnable, gWaiting) + setGState(ev, ev.G, traceviewer.GRunnable, traceviewer.GWaiting) if getGInfo(ev.G).isSystemG { - ctx.threadStats.insyscallRuntime++ + emitter.IncThreadStateCount(time.Duration(ev.Ts), traceviewer.ThreadStateInSyscallRuntime, 1) } else { - ctx.threadStats.insyscall++ + emitter.IncThreadStateCount(time.Duration(ev.Ts), traceviewer.ThreadStateInSyscall, 1) } case trace.EvHeapAlloc: - ctx.heapStats.heapAlloc = ev.Args[0] + emitter.HeapAlloc(time.Duration(ev.Ts), ev.Args[0]) case trace.EvHeapGoal: - ctx.heapStats.nextGC = ev.Args[0] + emitter.HeapGoal(time.Duration(ev.Ts), ev.Args[0]) } if setGStateErr != nil { return setGStateErr } - if ctx.gstates[gRunnable] < 0 || ctx.gstates[gRunning] < 0 || ctx.threadStats.insyscall < 0 || ctx.threadStats.insyscallRuntime < 0 { - return fmt.Errorf("invalid state after processing %v: runnable=%d running=%d insyscall=%d insyscallRuntime=%d", ev, ctx.gstates[gRunnable], ctx.gstates[gRunning], ctx.threadStats.insyscall, ctx.threadStats.insyscallRuntime) + + if err := emitter.Err(); err != nil { + return fmt.Errorf("invalid state after processing %v: %s", ev, err) } // Ignore events that are from uninteresting goroutines @@ -752,12 +353,12 @@ func generateTrace(params *traceParams, consumer traceConsumer) error { // Emit trace objects. switch ev.Type { case trace.EvProcStart: - if ctx.mode&modeGoroutineOriented != 0 { + if ctx.mode&traceviewer.ModeGoroutineOriented != 0 { continue } ctx.emitInstant(ev, "proc start", "") case trace.EvProcStop: - if ctx.mode&modeGoroutineOriented != 0 { + if ctx.mode&traceviewer.ModeGoroutineOriented != 0 { continue } ctx.emitInstant(ev, "proc stop", "") @@ -765,7 +366,7 @@ func generateTrace(params *traceParams, consumer traceConsumer) error { ctx.emitSlice(ev, "GC") case trace.EvGCDone: case trace.EvSTWStart: - if ctx.mode&modeGoroutineOriented != 0 { + if ctx.mode&traceviewer.ModeGoroutineOriented != 0 { continue } ctx.emitSlice(ev, fmt.Sprintf("STW (%s)", ev.SArgs[0])) @@ -832,46 +433,10 @@ func generateTrace(params *traceParams, consumer traceConsumer) error { ctx.emitInstant(ev, "CPU profile sample", "") } } - // Emit any counter updates. - ctx.emitThreadCounters(ev) - ctx.emitHeapCounters(ev) - ctx.emitGoroutineCounters(ev) - } - - ctx.emitSectionFooter(statsSection, "STATS", 0) - - if ctx.mode&modeTaskOriented != 0 { - ctx.emitSectionFooter(tasksSection, "TASKS", 1) - } - - if ctx.mode&modeGoroutineOriented != 0 { - ctx.emitSectionFooter(procsSection, "G", 2) - } else { - ctx.emitSectionFooter(procsSection, "PROCS", 2) - } - - ctx.emitFooter(&traceviewer.Event{Name: "thread_name", Phase: "M", PID: procsSection, TID: trace.GCP, Arg: &NameArg{"GC"}}) - ctx.emitFooter(&traceviewer.Event{Name: "thread_sort_index", Phase: "M", PID: procsSection, TID: trace.GCP, Arg: &SortIndexArg{-6}}) - - ctx.emitFooter(&traceviewer.Event{Name: "thread_name", Phase: "M", PID: procsSection, TID: trace.NetpollP, Arg: &NameArg{"Network"}}) - ctx.emitFooter(&traceviewer.Event{Name: "thread_sort_index", Phase: "M", PID: procsSection, TID: trace.NetpollP, Arg: &SortIndexArg{-5}}) - - ctx.emitFooter(&traceviewer.Event{Name: "thread_name", Phase: "M", PID: procsSection, TID: trace.TimerP, Arg: &NameArg{"Timers"}}) - ctx.emitFooter(&traceviewer.Event{Name: "thread_sort_index", Phase: "M", PID: procsSection, TID: trace.TimerP, Arg: &SortIndexArg{-4}}) - - ctx.emitFooter(&traceviewer.Event{Name: "thread_name", Phase: "M", PID: procsSection, TID: trace.SyscallP, Arg: &NameArg{"Syscalls"}}) - ctx.emitFooter(&traceviewer.Event{Name: "thread_sort_index", Phase: "M", PID: procsSection, TID: trace.SyscallP, Arg: &SortIndexArg{-3}}) - - // Display rows for Ps if we are in the default trace view mode (not goroutine-oriented presentation) - if ctx.mode&modeGoroutineOriented == 0 { - for i := 0; i <= maxProc; i++ { - ctx.emitFooter(&traceviewer.Event{Name: "thread_name", Phase: "M", PID: procsSection, TID: uint64(i), Arg: &NameArg{fmt.Sprintf("Proc %v", i)}}) - ctx.emitFooter(&traceviewer.Event{Name: "thread_sort_index", Phase: "M", PID: procsSection, TID: uint64(i), Arg: &SortIndexArg{i}}) - } } // Display task and its regions if we are in task-oriented presentation mode. - if ctx.mode&modeTaskOriented != 0 { + if ctx.mode&traceviewer.ModeTaskOriented != 0 { // sort tasks based on the task start time. sortedTask := make([]*taskDesc, len(ctx.tasks)) copy(sortedTask, ctx.tasks) @@ -888,7 +453,7 @@ func generateTrace(params *traceParams, consumer traceConsumer) error { // If we are in goroutine-oriented mode, we draw regions. // TODO(hyangah): add this for task/P-oriented mode (i.e., focustask view) too. - if ctx.mode&modeGoroutineOriented != 0 { + if ctx.mode&traceviewer.ModeGoroutineOriented != 0 { for _, s := range task.regions { ctx.emitRegion(s) } @@ -897,34 +462,34 @@ func generateTrace(params *traceParams, consumer traceConsumer) error { } // Display goroutine rows if we are either in goroutine-oriented mode. - if ctx.mode&modeGoroutineOriented != 0 { + if ctx.mode&traceviewer.ModeGoroutineOriented != 0 { for k, v := range ginfos { if !ctx.gs[k] { continue } - ctx.emitFooter(&traceviewer.Event{Name: "thread_name", Phase: "M", PID: procsSection, TID: k, Arg: &NameArg{v.name}}) + emitter.Resource(k, v.name) } - // Row for the main goroutine (maing) - ctx.emitFooter(&traceviewer.Event{Name: "thread_sort_index", Phase: "M", PID: procsSection, TID: ctx.maing, Arg: &SortIndexArg{-2}}) + emitter.Focus(ctx.maing) + // Row for GC or global state (specified with G=0) - ctx.emitFooter(&traceviewer.Event{Name: "thread_sort_index", Phase: "M", PID: procsSection, TID: 0, Arg: &SortIndexArg{-1}}) + ctx.emitFooter(&format.Event{Name: "thread_sort_index", Phase: "M", PID: format.ProcsSection, TID: 0, Arg: &SortIndexArg{-1}}) + } else { + // Display rows for Ps if we are in the default trace view mode. + for i := 0; i <= maxProc; i++ { + emitter.Resource(uint64(i), fmt.Sprintf("Proc %v", i)) + } } return nil } -func (ctx *traceContext) emit(e *traceviewer.Event) { - ctx.consumer.consumeViewerEvent(e, false) +func (ctx *traceContext) emit(e *format.Event) { + ctx.consumer.ConsumeViewerEvent(e, false) } -func (ctx *traceContext) emitFooter(e *traceviewer.Event) { - ctx.consumer.consumeViewerEvent(e, true) +func (ctx *traceContext) emitFooter(e *format.Event) { + ctx.consumer.ConsumeViewerEvent(e, true) } -func (ctx *traceContext) emitSectionFooter(sectionID uint64, name string, priority int) { - ctx.emitFooter(&traceviewer.Event{Name: "process_name", Phase: "M", PID: sectionID, Arg: &NameArg{name}}) - ctx.emitFooter(&traceviewer.Event{Name: "process_sort_index", Phase: "M", PID: sectionID, Arg: &SortIndexArg{priority}}) -} - func (ctx *traceContext) time(ev *trace.Event) float64 { // Trace viewer wants timestamps in microseconds. return float64(ev.Ts) / 1000 @@ -942,7 +507,7 @@ func tsWithinRange(ts, s, e int64) bool { } func (ctx *traceContext) proc(ev *trace.Event) uint64 { - if ctx.mode&modeGoroutineOriented != 0 && ev.P < trace.FakeP { + if ctx.mode&traceviewer.ModeGoroutineOriented != 0 && ev.P < trace.FakeP { return ev.G } else { return uint64(ev.P) @@ -953,7 +518,7 @@ func (ctx *traceContext) emitSlice(ev *trace.Event, name string) { ctx.emit(ctx.makeSlice(ev, name)) } -func (ctx *traceContext) makeSlice(ev *trace.Event, name string) *traceviewer.Event { +func (ctx *traceContext) makeSlice(ev *trace.Event, name string) *format.Event { // If ViewerEvent.Dur is not a positive value, // trace viewer handles it as a non-terminating time interval. // Avoid it by setting the field with a small value. @@ -961,18 +526,18 @@ func (ctx *traceContext) makeSlice(ev *trace.Event, name string) *traceviewer.Ev if ev.Link.Ts-ev.Ts <= 0 { durationUsec = 0.0001 // 0.1 nanoseconds } - sl := &traceviewer.Event{ + sl := &format.Event{ Name: name, Phase: "X", Time: ctx.time(ev), Dur: durationUsec, TID: ctx.proc(ev), - Stack: ctx.stack(ev.Stk), - EndStack: ctx.stack(ev.Link.Stk), + Stack: ctx.emitter.Stack(ev.Stk), + EndStack: ctx.emitter.Stack(ev.Link.Stk), } // grey out non-overlapping events if the event is not a global event (ev.G == 0) - if ctx.mode&modeTaskOriented != 0 && ev.G != 0 { + if ctx.mode&traceviewer.ModeTaskOriented != 0 && ev.G != 0 { // include P information. if t := ev.Type; t == trace.EvGoStart || t == trace.EvGoStartLabel { type Arg struct { @@ -1000,25 +565,25 @@ func (ctx *traceContext) emitTask(task *taskDesc, sortIndex int) { taskName := task.name durationUsec := float64(task.lastTimestamp()-task.firstTimestamp()) / 1e3 - ctx.emitFooter(&traceviewer.Event{Name: "thread_name", Phase: "M", PID: tasksSection, TID: taskRow, Arg: &NameArg{fmt.Sprintf("T%d %s", task.id, taskName)}}) - ctx.emit(&traceviewer.Event{Name: "thread_sort_index", Phase: "M", PID: tasksSection, TID: taskRow, Arg: &SortIndexArg{sortIndex}}) + ctx.emitFooter(&format.Event{Name: "thread_name", Phase: "M", PID: format.TasksSection, TID: taskRow, Arg: &NameArg{fmt.Sprintf("T%d %s", task.id, taskName)}}) + ctx.emit(&format.Event{Name: "thread_sort_index", Phase: "M", PID: format.TasksSection, TID: taskRow, Arg: &SortIndexArg{sortIndex}}) ts := float64(task.firstTimestamp()) / 1e3 - sl := &traceviewer.Event{ + sl := &format.Event{ Name: taskName, Phase: "X", Time: ts, Dur: durationUsec, - PID: tasksSection, + PID: format.TasksSection, TID: taskRow, Cname: pickTaskColor(task.id), } targ := TaskArg{ID: task.id} if task.create != nil { - sl.Stack = ctx.stack(task.create.Stk) + sl.Stack = ctx.emitter.Stack(task.create.Stk) targ.StartG = task.create.G } if task.end != nil { - sl.EndStack = ctx.stack(task.end.Stk) + sl.EndStack = ctx.emitter.Stack(task.end.Stk) targ.EndG = task.end.G } sl.Arg = targ @@ -1026,8 +591,8 @@ func (ctx *traceContext) emitTask(task *taskDesc, sortIndex int) { if task.create != nil && task.create.Type == trace.EvUserTaskCreate && task.create.Args[1] != 0 { ctx.arrowSeq++ - ctx.emit(&traceviewer.Event{Name: "newTask", Phase: "s", TID: task.create.Args[1], ID: ctx.arrowSeq, Time: ts, PID: tasksSection}) - ctx.emit(&traceviewer.Event{Name: "newTask", Phase: "t", TID: taskRow, ID: ctx.arrowSeq, Time: ts, PID: tasksSection}) + ctx.emit(&format.Event{Name: "newTask", Phase: "s", TID: task.create.Args[1], ID: ctx.arrowSeq, Time: ts, PID: format.TasksSection}) + ctx.emit(&format.Event{Name: "newTask", Phase: "t", TID: taskRow, ID: ctx.arrowSeq, Time: ts, PID: format.TasksSection}) } } @@ -1048,7 +613,7 @@ func (ctx *traceContext) emitRegion(s regionDesc) { scopeID := fmt.Sprintf("%x", id) name := s.Name - sl0 := &traceviewer.Event{ + sl0 := &format.Event{ Category: "Region", Name: name, Phase: "b", @@ -1059,11 +624,11 @@ func (ctx *traceContext) emitRegion(s regionDesc) { Cname: pickTaskColor(s.TaskID), } if s.Start != nil { - sl0.Stack = ctx.stack(s.Start.Stk) + sl0.Stack = ctx.emitter.Stack(s.Start.Stk) } ctx.emit(sl0) - sl1 := &traceviewer.Event{ + sl1 := &format.Event{ Category: "Region", Name: name, Phase: "e", @@ -1075,70 +640,18 @@ func (ctx *traceContext) emitRegion(s regionDesc) { Arg: RegionArg{TaskID: s.TaskID}, } if s.End != nil { - sl1.Stack = ctx.stack(s.End.Stk) + sl1.Stack = ctx.emitter.Stack(s.End.Stk) } ctx.emit(sl1) } -type heapCountersArg struct { - Allocated uint64 - NextGC uint64 -} - -func (ctx *traceContext) emitHeapCounters(ev *trace.Event) { - if ctx.prevHeapStats == ctx.heapStats { - return - } - diff := uint64(0) - if ctx.heapStats.nextGC > ctx.heapStats.heapAlloc { - diff = ctx.heapStats.nextGC - ctx.heapStats.heapAlloc - } - if tsWithinRange(ev.Ts, ctx.startTime, ctx.endTime) { - ctx.emit(&traceviewer.Event{Name: "Heap", Phase: "C", Time: ctx.time(ev), PID: 1, Arg: &heapCountersArg{ctx.heapStats.heapAlloc, diff}}) - } - ctx.prevHeapStats = ctx.heapStats -} - -type goroutineCountersArg struct { - Running uint64 - Runnable uint64 - GCWaiting uint64 -} - -func (ctx *traceContext) emitGoroutineCounters(ev *trace.Event) { - if ctx.prevGstates == ctx.gstates { - return - } - if tsWithinRange(ev.Ts, ctx.startTime, ctx.endTime) { - ctx.emit(&traceviewer.Event{Name: "Goroutines", Phase: "C", Time: ctx.time(ev), PID: 1, Arg: &goroutineCountersArg{uint64(ctx.gstates[gRunning]), uint64(ctx.gstates[gRunnable]), uint64(ctx.gstates[gWaitingGC])}}) - } - ctx.prevGstates = ctx.gstates -} - -type threadCountersArg struct { - Running int64 - InSyscall int64 -} - -func (ctx *traceContext) emitThreadCounters(ev *trace.Event) { - if ctx.prevThreadStats == ctx.threadStats { - return - } - if tsWithinRange(ev.Ts, ctx.startTime, ctx.endTime) { - ctx.emit(&traceviewer.Event{Name: "Threads", Phase: "C", Time: ctx.time(ev), PID: 1, Arg: &threadCountersArg{ - Running: ctx.threadStats.prunning, - InSyscall: ctx.threadStats.insyscall}}) - } - ctx.prevThreadStats = ctx.threadStats -} - func (ctx *traceContext) emitInstant(ev *trace.Event, name, category string) { if !tsWithinRange(ev.Ts, ctx.startTime, ctx.endTime) { return } cname := "" - if ctx.mode&modeTaskOriented != 0 { + if ctx.mode&traceviewer.ModeTaskOriented != 0 { taskID, isUserAnnotation := isUserAnnotationEvent(ev) show := false @@ -1163,14 +676,14 @@ func (ctx *traceContext) emitInstant(ev *trace.Event, name, category string) { } arg = &Arg{ev.Args[0]} } - ctx.emit(&traceviewer.Event{ + ctx.emit(&format.Event{ Name: name, Category: category, Phase: "I", Scope: "t", Time: ctx.time(ev), TID: ctx.proc(ev), - Stack: ctx.stack(ev.Stk), + Stack: ctx.emitter.Stack(ev.Stk), Cname: cname, Arg: arg}) } @@ -1181,7 +694,7 @@ func (ctx *traceContext) emitArrow(ev *trace.Event, name string) { // For example, a goroutine was unblocked but was not scheduled before trace stop. return } - if ctx.mode&modeGoroutineOriented != 0 && (!ctx.gs[ev.Link.G] || ev.Link.Ts < ctx.startTime || ev.Link.Ts > ctx.endTime) { + if ctx.mode&traceviewer.ModeGoroutineOriented != 0 && (!ctx.gs[ev.Link.G] || ev.Link.Ts < ctx.startTime || ev.Link.Ts > ctx.endTime) { return } @@ -1192,7 +705,7 @@ func (ctx *traceContext) emitArrow(ev *trace.Event, name string) { } color := "" - if ctx.mode&modeTaskOriented != 0 { + if ctx.mode&traceviewer.ModeTaskOriented != 0 { overlapping := false // skip non-overlapping arrows. for _, task := range ctx.tasks { @@ -1207,32 +720,8 @@ func (ctx *traceContext) emitArrow(ev *trace.Event, name string) { } ctx.arrowSeq++ - ctx.emit(&traceviewer.Event{Name: name, Phase: "s", TID: ctx.proc(ev), ID: ctx.arrowSeq, Time: ctx.time(ev), Stack: ctx.stack(ev.Stk), Cname: color}) - ctx.emit(&traceviewer.Event{Name: name, Phase: "t", TID: ctx.proc(ev.Link), ID: ctx.arrowSeq, Time: ctx.time(ev.Link), Cname: color}) -} - -func (ctx *traceContext) stack(stk []*trace.Frame) int { - return ctx.buildBranch(ctx.frameTree, stk) -} - -// buildBranch builds one branch in the prefix tree rooted at ctx.frameTree. -func (ctx *traceContext) buildBranch(parent frameNode, stk []*trace.Frame) int { - if len(stk) == 0 { - return parent.id - } - last := len(stk) - 1 - frame := stk[last] - stk = stk[:last] - - node, ok := parent.children[frame.PC] - if !ok { - ctx.frameSeq++ - node.id = ctx.frameSeq - node.children = make(map[uint64]frameNode) - parent.children[frame.PC] = node - ctx.consumer.consumeViewerFrame(strconv.Itoa(node.id), traceviewer.Frame{Name: fmt.Sprintf("%v:%v", frame.Fn, frame.Line), Parent: parent.id}) - } - return ctx.buildBranch(node, stk) + ctx.emit(&format.Event{Name: name, Phase: "s", TID: ctx.proc(ev), ID: ctx.arrowSeq, Time: ctx.time(ev), Stack: ctx.emitter.Stack(ev.Stk), Cname: color}) + ctx.emit(&format.Event{Name: name, Phase: "t", TID: ctx.proc(ev.Link), ID: ctx.arrowSeq, Time: ctx.time(ev.Link), Cname: color}) } // firstTimestamp returns the timestamp of the first event record. @@ -1253,61 +742,6 @@ func lastTimestamp() int64 { return 0 } -type jsonWriter struct { - w io.Writer - enc *json.Encoder -} - -func viewerDataTraceConsumer(w io.Writer, start, end int64) traceConsumer { - allFrames := make(map[string]traceviewer.Frame) - requiredFrames := make(map[string]traceviewer.Frame) - enc := json.NewEncoder(w) - written := 0 - index := int64(-1) - - io.WriteString(w, "{") - return traceConsumer{ - consumeTimeUnit: func(unit string) { - io.WriteString(w, `"displayTimeUnit":`) - enc.Encode(unit) - io.WriteString(w, ",") - }, - consumeViewerEvent: func(v *traceviewer.Event, required bool) { - index++ - if !required && (index < start || index > end) { - // not in the range. Skip! - return - } - walkStackFrames(allFrames, v.Stack, func(id int) { - s := strconv.Itoa(id) - requiredFrames[s] = allFrames[s] - }) - walkStackFrames(allFrames, v.EndStack, func(id int) { - s := strconv.Itoa(id) - requiredFrames[s] = allFrames[s] - }) - if written == 0 { - io.WriteString(w, `"traceEvents": [`) - } - if written > 0 { - io.WriteString(w, ",") - } - enc.Encode(v) - // TODO: get rid of the extra \n inserted by enc.Encode. - // Same should be applied to splittingTraceConsumer. - written++ - }, - consumeViewerFrame: func(k string, v traceviewer.Frame) { - allFrames[k] = v - }, - flush: func() { - io.WriteString(w, `], "stackFrames":`) - enc.Encode(requiredFrames) - io.WriteString(w, `}`) - }, - } -} - // Mapping from more reasonable color names to the reserved color names in // https://github.com/catapult-project/catapult/blob/master/tracing/tracing/base/color_scheme.html#L50 // The chrome trace viewer allows only those as cname values. diff --git a/src/cmd/trace/trace_test.go b/src/cmd/trace/trace_test.go index 87fd3a3515..d315fad471 100644 --- a/src/cmd/trace/trace_test.go +++ b/src/cmd/trace/trace_test.go @@ -7,9 +7,10 @@ package main import ( - "cmd/internal/traceviewer" "context" "internal/trace" + "internal/trace/traceviewer" + "internal/trace/traceviewer/format" "io" rtrace "runtime/trace" "strings" @@ -78,10 +79,10 @@ func TestGoroutineCount(t *testing.T) { // Use the default viewerDataTraceConsumer but replace // consumeViewerEvent to intercept the ViewerEvents for testing. - c := viewerDataTraceConsumer(io.Discard, 0, 1<<63-1) - c.consumeViewerEvent = func(ev *traceviewer.Event, _ bool) { + c := traceviewer.ViewerDataTraceConsumer(io.Discard, 0, 1<<63-1) + c.ConsumeViewerEvent = func(ev *format.Event, _ bool) { if ev.Name == "Goroutines" { - cnt := ev.Arg.(*goroutineCountersArg) + cnt := ev.Arg.(*format.GoroutineCountersArg) if cnt.Runnable+cnt.Running > 2 { t.Errorf("goroutine count=%+v; want no more than 2 goroutines in runnable/running state", cnt) } @@ -131,7 +132,7 @@ func TestGoroutineFilter(t *testing.T) { gs: map[uint64]bool{10: true}, } - c := viewerDataTraceConsumer(io.Discard, 0, 1<<63-1) + c := traceviewer.ViewerDataTraceConsumer(io.Discard, 0, 1<<63-1) if err := generateTrace(params, c); err != nil { t.Fatalf("generateTrace failed: %v", err) } @@ -163,10 +164,10 @@ func TestPreemptedMarkAssist(t *testing.T) { endTime: int64(1<<63 - 1), } - c := viewerDataTraceConsumer(io.Discard, 0, 1<<63-1) + c := traceviewer.ViewerDataTraceConsumer(io.Discard, 0, 1<<63-1) marks := 0 - c.consumeViewerEvent = func(ev *traceviewer.Event, _ bool) { + c.ConsumeViewerEvent = func(ev *format.Event, _ bool) { if strings.Contains(ev.Name, "MARK ASSIST") { marks++ } @@ -208,16 +209,16 @@ func TestFoo(t *testing.T) { params := &traceParams{ parsed: res, - mode: modeTaskOriented, + mode: traceviewer.ModeTaskOriented, startTime: task.firstTimestamp() - 1, endTime: task.lastTimestamp() + 1, tasks: []*taskDesc{task}, } - c := viewerDataTraceConsumer(io.Discard, 0, 1<<63-1) + c := traceviewer.ViewerDataTraceConsumer(io.Discard, 0, 1<<63-1) var logBeforeTaskEnd, logAfterTaskEnd bool - c.consumeViewerEvent = func(ev *traceviewer.Event, _ bool) { + c.ConsumeViewerEvent = func(ev *format.Event, _ bool) { if ev.Name == "log before task ends" { logBeforeTaskEnd = true } diff --git a/src/cmd/trace/trace_unix_test.go b/src/cmd/trace/trace_unix_test.go index 87ad86fce8..e634635427 100644 --- a/src/cmd/trace/trace_unix_test.go +++ b/src/cmd/trace/trace_unix_test.go @@ -8,9 +8,10 @@ package main import ( "bytes" - "cmd/internal/traceviewer" "internal/goexperiment" traceparser "internal/trace" + "internal/trace/traceviewer" + "internal/trace/traceviewer/format" "io" "runtime" "runtime/trace" @@ -87,10 +88,10 @@ func TestGoroutineInSyscall(t *testing.T) { // Check only one thread for the pipe read goroutine is // considered in-syscall. - c := viewerDataTraceConsumer(io.Discard, 0, 1<<63-1) - c.consumeViewerEvent = func(ev *traceviewer.Event, _ bool) { + c := traceviewer.ViewerDataTraceConsumer(io.Discard, 0, 1<<63-1) + c.ConsumeViewerEvent = func(ev *format.Event, _ bool) { if ev.Name == "Threads" { - arg := ev.Arg.(*threadCountersArg) + arg := ev.Arg.(*format.ThreadCountersArg) if arg.InSyscall > 1 { t.Errorf("%d threads in syscall at time %v; want less than 1 thread in syscall", arg.InSyscall, ev.Time) } diff --git a/src/cmd/trace/v2/gen.go b/src/cmd/trace/v2/gen.go new file mode 100644 index 0000000000..cf8960390c --- /dev/null +++ b/src/cmd/trace/v2/gen.go @@ -0,0 +1,249 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package trace + +import ( + "internal/trace" + "internal/trace/traceviewer" + tracev2 "internal/trace/v2" + "strings" +) + +// generator is an interface for generating a JSON trace for the trace viewer +// from a trace. Each method in this interface is a handler for a kind of event +// that is interesting to render in the UI via the JSON trace. +type generator interface { + // Global parts. + Sync() // Notifies the generator of an EventSync event. + StackSample(ctx *traceContext, ev *tracev2.Event) + GlobalRange(ctx *traceContext, ev *tracev2.Event) + GlobalMetric(ctx *traceContext, ev *tracev2.Event) + + // Goroutine parts. + GoroutineLabel(ctx *traceContext, ev *tracev2.Event) + GoroutineRange(ctx *traceContext, ev *tracev2.Event) + GoroutineTransition(ctx *traceContext, ev *tracev2.Event) + + // Proc parts. + ProcRange(ctx *traceContext, ev *tracev2.Event) + ProcTransition(ctx *traceContext, ev *tracev2.Event) + + // Finish indicates the end of the trace and finalizes generation. + Finish(ctx *traceContext, endTime tracev2.Time) +} + +// runGenerator produces a trace into ctx by running the generator over the parsed trace. +func runGenerator(ctx *traceContext, g generator, parsed *parsedTrace) { + for i := range parsed.events { + ev := &parsed.events[i] + + switch ev.Kind() { + case tracev2.EventSync: + g.Sync() + case tracev2.EventStackSample: + g.StackSample(ctx, ev) + case tracev2.EventRangeBegin, tracev2.EventRangeActive, tracev2.EventRangeEnd: + r := ev.Range() + switch r.Scope.Kind { + case tracev2.ResourceGoroutine: + g.GoroutineRange(ctx, ev) + case tracev2.ResourceProc: + g.ProcRange(ctx, ev) + case tracev2.ResourceNone: + g.GlobalRange(ctx, ev) + } + case tracev2.EventMetric: + g.GlobalMetric(ctx, ev) + case tracev2.EventLabel: + l := ev.Label() + if l.Resource.Kind == tracev2.ResourceGoroutine { + g.GoroutineLabel(ctx, ev) + } + case tracev2.EventStateTransition: + switch ev.StateTransition().Resource.Kind { + case tracev2.ResourceProc: + g.ProcTransition(ctx, ev) + case tracev2.ResourceGoroutine: + g.GoroutineTransition(ctx, ev) + } + } + } + g.Finish(ctx, parsed.events[len(parsed.events)-1].Time()) +} + +// Building blocks for generators. + +// stackSampleGenerator implements a generic handler for stack sample events. +// The provided resource is the resource the stack sample should count against. +type stackSampleGenerator[R resource] struct { + // getResource is a function to extract a resource ID from a stack sample event. + getResource func(*tracev2.Event) R +} + +// StackSample implements a stack sample event handler. It expects ev to be one such event. +func (g *stackSampleGenerator[R]) StackSample(ctx *traceContext, ev *tracev2.Event) { + id := g.getResource(ev) + if id == R(noResource) { + // We have nowhere to put this in the UI. + return + } + ctx.Instant(traceviewer.InstantEvent{ + Name: "CPU profile sample", + Ts: ctx.elapsed(ev.Time()), + Resource: uint64(id), + Stack: ctx.Stack(viewerFrames(ev.Stack())), + }) +} + +// globalRangeGenerator implements a generic handler for EventRange* events that pertain +// to tracev2.ResourceNone (the global scope). +type globalRangeGenerator struct { + ranges map[string]activeRange + seenSync bool +} + +// Sync notifies the generator of an EventSync event. +func (g *globalRangeGenerator) Sync() { + g.seenSync = true +} + +// GlobalRange implements a handler for EventRange* events whose Scope.Kind is ResourceNone. +// It expects ev to be one such event. +func (g *globalRangeGenerator) GlobalRange(ctx *traceContext, ev *tracev2.Event) { + if g.ranges == nil { + g.ranges = make(map[string]activeRange) + } + r := ev.Range() + switch ev.Kind() { + case tracev2.EventRangeBegin: + g.ranges[r.Name] = activeRange{ev.Time(), ev.Stack()} + case tracev2.EventRangeActive: + // If we've seen a Sync event, then Active events are always redundant. + if !g.seenSync { + // Otherwise, they extend back to the start of the trace. + g.ranges[r.Name] = activeRange{ctx.startTime, ev.Stack()} + } + case tracev2.EventRangeEnd: + // Only emit GC events, because we have nowhere to + // put other events. + ar := g.ranges[r.Name] + if strings.Contains(r.Name, "GC") { + ctx.Slice(traceviewer.SliceEvent{ + Name: r.Name, + Ts: ctx.elapsed(ar.time), + Dur: ev.Time().Sub(ar.time), + Resource: trace.GCP, + Stack: ctx.Stack(viewerFrames(ar.stack)), + EndStack: ctx.Stack(viewerFrames(ev.Stack())), + }) + } + delete(g.ranges, r.Name) + } +} + +// Finish flushes any outstanding ranges at the end of the trace. +func (g *globalRangeGenerator) Finish(ctx *traceContext, endTime tracev2.Time) { + for name, ar := range g.ranges { + if !strings.Contains(name, "GC") { + continue + } + ctx.Slice(traceviewer.SliceEvent{ + Name: name, + Ts: ctx.elapsed(ar.time), + Dur: endTime.Sub(ar.time), + Resource: trace.GCP, + Stack: ctx.Stack(viewerFrames(ar.stack)), + }) + } +} + +// globalMetricGenerator implements a generic handler for Metric events. +type globalMetricGenerator struct { +} + +// GlobalMetric implements an event handler for EventMetric events. ev must be one such event. +func (g *globalMetricGenerator) GlobalMetric(ctx *traceContext, ev *tracev2.Event) { + m := ev.Metric() + switch m.Name { + case "/memory/classes/heap/objects:bytes": + ctx.HeapAlloc(ctx.elapsed(ev.Time()), m.Value.Uint64()) + case "/gc/heap/goal:bytes": + ctx.HeapGoal(ctx.elapsed(ev.Time()), m.Value.Uint64()) + case "/sched/gomaxprocs:threads": + ctx.Gomaxprocs(m.Value.Uint64()) + } +} + +// procRangeGenerator implements a generic handler for EventRange* events whose Scope.Kind is +// ResourceProc. +type procRangeGenerator struct { + ranges map[tracev2.Range]activeRange + seenSync bool +} + +// Sync notifies the generator of an EventSync event. +func (g *procRangeGenerator) Sync() { + g.seenSync = true +} + +// ProcRange implements a handler for EventRange* events whose Scope.Kind is ResourceProc. +// It expects ev to be one such event. +func (g *procRangeGenerator) ProcRange(ctx *traceContext, ev *tracev2.Event) { + if g.ranges == nil { + g.ranges = make(map[tracev2.Range]activeRange) + } + r := ev.Range() + switch ev.Kind() { + case tracev2.EventRangeBegin: + g.ranges[r] = activeRange{ev.Time(), ev.Stack()} + case tracev2.EventRangeActive: + // If we've seen a Sync event, then Active events are always redundant. + if !g.seenSync { + // Otherwise, they extend back to the start of the trace. + g.ranges[r] = activeRange{ctx.startTime, ev.Stack()} + } + case tracev2.EventRangeEnd: + // Emit proc-based ranges. + ar := g.ranges[r] + ctx.Slice(traceviewer.SliceEvent{ + Name: r.Name, + Ts: ctx.elapsed(ar.time), + Dur: ev.Time().Sub(ar.time), + Resource: uint64(r.Scope.Proc()), + Stack: ctx.Stack(viewerFrames(ar.stack)), + EndStack: ctx.Stack(viewerFrames(ev.Stack())), + }) + delete(g.ranges, r) + } +} + +// Finish flushes any outstanding ranges at the end of the trace. +func (g *procRangeGenerator) Finish(ctx *traceContext, endTime tracev2.Time) { + for r, ar := range g.ranges { + ctx.Slice(traceviewer.SliceEvent{ + Name: r.Name, + Ts: ctx.elapsed(ar.time), + Dur: endTime.Sub(ar.time), + Resource: uint64(r.Scope.Proc()), + Stack: ctx.Stack(viewerFrames(ar.stack)), + }) + } +} + +// activeRange represents an active EventRange* range. +type activeRange struct { + time tracev2.Time + stack tracev2.Stack +} + +// completedRange represents a completed EventRange* range. +type completedRange struct { + name string + startTime tracev2.Time + endTime tracev2.Time + startStack tracev2.Stack + endStack tracev2.Stack + arg any +} diff --git a/src/cmd/trace/v2/gstate.go b/src/cmd/trace/v2/gstate.go new file mode 100644 index 0000000000..c0c100c6d7 --- /dev/null +++ b/src/cmd/trace/v2/gstate.go @@ -0,0 +1,362 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package trace + +import ( + "fmt" + "internal/trace" + "internal/trace/traceviewer" + "internal/trace/traceviewer/format" + tracev2 "internal/trace/v2" + "strings" +) + +// resource is a generic constraint interface for resource IDs. +type resource interface{ tracev2.GoID | tracev2.ProcID } + +// noResource indicates the lack of a resource. +const noResource = -1 + +// gState represents the trace viewer state of a goroutine in a trace. +// +// The type parameter on this type is the resource which is used to construct +// a timeline of events. e.g. R=ProcID for a proc-oriented view, R=GoID for +// a goroutine-oriented view, etc. +type gState[R resource] struct { + baseName string + named bool // Whether baseName has been set. + label string // EventLabel extension. + isSystemG bool + + executing R // The resource this goroutine is executing on. (Could be itself.) + + // lastStopStack is the stack trace at the point of the last + // call to the stop method. This tends to be a more reliable way + // of picking up stack traces, since the parser doesn't provide + // a stack for every state transition event. + lastStopStack tracev2.Stack + + // activeRanges is the set of all active ranges on the goroutine. + activeRanges map[string]activeRange + + // completedRanges is a list of ranges that completed since before the + // goroutine stopped executing. These are flushed on every stop or block. + completedRanges []completedRange + + // startRunning is the most recent event that caused a goroutine to + // transition to GoRunning. + startRunningTime tracev2.Time + + // startSyscall is the most recent event that caused a goroutine to + // transition to GoSyscall. + syscall struct { + time tracev2.Time + stack tracev2.Stack + active bool + } + + // startBlockReason is the StateTransition.Reason of the most recent + // event that caused a gorotuine to transition to GoWaiting. + startBlockReason string + + // startCause is the event that allowed this goroutine to start running. + // It's used to generate flow events. This is typically something like + // an unblock event or a goroutine creation event. + // + // startCause.resource is the resource on which startCause happened, but is + // listed separately because the cause may have happened on a resource that + // isn't R (or perhaps on some abstract nebulous resource, like trace.NetpollP). + startCause struct { + time tracev2.Time + name string + resource uint64 + stack tracev2.Stack + } +} + +// newGState constructs a new goroutine state for the goroutine +// identified by the provided ID. +func newGState[R resource](goID tracev2.GoID) *gState[R] { + return &gState[R]{ + baseName: fmt.Sprintf("G%d", goID), + executing: R(noResource), + activeRanges: make(map[string]activeRange), + } +} + +// augmentName attempts to use stk to augment the name of the goroutine +// with stack information. This stack must be related to the goroutine +// in some way, but it doesn't really matter which stack. +func (gs *gState[R]) augmentName(stk tracev2.Stack) { + if gs.named { + return + } + if stk == tracev2.NoStack { + return + } + name := lastFunc(stk) + gs.baseName += fmt.Sprintf(" %s", name) + gs.named = true + gs.isSystemG = trace.IsSystemGoroutine(name) +} + +// setLabel adds an additional label to the goroutine's name. +func (gs *gState[R]) setLabel(label string) { + gs.label = label +} + +// name returns a name for the goroutine. +func (gs *gState[R]) name() string { + name := gs.baseName + if gs.label != "" { + name += " (" + gs.label + ")" + } + return name +} + +// setStartCause sets the reason a goroutine will be allowed to start soon. +// For example, via unblocking or exiting a blocked syscall. +func (gs *gState[R]) setStartCause(ts tracev2.Time, name string, resource uint64, stack tracev2.Stack) { + gs.startCause.time = ts + gs.startCause.name = name + gs.startCause.resource = resource + gs.startCause.stack = stack +} + +// created indicates that this goroutine was just created by the provided creator. +func (gs *gState[R]) created(ts tracev2.Time, creator R, stack tracev2.Stack) { + if creator == R(noResource) { + return + } + gs.setStartCause(ts, "go", uint64(creator), stack) +} + +// start indicates that a goroutine has started running on a proc. +func (gs *gState[R]) start(ts tracev2.Time, resource R, ctx *traceContext) { + // Set the time for all the active ranges. + for name := range gs.activeRanges { + gs.activeRanges[name] = activeRange{ts, tracev2.NoStack} + } + + if gs.startCause.name != "" { + // It has a start cause. Emit a flow event. + ctx.Arrow(traceviewer.ArrowEvent{ + Name: gs.startCause.name, + Start: ctx.elapsed(gs.startCause.time), + End: ctx.elapsed(ts), + FromResource: uint64(gs.startCause.resource), + ToResource: uint64(resource), + FromStack: ctx.Stack(viewerFrames(gs.startCause.stack)), + }) + gs.startCause.time = 0 + gs.startCause.name = "" + gs.startCause.resource = 0 + gs.startCause.stack = tracev2.NoStack + } + gs.executing = resource + gs.startRunningTime = ts +} + +// syscallBegin indicates that the goroutine entered a syscall on a proc. +func (gs *gState[R]) syscallBegin(ts tracev2.Time, resource R, stack tracev2.Stack) { + gs.syscall.time = ts + gs.syscall.stack = stack + gs.syscall.active = true + if gs.executing == R(noResource) { + gs.executing = resource + gs.startRunningTime = ts + } +} + +// syscallEnd ends the syscall slice, wherever the syscall is at. This is orthogonal +// to blockedSyscallEnd -- both must be called when a syscall ends and that syscall +// blocked. They're kept separate because syscallEnd indicates the point at which the +// goroutine is no longer executing on the resource (e.g. a proc) whereas blockedSyscallEnd +// is the point at which the goroutine actually exited the syscall regardless of which +// resource that happened on. +func (gs *gState[R]) syscallEnd(ts tracev2.Time, blocked bool, ctx *traceContext) { + if !gs.syscall.active { + return + } + blockString := "no" + if blocked { + blockString = "yes" + } + gs.completedRanges = append(gs.completedRanges, completedRange{ + name: "syscall", + startTime: gs.syscall.time, + endTime: ts, + startStack: gs.syscall.stack, + arg: format.BlockedArg{Blocked: blockString}, + }) + gs.syscall.active = false + gs.syscall.time = 0 + gs.syscall.stack = tracev2.NoStack +} + +// blockedSyscallEnd indicates the point at which the blocked syscall ended. This is distinct +// and orthogonal to syscallEnd; both must be called if the syscall blocked. This sets up an instant +// to emit a flow event from, indicating explicitly that this goroutine was unblocked by the system. +func (gs *gState[R]) blockedSyscallEnd(ts tracev2.Time, stack tracev2.Stack, ctx *traceContext) { + name := "exit blocked syscall" + gs.setStartCause(ts, name, trace.SyscallP, stack) + + // Emit an syscall exit instant event for the "Syscall" lane. + ctx.Instant(traceviewer.InstantEvent{ + Name: name, + Ts: ctx.elapsed(ts), + Resource: trace.SyscallP, + Stack: ctx.Stack(viewerFrames(stack)), + }) +} + +// unblock indicates that the goroutine gs represents has been unblocked. +func (gs *gState[R]) unblock(ts tracev2.Time, stack tracev2.Stack, resource R, ctx *traceContext) { + // Unblocking goroutine. + name := "unblock" + viewerResource := uint64(resource) + if strings.Contains(gs.startBlockReason, "network") { + // Emit an unblock instant event for the "Network" lane. + ctx.Instant(traceviewer.InstantEvent{ + Name: name, + Ts: ctx.elapsed(ts), + Resource: trace.NetpollP, + Stack: ctx.Stack(viewerFrames(stack)), + }) + gs.startBlockReason = "" + viewerResource = trace.NetpollP + } + if viewerResource != 0 { + gs.setStartCause(ts, name, viewerResource, stack) + } +} + +// block indicates that the goroutine has stopped executing on a proc -- specifically, +// it blocked for some reason. +func (gs *gState[R]) block(ts tracev2.Time, stack tracev2.Stack, reason string, ctx *traceContext) { + gs.startBlockReason = reason + gs.stop(ts, stack, ctx) +} + +// stop indicates that the goroutine has stopped executing on a proc. +func (gs *gState[R]) stop(ts tracev2.Time, stack tracev2.Stack, ctx *traceContext) { + // Emit the execution time slice. + var stk int + if gs.lastStopStack != tracev2.NoStack { + stk = ctx.Stack(viewerFrames(gs.lastStopStack)) + } + // Check invariants. + if gs.startRunningTime == 0 { + panic("silently broken trace or generator invariant (startRunningTime != 0) not held") + } + if gs.executing == R(noResource) { + panic("non-executing goroutine stopped") + } + ctx.Slice(traceviewer.SliceEvent{ + Name: gs.name(), + Ts: ctx.elapsed(gs.startRunningTime), + Dur: ts.Sub(gs.startRunningTime), + Resource: uint64(gs.executing), + Stack: stk, + }) + + // Flush completed ranges. + for _, cr := range gs.completedRanges { + ctx.Slice(traceviewer.SliceEvent{ + Name: cr.name, + Ts: ctx.elapsed(cr.startTime), + Dur: cr.endTime.Sub(cr.startTime), + Resource: uint64(gs.executing), + Stack: ctx.Stack(viewerFrames(cr.startStack)), + EndStack: ctx.Stack(viewerFrames(cr.endStack)), + Arg: cr.arg, + }) + } + gs.completedRanges = gs.completedRanges[:0] + + // Continue in-progress ranges. + for name, r := range gs.activeRanges { + // Check invariant. + if r.time == 0 { + panic("silently broken trace or generator invariant (activeRanges time != 0) not held") + } + ctx.Slice(traceviewer.SliceEvent{ + Name: name, + Ts: ctx.elapsed(r.time), + Dur: ts.Sub(r.time), + Resource: uint64(gs.executing), + Stack: ctx.Stack(viewerFrames(r.stack)), + }) + } + + // Clear the range info. + for name := range gs.activeRanges { + gs.activeRanges[name] = activeRange{0, tracev2.NoStack} + } + + gs.startRunningTime = 0 + gs.lastStopStack = stack + gs.executing = R(noResource) +} + +// finalize writes out any in-progress slices as if the goroutine stopped. +// This must only be used once the trace has been fully processed and no +// further events will be processed. This method may leave the gState in +// an inconsistent state. +func (gs *gState[R]) finish(ts tracev2.Time, ctx *traceContext) { + if gs.executing != R(noResource) { + gs.syscallEnd(ts, false, ctx) + gs.stop(ts, tracev2.NoStack, ctx) + } +} + +// rangeBegin indicates the start of a special range of time. +func (gs *gState[R]) rangeBegin(ts tracev2.Time, name string, stack tracev2.Stack) { + if gs.executing != R(noResource) { + // If we're executing, start the slice from here. + gs.activeRanges[name] = activeRange{ts, stack} + } else { + // If the goroutine isn't executing, there's no place for + // us to create a slice from. Wait until it starts executing. + gs.activeRanges[name] = activeRange{0, stack} + } +} + +// rangeActive indicates that a special range of time has been in progress. +func (gs *gState[R]) rangeActive(name string) { + if gs.executing != R(noResource) { + // If we're executing, and the range is active, then start + // from wherever the goroutine started running from. + gs.activeRanges[name] = activeRange{gs.startRunningTime, tracev2.NoStack} + } else { + // If the goroutine isn't executing, there's no place for + // us to create a slice from. Wait until it starts executing. + gs.activeRanges[name] = activeRange{0, tracev2.NoStack} + } +} + +// rangeEnd indicates the end of a special range of time. +func (gs *gState[R]) rangeEnd(ts tracev2.Time, name string, stack tracev2.Stack, ctx *traceContext) { + if gs.executing != R(noResource) { + r := gs.activeRanges[name] + gs.completedRanges = append(gs.completedRanges, completedRange{ + name: name, + startTime: r.time, + endTime: ts, + startStack: r.stack, + endStack: stack, + }) + } + delete(gs.activeRanges, name) +} + +func lastFunc(s tracev2.Stack) string { + var last tracev2.StackFrame + s.Frames(func(f tracev2.StackFrame) bool { + last = f + return true + }) + return last.Func +} diff --git a/src/cmd/trace/v2/jsontrace.go b/src/cmd/trace/v2/jsontrace.go new file mode 100644 index 0000000000..5b98850c20 --- /dev/null +++ b/src/cmd/trace/v2/jsontrace.go @@ -0,0 +1,67 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package trace + +import ( + "log" + "math" + "net/http" + "strconv" + "time" + + "internal/trace/traceviewer" + tracev2 "internal/trace/v2" +) + +func JSONTraceHandler(parsed *parsedTrace) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + // Parse start and end options. Both or none must be present. + start := int64(0) + end := int64(math.MaxInt64) + if startStr, endStr := r.FormValue("start"), r.FormValue("end"); startStr != "" && endStr != "" { + var err error + start, err = strconv.ParseInt(startStr, 10, 64) + if err != nil { + log.Printf("failed to parse start parameter %q: %v", startStr, err) + return + } + + end, err = strconv.ParseInt(endStr, 10, 64) + if err != nil { + log.Printf("failed to parse end parameter %q: %v", endStr, err) + return + } + } + + c := traceviewer.ViewerDataTraceConsumer(w, start, end) + if err := generateTrace(parsed, c); err != nil { + log.Printf("failed to generate trace: %v", err) + } + }) +} + +// traceContext is a wrapper around a traceviewer.Emitter with some additional +// information that's useful to most parts of trace viewer JSON emission. +type traceContext struct { + *traceviewer.Emitter + startTime tracev2.Time +} + +// elapsed returns the elapsed time between the trace time and the start time +// of the trace. +func (ctx *traceContext) elapsed(now tracev2.Time) time.Duration { + return now.Sub(ctx.startTime) +} + +func generateTrace(parsed *parsedTrace, c traceviewer.TraceConsumer) error { + ctx := &traceContext{ + Emitter: traceviewer.NewEmitter(c, 0, time.Duration(0), time.Duration(math.MaxInt64)), + startTime: parsed.events[0].Time(), + } + defer ctx.Flush() + + runGenerator(ctx, newProcGenerator(), parsed) + return nil +} diff --git a/src/cmd/trace/v2/jsontrace_test.go b/src/cmd/trace/v2/jsontrace_test.go new file mode 100644 index 0000000000..7e0b794159 --- /dev/null +++ b/src/cmd/trace/v2/jsontrace_test.go @@ -0,0 +1,291 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package trace + +import ( + "bytes" + "encoding/json" + tracev1 "internal/trace" + "io" + "net/http/httptest" + "os" + "path/filepath" + "slices" + "strconv" + "strings" + "testing" + "time" + + "internal/trace/traceviewer/format" + "internal/trace/v2/raw" +) + +func TestJSONTraceHandler(t *testing.T) { + testPaths, err := filepath.Glob("./testdata/*.test") + if err != nil { + t.Fatalf("discovering tests: %v", err) + } + for _, testPath := range testPaths { + t.Run(filepath.Base(testPath), func(t *testing.T) { + parsed := getTestTrace(t, testPath) + data := recordJSONTraceHandlerResponse(t, parsed) + // TODO(mknyszek): Check that there's one at most goroutine per proc at any given time. + checkExecutionTimes(t, data) + checkPlausibleHeapMetrics(t, data) + // TODO(mknyszek): Check for plausible thread and goroutine metrics. + checkMetaNamesEmitted(t, data, "process_name", []string{"STATS", "PROCS"}) + checkMetaNamesEmitted(t, data, "thread_name", []string{"GC", "Network", "Timers", "Syscalls", "Proc 0"}) + checkProcStartStop(t, data) + checkSyscalls(t, data) + checkNetworkUnblock(t, data) + // TODO(mknyszek): Check for flow events. + }) + } +} + +func checkSyscalls(t *testing.T, data format.Data) { + data = filterViewerTrace(data, + filterEventName("syscall"), + filterStackRootFunc("main.blockingSyscall")) + if len(data.Events) <= 1 { + t.Errorf("got %d events, want > 1", len(data.Events)) + } + data = filterViewerTrace(data, filterBlocked("yes")) + if len(data.Events) != 1 { + t.Errorf("got %d events, want 1", len(data.Events)) + } +} + +type eventFilterFn func(*format.Event, *format.Data) bool + +func filterEventName(name string) eventFilterFn { + return func(e *format.Event, _ *format.Data) bool { + return e.Name == name + } +} + +// filterGoRoutineName returns an event filter that returns true if the event's +// goroutine name is equal to name. +func filterGoRoutineName(name string) eventFilterFn { + return func(e *format.Event, _ *format.Data) bool { + return parseGoroutineName(e) == name + } +} + +// parseGoroutineName returns the goroutine name from the event's name field. +// E.g. if e.Name is "G42 main.cpu10", this returns "main.cpu10". +func parseGoroutineName(e *format.Event) string { + parts := strings.SplitN(e.Name, " ", 2) + if len(parts) != 2 || !strings.HasPrefix(parts[0], "G") { + return "" + } + return parts[1] +} + +// filterBlocked returns an event filter that returns true if the event's +// "blocked" argument is equal to blocked. +func filterBlocked(blocked string) eventFilterFn { + return func(e *format.Event, _ *format.Data) bool { + m, ok := e.Arg.(map[string]any) + if !ok { + return false + } + return m["blocked"] == blocked + } +} + +// filterStackRootFunc returns an event filter that returns true if the function +// at the root of the stack trace is named name. +func filterStackRootFunc(name string) eventFilterFn { + return func(e *format.Event, data *format.Data) bool { + frames := stackFrames(data, e.Stack) + rootFrame := frames[len(frames)-1] + return strings.HasPrefix(rootFrame, name+":") + } +} + +// filterViewerTrace returns a copy of data with only the events that pass all +// of the given filters. +func filterViewerTrace(data format.Data, fns ...eventFilterFn) (filtered format.Data) { + filtered = data + filtered.Events = nil + for _, e := range data.Events { + keep := true + for _, fn := range fns { + keep = keep && fn(e, &filtered) + } + if keep { + filtered.Events = append(filtered.Events, e) + } + } + return +} + +func stackFrames(data *format.Data, stackID int) (frames []string) { + for { + frame, ok := data.Frames[strconv.Itoa(stackID)] + if !ok { + return + } + frames = append(frames, frame.Name) + stackID = frame.Parent + } +} + +func checkProcStartStop(t *testing.T, data format.Data) { + procStarted := map[uint64]bool{} + for _, e := range data.Events { + if e.Name == "proc start" { + if procStarted[e.TID] == true { + t.Errorf("proc started twice: %d", e.TID) + } + procStarted[e.TID] = true + } + if e.Name == "proc stop" { + if procStarted[e.TID] == false { + t.Errorf("proc stopped twice: %d", e.TID) + } + procStarted[e.TID] = false + } + } + if got, want := len(procStarted), 8; got != want { + t.Errorf("wrong number of procs started/stopped got=%d want=%d", got, want) + } +} + +func checkNetworkUnblock(t *testing.T, data format.Data) { + count := 0 + var netBlockEv *format.Event + for _, e := range data.Events { + if e.TID == tracev1.NetpollP && e.Name == "unblock" && e.Phase == "I" && e.Scope == "t" { + count++ + netBlockEv = e + } + } + if netBlockEv == nil { + t.Error("failed to find a network unblock") + } + if count == 0 || count > 2 { + t.Errorf("found too many network block events: want 1 or 2, found %d", count) + } + // TODO(mknyszek): Check for the flow of this event to some slice event of a goroutine running. +} + +func checkExecutionTimes(t *testing.T, data format.Data) { + cpu10 := sumExecutionTime(filterViewerTrace(data, filterGoRoutineName("main.cpu10"))) + cpu20 := sumExecutionTime(filterViewerTrace(data, filterGoRoutineName("main.cpu20"))) + if cpu10 <= 0 || cpu20 <= 0 || cpu10 >= cpu20 { + t.Errorf("bad execution times: cpu10=%v, cpu20=%v", cpu10, cpu20) + } +} + +func checkMetaNamesEmitted(t *testing.T, data format.Data, category string, want []string) { + t.Helper() + names := metaEventNameArgs(category, data) + for _, wantName := range want { + if !slices.Contains(names, wantName) { + t.Errorf("%s: names=%v, want %q", category, names, wantName) + } + } +} + +func metaEventNameArgs(category string, data format.Data) (names []string) { + for _, e := range data.Events { + if e.Name == category && e.Phase == "M" { + names = append(names, e.Arg.(map[string]any)["name"].(string)) + } + } + return +} + +func checkPlausibleHeapMetrics(t *testing.T, data format.Data) { + hms := heapMetrics(data) + var nonZeroAllocated, nonZeroNextGC bool + for _, hm := range hms { + if hm.Allocated > 0 { + nonZeroAllocated = true + } + if hm.NextGC > 0 { + nonZeroNextGC = true + } + } + + if !nonZeroAllocated { + t.Errorf("nonZeroAllocated=%v, want true", nonZeroAllocated) + } + if !nonZeroNextGC { + t.Errorf("nonZeroNextGC=%v, want true", nonZeroNextGC) + } +} + +func heapMetrics(data format.Data) (metrics []format.HeapCountersArg) { + for _, e := range data.Events { + if e.Phase == "C" && e.Name == "Heap" { + j, _ := json.Marshal(e.Arg) + var metric format.HeapCountersArg + json.Unmarshal(j, &metric) + metrics = append(metrics, metric) + } + } + return +} + +func recordJSONTraceHandlerResponse(t *testing.T, parsed *parsedTrace) format.Data { + h := JSONTraceHandler(parsed) + recorder := httptest.NewRecorder() + r := httptest.NewRequest("GET", "/jsontrace", nil) + h.ServeHTTP(recorder, r) + + var data format.Data + if err := json.Unmarshal(recorder.Body.Bytes(), &data); err != nil { + t.Fatal(err) + } + return data +} + +func sumExecutionTime(data format.Data) (sum time.Duration) { + for _, e := range data.Events { + sum += time.Duration(e.Dur) * time.Microsecond + } + return +} + +func getTestTrace(t *testing.T, testPath string) *parsedTrace { + t.Helper() + + // First read in the text trace and write it out as bytes. + f, err := os.Open(testPath) + if err != nil { + t.Fatalf("failed to open test %s: %v", testPath, err) + } + r, err := raw.NewTextReader(f) + if err != nil { + t.Fatalf("failed to read test %s: %v", testPath, err) + } + var trace bytes.Buffer + w, err := raw.NewWriter(&trace, r.Version()) + if err != nil { + t.Fatalf("failed to write out test %s: %v", testPath, err) + } + for { + ev, err := r.ReadEvent() + if err == io.EOF { + break + } + if err != nil { + t.Fatalf("failed to read test %s: %v", testPath, err) + } + if err := w.WriteEvent(ev); err != nil { + t.Fatalf("failed to write out test %s: %v", testPath, err) + } + } + + // Parse the test trace. + parsed, err := parseTrace(&trace) + if err != nil { + t.Fatalf("failed to parse trace: %v", err) + } + return parsed +} diff --git a/src/cmd/trace/v2/main.go b/src/cmd/trace/v2/main.go new file mode 100644 index 0000000000..93c9d89c20 --- /dev/null +++ b/src/cmd/trace/v2/main.go @@ -0,0 +1,136 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package trace + +import ( + "fmt" + "internal/trace/traceviewer" + tracev2 "internal/trace/v2" + "io" + "log" + "net" + "net/http" + "os" + + "internal/trace/v2/raw" + + "cmd/internal/browser" +) + +// Main is the main function for cmd/trace v2. +func Main(traceFile, httpAddr, pprof string, debug int) error { + tracef, err := os.Open(traceFile) + if err != nil { + return fmt.Errorf("failed to read trace file: %w", err) + } + defer tracef.Close() + + // Debug flags. + switch debug { + case 1: + return debugProcessedEvents(tracef) + case 2: + return debugRawEvents(tracef) + } + + ln, err := net.Listen("tcp", httpAddr) + if err != nil { + return fmt.Errorf("failed to create server socket: %w", err) + } + + addr := "http://" + ln.Addr().String() + log.Print("Parsing trace...") + parsed, err := parseTrace(tracef) + if err != nil { + return err + } + // N.B. tracef not needed after this point. + // We might double-close, but that's fine; we ignore the error. + tracef.Close() + + log.Print("Splitting trace...") + ranges, err := splitTrace(parsed) + if err != nil { + return err + } + + log.Printf("Opening browser. Trace viewer is listening on %s", addr) + browser.Open(addr) + + mux := http.NewServeMux() + mux.Handle("/", traceviewer.MainHandler(ranges)) + mux.Handle("/trace", traceviewer.TraceHandler()) + mux.Handle("/jsontrace", JSONTraceHandler(parsed)) + mux.Handle("/static/", traceviewer.StaticHandler()) + + err = http.Serve(ln, mux) + return fmt.Errorf("failed to start http server: %w", err) +} + +type parsedTrace struct { + events []tracev2.Event +} + +func parseTrace(trace io.Reader) (*parsedTrace, error) { + r, err := tracev2.NewReader(trace) + if err != nil { + return nil, fmt.Errorf("failed to create trace reader: %w", err) + } + var t parsedTrace + for { + ev, err := r.ReadEvent() + if err == io.EOF { + break + } else if err != nil { + return nil, fmt.Errorf("failed to read event: %w", err) + } + t.events = append(t.events, ev) + } + return &t, nil +} + +// splitTrace splits the trace into a number of ranges, each resulting in approx 100 MiB of +// json output (the trace viewer can hardly handle more). +func splitTrace(parsed *parsedTrace) ([]traceviewer.Range, error) { + // TODO(mknyszek): Split traces by generation by doing a quick first pass over the + // trace to identify all the generation boundaries. + s, c := traceviewer.SplittingTraceConsumer(100 << 20) // 100 MiB + if err := generateTrace(parsed, c); err != nil { + return nil, err + } + return s.Ranges, nil +} + +func debugProcessedEvents(trace io.Reader) error { + tr, err := tracev2.NewReader(trace) + if err != nil { + return err + } + for { + ev, err := tr.ReadEvent() + if err == io.EOF { + return nil + } else if err != nil { + return err + } + fmt.Println(ev.String()) + } +} + +func debugRawEvents(trace io.Reader) error { + rr, err := raw.NewReader(trace) + if err != nil { + return err + } + for { + ev, err := rr.ReadEvent() + if err == io.EOF { + return nil + } else if err != nil { + return err + } + fmt.Println(ev.String()) + } +} diff --git a/src/cmd/trace/v2/procgen.go b/src/cmd/trace/v2/procgen.go new file mode 100644 index 0000000000..a49f9ec632 --- /dev/null +++ b/src/cmd/trace/v2/procgen.go @@ -0,0 +1,209 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package trace + +import ( + "fmt" + "internal/trace/traceviewer" + "internal/trace/traceviewer/format" + tracev2 "internal/trace/v2" +) + +var _ generator = &procGenerator{} + +type procGenerator struct { + globalRangeGenerator + globalMetricGenerator + procRangeGenerator + stackSampleGenerator[tracev2.ProcID] + + gStates map[tracev2.GoID]*gState[tracev2.ProcID] + inSyscall map[tracev2.ProcID]*gState[tracev2.ProcID] + maxProc tracev2.ProcID +} + +func newProcGenerator() *procGenerator { + pg := new(procGenerator) + pg.stackSampleGenerator.getResource = func(ev *tracev2.Event) tracev2.ProcID { + return ev.Proc() + } + pg.gStates = make(map[tracev2.GoID]*gState[tracev2.ProcID]) + pg.inSyscall = make(map[tracev2.ProcID]*gState[tracev2.ProcID]) + return pg +} + +func (g *procGenerator) Sync() { + g.globalRangeGenerator.Sync() + g.procRangeGenerator.Sync() +} + +func (g *procGenerator) GoroutineLabel(ctx *traceContext, ev *tracev2.Event) { + l := ev.Label() + g.gStates[l.Resource.Goroutine()].setLabel(l.Label) +} + +func (g *procGenerator) GoroutineRange(ctx *traceContext, ev *tracev2.Event) { + r := ev.Range() + switch ev.Kind() { + case tracev2.EventRangeBegin: + g.gStates[r.Scope.Goroutine()].rangeBegin(ev.Time(), r.Name, ev.Stack()) + case tracev2.EventRangeActive: + g.gStates[r.Scope.Goroutine()].rangeActive(r.Name) + case tracev2.EventRangeEnd: + gs := g.gStates[r.Scope.Goroutine()] + gs.rangeEnd(ev.Time(), r.Name, ev.Stack(), ctx) + } +} + +func (g *procGenerator) GoroutineTransition(ctx *traceContext, ev *tracev2.Event) { + st := ev.StateTransition() + goID := st.Resource.Goroutine() + + // If we haven't seen this goroutine before, create a new + // gState for it. + gs, ok := g.gStates[goID] + if !ok { + gs = newGState[tracev2.ProcID](goID) + g.gStates[goID] = gs + } + // If we haven't already named this goroutine, try to name it. + gs.augmentName(st.Stack) + + // Handle the goroutine state transition. + from, to := st.Goroutine() + if from == to { + // Filter out no-op events. + return + } + if from == tracev2.GoRunning && !to.Executing() { + if to == tracev2.GoWaiting { + // Goroutine started blocking. + gs.block(ev.Time(), ev.Stack(), st.Reason, ctx) + } else { + gs.stop(ev.Time(), ev.Stack(), ctx) + } + } + if !from.Executing() && to == tracev2.GoRunning { + start := ev.Time() + if from == tracev2.GoUndetermined { + // Back-date the event to the start of the trace. + start = ctx.startTime + } + gs.start(start, ev.Proc(), ctx) + } + + if from == tracev2.GoWaiting { + // Goroutine was unblocked. + gs.unblock(ev.Time(), ev.Stack(), ev.Proc(), ctx) + } + if from == tracev2.GoNotExist && to == tracev2.GoRunnable { + // Goroutine was created. + gs.created(ev.Time(), ev.Proc(), ev.Stack()) + } + if from == tracev2.GoSyscall && to != tracev2.GoRunning { + // Goroutine exited a blocked syscall. + gs.blockedSyscallEnd(ev.Time(), ev.Stack(), ctx) + } + + // Handle syscalls. + if to == tracev2.GoSyscall && ev.Proc() != tracev2.NoProc { + start := ev.Time() + if from == tracev2.GoUndetermined { + // Back-date the event to the start of the trace. + start = ctx.startTime + } + // Write down that we've entered a syscall. Note: we might have no P here + // if we're in a cgo callback or this is a transition from GoUndetermined + // (i.e. the G has been blocked in a syscall). + gs.syscallBegin(start, ev.Proc(), ev.Stack()) + g.inSyscall[ev.Proc()] = gs + } + // Check if we're exiting a non-blocking syscall. + _, didNotBlock := g.inSyscall[ev.Proc()] + if from == tracev2.GoSyscall && didNotBlock { + gs.syscallEnd(ev.Time(), false, ctx) + delete(g.inSyscall, ev.Proc()) + } + + // Note down the goroutine transition. + _, inMarkAssist := gs.activeRanges["GC mark assist"] + ctx.GoroutineTransition(ctx.elapsed(ev.Time()), viewerGState(from, inMarkAssist), viewerGState(to, inMarkAssist)) +} + +func (g *procGenerator) ProcTransition(ctx *traceContext, ev *tracev2.Event) { + st := ev.StateTransition() + proc := st.Resource.Proc() + + g.maxProc = max(g.maxProc, proc) + viewerEv := traceviewer.InstantEvent{ + Resource: uint64(proc), + Stack: ctx.Stack(viewerFrames(ev.Stack())), + } + + from, to := st.Proc() + if from == to { + // Filter out no-op events. + return + } + if to.Executing() { + start := ev.Time() + if from == tracev2.ProcUndetermined { + start = ctx.startTime + } + viewerEv.Name = "proc start" + viewerEv.Arg = format.ThreadIDArg{ThreadID: uint64(ev.Thread())} + viewerEv.Ts = ctx.elapsed(start) + ctx.IncThreadStateCount(ctx.elapsed(start), traceviewer.ThreadStateRunning, 1) + } + if from.Executing() { + start := ev.Time() + viewerEv.Name = "proc stop" + viewerEv.Ts = ctx.elapsed(start) + ctx.IncThreadStateCount(ctx.elapsed(start), traceviewer.ThreadStateRunning, -1) + + // Check if this proc was in a syscall before it stopped. + // This means the syscall blocked. We need to emit it to the + // viewer at this point because we only display the time the + // syscall occupied a P when the viewer is in per-P mode. + // + // TODO(mknyszek): We could do better in a per-M mode because + // all events have to happen on *some* thread, and in v2 traces + // we know what that thread is. + gs, ok := g.inSyscall[proc] + if ok { + // Emit syscall slice for blocked syscall. + gs.syscallEnd(start, true, ctx) + gs.stop(start, ev.Stack(), ctx) + delete(g.inSyscall, proc) + } + } + // TODO(mknyszek): Consider modeling procs differently and have them be + // transition to and from NotExist when GOMAXPROCS changes. We can emit + // events for this to clearly delineate GOMAXPROCS changes. + + if viewerEv.Name != "" { + ctx.Instant(viewerEv) + } +} + +func (g *procGenerator) Finish(ctx *traceContext, endTime tracev2.Time) { + ctx.SetResourceType("PROCS") + + // Finish off ranges first. It doesn't really matter for the global ranges, + // but the proc ranges need to either be a subset of a goroutine slice or + // their own slice entirely. If the former, it needs to end first. + g.procRangeGenerator.Finish(ctx, endTime) + g.globalRangeGenerator.Finish(ctx, endTime) + + // Finish off all the goroutine slices. + for _, gs := range g.gStates { + gs.finish(endTime, ctx) + } + + // Name all the procs to the emitter. + for i := uint64(0); i <= uint64(g.maxProc); i++ { + ctx.Resource(i, fmt.Sprintf("Proc %v", i)) + } +} diff --git a/src/cmd/trace/v2/testdata/generate.go b/src/cmd/trace/v2/testdata/generate.go new file mode 100644 index 0000000000..c0658b2329 --- /dev/null +++ b/src/cmd/trace/v2/testdata/generate.go @@ -0,0 +1,6 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run mktests.go +package testdata diff --git a/src/cmd/trace/v2/testdata/go122.test b/src/cmd/trace/v2/testdata/go122.test new file mode 100644 index 0000000000..36a035d0a2 --- /dev/null +++ b/src/cmd/trace/v2/testdata/go122.test @@ -0,0 +1,4366 @@ +Trace Go1.22 +EventBatch gen=1 m=18446744073709551615 time=420903766321 size=5 +Frequency freq=15625000 +EventBatch gen=1 m=2852347 time=420902165664 size=321 +ProcStart dt=1006 p=6 p_seq=1 +GoStart dt=38 g=14 g_seq=1 +GoStop dt=299059 reason_string=16 stack=52 +GoStart dt=17 g=14 g_seq=2 +GoStop dt=316380 reason_string=16 stack=52 +GoStart dt=10 g=14 g_seq=3 +GoUnblock dt=165829 g=1 g_seq=59 stack=53 +GoDestroy dt=195 +GoStart dt=19 g=1 g_seq=60 +HeapAlloc dt=44 heapalloc_value=23256928 +HeapAlloc dt=19 heapalloc_value=23265088 +GoCreate dt=32 new_g=66 new_stack=54 stack=55 +GoBlock dt=12 reason_string=12 stack=56 +GoStart dt=5 g=66 g_seq=1 +HeapAlloc dt=199 heapalloc_value=23273224 +HeapAlloc dt=13 heapalloc_value=23281032 +GoSyscallBegin dt=19 p_seq=2 stack=57 +GoSyscallEnd dt=30 +GoSyscallBegin dt=10 p_seq=3 stack=58 +GoSyscallEnd dt=17 +GoSyscallBegin dt=295 p_seq=4 stack=59 +GoSyscallEnd dt=16 +GoSyscallBegin dt=6 p_seq=5 stack=60 +GoSyscallEnd dt=14 +HeapAlloc dt=216 heapalloc_value=23289000 +HeapAlloc dt=15 heapalloc_value=23296376 +HeapAlloc dt=19 heapalloc_value=23304328 +GoSyscallBegin dt=16 p_seq=6 stack=61 +GoSyscallEnd dt=15 +GoSyscallBegin dt=7 p_seq=7 stack=62 +GoSyscallEnd dt=14 +GoSyscallBegin dt=12 p_seq=8 stack=63 +ProcStart dt=787812 p=7 p_seq=8 +GoSyscallEndBlocked dt=6 +GoStart dt=1 g=66 g_seq=2 +GoUnblock dt=40 g=1 g_seq=61 stack=66 +GoDestroy dt=191 +GoStart dt=23 g=1 g_seq=62 +GoStop dt=27 reason_string=16 stack=67 +GoStart dt=12 g=1 g_seq=63 +HeapAlloc dt=433 heapalloc_value=23321416 +HeapAlloc dt=23 heapalloc_value=23329608 +HeapAlloc dt=27 heapalloc_value=23337800 +HeapAlloc dt=113 heapalloc_value=23344536 +HeapAlloc dt=447 heapalloc_value=23352728 +HeapAlloc dt=38 heapalloc_value=23360856 +GoSyscallBegin dt=19 p_seq=9 stack=68 +GoSyscallEnd dt=927 +HeapAlloc dt=22 heapalloc_value=23368952 +GoSyscallBegin dt=16 p_seq=10 stack=69 +GoSyscallEnd dt=30 +GoSyscallBegin dt=10 p_seq=11 stack=70 +GoSyscallEnd dt=20 +HeapAlloc dt=287 heapalloc_value=23434488 +GoSyscallBegin dt=45 p_seq=12 stack=71 +GoSyscallEnd dt=234 +GoSyscallBegin dt=11 p_seq=13 stack=71 +GoSyscallEnd dt=109 +GoSyscallBegin dt=77 p_seq=14 stack=72 +GoSyscallEnd dt=54 +GoSyscallBegin dt=22 p_seq=15 stack=73 +GoSyscallEnd dt=41 +GoSyscallBegin dt=24 p_seq=16 stack=74 +GoSyscallEnd dt=173 +GoSyscallBegin dt=11 p_seq=17 stack=75 +GoSyscallEnd dt=68 +HeapAlloc dt=134 heapalloc_value=23442648 +HeapAlloc dt=18 heapalloc_value=23450744 +GoCreate dt=23 new_g=82 new_stack=76 stack=77 +HeapAlloc dt=256 heapalloc_value=23458456 +GoSyscallBegin dt=293 p_seq=18 stack=78 +GoSyscallEnd dt=1156 +GoBlock dt=522 reason_string=7 stack=80 +ProcStop dt=25 +EventBatch gen=1 m=2852346 time=420902051246 size=68 +ProcStart dt=304 p=5 p_seq=1 +ProcStop dt=237 +ProcStart dt=1645 p=5 p_seq=2 +ProcStop dt=30 +ProcStart dt=2505 p=1 p_seq=31 +GoStart dt=199 g=34 g_seq=5 +GoBlock dt=29 reason_string=15 stack=26 +ProcStop dt=25 +ProcStart dt=103771 p=1 p_seq=32 +GoStart dt=185 g=10 g_seq=1 +GoStop dt=304886 reason_string=16 stack=52 +GoStart dt=20 g=10 g_seq=2 +GoStop dt=316414 reason_string=16 stack=52 +GoStart dt=20 g=10 g_seq=3 +GoDestroy dt=159939 +ProcStop dt=47 +EventBatch gen=1 m=2852345 time=420901844115 size=3554 +ProcStart dt=108 p=4 p_seq=1 +ProcStop dt=283 +ProcStart dt=3670 p=0 p_seq=27 +GoStart dt=473 g=1 g_seq=19 +GCMarkAssistEnd dt=34 +HeapAlloc dt=33 heapalloc_value=4117744 +HeapAlloc dt=544 heapalloc_value=4124912 +GCSweepBegin dt=49 stack=38 +GCSweepEnd dt=1131 swept_value=827392 reclaimed_value=0 +HeapAlloc dt=64 heapalloc_value=4133104 +GCSweepBegin dt=44 stack=38 +GCSweepEnd dt=192 swept_value=139264 reclaimed_value=0 +HeapAlloc dt=12 heapalloc_value=4141296 +HeapAlloc dt=29 heapalloc_value=4149488 +HeapAlloc dt=19 heapalloc_value=4157680 +HeapAlloc dt=24 heapalloc_value=4165872 +HeapAlloc dt=23 heapalloc_value=4174064 +GCSweepBegin dt=34 stack=39 +GCSweepEnd dt=33 swept_value=67108864 reclaimed_value=0 +HeapAlloc dt=8 heapalloc_value=4182256 +HeapAlloc dt=117 heapalloc_value=4190448 +HeapAlloc dt=27 heapalloc_value=4198640 +HeapAlloc dt=19 heapalloc_value=4206832 +HeapAlloc dt=23 heapalloc_value=4215024 +HeapAlloc dt=20 heapalloc_value=4223216 +HeapAlloc dt=18 heapalloc_value=4231408 +HeapAlloc dt=70 heapalloc_value=4239600 +HeapAlloc dt=19 heapalloc_value=4247792 +HeapAlloc dt=16 heapalloc_value=4255984 +HeapAlloc dt=16 heapalloc_value=4264176 +HeapAlloc dt=15 heapalloc_value=4272368 +HeapAlloc dt=18 heapalloc_value=4280560 +HeapAlloc dt=15 heapalloc_value=4288752 +HeapAlloc dt=15 heapalloc_value=4296944 +HeapAlloc dt=17 heapalloc_value=4305136 +HeapAlloc dt=18 heapalloc_value=4313328 +HeapAlloc dt=17 heapalloc_value=4321520 +HeapAlloc dt=14 heapalloc_value=4329712 +HeapAlloc dt=15 heapalloc_value=4337904 +HeapAlloc dt=16 heapalloc_value=4346096 +HeapAlloc dt=15 heapalloc_value=4354288 +HeapAlloc dt=17 heapalloc_value=4362480 +HeapAlloc dt=38 heapalloc_value=4370672 +HeapAlloc dt=22 heapalloc_value=4378864 +HeapAlloc dt=23 heapalloc_value=4387056 +HeapAlloc dt=22 heapalloc_value=4395248 +HeapAlloc dt=27 heapalloc_value=4403440 +HeapAlloc dt=27 heapalloc_value=4411632 +HeapAlloc dt=29 heapalloc_value=4419824 +HeapAlloc dt=25 heapalloc_value=4428016 +HeapAlloc dt=25 heapalloc_value=4436208 +HeapAlloc dt=21 heapalloc_value=4444400 +GoBlock dt=45 reason_string=19 stack=21 +ProcStop dt=283 +ProcStart dt=17671 p=1 p_seq=16 +ProcStop dt=21 +ProcStart dt=2566 p=0 p_seq=30 +ProcStop dt=12 +ProcStart dt=16741 p=0 p_seq=31 +GoUnblock dt=27 g=1 g_seq=22 stack=0 +GoStart dt=174 g=1 g_seq=23 +HeapAlloc dt=39 heapalloc_value=5574896 +HeapAlloc dt=20 heapalloc_value=5583088 +HeapAlloc dt=13 heapalloc_value=5591280 +HeapAlloc dt=12 heapalloc_value=5599472 +HeapAlloc dt=12 heapalloc_value=5607664 +HeapAlloc dt=12 heapalloc_value=5615856 +HeapAlloc dt=13 heapalloc_value=5624048 +HeapAlloc dt=41 heapalloc_value=5632240 +HeapAlloc dt=12 heapalloc_value=5640432 +HeapAlloc dt=13 heapalloc_value=5648624 +HeapAlloc dt=11 heapalloc_value=5656816 +HeapAlloc dt=12 heapalloc_value=5665008 +HeapAlloc dt=8 heapalloc_value=5673200 +HeapAlloc dt=39 heapalloc_value=5804272 +HeapAlloc dt=2903 heapalloc_value=5812464 +HeapAlloc dt=14 heapalloc_value=5820656 +HeapAlloc dt=77 heapalloc_value=5828848 +HeapAlloc dt=10 heapalloc_value=5837040 +HeapAlloc dt=8 heapalloc_value=5845232 +HeapAlloc dt=48 heapalloc_value=5853424 +HeapAlloc dt=9 heapalloc_value=5861616 +HeapAlloc dt=8 heapalloc_value=5869808 +HeapAlloc dt=8 heapalloc_value=5878000 +HeapAlloc dt=9 heapalloc_value=5886192 +HeapAlloc dt=8 heapalloc_value=5894384 +HeapAlloc dt=8 heapalloc_value=5902576 +HeapAlloc dt=8 heapalloc_value=5910768 +HeapAlloc dt=8 heapalloc_value=5918960 +HeapAlloc dt=8 heapalloc_value=5927152 +HeapAlloc dt=8 heapalloc_value=5935344 +HeapAlloc dt=8 heapalloc_value=5943536 +HeapAlloc dt=17 heapalloc_value=5951728 +HeapAlloc dt=8 heapalloc_value=5959920 +HeapAlloc dt=6 heapalloc_value=5968112 +HeapAlloc dt=6 heapalloc_value=5976304 +HeapAlloc dt=6 heapalloc_value=5984496 +HeapAlloc dt=7 heapalloc_value=5992688 +HeapAlloc dt=6 heapalloc_value=6000880 +HeapAlloc dt=6 heapalloc_value=6009072 +HeapAlloc dt=7 heapalloc_value=6017264 +HeapAlloc dt=6 heapalloc_value=6025456 +HeapAlloc dt=6 heapalloc_value=6033648 +HeapAlloc dt=6 heapalloc_value=6041840 +HeapAlloc dt=6 heapalloc_value=6050032 +HeapAlloc dt=7 heapalloc_value=6058224 +HeapAlloc dt=44 heapalloc_value=6066416 +HeapAlloc dt=8 heapalloc_value=6074608 +HeapAlloc dt=71 heapalloc_value=6082800 +HeapAlloc dt=8 heapalloc_value=6090992 +HeapAlloc dt=6 heapalloc_value=6099184 +HeapAlloc dt=7 heapalloc_value=6107376 +HeapAlloc dt=6 heapalloc_value=6115568 +HeapAlloc dt=6 heapalloc_value=6123760 +HeapAlloc dt=7 heapalloc_value=6131952 +HeapAlloc dt=6 heapalloc_value=6140144 +HeapAlloc dt=6 heapalloc_value=6148336 +HeapAlloc dt=6 heapalloc_value=6156528 +HeapAlloc dt=7 heapalloc_value=6164720 +HeapAlloc dt=6 heapalloc_value=6172912 +HeapAlloc dt=6 heapalloc_value=6181104 +HeapAlloc dt=6 heapalloc_value=6189296 +HeapAlloc dt=6 heapalloc_value=6197488 +HeapAlloc dt=7 heapalloc_value=6205680 +HeapAlloc dt=6 heapalloc_value=6213872 +HeapAlloc dt=6 heapalloc_value=6222064 +HeapAlloc dt=6 heapalloc_value=6230256 +HeapAlloc dt=6 heapalloc_value=6238448 +HeapAlloc dt=7 heapalloc_value=6246640 +HeapAlloc dt=6 heapalloc_value=6254832 +HeapAlloc dt=6 heapalloc_value=6263024 +HeapAlloc dt=6 heapalloc_value=6271216 +HeapAlloc dt=6 heapalloc_value=6279408 +HeapAlloc dt=6 heapalloc_value=6287600 +HeapAlloc dt=7 heapalloc_value=6295792 +HeapAlloc dt=6 heapalloc_value=6303984 +HeapAlloc dt=7 heapalloc_value=6312176 +HeapAlloc dt=6 heapalloc_value=6320368 +HeapAlloc dt=6 heapalloc_value=6328560 +HeapAlloc dt=6 heapalloc_value=6336752 +HeapAlloc dt=70 heapalloc_value=6344944 +HeapAlloc dt=139 heapalloc_value=6353136 +HeapAlloc dt=8 heapalloc_value=6361328 +HeapAlloc dt=7 heapalloc_value=6369520 +HeapAlloc dt=6 heapalloc_value=6377712 +HeapAlloc dt=6 heapalloc_value=6385904 +HeapAlloc dt=6 heapalloc_value=6394096 +HeapAlloc dt=6 heapalloc_value=6402288 +HeapAlloc dt=7 heapalloc_value=6410480 +HeapAlloc dt=6 heapalloc_value=6418672 +HeapAlloc dt=6 heapalloc_value=6426864 +HeapAlloc dt=6 heapalloc_value=6435056 +HeapAlloc dt=6 heapalloc_value=6443248 +HeapAlloc dt=6 heapalloc_value=6451440 +HeapAlloc dt=7 heapalloc_value=6459632 +HeapAlloc dt=6 heapalloc_value=6467824 +HeapAlloc dt=6 heapalloc_value=6476016 +HeapAlloc dt=6 heapalloc_value=6484208 +HeapAlloc dt=42 heapalloc_value=6492400 +HeapAlloc dt=8 heapalloc_value=6500592 +HeapAlloc dt=6 heapalloc_value=6508784 +HeapAlloc dt=6 heapalloc_value=6516976 +HeapAlloc dt=7 heapalloc_value=6525168 +HeapAlloc dt=6 heapalloc_value=6533360 +HeapAlloc dt=6 heapalloc_value=6541552 +HeapAlloc dt=6 heapalloc_value=6549744 +HeapAlloc dt=6 heapalloc_value=6557936 +HeapAlloc dt=7 heapalloc_value=6566128 +HeapAlloc dt=6 heapalloc_value=6574320 +HeapAlloc dt=6 heapalloc_value=6582512 +HeapAlloc dt=7 heapalloc_value=6590704 +HeapAlloc dt=6 heapalloc_value=6598896 +HeapAlloc dt=66 heapalloc_value=6607088 +HeapAlloc dt=8 heapalloc_value=6615280 +HeapAlloc dt=6 heapalloc_value=6623472 +HeapAlloc dt=6 heapalloc_value=6631664 +HeapAlloc dt=7 heapalloc_value=6639856 +HeapAlloc dt=6 heapalloc_value=6648048 +HeapAlloc dt=6 heapalloc_value=6656240 +HeapAlloc dt=7 heapalloc_value=6664432 +HeapAlloc dt=6 heapalloc_value=6672624 +HeapAlloc dt=6 heapalloc_value=6680816 +HeapAlloc dt=6 heapalloc_value=6689008 +HeapAlloc dt=6 heapalloc_value=6697200 +HeapAlloc dt=7 heapalloc_value=6705392 +HeapAlloc dt=6 heapalloc_value=6713584 +HeapAlloc dt=6 heapalloc_value=6721776 +GoBlock dt=13 reason_string=19 stack=21 +ProcStop dt=220 +ProcStart dt=17605 p=1 p_seq=18 +ProcStop dt=18 +ProcStart dt=8830 p=4 p_seq=2 +ProcStop dt=26 +ProcStart dt=16773 p=0 p_seq=36 +ProcStop dt=12 +ProcStart dt=1445 p=1 p_seq=20 +ProcStop dt=12 +ProcStart dt=16751 p=1 p_seq=21 +GoUnblock dt=16 g=1 g_seq=33 stack=0 +GoStart dt=189 g=1 g_seq=34 +HeapAlloc dt=54 heapalloc_value=9892080 +HeapAlloc dt=21 heapalloc_value=9900272 +HeapAlloc dt=64 heapalloc_value=9908464 +HeapAlloc dt=13 heapalloc_value=9916656 +HeapAlloc dt=13 heapalloc_value=9924848 +HeapAlloc dt=12 heapalloc_value=9933040 +HeapAlloc dt=11 heapalloc_value=9941232 +HeapAlloc dt=13 heapalloc_value=9949424 +HeapAlloc dt=12 heapalloc_value=9957616 +HeapAlloc dt=48 heapalloc_value=9965808 +HeapAlloc dt=338 heapalloc_value=9974000 +HeapAlloc dt=16 heapalloc_value=9982192 +HeapAlloc dt=10 heapalloc_value=9990384 +HeapAlloc dt=8 heapalloc_value=9998576 +HeapAlloc dt=8 heapalloc_value=10006768 +HeapAlloc dt=10 heapalloc_value=10014960 +HeapAlloc dt=8 heapalloc_value=10023152 +HeapAlloc dt=7 heapalloc_value=10031344 +HeapAlloc dt=9 heapalloc_value=10039536 +HeapAlloc dt=6 heapalloc_value=10047728 +HeapAlloc dt=52 heapalloc_value=10055920 +HeapAlloc dt=8 heapalloc_value=10064112 +HeapAlloc dt=7 heapalloc_value=10072304 +HeapAlloc dt=7 heapalloc_value=10080496 +HeapAlloc dt=7 heapalloc_value=10088688 +HeapAlloc dt=7 heapalloc_value=10096880 +HeapAlloc dt=90 heapalloc_value=10105072 +HeapAlloc dt=8 heapalloc_value=10113264 +HeapAlloc dt=8 heapalloc_value=10121456 +HeapAlloc dt=7 heapalloc_value=10129648 +HeapAlloc dt=7 heapalloc_value=10137840 +HeapAlloc dt=7 heapalloc_value=10146032 +HeapAlloc dt=6 heapalloc_value=10154224 +HeapAlloc dt=7 heapalloc_value=10162416 +HeapAlloc dt=7 heapalloc_value=10170608 +HeapAlloc dt=7 heapalloc_value=10178800 +HeapAlloc dt=6 heapalloc_value=10186992 +HeapAlloc dt=7 heapalloc_value=10195184 +HeapAlloc dt=7 heapalloc_value=10203376 +HeapAlloc dt=7 heapalloc_value=10211568 +HeapAlloc dt=6 heapalloc_value=10219760 +HeapAlloc dt=8 heapalloc_value=10227952 +HeapAlloc dt=97 heapalloc_value=10236144 +HeapAlloc dt=9 heapalloc_value=10244336 +HeapAlloc dt=6 heapalloc_value=10252528 +HeapAlloc dt=7 heapalloc_value=10260720 +HeapAlloc dt=7 heapalloc_value=10268912 +HeapAlloc dt=6 heapalloc_value=10277104 +HeapAlloc dt=7 heapalloc_value=10285296 +HeapAlloc dt=7 heapalloc_value=10293488 +HeapAlloc dt=73 heapalloc_value=10301680 +HeapAlloc dt=8 heapalloc_value=10309872 +HeapAlloc dt=6 heapalloc_value=10318064 +HeapAlloc dt=7 heapalloc_value=10326256 +HeapAlloc dt=7 heapalloc_value=10334448 +HeapAlloc dt=6 heapalloc_value=10342640 +HeapAlloc dt=7 heapalloc_value=10350832 +HeapAlloc dt=7 heapalloc_value=10359024 +HeapAlloc dt=7 heapalloc_value=10367216 +HeapAlloc dt=6 heapalloc_value=10375408 +HeapAlloc dt=7 heapalloc_value=10383600 +HeapAlloc dt=7 heapalloc_value=10391792 +HeapAlloc dt=7 heapalloc_value=10399984 +HeapAlloc dt=6 heapalloc_value=10408176 +HeapAlloc dt=7 heapalloc_value=10416368 +HeapAlloc dt=7 heapalloc_value=10424560 +HeapAlloc dt=6 heapalloc_value=10432752 +HeapAlloc dt=7 heapalloc_value=10440944 +HeapAlloc dt=7 heapalloc_value=10449136 +HeapAlloc dt=6 heapalloc_value=10457328 +HeapAlloc dt=7 heapalloc_value=10465520 +HeapAlloc dt=96 heapalloc_value=10473712 +HeapAlloc dt=8 heapalloc_value=10481904 +HeapAlloc dt=6 heapalloc_value=10490096 +HeapAlloc dt=68 heapalloc_value=10498288 +HeapAlloc dt=8 heapalloc_value=10506480 +HeapAlloc dt=7 heapalloc_value=10514672 +HeapAlloc dt=7 heapalloc_value=10522864 +HeapAlloc dt=6 heapalloc_value=10531056 +HeapAlloc dt=7 heapalloc_value=10539248 +HeapAlloc dt=7 heapalloc_value=10547440 +HeapAlloc dt=7 heapalloc_value=10555632 +HeapAlloc dt=6 heapalloc_value=10563824 +HeapAlloc dt=7 heapalloc_value=10572016 +HeapAlloc dt=7 heapalloc_value=10580208 +HeapAlloc dt=6 heapalloc_value=10588400 +HeapAlloc dt=7 heapalloc_value=10596592 +HeapAlloc dt=7 heapalloc_value=10604784 +HeapAlloc dt=7 heapalloc_value=10612976 +HeapAlloc dt=7 heapalloc_value=10621168 +HeapAlloc dt=6 heapalloc_value=10629360 +HeapAlloc dt=7 heapalloc_value=10637552 +HeapAlloc dt=7 heapalloc_value=10645744 +HeapAlloc dt=6 heapalloc_value=10653936 +HeapAlloc dt=7 heapalloc_value=10662128 +HeapAlloc dt=7 heapalloc_value=10670320 +HeapAlloc dt=6 heapalloc_value=10678512 +HeapAlloc dt=7 heapalloc_value=10686704 +HeapAlloc dt=7 heapalloc_value=10694896 +HeapAlloc dt=7 heapalloc_value=10703088 +HeapAlloc dt=7 heapalloc_value=10711280 +HeapAlloc dt=6 heapalloc_value=10719472 +HeapAlloc dt=7 heapalloc_value=10727664 +HeapAlloc dt=7 heapalloc_value=10735856 +HeapAlloc dt=7 heapalloc_value=10744048 +HeapAlloc dt=6 heapalloc_value=10752240 +HeapAlloc dt=78 heapalloc_value=10760432 +HeapAlloc dt=8 heapalloc_value=10768624 +HeapAlloc dt=6 heapalloc_value=10776816 +HeapAlloc dt=7 heapalloc_value=10785008 +HeapAlloc dt=7 heapalloc_value=10793200 +HeapAlloc dt=7 heapalloc_value=10801392 +HeapAlloc dt=6 heapalloc_value=10809584 +HeapAlloc dt=7 heapalloc_value=10817776 +HeapAlloc dt=65 heapalloc_value=10825968 +HeapAlloc dt=9 heapalloc_value=10834160 +HeapAlloc dt=6 heapalloc_value=10842352 +HeapAlloc dt=7 heapalloc_value=10850544 +HeapAlloc dt=6 heapalloc_value=10858736 +HeapAlloc dt=7 heapalloc_value=10866928 +HeapAlloc dt=7 heapalloc_value=10875120 +HeapAlloc dt=7 heapalloc_value=10883312 +HeapAlloc dt=6 heapalloc_value=10891504 +HeapAlloc dt=44 heapalloc_value=10899696 +HeapAlloc dt=7 heapalloc_value=10907888 +GoBlock dt=13 reason_string=19 stack=21 +ProcStop dt=198 +ProcStart dt=17586 p=0 p_seq=38 +ProcStop dt=21 +ProcStart dt=5052 p=1 p_seq=24 +ProcStop dt=13 +ProcStart dt=16760 p=1 p_seq=26 +GoUnblock dt=19 g=1 g_seq=39 stack=0 +GoStart dt=169 g=1 g_seq=40 +HeapAlloc dt=52 heapalloc_value=13250800 +HeapAlloc dt=19 heapalloc_value=13258992 +HeapAlloc dt=9 heapalloc_value=13267184 +HeapAlloc dt=82 heapalloc_value=13275376 +HeapAlloc dt=12 heapalloc_value=13283568 +HeapAlloc dt=9 heapalloc_value=13291760 +HeapAlloc dt=9 heapalloc_value=13299952 +HeapAlloc dt=10 heapalloc_value=13308144 +HeapAlloc dt=10 heapalloc_value=13316336 +HeapAlloc dt=7 heapalloc_value=13324528 +HeapAlloc dt=6 heapalloc_value=13332720 +HeapAlloc dt=6 heapalloc_value=13340912 +HeapAlloc dt=6 heapalloc_value=13349104 +HeapAlloc dt=7 heapalloc_value=13357296 +HeapAlloc dt=6 heapalloc_value=13365488 +HeapAlloc dt=6 heapalloc_value=13373680 +HeapAlloc dt=520 heapalloc_value=13381872 +HeapAlloc dt=15 heapalloc_value=13390064 +HeapAlloc dt=7 heapalloc_value=13398256 +HeapAlloc dt=6 heapalloc_value=13406448 +HeapAlloc dt=8 heapalloc_value=13414640 +HeapAlloc dt=6 heapalloc_value=13422832 +HeapAlloc dt=6 heapalloc_value=13431024 +HeapAlloc dt=7 heapalloc_value=13439216 +HeapAlloc dt=8 heapalloc_value=13447408 +HeapAlloc dt=7 heapalloc_value=13455600 +HeapAlloc dt=6 heapalloc_value=13463792 +HeapAlloc dt=6 heapalloc_value=13471984 +HeapAlloc dt=48 heapalloc_value=13480176 +HeapAlloc dt=7 heapalloc_value=13488368 +HeapAlloc dt=6 heapalloc_value=13496560 +HeapAlloc dt=7 heapalloc_value=13504752 +HeapAlloc dt=9 heapalloc_value=13512944 +HeapAlloc dt=6 heapalloc_value=13521136 +HeapAlloc dt=7 heapalloc_value=13529328 +HeapAlloc dt=6 heapalloc_value=13537520 +HeapAlloc dt=7 heapalloc_value=13545712 +HeapAlloc dt=6 heapalloc_value=13553904 +HeapAlloc dt=7 heapalloc_value=13562096 +HeapAlloc dt=6 heapalloc_value=13570288 +HeapAlloc dt=8 heapalloc_value=13578480 +HeapAlloc dt=6 heapalloc_value=13586672 +HeapAlloc dt=6 heapalloc_value=13594864 +HeapAlloc dt=6 heapalloc_value=13603056 +HeapAlloc dt=6 heapalloc_value=13611248 +HeapAlloc dt=7 heapalloc_value=13619440 +HeapAlloc dt=6 heapalloc_value=13627632 +HeapAlloc dt=6 heapalloc_value=13635824 +HeapAlloc dt=76 heapalloc_value=13644016 +HeapAlloc dt=8 heapalloc_value=13652208 +HeapAlloc dt=6 heapalloc_value=13660400 +HeapAlloc dt=6 heapalloc_value=13668592 +HeapAlloc dt=6 heapalloc_value=13676784 +HeapAlloc dt=7 heapalloc_value=13684976 +HeapAlloc dt=6 heapalloc_value=13693168 +HeapAlloc dt=6 heapalloc_value=13701360 +HeapAlloc dt=8 heapalloc_value=13709552 +HeapAlloc dt=6 heapalloc_value=13717744 +HeapAlloc dt=64 heapalloc_value=13725936 +HeapAlloc dt=7 heapalloc_value=13734128 +HeapAlloc dt=7 heapalloc_value=13742320 +HeapAlloc dt=6 heapalloc_value=13750512 +HeapAlloc dt=6 heapalloc_value=13758704 +HeapAlloc dt=6 heapalloc_value=13766896 +HeapAlloc dt=8 heapalloc_value=13775088 +HeapAlloc dt=7 heapalloc_value=13783280 +HeapAlloc dt=6 heapalloc_value=13791472 +HeapAlloc dt=7 heapalloc_value=13799664 +HeapAlloc dt=6 heapalloc_value=13807856 +HeapAlloc dt=6 heapalloc_value=13816048 +HeapAlloc dt=6 heapalloc_value=13824240 +HeapAlloc dt=6 heapalloc_value=13832432 +HeapAlloc dt=9 heapalloc_value=13840624 +HeapAlloc dt=6 heapalloc_value=13848816 +HeapAlloc dt=6 heapalloc_value=13857008 +HeapAlloc dt=6 heapalloc_value=13865200 +HeapAlloc dt=7 heapalloc_value=13873392 +HeapAlloc dt=7 heapalloc_value=13881584 +HeapAlloc dt=6 heapalloc_value=13889776 +HeapAlloc dt=45 heapalloc_value=13897968 +HeapAlloc dt=75 heapalloc_value=13906160 +HeapAlloc dt=8 heapalloc_value=13914352 +HeapAlloc dt=6 heapalloc_value=13922544 +HeapAlloc dt=6 heapalloc_value=13930736 +HeapAlloc dt=7 heapalloc_value=13938928 +HeapAlloc dt=6 heapalloc_value=13947120 +HeapAlloc dt=6 heapalloc_value=13955312 +HeapAlloc dt=6 heapalloc_value=13963504 +HeapAlloc dt=6 heapalloc_value=13971696 +HeapAlloc dt=7 heapalloc_value=13979888 +HeapAlloc dt=6 heapalloc_value=13988080 +HeapAlloc dt=6 heapalloc_value=13996272 +HeapAlloc dt=6 heapalloc_value=14004464 +HeapAlloc dt=6 heapalloc_value=14012656 +HeapAlloc dt=6 heapalloc_value=14020848 +HeapAlloc dt=7 heapalloc_value=14029040 +HeapAlloc dt=6 heapalloc_value=14037232 +HeapAlloc dt=6 heapalloc_value=14045424 +HeapAlloc dt=7 heapalloc_value=14053616 +HeapAlloc dt=6 heapalloc_value=14061808 +HeapAlloc dt=6 heapalloc_value=14070000 +HeapAlloc dt=6 heapalloc_value=14078192 +HeapAlloc dt=6 heapalloc_value=14086384 +HeapAlloc dt=6 heapalloc_value=14094576 +HeapAlloc dt=9 heapalloc_value=14102768 +HeapAlloc dt=6 heapalloc_value=14110960 +HeapAlloc dt=7 heapalloc_value=14119152 +HeapAlloc dt=6 heapalloc_value=14127344 +HeapAlloc dt=7 heapalloc_value=14135536 +HeapAlloc dt=6 heapalloc_value=14143728 +HeapAlloc dt=6 heapalloc_value=14151920 +HeapAlloc dt=6 heapalloc_value=14160112 +HeapAlloc dt=69 heapalloc_value=14168304 +HeapAlloc dt=8 heapalloc_value=14176496 +HeapAlloc dt=6 heapalloc_value=14184688 +HeapAlloc dt=6 heapalloc_value=14192880 +HeapAlloc dt=7 heapalloc_value=14201072 +HeapAlloc dt=6 heapalloc_value=14209264 +HeapAlloc dt=6 heapalloc_value=14217456 +HeapAlloc dt=16 heapalloc_value=14586096 +HeapAlloc dt=3676 heapalloc_value=14594288 +HeapAlloc dt=11 heapalloc_value=14602480 +HeapAlloc dt=72 heapalloc_value=14610672 +HeapAlloc dt=10 heapalloc_value=14618864 +HeapAlloc dt=7 heapalloc_value=14627056 +HeapAlloc dt=9 heapalloc_value=14635248 +GoBlock dt=13 reason_string=19 stack=21 +ProcStop dt=219 +ProcStart dt=17778 p=2 p_seq=19 +ProcStop dt=25 +ProcStart dt=2221 p=1 p_seq=29 +ProcStop dt=18 +ProcStart dt=16821 p=1 p_seq=30 +GoUnblock dt=23 g=1 g_seq=43 stack=0 +GoStart dt=193 g=1 g_seq=44 +HeapAlloc dt=59 heapalloc_value=15667440 +HeapAlloc dt=26 heapalloc_value=15675632 +HeapAlloc dt=15 heapalloc_value=15683824 +HeapAlloc dt=10 heapalloc_value=15692016 +HeapAlloc dt=9 heapalloc_value=15700208 +HeapAlloc dt=10 heapalloc_value=15708400 +HeapAlloc dt=11 heapalloc_value=15716592 +HeapAlloc dt=9 heapalloc_value=15724784 +HeapAlloc dt=96 heapalloc_value=15732976 +HeapAlloc dt=324 heapalloc_value=15741168 +HeapAlloc dt=17 heapalloc_value=15749360 +HeapAlloc dt=9 heapalloc_value=15757552 +HeapAlloc dt=9 heapalloc_value=15765744 +HeapAlloc dt=7 heapalloc_value=15773936 +HeapAlloc dt=8 heapalloc_value=15782128 +HeapAlloc dt=6 heapalloc_value=15790320 +HeapAlloc dt=6 heapalloc_value=15798512 +HeapAlloc dt=8 heapalloc_value=15806704 +HeapAlloc dt=5 heapalloc_value=15814896 +HeapAlloc dt=7 heapalloc_value=15823088 +HeapAlloc dt=6 heapalloc_value=15831280 +HeapAlloc dt=6 heapalloc_value=15839472 +HeapAlloc dt=6 heapalloc_value=15847664 +HeapAlloc dt=6 heapalloc_value=15855856 +HeapAlloc dt=7 heapalloc_value=15864048 +HeapAlloc dt=10 heapalloc_value=15872240 +HeapAlloc dt=6 heapalloc_value=15880432 +HeapAlloc dt=6 heapalloc_value=15888624 +HeapAlloc dt=6 heapalloc_value=15896816 +HeapAlloc dt=7 heapalloc_value=15905008 +HeapAlloc dt=6 heapalloc_value=15913200 +HeapAlloc dt=6 heapalloc_value=15921392 +HeapAlloc dt=7 heapalloc_value=15929584 +HeapAlloc dt=8 heapalloc_value=15937776 +HeapAlloc dt=48 heapalloc_value=15945968 +HeapAlloc dt=7 heapalloc_value=15954160 +HeapAlloc dt=7 heapalloc_value=15962352 +HeapAlloc dt=6 heapalloc_value=15970544 +HeapAlloc dt=8 heapalloc_value=15978736 +HeapAlloc dt=6 heapalloc_value=15986928 +HeapAlloc dt=7 heapalloc_value=15995120 +HeapAlloc dt=104 heapalloc_value=16003312 +HeapAlloc dt=9 heapalloc_value=16011504 +HeapAlloc dt=8 heapalloc_value=16019696 +HeapAlloc dt=9 heapalloc_value=16027888 +HeapAlloc dt=8 heapalloc_value=16036080 +HeapAlloc dt=7 heapalloc_value=16044272 +HeapAlloc dt=6 heapalloc_value=16052464 +HeapAlloc dt=7 heapalloc_value=16060656 +HeapAlloc dt=6 heapalloc_value=16068848 +HeapAlloc dt=6 heapalloc_value=16077040 +HeapAlloc dt=6 heapalloc_value=16085232 +HeapAlloc dt=7 heapalloc_value=16093424 +HeapAlloc dt=6 heapalloc_value=16101616 +HeapAlloc dt=6 heapalloc_value=16109808 +HeapAlloc dt=6 heapalloc_value=16118000 +HeapAlloc dt=7 heapalloc_value=16126192 +HeapAlloc dt=6 heapalloc_value=16134384 +HeapAlloc dt=6 heapalloc_value=16142576 +HeapAlloc dt=6 heapalloc_value=16150768 +HeapAlloc dt=7 heapalloc_value=16158960 +HeapAlloc dt=6 heapalloc_value=16167152 +HeapAlloc dt=6 heapalloc_value=16175344 +HeapAlloc dt=78 heapalloc_value=16183536 +HeapAlloc dt=7 heapalloc_value=16191728 +HeapAlloc dt=6 heapalloc_value=16199920 +HeapAlloc dt=6 heapalloc_value=16208112 +HeapAlloc dt=7 heapalloc_value=16216304 +HeapAlloc dt=6 heapalloc_value=16224496 +HeapAlloc dt=6 heapalloc_value=16232688 +HeapAlloc dt=6 heapalloc_value=16240880 +HeapAlloc dt=6 heapalloc_value=16249072 +HeapAlloc dt=7 heapalloc_value=16257264 +HeapAlloc dt=73 heapalloc_value=16265456 +HeapAlloc dt=8 heapalloc_value=16273648 +HeapAlloc dt=6 heapalloc_value=16281840 +HeapAlloc dt=6 heapalloc_value=16290032 +HeapAlloc dt=6 heapalloc_value=16298224 +HeapAlloc dt=7 heapalloc_value=16306416 +HeapAlloc dt=6 heapalloc_value=16314608 +HeapAlloc dt=6 heapalloc_value=16322800 +HeapAlloc dt=6 heapalloc_value=16330992 +HeapAlloc dt=7 heapalloc_value=16339184 +HeapAlloc dt=6 heapalloc_value=16347376 +HeapAlloc dt=8 heapalloc_value=16355568 +HeapAlloc dt=44 heapalloc_value=16363760 +HeapAlloc dt=7 heapalloc_value=16371952 +HeapAlloc dt=6 heapalloc_value=16380144 +HeapAlloc dt=6 heapalloc_value=16388336 +HeapAlloc dt=6 heapalloc_value=16396528 +HeapAlloc dt=7 heapalloc_value=16404720 +HeapAlloc dt=6 heapalloc_value=16412912 +HeapAlloc dt=6 heapalloc_value=16421104 +HeapAlloc dt=6 heapalloc_value=16429296 +HeapAlloc dt=7 heapalloc_value=16437488 +HeapAlloc dt=6 heapalloc_value=16445680 +HeapAlloc dt=6 heapalloc_value=16453872 +HeapAlloc dt=6 heapalloc_value=16462064 +HeapAlloc dt=6 heapalloc_value=16470256 +HeapAlloc dt=6 heapalloc_value=16478448 +HeapAlloc dt=7 heapalloc_value=16486640 +HeapAlloc dt=6 heapalloc_value=16494832 +GCBegin dt=18 gc_seq=5 stack=41 +STWBegin dt=46 kind_string=22 stack=42 +GoUnblock dt=209 g=4 g_seq=7 stack=43 +ProcsChange dt=70 procs_value=8 stack=44 +STWEnd dt=24 +GCMarkAssistBegin dt=182 stack=30 +GCMarkAssistEnd dt=3877 +HeapAlloc dt=628 heapalloc_value=16509392 +HeapAlloc dt=22 heapalloc_value=16517584 +HeapAlloc dt=18 heapalloc_value=16525776 +HeapAlloc dt=371 heapalloc_value=16533968 +HeapAlloc dt=14 heapalloc_value=16542160 +HeapAlloc dt=11 heapalloc_value=16550352 +HeapAlloc dt=13 heapalloc_value=16558544 +HeapAlloc dt=13 heapalloc_value=16566736 +HeapAlloc dt=10 heapalloc_value=16574928 +HeapAlloc dt=10 heapalloc_value=16583120 +HeapAlloc dt=8 heapalloc_value=16591312 +HeapAlloc dt=8 heapalloc_value=16599504 +HeapAlloc dt=8 heapalloc_value=16607696 +HeapAlloc dt=7 heapalloc_value=16615888 +HeapAlloc dt=8 heapalloc_value=16624080 +HeapAlloc dt=8 heapalloc_value=16632272 +HeapAlloc dt=9 heapalloc_value=16640464 +HeapAlloc dt=7 heapalloc_value=16648656 +HeapAlloc dt=8 heapalloc_value=16656848 +HeapAlloc dt=9 heapalloc_value=16665040 +HeapAlloc dt=8 heapalloc_value=16673232 +HeapAlloc dt=9 heapalloc_value=16681424 +HeapAlloc dt=8 heapalloc_value=16689616 +GoBlock dt=17 reason_string=19 stack=21 +ProcStop dt=2869 +ProcStart dt=110180 p=4 p_seq=5 +GoStart dt=268 g=15 g_seq=1 +GoStop dt=304685 reason_string=16 stack=52 +GoStart dt=20 g=15 g_seq=2 +GoStop dt=316415 reason_string=16 stack=52 +GoStart dt=23 g=15 g_seq=3 +GoDestroy dt=160136 +ProcStop dt=32 +EventBatch gen=1 m=2852344 time=420901833895 size=3430 +ProcStart dt=383 p=2 p_seq=3 +GoStart dt=284 g=7 g_seq=1 +HeapAlloc dt=35 heapalloc_value=4055040 +GoBlock dt=148 reason_string=15 stack=26 +ProcStop dt=12 +ProcStart dt=791 p=1 p_seq=8 +ProcStop dt=4 +ProcStart dt=817 p=1 p_seq=9 +ProcStop dt=14 +ProcStart dt=796 p=0 p_seq=21 +ProcStop dt=9 +ProcStart dt=393 p=1 p_seq=11 +ProcStop dt=19 +ProcStart dt=324 p=2 p_seq=9 +GoStart dt=339 g=25 g_seq=1 +GoBlock dt=112 reason_string=15 stack=26 +ProcStop dt=4 +ProcStart dt=1331 p=1 p_seq=15 +GoUnblock dt=13 g=9 g_seq=2 stack=0 +GoStart dt=145 g=9 g_seq=3 +GoLabel dt=1 label_string=2 +STWBegin dt=4838 kind_string=23 stack=34 +GoUnblock dt=44 g=1 g_seq=18 stack=35 +HeapAlloc dt=17 heapalloc_value=4112624 +GoStatus dt=15 g=3 m=18446744073709551615 gstatus=4 +GoUnblock dt=5 g=3 g_seq=1 stack=36 +GCEnd dt=4 gc_seq=2 +HeapGoal dt=5 heapgoal_value=8644048 +ProcsChange dt=37 procs_value=8 stack=37 +STWEnd dt=1475 +GoBlock dt=2304 reason_string=15 stack=26 +GoStart dt=12 g=3 g_seq=2 +GoBlock dt=2449 reason_string=14 stack=40 +ProcStop dt=16 +ProcStart dt=67967 p=1 p_seq=19 +GoUnblock dt=21 g=9 g_seq=4 stack=0 +GoStart dt=191 g=9 g_seq=5 +GoLabel dt=1 label_string=2 +GoStop dt=4205 reason_string=16 stack=45 +GoStart dt=189 g=9 g_seq=6 +STWBegin dt=1152 kind_string=23 stack=34 +GoUnblock dt=46 g=1 g_seq=29 stack=35 +HeapAlloc dt=17 heapalloc_value=8626416 +GoUnblock dt=11 g=3 g_seq=3 stack=36 +GCEnd dt=5 gc_seq=4 +HeapGoal dt=5 heapgoal_value=17671632 +ProcsChange dt=43 procs_value=8 stack=37 +STWEnd dt=28 +GoBlock dt=1941 reason_string=15 stack=26 +GoStart dt=12 g=3 g_seq=4 +GoBlock dt=4694 reason_string=14 stack=40 +GoUnblock dt=33 g=1 g_seq=31 stack=0 +GoStart dt=214 g=1 g_seq=32 +HeapAlloc dt=62 heapalloc_value=8646896 +HeapAlloc dt=32 heapalloc_value=8655088 +HeapAlloc dt=18 heapalloc_value=8663280 +HeapAlloc dt=18 heapalloc_value=8671472 +HeapAlloc dt=15 heapalloc_value=8679664 +HeapAlloc dt=18 heapalloc_value=8687856 +HeapAlloc dt=17 heapalloc_value=8696048 +HeapAlloc dt=17 heapalloc_value=8704240 +HeapAlloc dt=19 heapalloc_value=8712432 +HeapAlloc dt=24 heapalloc_value=8720624 +HeapAlloc dt=20 heapalloc_value=8728816 +HeapAlloc dt=31 heapalloc_value=8737008 +HeapAlloc dt=19 heapalloc_value=8745200 +HeapAlloc dt=14 heapalloc_value=8753392 +HeapAlloc dt=14 heapalloc_value=8761584 +HeapAlloc dt=15 heapalloc_value=8769776 +HeapAlloc dt=17 heapalloc_value=8777968 +HeapAlloc dt=16 heapalloc_value=8786160 +HeapAlloc dt=16 heapalloc_value=8794352 +HeapAlloc dt=13 heapalloc_value=8802544 +HeapAlloc dt=14 heapalloc_value=8810736 +HeapAlloc dt=12 heapalloc_value=8818928 +HeapAlloc dt=38 heapalloc_value=9040112 +HeapAlloc dt=3065 heapalloc_value=9048304 +HeapAlloc dt=21 heapalloc_value=9056496 +HeapAlloc dt=16 heapalloc_value=9064688 +HeapAlloc dt=22 heapalloc_value=9072880 +HeapAlloc dt=37 heapalloc_value=9081072 +HeapAlloc dt=28 heapalloc_value=9089264 +HeapAlloc dt=30 heapalloc_value=9097456 +HeapAlloc dt=22 heapalloc_value=9105648 +HeapAlloc dt=36 heapalloc_value=9113840 +HeapAlloc dt=30 heapalloc_value=9122032 +HeapAlloc dt=28 heapalloc_value=9130224 +HeapAlloc dt=26 heapalloc_value=9138416 +HeapAlloc dt=27 heapalloc_value=9146608 +HeapAlloc dt=31 heapalloc_value=9154800 +HeapAlloc dt=37 heapalloc_value=9162992 +HeapAlloc dt=24 heapalloc_value=9171184 +HeapAlloc dt=27 heapalloc_value=9179376 +HeapAlloc dt=26 heapalloc_value=9187568 +HeapAlloc dt=34 heapalloc_value=9195760 +HeapAlloc dt=30 heapalloc_value=9203952 +HeapAlloc dt=30 heapalloc_value=9212144 +HeapAlloc dt=30 heapalloc_value=9220336 +HeapAlloc dt=29 heapalloc_value=9228528 +HeapAlloc dt=28 heapalloc_value=9236720 +HeapAlloc dt=46 heapalloc_value=9244912 +HeapAlloc dt=118 heapalloc_value=9253104 +HeapAlloc dt=31 heapalloc_value=9261296 +HeapAlloc dt=39 heapalloc_value=9269488 +HeapAlloc dt=27 heapalloc_value=9277680 +HeapAlloc dt=32 heapalloc_value=9285872 +HeapAlloc dt=27 heapalloc_value=9294064 +HeapAlloc dt=32 heapalloc_value=9302256 +HeapAlloc dt=33 heapalloc_value=9310448 +HeapAlloc dt=39 heapalloc_value=9318640 +HeapAlloc dt=30 heapalloc_value=9326832 +HeapAlloc dt=33 heapalloc_value=9335024 +HeapAlloc dt=28 heapalloc_value=9343216 +HeapAlloc dt=27 heapalloc_value=9351408 +HeapAlloc dt=27 heapalloc_value=9359600 +HeapAlloc dt=26 heapalloc_value=9367792 +HeapAlloc dt=36 heapalloc_value=9375984 +HeapAlloc dt=20 heapalloc_value=9384176 +HeapAlloc dt=16 heapalloc_value=9392368 +HeapAlloc dt=17 heapalloc_value=9400560 +HeapAlloc dt=22 heapalloc_value=9408752 +HeapAlloc dt=7 heapalloc_value=9416944 +HeapAlloc dt=49 heapalloc_value=9425136 +HeapAlloc dt=7 heapalloc_value=9433328 +HeapAlloc dt=7 heapalloc_value=9441520 +HeapAlloc dt=74 heapalloc_value=9449712 +HeapAlloc dt=8 heapalloc_value=9457904 +HeapAlloc dt=6 heapalloc_value=9466096 +HeapAlloc dt=7 heapalloc_value=9474288 +HeapAlloc dt=6 heapalloc_value=9482480 +HeapAlloc dt=6 heapalloc_value=9490672 +HeapAlloc dt=7 heapalloc_value=9498864 +HeapAlloc dt=6 heapalloc_value=9507056 +HeapAlloc dt=6 heapalloc_value=9515248 +HeapAlloc dt=6 heapalloc_value=9523440 +HeapAlloc dt=6 heapalloc_value=9531632 +HeapAlloc dt=6 heapalloc_value=9539824 +HeapAlloc dt=7 heapalloc_value=9548016 +HeapAlloc dt=7 heapalloc_value=9556208 +HeapAlloc dt=5 heapalloc_value=9564400 +HeapAlloc dt=7 heapalloc_value=9572592 +HeapAlloc dt=6 heapalloc_value=9580784 +HeapAlloc dt=6 heapalloc_value=9588976 +HeapAlloc dt=6 heapalloc_value=9597168 +HeapAlloc dt=6 heapalloc_value=9605360 +HeapAlloc dt=6 heapalloc_value=9613552 +HeapAlloc dt=7 heapalloc_value=9621744 +HeapAlloc dt=6 heapalloc_value=9629936 +HeapAlloc dt=43 heapalloc_value=9638128 +HeapAlloc dt=7 heapalloc_value=9646320 +HeapAlloc dt=7 heapalloc_value=9654512 +HeapAlloc dt=6 heapalloc_value=9662704 +HeapAlloc dt=6 heapalloc_value=9670896 +HeapAlloc dt=6 heapalloc_value=9679088 +HeapAlloc dt=10 heapalloc_value=9687280 +HeapAlloc dt=7 heapalloc_value=9695472 +HeapAlloc dt=8 heapalloc_value=9703664 +HeapAlloc dt=726 heapalloc_value=9711856 +HeapAlloc dt=16 heapalloc_value=9720048 +HeapAlloc dt=7 heapalloc_value=9728240 +HeapAlloc dt=6 heapalloc_value=9736432 +HeapAlloc dt=6 heapalloc_value=9744624 +HeapAlloc dt=6 heapalloc_value=9752816 +HeapAlloc dt=7 heapalloc_value=9761008 +HeapAlloc dt=6 heapalloc_value=9769200 +HeapAlloc dt=63 heapalloc_value=9777392 +HeapAlloc dt=8 heapalloc_value=9785584 +HeapAlloc dt=6 heapalloc_value=9793776 +HeapAlloc dt=7 heapalloc_value=9801968 +HeapAlloc dt=7 heapalloc_value=9810160 +HeapAlloc dt=6 heapalloc_value=9818352 +HeapAlloc dt=6 heapalloc_value=9826544 +HeapAlloc dt=7 heapalloc_value=9834736 +HeapAlloc dt=43 heapalloc_value=9842928 +HeapAlloc dt=7 heapalloc_value=9851120 +HeapAlloc dt=7 heapalloc_value=9859312 +HeapAlloc dt=6 heapalloc_value=9867504 +HeapAlloc dt=6 heapalloc_value=9875696 +HeapAlloc dt=6 heapalloc_value=9883888 +GoBlock dt=13 reason_string=19 stack=21 +ProcStop dt=225 +ProcStart dt=17576 p=0 p_seq=37 +ProcStop dt=18 +ProcStart dt=2169 p=1 p_seq=22 +ProcStop dt=14 +ProcStart dt=16799 p=1 p_seq=23 +GoUnblock dt=15 g=1 g_seq=35 stack=0 +GoStart dt=168 g=1 g_seq=36 +HeapAlloc dt=44 heapalloc_value=10916080 +HeapAlloc dt=18 heapalloc_value=10924272 +HeapAlloc dt=13 heapalloc_value=10932464 +HeapAlloc dt=12 heapalloc_value=10940656 +HeapAlloc dt=11 heapalloc_value=10948848 +HeapAlloc dt=12 heapalloc_value=10957040 +HeapAlloc dt=9 heapalloc_value=10965232 +HeapAlloc dt=11 heapalloc_value=10973424 +HeapAlloc dt=9 heapalloc_value=10981616 +HeapAlloc dt=9 heapalloc_value=10989808 +HeapAlloc dt=6 heapalloc_value=10998000 +HeapAlloc dt=6 heapalloc_value=11006192 +HeapAlloc dt=7 heapalloc_value=11014384 +HeapAlloc dt=303 heapalloc_value=11022576 +HeapAlloc dt=15 heapalloc_value=11030768 +HeapAlloc dt=8 heapalloc_value=11038960 +HeapAlloc dt=6 heapalloc_value=11047152 +HeapAlloc dt=7 heapalloc_value=11055344 +HeapAlloc dt=6 heapalloc_value=11063536 +HeapAlloc dt=6 heapalloc_value=11071728 +HeapAlloc dt=6 heapalloc_value=11079920 +HeapAlloc dt=9 heapalloc_value=11088112 +HeapAlloc dt=6 heapalloc_value=11096304 +HeapAlloc dt=52 heapalloc_value=11104496 +HeapAlloc dt=8 heapalloc_value=11112688 +HeapAlloc dt=7 heapalloc_value=11120880 +HeapAlloc dt=6 heapalloc_value=11129072 +HeapAlloc dt=7 heapalloc_value=11137264 +HeapAlloc dt=396 heapalloc_value=11423984 +HeapAlloc dt=2772 heapalloc_value=11432176 +HeapAlloc dt=23 heapalloc_value=11440368 +HeapAlloc dt=13 heapalloc_value=11448560 +HeapAlloc dt=10 heapalloc_value=11456752 +HeapAlloc dt=9 heapalloc_value=11464944 +HeapAlloc dt=9 heapalloc_value=11473136 +HeapAlloc dt=9 heapalloc_value=11481328 +HeapAlloc dt=9 heapalloc_value=11489520 +HeapAlloc dt=9 heapalloc_value=11497712 +HeapAlloc dt=12 heapalloc_value=11505904 +HeapAlloc dt=9 heapalloc_value=11514096 +HeapAlloc dt=10 heapalloc_value=11522288 +HeapAlloc dt=9 heapalloc_value=11530480 +HeapAlloc dt=10 heapalloc_value=11538672 +HeapAlloc dt=10 heapalloc_value=11546864 +HeapAlloc dt=10 heapalloc_value=11555056 +HeapAlloc dt=9 heapalloc_value=11563248 +HeapAlloc dt=21 heapalloc_value=11571440 +HeapAlloc dt=9 heapalloc_value=11579632 +HeapAlloc dt=6 heapalloc_value=11587824 +HeapAlloc dt=7 heapalloc_value=11596016 +HeapAlloc dt=6 heapalloc_value=11604208 +HeapAlloc dt=6 heapalloc_value=11612400 +HeapAlloc dt=6 heapalloc_value=11620592 +HeapAlloc dt=103 heapalloc_value=11628784 +HeapAlloc dt=9 heapalloc_value=11636976 +HeapAlloc dt=7 heapalloc_value=11645168 +HeapAlloc dt=6 heapalloc_value=11653360 +HeapAlloc dt=7 heapalloc_value=11661552 +HeapAlloc dt=6 heapalloc_value=11669744 +HeapAlloc dt=6 heapalloc_value=11677936 +HeapAlloc dt=6 heapalloc_value=11686128 +HeapAlloc dt=6 heapalloc_value=11694320 +HeapAlloc dt=7 heapalloc_value=11702512 +HeapAlloc dt=6 heapalloc_value=11710704 +HeapAlloc dt=6 heapalloc_value=11718896 +HeapAlloc dt=6 heapalloc_value=11727088 +HeapAlloc dt=6 heapalloc_value=11735280 +HeapAlloc dt=6 heapalloc_value=11743472 +HeapAlloc dt=6 heapalloc_value=11751664 +HeapAlloc dt=6 heapalloc_value=11759856 +HeapAlloc dt=7 heapalloc_value=11768048 +HeapAlloc dt=5 heapalloc_value=11776240 +HeapAlloc dt=7 heapalloc_value=11784432 +HeapAlloc dt=6 heapalloc_value=11792624 +HeapAlloc dt=44 heapalloc_value=11800816 +HeapAlloc dt=82 heapalloc_value=11809008 +HeapAlloc dt=9 heapalloc_value=11817200 +HeapAlloc dt=6 heapalloc_value=11825392 +HeapAlloc dt=6 heapalloc_value=11833584 +HeapAlloc dt=7 heapalloc_value=11841776 +HeapAlloc dt=6 heapalloc_value=11849968 +HeapAlloc dt=6 heapalloc_value=11858160 +HeapAlloc dt=6 heapalloc_value=11866352 +HeapAlloc dt=7 heapalloc_value=11874544 +HeapAlloc dt=6 heapalloc_value=11882736 +HeapAlloc dt=6 heapalloc_value=11890928 +HeapAlloc dt=6 heapalloc_value=11899120 +HeapAlloc dt=6 heapalloc_value=11907312 +HeapAlloc dt=7 heapalloc_value=11915504 +HeapAlloc dt=6 heapalloc_value=11923696 +HeapAlloc dt=6 heapalloc_value=11931888 +HeapAlloc dt=6 heapalloc_value=11940080 +HeapAlloc dt=6 heapalloc_value=11948272 +HeapAlloc dt=6 heapalloc_value=11956464 +HeapAlloc dt=6 heapalloc_value=11964656 +HeapAlloc dt=6 heapalloc_value=11972848 +HeapAlloc dt=7 heapalloc_value=11981040 +HeapAlloc dt=6 heapalloc_value=11989232 +HeapAlloc dt=6 heapalloc_value=11997424 +HeapAlloc dt=6 heapalloc_value=12005616 +HeapAlloc dt=7 heapalloc_value=12013808 +HeapAlloc dt=6 heapalloc_value=12022000 +HeapAlloc dt=6 heapalloc_value=12030192 +HeapAlloc dt=6 heapalloc_value=12038384 +HeapAlloc dt=6 heapalloc_value=12046576 +HeapAlloc dt=6 heapalloc_value=12054768 +HeapAlloc dt=6 heapalloc_value=12062960 +HeapAlloc dt=67 heapalloc_value=12071152 +HeapAlloc dt=8 heapalloc_value=12079344 +HeapAlloc dt=7 heapalloc_value=12087536 +HeapAlloc dt=6 heapalloc_value=12095728 +HeapAlloc dt=6 heapalloc_value=12103920 +HeapAlloc dt=6 heapalloc_value=12112112 +HeapAlloc dt=6 heapalloc_value=12120304 +HeapAlloc dt=6 heapalloc_value=12128496 +HeapAlloc dt=6 heapalloc_value=12136688 +HeapAlloc dt=6 heapalloc_value=12144880 +HeapAlloc dt=59 heapalloc_value=12153072 +HeapAlloc dt=8 heapalloc_value=12161264 +HeapAlloc dt=6 heapalloc_value=12169456 +HeapAlloc dt=6 heapalloc_value=12177648 +HeapAlloc dt=6 heapalloc_value=12185840 +HeapAlloc dt=6 heapalloc_value=12194032 +HeapAlloc dt=7 heapalloc_value=12202224 +HeapAlloc dt=6 heapalloc_value=12210416 +HeapAlloc dt=6 heapalloc_value=12218608 +GoBlock dt=12 reason_string=19 stack=21 +ProcStop dt=223 +ProcStart dt=12071 p=1 p_seq=25 +GoUnblock dt=11 g=1 g_seq=37 stack=0 +GoStart dt=161 g=1 g_seq=38 +HeapAlloc dt=75 heapalloc_value=12226800 +HeapAlloc dt=11 heapalloc_value=12234992 +HeapAlloc dt=6 heapalloc_value=12243184 +HeapAlloc dt=6 heapalloc_value=12251376 +HeapAlloc dt=7 heapalloc_value=12259568 +HeapAlloc dt=6 heapalloc_value=12267760 +HeapAlloc dt=6 heapalloc_value=12275952 +HeapAlloc dt=6 heapalloc_value=12284144 +HeapAlloc dt=6 heapalloc_value=12292336 +HeapAlloc dt=7 heapalloc_value=12300528 +HeapAlloc dt=6 heapalloc_value=12308720 +HeapAlloc dt=6 heapalloc_value=12316912 +HeapAlloc dt=7 heapalloc_value=12325104 +HeapAlloc dt=87 heapalloc_value=12333296 +HeapAlloc dt=25 heapalloc_value=12341488 +HeapAlloc dt=7 heapalloc_value=12349680 +HeapAlloc dt=6 heapalloc_value=12357872 +HeapAlloc dt=7 heapalloc_value=12366064 +HeapAlloc dt=10 heapalloc_value=12374256 +HeapAlloc dt=7 heapalloc_value=12382448 +HeapAlloc dt=9 heapalloc_value=12390640 +HeapAlloc dt=6 heapalloc_value=12398832 +HeapAlloc dt=6 heapalloc_value=12407024 +HeapAlloc dt=7 heapalloc_value=12415216 +HeapAlloc dt=6 heapalloc_value=12423408 +HeapAlloc dt=44 heapalloc_value=12431600 +HeapAlloc dt=7 heapalloc_value=12439792 +HeapAlloc dt=7 heapalloc_value=12447984 +HeapAlloc dt=6 heapalloc_value=12456176 +HeapAlloc dt=6 heapalloc_value=12464368 +HeapAlloc dt=6 heapalloc_value=12472560 +HeapAlloc dt=6 heapalloc_value=12480752 +HeapAlloc dt=7 heapalloc_value=12488944 +HeapAlloc dt=6 heapalloc_value=12497136 +HeapAlloc dt=6 heapalloc_value=12505328 +HeapAlloc dt=6 heapalloc_value=12513520 +HeapAlloc dt=6 heapalloc_value=12521712 +HeapAlloc dt=7 heapalloc_value=12529904 +HeapAlloc dt=6 heapalloc_value=12538096 +HeapAlloc dt=6 heapalloc_value=12546288 +HeapAlloc dt=6 heapalloc_value=12554480 +HeapAlloc dt=6 heapalloc_value=12562672 +HeapAlloc dt=6 heapalloc_value=12570864 +HeapAlloc dt=11 heapalloc_value=12579056 +HeapAlloc dt=6 heapalloc_value=12587248 +HeapAlloc dt=455 heapalloc_value=12595440 +HeapAlloc dt=12 heapalloc_value=12603632 +HeapAlloc dt=7 heapalloc_value=12611824 +HeapAlloc dt=6 heapalloc_value=12620016 +HeapAlloc dt=7 heapalloc_value=12628208 +HeapAlloc dt=6 heapalloc_value=12636400 +HeapAlloc dt=6 heapalloc_value=12644592 +HeapAlloc dt=6 heapalloc_value=12652784 +HeapAlloc dt=7 heapalloc_value=12660976 +HeapAlloc dt=6 heapalloc_value=12669168 +HeapAlloc dt=97 heapalloc_value=12677360 +HeapAlloc dt=8 heapalloc_value=12685552 +HeapAlloc dt=6 heapalloc_value=12693744 +HeapAlloc dt=6 heapalloc_value=12701936 +HeapAlloc dt=6 heapalloc_value=12710128 +HeapAlloc dt=6 heapalloc_value=12718320 +HeapAlloc dt=6 heapalloc_value=12726512 +HeapAlloc dt=7 heapalloc_value=12734704 +HeapAlloc dt=6 heapalloc_value=12742896 +HeapAlloc dt=6 heapalloc_value=12751088 +HeapAlloc dt=6 heapalloc_value=12759280 +HeapAlloc dt=7 heapalloc_value=12767472 +HeapAlloc dt=7 heapalloc_value=12775664 +HeapAlloc dt=6 heapalloc_value=12783856 +HeapAlloc dt=6 heapalloc_value=12792048 +HeapAlloc dt=6 heapalloc_value=12800240 +HeapAlloc dt=7 heapalloc_value=12808432 +HeapAlloc dt=6 heapalloc_value=12816624 +HeapAlloc dt=6 heapalloc_value=12824816 +HeapAlloc dt=6 heapalloc_value=12833008 +HeapAlloc dt=6 heapalloc_value=12841200 +HeapAlloc dt=42 heapalloc_value=12849392 +HeapAlloc dt=79 heapalloc_value=12857584 +HeapAlloc dt=8 heapalloc_value=12865776 +HeapAlloc dt=6 heapalloc_value=12873968 +HeapAlloc dt=6 heapalloc_value=12882160 +HeapAlloc dt=7 heapalloc_value=12890352 +HeapAlloc dt=6 heapalloc_value=12898544 +HeapAlloc dt=6 heapalloc_value=12906736 +HeapAlloc dt=6 heapalloc_value=12914928 +HeapAlloc dt=7 heapalloc_value=12923120 +HeapAlloc dt=6 heapalloc_value=12931312 +HeapAlloc dt=6 heapalloc_value=12939504 +HeapAlloc dt=6 heapalloc_value=12947696 +HeapAlloc dt=6 heapalloc_value=12955888 +HeapAlloc dt=6 heapalloc_value=12964080 +HeapAlloc dt=6 heapalloc_value=12972272 +HeapAlloc dt=6 heapalloc_value=12980464 +HeapAlloc dt=7 heapalloc_value=12988656 +HeapAlloc dt=6 heapalloc_value=12996848 +HeapAlloc dt=6 heapalloc_value=13005040 +HeapAlloc dt=6 heapalloc_value=13013232 +HeapAlloc dt=7 heapalloc_value=13021424 +HeapAlloc dt=6 heapalloc_value=13029616 +HeapAlloc dt=6 heapalloc_value=13037808 +HeapAlloc dt=6 heapalloc_value=13046000 +HeapAlloc dt=6 heapalloc_value=13054192 +HeapAlloc dt=7 heapalloc_value=13062384 +HeapAlloc dt=6 heapalloc_value=13070576 +HeapAlloc dt=6 heapalloc_value=13078768 +HeapAlloc dt=6 heapalloc_value=13086960 +HeapAlloc dt=6 heapalloc_value=13095152 +HeapAlloc dt=7 heapalloc_value=13103344 +HeapAlloc dt=6 heapalloc_value=13111536 +HeapAlloc dt=67 heapalloc_value=13119728 +HeapAlloc dt=8 heapalloc_value=13127920 +HeapAlloc dt=6 heapalloc_value=13136112 +HeapAlloc dt=6 heapalloc_value=13144304 +HeapAlloc dt=7 heapalloc_value=13152496 +HeapAlloc dt=6 heapalloc_value=13160688 +HeapAlloc dt=6 heapalloc_value=13168880 +HeapAlloc dt=6 heapalloc_value=13177072 +HeapAlloc dt=6 heapalloc_value=13185264 +HeapAlloc dt=6 heapalloc_value=13193456 +HeapAlloc dt=105 heapalloc_value=13201648 +HeapAlloc dt=8 heapalloc_value=13209840 +HeapAlloc dt=6 heapalloc_value=13218032 +HeapAlloc dt=6 heapalloc_value=13226224 +HeapAlloc dt=6 heapalloc_value=13234416 +HeapAlloc dt=6 heapalloc_value=13242608 +GoBlock dt=10 reason_string=19 stack=21 +ProcStop dt=13 +ProcStart dt=3484 p=2 p_seq=18 +ProcStop dt=18 +ProcStart dt=5821 p=1 p_seq=27 +ProcStop dt=12 +ProcStart dt=16793 p=1 p_seq=28 +GoUnblock dt=16 g=1 g_seq=41 stack=0 +GoStart dt=193 g=1 g_seq=42 +HeapAlloc dt=36 heapalloc_value=14643440 +HeapAlloc dt=29 heapalloc_value=14651632 +HeapAlloc dt=16 heapalloc_value=14659824 +HeapAlloc dt=20 heapalloc_value=14668016 +HeapAlloc dt=13 heapalloc_value=14676208 +HeapAlloc dt=84 heapalloc_value=14684400 +HeapAlloc dt=17 heapalloc_value=14692592 +HeapAlloc dt=12 heapalloc_value=14700784 +HeapAlloc dt=12 heapalloc_value=14708976 +HeapAlloc dt=12 heapalloc_value=14717168 +HeapAlloc dt=12 heapalloc_value=14725360 +HeapAlloc dt=22 heapalloc_value=14733552 +HeapAlloc dt=12 heapalloc_value=14741744 +HeapAlloc dt=13 heapalloc_value=14749936 +HeapAlloc dt=12 heapalloc_value=14758128 +HeapAlloc dt=11 heapalloc_value=14766320 +HeapAlloc dt=13 heapalloc_value=14774512 +HeapAlloc dt=12 heapalloc_value=14782704 +HeapAlloc dt=12 heapalloc_value=14790896 +HeapAlloc dt=61 heapalloc_value=14799088 +HeapAlloc dt=13 heapalloc_value=14807280 +HeapAlloc dt=7 heapalloc_value=14815472 +HeapAlloc dt=11 heapalloc_value=14823664 +HeapAlloc dt=9 heapalloc_value=14831856 +HeapAlloc dt=11 heapalloc_value=14840048 +HeapAlloc dt=6 heapalloc_value=14848240 +HeapAlloc dt=7 heapalloc_value=14856432 +HeapAlloc dt=9 heapalloc_value=14864624 +HeapAlloc dt=6 heapalloc_value=14872816 +HeapAlloc dt=6 heapalloc_value=14881008 +HeapAlloc dt=46 heapalloc_value=14889200 +HeapAlloc dt=8 heapalloc_value=14897392 +HeapAlloc dt=6 heapalloc_value=14905584 +HeapAlloc dt=7 heapalloc_value=14913776 +HeapAlloc dt=6 heapalloc_value=14921968 +HeapAlloc dt=7 heapalloc_value=14930160 +HeapAlloc dt=7 heapalloc_value=14938352 +HeapAlloc dt=6 heapalloc_value=14946544 +HeapAlloc dt=155 heapalloc_value=14954736 +HeapAlloc dt=9 heapalloc_value=14962928 +HeapAlloc dt=6 heapalloc_value=14971120 +HeapAlloc dt=7 heapalloc_value=14979312 +HeapAlloc dt=6 heapalloc_value=14987504 +HeapAlloc dt=6 heapalloc_value=14995696 +HeapAlloc dt=6 heapalloc_value=15003888 +HeapAlloc dt=6 heapalloc_value=15012080 +HeapAlloc dt=8 heapalloc_value=15020272 +HeapAlloc dt=6 heapalloc_value=15028464 +HeapAlloc dt=7 heapalloc_value=15036656 +HeapAlloc dt=6 heapalloc_value=15044848 +HeapAlloc dt=6 heapalloc_value=15053040 +HeapAlloc dt=6 heapalloc_value=15061232 +HeapAlloc dt=6 heapalloc_value=15069424 +HeapAlloc dt=6 heapalloc_value=15077616 +HeapAlloc dt=8 heapalloc_value=15085808 +HeapAlloc dt=6 heapalloc_value=15094000 +HeapAlloc dt=7 heapalloc_value=15102192 +HeapAlloc dt=6 heapalloc_value=15110384 +HeapAlloc dt=6 heapalloc_value=15118576 +HeapAlloc dt=6 heapalloc_value=15126768 +HeapAlloc dt=68 heapalloc_value=15134960 +HeapAlloc dt=8 heapalloc_value=15143152 +HeapAlloc dt=6 heapalloc_value=15151344 +HeapAlloc dt=6 heapalloc_value=15159536 +HeapAlloc dt=6 heapalloc_value=15167728 +HeapAlloc dt=6 heapalloc_value=15175920 +HeapAlloc dt=6 heapalloc_value=15184112 +HeapAlloc dt=6 heapalloc_value=15192304 +HeapAlloc dt=6 heapalloc_value=15200496 +HeapAlloc dt=6 heapalloc_value=15208688 +HeapAlloc dt=68 heapalloc_value=15216880 +HeapAlloc dt=8 heapalloc_value=15225072 +HeapAlloc dt=7 heapalloc_value=15233264 +HeapAlloc dt=6 heapalloc_value=15241456 +HeapAlloc dt=6 heapalloc_value=15249648 +HeapAlloc dt=7 heapalloc_value=15257840 +HeapAlloc dt=6 heapalloc_value=15266032 +HeapAlloc dt=6 heapalloc_value=15274224 +HeapAlloc dt=8 heapalloc_value=15282416 +HeapAlloc dt=6 heapalloc_value=15290608 +HeapAlloc dt=7 heapalloc_value=15298800 +HeapAlloc dt=43 heapalloc_value=15306992 +HeapAlloc dt=7 heapalloc_value=15315184 +HeapAlloc dt=6 heapalloc_value=15323376 +HeapAlloc dt=7 heapalloc_value=15331568 +HeapAlloc dt=6 heapalloc_value=15339760 +HeapAlloc dt=8 heapalloc_value=15347952 +HeapAlloc dt=6 heapalloc_value=15356144 +HeapAlloc dt=6 heapalloc_value=15364336 +HeapAlloc dt=7 heapalloc_value=15372528 +HeapAlloc dt=6 heapalloc_value=15380720 +HeapAlloc dt=6 heapalloc_value=15388912 +HeapAlloc dt=6 heapalloc_value=15397104 +HeapAlloc dt=7 heapalloc_value=15405296 +HeapAlloc dt=8 heapalloc_value=15413488 +HeapAlloc dt=6 heapalloc_value=15421680 +HeapAlloc dt=6 heapalloc_value=15429872 +HeapAlloc dt=6 heapalloc_value=15438064 +HeapAlloc dt=7 heapalloc_value=15446256 +HeapAlloc dt=7 heapalloc_value=15454448 +HeapAlloc dt=6 heapalloc_value=15462640 +HeapAlloc dt=6 heapalloc_value=15470832 +HeapAlloc dt=470 heapalloc_value=15479024 +HeapAlloc dt=14 heapalloc_value=15487216 +HeapAlloc dt=6 heapalloc_value=15495408 +HeapAlloc dt=7 heapalloc_value=15503600 +HeapAlloc dt=6 heapalloc_value=15511792 +HeapAlloc dt=7 heapalloc_value=15519984 +HeapAlloc dt=6 heapalloc_value=15528176 +HeapAlloc dt=6 heapalloc_value=15536368 +HeapAlloc dt=6 heapalloc_value=15544560 +HeapAlloc dt=5 heapalloc_value=15552752 +HeapAlloc dt=6 heapalloc_value=15560944 +HeapAlloc dt=6 heapalloc_value=15569136 +HeapAlloc dt=6 heapalloc_value=15577328 +HeapAlloc dt=6 heapalloc_value=15585520 +HeapAlloc dt=6 heapalloc_value=15593712 +HeapAlloc dt=6 heapalloc_value=15601904 +HeapAlloc dt=6 heapalloc_value=15610096 +HeapAlloc dt=6 heapalloc_value=15618288 +HeapAlloc dt=6 heapalloc_value=15626480 +HeapAlloc dt=6 heapalloc_value=15634672 +HeapAlloc dt=6 heapalloc_value=15642864 +HeapAlloc dt=6 heapalloc_value=15651056 +HeapAlloc dt=77 heapalloc_value=15659248 +GoBlock dt=13 reason_string=19 stack=21 +ProcStop dt=214 +ProcStart dt=17833 p=2 p_seq=20 +ProcStop dt=18 +ProcStart dt=9948 p=4 p_seq=4 +ProcStop dt=23 +ProcStart dt=5868 p=3 p_seq=6 +ProcStop dt=25 +ProcStart dt=94440 p=3 p_seq=7 +ProcStop dt=17 +ProcStart dt=7801 p=3 p_seq=8 +GoStart dt=172 g=13 g_seq=1 +GoStop dt=306385 reason_string=16 stack=52 +GoStart dt=19 g=13 g_seq=2 +GoStop dt=316412 reason_string=16 stack=52 +GoStart dt=14 g=13 g_seq=3 +GoDestroy dt=158437 +ProcStop dt=31 +EventBatch gen=1 m=2852342 time=420901452973 size=3683 +ProcStart dt=335 p=2 p_seq=1 +GoStart dt=164 g=21 g_seq=1 +HeapAlloc dt=242 heapalloc_value=1654784 +GoSyscallBegin dt=3053 p_seq=2 stack=17 +GoSyscallEnd dt=264 +GoBlock dt=22 reason_string=15 stack=18 +ProcStop dt=21 +ProcStart dt=370120 p=0 p_seq=11 +ProcStop dt=21 +ProcStart dt=7624 p=1 p_seq=5 +ProcStop dt=18 +ProcStart dt=386 p=2 p_seq=4 +GoStart dt=180 g=24 g_seq=1 +GoBlock dt=122 reason_string=15 stack=26 +ProcStop dt=14 +ProcStart dt=378 p=2 p_seq=7 +ProcStop dt=16 +ProcStart dt=1400 p=2 p_seq=8 +GoStart dt=127 g=9 g_seq=1 +GoBlock dt=106 reason_string=15 stack=26 +ProcStop dt=5 +ProcStart dt=482 p=1 p_seq=14 +ProcStop dt=11 +ProcStart dt=2026 p=3 p_seq=2 +HeapAlloc dt=470 heapalloc_value=4079616 +HeapAlloc dt=451 heapalloc_value=4128768 +HeapAlloc dt=21 heapalloc_value=4136960 +GoStart dt=1190 g=4 g_seq=2 +GoBlock dt=29 reason_string=15 stack=32 +ProcStop dt=34 +ProcStart dt=77810 p=3 p_seq=3 +ProcStop dt=32 +ProcStart dt=600 p=3 p_seq=4 +GoUnblock dt=14 g=25 g_seq=6 stack=0 +GoStart dt=184 g=25 g_seq=7 +GoLabel dt=3 label_string=2 +GoBlock dt=145 reason_string=15 stack=26 +ProcStop dt=27 +ProcStart dt=122643 p=3 p_seq=5 +GoStart dt=236 g=4 g_seq=8 +GoBlock dt=24 reason_string=15 stack=32 +GoUnblock dt=25 g=8 g_seq=4 stack=0 +GoStart dt=9 g=8 g_seq=5 +GoLabel dt=1 label_string=4 +GoBlock dt=1341 reason_string=15 stack=26 +GoUnblock dt=4399 g=1 g_seq=45 stack=0 +GoStart dt=12 g=1 g_seq=46 +HeapAlloc dt=416 heapalloc_value=16705232 +HeapAlloc dt=47 heapalloc_value=16721328 +HeapAlloc dt=35 heapalloc_value=16729520 +HeapAlloc dt=24 heapalloc_value=16737712 +HeapAlloc dt=26 heapalloc_value=16745904 +HeapAlloc dt=24 heapalloc_value=16754096 +HeapAlloc dt=13 heapalloc_value=16762288 +HeapAlloc dt=15 heapalloc_value=16770480 +HeapAlloc dt=14 heapalloc_value=16778672 +HeapAlloc dt=14 heapalloc_value=16786864 +HeapAlloc dt=14 heapalloc_value=16795056 +HeapAlloc dt=13 heapalloc_value=16803248 +HeapAlloc dt=12 heapalloc_value=16811440 +HeapAlloc dt=14 heapalloc_value=16819632 +HeapAlloc dt=13 heapalloc_value=16827824 +HeapAlloc dt=13 heapalloc_value=16836016 +HeapAlloc dt=14 heapalloc_value=16844208 +HeapAlloc dt=14 heapalloc_value=16852400 +HeapAlloc dt=13 heapalloc_value=16860592 +HeapAlloc dt=13 heapalloc_value=16868784 +HeapAlloc dt=12 heapalloc_value=16876976 +HeapAlloc dt=19 heapalloc_value=16885168 +HeapAlloc dt=15 heapalloc_value=16893360 +HeapAlloc dt=14 heapalloc_value=16901552 +HeapAlloc dt=14 heapalloc_value=16909744 +HeapAlloc dt=13 heapalloc_value=16917936 +HeapAlloc dt=13 heapalloc_value=16926128 +HeapAlloc dt=12 heapalloc_value=16934320 +HeapAlloc dt=14 heapalloc_value=16942512 +HeapAlloc dt=14 heapalloc_value=16950704 +HeapAlloc dt=12 heapalloc_value=16958896 +HeapAlloc dt=13 heapalloc_value=16967088 +HeapAlloc dt=479 heapalloc_value=16975280 +HeapAlloc dt=207 heapalloc_value=16983472 +HeapAlloc dt=15 heapalloc_value=16991664 +HeapAlloc dt=111 heapalloc_value=16999856 +HeapAlloc dt=14 heapalloc_value=17008048 +HeapAlloc dt=13 heapalloc_value=17016240 +HeapAlloc dt=13 heapalloc_value=17024432 +HeapAlloc dt=13 heapalloc_value=17032624 +HeapAlloc dt=12 heapalloc_value=17040816 +HeapAlloc dt=14 heapalloc_value=17049008 +HeapAlloc dt=13 heapalloc_value=17057200 +HeapAlloc dt=15 heapalloc_value=17065392 +HeapAlloc dt=14 heapalloc_value=17073584 +HeapAlloc dt=15 heapalloc_value=17081776 +HeapAlloc dt=14 heapalloc_value=17089968 +HeapAlloc dt=14 heapalloc_value=17098160 +HeapAlloc dt=14 heapalloc_value=17106352 +HeapAlloc dt=15 heapalloc_value=17114544 +HeapAlloc dt=14 heapalloc_value=17122736 +HeapAlloc dt=19 heapalloc_value=17130928 +HeapAlloc dt=20 heapalloc_value=17139120 +HeapAlloc dt=19 heapalloc_value=17147312 +HeapAlloc dt=14 heapalloc_value=17155504 +HeapAlloc dt=14 heapalloc_value=17163696 +HeapAlloc dt=15 heapalloc_value=17171888 +HeapAlloc dt=14 heapalloc_value=17180080 +HeapAlloc dt=14 heapalloc_value=17188272 +HeapAlloc dt=16 heapalloc_value=17196464 +HeapAlloc dt=147 heapalloc_value=17204656 +HeapAlloc dt=17 heapalloc_value=17212848 +HeapAlloc dt=14 heapalloc_value=17221040 +HeapAlloc dt=15 heapalloc_value=17229232 +HeapAlloc dt=133 heapalloc_value=17237424 +HeapAlloc dt=66 heapalloc_value=17245616 +HeapAlloc dt=17 heapalloc_value=17253808 +HeapAlloc dt=14 heapalloc_value=17262000 +HeapAlloc dt=14 heapalloc_value=17270192 +HeapAlloc dt=15 heapalloc_value=17278384 +HeapAlloc dt=14 heapalloc_value=17286576 +HeapAlloc dt=14 heapalloc_value=17294768 +HeapAlloc dt=17 heapalloc_value=17302960 +HeapAlloc dt=14 heapalloc_value=17311152 +GoStop dt=24 reason_string=16 stack=46 +GoStart dt=859 g=1 g_seq=47 +HeapAlloc dt=19 heapalloc_value=17319344 +HeapAlloc dt=16 heapalloc_value=17327536 +HeapAlloc dt=14 heapalloc_value=17335728 +HeapAlloc dt=14 heapalloc_value=17343920 +HeapAlloc dt=15 heapalloc_value=17352112 +HeapAlloc dt=14 heapalloc_value=17360304 +HeapAlloc dt=14 heapalloc_value=17368496 +HeapAlloc dt=14 heapalloc_value=17376688 +HeapAlloc dt=18 heapalloc_value=17384880 +HeapAlloc dt=17 heapalloc_value=17393072 +HeapAlloc dt=14 heapalloc_value=17401264 +HeapAlloc dt=18 heapalloc_value=17409456 +HeapAlloc dt=14 heapalloc_value=17417648 +HeapAlloc dt=14 heapalloc_value=17425840 +HeapAlloc dt=15 heapalloc_value=17434032 +HeapAlloc dt=12 heapalloc_value=17442224 +HeapAlloc dt=18 heapalloc_value=17450416 +HeapAlloc dt=69 heapalloc_value=17458608 +HeapAlloc dt=15 heapalloc_value=17466800 +HeapAlloc dt=14 heapalloc_value=17474992 +HeapAlloc dt=12 heapalloc_value=17483184 +HeapAlloc dt=14 heapalloc_value=17491376 +HeapAlloc dt=405 heapalloc_value=17499568 +GoStop dt=11 reason_string=16 stack=31 +ProcStop dt=10 +ProcStart dt=1071 p=0 p_seq=41 +GoStart dt=509 g=1 g_seq=48 +HeapAlloc dt=31 heapalloc_value=16800656 +GCSweepBegin dt=40 stack=38 +GCSweepEnd dt=407 swept_value=827392 reclaimed_value=0 +HeapAlloc dt=25 heapalloc_value=16808848 +GCSweepBegin dt=25 stack=38 +GCSweepEnd dt=1029 swept_value=827392 reclaimed_value=0 +HeapAlloc dt=20 heapalloc_value=16817040 +GCSweepBegin dt=33 stack=38 +GCSweepEnd dt=1076 swept_value=827392 reclaimed_value=0 +HeapAlloc dt=13 heapalloc_value=16825232 +GCSweepBegin dt=30 stack=38 +GCSweepEnd dt=1298 swept_value=827392 reclaimed_value=0 +HeapAlloc dt=17 heapalloc_value=16833424 +GCSweepBegin dt=29 stack=38 +GCSweepEnd dt=1140 swept_value=827392 reclaimed_value=0 +HeapAlloc dt=11 heapalloc_value=16841616 +GCSweepBegin dt=32 stack=38 +GCSweepEnd dt=1161 swept_value=827392 reclaimed_value=0 +HeapAlloc dt=14 heapalloc_value=16849808 +GCSweepBegin dt=31 stack=38 +GCSweepEnd dt=763 swept_value=827392 reclaimed_value=0 +HeapAlloc dt=12 heapalloc_value=16858000 +GCSweepBegin dt=29 stack=38 +GCSweepEnd dt=1113 swept_value=827392 reclaimed_value=0 +HeapAlloc dt=9 heapalloc_value=16866192 +GCSweepBegin dt=25 stack=38 +GCSweepEnd dt=1068 swept_value=827392 reclaimed_value=0 +HeapAlloc dt=21 heapalloc_value=16874384 +GCSweepBegin dt=36 stack=38 +GCSweepEnd dt=478 swept_value=827392 reclaimed_value=0 +HeapAlloc dt=7 heapalloc_value=16882576 +GCSweepBegin dt=16 stack=38 +GCSweepEnd dt=32 swept_value=90112 reclaimed_value=0 +HeapAlloc dt=11 heapalloc_value=16890768 +HeapAlloc dt=31 heapalloc_value=16898960 +HeapAlloc dt=24 heapalloc_value=16907152 +HeapAlloc dt=17 heapalloc_value=16915344 +HeapAlloc dt=17 heapalloc_value=16923536 +HeapAlloc dt=23 heapalloc_value=16931728 +HeapAlloc dt=18 heapalloc_value=16939920 +HeapAlloc dt=22 heapalloc_value=16948112 +HeapAlloc dt=17 heapalloc_value=16956304 +HeapAlloc dt=16 heapalloc_value=16964496 +HeapAlloc dt=16 heapalloc_value=16972688 +HeapAlloc dt=106 heapalloc_value=16980880 +HeapAlloc dt=19 heapalloc_value=16989072 +HeapAlloc dt=16 heapalloc_value=16997264 +HeapAlloc dt=13 heapalloc_value=17005456 +HeapAlloc dt=13 heapalloc_value=17013648 +HeapAlloc dt=96 heapalloc_value=17021840 +HeapAlloc dt=16 heapalloc_value=17030032 +GoBlock dt=18 reason_string=19 stack=21 +ProcStop dt=315 +ProcStart dt=17450 p=2 p_seq=23 +ProcStop dt=14 +ProcStart dt=6669 p=0 p_seq=44 +ProcStop dt=11 +ProcStart dt=16752 p=0 p_seq=45 +GoUnblock dt=14 g=1 g_seq=51 stack=0 +GoStart dt=146 g=1 g_seq=52 +HeapAlloc dt=31 heapalloc_value=18529168 +HeapAlloc dt=21 heapalloc_value=18537360 +HeapAlloc dt=13 heapalloc_value=18545552 +HeapAlloc dt=77 heapalloc_value=18553744 +HeapAlloc dt=21 heapalloc_value=18561936 +HeapAlloc dt=15 heapalloc_value=18570128 +HeapAlloc dt=12 heapalloc_value=18578320 +HeapAlloc dt=12 heapalloc_value=18586512 +HeapAlloc dt=12 heapalloc_value=18594704 +HeapAlloc dt=16 heapalloc_value=18602896 +HeapAlloc dt=14 heapalloc_value=18611088 +HeapAlloc dt=13 heapalloc_value=18619280 +HeapAlloc dt=17 heapalloc_value=18627472 +HeapAlloc dt=13 heapalloc_value=18635664 +HeapAlloc dt=14 heapalloc_value=18643856 +HeapAlloc dt=12 heapalloc_value=18652048 +HeapAlloc dt=12 heapalloc_value=18660240 +HeapAlloc dt=12 heapalloc_value=18668432 +HeapAlloc dt=12 heapalloc_value=18676624 +HeapAlloc dt=12 heapalloc_value=18684816 +HeapAlloc dt=93 heapalloc_value=18693008 +HeapAlloc dt=17 heapalloc_value=18701200 +HeapAlloc dt=12 heapalloc_value=18709392 +HeapAlloc dt=13 heapalloc_value=18717584 +HeapAlloc dt=15 heapalloc_value=18725776 +HeapAlloc dt=12 heapalloc_value=18733968 +HeapAlloc dt=13 heapalloc_value=18742160 +HeapAlloc dt=14 heapalloc_value=18750352 +HeapAlloc dt=12 heapalloc_value=18758544 +HeapAlloc dt=54 heapalloc_value=18766736 +HeapAlloc dt=13 heapalloc_value=18774928 +HeapAlloc dt=13 heapalloc_value=18783120 +HeapAlloc dt=12 heapalloc_value=18791312 +HeapAlloc dt=13 heapalloc_value=18799504 +HeapAlloc dt=12 heapalloc_value=18807696 +HeapAlloc dt=13 heapalloc_value=18815888 +HeapAlloc dt=12 heapalloc_value=18824080 +HeapAlloc dt=13 heapalloc_value=18832272 +HeapAlloc dt=12 heapalloc_value=18840464 +HeapAlloc dt=13 heapalloc_value=18848656 +HeapAlloc dt=12 heapalloc_value=18856848 +HeapAlloc dt=13 heapalloc_value=18865040 +HeapAlloc dt=13 heapalloc_value=18873232 +HeapAlloc dt=12 heapalloc_value=18881424 +HeapAlloc dt=14 heapalloc_value=18889616 +HeapAlloc dt=13 heapalloc_value=18897808 +HeapAlloc dt=12 heapalloc_value=18906000 +HeapAlloc dt=13 heapalloc_value=18914192 +HeapAlloc dt=13 heapalloc_value=18922384 +HeapAlloc dt=86 heapalloc_value=18930576 +HeapAlloc dt=15 heapalloc_value=18938768 +HeapAlloc dt=13 heapalloc_value=18946960 +HeapAlloc dt=26 heapalloc_value=18955152 +HeapAlloc dt=19 heapalloc_value=18963344 +HeapAlloc dt=12 heapalloc_value=18971536 +HeapAlloc dt=14 heapalloc_value=18979728 +HeapAlloc dt=14 heapalloc_value=18987920 +HeapAlloc dt=13 heapalloc_value=18996112 +HeapAlloc dt=12 heapalloc_value=19004304 +HeapAlloc dt=64 heapalloc_value=19012496 +HeapAlloc dt=15 heapalloc_value=19020688 +HeapAlloc dt=14 heapalloc_value=19028880 +HeapAlloc dt=14 heapalloc_value=19037072 +HeapAlloc dt=16 heapalloc_value=19045264 +HeapAlloc dt=77 heapalloc_value=19053456 +HeapAlloc dt=16 heapalloc_value=19061648 +HeapAlloc dt=13 heapalloc_value=19069840 +HeapAlloc dt=16 heapalloc_value=19078032 +HeapAlloc dt=12 heapalloc_value=19086224 +HeapAlloc dt=12 heapalloc_value=19094416 +HeapAlloc dt=13 heapalloc_value=19102608 +HeapAlloc dt=14 heapalloc_value=19110800 +HeapAlloc dt=15 heapalloc_value=19118992 +HeapAlloc dt=14 heapalloc_value=19127184 +HeapAlloc dt=13 heapalloc_value=19135376 +HeapAlloc dt=13 heapalloc_value=19143568 +HeapAlloc dt=15 heapalloc_value=19151760 +HeapAlloc dt=18 heapalloc_value=19159952 +HeapAlloc dt=16 heapalloc_value=19168144 +HeapAlloc dt=15 heapalloc_value=19176336 +HeapAlloc dt=113 heapalloc_value=19184528 +HeapAlloc dt=17 heapalloc_value=19192720 +HeapAlloc dt=13 heapalloc_value=19200912 +HeapAlloc dt=18 heapalloc_value=19209104 +HeapAlloc dt=15 heapalloc_value=19217296 +HeapAlloc dt=18 heapalloc_value=19225488 +HeapAlloc dt=15 heapalloc_value=19233680 +HeapAlloc dt=16 heapalloc_value=19241872 +HeapAlloc dt=16 heapalloc_value=19250064 +HeapAlloc dt=15 heapalloc_value=19258256 +HeapAlloc dt=14 heapalloc_value=19266448 +HeapAlloc dt=15 heapalloc_value=19274640 +HeapAlloc dt=13 heapalloc_value=19282832 +HeapAlloc dt=20 heapalloc_value=19291024 +HeapAlloc dt=15 heapalloc_value=19299216 +HeapAlloc dt=16 heapalloc_value=19307408 +HeapAlloc dt=26 heapalloc_value=19315600 +HeapAlloc dt=9 heapalloc_value=19323792 +HeapAlloc dt=6 heapalloc_value=19331984 +HeapAlloc dt=7 heapalloc_value=19340176 +HeapAlloc dt=7 heapalloc_value=19348368 +HeapAlloc dt=8 heapalloc_value=19356560 +HeapAlloc dt=70 heapalloc_value=19364752 +HeapAlloc dt=8 heapalloc_value=19372944 +HeapAlloc dt=7 heapalloc_value=19381136 +HeapAlloc dt=6 heapalloc_value=19389328 +HeapAlloc dt=7 heapalloc_value=19397520 +HeapAlloc dt=8 heapalloc_value=19405712 +HeapAlloc dt=7 heapalloc_value=19413904 +HeapAlloc dt=7 heapalloc_value=19422096 +HeapAlloc dt=8 heapalloc_value=19430288 +HeapAlloc dt=7 heapalloc_value=19438480 +HeapAlloc dt=6 heapalloc_value=19446672 +HeapAlloc dt=7 heapalloc_value=19454864 +HeapAlloc dt=7 heapalloc_value=19463056 +HeapAlloc dt=7 heapalloc_value=19471248 +HeapAlloc dt=6 heapalloc_value=19479440 +HeapAlloc dt=7 heapalloc_value=19487632 +HeapAlloc dt=6 heapalloc_value=19495824 +HeapAlloc dt=7 heapalloc_value=19504016 +HeapAlloc dt=7 heapalloc_value=19512208 +HeapAlloc dt=6 heapalloc_value=19520400 +HeapAlloc dt=8 heapalloc_value=19528592 +HeapAlloc dt=53 heapalloc_value=19536784 +HeapAlloc dt=8 heapalloc_value=19544976 +GoBlock dt=12 reason_string=19 stack=21 +ProcStop dt=196 +ProcStart dt=17347 p=2 p_seq=25 +ProcStop dt=14 +ProcStart dt=2376 p=0 p_seq=48 +ProcStop dt=11 +ProcStart dt=16736 p=0 p_seq=49 +GoUnblock dt=12 g=1 g_seq=55 stack=0 +GoStart dt=137 g=1 g_seq=56 +HeapAlloc dt=24 heapalloc_value=20577168 +HeapAlloc dt=87 heapalloc_value=20585360 +HeapAlloc dt=9 heapalloc_value=20593552 +HeapAlloc dt=6 heapalloc_value=20601744 +HeapAlloc dt=7 heapalloc_value=20609936 +HeapAlloc dt=7 heapalloc_value=20618128 +HeapAlloc dt=6 heapalloc_value=20626320 +HeapAlloc dt=7 heapalloc_value=20634512 +HeapAlloc dt=7 heapalloc_value=20642704 +HeapAlloc dt=6 heapalloc_value=20650896 +HeapAlloc dt=7 heapalloc_value=20659088 +HeapAlloc dt=7 heapalloc_value=20667280 +HeapAlloc dt=238 heapalloc_value=20675472 +HeapAlloc dt=10 heapalloc_value=20683664 +HeapAlloc dt=6 heapalloc_value=20691856 +HeapAlloc dt=7 heapalloc_value=20700048 +HeapAlloc dt=7 heapalloc_value=20708240 +HeapAlloc dt=6 heapalloc_value=20716432 +HeapAlloc dt=7 heapalloc_value=20724624 +HeapAlloc dt=6 heapalloc_value=20732816 +HeapAlloc dt=46 heapalloc_value=20741008 +HeapAlloc dt=8 heapalloc_value=20749200 +HeapAlloc dt=7 heapalloc_value=20757392 +HeapAlloc dt=7 heapalloc_value=20765584 +HeapAlloc dt=7 heapalloc_value=20773776 +HeapAlloc dt=7 heapalloc_value=20781968 +HeapAlloc dt=6 heapalloc_value=20790160 +HeapAlloc dt=7 heapalloc_value=20798352 +HeapAlloc dt=7 heapalloc_value=20806544 +HeapAlloc dt=6 heapalloc_value=20814736 +HeapAlloc dt=7 heapalloc_value=20822928 +HeapAlloc dt=7 heapalloc_value=20831120 +HeapAlloc dt=7 heapalloc_value=20839312 +HeapAlloc dt=7 heapalloc_value=20847504 +HeapAlloc dt=6 heapalloc_value=20855696 +HeapAlloc dt=7 heapalloc_value=20863888 +HeapAlloc dt=6 heapalloc_value=20872080 +HeapAlloc dt=7 heapalloc_value=20880272 +HeapAlloc dt=7 heapalloc_value=20888464 +HeapAlloc dt=6 heapalloc_value=20896656 +HeapAlloc dt=7 heapalloc_value=20904848 +HeapAlloc dt=7 heapalloc_value=20913040 +HeapAlloc dt=6 heapalloc_value=20921232 +HeapAlloc dt=7 heapalloc_value=20929424 +HeapAlloc dt=74 heapalloc_value=20937616 +HeapAlloc dt=8 heapalloc_value=20945808 +HeapAlloc dt=7 heapalloc_value=20954000 +HeapAlloc dt=6 heapalloc_value=20962192 +HeapAlloc dt=7 heapalloc_value=20970384 +HeapAlloc dt=7 heapalloc_value=20978576 +HeapAlloc dt=7 heapalloc_value=20986768 +HeapAlloc dt=6 heapalloc_value=20994960 +HeapAlloc dt=7 heapalloc_value=21003152 +HeapAlloc dt=7 heapalloc_value=21011344 +HeapAlloc dt=7 heapalloc_value=21019536 +HeapAlloc dt=6 heapalloc_value=21027728 +HeapAlloc dt=7 heapalloc_value=21035920 +HeapAlloc dt=6 heapalloc_value=21044112 +HeapAlloc dt=7 heapalloc_value=21052304 +HeapAlloc dt=7 heapalloc_value=21060496 +HeapAlloc dt=6 heapalloc_value=21068688 +HeapAlloc dt=7 heapalloc_value=21076880 +HeapAlloc dt=6 heapalloc_value=21085072 +HeapAlloc dt=7 heapalloc_value=21093264 +HeapAlloc dt=7 heapalloc_value=21101456 +HeapAlloc dt=90 heapalloc_value=21109648 +HeapAlloc dt=8 heapalloc_value=21117840 +HeapAlloc dt=6 heapalloc_value=21126032 +HeapAlloc dt=7 heapalloc_value=21134224 +HeapAlloc dt=7 heapalloc_value=21142416 +HeapAlloc dt=7 heapalloc_value=21150608 +HeapAlloc dt=6 heapalloc_value=21158800 +HeapAlloc dt=44 heapalloc_value=21166992 +HeapAlloc dt=7 heapalloc_value=21175184 +HeapAlloc dt=7 heapalloc_value=21183376 +HeapAlloc dt=7 heapalloc_value=21191568 +HeapAlloc dt=71 heapalloc_value=21199760 +HeapAlloc dt=8 heapalloc_value=21207952 +HeapAlloc dt=7 heapalloc_value=21216144 +HeapAlloc dt=7 heapalloc_value=21224336 +HeapAlloc dt=7 heapalloc_value=21232528 +HeapAlloc dt=6 heapalloc_value=21240720 +HeapAlloc dt=7 heapalloc_value=21248912 +HeapAlloc dt=7 heapalloc_value=21257104 +HeapAlloc dt=6 heapalloc_value=21265296 +HeapAlloc dt=7 heapalloc_value=21273488 +HeapAlloc dt=6 heapalloc_value=21281680 +HeapAlloc dt=7 heapalloc_value=21289872 +HeapAlloc dt=7 heapalloc_value=21298064 +HeapAlloc dt=6 heapalloc_value=21306256 +HeapAlloc dt=7 heapalloc_value=21314448 +HeapAlloc dt=6 heapalloc_value=21322640 +HeapAlloc dt=7 heapalloc_value=21330832 +HeapAlloc dt=7 heapalloc_value=21339024 +HeapAlloc dt=6 heapalloc_value=21347216 +HeapAlloc dt=7 heapalloc_value=21355408 +HeapAlloc dt=6 heapalloc_value=21363600 +HeapAlloc dt=43 heapalloc_value=21371792 +HeapAlloc dt=8 heapalloc_value=21379984 +HeapAlloc dt=7 heapalloc_value=21388176 +HeapAlloc dt=7 heapalloc_value=21396368 +HeapAlloc dt=6 heapalloc_value=21404560 +HeapAlloc dt=7 heapalloc_value=21412752 +HeapAlloc dt=7 heapalloc_value=21420944 +HeapAlloc dt=6 heapalloc_value=21429136 +HeapAlloc dt=7 heapalloc_value=21437328 +HeapAlloc dt=6 heapalloc_value=21445520 +HeapAlloc dt=7 heapalloc_value=21453712 +HeapAlloc dt=68 heapalloc_value=21461904 +HeapAlloc dt=8 heapalloc_value=21470096 +HeapAlloc dt=6 heapalloc_value=21478288 +HeapAlloc dt=7 heapalloc_value=21486480 +HeapAlloc dt=6 heapalloc_value=21494672 +HeapAlloc dt=7 heapalloc_value=21502864 +HeapAlloc dt=7 heapalloc_value=21511056 +HeapAlloc dt=6 heapalloc_value=21519248 +HeapAlloc dt=7 heapalloc_value=21527440 +HeapAlloc dt=6 heapalloc_value=21535632 +HeapAlloc dt=7 heapalloc_value=21543824 +HeapAlloc dt=7 heapalloc_value=21552016 +HeapAlloc dt=6 heapalloc_value=21560208 +HeapAlloc dt=7 heapalloc_value=21568400 +HeapAlloc dt=7 heapalloc_value=21576592 +HeapAlloc dt=7 heapalloc_value=21584784 +HeapAlloc dt=6 heapalloc_value=21592976 +GoBlock dt=11 reason_string=19 stack=21 +ProcStop dt=159 +ProcStart dt=1372 p=0 p_seq=51 +GoUnblock dt=19 g=1 g_seq=57 stack=0 +GoStart dt=211 g=1 g_seq=58 +HeapAlloc dt=39 heapalloc_value=21601168 +HeapAlloc dt=16 heapalloc_value=21609360 +HeapAlloc dt=8 heapalloc_value=21617552 +HeapAlloc dt=6 heapalloc_value=21625744 +HeapAlloc dt=101 heapalloc_value=21633936 +HeapAlloc dt=8 heapalloc_value=21642128 +HeapAlloc dt=7 heapalloc_value=21650320 +HeapAlloc dt=6 heapalloc_value=21658512 +HeapAlloc dt=7 heapalloc_value=21666704 +HeapAlloc dt=6 heapalloc_value=21674896 +HeapAlloc dt=6 heapalloc_value=21683088 +HeapAlloc dt=7 heapalloc_value=21691280 +HeapAlloc dt=6 heapalloc_value=21699472 +HeapAlloc dt=7 heapalloc_value=21707664 +HeapAlloc dt=6 heapalloc_value=21715856 +HeapAlloc dt=102 heapalloc_value=21724048 +HeapAlloc dt=8 heapalloc_value=21732240 +HeapAlloc dt=6 heapalloc_value=21740432 +HeapAlloc dt=7 heapalloc_value=21748624 +HeapAlloc dt=6 heapalloc_value=21756816 +HeapAlloc dt=7 heapalloc_value=21765008 +HeapAlloc dt=6 heapalloc_value=21773200 +HeapAlloc dt=7 heapalloc_value=21781392 +HeapAlloc dt=44 heapalloc_value=21789584 +HeapAlloc dt=7 heapalloc_value=21797776 +HeapAlloc dt=8 heapalloc_value=21805968 +HeapAlloc dt=7 heapalloc_value=21814160 +HeapAlloc dt=6 heapalloc_value=21822352 +HeapAlloc dt=7 heapalloc_value=21830544 +HeapAlloc dt=6 heapalloc_value=21838736 +HeapAlloc dt=7 heapalloc_value=21846928 +HeapAlloc dt=6 heapalloc_value=21855120 +HeapAlloc dt=6 heapalloc_value=21863312 +HeapAlloc dt=7 heapalloc_value=21871504 +HeapAlloc dt=6 heapalloc_value=21879696 +HeapAlloc dt=7 heapalloc_value=21887888 +HeapAlloc dt=6 heapalloc_value=21896080 +HeapAlloc dt=7 heapalloc_value=21904272 +HeapAlloc dt=6 heapalloc_value=21912464 +HeapAlloc dt=7 heapalloc_value=21920656 +HeapAlloc dt=6 heapalloc_value=21928848 +HeapAlloc dt=6 heapalloc_value=21937040 +HeapAlloc dt=7 heapalloc_value=21945232 +HeapAlloc dt=6 heapalloc_value=21953424 +HeapAlloc dt=7 heapalloc_value=21961616 +HeapAlloc dt=6 heapalloc_value=21969808 +HeapAlloc dt=7 heapalloc_value=21978000 +HeapAlloc dt=248 heapalloc_value=21986192 +HeapAlloc dt=18 heapalloc_value=21994384 +HeapAlloc dt=7 heapalloc_value=22002576 +HeapAlloc dt=6 heapalloc_value=22010768 +HeapAlloc dt=7 heapalloc_value=22018960 +HeapAlloc dt=6 heapalloc_value=22027152 +HeapAlloc dt=7 heapalloc_value=22035344 +HeapAlloc dt=6 heapalloc_value=22043536 +HeapAlloc dt=7 heapalloc_value=22051728 +HeapAlloc dt=6 heapalloc_value=22059920 +HeapAlloc dt=7 heapalloc_value=22068112 +HeapAlloc dt=16 heapalloc_value=22657936 +HeapAlloc dt=3547 heapalloc_value=22666128 +HeapAlloc dt=3135 heapalloc_value=22674320 +HeapAlloc dt=11 heapalloc_value=22682512 +HeapAlloc dt=8 heapalloc_value=22690704 +HeapAlloc dt=8 heapalloc_value=22698896 +HeapAlloc dt=8 heapalloc_value=22707088 +HeapAlloc dt=10 heapalloc_value=22715280 +HeapAlloc dt=8 heapalloc_value=22723472 +HeapAlloc dt=8 heapalloc_value=22731664 +HeapAlloc dt=71 heapalloc_value=22739856 +HeapAlloc dt=10 heapalloc_value=22748048 +HeapAlloc dt=8 heapalloc_value=22756240 +HeapAlloc dt=9 heapalloc_value=22764432 +HeapAlloc dt=8 heapalloc_value=22772624 +HeapAlloc dt=8 heapalloc_value=22780816 +HeapAlloc dt=9 heapalloc_value=22789008 +HeapAlloc dt=47 heapalloc_value=22797200 +HeapAlloc dt=9 heapalloc_value=22805392 +HeapAlloc dt=9 heapalloc_value=22813584 +HeapAlloc dt=8 heapalloc_value=22821776 +HeapAlloc dt=9 heapalloc_value=22829968 +HeapAlloc dt=17 heapalloc_value=22838160 +HeapAlloc dt=8 heapalloc_value=22846352 +HeapAlloc dt=6 heapalloc_value=22854544 +HeapAlloc dt=7 heapalloc_value=22862736 +HeapAlloc dt=6 heapalloc_value=22870928 +HeapAlloc dt=6 heapalloc_value=22879120 +HeapAlloc dt=6 heapalloc_value=22887312 +HeapAlloc dt=6 heapalloc_value=22895504 +HeapAlloc dt=7 heapalloc_value=22903696 +HeapAlloc dt=6 heapalloc_value=22911888 +HeapAlloc dt=6 heapalloc_value=22920080 +HeapAlloc dt=6 heapalloc_value=22928272 +HeapAlloc dt=6 heapalloc_value=22936464 +HeapAlloc dt=6 heapalloc_value=22944656 +HeapAlloc dt=7 heapalloc_value=22952848 +HeapAlloc dt=6 heapalloc_value=22961040 +HeapAlloc dt=8 heapalloc_value=22969232 +HeapAlloc dt=6 heapalloc_value=22977424 +HeapAlloc dt=6 heapalloc_value=22985616 +HeapAlloc dt=6 heapalloc_value=22993808 +HeapAlloc dt=43 heapalloc_value=23002000 +HeapAlloc dt=8 heapalloc_value=23010192 +HeapAlloc dt=6 heapalloc_value=23018384 +HeapAlloc dt=7 heapalloc_value=23026576 +HeapAlloc dt=76 heapalloc_value=23034768 +HeapAlloc dt=9 heapalloc_value=23042960 +HeapAlloc dt=6 heapalloc_value=23051152 +HeapAlloc dt=7 heapalloc_value=23059344 +HeapAlloc dt=6 heapalloc_value=23067536 +HeapAlloc dt=6 heapalloc_value=23075728 +HeapAlloc dt=7 heapalloc_value=23083920 +HeapAlloc dt=6 heapalloc_value=23092112 +HeapAlloc dt=6 heapalloc_value=23100304 +HeapAlloc dt=6 heapalloc_value=23108496 +HeapAlloc dt=6 heapalloc_value=23116688 +HeapAlloc dt=6 heapalloc_value=23124880 +HeapAlloc dt=7 heapalloc_value=23133072 +HeapAlloc dt=6 heapalloc_value=23141264 +HeapAlloc dt=8 heapalloc_value=23149456 +HeapAlloc dt=6 heapalloc_value=23157648 +HeapAlloc dt=6 heapalloc_value=23165840 +HeapAlloc dt=7 heapalloc_value=23174032 +HeapAlloc dt=6 heapalloc_value=23182224 +HeapAlloc dt=7 heapalloc_value=23190416 +HeapAlloc dt=6 heapalloc_value=23198608 +HeapAlloc dt=6 heapalloc_value=23206800 +HeapAlloc dt=22 heapalloc_value=23214912 +HeapAlloc dt=22 heapalloc_value=23223008 +HeapAlloc dt=21 heapalloc_value=23224960 +GoCreate dt=50 new_g=10 new_stack=49 stack=50 +GoCreate dt=193 new_g=11 new_stack=49 stack=50 +GoCreate dt=10 new_g=12 new_stack=49 stack=50 +GoCreate dt=5 new_g=13 new_stack=49 stack=50 +HeapAlloc dt=120 heapalloc_value=23232736 +GoCreate dt=9 new_g=14 new_stack=49 stack=50 +GoCreate dt=8 new_g=15 new_stack=49 stack=50 +GoCreate dt=7 new_g=16 new_stack=49 stack=50 +GoCreate dt=8 new_g=50 new_stack=49 stack=50 +GoBlock dt=17 reason_string=10 stack=51 +GoStart dt=7 g=50 g_seq=1 +GoStop dt=306070 reason_string=16 stack=52 +GoStart dt=17 g=50 g_seq=2 +GoStop dt=316463 reason_string=16 stack=52 +GoStart dt=9 g=50 g_seq=3 +GoDestroy dt=158709 +ProcStop dt=33 +ProcStart dt=9387 p=7 p_seq=3 +ProcStop dt=14 +ProcStart dt=63662 p=7 p_seq=4 +ProcStop dt=14 +ProcStart dt=16745 p=7 p_seq=5 +GoUnblock dt=39 g=19 g_seq=2 stack=0 +GoStart dt=155 g=19 g_seq=3 +HeapAlloc dt=297 heapalloc_value=23312520 +GoBlock dt=30 reason_string=12 stack=11 +ProcStop dt=28 +ProcStart dt=706341 p=7 p_seq=6 +ProcStop dt=15 +ProcStart dt=50 p=7 p_seq=7 +ProcStop dt=8 +ProcStart dt=3274 p=6 p_seq=14 +ProcStop dt=13 +ProcStart dt=2696 p=4 p_seq=6 +ProcStop dt=17 +ProcStart dt=416 p=7 p_seq=19 +GoUnblock dt=7 g=1 g_seq=64 stack=0 +GoStart dt=7 g=1 g_seq=65 +GoSyscallBegin dt=33 p_seq=20 stack=81 +GoSyscallEnd dt=43 +GoSyscallBegin dt=134 p_seq=21 stack=82 +GoSyscallEnd dt=38 +GoSyscallBegin dt=10 p_seq=22 stack=83 +GoSyscallEnd dt=40 +GoSyscallBegin dt=7 p_seq=23 stack=84 +GoSyscallEnd dt=26 +GoSyscallBegin dt=10 p_seq=24 stack=85 +GoSyscallEnd dt=31 +GoSyscallBegin dt=39 p_seq=25 stack=86 +GoSyscallEnd dt=61 +GoBlock dt=13 reason_string=7 stack=87 +ProcStop dt=15 +EventBatch gen=1 m=2852341 time=420901453987 size=3492 +ProcStart dt=448 p=3 p_seq=1 +ProcStop dt=26 +ProcStart dt=312314 p=0 p_seq=4 +ProcStop dt=17 +ProcStart dt=16776 p=0 p_seq=5 +GoUnblock dt=31 g=1 g_seq=3 stack=0 +GoStart dt=182 g=1 g_seq=4 +HeapAlloc dt=181 heapalloc_value=1662976 +HeapAlloc dt=25 heapalloc_value=1671168 +HeapAlloc dt=210 heapalloc_value=1679360 +HeapAlloc dt=19 heapalloc_value=1687552 +HeapAlloc dt=15 heapalloc_value=1695744 +HeapAlloc dt=8 heapalloc_value=1703936 +HeapAlloc dt=15 heapalloc_value=1712128 +HeapAlloc dt=7 heapalloc_value=1720320 +HeapAlloc dt=9 heapalloc_value=1728512 +HeapAlloc dt=5 heapalloc_value=1736704 +HeapAlloc dt=8 heapalloc_value=1761280 +HeapAlloc dt=9 heapalloc_value=1769472 +HeapAlloc dt=8 heapalloc_value=1777664 +HeapAlloc dt=6 heapalloc_value=1785856 +HeapAlloc dt=8 heapalloc_value=1794048 +HeapAlloc dt=6 heapalloc_value=1802240 +HeapAlloc dt=6 heapalloc_value=1810432 +HeapAlloc dt=6 heapalloc_value=1818624 +HeapAlloc dt=6 heapalloc_value=1826816 +HeapAlloc dt=5 heapalloc_value=1851392 +HeapAlloc dt=62 heapalloc_value=1859584 +HeapAlloc dt=8 heapalloc_value=1867776 +HeapAlloc dt=6 heapalloc_value=1875968 +HeapAlloc dt=6 heapalloc_value=1884160 +HeapAlloc dt=6 heapalloc_value=1892352 +HeapAlloc dt=6 heapalloc_value=1900544 +HeapAlloc dt=6 heapalloc_value=1908736 +HeapAlloc dt=6 heapalloc_value=1916928 +HeapAlloc dt=75 heapalloc_value=1925120 +HeapAlloc dt=8 heapalloc_value=1933312 +HeapAlloc dt=6 heapalloc_value=1941504 +HeapAlloc dt=7 heapalloc_value=1949696 +HeapAlloc dt=5 heapalloc_value=1957888 +HeapAlloc dt=7 heapalloc_value=1966080 +HeapAlloc dt=7 heapalloc_value=1974272 +HeapAlloc dt=6 heapalloc_value=1982464 +HeapAlloc dt=13 heapalloc_value=2007040 +HeapAlloc dt=12 heapalloc_value=2015232 +HeapAlloc dt=7 heapalloc_value=2023424 +HeapAlloc dt=6 heapalloc_value=2031616 +HeapAlloc dt=6 heapalloc_value=2039808 +HeapAlloc dt=6 heapalloc_value=2048000 +HeapAlloc dt=8 heapalloc_value=2056192 +HeapAlloc dt=6 heapalloc_value=2064384 +HeapAlloc dt=6 heapalloc_value=2072576 +HeapAlloc dt=6 heapalloc_value=2080768 +HeapAlloc dt=6 heapalloc_value=2088960 +HeapAlloc dt=6 heapalloc_value=2097152 +HeapAlloc dt=6 heapalloc_value=2105344 +HeapAlloc dt=6 heapalloc_value=2113536 +HeapAlloc dt=9 heapalloc_value=2121728 +HeapAlloc dt=5 heapalloc_value=2129920 +HeapAlloc dt=67 heapalloc_value=2138112 +HeapAlloc dt=7 heapalloc_value=2146304 +HeapAlloc dt=7 heapalloc_value=2154496 +HeapAlloc dt=5 heapalloc_value=2162688 +HeapAlloc dt=6 heapalloc_value=2170880 +HeapAlloc dt=6 heapalloc_value=2179072 +HeapAlloc dt=79 heapalloc_value=2187264 +HeapAlloc dt=8 heapalloc_value=2195456 +HeapAlloc dt=6 heapalloc_value=2203648 +HeapAlloc dt=6 heapalloc_value=2211840 +HeapAlloc dt=6 heapalloc_value=2220032 +HeapAlloc dt=6 heapalloc_value=2228224 +HeapAlloc dt=6 heapalloc_value=2236416 +HeapAlloc dt=6 heapalloc_value=2244608 +HeapAlloc dt=8 heapalloc_value=2252800 +HeapAlloc dt=6 heapalloc_value=2260992 +HeapAlloc dt=6 heapalloc_value=2269184 +HeapAlloc dt=5 heapalloc_value=2310144 +HeapAlloc dt=19 heapalloc_value=2318336 +HeapAlloc dt=6 heapalloc_value=2326528 +HeapAlloc dt=7 heapalloc_value=2334720 +HeapAlloc dt=6 heapalloc_value=2342912 +HeapAlloc dt=6 heapalloc_value=2351104 +HeapAlloc dt=43 heapalloc_value=2359296 +HeapAlloc dt=8 heapalloc_value=2367488 +HeapAlloc dt=6 heapalloc_value=2375680 +HeapAlloc dt=8 heapalloc_value=2383872 +HeapAlloc dt=6 heapalloc_value=2392064 +HeapAlloc dt=6 heapalloc_value=2400256 +HeapAlloc dt=6 heapalloc_value=2408448 +HeapAlloc dt=6 heapalloc_value=2416640 +HeapAlloc dt=6 heapalloc_value=2424832 +HeapAlloc dt=6 heapalloc_value=2433024 +HeapAlloc dt=90 heapalloc_value=2441216 +HeapAlloc dt=74 heapalloc_value=2449408 +HeapAlloc dt=7 heapalloc_value=2457600 +HeapAlloc dt=7 heapalloc_value=2465792 +HeapAlloc dt=5 heapalloc_value=2473984 +HeapAlloc dt=6 heapalloc_value=2482176 +HeapAlloc dt=6 heapalloc_value=2490368 +HeapAlloc dt=6 heapalloc_value=2498560 +HeapAlloc dt=6 heapalloc_value=2506752 +HeapAlloc dt=8 heapalloc_value=2514944 +HeapAlloc dt=6 heapalloc_value=2523136 +HeapAlloc dt=7 heapalloc_value=2531328 +HeapAlloc dt=6 heapalloc_value=2539520 +HeapAlloc dt=6 heapalloc_value=2547712 +HeapAlloc dt=6 heapalloc_value=2555904 +HeapAlloc dt=6 heapalloc_value=2564096 +HeapAlloc dt=6 heapalloc_value=2572288 +HeapAlloc dt=8 heapalloc_value=2580480 +HeapAlloc dt=6 heapalloc_value=2588672 +HeapAlloc dt=28 heapalloc_value=2596864 +HeapAlloc dt=8 heapalloc_value=2605056 +HeapAlloc dt=5 heapalloc_value=2613248 +HeapAlloc dt=6 heapalloc_value=2621440 +HeapAlloc dt=6 heapalloc_value=2629632 +HeapAlloc dt=7 heapalloc_value=2637824 +HeapAlloc dt=8 heapalloc_value=2646016 +HeapAlloc dt=6 heapalloc_value=2654208 +HeapAlloc dt=13 heapalloc_value=2686976 +HeapAlloc dt=23 heapalloc_value=2695168 +HeapAlloc dt=6 heapalloc_value=2703360 +HeapAlloc dt=75 heapalloc_value=2711552 +HeapAlloc dt=55 heapalloc_value=2719744 +HeapAlloc dt=8 heapalloc_value=2727936 +HeapAlloc dt=6 heapalloc_value=2736128 +HeapAlloc dt=6 heapalloc_value=2744320 +HeapAlloc dt=6 heapalloc_value=2752512 +HeapAlloc dt=6 heapalloc_value=2760704 +HeapAlloc dt=6 heapalloc_value=2768896 +HeapAlloc dt=9 heapalloc_value=2777088 +HeapAlloc dt=5 heapalloc_value=2785280 +HeapAlloc dt=6 heapalloc_value=2793472 +HeapAlloc dt=6 heapalloc_value=2801664 +HeapAlloc dt=6 heapalloc_value=2809856 +HeapAlloc dt=6 heapalloc_value=2818048 +HeapAlloc dt=6 heapalloc_value=2826240 +HeapAlloc dt=6 heapalloc_value=2834432 +GoBlock dt=19 reason_string=19 stack=21 +ProcStop dt=236 +ProcStart dt=17547 p=1 p_seq=2 +ProcStop dt=18 +ProcStart dt=5588 p=0 p_seq=8 +ProcStop dt=13 +ProcStart dt=16789 p=0 p_seq=9 +GoUnblock dt=17 g=1 g_seq=7 stack=0 +GoStart dt=173 g=1 g_seq=8 +HeapAlloc dt=54 heapalloc_value=3915776 +HeapAlloc dt=17 heapalloc_value=3923968 +HeapAlloc dt=6 heapalloc_value=3932160 +HeapAlloc dt=6 heapalloc_value=3940352 +HeapAlloc dt=8 heapalloc_value=3948544 +HeapAlloc dt=10 heapalloc_value=3956736 +HeapAlloc dt=7 heapalloc_value=3964928 +HeapAlloc dt=10 heapalloc_value=4038656 +GCBegin dt=207 gc_seq=1 stack=22 +GoCreate dt=117 new_g=5 new_stack=23 stack=24 +GoSyscallBegin dt=172 p_seq=10 stack=25 +ProcStop dt=2 +ProcStart dt=6567 p=0 p_seq=12 +GoSyscallEndBlocked dt=4 +GoStart dt=1 g=1 g_seq=9 +GoCreate dt=36 new_g=6 new_stack=23 stack=24 +GoSyscallBegin dt=11 p_seq=13 stack=25 +ProcStop dt=1 +ProcStart dt=815 p=0 p_seq=15 +GoSyscallEndBlocked dt=2 +GoStart dt=1 g=1 g_seq=10 +GoCreate dt=23 new_g=7 new_stack=23 stack=24 +GoSyscallBegin dt=4 p_seq=16 stack=25 +ProcStop dt=1 +ProcStart dt=814 p=1 p_seq=6 +GoSyscallEndBlocked dt=2 +GoStart dt=1 g=1 g_seq=11 +GoCreate dt=14 new_g=24 new_stack=23 stack=24 +GoSyscallBegin dt=122 p_seq=7 stack=25 +ProcStop dt=1 +ProcStart dt=519 p=2 p_seq=5 +GoSyscallEndBlocked dt=1 +GoStart dt=1 g=1 g_seq=12 +HeapAlloc dt=19 heapalloc_value=4063232 +GoCreate dt=21 new_g=34 new_stack=23 stack=24 +GoSyscallBegin dt=5 p_seq=6 stack=25 +ProcStop dt=1 +ProcStart dt=924 p=0 p_seq=19 +GoSyscallEndBlocked dt=1 +GoStart dt=1 g=1 g_seq=13 +GoCreate dt=19 new_g=8 new_stack=23 stack=24 +GoSyscallBegin dt=140 p_seq=20 stack=25 +ProcStop dt=2 +ProcStart dt=512 p=0 p_seq=22 +GoSyscallEndBlocked dt=1 +GoStart dt=1 g=1 g_seq=14 +GoCreate dt=14 new_g=9 new_stack=23 stack=24 +GoSyscallBegin dt=3 p_seq=23 stack=25 +ProcStop dt=1 +ProcStart dt=375 p=1 p_seq=12 +GoSyscallEndBlocked dt=2 +GoStart dt=1 g=1 g_seq=15 +HeapAlloc dt=36 heapalloc_value=4071424 +GoCreate dt=13 new_g=25 new_stack=23 stack=24 +GoSyscallBegin dt=115 p_seq=13 stack=25 +ProcStop dt=1 +ProcStart dt=623 p=2 p_seq=10 +GoSyscallEndBlocked dt=1 +GoStart dt=1 g=1 g_seq=16 +STWBegin dt=37 kind_string=22 stack=27 +GoStatus dt=138 g=4 m=18446744073709551615 gstatus=4 +GoUnblock dt=7 g=4 g_seq=1 stack=28 +ProcsChange dt=158 procs_value=8 stack=29 +STWEnd dt=25 +GCMarkAssistBegin dt=1078 stack=30 +GCMarkAssistEnd dt=684 +HeapAlloc dt=15 heapalloc_value=4087808 +HeapAlloc dt=21 heapalloc_value=4096000 +HeapAlloc dt=11 heapalloc_value=4104192 +HeapAlloc dt=9 heapalloc_value=4112384 +HeapAlloc dt=9 heapalloc_value=4120576 +HeapAlloc dt=736 heapalloc_value=4145152 +HeapAlloc dt=27 heapalloc_value=4153344 +HeapAlloc dt=19 heapalloc_value=4161536 +HeapAlloc dt=15 heapalloc_value=4169728 +HeapAlloc dt=19 heapalloc_value=4177920 +HeapAlloc dt=15 heapalloc_value=4186112 +HeapAlloc dt=11 heapalloc_value=4194304 +HeapAlloc dt=16 heapalloc_value=4202496 +HeapAlloc dt=16 heapalloc_value=4210688 +HeapAlloc dt=9 heapalloc_value=4218880 +HeapAlloc dt=9 heapalloc_value=4227072 +HeapAlloc dt=9 heapalloc_value=4235264 +HeapAlloc dt=9 heapalloc_value=4243456 +HeapAlloc dt=10 heapalloc_value=4251648 +HeapAlloc dt=9 heapalloc_value=4259840 +HeapAlloc dt=20 heapalloc_value=4268032 +GoStop dt=11 reason_string=16 stack=31 +GoStart dt=361 g=1 g_seq=17 +HeapAlloc dt=16 heapalloc_value=4276224 +HeapAlloc dt=10 heapalloc_value=4284416 +HeapAlloc dt=9 heapalloc_value=4292608 +HeapAlloc dt=10 heapalloc_value=4300800 +HeapAlloc dt=9 heapalloc_value=4308992 +HeapAlloc dt=10 heapalloc_value=4317184 +HeapAlloc dt=9 heapalloc_value=4325376 +HeapAlloc dt=9 heapalloc_value=4333568 +HeapAlloc dt=11 heapalloc_value=4341760 +HeapAlloc dt=9 heapalloc_value=4349952 +HeapAlloc dt=67 heapalloc_value=4358144 +HeapAlloc dt=10 heapalloc_value=4366336 +HeapAlloc dt=10 heapalloc_value=4374528 +HeapAlloc dt=9 heapalloc_value=4382720 +HeapAlloc dt=9 heapalloc_value=4390912 +HeapAlloc dt=9 heapalloc_value=4399104 +HeapAlloc dt=283 heapalloc_value=4407296 +HeapAlloc dt=15 heapalloc_value=4415488 +HeapAlloc dt=7 heapalloc_value=4423680 +HeapAlloc dt=7 heapalloc_value=4431872 +HeapAlloc dt=7 heapalloc_value=4440064 +HeapAlloc dt=7 heapalloc_value=4448256 +HeapAlloc dt=7 heapalloc_value=4456448 +HeapAlloc dt=7 heapalloc_value=4464640 +HeapAlloc dt=7 heapalloc_value=4472832 +HeapAlloc dt=7 heapalloc_value=4481024 +HeapAlloc dt=7 heapalloc_value=4489216 +HeapAlloc dt=7 heapalloc_value=4497408 +HeapAlloc dt=7 heapalloc_value=4505600 +HeapAlloc dt=6 heapalloc_value=4513792 +HeapAlloc dt=7 heapalloc_value=4521984 +HeapAlloc dt=39 heapalloc_value=4530176 +HeapAlloc dt=8 heapalloc_value=4538368 +HeapAlloc dt=8 heapalloc_value=4546560 +HeapAlloc dt=7 heapalloc_value=4554752 +HeapAlloc dt=7 heapalloc_value=4562944 +HeapAlloc dt=10 heapalloc_value=4571136 +HeapAlloc dt=9 heapalloc_value=4579328 +HeapAlloc dt=72 heapalloc_value=4587520 +HeapAlloc dt=9 heapalloc_value=4595712 +HeapAlloc dt=7 heapalloc_value=4603904 +HeapAlloc dt=7 heapalloc_value=4612096 +HeapAlloc dt=7 heapalloc_value=4620288 +HeapAlloc dt=7 heapalloc_value=4628480 +HeapAlloc dt=7 heapalloc_value=4636672 +HeapAlloc dt=7 heapalloc_value=4644864 +HeapAlloc dt=8 heapalloc_value=4653056 +HeapAlloc dt=7 heapalloc_value=4661248 +HeapAlloc dt=266 heapalloc_value=4669440 +HeapAlloc dt=9 heapalloc_value=4677632 +HeapAlloc dt=50 heapalloc_value=4685824 +HeapAlloc dt=9 heapalloc_value=4694016 +HeapAlloc dt=7 heapalloc_value=4702208 +HeapAlloc dt=8 heapalloc_value=4710400 +HeapAlloc dt=7 heapalloc_value=4718592 +HeapAlloc dt=7 heapalloc_value=4726784 +HeapAlloc dt=7 heapalloc_value=4734976 +HeapAlloc dt=7 heapalloc_value=4743168 +GCMarkAssistBegin dt=9 stack=30 +HeapAlloc dt=40 heapalloc_value=4751360 +GoBlock dt=247 reason_string=10 stack=33 +ProcStop dt=18 +ProcStart dt=5438 p=2 p_seq=11 +ProcStop dt=22 +ProcStart dt=70608 p=2 p_seq=12 +GoUnblock dt=18 g=25 g_seq=4 stack=0 +GoStart dt=190 g=25 g_seq=5 +GoLabel dt=1 label_string=2 +GoBlock dt=594 reason_string=15 stack=26 +ProcStop dt=28 +ProcStart dt=802 p=2 p_seq=13 +ProcStop dt=17 +ProcStart dt=2684 p=2 p_seq=14 +ProcStop dt=29 +ProcStart dt=382 p=2 p_seq=15 +ProcStop dt=51 +ProcStart dt=2622 p=2 p_seq=16 +ProcStop dt=22 +ProcStart dt=66146 p=2 p_seq=17 +ProcStop dt=20 +ProcStart dt=49429 p=0 p_seq=40 +GoUnblock dt=13 g=9 g_seq=7 stack=0 +GoStart dt=174 g=9 g_seq=8 +GoLabel dt=1 label_string=2 +GoBlock dt=1963 reason_string=15 stack=26 +ProcStop dt=4345 +ProcStart dt=16958 p=2 p_seq=22 +ProcStop dt=18 +ProcStart dt=723 p=0 p_seq=42 +ProcStop dt=10 +ProcStart dt=16754 p=0 p_seq=43 +GoUnblock dt=14 g=1 g_seq=49 stack=0 +GoStart dt=152 g=1 g_seq=50 +HeapAlloc dt=32 heapalloc_value=17038224 +HeapAlloc dt=24 heapalloc_value=17046416 +HeapAlloc dt=15 heapalloc_value=17054608 +HeapAlloc dt=16 heapalloc_value=17062800 +HeapAlloc dt=13 heapalloc_value=17070992 +HeapAlloc dt=14 heapalloc_value=17079184 +HeapAlloc dt=17 heapalloc_value=17087376 +HeapAlloc dt=14 heapalloc_value=17095568 +HeapAlloc dt=14 heapalloc_value=17103760 +HeapAlloc dt=13 heapalloc_value=17111952 +HeapAlloc dt=81 heapalloc_value=17120144 +HeapAlloc dt=20 heapalloc_value=17128336 +HeapAlloc dt=14 heapalloc_value=17136528 +HeapAlloc dt=14 heapalloc_value=17144720 +HeapAlloc dt=16 heapalloc_value=17152912 +HeapAlloc dt=15 heapalloc_value=17161104 +HeapAlloc dt=13 heapalloc_value=17169296 +HeapAlloc dt=13 heapalloc_value=17177488 +HeapAlloc dt=16 heapalloc_value=17185680 +HeapAlloc dt=15 heapalloc_value=17193872 +HeapAlloc dt=14 heapalloc_value=17202064 +HeapAlloc dt=13 heapalloc_value=17210256 +HeapAlloc dt=16 heapalloc_value=17218448 +HeapAlloc dt=14 heapalloc_value=17226640 +HeapAlloc dt=14 heapalloc_value=17234832 +HeapAlloc dt=16 heapalloc_value=17243024 +HeapAlloc dt=16 heapalloc_value=17251216 +HeapAlloc dt=15 heapalloc_value=17259408 +HeapAlloc dt=14 heapalloc_value=17267600 +HeapAlloc dt=13 heapalloc_value=17275792 +HeapAlloc dt=45 heapalloc_value=17283984 +HeapAlloc dt=18 heapalloc_value=17292176 +HeapAlloc dt=16 heapalloc_value=17300368 +HeapAlloc dt=16 heapalloc_value=17308560 +HeapAlloc dt=15 heapalloc_value=17316752 +HeapAlloc dt=17 heapalloc_value=17324944 +HeapAlloc dt=15 heapalloc_value=17333136 +HeapAlloc dt=14 heapalloc_value=17341328 +HeapAlloc dt=16 heapalloc_value=17349520 +HeapAlloc dt=14 heapalloc_value=17357712 +HeapAlloc dt=14 heapalloc_value=17365904 +HeapAlloc dt=12 heapalloc_value=17374096 +HeapAlloc dt=14 heapalloc_value=17382288 +HeapAlloc dt=13 heapalloc_value=17390480 +HeapAlloc dt=13 heapalloc_value=17398672 +HeapAlloc dt=13 heapalloc_value=17406864 +HeapAlloc dt=36 heapalloc_value=17873808 +HeapAlloc dt=3813 heapalloc_value=17882000 +HeapAlloc dt=47 heapalloc_value=17890192 +HeapAlloc dt=10 heapalloc_value=17898384 +HeapAlloc dt=10 heapalloc_value=17906576 +HeapAlloc dt=12 heapalloc_value=17914768 +HeapAlloc dt=21 heapalloc_value=17922960 +HeapAlloc dt=17 heapalloc_value=17931152 +HeapAlloc dt=12 heapalloc_value=17939344 +HeapAlloc dt=13 heapalloc_value=17947536 +HeapAlloc dt=24 heapalloc_value=17955728 +HeapAlloc dt=91 heapalloc_value=17963920 +HeapAlloc dt=11 heapalloc_value=17972112 +HeapAlloc dt=9 heapalloc_value=17980304 +HeapAlloc dt=11 heapalloc_value=17988496 +HeapAlloc dt=8 heapalloc_value=17996688 +HeapAlloc dt=9 heapalloc_value=18004880 +HeapAlloc dt=9 heapalloc_value=18013072 +HeapAlloc dt=10 heapalloc_value=18021264 +HeapAlloc dt=9 heapalloc_value=18029456 +HeapAlloc dt=9 heapalloc_value=18037648 +HeapAlloc dt=8 heapalloc_value=18045840 +HeapAlloc dt=11 heapalloc_value=18054032 +HeapAlloc dt=8 heapalloc_value=18062224 +HeapAlloc dt=9 heapalloc_value=18070416 +HeapAlloc dt=9 heapalloc_value=18078608 +HeapAlloc dt=8 heapalloc_value=18086800 +HeapAlloc dt=9 heapalloc_value=18094992 +HeapAlloc dt=9 heapalloc_value=18103184 +HeapAlloc dt=8 heapalloc_value=18111376 +HeapAlloc dt=11 heapalloc_value=18119568 +HeapAlloc dt=9 heapalloc_value=18127760 +HeapAlloc dt=52 heapalloc_value=18135952 +HeapAlloc dt=10 heapalloc_value=18144144 +HeapAlloc dt=12 heapalloc_value=18152336 +HeapAlloc dt=10 heapalloc_value=18160528 +HeapAlloc dt=10 heapalloc_value=18168720 +HeapAlloc dt=25 heapalloc_value=18176912 +HeapAlloc dt=37 heapalloc_value=18185104 +HeapAlloc dt=32 heapalloc_value=18193296 +HeapAlloc dt=27 heapalloc_value=18201488 +HeapAlloc dt=27 heapalloc_value=18209680 +HeapAlloc dt=29 heapalloc_value=18217872 +HeapAlloc dt=28 heapalloc_value=18226064 +HeapAlloc dt=22 heapalloc_value=18234256 +HeapAlloc dt=32 heapalloc_value=18242448 +HeapAlloc dt=30 heapalloc_value=18250640 +HeapAlloc dt=26 heapalloc_value=18258832 +HeapAlloc dt=30 heapalloc_value=18267024 +HeapAlloc dt=33 heapalloc_value=18275216 +HeapAlloc dt=27 heapalloc_value=18283408 +HeapAlloc dt=33 heapalloc_value=18291600 +HeapAlloc dt=25 heapalloc_value=18299792 +HeapAlloc dt=40 heapalloc_value=18307984 +HeapAlloc dt=23 heapalloc_value=18316176 +HeapAlloc dt=32 heapalloc_value=18324368 +HeapAlloc dt=31 heapalloc_value=18332560 +HeapAlloc dt=30 heapalloc_value=18340752 +HeapAlloc dt=25 heapalloc_value=18348944 +HeapAlloc dt=32 heapalloc_value=18357136 +HeapAlloc dt=30 heapalloc_value=18365328 +HeapAlloc dt=32 heapalloc_value=18373520 +HeapAlloc dt=34 heapalloc_value=18381712 +HeapAlloc dt=30 heapalloc_value=18389904 +HeapAlloc dt=31 heapalloc_value=18398096 +HeapAlloc dt=29 heapalloc_value=18406288 +HeapAlloc dt=29 heapalloc_value=18414480 +HeapAlloc dt=29 heapalloc_value=18422672 +HeapAlloc dt=28 heapalloc_value=18430864 +HeapAlloc dt=35 heapalloc_value=18439056 +HeapAlloc dt=31 heapalloc_value=18447248 +HeapAlloc dt=30 heapalloc_value=18455440 +HeapAlloc dt=116 heapalloc_value=18463632 +HeapAlloc dt=21 heapalloc_value=18471824 +HeapAlloc dt=13 heapalloc_value=18480016 +HeapAlloc dt=65 heapalloc_value=18488208 +HeapAlloc dt=21 heapalloc_value=18496400 +HeapAlloc dt=16 heapalloc_value=18504592 +HeapAlloc dt=14 heapalloc_value=18512784 +HeapAlloc dt=13 heapalloc_value=18520976 +GoBlock dt=19 reason_string=19 stack=21 +ProcStop dt=197 +ProcStart dt=17439 p=2 p_seq=24 +ProcStop dt=12 +ProcStart dt=2355 p=0 p_seq=46 +ProcStop dt=8 +ProcStart dt=16730 p=0 p_seq=47 +GoUnblock dt=11 g=1 g_seq=53 stack=0 +GoStart dt=144 g=1 g_seq=54 +HeapAlloc dt=26 heapalloc_value=19553168 +HeapAlloc dt=13 heapalloc_value=19561360 +HeapAlloc dt=8 heapalloc_value=19569552 +HeapAlloc dt=6 heapalloc_value=19577744 +HeapAlloc dt=7 heapalloc_value=19585936 +HeapAlloc dt=7 heapalloc_value=19594128 +HeapAlloc dt=69 heapalloc_value=19602320 +HeapAlloc dt=7 heapalloc_value=19610512 +HeapAlloc dt=7 heapalloc_value=19618704 +HeapAlloc dt=250 heapalloc_value=19626896 +HeapAlloc dt=9 heapalloc_value=19635088 +HeapAlloc dt=7 heapalloc_value=19643280 +HeapAlloc dt=7 heapalloc_value=19651472 +HeapAlloc dt=7 heapalloc_value=19659664 +HeapAlloc dt=7 heapalloc_value=19667856 +HeapAlloc dt=7 heapalloc_value=19676048 +HeapAlloc dt=7 heapalloc_value=19684240 +HeapAlloc dt=6 heapalloc_value=19692432 +HeapAlloc dt=8 heapalloc_value=19700624 +HeapAlloc dt=6 heapalloc_value=19708816 +HeapAlloc dt=7 heapalloc_value=19717008 +HeapAlloc dt=7 heapalloc_value=19725200 +HeapAlloc dt=6 heapalloc_value=19733392 +HeapAlloc dt=7 heapalloc_value=19741584 +HeapAlloc dt=7 heapalloc_value=19749776 +HeapAlloc dt=6 heapalloc_value=19757968 +HeapAlloc dt=7 heapalloc_value=19766160 +HeapAlloc dt=7 heapalloc_value=19774352 +HeapAlloc dt=6 heapalloc_value=19782544 +HeapAlloc dt=7 heapalloc_value=19790736 +HeapAlloc dt=7 heapalloc_value=19798928 +HeapAlloc dt=6 heapalloc_value=19807120 +HeapAlloc dt=48 heapalloc_value=19815312 +HeapAlloc dt=8 heapalloc_value=19823504 +HeapAlloc dt=6 heapalloc_value=19831696 +HeapAlloc dt=7 heapalloc_value=19839888 +HeapAlloc dt=6 heapalloc_value=19848080 +HeapAlloc dt=7 heapalloc_value=19856272 +HeapAlloc dt=7 heapalloc_value=19864464 +HeapAlloc dt=7 heapalloc_value=19872656 +HeapAlloc dt=6 heapalloc_value=19880848 +HeapAlloc dt=70 heapalloc_value=19889040 +HeapAlloc dt=8 heapalloc_value=19897232 +HeapAlloc dt=7 heapalloc_value=19905424 +HeapAlloc dt=8 heapalloc_value=19913616 +HeapAlloc dt=9 heapalloc_value=19921808 +HeapAlloc dt=6 heapalloc_value=19930000 +HeapAlloc dt=7 heapalloc_value=19938192 +HeapAlloc dt=6 heapalloc_value=19946384 +HeapAlloc dt=7 heapalloc_value=19954576 +HeapAlloc dt=7 heapalloc_value=19962768 +HeapAlloc dt=6 heapalloc_value=19970960 +HeapAlloc dt=7 heapalloc_value=19979152 +HeapAlloc dt=7 heapalloc_value=19987344 +HeapAlloc dt=6 heapalloc_value=19995536 +HeapAlloc dt=7 heapalloc_value=20003728 +HeapAlloc dt=6 heapalloc_value=20011920 +HeapAlloc dt=7 heapalloc_value=20020112 +HeapAlloc dt=7 heapalloc_value=20028304 +HeapAlloc dt=7 heapalloc_value=20036496 +HeapAlloc dt=7 heapalloc_value=20044688 +HeapAlloc dt=6 heapalloc_value=20052880 +HeapAlloc dt=177 heapalloc_value=20061072 +HeapAlloc dt=8 heapalloc_value=20069264 +HeapAlloc dt=7 heapalloc_value=20077456 +HeapAlloc dt=7 heapalloc_value=20085648 +HeapAlloc dt=6 heapalloc_value=20093840 +HeapAlloc dt=7 heapalloc_value=20102032 +HeapAlloc dt=7 heapalloc_value=20110224 +HeapAlloc dt=46 heapalloc_value=20118416 +HeapAlloc dt=8 heapalloc_value=20126608 +HeapAlloc dt=6 heapalloc_value=20134800 +HeapAlloc dt=7 heapalloc_value=20142992 +HeapAlloc dt=494 heapalloc_value=20151184 +HeapAlloc dt=13 heapalloc_value=20159376 +HeapAlloc dt=8 heapalloc_value=20167568 +HeapAlloc dt=6 heapalloc_value=20175760 +HeapAlloc dt=93 heapalloc_value=20183952 +HeapAlloc dt=7 heapalloc_value=20192144 +HeapAlloc dt=6 heapalloc_value=20200336 +HeapAlloc dt=7 heapalloc_value=20208528 +HeapAlloc dt=7 heapalloc_value=20216720 +HeapAlloc dt=6 heapalloc_value=20224912 +HeapAlloc dt=46 heapalloc_value=20233104 +HeapAlloc dt=8 heapalloc_value=20241296 +HeapAlloc dt=6 heapalloc_value=20249488 +HeapAlloc dt=7 heapalloc_value=20257680 +HeapAlloc dt=7 heapalloc_value=20265872 +HeapAlloc dt=6 heapalloc_value=20274064 +HeapAlloc dt=7 heapalloc_value=20282256 +HeapAlloc dt=7 heapalloc_value=20290448 +HeapAlloc dt=7 heapalloc_value=20298640 +HeapAlloc dt=6 heapalloc_value=20306832 +HeapAlloc dt=7 heapalloc_value=20315024 +HeapAlloc dt=6 heapalloc_value=20323216 +HeapAlloc dt=7 heapalloc_value=20331408 +HeapAlloc dt=6 heapalloc_value=20339600 +HeapAlloc dt=7 heapalloc_value=20347792 +HeapAlloc dt=7 heapalloc_value=20355984 +HeapAlloc dt=6 heapalloc_value=20364176 +HeapAlloc dt=7 heapalloc_value=20372368 +HeapAlloc dt=7 heapalloc_value=20380560 +HeapAlloc dt=6 heapalloc_value=20388752 +HeapAlloc dt=7 heapalloc_value=20396944 +HeapAlloc dt=7 heapalloc_value=20405136 +HeapAlloc dt=68 heapalloc_value=20413328 +HeapAlloc dt=8 heapalloc_value=20421520 +HeapAlloc dt=6 heapalloc_value=20429712 +HeapAlloc dt=7 heapalloc_value=20437904 +HeapAlloc dt=7 heapalloc_value=20446096 +HeapAlloc dt=6 heapalloc_value=20454288 +HeapAlloc dt=7 heapalloc_value=20462480 +HeapAlloc dt=7 heapalloc_value=20470672 +HeapAlloc dt=7 heapalloc_value=20478864 +HeapAlloc dt=6 heapalloc_value=20487056 +HeapAlloc dt=7 heapalloc_value=20495248 +HeapAlloc dt=7 heapalloc_value=20503440 +HeapAlloc dt=6 heapalloc_value=20511632 +HeapAlloc dt=7 heapalloc_value=20519824 +HeapAlloc dt=7 heapalloc_value=20528016 +HeapAlloc dt=6 heapalloc_value=20536208 +HeapAlloc dt=7 heapalloc_value=20544400 +HeapAlloc dt=7 heapalloc_value=20552592 +HeapAlloc dt=6 heapalloc_value=20560784 +HeapAlloc dt=7 heapalloc_value=20568976 +GoBlock dt=13 reason_string=19 stack=21 +ProcStop dt=190 +ProcStart dt=17383 p=2 p_seq=26 +ProcStop dt=13 +ProcStart dt=1688 p=0 p_seq=50 +ProcStop dt=9 +ProcStart dt=16778 p=7 p_seq=1 +GoStart dt=16 g=12 g_seq=1 +GoStop dt=300490 reason_string=16 stack=52 +GoStart dt=19 g=12 g_seq=2 +GoStop dt=316380 reason_string=16 stack=52 +GoStart dt=17 g=12 g_seq=3 +GoDestroy dt=164357 +ProcStop dt=28 +ProcStart dt=1828 p=7 p_seq=2 +ProcStop dt=17 +ProcStart dt=81856 p=5 p_seq=4 +ProcStop dt=18 +ProcStart dt=688851 p=6 p_seq=10 +ProcStop dt=18 +ProcStart dt=16754 p=6 p_seq=11 +HeapAlloc dt=31 heapalloc_value=23313224 +GoCreate dt=50 new_g=67 new_stack=64 stack=0 +GoStart dt=169 g=67 g_seq=1 +GoSyscallBegin dt=30 p_seq=12 stack=65 +GoSyscallEnd dt=257 +GoDestroy dt=6 +ProcStop dt=8 +ProcStart dt=1281 p=6 p_seq=13 +ProcStop dt=20 +ProcStart dt=3460 p=6 p_seq=15 +GoStart dt=1376 g=82 g_seq=1 +GoSyscallBegin dt=34 p_seq=16 stack=79 +GoSyscallEnd dt=172 +HeapAlloc dt=3741 heapalloc_value=23466520 +HeapAlloc dt=37 heapalloc_value=23474712 +GoSyscallBegin dt=381 p_seq=17 stack=88 +GoSyscallEnd dt=29 +GoSyscallBegin dt=9 p_seq=18 stack=89 +GoSyscallEnd dt=33 +GoSyscallBegin dt=6 p_seq=19 stack=90 +GoSyscallEnd dt=20 +GoSyscallBegin dt=5 p_seq=20 stack=91 +GoSyscallEnd dt=25 +GoBlock dt=19 reason_string=19 stack=92 +ProcStop dt=69 +ProcStart dt=17618 p=7 p_seq=26 +ProcStop dt=33 +ProcStart dt=468 p=7 p_seq=27 +GoUnblock dt=5 g=1 g_seq=66 stack=0 +GoStart dt=5 g=1 g_seq=67 +GoSyscallBegin dt=14 p_seq=28 stack=86 +GoSyscallEnd dt=70 +GoSyscallBegin dt=82 p_seq=29 stack=95 +GoSyscallEnd dt=579 +HeapAlloc dt=276 heapalloc_value=23482840 +EventBatch gen=1 m=2852340 time=420901451500 size=3466 +ProcStart dt=290 p=0 p_seq=1 +GoStart dt=264 g=19 g_seq=1 +GoBlock dt=542 reason_string=12 stack=11 +GoStart dt=20 g=20 g_seq=1 +GoBlock dt=922 reason_string=12 stack=16 +GoStart dt=19 g=22 g_seq=1 +GoDestroy dt=156281 +ProcStop dt=46 +ProcStart dt=66693 p=0 p_seq=2 +ProcStop dt=20 +ProcStart dt=89853 p=0 p_seq=3 +ProcStop dt=20 +ProcStart dt=17575 p=1 p_seq=1 +ProcStop dt=20 +ProcStart dt=2159 p=0 p_seq=6 +ProcStop dt=13 +ProcStart dt=16751 p=0 p_seq=7 +GoUnblock dt=32 g=1 g_seq=5 stack=0 +GoStart dt=182 g=1 g_seq=6 +HeapAlloc dt=62 heapalloc_value=2842624 +HeapAlloc dt=25 heapalloc_value=2850816 +HeapAlloc dt=14 heapalloc_value=2859008 +HeapAlloc dt=11 heapalloc_value=2867200 +HeapAlloc dt=8 heapalloc_value=2875392 +HeapAlloc dt=9 heapalloc_value=2883584 +HeapAlloc dt=9 heapalloc_value=2891776 +HeapAlloc dt=8 heapalloc_value=2899968 +HeapAlloc dt=11 heapalloc_value=2908160 +HeapAlloc dt=102 heapalloc_value=2916352 +HeapAlloc dt=10 heapalloc_value=2924544 +HeapAlloc dt=13 heapalloc_value=2932736 +HeapAlloc dt=7 heapalloc_value=2940928 +HeapAlloc dt=8 heapalloc_value=2949120 +HeapAlloc dt=9 heapalloc_value=2957312 +HeapAlloc dt=8 heapalloc_value=2965504 +HeapAlloc dt=90 heapalloc_value=2973696 +HeapAlloc dt=9 heapalloc_value=2981888 +HeapAlloc dt=7 heapalloc_value=2990080 +HeapAlloc dt=8 heapalloc_value=2998272 +HeapAlloc dt=7 heapalloc_value=3006464 +HeapAlloc dt=6 heapalloc_value=3014656 +HeapAlloc dt=48 heapalloc_value=3022848 +HeapAlloc dt=7 heapalloc_value=3031040 +HeapAlloc dt=9 heapalloc_value=3039232 +HeapAlloc dt=6 heapalloc_value=3047424 +HeapAlloc dt=7 heapalloc_value=3055616 +HeapAlloc dt=8 heapalloc_value=3063808 +HeapAlloc dt=7 heapalloc_value=3072000 +HeapAlloc dt=7 heapalloc_value=3080192 +HeapAlloc dt=6 heapalloc_value=3088384 +HeapAlloc dt=7 heapalloc_value=3096576 +HeapAlloc dt=8 heapalloc_value=3104768 +HeapAlloc dt=8 heapalloc_value=3112960 +HeapAlloc dt=6 heapalloc_value=3121152 +HeapAlloc dt=7 heapalloc_value=3129344 +HeapAlloc dt=6 heapalloc_value=3137536 +HeapAlloc dt=6 heapalloc_value=3145728 +HeapAlloc dt=7 heapalloc_value=3153920 +HeapAlloc dt=6 heapalloc_value=3162112 +HeapAlloc dt=9 heapalloc_value=3170304 +HeapAlloc dt=6 heapalloc_value=3178496 +HeapAlloc dt=6 heapalloc_value=3186688 +HeapAlloc dt=7 heapalloc_value=3194880 +HeapAlloc dt=6 heapalloc_value=3203072 +HeapAlloc dt=7 heapalloc_value=3211264 +HeapAlloc dt=730 heapalloc_value=3260416 +HeapAlloc dt=3100 heapalloc_value=3268608 +HeapAlloc dt=18 heapalloc_value=3276800 +HeapAlloc dt=102 heapalloc_value=3284992 +HeapAlloc dt=9 heapalloc_value=3293184 +HeapAlloc dt=7 heapalloc_value=3301376 +HeapAlloc dt=6 heapalloc_value=3309568 +HeapAlloc dt=7 heapalloc_value=3317760 +HeapAlloc dt=6 heapalloc_value=3325952 +HeapAlloc dt=6 heapalloc_value=3334144 +HeapAlloc dt=7 heapalloc_value=3342336 +HeapAlloc dt=6 heapalloc_value=3350528 +HeapAlloc dt=7 heapalloc_value=3358720 +HeapAlloc dt=6 heapalloc_value=3366912 +HeapAlloc dt=44 heapalloc_value=3375104 +HeapAlloc dt=8 heapalloc_value=3383296 +HeapAlloc dt=6 heapalloc_value=3391488 +HeapAlloc dt=7 heapalloc_value=3399680 +HeapAlloc dt=6 heapalloc_value=3407872 +HeapAlloc dt=7 heapalloc_value=3416064 +HeapAlloc dt=7 heapalloc_value=3424256 +HeapAlloc dt=6 heapalloc_value=3432448 +HeapAlloc dt=6 heapalloc_value=3440640 +HeapAlloc dt=7 heapalloc_value=3448832 +HeapAlloc dt=6 heapalloc_value=3457024 +HeapAlloc dt=7 heapalloc_value=3465216 +HeapAlloc dt=6 heapalloc_value=3473408 +HeapAlloc dt=6 heapalloc_value=3481600 +HeapAlloc dt=7 heapalloc_value=3489792 +HeapAlloc dt=73 heapalloc_value=3497984 +HeapAlloc dt=8 heapalloc_value=3506176 +HeapAlloc dt=7 heapalloc_value=3514368 +HeapAlloc dt=6 heapalloc_value=3522560 +HeapAlloc dt=6 heapalloc_value=3530752 +HeapAlloc dt=7 heapalloc_value=3538944 +HeapAlloc dt=7 heapalloc_value=3547136 +HeapAlloc dt=6 heapalloc_value=3555328 +HeapAlloc dt=7 heapalloc_value=3563520 +HeapAlloc dt=6 heapalloc_value=3571712 +HeapAlloc dt=6 heapalloc_value=3579904 +HeapAlloc dt=47 heapalloc_value=3588096 +HeapAlloc dt=7 heapalloc_value=3596288 +HeapAlloc dt=6 heapalloc_value=3604480 +HeapAlloc dt=7 heapalloc_value=3612672 +HeapAlloc dt=6 heapalloc_value=3620864 +HeapAlloc dt=7 heapalloc_value=3629056 +HeapAlloc dt=6 heapalloc_value=3637248 +HeapAlloc dt=7 heapalloc_value=3645440 +HeapAlloc dt=6 heapalloc_value=3653632 +HeapAlloc dt=6 heapalloc_value=3661824 +HeapAlloc dt=7 heapalloc_value=3670016 +HeapAlloc dt=6 heapalloc_value=3678208 +HeapAlloc dt=6 heapalloc_value=3686400 +HeapAlloc dt=7 heapalloc_value=3694592 +HeapAlloc dt=6 heapalloc_value=3702784 +HeapAlloc dt=7 heapalloc_value=3710976 +HeapAlloc dt=6 heapalloc_value=3719168 +HeapAlloc dt=6 heapalloc_value=3727360 +HeapAlloc dt=7 heapalloc_value=3735552 +HeapAlloc dt=6 heapalloc_value=3743744 +HeapAlloc dt=9 heapalloc_value=3751936 +HeapAlloc dt=72 heapalloc_value=3760128 +HeapAlloc dt=8 heapalloc_value=3768320 +HeapAlloc dt=7 heapalloc_value=3776512 +HeapAlloc dt=6 heapalloc_value=3784704 +HeapAlloc dt=7 heapalloc_value=3792896 +HeapAlloc dt=8 heapalloc_value=3801088 +HeapAlloc dt=64 heapalloc_value=3809280 +HeapAlloc dt=8 heapalloc_value=3817472 +HeapAlloc dt=6 heapalloc_value=3825664 +HeapAlloc dt=7 heapalloc_value=3833856 +HeapAlloc dt=6 heapalloc_value=3842048 +HeapAlloc dt=7 heapalloc_value=3850240 +HeapAlloc dt=6 heapalloc_value=3858432 +HeapAlloc dt=6 heapalloc_value=3866624 +HeapAlloc dt=7 heapalloc_value=3874816 +HeapAlloc dt=7 heapalloc_value=3883008 +HeapAlloc dt=6 heapalloc_value=3891200 +HeapAlloc dt=7 heapalloc_value=3899392 +HeapAlloc dt=6 heapalloc_value=3907584 +GoBlock dt=19 reason_string=19 stack=21 +ProcStop dt=232 +ProcStart dt=17560 p=1 p_seq=3 +ProcStop dt=23 +ProcStart dt=25946 p=0 p_seq=28 +ProcStop dt=14 +ProcStart dt=16839 p=0 p_seq=29 +GoUnblock dt=21 g=1 g_seq=20 stack=0 +GoStart dt=209 g=1 g_seq=21 +HeapAlloc dt=60 heapalloc_value=4452592 +HeapAlloc dt=28 heapalloc_value=4460784 +HeapAlloc dt=29 heapalloc_value=4468976 +HeapAlloc dt=17 heapalloc_value=4477168 +HeapAlloc dt=19 heapalloc_value=4485360 +HeapAlloc dt=26 heapalloc_value=4493552 +HeapAlloc dt=17 heapalloc_value=4501744 +HeapAlloc dt=21 heapalloc_value=4509936 +HeapAlloc dt=22 heapalloc_value=4518128 +HeapAlloc dt=22 heapalloc_value=4526320 +HeapAlloc dt=36 heapalloc_value=4624624 +HeapAlloc dt=174 heapalloc_value=4632816 +HeapAlloc dt=22 heapalloc_value=4641008 +HeapAlloc dt=23 heapalloc_value=4649200 +HeapAlloc dt=144 heapalloc_value=4657392 +HeapAlloc dt=18 heapalloc_value=4665584 +HeapAlloc dt=19 heapalloc_value=4673776 +HeapAlloc dt=59 heapalloc_value=4681968 +HeapAlloc dt=15 heapalloc_value=4690160 +HeapAlloc dt=10 heapalloc_value=4698352 +HeapAlloc dt=20 heapalloc_value=4706544 +HeapAlloc dt=37 heapalloc_value=4714736 +HeapAlloc dt=33 heapalloc_value=4722928 +HeapAlloc dt=32 heapalloc_value=4731120 +HeapAlloc dt=30 heapalloc_value=4739312 +HeapAlloc dt=33 heapalloc_value=4747504 +HeapAlloc dt=28 heapalloc_value=4755696 +HeapAlloc dt=10 heapalloc_value=4763888 +HeapAlloc dt=9 heapalloc_value=4772080 +HeapAlloc dt=10 heapalloc_value=4780272 +HeapAlloc dt=10 heapalloc_value=4788464 +HeapAlloc dt=12 heapalloc_value=4796656 +HeapAlloc dt=11 heapalloc_value=4804848 +HeapAlloc dt=9 heapalloc_value=4813040 +HeapAlloc dt=9 heapalloc_value=4821232 +HeapAlloc dt=9 heapalloc_value=4829424 +HeapAlloc dt=9 heapalloc_value=4837616 +HeapAlloc dt=10 heapalloc_value=4845808 +HeapAlloc dt=10 heapalloc_value=4854000 +HeapAlloc dt=105 heapalloc_value=4862192 +HeapAlloc dt=13 heapalloc_value=4870384 +HeapAlloc dt=10 heapalloc_value=4878576 +HeapAlloc dt=9 heapalloc_value=4886768 +HeapAlloc dt=59 heapalloc_value=4894960 +HeapAlloc dt=11 heapalloc_value=4903152 +HeapAlloc dt=10 heapalloc_value=4911344 +HeapAlloc dt=9 heapalloc_value=4919536 +HeapAlloc dt=11 heapalloc_value=4927728 +HeapAlloc dt=12 heapalloc_value=4935920 +HeapAlloc dt=10 heapalloc_value=4944112 +HeapAlloc dt=9 heapalloc_value=4952304 +HeapAlloc dt=10 heapalloc_value=4960496 +HeapAlloc dt=9 heapalloc_value=4968688 +HeapAlloc dt=10 heapalloc_value=4976880 +HeapAlloc dt=9 heapalloc_value=4985072 +HeapAlloc dt=12 heapalloc_value=4993264 +HeapAlloc dt=9 heapalloc_value=5001456 +HeapAlloc dt=9 heapalloc_value=5009648 +HeapAlloc dt=10 heapalloc_value=5017840 +HeapAlloc dt=9 heapalloc_value=5026032 +HeapAlloc dt=10 heapalloc_value=5034224 +HeapAlloc dt=9 heapalloc_value=5042416 +HeapAlloc dt=10 heapalloc_value=5050608 +HeapAlloc dt=11 heapalloc_value=5058800 +HeapAlloc dt=10 heapalloc_value=5066992 +HeapAlloc dt=14 heapalloc_value=5075184 +HeapAlloc dt=9 heapalloc_value=5083376 +HeapAlloc dt=10 heapalloc_value=5091568 +HeapAlloc dt=9 heapalloc_value=5099760 +HeapAlloc dt=10 heapalloc_value=5107952 +HeapAlloc dt=10 heapalloc_value=5116144 +HeapAlloc dt=21 heapalloc_value=5124336 +HeapAlloc dt=11 heapalloc_value=5132528 +HeapAlloc dt=8 heapalloc_value=5140720 +HeapAlloc dt=7 heapalloc_value=5148912 +HeapAlloc dt=8 heapalloc_value=5157104 +HeapAlloc dt=9 heapalloc_value=5165296 +HeapAlloc dt=10 heapalloc_value=5173488 +HeapAlloc dt=78 heapalloc_value=5181680 +HeapAlloc dt=11 heapalloc_value=5189872 +HeapAlloc dt=7 heapalloc_value=5198064 +HeapAlloc dt=8 heapalloc_value=5206256 +HeapAlloc dt=8 heapalloc_value=5214448 +HeapAlloc dt=7 heapalloc_value=5222640 +HeapAlloc dt=10 heapalloc_value=5230832 +HeapAlloc dt=7 heapalloc_value=5239024 +HeapAlloc dt=8 heapalloc_value=5247216 +HeapAlloc dt=7 heapalloc_value=5255408 +HeapAlloc dt=8 heapalloc_value=5263600 +HeapAlloc dt=7 heapalloc_value=5271792 +HeapAlloc dt=8 heapalloc_value=5279984 +HeapAlloc dt=8 heapalloc_value=5288176 +HeapAlloc dt=96 heapalloc_value=5296368 +HeapAlloc dt=11 heapalloc_value=5304560 +HeapAlloc dt=53 heapalloc_value=5312752 +HeapAlloc dt=9 heapalloc_value=5320944 +HeapAlloc dt=8 heapalloc_value=5329136 +HeapAlloc dt=8 heapalloc_value=5337328 +HeapAlloc dt=7 heapalloc_value=5345520 +HeapAlloc dt=8 heapalloc_value=5353712 +HeapAlloc dt=9 heapalloc_value=5361904 +HeapAlloc dt=8 heapalloc_value=5370096 +HeapAlloc dt=7 heapalloc_value=5378288 +HeapAlloc dt=8 heapalloc_value=5386480 +HeapAlloc dt=7 heapalloc_value=5394672 +HeapAlloc dt=7 heapalloc_value=5402864 +HeapAlloc dt=8 heapalloc_value=5411056 +HeapAlloc dt=8 heapalloc_value=5419248 +HeapAlloc dt=9 heapalloc_value=5427440 +HeapAlloc dt=7 heapalloc_value=5435632 +HeapAlloc dt=8 heapalloc_value=5443824 +HeapAlloc dt=7 heapalloc_value=5452016 +HeapAlloc dt=8 heapalloc_value=5460208 +HeapAlloc dt=7 heapalloc_value=5468400 +HeapAlloc dt=8 heapalloc_value=5476592 +HeapAlloc dt=7 heapalloc_value=5484784 +HeapAlloc dt=10 heapalloc_value=5492976 +HeapAlloc dt=8 heapalloc_value=5501168 +HeapAlloc dt=7 heapalloc_value=5509360 +HeapAlloc dt=8 heapalloc_value=5517552 +HeapAlloc dt=7 heapalloc_value=5525744 +HeapAlloc dt=8 heapalloc_value=5533936 +HeapAlloc dt=8 heapalloc_value=5542128 +HeapAlloc dt=8 heapalloc_value=5550320 +HeapAlloc dt=84 heapalloc_value=5558512 +HeapAlloc dt=10 heapalloc_value=5566704 +GoBlock dt=17 reason_string=19 stack=21 +ProcStop dt=237 +ProcStart dt=17614 p=1 p_seq=17 +ProcStop dt=23 +ProcStart dt=4599 p=0 p_seq=32 +ProcStop dt=14 +ProcStart dt=16769 p=0 p_seq=33 +GoUnblock dt=22 g=1 g_seq=24 stack=0 +GoStart dt=189 g=1 g_seq=25 +HeapAlloc dt=55 heapalloc_value=6729968 +HeapAlloc dt=24 heapalloc_value=6738160 +HeapAlloc dt=12 heapalloc_value=6746352 +HeapAlloc dt=9 heapalloc_value=6754544 +HeapAlloc dt=10 heapalloc_value=6762736 +HeapAlloc dt=11 heapalloc_value=6770928 +HeapAlloc dt=8 heapalloc_value=6779120 +HeapAlloc dt=12 heapalloc_value=6787312 +HeapAlloc dt=8 heapalloc_value=6795504 +HeapAlloc dt=7 heapalloc_value=6803696 +HeapAlloc dt=9 heapalloc_value=6811888 +HeapAlloc dt=6 heapalloc_value=6820080 +HeapAlloc dt=6 heapalloc_value=6828272 +HeapAlloc dt=6 heapalloc_value=6836464 +HeapAlloc dt=6 heapalloc_value=6844656 +HeapAlloc dt=6 heapalloc_value=6852848 +HeapAlloc dt=6 heapalloc_value=6861040 +HeapAlloc dt=595 heapalloc_value=6869232 +HeapAlloc dt=89 heapalloc_value=6877424 +HeapAlloc dt=8 heapalloc_value=6885616 +HeapAlloc dt=7 heapalloc_value=6893808 +HeapAlloc dt=8 heapalloc_value=6902000 +HeapAlloc dt=43 heapalloc_value=6910192 +HeapAlloc dt=7 heapalloc_value=6918384 +HeapAlloc dt=6 heapalloc_value=6926576 +HeapAlloc dt=7 heapalloc_value=6934768 +HeapAlloc dt=6 heapalloc_value=6942960 +HeapAlloc dt=6 heapalloc_value=6951152 +HeapAlloc dt=6 heapalloc_value=6959344 +HeapAlloc dt=6 heapalloc_value=6967536 +HeapAlloc dt=6 heapalloc_value=6975728 +HeapAlloc dt=5 heapalloc_value=6983920 +HeapAlloc dt=6 heapalloc_value=6992112 +HeapAlloc dt=6 heapalloc_value=7000304 +HeapAlloc dt=6 heapalloc_value=7008496 +HeapAlloc dt=6 heapalloc_value=7016688 +HeapAlloc dt=6 heapalloc_value=7024880 +HeapAlloc dt=8 heapalloc_value=7033072 +HeapAlloc dt=5 heapalloc_value=7041264 +HeapAlloc dt=6 heapalloc_value=7049456 +HeapAlloc dt=6 heapalloc_value=7057648 +HeapAlloc dt=6 heapalloc_value=7065840 +HeapAlloc dt=5 heapalloc_value=7074032 +HeapAlloc dt=6 heapalloc_value=7082224 +HeapAlloc dt=6 heapalloc_value=7090416 +HeapAlloc dt=6 heapalloc_value=7098608 +HeapAlloc dt=5 heapalloc_value=7106800 +HeapAlloc dt=43 heapalloc_value=7114992 +HeapAlloc dt=7 heapalloc_value=7123184 +HeapAlloc dt=74 heapalloc_value=7131376 +HeapAlloc dt=8 heapalloc_value=7139568 +HeapAlloc dt=6 heapalloc_value=7147760 +HeapAlloc dt=6 heapalloc_value=7155952 +HeapAlloc dt=5 heapalloc_value=7164144 +HeapAlloc dt=6 heapalloc_value=7172336 +HeapAlloc dt=6 heapalloc_value=7180528 +HeapAlloc dt=6 heapalloc_value=7188720 +HeapAlloc dt=6 heapalloc_value=7196912 +HeapAlloc dt=379 heapalloc_value=7368944 +HeapAlloc dt=4398 heapalloc_value=7377136 +HeapAlloc dt=19 heapalloc_value=7385328 +HeapAlloc dt=14 heapalloc_value=7393520 +HeapAlloc dt=16 heapalloc_value=7401712 +HeapAlloc dt=12 heapalloc_value=7409904 +HeapAlloc dt=11 heapalloc_value=7418096 +HeapAlloc dt=13 heapalloc_value=7426288 +HeapAlloc dt=12 heapalloc_value=7434480 +HeapAlloc dt=12 heapalloc_value=7442672 +HeapAlloc dt=11 heapalloc_value=7450864 +HeapAlloc dt=12 heapalloc_value=7459056 +HeapAlloc dt=13 heapalloc_value=7467248 +HeapAlloc dt=13 heapalloc_value=7475440 +HeapAlloc dt=12 heapalloc_value=7483632 +HeapAlloc dt=13 heapalloc_value=7491824 +HeapAlloc dt=12 heapalloc_value=7500016 +HeapAlloc dt=12 heapalloc_value=7508208 +HeapAlloc dt=11 heapalloc_value=7516400 +HeapAlloc dt=12 heapalloc_value=7524592 +HeapAlloc dt=14 heapalloc_value=7532784 +HeapAlloc dt=12 heapalloc_value=7540976 +HeapAlloc dt=12 heapalloc_value=7549168 +HeapAlloc dt=13 heapalloc_value=7557360 +HeapAlloc dt=96 heapalloc_value=7565552 +HeapAlloc dt=9 heapalloc_value=7573744 +HeapAlloc dt=7 heapalloc_value=7581936 +HeapAlloc dt=6 heapalloc_value=7590128 +HeapAlloc dt=6 heapalloc_value=7598320 +HeapAlloc dt=6 heapalloc_value=7606512 +HeapAlloc dt=6 heapalloc_value=7614704 +HeapAlloc dt=6 heapalloc_value=7622896 +HeapAlloc dt=7 heapalloc_value=7631088 +HeapAlloc dt=6 heapalloc_value=7639280 +HeapAlloc dt=6 heapalloc_value=7647472 +HeapAlloc dt=81 heapalloc_value=7655664 +HeapAlloc dt=8 heapalloc_value=7663856 +HeapAlloc dt=6 heapalloc_value=7672048 +HeapAlloc dt=6 heapalloc_value=7680240 +HeapAlloc dt=6 heapalloc_value=7688432 +HeapAlloc dt=6 heapalloc_value=7696624 +HeapAlloc dt=45 heapalloc_value=7704816 +HeapAlloc dt=8 heapalloc_value=7713008 +HeapAlloc dt=6 heapalloc_value=7721200 +HeapAlloc dt=6 heapalloc_value=7729392 +HeapAlloc dt=6 heapalloc_value=7737584 +HeapAlloc dt=6 heapalloc_value=7745776 +HeapAlloc dt=6 heapalloc_value=7753968 +HeapAlloc dt=6 heapalloc_value=7762160 +HeapAlloc dt=6 heapalloc_value=7770352 +HeapAlloc dt=6 heapalloc_value=7778544 +HeapAlloc dt=6 heapalloc_value=7786736 +HeapAlloc dt=6 heapalloc_value=7794928 +HeapAlloc dt=6 heapalloc_value=7803120 +HeapAlloc dt=6 heapalloc_value=7811312 +HeapAlloc dt=6 heapalloc_value=7819504 +HeapAlloc dt=6 heapalloc_value=7827696 +HeapAlloc dt=6 heapalloc_value=7835888 +HeapAlloc dt=6 heapalloc_value=7844080 +HeapAlloc dt=6 heapalloc_value=7852272 +HeapAlloc dt=6 heapalloc_value=7860464 +HeapAlloc dt=6 heapalloc_value=7868656 +HeapAlloc dt=6 heapalloc_value=7876848 +HeapAlloc dt=6 heapalloc_value=7885040 +HeapAlloc dt=7 heapalloc_value=7893232 +HeapAlloc dt=5 heapalloc_value=7901424 +HeapAlloc dt=7 heapalloc_value=7909616 +HeapAlloc dt=72 heapalloc_value=7917808 +GCBegin dt=27 gc_seq=3 stack=41 +STWBegin dt=46 kind_string=22 stack=42 +GoUnblock dt=163 g=4 g_seq=3 stack=43 +ProcsChange dt=106 procs_value=8 stack=44 +STWEnd dt=26 +GCMarkAssistBegin dt=206 stack=30 +GCMarkAssistEnd dt=1163 +GoBlock dt=20 reason_string=19 stack=21 +GoStart dt=199 g=4 g_seq=4 +GoBlock dt=21 reason_string=15 stack=32 +GoUnblock dt=111 g=8 g_seq=2 stack=0 +GoStart dt=272 g=8 g_seq=3 +GoLabel dt=3 label_string=4 +GoBlock dt=553 reason_string=15 stack=26 +GoUnblock dt=12 g=1 g_seq=26 stack=0 +GoStart dt=9 g=1 g_seq=27 +HeapAlloc dt=172 heapalloc_value=7926000 +HeapAlloc dt=24 heapalloc_value=7934192 +HeapAlloc dt=9 heapalloc_value=7942384 +HeapAlloc dt=9 heapalloc_value=7950576 +HeapAlloc dt=15 heapalloc_value=7958768 +HeapAlloc dt=11 heapalloc_value=7966960 +HeapAlloc dt=12 heapalloc_value=7975152 +HeapAlloc dt=10 heapalloc_value=7983344 +HeapAlloc dt=11 heapalloc_value=7991536 +HeapAlloc dt=8 heapalloc_value=7999728 +HeapAlloc dt=7 heapalloc_value=8007920 +HeapAlloc dt=7 heapalloc_value=8016112 +HeapAlloc dt=9 heapalloc_value=8024304 +HeapAlloc dt=8 heapalloc_value=8032496 +HeapAlloc dt=9 heapalloc_value=8040688 +HeapAlloc dt=8 heapalloc_value=8048880 +HeapAlloc dt=7 heapalloc_value=8057072 +HeapAlloc dt=7 heapalloc_value=8065264 +HeapAlloc dt=8 heapalloc_value=8073456 +HeapAlloc dt=229 heapalloc_value=8081648 +HeapAlloc dt=13 heapalloc_value=8089840 +HeapAlloc dt=7 heapalloc_value=8098032 +HeapAlloc dt=7 heapalloc_value=8106224 +HeapAlloc dt=44 heapalloc_value=8114416 +HeapAlloc dt=9 heapalloc_value=8122608 +HeapAlloc dt=7 heapalloc_value=8130800 +HeapAlloc dt=7 heapalloc_value=8138992 +HeapAlloc dt=263 heapalloc_value=8147184 +HeapAlloc dt=9 heapalloc_value=8155376 +HeapAlloc dt=8 heapalloc_value=8163568 +HeapAlloc dt=7 heapalloc_value=8171760 +HeapAlloc dt=6 heapalloc_value=8179952 +HeapAlloc dt=42 heapalloc_value=8188144 +HeapAlloc dt=7 heapalloc_value=8196336 +HeapAlloc dt=7 heapalloc_value=8204528 +HeapAlloc dt=7 heapalloc_value=8212720 +HeapAlloc dt=8 heapalloc_value=8220912 +HeapAlloc dt=7 heapalloc_value=8229104 +HeapAlloc dt=7 heapalloc_value=8237296 +HeapAlloc dt=7 heapalloc_value=8245488 +HeapAlloc dt=7 heapalloc_value=8253680 +HeapAlloc dt=7 heapalloc_value=8261872 +HeapAlloc dt=6 heapalloc_value=8270064 +HeapAlloc dt=7 heapalloc_value=8278256 +HeapAlloc dt=7 heapalloc_value=8286448 +HeapAlloc dt=7 heapalloc_value=8294640 +HeapAlloc dt=7 heapalloc_value=8302832 +HeapAlloc dt=7 heapalloc_value=8311024 +HeapAlloc dt=50 heapalloc_value=8319216 +HeapAlloc dt=11 heapalloc_value=8327408 +HeapAlloc dt=14 heapalloc_value=8335600 +HeapAlloc dt=14 heapalloc_value=8343792 +HeapAlloc dt=11 heapalloc_value=8351984 +HeapAlloc dt=11 heapalloc_value=8360176 +HeapAlloc dt=13 heapalloc_value=8368368 +HeapAlloc dt=11 heapalloc_value=8376560 +HeapAlloc dt=11 heapalloc_value=8384752 +HeapAlloc dt=12 heapalloc_value=8392944 +HeapAlloc dt=11 heapalloc_value=8401136 +HeapAlloc dt=257 heapalloc_value=8409328 +HeapAlloc dt=19 heapalloc_value=8417520 +HeapAlloc dt=17 heapalloc_value=8425712 +HeapAlloc dt=15 heapalloc_value=8433904 +HeapAlloc dt=14 heapalloc_value=8442096 +HeapAlloc dt=50 heapalloc_value=8450288 +HeapAlloc dt=14 heapalloc_value=8458480 +HeapAlloc dt=14 heapalloc_value=8466672 +HeapAlloc dt=15 heapalloc_value=8474864 +HeapAlloc dt=14 heapalloc_value=8483056 +HeapAlloc dt=12 heapalloc_value=8491248 +HeapAlloc dt=12 heapalloc_value=8499440 +HeapAlloc dt=13 heapalloc_value=8507632 +HeapAlloc dt=14 heapalloc_value=8515824 +HeapAlloc dt=12 heapalloc_value=8524016 +HeapAlloc dt=13 heapalloc_value=8532208 +HeapAlloc dt=13 heapalloc_value=8540400 +HeapAlloc dt=13 heapalloc_value=8548592 +HeapAlloc dt=16 heapalloc_value=8556784 +HeapAlloc dt=14 heapalloc_value=8564976 +HeapAlloc dt=14 heapalloc_value=8573168 +HeapAlloc dt=16 heapalloc_value=8581360 +HeapAlloc dt=14 heapalloc_value=8589552 +HeapAlloc dt=14 heapalloc_value=8597744 +HeapAlloc dt=59 heapalloc_value=8605936 +HeapAlloc dt=15 heapalloc_value=8614128 +HeapAlloc dt=12 heapalloc_value=8622320 +HeapAlloc dt=12 heapalloc_value=8630512 +HeapAlloc dt=11 heapalloc_value=8638704 +HeapAlloc dt=15 heapalloc_value=8646896 +HeapAlloc dt=12 heapalloc_value=8655088 +HeapAlloc dt=11 heapalloc_value=8663280 +HeapAlloc dt=292 heapalloc_value=8671472 +HeapAlloc dt=14 heapalloc_value=8679664 +HeapAlloc dt=12 heapalloc_value=8687856 +HeapAlloc dt=11 heapalloc_value=8696048 +HeapAlloc dt=12 heapalloc_value=8704240 +HeapAlloc dt=44 heapalloc_value=8712432 +HeapAlloc dt=14 heapalloc_value=8720624 +HeapAlloc dt=11 heapalloc_value=8728816 +HeapAlloc dt=14 heapalloc_value=8737008 +HeapAlloc dt=52 heapalloc_value=8745200 +HeapAlloc dt=13 heapalloc_value=8753392 +HeapAlloc dt=13 heapalloc_value=8761584 +HeapAlloc dt=12 heapalloc_value=8769776 +HeapAlloc dt=15 heapalloc_value=8777968 +HeapAlloc dt=12 heapalloc_value=8786160 +HeapAlloc dt=14 heapalloc_value=8794352 +HeapAlloc dt=18 heapalloc_value=8802544 +GoStop dt=25 reason_string=16 stack=46 +GoStart dt=658 g=1 g_seq=28 +HeapAlloc dt=14 heapalloc_value=8810736 +HeapAlloc dt=24 heapalloc_value=8818928 +HeapAlloc dt=12 heapalloc_value=8827120 +HeapAlloc dt=13 heapalloc_value=8835312 +HeapAlloc dt=15 heapalloc_value=8843504 +HeapAlloc dt=12 heapalloc_value=8851696 +HeapAlloc dt=16 heapalloc_value=8859888 +HeapAlloc dt=14 heapalloc_value=8868080 +HeapAlloc dt=14 heapalloc_value=8876272 +HeapAlloc dt=13 heapalloc_value=8884464 +HeapAlloc dt=12 heapalloc_value=8892656 +HeapAlloc dt=13 heapalloc_value=8900848 +HeapAlloc dt=15 heapalloc_value=8909040 +HeapAlloc dt=13 heapalloc_value=8917232 +HeapAlloc dt=15 heapalloc_value=8925424 +HeapAlloc dt=101 heapalloc_value=8933616 +GCMarkAssistBegin dt=13 stack=30 +GoBlock dt=37 reason_string=10 stack=33 +ProcStop dt=16 +ProcStart dt=1559 p=0 p_seq=34 +GoStart dt=433 g=1 g_seq=30 +GCMarkAssistEnd dt=16 +HeapAlloc dt=13 heapalloc_value=8630512 +GCSweepBegin dt=342 stack=47 +GCSweepEnd dt=22 swept_value=131072 reclaimed_value=0 +GCSweepBegin dt=19 stack=38 +GCSweepEnd dt=412 swept_value=827392 reclaimed_value=0 +HeapAlloc dt=32 heapalloc_value=8638704 +GoBlock dt=26 reason_string=19 stack=21 +ProcStop dt=31 +ProcStart dt=4598 p=0 p_seq=35 +ProcStop dt=23 +ProcStart dt=60434 p=0 p_seq=39 +GoStart dt=172 g=4 g_seq=6 +GoBlock dt=37 reason_string=15 stack=32 +ProcStop dt=17 +ProcStart dt=50232 p=2 p_seq=21 +GoUnblock dt=21 g=25 g_seq=8 stack=0 +GoStart dt=277 g=25 g_seq=9 +GoLabel dt=1 label_string=2 +STWBegin dt=10275 kind_string=23 stack=34 +GoUnblock dt=637 g=34 g_seq=4 stack=35 +HeapAlloc dt=30 heapalloc_value=16793488 +GoUnblock dt=20 g=3 g_seq=5 stack=36 +GCEnd dt=7 gc_seq=6 +HeapGoal dt=5 heapgoal_value=34005760 +ProcsChange dt=48 procs_value=8 stack=37 +STWEnd dt=40 +GoBlock dt=1283 reason_string=15 stack=26 +GoStart dt=14 g=3 g_seq=6 +GoBlock dt=10077 reason_string=14 stack=40 +ProcStop dt=21 +ProcStart dt=84537 p=2 p_seq=27 +GoStart dt=249 g=4 g_seq=10 +GoBlock dt=20 reason_string=15 stack=32 +ProcStop dt=102 +ProcStart dt=8641 p=2 p_seq=28 +GoStart dt=201 g=11 g_seq=1 +GoStop dt=305542 reason_string=16 stack=52 +GoStart dt=20 g=11 g_seq=2 +GoStop dt=316424 reason_string=16 stack=52 +GoStart dt=16 g=11 g_seq=3 +GoDestroy dt=159274 +ProcStop dt=45 +EventBatch gen=1 m=2852339 time=420901991582 size=23 +GoUnblock dt=137 g=4 g_seq=5 stack=0 +GoUnblock dt=157581 g=4 g_seq=9 stack=0 +ProcSteal dt=948232 p=6 p_seq=9 m=2852347 +EventBatch gen=1 m=2852338 time=420901450373 size=416 +ProcStatus dt=115 p=1 pstatus=1 +GoStatus dt=4 g=1 m=2852338 gstatus=2 +ProcsChange dt=217 procs_value=8 stack=1 +STWBegin dt=68 kind_string=21 stack=2 +HeapGoal dt=2 heapgoal_value=4194304 +ProcStatus dt=1 p=0 pstatus=2 +ProcStatus dt=4 p=2 pstatus=2 +ProcStatus dt=3 p=3 pstatus=2 +ProcStatus dt=1 p=4 pstatus=2 +ProcStatus dt=1 p=5 pstatus=2 +ProcStatus dt=1 p=6 pstatus=2 +ProcStatus dt=2 p=7 pstatus=2 +ProcsChange dt=65 procs_value=8 stack=3 +STWEnd dt=23 +HeapAlloc dt=190 heapalloc_value=1638400 +GoCreate dt=157 new_g=19 new_stack=4 stack=5 +GoCreate dt=565 new_g=20 new_stack=6 stack=7 +HeapAlloc dt=31 heapalloc_value=1646592 +GoCreate dt=523 new_g=21 new_stack=8 stack=9 +GoCreate dt=702 new_g=22 new_stack=10 stack=12 +GoCreate dt=377 new_g=23 new_stack=13 stack=14 +GoBlock dt=18 reason_string=10 stack=15 +GoStart dt=12 g=23 g_seq=1 +GoStop dt=222604 reason_string=16 stack=19 +GoStart dt=399 g=23 g_seq=2 +GoUnblock dt=89532 g=1 g_seq=1 stack=20 +GoDestroy dt=165 +GoStart dt=14 g=1 g_seq=2 +GoBlock dt=21 reason_string=19 stack=21 +ProcStop dt=257 +ProcStart dt=60623 p=1 p_seq=4 +GoStart dt=5704 g=5 g_seq=1 +HeapAlloc dt=34 heapalloc_value=4046848 +GoBlock dt=461 reason_string=15 stack=26 +ProcStop dt=25 +ProcStart dt=294 p=0 p_seq=14 +GoStart dt=9 g=6 g_seq=1 +GoBlock dt=506 reason_string=15 stack=26 +ProcStop dt=8 +ProcStart dt=230 p=0 p_seq=17 +ProcStop dt=23 +ProcStart dt=1406 p=0 p_seq=18 +GoStart dt=339 g=34 g_seq=1 +GoBlock dt=291 reason_string=15 stack=26 +ProcStop dt=13 +ProcStart dt=465 p=1 p_seq=10 +GoStart dt=173 g=8 g_seq=1 +GoBlock dt=120 reason_string=15 stack=26 +ProcStop dt=12 +ProcStart dt=353 p=0 p_seq=24 +ProcStop dt=17 +ProcStart dt=968 p=0 p_seq=25 +ProcStop dt=6 +ProcStart dt=554 p=0 p_seq=26 +GoUnblock dt=16 g=25 g_seq=2 stack=0 +GoStart dt=334 g=25 g_seq=3 +GoLabel dt=1 label_string=2 +GoBlock dt=2066 reason_string=15 stack=26 +ProcStop dt=24 +ProcStart dt=202889 p=4 p_seq=3 +GoUnblock dt=53 g=34 g_seq=2 stack=0 +HeapAlloc dt=50 heapalloc_value=16498416 +HeapAlloc dt=32 heapalloc_value=16501200 +HeapAlloc dt=4276 heapalloc_value=16697040 +GoStart dt=1376 g=34 g_seq=3 +GoLabel dt=2 label_string=4 +HeapAlloc dt=69 heapalloc_value=16713136 +GoBlock dt=35 reason_string=10 stack=48 +ProcStop dt=50 +ProcStart dt=111183 p=5 p_seq=3 +HeapAlloc dt=56 heapalloc_value=23234784 +HeapAlloc dt=25 heapalloc_value=23242144 +HeapAlloc dt=343 heapalloc_value=23249312 +GoStart dt=1532 g=16 g_seq=1 +GoStop dt=302128 reason_string=16 stack=52 +GoStart dt=13 g=16 g_seq=2 +GoStop dt=316412 reason_string=16 stack=52 +GoStart dt=10 g=16 g_seq=3 +GoDestroy dt=162712 +ProcStop dt=30 +ProcStart dt=798510 p=5 p_seq=5 +ProcStop dt=29 +ProcStart dt=4349 p=6 p_seq=21 +ProcStop dt=41 +ProcStart dt=16784 p=6 p_seq=22 +GoUnblock dt=14 g=82 g_seq=2 stack=0 +GoStart dt=161 g=82 g_seq=3 +GoSyscallBegin dt=27 p_seq=23 stack=93 +GoSyscallEnd dt=663 +GoSyscallBegin dt=102 p_seq=24 stack=94 +GoSyscallEnd dt=258 +GoDestroy dt=9 +ProcStop dt=24 +EventBatch gen=1 m=18446744073709551615 time=420903766597 size=28 +GoStatus dt=69 g=2 m=18446744073709551615 gstatus=4 +GoStatus dt=2 g=18 m=18446744073709551615 gstatus=4 +EventBatch gen=1 m=18446744073709551615 time=420903767161 size=4524 +Stacks +Stack id=20 nframes=3 + pc=4700772 func=24 file=25 line=81 + pc=5073062 func=26 file=25 line=87 + pc=5072984 func=27 file=28 line=105 +Stack id=71 nframes=21 + pc=4746903 func=29 file=30 line=736 + pc=4807597 func=31 file=32 line=181 + pc=4807573 func=33 file=34 line=736 + pc=4807216 func=35 file=34 line=160 + pc=4813553 func=36 file=37 line=29 + pc=4813545 func=38 file=39 line=118 + pc=4735439 func=40 file=41 line=335 + pc=5034447 func=42 file=41 line=354 + pc=5034407 func=43 file=44 line=55 + pc=5039623 func=45 file=46 line=40 + pc=5060942 func=47 file=48 line=373 + pc=4696033 func=49 file=50 line=74 + pc=5026795 func=51 file=50 line=65 + pc=5026766 func=52 file=48 line=373 + pc=5040478 func=53 file=54 line=57 + pc=5014167 func=55 file=56 line=154 + pc=5051652 func=57 file=58 line=182 + pc=4960356 func=59 file=58 line=172 + pc=4960318 func=60 file=61 line=734 + pc=4961094 func=62 file=61 line=808 + pc=5070695 func=63 file=28 line=53 +Stack id=21 nframes=3 + pc=4633684 func=64 file=65 line=195 + pc=5073512 func=66 file=28 line=125 + pc=5070323 func=63 file=28 line=32 +Stack id=38 nframes=9 + pc=4578453 func=67 file=68 line=352 + pc=4353540 func=69 file=70 line=521 + pc=4290908 func=71 file=72 line=147 + pc=4288626 func=73 file=74 line=182 + pc=4252996 func=75 file=76 line=948 + pc=4254486 func=77 file=76 line=1149 + pc=4522824 func=78 file=79 line=103 + pc=5073532 func=66 file=28 line=127 + pc=5070323 func=63 file=28 line=32 +Stack id=34 nframes=1 + pc=4314212 func=80 file=81 line=1446 +Stack id=13 nframes=1 + pc=5072896 func=27 file=28 line=102 +Stack id=48 nframes=2 + pc=4307927 func=82 file=81 line=807 + pc=4314212 func=80 file=81 line=1446 +Stack id=65 nframes=7 + pc=4747354 func=83 file=30 line=964 + pc=4808839 func=84 file=32 line=209 + pc=4808831 func=33 file=34 line=736 + pc=4808384 func=85 file=34 line=380 + pc=4813744 func=86 file=37 line=46 + pc=4813736 func=87 file=39 line=183 + pc=5072644 func=88 file=28 line=89 +Stack id=63 nframes=3 + pc=4746903 func=29 file=30 line=736 + pc=5072295 func=31 file=32 line=181 + pc=5072241 func=89 file=28 line=90 +Stack id=85 nframes=15 + pc=4750130 func=90 file=30 line=1488 + pc=4811799 func=91 file=32 line=462 + pc=4811777 func=92 file=93 line=17 + pc=5052502 func=94 file=95 line=21 + pc=5048264 func=96 file=97 line=245 + pc=5050832 func=98 file=58 line=114 + pc=5049860 func=99 file=58 line=68 + pc=5049861 func=100 file=58 line=64 + pc=4958364 func=101 file=61 line=651 + pc=4956653 func=102 file=61 line=616 + pc=4954291 func=103 file=61 line=517 + pc=4952889 func=104 file=61 line=508 + pc=4951126 func=105 file=61 line=434 + pc=4951127 func=106 file=61 line=401 + pc=5070980 func=63 file=28 line=68 +Stack id=1 nframes=4 + pc=4576875 func=107 file=68 line=255 + pc=4561423 func=108 file=109 line=237 + pc=5069285 func=110 file=111 line=125 + pc=5070075 func=63 file=28 line=20 +Stack id=7 nframes=4 + pc=4567652 func=112 file=109 line=868 + pc=4561732 func=108 file=109 line=258 + pc=5069285 func=110 file=111 line=125 + pc=5070075 func=63 file=28 line=20 +Stack id=88 nframes=8 + pc=4750130 func=90 file=30 line=1488 + pc=4811799 func=91 file=32 line=462 + pc=4811777 func=92 file=93 line=17 + pc=5052074 func=113 file=114 line=15 + pc=5048202 func=96 file=97 line=239 + pc=5051452 func=115 file=58 line=156 + pc=5048431 func=116 file=97 line=315 + pc=5071227 func=117 file=28 line=59 +Stack id=16 nframes=3 + pc=4225233 func=118 file=119 line=442 + pc=4568106 func=120 file=109 line=928 + pc=4567719 func=121 file=109 line=871 +Stack id=95 nframes=8 + pc=4746468 func=122 file=30 line=335 + pc=4806160 func=123 file=124 line=24 + pc=4806130 func=125 file=34 line=81 + pc=4803890 func=126 file=127 line=213 + pc=4806308 func=128 file=34 line=104 + pc=4988529 func=129 file=130 line=37 + pc=5026133 func=131 file=48 line=203 + pc=5071131 func=63 file=28 line=74 +Stack id=94 nframes=8 + pc=4746468 func=122 file=30 line=335 + pc=4806160 func=123 file=124 line=24 + pc=4806130 func=125 file=34 line=81 + pc=4803890 func=126 file=127 line=213 + pc=4806308 func=128 file=34 line=104 + pc=4988529 func=129 file=130 line=37 + pc=5026133 func=131 file=48 line=203 + pc=5071317 func=117 file=28 line=66 +Stack id=43 nframes=6 + pc=4637735 func=132 file=133 line=474 + pc=4307012 func=134 file=81 line=684 + pc=4255286 func=77 file=76 line=1292 + pc=4522824 func=78 file=79 line=103 + pc=5073532 func=66 file=28 line=127 + pc=5070323 func=63 file=28 line=32 +Stack id=26 nframes=2 + pc=4433005 func=135 file=136 line=402 + pc=4313604 func=80 file=81 line=1310 +Stack id=66 nframes=2 + pc=4221878 func=137 file=119 line=145 + pc=5072533 func=89 file=28 line=94 +Stack id=55 nframes=1 + pc=5070565 func=63 file=28 line=47 +Stack id=42 nframes=4 + pc=4255286 func=77 file=76 line=1292 + pc=4522824 func=78 file=79 line=103 + pc=5073532 func=66 file=28 line=127 + pc=5070323 func=63 file=28 line=32 +Stack id=14 nframes=1 + pc=5070300 func=63 file=28 line=28 +Stack id=56 nframes=2 + pc=4225233 func=118 file=119 line=442 + pc=5070586 func=63 file=28 line=48 +Stack id=24 nframes=6 + pc=4313307 func=138 file=81 line=1234 + pc=4306780 func=134 file=81 line=663 + pc=4255286 func=77 file=76 line=1292 + pc=4524282 func=139 file=79 line=246 + pc=5073584 func=66 file=28 line=127 + pc=5070323 func=63 file=28 line=32 +Stack id=45 nframes=1 + pc=0 func=0 file=0 line=0 +Stack id=44 nframes=5 + pc=4307322 func=134 file=81 line=746 + pc=4255286 func=77 file=76 line=1292 + pc=4522824 func=78 file=79 line=103 + pc=5073532 func=66 file=28 line=127 + pc=5070323 func=63 file=28 line=32 +Stack id=6 nframes=1 + pc=4567680 func=121 file=109 line=868 +Stack id=11 nframes=3 + pc=4225233 func=118 file=119 line=442 + pc=4568106 func=120 file=109 line=928 + pc=4570874 func=140 file=141 line=54 +Stack id=4 nframes=1 + pc=4570816 func=140 file=141 line=42 +Stack id=22 nframes=4 + pc=4255286 func=77 file=76 line=1292 + pc=4524282 func=139 file=79 line=246 + pc=5073584 func=66 file=28 line=127 + pc=5070323 func=63 file=28 line=32 +Stack id=83 nframes=15 + pc=4750130 func=90 file=30 line=1488 + pc=4811799 func=91 file=32 line=462 + pc=4811777 func=92 file=93 line=17 + pc=5047242 func=142 file=143 line=88 + pc=5048249 func=96 file=97 line=244 + pc=5050832 func=98 file=58 line=114 + pc=5049860 func=99 file=58 line=68 + pc=5049861 func=100 file=58 line=64 + pc=4958364 func=101 file=61 line=651 + pc=4956653 func=102 file=61 line=616 + pc=4954291 func=103 file=61 line=517 + pc=4952889 func=104 file=61 line=508 + pc=4951126 func=105 file=61 line=434 + pc=4951127 func=106 file=61 line=401 + pc=5070980 func=63 file=28 line=68 +Stack id=37 nframes=3 + pc=4310566 func=144 file=81 line=1087 + pc=4308676 func=82 file=81 line=927 + pc=4314212 func=80 file=81 line=1446 +Stack id=9 nframes=2 + pc=5069359 func=110 file=111 line=128 + pc=5070075 func=63 file=28 line=20 +Stack id=35 nframes=2 + pc=4308599 func=82 file=81 line=915 + pc=4314212 func=80 file=81 line=1446 +Stack id=72 nframes=20 + pc=4746468 func=122 file=30 line=335 + pc=4806160 func=123 file=124 line=24 + pc=4806130 func=125 file=34 line=81 + pc=4803890 func=126 file=127 line=213 + pc=4806308 func=128 file=34 line=104 + pc=4816631 func=145 file=146 line=315 + pc=5040044 func=147 file=37 line=23 + pc=5040027 func=148 file=44 line=23 + pc=5039886 func=45 file=46 line=53 + pc=5060942 func=47 file=48 line=373 + pc=4696033 func=49 file=50 line=74 + pc=5026795 func=51 file=50 line=65 + pc=5026766 func=52 file=48 line=373 + pc=5040478 func=53 file=54 line=57 + pc=5014167 func=55 file=56 line=154 + pc=5051652 func=57 file=58 line=182 + pc=4960356 func=59 file=58 line=172 + pc=4960318 func=60 file=61 line=734 + pc=4961094 func=62 file=61 line=808 + pc=5070695 func=63 file=28 line=53 +Stack id=3 nframes=4 + pc=4442379 func=149 file=136 line=1382 + pc=4561715 func=108 file=109 line=255 + pc=5069285 func=110 file=111 line=125 + pc=5070075 func=63 file=28 line=20 +Stack id=19 nframes=1 + pc=5072969 func=27 file=28 line=104 +Stack id=61 nframes=5 + pc=4746660 func=150 file=30 line=432 + pc=4737158 func=151 file=152 line=106 + pc=4806697 func=153 file=34 line=129 + pc=5072228 func=154 file=146 line=90 + pc=5072241 func=89 file=28 line=90 +Stack id=79 nframes=8 + pc=4748798 func=155 file=30 line=1421 + pc=4743029 func=156 file=157 line=684 + pc=4810951 func=158 file=159 line=17 + pc=4809725 func=160 file=34 line=602 + pc=4992776 func=161 file=162 line=172 + pc=5051421 func=115 file=58 line=152 + pc=5048431 func=116 file=97 line=315 + pc=5071227 func=117 file=28 line=59 +Stack id=91 nframes=8 + pc=4750130 func=90 file=30 line=1488 + pc=4811799 func=91 file=32 line=462 + pc=4811777 func=92 file=93 line=17 + pc=5052502 func=94 file=95 line=21 + pc=5048264 func=96 file=97 line=245 + pc=5051452 func=115 file=58 line=156 + pc=5048431 func=116 file=97 line=315 + pc=5071227 func=117 file=28 line=59 +Stack id=62 nframes=5 + pc=4746660 func=150 file=30 line=432 + pc=4737232 func=151 file=152 line=118 + pc=4806697 func=153 file=34 line=129 + pc=5072228 func=154 file=146 line=90 + pc=5072241 func=89 file=28 line=90 +Stack id=75 nframes=9 + pc=4748164 func=163 file=30 line=1213 + pc=5044432 func=164 file=54 line=170 + pc=5040531 func=53 file=54 line=57 + pc=5014167 func=55 file=56 line=154 + pc=5051652 func=57 file=58 line=182 + pc=4960356 func=59 file=58 line=172 + pc=4960318 func=60 file=61 line=734 + pc=4961094 func=62 file=61 line=808 + pc=5070695 func=63 file=28 line=53 +Stack id=73 nframes=11 + pc=4750130 func=90 file=30 line=1488 + pc=5046866 func=91 file=32 line=462 + pc=5046876 func=165 file=166 line=28 + pc=5043829 func=164 file=54 line=152 + pc=5040531 func=53 file=54 line=57 + pc=5014167 func=55 file=56 line=154 + pc=5051652 func=57 file=58 line=182 + pc=4960356 func=59 file=58 line=172 + pc=4960318 func=60 file=61 line=734 + pc=4961094 func=62 file=61 line=808 + pc=5070695 func=63 file=28 line=53 +Stack id=87 nframes=4 + pc=4807527 func=35 file=34 line=164 + pc=4988612 func=167 file=130 line=55 + pc=5025316 func=168 file=48 line=179 + pc=5071115 func=63 file=28 line=73 +Stack id=84 nframes=15 + pc=4750130 func=90 file=30 line=1488 + pc=4811799 func=91 file=32 line=462 + pc=4811777 func=92 file=93 line=17 + pc=5052347 func=94 file=95 line=18 + pc=5048264 func=96 file=97 line=245 + pc=5050832 func=98 file=58 line=114 + pc=5049860 func=99 file=58 line=68 + pc=5049861 func=100 file=58 line=64 + pc=4958364 func=101 file=61 line=651 + pc=4956653 func=102 file=61 line=616 + pc=4954291 func=103 file=61 line=517 + pc=4952889 func=104 file=61 line=508 + pc=4951126 func=105 file=61 line=434 + pc=4951127 func=106 file=61 line=401 + pc=5070980 func=63 file=28 line=68 +Stack id=92 nframes=2 + pc=4633684 func=64 file=65 line=195 + pc=5071262 func=117 file=28 line=63 +Stack id=40 nframes=2 + pc=4352030 func=169 file=136 line=408 + pc=4351996 func=170 file=70 line=317 +Stack id=89 nframes=8 + pc=4750130 func=90 file=30 line=1488 + pc=4811799 func=91 file=32 line=462 + pc=4811777 func=92 file=93 line=17 + pc=5047242 func=142 file=143 line=88 + pc=5048249 func=96 file=97 line=244 + pc=5051452 func=115 file=58 line=156 + pc=5048431 func=116 file=97 line=315 + pc=5071227 func=117 file=28 line=59 +Stack id=53 nframes=3 + pc=4700772 func=24 file=25 line=81 + pc=5071718 func=26 file=25 line=87 + pc=5071644 func=171 file=28 line=41 +Stack id=81 nframes=16 + pc=4749883 func=172 file=30 line=1478 + pc=4744812 func=173 file=32 line=313 + pc=4991029 func=174 file=162 line=149 + pc=5041979 func=175 file=54 line=124 + pc=5040762 func=53 file=54 line=70 + pc=5014167 func=55 file=56 line=154 + pc=5050219 func=98 file=58 line=78 + pc=5049860 func=99 file=58 line=68 + pc=5049861 func=100 file=58 line=64 + pc=4958364 func=101 file=61 line=651 + pc=4956653 func=102 file=61 line=616 + pc=4954291 func=103 file=61 line=517 + pc=4952889 func=104 file=61 line=508 + pc=4951126 func=105 file=61 line=434 + pc=4951127 func=106 file=61 line=401 + pc=5070980 func=63 file=28 line=68 +Stack id=23 nframes=1 + pc=4313376 func=80 file=81 line=1276 +Stack id=52 nframes=1 + pc=5071629 func=171 file=28 line=40 +Stack id=28 nframes=6 + pc=4637735 func=132 file=133 line=474 + pc=4307012 func=134 file=81 line=684 + pc=4255286 func=77 file=76 line=1292 + pc=4524282 func=139 file=79 line=246 + pc=5073584 func=66 file=28 line=127 + pc=5070323 func=63 file=28 line=32 +Stack id=12 nframes=1 + pc=5070234 func=63 file=28 line=27 +Stack id=76 nframes=1 + pc=5071200 func=117 file=28 line=58 +Stack id=60 nframes=5 + pc=4746660 func=150 file=30 line=432 + pc=4737232 func=151 file=152 line=118 + pc=4815748 func=176 file=146 line=218 + pc=4817144 func=177 file=178 line=21 + pc=5072014 func=89 file=28 line=82 +Stack id=64 nframes=1 + pc=5072608 func=88 file=28 line=89 +Stack id=47 nframes=11 + pc=4578453 func=67 file=68 line=352 + pc=4353540 func=69 file=70 line=521 + pc=4352604 func=179 file=70 line=389 + pc=4358543 func=180 file=70 line=926 + pc=4290148 func=71 file=72 line=84 + pc=4288626 func=73 file=74 line=182 + pc=4252996 func=75 file=76 line=948 + pc=4254486 func=77 file=76 line=1149 + pc=4522824 func=78 file=79 line=103 + pc=5073532 func=66 file=28 line=127 + pc=5070323 func=63 file=28 line=32 +Stack id=68 nframes=19 + pc=4745679 func=181 file=30 line=98 + pc=4814954 func=182 file=157 line=280 + pc=4814931 func=183 file=184 line=15 + pc=4816145 func=185 file=146 line=272 + pc=4814141 func=186 file=39 line=334 + pc=5034884 func=187 file=39 line=314 + pc=5034871 func=188 file=44 line=76 + pc=5039575 func=45 file=46 line=35 + pc=5060942 func=47 file=48 line=373 + pc=4696033 func=49 file=50 line=74 + pc=5026795 func=51 file=50 line=65 + pc=5026766 func=52 file=48 line=373 + pc=5040478 func=53 file=54 line=57 + pc=5014167 func=55 file=56 line=154 + pc=5051652 func=57 file=58 line=182 + pc=4960356 func=59 file=58 line=172 + pc=4960318 func=60 file=61 line=734 + pc=4961094 func=62 file=61 line=808 + pc=5070695 func=63 file=28 line=53 +Stack id=77 nframes=1 + pc=5070924 func=63 file=28 line=58 +Stack id=78 nframes=16 + pc=4749256 func=189 file=30 line=1442 + pc=4744549 func=190 file=32 line=298 + pc=4989295 func=174 file=162 line=59 + pc=5041979 func=175 file=54 line=124 + pc=5040762 func=53 file=54 line=70 + pc=5014167 func=55 file=56 line=154 + pc=5050219 func=98 file=58 line=78 + pc=5049860 func=99 file=58 line=68 + pc=5049861 func=100 file=58 line=64 + pc=4958364 func=101 file=61 line=651 + pc=4956653 func=102 file=61 line=616 + pc=4954291 func=103 file=61 line=517 + pc=4952889 func=104 file=61 line=508 + pc=4951126 func=105 file=61 line=434 + pc=4951127 func=106 file=61 line=401 + pc=5070980 func=63 file=28 line=68 +Stack id=54 nframes=1 + pc=5071968 func=89 file=28 line=81 +Stack id=32 nframes=2 + pc=4342189 func=191 file=192 line=425 + pc=4343672 func=193 file=192 line=658 +Stack id=57 nframes=5 + pc=4746660 func=150 file=30 line=432 + pc=4737158 func=151 file=152 line=106 + pc=4815748 func=176 file=146 line=218 + pc=4817109 func=177 file=178 line=21 + pc=5072014 func=89 file=28 line=82 +Stack id=74 nframes=10 + pc=4749032 func=194 file=30 line=1432 + pc=4744421 func=195 file=32 line=290 + pc=5044292 func=164 file=54 line=167 + pc=5040531 func=53 file=54 line=57 + pc=5014167 func=55 file=56 line=154 + pc=5051652 func=57 file=58 line=182 + pc=4960356 func=59 file=58 line=172 + pc=4960318 func=60 file=61 line=734 + pc=4961094 func=62 file=61 line=808 + pc=5070695 func=63 file=28 line=53 +Stack id=18 nframes=1 + pc=5069604 func=196 file=111 line=130 +Stack id=5 nframes=4 + pc=4570709 func=197 file=141 line=42 + pc=4561720 func=108 file=109 line=257 + pc=5069285 func=110 file=111 line=125 + pc=5070075 func=63 file=28 line=20 +Stack id=90 nframes=8 + pc=4750130 func=90 file=30 line=1488 + pc=4811799 func=91 file=32 line=462 + pc=4811777 func=92 file=93 line=17 + pc=5052347 func=94 file=95 line=18 + pc=5048264 func=96 file=97 line=245 + pc=5051452 func=115 file=58 line=156 + pc=5048431 func=116 file=97 line=315 + pc=5071227 func=117 file=28 line=59 +Stack id=33 nframes=7 + pc=4307927 func=82 file=81 line=807 + pc=4324210 func=198 file=199 line=564 + pc=4255603 func=200 file=76 line=1337 + pc=4253576 func=77 file=76 line=1025 + pc=4522824 func=78 file=79 line=103 + pc=5073532 func=66 file=28 line=127 + pc=5070323 func=63 file=28 line=32 +Stack id=70 nframes=19 + pc=4746660 func=150 file=30 line=432 + pc=4737232 func=151 file=152 line=118 + pc=4815748 func=176 file=146 line=218 + pc=4816367 func=185 file=146 line=301 + pc=4814141 func=186 file=39 line=334 + pc=5034884 func=187 file=39 line=314 + pc=5034871 func=188 file=44 line=76 + pc=5039575 func=45 file=46 line=35 + pc=5060942 func=47 file=48 line=373 + pc=4696033 func=49 file=50 line=74 + pc=5026795 func=51 file=50 line=65 + pc=5026766 func=52 file=48 line=373 + pc=5040478 func=53 file=54 line=57 + pc=5014167 func=55 file=56 line=154 + pc=5051652 func=57 file=58 line=182 + pc=4960356 func=59 file=58 line=172 + pc=4960318 func=60 file=61 line=734 + pc=4961094 func=62 file=61 line=808 + pc=5070695 func=63 file=28 line=53 +Stack id=8 nframes=1 + pc=5069536 func=196 file=111 line=128 +Stack id=15 nframes=2 + pc=4701031 func=201 file=25 line=116 + pc=5070313 func=63 file=28 line=29 +Stack id=86 nframes=7 + pc=4746903 func=29 file=30 line=736 + pc=4807597 func=31 file=32 line=181 + pc=4807573 func=33 file=34 line=736 + pc=4807216 func=35 file=34 line=160 + pc=4988612 func=167 file=130 line=55 + pc=5025316 func=168 file=48 line=179 + pc=5071115 func=63 file=28 line=73 +Stack id=67 nframes=1 + pc=0 func=0 file=0 line=0 +Stack id=80 nframes=15 + pc=4990958 func=202 file=34 line=683 + pc=4990987 func=174 file=162 line=141 + pc=5041979 func=175 file=54 line=124 + pc=5040762 func=53 file=54 line=70 + pc=5014167 func=55 file=56 line=154 + pc=5050219 func=98 file=58 line=78 + pc=5049860 func=99 file=58 line=68 + pc=5049861 func=100 file=58 line=64 + pc=4958364 func=101 file=61 line=651 + pc=4956653 func=102 file=61 line=616 + pc=4954291 func=103 file=61 line=517 + pc=4952889 func=104 file=61 line=508 + pc=4951126 func=105 file=61 line=434 + pc=4951127 func=106 file=61 line=401 + pc=5070980 func=63 file=28 line=68 +Stack id=93 nframes=7 + pc=4747354 func=83 file=30 line=964 + pc=4808839 func=84 file=32 line=209 + pc=4808831 func=33 file=34 line=736 + pc=4808384 func=85 file=34 line=380 + pc=4988868 func=203 file=130 line=96 + pc=5025764 func=204 file=48 line=191 + pc=5071301 func=117 file=28 line=65 +Stack id=46 nframes=1 + pc=5070323 func=63 file=28 line=32 +Stack id=25 nframes=5 + pc=4306780 func=134 file=81 line=663 + pc=4255286 func=77 file=76 line=1292 + pc=4524282 func=139 file=79 line=246 + pc=5073584 func=66 file=28 line=127 + pc=5070323 func=63 file=28 line=32 +Stack id=58 nframes=5 + pc=4746660 func=150 file=30 line=432 + pc=4737232 func=151 file=152 line=118 + pc=4815748 func=176 file=146 line=218 + pc=4817109 func=177 file=178 line=21 + pc=5072014 func=89 file=28 line=82 +Stack id=39 nframes=9 + pc=4365530 func=205 file=206 line=958 + pc=4291537 func=207 file=72 line=254 + pc=4291127 func=71 file=72 line=170 + pc=4288626 func=73 file=74 line=182 + pc=4252996 func=75 file=76 line=948 + pc=4254486 func=77 file=76 line=1149 + pc=4522824 func=78 file=79 line=103 + pc=5073532 func=66 file=28 line=127 + pc=5070323 func=63 file=28 line=32 +Stack id=2 nframes=3 + pc=4561444 func=108 file=109 line=238 + pc=5069285 func=110 file=111 line=125 + pc=5070075 func=63 file=28 line=20 +Stack id=50 nframes=1 + pc=5070361 func=63 file=28 line=38 +Stack id=10 nframes=1 + pc=5072672 func=208 file=28 line=97 +Stack id=41 nframes=4 + pc=4255286 func=77 file=76 line=1292 + pc=4522824 func=78 file=79 line=103 + pc=5073532 func=66 file=28 line=127 + pc=5070323 func=63 file=28 line=32 +Stack id=31 nframes=3 + pc=4522824 func=78 file=79 line=103 + pc=5073532 func=66 file=28 line=127 + pc=5070323 func=63 file=28 line=32 +Stack id=36 nframes=4 + pc=4637735 func=132 file=133 line=474 + pc=4309597 func=144 file=81 line=965 + pc=4308676 func=82 file=81 line=927 + pc=4314212 func=80 file=81 line=1446 +Stack id=69 nframes=19 + pc=4746660 func=150 file=30 line=432 + pc=4737158 func=151 file=152 line=106 + pc=4815748 func=176 file=146 line=218 + pc=4816367 func=185 file=146 line=301 + pc=4814141 func=186 file=39 line=334 + pc=5034884 func=187 file=39 line=314 + pc=5034871 func=188 file=44 line=76 + pc=5039575 func=45 file=46 line=35 + pc=5060942 func=47 file=48 line=373 + pc=4696033 func=49 file=50 line=74 + pc=5026795 func=51 file=50 line=65 + pc=5026766 func=52 file=48 line=373 + pc=5040478 func=53 file=54 line=57 + pc=5014167 func=55 file=56 line=154 + pc=5051652 func=57 file=58 line=182 + pc=4960356 func=59 file=58 line=172 + pc=4960318 func=60 file=61 line=734 + pc=4961094 func=62 file=61 line=808 + pc=5070695 func=63 file=28 line=53 +Stack id=59 nframes=5 + pc=4746660 func=150 file=30 line=432 + pc=4737158 func=151 file=152 line=106 + pc=4815748 func=176 file=146 line=218 + pc=4817144 func=177 file=178 line=21 + pc=5072014 func=89 file=28 line=82 +Stack id=30 nframes=7 + pc=4578913 func=209 file=68 line=378 + pc=4323996 func=198 file=199 line=536 + pc=4255603 func=200 file=76 line=1337 + pc=4253576 func=77 file=76 line=1025 + pc=4522824 func=78 file=79 line=103 + pc=5073532 func=66 file=28 line=127 + pc=5070323 func=63 file=28 line=32 +Stack id=51 nframes=2 + pc=4701031 func=201 file=25 line=116 + pc=5070481 func=63 file=28 line=43 +Stack id=49 nframes=1 + pc=5071552 func=171 file=28 line=38 +Stack id=29 nframes=5 + pc=4307322 func=134 file=81 line=746 + pc=4255286 func=77 file=76 line=1292 + pc=4524282 func=139 file=79 line=246 + pc=5073584 func=66 file=28 line=127 + pc=5070323 func=63 file=28 line=32 +Stack id=82 nframes=15 + pc=4750130 func=90 file=30 line=1488 + pc=4811799 func=91 file=32 line=462 + pc=4811777 func=92 file=93 line=17 + pc=5052074 func=113 file=114 line=15 + pc=5048202 func=96 file=97 line=239 + pc=5050832 func=98 file=58 line=114 + pc=5049860 func=99 file=58 line=68 + pc=5049861 func=100 file=58 line=64 + pc=4958364 func=101 file=61 line=651 + pc=4956653 func=102 file=61 line=616 + pc=4954291 func=103 file=61 line=517 + pc=4952889 func=104 file=61 line=508 + pc=4951126 func=105 file=61 line=434 + pc=4951127 func=106 file=61 line=401 + pc=5070980 func=63 file=28 line=68 +Stack id=27 nframes=4 + pc=4255286 func=77 file=76 line=1292 + pc=4524282 func=139 file=79 line=246 + pc=5073584 func=66 file=28 line=127 + pc=5070323 func=63 file=28 line=32 +Stack id=17 nframes=7 + pc=4747354 func=83 file=30 line=964 + pc=4808839 func=84 file=32 line=209 + pc=4808831 func=33 file=34 line=736 + pc=4808384 func=85 file=34 line=380 + pc=4813744 func=86 file=37 line=46 + pc=4813736 func=87 file=39 line=183 + pc=5069594 func=196 file=111 line=134 +EventBatch gen=1 m=18446744073709551615 time=420901448919 size=6914 +Strings +String id=1 + data="Not worker" +String id=2 + data="GC (dedicated)" +String id=3 + data="GC (fractional)" +String id=4 + data="GC (idle)" +String id=5 + data="unspecified" +String id=6 + data="forever" +String id=7 + data="network" +String id=8 + data="select" +String id=9 + data="sync.(*Cond).Wait" +String id=10 + data="sync" +String id=11 + data="chan send" +String id=12 + data="chan receive" +String id=13 + data="GC mark assist wait for work" +String id=14 + data="GC background sweeper wait" +String id=15 + data="system goroutine wait" +String id=16 + data="preempted" +String id=17 + data="wait for debug call" +String id=18 + data="wait until GC ends" +String id=19 + data="sleep" +String id=20 + data="runtime.GoSched" +String id=21 + data="start trace" +String id=22 + data="GC sweep termination" +String id=23 + data="GC mark termination" +String id=24 + data="sync.(*WaitGroup).Add" +String id=25 + data="/usr/local/google/home/mknyszek/work/go-1/src/sync/waitgroup.go" +String id=26 + data="sync.(*WaitGroup).Done" +String id=27 + data="main.cpu20" +String id=28 + data="/usr/local/google/home/mknyszek/work/go-1/src/cmd/trace/v2/testdata/testprog/main.go" +String id=29 + data="syscall.read" +String id=30 + data="/usr/local/google/home/mknyszek/work/go-1/src/syscall/zsyscall_linux_amd64.go" +String id=31 + data="syscall.Read" +String id=32 + data="/usr/local/google/home/mknyszek/work/go-1/src/syscall/syscall_unix.go" +String id=33 + data="internal/poll.ignoringEINTRIO" +String id=34 + data="/usr/local/google/home/mknyszek/work/go-1/src/internal/poll/fd_unix.go" +String id=35 + data="internal/poll.(*FD).Read" +String id=36 + data="os.(*File).read" +String id=37 + data="/usr/local/google/home/mknyszek/work/go-1/src/os/file_posix.go" +String id=38 + data="os.(*File).Read" +String id=39 + data="/usr/local/google/home/mknyszek/work/go-1/src/os/file.go" +String id=40 + data="io.ReadAtLeast" +String id=41 + data="/usr/local/google/home/mknyszek/work/go-1/src/io/io.go" +String id=42 + data="io.ReadFull" +String id=43 + data="net.(*file).readLine" +String id=44 + data="/usr/local/google/home/mknyszek/work/go-1/src/net/parse.go" +String id=45 + data="net.maxListenerBacklog" +String id=46 + data="/usr/local/google/home/mknyszek/work/go-1/src/net/sock_linux.go" +String id=47 + data="net.listenerBacklog.func1" +String id=48 + data="/usr/local/google/home/mknyszek/work/go-1/src/net/net.go" +String id=49 + data="sync.(*Once).doSlow" +String id=50 + data="/usr/local/google/home/mknyszek/work/go-1/src/sync/once.go" +String id=51 + data="sync.(*Once).Do" +String id=52 + data="net.listenerBacklog" +String id=53 + data="net.socket" +String id=54 + data="/usr/local/google/home/mknyszek/work/go-1/src/net/sock_posix.go" +String id=55 + data="net.internetSocket" +String id=56 + data="/usr/local/google/home/mknyszek/work/go-1/src/net/ipsock_posix.go" +String id=57 + data="net.(*sysListener).listenTCPProto" +String id=58 + data="/usr/local/google/home/mknyszek/work/go-1/src/net/tcpsock_posix.go" +String id=59 + data="net.(*sysListener).listenTCP" +String id=60 + data="net.(*ListenConfig).Listen" +String id=61 + data="/usr/local/google/home/mknyszek/work/go-1/src/net/dial.go" +String id=62 + data="net.Listen" +String id=63 + data="main.main" +String id=64 + data="time.Sleep" +String id=65 + data="/usr/local/google/home/mknyszek/work/go-1/src/runtime/time.go" +String id=66 + data="main.allocHog" +String id=67 + data="runtime.traceLocker.GCSweepSpan" +String id=68 + data="/usr/local/google/home/mknyszek/work/go-1/src/runtime/trace2runtime.go" +String id=69 + data="runtime.(*sweepLocked).sweep" +String id=70 + data="/usr/local/google/home/mknyszek/work/go-1/src/runtime/mgcsweep.go" +String id=71 + data="runtime.(*mcentral).cacheSpan" +String id=72 + data="/usr/local/google/home/mknyszek/work/go-1/src/runtime/mcentral.go" +String id=73 + data="runtime.(*mcache).refill" +String id=74 + data="/usr/local/google/home/mknyszek/work/go-1/src/runtime/mcache.go" +String id=75 + data="runtime.(*mcache).nextFree" +String id=76 + data="/usr/local/google/home/mknyszek/work/go-1/src/runtime/malloc.go" +String id=77 + data="runtime.mallocgc" +String id=78 + data="runtime.makeslice" +String id=79 + data="/usr/local/google/home/mknyszek/work/go-1/src/runtime/slice.go" +String id=80 + data="runtime.gcBgMarkWorker" +String id=81 + data="/usr/local/google/home/mknyszek/work/go-1/src/runtime/mgc.go" +String id=82 + data="runtime.gcMarkDone" +String id=83 + data="syscall.write" +String id=84 + data="syscall.Write" +String id=85 + data="internal/poll.(*FD).Write" +String id=86 + data="os.(*File).write" +String id=87 + data="os.(*File).Write" +String id=88 + data="main.blockingSyscall.func1" +String id=89 + data="main.blockingSyscall" +String id=90 + data="syscall.setsockopt" +String id=91 + data="syscall.SetsockoptInt" +String id=92 + data="internal/poll.(*FD).SetsockoptInt" +String id=93 + data="/usr/local/google/home/mknyszek/work/go-1/src/internal/poll/sockopt.go" +String id=94 + data="net.setKeepAlivePeriod" +String id=95 + data="/usr/local/google/home/mknyszek/work/go-1/src/net/tcpsockopt_unix.go" +String id=96 + data="net.newTCPConn" +String id=97 + data="/usr/local/google/home/mknyszek/work/go-1/src/net/tcpsock.go" +String id=98 + data="net.(*sysDialer).doDialTCPProto" +String id=99 + data="net.(*sysDialer).doDialTCP" +String id=100 + data="net.(*sysDialer).dialTCP" +String id=101 + data="net.(*sysDialer).dialSingle" +String id=102 + data="net.(*sysDialer).dialSerial" +String id=103 + data="net.(*sysDialer).dialParallel" +String id=104 + data="net.(*Dialer).DialContext" +String id=105 + data="net.(*Dialer).Dial" +String id=106 + data="net.Dial" +String id=107 + data="runtime.traceLocker.Gomaxprocs" +String id=108 + data="runtime.StartTrace" +String id=109 + data="/usr/local/google/home/mknyszek/work/go-1/src/runtime/trace2.go" +String id=110 + data="runtime/trace.Start" +String id=111 + data="/usr/local/google/home/mknyszek/work/go-1/src/runtime/trace/trace.go" +String id=112 + data="runtime.(*traceAdvancerState).start" +String id=113 + data="net.setNoDelay" +String id=114 + data="/usr/local/google/home/mknyszek/work/go-1/src/net/tcpsockopt_posix.go" +String id=115 + data="net.(*TCPListener).accept" +String id=116 + data="net.(*TCPListener).Accept" +String id=117 + data="main.main.func2" +String id=118 + data="runtime.chanrecv1" +String id=119 + data="/usr/local/google/home/mknyszek/work/go-1/src/runtime/chan.go" +String id=120 + data="runtime.(*wakeableSleep).sleep" +String id=121 + data="runtime.(*traceAdvancerState).start.func1" +String id=122 + data="syscall.Close" +String id=123 + data="internal/poll.(*SysFile).destroy" +String id=124 + data="/usr/local/google/home/mknyszek/work/go-1/src/internal/poll/fd_unixjs.go" +String id=125 + data="internal/poll.(*FD).destroy" +String id=126 + data="internal/poll.(*FD).decref" +String id=127 + data="/usr/local/google/home/mknyszek/work/go-1/src/internal/poll/fd_mutex.go" +String id=128 + data="internal/poll.(*FD).Close" +String id=129 + data="net.(*netFD).Close" +String id=130 + data="/usr/local/google/home/mknyszek/work/go-1/src/net/fd_posix.go" +String id=131 + data="net.(*conn).Close" +String id=132 + data="runtime.systemstack_switch" +String id=133 + data="/usr/local/google/home/mknyszek/work/go-1/src/runtime/asm_amd64.s" +String id=134 + data="runtime.gcStart" +String id=135 + data="runtime.gopark" +String id=136 + data="/usr/local/google/home/mknyszek/work/go-1/src/runtime/proc.go" +String id=137 + data="runtime.chansend1" +String id=138 + data="runtime.gcBgMarkStartWorkers" +String id=139 + data="runtime.growslice" +String id=140 + data="runtime.traceStartReadCPU.func1" +String id=141 + data="/usr/local/google/home/mknyszek/work/go-1/src/runtime/trace2cpu.go" +String id=142 + data="net.setKeepAlive" +String id=143 + data="/usr/local/google/home/mknyszek/work/go-1/src/net/sockopt_posix.go" +String id=144 + data="runtime.gcMarkTermination" +String id=145 + data="os.(*file).close" +String id=146 + data="/usr/local/google/home/mknyszek/work/go-1/src/os/file_unix.go" +String id=147 + data="os.(*File).Close" +String id=148 + data="net.(*file).close" +String id=149 + data="runtime.startTheWorld" +String id=150 + data="syscall.fcntl" +String id=151 + data="syscall.SetNonblock" +String id=152 + data="/usr/local/google/home/mknyszek/work/go-1/src/syscall/exec_unix.go" +String id=153 + data="internal/poll.(*FD).SetBlocking" +String id=154 + data="os.(*File).Fd" +String id=155 + data="syscall.accept4" +String id=156 + data="syscall.Accept4" +String id=157 + data="/usr/local/google/home/mknyszek/work/go-1/src/syscall/syscall_linux.go" +String id=158 + data="internal/poll.accept" +String id=159 + data="/usr/local/google/home/mknyszek/work/go-1/src/internal/poll/sock_cloexec.go" +String id=160 + data="internal/poll.(*FD).Accept" +String id=161 + data="net.(*netFD).accept" +String id=162 + data="/usr/local/google/home/mknyszek/work/go-1/src/net/fd_unix.go" +String id=163 + data="syscall.Listen" +String id=164 + data="net.(*netFD).listenStream" +String id=165 + data="net.setDefaultListenerSockopts" +String id=166 + data="/usr/local/google/home/mknyszek/work/go-1/src/net/sockopt_linux.go" +String id=167 + data="net.(*netFD).Read" +String id=168 + data="net.(*conn).Read" +String id=169 + data="runtime.goparkunlock" +String id=170 + data="runtime.bgsweep" +String id=171 + data="main.main.func1" +String id=172 + data="syscall.getsockopt" +String id=173 + data="syscall.GetsockoptInt" +String id=174 + data="net.(*netFD).connect" +String id=175 + data="net.(*netFD).dial" +String id=176 + data="os.newFile" +String id=177 + data="os.Pipe" +String id=178 + data="/usr/local/google/home/mknyszek/work/go-1/src/os/pipe2_unix.go" +String id=179 + data="runtime.sweepone" +String id=180 + data="runtime.deductSweepCredit" +String id=181 + data="syscall.openat" +String id=182 + data="syscall.Open" +String id=183 + data="os.open" +String id=184 + data="/usr/local/google/home/mknyszek/work/go-1/src/os/file_open_unix.go" +String id=185 + data="os.openFileNolog" +String id=186 + data="os.OpenFile" +String id=187 + data="os.Open" +String id=188 + data="net.open" +String id=189 + data="syscall.connect" +String id=190 + data="syscall.Connect" +String id=191 + data="runtime.(*scavengerState).park" +String id=192 + data="/usr/local/google/home/mknyszek/work/go-1/src/runtime/mgcscavenge.go" +String id=193 + data="runtime.bgscavenge" +String id=194 + data="syscall.bind" +String id=195 + data="syscall.Bind" +String id=196 + data="runtime/trace.Start.func1" +String id=197 + data="runtime.traceStartReadCPU" +String id=198 + data="runtime.gcAssistAlloc" +String id=199 + data="/usr/local/google/home/mknyszek/work/go-1/src/runtime/mgcmark.go" +String id=200 + data="runtime.deductAssistCredit" +String id=201 + data="sync.(*WaitGroup).Wait" +String id=202 + data="internal/poll.(*FD).WaitWrite" +String id=203 + data="net.(*netFD).Write" +String id=204 + data="net.(*conn).Write" +String id=205 + data="runtime.(*mheap).alloc" +String id=206 + data="/usr/local/google/home/mknyszek/work/go-1/src/runtime/mheap.go" +String id=207 + data="runtime.(*mcentral).grow" +String id=208 + data="main.cpu10" +String id=209 + data="runtime.traceLocker.GCMarkAssistStart" diff --git a/src/cmd/trace/v2/testdata/mktests.go b/src/cmd/trace/v2/testdata/mktests.go new file mode 100644 index 0000000000..143e8ece35 --- /dev/null +++ b/src/cmd/trace/v2/testdata/mktests.go @@ -0,0 +1,60 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build ignore + +package main + +import ( + "bytes" + "fmt" + "internal/trace/v2/raw" + "internal/trace/v2/version" + "io" + "log" + "os" + "os/exec" +) + +func main() { + // Create command. + var trace, stderr bytes.Buffer + cmd := exec.Command("go", "run", "./testprog/main.go") + // TODO(mknyszek): Remove if goexperiment.Exectracer2 becomes the default. + cmd.Env = append(os.Environ(), "GOEXPERIMENT=exectracer2") + cmd.Stdout = &trace + cmd.Stderr = &stderr + + // Run trace program; the trace will appear in stdout. + fmt.Fprintln(os.Stderr, "running trace program...") + if err := cmd.Run(); err != nil { + log.Fatalf("running trace program: %v:\n%s", err, stderr.String()) + } + + // Create file. + f, err := os.Create(fmt.Sprintf("./go1%d.test", version.Current)) + if err != nil { + log.Fatalf("creating output file: %v", err) + } + defer f.Close() + + // Write out the trace. + r, err := raw.NewReader(&trace) + if err != nil { + log.Fatalf("reading trace: %v", err) + } + w, err := raw.NewTextWriter(f, version.Current) + for { + ev, err := r.ReadEvent() + if err == io.EOF { + break + } + if err != nil { + log.Fatalf("reading trace: %v", err) + } + if err := w.WriteEvent(ev); err != nil { + log.Fatalf("writing trace: %v", err) + } + } +} diff --git a/src/cmd/trace/v2/testdata/testprog/main.go b/src/cmd/trace/v2/testdata/testprog/main.go new file mode 100644 index 0000000000..fcf4dc156c --- /dev/null +++ b/src/cmd/trace/v2/testdata/testprog/main.go @@ -0,0 +1,129 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "fmt" + "log" + "net" + "os" + "runtime" + "runtime/trace" + "sync" + "syscall" + "time" +) + +func main() { + if err := trace.Start(os.Stdout); err != nil { + log.Fatal(err) + } + + // checkExecutionTimes relies on this. + var wg sync.WaitGroup + wg.Add(2) + go cpu10(&wg) + go cpu20(&wg) + wg.Wait() + + // checkHeapMetrics relies on this. + allocHog(25 * time.Millisecond) + + // checkProcStartStop relies on this. + var wg2 sync.WaitGroup + for i := 0; i < runtime.GOMAXPROCS(0); i++ { + wg2.Add(1) + go func() { + defer wg2.Done() + cpuHog(50 * time.Millisecond) + }() + } + wg2.Wait() + + // checkSyscalls relies on this. + done := make(chan error) + go blockingSyscall(50*time.Millisecond, done) + if err := <-done; err != nil { + log.Fatal(err) + } + + // checkNetworkUnblock relies on this. + ln, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + log.Fatalf("listen failed: %v", err) + } + defer ln.Close() + go func() { + c, err := ln.Accept() + if err != nil { + return + } + time.Sleep(time.Millisecond) + var buf [1]byte + c.Write(buf[:]) + c.Close() + }() + c, err := net.Dial("tcp", ln.Addr().String()) + if err != nil { + log.Fatalf("dial failed: %v", err) + } + var tmp [1]byte + c.Read(tmp[:]) + c.Close() + + trace.Stop() +} + +// blockingSyscall blocks the current goroutine for duration d in a syscall and +// sends a message to done when it is done or if the syscall failed. +func blockingSyscall(d time.Duration, done chan<- error) { + r, w, err := os.Pipe() + if err != nil { + done <- err + return + } + start := time.Now() + msg := []byte("hello") + time.AfterFunc(d, func() { w.Write(msg) }) + _, err = syscall.Read(int(r.Fd()), make([]byte, len(msg))) + if err == nil && time.Since(start) < d { + err = fmt.Errorf("syscall returned too early: want=%s got=%s", d, time.Since(start)) + } + done <- err +} + +func cpu10(wg *sync.WaitGroup) { + defer wg.Done() + cpuHog(10 * time.Millisecond) +} + +func cpu20(wg *sync.WaitGroup) { + defer wg.Done() + cpuHog(20 * time.Millisecond) +} + +func cpuHog(dt time.Duration) { + start := time.Now() + for i := 0; ; i++ { + if i%1000 == 0 && time.Since(start) > dt { + return + } + } +} + +func allocHog(dt time.Duration) { + start := time.Now() + var s [][]byte + for i := 0; ; i++ { + if i%1000 == 0 { + if time.Since(start) > dt { + return + } + // Take a break... this will generate a ton of events otherwise. + time.Sleep(50 * time.Microsecond) + } + s = append(s, make([]byte, 1024)) + } +} diff --git a/src/cmd/trace/v2/viewer.go b/src/cmd/trace/v2/viewer.go new file mode 100644 index 0000000000..de67fc4e0e --- /dev/null +++ b/src/cmd/trace/v2/viewer.go @@ -0,0 +1,56 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package trace + +import ( + "fmt" + "internal/trace" + "internal/trace/traceviewer" + tracev2 "internal/trace/v2" + "time" +) + +// viewerFrames returns the frames of the stack of ev. The given frame slice is +// used to store the frames to reduce allocations. +func viewerFrames(stk tracev2.Stack) []*trace.Frame { + var frames []*trace.Frame + stk.Frames(func(f tracev2.StackFrame) bool { + frames = append(frames, &trace.Frame{ + PC: f.PC, + Fn: f.Func, + File: f.File, + Line: int(f.Line), + }) + return true + }) + return frames +} + +func viewerGState(state tracev2.GoState, inMarkAssist bool) traceviewer.GState { + switch state { + case tracev2.GoUndetermined: + return traceviewer.GDead + case tracev2.GoNotExist: + return traceviewer.GDead + case tracev2.GoRunnable: + return traceviewer.GRunnable + case tracev2.GoRunning: + return traceviewer.GRunning + case tracev2.GoWaiting: + if inMarkAssist { + return traceviewer.GWaitingGC + } + return traceviewer.GWaiting + case tracev2.GoSyscall: + // N.B. A goroutine in a syscall is considered "executing" (state.Executing() == true). + return traceviewer.GRunning + default: + panic(fmt.Sprintf("unknown GoState: %s", state.String())) + } +} + +func viewerTime(t time.Duration) float64 { + return float64(t) / float64(time.Microsecond) +} diff --git a/src/go/build/deps_test.go b/src/go/build/deps_test.go index 3d54fc7aac..a6b1a613bb 100644 --- a/src/go/build/deps_test.go +++ b/src/go/build/deps_test.go @@ -45,6 +45,7 @@ var depsRules = ` internal/cpu, internal/goarch, internal/godebugs, internal/goexperiment, internal/goos, internal/goversion, internal/nettrace, internal/platform, + internal/trace/traceviewer/format, log/internal, unicode/utf8, unicode/utf16, unicode, unsafe; @@ -633,6 +634,16 @@ var depsRules = ` FMT, container/heap, math/rand, internal/trace/v2 < internal/trace; + # cmd/trace dependencies. + FMT, + embed, + encoding/json, + html/template, + internal/trace, + internal/trace/traceviewer/format, + net/http + < internal/trace/traceviewer; + # Coverage. FMT, crypto/md5, encoding/binary, regexp, sort, text/tabwriter, unsafe, internal/coverage, internal/coverage/uleb128 diff --git a/src/internal/trace/parser.go b/src/internal/trace/parser.go index 67fa60b8fb..3bbfbebab4 100644 --- a/src/internal/trace/parser.go +++ b/src/internal/trace/parser.go @@ -136,17 +136,23 @@ type rawEvent struct { sargs []string } -// readTrace does wire-format parsing and verification. -// It does not care about specific event types and argument meaning. -func readTrace(r io.Reader) (ver int, events []rawEvent, strings map[uint64]string, err error) { +func ReadVersion(r io.Reader) (ver int, off int, err error) { // Read and validate trace header. var buf [16]byte - off, err := io.ReadFull(r, buf[:]) + off, err = io.ReadFull(r, buf[:]) if err != nil { err = fmt.Errorf("failed to read header: read %v, err %v", off, err) return } ver, err = parseHeader(buf[:]) + return +} + +// readTrace does wire-format parsing and verification. +// It does not care about specific event types and argument meaning. +func readTrace(r io.Reader) (ver int, events []rawEvent, strings map[uint64]string, err error) { + var off int + ver, off, err = ReadVersion(r) if err != nil { return } @@ -161,6 +167,7 @@ func readTrace(r io.Reader) (ver int, events []rawEvent, strings map[uint64]stri } // Read events. + var buf [16]byte strings = make(map[uint64]string) for { // Read event type and number of arguments (1 byte). diff --git a/src/internal/trace/traceviewer/emitter.go b/src/internal/trace/traceviewer/emitter.go new file mode 100644 index 0000000000..95cb1f3271 --- /dev/null +++ b/src/internal/trace/traceviewer/emitter.go @@ -0,0 +1,666 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package traceviewer + +import ( + "encoding/json" + "fmt" + "internal/trace" + "internal/trace/traceviewer/format" + "io" + "strconv" + "time" +) + +type TraceConsumer struct { + ConsumeTimeUnit func(unit string) + ConsumeViewerEvent func(v *format.Event, required bool) + ConsumeViewerFrame func(key string, f format.Frame) + Flush func() +} + +// ViewerDataTraceConsumer returns a TraceConsumer that writes to w. The +// startIdx and endIdx are used for splitting large traces. They refer to +// indexes in the traceEvents output array, not the events in the trace input. +func ViewerDataTraceConsumer(w io.Writer, startIdx, endIdx int64) TraceConsumer { + allFrames := make(map[string]format.Frame) + requiredFrames := make(map[string]format.Frame) + enc := json.NewEncoder(w) + written := 0 + index := int64(-1) + + io.WriteString(w, "{") + return TraceConsumer{ + ConsumeTimeUnit: func(unit string) { + io.WriteString(w, `"displayTimeUnit":`) + enc.Encode(unit) + io.WriteString(w, ",") + }, + ConsumeViewerEvent: func(v *format.Event, required bool) { + index++ + if !required && (index < startIdx || index > endIdx) { + // not in the range. Skip! + return + } + WalkStackFrames(allFrames, v.Stack, func(id int) { + s := strconv.Itoa(id) + requiredFrames[s] = allFrames[s] + }) + WalkStackFrames(allFrames, v.EndStack, func(id int) { + s := strconv.Itoa(id) + requiredFrames[s] = allFrames[s] + }) + if written == 0 { + io.WriteString(w, `"traceEvents": [`) + } + if written > 0 { + io.WriteString(w, ",") + } + enc.Encode(v) + // TODO(mknyszek): get rid of the extra \n inserted by enc.Encode. + // Same should be applied to splittingTraceConsumer. + written++ + }, + ConsumeViewerFrame: func(k string, v format.Frame) { + allFrames[k] = v + }, + Flush: func() { + io.WriteString(w, `], "stackFrames":`) + enc.Encode(requiredFrames) + io.WriteString(w, `}`) + }, + } +} + +func SplittingTraceConsumer(max int) (*splitter, TraceConsumer) { + type eventSz struct { + Time float64 + Sz int + Frames []int + } + + var ( + // data.Frames contains only the frames for required events. + data = format.Data{Frames: make(map[string]format.Frame)} + + allFrames = make(map[string]format.Frame) + + sizes []eventSz + cw countingWriter + ) + + s := new(splitter) + + return s, TraceConsumer{ + ConsumeTimeUnit: func(unit string) { + data.TimeUnit = unit + }, + ConsumeViewerEvent: func(v *format.Event, required bool) { + if required { + // Store required events inside data so flush + // can include them in the required part of the + // trace. + data.Events = append(data.Events, v) + WalkStackFrames(allFrames, v.Stack, func(id int) { + s := strconv.Itoa(id) + data.Frames[s] = allFrames[s] + }) + WalkStackFrames(allFrames, v.EndStack, func(id int) { + s := strconv.Itoa(id) + data.Frames[s] = allFrames[s] + }) + return + } + enc := json.NewEncoder(&cw) + enc.Encode(v) + size := eventSz{Time: v.Time, Sz: cw.size + 1} // +1 for ",". + // Add referenced stack frames. Their size is computed + // in flush, where we can dedup across events. + WalkStackFrames(allFrames, v.Stack, func(id int) { + size.Frames = append(size.Frames, id) + }) + WalkStackFrames(allFrames, v.EndStack, func(id int) { + size.Frames = append(size.Frames, id) // This may add duplicates. We'll dedup later. + }) + sizes = append(sizes, size) + cw.size = 0 + }, + ConsumeViewerFrame: func(k string, v format.Frame) { + allFrames[k] = v + }, + Flush: func() { + // Calculate size of the mandatory part of the trace. + // This includes thread names and stack frames for + // required events. + cw.size = 0 + enc := json.NewEncoder(&cw) + enc.Encode(data) + requiredSize := cw.size + + // Then calculate size of each individual event and + // their stack frames, grouping them into ranges. We + // only include stack frames relevant to the events in + // the range to reduce overhead. + + var ( + start = 0 + + eventsSize = 0 + + frames = make(map[string]format.Frame) + framesSize = 0 + ) + for i, ev := range sizes { + eventsSize += ev.Sz + + // Add required stack frames. Note that they + // may already be in the map. + for _, id := range ev.Frames { + s := strconv.Itoa(id) + _, ok := frames[s] + if ok { + continue + } + f := allFrames[s] + frames[s] = f + framesSize += stackFrameEncodedSize(uint(id), f) + } + + total := requiredSize + framesSize + eventsSize + if total < max { + continue + } + + // Reached max size, commit this range and + // start a new range. + startTime := time.Duration(sizes[start].Time * 1000) + endTime := time.Duration(ev.Time * 1000) + s.Ranges = append(s.Ranges, Range{ + Name: fmt.Sprintf("%v-%v", startTime, endTime), + Start: start, + End: i + 1, + StartTime: int64(startTime), + EndTime: int64(endTime), + }) + start = i + 1 + frames = make(map[string]format.Frame) + framesSize = 0 + eventsSize = 0 + } + if len(s.Ranges) <= 1 { + s.Ranges = nil + return + } + + if end := len(sizes) - 1; start < end { + s.Ranges = append(s.Ranges, Range{ + Name: fmt.Sprintf("%v-%v", time.Duration(sizes[start].Time*1000), time.Duration(sizes[end].Time*1000)), + Start: start, + End: end, + StartTime: int64(sizes[start].Time * 1000), + EndTime: int64(sizes[end].Time * 1000), + }) + } + }, + } +} + +type splitter struct { + Ranges []Range +} + +type countingWriter struct { + size int +} + +func (cw *countingWriter) Write(data []byte) (int, error) { + cw.size += len(data) + return len(data), nil +} + +func stackFrameEncodedSize(id uint, f format.Frame) int { + // We want to know the marginal size of traceviewer.Data.Frames for + // each event. Running full JSON encoding of the map for each event is + // far too slow. + // + // Since the format is fixed, we can easily compute the size without + // encoding. + // + // A single entry looks like one of the following: + // + // "1":{"name":"main.main:30"}, + // "10":{"name":"pkg.NewSession:173","parent":9}, + // + // The parent is omitted if 0. The trailing comma is omitted from the + // last entry, but we don't need that much precision. + const ( + baseSize = len(`"`) + len(`":{"name":"`) + len(`"},`) + + // Don't count the trailing quote on the name, as that is + // counted in baseSize. + parentBaseSize = len(`,"parent":`) + ) + + size := baseSize + + size += len(f.Name) + + // Bytes for id (always positive). + for id > 0 { + size += 1 + id /= 10 + } + + if f.Parent > 0 { + size += parentBaseSize + // Bytes for parent (always positive). + for f.Parent > 0 { + size += 1 + f.Parent /= 10 + } + } + + return size +} + +// WalkStackFrames calls fn for id and all of its parent frames from allFrames. +func WalkStackFrames(allFrames map[string]format.Frame, id int, fn func(id int)) { + for id != 0 { + f, ok := allFrames[strconv.Itoa(id)] + if !ok { + break + } + fn(id) + id = f.Parent + } +} + +type Mode int + +const ( + ModeGoroutineOriented Mode = 1 << iota + ModeTaskOriented +) + +// NewEmitter returns a new Emitter that writes to c. The rangeStart and +// rangeEnd args are used for splitting large traces. +func NewEmitter(c TraceConsumer, mode Mode, rangeStart, rangeEnd time.Duration) *Emitter { + c.ConsumeTimeUnit("ns") + + return &Emitter{ + c: c, + mode: mode, + rangeStart: rangeStart, + rangeEnd: rangeEnd, + frameTree: frameNode{children: make(map[uint64]frameNode)}, + resources: make(map[uint64]string), + } +} + +type Emitter struct { + c TraceConsumer + mode Mode + rangeStart time.Duration + rangeEnd time.Duration + + heapStats, prevHeapStats heapStats + gstates, prevGstates [gStateCount]int64 + threadStats, prevThreadStats [threadStateCount]int64 + gomaxprocs uint64 + frameTree frameNode + frameSeq int + arrowSeq uint64 + filter func(uint64) bool + resourceType string + resources map[uint64]string + focusResource uint64 +} + +func (e *Emitter) Gomaxprocs(v uint64) { + if v > e.gomaxprocs { + e.gomaxprocs = v + } +} + +func (e *Emitter) Resource(id uint64, name string) { + if e.filter != nil && !e.filter(id) { + return + } + e.resources[id] = name +} + +func (e *Emitter) SetResourceType(name string) { + e.resourceType = name +} + +func (e *Emitter) SetResourceFilter(filter func(uint64) bool) { + e.filter = filter +} + +func (e *Emitter) Slice(s SliceEvent) { + if !e.tsWithinRange(s.Ts) && !e.tsWithinRange(s.Ts+s.Dur) { + return + } + if e.filter != nil && !e.filter(s.Resource) { + return + } + e.OptionalEvent(&format.Event{ + Name: s.Name, + Phase: "X", + Time: viewerTime(s.Ts), + Dur: viewerTime(s.Dur), + TID: s.Resource, + Stack: s.Stack, + EndStack: s.EndStack, + Arg: s.Arg, + }) +} + +type SliceEvent struct { + Name string + Ts time.Duration + Dur time.Duration + Resource uint64 + Stack int + EndStack int + Arg any +} + +func (e *Emitter) Instant(i InstantEvent) { + if !e.tsWithinRange(i.Ts) { + return + } + if e.filter != nil && !e.filter(i.Resource) { + return + } + // TODO(mknyszek): Handle ModeTaskOriented here. See cmd/trace.(*traceContext).emitInstant. + cname := "" + e.OptionalEvent(&format.Event{ + Name: i.Name, + Category: i.Category, + Phase: "I", + Scope: "t", + Time: viewerTime(i.Ts), + TID: i.Resource, + Stack: i.Stack, + Cname: cname, + Arg: i.Arg, + }) +} + +type InstantEvent struct { + Ts time.Duration + Name string + Category string + Resource uint64 + Stack int + Arg any +} + +func (e *Emitter) Arrow(a ArrowEvent) { + if !e.tsWithinRange(a.Start) || !e.tsWithinRange(a.End) { + return + } + if e.filter != nil && (!e.filter(a.FromResource) || !e.filter(a.ToResource)) { + return + } + // TODO(mknyszek): Handle ModeTaskOriented here. See cmd/trace.(*traceContext).emitArrow. + e.arrowSeq++ + e.OptionalEvent(&format.Event{ + Name: a.Name, + Phase: "s", + TID: a.FromResource, + ID: e.arrowSeq, + Time: viewerTime(a.Start), + Stack: a.FromStack, + }) + e.OptionalEvent(&format.Event{ + Name: a.Name, + Phase: "t", + TID: a.ToResource, + ID: e.arrowSeq, + Time: viewerTime(a.End), + }) +} + +type ArrowEvent struct { + Name string + Start time.Duration + End time.Duration + FromResource uint64 + FromStack int + ToResource uint64 +} + +func (e *Emitter) Event(ev *format.Event) { + e.c.ConsumeViewerEvent(ev, true) +} + +func (e *Emitter) HeapAlloc(ts time.Duration, v uint64) { + e.heapStats.heapAlloc = v + e.emitHeapCounters(ts) +} + +func (e *Emitter) Focus(id uint64) { + e.focusResource = id +} + +func (e *Emitter) GoroutineTransition(ts time.Duration, from, to GState) { + e.gstates[from]-- + e.gstates[to]++ + if e.prevGstates == e.gstates { + return + } + if e.tsWithinRange(ts) { + e.OptionalEvent(&format.Event{ + Name: "Goroutines", + Phase: "C", + Time: viewerTime(ts), + PID: 1, + Arg: &format.GoroutineCountersArg{ + Running: uint64(e.gstates[GRunning]), + Runnable: uint64(e.gstates[GRunnable]), + GCWaiting: uint64(e.gstates[GWaitingGC]), + }, + }) + } + e.prevGstates = e.gstates +} + +func (e *Emitter) IncThreadStateCount(ts time.Duration, state ThreadState, delta int64) { + e.threadStats[state] += delta + if e.prevThreadStats == e.threadStats { + return + } + if e.tsWithinRange(ts) { + e.OptionalEvent(&format.Event{ + Name: "Threads", + Phase: "C", + Time: viewerTime(ts), + PID: 1, + Arg: &format.ThreadCountersArg{ + Running: int64(e.threadStats[ThreadStateRunning]), + InSyscall: int64(e.threadStats[ThreadStateInSyscall]), + // TODO(mknyszek): Why is InSyscallRuntime not included here? + }, + }) + } + e.prevThreadStats = e.threadStats +} + +func (e *Emitter) HeapGoal(ts time.Duration, v uint64) { + // This cutoff at 1 PiB is a Workaround for https://github.com/golang/go/issues/63864. + // + // TODO(mknyszek): Remove this once the problem has been fixed. + const PB = 1 << 50 + if v > PB { + v = 0 + } + e.heapStats.nextGC = v + e.emitHeapCounters(ts) +} + +func (e *Emitter) emitHeapCounters(ts time.Duration) { + if e.prevHeapStats == e.heapStats { + return + } + diff := uint64(0) + if e.heapStats.nextGC > e.heapStats.heapAlloc { + diff = e.heapStats.nextGC - e.heapStats.heapAlloc + } + if e.tsWithinRange(ts) { + e.OptionalEvent(&format.Event{ + Name: "Heap", + Phase: "C", + Time: viewerTime(ts), + PID: 1, + Arg: &format.HeapCountersArg{Allocated: e.heapStats.heapAlloc, NextGC: diff}, + }) + } + e.prevHeapStats = e.heapStats +} + +// Err returns an error if the emitter is in an invalid state. +func (e *Emitter) Err() error { + if e.gstates[GRunnable] < 0 || e.gstates[GRunning] < 0 || e.threadStats[ThreadStateInSyscall] < 0 || e.threadStats[ThreadStateInSyscallRuntime] < 0 { + return fmt.Errorf( + "runnable=%d running=%d insyscall=%d insyscallRuntime=%d", + e.gstates[GRunnable], + e.gstates[GRunning], + e.threadStats[ThreadStateInSyscall], + e.threadStats[ThreadStateInSyscallRuntime], + ) + } + return nil +} + +func (e *Emitter) tsWithinRange(ts time.Duration) bool { + return e.rangeStart <= ts && ts <= e.rangeEnd +} + +// OptionalEvent emits ev if it's within the time range of of the consumer, i.e. +// the selected trace split range. +func (e *Emitter) OptionalEvent(ev *format.Event) { + e.c.ConsumeViewerEvent(ev, false) +} + +func (e *Emitter) Flush() { + e.processMeta(format.StatsSection, "STATS", 0) + if e.mode&ModeTaskOriented != 0 { + e.processMeta(format.TasksSection, "TASKS", 1) + } + + e.processMeta(format.ProcsSection, e.resourceType, 2) + + e.threadMeta(format.ProcsSection, trace.GCP, "GC", -6) + e.threadMeta(format.ProcsSection, trace.NetpollP, "Network", -5) + e.threadMeta(format.ProcsSection, trace.TimerP, "Timers", -4) + e.threadMeta(format.ProcsSection, trace.SyscallP, "Syscalls", -3) + + for id, name := range e.resources { + priority := int(id) + if e.focusResource != 0 && id == e.focusResource { + // Put the focus goroutine on top. + priority = -2 + } + e.threadMeta(format.ProcsSection, id, name, priority) + } + + e.c.Flush() +} + +func (e *Emitter) threadMeta(sectionID, tid uint64, name string, priority int) { + e.Event(&format.Event{ + Name: "thread_name", + Phase: "M", + PID: sectionID, + TID: tid, + Arg: &format.NameArg{Name: name}, + }) + e.Event(&format.Event{ + Name: "thread_sort_index", + Phase: "M", + PID: sectionID, + TID: tid, + Arg: &format.SortIndexArg{Index: priority}, + }) +} + +func (e *Emitter) processMeta(sectionID uint64, name string, priority int) { + e.Event(&format.Event{ + Name: "process_name", + Phase: "M", + PID: sectionID, + Arg: &format.NameArg{Name: name}, + }) + e.Event(&format.Event{ + Name: "process_sort_index", + Phase: "M", + PID: sectionID, + Arg: &format.SortIndexArg{Index: priority}, + }) +} + +// Stack emits the given frames and returns a unique id for the stack. No +// pointers to the given data are being retained beyond the call to Stack. +func (e *Emitter) Stack(stk []*trace.Frame) int { + return e.buildBranch(e.frameTree, stk) +} + +// buildBranch builds one branch in the prefix tree rooted at ctx.frameTree. +func (e *Emitter) buildBranch(parent frameNode, stk []*trace.Frame) int { + if len(stk) == 0 { + return parent.id + } + last := len(stk) - 1 + frame := stk[last] + stk = stk[:last] + + node, ok := parent.children[frame.PC] + if !ok { + e.frameSeq++ + node.id = e.frameSeq + node.children = make(map[uint64]frameNode) + parent.children[frame.PC] = node + e.c.ConsumeViewerFrame(strconv.Itoa(node.id), format.Frame{Name: fmt.Sprintf("%v:%v", frame.Fn, frame.Line), Parent: parent.id}) + } + return e.buildBranch(node, stk) +} + +type heapStats struct { + heapAlloc uint64 + nextGC uint64 +} + +func viewerTime(t time.Duration) float64 { + return float64(t) / float64(time.Microsecond) +} + +type GState int + +const ( + GDead GState = iota + GRunnable + GRunning + GWaiting + GWaitingGC + + gStateCount +) + +type ThreadState int + +const ( + ThreadStateInSyscall ThreadState = iota + ThreadStateInSyscallRuntime + ThreadStateRunning + + threadStateCount +) + +type frameNode struct { + id int + children map[uint64]frameNode +} diff --git a/src/cmd/internal/traceviewer/format.go b/src/internal/trace/traceviewer/format/format.go similarity index 60% rename from src/cmd/internal/traceviewer/format.go rename to src/internal/trace/traceviewer/format/format.go index 3636c1053d..83f3276704 100644 --- a/src/cmd/internal/traceviewer/format.go +++ b/src/internal/trace/traceviewer/format/format.go @@ -7,7 +7,10 @@ // // The official description of the format is in this file: // https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/preview -package traceviewer +// +// Note: This can't be part of the parent traceviewer package as that would +// throw. go_bootstrap cannot depend on the cgo version of package net in ./make.bash. +package format type Data struct { Events []*Event `json:"traceEvents"` @@ -36,3 +39,41 @@ type Frame struct { Name string `json:"name"` Parent int `json:"parent,omitempty"` } + +type NameArg struct { + Name string `json:"name"` +} + +type BlockedArg struct { + Blocked string `json:"blocked"` +} + +type SortIndexArg struct { + Index int `json:"sort_index"` +} + +type HeapCountersArg struct { + Allocated uint64 + NextGC uint64 +} + +const ( + ProcsSection = 0 // where Goroutines or per-P timelines are presented. + StatsSection = 1 // where counters are presented. + TasksSection = 2 // where Task hierarchy & timeline is presented. +) + +type GoroutineCountersArg struct { + Running uint64 + Runnable uint64 + GCWaiting uint64 +} + +type ThreadCountersArg struct { + Running int64 + InSyscall int64 +} + +type ThreadIDArg struct { + ThreadID uint64 +} diff --git a/src/internal/trace/traceviewer/http.go b/src/internal/trace/traceviewer/http.go new file mode 100644 index 0000000000..0c58535a72 --- /dev/null +++ b/src/internal/trace/traceviewer/http.go @@ -0,0 +1,375 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package traceviewer + +import ( + "embed" + "fmt" + "html/template" + "net/http" + "strings" +) + +func MainHandler(ranges []Range) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + if err := templMain.Execute(w, ranges); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + }) +} + +var templMain = template.Must(template.New("").Parse(` + + + +

cmd/trace: the Go trace event viewer

+

+ This web server provides various visualizations of an event log gathered during + the execution of a Go program that uses the runtime/trace package. +

+ +

Event timelines for running goroutines

+{{if $}} +

+ Large traces are split into multiple sections of equal data size + (not duration) to avoid overwhelming the visualizer. +

+ +{{else}} + +{{end}} +

+ This view displays a timeline for each of the GOMAXPROCS logical + processors, showing which goroutine (if any) was running on that + logical processor at each moment. + + Each goroutine has an identifying number (e.g. G123), main function, + and color. + + A colored bar represents an uninterrupted span of execution. + + Execution of a goroutine may migrate from one logical processor to another, + causing a single colored bar to be horizontally continuous but + vertically displaced. +

+

+ Clicking on a span reveals information about it, such as its + duration, its causal predecessors and successors, and the stack trace + at the final moment when it yielded the logical processor, for example + because it made a system call or tried to acquire a mutex. + + Directly underneath each bar, a smaller bar or more commonly a fine + vertical line indicates an event occurring during its execution. + Some of these are related to garbage collection; most indicate that + a goroutine yielded its logical processor but then immediately resumed execution + on the same logical processor. Clicking on the event displays the stack trace + at the moment it occurred. +

+

+ The causal relationships between spans of goroutine execution + can be displayed by clicking the Flow Events button at the top. +

+

+ At the top ("STATS"), there are three additional timelines that + display statistical information. + + "Goroutines" is a time series of the count of existing goroutines; + clicking on it displays their breakdown by state at that moment: + running, runnable, or waiting. + + "Heap" is a time series of the amount of heap memory allocated (in orange) + and (in green) the allocation limit at which the next GC cycle will begin. + + "Threads" shows the number of kernel threads in existence: there is + always one kernel thread per logical processor, and additional threads + are created for calls to non-Go code such as a system call or a + function written in C. +

+

+ Above the event trace for the first logical processor are + traces for various runtime-internal events. + + The "GC" bar shows when the garbage collector is running, and in which stage. + Garbage collection may temporarily affect all the logical processors + and the other metrics. + + The "Network", "Timers", and "Syscalls" traces indicate events in + the runtime that cause goroutines to wake up. +

+

+ The visualization allows you to navigate events at scales ranging from several + seconds to a handful of nanoseconds. + + Consult the documentation for the Chromium Trace Event Profiling Tool + for help navigating the view. +

+ + +

+ This view displays information about each set of goroutines that + shares the same main function. + + Clicking on a main function shows links to the four types of + blocking profile (see below) applied to that subset of goroutines. + + It also shows a table of specific goroutine instances, with various + execution statistics and a link to the event timeline for each one. + + The timeline displays only the selected goroutine and any others it + interacts with via block/unblock events. (The timeline is + goroutine-oriented rather than logical processor-oriented.) +

+ +

Profiles

+

+ Each link below displays a global profile in zoomable graph form as + produced by pprof's "web" command. + + In addition there is a link to download the profile for offline + analysis with pprof. + + All four profiles represent causes of delay that prevent a goroutine + from running on a logical processor: because it was waiting for the network, + for a synchronization operation on a mutex or channel, for a system call, + or for a logical processor to become available. +

+ + +

User-defined tasks and regions

+

+ The trace API allows a target program to annotate a region of code + within a goroutine, such as a key function, so that its performance + can be analyzed. + + Log events may be + associated with a region to record progress and relevant values. + + The API also allows annotation of higher-level + tasks, + which may involve work across many goroutines. +

+

+ The links below display, for each region and task, a histogram of its execution times. + + Each histogram bucket contains a sample trace that records the + sequence of events such as goroutine creations, log events, and + subregion start/end times. + + For each task, you can click through to a logical-processor or + goroutine-oriented view showing the tasks and regions on the + timeline. + + Such information may help uncover which steps in a region are + unexpectedly slow, or reveal relationships between the data values + logged in a request and its running time. +

+ + +

Garbage collection metrics

+ +

+ This chart indicates the maximum GC pause time (the largest x value + for which y is zero), and more generally, the fraction of time that + the processors are available to application goroutines ("mutators"), + for any time window of a specified size, in the worst case. +

+ + +`)) + +type Range struct { + Name string + Start int + End int + StartTime int64 + EndTime int64 +} + +func (r Range) URL() string { + return fmt.Sprintf("/trace?start=%d&end=%d", r.Start, r.End) +} + +func TraceHandler() http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if err := r.ParseForm(); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + html := strings.ReplaceAll(templTrace, "{{PARAMS}}", r.Form.Encode()) + w.Write([]byte(html)) + }) +} + +// https://chromium.googlesource.com/catapult/+/9508452e18f130c98499cb4c4f1e1efaedee8962/tracing/docs/embedding-trace-viewer.md +// This is almost verbatim copy of https://chromium-review.googlesource.com/c/catapult/+/2062938/2/tracing/bin/index.html +var templTrace = ` + + + + + + + + + + + + + +` + +//go:embed static/trace_viewer_full.html static/webcomponents.min.js +var staticContent embed.FS + +func StaticHandler() http.Handler { + return http.FileServer(http.FS(staticContent)) +} diff --git a/src/cmd/trace/static/README.md b/src/internal/trace/traceviewer/static/README.md similarity index 100% rename from src/cmd/trace/static/README.md rename to src/internal/trace/traceviewer/static/README.md diff --git a/src/cmd/trace/static/trace_viewer_full.html b/src/internal/trace/traceviewer/static/trace_viewer_full.html similarity index 100% rename from src/cmd/trace/static/trace_viewer_full.html rename to src/internal/trace/traceviewer/static/trace_viewer_full.html diff --git a/src/cmd/trace/static/webcomponents.min.js b/src/internal/trace/traceviewer/static/webcomponents.min.js similarity index 100% rename from src/cmd/trace/static/webcomponents.min.js rename to src/internal/trace/traceviewer/static/webcomponents.min.js diff --git a/src/internal/trace/v2/version/version.go b/src/internal/trace/v2/version/version.go index bb4df8469e..28189f80db 100644 --- a/src/internal/trace/v2/version/version.go +++ b/src/internal/trace/v2/version/version.go @@ -16,7 +16,8 @@ import ( type Version uint32 const ( - Go122 Version = 22 + Go122 Version = 22 + Current = Go122 ) var versions = map[Version][]event.Spec{ From 539b4d8d5bb91f74f580a1bc6e8e28b9de38aedd Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Tue, 21 Nov 2023 17:23:43 +0000 Subject: [PATCH 056/313] internal/trace/v2: forward Event.Stack to StateTransition.Stack Currently StateTransition.Stack is only set for the GoCreate case, because there are two stacks and we need to distinguish them. But the docs for StateTransition.Stack say that that stack always references the resource that is transitioning. There are quite a few cases where Event.Stack is actually the appropriate stack to for StateTransition.Stack, but in these cases it's left empty, and the caller just needs to understand which one to look at. This isn't great. Forward Event.Stack to StateTransition.Stack whenever Event.Stack also refers to the resource experiencing the state transition. Change-Id: Ie43fc6036f2712c7982174d5739d95765312dfcc Reviewed-on: https://go-review.googlesource.com/c/go/+/544316 Auto-Submit: Michael Knyszek Reviewed-by: Michael Pratt LUCI-TryBot-Result: Go LUCI --- src/internal/trace/v2/event.go | 6 ++++++ src/internal/trace/v2/testtrace/validation.go | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/src/internal/trace/v2/event.go b/src/internal/trace/v2/event.go index 7ec4698d88..3700cbcc2f 100644 --- a/src/internal/trace/v2/event.go +++ b/src/internal/trace/v2/event.go @@ -568,22 +568,28 @@ func (e Event) StateTransition() StateTransition { s = goStateTransition(GoID(e.base.args[0]), GoRunnable, GoRunning) case go122.EvGoDestroy: s = goStateTransition(e.ctx.G, GoRunning, GoNotExist) + s.Stack = e.Stack() // This event references the resource the event happened on. case go122.EvGoDestroySyscall: s = goStateTransition(e.ctx.G, GoSyscall, GoNotExist) case go122.EvGoStop: s = goStateTransition(e.ctx.G, GoRunning, GoRunnable) s.Reason = e.table.strings.mustGet(stringID(e.base.args[0])) + s.Stack = e.Stack() // This event references the resource the event happened on. case go122.EvGoBlock: s = goStateTransition(e.ctx.G, GoRunning, GoWaiting) s.Reason = e.table.strings.mustGet(stringID(e.base.args[0])) + s.Stack = e.Stack() // This event references the resource the event happened on. case go122.EvGoUnblock: s = goStateTransition(GoID(e.base.args[0]), GoWaiting, GoRunnable) case go122.EvGoSyscallBegin: s = goStateTransition(e.ctx.G, GoRunning, GoSyscall) + s.Stack = e.Stack() // This event references the resource the event happened on. case go122.EvGoSyscallEnd: s = goStateTransition(e.ctx.G, GoSyscall, GoRunning) + s.Stack = e.Stack() // This event references the resource the event happened on. case go122.EvGoSyscallEndBlocked: s = goStateTransition(e.ctx.G, GoSyscall, GoRunnable) + s.Stack = e.Stack() // This event references the resource the event happened on. case go122.EvGoStatus: // N.B. ordering.advance populates e.base.extra. s = goStateTransition(GoID(e.base.args[0]), GoState(e.base.extra(version.Go122)[0]), go122GoStatus2GoState[e.base.args[2]]) diff --git a/src/internal/trace/v2/testtrace/validation.go b/src/internal/trace/v2/testtrace/validation.go index fcbc10801b..a2654a10e4 100644 --- a/src/internal/trace/v2/testtrace/validation.go +++ b/src/internal/trace/v2/testtrace/validation.go @@ -169,6 +169,11 @@ func (v *Validator) Event(ev trace.Event) error { state.binding = ctx } } else if old.Executing() && !new.Executing() { + if tr.Stack != ev.Stack() { + // This is a case where the transition is happening to a goroutine that is also executing, so + // these two stacks should always match. + e.Errorf("StateTransition.Stack doesn't match Event.Stack") + } ctx := state.binding if ctx != nil { if ctx.G != id { From 450ecbe90508f56684b69e39823d4da155846932 Mon Sep 17 00:00:00 2001 From: Rhys Hiltner Date: Tue, 21 Nov 2023 16:03:54 +0000 Subject: [PATCH 057/313] runtime: profile contended lock calls Add runtime-internal locks to the mutex contention profile. Store up to one call stack responsible for lock contention on the M, until it's safe to contribute its value to the mprof table. Try to use that limited local storage space for a relatively large source of contention, and attribute any contention in stacks we're not able to store to a sentinel _LostContendedLock function. Avoid ballooning lock contention while manipulating the mprof table by attributing to that sentinel function any lock contention experienced while reporting lock contention. Guard collecting real call stacks with GODEBUG=profileruntimelocks=1, since the available data has mixed semantics; we can easily capture an M's own wait time, but we'd prefer for the profile entry of each critical section to describe how long it made the other Ms wait. It's too late in the Go 1.22 cycle to make the required changes to futex-based locks. When not enabled, attribute the time to the sentinel function instead. Fixes #57071 This is a roll-forward of https://go.dev/cl/528657, which was reverted in https://go.dev/cl/543660 Reason for revert: de-flakes tests (reduces dependence on fine-grained timers, correctly identifies contention on big-endian futex locks, attempts to measure contention in the semaphore implementation but only uses that secondary measurement to finish the test early, skips tests on single-processor systems) Change-Id: I31389f24283d85e46ad9ba8d4f514cb9add8dfb0 Reviewed-on: https://go-review.googlesource.com/c/go/+/544195 Reviewed-by: Michael Pratt LUCI-TryBot-Result: Go LUCI TryBot-Result: Gopher Robot Reviewed-by: Than McIntosh Auto-Submit: Rhys Hiltner Run-TryBot: Rhys Hiltner --- src/runtime/debug.go | 11 ++ src/runtime/export_test.go | 12 ++ src/runtime/extern.go | 8 + src/runtime/lock_futex.go | 10 ++ src/runtime/lock_js.go | 4 + src/runtime/lock_sema.go | 8 + src/runtime/lock_wasip1.go | 4 + src/runtime/metrics.go | 2 +- src/runtime/metrics_test.go | 322 ++++++++++++++++++++++++++++++++++++ src/runtime/mprof.go | 236 +++++++++++++++++++++++++- src/runtime/proc.go | 4 +- src/runtime/runtime1.go | 42 ++--- src/runtime/runtime2.go | 8 + 13 files changed, 648 insertions(+), 23 deletions(-) diff --git a/src/runtime/debug.go b/src/runtime/debug.go index 0e61692f3d..3233ce8ee7 100644 --- a/src/runtime/debug.go +++ b/src/runtime/debug.go @@ -52,6 +52,17 @@ func NumCgoCall() int64 { return n } +func totalMutexWaitTimeNanos() int64 { + total := sched.totalMutexWaitTime.Load() + + total += sched.totalRuntimeLockWaitTime.Load() + for mp := (*m)(atomic.Loadp(unsafe.Pointer(&allm))); mp != nil; mp = mp.alllink { + total += mp.mLockProfile.waitTime.Load() + } + + return total +} + // NumGoroutine returns the number of goroutines that currently exist. func NumGoroutine() int { return int(gcount()) diff --git a/src/runtime/export_test.go b/src/runtime/export_test.go index 2b34929ba0..d071035e62 100644 --- a/src/runtime/export_test.go +++ b/src/runtime/export_test.go @@ -1340,6 +1340,18 @@ func PageCachePagesLeaked() (leaked uintptr) { return } +type Mutex = mutex + +var Lock = lock +var Unlock = unlock + +var MutexContended = mutexContended + +func SemRootLock(addr *uint32) *mutex { + root := semtable.rootFor(addr) + return &root.lock +} + var Semacquire = semacquire var Semrelease1 = semrelease1 diff --git a/src/runtime/extern.go b/src/runtime/extern.go index f8db296e6b..d199720b9b 100644 --- a/src/runtime/extern.go +++ b/src/runtime/extern.go @@ -145,6 +145,14 @@ It is a comma-separated list of name=val pairs setting these named variables: risk in that scenario. Currently not supported on Windows, plan9 or js/wasm. Setting this option for some applications can produce large traces, so use with care. + profileruntimelocks: setting profileruntimelocks=1 includes call stacks related to + contention on runtime-internal locks in the "mutex" profile, subject to the + MutexProfileFraction setting. The call stacks will correspond to the unlock call that + released the lock. But instead of the value corresponding to the amount of contention that + call stack caused, it corresponds to the amount of time the caller of unlock had to wait + in its original call to lock. A future release is expected to align those and remove this + setting. + invalidptr: invalidptr=1 (the default) causes the garbage collector and stack copier to crash the program if an invalid pointer value (for example, 1) is found in a pointer-typed location. Setting invalidptr=0 disables this check. diff --git a/src/runtime/lock_futex.go b/src/runtime/lock_futex.go index cc7d465ef1..867e2b34d0 100644 --- a/src/runtime/lock_futex.go +++ b/src/runtime/lock_futex.go @@ -44,6 +44,10 @@ func key32(p *uintptr) *uint32 { return (*uint32)(unsafe.Pointer(p)) } +func mutexContended(l *mutex) bool { + return atomic.Load(key32(&l.key)) > mutex_locked +} + func lock(l *mutex) { lockWithRank(l, getLockRank(l)) } @@ -71,6 +75,8 @@ func lock2(l *mutex) { // its wakeup call. wait := v + timer := &lockTimer{lock: l} + timer.begin() // On uniprocessors, no point spinning. // On multiprocessors, spin for ACTIVE_SPIN attempts. spin := 0 @@ -82,6 +88,7 @@ func lock2(l *mutex) { for i := 0; i < spin; i++ { for l.key == mutex_unlocked { if atomic.Cas(key32(&l.key), mutex_unlocked, wait) { + timer.end() return } } @@ -92,6 +99,7 @@ func lock2(l *mutex) { for i := 0; i < passive_spin; i++ { for l.key == mutex_unlocked { if atomic.Cas(key32(&l.key), mutex_unlocked, wait) { + timer.end() return } } @@ -101,6 +109,7 @@ func lock2(l *mutex) { // Sleep. v = atomic.Xchg(key32(&l.key), mutex_sleeping) if v == mutex_unlocked { + timer.end() return } wait = mutex_sleeping @@ -122,6 +131,7 @@ func unlock2(l *mutex) { } gp := getg() + gp.m.mLockProfile.recordUnlock(l) gp.m.locks-- if gp.m.locks < 0 { throw("runtime·unlock: lock count") diff --git a/src/runtime/lock_js.go b/src/runtime/lock_js.go index 91ad7be317..b6ee5ec7af 100644 --- a/src/runtime/lock_js.go +++ b/src/runtime/lock_js.go @@ -23,6 +23,10 @@ const ( passive_spin = 1 ) +func mutexContended(l *mutex) bool { + return false +} + func lock(l *mutex) { lockWithRank(l, getLockRank(l)) } diff --git a/src/runtime/lock_sema.go b/src/runtime/lock_sema.go index 9afba08b0b..073e7d410e 100644 --- a/src/runtime/lock_sema.go +++ b/src/runtime/lock_sema.go @@ -31,6 +31,10 @@ const ( passive_spin = 1 ) +func mutexContended(l *mutex) bool { + return atomic.Loaduintptr(&l.key) > locked +} + func lock(l *mutex) { lockWithRank(l, getLockRank(l)) } @@ -48,6 +52,8 @@ func lock2(l *mutex) { } semacreate(gp.m) + timer := &lockTimer{lock: l} + timer.begin() // On uniprocessor's, no point spinning. // On multiprocessors, spin for ACTIVE_SPIN attempts. spin := 0 @@ -60,6 +66,7 @@ Loop: if v&locked == 0 { // Unlocked. Try to lock. if atomic.Casuintptr(&l.key, v, v|locked) { + timer.end() return } i = 0 @@ -119,6 +126,7 @@ func unlock2(l *mutex) { } } } + gp.m.mLockProfile.recordUnlock(l) gp.m.locks-- if gp.m.locks < 0 { throw("runtime·unlock: lock count") diff --git a/src/runtime/lock_wasip1.go b/src/runtime/lock_wasip1.go index c4fc59f6cc..acfc62acb4 100644 --- a/src/runtime/lock_wasip1.go +++ b/src/runtime/lock_wasip1.go @@ -19,6 +19,10 @@ const ( active_spin_cnt = 30 ) +func mutexContended(l *mutex) bool { + return false +} + func lock(l *mutex) { lockWithRank(l, getLockRank(l)) } diff --git a/src/runtime/metrics.go b/src/runtime/metrics.go index 4bd167135d..f97a3804ab 100644 --- a/src/runtime/metrics.go +++ b/src/runtime/metrics.go @@ -470,7 +470,7 @@ func initMetrics() { "/sync/mutex/wait/total:seconds": { compute: func(_ *statAggregate, out *metricValue) { out.kind = metricKindFloat64 - out.scalar = float64bits(nsToSec(sched.totalMutexWaitTime.Load())) + out.scalar = float64bits(nsToSec(totalMutexWaitTimeNanos())) }, }, } diff --git a/src/runtime/metrics_test.go b/src/runtime/metrics_test.go index acaa5ca375..d28a589adc 100644 --- a/src/runtime/metrics_test.go +++ b/src/runtime/metrics_test.go @@ -6,15 +6,21 @@ package runtime_test import ( "bytes" + "fmt" + "internal/goexperiment" + "internal/profile" "os" "reflect" "runtime" "runtime/debug" "runtime/metrics" + "runtime/pprof" "runtime/trace" + "slices" "sort" "strings" "sync" + "sync/atomic" "testing" "time" "unsafe" @@ -939,3 +945,319 @@ func TestSchedPauseMetrics(t *testing.T) { }) } } + +func TestRuntimeLockMetricsAndProfile(t *testing.T) { + old := runtime.SetMutexProfileFraction(0) // enabled during sub-tests + defer runtime.SetMutexProfileFraction(old) + if old != 0 { + t.Fatalf("need MutexProfileRate 0, got %d", old) + } + + { + before := os.Getenv("GODEBUG") + for _, s := range strings.Split(before, ",") { + if strings.HasPrefix(s, "profileruntimelocks=") { + t.Logf("GODEBUG includes explicit setting %q", s) + } + } + defer func() { os.Setenv("GODEBUG", before) }() + os.Setenv("GODEBUG", fmt.Sprintf("%s,profileruntimelocks=1", before)) + } + + t.Logf("NumCPU %d", runtime.NumCPU()) + t.Logf("GOMAXPROCS %d", runtime.GOMAXPROCS(0)) + if minCPU := 2; runtime.NumCPU() < minCPU { + t.Skipf("creating and observing contention on runtime-internal locks requires NumCPU >= %d", minCPU) + } + + loadProfile := func(t *testing.T) *profile.Profile { + var w bytes.Buffer + pprof.Lookup("mutex").WriteTo(&w, 0) + p, err := profile.Parse(&w) + if err != nil { + t.Fatalf("failed to parse profile: %v", err) + } + if err := p.CheckValid(); err != nil { + t.Fatalf("invalid profile: %v", err) + } + return p + } + + measureDelta := func(t *testing.T, fn func()) (metricGrowth, profileGrowth float64, p *profile.Profile) { + beforeProfile := loadProfile(t) + beforeMetrics := []metrics.Sample{{Name: "/sync/mutex/wait/total:seconds"}} + metrics.Read(beforeMetrics) + + fn() + + afterProfile := loadProfile(t) + afterMetrics := []metrics.Sample{{Name: "/sync/mutex/wait/total:seconds"}} + metrics.Read(afterMetrics) + + sumSamples := func(p *profile.Profile, i int) int64 { + var sum int64 + for _, s := range p.Sample { + sum += s.Value[i] + } + return sum + } + + metricGrowth = afterMetrics[0].Value.Float64() - beforeMetrics[0].Value.Float64() + profileGrowth = float64(sumSamples(afterProfile, 1)-sumSamples(beforeProfile, 1)) * time.Nanosecond.Seconds() + + // The internal/profile package does not support compaction; this delta + // profile will include separate positive and negative entries. + p = afterProfile.Copy() + if len(beforeProfile.Sample) > 0 { + err := p.Merge(beforeProfile, -1) + if err != nil { + t.Fatalf("Merge profiles: %v", err) + } + } + + return metricGrowth, profileGrowth, p + } + + testcase := func(strictTiming bool, stk []string, workers int, fn func() bool) func(t *testing.T) (metricGrowth, profileGrowth float64, n, value int64) { + return func(t *testing.T) (metricGrowth, profileGrowth float64, n, value int64) { + metricGrowth, profileGrowth, p := measureDelta(t, func() { + var started, stopped sync.WaitGroup + started.Add(workers) + stopped.Add(workers) + for i := 0; i < workers; i++ { + w := &contentionWorker{ + before: func() { + started.Done() + started.Wait() + }, + after: func() { + stopped.Done() + }, + fn: fn, + } + go w.run() + } + stopped.Wait() + }) + + if profileGrowth == 0 { + t.Errorf("no increase in mutex profile") + } + if metricGrowth == 0 && strictTiming { + // If the critical section is very short, systems with low timer + // resolution may be unable to measure it via nanotime. + t.Errorf("no increase in /sync/mutex/wait/total:seconds metric") + } + // This comparison is possible because the time measurements in support of + // runtime/pprof and runtime/metrics for runtime-internal locks are so close + // together. It doesn't work as well for user-space contention, where the + // involved goroutines are not _Grunnable the whole time and so need to pass + // through the scheduler. + t.Logf("lock contention growth in runtime/pprof's view (%fs)", profileGrowth) + t.Logf("lock contention growth in runtime/metrics' view (%fs)", metricGrowth) + + if goexperiment.StaticLockRanking { + if !slices.ContainsFunc(stk, func(s string) bool { + return s == "runtime.systemstack" || s == "runtime.mcall" || s == "runtime.mstart" + }) { + // stk is a call stack that is still on the user stack when + // it calls runtime.unlock. Add the extra function that + // we'll see, when the static lock ranking implementation of + // runtime.unlockWithRank switches to the system stack. + stk = append([]string{"runtime.unlockWithRank"}, stk...) + } + } + + var stks [][]string + for _, s := range p.Sample { + var have []string + for _, loc := range s.Location { + for _, line := range loc.Line { + have = append(have, line.Function.Name) + } + } + stks = append(stks, have) + if slices.Equal(have, stk) { + n += s.Value[0] + value += s.Value[1] + } + } + t.Logf("stack %v has samples totaling n=%d value=%d", stk, n, value) + if n == 0 && value == 0 { + t.Logf("profile:\n%s", p) + for _, have := range stks { + t.Logf("have stack %v", have) + } + t.Errorf("want stack %v", stk) + } + + return metricGrowth, profileGrowth, n, value + } + } + + name := t.Name() + + t.Run("runtime.lock", func(t *testing.T) { + mus := make([]runtime.Mutex, 100) + var needContention atomic.Int64 + delay := 100 * time.Microsecond // large relative to system noise, for comparison between clocks + delayMicros := delay.Microseconds() + + // The goroutine that acquires the lock will only proceed when it + // detects that its partner is contended for the lock. That will lead to + // live-lock if anything (such as a STW) prevents the partner goroutine + // from running. Allowing the contention workers to pause and restart + // (to allow a STW to proceed) makes it harder to confirm that we're + // counting the correct number of contention events, since some locks + // will end up contended twice. Instead, disable the GC. + defer debug.SetGCPercent(debug.SetGCPercent(-1)) + + const workers = 2 + if runtime.GOMAXPROCS(0) < workers { + t.Skipf("contention on runtime-internal locks requires GOMAXPROCS >= %d", workers) + } + + fn := func() bool { + n := int(needContention.Load()) + if n < 0 { + return false + } + mu := &mus[n] + + runtime.Lock(mu) + for int(needContention.Load()) == n { + if runtime.MutexContended(mu) { + // make them wait a little while + for start := runtime.Nanotime(); (runtime.Nanotime()-start)/1000 < delayMicros; { + runtime.Usleep(uint32(delayMicros)) + } + break + } + } + runtime.Unlock(mu) + needContention.Store(int64(n - 1)) + + return true + } + + stk := []string{ + "runtime.unlock", + "runtime_test." + name + ".func5.1", + "runtime_test.(*contentionWorker).run", + } + + t.Run("sample-1", func(t *testing.T) { + old := runtime.SetMutexProfileFraction(1) + defer runtime.SetMutexProfileFraction(old) + + needContention.Store(int64(len(mus) - 1)) + metricGrowth, profileGrowth, n, _ := testcase(true, stk, workers, fn)(t) + + if have, want := metricGrowth, delay.Seconds()*float64(len(mus)); have < want { + // The test imposes a delay with usleep, verified with calls to + // nanotime. Compare against the runtime/metrics package's view + // (based on nanotime) rather than runtime/pprof's view (based + // on cputicks). + t.Errorf("runtime/metrics reported less than the known minimum contention duration (%fs < %fs)", have, want) + } + if have, want := n, int64(len(mus)); have != want { + t.Errorf("mutex profile reported contention count different from the known true count (%d != %d)", have, want) + } + + const slop = 1.5 // account for nanotime vs cputicks + if profileGrowth > slop*metricGrowth || metricGrowth > slop*profileGrowth { + t.Errorf("views differ by more than %fx", slop) + } + }) + + t.Run("sample-2", func(t *testing.T) { + old := runtime.SetMutexProfileFraction(2) + defer runtime.SetMutexProfileFraction(old) + + needContention.Store(int64(len(mus) - 1)) + metricGrowth, profileGrowth, n, _ := testcase(true, stk, workers, fn)(t) + + // With 100 trials and profile fraction of 2, we expect to capture + // 50 samples. Allow the test to pass if we get at least 20 samples; + // the CDF of the binomial distribution says there's less than a + // 1e-9 chance of that, which is an acceptably low flakiness rate. + const samplingSlop = 2.5 + + if have, want := metricGrowth, delay.Seconds()*float64(len(mus)); samplingSlop*have < want { + // The test imposes a delay with usleep, verified with calls to + // nanotime. Compare against the runtime/metrics package's view + // (based on nanotime) rather than runtime/pprof's view (based + // on cputicks). + t.Errorf("runtime/metrics reported less than the known minimum contention duration (%f * %fs < %fs)", samplingSlop, have, want) + } + if have, want := n, int64(len(mus)); float64(have) > float64(want)*samplingSlop || float64(want) > float64(have)*samplingSlop { + t.Errorf("mutex profile reported contention count too different from the expected count (%d far from %d)", have, want) + } + + const timerSlop = 1.5 * samplingSlop // account for nanotime vs cputicks, plus the two views' independent sampling + if profileGrowth > timerSlop*metricGrowth || metricGrowth > timerSlop*profileGrowth { + t.Errorf("views differ by more than %fx", timerSlop) + } + }) + }) + + t.Run("runtime.semrelease", func(t *testing.T) { + old := runtime.SetMutexProfileFraction(1) + defer runtime.SetMutexProfileFraction(old) + + const workers = 3 + if runtime.GOMAXPROCS(0) < workers { + t.Skipf("creating and observing contention on runtime-internal semaphores requires GOMAXPROCS >= %d", workers) + } + + var sem uint32 = 1 + var tries atomic.Int32 + tries.Store(10_000_000) // prefer controlled failure to timeout + var sawContention atomic.Int32 + var need int32 = 1 + fn := func() bool { + if sawContention.Load() >= need { + return false + } + if tries.Add(-1) < 0 { + return false + } + + runtime.Semacquire(&sem) + runtime.Semrelease1(&sem, false, 0) + if runtime.MutexContended(runtime.SemRootLock(&sem)) { + sawContention.Add(1) + } + return true + } + + stk := []string{ + "runtime.unlock", + "runtime.semrelease1", + "runtime_test.TestRuntimeLockMetricsAndProfile.func6.1", + "runtime_test.(*contentionWorker).run", + } + + // Verify that we get call stack we expect, with anything more than zero + // cycles / zero samples. The duration of each contention event is too + // small relative to the expected overhead for us to verify its value + // more directly. Leave that to the explicit lock/unlock test. + + testcase(false, stk, workers, fn)(t) + }) +} + +// contentionWorker provides cleaner call stacks for lock contention profile tests +type contentionWorker struct { + before func() + fn func() bool + after func() +} + +func (w *contentionWorker) run() { + defer w.after() + w.before() + + for w.fn() { + } +} diff --git a/src/runtime/mprof.go b/src/runtime/mprof.go index af461eef1a..b1930b3020 100644 --- a/src/runtime/mprof.go +++ b/src/runtime/mprof.go @@ -234,6 +234,10 @@ func newBucket(typ bucketType, nstk int) *bucket { // stk returns the slice in b holding the stack. func (b *bucket) stk() []uintptr { stk := (*[maxStack]uintptr)(add(unsafe.Pointer(b), unsafe.Sizeof(*b))) + if b.nstk > maxStack { + // prove that slicing works; otherwise a failure requires a P + throw("bad profile stack count") + } return stk[:b.nstk:b.nstk] } @@ -509,7 +513,237 @@ func saveblockevent(cycles, rate int64, skip int, which bucketType) { } else { nstk = gcallers(gp.m.curg, skip, stk[:]) } - b := stkbucket(which, 0, stk[:nstk], true) + + saveBlockEventStack(cycles, rate, stk[:nstk], which) +} + +// lockTimer assists with profiling contention on runtime-internal locks. +// +// There are several steps between the time that an M experiences contention and +// when that contention may be added to the profile. This comes from our +// constraints: We need to keep the critical section of each lock small, +// especially when those locks are contended. The reporting code cannot acquire +// new locks until the M has released all other locks, which means no memory +// allocations and encourages use of (temporary) M-local storage. +// +// The M will have space for storing one call stack that caused contention, and +// for the magnitude of that contention. It will also have space to store the +// magnitude of additional contention the M caused, since it only has space to +// remember one call stack and might encounter several contention events before +// it releases all of its locks and is thus able to transfer the local buffer +// into the profile. +// +// The M will collect the call stack when it unlocks the contended lock. That +// minimizes the impact on the critical section of the contended lock, and +// matches the mutex profile's behavior for contention in sync.Mutex: measured +// at the Unlock method. +// +// The profile for contention on sync.Mutex blames the caller of Unlock for the +// amount of contention experienced by the callers of Lock which had to wait. +// When there are several critical sections, this allows identifying which of +// them is responsible. +// +// Matching that behavior for runtime-internal locks will require identifying +// which Ms are blocked on the mutex. The semaphore-based implementation is +// ready to allow that, but the futex-based implementation will require a bit +// more work. Until then, we report contention on runtime-internal locks with a +// call stack taken from the unlock call (like the rest of the user-space +// "mutex" profile), but assign it a duration value based on how long the +// previous lock call took (like the user-space "block" profile). +// +// Thus, reporting the call stacks of runtime-internal lock contention is +// guarded by GODEBUG for now. Set GODEBUG=profileruntimelocks=1 to enable. +// +// TODO(rhysh): plumb through the delay duration, remove GODEBUG, update comment +// +// The M will track this by storing a pointer to the lock; lock/unlock pairs for +// runtime-internal locks are always on the same M. +// +// Together, that demands several steps for recording contention. First, when +// finally acquiring a contended lock, the M decides whether it should plan to +// profile that event by storing a pointer to the lock in its "to be profiled +// upon unlock" field. If that field is already set, it uses the relative +// magnitudes to weight a random choice between itself and the other lock, with +// the loser's time being added to the "additional contention" field. Otherwise +// if the M's call stack buffer is occupied, it does the comparison against that +// sample's magnitude. +// +// Second, having unlocked a mutex the M checks to see if it should capture the +// call stack into its local buffer. Finally, when the M unlocks its last mutex, +// it transfers the local buffer into the profile. As part of that step, it also +// transfers any "additional contention" time to the profile. Any lock +// contention that it experiences while adding samples to the profile will be +// recorded later as "additional contention" and not include a call stack, to +// avoid an echo. +type lockTimer struct { + lock *mutex + timeRate int64 + timeStart int64 + tickStart int64 +} + +func (lt *lockTimer) begin() { + rate := int64(atomic.Load64(&mutexprofilerate)) + + lt.timeRate = gTrackingPeriod + if rate != 0 && rate < lt.timeRate { + lt.timeRate = rate + } + if int64(fastrand())%lt.timeRate == 0 { + lt.timeStart = nanotime() + } + + if rate > 0 && int64(fastrand())%rate == 0 { + lt.tickStart = cputicks() + } +} + +func (lt *lockTimer) end() { + gp := getg() + + if lt.timeStart != 0 { + nowTime := nanotime() + gp.m.mLockProfile.waitTime.Add((nowTime - lt.timeStart) * lt.timeRate) + } + + if lt.tickStart != 0 { + nowTick := cputicks() + gp.m.mLockProfile.recordLock(nowTick-lt.tickStart, lt.lock) + } +} + +type mLockProfile struct { + waitTime atomic.Int64 // total nanoseconds spent waiting in runtime.lockWithRank + stack [maxStack]uintptr // stack that experienced contention in runtime.lockWithRank + pending uintptr // *mutex that experienced contention (to be traceback-ed) + cycles int64 // cycles attributable to "pending" (if set), otherwise to "stack" + cyclesLost int64 // contention for which we weren't able to record a call stack + disabled bool // attribute all time to "lost" +} + +func (prof *mLockProfile) recordLock(cycles int64, l *mutex) { + if cycles <= 0 { + return + } + + if prof.disabled { + // We're experiencing contention while attempting to report contention. + // Make a note of its magnitude, but don't allow it to be the sole cause + // of another contention report. + prof.cyclesLost += cycles + return + } + + if uintptr(unsafe.Pointer(l)) == prof.pending { + // Optimization: we'd already planned to profile this same lock (though + // possibly from a different unlock site). + prof.cycles += cycles + return + } + + if prev := prof.cycles; prev > 0 { + // We can only store one call stack for runtime-internal lock contention + // on this M, and we've already got one. Decide which should stay, and + // add the other to the report for runtime._LostContendedLock. + prevScore := fastrand64() % uint64(prev) + thisScore := fastrand64() % uint64(cycles) + if prevScore > thisScore { + prof.cyclesLost += cycles + return + } else { + prof.cyclesLost += prev + } + } + // Saving the *mutex as a uintptr is safe because: + // - lockrank_on.go does this too, which gives it regular exercise + // - the lock would only move if it's stack allocated, which means it + // cannot experience multi-M contention + prof.pending = uintptr(unsafe.Pointer(l)) + prof.cycles = cycles +} + +// From unlock2, we might not be holding a p in this code. +// +//go:nowritebarrierrec +func (prof *mLockProfile) recordUnlock(l *mutex) { + if uintptr(unsafe.Pointer(l)) == prof.pending { + prof.captureStack() + } + if gp := getg(); gp.m.locks == 1 && gp.m.mLockProfile.cycles != 0 { + prof.store() + } +} + +func (prof *mLockProfile) captureStack() { + skip := 3 // runtime.(*mLockProfile).recordUnlock runtime.unlock2 runtime.unlockWithRank + if staticLockRanking { + // When static lock ranking is enabled, we'll always be on the system + // stack at this point. There will be a runtime.unlockWithRank.func1 + // frame, and if the call to runtime.unlock took place on a user stack + // then there'll also be a runtime.systemstack frame. To keep stack + // traces somewhat consistent whether or not static lock ranking is + // enabled, we'd like to skip those. But it's hard to tell how long + // we've been on the system stack so accept an extra frame in that case, + // with a leaf of "runtime.unlockWithRank runtime.unlock" instead of + // "runtime.unlock". + skip += 1 // runtime.unlockWithRank.func1 + } + prof.pending = 0 + + if debug.profileruntimelocks.Load() == 0 { + prof.stack[0] = abi.FuncPCABIInternal(_LostContendedLock) + sys.PCQuantum + prof.stack[1] = 0 + return + } + + var nstk int + gp := getg() + sp := getcallersp() + pc := getcallerpc() + systemstack(func() { + var u unwinder + u.initAt(pc, sp, 0, gp, unwindSilentErrors|unwindJumpStack) + nstk = tracebackPCs(&u, skip, prof.stack[:]) + }) + if nstk < len(prof.stack) { + prof.stack[nstk] = 0 + } +} + +func (prof *mLockProfile) store() { + // Report any contention we experience within this function as "lost"; it's + // important that the act of reporting a contention event not lead to a + // reportable contention event. This also means we can use prof.stack + // without copying, since it won't change during this function. + mp := acquirem() + prof.disabled = true + + nstk := maxStack + for i := 0; i < nstk; i++ { + if pc := prof.stack[i]; pc == 0 { + nstk = i + break + } + } + + cycles, lost := prof.cycles, prof.cyclesLost + prof.cycles, prof.cyclesLost = 0, 0 + + rate := int64(atomic.Load64(&mutexprofilerate)) + saveBlockEventStack(cycles, rate, prof.stack[:nstk], mutexProfile) + if lost > 0 { + lostStk := [...]uintptr{ + abi.FuncPCABIInternal(_LostContendedLock) + sys.PCQuantum, + } + saveBlockEventStack(lost, rate, lostStk[:], mutexProfile) + } + + prof.disabled = false + releasem(mp) +} + +func saveBlockEventStack(cycles, rate int64, stk []uintptr, which bucketType) { + b := stkbucket(which, 0, stk, true) bp := b.bp() lock(&profBlockLock) diff --git a/src/runtime/proc.go b/src/runtime/proc.go index edf692fd1a..fd05687301 100644 --- a/src/runtime/proc.go +++ b/src/runtime/proc.go @@ -922,7 +922,7 @@ func mcommoninit(mp *m, id int64) { // when it is just in a register or thread-local storage. mp.alllink = allm - // NumCgoCall() iterates over allm w/o schedlock, + // NumCgoCall() and others iterate over allm w/o schedlock, // so we need to publish it safely. atomicstorep(unsafe.Pointer(&allm), unsafe.Pointer(mp)) unlock(&sched.lock) @@ -1855,6 +1855,7 @@ found: unlock(&sched.lock) atomic.Xadd64(&ncgocall, int64(mp.ncgocall)) + sched.totalRuntimeLockWaitTime.Add(mp.mLockProfile.waitTime.Load()) // Release the P. handoffp(releasep()) @@ -5273,6 +5274,7 @@ func _ExternalCode() { _ExternalCode() } func _LostExternalCode() { _LostExternalCode() } func _GC() { _GC() } func _LostSIGPROFDuringAtomic64() { _LostSIGPROFDuringAtomic64() } +func _LostContendedLock() { _LostContendedLock() } func _VDSO() { _VDSO() } // Called if we receive a SIGPROF signal. diff --git a/src/runtime/runtime1.go b/src/runtime/runtime1.go index 489dcdd79c..877d94eef2 100644 --- a/src/runtime/runtime1.go +++ b/src/runtime/runtime1.go @@ -307,26 +307,27 @@ type dbgVar struct { // existing int var for that value, which may // already have an initial value. var debug struct { - cgocheck int32 - clobberfree int32 - dontfreezetheworld int32 - efence int32 - gccheckmark int32 - gcpacertrace int32 - gcshrinkstackoff int32 - gcstoptheworld int32 - gctrace int32 - invalidptr int32 - madvdontneed int32 // for Linux; issue 28466 - scavtrace int32 - scheddetail int32 - schedtrace int32 - tracebackancestors int32 - asyncpreemptoff int32 - harddecommit int32 - adaptivestackstart int32 - tracefpunwindoff int32 - traceadvanceperiod int32 + cgocheck int32 + clobberfree int32 + dontfreezetheworld int32 + efence int32 + gccheckmark int32 + gcpacertrace int32 + gcshrinkstackoff int32 + gcstoptheworld int32 + gctrace int32 + invalidptr int32 + madvdontneed int32 // for Linux; issue 28466 + profileruntimelocks atomic.Int32 + scavtrace int32 + scheddetail int32 + schedtrace int32 + tracebackancestors int32 + asyncpreemptoff int32 + harddecommit int32 + adaptivestackstart int32 + tracefpunwindoff int32 + traceadvanceperiod int32 // debug.malloc is used as a combined debug check // in the malloc function and should be set @@ -352,6 +353,7 @@ var dbgvars = []*dbgVar{ {name: "gctrace", value: &debug.gctrace}, {name: "invalidptr", value: &debug.invalidptr}, {name: "madvdontneed", value: &debug.madvdontneed}, + {name: "profileruntimelocks", atomic: &debug.profileruntimelocks}, {name: "sbrk", value: &debug.sbrk}, {name: "scavtrace", value: &debug.scavtrace}, {name: "scheddetail", value: &debug.scheddetail}, diff --git a/src/runtime/runtime2.go b/src/runtime/runtime2.go index fb283a3ab4..6d40c7c466 100644 --- a/src/runtime/runtime2.go +++ b/src/runtime/runtime2.go @@ -593,6 +593,8 @@ type m struct { lockedInt uint32 // tracking for internal lockOSThread nextwaitm muintptr // next m waiting for lock + mLockProfile mLockProfile // fields relating to runtime.lock contention + // wait* are used to carry arguments from gopark into park_m, because // there's no stack to put them on. That is their sole purpose. waitunlockf func(*g, unsafe.Pointer) bool @@ -900,6 +902,12 @@ type schedt struct { // stwTotalTimeOther covers the others. stwTotalTimeGC timeHistogram stwTotalTimeOther timeHistogram + + // totalRuntimeLockWaitTime (plus the value of lockWaitTime on each M in + // allm) is the sum of time goroutines have spent in _Grunnable and with an + // M, but waiting for locks within the runtime. This field stores the value + // for Ms that have exited. + totalRuntimeLockWaitTime atomic.Int64 } // Values for the flags field of a sigTabT. From 351d8520a6e55cbadc1714ad62405699ee172c5e Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Tue, 21 Nov 2023 17:33:20 +0000 Subject: [PATCH 058/313] internal/trace: use the correct stack for goroutine naming in v2 traces Currently goroutine names are determined (for v2 traces) by internal/tracev/2.Event.Stack, but this is wrong in general. For example, if we end up seeing a transition from GoNotExist->GoRunnable (goroutine creation) then we're taking the stack from the creator, not the created goroutine (which is what we're naming at that point). Use the StateTransition.Stack instead. This is always the correct one to use because we're always naming the goroutine that the state transition is for. Change-Id: I3fc7c8e4f85dfee3802d666c0c091b6953c7d6cf Reviewed-on: https://go-review.googlesource.com/c/go/+/544317 Auto-Submit: Michael Knyszek LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Pratt --- src/internal/trace/goroutinesv2.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/internal/trace/goroutinesv2.go b/src/internal/trace/goroutinesv2.go index 6b13f20425..7dbe0c5905 100644 --- a/src/internal/trace/goroutinesv2.go +++ b/src/internal/trace/goroutinesv2.go @@ -318,10 +318,12 @@ func (b *goroutineStatsBuilder) event(ev tracev2.Event) { } } - // The goroutine hasn't been identified yet. Take any stack we - // can get and identify it by the bottom-most frame of that stack. + // The goroutine hasn't been identified yet. Take the transition stack + // and identify the goroutine by the bottom-most frame of that stack. + // This bottom-most frame will be identical for all transitions on this + // goroutine, because it represents its immutable start point. if g.PC == 0 { - stk := ev.Stack() + stk := st.Stack if stk != tracev2.NoStack { var frame tracev2.StackFrame var ok bool From 48a6362dff840cfe75d5f1a674157af1f5d9ee85 Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Sun, 12 Nov 2023 21:48:31 +0000 Subject: [PATCH 059/313] cmd/trace/v2: add goroutine analysis pages This is a complete fork and most of a rewrite of the goroutine analysis pages for v2 traces. It fixes an issue with the old page where GC time didn't really make any sense, generalizes the page and breaks things down further, and adds clarifying text. This change also modifies the SummarizeGoroutines API to not stream the trace. This is unfortunate, but we're already reading and holding the entire trace in memory for the trace viewer. We can revisit this decision in the future. Also, we want to do this now because the GoroutineSummary holds on to pointers to events, and these events will be used by the user region and user task analyses. While tracev2 events are values and they should be equivalent no matter how many times we parse a trace, this lets us reference the event in the slice directly. For #60773. For #63960. Fixes #62443. Change-Id: I1c5ab68141869378843f4f2826686038e4533090 Reviewed-on: https://go-review.googlesource.com/c/go/+/541257 Reviewed-by: Michael Pratt Auto-Submit: Michael Knyszek LUCI-TryBot-Result: Go LUCI --- src/cmd/trace/v2/goroutines.go | 435 ++++++++++++++++++++++++ src/cmd/trace/v2/main.go | 11 +- src/internal/trace/goroutinesv2.go | 70 ++-- src/internal/trace/goroutinesv2_test.go | 18 +- src/internal/trace/traceviewer/http.go | 29 +- 5 files changed, 532 insertions(+), 31 deletions(-) create mode 100644 src/cmd/trace/v2/goroutines.go diff --git a/src/cmd/trace/v2/goroutines.go b/src/cmd/trace/v2/goroutines.go new file mode 100644 index 0000000000..8fbfc9c22d --- /dev/null +++ b/src/cmd/trace/v2/goroutines.go @@ -0,0 +1,435 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Goroutine-related profiles. + +package trace + +import ( + "cmp" + "fmt" + "html/template" + "internal/trace" + "internal/trace/traceviewer" + tracev2 "internal/trace/v2" + "log" + "net/http" + "slices" + "sort" + "strconv" + "strings" + "time" +) + +// GoroutinesHandlerFunc returns a HandlerFunc that serves list of goroutine groups. +func GoroutinesHandlerFunc(summaries map[tracev2.GoID]*trace.GoroutineSummary) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + // goroutineGroup describes a group of goroutines grouped by start PC. + type goroutineGroup struct { + ID uint64 // Unique identifier (PC). + Name string // Start function. + N int // Total number of goroutines in this group. + ExecTime time.Duration // Total execution time of all goroutines in this group. + } + // Accumulate groups by PC. + groupsByPC := make(map[uint64]goroutineGroup) + for _, summary := range summaries { + group := groupsByPC[summary.PC] + group.ID = summary.PC + group.Name = summary.Name + group.N++ + group.ExecTime += summary.ExecTime + groupsByPC[summary.PC] = group + } + var groups []goroutineGroup + for pc, group := range groupsByPC { + group.ID = pc + // If goroutine didn't run during the trace (no sampled PC), + // the v.ID and v.Name will be zero value. + if group.ID == 0 && group.Name == "" { + group.Name = "(Inactive, no stack trace sampled)" + } + groups = append(groups, group) + } + slices.SortFunc(groups, func(a, b goroutineGroup) int { + return cmp.Compare(b.ExecTime, a.ExecTime) + }) + w.Header().Set("Content-Type", "text/html;charset=utf-8") + if err := templGoroutines.Execute(w, groups); err != nil { + log.Printf("failed to execute template: %v", err) + return + } + } +} + +var templGoroutines = template.Must(template.New("").Parse(` + + + +

Goroutines

+Below is a table of all goroutines in the trace grouped by start location and sorted by the total execution time of the group.
+
+Click a start location to view more details about that group.
+
+ + + + + + +{{range $}} + + + + + +{{end}} +
Start locationCountTotal execution time
{{.Name}}{{.N}}{{.ExecTime}}
+ + +`)) + +// GoroutineHandler creates a handler that serves information about +// goroutines in a particular group. +func GoroutineHandler(summaries map[tracev2.GoID]*trace.GoroutineSummary) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + pc, err := strconv.ParseUint(r.FormValue("id"), 10, 64) + if err != nil { + http.Error(w, fmt.Sprintf("failed to parse id parameter '%v': %v", r.FormValue("id"), err), http.StatusInternalServerError) + return + } + + type goroutine struct { + *trace.GoroutineSummary + NonOverlappingStats map[string]time.Duration + HasRangeTime bool + } + + // Collect all the goroutines in the group. + var ( + goroutines []goroutine + name string + totalExecTime, execTime time.Duration + maxTotalTime time.Duration + ) + validNonOverlappingStats := make(map[string]struct{}) + validRangeStats := make(map[string]struct{}) + for _, summary := range summaries { + totalExecTime += summary.ExecTime + + if summary.PC != pc { + continue + } + nonOverlappingStats := summary.NonOverlappingStats() + for name := range nonOverlappingStats { + validNonOverlappingStats[name] = struct{}{} + } + var totalRangeTime time.Duration + for name, dt := range summary.RangeTime { + validRangeStats[name] = struct{}{} + totalRangeTime += dt + } + goroutines = append(goroutines, goroutine{ + GoroutineSummary: summary, + NonOverlappingStats: nonOverlappingStats, + HasRangeTime: totalRangeTime != 0, + }) + name = summary.Name + execTime += summary.ExecTime + if maxTotalTime < summary.TotalTime { + maxTotalTime = summary.TotalTime + } + } + + // Compute the percent of total execution time these goroutines represent. + execTimePercent := "" + if totalExecTime > 0 { + execTimePercent = fmt.Sprintf("%.2f%%", float64(execTime)/float64(totalExecTime)*100) + } + + // Sort. + sortBy := r.FormValue("sortby") + if _, ok := validNonOverlappingStats[sortBy]; ok { + slices.SortFunc(goroutines, func(a, b goroutine) int { + return cmp.Compare(b.NonOverlappingStats[sortBy], a.NonOverlappingStats[sortBy]) + }) + } else { + // Sort by total time by default. + slices.SortFunc(goroutines, func(a, b goroutine) int { + return cmp.Compare(b.TotalTime, a.TotalTime) + }) + } + + // Write down all the non-overlapping stats and sort them. + allNonOverlappingStats := make([]string, 0, len(validNonOverlappingStats)) + for name := range validNonOverlappingStats { + allNonOverlappingStats = append(allNonOverlappingStats, name) + } + slices.SortFunc(allNonOverlappingStats, func(a, b string) int { + if a == b { + return 0 + } + if a == "Execution time" { + return -1 + } + if b == "Execution time" { + return 1 + } + return cmp.Compare(a, b) + }) + + // Write down all the range stats and sort them. + allRangeStats := make([]string, 0, len(validRangeStats)) + for name := range validRangeStats { + allRangeStats = append(allRangeStats, name) + } + sort.Strings(allRangeStats) + + err = templGoroutine.Execute(w, struct { + Name string + PC uint64 + N int + ExecTimePercent string + MaxTotal time.Duration + Goroutines []goroutine + NonOverlappingStats []string + RangeStats []string + }{ + Name: name, + PC: pc, + N: len(goroutines), + ExecTimePercent: execTimePercent, + MaxTotal: maxTotalTime, + Goroutines: goroutines, + NonOverlappingStats: allNonOverlappingStats, + RangeStats: allRangeStats, + }) + if err != nil { + http.Error(w, fmt.Sprintf("failed to execute template: %v", err), http.StatusInternalServerError) + return + } + } +} + +func stat2Color(statName string) string { + color := "#636363" + if strings.HasPrefix(statName, "Block time") { + color = "#d01c8b" + } + switch statName { + case "Sched wait time": + color = "#2c7bb6" + case "Syscall execution time": + color = "#7b3294" + case "Execution time": + color = "#d7191c" + } + return color +} + +var templGoroutine = template.Must(template.New("").Funcs(template.FuncMap{ + "percent": func(dividend, divisor time.Duration) template.HTML { + if divisor == 0 { + return "" + } + return template.HTML(fmt.Sprintf("(%.1f%%)", float64(dividend)/float64(divisor)*100)) + }, + "headerStyle": func(statName string) template.HTMLAttr { + return template.HTMLAttr(fmt.Sprintf("style=\"background-color: %s;\"", stat2Color(statName))) + }, + "barStyle": func(statName string, dividend, divisor time.Duration) template.HTMLAttr { + width := "0" + if divisor != 0 { + width = fmt.Sprintf("%.2f%%", float64(dividend)/float64(divisor)*100) + } + return template.HTMLAttr(fmt.Sprintf("style=\"width: %s; background-color: %s;\"", width, stat2Color(statName))) + }, +}).Parse(` + +Goroutine {{.Name}} + + + + +

Goroutine breakdown

+ +Table of contents + + +

Summary

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Goroutine start location:{{.Name}}
Count:{{.N}}
Execution Time:{{.ExecTimePercent}} of total program execution time
Network wait profile: graph (download)
Sync block profile: graph (download)
Syscall block profile: graph (download)
Scheduler wait profile: graph (download)
+ +

Breakdown

+ +The table below breaks down where each goroutine is spent its time during the +traced period. +All of the columns except total time are non-overlapping. +
+
+ + + + + + +{{range $.NonOverlappingStats}} + +{{end}} + +{{range .Goroutines}} + + + + + {{$Goroutine := .}} + {{range $.NonOverlappingStats}} + {{$Time := index $Goroutine.NonOverlappingStats .}} + + {{end}} + +{{end}} +
Goroutine Total {{.}}
{{.ID}} {{ .TotalTime.String }} +
+ {{$Goroutine := .}} + {{range $.NonOverlappingStats}} + {{$Time := index $Goroutine.NonOverlappingStats .}} + {{if $Time}} +   + {{end}} + {{end}} +
+
{{$Time.String}}
+ +

Special ranges

+ +The table below describes how much of the traced period each goroutine spent in +certain special time ranges. +If a goroutine has spent no time in any special time ranges, it is excluded from +the table. +For example, how much time it spent helping the GC. Note that these times do +overlap with the times from the first table. +In general the goroutine may not be executing in these special time ranges. +For example, it may have blocked while trying to help the GC. +This must be taken into account when interpreting the data. +
+
+ + + + + +{{range $.RangeStats}} + +{{end}} + +{{range .Goroutines}} + {{if .HasRangeTime}} + + + + {{$Goroutine := .}} + {{range $.RangeStats}} + {{$Time := index $Goroutine.RangeTime .}} + + {{end}} + + {{end}} +{{end}} +
Goroutine Total {{.}}
{{.ID}} {{ .TotalTime.String }} {{$Time.String}}
+`)) diff --git a/src/cmd/trace/v2/main.go b/src/cmd/trace/v2/main.go index 93c9d89c20..b355d81ce6 100644 --- a/src/cmd/trace/v2/main.go +++ b/src/cmd/trace/v2/main.go @@ -6,6 +6,7 @@ package trace import ( "fmt" + "internal/trace" "internal/trace/traceviewer" tracev2 "internal/trace/v2" "io" @@ -39,9 +40,9 @@ func Main(traceFile, httpAddr, pprof string, debug int) error { if err != nil { return fmt.Errorf("failed to create server socket: %w", err) } - addr := "http://" + ln.Addr().String() - log.Print("Parsing trace...") + + log.Print("Preparing trace for viewer...") parsed, err := parseTrace(tracef) if err != nil { return err @@ -50,11 +51,13 @@ func Main(traceFile, httpAddr, pprof string, debug int) error { // We might double-close, but that's fine; we ignore the error. tracef.Close() - log.Print("Splitting trace...") + log.Print("Splitting trace for viewer...") ranges, err := splitTrace(parsed) if err != nil { return err } + log.Printf("Analyzing goroutines...") + gSummaries := trace.SummarizeGoroutines(parsed.events) log.Printf("Opening browser. Trace viewer is listening on %s", addr) browser.Open(addr) @@ -64,6 +67,8 @@ func Main(traceFile, httpAddr, pprof string, debug int) error { mux.Handle("/trace", traceviewer.TraceHandler()) mux.Handle("/jsontrace", JSONTraceHandler(parsed)) mux.Handle("/static/", traceviewer.StaticHandler()) + mux.HandleFunc("/goroutines", GoroutinesHandlerFunc(gSummaries)) + mux.HandleFunc("/goroutine", GoroutineHandler(gSummaries)) err = http.Serve(ln, mux) return fmt.Errorf("failed to start http server: %w", err) diff --git a/src/internal/trace/goroutinesv2.go b/src/internal/trace/goroutinesv2.go index 7dbe0c5905..7ed5771cd3 100644 --- a/src/internal/trace/goroutinesv2.go +++ b/src/internal/trace/goroutinesv2.go @@ -58,13 +58,51 @@ type UserRegionSummary struct { // GoroutineExecStats contains statistics about a goroutine's execution // during a period of time. type GoroutineExecStats struct { + // These stats are all non-overlapping. ExecTime time.Duration SchedWaitTime time.Duration BlockTimeByReason map[string]time.Duration SyscallTime time.Duration SyscallBlockTime time.Duration - RangeTime map[string]time.Duration - TotalTime time.Duration + + // TotalTime is the duration of the goroutine's presence in the trace. + // Necessarily overlaps with other stats. + TotalTime time.Duration + + // Total time the goroutine spent in certain ranges; may overlap + // with other stats. + RangeTime map[string]time.Duration +} + +func (s GoroutineExecStats) NonOverlappingStats() map[string]time.Duration { + stats := map[string]time.Duration{ + "Execution time": s.ExecTime, + "Sched wait time": s.SchedWaitTime, + "Syscall execution time": s.SyscallTime, + "Block time (syscall)": s.SyscallBlockTime, + "Unknown time": s.UnknownTime(), + } + for reason, dt := range s.BlockTimeByReason { + stats["Block time ("+reason+")"] += dt + } + // N.B. Don't include RangeTime or TotalTime; they overlap with these other + // stats. + return stats +} + +// UnknownTime returns whatever isn't accounted for in TotalTime. +func (s GoroutineExecStats) UnknownTime() time.Duration { + sum := s.ExecTime + s.SchedWaitTime + s.SyscallTime + + s.SyscallBlockTime + for _, dt := range s.BlockTimeByReason { + sum += dt + } + // N.B. Don't include range time. Ranges overlap with + // other stats, whereas these stats are non-overlapping. + if sum < s.TotalTime { + return s.TotalTime - sum + } + return 0 } // sub returns the stats v-s. @@ -172,7 +210,7 @@ type goroutineSummary struct { } // SummarizeGoroutines generates statistics for all goroutines in the trace. -func SummarizeGoroutines(trace io.Reader) (map[tracev2.GoID]*GoroutineSummary, error) { +func SummarizeGoroutines(events []tracev2.Event) map[tracev2.GoID]*GoroutineSummary { // Create the analysis state. b := goroutineStatsBuilder{ gs: make(map[tracev2.GoID]*GoroutineSummary), @@ -182,21 +220,11 @@ func SummarizeGoroutines(trace io.Reader) (map[tracev2.GoID]*GoroutineSummary, e } // Process the trace. - r, err := tracev2.NewReader(trace) - if err != nil { - return nil, err - } - for { - ev, err := r.ReadEvent() - if err == io.EOF { - break - } - if err != nil { - return nil, err - } + for i := range events { + ev := &events[i] b.event(ev) } - return b.finalize(), nil + return b.finalize() } // goroutineStatsBuilder constructs per-goroutine time statistics for v2 traces. @@ -225,7 +253,7 @@ type rangeP struct { } // event feeds a single event into the stats builder. -func (b *goroutineStatsBuilder) event(ev tracev2.Event) { +func (b *goroutineStatsBuilder) event(ev *tracev2.Event) { if b.syncTs == 0 { b.syncTs = ev.Time() } @@ -280,7 +308,7 @@ func (b *goroutineStatsBuilder) event(ev tracev2.Event) { regions := creatorG.activeRegions s := regions[len(regions)-1] if s.TaskID != tracev2.NoTask { - g.activeRegions = []*UserRegionSummary{{TaskID: s.TaskID, Start: &ev}} + g.activeRegions = []*UserRegionSummary{{TaskID: s.TaskID, Start: ev}} } } b.gs[g.ID] = g @@ -358,7 +386,7 @@ func (b *goroutineStatsBuilder) event(ev tracev2.Event) { // "Forever" is like goroutine death. fallthrough case tracev2.GoNotExist: - g.finalize(ev.Time(), &ev) + g.finalize(ev.Time(), ev) case tracev2.GoSyscall: b.syscallingP[ev.Proc()] = id b.syscallingG[id] = ev.Proc() @@ -445,7 +473,7 @@ func (b *goroutineStatsBuilder) event(ev tracev2.Event) { g.activeRegions = append(g.activeRegions, &UserRegionSummary{ Name: r.Type, TaskID: r.Task, - Start: &ev, + Start: ev, GoroutineExecStats: g.snapshotStat(ev.Time()), }) case tracev2.EventRegionEnd: @@ -463,7 +491,7 @@ func (b *goroutineStatsBuilder) event(ev tracev2.Event) { sd = &UserRegionSummary{Name: r.Type, TaskID: r.Task} } sd.GoroutineExecStats = g.snapshotStat(ev.Time()).sub(sd.GoroutineExecStats) - sd.End = &ev + sd.End = ev g.Regions = append(g.Regions, sd) } } diff --git a/src/internal/trace/goroutinesv2_test.go b/src/internal/trace/goroutinesv2_test.go index 99ec8dd8b0..ecd7f2631d 100644 --- a/src/internal/trace/goroutinesv2_test.go +++ b/src/internal/trace/goroutinesv2_test.go @@ -7,6 +7,7 @@ package trace import ( tracev2 "internal/trace/v2" "internal/trace/v2/testtrace" + "io" "testing" ) @@ -95,11 +96,22 @@ func summarizeTraceTest(t *testing.T, testPath string) map[tracev2.GoID]*Gorouti if err != nil { t.Fatalf("malformed test %s: bad trace file: %v", testPath, err) } - summaries, err := SummarizeGoroutines(r) + var events []tracev2.Event + tr, err := tracev2.NewReader(r) if err != nil { - t.Fatalf("failed to process trace %s: %v", testPath, err) + t.Fatalf("failed to create trace reader %s: %v", testPath, err) } - return summaries + for { + ev, err := tr.ReadEvent() + if err == io.EOF { + break + } + if err != nil { + t.Fatalf("failed to process trace %s: %v", testPath, err) + } + events = append(events, ev) + } + return SummarizeGoroutines(events) } func checkRegionEvents(t *testing.T, wantStart, wantEnd tracev2.EventKind, goid tracev2.GoID, region *UserRegionSummary) { diff --git a/src/internal/trace/traceviewer/http.go b/src/internal/trace/traceviewer/http.go index 0c58535a72..ac2803be2d 100644 --- a/src/internal/trace/traceviewer/http.go +++ b/src/internal/trace/traceviewer/http.go @@ -21,9 +21,7 @@ func MainHandler(ranges []Range) http.Handler { }) } -var templMain = template.Must(template.New("").Parse(` - - +code, +pre, +textarea.code { + font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; + font-size: 0.875rem; + line-height: 1.5em; +} + +pre, +textarea.code { + background-color: var(--color-background-accented); + border: var(--border); + border-radius: var(--border-radius); + color: var(--color-text); + overflow-x: auto; + padding: 0.625rem; + tab-size: 4; + white-space: pre; +} +` + +var templMain = template.Must(template.New("").Parse(` + +

cmd/trace: the Go trace event viewer

From c785be4c6ac8f042e91d7333862737078831ece4 Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Sun, 12 Nov 2023 23:10:04 +0000 Subject: [PATCH 060/313] cmd/trace: common up the mmu page and add it to cmd/trace/v2 This change moves the MMU HTTP handlers and functionality into the traceviewer package, since unlike the goroutine pages the vast majority of that functionality is identical between v1 and v2. This change involves some refactoring so that callers can plug in their own mutator utilization computation functions (which is the only point of difference between v1 and v2). The new interface isn't especially nice, but part of the problem is the MMU handlers depend on specific endpoints to exist. A follow-up CL will clean this up a bit. Like the previous CL did for goroutine analysis, modify the v2 mutator utilization API to accept a slice of trace events. Again, we might as well reuse what was already parsed and will be needed for other purposes. It also simplifies the API slightly. For #60773. For #63960. Change-Id: I6c21ec8d1bf7e95eff5363d0e0005c9217fa00e7 Reviewed-on: https://go-review.googlesource.com/c/go/+/541258 LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Pratt Auto-Submit: Michael Knyszek --- src/cmd/trace/main.go | 15 ++- src/cmd/trace/v2/main.go | 6 + src/internal/trace/gc.go | 28 ++--- src/internal/trace/gc_test.go | 22 +++- .../trace/traceviewer}/mmu.go | 104 +++++++++--------- 5 files changed, 100 insertions(+), 75 deletions(-) rename src/{cmd/trace => internal/trace/traceviewer}/mmu.go (84%) diff --git a/src/cmd/trace/main.go b/src/cmd/trace/main.go index b269050499..cb39c08aa7 100644 --- a/src/cmd/trace/main.go +++ b/src/cmd/trace/main.go @@ -139,8 +139,13 @@ func main() { log.Printf("Opening browser. Trace viewer is listening on %s", addr) browser.Open(addr) - // Start http server. + // Install MMU handlers. + traceviewer.InstallMMUHandlers(http.DefaultServeMux, ranges, mutatorUtil) + + // Install main handler. http.Handle("/", traceviewer.MainHandler(ranges)) + + // Start http server. err = http.Serve(ln, nil) dief("failed to start http server: %v\n", err) } @@ -228,3 +233,11 @@ func reportMemoryUsage(msg string) { fmt.Printf("Enter to continue...") fmt.Scanf("%s", &dummy) } + +func mutatorUtil(flags trace.UtilFlags) ([][]trace.MutatorUtil, error) { + events, err := parseEvents() + if err != nil { + return nil, err + } + return trace.MutatorUtilization(events, flags), nil +} diff --git a/src/cmd/trace/v2/main.go b/src/cmd/trace/v2/main.go index b355d81ce6..38be4d2fe2 100644 --- a/src/cmd/trace/v2/main.go +++ b/src/cmd/trace/v2/main.go @@ -70,6 +70,12 @@ func Main(traceFile, httpAddr, pprof string, debug int) error { mux.HandleFunc("/goroutines", GoroutinesHandlerFunc(gSummaries)) mux.HandleFunc("/goroutine", GoroutineHandler(gSummaries)) + // Install MMU handlers. + mutatorUtil := func(flags trace.UtilFlags) ([][]trace.MutatorUtil, error) { + return trace.MutatorUtilizationV2(parsed.events, flags), nil + } + traceviewer.InstallMMUHandlers(mux, ranges, mutatorUtil) + err = http.Serve(ln, mux) return fmt.Errorf("failed to start http server: %w", err) } diff --git a/src/internal/trace/gc.go b/src/internal/trace/gc.go index e6a23835d6..ca91969cfb 100644 --- a/src/internal/trace/gc.go +++ b/src/internal/trace/gc.go @@ -7,7 +7,6 @@ package trace import ( "container/heap" tracev2 "internal/trace/v2" - "io" "math" "sort" "strings" @@ -212,13 +211,7 @@ func MutatorUtilization(events []*Event, flags UtilFlags) [][]MutatorUtil { // // If the UtilPerProc flag is not given, this always returns a single // utilization function. Otherwise, it returns one function per P. -func MutatorUtilizationV2(trace io.Reader, flags UtilFlags) ([][]MutatorUtil, error) { - // Create a reader. - r, err := tracev2.NewReader(trace) - if err != nil { - return nil, err - } - +func MutatorUtilizationV2(events []tracev2.Event, flags UtilFlags) [][]MutatorUtil { // Set up a bunch of analysis state. type perP struct { // gc > 0 indicates that GC is active on this P. @@ -255,16 +248,9 @@ func MutatorUtilizationV2(trace io.Reader, flags UtilFlags) ([][]MutatorUtil, er } // Iterate through the trace, tracking mutator utilization. - var lastEv tracev2.Event - for { - // Read a single event. - ev, err := r.ReadEvent() - if err == io.EOF { - break - } - if err != nil { - return nil, err - } + var lastEv *tracev2.Event + for i := range events { + ev := &events[i] lastEv = ev // Process the event. @@ -451,8 +437,8 @@ func MutatorUtilizationV2(trace io.Reader, flags UtilFlags) ([][]MutatorUtil, er } // No events in the stream. - if lastEv.Kind() == tracev2.EventBad { - return nil, nil + if lastEv == nil { + return nil } // Add final 0 utilization event to any remaining series. This @@ -463,7 +449,7 @@ func MutatorUtilizationV2(trace io.Reader, flags UtilFlags) ([][]MutatorUtil, er for i := range ps { out[ps[i].series] = addUtil(out[ps[i].series], mu) } - return out, nil + return out } func addUtil(util []MutatorUtil, mu MutatorUtil) []MutatorUtil { diff --git a/src/internal/trace/gc_test.go b/src/internal/trace/gc_test.go index 2bdcfef006..4bbf1604f5 100644 --- a/src/internal/trace/gc_test.go +++ b/src/internal/trace/gc_test.go @@ -6,7 +6,10 @@ package trace import ( "bytes" + "internal/trace/v2" + tracev2 "internal/trace/v2" "internal/trace/v2/testtrace" + "io" "math" "os" "testing" @@ -133,12 +136,23 @@ func TestMMUTrace(t *testing.T) { if err != nil { t.Fatalf("malformed test %s: bad trace file: %v", testPath, err) } - // Pass the trace through MutatorUtilizationV2. - mu, err := MutatorUtilizationV2(r, UtilSTW|UtilBackground|UtilAssist) + var events []tracev2.Event + tr, err := trace.NewReader(r) if err != nil { - t.Fatalf("failed to compute mutator utilization or parse trace: %v", err) + t.Fatalf("malformed test %s: bad trace file: %v", testPath, err) } - check(t, mu) + for { + ev, err := tr.ReadEvent() + if err == io.EOF { + break + } + if err != nil { + t.Fatalf("malformed test %s: bad trace file: %v", testPath, err) + } + events = append(events, ev) + } + // Pass the trace through MutatorUtilizationV2 and check it. + check(t, MutatorUtilizationV2(events, UtilSTW|UtilBackground|UtilAssist)) }) } diff --git a/src/cmd/trace/mmu.go b/src/internal/trace/traceviewer/mmu.go similarity index 84% rename from src/cmd/trace/mmu.go rename to src/internal/trace/traceviewer/mmu.go index 43017c857e..42bf82774d 100644 --- a/src/cmd/trace/mmu.go +++ b/src/internal/trace/traceviewer/mmu.go @@ -1,4 +1,4 @@ -// Copyright 2017 The Go Authors. All rights reserved. +// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. @@ -23,13 +23,12 @@ // could potentially put confidence intervals on these estimates and // render this progressively as we refine the distributions. -package main +package traceviewer import ( "encoding/json" "fmt" "internal/trace" - "internal/trace/traceviewer" "log" "math" "net/http" @@ -39,10 +38,21 @@ import ( "time" ) -func init() { - http.HandleFunc("/mmu", httpMMU) - http.HandleFunc("/mmuPlot", httpMMUPlot) - http.HandleFunc("/mmuDetails", httpMMUDetails) +type MutatorUtilFunc func(trace.UtilFlags) ([][]trace.MutatorUtil, error) + +func InstallMMUHandlers(mux *http.ServeMux, ranges []Range, f MutatorUtilFunc) { + mmu := &mmu{ + cache: make(map[trace.UtilFlags]*mmuCacheEntry), + f: f, + ranges: ranges, + } + mux.HandleFunc("/mmu", func(w http.ResponseWriter, r *http.Request) { + // N.B. templMMU has Javascript that implicitly relies upon the existence + // of /mmuPlot and /mmuDetails on the same server. + http.ServeContent(w, r, "", time.Time{}, strings.NewReader(templMMU)) + }) + mux.HandleFunc("/mmuPlot", mmu.HandlePlot) + mux.HandleFunc("/mmuDetails", mmu.HandleDetails) } var utilFlagNames = map[string]trace.UtilFlags{ @@ -53,6 +63,14 @@ var utilFlagNames = map[string]trace.UtilFlags{ "sweep": trace.UtilSweep, } +func requestUtilFlags(r *http.Request) trace.UtilFlags { + var flags trace.UtilFlags + for _, flagStr := range strings.Split(r.FormValue("flags"), "|") { + flags |= utilFlagNames[flagStr] + } + return flags +} + type mmuCacheEntry struct { init sync.Once util [][]trace.MutatorUtil @@ -60,51 +78,39 @@ type mmuCacheEntry struct { err error } -var mmuCache struct { - m map[trace.UtilFlags]*mmuCacheEntry - lock sync.Mutex +type mmu struct { + mu sync.Mutex + cache map[trace.UtilFlags]*mmuCacheEntry + f MutatorUtilFunc + ranges []Range } -func init() { - mmuCache.m = make(map[trace.UtilFlags]*mmuCacheEntry) -} - -func getMMUCurve(r *http.Request) ([][]trace.MutatorUtil, *trace.MMUCurve, error) { - var flags trace.UtilFlags - for _, flagStr := range strings.Split(r.FormValue("flags"), "|") { - flags |= utilFlagNames[flagStr] +func (m *mmu) get(flags trace.UtilFlags) ([][]trace.MutatorUtil, *trace.MMUCurve, error) { + m.mu.Lock() + entry := m.cache[flags] + if entry == nil { + entry = new(mmuCacheEntry) + m.cache[flags] = entry } + m.mu.Unlock() - mmuCache.lock.Lock() - c := mmuCache.m[flags] - if c == nil { - c = new(mmuCacheEntry) - mmuCache.m[flags] = c - } - mmuCache.lock.Unlock() - - c.init.Do(func() { - events, err := parseEvents() + entry.init.Do(func() { + util, err := m.f(flags) if err != nil { - c.err = err + entry.err = err } else { - c.util = trace.MutatorUtilization(events, flags) - c.mmuCurve = trace.NewMMUCurve(c.util) + entry.util = util + entry.mmuCurve = trace.NewMMUCurve(util) } }) - return c.util, c.mmuCurve, c.err + return entry.util, entry.mmuCurve, entry.err } -// httpMMU serves the MMU plot page. -func httpMMU(w http.ResponseWriter, r *http.Request) { - http.ServeContent(w, r, "", time.Time{}, strings.NewReader(templMMU)) -} - -// httpMMUPlot serves the JSON data for the MMU plot. -func httpMMUPlot(w http.ResponseWriter, r *http.Request) { - mu, mmuCurve, err := getMMUCurve(r) +// HandlePlot serves the JSON data for the MMU plot. +func (m *mmu) HandlePlot(w http.ResponseWriter, r *http.Request) { + mu, mmuCurve, err := m.get(requestUtilFlags(r)) if err != nil { - http.Error(w, fmt.Sprintf("failed to parse events: %v", err), http.StatusInternalServerError) + http.Error(w, fmt.Sprintf("failed to produce MMU data: %v", err), http.StatusInternalServerError) return } @@ -358,11 +364,11 @@ var templMMU = ` ` -// httpMMUDetails serves details of an MMU graph at a particular window. -func httpMMUDetails(w http.ResponseWriter, r *http.Request) { - _, mmuCurve, err := getMMUCurve(r) +// HandleDetails serves details of an MMU graph at a particular window. +func (m *mmu) HandleDetails(w http.ResponseWriter, r *http.Request) { + _, mmuCurve, err := m.get(requestUtilFlags(r)) if err != nil { - http.Error(w, fmt.Sprintf("failed to parse events: %v", err), http.StatusInternalServerError) + http.Error(w, fmt.Sprintf("failed to produce MMU data: %v", err), http.StatusInternalServerError) return } @@ -377,7 +383,7 @@ func httpMMUDetails(w http.ResponseWriter, r *http.Request) { // Construct a link for each window. var links []linkedUtilWindow for _, ui := range worst { - links = append(links, newLinkedUtilWindow(ui, time.Duration(window))) + links = append(links, m.newLinkedUtilWindow(ui, time.Duration(window))) } err = json.NewEncoder(w).Encode(links) @@ -392,10 +398,10 @@ type linkedUtilWindow struct { URL string } -func newLinkedUtilWindow(ui trace.UtilWindow, window time.Duration) linkedUtilWindow { +func (m *mmu) newLinkedUtilWindow(ui trace.UtilWindow, window time.Duration) linkedUtilWindow { // Find the range containing this window. - var r traceviewer.Range - for _, r = range ranges { + var r Range + for _, r = range m.ranges { if r.EndTime > ui.Time { break } From ff07b73faced25076548b8d916ff19de1844650a Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Sun, 12 Nov 2023 23:27:31 +0000 Subject: [PATCH 061/313] internal/trace/traceviewer: make the mmu handler more self-contained The last change made the MMU rendering code common and introduced a new API, but it was kind of messy. Part of the problem was that some of the Javascript in the template for the main page referred to specific endpoints on the server. Fix this by having the Javascript access the same endpoint but with a different query variable. Now the Javascript code doesn't depend on specific endpoints, just on query variables for the current endpoint. For #60773. For #63960. Change-Id: I1c559d9859c3a0d62e2094c9d4ab117890b63b31 Reviewed-on: https://go-review.googlesource.com/c/go/+/541259 Auto-Submit: Michael Knyszek Reviewed-by: Michael Pratt LUCI-TryBot-Result: Go LUCI --- src/cmd/trace/main.go | 4 ++-- src/cmd/trace/v2/main.go | 11 +++++------ src/internal/trace/traceviewer/mmu.go | 22 +++++++++++++--------- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/cmd/trace/main.go b/src/cmd/trace/main.go index cb39c08aa7..b66980e9ac 100644 --- a/src/cmd/trace/main.go +++ b/src/cmd/trace/main.go @@ -139,8 +139,8 @@ func main() { log.Printf("Opening browser. Trace viewer is listening on %s", addr) browser.Open(addr) - // Install MMU handlers. - traceviewer.InstallMMUHandlers(http.DefaultServeMux, ranges, mutatorUtil) + // Install MMU handler. + http.HandleFunc("/mmu", traceviewer.MMUHandlerFunc(ranges, mutatorUtil)) // Install main handler. http.Handle("/", traceviewer.MainHandler(ranges)) diff --git a/src/cmd/trace/v2/main.go b/src/cmd/trace/v2/main.go index 38be4d2fe2..51b5ebf6cf 100644 --- a/src/cmd/trace/v2/main.go +++ b/src/cmd/trace/v2/main.go @@ -62,6 +62,10 @@ func Main(traceFile, httpAddr, pprof string, debug int) error { log.Printf("Opening browser. Trace viewer is listening on %s", addr) browser.Open(addr) + mutatorUtil := func(flags trace.UtilFlags) ([][]trace.MutatorUtil, error) { + return trace.MutatorUtilizationV2(parsed.events, flags), nil + } + mux := http.NewServeMux() mux.Handle("/", traceviewer.MainHandler(ranges)) mux.Handle("/trace", traceviewer.TraceHandler()) @@ -69,12 +73,7 @@ func Main(traceFile, httpAddr, pprof string, debug int) error { mux.Handle("/static/", traceviewer.StaticHandler()) mux.HandleFunc("/goroutines", GoroutinesHandlerFunc(gSummaries)) mux.HandleFunc("/goroutine", GoroutineHandler(gSummaries)) - - // Install MMU handlers. - mutatorUtil := func(flags trace.UtilFlags) ([][]trace.MutatorUtil, error) { - return trace.MutatorUtilizationV2(parsed.events, flags), nil - } - traceviewer.InstallMMUHandlers(mux, ranges, mutatorUtil) + mux.HandleFunc("/mmu", traceviewer.MMUHandlerFunc(ranges, mutatorUtil)) err = http.Serve(ln, mux) return fmt.Errorf("failed to start http server: %w", err) diff --git a/src/internal/trace/traceviewer/mmu.go b/src/internal/trace/traceviewer/mmu.go index 42bf82774d..0cb2b42657 100644 --- a/src/internal/trace/traceviewer/mmu.go +++ b/src/internal/trace/traceviewer/mmu.go @@ -40,19 +40,23 @@ import ( type MutatorUtilFunc func(trace.UtilFlags) ([][]trace.MutatorUtil, error) -func InstallMMUHandlers(mux *http.ServeMux, ranges []Range, f MutatorUtilFunc) { +func MMUHandlerFunc(ranges []Range, f MutatorUtilFunc) http.HandlerFunc { mmu := &mmu{ cache: make(map[trace.UtilFlags]*mmuCacheEntry), f: f, ranges: ranges, } - mux.HandleFunc("/mmu", func(w http.ResponseWriter, r *http.Request) { - // N.B. templMMU has Javascript that implicitly relies upon the existence - // of /mmuPlot and /mmuDetails on the same server. + return func(w http.ResponseWriter, r *http.Request) { + switch r.FormValue("mode") { + case "plot": + mmu.HandlePlot(w, r) + return + case "details": + mmu.HandleDetails(w, r) + return + } http.ServeContent(w, r, "", time.Time{}, strings.NewReader(templMMU)) - }) - mux.HandleFunc("/mmuPlot", mmu.HandlePlot) - mux.HandleFunc("/mmuDetails", mmu.HandleDetails) + } } var utilFlagNames = map[string]trace.UtilFlags{ @@ -209,7 +213,7 @@ var templMMU = ` container.css('opacity', '.5'); refreshChart.count++; var seq = refreshChart.count; - $.getJSON('/mmuPlot?flags=' + mmuFlags()) + $.getJSON('?mode=plot&flags=' + mmuFlags()) .fail(function(xhr, status, error) { alert('failed to load plot: ' + status); }) @@ -282,7 +286,7 @@ var templMMU = ` var details = $('#details'); details.empty(); var windowNS = curve[items[0].row][0]; - var url = '/mmuDetails?window=' + windowNS + '&flags=' + mmuFlags(); + var url = '?mode=details&window=' + windowNS + '&flags=' + mmuFlags(); $.getJSON(url) .fail(function(xhr, status, error) { details.text(status + ': ' + url + ' could not be loaded'); From b83934830fe9353ae38a08f7efe5b30f8851edd1 Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Mon, 13 Nov 2023 05:00:41 +0000 Subject: [PATCH 062/313] cmd/trace: refactor pprof HTTP SVG serving into traceviewer For #60773. For #63960. Change-Id: Id97380f19267ec765b25a703ea3e2f284396ad75 Reviewed-on: https://go-review.googlesource.com/c/go/+/541998 Auto-Submit: Michael Knyszek LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Pratt --- src/cmd/trace/main.go | 9 +- src/cmd/trace/pprof.go | 214 ++++++------------------ src/go/build/deps_test.go | 1 + src/internal/trace/traceviewer/pprof.go | 150 +++++++++++++++++ 4 files changed, 207 insertions(+), 167 deletions(-) create mode 100644 src/internal/trace/traceviewer/pprof.go diff --git a/src/cmd/trace/main.go b/src/cmd/trace/main.go index b66980e9ac..03fbadbcae 100644 --- a/src/cmd/trace/main.go +++ b/src/cmd/trace/main.go @@ -12,7 +12,6 @@ import ( "fmt" "internal/trace" "internal/trace/traceviewer" - "io" "log" "net" "net/http" @@ -91,7 +90,7 @@ func main() { return } - var pprofFunc func(io.Writer, *http.Request) error + var pprofFunc traceviewer.ProfileFunc switch *pprofFlag { case "net": pprofFunc = pprofByGoroutine(computePprofIO) @@ -103,7 +102,11 @@ func main() { pprofFunc = pprofByGoroutine(computePprofSched) } if pprofFunc != nil { - if err := pprofFunc(os.Stdout, &http.Request{}); err != nil { + records, err := pprofFunc(&http.Request{}) + if err != nil { + dief("failed to generate pprof: %v\n", err) + } + if err := traceviewer.BuildProfile(records).Write(os.Stdout); err != nil { dief("failed to generate pprof: %v\n", err) } os.Exit(0) diff --git a/src/cmd/trace/pprof.go b/src/cmd/trace/pprof.go index a73ff5336a..3722b37ab8 100644 --- a/src/cmd/trace/pprof.go +++ b/src/cmd/trace/pprof.go @@ -7,51 +7,25 @@ package main import ( - "bufio" "fmt" "internal/trace" - "io" + "internal/trace/traceviewer" "net/http" - "os" - "os/exec" - "path/filepath" - "runtime" "sort" "strconv" "time" - - "github.com/google/pprof/profile" ) -func goCmd() string { - var exeSuffix string - if runtime.GOOS == "windows" { - exeSuffix = ".exe" - } - path := filepath.Join(runtime.GOROOT(), "bin", "go"+exeSuffix) - if _, err := os.Stat(path); err == nil { - return path - } - return "go" -} - func init() { - http.HandleFunc("/io", serveSVGProfile(pprofByGoroutine(computePprofIO))) - http.HandleFunc("/block", serveSVGProfile(pprofByGoroutine(computePprofBlock))) - http.HandleFunc("/syscall", serveSVGProfile(pprofByGoroutine(computePprofSyscall))) - http.HandleFunc("/sched", serveSVGProfile(pprofByGoroutine(computePprofSched))) + http.HandleFunc("/io", traceviewer.SVGProfileHandlerFunc(pprofByGoroutine(computePprofIO))) + http.HandleFunc("/block", traceviewer.SVGProfileHandlerFunc(pprofByGoroutine(computePprofBlock))) + http.HandleFunc("/syscall", traceviewer.SVGProfileHandlerFunc(pprofByGoroutine(computePprofSyscall))) + http.HandleFunc("/sched", traceviewer.SVGProfileHandlerFunc(pprofByGoroutine(computePprofSched))) - http.HandleFunc("/regionio", serveSVGProfile(pprofByRegion(computePprofIO))) - http.HandleFunc("/regionblock", serveSVGProfile(pprofByRegion(computePprofBlock))) - http.HandleFunc("/regionsyscall", serveSVGProfile(pprofByRegion(computePprofSyscall))) - http.HandleFunc("/regionsched", serveSVGProfile(pprofByRegion(computePprofSched))) -} - -// Record represents one entry in pprof-like profiles. -type Record struct { - stk []*trace.Frame - n uint64 - time int64 + http.HandleFunc("/regionio", traceviewer.SVGProfileHandlerFunc(pprofByRegion(computePprofIO))) + http.HandleFunc("/regionblock", traceviewer.SVGProfileHandlerFunc(pprofByRegion(computePprofBlock))) + http.HandleFunc("/regionsyscall", traceviewer.SVGProfileHandlerFunc(pprofByRegion(computePprofSyscall))) + http.HandleFunc("/regionsched", traceviewer.SVGProfileHandlerFunc(pprofByRegion(computePprofSched))) } // interval represents a time interval in the trace. @@ -59,34 +33,34 @@ type interval struct { begin, end int64 // nanoseconds. } -func pprofByGoroutine(compute func(io.Writer, map[uint64][]interval, []*trace.Event) error) func(w io.Writer, r *http.Request) error { - return func(w io.Writer, r *http.Request) error { +func pprofByGoroutine(compute computePprofFunc) traceviewer.ProfileFunc { + return func(r *http.Request) ([]traceviewer.ProfileRecord, error) { id := r.FormValue("id") events, err := parseEvents() if err != nil { - return err + return nil, err } gToIntervals, err := pprofMatchingGoroutines(id, events) if err != nil { - return err + return nil, err } - return compute(w, gToIntervals, events) + return compute(gToIntervals, events) } } -func pprofByRegion(compute func(io.Writer, map[uint64][]interval, []*trace.Event) error) func(w io.Writer, r *http.Request) error { - return func(w io.Writer, r *http.Request) error { +func pprofByRegion(compute computePprofFunc) traceviewer.ProfileFunc { + return func(r *http.Request) ([]traceviewer.ProfileRecord, error) { filter, err := newRegionFilter(r) if err != nil { - return err + return nil, err } gToIntervals, err := pprofMatchingRegions(filter) if err != nil { - return err + return nil, err } events, _ := parseEvents() - return compute(w, gToIntervals, events) + return compute(gToIntervals, events) } } @@ -170,9 +144,11 @@ func pprofMatchingRegions(filter *regionFilter) (map[uint64][]interval, error) { return gToIntervals, nil } +type computePprofFunc func(gToIntervals map[uint64][]interval, events []*trace.Event) ([]traceviewer.ProfileRecord, error) + // computePprofIO generates IO pprof-like profile (time spent in IO wait, currently only network blocking event). -func computePprofIO(w io.Writer, gToIntervals map[uint64][]interval, events []*trace.Event) error { - prof := make(map[uint64]Record) +func computePprofIO(gToIntervals map[uint64][]interval, events []*trace.Event) ([]traceviewer.ProfileRecord, error) { + prof := make(map[uint64]traceviewer.ProfileRecord) for _, ev := range events { if ev.Type != trace.EvGoBlockNet || ev.Link == nil || ev.StkID == 0 || len(ev.Stk) == 0 { continue @@ -180,18 +156,18 @@ func computePprofIO(w io.Writer, gToIntervals map[uint64][]interval, events []*t overlapping := pprofOverlappingDuration(gToIntervals, ev) if overlapping > 0 { rec := prof[ev.StkID] - rec.stk = ev.Stk - rec.n++ - rec.time += overlapping.Nanoseconds() + rec.Stack = ev.Stk + rec.Count++ + rec.Time += overlapping prof[ev.StkID] = rec } } - return buildProfile(prof).Write(w) + return recordsOf(prof), nil } // computePprofBlock generates blocking pprof-like profile (time spent blocked on synchronization primitives). -func computePprofBlock(w io.Writer, gToIntervals map[uint64][]interval, events []*trace.Event) error { - prof := make(map[uint64]Record) +func computePprofBlock(gToIntervals map[uint64][]interval, events []*trace.Event) ([]traceviewer.ProfileRecord, error) { + prof := make(map[uint64]traceviewer.ProfileRecord) for _, ev := range events { switch ev.Type { case trace.EvGoBlockSend, trace.EvGoBlockRecv, trace.EvGoBlockSelect, @@ -208,18 +184,18 @@ func computePprofBlock(w io.Writer, gToIntervals map[uint64][]interval, events [ overlapping := pprofOverlappingDuration(gToIntervals, ev) if overlapping > 0 { rec := prof[ev.StkID] - rec.stk = ev.Stk - rec.n++ - rec.time += overlapping.Nanoseconds() + rec.Stack = ev.Stk + rec.Count++ + rec.Time += overlapping prof[ev.StkID] = rec } } - return buildProfile(prof).Write(w) + return recordsOf(prof), nil } // computePprofSyscall generates syscall pprof-like profile (time spent blocked in syscalls). -func computePprofSyscall(w io.Writer, gToIntervals map[uint64][]interval, events []*trace.Event) error { - prof := make(map[uint64]Record) +func computePprofSyscall(gToIntervals map[uint64][]interval, events []*trace.Event) ([]traceviewer.ProfileRecord, error) { + prof := make(map[uint64]traceviewer.ProfileRecord) for _, ev := range events { if ev.Type != trace.EvGoSysCall || ev.Link == nil || ev.StkID == 0 || len(ev.Stk) == 0 { continue @@ -227,19 +203,19 @@ func computePprofSyscall(w io.Writer, gToIntervals map[uint64][]interval, events overlapping := pprofOverlappingDuration(gToIntervals, ev) if overlapping > 0 { rec := prof[ev.StkID] - rec.stk = ev.Stk - rec.n++ - rec.time += overlapping.Nanoseconds() + rec.Stack = ev.Stk + rec.Count++ + rec.Time += overlapping prof[ev.StkID] = rec } } - return buildProfile(prof).Write(w) + return recordsOf(prof), nil } // computePprofSched generates scheduler latency pprof-like profile // (time between a goroutine become runnable and actually scheduled for execution). -func computePprofSched(w io.Writer, gToIntervals map[uint64][]interval, events []*trace.Event) error { - prof := make(map[uint64]Record) +func computePprofSched(gToIntervals map[uint64][]interval, events []*trace.Event) ([]traceviewer.ProfileRecord, error) { + prof := make(map[uint64]traceviewer.ProfileRecord) for _, ev := range events { if (ev.Type != trace.EvGoUnblock && ev.Type != trace.EvGoCreate) || ev.Link == nil || ev.StkID == 0 || len(ev.Stk) == 0 { @@ -248,13 +224,13 @@ func computePprofSched(w io.Writer, gToIntervals map[uint64][]interval, events [ overlapping := pprofOverlappingDuration(gToIntervals, ev) if overlapping > 0 { rec := prof[ev.StkID] - rec.stk = ev.Stk - rec.n++ - rec.time += overlapping.Nanoseconds() + rec.Stack = ev.Stk + rec.Count++ + rec.Time += overlapping prof[ev.StkID] = rec } } - return buildProfile(prof).Write(w) + return recordsOf(prof), nil } // pprofOverlappingDuration returns the overlapping duration between @@ -278,100 +254,10 @@ func pprofOverlappingDuration(gToIntervals map[uint64][]interval, ev *trace.Even return overlapping } -// serveSVGProfile serves pprof-like profile generated by prof as svg. -func serveSVGProfile(prof func(w io.Writer, r *http.Request) error) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - - if r.FormValue("raw") != "" { - w.Header().Set("Content-Type", "application/octet-stream") - if err := prof(w, r); err != nil { - w.Header().Set("Content-Type", "text/plain; charset=utf-8") - w.Header().Set("X-Go-Pprof", "1") - http.Error(w, fmt.Sprintf("failed to get profile: %v", err), http.StatusInternalServerError) - return - } - return - } - - blockf, err := os.CreateTemp("", "block") - if err != nil { - http.Error(w, fmt.Sprintf("failed to create temp file: %v", err), http.StatusInternalServerError) - return - } - defer func() { - blockf.Close() - os.Remove(blockf.Name()) - }() - blockb := bufio.NewWriter(blockf) - if err := prof(blockb, r); err != nil { - http.Error(w, fmt.Sprintf("failed to generate profile: %v", err), http.StatusInternalServerError) - return - } - if err := blockb.Flush(); err != nil { - http.Error(w, fmt.Sprintf("failed to flush temp file: %v", err), http.StatusInternalServerError) - return - } - if err := blockf.Close(); err != nil { - http.Error(w, fmt.Sprintf("failed to close temp file: %v", err), http.StatusInternalServerError) - return - } - svgFilename := blockf.Name() + ".svg" - if output, err := exec.Command(goCmd(), "tool", "pprof", "-svg", "-output", svgFilename, blockf.Name()).CombinedOutput(); err != nil { - http.Error(w, fmt.Sprintf("failed to execute go tool pprof: %v\n%s", err, output), http.StatusInternalServerError) - return - } - defer os.Remove(svgFilename) - w.Header().Set("Content-Type", "image/svg+xml") - http.ServeFile(w, r, svgFilename) +func recordsOf(records map[uint64]traceviewer.ProfileRecord) []traceviewer.ProfileRecord { + result := make([]traceviewer.ProfileRecord, 0, len(records)) + for _, record := range records { + result = append(result, record) } -} - -func buildProfile(prof map[uint64]Record) *profile.Profile { - p := &profile.Profile{ - PeriodType: &profile.ValueType{Type: "trace", Unit: "count"}, - Period: 1, - SampleType: []*profile.ValueType{ - {Type: "contentions", Unit: "count"}, - {Type: "delay", Unit: "nanoseconds"}, - }, - } - locs := make(map[uint64]*profile.Location) - funcs := make(map[string]*profile.Function) - for _, rec := range prof { - var sloc []*profile.Location - for _, frame := range rec.stk { - loc := locs[frame.PC] - if loc == nil { - fn := funcs[frame.File+frame.Fn] - if fn == nil { - fn = &profile.Function{ - ID: uint64(len(p.Function) + 1), - Name: frame.Fn, - SystemName: frame.Fn, - Filename: frame.File, - } - p.Function = append(p.Function, fn) - funcs[frame.File+frame.Fn] = fn - } - loc = &profile.Location{ - ID: uint64(len(p.Location) + 1), - Address: frame.PC, - Line: []profile.Line{ - { - Function: fn, - Line: int64(frame.Line), - }, - }, - } - p.Location = append(p.Location, loc) - locs[frame.PC] = loc - } - sloc = append(sloc, loc) - } - p.Sample = append(p.Sample, &profile.Sample{ - Value: []int64{int64(rec.n), rec.time}, - Location: sloc, - }) - } - return p + return result } diff --git a/src/go/build/deps_test.go b/src/go/build/deps_test.go index a6b1a613bb..147137262b 100644 --- a/src/go/build/deps_test.go +++ b/src/go/build/deps_test.go @@ -639,6 +639,7 @@ var depsRules = ` embed, encoding/json, html/template, + internal/profile, internal/trace, internal/trace/traceviewer/format, net/http diff --git a/src/internal/trace/traceviewer/pprof.go b/src/internal/trace/traceviewer/pprof.go new file mode 100644 index 0000000000..1377b3c614 --- /dev/null +++ b/src/internal/trace/traceviewer/pprof.go @@ -0,0 +1,150 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Serving of pprof-like profiles. + +package traceviewer + +import ( + "bufio" + "fmt" + "internal/profile" + "internal/trace" + "net/http" + "os" + "os/exec" + "path/filepath" + "runtime" + "time" +) + +type ProfileFunc func(r *http.Request) ([]ProfileRecord, error) + +// SVGProfileHandlerFunc serves pprof-like profile generated by prof as svg. +func SVGProfileHandlerFunc(f ProfileFunc) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + if r.FormValue("raw") != "" { + w.Header().Set("Content-Type", "application/octet-stream") + + failf := func(s string, args ...any) { + w.Header().Set("Content-Type", "text/plain; charset=utf-8") + w.Header().Set("X-Go-Pprof", "1") + http.Error(w, fmt.Sprintf(s, args...), http.StatusInternalServerError) + } + records, err := f(r) + if err != nil { + failf("failed to get records: %v", err) + return + } + if err := BuildProfile(records).Write(w); err != nil { + failf("failed to write profile: %v", err) + return + } + return + } + + blockf, err := os.CreateTemp("", "block") + if err != nil { + http.Error(w, fmt.Sprintf("failed to create temp file: %v", err), http.StatusInternalServerError) + return + } + defer func() { + blockf.Close() + os.Remove(blockf.Name()) + }() + records, err := f(r) + if err != nil { + http.Error(w, fmt.Sprintf("failed to generate profile: %v", err), http.StatusInternalServerError) + } + blockb := bufio.NewWriter(blockf) + if err := BuildProfile(records).Write(blockb); err != nil { + http.Error(w, fmt.Sprintf("failed to write profile: %v", err), http.StatusInternalServerError) + return + } + if err := blockb.Flush(); err != nil { + http.Error(w, fmt.Sprintf("failed to flush temp file: %v", err), http.StatusInternalServerError) + return + } + if err := blockf.Close(); err != nil { + http.Error(w, fmt.Sprintf("failed to close temp file: %v", err), http.StatusInternalServerError) + return + } + svgFilename := blockf.Name() + ".svg" + if output, err := exec.Command(goCmd(), "tool", "pprof", "-svg", "-output", svgFilename, blockf.Name()).CombinedOutput(); err != nil { + http.Error(w, fmt.Sprintf("failed to execute go tool pprof: %v\n%s", err, output), http.StatusInternalServerError) + return + } + defer os.Remove(svgFilename) + w.Header().Set("Content-Type", "image/svg+xml") + http.ServeFile(w, r, svgFilename) + } +} + +type ProfileRecord struct { + Stack []*trace.Frame + Count uint64 + Time time.Duration +} + +func BuildProfile(prof []ProfileRecord) *profile.Profile { + p := &profile.Profile{ + PeriodType: &profile.ValueType{Type: "trace", Unit: "count"}, + Period: 1, + SampleType: []*profile.ValueType{ + {Type: "contentions", Unit: "count"}, + {Type: "delay", Unit: "nanoseconds"}, + }, + } + locs := make(map[uint64]*profile.Location) + funcs := make(map[string]*profile.Function) + for _, rec := range prof { + var sloc []*profile.Location + for _, frame := range rec.Stack { + loc := locs[frame.PC] + if loc == nil { + fn := funcs[frame.File+frame.Fn] + if fn == nil { + fn = &profile.Function{ + ID: uint64(len(p.Function) + 1), + Name: frame.Fn, + SystemName: frame.Fn, + Filename: frame.File, + } + p.Function = append(p.Function, fn) + funcs[frame.File+frame.Fn] = fn + } + loc = &profile.Location{ + ID: uint64(len(p.Location) + 1), + Address: frame.PC, + Line: []profile.Line{ + { + Function: fn, + Line: int64(frame.Line), + }, + }, + } + p.Location = append(p.Location, loc) + locs[frame.PC] = loc + } + sloc = append(sloc, loc) + } + p.Sample = append(p.Sample, &profile.Sample{ + Value: []int64{int64(rec.Count), int64(rec.Time)}, + Location: sloc, + }) + } + return p +} + +func goCmd() string { + var exeSuffix string + if runtime.GOOS == "windows" { + exeSuffix = ".exe" + } + path := filepath.Join(runtime.GOROOT(), "bin", "go"+exeSuffix) + if _, err := os.Stat(path); err == nil { + return path + } + return "go" +} From d1dcffdb4a40f8ea89d9e57744142f9805b64840 Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Mon, 13 Nov 2023 18:57:06 +0000 Subject: [PATCH 063/313] cmd/trace/v2: add support for pprof endpoints This change adds support for the pprof endpoints to cmd/trace/v2. In the process, I realized we need to pass the goroutine summaries to more places, and previous CLs had already done the goroutine analysis during cmd/trace startup. This change thus refactors the goroutine analysis API once again to operate in a streaming manner, and to run at the same time as the initial trace parsing. Now we can include it in the parsedTrace type and pass that around as the de-facto global trace context. Note: for simplicity, this change redefines "syscall" profiles to capture *all* syscalls, not just syscalls that block. IIUC, this choice was partly the result of a limitation in the previous trace format that syscalls don't all have complete durations and many short syscalls are treated as instant. To this end, this change modifies the text on the main trace webpage to reflect this change. For #60773. For #63960. Change-Id: I601d9250ab0849a0bfaef233fd9b1e81aca9a22a Reviewed-on: https://go-review.googlesource.com/c/go/+/541999 Auto-Submit: Michael Knyszek Reviewed-by: Michael Pratt LUCI-TryBot-Result: Go LUCI --- src/cmd/trace/v2/goroutines.go | 2 +- src/cmd/trace/v2/main.go | 48 ++- src/cmd/trace/v2/pprof.go | 435 ++++++++++++++++++++++++ src/internal/trace/goroutinesv2.go | 98 +++--- src/internal/trace/goroutinesv2_test.go | 18 +- src/internal/trace/traceviewer/http.go | 2 +- 6 files changed, 532 insertions(+), 71 deletions(-) create mode 100644 src/cmd/trace/v2/pprof.go diff --git a/src/cmd/trace/v2/goroutines.go b/src/cmd/trace/v2/goroutines.go index 8fbfc9c22d..5c300024ee 100644 --- a/src/cmd/trace/v2/goroutines.go +++ b/src/cmd/trace/v2/goroutines.go @@ -346,7 +346,7 @@ Table of contents graph (download) - Syscall block profile: + Syscall profile: graph (download) diff --git a/src/cmd/trace/v2/main.go b/src/cmd/trace/v2/main.go index 51b5ebf6cf..b10373920a 100644 --- a/src/cmd/trace/v2/main.go +++ b/src/cmd/trace/v2/main.go @@ -56,8 +56,6 @@ func Main(traceFile, httpAddr, pprof string, debug int) error { if err != nil { return err } - log.Printf("Analyzing goroutines...") - gSummaries := trace.SummarizeGoroutines(parsed.events) log.Printf("Opening browser. Trace viewer is listening on %s", addr) browser.Open(addr) @@ -67,28 +65,50 @@ func Main(traceFile, httpAddr, pprof string, debug int) error { } mux := http.NewServeMux() + + // Main endpoint. mux.Handle("/", traceviewer.MainHandler(ranges)) + + // Catapult handlers. mux.Handle("/trace", traceviewer.TraceHandler()) mux.Handle("/jsontrace", JSONTraceHandler(parsed)) mux.Handle("/static/", traceviewer.StaticHandler()) - mux.HandleFunc("/goroutines", GoroutinesHandlerFunc(gSummaries)) - mux.HandleFunc("/goroutine", GoroutineHandler(gSummaries)) + + // Goroutines handlers. + mux.HandleFunc("/goroutines", GoroutinesHandlerFunc(parsed.gSummaries)) + mux.HandleFunc("/goroutine", GoroutineHandler(parsed.gSummaries)) + + // MMU handler. mux.HandleFunc("/mmu", traceviewer.MMUHandlerFunc(ranges, mutatorUtil)) + // Basic pprof endpoints. + mux.HandleFunc("/io", traceviewer.SVGProfileHandlerFunc(pprofByGoroutine(computePprofIO(), parsed))) + mux.HandleFunc("/block", traceviewer.SVGProfileHandlerFunc(pprofByGoroutine(computePprofBlock(), parsed))) + mux.HandleFunc("/syscall", traceviewer.SVGProfileHandlerFunc(pprofByGoroutine(computePprofSyscall(), parsed))) + mux.HandleFunc("/sched", traceviewer.SVGProfileHandlerFunc(pprofByGoroutine(computePprofSched(), parsed))) + + // Region-based pprof endpoints. + mux.HandleFunc("/regionio", traceviewer.SVGProfileHandlerFunc(pprofByRegion(computePprofIO(), parsed))) + mux.HandleFunc("/regionblock", traceviewer.SVGProfileHandlerFunc(pprofByRegion(computePprofBlock(), parsed))) + mux.HandleFunc("/regionsyscall", traceviewer.SVGProfileHandlerFunc(pprofByRegion(computePprofSyscall(), parsed))) + mux.HandleFunc("/regionsched", traceviewer.SVGProfileHandlerFunc(pprofByRegion(computePprofSched(), parsed))) + err = http.Serve(ln, mux) return fmt.Errorf("failed to start http server: %w", err) } type parsedTrace struct { - events []tracev2.Event + events []tracev2.Event + gSummaries map[tracev2.GoID]*trace.GoroutineSummary } -func parseTrace(trace io.Reader) (*parsedTrace, error) { - r, err := tracev2.NewReader(trace) +func parseTrace(tr io.Reader) (*parsedTrace, error) { + r, err := tracev2.NewReader(tr) if err != nil { return nil, fmt.Errorf("failed to create trace reader: %w", err) } - var t parsedTrace + s := trace.NewGoroutineSummarizer() + t := new(parsedTrace) for { ev, err := r.ReadEvent() if err == io.EOF { @@ -97,8 +117,18 @@ func parseTrace(trace io.Reader) (*parsedTrace, error) { return nil, fmt.Errorf("failed to read event: %w", err) } t.events = append(t.events, ev) + s.Event(&t.events[len(t.events)-1]) } - return &t, nil + t.gSummaries = s.Finalize() + return t, nil +} + +func (t *parsedTrace) startTime() tracev2.Time { + return t.events[0].Time() +} + +func (t *parsedTrace) endTime() tracev2.Time { + return t.events[len(t.events)-1].Time() } // splitTrace splits the trace into a number of ranges, each resulting in approx 100 MiB of diff --git a/src/cmd/trace/v2/pprof.go b/src/cmd/trace/v2/pprof.go new file mode 100644 index 0000000000..39ef96ad26 --- /dev/null +++ b/src/cmd/trace/v2/pprof.go @@ -0,0 +1,435 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Serving of pprof-like profiles. + +package trace + +import ( + "cmp" + "fmt" + "internal/trace" + "internal/trace/traceviewer" + tracev2 "internal/trace/v2" + "net/http" + "net/url" + "slices" + "strconv" + "strings" + "time" +) + +func pprofByGoroutine(compute computePprofFunc, t *parsedTrace) traceviewer.ProfileFunc { + return func(r *http.Request) ([]traceviewer.ProfileRecord, error) { + id := r.FormValue("id") + gToIntervals, err := pprofMatchingGoroutines(id, t) + if err != nil { + return nil, err + } + return compute(gToIntervals, t.events) + } +} + +func pprofByRegion(compute computePprofFunc, t *parsedTrace) traceviewer.ProfileFunc { + return func(r *http.Request) ([]traceviewer.ProfileRecord, error) { + filter, err := newRegionFilter(r) + if err != nil { + return nil, err + } + gToIntervals, err := pprofMatchingRegions(filter, t) + if err != nil { + return nil, err + } + return compute(gToIntervals, t.events) + } +} + +// pprofMatchingGoroutines parses the goroutine type id string (i.e. pc) +// and returns the ids of goroutines of the matching type and its interval. +// If the id string is empty, returns nil without an error. +func pprofMatchingGoroutines(id string, t *parsedTrace) (map[tracev2.GoID][]interval, error) { + if id == "" { + return nil, nil + } + pc, err := strconv.ParseUint(id, 10, 64) // id is string + if err != nil { + return nil, fmt.Errorf("invalid goroutine type: %v", id) + } + res := make(map[tracev2.GoID][]interval) + for _, g := range t.gSummaries { + if g.PC != pc { + continue + } + endTime := g.EndTime + if g.EndTime == 0 { + endTime = t.endTime() // Use the trace end time, since the goroutine is still live then. + } + res[g.ID] = []interval{{start: g.StartTime, end: endTime}} + } + if len(res) == 0 && id != "" { + return nil, fmt.Errorf("failed to find matching goroutines for ID: %s", id) + } + return res, nil +} + +// pprofMatchingRegions returns the time intervals of matching regions +// grouped by the goroutine id. If the filter is nil, returns nil without an error. +func pprofMatchingRegions(filter *regionFilter, t *parsedTrace) (map[tracev2.GoID][]interval, error) { + if filter == nil { + return nil, nil + } + + gToIntervals := make(map[tracev2.GoID][]interval) + for _, g := range t.gSummaries { + for _, r := range g.Regions { + if !filter.match(t, r) { + continue + } + gToIntervals[g.ID] = append(gToIntervals[g.ID], regionInterval(t, r)) + } + } + + for g, intervals := range gToIntervals { + // In order to remove nested regions and + // consider only the outermost regions, + // first, we sort based on the start time + // and then scan through to select only the outermost regions. + slices.SortFunc(intervals, func(a, b interval) int { + if c := cmp.Compare(a.start, b.start); c != 0 { + return c + } + return cmp.Compare(a.end, b.end) + }) + var lastTimestamp tracev2.Time + var n int + // Select only the outermost regions. + for _, i := range intervals { + if lastTimestamp <= i.start { + intervals[n] = i // new non-overlapping region starts. + lastTimestamp = i.end + n++ + } + // Otherwise, skip because this region overlaps with a previous region. + } + gToIntervals[g] = intervals[:n] + } + return gToIntervals, nil +} + +type computePprofFunc func(gToIntervals map[tracev2.GoID][]interval, events []tracev2.Event) ([]traceviewer.ProfileRecord, error) + +// computePprofIO returns a computePprofFunc that generates IO pprof-like profile (time spent in +// IO wait, currently only network blocking event). +func computePprofIO() computePprofFunc { + return makeComputePprofFunc(tracev2.GoWaiting, func(reason string) bool { + return reason == "network" + }) +} + +// computePprofBlock returns a computePprofFunc that generates blocking pprof-like profile +// (time spent blocked on synchronization primitives). +func computePprofBlock() computePprofFunc { + return makeComputePprofFunc(tracev2.GoWaiting, func(reason string) bool { + return strings.Contains(reason, "chan") || strings.Contains(reason, "sync") || strings.Contains(reason, "select") + }) +} + +// computePprofSyscall returns a computePprofFunc that generates a syscall pprof-like +// profile (time spent in syscalls). +func computePprofSyscall() computePprofFunc { + return makeComputePprofFunc(tracev2.GoSyscall, func(_ string) bool { + return true + }) +} + +// computePprofSched returns a computePprofFunc that generates a scheduler latency pprof-like profile +// (time between a goroutine become runnable and actually scheduled for execution). +func computePprofSched() computePprofFunc { + return makeComputePprofFunc(tracev2.GoRunnable, func(_ string) bool { + return true + }) +} + +// makeComputePprofFunc returns a computePprofFunc that generates a profile of time goroutines spend +// in a particular state for the specified reasons. +func makeComputePprofFunc(state tracev2.GoState, trackReason func(string) bool) computePprofFunc { + return func(gToIntervals map[tracev2.GoID][]interval, events []tracev2.Event) ([]traceviewer.ProfileRecord, error) { + stacks := newStackMap() + tracking := make(map[tracev2.GoID]*tracev2.Event) + for i := range events { + ev := &events[i] + + // Filter out any non-state-transitions and events without stacks. + if ev.Kind() != tracev2.EventStateTransition { + continue + } + stack := ev.Stack() + if stack == tracev2.NoStack { + continue + } + + // The state transition has to apply to a goroutine. + st := ev.StateTransition() + if st.Resource.Kind != tracev2.ResourceGoroutine { + continue + } + id := st.Resource.Goroutine() + _, new := st.Goroutine() + + // Check if we're tracking this goroutine. + startEv := tracking[id] + if startEv == nil { + // We're not. Start tracking if the new state + // matches what we want and the transition is + // for one of the reasons we care about. + if new == state && trackReason(st.Reason) { + tracking[id] = ev + } + continue + } + // We're tracking this goroutine. + if new == state { + // We're tracking this goroutine, but it's just transitioning + // to the same state (this is a no-ip + continue + } + // The goroutine has transitioned out of the state we care about, + // so remove it from tracking and record the stack. + delete(tracking, id) + + overlapping := pprofOverlappingDuration(gToIntervals, id, interval{startEv.Time(), ev.Time()}) + if overlapping > 0 { + rec := stacks.getOrAdd(startEv.Stack()) + rec.Count++ + rec.Time += overlapping + } + } + return stacks.profile(), nil + } +} + +// pprofOverlappingDuration returns the overlapping duration between +// the time intervals in gToIntervals and the specified event. +// If gToIntervals is nil, this simply returns the event's duration. +func pprofOverlappingDuration(gToIntervals map[tracev2.GoID][]interval, id tracev2.GoID, sample interval) time.Duration { + if gToIntervals == nil { // No filtering. + return sample.duration() + } + intervals := gToIntervals[id] + if len(intervals) == 0 { + return 0 + } + + var overlapping time.Duration + for _, i := range intervals { + if o := i.overlap(sample); o > 0 { + overlapping += o + } + } + return overlapping +} + +// interval represents a time interval in the trace. +type interval struct { + start, end tracev2.Time +} + +func (i interval) duration() time.Duration { + return i.end.Sub(i.start) +} + +func (i1 interval) overlap(i2 interval) time.Duration { + // Assume start1 <= end1 and start2 <= end2 + if i1.end < i2.start || i2.end < i1.start { + return 0 + } + if i1.start < i2.start { // choose the later one + i1.start = i2.start + } + if i1.end > i2.end { // choose the earlier one + i1.end = i2.end + } + return i1.duration() +} + +// pprofMaxStack is the extent of the deduplication we're willing to do. +// +// Because slices aren't comparable and we want to leverage maps for deduplication, +// we have to choose a fixed constant upper bound on the amount of frames we want +// to support. In practice this is fine because there's a maximum depth to these +// stacks anyway. +const pprofMaxStack = 128 + +// stackMap is a map of tracev2.Stack to some value V. +type stackMap struct { + // stacks contains the full list of stacks in the set, however + // it is insufficient for deduplication because tracev2.Stack + // equality is only optimistic. If two tracev2.Stacks are equal, + // then they are guaranteed to be equal in content. If they are + // not equal, then they might still be equal in content. + stacks map[tracev2.Stack]*traceviewer.ProfileRecord + + // pcs is the source-of-truth for deduplication. It is a map of + // the actual PCs in the stack to a tracev2.Stack. + pcs map[[pprofMaxStack]uint64]tracev2.Stack +} + +func newStackMap() *stackMap { + return &stackMap{ + stacks: make(map[tracev2.Stack]*traceviewer.ProfileRecord), + pcs: make(map[[pprofMaxStack]uint64]tracev2.Stack), + } +} + +func (m *stackMap) getOrAdd(stack tracev2.Stack) *traceviewer.ProfileRecord { + // Fast path: check to see if this exact stack is already in the map. + if rec, ok := m.stacks[stack]; ok { + return rec + } + // Slow path: the stack may still be in the map. + + // Grab the stack's PCs as the source-of-truth. + var pcs [pprofMaxStack]uint64 + pcsForStack(stack, &pcs) + + // Check the source-of-truth. + var rec *traceviewer.ProfileRecord + if existing, ok := m.pcs[pcs]; ok { + // In the map. + rec = m.stacks[existing] + delete(m.stacks, existing) + } else { + // Not in the map. + rec = new(traceviewer.ProfileRecord) + } + // Insert regardless of whether we have a match in m.pcs. + // Even if we have a match, we want to keep the newest version + // of that stack, since we're much more likely tos see it again + // as we iterate through the trace linearly. Simultaneously, we + // are likely to never see the old stack again. + m.pcs[pcs] = stack + m.stacks[stack] = rec + return rec +} + +func (m *stackMap) profile() []traceviewer.ProfileRecord { + prof := make([]traceviewer.ProfileRecord, 0, len(m.stacks)) + for stack, record := range m.stacks { + rec := *record + i := 0 + stack.Frames(func(frame tracev2.StackFrame) bool { + rec.Stack = append(rec.Stack, &trace.Frame{ + PC: frame.PC, + Fn: frame.Func, + File: frame.File, + Line: int(frame.Line), + }) + i++ + // Cut this off at pprofMaxStack because that's as far + // as our deduplication goes. + return i < pprofMaxStack + }) + prof = append(prof, rec) + } + return prof +} + +// pcsForStack extracts the first pprofMaxStack PCs from stack into pcs. +func pcsForStack(stack tracev2.Stack, pcs *[pprofMaxStack]uint64) { + i := 0 + stack.Frames(func(frame tracev2.StackFrame) bool { + pcs[i] = frame.PC + i++ + return i < len(pcs) + }) +} + +func regionInterval(t *parsedTrace, s *trace.UserRegionSummary) interval { + var i interval + if s.Start != nil { + i.start = s.Start.Time() + } else { + i.start = t.startTime() + } + if s.End != nil { + i.end = s.End.Time() + } else { + i.end = t.endTime() + } + return i +} + +// regionFilter represents a region filter specified by a user of cmd/trace. +type regionFilter struct { + name string + params url.Values + cond []func(*parsedTrace, *trace.UserRegionSummary) bool +} + +// match returns true if a region, described by its ID and summary, matches +// the filter. +func (f *regionFilter) match(t *parsedTrace, s *trace.UserRegionSummary) bool { + for _, c := range f.cond { + if !c(t, s) { + return false + } + } + return true +} + +// newRegionFilter creates a new region filter from URL query variables. +func newRegionFilter(r *http.Request) (*regionFilter, error) { + if err := r.ParseForm(); err != nil { + return nil, err + } + + var name []string + var conditions []func(*parsedTrace, *trace.UserRegionSummary) bool + filterParams := make(url.Values) + + param := r.Form + if typ, ok := param["type"]; ok && len(typ) > 0 { + name = append(name, "type="+typ[0]) + conditions = append(conditions, func(_ *parsedTrace, r *trace.UserRegionSummary) bool { + return r.Name == typ[0] + }) + filterParams.Add("type", typ[0]) + } + if pc, err := strconv.ParseUint(r.FormValue("pc"), 16, 64); err == nil { + encPC := fmt.Sprintf("%x", pc) + name = append(name, "pc="+encPC) + conditions = append(conditions, func(_ *parsedTrace, r *trace.UserRegionSummary) bool { + var regionPC uint64 + if r.Start != nil && r.Start.Stack() != tracev2.NoStack { + r.Start.Stack().Frames(func(f tracev2.StackFrame) bool { + regionPC = f.PC + return false + }) + } + return regionPC == pc + }) + filterParams.Add("pc", encPC) + } + + if lat, err := time.ParseDuration(r.FormValue("latmin")); err == nil { + name = append(name, fmt.Sprintf("latency >= %s", lat)) + conditions = append(conditions, func(t *parsedTrace, r *trace.UserRegionSummary) bool { + return regionInterval(t, r).duration() >= lat + }) + filterParams.Add("latmin", lat.String()) + } + if lat, err := time.ParseDuration(r.FormValue("latmax")); err == nil { + name = append(name, fmt.Sprintf("latency <= %s", lat)) + conditions = append(conditions, func(t *parsedTrace, r *trace.UserRegionSummary) bool { + return regionInterval(t, r).duration() <= lat + }) + filterParams.Add("latmax", lat.String()) + } + + return ®ionFilter{ + name: strings.Join(name, ","), + cond: conditions, + params: filterParams, + }, nil +} diff --git a/src/internal/trace/goroutinesv2.go b/src/internal/trace/goroutinesv2.go index 7ed5771cd3..c5e5fadc0b 100644 --- a/src/internal/trace/goroutinesv2.go +++ b/src/internal/trace/goroutinesv2.go @@ -209,26 +209,8 @@ type goroutineSummary struct { activeRegions []*UserRegionSummary // stack of active regions } -// SummarizeGoroutines generates statistics for all goroutines in the trace. -func SummarizeGoroutines(events []tracev2.Event) map[tracev2.GoID]*GoroutineSummary { - // Create the analysis state. - b := goroutineStatsBuilder{ - gs: make(map[tracev2.GoID]*GoroutineSummary), - syscallingP: make(map[tracev2.ProcID]tracev2.GoID), - syscallingG: make(map[tracev2.GoID]tracev2.ProcID), - rangesP: make(map[rangeP]tracev2.GoID), - } - - // Process the trace. - for i := range events { - ev := &events[i] - b.event(ev) - } - return b.finalize() -} - -// goroutineStatsBuilder constructs per-goroutine time statistics for v2 traces. -type goroutineStatsBuilder struct { +// GoroutineSummarizer constructs per-goroutine time statistics for v2 traces. +type GoroutineSummarizer struct { // gs contains the map of goroutine summaries we're building up to return to the caller. gs map[tracev2.GoID]*GoroutineSummary @@ -247,22 +229,32 @@ type goroutineStatsBuilder struct { syncTs tracev2.Time // timestamp of the last sync event processed (or the first timestamp in the trace). } +// NewGoroutineSummarizer creates a new struct to build goroutine stats from a trace. +func NewGoroutineSummarizer() *GoroutineSummarizer { + return &GoroutineSummarizer{ + gs: make(map[tracev2.GoID]*GoroutineSummary), + syscallingP: make(map[tracev2.ProcID]tracev2.GoID), + syscallingG: make(map[tracev2.GoID]tracev2.ProcID), + rangesP: make(map[rangeP]tracev2.GoID), + } +} + type rangeP struct { id tracev2.ProcID name string } -// event feeds a single event into the stats builder. -func (b *goroutineStatsBuilder) event(ev *tracev2.Event) { - if b.syncTs == 0 { - b.syncTs = ev.Time() +// Event feeds a single event into the stats summarizer. +func (s *GoroutineSummarizer) Event(ev *tracev2.Event) { + if s.syncTs == 0 { + s.syncTs = ev.Time() } - b.lastTs = ev.Time() + s.lastTs = ev.Time() switch ev.Kind() { // Record sync time for the RangeActive events. case tracev2.EventSync: - b.syncTs = ev.Time() + s.syncTs = ev.Time() // Handle state transitions. case tracev2.EventStateTransition: @@ -278,14 +270,14 @@ func (b *goroutineStatsBuilder) event(ev *tracev2.Event) { } // Handle transition out. - g := b.gs[id] + g := s.gs[id] switch old { case tracev2.GoUndetermined, tracev2.GoNotExist: g = &GoroutineSummary{ID: id, goroutineSummary: &goroutineSummary{}} // If we're coming out of GoUndetermined, then the creation time is the // time of the last sync. if old == tracev2.GoUndetermined { - g.CreationTime = b.syncTs + g.CreationTime = s.syncTs } else { g.CreationTime = ev.Time() } @@ -304,14 +296,14 @@ func (b *goroutineStatsBuilder) event(ev *tracev2.Event) { // // N.B. ev.Goroutine() will always be NoGoroutine for the // Undetermined case, so this is will simply not fire. - if creatorG := b.gs[ev.Goroutine()]; creatorG != nil && len(creatorG.activeRegions) > 0 { + if creatorG := s.gs[ev.Goroutine()]; creatorG != nil && len(creatorG.activeRegions) > 0 { regions := creatorG.activeRegions s := regions[len(regions)-1] if s.TaskID != tracev2.NoTask { g.activeRegions = []*UserRegionSummary{{TaskID: s.TaskID, Start: ev}} } } - b.gs[g.ID] = g + s.gs[g.ID] = g case tracev2.GoRunning: // Record execution time as we transition out of running g.ExecTime += ev.Time().Sub(g.lastStartTime) @@ -341,8 +333,8 @@ func (b *goroutineStatsBuilder) event(ev *tracev2.Event) { g.lastSyscallBlockTime = 0 // Clear the syscall map. - delete(b.syscallingP, b.syscallingG[id]) - delete(b.syscallingG, id) + delete(s.syscallingP, s.syscallingG[id]) + delete(s.syscallingG, id) } } @@ -388,8 +380,8 @@ func (b *goroutineStatsBuilder) event(ev *tracev2.Event) { case tracev2.GoNotExist: g.finalize(ev.Time(), ev) case tracev2.GoSyscall: - b.syscallingP[ev.Proc()] = id - b.syscallingG[id] = ev.Proc() + s.syscallingP[ev.Proc()] = id + s.syscallingG[id] = ev.Proc() g.lastSyscallTime = ev.Time() } @@ -399,10 +391,10 @@ func (b *goroutineStatsBuilder) event(ev *tracev2.Event) { id := st.Resource.Proc() old, new := st.Proc() if old != new && new == tracev2.ProcIdle { - if goid, ok := b.syscallingP[id]; ok { - g := b.gs[goid] + if goid, ok := s.syscallingP[id]; ok { + g := s.gs[goid] g.lastSyscallBlockTime = ev.Time() - delete(b.syscallingP, id) + delete(s.syscallingP, id) } } } @@ -418,14 +410,14 @@ func (b *goroutineStatsBuilder) event(ev *tracev2.Event) { // goroutine blocked often in mark assist will have both high mark assist // and high block times. Those interested in a deeper view can look at the // trace viewer. - g = b.gs[r.Scope.Goroutine()] + g = s.gs[r.Scope.Goroutine()] case tracev2.ResourceProc: // N.B. These ranges are not actually bound to the goroutine, they're // bound to the P. But if we happen to be on the P the whole time, let's // try to attribute it to the goroutine. (e.g. GC sweeps are here.) - g = b.gs[ev.Goroutine()] + g = s.gs[ev.Goroutine()] if g != nil { - b.rangesP[rangeP{id: r.Scope.Proc(), name: r.Name}] = ev.Goroutine() + s.rangesP[rangeP{id: r.Scope.Proc(), name: r.Name}] = ev.Goroutine() } } if g == nil { @@ -433,9 +425,9 @@ func (b *goroutineStatsBuilder) event(ev *tracev2.Event) { } if ev.Kind() == tracev2.EventRangeActive { if ts := g.lastRangeTime[r.Name]; ts != 0 { - g.RangeTime[r.Name] += b.syncTs.Sub(ts) + g.RangeTime[r.Name] += s.syncTs.Sub(ts) } - g.lastRangeTime[r.Name] = b.syncTs + g.lastRangeTime[r.Name] = s.syncTs } else { g.lastRangeTime[r.Name] = ev.Time() } @@ -444,16 +436,16 @@ func (b *goroutineStatsBuilder) event(ev *tracev2.Event) { var g *GoroutineSummary switch r.Scope.Kind { case tracev2.ResourceGoroutine: - g = b.gs[r.Scope.Goroutine()] + g = s.gs[r.Scope.Goroutine()] case tracev2.ResourceProc: rp := rangeP{id: r.Scope.Proc(), name: r.Name} - if goid, ok := b.rangesP[rp]; ok { + if goid, ok := s.rangesP[rp]; ok { if goid == ev.Goroutine() { // As the comment in the RangeBegin case states, this is only OK // if we finish on the same goroutine we started on. - g = b.gs[goid] + g = s.gs[goid] } - delete(b.rangesP, rp) + delete(s.rangesP, rp) } } if g == nil { @@ -468,7 +460,7 @@ func (b *goroutineStatsBuilder) event(ev *tracev2.Event) { // Handle user-defined regions. case tracev2.EventRegionBegin: - g := b.gs[ev.Goroutine()] + g := s.gs[ev.Goroutine()] r := ev.Region() g.activeRegions = append(g.activeRegions, &UserRegionSummary{ Name: r.Type, @@ -477,7 +469,7 @@ func (b *goroutineStatsBuilder) event(ev *tracev2.Event) { GoroutineExecStats: g.snapshotStat(ev.Time()), }) case tracev2.EventRegionEnd: - g := b.gs[ev.Goroutine()] + g := s.gs[ev.Goroutine()] r := ev.Region() var sd *UserRegionSummary if regionStk := g.activeRegions; len(regionStk) > 0 { @@ -496,11 +488,11 @@ func (b *goroutineStatsBuilder) event(ev *tracev2.Event) { } } -// finalize indicates to the builder that we're done processing the trace. +// Finalize indicates to the summarizer that we're done processing the trace. // It cleans up any remaining state and returns the full summary. -func (b *goroutineStatsBuilder) finalize() map[tracev2.GoID]*GoroutineSummary { - for _, g := range b.gs { - g.finalize(b.lastTs, nil) +func (s *GoroutineSummarizer) Finalize() map[tracev2.GoID]*GoroutineSummary { + for _, g := range s.gs { + g.finalize(s.lastTs, nil) // Sort based on region start time. sort.Slice(g.Regions, func(i, j int) bool { @@ -516,7 +508,7 @@ func (b *goroutineStatsBuilder) finalize() map[tracev2.GoID]*GoroutineSummary { }) g.goroutineSummary = nil } - return b.gs + return s.gs } // RelatedGoroutinesV2 finds a set of goroutines related to goroutine goid for v2 traces. diff --git a/src/internal/trace/goroutinesv2_test.go b/src/internal/trace/goroutinesv2_test.go index ecd7f2631d..ea689aca65 100644 --- a/src/internal/trace/goroutinesv2_test.go +++ b/src/internal/trace/goroutinesv2_test.go @@ -92,26 +92,30 @@ func basicSummaryChecks(t *testing.T, summary *GoroutineSummary) { } func summarizeTraceTest(t *testing.T, testPath string) map[tracev2.GoID]*GoroutineSummary { - r, _, err := testtrace.ParseFile(testPath) + trace, _, err := testtrace.ParseFile(testPath) if err != nil { t.Fatalf("malformed test %s: bad trace file: %v", testPath, err) } - var events []tracev2.Event - tr, err := tracev2.NewReader(r) + // Create the analysis state. + s := NewGoroutineSummarizer() + + // Create a reader. + r, err := tracev2.NewReader(trace) if err != nil { - t.Fatalf("failed to create trace reader %s: %v", testPath, err) + t.Fatalf("failed to create trace reader for %s: %v", testPath, err) } + // Process the trace. for { - ev, err := tr.ReadEvent() + ev, err := r.ReadEvent() if err == io.EOF { break } if err != nil { t.Fatalf("failed to process trace %s: %v", testPath, err) } - events = append(events, ev) + s.Event(&ev) } - return SummarizeGoroutines(events) + return s.Finalize() } func checkRegionEvents(t *testing.T, wantStart, wantEnd tracev2.EventKind, goid tracev2.GoID, region *UserRegionSummary) { diff --git a/src/internal/trace/traceviewer/http.go b/src/internal/trace/traceviewer/http.go index ac2803be2d..b279b62a23 100644 --- a/src/internal/trace/traceviewer/http.go +++ b/src/internal/trace/traceviewer/http.go @@ -185,7 +185,7 @@ var templMain = template.Must(template.New("").Parse(`

From 5dde69fd404cb6d0de89b0109a7f7b03e44c26f7 Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Fri, 17 Nov 2023 17:56:27 +0000 Subject: [PATCH 064/313] internal/trace/v2: redefine NoTask and add BackgroundTask The v2 trace parser currently handles task inheritance and region task association incorrectly. It assumes that a TaskID of 0 means that there is no task. However, this is only true for task events. A TaskID of 0 means that a region gets assigned to the "background task." The parser currently has no concept of a "background task." Fix this by defining the background task as task ID 0 and redefining NoTask to ^uint64(0). This aligns the TaskID values more closely with other IDs in the parser and also enables disambiguating these two cases. For #60773. For #63960. Change-Id: I09c8217b33b87c8f8f8ea3b0203ed83fd3b61e11 Reviewed-on: https://go-review.googlesource.com/c/go/+/543019 Reviewed-by: Michael Pratt Auto-Submit: Michael Knyszek TryBot-Bypass: Michael Knyszek --- src/internal/trace/goroutinesv2.go | 4 +--- src/internal/trace/v2/event.go | 10 ++++++++-- src/internal/trace/v2/order.go | 7 +++++++ .../generators/go122-task-across-generations.go | 2 +- src/internal/trace/v2/testtrace/validation.go | 7 ++++++- src/internal/trace/v2/trace_test.go | 2 +- 6 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/internal/trace/goroutinesv2.go b/src/internal/trace/goroutinesv2.go index c5e5fadc0b..65856fb80e 100644 --- a/src/internal/trace/goroutinesv2.go +++ b/src/internal/trace/goroutinesv2.go @@ -299,9 +299,7 @@ func (s *GoroutineSummarizer) Event(ev *tracev2.Event) { if creatorG := s.gs[ev.Goroutine()]; creatorG != nil && len(creatorG.activeRegions) > 0 { regions := creatorG.activeRegions s := regions[len(regions)-1] - if s.TaskID != tracev2.NoTask { - g.activeRegions = []*UserRegionSummary{{TaskID: s.TaskID, Start: ev}} - } + g.activeRegions = []*UserRegionSummary{{TaskID: s.TaskID, Start: ev}} } s.gs[g.ID] = g case tracev2.GoRunning: diff --git a/src/internal/trace/v2/event.go b/src/internal/trace/v2/event.go index 3700cbcc2f..763313c332 100644 --- a/src/internal/trace/v2/event.go +++ b/src/internal/trace/v2/event.go @@ -203,8 +203,14 @@ type RangeAttribute struct { // are of the same type). type TaskID uint64 -// NoTask indicates the lack of a task. -const NoTask = TaskID(0) +const ( + // NoTask indicates the lack of a task. + NoTask = TaskID(^uint64(0)) + + // BackgroundTask is the global task that events are attached to if there was + // no other task in the context at the point the event was emitted. + BackgroundTask = TaskID(0) +) // Task provides details about a Task event. type Task struct { diff --git a/src/internal/trace/v2/order.go b/src/internal/trace/v2/order.go index 8b503d4dc4..531b45eb02 100644 --- a/src/internal/trace/v2/order.go +++ b/src/internal/trace/v2/order.go @@ -525,6 +525,13 @@ func (o *ordering) advance(ev *baseEvent, evt *evTable, m ThreadID, gen uint64) // Get the parent ID, but don't validate it. There's no guarantee // we actually have information on whether it's active. parentID := TaskID(ev.args[1]) + if parentID == BackgroundTask { + // Note: a value of 0 here actually means no parent, *not* the + // background task. Automatic background task attachment only + // applies to regions. + parentID = NoTask + ev.args[1] = uint64(NoTask) + } // Validate the name and record it. We'll need to pass it through to // EvUserTaskEnd. diff --git a/src/internal/trace/v2/testdata/generators/go122-task-across-generations.go b/src/internal/trace/v2/testdata/generators/go122-task-across-generations.go index 94e9933996..06ef96e51a 100644 --- a/src/internal/trace/v2/testdata/generators/go122-task-across-generations.go +++ b/src/internal/trace/v2/testdata/generators/go122-task-across-generations.go @@ -29,7 +29,7 @@ func gen(t *testgen.Trace) { b1 := g1.Batch(trace.ThreadID(0), 0) b1.Event("ProcStatus", trace.ProcID(0), go122.ProcRunning) b1.Event("GoStatus", trace.GoID(1), trace.ThreadID(0), go122.GoRunning) - b1.Event("UserTaskBegin", trace.TaskID(2), trace.NoTask, "my task", testgen.NoStack) + b1.Event("UserTaskBegin", trace.TaskID(2), trace.TaskID(0) /* 0 means no parent, not background */, "my task", testgen.NoStack) g2 := t.Generation(2) diff --git a/src/internal/trace/v2/testtrace/validation.go b/src/internal/trace/v2/testtrace/validation.go index a2654a10e4..448ef9d9dd 100644 --- a/src/internal/trace/v2/testtrace/validation.go +++ b/src/internal/trace/v2/testtrace/validation.go @@ -256,9 +256,14 @@ func (v *Validator) Event(ev trace.Event) error { case trace.EventTaskBegin: // Validate task begin. t := ev.Task() - if t.ID == trace.NoTask { + if t.ID == trace.NoTask || t.ID == trace.BackgroundTask { + // The background task should never have an event emitted for it. e.Errorf("found invalid task ID for task of type %s", t.Type) } + if t.Parent == trace.BackgroundTask { + // It's not possible for a task to be a subtask of the background task. + e.Errorf("found background task as the parent for task of type %s", t.Type) + } // N.B. Don't check the task type. Empty string is a valid task type. v.tasks[t.ID] = t.Type case trace.EventTaskEnd: diff --git a/src/internal/trace/v2/trace_test.go b/src/internal/trace/v2/trace_test.go index 7823b01e93..b2d7781991 100644 --- a/src/internal/trace/v2/trace_test.go +++ b/src/internal/trace/v2/trace_test.go @@ -35,7 +35,7 @@ func TestTraceAnnotations(t *testing.T) { {trace.EventRegionEnd, trace.TaskID(1), []string{"region0"}}, {trace.EventTaskEnd, trace.TaskID(1), []string{"task0"}}, // Currently, pre-existing region is not recorded to avoid allocations. - {trace.EventRegionBegin, trace.NoTask, []string{"post-existing region"}}, + {trace.EventRegionBegin, trace.BackgroundTask, []string{"post-existing region"}}, } r, err := trace.NewReader(bytes.NewReader(tb)) if err != nil { From 816ee0be38a08b2636a1e870cb1dc1e9b27b742e Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Mon, 13 Nov 2023 21:06:40 +0000 Subject: [PATCH 065/313] internal/trace: add task analysis for v2 traces For v1 traces, cmd/trace contains code for analyzing tasks separately from the goroutine analysis code present in internal/trace. As I started to look into porting that code to v2 traces, I noticed that it wouldn't be too hard to just generalize the existing v2 goroutine summary code to generate exactly the same information. This change does exactly that. For #60773. For #63960. Change-Id: I0cdd9bf9ba11fb292a9ffc37dbf18c2a6a2483b8 Reviewed-on: https://go-review.googlesource.com/c/go/+/542076 Auto-Submit: Michael Knyszek LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Pratt --- src/cmd/trace/v2/main.go | 12 +- src/cmd/trace/v2/pprof.go | 4 +- .../trace/{goroutinesv2.go => summary.go} | 103 +- .../{goroutinesv2_test.go => summary_test.go} | 173 ++- src/internal/trace/v2/testdata/mktests.go | 120 +- .../tests/go122-annotations-stress.test | 1179 +++++++++++++++++ 6 files changed, 1554 insertions(+), 37 deletions(-) rename src/internal/trace/{goroutinesv2.go => summary.go} (85%) rename src/internal/trace/{goroutinesv2_test.go => summary_test.go} (59%) create mode 100644 src/internal/trace/v2/testdata/tests/go122-annotations-stress.test diff --git a/src/cmd/trace/v2/main.go b/src/cmd/trace/v2/main.go index b10373920a..87912f563f 100644 --- a/src/cmd/trace/v2/main.go +++ b/src/cmd/trace/v2/main.go @@ -75,8 +75,8 @@ func Main(traceFile, httpAddr, pprof string, debug int) error { mux.Handle("/static/", traceviewer.StaticHandler()) // Goroutines handlers. - mux.HandleFunc("/goroutines", GoroutinesHandlerFunc(parsed.gSummaries)) - mux.HandleFunc("/goroutine", GoroutineHandler(parsed.gSummaries)) + mux.HandleFunc("/goroutines", GoroutinesHandlerFunc(parsed.summary.Goroutines)) + mux.HandleFunc("/goroutine", GoroutineHandler(parsed.summary.Goroutines)) // MMU handler. mux.HandleFunc("/mmu", traceviewer.MMUHandlerFunc(ranges, mutatorUtil)) @@ -98,8 +98,8 @@ func Main(traceFile, httpAddr, pprof string, debug int) error { } type parsedTrace struct { - events []tracev2.Event - gSummaries map[tracev2.GoID]*trace.GoroutineSummary + events []tracev2.Event + summary *trace.Summary } func parseTrace(tr io.Reader) (*parsedTrace, error) { @@ -107,7 +107,7 @@ func parseTrace(tr io.Reader) (*parsedTrace, error) { if err != nil { return nil, fmt.Errorf("failed to create trace reader: %w", err) } - s := trace.NewGoroutineSummarizer() + s := trace.NewSummarizer() t := new(parsedTrace) for { ev, err := r.ReadEvent() @@ -119,7 +119,7 @@ func parseTrace(tr io.Reader) (*parsedTrace, error) { t.events = append(t.events, ev) s.Event(&t.events[len(t.events)-1]) } - t.gSummaries = s.Finalize() + t.summary = s.Finalize() return t, nil } diff --git a/src/cmd/trace/v2/pprof.go b/src/cmd/trace/v2/pprof.go index 39ef96ad26..c6b1195b63 100644 --- a/src/cmd/trace/v2/pprof.go +++ b/src/cmd/trace/v2/pprof.go @@ -57,7 +57,7 @@ func pprofMatchingGoroutines(id string, t *parsedTrace) (map[tracev2.GoID][]inte return nil, fmt.Errorf("invalid goroutine type: %v", id) } res := make(map[tracev2.GoID][]interval) - for _, g := range t.gSummaries { + for _, g := range t.summary.Goroutines { if g.PC != pc { continue } @@ -81,7 +81,7 @@ func pprofMatchingRegions(filter *regionFilter, t *parsedTrace) (map[tracev2.GoI } gToIntervals := make(map[tracev2.GoID][]interval) - for _, g := range t.gSummaries { + for _, g := range t.summary.Goroutines { for _, r := range g.Regions { if !filter.match(t, r) { continue diff --git a/src/internal/trace/goroutinesv2.go b/src/internal/trace/summary.go similarity index 85% rename from src/internal/trace/goroutinesv2.go rename to src/internal/trace/summary.go index 65856fb80e..f57146e950 100644 --- a/src/internal/trace/goroutinesv2.go +++ b/src/internal/trace/summary.go @@ -11,6 +11,12 @@ import ( "time" ) +// Summary is the analysis result produced by the summarizer. +type Summary struct { + Goroutines map[tracev2.GoID]*GoroutineSummary + Tasks map[tracev2.TaskID]*UserTaskSummary +} + // GoroutineSummary contains statistics and execution details of a single goroutine. // (For v2 traces.) type GoroutineSummary struct { @@ -35,6 +41,29 @@ type GoroutineSummary struct { *goroutineSummary } +// UserTaskSummary represents a task in the trace. +type UserTaskSummary struct { + ID tracev2.TaskID + Name string + Parent *UserTaskSummary // nil if the parent is unknown. + Children []*UserTaskSummary + + // Task begin event. An EventTaskBegin event or nil. + Start *tracev2.Event + + // End end event. Normally EventTaskEnd event or nil, + End *tracev2.Event + + // Logs is a list of tracev2.EventLog events associated with the task. + Logs []*tracev2.Event + + // List of regions in the task, sorted based on the start time. + Regions []*UserRegionSummary + + // Goroutines is the set of goroutines associated with this task. + Goroutines map[tracev2.GoID]*GoroutineSummary +} + // UserRegionSummary represents a region and goroutine execution stats // while the region was active. (For v2 traces.) type UserRegionSummary struct { @@ -209,11 +238,14 @@ type goroutineSummary struct { activeRegions []*UserRegionSummary // stack of active regions } -// GoroutineSummarizer constructs per-goroutine time statistics for v2 traces. -type GoroutineSummarizer struct { +// Summarizer constructs per-goroutine time statistics for v2 traces. +type Summarizer struct { // gs contains the map of goroutine summaries we're building up to return to the caller. gs map[tracev2.GoID]*GoroutineSummary + // tasks contains the map of task summaries we're building up to return to the caller. + tasks map[tracev2.TaskID]*UserTaskSummary + // syscallingP and syscallingG represent a binding between a P and G in a syscall. // Used to correctly identify and clean up after syscalls (blocking or otherwise). syscallingP map[tracev2.ProcID]tracev2.GoID @@ -229,10 +261,11 @@ type GoroutineSummarizer struct { syncTs tracev2.Time // timestamp of the last sync event processed (or the first timestamp in the trace). } -// NewGoroutineSummarizer creates a new struct to build goroutine stats from a trace. -func NewGoroutineSummarizer() *GoroutineSummarizer { - return &GoroutineSummarizer{ +// NewSummarizer creates a new struct to build goroutine stats from a trace. +func NewSummarizer() *Summarizer { + return &Summarizer{ gs: make(map[tracev2.GoID]*GoroutineSummary), + tasks: make(map[tracev2.TaskID]*UserTaskSummary), syscallingP: make(map[tracev2.ProcID]tracev2.GoID), syscallingG: make(map[tracev2.GoID]tracev2.ProcID), rangesP: make(map[rangeP]tracev2.GoID), @@ -245,7 +278,7 @@ type rangeP struct { } // Event feeds a single event into the stats summarizer. -func (s *GoroutineSummarizer) Event(ev *tracev2.Event) { +func (s *Summarizer) Event(ev *tracev2.Event) { if s.syncTs == 0 { s.syncTs = ev.Time() } @@ -460,12 +493,17 @@ func (s *GoroutineSummarizer) Event(ev *tracev2.Event) { case tracev2.EventRegionBegin: g := s.gs[ev.Goroutine()] r := ev.Region() - g.activeRegions = append(g.activeRegions, &UserRegionSummary{ + region := &UserRegionSummary{ Name: r.Type, TaskID: r.Task, Start: ev, GoroutineExecStats: g.snapshotStat(ev.Time()), - }) + } + g.activeRegions = append(g.activeRegions, region) + // Associate the region and current goroutine to the task. + task := s.getOrAddTask(r.Task) + task.Regions = append(task.Regions, region) + task.Goroutines[g.ID] = g case tracev2.EventRegionEnd: g := s.gs[ev.Goroutine()] r := ev.Region() @@ -476,19 +514,61 @@ func (s *GoroutineSummarizer) Event(ev *tracev2.Event) { sd = regionStk[n-1] regionStk = regionStk[:n-1] g.activeRegions = regionStk + // N.B. No need to add the region to a task; the EventRegionBegin already handled it. } else { // This is an "end" without a start. Just fabricate the region now. sd = &UserRegionSummary{Name: r.Type, TaskID: r.Task} + // Associate the region and current goroutine to the task. + task := s.getOrAddTask(r.Task) + task.Goroutines[g.ID] = g + task.Regions = append(task.Regions, sd) } sd.GoroutineExecStats = g.snapshotStat(ev.Time()).sub(sd.GoroutineExecStats) sd.End = ev g.Regions = append(g.Regions, sd) + + // Handle tasks and logs. + case tracev2.EventTaskBegin, tracev2.EventTaskEnd: + // Initialize the task. + t := ev.Task() + task := s.getOrAddTask(t.ID) + task.Name = t.Type + task.Goroutines[ev.Goroutine()] = s.gs[ev.Goroutine()] + if ev.Kind() == tracev2.EventTaskBegin { + task.Start = ev + } else { + task.End = ev + } + // Initialize the parent, if one exists and it hasn't been done yet. + // We need to avoid doing it twice, otherwise we could appear twice + // in the parent's Children list. + if t.Parent != tracev2.NoTask && task.Parent == nil { + parent := s.getOrAddTask(t.Parent) + task.Parent = parent + parent.Children = append(parent.Children, task) + } + case tracev2.EventLog: + log := ev.Log() + // Just add the log to the task. We'll create the task if it + // doesn't exist (it's just been mentioned now). + task := s.getOrAddTask(log.Task) + task.Goroutines[ev.Goroutine()] = s.gs[ev.Goroutine()] + task.Logs = append(task.Logs, ev) } } +func (s *Summarizer) getOrAddTask(id tracev2.TaskID) *UserTaskSummary { + task := s.tasks[id] + if task == nil { + task = &UserTaskSummary{ID: id, Goroutines: make(map[tracev2.GoID]*GoroutineSummary)} + s.tasks[id] = task + } + return task +} + // Finalize indicates to the summarizer that we're done processing the trace. // It cleans up any remaining state and returns the full summary. -func (s *GoroutineSummarizer) Finalize() map[tracev2.GoID]*GoroutineSummary { +func (s *Summarizer) Finalize() *Summary { for _, g := range s.gs { g.finalize(s.lastTs, nil) @@ -506,7 +586,10 @@ func (s *GoroutineSummarizer) Finalize() map[tracev2.GoID]*GoroutineSummary { }) g.goroutineSummary = nil } - return s.gs + return &Summary{ + Goroutines: s.gs, + Tasks: s.tasks, + } } // RelatedGoroutinesV2 finds a set of goroutines related to goroutine goid for v2 traces. diff --git a/src/internal/trace/goroutinesv2_test.go b/src/internal/trace/summary_test.go similarity index 59% rename from src/internal/trace/goroutinesv2_test.go rename to src/internal/trace/summary_test.go index ea689aca65..8b377ff6b6 100644 --- a/src/internal/trace/goroutinesv2_test.go +++ b/src/internal/trace/summary_test.go @@ -12,14 +12,14 @@ import ( ) func TestSummarizeGoroutinesTrace(t *testing.T) { - summaries := summarizeTraceTest(t, "v2/testdata/tests/go122-gc-stress.test") + summaries := summarizeTraceTest(t, "v2/testdata/tests/go122-gc-stress.test").Goroutines var ( hasSchedWaitTime bool hasSyncBlockTime bool hasGCMarkAssistTime bool ) for _, summary := range summaries { - basicSummaryChecks(t, summary) + basicGoroutineSummaryChecks(t, summary) hasSchedWaitTime = hasSchedWaitTime || summary.SchedWaitTime > 0 if dt, ok := summary.BlockTimeByReason["sync"]; ok && dt > 0 { hasSyncBlockTime = true @@ -40,7 +40,7 @@ func TestSummarizeGoroutinesTrace(t *testing.T) { } func TestSummarizeGoroutinesRegionsTrace(t *testing.T) { - summaries := summarizeTraceTest(t, "v2/testdata/tests/go122-annotations.test") + summaries := summarizeTraceTest(t, "v2/testdata/tests/go122-annotations.test").Goroutines type region struct { startKind tracev2.EventKind endKind tracev2.EventKind @@ -58,7 +58,7 @@ func TestSummarizeGoroutinesRegionsTrace(t *testing.T) { "post-existing region": {tracev2.EventRegionBegin, tracev2.EventBad}, } for _, summary := range summaries { - basicSummaryChecks(t, summary) + basicGoroutineSummaryChecks(t, summary) for _, region := range summary.Regions { want, ok := wantRegions[region.Name] if !ok { @@ -73,7 +73,166 @@ func TestSummarizeGoroutinesRegionsTrace(t *testing.T) { } } -func basicSummaryChecks(t *testing.T, summary *GoroutineSummary) { +func TestSummarizeTasksTrace(t *testing.T) { + summaries := summarizeTraceTest(t, "v2/testdata/tests/go122-annotations-stress.test").Tasks + type task struct { + name string + parent *tracev2.TaskID + children []tracev2.TaskID + logs []tracev2.Log + goroutines []tracev2.GoID + } + parent := func(id tracev2.TaskID) *tracev2.TaskID { + p := new(tracev2.TaskID) + *p = id + return p + } + wantTasks := map[tracev2.TaskID]task{ + tracev2.BackgroundTask: { + // The background task (0) is never any task's parent. + logs: []tracev2.Log{ + {Task: tracev2.BackgroundTask, Category: "log", Message: "before do"}, + {Task: tracev2.BackgroundTask, Category: "log", Message: "before do"}, + }, + goroutines: []tracev2.GoID{1}, + }, + 1: { + // This started before tracing started and has no parents. + // Task 2 is technically a child, but we lost that information. + children: []tracev2.TaskID{3, 7, 16}, + logs: []tracev2.Log{ + {Task: 1, Category: "log", Message: "before do"}, + {Task: 1, Category: "log", Message: "before do"}, + }, + goroutines: []tracev2.GoID{1}, + }, + 2: { + // This started before tracing started and its parent is technically (1), but that information was lost. + children: []tracev2.TaskID{8, 17}, + logs: []tracev2.Log{ + {Task: 2, Category: "log", Message: "before do"}, + {Task: 2, Category: "log", Message: "before do"}, + }, + goroutines: []tracev2.GoID{1}, + }, + 3: { + parent: parent(1), + children: []tracev2.TaskID{10, 19}, + logs: []tracev2.Log{ + {Task: 3, Category: "log", Message: "before do"}, + {Task: 3, Category: "log", Message: "before do"}, + }, + goroutines: []tracev2.GoID{1}, + }, + 4: { + // Explicitly, no parent. + children: []tracev2.TaskID{12, 21}, + logs: []tracev2.Log{ + {Task: 4, Category: "log", Message: "before do"}, + {Task: 4, Category: "log", Message: "before do"}, + }, + goroutines: []tracev2.GoID{1}, + }, + 12: { + parent: parent(4), + children: []tracev2.TaskID{13}, + logs: []tracev2.Log{ + // TODO(mknyszek): This is computed asynchronously in the trace, + // which makes regenerating this test very annoying, since it will + // likely break this test. Resolve this by making the order not matter. + {Task: 12, Category: "log2", Message: "do"}, + {Task: 12, Category: "log", Message: "fanout region4"}, + {Task: 12, Category: "log", Message: "fanout region0"}, + {Task: 12, Category: "log", Message: "fanout region1"}, + {Task: 12, Category: "log", Message: "fanout region2"}, + {Task: 12, Category: "log", Message: "before do"}, + {Task: 12, Category: "log", Message: "fanout region3"}, + }, + goroutines: []tracev2.GoID{1, 5, 6, 7, 8, 9}, + }, + 13: { + // Explicitly, no children. + parent: parent(12), + logs: []tracev2.Log{ + {Task: 13, Category: "log2", Message: "do"}, + }, + goroutines: []tracev2.GoID{7}, + }, + } + for id, summary := range summaries { + want, ok := wantTasks[id] + if !ok { + continue + } + if id != summary.ID { + t.Errorf("ambiguous task %d (or %d?): field likely set incorrectly", id, summary.ID) + } + + // Check parent. + if want.parent != nil { + if summary.Parent == nil { + t.Errorf("expected parent %d for task %d without a parent", *want.parent, id) + } else if summary.Parent.ID != *want.parent { + t.Errorf("bad parent for task %d: want %d, got %d", id, *want.parent, summary.Parent.ID) + } + } else if summary.Parent != nil { + t.Errorf("unexpected parent %d for task %d", summary.Parent.ID, id) + } + + // Check children. + gotChildren := make(map[tracev2.TaskID]struct{}) + for _, child := range summary.Children { + gotChildren[child.ID] = struct{}{} + } + for _, wantChild := range want.children { + if _, ok := gotChildren[wantChild]; ok { + delete(gotChildren, wantChild) + } else { + t.Errorf("expected child task %d for task %d not found", wantChild, id) + } + } + if len(gotChildren) != 0 { + for child := range gotChildren { + t.Errorf("unexpected child task %d for task %d", child, id) + } + } + + // Check logs. + if len(want.logs) != len(summary.Logs) { + t.Errorf("wanted %d logs for task %d, got %d logs instead", len(want.logs), id, len(summary.Logs)) + } else { + for i := range want.logs { + if want.logs[i] != summary.Logs[i].Log() { + t.Errorf("log mismatch: want %#v, got %#v", want.logs[i], summary.Logs[i].Log()) + } + } + } + + // Check goroutines. + if len(want.goroutines) != len(summary.Goroutines) { + t.Errorf("wanted %d goroutines for task %d, got %d goroutines instead", len(want.goroutines), id, len(summary.Goroutines)) + } else { + for _, goid := range want.goroutines { + g, ok := summary.Goroutines[goid] + if !ok { + t.Errorf("want goroutine %d for task %d, not found", goid, id) + continue + } + if g.ID != goid { + t.Errorf("goroutine summary for %d does not match task %d listing of %d", g.ID, id, goid) + } + } + } + + // Marked as seen. + delete(wantTasks, id) + } + if len(wantTasks) != 0 { + t.Errorf("failed to find tasks: %#v", wantTasks) + } +} + +func basicGoroutineSummaryChecks(t *testing.T, summary *GoroutineSummary) { if summary.ID == tracev2.NoGoroutine { t.Error("summary found for no goroutine") return @@ -91,13 +250,13 @@ func basicSummaryChecks(t *testing.T, summary *GoroutineSummary) { } } -func summarizeTraceTest(t *testing.T, testPath string) map[tracev2.GoID]*GoroutineSummary { +func summarizeTraceTest(t *testing.T, testPath string) *Summary { trace, _, err := testtrace.ParseFile(testPath) if err != nil { t.Fatalf("malformed test %s: bad trace file: %v", testPath, err) } // Create the analysis state. - s := NewGoroutineSummarizer() + s := NewSummarizer() // Create a reader. r, err := tracev2.NewReader(trace) diff --git a/src/internal/trace/v2/testdata/mktests.go b/src/internal/trace/v2/testdata/mktests.go index 5242163594..96cbbe4b1f 100644 --- a/src/internal/trace/v2/testdata/mktests.go +++ b/src/internal/trace/v2/testdata/mktests.go @@ -7,7 +7,12 @@ package main import ( + "bytes" "fmt" + "internal/trace/v2/raw" + "internal/trace/v2/version" + "internal/txtar" + "io" "log" "os" "os/exec" @@ -17,27 +22,58 @@ import ( func main() { log.SetFlags(0) - if err := run(); err != nil { + ctx, err := newContext() + if err != nil { + log.Fatal(err) + } + if err := ctx.runGenerators(); err != nil { + log.Fatal(err) + } + if err := ctx.runTestProg("./testprog/annotations.go"); err != nil { + log.Fatal(err) + } + if err := ctx.runTestProg("./testprog/annotations-stress.go"); err != nil { log.Fatal(err) } } -func run() error { +type context struct { + testNames map[string]struct{} + filter *regexp.Regexp +} + +func newContext() (*context, error) { + var filter *regexp.Regexp + var err error + if pattern := os.Getenv("GOTRACETEST"); pattern != "" { + filter, err = regexp.Compile(pattern) + if err != nil { + return nil, fmt.Errorf("compiling regexp %q for GOTRACETEST: %v", pattern, err) + } + } + return &context{ + testNames: make(map[string]struct{}), + filter: filter, + }, nil +} + +func (ctx *context) register(testName string) (skip bool, err error) { + if _, ok := ctx.testNames[testName]; ok { + return true, fmt.Errorf("duplicate test %s found", testName) + } + if ctx.filter != nil { + return !ctx.filter.MatchString(testName), nil + } + return false, nil +} + +func (ctx *context) runGenerators() error { generators, err := filepath.Glob("./generators/*.go") if err != nil { return fmt.Errorf("reading generators: %v", err) } genroot := "./tests" - // Grab a pattern, if any. - var re *regexp.Regexp - if pattern := os.Getenv("GOTRACETEST"); pattern != "" { - re, err = regexp.Compile(pattern) - if err != nil { - return fmt.Errorf("compiling regexp %q for GOTRACETEST: %v", pattern, err) - } - } - if err := os.MkdirAll(genroot, 0777); err != nil { return fmt.Errorf("creating generated root: %v", err) } @@ -46,7 +82,11 @@ func run() error { name = name[:len(name)-len(filepath.Ext(name))] // Skip if we have a pattern and this test doesn't match. - if re != nil && !re.MatchString(name) { + skip, err := ctx.register(name) + if err != nil { + return err + } + if skip { continue } @@ -64,3 +104,59 @@ func run() error { } return nil } + +func (ctx *context) runTestProg(progPath string) error { + name := filepath.Base(progPath) + name = name[:len(name)-len(filepath.Ext(name))] + name = fmt.Sprintf("go1%d-%s", version.Current, name) + + // Skip if we have a pattern and this test doesn't match. + skip, err := ctx.register(name) + if err != nil { + return err + } + if skip { + return nil + } + + // Create command. + var trace, stderr bytes.Buffer + cmd := exec.Command("go", "run", progPath) + // TODO(mknyszek): Remove if goexperiment.Exectracer2 becomes the default. + cmd.Env = append(os.Environ(), "GOEXPERIMENT=exectracer2") + cmd.Stdout = &trace + cmd.Stderr = &stderr + + // Run trace program; the trace will appear in stdout. + fmt.Fprintf(os.Stderr, "running trace program %s...\n", name) + if err := cmd.Run(); err != nil { + log.Fatalf("running trace program: %v:\n%s", err, stderr.String()) + } + + // Write out the trace. + var textTrace bytes.Buffer + r, err := raw.NewReader(&trace) + if err != nil { + log.Fatalf("reading trace: %v", err) + } + w, err := raw.NewTextWriter(&textTrace, version.Current) + for { + ev, err := r.ReadEvent() + if err == io.EOF { + break + } + if err != nil { + log.Fatalf("reading trace: %v", err) + } + if err := w.WriteEvent(ev); err != nil { + log.Fatalf("writing trace: %v", err) + } + } + testData := txtar.Format(&txtar.Archive{ + Files: []txtar.File{ + {Name: "expect", Data: []byte("SUCCESS")}, + {Name: "trace", Data: textTrace.Bytes()}, + }, + }) + return os.WriteFile(fmt.Sprintf("./tests/%s.test", name), testData, 0o664) +} diff --git a/src/internal/trace/v2/testdata/tests/go122-annotations-stress.test b/src/internal/trace/v2/testdata/tests/go122-annotations-stress.test new file mode 100644 index 0000000000..fe3c84b16e --- /dev/null +++ b/src/internal/trace/v2/testdata/tests/go122-annotations-stress.test @@ -0,0 +1,1179 @@ +-- expect -- +SUCCESS +-- trace -- +Trace Go1.22 +EventBatch gen=1 m=18446744073709551615 time=2753926854385 size=5 +Frequency freq=15625000 +EventBatch gen=1 m=1986497 time=2753925247434 size=1430 +ProcStart dt=336 p=2 p_seq=1 +GoStart dt=191 g=19 g_seq=1 +HeapAlloc dt=389 heapalloc_value=1622016 +HeapAlloc dt=4453 heapalloc_value=1662976 +GoBlock dt=572 reason_string=12 stack=29 +ProcStop dt=26 +ProcStart dt=160734 p=2 p_seq=2 +ProcStop dt=21 +ProcStart dt=159292 p=0 p_seq=7 +GoStart dt=299 g=49 g_seq=1 +UserRegionBegin dt=183 task=8 name_string=33 stack=26 +UserLog dt=26 task=8 key_string=24 value_string=49 stack=27 +UserRegionEnd dt=8 task=8 name_string=33 stack=28 +GoDestroy dt=3 +GoStart dt=20 g=50 g_seq=1 +UserRegionBegin dt=40 task=8 name_string=35 stack=26 +UserLog dt=9 task=8 key_string=24 value_string=50 stack=27 +UserRegionEnd dt=2 task=8 name_string=35 stack=28 +GoDestroy dt=1 +ProcStop dt=18 +ProcStart dt=141801 p=4 p_seq=5 +ProcStop dt=18 +ProcStart dt=16860 p=4 p_seq=6 +GoUnblock dt=53 g=1 g_seq=5 stack=0 +GoUnblock dt=9 g=51 g_seq=3 stack=0 +GoStart dt=162 g=51 g_seq=4 +UserTaskEnd dt=35 task=9 stack=36 +UserRegionEnd dt=16 task=8 name_string=31 stack=28 +GoDestroy dt=2 +GoStart dt=20 g=1 g_seq=6 +UserTaskEnd dt=14 task=8 stack=54 +UserLog dt=26 task=3 key_string=24 value_string=51 stack=55 +UserTaskBegin dt=14 task=10 parent_task=3 name_string=26 stack=56 +UserLog dt=42 task=10 key_string=27 value_string=52 stack=57 +UserRegionBegin dt=12 task=10 name_string=29 stack=58 +GoCreate dt=36 new_g=35 new_stack=17 stack=59 +GoCreate dt=11 new_g=36 new_stack=17 stack=59 +GoCreate dt=18 new_g=37 new_stack=17 stack=59 +GoCreate dt=10 new_g=38 new_stack=17 stack=59 +GoCreate dt=6 new_g=39 new_stack=17 stack=59 +GoCreate dt=8 new_g=40 new_stack=17 stack=59 +UserRegionEnd dt=7 task=10 name_string=29 stack=60 +GoBlock dt=9 reason_string=19 stack=61 +GoStart dt=15 g=40 g_seq=1 +UserRegionBegin dt=110 task=10 name_string=53 stack=26 +UserLog dt=16 task=10 key_string=24 value_string=54 stack=27 +UserRegionEnd dt=2 task=10 name_string=53 stack=28 +GoDestroy dt=2 +GoStart dt=6 g=38 g_seq=1 +UserRegionBegin dt=31 task=10 name_string=30 stack=26 +UserLog dt=5 task=10 key_string=24 value_string=55 stack=27 +UserRegionEnd dt=2 task=10 name_string=30 stack=28 +GoDestroy dt=1 +GoStart dt=2 g=39 g_seq=1 +UserRegionBegin dt=23 task=10 name_string=56 stack=26 +UserLog dt=6 task=10 key_string=24 value_string=57 stack=27 +UserRegionEnd dt=1 task=10 name_string=56 stack=28 +GoDestroy dt=1 +GoStart dt=8 g=35 g_seq=1 +UserRegionBegin dt=17 task=10 name_string=33 stack=26 +UserLog dt=4 task=10 key_string=24 value_string=58 stack=27 +UserRegionEnd dt=2 task=10 name_string=33 stack=28 +GoDestroy dt=1 +GoStart dt=3 g=36 g_seq=1 +UserRegionBegin dt=19 task=10 name_string=35 stack=26 +UserLog dt=4 task=10 key_string=24 value_string=59 stack=27 +UserRegionEnd dt=2 task=10 name_string=35 stack=28 +GoDestroy dt=1 +ProcStop dt=11 +ProcStart dt=142205 p=0 p_seq=9 +ProcStop dt=19 +ProcStart dt=16811 p=0 p_seq=10 +GoUnblock dt=26 g=1 g_seq=7 stack=0 +GoStart dt=201 g=1 g_seq=8 +UserTaskEnd dt=24 task=10 stack=62 +UserLog dt=18 task=4 key_string=24 value_string=63 stack=63 +UserTaskBegin dt=11 task=12 parent_task=4 name_string=26 stack=64 +UserLog dt=21 task=12 key_string=27 value_string=64 stack=65 +UserRegionBegin dt=7 task=12 name_string=29 stack=66 +GoCreate dt=33 new_g=5 new_stack=17 stack=67 +GoCreate dt=12 new_g=6 new_stack=17 stack=67 +GoCreate dt=9 new_g=7 new_stack=17 stack=67 +GoCreate dt=8 new_g=8 new_stack=17 stack=67 +GoCreate dt=19 new_g=9 new_stack=17 stack=67 +UserRegionEnd dt=14 task=12 name_string=29 stack=68 +GoBlock dt=11 reason_string=19 stack=69 +GoStart dt=13 g=9 g_seq=1 +UserRegionBegin dt=70 task=12 name_string=56 stack=26 +UserLog dt=11 task=12 key_string=24 value_string=65 stack=27 +UserRegionEnd dt=3 task=12 name_string=56 stack=28 +GoDestroy dt=2 +GoStart dt=7 g=5 g_seq=1 +UserRegionBegin dt=24 task=12 name_string=33 stack=26 +UserLog dt=5 task=12 key_string=24 value_string=66 stack=27 +UserRegionEnd dt=2 task=12 name_string=33 stack=28 +GoDestroy dt=2 +GoStart dt=8 g=6 g_seq=1 +UserRegionBegin dt=15 task=12 name_string=35 stack=26 +UserLog dt=7 task=12 key_string=24 value_string=67 stack=27 +UserRegionEnd dt=2 task=12 name_string=35 stack=28 +GoDestroy dt=1 +GoStart dt=2 g=7 g_seq=1 +UserRegionBegin dt=13 task=12 name_string=31 stack=26 +UserLog dt=5 task=12 key_string=24 value_string=68 stack=27 +UserLog dt=6 task=12 key_string=24 value_string=69 stack=30 +UserTaskBegin dt=5 task=13 parent_task=12 name_string=26 stack=31 +UserLog dt=7 task=13 key_string=27 value_string=70 stack=32 +UserRegionBegin dt=4 task=13 name_string=29 stack=33 +UserRegionEnd dt=6 task=13 name_string=29 stack=34 +GoBlock dt=18 reason_string=19 stack=35 +GoStart dt=12 g=8 g_seq=1 +UserRegionBegin dt=22 task=12 name_string=30 stack=26 +UserLog dt=5 task=12 key_string=24 value_string=71 stack=27 +UserRegionEnd dt=2 task=12 name_string=30 stack=28 +GoDestroy dt=1 +ProcStop dt=20 +ProcStart dt=141838 p=4 p_seq=8 +ProcStop dt=16 +ProcStart dt=17652 p=4 p_seq=9 +GoUnblock dt=48 g=1 g_seq=9 stack=0 +GoUnblock dt=8 g=7 g_seq=2 stack=0 +GoStart dt=271 g=7 g_seq=3 +UserTaskEnd dt=25 task=13 stack=36 +UserRegionEnd dt=15 task=12 name_string=31 stack=28 +GoDestroy dt=4 +GoStart dt=19 g=1 g_seq=10 +UserTaskEnd dt=19 task=12 stack=70 +UserLog dt=21 task=0 key_string=24 value_string=72 stack=13 +UserTaskBegin dt=19 task=14 parent_task=0 name_string=26 stack=14 +UserLog dt=37 task=14 key_string=27 value_string=73 stack=15 +UserRegionBegin dt=6 task=14 name_string=29 stack=16 +GoCreate dt=28 new_g=41 new_stack=17 stack=18 +GoCreate dt=14 new_g=42 new_stack=17 stack=18 +GoCreate dt=12 new_g=43 new_stack=17 stack=18 +GoCreate dt=10 new_g=44 new_stack=17 stack=18 +UserRegionEnd dt=5 task=14 name_string=29 stack=19 +GoBlock dt=9 reason_string=19 stack=20 +GoStart dt=16 g=44 g_seq=1 +UserRegionBegin dt=107 task=14 name_string=30 stack=26 +UserLog dt=16 task=14 key_string=24 value_string=74 stack=27 +UserRegionEnd dt=3 task=14 name_string=30 stack=28 +GoDestroy dt=2 +GoStart dt=7 g=41 g_seq=1 +UserRegionBegin dt=30 task=14 name_string=33 stack=26 +UserLog dt=7 task=14 key_string=24 value_string=75 stack=27 +UserRegionEnd dt=2 task=14 name_string=33 stack=28 +GoDestroy dt=2 +GoStart dt=7 g=42 g_seq=1 +UserRegionBegin dt=27 task=14 name_string=35 stack=26 +UserLog dt=7 task=14 key_string=24 value_string=76 stack=27 +UserRegionEnd dt=2 task=14 name_string=35 stack=28 +GoDestroy dt=2 +ProcStop dt=28 +ProcStart dt=141923 p=0 p_seq=12 +ProcStop dt=19 +ProcStart dt=16780 p=0 p_seq=13 +GoUnblock dt=22 g=43 g_seq=2 stack=0 +GoStart dt=162 g=43 g_seq=3 +UserTaskEnd dt=16 task=15 stack=36 +UserRegionEnd dt=12 task=14 name_string=31 stack=28 +GoDestroy dt=2 +ProcStop dt=8 +ProcStart dt=1532 p=2 p_seq=9 +ProcStop dt=12 +ProcStart dt=141906 p=4 p_seq=11 +ProcStop dt=16 +ProcStart dt=16784 p=4 p_seq=12 +GoUnblock dt=20 g=1 g_seq=13 stack=0 +GoStart dt=191 g=1 g_seq=14 +UserTaskEnd dt=15 task=16 stack=45 +UserLog dt=17 task=2 key_string=24 value_string=84 stack=46 +UserTaskBegin dt=8 task=17 parent_task=2 name_string=26 stack=47 +UserLog dt=20 task=17 key_string=27 value_string=85 stack=48 +UserRegionBegin dt=6 task=17 name_string=29 stack=49 +GoCreate dt=28 new_g=45 new_stack=17 stack=50 +GoCreate dt=9 new_g=46 new_stack=17 stack=50 +GoCreate dt=10 new_g=47 new_stack=17 stack=50 +UserRegionEnd dt=5 task=17 name_string=29 stack=51 +GoBlock dt=6 reason_string=19 stack=52 +GoStart dt=10 g=47 g_seq=1 +UserRegionBegin dt=69 task=17 name_string=31 stack=26 +UserLog dt=11 task=17 key_string=24 value_string=86 stack=27 +UserLog dt=7 task=17 key_string=24 value_string=87 stack=30 +UserTaskBegin dt=5 task=18 parent_task=17 name_string=26 stack=31 +UserLog dt=7 task=18 key_string=27 value_string=88 stack=32 +UserRegionBegin dt=5 task=18 name_string=29 stack=33 +UserRegionEnd dt=4 task=18 name_string=29 stack=34 +HeapAlloc dt=35 heapalloc_value=1818624 +GoBlock dt=14 reason_string=19 stack=35 +HeapAlloc dt=11 heapalloc_value=1826816 +GoStart dt=10 g=45 g_seq=1 +UserRegionBegin dt=29 task=17 name_string=33 stack=26 +UserLog dt=9 task=17 key_string=24 value_string=89 stack=27 +UserRegionEnd dt=3 task=17 name_string=33 stack=28 +GoDestroy dt=1 +GoStart dt=5 g=46 g_seq=1 +UserRegionBegin dt=15 task=17 name_string=35 stack=26 +UserLog dt=8 task=17 key_string=24 value_string=90 stack=27 +UserRegionEnd dt=2 task=17 name_string=35 stack=28 +GoDestroy dt=1 +ProcStop dt=3 +ProcStart dt=141981 p=0 p_seq=16 +ProcStop dt=19 +ProcStart dt=17153 p=0 p_seq=17 +GoUnblock dt=44 g=1 g_seq=15 stack=0 +GoUnblock dt=11 g=47 g_seq=2 stack=0 +GoStart dt=215 g=47 g_seq=3 +UserTaskEnd dt=22 task=18 stack=36 +UserRegionEnd dt=9 task=17 name_string=31 stack=28 +GoDestroy dt=3 +GoStart dt=19 g=1 g_seq=16 +UserTaskEnd dt=13 task=17 stack=54 +UserLog dt=18 task=3 key_string=24 value_string=91 stack=55 +UserTaskBegin dt=7 task=19 parent_task=3 name_string=26 stack=56 +UserLog dt=27 task=19 key_string=27 value_string=92 stack=57 +UserRegionBegin dt=8 task=19 name_string=29 stack=58 +GoCreate dt=30 new_g=10 new_stack=17 stack=59 +GoCreate dt=9 new_g=11 new_stack=17 stack=59 +GoCreate dt=11 new_g=12 new_stack=17 stack=59 +GoCreate dt=7 new_g=13 new_stack=17 stack=59 +GoCreate dt=7 new_g=14 new_stack=17 stack=59 +GoCreate dt=9 new_g=15 new_stack=17 stack=59 +UserRegionEnd dt=5 task=19 name_string=29 stack=60 +GoBlock dt=7 reason_string=19 stack=61 +GoStart dt=17 g=15 g_seq=1 +UserRegionBegin dt=61 task=19 name_string=53 stack=26 +UserLog dt=10 task=19 key_string=24 value_string=93 stack=27 +UserRegionEnd dt=3 task=19 name_string=53 stack=28 +GoDestroy dt=1 +GoStart dt=4 g=10 g_seq=1 +UserRegionBegin dt=26 task=19 name_string=33 stack=26 +UserLog dt=7 task=19 key_string=24 value_string=94 stack=27 +UserRegionEnd dt=2 task=19 name_string=33 stack=28 +GoDestroy dt=1 +GoStart dt=4 g=11 g_seq=1 +UserRegionBegin dt=20 task=19 name_string=35 stack=26 +UserLog dt=5 task=19 key_string=24 value_string=95 stack=27 +UserRegionEnd dt=2 task=19 name_string=35 stack=28 +GoDestroy dt=1 +GoStart dt=7 g=12 g_seq=1 +UserRegionBegin dt=14 task=19 name_string=31 stack=26 +UserLog dt=4 task=19 key_string=24 value_string=96 stack=27 +UserLog dt=4 task=19 key_string=24 value_string=97 stack=30 +UserTaskBegin dt=7 task=20 parent_task=19 name_string=26 stack=31 +UserLog dt=5 task=20 key_string=27 value_string=98 stack=32 +UserRegionBegin dt=4 task=20 name_string=29 stack=33 +UserRegionEnd dt=5 task=20 name_string=29 stack=34 +GoBlock dt=9 reason_string=19 stack=35 +GoStart dt=9 g=14 g_seq=1 +UserRegionBegin dt=28 task=19 name_string=56 stack=26 +UserLog dt=7 task=19 key_string=24 value_string=99 stack=27 +UserRegionEnd dt=2 task=19 name_string=56 stack=28 +GoDestroy dt=2 +ProcStop dt=17 +ProcStart dt=141933 p=2 p_seq=11 +ProcStop dt=13 +ProcStart dt=16744 p=2 p_seq=12 +GoUnblock dt=29 g=1 g_seq=17 stack=0 +GoUnblock dt=7 g=12 g_seq=2 stack=0 +GoStart dt=172 g=12 g_seq=3 +UserTaskEnd dt=15 task=20 stack=36 +UserRegionEnd dt=8 task=19 name_string=31 stack=28 +GoDestroy dt=2 +GoStart dt=11 g=1 g_seq=18 +UserTaskEnd dt=14 task=19 stack=62 +UserLog dt=16 task=4 key_string=24 value_string=101 stack=63 +UserTaskBegin dt=6 task=21 parent_task=4 name_string=26 stack=64 +UserLog dt=25 task=21 key_string=27 value_string=102 stack=65 +UserRegionBegin dt=7 task=21 name_string=29 stack=66 +GoCreate dt=23 new_g=54 new_stack=17 stack=67 +GoCreate dt=8 new_g=55 new_stack=17 stack=67 +GoCreate dt=17 new_g=56 new_stack=17 stack=67 +GoCreate dt=8 new_g=57 new_stack=17 stack=67 +GoCreate dt=7 new_g=58 new_stack=17 stack=67 +UserRegionEnd dt=4 task=21 name_string=29 stack=68 +GoBlock dt=9 reason_string=19 stack=69 +GoStart dt=7 g=58 g_seq=1 +UserRegionBegin dt=46 task=21 name_string=56 stack=26 +UserLog dt=8 task=21 key_string=24 value_string=103 stack=27 +UserRegionEnd dt=4 task=21 name_string=56 stack=28 +GoDestroy dt=1 +GoStart dt=3 g=54 g_seq=1 +UserRegionBegin dt=19 task=21 name_string=33 stack=26 +UserLog dt=7 task=21 key_string=24 value_string=104 stack=27 +UserRegionEnd dt=2 task=21 name_string=33 stack=28 +GoDestroy dt=1 +GoStart dt=2 g=55 g_seq=1 +UserRegionBegin dt=17 task=21 name_string=35 stack=26 +UserLog dt=4 task=21 key_string=24 value_string=105 stack=27 +UserRegionEnd dt=2 task=21 name_string=35 stack=28 +GoDestroy dt=1 +GoStart dt=5 g=56 g_seq=1 +UserRegionBegin dt=16 task=21 name_string=31 stack=26 +UserLog dt=4 task=21 key_string=24 value_string=106 stack=27 +UserLog dt=3 task=21 key_string=24 value_string=107 stack=30 +UserTaskBegin dt=4 task=22 parent_task=21 name_string=26 stack=31 +UserLog dt=6 task=22 key_string=27 value_string=108 stack=32 +UserRegionBegin dt=4 task=22 name_string=29 stack=33 +UserRegionEnd dt=7 task=22 name_string=29 stack=34 +GoBlock dt=14 reason_string=19 stack=35 +GoStart dt=3 g=57 g_seq=1 +UserRegionBegin dt=22 task=21 name_string=30 stack=26 +UserLog dt=6 task=21 key_string=24 value_string=109 stack=27 +UserRegionEnd dt=2 task=21 name_string=30 stack=28 +GoDestroy dt=2 +ProcStop dt=10 +ProcStart dt=128031 p=4 p_seq=15 +ProcStop dt=16 +ProcStart dt=33758 p=2 p_seq=15 +ProcStop dt=18 +EventBatch gen=1 m=1986496 time=2753925246280 size=267 +ProcStart dt=549 p=0 p_seq=1 +GoStart dt=211 g=18 g_seq=1 +GoBlock dt=3533 reason_string=12 stack=21 +GoStart dt=41 g=21 g_seq=1 +GoBlock dt=150 reason_string=10 stack=22 +GoStart dt=93 g=20 g_seq=1 +GoSyscallBegin dt=51 p_seq=2 stack=23 +GoSyscallEnd dt=400 +GoBlock dt=582 reason_string=15 stack=25 +GoStart dt=26 g=23 g_seq=1 +HeapAlloc dt=50 heapalloc_value=1646592 +UserRegionBegin dt=2921 task=5 name_string=31 stack=26 +UserLog dt=28 task=5 key_string=24 value_string=37 stack=27 +UserLog dt=13 task=5 key_string=24 value_string=38 stack=30 +UserTaskBegin dt=15 task=6 parent_task=5 name_string=26 stack=31 +HeapAlloc dt=26 heapalloc_value=1687552 +UserLog dt=14 task=6 key_string=27 value_string=39 stack=32 +UserRegionBegin dt=9 task=6 name_string=29 stack=33 +UserRegionEnd dt=6 task=6 name_string=29 stack=34 +GoBlock dt=15 reason_string=19 stack=35 +ProcStop dt=30 +ProcStart dt=156949 p=4 p_seq=2 +GoUnblock dt=46 g=1 g_seq=1 stack=0 +GoStart dt=253 g=1 g_seq=2 +UserTaskEnd dt=27 task=5 stack=37 +UserLog dt=23 task=1 key_string=24 value_string=40 stack=38 +UserTaskBegin dt=14 task=7 parent_task=1 name_string=26 stack=39 +HeapAlloc dt=596 heapalloc_value=1695744 +HeapAlloc dt=18 heapalloc_value=1703936 +UserLog dt=17 task=7 key_string=27 value_string=41 stack=40 +UserRegionBegin dt=14 task=7 name_string=29 stack=41 +HeapAlloc dt=10 heapalloc_value=1712128 +HeapAlloc dt=17 heapalloc_value=1720320 +GoCreate dt=44 new_g=33 new_stack=17 stack=42 +GoCreate dt=175 new_g=34 new_stack=17 stack=42 +UserRegionEnd dt=50 task=7 name_string=29 stack=43 +GoBlock dt=9 reason_string=19 stack=44 +HeapAlloc dt=16 heapalloc_value=1728512 +GoStart dt=239 g=34 g_seq=1 +HeapAlloc dt=21 heapalloc_value=1736704 +UserRegionBegin dt=92 task=7 name_string=35 stack=26 +UserLog dt=15 task=7 key_string=24 value_string=42 stack=27 +UserRegionEnd dt=4 task=7 name_string=35 stack=28 +GoDestroy dt=2 +ProcStop dt=21 +ProcStart dt=800974 p=4 p_seq=10 +ProcStop dt=39 +ProcStart dt=158775 p=0 p_seq=15 +ProcStop dt=24 +ProcStart dt=159722 p=4 p_seq=13 +GoStart dt=254 g=13 g_seq=1 +UserRegionBegin dt=239 task=19 name_string=30 stack=26 +UserLog dt=23 task=19 key_string=24 value_string=100 stack=27 +UserRegionEnd dt=6 task=19 name_string=30 stack=28 +GoDestroy dt=7 +ProcStop dt=22 +EventBatch gen=1 m=1986495 time=2753925251756 size=320 +ProcStart dt=705 p=4 p_seq=1 +ProcStop dt=1279 +ProcStart dt=158975 p=0 p_seq=5 +ProcStop dt=23 +ProcStart dt=792 p=0 p_seq=6 +GoStart dt=187 g=33 g_seq=1 +UserRegionBegin dt=244 task=7 name_string=33 stack=26 +UserLog dt=32 task=7 key_string=24 value_string=43 stack=27 +UserRegionEnd dt=7 task=7 name_string=33 stack=28 +GoDestroy dt=5 +ProcStop dt=24 +ProcStart dt=160255 p=4 p_seq=4 +ProcStop dt=27 +ProcStart dt=159067 p=2 p_seq=5 +GoStart dt=222 g=37 g_seq=1 +UserRegionBegin dt=114 task=10 name_string=31 stack=26 +UserLog dt=16 task=10 key_string=24 value_string=60 stack=27 +UserLog dt=8 task=10 key_string=24 value_string=61 stack=30 +UserTaskBegin dt=8 task=11 parent_task=10 name_string=26 stack=31 +UserLog dt=19 task=11 key_string=27 value_string=62 stack=32 +UserRegionBegin dt=6 task=11 name_string=29 stack=33 +UserRegionEnd dt=7 task=11 name_string=29 stack=34 +GoBlock dt=15 reason_string=19 stack=35 +ProcStop dt=11 +ProcStart dt=160101 p=4 p_seq=7 +ProcStop dt=21 +ProcStart dt=159647 p=2 p_seq=7 +GoStart dt=277 g=43 g_seq=1 +UserRegionBegin dt=126 task=14 name_string=31 stack=26 +UserLog dt=21 task=14 key_string=24 value_string=77 stack=27 +UserLog dt=9 task=14 key_string=24 value_string=78 stack=30 +UserTaskBegin dt=8 task=15 parent_task=14 name_string=26 stack=31 +UserLog dt=17 task=15 key_string=27 value_string=79 stack=32 +UserRegionBegin dt=6 task=15 name_string=29 stack=33 +UserRegionEnd dt=8 task=15 name_string=29 stack=34 +GoBlock dt=23 reason_string=19 stack=35 +ProcStop dt=17 +ProcStart dt=159706 p=0 p_seq=14 +GoStart dt=229 g=52 g_seq=1 +UserRegionBegin dt=103 task=16 name_string=33 stack=26 +UserLog dt=20 task=16 key_string=24 value_string=83 stack=27 +UserRegionEnd dt=4 task=16 name_string=33 stack=28 +GoDestroy dt=3 +ProcStop dt=17 +ProcStart dt=319699 p=2 p_seq=10 +ProcStop dt=20 +ProcStart dt=158728 p=4 p_seq=14 +ProcStop dt=17 +ProcStart dt=110606 p=2 p_seq=13 +ProcStop dt=10 +ProcStart dt=16732 p=2 p_seq=14 +GoUnblock dt=45 g=18 g_seq=2 stack=0 +GoStart dt=184 g=18 g_seq=3 +GoBlock dt=114 reason_string=12 stack=21 +ProcStop dt=8 +ProcStart dt=16779 p=4 p_seq=16 +ProcStop dt=11 +ProcStart dt=16790 p=4 p_seq=17 +GoUnblock dt=23 g=1 g_seq=19 stack=0 +GoUnblock dt=8 g=56 g_seq=2 stack=0 +GoStart dt=142 g=56 g_seq=3 +UserTaskEnd dt=14 task=22 stack=36 +UserRegionEnd dt=8 task=21 name_string=31 stack=28 +GoDestroy dt=5 +GoStart dt=18 g=1 g_seq=20 +UserTaskEnd dt=17 task=21 stack=70 +UserTaskEnd dt=12 task=4 stack=71 +HeapAlloc dt=802 heapalloc_value=1835008 +HeapAlloc dt=41 heapalloc_value=1843200 +HeapAlloc dt=13 heapalloc_value=1851392 +EventBatch gen=1 m=1986494 time=2753925248778 size=47 +ProcStart dt=390 p=3 p_seq=1 +GoStart dt=1718 g=22 g_seq=1 +HeapAlloc dt=1807 heapalloc_value=1654784 +HeapAlloc dt=406 heapalloc_value=1671168 +HeapAlloc dt=15 heapalloc_value=1679360 +UserRegionBegin dt=49 task=5 name_string=35 stack=26 +UserLog dt=30 task=5 key_string=24 value_string=36 stack=27 +UserRegionEnd dt=5 task=5 name_string=35 stack=28 +GoDestroy dt=5 +ProcStop dt=42 +EventBatch gen=1 m=1986492 time=2753925244400 size=582 +ProcStatus dt=67 p=1 pstatus=1 +GoStatus dt=4 g=1 m=1986492 gstatus=2 +ProcsChange dt=220 procs_value=8 stack=1 +STWBegin dt=127 kind_string=21 stack=2 +HeapGoal dt=3 heapgoal_value=4194304 +ProcStatus dt=2 p=0 pstatus=2 +ProcStatus dt=2 p=2 pstatus=2 +ProcStatus dt=1 p=3 pstatus=2 +ProcStatus dt=1 p=4 pstatus=2 +ProcStatus dt=1 p=5 pstatus=2 +ProcStatus dt=1 p=6 pstatus=2 +ProcStatus dt=1 p=7 pstatus=2 +ProcsChange dt=353 procs_value=8 stack=3 +STWEnd dt=277 +HeapAlloc dt=243 heapalloc_value=1605632 +HeapAlloc dt=24 heapalloc_value=1613824 +GoCreate dt=209 new_g=18 new_stack=4 stack=5 +GoCreate dt=561 new_g=19 new_stack=6 stack=7 +GoCreate dt=25 new_g=20 new_stack=8 stack=9 +UserTaskEnd dt=309 task=2 stack=10 +UserTaskBegin dt=26 task=3 parent_task=1 name_string=22 stack=11 +UserTaskBegin dt=918 task=4 parent_task=0 name_string=23 stack=12 +UserLog dt=461 task=0 key_string=24 value_string=25 stack=13 +UserTaskBegin dt=420 task=5 parent_task=0 name_string=26 stack=14 +UserLog dt=673 task=5 key_string=27 value_string=28 stack=15 +UserRegionBegin dt=15 task=5 name_string=29 stack=16 +HeapAlloc dt=51 heapalloc_value=1630208 +GoCreate dt=24 new_g=21 new_stack=17 stack=18 +GoCreate dt=17 new_g=22 new_stack=17 stack=18 +GoCreate dt=10 new_g=23 new_stack=17 stack=18 +GoCreate dt=9 new_g=24 new_stack=17 stack=18 +UserRegionEnd dt=549 task=5 name_string=29 stack=19 +GoBlock dt=14 reason_string=19 stack=20 +GoStart dt=378 g=24 g_seq=1 +HeapAlloc dt=65 heapalloc_value=1638400 +GoUnblock dt=559 g=21 g_seq=2 stack=24 +UserRegionBegin dt=1498 task=5 name_string=30 stack=26 +UserLog dt=35 task=5 key_string=24 value_string=32 stack=27 +UserRegionEnd dt=8 task=5 name_string=30 stack=28 +GoDestroy dt=5 +GoStart dt=24 g=21 g_seq=3 +UserRegionBegin dt=60 task=5 name_string=33 stack=26 +UserLog dt=7 task=5 key_string=24 value_string=34 stack=27 +UserRegionEnd dt=2 task=5 name_string=33 stack=28 +GoDestroy dt=2 +ProcStop dt=34 +ProcStart dt=141874 p=0 p_seq=3 +ProcStop dt=21 +ProcStart dt=16770 p=0 p_seq=4 +GoUnblock dt=29 g=23 g_seq=2 stack=0 +GoStart dt=176 g=23 g_seq=3 +UserTaskEnd dt=19 task=6 stack=36 +UserRegionEnd dt=14 task=5 name_string=31 stack=28 +GoDestroy dt=2 +ProcStop dt=12 +ProcStart dt=2251 p=4 p_seq=3 +ProcStop dt=22 +ProcStart dt=141952 p=2 p_seq=3 +ProcStop dt=27 +ProcStart dt=16789 p=2 p_seq=4 +GoUnblock dt=35 g=1 g_seq=3 stack=0 +GoStart dt=214 g=1 g_seq=4 +UserTaskEnd dt=26 task=7 stack=45 +UserLog dt=27 task=2 key_string=24 value_string=44 stack=46 +UserTaskBegin dt=10 task=8 parent_task=2 name_string=26 stack=47 +HeapAlloc dt=52 heapalloc_value=1744896 +HeapAlloc dt=22 heapalloc_value=1753088 +UserLog dt=13 task=8 key_string=27 value_string=45 stack=48 +UserRegionBegin dt=11 task=8 name_string=29 stack=49 +HeapAlloc dt=7 heapalloc_value=1761280 +HeapAlloc dt=18 heapalloc_value=1769472 +GoCreate dt=52 new_g=49 new_stack=17 stack=50 +GoCreate dt=12 new_g=50 new_stack=17 stack=50 +HeapAlloc dt=11 heapalloc_value=1777664 +GoCreate dt=9 new_g=51 new_stack=17 stack=50 +UserRegionEnd dt=9 task=8 name_string=29 stack=51 +GoBlock dt=11 reason_string=19 stack=52 +HeapAlloc dt=12 heapalloc_value=1785856 +GoStart dt=14 g=51 g_seq=1 +HeapAlloc dt=18 heapalloc_value=1794048 +UserRegionBegin dt=95 task=8 name_string=31 stack=26 +UserLog dt=22 task=8 key_string=24 value_string=46 stack=27 +UserLog dt=8 task=8 key_string=24 value_string=47 stack=30 +UserTaskBegin dt=5 task=9 parent_task=8 name_string=26 stack=31 +UserLog dt=7 task=9 key_string=27 value_string=48 stack=32 +UserRegionBegin dt=4 task=9 name_string=29 stack=33 +UserRegionEnd dt=7 task=9 name_string=29 stack=34 +HeapAlloc dt=11 heapalloc_value=1802240 +GoStop dt=674 reason_string=16 stack=53 +GoStart dt=12 g=51 g_seq=2 +GoBlock dt=8 reason_string=19 stack=35 +HeapAlloc dt=16 heapalloc_value=1810432 +ProcStop dt=8 +ProcStart dt=159907 p=0 p_seq=8 +ProcStop dt=25 +ProcStart dt=159186 p=2 p_seq=6 +GoUnblock dt=22 g=37 g_seq=2 stack=0 +GoStart dt=217 g=37 g_seq=3 +UserTaskEnd dt=19 task=11 stack=36 +UserRegionEnd dt=15 task=10 name_string=31 stack=28 +GoDestroy dt=5 +ProcStop dt=16 +ProcStart dt=160988 p=0 p_seq=11 +ProcStop dt=29 +ProcStart dt=158554 p=2 p_seq=8 +GoUnblock dt=38 g=1 g_seq=11 stack=0 +GoStart dt=240 g=1 g_seq=12 +UserTaskEnd dt=25 task=14 stack=37 +UserLog dt=23 task=1 key_string=24 value_string=80 stack=38 +UserTaskBegin dt=11 task=16 parent_task=1 name_string=26 stack=39 +UserLog dt=36 task=16 key_string=27 value_string=81 stack=40 +UserRegionBegin dt=13 task=16 name_string=29 stack=41 +GoCreate dt=39 new_g=52 new_stack=17 stack=42 +GoCreate dt=23 new_g=53 new_stack=17 stack=42 +UserRegionEnd dt=11 task=16 name_string=29 stack=43 +GoBlock dt=9 reason_string=19 stack=44 +GoStart dt=244 g=53 g_seq=1 +UserRegionBegin dt=101 task=16 name_string=35 stack=26 +UserLog dt=17 task=16 key_string=24 value_string=82 stack=27 +UserRegionEnd dt=4 task=16 name_string=35 stack=28 +GoDestroy dt=3 +ProcStop dt=28 +EventBatch gen=1 m=18446744073709551615 time=2753926855140 size=56 +GoStatus dt=74 g=2 m=18446744073709551615 gstatus=4 +GoStatus dt=3 g=3 m=18446744073709551615 gstatus=4 +GoStatus dt=1 g=4 m=18446744073709551615 gstatus=4 +GoStatus dt=1 g=17 m=18446744073709551615 gstatus=4 +EventBatch gen=1 m=18446744073709551615 time=2753926855560 size=1759 +Stacks +Stack id=45 nframes=3 + pc=4804964 func=110 file=111 line=80 + pc=4804052 func=112 file=113 line=84 + pc=4803566 func=114 file=113 line=44 +Stack id=22 nframes=7 + pc=4633935 func=115 file=116 line=90 + pc=4633896 func=117 file=118 line=223 + pc=4633765 func=119 file=118 line=216 + pc=4633083 func=120 file=118 line=131 + pc=4764601 func=121 file=122 line=152 + pc=4765335 func=123 file=122 line=238 + pc=4804612 func=124 file=113 line=70 +Stack id=9 nframes=2 + pc=4802543 func=125 file=126 line=128 + pc=4803332 func=114 file=113 line=30 +Stack id=71 nframes=2 + pc=4803671 func=110 file=111 line=80 + pc=4803666 func=114 file=113 line=51 +Stack id=10 nframes=2 + pc=4803415 func=110 file=111 line=80 + pc=4803410 func=114 file=113 line=33 +Stack id=18 nframes=4 + pc=4804196 func=127 file=113 line=69 + pc=4802140 func=128 file=111 line=141 + pc=4804022 func=112 file=113 line=67 + pc=4803543 func=114 file=113 line=43 +Stack id=37 nframes=3 + pc=4804964 func=110 file=111 line=80 + pc=4804052 func=112 file=113 line=84 + pc=4803543 func=114 file=113 line=43 +Stack id=31 nframes=4 + pc=4803865 func=112 file=113 line=61 + pc=4804890 func=129 file=113 line=73 + pc=4802140 func=128 file=111 line=141 + pc=4804691 func=124 file=113 line=70 +Stack id=55 nframes=2 + pc=4803832 func=112 file=113 line=58 + pc=4803609 func=114 file=113 line=46 +Stack id=47 nframes=2 + pc=4803865 func=112 file=113 line=61 + pc=4803589 func=114 file=113 line=45 +Stack id=38 nframes=2 + pc=4803832 func=112 file=113 line=58 + pc=4803566 func=114 file=113 line=44 +Stack id=56 nframes=2 + pc=4803865 func=112 file=113 line=61 + pc=4803609 func=114 file=113 line=46 +Stack id=33 nframes=4 + pc=4804022 func=112 file=113 line=67 + pc=4804890 func=129 file=113 line=73 + pc=4802140 func=128 file=111 line=141 + pc=4804691 func=124 file=113 line=70 +Stack id=44 nframes=3 + pc=4599892 func=130 file=131 line=195 + pc=4804036 func=112 file=113 line=83 + pc=4803566 func=114 file=113 line=44 +Stack id=3 nframes=4 + pc=4421707 func=132 file=133 line=1382 + pc=4533555 func=134 file=135 line=255 + pc=4802469 func=125 file=126 line=125 + pc=4803332 func=114 file=113 line=30 +Stack id=6 nframes=1 + pc=4539520 func=136 file=135 line=868 +Stack id=58 nframes=2 + pc=4804022 func=112 file=113 line=67 + pc=4803609 func=114 file=113 line=46 +Stack id=64 nframes=2 + pc=4803865 func=112 file=113 line=61 + pc=4803629 func=114 file=113 line=47 +Stack id=62 nframes=3 + pc=4804964 func=110 file=111 line=80 + pc=4804052 func=112 file=113 line=84 + pc=4803609 func=114 file=113 line=46 +Stack id=34 nframes=4 + pc=4804022 func=112 file=113 line=67 + pc=4804890 func=129 file=113 line=73 + pc=4802140 func=128 file=111 line=141 + pc=4804691 func=124 file=113 line=70 +Stack id=30 nframes=4 + pc=4803832 func=112 file=113 line=58 + pc=4804890 func=129 file=113 line=73 + pc=4802140 func=128 file=111 line=141 + pc=4804691 func=124 file=113 line=70 +Stack id=32 nframes=4 + pc=4803943 func=112 file=113 line=64 + pc=4804890 func=129 file=113 line=73 + pc=4802140 func=128 file=111 line=141 + pc=4804691 func=124 file=113 line=70 +Stack id=26 nframes=1 + pc=4804691 func=124 file=113 line=70 +Stack id=46 nframes=2 + pc=4803832 func=112 file=113 line=58 + pc=4803589 func=114 file=113 line=45 +Stack id=50 nframes=4 + pc=4804196 func=127 file=113 line=69 + pc=4802140 func=128 file=111 line=141 + pc=4804022 func=112 file=113 line=67 + pc=4803589 func=114 file=113 line=45 +Stack id=59 nframes=4 + pc=4804196 func=127 file=113 line=69 + pc=4802140 func=128 file=111 line=141 + pc=4804022 func=112 file=113 line=67 + pc=4803609 func=114 file=113 line=46 +Stack id=7 nframes=4 + pc=4539492 func=137 file=135 line=868 + pc=4533572 func=134 file=135 line=258 + pc=4802469 func=125 file=126 line=125 + pc=4803332 func=114 file=113 line=30 +Stack id=17 nframes=1 + pc=4804512 func=124 file=113 line=69 +Stack id=57 nframes=2 + pc=4803943 func=112 file=113 line=64 + pc=4803609 func=114 file=113 line=46 +Stack id=41 nframes=2 + pc=4804022 func=112 file=113 line=67 + pc=4803566 func=114 file=113 line=44 +Stack id=63 nframes=2 + pc=4803832 func=112 file=113 line=58 + pc=4803629 func=114 file=113 line=47 +Stack id=60 nframes=2 + pc=4804022 func=112 file=113 line=67 + pc=4803609 func=114 file=113 line=46 +Stack id=5 nframes=4 + pc=4542549 func=138 file=139 line=42 + pc=4533560 func=134 file=135 line=257 + pc=4802469 func=125 file=126 line=125 + pc=4803332 func=114 file=113 line=30 +Stack id=40 nframes=2 + pc=4803943 func=112 file=113 line=64 + pc=4803566 func=114 file=113 line=44 +Stack id=21 nframes=3 + pc=4217905 func=140 file=141 line=442 + pc=4539946 func=142 file=135 line=928 + pc=4542714 func=143 file=139 line=54 +Stack id=2 nframes=3 + pc=4533284 func=134 file=135 line=238 + pc=4802469 func=125 file=126 line=125 + pc=4803332 func=114 file=113 line=30 +Stack id=53 nframes=6 + pc=4247492 func=144 file=145 line=1374 + pc=4599676 func=130 file=131 line=186 + pc=4804036 func=112 file=113 line=83 + pc=4804890 func=129 file=113 line=73 + pc=4802140 func=128 file=111 line=141 + pc=4804691 func=124 file=113 line=70 +Stack id=20 nframes=3 + pc=4599892 func=130 file=131 line=195 + pc=4804036 func=112 file=113 line=83 + pc=4803543 func=114 file=113 line=43 +Stack id=70 nframes=3 + pc=4804964 func=110 file=111 line=80 + pc=4804052 func=112 file=113 line=84 + pc=4803629 func=114 file=113 line=47 +Stack id=15 nframes=2 + pc=4803943 func=112 file=113 line=64 + pc=4803543 func=114 file=113 line=43 +Stack id=65 nframes=2 + pc=4803943 func=112 file=113 line=64 + pc=4803629 func=114 file=113 line=47 +Stack id=28 nframes=1 + pc=4804691 func=124 file=113 line=70 +Stack id=48 nframes=2 + pc=4803943 func=112 file=113 line=64 + pc=4803589 func=114 file=113 line=45 +Stack id=61 nframes=3 + pc=4599892 func=130 file=131 line=195 + pc=4804036 func=112 file=113 line=83 + pc=4803609 func=114 file=113 line=46 +Stack id=13 nframes=2 + pc=4803832 func=112 file=113 line=58 + pc=4803543 func=114 file=113 line=43 +Stack id=29 nframes=3 + pc=4217905 func=140 file=141 line=442 + pc=4539946 func=142 file=135 line=928 + pc=4539559 func=136 file=135 line=871 +Stack id=51 nframes=2 + pc=4804022 func=112 file=113 line=67 + pc=4803589 func=114 file=113 line=45 +Stack id=42 nframes=4 + pc=4804196 func=127 file=113 line=69 + pc=4802140 func=128 file=111 line=141 + pc=4804022 func=112 file=113 line=67 + pc=4803566 func=114 file=113 line=44 +Stack id=14 nframes=2 + pc=4803865 func=112 file=113 line=61 + pc=4803543 func=114 file=113 line=43 +Stack id=39 nframes=2 + pc=4803865 func=112 file=113 line=61 + pc=4803566 func=114 file=113 line=44 +Stack id=49 nframes=2 + pc=4804022 func=112 file=113 line=67 + pc=4803589 func=114 file=113 line=45 +Stack id=52 nframes=3 + pc=4599892 func=130 file=131 line=195 + pc=4804036 func=112 file=113 line=83 + pc=4803589 func=114 file=113 line=45 +Stack id=24 nframes=7 + pc=4634510 func=146 file=116 line=223 + pc=4634311 func=117 file=118 line=240 + pc=4633765 func=119 file=118 line=216 + pc=4633083 func=120 file=118 line=131 + pc=4764601 func=121 file=122 line=152 + pc=4765335 func=123 file=122 line=238 + pc=4804612 func=124 file=113 line=70 +Stack id=43 nframes=2 + pc=4804022 func=112 file=113 line=67 + pc=4803566 func=114 file=113 line=44 +Stack id=19 nframes=2 + pc=4804022 func=112 file=113 line=67 + pc=4803543 func=114 file=113 line=43 +Stack id=69 nframes=3 + pc=4599892 func=130 file=131 line=195 + pc=4804036 func=112 file=113 line=83 + pc=4803629 func=114 file=113 line=47 +Stack id=16 nframes=2 + pc=4804022 func=112 file=113 line=67 + pc=4803543 func=114 file=113 line=43 +Stack id=54 nframes=3 + pc=4804964 func=110 file=111 line=80 + pc=4804052 func=112 file=113 line=84 + pc=4803589 func=114 file=113 line=45 +Stack id=35 nframes=5 + pc=4599892 func=130 file=131 line=195 + pc=4804036 func=112 file=113 line=83 + pc=4804890 func=129 file=113 line=73 + pc=4802140 func=128 file=111 line=141 + pc=4804691 func=124 file=113 line=70 +Stack id=27 nframes=3 + pc=4804862 func=129 file=113 line=71 + pc=4802140 func=128 file=111 line=141 + pc=4804691 func=124 file=113 line=70 +Stack id=4 nframes=1 + pc=4542656 func=143 file=139 line=42 +Stack id=8 nframes=1 + pc=4802720 func=147 file=126 line=128 +Stack id=66 nframes=2 + pc=4804022 func=112 file=113 line=67 + pc=4803629 func=114 file=113 line=47 +Stack id=1 nframes=4 + pc=4548715 func=148 file=149 line=255 + pc=4533263 func=134 file=135 line=237 + pc=4802469 func=125 file=126 line=125 + pc=4803332 func=114 file=113 line=30 +Stack id=67 nframes=4 + pc=4804196 func=127 file=113 line=69 + pc=4802140 func=128 file=111 line=141 + pc=4804022 func=112 file=113 line=67 + pc=4803629 func=114 file=113 line=47 +Stack id=23 nframes=7 + pc=4641050 func=150 file=151 line=964 + pc=4751591 func=152 file=153 line=209 + pc=4751583 func=154 file=155 line=736 + pc=4751136 func=156 file=155 line=380 + pc=4753008 func=157 file=158 line=46 + pc=4753000 func=159 file=160 line=183 + pc=4802778 func=147 file=126 line=134 +Stack id=11 nframes=1 + pc=4803445 func=114 file=113 line=36 +Stack id=68 nframes=2 + pc=4804022 func=112 file=113 line=67 + pc=4803629 func=114 file=113 line=47 +Stack id=36 nframes=5 + pc=4804964 func=110 file=111 line=80 + pc=4804052 func=112 file=113 line=84 + pc=4804890 func=129 file=113 line=73 + pc=4802140 func=128 file=111 line=141 + pc=4804691 func=124 file=113 line=70 +Stack id=12 nframes=1 + pc=4803492 func=114 file=113 line=39 +Stack id=25 nframes=1 + pc=4802788 func=147 file=126 line=130 +EventBatch gen=1 m=18446744073709551615 time=2753925243266 size=3466 +Strings +String id=1 + data="Not worker" +String id=2 + data="GC (dedicated)" +String id=3 + data="GC (fractional)" +String id=4 + data="GC (idle)" +String id=5 + data="unspecified" +String id=6 + data="forever" +String id=7 + data="network" +String id=8 + data="select" +String id=9 + data="sync.(*Cond).Wait" +String id=10 + data="sync" +String id=11 + data="chan send" +String id=12 + data="chan receive" +String id=13 + data="GC mark assist wait for work" +String id=14 + data="GC background sweeper wait" +String id=15 + data="system goroutine wait" +String id=16 + data="preempted" +String id=17 + data="wait for debug call" +String id=18 + data="wait until GC ends" +String id=19 + data="sleep" +String id=20 + data="runtime.GoSched" +String id=21 + data="start trace" +String id=22 + data="type2" +String id=23 + data="type3" +String id=24 + data="log" +String id=25 + data="before do" +String id=26 + data="do" +String id=27 + data="log2" +String id=28 + data="do" +String id=29 + data="fanout" +String id=30 + data="region3" +String id=31 + data="region2" +String id=32 + data="fanout region3" +String id=33 + data="region0" +String id=34 + data="fanout region0" +String id=35 + data="region1" +String id=36 + data="fanout region1" +String id=37 + data="fanout region2" +String id=38 + data="before do" +String id=39 + data="do" +String id=40 + data="before do" +String id=41 + data="do" +String id=42 + data="fanout region1" +String id=43 + data="fanout region0" +String id=44 + data="before do" +String id=45 + data="do" +String id=46 + data="fanout region2" +String id=47 + data="before do" +String id=48 + data="do" +String id=49 + data="fanout region0" +String id=50 + data="fanout region1" +String id=51 + data="before do" +String id=52 + data="do" +String id=53 + data="region5" +String id=54 + data="fanout region5" +String id=55 + data="fanout region3" +String id=56 + data="region4" +String id=57 + data="fanout region4" +String id=58 + data="fanout region0" +String id=59 + data="fanout region1" +String id=60 + data="fanout region2" +String id=61 + data="before do" +String id=62 + data="do" +String id=63 + data="before do" +String id=64 + data="do" +String id=65 + data="fanout region4" +String id=66 + data="fanout region0" +String id=67 + data="fanout region1" +String id=68 + data="fanout region2" +String id=69 + data="before do" +String id=70 + data="do" +String id=71 + data="fanout region3" +String id=72 + data="before do" +String id=73 + data="do" +String id=74 + data="fanout region3" +String id=75 + data="fanout region0" +String id=76 + data="fanout region1" +String id=77 + data="fanout region2" +String id=78 + data="before do" +String id=79 + data="do" +String id=80 + data="before do" +String id=81 + data="do" +String id=82 + data="fanout region1" +String id=83 + data="fanout region0" +String id=84 + data="before do" +String id=85 + data="do" +String id=86 + data="fanout region2" +String id=87 + data="before do" +String id=88 + data="do" +String id=89 + data="fanout region0" +String id=90 + data="fanout region1" +String id=91 + data="before do" +String id=92 + data="do" +String id=93 + data="fanout region5" +String id=94 + data="fanout region0" +String id=95 + data="fanout region1" +String id=96 + data="fanout region2" +String id=97 + data="before do" +String id=98 + data="do" +String id=99 + data="fanout region4" +String id=100 + data="fanout region3" +String id=101 + data="before do" +String id=102 + data="do" +String id=103 + data="fanout region4" +String id=104 + data="fanout region0" +String id=105 + data="fanout region1" +String id=106 + data="fanout region2" +String id=107 + data="before do" +String id=108 + data="do" +String id=109 + data="fanout region3" +String id=110 + data="runtime/trace.(*Task).End" +String id=111 + data="/usr/local/google/home/mknyszek/work/go-1/src/runtime/trace/annotation.go" +String id=112 + data="main.do" +String id=113 + data="/usr/local/google/home/mknyszek/work/go-1/src/internal/trace/v2/testdata/testprog/annotations-stress.go" +String id=114 + data="main.main" +String id=115 + data="sync.(*Mutex).Lock" +String id=116 + data="/usr/local/google/home/mknyszek/work/go-1/src/sync/mutex.go" +String id=117 + data="sync.(*Pool).pinSlow" +String id=118 + data="/usr/local/google/home/mknyszek/work/go-1/src/sync/pool.go" +String id=119 + data="sync.(*Pool).pin" +String id=120 + data="sync.(*Pool).Get" +String id=121 + data="fmt.newPrinter" +String id=122 + data="/usr/local/google/home/mknyszek/work/go-1/src/fmt/print.go" +String id=123 + data="fmt.Sprintf" +String id=124 + data="main.do.func1.1" +String id=125 + data="runtime/trace.Start" +String id=126 + data="/usr/local/google/home/mknyszek/work/go-1/src/runtime/trace/trace.go" +String id=127 + data="main.do.func1" +String id=128 + data="runtime/trace.WithRegion" +String id=129 + data="main.do.func1.1.1" +String id=130 + data="time.Sleep" +String id=131 + data="/usr/local/google/home/mknyszek/work/go-1/src/runtime/time.go" +String id=132 + data="runtime.startTheWorld" +String id=133 + data="/usr/local/google/home/mknyszek/work/go-1/src/runtime/proc.go" +String id=134 + data="runtime.StartTrace" +String id=135 + data="/usr/local/google/home/mknyszek/work/go-1/src/runtime/trace2.go" +String id=136 + data="runtime.(*traceAdvancerState).start.func1" +String id=137 + data="runtime.(*traceAdvancerState).start" +String id=138 + data="runtime.traceStartReadCPU" +String id=139 + data="/usr/local/google/home/mknyszek/work/go-1/src/runtime/trace2cpu.go" +String id=140 + data="runtime.chanrecv1" +String id=141 + data="/usr/local/google/home/mknyszek/work/go-1/src/runtime/chan.go" +String id=142 + data="runtime.(*wakeableSleep).sleep" +String id=143 + data="runtime.traceStartReadCPU.func1" +String id=144 + data="runtime.newobject" +String id=145 + data="/usr/local/google/home/mknyszek/work/go-1/src/runtime/malloc.go" +String id=146 + data="sync.(*Mutex).Unlock" +String id=147 + data="runtime/trace.Start.func1" +String id=148 + data="runtime.traceLocker.Gomaxprocs" +String id=149 + data="/usr/local/google/home/mknyszek/work/go-1/src/runtime/trace2runtime.go" +String id=150 + data="syscall.write" +String id=151 + data="/usr/local/google/home/mknyszek/work/go-1/src/syscall/zsyscall_linux_amd64.go" +String id=152 + data="syscall.Write" +String id=153 + data="/usr/local/google/home/mknyszek/work/go-1/src/syscall/syscall_unix.go" +String id=154 + data="internal/poll.ignoringEINTRIO" +String id=155 + data="/usr/local/google/home/mknyszek/work/go-1/src/internal/poll/fd_unix.go" +String id=156 + data="internal/poll.(*FD).Write" +String id=157 + data="os.(*File).write" +String id=158 + data="/usr/local/google/home/mknyszek/work/go-1/src/os/file_posix.go" +String id=159 + data="os.(*File).Write" +String id=160 + data="/usr/local/google/home/mknyszek/work/go-1/src/os/file.go" From 7e32d8d10b3a8d29165415437ffcc210f914b7cc Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Tue, 14 Nov 2023 06:19:07 +0000 Subject: [PATCH 066/313] cmd/trace: factor out durationHistogram This code will be useful for the new tracer, and there's no need to duplicate it. This change copies it to internal/trace/traceviewer, adds some comments, and renames it to TimeHistogram. While we're here, let's get rid of the unused String method which has a comment talking about how awful the rendering is. Also, let's get rid of uses of niceDuration. We'd have to bring it with us in the move and I don't think it's worth it. The difference between the default time.Duration rendering and the niceDuration rendering is usually a few extra digits of precision. Yes, it's noisier, but AFAICT it's not substantially worse. It doesn't seem worth the new API, even if it's just internal. We can also always bring it back later. For #60773. For #63960. Change-Id: I795f58f579f1d503c540c3a40bed12e52bce38e2 Reviewed-on: https://go-review.googlesource.com/c/go/+/542001 LUCI-TryBot-Result: Go LUCI Auto-Submit: Michael Knyszek Reviewed-by: Michael Pratt --- src/cmd/trace/annotations.go | 127 ++------------------ src/cmd/trace/goroutines.go | 2 +- src/internal/trace/traceviewer/histogram.go | 86 +++++++++++++ 3 files changed, 94 insertions(+), 121 deletions(-) create mode 100644 src/internal/trace/traceviewer/histogram.go diff --git a/src/cmd/trace/annotations.go b/src/cmd/trace/annotations.go index 0addc240be..df194a7598 100644 --- a/src/cmd/trace/annotations.go +++ b/src/cmd/trace/annotations.go @@ -9,8 +9,8 @@ import ( "fmt" "html/template" "internal/trace" + "internal/trace/traceviewer" "log" - "math" "net/http" "net/url" "reflect" @@ -808,122 +808,9 @@ func newRegionFilter(r *http.Request) (*regionFilter, error) { }, nil } -type durationHistogram struct { - Count int - Buckets []int - MinBucket, MaxBucket int -} - -// Five buckets for every power of 10. -var logDiv = math.Log(math.Pow(10, 1.0/5)) - -func (h *durationHistogram) add(d time.Duration) { - var bucket int - if d > 0 { - bucket = int(math.Log(float64(d)) / logDiv) - } - if len(h.Buckets) <= bucket { - h.Buckets = append(h.Buckets, make([]int, bucket-len(h.Buckets)+1)...) - h.Buckets = h.Buckets[:cap(h.Buckets)] - } - h.Buckets[bucket]++ - if bucket < h.MinBucket || h.MaxBucket == 0 { - h.MinBucket = bucket - } - if bucket > h.MaxBucket { - h.MaxBucket = bucket - } - h.Count++ -} - -func (h *durationHistogram) BucketMin(bucket int) time.Duration { - return time.Duration(math.Exp(float64(bucket) * logDiv)) -} - -func niceDuration(d time.Duration) string { - var rnd time.Duration - var unit string - switch { - case d < 10*time.Microsecond: - rnd, unit = time.Nanosecond, "ns" - case d < 10*time.Millisecond: - rnd, unit = time.Microsecond, "µs" - case d < 10*time.Second: - rnd, unit = time.Millisecond, "ms" - default: - rnd, unit = time.Second, "s " - } - return fmt.Sprintf("%d%s", d/rnd, unit) -} - -func (h *durationHistogram) ToHTML(urlmaker func(min, max time.Duration) string) template.HTML { - if h == nil || h.Count == 0 { - return template.HTML("") - } - - const barWidth = 400 - - maxCount := 0 - for _, count := range h.Buckets { - if count > maxCount { - maxCount = count - } - } - - w := new(strings.Builder) - fmt.Fprintf(w, ``) - for i := h.MinBucket; i <= h.MaxBucket; i++ { - // Tick label. - if h.Buckets[i] > 0 { - fmt.Fprintf(w, ``, urlmaker(h.BucketMin(i), h.BucketMin(i+1)), niceDuration(h.BucketMin(i))) - } else { - fmt.Fprintf(w, ``, niceDuration(h.BucketMin(i))) - } - // Bucket bar. - width := h.Buckets[i] * barWidth / maxCount - fmt.Fprintf(w, ``, width) - // Bucket count. - fmt.Fprintf(w, ``, h.Buckets[i]) - fmt.Fprintf(w, "\n") - - } - // Final tick label. - fmt.Fprintf(w, ``, niceDuration(h.BucketMin(h.MaxBucket+1))) - fmt.Fprintf(w, `
%s
%s
 
%d
%s
`) - return template.HTML(w.String()) -} - -func (h *durationHistogram) String() string { - const barWidth = 40 - - labels := []string{} - maxLabel := 0 - maxCount := 0 - for i := h.MinBucket; i <= h.MaxBucket; i++ { - // TODO: This formatting is pretty awful. - label := fmt.Sprintf("[%-12s%-11s)", h.BucketMin(i).String()+",", h.BucketMin(i+1)) - labels = append(labels, label) - if len(label) > maxLabel { - maxLabel = len(label) - } - count := h.Buckets[i] - if count > maxCount { - maxCount = count - } - } - - w := new(strings.Builder) - for i := h.MinBucket; i <= h.MaxBucket; i++ { - count := h.Buckets[i] - bar := count * barWidth / maxCount - fmt.Fprintf(w, "%*s %-*s %d\n", maxLabel, labels[i-h.MinBucket], barWidth, strings.Repeat("█", bar), count) - } - return w.String() -} - type regionStats struct { regionTypeID - Histogram durationHistogram + Histogram traceviewer.TimeHistogram } func (s *regionStats) UserRegionURL() func(min, max time.Duration) string { @@ -933,7 +820,7 @@ func (s *regionStats) UserRegionURL() func(min, max time.Duration) string { } func (s *regionStats) add(region regionDesc) { - s.Histogram.add(region.duration()) + s.Histogram.Add(region.duration()) } var templUserRegionTypes = template.Must(template.New("").Parse(` @@ -966,8 +853,8 @@ var templUserRegionTypes = template.Must(template.New("").Parse(` type taskStats struct { Type string - Count int // Complete + incomplete tasks - Histogram durationHistogram // Complete tasks only + Count int // Complete + incomplete tasks + Histogram traceviewer.TimeHistogram // Complete tasks only } func (s *taskStats) UserTaskURL(complete bool) func(min, max time.Duration) string { @@ -979,7 +866,7 @@ func (s *taskStats) UserTaskURL(complete bool) func(min, max time.Duration) stri func (s *taskStats) add(task *taskDesc) { s.Count++ if task.complete() { - s.Histogram.add(task.duration()) + s.Histogram.Add(task.duration()) } } @@ -1169,7 +1056,7 @@ func isUserAnnotationEvent(ev *trace.Event) (taskID uint64, ok bool) { var templUserRegionType = template.Must(template.New("").Funcs(template.FuncMap{ "prettyDuration": func(nsec int64) template.HTML { d := time.Duration(nsec) * time.Nanosecond - return template.HTML(niceDuration(d)) + return template.HTML(d.String()) }, "percent": func(dividend, divisor int64) template.HTML { if divisor == 0 { diff --git a/src/cmd/trace/goroutines.go b/src/cmd/trace/goroutines.go index 7850fc0ff1..28eace82fa 100644 --- a/src/cmd/trace/goroutines.go +++ b/src/cmd/trace/goroutines.go @@ -169,7 +169,7 @@ func httpGoroutine(w http.ResponseWriter, r *http.Request) { var templGoroutine = template.Must(template.New("").Funcs(template.FuncMap{ "prettyDuration": func(nsec int64) template.HTML { d := time.Duration(nsec) * time.Nanosecond - return template.HTML(niceDuration(d)) + return template.HTML(d.String()) }, "percent": func(dividend, divisor int64) template.HTML { if divisor == 0 { diff --git a/src/internal/trace/traceviewer/histogram.go b/src/internal/trace/traceviewer/histogram.go new file mode 100644 index 0000000000..d4c8749dc9 --- /dev/null +++ b/src/internal/trace/traceviewer/histogram.go @@ -0,0 +1,86 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package traceviewer + +import ( + "fmt" + "html/template" + "math" + "strings" + "time" +) + +// TimeHistogram is an high-dynamic-range histogram for durations. +type TimeHistogram struct { + Count int + Buckets []int + MinBucket, MaxBucket int +} + +// Five buckets for every power of 10. +var logDiv = math.Log(math.Pow(10, 1.0/5)) + +// Add adds a single sample to the histogram. +func (h *TimeHistogram) Add(d time.Duration) { + var bucket int + if d > 0 { + bucket = int(math.Log(float64(d)) / logDiv) + } + if len(h.Buckets) <= bucket { + h.Buckets = append(h.Buckets, make([]int, bucket-len(h.Buckets)+1)...) + h.Buckets = h.Buckets[:cap(h.Buckets)] + } + h.Buckets[bucket]++ + if bucket < h.MinBucket || h.MaxBucket == 0 { + h.MinBucket = bucket + } + if bucket > h.MaxBucket { + h.MaxBucket = bucket + } + h.Count++ +} + +// BucketMin returns the minimum duration value for a provided bucket. +func (h *TimeHistogram) BucketMin(bucket int) time.Duration { + return time.Duration(math.Exp(float64(bucket) * logDiv)) +} + +// ToHTML renders the histogram as HTML. +func (h *TimeHistogram) ToHTML(urlmaker func(min, max time.Duration) string) template.HTML { + if h == nil || h.Count == 0 { + return template.HTML("") + } + + const barWidth = 400 + + maxCount := 0 + for _, count := range h.Buckets { + if count > maxCount { + maxCount = count + } + } + + w := new(strings.Builder) + fmt.Fprintf(w, ``) + for i := h.MinBucket; i <= h.MaxBucket; i++ { + // Tick label. + if h.Buckets[i] > 0 { + fmt.Fprintf(w, ``, urlmaker(h.BucketMin(i), h.BucketMin(i+1)), h.BucketMin(i)) + } else { + fmt.Fprintf(w, ``, h.BucketMin(i)) + } + // Bucket bar. + width := h.Buckets[i] * barWidth / maxCount + fmt.Fprintf(w, ``, width) + // Bucket count. + fmt.Fprintf(w, ``, h.Buckets[i]) + fmt.Fprintf(w, "\n") + + } + // Final tick label. + fmt.Fprintf(w, ``, h.BucketMin(h.MaxBucket+1)) + fmt.Fprintf(w, `
%s
%s
 
%d
%s
`) + return template.HTML(w.String()) +} From 71052169be2d4de14f2e93ea6ba9811b54434bc3 Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Tue, 14 Nov 2023 03:38:04 +0000 Subject: [PATCH 067/313] cmd/trace/v2: add support for task and region endpoints This change fills out the last of cmd/trace's subpages for v2 traces by adding support for task and region endpoints. For #60773. For #63960. Change-Id: Ifc4c660514b3904788785a1b20e3abc3bb9e55f1 Reviewed-on: https://go-review.googlesource.com/c/go/+/542077 Reviewed-by: Michael Pratt Auto-Submit: Michael Knyszek LUCI-TryBot-Result: Go LUCI --- src/cmd/trace/v2/goroutines.go | 6 +- src/cmd/trace/v2/main.go | 8 + src/cmd/trace/v2/pprof.go | 90 ------ src/cmd/trace/v2/regions.go | 529 +++++++++++++++++++++++++++++++++ src/cmd/trace/v2/tasks.go | 477 +++++++++++++++++++++++++++++ src/internal/trace/summary.go | 6 + 6 files changed, 1023 insertions(+), 93 deletions(-) create mode 100644 src/cmd/trace/v2/regions.go create mode 100644 src/cmd/trace/v2/tasks.go diff --git a/src/cmd/trace/v2/goroutines.go b/src/cmd/trace/v2/goroutines.go index 5c300024ee..44febeba88 100644 --- a/src/cmd/trace/v2/goroutines.go +++ b/src/cmd/trace/v2/goroutines.go @@ -67,7 +67,7 @@ var templGoroutines = template.Must(template.New("").Parse(` + +

Regions

+ +Below is a table containing a summary of all the user-defined regions in the trace. +Regions are grouped by the region type and the point at which the region started. +The rightmost column of the table contains a latency histogram for each region group. +Note that this histogram only counts regions that began and ended within the traced +period. +However, the "Count" column includes all regions, including those that only started +or ended during the traced period. +Regions that were active through the trace period were not recorded, and so are not +accounted for at all. +Click on the links to explore a breakdown of time spent for each region by goroutine +and user-defined task. +
+
+ + + + + + + +{{range $}} + + + + + +{{end}} +
Region typeCountDuration distribution (complete tasks)
{{printf "%q" .Type}}
{{.Frame.Func}} @ {{printf "0x%x" .Frame.PC}}
{{.Frame.File}}:{{.Frame.Line}}
{{.Histogram.Count}}{{.Histogram.ToHTML (.UserRegionURL)}}
+ + +`)) + +// UserRegionHandlerFunc returns a HandlerFunc that presents the details of the selected regions. +func UserRegionHandlerFunc(t *parsedTrace) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + // Construct the filter from the request. + filter, err := newRegionFilter(r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + + // Collect all the regions with their goroutines. + type region struct { + *trace.UserRegionSummary + Goroutine tracev2.GoID + NonOverlappingStats map[string]time.Duration + HasRangeTime bool + } + var regions []region + var maxTotal time.Duration + validNonOverlappingStats := make(map[string]struct{}) + validRangeStats := make(map[string]struct{}) + for _, g := range t.summary.Goroutines { + for _, r := range g.Regions { + if !filter.match(t, r) { + continue + } + nonOverlappingStats := r.NonOverlappingStats() + for name := range nonOverlappingStats { + validNonOverlappingStats[name] = struct{}{} + } + var totalRangeTime time.Duration + for name, dt := range r.RangeTime { + validRangeStats[name] = struct{}{} + totalRangeTime += dt + } + regions = append(regions, region{ + UserRegionSummary: r, + Goroutine: g.ID, + NonOverlappingStats: nonOverlappingStats, + HasRangeTime: totalRangeTime != 0, + }) + if maxTotal < r.TotalTime { + maxTotal = r.TotalTime + } + } + } + + // Sort. + sortBy := r.FormValue("sortby") + if _, ok := validNonOverlappingStats[sortBy]; ok { + slices.SortFunc(regions, func(a, b region) int { + return cmp.Compare(b.NonOverlappingStats[sortBy], a.NonOverlappingStats[sortBy]) + }) + } else { + // Sort by total time by default. + slices.SortFunc(regions, func(a, b region) int { + return cmp.Compare(b.TotalTime, a.TotalTime) + }) + } + + // Write down all the non-overlapping stats and sort them. + allNonOverlappingStats := make([]string, 0, len(validNonOverlappingStats)) + for name := range validNonOverlappingStats { + allNonOverlappingStats = append(allNonOverlappingStats, name) + } + slices.SortFunc(allNonOverlappingStats, func(a, b string) int { + if a == b { + return 0 + } + if a == "Execution time" { + return -1 + } + if b == "Execution time" { + return 1 + } + return cmp.Compare(a, b) + }) + + // Write down all the range stats and sort them. + allRangeStats := make([]string, 0, len(validRangeStats)) + for name := range validRangeStats { + allRangeStats = append(allRangeStats, name) + } + sort.Strings(allRangeStats) + + err = templUserRegionType.Execute(w, struct { + MaxTotal time.Duration + Regions []region + Name string + Filter *regionFilter + NonOverlappingStats []string + RangeStats []string + }{ + MaxTotal: maxTotal, + Regions: regions, + Name: filter.name, + Filter: filter, + NonOverlappingStats: allNonOverlappingStats, + RangeStats: allRangeStats, + }) + if err != nil { + http.Error(w, fmt.Sprintf("failed to execute template: %v", err), http.StatusInternalServerError) + return + } + } +} + +var templUserRegionType = template.Must(template.New("").Funcs(template.FuncMap{ + "headerStyle": func(statName string) template.HTMLAttr { + return template.HTMLAttr(fmt.Sprintf("style=\"background-color: %s;\"", stat2Color(statName))) + }, + "barStyle": func(statName string, dividend, divisor time.Duration) template.HTMLAttr { + width := "0" + if divisor != 0 { + width = fmt.Sprintf("%.2f%%", float64(dividend)/float64(divisor)*100) + } + return template.HTMLAttr(fmt.Sprintf("style=\"width: %s; background-color: %s;\"", width, stat2Color(statName))) + }, + "filterParams": func(f *regionFilter) template.URL { + return template.URL(f.params.Encode()) + }, +}).Parse(` + +Regions: {{.Name}} + + + + +

Regions: {{.Name}}

+ +Table of contents + + +

Summary

+ +{{ with $p := filterParams .Filter}} + + + + + + + + + + + + + + + + + +
Network wait profile: graph (download)
Sync block profile: graph (download)
Syscall profile: graph (download)
Scheduler wait profile: graph (download)
+{{ end }} + +

Breakdown

+ +The table below breaks down where each goroutine is spent its time during the +traced period. +All of the columns except total time are non-overlapping. +
+
+ + + + + + + +{{range $.NonOverlappingStats}} + +{{end}} + +{{range .Regions}} + + + + + + {{$Region := .}} + {{range $.NonOverlappingStats}} + {{$Time := index $Region.NonOverlappingStats .}} + + {{end}} + +{{end}} +
Goroutine Task Total {{.}}
{{.Goroutine}} {{if .TaskID}}{{.TaskID}}{{end}} {{ .TotalTime.String }} +
+ {{$Region := .}} + {{range $.NonOverlappingStats}} + {{$Time := index $Region.NonOverlappingStats .}} + {{if $Time}} +   + {{end}} + {{end}} +
+
{{$Time.String}}
+ +

Special ranges

+ +The table below describes how much of the traced period each goroutine spent in +certain special time ranges. +If a goroutine has spent no time in any special time ranges, it is excluded from +the table. +For example, how much time it spent helping the GC. Note that these times do +overlap with the times from the first table. +In general the goroutine may not be executing in these special time ranges. +For example, it may have blocked while trying to help the GC. +This must be taken into account when interpreting the data. +
+
+ + + + + + +{{range $.RangeStats}} + +{{end}} + +{{range .Regions}} + {{if .HasRangeTime}} + + + + + {{$Region := .}} + {{range $.RangeStats}} + {{$Time := index $Region.RangeTime .}} + + {{end}} + + {{end}} +{{end}} +
Goroutine Task Total {{.}}
{{.Goroutine}} {{if .TaskID}}{{.TaskID}}{{end}} {{ .TotalTime.String }} {{$Time.String}}
+`)) + +// regionFilter represents a region filter specified by a user of cmd/trace. +type regionFilter struct { + name string + params url.Values + cond []func(*parsedTrace, *trace.UserRegionSummary) bool +} + +// match returns true if a region, described by its ID and summary, matches +// the filter. +func (f *regionFilter) match(t *parsedTrace, s *trace.UserRegionSummary) bool { + for _, c := range f.cond { + if !c(t, s) { + return false + } + } + return true +} + +// newRegionFilter creates a new region filter from URL query variables. +func newRegionFilter(r *http.Request) (*regionFilter, error) { + if err := r.ParseForm(); err != nil { + return nil, err + } + + var name []string + var conditions []func(*parsedTrace, *trace.UserRegionSummary) bool + filterParams := make(url.Values) + + param := r.Form + if typ, ok := param["type"]; ok && len(typ) > 0 { + name = append(name, fmt.Sprintf("%q", typ[0])) + conditions = append(conditions, func(_ *parsedTrace, r *trace.UserRegionSummary) bool { + return r.Name == typ[0] + }) + filterParams.Add("type", typ[0]) + } + if pc, err := strconv.ParseUint(r.FormValue("pc"), 16, 64); err == nil { + encPC := fmt.Sprintf("0x%x", pc) + name = append(name, "@ "+encPC) + conditions = append(conditions, func(_ *parsedTrace, r *trace.UserRegionSummary) bool { + return regionTopStackFrame(r).PC == pc + }) + filterParams.Add("pc", encPC) + } + + if lat, err := time.ParseDuration(r.FormValue("latmin")); err == nil { + name = append(name, fmt.Sprintf("(latency >= %s)", lat)) + conditions = append(conditions, func(t *parsedTrace, r *trace.UserRegionSummary) bool { + return regionInterval(t, r).duration() >= lat + }) + filterParams.Add("latmin", lat.String()) + } + if lat, err := time.ParseDuration(r.FormValue("latmax")); err == nil { + name = append(name, fmt.Sprintf("(latency <= %s)", lat)) + conditions = append(conditions, func(t *parsedTrace, r *trace.UserRegionSummary) bool { + return regionInterval(t, r).duration() <= lat + }) + filterParams.Add("latmax", lat.String()) + } + + return ®ionFilter{ + name: strings.Join(name, " "), + cond: conditions, + params: filterParams, + }, nil +} + +func regionInterval(t *parsedTrace, s *trace.UserRegionSummary) interval { + var i interval + if s.Start != nil { + i.start = s.Start.Time() + } else { + i.start = t.startTime() + } + if s.End != nil { + i.end = s.End.Time() + } else { + i.end = t.endTime() + } + return i +} diff --git a/src/cmd/trace/v2/tasks.go b/src/cmd/trace/v2/tasks.go new file mode 100644 index 0000000000..fb40811565 --- /dev/null +++ b/src/cmd/trace/v2/tasks.go @@ -0,0 +1,477 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package trace + +import ( + "bytes" + "cmp" + "fmt" + "html/template" + "internal/trace" + "internal/trace/traceviewer" + tracev2 "internal/trace/v2" + "log" + "net/http" + "slices" + "strings" + "time" +) + +// UserTasksHandlerFunc returns a HandlerFunc that reports all tasks found in the trace. +func UserTasksHandlerFunc(t *parsedTrace) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + tasks := t.summary.Tasks + + // Summarize groups of tasks with the same name. + summary := make(map[string]taskStats) + for _, task := range tasks { + stats, ok := summary[task.Name] + if !ok { + stats.Type = task.Name + } + stats.add(task) + summary[task.Name] = stats + } + + // Sort tasks by type. + userTasks := make([]taskStats, 0, len(summary)) + for _, stats := range summary { + userTasks = append(userTasks, stats) + } + slices.SortFunc(userTasks, func(a, b taskStats) int { + return cmp.Compare(a.Type, b.Type) + }) + + // Emit table. + err := templUserTaskTypes.Execute(w, userTasks) + if err != nil { + http.Error(w, fmt.Sprintf("failed to execute template: %v", err), http.StatusInternalServerError) + return + } + } +} + +type taskStats struct { + Type string + Count int // Complete + incomplete tasks + Histogram traceviewer.TimeHistogram // Complete tasks only +} + +func (s *taskStats) UserTaskURL(complete bool) func(min, max time.Duration) string { + return func(min, max time.Duration) string { + return fmt.Sprintf("/usertask?type=%s&complete=%v&latmin=%v&latmax=%v", template.URLQueryEscaper(s.Type), template.URLQueryEscaper(complete), template.URLQueryEscaper(min), template.URLQueryEscaper(max)) + } +} + +func (s *taskStats) add(task *trace.UserTaskSummary) { + s.Count++ + if task.Complete() { + s.Histogram.Add(task.End.Time().Sub(task.Start.Time())) + } +} + +var templUserTaskTypes = template.Must(template.New("").Parse(` + +Tasks + + +Search log text:

+ + + + + + +{{range $}} + + + + + +{{end}} +
Task typeCountDuration distribution (complete tasks)
{{.Type}}{{.Count}}{{.Histogram.ToHTML (.UserTaskURL true)}}
+ + +`)) + +// UserTaskHandlerFunc returns a HandlerFunc that presents the details of the selected tasks. +func UserTaskHandlerFunc(t *parsedTrace) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + filter, err := newTaskFilter(r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + type event struct { + WhenString string + Elapsed time.Duration + Goroutine tracev2.GoID + What string + // TODO: include stack trace of creation time + } + type task struct { + WhenString string + ID tracev2.TaskID + Duration time.Duration + Complete bool + Events []event + Start, End time.Duration // Time since the beginning of the trace + GCTime time.Duration + } + var tasks []task + for _, summary := range t.summary.Tasks { + if !filter.match(t, summary) { + continue + } + + // Collect all the events for the task. + var rawEvents []*tracev2.Event + if summary.Start != nil { + rawEvents = append(rawEvents, summary.Start) + } + if summary.End != nil { + rawEvents = append(rawEvents, summary.End) + } + rawEvents = append(rawEvents, summary.Logs...) + for _, r := range summary.Regions { + if r.Start != nil { + rawEvents = append(rawEvents, r.Start) + } + if r.End != nil { + rawEvents = append(rawEvents, r.End) + } + } + + // Sort them. + slices.SortStableFunc(rawEvents, func(a, b *tracev2.Event) int { + return cmp.Compare(a.Time(), b.Time()) + }) + + // Summarize them. + var events []event + last := t.startTime() + for _, ev := range rawEvents { + what := describeEvent(ev) + if what == "" { + continue + } + sinceStart := ev.Time().Sub(t.startTime()) + events = append(events, event{ + WhenString: fmt.Sprintf("%2.9f", sinceStart.Seconds()), + Elapsed: ev.Time().Sub(last), + What: what, + Goroutine: primaryGoroutine(ev), + }) + last = ev.Time() + } + taskSpan := taskInterval(t, summary) + taskStart := taskSpan.start.Sub(t.startTime()) + + // Produce the task summary. + tasks = append(tasks, task{ + WhenString: fmt.Sprintf("%2.9fs", taskStart.Seconds()), + Duration: taskSpan.duration(), + ID: summary.ID, + Complete: summary.Complete(), + Events: events, + Start: taskStart, + End: taskStart + taskSpan.duration(), + }) + } + // Sort the tasks by duration. + slices.SortFunc(tasks, func(a, b task) int { + return cmp.Compare(a.Duration, b.Duration) + }) + + // Emit table. + err = templUserTaskType.Execute(w, struct { + Name string + Tasks []task + }{ + Name: filter.name, + Tasks: tasks, + }) + if err != nil { + log.Printf("failed to execute template: %v", err) + http.Error(w, fmt.Sprintf("failed to execute template: %v", err), http.StatusInternalServerError) + return + } + } +} + +var templUserTaskType = template.Must(template.New("userTask").Funcs(template.FuncMap{ + "elapsed": elapsed, + "asMillisecond": asMillisecond, + "trimSpace": strings.TrimSpace, +}).Parse(` + +Tasks: {{.Name}} + + + +

User Task: {{.Name}}

+ +Search log text:
+ +

+ + + + + + + + + {{range $el := $.Tasks}} + + + + + + + {{range $el.Events}} + + + + + + + {{end}} + {{end}} + + +`)) + +// taskFilter represents a task filter specified by a user of cmd/trace. +type taskFilter struct { + name string + cond []func(*parsedTrace, *trace.UserTaskSummary) bool +} + +// match returns true if a task, described by its ID and summary, matches +// the filter. +func (f *taskFilter) match(t *parsedTrace, task *trace.UserTaskSummary) bool { + if t == nil { + return false + } + for _, c := range f.cond { + if !c(t, task) { + return false + } + } + return true +} + +// newTaskFilter creates a new task filter from URL query variables. +func newTaskFilter(r *http.Request) (*taskFilter, error) { + if err := r.ParseForm(); err != nil { + return nil, err + } + + var name []string + var conditions []func(*parsedTrace, *trace.UserTaskSummary) bool + + param := r.Form + if typ, ok := param["type"]; ok && len(typ) > 0 { + name = append(name, fmt.Sprintf("%q", typ[0])) + conditions = append(conditions, func(_ *parsedTrace, task *trace.UserTaskSummary) bool { + return task.Name == typ[0] + }) + } + if complete := r.FormValue("complete"); complete == "1" { + name = append(name, "complete") + conditions = append(conditions, func(_ *parsedTrace, task *trace.UserTaskSummary) bool { + return task.Complete() + }) + } else if complete == "0" { + name = append(name, "incomplete") + conditions = append(conditions, func(_ *parsedTrace, task *trace.UserTaskSummary) bool { + return !task.Complete() + }) + } + if lat, err := time.ParseDuration(r.FormValue("latmin")); err == nil { + name = append(name, fmt.Sprintf("latency >= %s", lat)) + conditions = append(conditions, func(t *parsedTrace, task *trace.UserTaskSummary) bool { + return task.Complete() && taskInterval(t, task).duration() >= lat + }) + } + if lat, err := time.ParseDuration(r.FormValue("latmax")); err == nil { + name = append(name, fmt.Sprintf("latency <= %s", lat)) + conditions = append(conditions, func(t *parsedTrace, task *trace.UserTaskSummary) bool { + return task.Complete() && taskInterval(t, task).duration() <= lat + }) + } + if text := r.FormValue("logtext"); text != "" { + name = append(name, fmt.Sprintf("log contains %q", text)) + conditions = append(conditions, func(_ *parsedTrace, task *trace.UserTaskSummary) bool { + return taskMatches(task, text) + }) + } + + return &taskFilter{name: strings.Join(name, ","), cond: conditions}, nil +} + +func taskInterval(t *parsedTrace, s *trace.UserTaskSummary) interval { + var i interval + if s.Start != nil { + i.start = s.Start.Time() + } else { + i.start = t.startTime() + } + if s.End != nil { + i.end = s.End.Time() + } else { + i.end = t.endTime() + } + return i +} + +func taskMatches(t *trace.UserTaskSummary, text string) bool { + matches := func(s string) bool { + return strings.Contains(s, text) + } + if matches(t.Name) { + return true + } + for _, r := range t.Regions { + if matches(r.Name) { + return true + } + } + for _, ev := range t.Logs { + log := ev.Log() + if matches(log.Category) { + return true + } + if matches(log.Message) { + return true + } + } + return false +} + +func describeEvent(ev *tracev2.Event) string { + switch ev.Kind() { + case tracev2.EventStateTransition: + st := ev.StateTransition() + if st.Resource.Kind != tracev2.ResourceGoroutine { + return "" + } + old, new := st.Goroutine() + return fmt.Sprintf("%s -> %s", old, new) + case tracev2.EventRegionBegin: + return fmt.Sprintf("region %q begin", ev.Region().Type) + case tracev2.EventRegionEnd: + return fmt.Sprintf("region %q end", ev.Region().Type) + case tracev2.EventTaskBegin: + t := ev.Task() + return fmt.Sprintf("task %q (D %d, parent %d) begin", t.Type, t.ID, t.Parent) + case tracev2.EventTaskEnd: + return "task end" + case tracev2.EventLog: + log := ev.Log() + if log.Category != "" { + return fmt.Sprintf("log %q", log.Message) + } + return fmt.Sprintf("log (category: %s): %q", log.Category, log.Message) + } + return "" +} + +func primaryGoroutine(ev *tracev2.Event) tracev2.GoID { + if ev.Kind() != tracev2.EventStateTransition { + return ev.Goroutine() + } + st := ev.StateTransition() + if st.Resource.Kind != tracev2.ResourceGoroutine { + return tracev2.NoGoroutine + } + return st.Resource.Goroutine() +} + +func elapsed(d time.Duration) string { + b := fmt.Appendf(nil, "%.9f", d.Seconds()) + + // For subsecond durations, blank all zeros before decimal point, + // and all zeros between the decimal point and the first non-zero digit. + if d < time.Second { + dot := bytes.IndexByte(b, '.') + for i := 0; i < dot; i++ { + b[i] = ' ' + } + for i := dot + 1; i < len(b); i++ { + if b[i] == '0' { + b[i] = ' ' + } else { + break + } + } + } + return string(b) +} + +func asMillisecond(d time.Duration) float64 { + return float64(d.Nanoseconds()) / float64(time.Millisecond) +} diff --git a/src/internal/trace/summary.go b/src/internal/trace/summary.go index f57146e950..934a980c7c 100644 --- a/src/internal/trace/summary.go +++ b/src/internal/trace/summary.go @@ -64,6 +64,12 @@ type UserTaskSummary struct { Goroutines map[tracev2.GoID]*GoroutineSummary } +// Complete returns true if we have complete information about the task +// from the trace: both a start and an end. +func (s *UserTaskSummary) Complete() bool { + return s.Start != nil && s.End != nil +} + // UserRegionSummary represents a region and goroutine execution stats // while the region was active. (For v2 traces.) type UserRegionSummary struct { From 64c12bafea06144c0d4e3f3bee80171021800903 Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Sat, 18 Nov 2023 05:50:50 +0000 Subject: [PATCH 068/313] cmd/trace/v2: add support for goroutine filtering This change adds support for the trace?goid= endpoint to the trace tool for v2 traces. In effect, this change actually implements a per-goroutine view. I tried to add a link to the main page to enable a "view by goroutines" view without filtering, but the web trace viewer broke the browser tab when there were a few hundred goroutines. The risk of a browser hang probably isn't worth the cases where this is nice, especially since filtering by goroutine already works. Unfortunate, but c'est l'vie. Might be worth revisiting if we change out the web viewer in the future. For #60773. For #63960. Change-Id: I8e29f4ab8346af6708fd8824505c30f2c43db796 Reviewed-on: https://go-review.googlesource.com/c/go/+/543595 TryBot-Bypass: Michael Knyszek Reviewed-by: Michael Pratt Auto-Submit: Michael Knyszek --- src/cmd/trace/v2/goroutinegen.go | 164 +++++++++++++++++++++++++++++ src/cmd/trace/v2/jsontrace.go | 63 ++++++++++- src/cmd/trace/v2/main.go | 2 +- src/internal/trace/summary.go | 18 +--- src/internal/trace/summary_test.go | 26 ++++- 5 files changed, 249 insertions(+), 24 deletions(-) create mode 100644 src/cmd/trace/v2/goroutinegen.go diff --git a/src/cmd/trace/v2/goroutinegen.go b/src/cmd/trace/v2/goroutinegen.go new file mode 100644 index 0000000000..4f466c0e61 --- /dev/null +++ b/src/cmd/trace/v2/goroutinegen.go @@ -0,0 +1,164 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package trace + +import ( + tracev2 "internal/trace/v2" +) + +var _ generator = &goroutineGenerator{} + +type goroutineGenerator struct { + globalRangeGenerator + globalMetricGenerator + stackSampleGenerator[tracev2.GoID] + + gStates map[tracev2.GoID]*gState[tracev2.GoID] + focus tracev2.GoID + filter map[tracev2.GoID]struct{} +} + +func newGoroutineGenerator(ctx *traceContext, focus tracev2.GoID, filter map[tracev2.GoID]struct{}) *goroutineGenerator { + gg := new(goroutineGenerator) + gg.stackSampleGenerator.getResource = func(ev *tracev2.Event) tracev2.GoID { + return ev.Goroutine() + } + gg.gStates = make(map[tracev2.GoID]*gState[tracev2.GoID]) + gg.focus = focus + gg.filter = filter + + // Enable a filter on the emitter. + if filter != nil { + ctx.SetResourceFilter(func(resource uint64) bool { + _, ok := filter[tracev2.GoID(resource)] + return ok + }) + } + return gg +} + +func (g *goroutineGenerator) Sync() { + g.globalRangeGenerator.Sync() +} + +func (g *goroutineGenerator) GoroutineLabel(ctx *traceContext, ev *tracev2.Event) { + l := ev.Label() + g.gStates[l.Resource.Goroutine()].setLabel(l.Label) +} + +func (g *goroutineGenerator) GoroutineRange(ctx *traceContext, ev *tracev2.Event) { + r := ev.Range() + switch ev.Kind() { + case tracev2.EventRangeBegin: + g.gStates[r.Scope.Goroutine()].rangeBegin(ev.Time(), r.Name, ev.Stack()) + case tracev2.EventRangeActive: + g.gStates[r.Scope.Goroutine()].rangeActive(r.Name) + case tracev2.EventRangeEnd: + gs := g.gStates[r.Scope.Goroutine()] + gs.rangeEnd(ev.Time(), r.Name, ev.Stack(), ctx) + } +} + +func (g *goroutineGenerator) GoroutineTransition(ctx *traceContext, ev *tracev2.Event) { + st := ev.StateTransition() + goID := st.Resource.Goroutine() + + // If we haven't seen this goroutine before, create a new + // gState for it. + gs, ok := g.gStates[goID] + if !ok { + gs = newGState[tracev2.GoID](goID) + g.gStates[goID] = gs + } + + // Try to augment the name of the goroutine. + gs.augmentName(st.Stack) + + // Handle the goroutine state transition. + from, to := st.Goroutine() + if from == to { + // Filter out no-op events. + return + } + if from.Executing() && !to.Executing() { + if to == tracev2.GoWaiting { + // Goroutine started blocking. + gs.block(ev.Time(), ev.Stack(), st.Reason, ctx) + } else { + gs.stop(ev.Time(), ev.Stack(), ctx) + } + } + if !from.Executing() && to.Executing() { + start := ev.Time() + if from == tracev2.GoUndetermined { + // Back-date the event to the start of the trace. + start = ctx.startTime + } + gs.start(start, goID, ctx) + } + + if from == tracev2.GoWaiting { + // Goroutine unblocked. + gs.unblock(ev.Time(), ev.Stack(), ev.Goroutine(), ctx) + } + if from == tracev2.GoNotExist && to == tracev2.GoRunnable { + // Goroutine was created. + gs.created(ev.Time(), ev.Goroutine(), ev.Stack()) + } + if from == tracev2.GoSyscall && to != tracev2.GoRunning { + // Exiting blocked syscall. + gs.syscallEnd(ev.Time(), true, ctx) + gs.blockedSyscallEnd(ev.Time(), ev.Stack(), ctx) + } else if from == tracev2.GoSyscall { + // Check if we're exiting a syscall in a non-blocking way. + gs.syscallEnd(ev.Time(), false, ctx) + } + + // Handle syscalls. + if to == tracev2.GoSyscall { + start := ev.Time() + if from == tracev2.GoUndetermined { + // Back-date the event to the start of the trace. + start = ctx.startTime + } + // Write down that we've entered a syscall. Note: we might have no G or P here + // if we're in a cgo callback or this is a transition from GoUndetermined + // (i.e. the G has been blocked in a syscall). + gs.syscallBegin(start, goID, ev.Stack()) + } + + // Note down the goroutine transition. + _, inMarkAssist := gs.activeRanges["GC mark assist"] + ctx.GoroutineTransition(ctx.elapsed(ev.Time()), viewerGState(from, inMarkAssist), viewerGState(to, inMarkAssist)) +} + +func (g *goroutineGenerator) ProcRange(ctx *traceContext, ev *tracev2.Event) { + // TODO(mknyszek): Extend procRangeGenerator to support rendering proc ranges + // that overlap with a goroutine's execution. +} + +func (g *goroutineGenerator) ProcTransition(ctx *traceContext, ev *tracev2.Event) { + // Not needed. All relevant information for goroutines can be derived from goroutine transitions. +} + +func (g *goroutineGenerator) Finish(ctx *traceContext, endTime tracev2.Time) { + ctx.SetResourceType("G") + + // Finish off global ranges. + g.globalRangeGenerator.Finish(ctx, endTime) + + // Finish off all the goroutine slices. + for id, gs := range g.gStates { + gs.finish(endTime, ctx) + + // Tell the emitter about the goroutines we want to render. + ctx.Resource(uint64(id), gs.name()) + } + + // Set the goroutine to focus on. + if g.focus != tracev2.NoGoroutine { + ctx.Focus(uint64(g.focus)) + } +} diff --git a/src/cmd/trace/v2/jsontrace.go b/src/cmd/trace/v2/jsontrace.go index 5b98850c20..681a8c1657 100644 --- a/src/cmd/trace/v2/jsontrace.go +++ b/src/cmd/trace/v2/jsontrace.go @@ -11,12 +11,44 @@ import ( "strconv" "time" + "internal/trace" "internal/trace/traceviewer" tracev2 "internal/trace/v2" ) func JSONTraceHandler(parsed *parsedTrace) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + opts := defaultGenOpts() + + if goids := r.FormValue("goid"); goids != "" { + // Render trace focused on a particular goroutine. + + id, err := strconv.ParseUint(goids, 10, 64) + if err != nil { + log.Printf("failed to parse goid parameter %q: %v", goids, err) + return + } + goid := tracev2.GoID(id) + g, ok := parsed.summary.Goroutines[goid] + if !ok { + log.Printf("failed to find goroutine %d", goid) + return + } + opts.mode = traceviewer.ModeGoroutineOriented + if g.StartTime != 0 { + opts.startTime = g.StartTime.Sub(parsed.startTime()) + } else { + opts.startTime = 0 + } + if g.EndTime != 0 { + opts.endTime = g.EndTime.Sub(parsed.startTime()) + } else { // The goroutine didn't end. + opts.endTime = parsed.endTime().Sub(parsed.startTime()) + } + opts.focusGoroutine = goid + opts.goroutines = trace.RelatedGoroutinesV2(parsed.events, goid) + } + // Parse start and end options. Both or none must be present. start := int64(0) end := int64(math.MaxInt64) @@ -36,7 +68,7 @@ func JSONTraceHandler(parsed *parsedTrace) http.Handler { } c := traceviewer.ViewerDataTraceConsumer(w, start, end) - if err := generateTrace(parsed, c); err != nil { + if err := generateTrace(parsed, opts, c); err != nil { log.Printf("failed to generate trace: %v", err) } }) @@ -55,13 +87,36 @@ func (ctx *traceContext) elapsed(now tracev2.Time) time.Duration { return now.Sub(ctx.startTime) } -func generateTrace(parsed *parsedTrace, c traceviewer.TraceConsumer) error { +type genOpts struct { + mode traceviewer.Mode + startTime time.Duration + endTime time.Duration + + // Used if mode != 0. + focusGoroutine tracev2.GoID + goroutines map[tracev2.GoID]struct{} // Goroutines to be displayed for goroutine-oriented or task-oriented view. goroutines[0] is the main goroutine. +} + +func defaultGenOpts() *genOpts { + return &genOpts{ + startTime: time.Duration(0), + endTime: time.Duration(math.MaxInt64), + } +} + +func generateTrace(parsed *parsedTrace, opts *genOpts, c traceviewer.TraceConsumer) error { ctx := &traceContext{ - Emitter: traceviewer.NewEmitter(c, 0, time.Duration(0), time.Duration(math.MaxInt64)), + Emitter: traceviewer.NewEmitter(c, 0, opts.startTime, opts.endTime), startTime: parsed.events[0].Time(), } defer ctx.Flush() - runGenerator(ctx, newProcGenerator(), parsed) + var g generator + if opts.mode&traceviewer.ModeGoroutineOriented != 0 { + g = newGoroutineGenerator(ctx, opts.focusGoroutine, opts.goroutines) + } else { + g = newProcGenerator() + } + runGenerator(ctx, g, parsed) return nil } diff --git a/src/cmd/trace/v2/main.go b/src/cmd/trace/v2/main.go index 5d9270a416..04488afd50 100644 --- a/src/cmd/trace/v2/main.go +++ b/src/cmd/trace/v2/main.go @@ -145,7 +145,7 @@ func splitTrace(parsed *parsedTrace) ([]traceviewer.Range, error) { // TODO(mknyszek): Split traces by generation by doing a quick first pass over the // trace to identify all the generation boundaries. s, c := traceviewer.SplittingTraceConsumer(100 << 20) // 100 MiB - if err := generateTrace(parsed, c); err != nil { + if err := generateTrace(parsed, defaultGenOpts(), c); err != nil { return nil, err } return s.Ranges, nil diff --git a/src/internal/trace/summary.go b/src/internal/trace/summary.go index 934a980c7c..cf0cf9c109 100644 --- a/src/internal/trace/summary.go +++ b/src/internal/trace/summary.go @@ -6,7 +6,6 @@ package trace import ( tracev2 "internal/trace/v2" - "io" "sort" "time" ) @@ -601,11 +600,7 @@ func (s *Summarizer) Finalize() *Summary { // RelatedGoroutinesV2 finds a set of goroutines related to goroutine goid for v2 traces. // The association is based on whether they have synchronized with each other in the Go // scheduler (one has unblocked another). -func RelatedGoroutinesV2(trace io.Reader, goid tracev2.GoID) (map[tracev2.GoID]struct{}, error) { - r, err := tracev2.NewReader(trace) - if err != nil { - return nil, err - } +func RelatedGoroutinesV2(events []tracev2.Event, goid tracev2.GoID) map[tracev2.GoID]struct{} { // Process all the events, looking for transitions of goroutines // out of GoWaiting. If there was an active goroutine when this // happened, then we know that active goroutine unblocked another. @@ -615,14 +610,7 @@ func RelatedGoroutinesV2(trace io.Reader, goid tracev2.GoID) (map[tracev2.GoID]s operand tracev2.GoID } var unblockEdges []unblockEdge - for { - ev, err := r.ReadEvent() - if err == io.EOF { - break - } - if err != nil { - return nil, err - } + for _, ev := range events { if ev.Goroutine() == tracev2.NoGoroutine { continue } @@ -660,5 +648,5 @@ func RelatedGoroutinesV2(trace io.Reader, goid tracev2.GoID) (map[tracev2.GoID]s } gmap = gmap1 } - return gmap, nil + return gmap } diff --git a/src/internal/trace/summary_test.go b/src/internal/trace/summary_test.go index 8b377ff6b6..862218bf10 100644 --- a/src/internal/trace/summary_test.go +++ b/src/internal/trace/summary_test.go @@ -375,15 +375,33 @@ func basicGoroutineExecStatsChecks(t *testing.T, stats *GoroutineExecStats) { func TestRelatedGoroutinesV2Trace(t *testing.T) { testPath := "v2/testdata/tests/go122-gc-stress.test" - r, _, err := testtrace.ParseFile(testPath) + trace, _, err := testtrace.ParseFile(testPath) if err != nil { t.Fatalf("malformed test %s: bad trace file: %v", testPath, err) } - targetg := tracev2.GoID(86) - got, err := RelatedGoroutinesV2(r, targetg) + + // Create a reader. + r, err := tracev2.NewReader(trace) if err != nil { - t.Fatalf("failed to find related goroutines for %s: %v", testPath, err) + t.Fatalf("failed to create trace reader for %s: %v", testPath, err) } + + // Collect all the events. + var events []tracev2.Event + for { + ev, err := r.ReadEvent() + if err == io.EOF { + break + } + if err != nil { + t.Fatalf("failed to process trace %s: %v", testPath, err) + } + events = append(events, ev) + } + + // Test the function. + targetg := tracev2.GoID(86) + got := RelatedGoroutinesV2(events, targetg) want := map[tracev2.GoID]struct{}{ tracev2.GoID(86): struct{}{}, // N.B. Result includes target. tracev2.GoID(71): struct{}{}, From 90ba4452530f7a380e7fb4936569f53879fd5955 Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Mon, 20 Nov 2023 05:37:36 +0000 Subject: [PATCH 069/313] cmd/trace/v2: add support for a task-oriented procs-based view This change implements support for the trace?focustask= endpoint in the trace tool for v2 traces. Note: the one missing feature in v2 vs. v1 is that the "irrelevant" (but still rendered) events are not grayed out. This basically includes events that overlapped with events that overlapped with other events that were in the task time period, but aren't themselves directly associated. This is probably fine -- the UI already puts a very obvious focus on the period of time the selected task was running. For #60773. For #63960. Change-Id: I5c78a220ae816e331b74cb67c01c5cd98be40dd4 Reviewed-on: https://go-review.googlesource.com/c/go/+/543596 Auto-Submit: Michael Knyszek LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Pratt --- src/cmd/trace/trace.go | 4 +- src/cmd/trace/v2/gen.go | 71 +++++++++++-- src/cmd/trace/v2/goroutinegen.go | 6 +- src/cmd/trace/v2/gstate.go | 6 +- src/cmd/trace/v2/jsontrace.go | 53 ++++++++- src/cmd/trace/v2/procgen.go | 8 +- src/internal/trace/summary.go | 12 ++- src/internal/trace/traceviewer/emitter.go | 124 ++++++++++++++++++++-- 8 files changed, 250 insertions(+), 34 deletions(-) diff --git a/src/cmd/trace/trace.go b/src/cmd/trace/trace.go index 865bc612a9..438b8dd328 100644 --- a/src/cmd/trace/trace.go +++ b/src/cmd/trace/trace.go @@ -210,7 +210,6 @@ type SortIndexArg struct { func generateTrace(params *traceParams, consumer traceviewer.TraceConsumer) error { emitter := traceviewer.NewEmitter( consumer, - params.mode, time.Duration(params.startTime), time.Duration(params.endTime), ) @@ -565,8 +564,7 @@ func (ctx *traceContext) emitTask(task *taskDesc, sortIndex int) { taskName := task.name durationUsec := float64(task.lastTimestamp()-task.firstTimestamp()) / 1e3 - ctx.emitFooter(&format.Event{Name: "thread_name", Phase: "M", PID: format.TasksSection, TID: taskRow, Arg: &NameArg{fmt.Sprintf("T%d %s", task.id, taskName)}}) - ctx.emit(&format.Event{Name: "thread_sort_index", Phase: "M", PID: format.TasksSection, TID: taskRow, Arg: &SortIndexArg{sortIndex}}) + ctx.emitter.Task(taskRow, taskName, sortIndex) ts := float64(task.firstTimestamp()) / 1e3 sl := &format.Event{ Name: taskName, diff --git a/src/cmd/trace/v2/gen.go b/src/cmd/trace/v2/gen.go index cf8960390c..ac20dd1131 100644 --- a/src/cmd/trace/v2/gen.go +++ b/src/cmd/trace/v2/gen.go @@ -5,6 +5,7 @@ package trace import ( + "fmt" "internal/trace" "internal/trace/traceviewer" tracev2 "internal/trace/v2" @@ -31,11 +32,11 @@ type generator interface { ProcTransition(ctx *traceContext, ev *tracev2.Event) // Finish indicates the end of the trace and finalizes generation. - Finish(ctx *traceContext, endTime tracev2.Time) + Finish(ctx *traceContext) } // runGenerator produces a trace into ctx by running the generator over the parsed trace. -func runGenerator(ctx *traceContext, g generator, parsed *parsedTrace) { +func runGenerator(ctx *traceContext, g generator, parsed *parsedTrace, opts *genOpts) { for i := range parsed.events { ev := &parsed.events[i] @@ -70,7 +71,63 @@ func runGenerator(ctx *traceContext, g generator, parsed *parsedTrace) { } } } - g.Finish(ctx, parsed.events[len(parsed.events)-1].Time()) + for i, task := range opts.tasks { + emitTask(ctx, task, i) + } + g.Finish(ctx) +} + +// emitTask emits information about a task into the trace viewer's event stream. +// +// sortIndex sets the order in which this task will appear related to other tasks, +// lowest first. +func emitTask(ctx *traceContext, task *trace.UserTaskSummary, sortIndex int) { + // Collect information about the task. + var startStack, endStack tracev2.Stack + var startG, endG tracev2.GoID + startTime, endTime := ctx.startTime, ctx.endTime + if task.Start != nil { + startStack = task.Start.Stack() + startG = task.Start.Goroutine() + startTime = task.Start.Time() + } + if task.End != nil { + endStack = task.End.Stack() + endG = task.End.Goroutine() + endTime = task.End.Time() + } + arg := struct { + ID uint64 `json:"id"` + StartG uint64 `json:"start_g,omitempty"` + EndG uint64 `json:"end_g,omitempty"` + }{ + ID: uint64(task.ID), + StartG: uint64(startG), + EndG: uint64(endG), + } + + // Emit the task slice and notify the emitter of the task. + ctx.Task(uint64(task.ID), fmt.Sprintf("T%d %s", task.ID, task.Name), sortIndex) + ctx.TaskSlice(traceviewer.SliceEvent{ + Name: task.Name, + Ts: ctx.elapsed(startTime), + Dur: endTime.Sub(startTime), + Resource: uint64(task.ID), + Stack: ctx.Stack(viewerFrames(startStack)), + EndStack: ctx.Stack(viewerFrames(endStack)), + Arg: arg, + }) + // Emit an arrow from the parent to the child. + if task.Parent != nil && task.Start != nil && task.Start.Kind() == tracev2.EventTaskBegin { + ctx.TaskArrow(traceviewer.ArrowEvent{ + Name: "newTask", + Start: ctx.elapsed(task.Start.Time()), + End: ctx.elapsed(task.Start.Time()), + FromResource: uint64(task.Parent.ID), + ToResource: uint64(task.ID), + FromStack: ctx.Stack(viewerFrames(task.Start.Stack())), + }) + } } // Building blocks for generators. @@ -144,7 +201,7 @@ func (g *globalRangeGenerator) GlobalRange(ctx *traceContext, ev *tracev2.Event) } // Finish flushes any outstanding ranges at the end of the trace. -func (g *globalRangeGenerator) Finish(ctx *traceContext, endTime tracev2.Time) { +func (g *globalRangeGenerator) Finish(ctx *traceContext) { for name, ar := range g.ranges { if !strings.Contains(name, "GC") { continue @@ -152,7 +209,7 @@ func (g *globalRangeGenerator) Finish(ctx *traceContext, endTime tracev2.Time) { ctx.Slice(traceviewer.SliceEvent{ Name: name, Ts: ctx.elapsed(ar.time), - Dur: endTime.Sub(ar.time), + Dur: ctx.endTime.Sub(ar.time), Resource: trace.GCP, Stack: ctx.Stack(viewerFrames(ar.stack)), }) @@ -220,12 +277,12 @@ func (g *procRangeGenerator) ProcRange(ctx *traceContext, ev *tracev2.Event) { } // Finish flushes any outstanding ranges at the end of the trace. -func (g *procRangeGenerator) Finish(ctx *traceContext, endTime tracev2.Time) { +func (g *procRangeGenerator) Finish(ctx *traceContext) { for r, ar := range g.ranges { ctx.Slice(traceviewer.SliceEvent{ Name: r.Name, Ts: ctx.elapsed(ar.time), - Dur: endTime.Sub(ar.time), + Dur: ctx.endTime.Sub(ar.time), Resource: uint64(r.Scope.Proc()), Stack: ctx.Stack(viewerFrames(ar.stack)), }) diff --git a/src/cmd/trace/v2/goroutinegen.go b/src/cmd/trace/v2/goroutinegen.go index 4f466c0e61..eb1aea9bfa 100644 --- a/src/cmd/trace/v2/goroutinegen.go +++ b/src/cmd/trace/v2/goroutinegen.go @@ -143,15 +143,15 @@ func (g *goroutineGenerator) ProcTransition(ctx *traceContext, ev *tracev2.Event // Not needed. All relevant information for goroutines can be derived from goroutine transitions. } -func (g *goroutineGenerator) Finish(ctx *traceContext, endTime tracev2.Time) { +func (g *goroutineGenerator) Finish(ctx *traceContext) { ctx.SetResourceType("G") // Finish off global ranges. - g.globalRangeGenerator.Finish(ctx, endTime) + g.globalRangeGenerator.Finish(ctx) // Finish off all the goroutine slices. for id, gs := range g.gStates { - gs.finish(endTime, ctx) + gs.finish(ctx) // Tell the emitter about the goroutines we want to render. ctx.Resource(uint64(id), gs.name()) diff --git a/src/cmd/trace/v2/gstate.go b/src/cmd/trace/v2/gstate.go index c0c100c6d7..179981bc0c 100644 --- a/src/cmd/trace/v2/gstate.go +++ b/src/cmd/trace/v2/gstate.go @@ -305,10 +305,10 @@ func (gs *gState[R]) stop(ts tracev2.Time, stack tracev2.Stack, ctx *traceContex // This must only be used once the trace has been fully processed and no // further events will be processed. This method may leave the gState in // an inconsistent state. -func (gs *gState[R]) finish(ts tracev2.Time, ctx *traceContext) { +func (gs *gState[R]) finish(ctx *traceContext) { if gs.executing != R(noResource) { - gs.syscallEnd(ts, false, ctx) - gs.stop(ts, tracev2.NoStack, ctx) + gs.syscallEnd(ctx.endTime, false, ctx) + gs.stop(ctx.endTime, tracev2.NoStack, ctx) } } diff --git a/src/cmd/trace/v2/jsontrace.go b/src/cmd/trace/v2/jsontrace.go index 681a8c1657..e628a6a5e7 100644 --- a/src/cmd/trace/v2/jsontrace.go +++ b/src/cmd/trace/v2/jsontrace.go @@ -5,9 +5,11 @@ package trace import ( + "cmp" "log" "math" "net/http" + "slices" "strconv" "time" @@ -47,6 +49,50 @@ func JSONTraceHandler(parsed *parsedTrace) http.Handler { } opts.focusGoroutine = goid opts.goroutines = trace.RelatedGoroutinesV2(parsed.events, goid) + } else if taskids := r.FormValue("focustask"); taskids != "" { + taskid, err := strconv.ParseUint(taskids, 10, 64) + if err != nil { + log.Printf("failed to parse focustask parameter %q: %v", taskids, err) + return + } + task, ok := parsed.summary.Tasks[tracev2.TaskID(taskid)] + if !ok || (task.Start == nil && task.End == nil) { + log.Printf("failed to find task with id %d", taskid) + return + } + opts.mode = traceviewer.ModeTaskOriented + if task.Start != nil { + opts.startTime = task.Start.Time().Sub(parsed.startTime()) + } else { // The task started before the trace did. + opts.startTime = 0 + } + if task.End != nil { + opts.endTime = task.End.Time().Sub(parsed.startTime()) + } else { // The task didn't end. + opts.endTime = parsed.endTime().Sub(parsed.startTime()) + } + opts.tasks = task.Descendents() + slices.SortStableFunc(opts.tasks, func(a, b *trace.UserTaskSummary) int { + aStart, bStart := parsed.startTime(), parsed.startTime() + if a.Start != nil { + aStart = a.Start.Time() + } + if b.Start != nil { + bStart = b.Start.Time() + } + if a.Start != b.Start { + return cmp.Compare(aStart, bStart) + } + // Break ties with the end time. + aEnd, bEnd := parsed.endTime(), parsed.endTime() + if a.End != nil { + aEnd = a.End.Time() + } + if b.End != nil { + bEnd = b.End.Time() + } + return cmp.Compare(aEnd, bEnd) + }) } // Parse start and end options. Both or none must be present. @@ -79,6 +125,7 @@ func JSONTraceHandler(parsed *parsedTrace) http.Handler { type traceContext struct { *traceviewer.Emitter startTime tracev2.Time + endTime tracev2.Time } // elapsed returns the elapsed time between the trace time and the start time @@ -95,6 +142,7 @@ type genOpts struct { // Used if mode != 0. focusGoroutine tracev2.GoID goroutines map[tracev2.GoID]struct{} // Goroutines to be displayed for goroutine-oriented or task-oriented view. goroutines[0] is the main goroutine. + tasks []*trace.UserTaskSummary } func defaultGenOpts() *genOpts { @@ -106,8 +154,9 @@ func defaultGenOpts() *genOpts { func generateTrace(parsed *parsedTrace, opts *genOpts, c traceviewer.TraceConsumer) error { ctx := &traceContext{ - Emitter: traceviewer.NewEmitter(c, 0, opts.startTime, opts.endTime), + Emitter: traceviewer.NewEmitter(c, opts.startTime, opts.endTime), startTime: parsed.events[0].Time(), + endTime: parsed.events[len(parsed.events)-1].Time(), } defer ctx.Flush() @@ -117,6 +166,6 @@ func generateTrace(parsed *parsedTrace, opts *genOpts, c traceviewer.TraceConsum } else { g = newProcGenerator() } - runGenerator(ctx, g, parsed) + runGenerator(ctx, g, parsed, opts) return nil } diff --git a/src/cmd/trace/v2/procgen.go b/src/cmd/trace/v2/procgen.go index a49f9ec632..30ed568dad 100644 --- a/src/cmd/trace/v2/procgen.go +++ b/src/cmd/trace/v2/procgen.go @@ -188,18 +188,18 @@ func (g *procGenerator) ProcTransition(ctx *traceContext, ev *tracev2.Event) { } } -func (g *procGenerator) Finish(ctx *traceContext, endTime tracev2.Time) { +func (g *procGenerator) Finish(ctx *traceContext) { ctx.SetResourceType("PROCS") // Finish off ranges first. It doesn't really matter for the global ranges, // but the proc ranges need to either be a subset of a goroutine slice or // their own slice entirely. If the former, it needs to end first. - g.procRangeGenerator.Finish(ctx, endTime) - g.globalRangeGenerator.Finish(ctx, endTime) + g.procRangeGenerator.Finish(ctx) + g.globalRangeGenerator.Finish(ctx) // Finish off all the goroutine slices. for _, gs := range g.gStates { - gs.finish(endTime, ctx) + gs.finish(ctx) } // Name all the procs to the emitter. diff --git a/src/internal/trace/summary.go b/src/internal/trace/summary.go index cf0cf9c109..9003385fc7 100644 --- a/src/internal/trace/summary.go +++ b/src/internal/trace/summary.go @@ -50,7 +50,7 @@ type UserTaskSummary struct { // Task begin event. An EventTaskBegin event or nil. Start *tracev2.Event - // End end event. Normally EventTaskEnd event or nil, + // End end event. Normally EventTaskEnd event or nil. End *tracev2.Event // Logs is a list of tracev2.EventLog events associated with the task. @@ -69,6 +69,16 @@ func (s *UserTaskSummary) Complete() bool { return s.Start != nil && s.End != nil } +// Descendents returns a slice consisting of itself (always the first task returned), +// and the transitive closure of all of its children. +func (s *UserTaskSummary) Descendents() []*UserTaskSummary { + descendents := []*UserTaskSummary{s} + for _, child := range s.Children { + descendents = append(descendents, child.Descendents()...) + } + return descendents +} + // UserRegionSummary represents a region and goroutine execution stats // while the region was active. (For v2 traces.) type UserRegionSummary struct { diff --git a/src/internal/trace/traceviewer/emitter.go b/src/internal/trace/traceviewer/emitter.go index 95cb1f3271..2ceadf4c0e 100644 --- a/src/internal/trace/traceviewer/emitter.go +++ b/src/internal/trace/traceviewer/emitter.go @@ -286,22 +286,21 @@ const ( // NewEmitter returns a new Emitter that writes to c. The rangeStart and // rangeEnd args are used for splitting large traces. -func NewEmitter(c TraceConsumer, mode Mode, rangeStart, rangeEnd time.Duration) *Emitter { +func NewEmitter(c TraceConsumer, rangeStart, rangeEnd time.Duration) *Emitter { c.ConsumeTimeUnit("ns") return &Emitter{ c: c, - mode: mode, rangeStart: rangeStart, rangeEnd: rangeEnd, frameTree: frameNode{children: make(map[uint64]frameNode)}, resources: make(map[uint64]string), + tasks: make(map[uint64]task), } } type Emitter struct { c TraceConsumer - mode Mode rangeStart time.Duration rangeEnd time.Duration @@ -316,6 +315,12 @@ type Emitter struct { resourceType string resources map[uint64]string focusResource uint64 + tasks map[uint64]task +} + +type task struct { + name string + sortIndex int } func (e *Emitter) Gomaxprocs(v uint64) { @@ -339,11 +344,23 @@ func (e *Emitter) SetResourceFilter(filter func(uint64) bool) { e.filter = filter } +func (e *Emitter) Task(id uint64, name string, sortIndex int) { + e.tasks[id] = task{name, sortIndex} +} + func (e *Emitter) Slice(s SliceEvent) { - if !e.tsWithinRange(s.Ts) && !e.tsWithinRange(s.Ts+s.Dur) { + if e.filter != nil && !e.filter(s.Resource) { return } - if e.filter != nil && !e.filter(s.Resource) { + e.slice(s, format.ProcsSection, "") +} + +func (e *Emitter) TaskSlice(s SliceEvent) { + e.slice(s, format.TasksSection, pickTaskColor(s.Resource)) +} + +func (e *Emitter) slice(s SliceEvent, sectionID uint64, cname string) { + if !e.tsWithinRange(s.Ts) && !e.tsWithinRange(s.Ts+s.Dur) { return } e.OptionalEvent(&format.Event{ @@ -351,11 +368,14 @@ func (e *Emitter) Slice(s SliceEvent) { Phase: "X", Time: viewerTime(s.Ts), Dur: viewerTime(s.Dur), + PID: sectionID, TID: s.Resource, Stack: s.Stack, EndStack: s.EndStack, Arg: s.Arg, + Cname: cname, }) + } type SliceEvent struct { @@ -375,7 +395,6 @@ func (e *Emitter) Instant(i InstantEvent) { if e.filter != nil && !e.filter(i.Resource) { return } - // TODO(mknyszek): Handle ModeTaskOriented here. See cmd/trace.(*traceContext).emitInstant. cname := "" e.OptionalEvent(&format.Event{ Name: i.Name, @@ -383,6 +402,7 @@ func (e *Emitter) Instant(i InstantEvent) { Phase: "I", Scope: "t", Time: viewerTime(i.Ts), + PID: format.ProcsSection, TID: i.Resource, Stack: i.Stack, Cname: cname, @@ -400,18 +420,26 @@ type InstantEvent struct { } func (e *Emitter) Arrow(a ArrowEvent) { - if !e.tsWithinRange(a.Start) || !e.tsWithinRange(a.End) { - return - } if e.filter != nil && (!e.filter(a.FromResource) || !e.filter(a.ToResource)) { return } - // TODO(mknyszek): Handle ModeTaskOriented here. See cmd/trace.(*traceContext).emitArrow. + e.arrow(a, format.ProcsSection) +} + +func (e *Emitter) TaskArrow(a ArrowEvent) { + e.arrow(a, format.TasksSection) +} + +func (e *Emitter) arrow(a ArrowEvent, sectionID uint64) { + if !e.tsWithinRange(a.Start) || !e.tsWithinRange(a.End) { + return + } e.arrowSeq++ e.OptionalEvent(&format.Event{ Name: a.Name, Phase: "s", TID: a.FromResource, + PID: sectionID, ID: e.arrowSeq, Time: viewerTime(a.Start), Stack: a.FromStack, @@ -420,6 +448,7 @@ func (e *Emitter) Arrow(a ArrowEvent) { Name: a.Name, Phase: "t", TID: a.ToResource, + PID: sectionID, ID: e.arrowSeq, Time: viewerTime(a.End), }) @@ -548,9 +577,13 @@ func (e *Emitter) OptionalEvent(ev *format.Event) { func (e *Emitter) Flush() { e.processMeta(format.StatsSection, "STATS", 0) - if e.mode&ModeTaskOriented != 0 { + + if len(e.tasks) != 0 { e.processMeta(format.TasksSection, "TASKS", 1) } + for id, task := range e.tasks { + e.threadMeta(format.TasksSection, id, task.name, task.sortIndex) + } e.processMeta(format.ProcsSection, e.resourceType, 2) @@ -664,3 +697,72 @@ type frameNode struct { id int children map[uint64]frameNode } + +// Mapping from more reasonable color names to the reserved color names in +// https://github.com/catapult-project/catapult/blob/master/tracing/tracing/base/color_scheme.html#L50 +// The chrome trace viewer allows only those as cname values. +const ( + colorLightMauve = "thread_state_uninterruptible" // 182, 125, 143 + colorOrange = "thread_state_iowait" // 255, 140, 0 + colorSeafoamGreen = "thread_state_running" // 126, 200, 148 + colorVistaBlue = "thread_state_runnable" // 133, 160, 210 + colorTan = "thread_state_unknown" // 199, 155, 125 + colorIrisBlue = "background_memory_dump" // 0, 180, 180 + colorMidnightBlue = "light_memory_dump" // 0, 0, 180 + colorDeepMagenta = "detailed_memory_dump" // 180, 0, 180 + colorBlue = "vsync_highlight_color" // 0, 0, 255 + colorGrey = "generic_work" // 125, 125, 125 + colorGreen = "good" // 0, 125, 0 + colorDarkGoldenrod = "bad" // 180, 125, 0 + colorPeach = "terrible" // 180, 0, 0 + colorBlack = "black" // 0, 0, 0 + colorLightGrey = "grey" // 221, 221, 221 + colorWhite = "white" // 255, 255, 255 + colorYellow = "yellow" // 255, 255, 0 + colorOlive = "olive" // 100, 100, 0 + colorCornflowerBlue = "rail_response" // 67, 135, 253 + colorSunsetOrange = "rail_animation" // 244, 74, 63 + colorTangerine = "rail_idle" // 238, 142, 0 + colorShamrockGreen = "rail_load" // 13, 168, 97 + colorGreenishYellow = "startup" // 230, 230, 0 + colorDarkGrey = "heap_dump_stack_frame" // 128, 128, 128 + colorTawny = "heap_dump_child_node_arrow" // 204, 102, 0 + colorLemon = "cq_build_running" // 255, 255, 119 + colorLime = "cq_build_passed" // 153, 238, 102 + colorPink = "cq_build_failed" // 238, 136, 136 + colorSilver = "cq_build_abandoned" // 187, 187, 187 + colorManzGreen = "cq_build_attempt_runnig" // 222, 222, 75 + colorKellyGreen = "cq_build_attempt_passed" // 108, 218, 35 + colorAnotherGrey = "cq_build_attempt_failed" // 187, 187, 187 +) + +var colorForTask = []string{ + colorLightMauve, + colorOrange, + colorSeafoamGreen, + colorVistaBlue, + colorTan, + colorMidnightBlue, + colorIrisBlue, + colorDeepMagenta, + colorGreen, + colorDarkGoldenrod, + colorPeach, + colorOlive, + colorCornflowerBlue, + colorSunsetOrange, + colorTangerine, + colorShamrockGreen, + colorTawny, + colorLemon, + colorLime, + colorPink, + colorSilver, + colorManzGreen, + colorKellyGreen, +} + +func pickTaskColor(id uint64) string { + idx := id % uint64(len(colorForTask)) + return colorForTask[idx] +} From 971f59399fd7a53dc0744a949084080c85b3c62b Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Mon, 20 Nov 2023 07:28:37 +0000 Subject: [PATCH 070/313] cmd/trace/v2: add thread-oriented mode for v2 traces This is a nice-to-have that's now straightforward to do with the new trace format. This change adds a new query variable passed to the /trace endpoint called "view," which indicates the type of view to use. It is orthogonal with task-related views. Unfortunately a goroutine-based view isn't included because it's too likely to cause the browser tab to crash. For #60773. For #63960. Change-Id: Ifbcb8f2d58ffd425819bdb09c586819cb786478d Reviewed-on: https://go-review.googlesource.com/c/go/+/543695 LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Pratt Auto-Submit: Michael Knyszek --- src/cmd/trace/main.go | 4 +- src/cmd/trace/v2/gstate.go | 23 ++- src/cmd/trace/v2/jsontrace.go | 6 + src/cmd/trace/v2/jsontrace_test.go | 2 +- src/cmd/trace/v2/main.go | 8 +- src/cmd/trace/v2/threadgen.go | 201 ++++++++++++++++++++++ src/internal/trace/traceviewer/emitter.go | 1 + src/internal/trace/traceviewer/http.go | 46 +++-- src/internal/trace/traceviewer/mmu.go | 2 +- 9 files changed, 273 insertions(+), 20 deletions(-) create mode 100644 src/cmd/trace/v2/threadgen.go diff --git a/src/cmd/trace/main.go b/src/cmd/trace/main.go index 03fbadbcae..5f0d6f612b 100644 --- a/src/cmd/trace/main.go +++ b/src/cmd/trace/main.go @@ -146,7 +146,9 @@ func main() { http.HandleFunc("/mmu", traceviewer.MMUHandlerFunc(ranges, mutatorUtil)) // Install main handler. - http.Handle("/", traceviewer.MainHandler(ranges)) + http.Handle("/", traceviewer.MainHandler([]traceviewer.View{ + {Type: traceviewer.ViewProc, Ranges: ranges}, + })) // Start http server. err = http.Serve(ln, nil) diff --git a/src/cmd/trace/v2/gstate.go b/src/cmd/trace/v2/gstate.go index 179981bc0c..aeba7ecbc1 100644 --- a/src/cmd/trace/v2/gstate.go +++ b/src/cmd/trace/v2/gstate.go @@ -14,7 +14,9 @@ import ( ) // resource is a generic constraint interface for resource IDs. -type resource interface{ tracev2.GoID | tracev2.ProcID } +type resource interface { + tracev2.GoID | tracev2.ProcID | tracev2.ThreadID +} // noResource indicates the lack of a resource. const noResource = -1 @@ -214,20 +216,29 @@ func (gs *gState[R]) blockedSyscallEnd(ts tracev2.Time, stack tracev2.Stack, ctx // unblock indicates that the goroutine gs represents has been unblocked. func (gs *gState[R]) unblock(ts tracev2.Time, stack tracev2.Stack, resource R, ctx *traceContext) { - // Unblocking goroutine. name := "unblock" viewerResource := uint64(resource) + if gs.startBlockReason != "" { + name = fmt.Sprintf("%s (%s)", name, gs.startBlockReason) + } if strings.Contains(gs.startBlockReason, "network") { - // Emit an unblock instant event for the "Network" lane. + // Attribute the network instant to the nebulous "NetpollP" if + // resource isn't a thread, because there's a good chance that + // resource isn't going to be valid in this case. + // + // TODO(mknyszek): Handle this invalidness in a more general way. + if _, ok := any(resource).(tracev2.ThreadID); !ok { + // Emit an unblock instant event for the "Network" lane. + viewerResource = trace.NetpollP + } ctx.Instant(traceviewer.InstantEvent{ Name: name, Ts: ctx.elapsed(ts), - Resource: trace.NetpollP, + Resource: viewerResource, Stack: ctx.Stack(viewerFrames(stack)), }) - gs.startBlockReason = "" - viewerResource = trace.NetpollP } + gs.startBlockReason = "" if viewerResource != 0 { gs.setStartCause(ts, name, viewerResource, stack) } diff --git a/src/cmd/trace/v2/jsontrace.go b/src/cmd/trace/v2/jsontrace.go index e628a6a5e7..85ee52e47e 100644 --- a/src/cmd/trace/v2/jsontrace.go +++ b/src/cmd/trace/v2/jsontrace.go @@ -22,6 +22,10 @@ func JSONTraceHandler(parsed *parsedTrace) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { opts := defaultGenOpts() + switch r.FormValue("view") { + case "thread": + opts.mode = traceviewer.ModeThreadOriented + } if goids := r.FormValue("goid"); goids != "" { // Render trace focused on a particular goroutine. @@ -163,6 +167,8 @@ func generateTrace(parsed *parsedTrace, opts *genOpts, c traceviewer.TraceConsum var g generator if opts.mode&traceviewer.ModeGoroutineOriented != 0 { g = newGoroutineGenerator(ctx, opts.focusGoroutine, opts.goroutines) + } else if opts.mode&traceviewer.ModeThreadOriented != 0 { + g = newThreadGenerator() } else { g = newProcGenerator() } diff --git a/src/cmd/trace/v2/jsontrace_test.go b/src/cmd/trace/v2/jsontrace_test.go index 7e0b794159..ac988b7240 100644 --- a/src/cmd/trace/v2/jsontrace_test.go +++ b/src/cmd/trace/v2/jsontrace_test.go @@ -159,7 +159,7 @@ func checkNetworkUnblock(t *testing.T, data format.Data) { count := 0 var netBlockEv *format.Event for _, e := range data.Events { - if e.TID == tracev1.NetpollP && e.Name == "unblock" && e.Phase == "I" && e.Scope == "t" { + if e.TID == tracev1.NetpollP && e.Name == "unblock (network)" && e.Phase == "I" && e.Scope == "t" { count++ netBlockEv = e } diff --git a/src/cmd/trace/v2/main.go b/src/cmd/trace/v2/main.go index 04488afd50..0a60ef04db 100644 --- a/src/cmd/trace/v2/main.go +++ b/src/cmd/trace/v2/main.go @@ -67,7 +67,13 @@ func Main(traceFile, httpAddr, pprof string, debug int) error { mux := http.NewServeMux() // Main endpoint. - mux.Handle("/", traceviewer.MainHandler(ranges)) + mux.Handle("/", traceviewer.MainHandler([]traceviewer.View{ + {Type: traceviewer.ViewProc, Ranges: ranges}, + // N.B. Use the same ranges for threads. It takes a long time to compute + // the split a second time, but the makeup of the events are similar enough + // that this is still a good split. + {Type: traceviewer.ViewThread, Ranges: ranges}, + })) // Catapult handlers. mux.Handle("/trace", traceviewer.TraceHandler()) diff --git a/src/cmd/trace/v2/threadgen.go b/src/cmd/trace/v2/threadgen.go new file mode 100644 index 0000000000..c2d2071926 --- /dev/null +++ b/src/cmd/trace/v2/threadgen.go @@ -0,0 +1,201 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package trace + +import ( + "fmt" + "internal/trace/traceviewer" + "internal/trace/traceviewer/format" + tracev2 "internal/trace/v2" +) + +var _ generator = &threadGenerator{} + +type threadGenerator struct { + globalRangeGenerator + globalMetricGenerator + stackSampleGenerator[tracev2.ThreadID] + + gStates map[tracev2.GoID]*gState[tracev2.ThreadID] + threads map[tracev2.ThreadID]struct{} +} + +func newThreadGenerator() *threadGenerator { + tg := new(threadGenerator) + tg.stackSampleGenerator.getResource = func(ev *tracev2.Event) tracev2.ThreadID { + return ev.Thread() + } + tg.gStates = make(map[tracev2.GoID]*gState[tracev2.ThreadID]) + tg.threads = make(map[tracev2.ThreadID]struct{}) + return tg +} + +func (g *threadGenerator) Sync() { + g.globalRangeGenerator.Sync() +} + +func (g *threadGenerator) GoroutineLabel(ctx *traceContext, ev *tracev2.Event) { + l := ev.Label() + g.gStates[l.Resource.Goroutine()].setLabel(l.Label) +} + +func (g *threadGenerator) GoroutineRange(ctx *traceContext, ev *tracev2.Event) { + r := ev.Range() + switch ev.Kind() { + case tracev2.EventRangeBegin: + g.gStates[r.Scope.Goroutine()].rangeBegin(ev.Time(), r.Name, ev.Stack()) + case tracev2.EventRangeActive: + g.gStates[r.Scope.Goroutine()].rangeActive(r.Name) + case tracev2.EventRangeEnd: + gs := g.gStates[r.Scope.Goroutine()] + gs.rangeEnd(ev.Time(), r.Name, ev.Stack(), ctx) + } +} + +func (g *threadGenerator) GoroutineTransition(ctx *traceContext, ev *tracev2.Event) { + if ev.Thread() != tracev2.NoThread { + if _, ok := g.threads[ev.Thread()]; !ok { + g.threads[ev.Thread()] = struct{}{} + } + } + + st := ev.StateTransition() + goID := st.Resource.Goroutine() + + // If we haven't seen this goroutine before, create a new + // gState for it. + gs, ok := g.gStates[goID] + if !ok { + gs = newGState[tracev2.ThreadID](goID) + g.gStates[goID] = gs + } + // If we haven't already named this goroutine, try to name it. + gs.augmentName(st.Stack) + + // Handle the goroutine state transition. + from, to := st.Goroutine() + if from == to { + // Filter out no-op events. + return + } + if from.Executing() && !to.Executing() { + if to == tracev2.GoWaiting { + // Goroutine started blocking. + gs.block(ev.Time(), ev.Stack(), st.Reason, ctx) + } else { + gs.stop(ev.Time(), ev.Stack(), ctx) + } + } + if !from.Executing() && to.Executing() { + start := ev.Time() + if from == tracev2.GoUndetermined { + // Back-date the event to the start of the trace. + start = ctx.startTime + } + gs.start(start, ev.Thread(), ctx) + } + + if from == tracev2.GoWaiting { + // Goroutine was unblocked. + gs.unblock(ev.Time(), ev.Stack(), ev.Thread(), ctx) + } + if from == tracev2.GoNotExist && to == tracev2.GoRunnable { + // Goroutine was created. + gs.created(ev.Time(), ev.Thread(), ev.Stack()) + } + if from == tracev2.GoSyscall { + // Exiting syscall. + gs.syscallEnd(ev.Time(), to != tracev2.GoRunning, ctx) + } + + // Handle syscalls. + if to == tracev2.GoSyscall { + start := ev.Time() + if from == tracev2.GoUndetermined { + // Back-date the event to the start of the trace. + start = ctx.startTime + } + // Write down that we've entered a syscall. Note: we might have no P here + // if we're in a cgo callback or this is a transition from GoUndetermined + // (i.e. the G has been blocked in a syscall). + gs.syscallBegin(start, ev.Thread(), ev.Stack()) + } + + // Note down the goroutine transition. + _, inMarkAssist := gs.activeRanges["GC mark assist"] + ctx.GoroutineTransition(ctx.elapsed(ev.Time()), viewerGState(from, inMarkAssist), viewerGState(to, inMarkAssist)) +} + +func (g *threadGenerator) ProcTransition(ctx *traceContext, ev *tracev2.Event) { + if ev.Thread() != tracev2.NoThread { + if _, ok := g.threads[ev.Thread()]; !ok { + g.threads[ev.Thread()] = struct{}{} + } + } + + type procArg struct { + Proc uint64 `json:"proc,omitempty"` + } + st := ev.StateTransition() + viewerEv := traceviewer.InstantEvent{ + Resource: uint64(ev.Thread()), + Stack: ctx.Stack(viewerFrames(ev.Stack())), + Arg: procArg{Proc: uint64(st.Resource.Proc())}, + } + + from, to := st.Proc() + if from == to { + // Filter out no-op events. + return + } + if to.Executing() { + start := ev.Time() + if from == tracev2.ProcUndetermined { + start = ctx.startTime + } + viewerEv.Name = "proc start" + viewerEv.Arg = format.ThreadIDArg{ThreadID: uint64(ev.Thread())} + viewerEv.Ts = ctx.elapsed(start) + // TODO(mknyszek): We don't have a state machine for threads, so approximate + // running threads with running Ps. + ctx.IncThreadStateCount(ctx.elapsed(start), traceviewer.ThreadStateRunning, 1) + } + if from.Executing() { + start := ev.Time() + viewerEv.Name = "proc stop" + viewerEv.Ts = ctx.elapsed(start) + // TODO(mknyszek): We don't have a state machine for threads, so approximate + // running threads with running Ps. + ctx.IncThreadStateCount(ctx.elapsed(start), traceviewer.ThreadStateRunning, -1) + } + // TODO(mknyszek): Consider modeling procs differently and have them be + // transition to and from NotExist when GOMAXPROCS changes. We can emit + // events for this to clearly delineate GOMAXPROCS changes. + + if viewerEv.Name != "" { + ctx.Instant(viewerEv) + } +} + +func (g *threadGenerator) ProcRange(ctx *traceContext, ev *tracev2.Event) { + // TODO(mknyszek): Extend procRangeGenerator to support rendering proc ranges on threads. +} + +func (g *threadGenerator) Finish(ctx *traceContext) { + ctx.SetResourceType("OS THREADS") + + // Finish off global ranges. + g.globalRangeGenerator.Finish(ctx) + + // Finish off all the goroutine slices. + for _, gs := range g.gStates { + gs.finish(ctx) + } + + // Name all the threads to the emitter. + for id := range g.threads { + ctx.Resource(uint64(id), fmt.Sprintf("Thread %d", id)) + } +} diff --git a/src/internal/trace/traceviewer/emitter.go b/src/internal/trace/traceviewer/emitter.go index 2ceadf4c0e..ad3112d8b9 100644 --- a/src/internal/trace/traceviewer/emitter.go +++ b/src/internal/trace/traceviewer/emitter.go @@ -282,6 +282,7 @@ type Mode int const ( ModeGoroutineOriented Mode = 1 << iota ModeTaskOriented + ModeThreadOriented // Mutually exclusive with ModeGoroutineOriented. ) // NewEmitter returns a new Emitter that writes to c. The rangeStart and diff --git a/src/internal/trace/traceviewer/http.go b/src/internal/trace/traceviewer/http.go index b279b62a23..5258db05d8 100644 --- a/src/internal/trace/traceviewer/http.go +++ b/src/internal/trace/traceviewer/http.go @@ -12,9 +12,9 @@ import ( "strings" ) -func MainHandler(ranges []Range) http.Handler { +func MainHandler(views []View) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { - if err := templMain.Execute(w, ranges); err != nil { + if err := templMain.Execute(w, views); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } @@ -70,25 +70,32 @@ var templMain = template.Must(template.New("").Parse(`

Event timelines for running goroutines

-{{if $}} +{{range $i, $view := $}} +{{if $view.Ranges}} +{{if eq $i 0}}

Large traces are split into multiple sections of equal data size (not duration) to avoid overwhelming the visualizer.

+{{end}} {{else}} {{end}} +{{end}}

- This view displays a timeline for each of the GOMAXPROCS logical - processors, showing which goroutine (if any) was running on that + This view displays a series of timelines for a type of resource. + The "by proc" view consists of a timeline for each of the GOMAXPROCS + logical processors, showing which goroutine (if any) was running on that logical processor at each moment. + The "by thread" view (if available) consists of a similar timeline for each + OS thread. Each goroutine has an identifying number (e.g. G123), main function, and color. @@ -237,6 +244,25 @@ var templMain = template.Must(template.New("").Parse(` `)) +type View struct { + Type ViewType + Ranges []Range +} + +type ViewType string + +const ( + ViewProc ViewType = "proc" + ViewThread ViewType = "thread" +) + +func (v View) URL(rangeIdx int) string { + if rangeIdx < 0 { + return fmt.Sprintf("/trace?view=%s", v.Type) + } + return v.Ranges[rangeIdx].URL(v.Type) +} + type Range struct { Name string Start int @@ -245,8 +271,8 @@ type Range struct { EndTime int64 } -func (r Range) URL() string { - return fmt.Sprintf("/trace?start=%d&end=%d", r.Start, r.End) +func (r Range) URL(viewType ViewType) string { + return fmt.Sprintf("/trace?view=%s&start=%d&end=%d", viewType, r.Start, r.End) } func TraceHandler() http.Handler { diff --git a/src/internal/trace/traceviewer/mmu.go b/src/internal/trace/traceviewer/mmu.go index 0cb2b42657..0bc1233b44 100644 --- a/src/internal/trace/traceviewer/mmu.go +++ b/src/internal/trace/traceviewer/mmu.go @@ -410,5 +410,5 @@ func (m *mmu) newLinkedUtilWindow(ui trace.UtilWindow, window time.Duration) lin break } } - return linkedUtilWindow{ui, fmt.Sprintf("%s#%v:%v", r.URL(), float64(ui.Time)/1e6, float64(ui.Time+int64(window))/1e6)} + return linkedUtilWindow{ui, fmt.Sprintf("%s#%v:%v", r.URL(ViewProc), float64(ui.Time)/1e6, float64(ui.Time+int64(window))/1e6)} } From 28f873444d4e7fdfef9c07108002cd6347a8da0f Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Mon, 20 Nov 2023 19:29:42 +0000 Subject: [PATCH 071/313] cmd/trace/v2: add support for the goroutine-oriented task view This change adds support for a goroutine-oriented task view via the /trace?taskid= endpoint. This works but it's missing regions. That will be implemented in a follow-up CL. For #60773. For #63960. Change-Id: I086694143e5c71596ac22fc551416868f0b80923 Reviewed-on: https://go-review.googlesource.com/c/go/+/543937 LUCI-TryBot-Result: Go LUCI Auto-Submit: Michael Knyszek Reviewed-by: Michael Pratt --- src/cmd/trace/v2/jsontrace.go | 110 +++++++++++++++++++++++++--------- 1 file changed, 81 insertions(+), 29 deletions(-) diff --git a/src/cmd/trace/v2/jsontrace.go b/src/cmd/trace/v2/jsontrace.go index 85ee52e47e..e4ca613678 100644 --- a/src/cmd/trace/v2/jsontrace.go +++ b/src/cmd/trace/v2/jsontrace.go @@ -64,39 +64,54 @@ func JSONTraceHandler(parsed *parsedTrace) http.Handler { log.Printf("failed to find task with id %d", taskid) return } - opts.mode = traceviewer.ModeTaskOriented + opts.setTask(parsed, task) + } else if taskids := r.FormValue("taskid"); taskids != "" { + taskid, err := strconv.ParseUint(taskids, 10, 64) + if err != nil { + log.Printf("failed to parse taskid parameter %q: %v", taskids, err) + return + } + task, ok := parsed.summary.Tasks[tracev2.TaskID(taskid)] + if !ok { + log.Printf("failed to find task with id %d", taskid) + return + } + // This mode is goroutine-oriented. + opts.mode = traceviewer.ModeGoroutineOriented + opts.setTask(parsed, task) + + // Pick the goroutine to orient ourselves around by just + // trying to pick the earliest event in the task that makes + // any sense. Though, we always want the start if that's there. + var firstEv *tracev2.Event if task.Start != nil { - opts.startTime = task.Start.Time().Sub(parsed.startTime()) - } else { // The task started before the trace did. - opts.startTime = 0 + firstEv = task.Start + } else { + for _, logEv := range task.Logs { + if firstEv == nil || logEv.Time() < firstEv.Time() { + firstEv = logEv + } + } + if task.End != nil && (firstEv == nil || task.End.Time() < firstEv.Time()) { + firstEv = task.End + } } - if task.End != nil { - opts.endTime = task.End.Time().Sub(parsed.startTime()) - } else { // The task didn't end. - opts.endTime = parsed.endTime().Sub(parsed.startTime()) + if firstEv == nil || firstEv.Goroutine() == tracev2.NoGoroutine { + log.Printf("failed to find task with id %d", taskid) + return } - opts.tasks = task.Descendents() - slices.SortStableFunc(opts.tasks, func(a, b *trace.UserTaskSummary) int { - aStart, bStart := parsed.startTime(), parsed.startTime() - if a.Start != nil { - aStart = a.Start.Time() + + // Set the goroutine filtering options. + goid := firstEv.Goroutine() + opts.focusGoroutine = goid + goroutines := make(map[tracev2.GoID]struct{}) + for _, task := range opts.tasks { + // Find only directly involved goroutines. + for id := range task.Goroutines { + goroutines[id] = struct{}{} } - if b.Start != nil { - bStart = b.Start.Time() - } - if a.Start != b.Start { - return cmp.Compare(aStart, bStart) - } - // Break ties with the end time. - aEnd, bEnd := parsed.endTime(), parsed.endTime() - if a.End != nil { - aEnd = a.End.Time() - } - if b.End != nil { - bEnd = b.End.Time() - } - return cmp.Compare(aEnd, bEnd) - }) + } + opts.goroutines = goroutines } // Parse start and end options. Both or none must be present. @@ -149,6 +164,43 @@ type genOpts struct { tasks []*trace.UserTaskSummary } +// setTask sets a task to focus on. +func (opts *genOpts) setTask(parsed *parsedTrace, task *trace.UserTaskSummary) { + opts.mode |= traceviewer.ModeTaskOriented + if task.Start != nil { + opts.startTime = task.Start.Time().Sub(parsed.startTime()) + } else { // The task started before the trace did. + opts.startTime = 0 + } + if task.End != nil { + opts.endTime = task.End.Time().Sub(parsed.startTime()) + } else { // The task didn't end. + opts.endTime = parsed.endTime().Sub(parsed.startTime()) + } + opts.tasks = task.Descendents() + slices.SortStableFunc(opts.tasks, func(a, b *trace.UserTaskSummary) int { + aStart, bStart := parsed.startTime(), parsed.startTime() + if a.Start != nil { + aStart = a.Start.Time() + } + if b.Start != nil { + bStart = b.Start.Time() + } + if a.Start != b.Start { + return cmp.Compare(aStart, bStart) + } + // Break ties with the end time. + aEnd, bEnd := parsed.endTime(), parsed.endTime() + if a.End != nil { + aEnd = a.End.Time() + } + if b.End != nil { + bEnd = b.End.Time() + } + return cmp.Compare(aEnd, bEnd) + }) +} + func defaultGenOpts() *genOpts { return &genOpts{ startTime: time.Duration(0), From 4e3ac99a3311e60587a296a636e4bbe3f066d2a9 Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Mon, 20 Nov 2023 21:19:35 +0000 Subject: [PATCH 072/313] cmd/trace/v2: emit regions in the goroutine-oriented task view This change emits regions in the goroutine-oriented task view (the /trace endpoint with the taskid query variable set) in the same way the old cmd/trace does. For #60773. Fixes #63960. Change-Id: If6c3e7072c694c84a7d2d6c34df668f48d3acc2a Reviewed-on: https://go-review.googlesource.com/c/go/+/543995 Reviewed-by: Michael Pratt Auto-Submit: Michael Knyszek LUCI-TryBot-Result: Go LUCI --- src/cmd/trace/v2/gen.go | 53 +++++++++++++++++++++++ src/internal/trace/traceviewer/emitter.go | 46 +++++++++++++++++++- 2 files changed, 98 insertions(+), 1 deletion(-) diff --git a/src/cmd/trace/v2/gen.go b/src/cmd/trace/v2/gen.go index ac20dd1131..ad1599db92 100644 --- a/src/cmd/trace/v2/gen.go +++ b/src/cmd/trace/v2/gen.go @@ -73,6 +73,11 @@ func runGenerator(ctx *traceContext, g generator, parsed *parsedTrace, opts *gen } for i, task := range opts.tasks { emitTask(ctx, task, i) + if opts.mode&traceviewer.ModeGoroutineOriented != 0 { + for _, region := range task.Regions { + emitRegion(ctx, region) + } + } } g.Finish(ctx) } @@ -130,6 +135,54 @@ func emitTask(ctx *traceContext, task *trace.UserTaskSummary, sortIndex int) { } } +// emitRegion emits goroutine-based slice events to the UI. The caller +// must be emitting for a goroutine-oriented trace. +// +// TODO(mknyszek): Make regions part of the regular generator loop and +// treat them like ranges so that we can emit regions in traces oriented +// by proc or thread. +func emitRegion(ctx *traceContext, region *trace.UserRegionSummary) { + if region.Name == "" { + return + } + // Collect information about the region. + var startStack, endStack tracev2.Stack + goroutine := tracev2.NoGoroutine + startTime, endTime := ctx.startTime, ctx.endTime + if region.Start != nil { + startStack = region.Start.Stack() + startTime = region.Start.Time() + goroutine = region.Start.Goroutine() + } + if region.End != nil { + endStack = region.End.Stack() + endTime = region.End.Time() + goroutine = region.End.Goroutine() + } + if goroutine == tracev2.NoGoroutine { + return + } + arg := struct { + TaskID uint64 `json:"taskid"` + }{ + TaskID: uint64(region.TaskID), + } + ctx.AsyncSlice(traceviewer.AsyncSliceEvent{ + SliceEvent: traceviewer.SliceEvent{ + Name: region.Name, + Ts: ctx.elapsed(startTime), + Dur: endTime.Sub(startTime), + Resource: uint64(goroutine), + Stack: ctx.Stack(viewerFrames(startStack)), + EndStack: ctx.Stack(viewerFrames(endStack)), + Arg: arg, + }, + Category: "Region", + Scope: fmt.Sprintf("%x", region.TaskID), + TaskColorIndex: uint64(region.TaskID), + }) +} + // Building blocks for generators. // stackSampleGenerator implements a generic handler for stack sample events. diff --git a/src/internal/trace/traceviewer/emitter.go b/src/internal/trace/traceviewer/emitter.go index ad3112d8b9..c91c743a7b 100644 --- a/src/internal/trace/traceviewer/emitter.go +++ b/src/internal/trace/traceviewer/emitter.go @@ -317,6 +317,7 @@ type Emitter struct { resources map[uint64]string focusResource uint64 tasks map[uint64]task + asyncSliceSeq uint64 } type task struct { @@ -376,7 +377,6 @@ func (e *Emitter) slice(s SliceEvent, sectionID uint64, cname string) { Arg: s.Arg, Cname: cname, }) - } type SliceEvent struct { @@ -389,6 +389,50 @@ type SliceEvent struct { Arg any } +func (e *Emitter) AsyncSlice(s AsyncSliceEvent) { + if !e.tsWithinRange(s.Ts) && !e.tsWithinRange(s.Ts+s.Dur) { + return + } + if e.filter != nil && !e.filter(s.Resource) { + return + } + cname := "" + if s.TaskColorIndex != 0 { + cname = pickTaskColor(s.TaskColorIndex) + } + e.asyncSliceSeq++ + e.OptionalEvent(&format.Event{ + Category: s.Category, + Name: s.Name, + Phase: "b", + Time: viewerTime(s.Ts), + TID: s.Resource, + ID: e.asyncSliceSeq, + Scope: s.Scope, + Stack: s.Stack, + Cname: cname, + }) + e.OptionalEvent(&format.Event{ + Category: s.Category, + Name: s.Name, + Phase: "e", + Time: viewerTime(s.Ts + s.Dur), + TID: s.Resource, + ID: e.asyncSliceSeq, + Scope: s.Scope, + Stack: s.EndStack, + Arg: s.Arg, + Cname: cname, + }) +} + +type AsyncSliceEvent struct { + SliceEvent + Category string + Scope string + TaskColorIndex uint64 // Take on the same color as the task with this ID. +} + func (e *Emitter) Instant(i InstantEvent) { if !e.tsWithinRange(i.Ts) { return From 41f58b2295c39611fcf13040e499167966321e72 Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Wed, 8 Nov 2023 19:05:11 +0000 Subject: [PATCH 073/313] runtime: enable the exectracer2 experiment by default Fixes #60773. Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest,gotip-linux-amd64-longtest-race Change-Id: Ice3fd4577d58ce593611144242f2cba99c9d2ecb Reviewed-on: https://go-review.googlesource.com/c/go/+/540778 LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Pratt Auto-Submit: Michael Knyszek --- src/internal/buildcfg/exp.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/internal/buildcfg/exp.go b/src/internal/buildcfg/exp.go index 75ed7b2459..a45cfaf862 100644 --- a/src/internal/buildcfg/exp.go +++ b/src/internal/buildcfg/exp.go @@ -74,6 +74,7 @@ func ParseGOEXPERIMENT(goos, goarch, goexp string) (*ExperimentFlags, error) { RegabiArgs: regabiSupported, CoverageRedesign: true, AllocHeaders: true, + ExecTracer2: true, } // Start with the statically enabled set of experiments. From 4a2408289c0a714fa57fa5921cf5dba518149637 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Tue, 21 Nov 2023 15:37:49 -0500 Subject: [PATCH 074/313] syscall: check SyscallIsNotSupported in TestPidFDWithUserNS For #51246. Change-Id: Ief2e2e14f039123a6580cb60be7ee74f4a20a649 Reviewed-on: https://go-review.googlesource.com/c/go/+/544318 TryBot-Result: Gopher Robot Auto-Submit: Michael Pratt Reviewed-by: Bryan Mills Run-TryBot: Michael Pratt LUCI-TryBot-Result: Go LUCI --- src/syscall/exec_linux_test.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/syscall/exec_linux_test.go b/src/syscall/exec_linux_test.go index a7af00d2c0..976275e1dc 100644 --- a/src/syscall/exec_linux_test.go +++ b/src/syscall/exec_linux_test.go @@ -582,6 +582,9 @@ func TestPidFD(t *testing.T) { func TestPidFDWithUserNS(t *testing.T) { if err := testPidFD(t, true); err != nil { + if testenv.SyscallIsNotSupported(err) { + t.Skip("userns not supported:", err) + } t.Fatal("can't start a process:", err) } } From ef7b713fefdcfef83101eda880015dded5fadb98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Mengu=C3=A9?= Date: Thu, 26 Oct 2023 22:18:33 +0200 Subject: [PATCH 075/313] errors: clarify references to Unwrap in doc CL 535080 incorrectly links the unclear mention of Unwrap to the func Unwrap in doc for errors.Is and errors.As Instead we clarify that "Unwrap" is a reference to the "Unwrap() error" or "Unwrap() []error" methods, not to the "Unwrap(error) error" function which is also available in the package. Change-Id: I8314993932e1e7a2dc77400f74d81f3a8aa891de Reviewed-on: https://go-review.googlesource.com/c/go/+/538155 Reviewed-by: Cherry Mui Run-TryBot: qiulaidongfeng <2645477756@qq.com> TryBot-Result: Gopher Robot Reviewed-by: David Chase --- src/errors/wrap.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/errors/wrap.go b/src/errors/wrap.go index e1cc466eea..88ee0a9281 100644 --- a/src/errors/wrap.go +++ b/src/errors/wrap.go @@ -27,8 +27,8 @@ func Unwrap(err error) error { // Is reports whether any error in err's tree matches target. // // The tree consists of err itself, followed by the errors obtained by repeatedly -// calling [Unwrap]. When err wraps multiple errors, Is examines err followed by a -// depth-first traversal of its children. +// calling its Unwrap() error or Unwrap() []error method. When err wraps multiple +// errors, Is examines err followed by a depth-first traversal of its children. // // An error is considered to match a target if it is equal to that target or if // it implements a method Is(error) bool such that Is(target) returns true. @@ -81,8 +81,8 @@ func is(err, target error, targetComparable bool) bool { // target to that error value and returns true. Otherwise, it returns false. // // The tree consists of err itself, followed by the errors obtained by repeatedly -// calling [Unwrap]. When err wraps multiple errors, As examines err followed by a -// depth-first traversal of its children. +// calling its Unwrap() error or Unwrap() []error method. When err wraps multiple +// errors, As examines err followed by a depth-first traversal of its children. // // An error matches target if the error's concrete value is assignable to the value // pointed to by target, or if the error has a method As(interface{}) bool such that From 5a6f1b35d42dca8e3e7646ee36fa1344ce5bc775 Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Tue, 21 Nov 2023 21:47:57 +0000 Subject: [PATCH 076/313] runtime: add lock partial order edge between wakeableSleep and hchan This is totally valid and always was, but the staticlockranking builder started failing when the new execution tracer was enabled by default. Change-Id: I011e7d86bd968b1251bcc4d74395633036753b00 Reviewed-on: https://go-review.googlesource.com/c/go/+/544319 Reviewed-by: Michael Pratt TryBot-Result: Gopher Robot LUCI-TryBot-Result: Go LUCI Run-TryBot: Michael Knyszek --- src/runtime/lockrank.go | 40 +++++++++++++++++++-------------------- src/runtime/mklockrank.go | 2 +- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/runtime/lockrank.go b/src/runtime/lockrank.go index 103131df5e..de3b9ab3c6 100644 --- a/src/runtime/lockrank.go +++ b/src/runtime/lockrank.go @@ -155,9 +155,9 @@ var lockPartialOrder [][]lockRank = [][]lockRank{ lockRankTimers: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllp, lockRankTimers}, lockRankWakeableSleep: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllp, lockRankTimers}, lockRankNetpollInit: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllp, lockRankTimers}, - lockRankHchan: {lockRankSysmon, lockRankScavenge, lockRankSweep, lockRankHchan}, + lockRankHchan: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankHchan}, lockRankNotifyList: {}, - lockRankSudog: {lockRankSysmon, lockRankScavenge, lockRankSweep, lockRankHchan, lockRankNotifyList}, + lockRankSudog: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankHchan, lockRankNotifyList}, lockRankRwmutexW: {}, lockRankRwmutexR: {lockRankSysmon, lockRankRwmutexW}, lockRankRoot: {}, @@ -166,24 +166,24 @@ var lockPartialOrder [][]lockRank = [][]lockRank{ lockRankUserArenaState: {}, lockRankTraceBuf: {lockRankSysmon, lockRankScavenge}, lockRankTraceStrings: {lockRankSysmon, lockRankScavenge, lockRankTraceBuf}, - lockRankFin: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, - lockRankSpanSetSpine: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, - lockRankMspanSpecial: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, - lockRankGcBitsArenas: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankMspanSpecial}, - lockRankProfInsert: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, - lockRankProfBlock: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, - lockRankProfMemActive: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, - lockRankProfMemFuture: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankProfMemActive}, - lockRankGscan: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture}, - lockRankStackpool: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan}, - lockRankStackLarge: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan}, - lockRankHchanLeaf: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankHchanLeaf}, - lockRankWbufSpans: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan}, - lockRankMheap: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans}, - lockRankMheapSpecial: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap}, - lockRankGlobalAlloc: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap, lockRankMheapSpecial}, - lockRankTrace: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap}, - lockRankTraceStackTab: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap, lockRankTrace}, + lockRankFin: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, + lockRankSpanSetSpine: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, + lockRankMspanSpecial: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, + lockRankGcBitsArenas: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankMspanSpecial}, + lockRankProfInsert: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, + lockRankProfBlock: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, + lockRankProfMemActive: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, + lockRankProfMemFuture: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankProfMemActive}, + lockRankGscan: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture}, + lockRankStackpool: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan}, + lockRankStackLarge: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan}, + lockRankHchanLeaf: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankHchanLeaf}, + lockRankWbufSpans: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan}, + lockRankMheap: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans}, + lockRankMheapSpecial: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap}, + lockRankGlobalAlloc: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap, lockRankMheapSpecial}, + lockRankTrace: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap}, + lockRankTraceStackTab: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap, lockRankTrace}, lockRankPanic: {}, lockRankDeadlock: {lockRankPanic, lockRankDeadlock}, lockRankRaceFini: {lockRankPanic}, diff --git a/src/runtime/mklockrank.go b/src/runtime/mklockrank.go index 4cb232b1ba..1f18312d1e 100644 --- a/src/runtime/mklockrank.go +++ b/src/runtime/mklockrank.go @@ -68,7 +68,7 @@ timers < wakeableSleep; timers < netpollInit; # Channels -scavenge, sweep < hchan; +scavenge, sweep, wakeableSleep < hchan; NONE < notifyList; hchan, notifyList < sudog; From ff05cdbd2bdc28ab545a5964f7f772e2ea4c5fd1 Mon Sep 17 00:00:00 2001 From: Kir Kolyshkin Date: Wed, 13 Sep 2023 00:58:20 -0700 Subject: [PATCH 077/313] internal/syscall/unix: add PidFDSendSignal for Linux CL 520266 added pidfd_send_signal linux syscall numbers to the syscall package for the sake of a unit test. As pidfd_send_signal will be used from the os package, let's revert the changes to syscall package, add the pidfd_send_signal syscall numbers and the implementation to internal/syscall/unix, and change the above test to use it. Updates #51246. For #62654. Change-Id: I862174c3c1a64baf1080792bdb3a1c1d1b417bb4 Reviewed-on: https://go-review.googlesource.com/c/go/+/528436 Run-TryBot: Kirill Kolyshkin Reviewed-by: Cherry Mui Reviewed-by: Michael Knyszek LUCI-TryBot-Result: Go LUCI TryBot-Result: Gopher Robot Reviewed-by: Michael Pratt --- src/internal/syscall/unix/pidfd_linux.go | 15 +++++++++++++++ src/internal/syscall/unix/sysnum_linux_386.go | 5 +++-- src/internal/syscall/unix/sysnum_linux_amd64.go | 5 +++-- src/internal/syscall/unix/sysnum_linux_arm.go | 5 +++-- src/internal/syscall/unix/sysnum_linux_generic.go | 5 +++-- src/internal/syscall/unix/sysnum_linux_mips64x.go | 5 +++-- src/internal/syscall/unix/sysnum_linux_mipsx.go | 5 +++-- src/internal/syscall/unix/sysnum_linux_ppc64x.go | 5 +++-- src/internal/syscall/unix/sysnum_linux_s390x.go | 5 +++-- src/syscall/exec_linux_test.go | 9 +++++---- src/syscall/export_linux_test.go | 3 +-- src/syscall/syscall_linux_386.go | 9 ++++----- src/syscall/syscall_linux_amd64.go | 9 ++++----- src/syscall/syscall_linux_arm.go | 9 ++++----- src/syscall/syscall_linux_arm64.go | 9 ++++----- src/syscall/syscall_linux_loong64.go | 9 ++++----- src/syscall/syscall_linux_mips64x.go | 9 ++++----- src/syscall/syscall_linux_mipsx.go | 9 ++++----- src/syscall/syscall_linux_ppc64x.go | 9 ++++----- src/syscall/syscall_linux_riscv64.go | 9 ++++----- src/syscall/syscall_linux_s390x.go | 9 ++++----- 21 files changed, 85 insertions(+), 72 deletions(-) create mode 100644 src/internal/syscall/unix/pidfd_linux.go diff --git a/src/internal/syscall/unix/pidfd_linux.go b/src/internal/syscall/unix/pidfd_linux.go new file mode 100644 index 0000000000..02cfaa062c --- /dev/null +++ b/src/internal/syscall/unix/pidfd_linux.go @@ -0,0 +1,15 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package unix + +import "syscall" + +func PidFDSendSignal(pidfd uintptr, s syscall.Signal) error { + _, _, errno := syscall.Syscall(pidfdSendSignalTrap, pidfd, uintptr(s), 0) + if errno != 0 { + return errno + } + return nil +} diff --git a/src/internal/syscall/unix/sysnum_linux_386.go b/src/internal/syscall/unix/sysnum_linux_386.go index 2bda08ccf1..9f750a1c03 100644 --- a/src/internal/syscall/unix/sysnum_linux_386.go +++ b/src/internal/syscall/unix/sysnum_linux_386.go @@ -5,6 +5,7 @@ package unix const ( - getrandomTrap uintptr = 355 - copyFileRangeTrap uintptr = 377 + getrandomTrap uintptr = 355 + copyFileRangeTrap uintptr = 377 + pidfdSendSignalTrap uintptr = 424 ) diff --git a/src/internal/syscall/unix/sysnum_linux_amd64.go b/src/internal/syscall/unix/sysnum_linux_amd64.go index ae5239ebfb..706898d41e 100644 --- a/src/internal/syscall/unix/sysnum_linux_amd64.go +++ b/src/internal/syscall/unix/sysnum_linux_amd64.go @@ -5,6 +5,7 @@ package unix const ( - getrandomTrap uintptr = 318 - copyFileRangeTrap uintptr = 326 + getrandomTrap uintptr = 318 + copyFileRangeTrap uintptr = 326 + pidfdSendSignalTrap uintptr = 424 ) diff --git a/src/internal/syscall/unix/sysnum_linux_arm.go b/src/internal/syscall/unix/sysnum_linux_arm.go index acaec05879..c00644b552 100644 --- a/src/internal/syscall/unix/sysnum_linux_arm.go +++ b/src/internal/syscall/unix/sysnum_linux_arm.go @@ -5,6 +5,7 @@ package unix const ( - getrandomTrap uintptr = 384 - copyFileRangeTrap uintptr = 391 + getrandomTrap uintptr = 384 + copyFileRangeTrap uintptr = 391 + pidfdSendSignalTrap uintptr = 424 ) diff --git a/src/internal/syscall/unix/sysnum_linux_generic.go b/src/internal/syscall/unix/sysnum_linux_generic.go index 8c132c6bf5..bf25428e7e 100644 --- a/src/internal/syscall/unix/sysnum_linux_generic.go +++ b/src/internal/syscall/unix/sysnum_linux_generic.go @@ -11,6 +11,7 @@ package unix // means only arm64 loong64 and riscv64 use the standard numbers. const ( - getrandomTrap uintptr = 278 - copyFileRangeTrap uintptr = 285 + getrandomTrap uintptr = 278 + copyFileRangeTrap uintptr = 285 + pidfdSendSignalTrap uintptr = 424 ) diff --git a/src/internal/syscall/unix/sysnum_linux_mips64x.go b/src/internal/syscall/unix/sysnum_linux_mips64x.go index bca526d2b9..6a9e238ce3 100644 --- a/src/internal/syscall/unix/sysnum_linux_mips64x.go +++ b/src/internal/syscall/unix/sysnum_linux_mips64x.go @@ -7,6 +7,7 @@ package unix const ( - getrandomTrap uintptr = 5313 - copyFileRangeTrap uintptr = 5320 + getrandomTrap uintptr = 5313 + copyFileRangeTrap uintptr = 5320 + pidfdSendSignalTrap uintptr = 5424 ) diff --git a/src/internal/syscall/unix/sysnum_linux_mipsx.go b/src/internal/syscall/unix/sysnum_linux_mipsx.go index c86195e496..22d38f148e 100644 --- a/src/internal/syscall/unix/sysnum_linux_mipsx.go +++ b/src/internal/syscall/unix/sysnum_linux_mipsx.go @@ -7,6 +7,7 @@ package unix const ( - getrandomTrap uintptr = 4353 - copyFileRangeTrap uintptr = 4360 + getrandomTrap uintptr = 4353 + copyFileRangeTrap uintptr = 4360 + pidfdSendSignalTrap uintptr = 4424 ) diff --git a/src/internal/syscall/unix/sysnum_linux_ppc64x.go b/src/internal/syscall/unix/sysnum_linux_ppc64x.go index a4dcf2bc9d..945ec28c2a 100644 --- a/src/internal/syscall/unix/sysnum_linux_ppc64x.go +++ b/src/internal/syscall/unix/sysnum_linux_ppc64x.go @@ -7,6 +7,7 @@ package unix const ( - getrandomTrap uintptr = 359 - copyFileRangeTrap uintptr = 379 + getrandomTrap uintptr = 359 + copyFileRangeTrap uintptr = 379 + pidfdSendSignalTrap uintptr = 424 ) diff --git a/src/internal/syscall/unix/sysnum_linux_s390x.go b/src/internal/syscall/unix/sysnum_linux_s390x.go index bf2c01e4e1..2c74343820 100644 --- a/src/internal/syscall/unix/sysnum_linux_s390x.go +++ b/src/internal/syscall/unix/sysnum_linux_s390x.go @@ -5,6 +5,7 @@ package unix const ( - getrandomTrap uintptr = 349 - copyFileRangeTrap uintptr = 375 + getrandomTrap uintptr = 349 + copyFileRangeTrap uintptr = 375 + pidfdSendSignalTrap uintptr = 424 ) diff --git a/src/syscall/exec_linux_test.go b/src/syscall/exec_linux_test.go index 976275e1dc..68ec6fe3f8 100644 --- a/src/syscall/exec_linux_test.go +++ b/src/syscall/exec_linux_test.go @@ -12,6 +12,7 @@ import ( "flag" "fmt" "internal/platform" + "internal/syscall/unix" "internal/testenv" "io" "os" @@ -560,11 +561,11 @@ func testPidFD(t *testing.T, userns bool) error { // Use pidfd to send a signal to the child. sig := syscall.SIGINT - if _, _, e := syscall.Syscall(syscall.Sys_pidfd_send_signal, uintptr(pidfd), uintptr(sig), 0); e != 0 { - if e != syscall.EINVAL && testenv.SyscallIsNotSupported(e) { - t.Skip("pidfd_send_signal syscall not supported:", e) + if err := unix.PidFDSendSignal(uintptr(pidfd), sig); err != nil { + if err != syscall.EINVAL && testenv.SyscallIsNotSupported(err) { + t.Skip("pidfd_send_signal syscall not supported:", err) } - t.Fatal("pidfd_send_signal syscall failed:", e) + t.Fatal("pidfd_send_signal syscall failed:", err) } // Check if the child received our signal. err = cmd.Wait() diff --git a/src/syscall/export_linux_test.go b/src/syscall/export_linux_test.go index a09db60753..3aa877cfe3 100644 --- a/src/syscall/export_linux_test.go +++ b/src/syscall/export_linux_test.go @@ -10,6 +10,5 @@ var ( ) const ( - Sys_GETEUID = sys_GETEUID - Sys_pidfd_send_signal = _SYS_pidfd_send_signal + Sys_GETEUID = sys_GETEUID ) diff --git a/src/syscall/syscall_linux_386.go b/src/syscall/syscall_linux_386.go index 1ab6c5e148..a559f7e288 100644 --- a/src/syscall/syscall_linux_386.go +++ b/src/syscall/syscall_linux_386.go @@ -7,11 +7,10 @@ package syscall import "unsafe" const ( - _SYS_setgroups = SYS_SETGROUPS32 - _SYS_clone3 = 435 - _SYS_faccessat2 = 439 - _SYS_pidfd_send_signal = 424 - _SYS_fchmodat2 = 452 + _SYS_setgroups = SYS_SETGROUPS32 + _SYS_clone3 = 435 + _SYS_faccessat2 = 439 + _SYS_fchmodat2 = 452 ) func setTimespec(sec, nsec int64) Timespec { diff --git a/src/syscall/syscall_linux_amd64.go b/src/syscall/syscall_linux_amd64.go index 1083a507c7..ec52f8a4bd 100644 --- a/src/syscall/syscall_linux_amd64.go +++ b/src/syscall/syscall_linux_amd64.go @@ -9,11 +9,10 @@ import ( ) const ( - _SYS_setgroups = SYS_SETGROUPS - _SYS_clone3 = 435 - _SYS_faccessat2 = 439 - _SYS_pidfd_send_signal = 424 - _SYS_fchmodat2 = 452 + _SYS_setgroups = SYS_SETGROUPS + _SYS_clone3 = 435 + _SYS_faccessat2 = 439 + _SYS_fchmodat2 = 452 ) //sys Dup2(oldfd int, newfd int) (err error) diff --git a/src/syscall/syscall_linux_arm.go b/src/syscall/syscall_linux_arm.go index 2641cd2868..a6d92cea13 100644 --- a/src/syscall/syscall_linux_arm.go +++ b/src/syscall/syscall_linux_arm.go @@ -7,11 +7,10 @@ package syscall import "unsafe" const ( - _SYS_setgroups = SYS_SETGROUPS32 - _SYS_clone3 = 435 - _SYS_faccessat2 = 439 - _SYS_pidfd_send_signal = 424 - _SYS_fchmodat2 = 452 + _SYS_setgroups = SYS_SETGROUPS32 + _SYS_clone3 = 435 + _SYS_faccessat2 = 439 + _SYS_fchmodat2 = 452 ) func setTimespec(sec, nsec int64) Timespec { diff --git a/src/syscall/syscall_linux_arm64.go b/src/syscall/syscall_linux_arm64.go index 74d6e3a958..b87b51c0c0 100644 --- a/src/syscall/syscall_linux_arm64.go +++ b/src/syscall/syscall_linux_arm64.go @@ -7,11 +7,10 @@ package syscall import "unsafe" const ( - _SYS_setgroups = SYS_SETGROUPS - _SYS_clone3 = 435 - _SYS_faccessat2 = 439 - _SYS_pidfd_send_signal = 424 - _SYS_fchmodat2 = 452 + _SYS_setgroups = SYS_SETGROUPS + _SYS_clone3 = 435 + _SYS_faccessat2 = 439 + _SYS_fchmodat2 = 452 ) //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT diff --git a/src/syscall/syscall_linux_loong64.go b/src/syscall/syscall_linux_loong64.go index eb275bc717..634cf30cf2 100644 --- a/src/syscall/syscall_linux_loong64.go +++ b/src/syscall/syscall_linux_loong64.go @@ -7,11 +7,10 @@ package syscall import "unsafe" const ( - _SYS_setgroups = SYS_SETGROUPS - _SYS_clone3 = 435 - _SYS_faccessat2 = 439 - _SYS_pidfd_send_signal = 424 - _SYS_fchmodat2 = 452 + _SYS_setgroups = SYS_SETGROUPS + _SYS_clone3 = 435 + _SYS_faccessat2 = 439 + _SYS_fchmodat2 = 452 ) //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT diff --git a/src/syscall/syscall_linux_mips64x.go b/src/syscall/syscall_linux_mips64x.go index 3bdee928ed..41106ed81f 100644 --- a/src/syscall/syscall_linux_mips64x.go +++ b/src/syscall/syscall_linux_mips64x.go @@ -11,11 +11,10 @@ import ( ) const ( - _SYS_setgroups = SYS_SETGROUPS - _SYS_clone3 = 5435 - _SYS_faccessat2 = 5439 - _SYS_pidfd_send_signal = 5424 - _SYS_fchmodat2 = 5452 + _SYS_setgroups = SYS_SETGROUPS + _SYS_clone3 = 5435 + _SYS_faccessat2 = 5439 + _SYS_fchmodat2 = 5452 ) //sys Dup2(oldfd int, newfd int) (err error) diff --git a/src/syscall/syscall_linux_mipsx.go b/src/syscall/syscall_linux_mipsx.go index 7253c648e7..7d4f8f2264 100644 --- a/src/syscall/syscall_linux_mipsx.go +++ b/src/syscall/syscall_linux_mipsx.go @@ -9,11 +9,10 @@ package syscall import "unsafe" const ( - _SYS_setgroups = SYS_SETGROUPS - _SYS_clone3 = 4435 - _SYS_faccessat2 = 4439 - _SYS_pidfd_send_signal = 4424 - _SYS_fchmodat2 = 4452 + _SYS_setgroups = SYS_SETGROUPS + _SYS_clone3 = 4435 + _SYS_faccessat2 = 4439 + _SYS_fchmodat2 = 4452 ) func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) diff --git a/src/syscall/syscall_linux_ppc64x.go b/src/syscall/syscall_linux_ppc64x.go index 9cfe2dc695..13c184c44f 100644 --- a/src/syscall/syscall_linux_ppc64x.go +++ b/src/syscall/syscall_linux_ppc64x.go @@ -11,11 +11,10 @@ import ( ) const ( - _SYS_setgroups = SYS_SETGROUPS - _SYS_clone3 = 435 - _SYS_faccessat2 = 439 - _SYS_pidfd_send_signal = 424 - _SYS_fchmodat2 = 452 + _SYS_setgroups = SYS_SETGROUPS + _SYS_clone3 = 435 + _SYS_faccessat2 = 439 + _SYS_fchmodat2 = 452 ) //sys Dup2(oldfd int, newfd int) (err error) diff --git a/src/syscall/syscall_linux_riscv64.go b/src/syscall/syscall_linux_riscv64.go index 61fb4c1668..00872a74fb 100644 --- a/src/syscall/syscall_linux_riscv64.go +++ b/src/syscall/syscall_linux_riscv64.go @@ -7,11 +7,10 @@ package syscall import "unsafe" const ( - _SYS_setgroups = SYS_SETGROUPS - _SYS_clone3 = 435 - _SYS_faccessat2 = 439 - _SYS_pidfd_send_signal = 424 - _SYS_fchmodat2 = 452 + _SYS_setgroups = SYS_SETGROUPS + _SYS_clone3 = 435 + _SYS_faccessat2 = 439 + _SYS_fchmodat2 = 452 ) //sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT diff --git a/src/syscall/syscall_linux_s390x.go b/src/syscall/syscall_linux_s390x.go index 3a0afc404a..ea667ec1da 100644 --- a/src/syscall/syscall_linux_s390x.go +++ b/src/syscall/syscall_linux_s390x.go @@ -7,11 +7,10 @@ package syscall import "unsafe" const ( - _SYS_setgroups = SYS_SETGROUPS - _SYS_clone3 = 435 - _SYS_faccessat2 = 439 - _SYS_pidfd_send_signal = 424 - _SYS_fchmodat2 = 452 + _SYS_setgroups = SYS_SETGROUPS + _SYS_clone3 = 435 + _SYS_faccessat2 = 439 + _SYS_fchmodat2 = 452 ) //sys Dup2(oldfd int, newfd int) (err error) From b6b72c775ab562c632abf5d93e8c541385edfffc Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Tue, 21 Nov 2023 03:23:05 +0000 Subject: [PATCH 078/313] runtime: emit a ProcSteal from entersyscall_gcwait Currently entersyscall_gcwait always emits a ProcStop event. Most of the time, this is correct, since the thread that just put the P into _Psyscall is the same one that is putting it into _Pgcstop. However it's possible for another thread to steal the P, start running a goroutine, and then enter another syscall, putting the P back into _Psyscall. In this case ProcStop is incorrect; the P is getting stolen. This leads to broken traces. Fix this by always emitting a ProcSteal event from entersyscall_gcwait. This means that most of the time a thread will be 'stealing' the proc from itself when it enters this function, but that's theoretically fine. A ProcSteal is really just a fancy ProcStop. Well, it would be if the parser correctly handled a self-steal. This is a minor bug that just never came up before, but it's an update order error (the mState is looked up and modified, but then it's modified again at the end of the function to match newCtx). There's really no reason a self-steal shouldn't be allowed, so fix that up and add a test. Change-Id: Iec3d7639d331e3f2d127f92ce50c2c4a7818fcd3 Reviewed-on: https://go-review.googlesource.com/c/go/+/544215 LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Pratt --- src/internal/trace/v2/order.go | 11 ++++++ .../go122-syscall-steal-proc-self.go | 37 +++++++++++++++++++ .../tests/go122-syscall-steal-proc-self.test | 17 +++++++++ src/runtime/proc.go | 19 ++++++++-- src/runtime/trace2runtime.go | 15 +++++--- 5 files changed, 89 insertions(+), 10 deletions(-) create mode 100644 src/internal/trace/v2/testdata/generators/go122-syscall-steal-proc-self.go create mode 100644 src/internal/trace/v2/testdata/tests/go122-syscall-steal-proc-self.test diff --git a/src/internal/trace/v2/order.go b/src/internal/trace/v2/order.go index 531b45eb02..83cccb4722 100644 --- a/src/internal/trace/v2/order.go +++ b/src/internal/trace/v2/order.go @@ -206,6 +206,17 @@ func (o *ordering) advance(ev *baseEvent, evt *evTable, m ThreadID, gen uint64) // Validate that the M we're stealing from is what we expect. mid := ThreadID(ev.args[2]) // The M we're stealing from. + + if mid == curCtx.M { + // We're stealing from ourselves. This behaves like a ProcStop. + if curCtx.P != pid { + return curCtx, false, fmt.Errorf("tried to self-steal proc %d (thread %d), but got proc %d instead", pid, mid, curCtx.P) + } + newCtx.P = NoProc + return curCtx, true, nil + } + + // We're stealing from some other M. mState, ok := o.mStates[mid] if !ok { return curCtx, false, fmt.Errorf("stole proc from non-existent thread %d", mid) diff --git a/src/internal/trace/v2/testdata/generators/go122-syscall-steal-proc-self.go b/src/internal/trace/v2/testdata/generators/go122-syscall-steal-proc-self.go new file mode 100644 index 0000000000..dd947346c6 --- /dev/null +++ b/src/internal/trace/v2/testdata/generators/go122-syscall-steal-proc-self.go @@ -0,0 +1,37 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Tests syscall P stealing. +// +// Specifically, it tests a scenario where a thread 'steals' +// a P from itself. It's just a ProcStop with extra steps when +// it happens on the same P. + +package main + +import ( + "internal/trace/v2" + "internal/trace/v2/event/go122" + testgen "internal/trace/v2/internal/testgen/go122" +) + +func main() { + testgen.Main(gen) +} + +func gen(t *testgen.Trace) { + t.DisableTimestamps() + + g := t.Generation(1) + + // A goroutine execute a syscall and steals its own P, then starts running + // on that P. + b0 := g.Batch(trace.ThreadID(0), 0) + b0.Event("ProcStatus", trace.ProcID(0), go122.ProcRunning) + b0.Event("GoStatus", trace.GoID(1), trace.ThreadID(0), go122.GoRunning) + b0.Event("GoSyscallBegin", testgen.Seq(1), testgen.NoStack) + b0.Event("ProcSteal", trace.ProcID(0), testgen.Seq(2), trace.ThreadID(0)) + b0.Event("ProcStart", trace.ProcID(0), testgen.Seq(3)) + b0.Event("GoSyscallEndBlocked") +} diff --git a/src/internal/trace/v2/testdata/tests/go122-syscall-steal-proc-self.test b/src/internal/trace/v2/testdata/tests/go122-syscall-steal-proc-self.test new file mode 100644 index 0000000000..6484eb6d35 --- /dev/null +++ b/src/internal/trace/v2/testdata/tests/go122-syscall-steal-proc-self.test @@ -0,0 +1,17 @@ +-- expect -- +SUCCESS +-- trace -- +Trace Go1.22 +EventBatch gen=1 m=0 time=0 size=24 +ProcStatus dt=0 p=0 pstatus=1 +GoStatus dt=0 g=1 m=0 gstatus=2 +GoSyscallBegin dt=0 p_seq=1 stack=0 +ProcSteal dt=0 p=0 p_seq=2 m=0 +ProcStart dt=0 p=0 p_seq=3 +GoSyscallEndBlocked dt=0 +EventBatch gen=1 m=18446744073709551615 time=0 size=5 +Frequency freq=15625000 +EventBatch gen=1 m=18446744073709551615 time=0 size=1 +Stacks +EventBatch gen=1 m=18446744073709551615 time=0 size=1 +Strings diff --git a/src/runtime/proc.go b/src/runtime/proc.go index fd05687301..e760572906 100644 --- a/src/runtime/proc.go +++ b/src/runtime/proc.go @@ -4407,10 +4407,21 @@ func entersyscall_gcwait() { if sched.stopwait > 0 && atomic.Cas(&pp.status, _Psyscall, _Pgcstop) { trace := traceAcquire() if trace.ok() { - trace.GoSysBlock(pp) - // N.B. ProcSteal not necessary because if we succeed we're - // always stopping the P we just put into the syscall status. - trace.ProcStop(pp) + if goexperiment.ExecTracer2 { + // This is a steal in the new tracer. While it's very likely + // that we were the ones to put this P into _Psyscall, between + // then and now it's totally possible it had been stolen and + // then put back into _Psyscall for us to acquire here. In such + // case ProcStop would be incorrect. + // + // TODO(mknyszek): Consider emitting a ProcStop instead when + // gp.m.syscalltick == pp.syscalltick, since then we know we never + // lost the P. + trace.ProcSteal(pp, true) + } else { + trace.GoSysBlock(pp) + trace.ProcStop(pp) + } traceRelease(trace) } pp.syscalltick++ diff --git a/src/runtime/trace2runtime.go b/src/runtime/trace2runtime.go index b6837d0360..a9c8d8a590 100644 --- a/src/runtime/trace2runtime.go +++ b/src/runtime/trace2runtime.go @@ -493,10 +493,10 @@ func (tl traceLocker) GoSysExit(lostP bool) { // ProcSteal indicates that our current M stole a P from another M. // -// forMe indicates that the caller is stealing pp to wire it up to itself. +// inSyscall indicates that we're stealing the P from a syscall context. // // The caller must have ownership of pp. -func (tl traceLocker) ProcSteal(pp *p, forMe bool) { +func (tl traceLocker) ProcSteal(pp *p, inSyscall bool) { // Grab the M ID we stole from. mStolenFrom := pp.trace.mSyscallID pp.trace.mSyscallID = -1 @@ -506,17 +506,20 @@ func (tl traceLocker) ProcSteal(pp *p, forMe bool) { // the P just to get its attention (e.g. STW or sysmon retake) or we're trying to steal a P for // ourselves specifically to keep running. The two contexts look different, but can be summarized // fairly succinctly. In the former, we're a regular running goroutine and proc, if we have either. - // In the latter, we're a goroutine in a syscall, + // In the latter, we're a goroutine in a syscall. goStatus := traceGoRunning procStatus := traceProcRunning - if forMe { + if inSyscall { goStatus = traceGoSyscall procStatus = traceProcSyscallAbandoned } w := tl.eventWriter(goStatus, procStatus) - // Emit the status of the P we're stealing. We may have *just* done this, but we may not have, - // even if forMe is true, depending on whether we wired the P to ourselves already. + // Emit the status of the P we're stealing. We may have *just* done this when creating the event + // writer but it's not guaranteed, even if inSyscall is true. Although it might seem like from a + // syscall context we're always stealing a P for ourselves, we may have not wired it up yet (so + // it wouldn't be visible to eventWriter) or we may not even intend to wire it up to ourselves + // at all (e.g. entersyscall_gcwait). if !pp.trace.statusWasTraced(tl.gen) && pp.trace.acquireStatus(tl.gen) { // Careful: don't use the event writer. We never want status or in-progress events // to trigger more in-progress events. From 74993bffe1a5c7e28f43423f9925bf9f6ec17aad Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Tue, 21 Nov 2023 16:59:44 +0000 Subject: [PATCH 079/313] runtime: disable trace v2 optimistic deadlock debugger The v2 execution tracer has a rudimentary deadlock detector, but it's based on an arbitrary threshold that an actually get hit even if there's no deadlock. This ends up breaking tests sometimes, and it would be bad if this just appeared in production logs. Put this 'deadlock detector' behind a flag. For #55317. Change-Id: I286f0c05b3ac9600f4f2f9696065cac8bbd25f00 Reviewed-on: https://go-review.googlesource.com/c/go/+/544235 Reviewed-by: Michael Pratt LUCI-TryBot-Result: Go LUCI --- src/runtime/trace2.go | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/runtime/trace2.go b/src/runtime/trace2.go index 1a58015989..59ea190089 100644 --- a/src/runtime/trace2.go +++ b/src/runtime/trace2.go @@ -443,6 +443,7 @@ func traceAdvance(stopTrace bool) { // held, we can be certain that when there are no writers there are // also no stale generation values left. Therefore, it's safe to flush // any buffers that remain in that generation's slot. + const debugDeadlock = false systemstack(func() { // Track iterations for some rudimentary deadlock detection. i := 0 @@ -479,16 +480,18 @@ func traceAdvance(stopTrace bool) { osyield() } - // Try to detect a deadlock. We probably shouldn't loop here - // this many times. - if i > 100000 && !detectedDeadlock { - detectedDeadlock = true - println("runtime: failing to flush") - for mp := mToFlush; mp != nil; mp = mp.trace.link { - print("runtime: m=", mp.id, "\n") + if debugDeadlock { + // Try to detect a deadlock. We probably shouldn't loop here + // this many times. + if i > 100000 && !detectedDeadlock { + detectedDeadlock = true + println("runtime: failing to flush") + for mp := mToFlush; mp != nil; mp = mp.trace.link { + print("runtime: m=", mp.id, "\n") + } } + i++ } - i++ } }) From f5bf9fb278c473104b0b987fc1dd165566cbec71 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Wed, 25 Oct 2023 11:04:24 +0700 Subject: [PATCH 080/313] crypto/tls: check client's supported versions when using QUIC According to RFC 9001 Section 4.2, the client MUST NOT offer any TLS version older than 1.3. Fixes #63723. Change-Id: Ia92f98274ca784e2bc151faf236380af51f699c1 Reviewed-on: https://go-review.googlesource.com/c/go/+/537576 Reviewed-by: Filippo Valsorda Auto-Submit: Filippo Valsorda Reviewed-by: Roland Shoemaker LUCI-TryBot-Result: Go LUCI Reviewed-by: Damien Neil --- src/crypto/tls/handshake_server_tls13.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/crypto/tls/handshake_server_tls13.go b/src/crypto/tls/handshake_server_tls13.go index 07b1a3851e..21d798de37 100644 --- a/src/crypto/tls/handshake_server_tls13.go +++ b/src/crypto/tls/handshake_server_tls13.go @@ -240,8 +240,15 @@ GroupSelection: c.clientProtocol = selectedProto if c.quic != nil { + // RFC 9001 Section 4.2: Clients MUST NOT offer TLS versions older than 1.3. + for _, v := range hs.clientHello.supportedVersions { + if v < VersionTLS13 { + c.sendAlert(alertProtocolVersion) + return errors.New("tls: client offered TLS version older than TLS 1.3") + } + } + // RFC 9001 Section 8.2. if hs.clientHello.quicTransportParameters == nil { - // RFC 9001 Section 8.2. c.sendAlert(alertMissingExtension) return errors.New("tls: client did not send a quic_transport_parameters extension") } From e6b76bfc4675eae8d1e4c7e8dc28897339b13824 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Wed, 28 Jun 2023 09:37:47 -0400 Subject: [PATCH 081/313] testing: simplify concurrency and cleanup logic While investigating #60083, I found a couple of bugs (notably #61034) that had slipped through code review in part because the concurrency patterns used in the testing package were too complex for me to fully reason about. This change adjusts those patterns to be more in line with current idioms, and to reduce the number of special cases that depend on details that should be orthogonal. (For example: the details of how we invoke the Cleanup functions should not depend on whether the test happened to run any parallel subtests.) In the process, this change fixes a handful of bugs: - Concurrent calls to Run (explicitly allowed by TestParallelSub) could previously drive the testcontext.running count negative, causing the number of running parallel tests to exceed the -parallel flag. - The -failfast flag now takes effect immediately on failure. It no longer delays until the test finishes, and no longer misses failures during cleanup (fixing #61034). - If a Cleanup function calls runtime.Goexit (typically via t.FailNow) during a panic, Cleanup functions from its parent tests are no longer skipped and buffered logs from its parent tests are now flushed. - The time reported for a test with subtests now includes the time spent running those subtests, regardless of whether they are parallel. (Previously, non-parallel subtests were included but parallel subtests were not.) - Calls to (*B).Run in iterations after the first are now diagnosed with a panic. (This diagnoses badly-behaved benchmarks: if Run is called during the first iteration, no subsequent iterations are supposed to occur.) Fixes #61034. Change-Id: I3797f6ef5210a3d2d5d6c2710d3f35c0219b02ea Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest,gotip-linux-amd64-longtest-race,gotip-windows-amd64-longtest Reviewed-on: https://go-review.googlesource.com/c/go/+/506755 Auto-Submit: Bryan Mills Reviewed-by: Alan Donovan LUCI-TryBot-Result: Go LUCI --- src/cmd/cgo/internal/test/callback_windows.go | 4 +- src/testing/benchmark.go | 94 ++-- src/testing/fuzz.go | 207 +++++---- src/testing/panic_test.go | 85 ++-- src/testing/sub_test.go | 131 +----- src/testing/testing.go | 414 +++++++++--------- 6 files changed, 436 insertions(+), 499 deletions(-) diff --git a/src/cmd/cgo/internal/test/callback_windows.go b/src/cmd/cgo/internal/test/callback_windows.go index 95e97c9af9..b4e0867e77 100644 --- a/src/cmd/cgo/internal/test/callback_windows.go +++ b/src/cmd/cgo/internal/test/callback_windows.go @@ -29,7 +29,7 @@ USHORT backtrace(ULONG FramesToCapture, PVOID *BackTrace) { } ControlPc = context.Rip; - // Check if we left the user range. + // Check if we left the user range. if (ControlPc < 0x10000) { break; } @@ -89,7 +89,7 @@ func testCallbackCallersSEH(t *testing.T) { "test.testCallbackCallersSEH", "test.TestCallbackCallersSEH", "testing.tRunner", - "testing.(*T).Run.gowrap1", + "testing.(*T).Run.gowrap3", "runtime.goexit", } pc := make([]uintptr, 100) diff --git a/src/testing/benchmark.go b/src/testing/benchmark.go index 9491213ef1..da20c1c0c8 100644 --- a/src/testing/benchmark.go +++ b/src/testing/benchmark.go @@ -176,6 +176,10 @@ func (b *B) ReportAllocs() { // runN runs a single benchmark for the specified number of iterations. func (b *B) runN(n int) { + if b.done { + panic("testing: internal error: runN when benchmark is already done") + } + benchmarkLock.Lock() defer benchmarkLock.Unlock() defer func() { @@ -196,46 +200,46 @@ func (b *B) runN(n int) { b.previousDuration = b.duration } -// run1 runs the first iteration of benchFunc. It reports whether more -// iterations of this benchmarks should be run. -func (b *B) run1() bool { +// run1 runs the first iteration of benchFunc. +// +// If no more iterations of this benchmark should be done, run1 sets b.done. +func (b *B) run1() { if ctx := b.context; ctx != nil { // Extend maxLen, if needed. if n := len(b.name) + ctx.extLen + 1; n > ctx.maxLen { ctx.maxLen = n + 8 // Add additional slack to avoid too many jumps in size. } } + + runOneDone := make(chan struct{}) go func() { // Signal that we're done whether we return normally // or by FailNow's runtime.Goexit. - defer func() { - b.signal <- true - }() - + defer close(runOneDone) b.runN(1) }() - <-b.signal + <-runOneDone + if b.failed { fmt.Fprintf(b.w, "%s--- FAIL: %s\n%s", b.chatty.prefix(), b.name, b.output) - return false + b.done = true + close(b.doneOrParallel) + return } // Only print the output if we know we are not going to proceed. // Otherwise it is printed in processBench. - b.mu.RLock() - finished := b.finished - b.mu.RUnlock() - if b.hasSub.Load() || finished { + if b.hasSub.Load() || b.skipped { tag := "BENCH" if b.skipped { tag = "SKIP" } - if b.chatty != nil && (len(b.output) > 0 || finished) { + if b.chatty != nil && (len(b.output) > 0 || b.skipped) { b.trimOutput() fmt.Fprintf(b.w, "%s--- %s: %s\n%s", b.chatty.prefix(), tag, b.name, b.output) } - return false + b.done = true + close(b.doneOrParallel) } - return true } var labelsOnce sync.Once @@ -262,9 +266,10 @@ func (b *B) run() { } } +// doBench calls b.launch in a separate goroutine and waits for it to complete. func (b *B) doBench() BenchmarkResult { go b.launch() - <-b.signal + <-b.doneOrParallel return b.result } @@ -276,7 +281,10 @@ func (b *B) launch() { // Signal that we're done whether we return normally // or by FailNow's runtime.Goexit. defer func() { - b.signal <- true + b.result = BenchmarkResult{b.N, b.duration, b.bytes, b.netAllocs, b.netBytes, b.extra} + b.setRanLeaf() + b.done = true + close(b.doneOrParallel) }() // Run the benchmark for at least the specified amount of time. @@ -316,7 +324,6 @@ func (b *B) launch() { b.runN(int(n)) } } - b.result = BenchmarkResult{b.N, b.duration, b.bytes, b.netAllocs, b.netBytes, b.extra} } // Elapsed returns the measured elapsed time of the benchmark. @@ -550,6 +557,7 @@ func runBenchmarks(importPath string, matchString func(pat, str string) (bool, e main.chatty = newChattyPrinter(main.w) } main.runN(1) + main.done = true return !main.failed } @@ -568,18 +576,21 @@ func (ctx *benchContext) processBench(b *B) { if i > 0 || j > 0 { b = &B{ common: common{ - signal: make(chan bool), - name: b.name, - w: b.w, - chatty: b.chatty, - bench: true, + doneOrParallel: make(chan struct{}), + name: b.name, + w: b.w, + chatty: b.chatty, + bench: true, }, benchFunc: b.benchFunc, benchTime: b.benchTime, } b.run1() } - r := b.doBench() + var r BenchmarkResult + if !b.done { + r = b.doBench() + } if b.failed { // The output could be very long here, but probably isn't. // We print it all, regardless, because we don't want to trim the reason @@ -622,6 +633,13 @@ var hideStdoutForTesting = false // A subbenchmark is like any other benchmark. A benchmark that calls Run at // least once will not be measured itself and will be called once with N=1. func (b *B) Run(name string, f func(b *B)) bool { + if b.previousN > 0 { + // If the benchmark calls Run we will only call it once with N=1. + // If it doesn't call Run the first time we try it, it must not + // call run on subsequent invocations either. + panic("testing: unexpected call to B.Run during iteration") + } + // Since b has subbenchmarks, we will no longer run it as a benchmark itself. // Release the lock and acquire it on exit to ensure locks stay paired. b.hasSub.Store(true) @@ -639,14 +657,14 @@ func (b *B) Run(name string, f func(b *B)) bool { n := runtime.Callers(2, pc[:]) sub := &B{ common: common{ - signal: make(chan bool), - name: benchName, - parent: &b.common, - level: b.level + 1, - creator: pc[:n], - w: b.w, - chatty: b.chatty, - bench: true, + doneOrParallel: make(chan struct{}), + name: benchName, + parent: &b.common, + level: b.level + 1, + creator: pc[:n], + w: b.w, + chatty: b.chatty, + bench: true, }, importPath: b.importPath, benchFunc: f, @@ -679,7 +697,8 @@ func (b *B) Run(name string, f func(b *B)) bool { } } - if sub.run1() { + sub.run1() + if !sub.done { sub.run() } b.add(sub.result) @@ -823,13 +842,14 @@ func (b *B) SetParallelism(p int) { func Benchmark(f func(b *B)) BenchmarkResult { b := &B{ common: common{ - signal: make(chan bool), - w: discard{}, + doneOrParallel: make(chan struct{}), + w: discard{}, }, benchFunc: f, benchTime: benchTime, } - if b.run1() { + b.run1() + if !b.done { b.run() } return b.result diff --git a/src/testing/fuzz.go b/src/testing/fuzz.go index d50ea793e0..5a3117b1e0 100644 --- a/src/testing/fuzz.go +++ b/src/testing/fuzz.go @@ -70,10 +70,6 @@ type F struct { fuzzContext *fuzzContext testContext *testContext - // inFuzzFn is true when the fuzz function is running. Most F methods cannot - // be called when inFuzzFn is true. - inFuzzFn bool - // corpus is a set of seed corpus entries, added with F.Add and loaded // from testdata. corpus []corpusEntry @@ -300,13 +296,13 @@ func (f *F) Fuzz(ff any) { n := runtime.Callers(2, pc[:]) t := &T{ common: common{ - barrier: make(chan bool), - signal: make(chan bool), - name: testName, - parent: &f.common, - level: f.level + 1, - creator: pc[:n], - chatty: f.chatty, + runParallel: make(chan struct{}), + doneOrParallel: make(chan struct{}), + name: testName, + parent: &f.common, + level: f.level + 1, + creator: pc[:n], + chatty: f.chatty, }, context: f.testContext, } @@ -318,7 +314,7 @@ func (f *F) Fuzz(ff any) { if t.chatty != nil { t.chatty.Updatef(t.name, "=== RUN %s\n", t.name) } - f.common.inFuzzFn, f.inFuzzFn = true, true + f.inFuzzFn = true go tRunner(t, func(t *T) { args := []reflect.Value{reflect.ValueOf(t)} for _, v := range e.Values { @@ -334,11 +330,11 @@ func (f *F) Fuzz(ff any) { } fn.Call(args) }) - <-t.signal + <-t.doneOrParallel if t.chatty != nil && t.chatty.json { t.chatty.Updatef(t.parent.name, "=== NAME %s\n", t.parent.name) } - f.common.inFuzzFn, f.inFuzzFn = false, false + f.inFuzzFn = false return !t.Failed() } @@ -510,12 +506,12 @@ func runFuzzTests(deps testDeps, fuzzTests []InternalFuzzTarget, deadline time.T } f := &F{ common: common{ - signal: make(chan bool), - barrier: make(chan bool), - name: testName, - parent: &root, - level: root.level + 1, - chatty: root.chatty, + doneOrParallel: make(chan struct{}), + runParallel: make(chan struct{}), + name: testName, + parent: &root, + level: root.level + 1, + chatty: root.chatty, }, testContext: tctx, fuzzContext: fctx, @@ -525,12 +521,12 @@ func runFuzzTests(deps testDeps, fuzzTests []InternalFuzzTarget, deadline time.T f.chatty.Updatef(f.name, "=== RUN %s\n", f.name) } go fRunner(f, ft.Fn) - <-f.signal + <-f.doneOrParallel if f.chatty != nil && f.chatty.json { f.chatty.Updatef(f.parent.name, "=== NAME %s\n", f.parent.name) } ok = ok && !f.Failed() - ran = ran || f.ran + ran = ran || f.ranAnyLeaf } if !ran { // There were no tests to run on this iteration. @@ -592,12 +588,12 @@ func runFuzzing(deps testDeps, fuzzTests []InternalFuzzTarget) (ok bool) { f := &F{ common: common{ - signal: make(chan bool), - barrier: nil, // T.Parallel has no effect when fuzzing. - name: testName, - parent: &root, - level: root.level + 1, - chatty: root.chatty, + doneOrParallel: make(chan struct{}), + runParallel: nil, // T.Parallel has no effect when fuzzing. + name: testName, + parent: &root, + level: root.level + 1, + chatty: root.chatty, }, fuzzContext: fctx, testContext: tctx, @@ -607,7 +603,7 @@ func runFuzzing(deps testDeps, fuzzTests []InternalFuzzTarget) (ok bool) { f.chatty.Updatef(f.name, "=== RUN %s\n", f.name) } go fRunner(f, fuzzTest.Fn) - <-f.signal + <-f.doneOrParallel if f.chatty != nil { f.chatty.Updatef(f.parent.name, "=== NAME %s\n", f.parent.name) } @@ -625,6 +621,12 @@ func runFuzzing(deps testDeps, fuzzTests []InternalFuzzTarget) (ok bool) { // simplifications are made. We also require that F.Fuzz, F.Skip, or F.Fail is // called. func fRunner(f *F, fn func(*F)) { + // TODO(bcmills): This function has a lot of code and structure in common with + // tRunner. At some point it would probably be good to factor out the common + // parts to make the differences easier to spot. + + returned := false + // When this goroutine is done, either because runtime.Goexit was called, a // panic started, or fn returned normally, record the duration and send // t.signal, indicating the fuzz test is done. @@ -636,96 +638,93 @@ func fRunner(f *F, fn func(*F)) { // Unfortunately, recovering here adds stack frames, but the location of // the original panic should still be // clear. - f.checkRaces() - if f.Failed() { - numFailed.Add(1) - } - err := recover() - if err == nil { - f.mu.RLock() - fuzzNotCalled := !f.fuzzCalled && !f.skipped && !f.failed - if !f.finished && !f.skipped && !f.failed { - err = errNilPanicOrGoexit - } - f.mu.RUnlock() - if fuzzNotCalled && err == nil { + + panicVal := recover() + if panicVal == nil && !f.skipped && !f.failed { + if !returned { + panicVal = errNilPanicOrGoexit + } else if !f.fuzzCalled { f.Error("returned without calling F.Fuzz, F.Fail, or F.Skip") } } - // Use a deferred call to ensure that we report that the test is - // complete even if a cleanup function calls F.FailNow. See issue 41355. - didPanic := false - defer func() { - if !didPanic { - // Only report that the test is complete if it doesn't panic, - // as otherwise the test binary can exit before the panic is - // reported to the user. See issue 41479. - f.signal <- true - } - }() - - // If we recovered a panic or inappropriate runtime.Goexit, fail the test, - // flush the output log up to the root, then panic. - doPanic := func(err any) { + if panicVal != nil { + // Mark the test as failed so that Cleanup functions can see its correct status. f.Fail() - if r := f.runCleanup(recoverAndReturnPanic); r != nil { - f.Logf("cleanup panicked with %v", r) - } - for root := &f.common; root.parent != nil; root = root.parent { - root.mu.Lock() - root.duration += time.Since(root.start) - d := root.duration - root.mu.Unlock() - root.flushToParent(root.name, "--- FAIL: %s (%s)\n", root.name, fmtDuration(d)) - } - didPanic = true - panic(err) - } - if err != nil { - doPanic(err) - } - - // No panic or inappropriate Goexit. - f.duration += time.Since(f.start) - - if len(f.sub) > 0 { + } else if f.runParallel != nil { // Unblock inputs that called T.Parallel while running the seed corpus. // This only affects fuzz tests run as normal tests. - // While fuzzing, T.Parallel has no effect, so f.sub is empty, and this - // branch is not taken. f.barrier is nil in that case. - f.testContext.release() - close(f.barrier) - // Wait for the subtests to complete. - for _, sub := range f.sub { - <-sub.signal - } - cleanupStart := time.Now() - err := f.runCleanup(recoverAndReturnPanic) - f.duration += time.Since(cleanupStart) - if err != nil { - doPanic(err) - } + // While fuzzing, T.Parallel has no effect, so f.parallelSubtests is empty + // and this is a no-op. + + // Check for races before starting parallel subtests, so that if a + // parallel subtest *also* triggers a data race we will report the two + // races to the two tests and not attribute all of them to the subtest. + f.checkRaces() + + close(f.runParallel) + f.parallelSubtests.Wait() } - // Report after all subtests have finished. - f.report() - f.done = true - f.setRan() - }() - defer func() { - if len(f.sub) == 0 { - f.runCleanup(normalPanic) - } + // Use a deferred call to ensure that we report that the test is + // complete even if a cleanup function calls t.FailNow. See issue 41355. + defer func() { + cleanupPanic := recover() + if panicVal == nil { + panicVal = cleanupPanic + } + + // Only report that the test is complete if it doesn't panic, + // as otherwise the test binary can exit before the panic is + // reported to the user. See issue 41479. + if panicVal != nil { + // Flush the output log up to the root before dying. + for root := &f.common; root.parent != nil; root = root.parent { + root.mu.Lock() + root.duration += time.Since(root.start) + d := root.duration + root.mu.Unlock() + root.flushToParent(root.name, "--- FAIL: %s (%s)\n", root.name, fmtDuration(d)) + + // Since the parent will never finish running, do its cleanup now. + // Run the cleanup in a fresh goroutine in case it calls runtime.Goexit, + // which we cannot recover. + cleanupDone := make(chan struct{}) + go func() { + defer close(cleanupDone) + if r := root.parent.runCleanup(recoverAndReturnPanic); r != nil { + fmt.Fprintf(root.parent.w, "cleanup panicked with %v", r) + } + }() + <-cleanupDone + } + panic(panicVal) + } + + f.checkRaces() + f.duration += time.Since(f.start) + f.report() + + // Do not lock f.done to allow race detector to detect race in case + // the user does not appropriately synchronize a goroutine. + f.done = true + if f.parent != nil && !f.hasSub.Load() { + f.setRanLeaf() + } + + running.Delete(f.name) + close(f.doneOrParallel) + }() + + f.runCleanup(normalPanic) }() + // Run the actual fuzz function. f.start = time.Now() f.resetRaces() fn(f) // Code beyond this point will not be executed when FailNow or SkipNow // is invoked. - f.mu.Lock() - f.finished = true - f.mu.Unlock() + returned = true } diff --git a/src/testing/panic_test.go b/src/testing/panic_test.go index 6307b84a7a..82e7087025 100644 --- a/src/testing/panic_test.go +++ b/src/testing/panic_test.go @@ -211,57 +211,68 @@ func TestPanicHelper(t *testing.T) { } func TestMorePanic(t *testing.T) { - testenv.MustHaveExec(t) + subprocess := false + if os.Getenv("GO_WANT_HELPER_PROCESS") == "1" { + subprocess = true + } else { + testenv.MustHaveExec(t) + t.Parallel() + } testCases := []struct { + issue int desc string - flags []string + f func(*testing.T) want string }{ { - desc: "Issue 48502: call runtime.Goexit in t.Cleanup after panic", - flags: []string{"-test.run=^TestGoexitInCleanupAfterPanicHelper$"}, - want: `panic: die - panic: test executed panic(nil) or runtime.Goexit`, + issue: 48502, + desc: "runtime.Goexit in t.Cleanup after panic", + f: func(t *testing.T) { + t.Cleanup(func() { + t.Log("Goexiting in cleanup") + runtime.Goexit() + }) + t.Parallel() + panic("die") + }, + want: `panic: die [recovered] + panic: die`, }, { - desc: "Issue 48515: call t.Run in t.Cleanup should trigger panic", - flags: []string{"-test.run=^TestCallRunInCleanupHelper$"}, - want: `panic: testing: t.Run called during t.Cleanup`, + issue: 48515, + desc: "t.Run in t.Cleanup should trigger panic", + f: func(t *testing.T) { + t.Cleanup(func() { + t.Run("in-cleanup", func(t *testing.T) { + t.Log("must not be executed") + }) + }) + }, + want: `panic: testing: t.Run called during t.Cleanup`, }, } for _, tc := range testCases { - cmd := exec.Command(os.Args[0], tc.flags...) - cmd.Env = append(os.Environ(), "GO_WANT_HELPER_PROCESS=1") - b, _ := cmd.CombinedOutput() - got := string(b) - want := tc.want - re := makeRegexp(want) - if ok, err := regexp.MatchString(re, got); !ok || err != nil { - t.Errorf("output:\ngot:\n%s\nwant:\n%s", got, want) - } - } -} + tc := tc + t.Run(fmt.Sprintf("issue%v", tc.issue), func(t *testing.T) { + if subprocess { + tc.f(t) + return + } -func TestCallRunInCleanupHelper(t *testing.T) { - if os.Getenv("GO_WANT_HELPER_PROCESS") != "1" { - return - } + t.Parallel() + cmd := testenv.Command(t, os.Args[0], "-test.run="+t.Name()) + cmd.Env = append(cmd.Environ(), "GO_WANT_HELPER_PROCESS=1") + b, _ := cmd.CombinedOutput() + got := string(b) + t.Logf("%v:\n%s", tc.desc, got) - t.Cleanup(func() { - t.Run("in-cleanup", func(t *testing.T) { - t.Log("must not be executed") + want := tc.want + re := makeRegexp(want) + if ok, err := regexp.MatchString(re, got); !ok || err != nil { + t.Errorf("wanted:\n%s", want) + } }) - }) -} - -func TestGoexitInCleanupAfterPanicHelper(t *testing.T) { - if os.Getenv("GO_WANT_HELPER_PROCESS") != "1" { - return } - - t.Cleanup(func() { runtime.Goexit() }) - t.Parallel() - panic("die") } diff --git a/src/testing/sub_test.go b/src/testing/sub_test.go index 55b14c3795..7cbbd2e1cf 100644 --- a/src/testing/sub_test.go +++ b/src/testing/sub_test.go @@ -21,102 +21,6 @@ func init() { benchTime.d = 100 * time.Millisecond } -func TestTestContext(t *T) { - const ( - add1 = 0 - done = 1 - ) - // After each of the calls are applied to the context, the - type call struct { - typ int // run or done - // result from applying the call - running int - waiting int - started bool - } - testCases := []struct { - max int - run []call - }{{ - max: 1, - run: []call{ - {typ: add1, running: 1, waiting: 0, started: true}, - {typ: done, running: 0, waiting: 0, started: false}, - }, - }, { - max: 1, - run: []call{ - {typ: add1, running: 1, waiting: 0, started: true}, - {typ: add1, running: 1, waiting: 1, started: false}, - {typ: done, running: 1, waiting: 0, started: true}, - {typ: done, running: 0, waiting: 0, started: false}, - {typ: add1, running: 1, waiting: 0, started: true}, - }, - }, { - max: 3, - run: []call{ - {typ: add1, running: 1, waiting: 0, started: true}, - {typ: add1, running: 2, waiting: 0, started: true}, - {typ: add1, running: 3, waiting: 0, started: true}, - {typ: add1, running: 3, waiting: 1, started: false}, - {typ: add1, running: 3, waiting: 2, started: false}, - {typ: add1, running: 3, waiting: 3, started: false}, - {typ: done, running: 3, waiting: 2, started: true}, - {typ: add1, running: 3, waiting: 3, started: false}, - {typ: done, running: 3, waiting: 2, started: true}, - {typ: done, running: 3, waiting: 1, started: true}, - {typ: done, running: 3, waiting: 0, started: true}, - {typ: done, running: 2, waiting: 0, started: false}, - {typ: done, running: 1, waiting: 0, started: false}, - {typ: done, running: 0, waiting: 0, started: false}, - }, - }} - for i, tc := range testCases { - ctx := &testContext{ - startParallel: make(chan bool), - maxParallel: tc.max, - } - for j, call := range tc.run { - doCall := func(f func()) chan bool { - done := make(chan bool) - go func() { - f() - done <- true - }() - return done - } - started := false - switch call.typ { - case add1: - signal := doCall(ctx.waitParallel) - select { - case <-signal: - started = true - case ctx.startParallel <- true: - <-signal - } - case done: - signal := doCall(ctx.release) - select { - case <-signal: - case <-ctx.startParallel: - started = true - <-signal - } - } - if started != call.started { - t.Errorf("%d:%d:started: got %v; want %v", i, j, started, call.started) - } - if ctx.running != call.running { - t.Errorf("%d:%d:running: got %v; want %v", i, j, ctx.running, call.running) - } - if ctx.numWaiting != call.waiting { - t.Errorf("%d:%d:waiting: got %v; want %v", i, j, ctx.numWaiting, call.waiting) - } - } - } -} - func TestTRun(t *T) { realTest := t testCases := []struct { @@ -511,10 +415,10 @@ func TestTRun(t *T) { buf := &strings.Builder{} root := &T{ common: common{ - signal: make(chan bool), - barrier: make(chan bool), - name: "", - w: buf, + doneOrParallel: make(chan struct{}), + runParallel: make(chan struct{}), + name: "", + w: buf, }, context: ctx, } @@ -523,7 +427,6 @@ func TestTRun(t *T) { root.chatty.json = tc.json } ok := root.Run(tc.desc, tc.f) - ctx.release() if ok != tc.ok { t.Errorf("%s:ok: got %v; want %v", tc.desc, ok, tc.ok) @@ -531,8 +434,8 @@ func TestTRun(t *T) { if ok != !root.Failed() { t.Errorf("%s:root failed: got %v; want %v", tc.desc, !ok, root.Failed()) } - if ctx.running != 0 || ctx.numWaiting != 0 { - t.Errorf("%s:running and waiting non-zero: got %d and %d", tc.desc, ctx.running, ctx.numWaiting) + if n := ctx.running(); n != 0 { + t.Errorf("%s:running non-zero: got %d", tc.desc, n) } got := strings.TrimSpace(buf.String()) want := strings.TrimSpace(tc.output) @@ -701,9 +604,9 @@ func TestBRun(t *T) { // the benchtime and catch the failure result of the subbenchmark. root := &B{ common: common{ - signal: make(chan bool), - name: "root", - w: buf, + doneOrParallel: make(chan struct{}), + name: "root", + w: buf, }, benchFunc: func(b *B) { ok = b.Run("test", tc.f) }, // Use Run to catch failure. benchTime: durationOrCountFlag{d: 1 * time.Microsecond}, @@ -837,8 +740,8 @@ func TestLogAfterComplete(t *T) { common: common{ // Use a buffered channel so that tRunner can write // to it although nothing is reading from it. - signal: make(chan bool, 1), - w: &buf, + doneOrParallel: make(chan struct{}), + w: &buf, }, context: ctx, } @@ -910,18 +813,22 @@ func TestCleanup(t *T) { func TestConcurrentCleanup(t *T) { cleanups := 0 t.Run("test", func(t *T) { - done := make(chan struct{}) + var wg sync.WaitGroup + wg.Add(2) for i := 0; i < 2; i++ { i := i go func() { t.Cleanup(func() { + // Although the calls to Cleanup are concurrent, the functions passed + // to Cleanup should be called sequentially, in some nondeterministic + // order based on when the Cleanup calls happened to be scheduled. + // So these assignments to the cleanups variable should not race. cleanups |= 1 << i }) - done <- struct{}{} + wg.Done() }() } - <-done - <-done + wg.Wait() }) if cleanups != 1|2 { t.Errorf("unexpected cleanup; got %d want 3", cleanups) diff --git a/src/testing/testing.go b/src/testing/testing.go index ed8b3630f1..96f71c89b9 100644 --- a/src/testing/testing.go +++ b/src/testing/testing.go @@ -480,7 +480,7 @@ var ( cpuList []int testlogFile *os.File - numFailed atomic.Uint32 // number of test failures + anyFailed atomic.Bool running sync.Map // map[string]time.Time of running, unpaused tests ) @@ -593,38 +593,40 @@ const maxStackLen = 50 // captures common methods such as Errorf. type common struct { mu sync.RWMutex // guards this group of fields - output []byte // Output generated by test or benchmark. - w io.Writer // For flushToParent. - ran bool // Test or benchmark (or one of its subtests) was executed. + output []byte // output generated by test or benchmark + w io.Writer // output to which flushToParent should write + ranAnyLeaf bool // Test or benchmark ran to completion without calling Run itself, or had a subtest that did so. failed bool // Test or benchmark has failed. skipped bool // Test or benchmark has been skipped. + goexiting bool // Test function is attempting to abort by goexit (implies failed || skipped). done bool // Test is finished and all subtests have completed. helperPCs map[uintptr]struct{} // functions to be skipped when writing file/line info helperNames map[string]struct{} // helperPCs converted to function names cleanups []func() // optional functions to be called at the end of the test - cleanupName string // Name of the cleanup function. - cleanupPc []uintptr // The stack trace at the point where Cleanup was called. - finished bool // Test function has completed. - inFuzzFn bool // Whether the fuzz target, if this is one, is running. + cleanupName string // name of the cleanup function currently running + cleanupPc []uintptr // stack trace at the point where Cleanup was called - chatty *chattyPrinter // A copy of chattyPrinter, if the chatty flag is set. - bench bool // Whether the current test is a benchmark. - hasSub atomic.Bool // whether there are sub-benchmarks. - cleanupStarted atomic.Bool // Registered cleanup callbacks have started to execute - runner string // Function name of tRunner running the test. - isParallel bool // Whether the test is parallel. + chatty *chattyPrinter // copy of chattyPrinter, if the chatty flag is set + bench bool // Current test is a benchmark. + runner string // function name of tRunner running the test + isParallel bool // Test is running in parallel. + inFuzzFn bool // Fuzz target, if this is one, is running. + inCleanup bool // Cleanup callbacks, if any, are running. - parent *common - level int // Nesting depth of test or benchmark. - creator []uintptr // If level > 0, the stack trace at the point where the parent called t.Run. - name string // Name of test or benchmark. - start time.Time // Time test or benchmark started - duration time.Duration - barrier chan bool // To signal parallel subtests they may start. Nil when T.Parallel is not present (B) or not usable (when fuzzing). - signal chan bool // To signal a test is done. - sub []*T // Queue of subtests to be run in parallel. + parent *common + level int // nesting depth of test or benchmark + creator []uintptr // if level > 0, the stack trace at the point where the parent called t.Run + name string // name of test or benchmark + start time.Time // time test or benchmark started or resumed + duration time.Duration // time in the test function, excluding time blocked in t.Parallel + runParallel chan struct{} // Closed when parallel subtests may start. Nil when T.Parallel is not present (B) or not usable (when fuzzing). + doneOrParallel chan struct{} // Closed when the test is either blocked in Parallel or done running. - lastRaceErrors atomic.Int64 // Max value of race.Errors seen during the test or its subtests. + hasSub atomic.Bool // Test or benchmark has subtests or sub-benchmarks. + parallelSubtests sync.WaitGroup + runMu sync.Mutex // Held during calls to Run to prevent the total number of active subtests from exceeding the parallelism limit. + + lastRaceErrors atomic.Int64 // max value of race.Errors seen during the test or its subtests raceErrorLogged atomic.Bool tempDirMu sync.Mutex @@ -931,13 +933,13 @@ func (c *common) Name() string { return c.name } -func (c *common) setRan() { +func (c *common) setRanLeaf() { if c.parent != nil { - c.parent.setRan() + c.parent.setRanLeaf() } c.mu.Lock() defer c.mu.Unlock() - c.ran = true + c.ranAnyLeaf = true } // Fail marks the function as having failed but continues execution. @@ -952,6 +954,7 @@ func (c *common) Fail() { panic("Fail in goroutine after " + c.name + " has completed") } c.failed = true + anyFailed.Store(true) } // Failed reports whether the function has failed. @@ -1000,7 +1003,7 @@ func (c *common) FailNow() { // a top-of-stack deferred function now, we know that the send // only happens after any other stacked defers have completed. c.mu.Lock() - c.finished = true + c.goexiting = true c.mu.Unlock() runtime.Goexit() } @@ -1115,7 +1118,7 @@ func (c *common) SkipNow() { c.checkFuzzFn("SkipNow") c.mu.Lock() c.skipped = true - c.finished = true + c.goexiting = true c.mu.Unlock() runtime.Goexit() } @@ -1318,8 +1321,8 @@ const ( // If ph is recoverAndReturnPanic, it will catch panics, and return the // recovered value if any. func (c *common) runCleanup(ph panicHandling) (panicVal any) { - c.cleanupStarted.Store(true) - defer c.cleanupStarted.Store(false) + c.inCleanup = true + defer func() { c.inCleanup = false }() if ph == recoverAndReturnPanic { defer func() { @@ -1446,8 +1449,7 @@ func (t *T) Parallel() { if t.isEnvSet { panic("testing: t.Parallel called after t.Setenv; cannot set environment variables in parallel tests") } - t.isParallel = true - if t.parent.barrier == nil { + if t.parent.runParallel == nil { // T.Parallel has no effect when fuzzing. // Multiple processes may run in parallel, but only one input can run at a // time per process so we can attribute crashes to specific inputs. @@ -1460,7 +1462,7 @@ func (t *T) Parallel() { t.duration += time.Since(t.start) // Add to the list of tests to be released by the parent. - t.parent.sub = append(t.parent.sub, t) + t.parent.parallelSubtests.Add(1) // Report any races during execution of this test up to this point. // @@ -1479,9 +1481,19 @@ func (t *T) Parallel() { } running.Delete(t.name) - t.signal <- true // Release calling test. - <-t.parent.barrier // Wait for the parent test to complete. - t.context.waitParallel() + t.isParallel = true + + // Release the parent test to run. We can't just use parallelSem tokens for + // this because some callers (notably TestParallelSub) expect to be able to + // call Run from multiple goroutines and have those calls succeed. + // + // Instead, we close a channel to unblock the parent's call to Run, allowing + // it to resume. Then, we wait for it to finish and unblock its parallel + // subtests, and acquire a parallel run token so that we don't run too many of + // the subtests together all at once. + close(t.doneOrParallel) + <-t.parent.runParallel + t.context.acquireParallel() if t.chatty != nil { t.chatty.Updatef(t.name, "=== CONT %s\n", t.name) @@ -1538,19 +1550,13 @@ var errNilPanicOrGoexit = errors.New("test executed panic(nil) or runtime.Goexit func tRunner(t *T, fn func(t *T)) { t.runner = callerName(0) + returned := false // When this goroutine is done, either because fn(t) // returned normally or because a test failure triggered // a call to runtime.Goexit, record the duration and send // a signal saying that the test is done. defer func() { - t.checkRaces() - - // TODO(#61034): This is the wrong place for this check. - if t.Failed() { - numFailed.Add(1) - } - // Check if the test panicked or Goexited inappropriately. // // If this happens in a normal test, print output but continue panicking. @@ -1559,132 +1565,120 @@ func tRunner(t *T, fn func(t *T)) { // If this happens while fuzzing, recover from the panic and treat it like a // normal failure. It's important that the process keeps running in order to // find short inputs that cause panics. - err := recover() - signal := true - - t.mu.RLock() - finished := t.finished - t.mu.RUnlock() - if !finished && err == nil { - err = errNilPanicOrGoexit + panicVal := recover() + if !returned && !t.goexiting && panicVal == nil { + panicVal = errNilPanicOrGoexit for p := t.parent; p != nil; p = p.parent { p.mu.RLock() - finished = p.finished + pGoexiting := p.goexiting p.mu.RUnlock() - if finished { - if !t.isParallel { - t.Errorf("%v: subtest may have called FailNow on a parent test", err) - err = nil - } - signal = false + if pGoexiting { + t.Errorf("%v: subtest may have called FailNow on a parent test", panicVal) + panicVal = nil break } } } - if err != nil && t.context.isFuzzing { + if panicVal != nil && t.context.isFuzzing { prefix := "panic: " - if err == errNilPanicOrGoexit { + if panicVal == errNilPanicOrGoexit { prefix = "" } - t.Errorf("%s%s\n%s\n", prefix, err, string(debug.Stack())) - t.mu.Lock() - t.finished = true - t.mu.Unlock() - err = nil + t.Errorf("%s%s\n%s\n", prefix, panicVal, string(debug.Stack())) + panicVal = nil + } + + if panicVal != nil { + // Mark the test as failed so that Cleanup functions can see its correct status. + t.Fail() + } else if t.runParallel != nil { + // Run parallel subtests. + + // Check for races before starting parallel subtests, so that if a + // parallel subtest *also* triggers a data race we will report the two + // races to the two tests and not attribute all of them to the subtest. + t.checkRaces() + + if t.isParallel { + // Release our own parallel token first, so that it is available for + // subtests to acquire. + t.context.releaseParallel() + } + close(t.runParallel) + t.parallelSubtests.Wait() + if t.isParallel { + // Re-acquire a parallel token to limit concurrent cleanup. + t.context.acquireParallel() + } } // Use a deferred call to ensure that we report that the test is // complete even if a cleanup function calls t.FailNow. See issue 41355. - didPanic := false defer func() { + cleanupPanic := recover() + if panicVal == nil { + panicVal = cleanupPanic + } + // Only report that the test is complete if it doesn't panic, // as otherwise the test binary can exit before the panic is // reported to the user. See issue 41479. - if didPanic { - return + if panicVal != nil { + // Flush the output log up to the root before dying. + for root := &t.common; root.parent != nil; root = root.parent { + root.mu.Lock() + root.duration += time.Since(root.start) + d := root.duration + root.mu.Unlock() + root.flushToParent(root.name, "--- FAIL: %s (%s)\n", root.name, fmtDuration(d)) + + // Since the parent will never finish running, do its cleanup now. + // Run the cleanup in a fresh goroutine in case it calls runtime.Goexit, + // which we cannot recover. + cleanupDone := make(chan struct{}) + go func() { + defer close(cleanupDone) + if r := root.parent.runCleanup(recoverAndReturnPanic); r != nil { + fmt.Fprintf(root.parent.w, "cleanup panicked with %v", r) + } + }() + <-cleanupDone + } + panic(panicVal) } - if err != nil { - panic(err) + + t.checkRaces() + t.duration += time.Since(t.start) + t.report() + + // Do not lock t.done to allow race detector to detect race in case + // the user does not appropriately synchronize a goroutine. + t.done = true + if t.parent != nil && !t.hasSub.Load() { + t.setRanLeaf() } + running.Delete(t.name) - t.signal <- signal + if t.isParallel { + t.context.releaseParallel() + t.parent.parallelSubtests.Done() + } else { + close(t.doneOrParallel) + } }() - doPanic := func(err any) { - t.Fail() - if r := t.runCleanup(recoverAndReturnPanic); r != nil { - t.Logf("cleanup panicked with %v", r) - } - // Flush the output log up to the root before dying. - for root := &t.common; root.parent != nil; root = root.parent { - root.mu.Lock() - root.duration += time.Since(root.start) - d := root.duration - root.mu.Unlock() - root.flushToParent(root.name, "--- FAIL: %s (%s)\n", root.name, fmtDuration(d)) - if r := root.parent.runCleanup(recoverAndReturnPanic); r != nil { - fmt.Fprintf(root.parent.w, "cleanup panicked with %v", r) - } - } - didPanic = true - panic(err) - } - if err != nil { - doPanic(err) - } - - t.duration += time.Since(t.start) - - if len(t.sub) > 0 { - // Run parallel subtests. - // Decrease the running count for this test. - t.context.release() - // Release the parallel subtests. - close(t.barrier) - // Wait for subtests to complete. - for _, sub := range t.sub { - <-sub.signal - } - cleanupStart := time.Now() - err := t.runCleanup(recoverAndReturnPanic) - t.duration += time.Since(cleanupStart) - if err != nil { - doPanic(err) - } - t.checkRaces() - if !t.isParallel { - // Reacquire the count for sequential tests. See comment in Run. - t.context.waitParallel() - } - } else if t.isParallel { - // Only release the count for this test if it was run as a parallel - // test. See comment in Run method. - t.context.release() - } - t.report() // Report after all subtests have finished. - - // Do not lock t.done to allow race detector to detect race in case - // the user does not appropriately synchronize a goroutine. - t.done = true - if t.parent != nil && !t.hasSub.Load() { - t.setRan() - } - }() - defer func() { - if len(t.sub) == 0 { - t.runCleanup(normalPanic) - } + t.runCleanup(normalPanic) }() + // Run the actual test function. t.start = time.Now() t.resetRaces() fn(t) - // code beyond here will not be executed when FailNow is invoked - t.mu.Lock() - t.finished = true - t.mu.Unlock() + // Code beyond this point will not be executed when FailNow or SkipNow + // is invoked. + returned = true } // Run runs f as a subtest of t called name. It runs f in a separate goroutine @@ -1694,7 +1688,7 @@ func tRunner(t *T, fn func(t *T)) { // Run may be called simultaneously from multiple goroutines, but all such calls // must return before the outer test function for t returns. func (t *T) Run(name string, f func(t *T)) bool { - if t.cleanupStarted.Load() { + if t.inCleanup { panic("testing: t.Run called during t.Cleanup") } @@ -1708,40 +1702,56 @@ func (t *T) Run(name string, f func(t *T)) bool { // continue walking the stack into the parent test. var pc [maxStackLen]uintptr n := runtime.Callers(2, pc[:]) - t = &T{ + sub := &T{ common: common{ - barrier: make(chan bool), - signal: make(chan bool, 1), - name: testName, - parent: &t.common, - level: t.level + 1, - creator: pc[:n], - chatty: t.chatty, + runParallel: make(chan struct{}), + doneOrParallel: make(chan struct{}), + name: testName, + parent: &t.common, + level: t.level + 1, + creator: pc[:n], + chatty: t.chatty, }, context: t.context, } - t.w = indenter{&t.common} + sub.w = indenter{&sub.common} - if t.chatty != nil { - t.chatty.Updatef(t.name, "=== RUN %s\n", t.name) + // Ensure that only one non-parallel subtest runs at a time so that we don't + // exceed the -parallel setting due to concurrent calls. + // (Run may be called concurrently even if the test is not marked parallel — + // see TestParallelSub.) + t.runMu.Lock() + defer t.runMu.Unlock() + + if t.isParallel { + // Release our parallelism token for the subtest to use + // for its own parallel subtests. + t.context.releaseParallel() + defer t.context.acquireParallel() } - running.Store(t.name, time.Now()) + + if sub.chatty != nil { + sub.chatty.Updatef(sub.name, "=== RUN %s\n", sub.name) + } + running.Store(sub.name, time.Now()) // Instead of reducing the running count of this test before calling the // tRunner and increasing it afterwards, we rely on tRunner keeping the // count correct. This ensures that a sequence of sequential tests runs // without being preempted, even when their parent is a parallel test. This // may especially reduce surprises if *parallel == 1. - go tRunner(t, f) - if !<-t.signal { - // At this point, it is likely that FailNow was called on one of the - // parent tests by one of the subtests. Continue aborting up the chain. + go tRunner(sub, f) + <-sub.doneOrParallel + if t.goexiting { + // The parent test (t) thinks it called runtime.Goexit, but here we are + // still running. It is likely that this subtest called FailNow or SkipNow + // on the t instead of sub, so propagate the Goexit to the parent goroutine. runtime.Goexit() } if t.chatty != nil && t.chatty.json { - t.chatty.Updatef(t.parent.name, "=== NAME %s\n", t.parent.name) + t.chatty.Updatef(t.name, "=== NAME %s\n", t.name) } - return !t.failed + return !sub.failed } // Deadline reports the time at which the test binary will have @@ -1765,53 +1775,43 @@ type testContext struct { // does not match). isFuzzing bool - mu sync.Mutex - - // Channel used to signal tests that are ready to be run in parallel. - startParallel chan bool - - // running is the number of tests currently running in parallel. - // This does not include tests that are waiting for subtests to complete. - running int - - // numWaiting is the number tests waiting to be run in parallel. - numWaiting int - - // maxParallel is a copy of the parallel flag. - maxParallel int + // parallelSem is a counting semaphore to limit concurrency of Parallel tests. + // It has a capacity equal to the parallel flag. + // Send a token to acquire; receive to release. + // Non-parallel tests do not require a token. + parallelSem chan token } +// A token is a semaphore token. +type token struct{} + +// newTestContext returns a new testContext with the given parallelism and matcher. func newTestContext(maxParallel int, m *matcher) *testContext { - return &testContext{ - match: m, - startParallel: make(chan bool), - maxParallel: maxParallel, - running: 1, // Set the count to 1 for the main (sequential) test. + tc := &testContext{ + match: m, + parallelSem: make(chan token, maxParallel), + } + return tc +} + +// acquireParallel blocks until it can obtain a semaphore token for running a +// parallel test. +func (c *testContext) acquireParallel() { + c.parallelSem <- token{} +} + +// releaseParallel returns a semaphore token obtained by acquireParallel. +func (c *testContext) releaseParallel() { + select { + case <-c.parallelSem: + default: + panic("testing: internal error: no parallel token to release") } } -func (c *testContext) waitParallel() { - c.mu.Lock() - if c.running < c.maxParallel { - c.running++ - c.mu.Unlock() - return - } - c.numWaiting++ - c.mu.Unlock() - <-c.startParallel -} - -func (c *testContext) release() { - c.mu.Lock() - if c.numWaiting == 0 { - c.running-- - c.mu.Unlock() - return - } - c.numWaiting-- - c.mu.Unlock() - c.startParallel <- true // Pick a waiting test to be run. +// running returns the number of semaphore tokens outstanding. +func (c *testContext) running() int { + return len(c.parallelSem) } // No one should be using func Main anymore. @@ -2132,9 +2132,9 @@ func runTests(matchString func(pat, str string) (bool, error), tests []InternalT ctx.deadline = deadline t := &T{ common: common{ - signal: make(chan bool, 1), - barrier: make(chan bool), - w: os.Stdout, + doneOrParallel: make(chan struct{}), + runParallel: make(chan struct{}), + w: os.Stdout, }, context: ctx, } @@ -2147,12 +2147,12 @@ func runTests(matchString func(pat, str string) (bool, error), tests []InternalT } }) select { - case <-t.signal: + case <-t.doneOrParallel: default: - panic("internal error: tRunner exited without sending on t.signal") + panic("internal error: tRunner exited without closing t.doneOrParallel") } ok = ok && !t.Failed() - ran = ran || t.ran + ran = ran || t.ranAnyLeaf } } return ran, ok @@ -2390,5 +2390,5 @@ func parseCpuList() { } func shouldFailFast() bool { - return *failFast && numFailed.Load() > 0 + return *failFast && anyFailed.Load() } From ff722e607cc131903181fe9d686d4d91ade15a2d Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Tue, 21 Nov 2023 16:51:57 +0000 Subject: [PATCH 082/313] internal/trace/v2: dump text trace on failure only if it fits in the log Currently we dump text traces to the build log on failure unconditionally, but this may cause the old infrastructure's builds' logs to get truncated. Avoid that by setting a threshold on the maximum size of the text trace we're willing to dump. We don't need this workaround on the new infrastructure -- logs don't get truncated there. Change-Id: I0f50f50bb4b90f87250b673fbe56f48235325610 Reviewed-on: https://go-review.googlesource.com/c/go/+/544216 Auto-Submit: Michael Knyszek LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Pratt --- src/internal/trace/v2/trace_test.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/internal/trace/v2/trace_test.go b/src/internal/trace/v2/trace_test.go index b2d7781991..3300c00fe8 100644 --- a/src/internal/trace/v2/trace_test.go +++ b/src/internal/trace/v2/trace_test.go @@ -526,6 +526,7 @@ func testTraceProg(t *testing.T, progName string, extra func(t *testing.T, trace // Check if we're on a builder. onBuilder := testenv.Builder() != "" + onOldBuilder := !strings.Contains(testenv.Builder(), "gotip") && !strings.Contains(testenv.Builder(), "go1") testPath := filepath.Join("./testdata/testprog", progName) testName := progName @@ -567,7 +568,18 @@ func testTraceProg(t *testing.T, progName string, extra func(t *testing.T, trace // data is critical for debugging and this is the only way // we can currently make sure it's retained. t.Log("found bad trace; dumping to test log...") - t.Log(dumpTraceToText(t, tb)) + s := dumpTraceToText(t, tb) + if onOldBuilder && len(s) > 1<<20+512<<10 { + // The old build infrastructure truncates logs at ~2 MiB. + // Let's assume we're the only failure and give ourselves + // up to 1.5 MiB to dump the trace. + // + // TODO(mknyszek): Remove this when we've migrated off of + // the old infrastructure. + t.Logf("text trace too large to dump (%d bytes)", len(s)) + } else { + t.Log(s) + } } else if t.Failed() || *dumpTraces { // We asked to dump the trace or failed. Write the trace to a file. t.Logf("wrote trace to file: %s", dumpTraceToFile(t, testName, stress, tb)) From 059a9eedf45f4909db6a24242c106be15fb27193 Mon Sep 17 00:00:00 2001 From: Filippo Valsorda Date: Tue, 21 Nov 2023 23:16:56 +0100 Subject: [PATCH 083/313] crypto/tls: check and record godebugs more granularly We should call Value as late as possible to allow programs to set GODEBUG with os.Setenv, and IncNonDefault only when (and every time) the GODEBUG has an effect on a connection (that we'd have regularly rejected). Change-Id: If7a1446de407db7ca2d904d41dda13558b684dda Reviewed-on: https://go-review.googlesource.com/c/go/+/544335 LUCI-TryBot-Result: Go LUCI Reviewed-by: Roland Shoemaker Reviewed-by: David Chase Auto-Submit: Filippo Valsorda --- src/crypto/tls/cipher_suites.go | 39 +++++++++++++++--------------- src/crypto/tls/common.go | 11 ++++++--- src/crypto/tls/conn.go | 6 ++--- src/crypto/tls/handshake_client.go | 4 +++ src/crypto/tls/handshake_server.go | 8 ++++++ src/crypto/tls/tls_test.go | 12 ++------- 6 files changed, 43 insertions(+), 37 deletions(-) diff --git a/src/crypto/tls/cipher_suites.go b/src/crypto/tls/cipher_suites.go index eaeb7e04e6..af7c64c4d5 100644 --- a/src/crypto/tls/cipher_suites.go +++ b/src/crypto/tls/cipher_suites.go @@ -17,7 +17,6 @@ import ( "fmt" "hash" "internal/cpu" - "internal/godebug" "runtime" "golang.org/x/crypto/chacha20poly1305" @@ -323,25 +322,21 @@ var cipherSuitesPreferenceOrderNoAES = []uint16{ TLS_RSA_WITH_RC4_128_SHA, } -// disabledCipherSuites are not used unless explicitly listed in -// Config.CipherSuites. They MUST be at the end of cipherSuitesPreferenceOrder. -var disabledCipherSuites = []uint16{ +// disabledCipherSuites are not used unless explicitly listed in Config.CipherSuites. +var disabledCipherSuites = map[uint16]bool{ // CBC_SHA256 - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, - TLS_RSA_WITH_AES_128_CBC_SHA256, + TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256: true, + TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256: true, + TLS_RSA_WITH_AES_128_CBC_SHA256: true, // RC4 - TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_RC4_128_SHA, - TLS_RSA_WITH_RC4_128_SHA, + TLS_ECDHE_ECDSA_WITH_RC4_128_SHA: true, + TLS_ECDHE_RSA_WITH_RC4_128_SHA: true, + TLS_RSA_WITH_RC4_128_SHA: true, } -var ( - defaultCipherSuitesLen int - defaultCipherSuites []uint16 -) - // rsaKexCiphers contains the ciphers which use RSA based key exchange, -// which we disable by default. +// which we also disable by default unless a GODEBUG is set. var rsaKexCiphers = map[uint16]bool{ TLS_RSA_WITH_RC4_128_SHA: true, TLS_RSA_WITH_3DES_EDE_CBC_SHA: true, @@ -352,17 +347,21 @@ var rsaKexCiphers = map[uint16]bool{ TLS_RSA_WITH_AES_256_GCM_SHA384: true, } -var rsaKEXgodebug = godebug.New("tlsrsakex") +var defaultCipherSuites []uint16 +var defaultCipherSuitesWithRSAKex []uint16 func init() { - rsaKexEnabled := rsaKEXgodebug.Value() == "1" - for _, c := range cipherSuitesPreferenceOrder[:len(cipherSuitesPreferenceOrder)-len(disabledCipherSuites)] { - if !rsaKexEnabled && rsaKexCiphers[c] { + defaultCipherSuites = make([]uint16, 0, len(cipherSuitesPreferenceOrder)) + defaultCipherSuitesWithRSAKex = make([]uint16, 0, len(cipherSuitesPreferenceOrder)) + for _, c := range cipherSuitesPreferenceOrder { + if disabledCipherSuites[c] { continue } - defaultCipherSuites = append(defaultCipherSuites, c) + if !rsaKexCiphers[c] { + defaultCipherSuites = append(defaultCipherSuites, c) + } + defaultCipherSuitesWithRSAKex = append(defaultCipherSuitesWithRSAKex, c) } - defaultCipherSuitesLen = len(defaultCipherSuites) } // defaultCipherSuitesTLS13 is also the preference order, since there are no diff --git a/src/crypto/tls/common.go b/src/crypto/tls/common.go index faa460e7fa..849e8b0a20 100644 --- a/src/crypto/tls/common.go +++ b/src/crypto/tls/common.go @@ -1008,6 +1008,8 @@ func (c *Config) time() time.Time { return t() } +var tlsrsakex = godebug.New("tlsrsakex") + func (c *Config) cipherSuites() []uint16 { if needFIPS() { return fipsCipherSuites(c) @@ -1015,6 +1017,9 @@ func (c *Config) cipherSuites() []uint16 { if c.CipherSuites != nil { return c.CipherSuites } + if tlsrsakex.Value() == "1" { + return defaultCipherSuitesWithRSAKex + } return defaultCipherSuites } @@ -1030,7 +1035,7 @@ var supportedVersions = []uint16{ const roleClient = true const roleServer = false -var tls10godebug = godebug.New("tls10server") +var tls10server = godebug.New("tls10server") func (c *Config) supportedVersions(isClient bool) []uint16 { versions := make([]uint16, 0, len(supportedVersions)) @@ -1039,9 +1044,7 @@ func (c *Config) supportedVersions(isClient bool) []uint16 { continue } if (c == nil || c.MinVersion == 0) && v < VersionTLS12 { - if !isClient && tls10godebug.Value() == "1" { - tls10godebug.IncNonDefault() - } else { + if isClient || tls10server.Value() != "1" { continue } } diff --git a/src/crypto/tls/conn.go b/src/crypto/tls/conn.go index 3e8832f947..0e4669866e 100644 --- a/src/crypto/tls/conn.go +++ b/src/crypto/tls/conn.go @@ -1600,7 +1600,7 @@ func (c *Conn) ConnectionState() ConnectionState { return c.connectionStateLocked() } -var ekmgodebug = godebug.New("tlsunsafeekm") +var tlsunsafeekm = godebug.New("tlsunsafeekm") func (c *Conn) connectionStateLocked() ConnectionState { var state ConnectionState @@ -1626,8 +1626,8 @@ func (c *Conn) connectionStateLocked() ConnectionState { state.ekm = noEKMBecauseRenegotiation } else if c.vers != VersionTLS13 && !c.extMasterSecret { state.ekm = func(label string, context []byte, length int) ([]byte, error) { - if ekmgodebug.Value() == "1" { - ekmgodebug.IncNonDefault() + if tlsunsafeekm.Value() == "1" { + tlsunsafeekm.IncNonDefault() return c.ekm(label, context, length) } return noEKMBecauseNoEMS(label, context, length) diff --git a/src/crypto/tls/handshake_client.go b/src/crypto/tls/handshake_client.go index 4649f36dea..f016e01b4b 100644 --- a/src/crypto/tls/handshake_client.go +++ b/src/crypto/tls/handshake_client.go @@ -526,6 +526,10 @@ func (hs *clientHandshakeState) pickCipherSuite() error { return errors.New("tls: server chose an unconfigured cipher suite") } + if hs.c.config.CipherSuites == nil && rsaKexCiphers[hs.suite.id] { + tlsrsakex.IncNonDefault() + } + hs.c.cipherSuite = hs.suite.id return nil } diff --git a/src/crypto/tls/handshake_server.go b/src/crypto/tls/handshake_server.go index 996b23b1f5..8129e9c616 100644 --- a/src/crypto/tls/handshake_server.go +++ b/src/crypto/tls/handshake_server.go @@ -168,6 +168,10 @@ func (c *Conn) readClientHello(ctx context.Context) (*clientHelloMsg, error) { c.in.version = c.vers c.out.version = c.vers + if c.config.MinVersion == 0 && c.vers < VersionTLS12 { + tls10server.IncNonDefault() + } + return clientHello, nil } @@ -366,6 +370,10 @@ func (hs *serverHandshakeState) pickCipherSuite() error { } c.cipherSuite = hs.suite.id + if c.config.CipherSuites == nil && rsaKexCiphers[hs.suite.id] { + tlsrsakex.IncNonDefault() + } + for _, id := range hs.clientHello.cipherSuites { if id == TLS_FALLBACK_SCSV { // The client is doing a fallback connection. See RFC 7507. diff --git a/src/crypto/tls/tls_test.go b/src/crypto/tls/tls_test.go index 5b09e53524..58369adda7 100644 --- a/src/crypto/tls/tls_test.go +++ b/src/crypto/tls/tls_test.go @@ -1491,16 +1491,8 @@ func TestCipherSuites(t *testing.T) { t.Errorf("cipherSuitesPreferenceOrderNoAES is not the same size as cipherSuitesPreferenceOrder") } - // Check that disabled suites are at the end of the preference lists, and - // that they are marked insecure. - for i, id := range disabledCipherSuites { - offset := len(cipherSuitesPreferenceOrder) - len(disabledCipherSuites) - if cipherSuitesPreferenceOrder[offset+i] != id { - t.Errorf("disabledCipherSuites[%d]: not at the end of cipherSuitesPreferenceOrder", i) - } - if cipherSuitesPreferenceOrderNoAES[offset+i] != id { - t.Errorf("disabledCipherSuites[%d]: not at the end of cipherSuitesPreferenceOrderNoAES", i) - } + // Check that disabled suites are marked insecure. + for id := range disabledCipherSuites { c := CipherSuiteByID(id) if c == nil { t.Errorf("%#04x: no CipherSuite entry", id) From dc5a0d276bbcd6120325c9e0f9c8fd099fa2b8d6 Mon Sep 17 00:00:00 2001 From: Filippo Valsorda Date: Tue, 21 Nov 2023 23:25:51 +0100 Subject: [PATCH 084/313] crypto/tls: mark RSA KEX cipher suites insecure Updates #63413 Change-Id: I31fc2f9728582524cac5d101d0011093dbd05ed3 Reviewed-on: https://go-review.googlesource.com/c/go/+/544336 Auto-Submit: Filippo Valsorda LUCI-TryBot-Result: Go LUCI Reviewed-by: David Chase Reviewed-by: Roland Shoemaker --- src/crypto/tls/cipher_suites.go | 9 ++++----- src/crypto/tls/tls_test.go | 21 +++++++++++++-------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/crypto/tls/cipher_suites.go b/src/crypto/tls/cipher_suites.go index af7c64c4d5..6f5bc37197 100644 --- a/src/crypto/tls/cipher_suites.go +++ b/src/crypto/tls/cipher_suites.go @@ -52,11 +52,6 @@ var ( // and might not match those returned by this function. func CipherSuites() []*CipherSuite { return []*CipherSuite{ - {TLS_RSA_WITH_AES_128_CBC_SHA, "TLS_RSA_WITH_AES_128_CBC_SHA", supportedUpToTLS12, false}, - {TLS_RSA_WITH_AES_256_CBC_SHA, "TLS_RSA_WITH_AES_256_CBC_SHA", supportedUpToTLS12, false}, - {TLS_RSA_WITH_AES_128_GCM_SHA256, "TLS_RSA_WITH_AES_128_GCM_SHA256", supportedOnlyTLS12, false}, - {TLS_RSA_WITH_AES_256_GCM_SHA384, "TLS_RSA_WITH_AES_256_GCM_SHA384", supportedOnlyTLS12, false}, - {TLS_AES_128_GCM_SHA256, "TLS_AES_128_GCM_SHA256", supportedOnlyTLS13, false}, {TLS_AES_256_GCM_SHA384, "TLS_AES_256_GCM_SHA384", supportedOnlyTLS13, false}, {TLS_CHACHA20_POLY1305_SHA256, "TLS_CHACHA20_POLY1305_SHA256", supportedOnlyTLS13, false}, @@ -85,7 +80,11 @@ func InsecureCipherSuites() []*CipherSuite { return []*CipherSuite{ {TLS_RSA_WITH_RC4_128_SHA, "TLS_RSA_WITH_RC4_128_SHA", supportedUpToTLS12, true}, {TLS_RSA_WITH_3DES_EDE_CBC_SHA, "TLS_RSA_WITH_3DES_EDE_CBC_SHA", supportedUpToTLS12, true}, + {TLS_RSA_WITH_AES_128_CBC_SHA, "TLS_RSA_WITH_AES_128_CBC_SHA", supportedUpToTLS12, true}, + {TLS_RSA_WITH_AES_256_CBC_SHA, "TLS_RSA_WITH_AES_256_CBC_SHA", supportedUpToTLS12, true}, {TLS_RSA_WITH_AES_128_CBC_SHA256, "TLS_RSA_WITH_AES_128_CBC_SHA256", supportedOnlyTLS12, true}, + {TLS_RSA_WITH_AES_128_GCM_SHA256, "TLS_RSA_WITH_AES_128_GCM_SHA256", supportedOnlyTLS12, true}, + {TLS_RSA_WITH_AES_256_GCM_SHA384, "TLS_RSA_WITH_AES_256_GCM_SHA384", supportedOnlyTLS12, true}, {TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", supportedUpToTLS12, true}, {TLS_ECDHE_RSA_WITH_RC4_128_SHA, "TLS_ECDHE_RSA_WITH_RC4_128_SHA", supportedUpToTLS12, true}, {TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", supportedUpToTLS12, true}, diff --git a/src/crypto/tls/tls_test.go b/src/crypto/tls/tls_test.go index 58369adda7..42a0272f00 100644 --- a/src/crypto/tls/tls_test.go +++ b/src/crypto/tls/tls_test.go @@ -1490,16 +1490,21 @@ func TestCipherSuites(t *testing.T) { if len(cipherSuitesPreferenceOrderNoAES) != len(cipherSuitesPreferenceOrder) { t.Errorf("cipherSuitesPreferenceOrderNoAES is not the same size as cipherSuitesPreferenceOrder") } + if len(defaultCipherSuites) >= len(defaultCipherSuitesWithRSAKex) { + t.Errorf("defaultCipherSuitesWithRSAKex should be longer than defaultCipherSuites") + } // Check that disabled suites are marked insecure. - for id := range disabledCipherSuites { - c := CipherSuiteByID(id) - if c == nil { - t.Errorf("%#04x: no CipherSuite entry", id) - continue - } - if !c.Insecure { - t.Errorf("%#04x: disabled by default but not marked insecure", id) + for _, badSuites := range []map[uint16]bool{disabledCipherSuites, rsaKexCiphers} { + for id := range badSuites { + c := CipherSuiteByID(id) + if c == nil { + t.Errorf("%#04x: no CipherSuite entry", id) + continue + } + if !c.Insecure { + t.Errorf("%#04x: disabled by default but not marked insecure", id) + } } } From 9840d38cdb2cc550b437b3c34b6b2e9f107bdc91 Mon Sep 17 00:00:00 2001 From: Meng Zhuo Date: Sun, 12 Nov 2023 17:05:57 +0800 Subject: [PATCH 085/313] cmd/internal/obj/riscv: add support of PCALIGN directive Add support for PCALIGN directive on riscv. This directive can be used within Go asm to align instruction by padding NOP directives. This patch also adds a test to verify the correctness of the PCALIGN directive. Original credit by Cooper Qu (Alibaba) https://gitee.com/xuantie_riscv/xuantie-patch Change-Id: I8b6524a2bf81a1baf7c9d04b7da2db6c1a7b428f Reviewed-on: https://go-review.googlesource.com/c/go/+/541740 Run-TryBot: M Zhuo Reviewed-by: Cherry Mui Reviewed-by: Wang Yaduo Reviewed-by: David Chase Reviewed-by: Mark Ryan TryBot-Result: Gopher Robot --- src/cmd/internal/obj/riscv/asm_test.go | 32 ++++++++++++++++++++++++++ src/cmd/internal/obj/riscv/obj.go | 32 ++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/src/cmd/internal/obj/riscv/asm_test.go b/src/cmd/internal/obj/riscv/asm_test.go index afe0525532..96ea230841 100644 --- a/src/cmd/internal/obj/riscv/asm_test.go +++ b/src/cmd/internal/obj/riscv/asm_test.go @@ -9,8 +9,10 @@ import ( "fmt" "internal/testenv" "os" + "os/exec" "path/filepath" "runtime" + "strings" "testing" ) @@ -277,3 +279,33 @@ func TestBranch(t *testing.T) { t.Errorf("Branch test failed: %v\n%s", err, out) } } + +func TestPCAlign(t *testing.T) { + dir := t.TempDir() + tmpfile := filepath.Join(dir, "x.s") + asm := ` +TEXT _stub(SB),$0-0 + FENCE + PCALIGN $8 + FENCE + RET +` + if err := os.WriteFile(tmpfile, []byte(asm), 0644); err != nil { + t.Fatal(err) + } + cmd := exec.Command(testenv.GoToolPath(t), "tool", "asm", "-o", filepath.Join(dir, "x.o"), "-S", tmpfile) + cmd.Env = append(os.Environ(), "GOARCH=riscv64", "GOOS=linux") + out, err := cmd.CombinedOutput() + if err != nil { + t.Errorf("Failed to assemble: %v\n%s", err, out) + } + // The expected instruction sequence after alignment: + // FENCE + // NOP + // FENCE + // RET + want := "0f 00 f0 0f 13 00 00 00 0f 00 f0 0f 67 80 00 00" + if !strings.Contains(string(out), want) { + t.Errorf("PCALIGN test failed - got %s\nwant %s", out, want) + } +} diff --git a/src/cmd/internal/obj/riscv/obj.go b/src/cmd/internal/obj/riscv/obj.go index 93bda45096..11d6c202ea 100644 --- a/src/cmd/internal/obj/riscv/obj.go +++ b/src/cmd/internal/obj/riscv/obj.go @@ -308,6 +308,12 @@ func setPCs(p *obj.Prog, pc int64) int64 { for _, ins := range instructionsForProg(p) { pc += int64(ins.length()) } + + if p.As == obj.APCALIGN { + alignedValue := p.From.Offset + v := pcAlignPadLength(pc, alignedValue) + pc += int64(v) + } } return pc } @@ -733,6 +739,16 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) { p.From = obj.Addr{Type: obj.TYPE_CONST, Offset: high, Sym: cursym} p.Link.To.Offset = low } + + case obj.APCALIGN: + alignedValue := p.From.Offset + if (alignedValue&(alignedValue-1) != 0) || 4 > alignedValue || alignedValue > 2048 { + ctxt.Diag("alignment value of an instruction must be a power of two and in the range [4, 2048], got %d\n", alignedValue) + } + // Update the current text symbol alignment value. + if int32(alignedValue) > cursym.Func().Align { + cursym.Func().Align = int32(alignedValue) + } } } @@ -744,6 +760,10 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) { } } +func pcAlignPadLength(pc int64, alignedValue int64) int { + return int(-pc & (alignedValue - 1)) +} + func stacksplit(ctxt *obj.Link, p *obj.Prog, cursym *obj.LSym, newprog obj.ProgAlloc, framesize int64) *obj.Prog { // Leaf function with no frame is effectively NOSPLIT. if framesize == 0 { @@ -1708,6 +1728,7 @@ var encodings = [ALAST & obj.AMask]encoding{ obj.ANOP: pseudoOpEncoding, obj.ADUFFZERO: pseudoOpEncoding, obj.ADUFFCOPY: pseudoOpEncoding, + obj.APCALIGN: pseudoOpEncoding, } // encodingForAs returns the encoding for an obj.As. @@ -2425,6 +2446,17 @@ func assemble(ctxt *obj.Link, cursym *obj.LSym, newprog obj.ProgAlloc) { rel.Sym = addr.Sym rel.Add = addr.Offset rel.Type = rt + + case obj.APCALIGN: + alignedValue := p.From.Offset + v := pcAlignPadLength(p.Pc, alignedValue) + offset := p.Pc + for ; v >= 4; v -= 4 { + // NOP + cursym.WriteBytes(ctxt, offset, []byte{0x13, 0, 0, 0}) + offset += 4 + } + continue } offset := p.Pc From 29ca9cc458701a5f0381e9c82229f2a20b66644d Mon Sep 17 00:00:00 2001 From: Meng Zhuo Date: Sun, 12 Nov 2023 17:13:29 +0800 Subject: [PATCH 086/313] internal/bytealg: optimize Count with PCALIGN in riscv64 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For #63678 Benchmark on Milk-V Mars CM eMMC (Starfive/JH7110 SoC) goos: linux goarch: riscv64 pkg: bytes │ /root/bytes.old.bench │ /root/bytes.pc16.bench │ │ sec/op │ sec/op vs base │ Count/10 223.9n ± 1% 220.8n ± 1% -1.36% (p=0.001 n=10) Count/32 571.6n ± 0% 571.3n ± 0% ~ (p=0.054 n=10) Count/4K 38.56µ ± 0% 38.55µ ± 0% -0.01% (p=0.010 n=10) Count/4M 40.13m ± 0% 39.21m ± 0% -2.28% (p=0.000 n=10) Count/64M 627.5m ± 0% 627.4m ± 0% -0.01% (p=0.019 n=10) CountEasy/10 101.3n ± 0% 101.3n ± 0% ~ (p=1.000 n=10) ¹ CountEasy/32 139.3n ± 0% 139.3n ± 0% ~ (p=1.000 n=10) ¹ CountEasy/4K 5.565µ ± 0% 5.564µ ± 0% -0.02% (p=0.001 n=10) CountEasy/4M 5.619m ± 0% 5.619m ± 0% ~ (p=0.190 n=10) CountEasy/64M 89.94m ± 0% 89.93m ± 0% ~ (p=0.436 n=10) CountSingle/10 53.80n ± 0% 46.06n ± 0% -14.39% (p=0.000 n=10) CountSingle/32 104.30n ± 0% 79.64n ± 0% -23.64% (p=0.000 n=10) CountSingle/4K 10.413µ ± 0% 7.247µ ± 0% -30.40% (p=0.000 n=10) CountSingle/4M 11.603m ± 0% 8.388m ± 0% -27.71% (p=0.000 n=10) CountSingle/64M 230.9m ± 0% 172.3m ± 0% -25.40% (p=0.000 n=10) CountHard1 9.981m ± 0% 9.981m ± 0% ~ (p=0.810 n=10) CountHard2 9.981m ± 0% 9.981m ± 0% ~ (p=0.315 n=10) CountHard3 9.981m ± 0% 9.981m ± 0% ~ (p=0.159 n=10) geomean 144.6µ 133.5µ -7.70% ¹ all samples are equal │ /root/bytes.old.bench │ /root/bytes.pc16.bench │ │ B/s │ B/s vs base │ Count/10 42.60Mi ± 1% 43.19Mi ± 1% +1.39% (p=0.001 n=10) Count/32 53.38Mi ± 0% 53.42Mi ± 0% +0.06% (p=0.049 n=10) Count/4K 101.3Mi ± 0% 101.3Mi ± 0% ~ (p=0.077 n=10) Count/4M 99.68Mi ± 0% 102.01Mi ± 0% +2.34% (p=0.000 n=10) Count/64M 102.0Mi ± 0% 102.0Mi ± 0% ~ (p=0.076 n=10) CountEasy/10 94.18Mi ± 0% 94.18Mi ± 0% ~ (p=0.054 n=10) CountEasy/32 219.1Mi ± 0% 219.1Mi ± 0% +0.01% (p=0.016 n=10) CountEasy/4K 702.0Mi ± 0% 702.0Mi ± 0% +0.00% (p=0.000 n=10) CountEasy/4M 711.9Mi ± 0% 711.9Mi ± 0% ~ (p=0.133 n=10) CountEasy/64M 711.6Mi ± 0% 711.7Mi ± 0% ~ (p=0.447 n=10) CountSingle/10 177.2Mi ± 0% 207.0Mi ± 0% +16.81% (p=0.000 n=10) CountSingle/32 292.7Mi ± 0% 383.2Mi ± 0% +30.91% (p=0.000 n=10) CountSingle/4K 375.1Mi ± 0% 539.0Mi ± 0% +43.70% (p=0.000 n=10) CountSingle/4M 344.7Mi ± 0% 476.9Mi ± 0% +38.33% (p=0.000 n=10) CountSingle/64M 277.2Mi ± 0% 371.5Mi ± 0% +34.05% (p=0.000 n=10) geomean 199.7Mi 219.8Mi +10.10% Change-Id: I1abf6b220b9802028f8ad5eebc8d3b7cfa3e89ea Reviewed-on: https://go-review.googlesource.com/c/go/+/541756 Reviewed-by: David Chase Reviewed-by: Cherry Mui Reviewed-by: Joel Sing Run-TryBot: M Zhuo TryBot-Result: Gopher Robot Reviewed-by: Wang Yaduo Reviewed-by: Mark Ryan --- src/internal/bytealg/count_riscv64.s | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/internal/bytealg/count_riscv64.s b/src/internal/bytealg/count_riscv64.s index d123cbd7c6..3f255cd263 100644 --- a/src/internal/bytealg/count_riscv64.s +++ b/src/internal/bytealg/count_riscv64.s @@ -14,6 +14,7 @@ TEXT ·Count(SB),NOSPLIT,$0-40 MOV ZERO, X14 // count ADD X10, X11 // end + PCALIGN $16 loop: BEQ X10, X11, done MOVBU (X10), X15 @@ -34,6 +35,7 @@ TEXT ·CountString(SB),NOSPLIT,$0-32 MOV ZERO, X14 // count ADD X10, X11 // end + PCALIGN $16 loop: BEQ X10, X11, done MOVBU (X10), X15 From 5f7a40856372142372d3b67c9dd737373932f088 Mon Sep 17 00:00:00 2001 From: fanzha02 Date: Tue, 21 Nov 2023 06:52:54 +0000 Subject: [PATCH 087/313] runtime: change the name of variables in asan-related assembly functions Variables in functions implemented in assembly should have the same names as when they were defined. The names of some variables in asan-related assembly functions do not follow the above rule, which will cause the runtime test to fail. This CL fixes this issue. Updates #64257 Change-Id: I261f4db807d25e460513ef1c92cd1b707cdd1a16 Reviewed-on: https://go-review.googlesource.com/c/go/+/543837 Run-TryBot: Fannie Zhang TryBot-Result: Gopher Robot Reviewed-by: Cherry Mui Reviewed-by: Bryan Mills --- src/runtime/asan_amd64.s | 10 +++++----- src/runtime/asan_arm64.s | 10 +++++----- src/runtime/asan_loong64.s | 10 +++++----- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/runtime/asan_amd64.s b/src/runtime/asan_amd64.s index ac09ec1105..195faf4e6d 100644 --- a/src/runtime/asan_amd64.s +++ b/src/runtime/asan_amd64.s @@ -28,7 +28,7 @@ // func runtime·doasanread(addr unsafe.Pointer, sz, sp, pc uintptr) TEXT runtime·doasanread(SB), NOSPLIT, $0-32 MOVQ addr+0(FP), RARG0 - MOVQ size+8(FP), RARG1 + MOVQ sz+8(FP), RARG1 MOVQ sp+16(FP), RARG2 MOVQ pc+24(FP), RARG3 // void __asan_read_go(void *addr, uintptr_t sz, void *sp, void *pc); @@ -38,7 +38,7 @@ TEXT runtime·doasanread(SB), NOSPLIT, $0-32 // func runtime·doasanwrite(addr unsafe.Pointer, sz, sp, pc uintptr) TEXT runtime·doasanwrite(SB), NOSPLIT, $0-32 MOVQ addr+0(FP), RARG0 - MOVQ size+8(FP), RARG1 + MOVQ sz+8(FP), RARG1 MOVQ sp+16(FP), RARG2 MOVQ pc+24(FP), RARG3 // void __asan_write_go(void *addr, uintptr_t sz, void *sp, void *pc); @@ -48,7 +48,7 @@ TEXT runtime·doasanwrite(SB), NOSPLIT, $0-32 // func runtime·asanunpoison(addr unsafe.Pointer, sz uintptr) TEXT runtime·asanunpoison(SB), NOSPLIT, $0-16 MOVQ addr+0(FP), RARG0 - MOVQ size+8(FP), RARG1 + MOVQ sz+8(FP), RARG1 // void __asan_unpoison_go(void *addr, uintptr_t sz); MOVQ $__asan_unpoison_go(SB), AX JMP asancall<>(SB) @@ -56,7 +56,7 @@ TEXT runtime·asanunpoison(SB), NOSPLIT, $0-16 // func runtime·asanpoison(addr unsafe.Pointer, sz uintptr) TEXT runtime·asanpoison(SB), NOSPLIT, $0-16 MOVQ addr+0(FP), RARG0 - MOVQ size+8(FP), RARG1 + MOVQ sz+8(FP), RARG1 // void __asan_poison_go(void *addr, uintptr_t sz); MOVQ $__asan_poison_go(SB), AX JMP asancall<>(SB) @@ -64,7 +64,7 @@ TEXT runtime·asanpoison(SB), NOSPLIT, $0-16 // func runtime·asanregisterglobals(addr unsafe.Pointer, n uintptr) TEXT runtime·asanregisterglobals(SB), NOSPLIT, $0-16 MOVQ addr+0(FP), RARG0 - MOVQ size+8(FP), RARG1 + MOVQ n+8(FP), RARG1 // void __asan_register_globals_go(void *addr, uintptr_t n); MOVQ $__asan_register_globals_go(SB), AX JMP asancall<>(SB) diff --git a/src/runtime/asan_arm64.s b/src/runtime/asan_arm64.s index 697c98206e..dfa3f81bf2 100644 --- a/src/runtime/asan_arm64.s +++ b/src/runtime/asan_arm64.s @@ -17,7 +17,7 @@ // func runtime·doasanread(addr unsafe.Pointer, sz, sp, pc uintptr) TEXT runtime·doasanread(SB), NOSPLIT, $0-32 MOVD addr+0(FP), RARG0 - MOVD size+8(FP), RARG1 + MOVD sz+8(FP), RARG1 MOVD sp+16(FP), RARG2 MOVD pc+24(FP), RARG3 // void __asan_read_go(void *addr, uintptr_t sz, void *sp, void *pc); @@ -27,7 +27,7 @@ TEXT runtime·doasanread(SB), NOSPLIT, $0-32 // func runtime·doasanwrite(addr unsafe.Pointer, sz, sp, pc uintptr) TEXT runtime·doasanwrite(SB), NOSPLIT, $0-32 MOVD addr+0(FP), RARG0 - MOVD size+8(FP), RARG1 + MOVD sz+8(FP), RARG1 MOVD sp+16(FP), RARG2 MOVD pc+24(FP), RARG3 // void __asan_write_go(void *addr, uintptr_t sz, void *sp, void *pc); @@ -37,7 +37,7 @@ TEXT runtime·doasanwrite(SB), NOSPLIT, $0-32 // func runtime·asanunpoison(addr unsafe.Pointer, sz uintptr) TEXT runtime·asanunpoison(SB), NOSPLIT, $0-16 MOVD addr+0(FP), RARG0 - MOVD size+8(FP), RARG1 + MOVD sz+8(FP), RARG1 // void __asan_unpoison_go(void *addr, uintptr_t sz); MOVD $__asan_unpoison_go(SB), FARG JMP asancall<>(SB) @@ -45,7 +45,7 @@ TEXT runtime·asanunpoison(SB), NOSPLIT, $0-16 // func runtime·asanpoison(addr unsafe.Pointer, sz uintptr) TEXT runtime·asanpoison(SB), NOSPLIT, $0-16 MOVD addr+0(FP), RARG0 - MOVD size+8(FP), RARG1 + MOVD sz+8(FP), RARG1 // void __asan_poison_go(void *addr, uintptr_t sz); MOVD $__asan_poison_go(SB), FARG JMP asancall<>(SB) @@ -53,7 +53,7 @@ TEXT runtime·asanpoison(SB), NOSPLIT, $0-16 // func runtime·asanregisterglobals(addr unsafe.Pointer, n uintptr) TEXT runtime·asanregisterglobals(SB), NOSPLIT, $0-16 MOVD addr+0(FP), RARG0 - MOVD size+8(FP), RARG1 + MOVD n+8(FP), RARG1 // void __asan_register_globals_go(void *addr, uintptr_t n); MOVD $__asan_register_globals_go(SB), FARG JMP asancall<>(SB) diff --git a/src/runtime/asan_loong64.s b/src/runtime/asan_loong64.s index 70386fcb6e..0034a31687 100644 --- a/src/runtime/asan_loong64.s +++ b/src/runtime/asan_loong64.s @@ -17,7 +17,7 @@ // func runtime·doasanread(addr unsafe.Pointer, sz, sp, pc uintptr) TEXT runtime·doasanread(SB), NOSPLIT, $0-32 MOVV addr+0(FP), RARG0 - MOVV size+8(FP), RARG1 + MOVV sz+8(FP), RARG1 MOVV sp+16(FP), RARG2 MOVV pc+24(FP), RARG3 // void __asan_read_go(void *addr, uintptr_t sz, void *sp, void *pc); @@ -27,7 +27,7 @@ TEXT runtime·doasanread(SB), NOSPLIT, $0-32 // func runtime·doasanwrite(addr unsafe.Pointer, sz, sp, pc uintptr) TEXT runtime·doasanwrite(SB), NOSPLIT, $0-32 MOVV addr+0(FP), RARG0 - MOVV size+8(FP), RARG1 + MOVV sz+8(FP), RARG1 MOVV sp+16(FP), RARG2 MOVV pc+24(FP), RARG3 // void __asan_write_go(void *addr, uintptr_t sz, void *sp, void *pc); @@ -37,7 +37,7 @@ TEXT runtime·doasanwrite(SB), NOSPLIT, $0-32 // func runtime·asanunpoison(addr unsafe.Pointer, sz uintptr) TEXT runtime·asanunpoison(SB), NOSPLIT, $0-16 MOVV addr+0(FP), RARG0 - MOVV size+8(FP), RARG1 + MOVV sz+8(FP), RARG1 // void __asan_unpoison_go(void *addr, uintptr_t sz); MOVV $__asan_unpoison_go(SB), FARG JMP asancall<>(SB) @@ -45,7 +45,7 @@ TEXT runtime·asanunpoison(SB), NOSPLIT, $0-16 // func runtime·asanpoison(addr unsafe.Pointer, sz uintptr) TEXT runtime·asanpoison(SB), NOSPLIT, $0-16 MOVV addr+0(FP), RARG0 - MOVV size+8(FP), RARG1 + MOVV sz+8(FP), RARG1 // void __asan_poison_go(void *addr, uintptr_t sz); MOVV $__asan_poison_go(SB), FARG JMP asancall<>(SB) @@ -53,7 +53,7 @@ TEXT runtime·asanpoison(SB), NOSPLIT, $0-16 // func runtime·asanregisterglobals(addr unsafe.Pointer, n uintptr) TEXT runtime·asanregisterglobals(SB), NOSPLIT, $0-16 MOVV addr+0(FP), RARG0 - MOVV size+8(FP), RARG1 + MOVV n+8(FP), RARG1 // void __asan_register_globals_go(void *addr, uintptr_t n); MOVV $__asan_register_globals_go(SB), FARG JMP asancall<>(SB) From b06f59e75c5774171759fb70729b14c7f40c285c Mon Sep 17 00:00:00 2001 From: Srinivas Pokala Date: Mon, 16 Oct 2023 11:18:50 +0200 Subject: [PATCH 088/313] cmd/asm: fix the KMCTR instruction encoding and argument passing KMCTR encoding arguments incorrect way, which leading illegal instruction wherver we call KMCTR instruction.IBM z13 machine test's TestAESGCM test using gcmASM implementation, which uses KMCTR instruction to encrypt using AES in counter mode and the KIMD instruction for GHASH. z14+ machines onwards uses gcmKMA implementation for the same. Fixes #63387 Change-Id: I86aeb99573c3f636a71908c99e06a9530655aa5d Reviewed-on: https://go-review.googlesource.com/c/go/+/535675 Reviewed-by: Vishwanatha HD Reviewed-by: Keith Randall Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall --- src/cmd/asm/internal/asm/testdata/s390x.s | 6 +++--- src/cmd/internal/obj/s390x/asmz.go | 7 ++----- src/crypto/aes/asm_s390x.s | 4 ++-- src/internal/cpu/cpu_s390x.s | 4 ++-- 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/cmd/asm/internal/asm/testdata/s390x.s b/src/cmd/asm/internal/asm/testdata/s390x.s index 82aa445356..977190678f 100644 --- a/src/cmd/asm/internal/asm/testdata/s390x.s +++ b/src/cmd/asm/internal/asm/testdata/s390x.s @@ -419,9 +419,9 @@ TEXT main·foo(SB),DUPOK|NOSPLIT,$16-0 // TEXT main.foo(SB), DUPOK|NOSPLIT, $16- KMC R2, R6 // b92f0026 KLMD R2, R8 // b93f0028 KIMD R0, R4 // b93e0004 - KDSA R0, R8 // b93a0008 - KMA R6, R2, R4 // b9296024 - KMCTR R6, R2, R4 // b92d6024 + KDSA R0, R8 // b93a0008 + KMA R2, R6, R4 // b9296024 + KMCTR R2, R6, R4 // b92d6024 // vector add and sub instructions VAB V3, V4, V4 // e743400000f3 diff --git a/src/cmd/internal/obj/s390x/asmz.go b/src/cmd/internal/obj/s390x/asmz.go index bf6d48e305..7b560e0053 100644 --- a/src/cmd/internal/obj/s390x/asmz.go +++ b/src/cmd/internal/obj/s390x/asmz.go @@ -4434,7 +4434,7 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { } zRRE(op_KDSA, uint32(p.From.Reg), uint32(p.To.Reg), asm) - case 126: // KMA and KMCTR - CIPHER MESSAGE WITH AUTHENTICATION; CIPHER MESSAGE WITH + case 126: // KMA and KMCTR - CIPHER MESSAGE WITH AUTHENTICATION; CIPHER MESSAGE WITH COUNTER var opcode uint32 switch p.As { default: @@ -4458,16 +4458,13 @@ func (c *ctxtz) asmout(p *obj.Prog, asm *[]byte) { if p.Reg&1 != 0 { c.ctxt.Diag("third argument must be even register in %v", p) } - if p.Reg == p.To.Reg || p.Reg == p.From.Reg { - c.ctxt.Diag("third argument must not be input or output argument registers in %v", p) - } if p.As == AKMA { opcode = op_KMA } else if p.As == AKMCTR { opcode = op_KMCTR } } - zRRF(opcode, uint32(p.From.Reg), 0, uint32(p.Reg), uint32(p.To.Reg), asm) + zRRF(opcode, uint32(p.Reg), 0, uint32(p.From.Reg), uint32(p.To.Reg), asm) } } diff --git a/src/crypto/aes/asm_s390x.s b/src/crypto/aes/asm_s390x.s index efcce3a0d9..a233714fb8 100644 --- a/src/crypto/aes/asm_s390x.s +++ b/src/crypto/aes/asm_s390x.s @@ -127,7 +127,7 @@ crypt: MOVD src_base+56(FP), R6 // src MOVD src_len+64(FP), R7 // len loop: - KMCTR R6, R2, R4 // cipher message with counter (KMCTR) + KMCTR R4, R2, R6 // cipher message with counter (KMCTR) BVS loop // branch back if interrupted RET crash: @@ -180,7 +180,7 @@ TEXT ·kmaGCM(SB),NOSPLIT,$112-120 MVC $8, 24(R8), 104(R1) kma: - KMA R6, R2, R4 // Cipher Message with Authentication + KMA R2, R6, R4 // Cipher Message with Authentication BVS kma MOVD tag+104(FP), R2 diff --git a/src/internal/cpu/cpu_s390x.s b/src/internal/cpu/cpu_s390x.s index c55a4c725d..4ffbbde38d 100644 --- a/src/internal/cpu/cpu_s390x.s +++ b/src/internal/cpu/cpu_s390x.s @@ -30,14 +30,14 @@ TEXT ·kmcQuery(SB), NOSPLIT|NOFRAME, $0-16 TEXT ·kmctrQuery(SB), NOSPLIT|NOFRAME, $0-16 MOVD $0, R0 // set function code to 0 (KMCTR-Query) MOVD $ret+0(FP), R1 // address of 16-byte return value - KMCTR R6, R2, R4 // cipher message with counter (KMCTR) + KMCTR R2, R4, R4 // cipher message with counter (KMCTR) RET // func kmaQuery() queryResult TEXT ·kmaQuery(SB), NOSPLIT|NOFRAME, $0-16 MOVD $0, R0 // set function code to 0 (KMA-Query) MOVD $ret+0(FP), R1 // address of 16-byte return value - KMA R6, R2, R4 // cipher message with authentication (KMA) + KMA R2, R6, R4 // cipher message with authentication (KMA) RET // func kimdQuery() queryResult From 2c424edd91a07ef200ff639c205ddf6f51a17351 Mon Sep 17 00:00:00 2001 From: qiulaidongfeng <2645477756@qq.com> Date: Tue, 21 Nov 2023 22:57:59 +0000 Subject: [PATCH 089/313] internal/abi, runtime, reflect, cmd: merge maxZero const into internal/abi For #59670 Change-Id: If38a74ad067a3ea3ff551c0c25c8ef41abec114b GitHub-Last-Rev: fb1f2f3c9f320017627bc3342b061e1e7f6f7fad GitHub-Pull-Request: golang/go#64268 Reviewed-on: https://go-review.googlesource.com/c/go/+/543655 Run-TryBot: qiulaidongfeng <2645477756@qq.com> TryBot-Result: Gopher Robot Reviewed-by: Matthew Dempsky Reviewed-by: Keith Randall Reviewed-by: Keith Randall --- src/cmd/compile/internal/walk/assign.go | 3 ++- src/cmd/compile/internal/walk/expr.go | 3 ++- src/cmd/compile/internal/walk/walk.go | 1 - src/internal/abi/map.go | 3 +++ src/reflect/value.go | 11 ++++------- src/runtime/map.go | 3 +-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/cmd/compile/internal/walk/assign.go b/src/cmd/compile/internal/walk/assign.go index afd1a326d3..fc3b858a80 100644 --- a/src/cmd/compile/internal/walk/assign.go +++ b/src/cmd/compile/internal/walk/assign.go @@ -6,6 +6,7 @@ package walk import ( "go/constant" + "internal/abi" "cmd/compile/internal/base" "cmd/compile/internal/ir" @@ -168,7 +169,7 @@ func walkAssignMapRead(init *ir.Nodes, n *ir.AssignListStmt) ir.Node { a := n.Lhs[0] var call *ir.CallExpr - if w := t.Elem().Size(); w <= zeroValSize { + if w := t.Elem().Size(); w <= abi.ZeroValSize { fn := mapfn(mapaccess2[fast], t, false) call = mkcall1(fn, fn.Type().ResultsTuple(), init, reflectdata.IndexMapRType(base.Pos, r), r.X, key) } else { diff --git a/src/cmd/compile/internal/walk/expr.go b/src/cmd/compile/internal/walk/expr.go index 64d20b555e..268f793dc9 100644 --- a/src/cmd/compile/internal/walk/expr.go +++ b/src/cmd/compile/internal/walk/expr.go @@ -7,6 +7,7 @@ package walk import ( "fmt" "go/constant" + "internal/abi" "internal/buildcfg" "strings" @@ -825,7 +826,7 @@ func walkIndexMap(n *ir.IndexExpr, init *ir.Nodes) ir.Node { switch { case n.Assigned: mapFn = mapfn(mapassign[fast], t, false) - case t.Elem().Size() > zeroValSize: + case t.Elem().Size() > abi.ZeroValSize: args = append(args, reflectdata.ZeroAddr(t.Elem().Size())) mapFn = mapfn("mapaccess1_fat", t, true) default: diff --git a/src/cmd/compile/internal/walk/walk.go b/src/cmd/compile/internal/walk/walk.go index 8be5804616..001edcc332 100644 --- a/src/cmd/compile/internal/walk/walk.go +++ b/src/cmd/compile/internal/walk/walk.go @@ -18,7 +18,6 @@ import ( // The constant is known to runtime. const tmpstringbufsize = 32 -const zeroValSize = 1024 // must match value of runtime/map.go:maxZero func Walk(fn *ir.Func) { ir.CurFunc = fn diff --git a/src/internal/abi/map.go b/src/internal/abi/map.go index e5b0a0bb6f..ad054e7d77 100644 --- a/src/internal/abi/map.go +++ b/src/internal/abi/map.go @@ -12,3 +12,6 @@ const ( MapMaxKeyBytes = 128 // Must fit in a uint8. MapMaxElemBytes = 128 // Must fit in a uint8. ) + +// ZeroValSize is the size in bytes of runtime.zeroVal. +const ZeroValSize = 1024 diff --git a/src/reflect/value.go b/src/reflect/value.go index 068bac0050..06f22f7428 100644 --- a/src/reflect/value.go +++ b/src/reflect/value.go @@ -1603,7 +1603,7 @@ func (v Value) IsZero() bool { } typ := (*abi.ArrayType)(unsafe.Pointer(v.typ())) // If the type is comparable, then compare directly with zero. - if typ.Equal != nil && typ.Size() <= maxZero { + if typ.Equal != nil && typ.Size() <= abi.ZeroValSize { // v.ptr doesn't escape, as Equal functions are compiler generated // and never escape. The escape analysis doesn't know, as it is a // function pointer call. @@ -1631,7 +1631,7 @@ func (v Value) IsZero() bool { } typ := (*abi.StructType)(unsafe.Pointer(v.typ())) // If the type is comparable, then compare directly with zero. - if typ.Equal != nil && typ.Size() <= maxZero { + if typ.Equal != nil && typ.Size() <= abi.ZeroValSize { // See noescape justification above. return typ.Equal(noescape(v.ptr), unsafe.Pointer(&zeroVal[0])) } @@ -3277,7 +3277,7 @@ func Zero(typ Type) Value { fl := flag(t.Kind()) if t.IfaceIndir() { var p unsafe.Pointer - if t.Size() <= maxZero { + if t.Size() <= abi.ZeroValSize { p = unsafe.Pointer(&zeroVal[0]) } else { p = unsafe_New(t) @@ -3287,11 +3287,8 @@ func Zero(typ Type) Value { return Value{t, nil, fl} } -// must match declarations in runtime/map.go. -const maxZero = 1024 - //go:linkname zeroVal runtime.zeroVal -var zeroVal [maxZero]byte +var zeroVal [abi.ZeroValSize]byte // New returns a Value representing a pointer to a new zero value // for the specified type. That is, the returned Value's Type is PointerTo(typ). diff --git a/src/runtime/map.go b/src/runtime/map.go index 6f5623b102..7048949073 100644 --- a/src/runtime/map.go +++ b/src/runtime/map.go @@ -1436,8 +1436,7 @@ func reflectlite_maplen(h *hmap) int { return h.count } -const maxZero = 1024 // must match value in reflect/value.go:maxZero cmd/compile/internal/gc/walk.go:zeroValSize -var zeroVal [maxZero]byte +var zeroVal [abi.ZeroValSize]byte // mapinitnoop is a no-op function known the Go linker; if a given global // map (of the right size) is determined to be dead, the linker will From 5abae02d273d586b13975bca0e5fda67f4f51e2f Mon Sep 17 00:00:00 2001 From: Mauri de Souza Meneguzzo Date: Tue, 21 Nov 2023 19:34:36 +0000 Subject: [PATCH 090/313] runtime/internal/atomic: deduplicate And/Or code on wasm When I initially added the wasm code for these ops I did not saw that wasm actually has the Cas operations implemented, although they are merely pointer assignments since wasm is single threaded. Now with a generic implementation for And/Or we can add wasm to the build tags. For #61395 Change-Id: I997dc90477c772882d6703df1b795dfc0d90a699 GitHub-Last-Rev: 92736a6e34104a9d234c791673fe0bb79fc97b0b GitHub-Pull-Request: golang/go#64300 Reviewed-on: https://go-review.googlesource.com/c/go/+/544116 Run-TryBot: Mauri de Souza Meneguzzo Reviewed-by: Keith Randall Reviewed-by: Dmitri Shuralyov Auto-Submit: Dmitri Shuralyov Reviewed-by: Keith Randall TryBot-Result: Gopher Robot --- .../internal/atomic/atomic_andor_generic.go | 2 +- src/runtime/internal/atomic/atomic_wasm.go | 48 ------------------- 2 files changed, 1 insertion(+), 49 deletions(-) diff --git a/src/runtime/internal/atomic/atomic_andor_generic.go b/src/runtime/internal/atomic/atomic_andor_generic.go index 57f80ff871..00b402681e 100644 --- a/src/runtime/internal/atomic/atomic_andor_generic.go +++ b/src/runtime/internal/atomic/atomic_andor_generic.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build arm || s390x || loong64 || mips || mipsle || mips64 || mips64le +//go:build arm || s390x || loong64 || mips || mipsle || mips64 || mips64le || wasm package atomic diff --git a/src/runtime/internal/atomic/atomic_wasm.go b/src/runtime/internal/atomic/atomic_wasm.go index d1ca994205..835fc43ccf 100644 --- a/src/runtime/internal/atomic/atomic_wasm.go +++ b/src/runtime/internal/atomic/atomic_wasm.go @@ -339,51 +339,3 @@ func Xaddint64(ptr *int64, delta int64) int64 { *ptr = new return new } - -//go:nosplit -//go:noinline -func And32(ptr *uint32, val uint32) uint32 { - old := *ptr - *ptr = old & val - return old -} - -//go:nosplit -//go:noinline -func And64(ptr *uint64, val uint64) uint64 { - old := *ptr - *ptr = old & val - return old -} - -//go:nosplit -//go:noinline -func Anduintptr(ptr *uintptr, val uintptr) uintptr { - old := *ptr - *ptr = old & val - return old -} - -//go:nosplit -//go:noinline -func Or32(ptr *uint32, val uint32) uint32 { - old := *ptr - *ptr = old | val - return old -} - -//go:nosplit -//go:noinline -func Or64(ptr *uint64, val uint64) uint64 { - old := *ptr - *ptr = old | val - return old -} - -//go:nosplit -//go:noinline -func Oruintptr(ptr *uintptr, val uintptr) uintptr { - old := *ptr - *ptr = old | val - return old -} From 37971b31dfde1b9c40f6d42484e528c17450a9ae Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Tue, 21 Nov 2023 14:44:41 -0500 Subject: [PATCH 091/313] cmd/link/internal/ld: fix DWARF type DIE "go kind" bug for synthetic ptr types The code path in linker DWARF type generation that synthesizes pointer type DIEs needed for other synthesized types wasn't properly setting the DW_AT_go_kind attribute for the new pointer types. Fixes #64231. Change-Id: I70c338d2b33ae3b93a4c6f201e5836d91d368086 Reviewed-on: https://go-review.googlesource.com/c/go/+/544315 Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI --- src/cmd/link/internal/dwtest/dwtest.go | 2 +- src/cmd/link/internal/ld/dwarf.go | 1 + src/cmd/link/internal/ld/dwarf_test.go | 71 +++++++++++++++++++++----- 3 files changed, 61 insertions(+), 13 deletions(-) diff --git a/src/cmd/link/internal/dwtest/dwtest.go b/src/cmd/link/internal/dwtest/dwtest.go index c68edf4187..3fb02ee1db 100644 --- a/src/cmd/link/internal/dwtest/dwtest.go +++ b/src/cmd/link/internal/dwtest/dwtest.go @@ -90,7 +90,7 @@ func (ex *Examiner) DumpEntry(idx int, dumpKids bool, ilevel int) { fmt.Printf("0x%x: %v\n", idx, entry.Tag) for _, f := range entry.Field { indent(ilevel) - fmt.Printf("at=%v val=0x%x\n", f.Attr, f.Val) + fmt.Printf("at=%v val=%v\n", f.Attr, f.Val) } if dumpKids { ksl := ex.kids[idx] diff --git a/src/cmd/link/internal/ld/dwarf.go b/src/cmd/link/internal/ld/dwarf.go index dcbe719c96..17f2803ebf 100644 --- a/src/cmd/link/internal/ld/dwarf.go +++ b/src/cmd/link/internal/ld/dwarf.go @@ -748,6 +748,7 @@ func (d *dwctxt) defptrto(dwtype loader.Sym) loader.Sym { // pointers of slices. Link to the ones we can find. gts := d.ldr.Lookup("type:"+ptrname, 0) if gts != 0 && d.ldr.AttrReachable(gts) { + newattr(pdie, dwarf.DW_AT_go_kind, dwarf.DW_CLS_CONSTANT, int64(objabi.KindPtr), 0) newattr(pdie, dwarf.DW_AT_go_runtime_type, dwarf.DW_CLS_GO_TYPEREF, 0, dwSym(gts)) } diff --git a/src/cmd/link/internal/ld/dwarf_test.go b/src/cmd/link/internal/ld/dwarf_test.go index 6ca2a844f5..e431427249 100644 --- a/src/cmd/link/internal/ld/dwarf_test.go +++ b/src/cmd/link/internal/ld/dwarf_test.go @@ -1985,17 +1985,7 @@ func main() { } } -func TestZeroSizedVariable(t *testing.T) { - testenv.MustHaveGoBuild(t) - - mustHaveDWARF(t) - t.Parallel() - - // This test verifies that the compiler emits DIEs for zero sized variables - // (for example variables of type 'struct {}'). - // See go.dev/issues/54615. - - const prog = ` +const zeroSizedVarProg = ` package main import ( @@ -2008,10 +1998,24 @@ func main() { } ` +func TestZeroSizedVariable(t *testing.T) { + testenv.MustHaveGoBuild(t) + + mustHaveDWARF(t) + t.Parallel() + + if testing.Short() { + t.Skip("skipping test in short mode.") + } + + // This test verifies that the compiler emits DIEs for zero sized variables + // (for example variables of type 'struct {}'). + // See go.dev/issues/54615. + for _, opt := range []string{NoOpt, DefaultOpt} { opt := opt t.Run(opt, func(t *testing.T) { - _, ex := gobuildAndExamine(t, prog, opt) + _, ex := gobuildAndExamine(t, zeroSizedVarProg, opt) // Locate the main.zeroSizedVariable DIE abcs := ex.Named("zeroSizedVariable") @@ -2024,3 +2028,46 @@ func main() { }) } } + +func TestConsistentGoKindAndRuntimeType(t *testing.T) { + testenv.MustHaveGoBuild(t) + + mustHaveDWARF(t) + t.Parallel() + + if testing.Short() { + t.Skip("skipping test in short mode.") + } + + // Ensure that if we emit a "go runtime type" attr on a type DIE, + // we also include the "go kind" attribute. See issue #64231. + _, ex := gobuildAndExamine(t, zeroSizedVarProg, DefaultOpt) + + // Walk all dies. + typesChecked := 0 + failures := 0 + for _, die := range ex.DIEs() { + // For any type DIE with DW_AT_go_runtime_type set... + rtt, hasRT := die.Val(intdwarf.DW_AT_go_runtime_type).(uint64) + if !hasRT || rtt == 0 { + continue + } + typesChecked++ + // ... we want to see a meaningful DW_AT_go_kind value. + if val, ok := die.Val(intdwarf.DW_AT_go_kind).(int64); !ok || val == 0 { + failures++ + // dump DIEs for first 10 failures. + if failures <= 10 { + idx := ex.IdxFromOffset(die.Offset) + t.Logf("type DIE has DW_AT_go_runtime_type but invalid DW_AT_go_kind:\n") + ex.DumpEntry(idx, false, 0) + } + t.Errorf("bad type DIE at offset %d\n", die.Offset) + } + } + if typesChecked == 0 { + t.Fatalf("something went wrong, 0 types checked") + } else { + t.Logf("%d types checked\n", typesChecked) + } +} From d4430f6913b0eacb662a69884d12850864616c37 Mon Sep 17 00:00:00 2001 From: Davis Goodin Date: Tue, 21 Nov 2023 17:12:48 -0800 Subject: [PATCH 092/313] cmd/link/internal/loadpe: fix .xdata unwind info parsing Unwind info in .xdata was being parsed incorrectly, causing targetOff to be incorrect and miss finding data in .xdata that it should have found. This causes a linker issue when using the MinGW MSVCRT compiler. Contains several fixes based on the exception handling docs: the offset used to get the number of unwind codes, the calculation of the target offset based on the dynamic size of the unwind data, and the UNW_FLAG_CHAININFO flag's value. Fixes #64200 Change-Id: I6483d921b2bf8a2512a95223bf3c8ce8bc63dc4a Reviewed-on: https://go-review.googlesource.com/c/go/+/544415 TryBot-Result: Gopher Robot LUCI-TryBot-Result: Go LUCI Reviewed-by: Quim Muntal Run-TryBot: Quim Muntal Reviewed-by: Than McIntosh Reviewed-by: Michael Knyszek --- src/cmd/link/internal/loadpe/seh.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/cmd/link/internal/loadpe/seh.go b/src/cmd/link/internal/loadpe/seh.go index 0e2cda21dd..545958f1d6 100644 --- a/src/cmd/link/internal/loadpe/seh.go +++ b/src/cmd/link/internal/loadpe/seh.go @@ -16,8 +16,9 @@ import ( const ( UNW_FLAG_EHANDLER = 1 << 3 UNW_FLAG_UHANDLER = 2 << 3 - UNW_FLAG_CHAININFO = 3 << 3 - unwStaticDataSize = 8 + UNW_FLAG_CHAININFO = 4 << 3 + unwStaticDataSize = 4 // Bytes of unwind data before the variable length part. + unwCodeSize = 2 // Bytes per unwind code. ) // processSEH walks all pdata relocations looking for exception handler function symbols. @@ -81,14 +82,14 @@ func findHandlerInXDataAMD64(ldr *loader.Loader, xsym sym.LoaderSym, add int64) // Nothing to do. return 0 } - codes := data[3] + codes := data[2] if codes%2 != 0 { // There are always an even number of unwind codes, even if the last one is unused. codes += 1 } // The exception handler relocation is the first relocation after the unwind codes, // unless it is chained, but we will handle this case later. - targetOff := add + unwStaticDataSize*(1+int64(codes)) + targetOff := add + unwStaticDataSize + unwCodeSize*int64(codes) xrels := ldr.Relocs(xsym) xrelsCount := xrels.Count() idx := sort.Search(xrelsCount, func(i int) bool { From 5249947f11b8238c2e2b878665be411fc6ba194b Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Tue, 21 Nov 2023 22:42:35 +0000 Subject: [PATCH 093/313] runtime: don't hold the table lock in (*traceStackTable).dump There's a conceptual cycle between traceStackTable.lock and allocation-related locks, but it can't happen in practice because the caller guarantees that there are no more writers to the table at the point that dump is called. But if that's true, then the lock isn't necessary at all. It would be difficult to model this quiesence in the lockrank mode, so just don't hold the lock and expand the documentation of the dump method. Change-Id: Id4db61363f075b7574135529915e8bd4f4f4c082 Reviewed-on: https://go-review.googlesource.com/c/go/+/544177 Reviewed-by: Matthew Dempsky LUCI-TryBot-Result: Go LUCI Reviewed-by: Cherry Mui --- src/runtime/trace2stack.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/runtime/trace2stack.go b/src/runtime/trace2stack.go index ebfe7c57f0..af6638fa8f 100644 --- a/src/runtime/trace2stack.go +++ b/src/runtime/trace2stack.go @@ -97,7 +97,8 @@ func (t *traceStackTable) put(pcs []uintptr) uint64 { } // dump writes all previously cached stacks to trace buffers, -// releases all memory and resets state. +// releases all memory and resets state. It must only be called once the caller +// can guarantee that there are no more writers to the table. // // This must run on the system stack because it flushes buffers and thus // may acquire trace.lock. @@ -107,7 +108,15 @@ func (t *traceStackTable) dump(gen uintptr) { w := unsafeTraceWriter(gen, nil) // Iterate over the table. - lock(&t.tab.lock) + // + // Do not acquire t.tab.lock. There's a conceptual lock cycle between acquiring this lock + // here and allocation-related locks. Specifically, this lock may be acquired when an event + // is emitted in allocation paths. Simultaneously, we might allocate here with the lock held, + // creating a cycle. In practice, this cycle is never exercised. Because the table is only + // dumped once there are no more writers, it's not possible for the cycle to occur. However + // the lockrank mode is not sophisticated enough to identify this, and if it's not possible + // for that cycle to happen, then it's also not possible for this to race with writers to + // the table. for i := range t.tab.tab { stk := t.tab.bucket(i) for ; stk != nil; stk = stk.next() { @@ -144,6 +153,9 @@ func (t *traceStackTable) dump(gen uintptr) { } } } + // Still, hold the lock over reset. The callee expects it, even though it's + // not strictly necessary. + lock(&t.tab.lock) t.tab.reset() unlock(&t.tab.lock) From e4ea6283e484b7c1e8263c3cda8647b1962815db Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Tue, 21 Nov 2023 23:24:59 +0000 Subject: [PATCH 094/313] runtime: don't hold trace.lock over semrelease in readTrace0 semrelease may unblock a goroutine, but the act of unblocking a goroutine may emit an event, which in turn may try to acquire trace.lock again. It's safe to release trace.lock in readTrace0 for this because all of the state (one variable) it uses under the lock will be recomputed when it reacquires the lock. There's also no other synchronization requirement to hold trace.lock. This is just a mistake. Change-Id: Iff6c6b02efa298ebed8e60cdf6539ec161d5ec48 Reviewed-on: https://go-review.googlesource.com/c/go/+/544178 LUCI-TryBot-Result: Go LUCI Reviewed-by: Matthew Dempsky Reviewed-by: Cherry Mui --- src/runtime/trace2.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/runtime/trace2.go b/src/runtime/trace2.go index 59ea190089..c2a1c1ca1e 100644 --- a/src/runtime/trace2.go +++ b/src/runtime/trace2.go @@ -764,6 +764,8 @@ func readTrace0() (buf []byte, park bool) { // can continue to advance. if trace.flushedGen.Load() == gen { if trace.shutdown.Load() { + unlock(&trace.lock) + // Wake up anyone waiting for us to be done with this generation. // // Do this after reading trace.shutdown, because the thread we're @@ -778,13 +780,13 @@ func readTrace0() (buf []byte, park bool) { // We're shutting down, and the last generation is fully // read. We're done. - unlock(&trace.lock) return nil, false } // The previous gen has had all of its buffers flushed, and // there's nothing else for us to read. Advance the generation // we're reading from and try again. trace.readerGen.Store(trace.gen.Load()) + unlock(&trace.lock) // Wake up anyone waiting for us to be done with this generation. // @@ -795,6 +797,9 @@ func readTrace0() (buf []byte, park bool) { racerelease(unsafe.Pointer(&trace.doneSema[gen%2])) } semrelease(&trace.doneSema[gen%2]) + + // Reacquire the lock and go back to the top of the loop. + lock(&trace.lock) continue } // Wait for new data. From 23c0d30244d5e38d928e68661bf39458eb85d2b2 Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Tue, 21 Nov 2023 23:46:48 +0000 Subject: [PATCH 095/313] runtime: move the wakeableSleep lock under sched in the lock rank Currently the wakeableSleep lock is placed just after timers in the ranking, but it turns out the timers lock can never be held over a timer func, so that's wrong. Meanwhile, wakeableSleep can acquire sched.lock. wakeableSleep, as it turns out, doesn't have any dependencies -- it's always acquired in a (mostly) regular goroutine context. Change-Id: Icc8ea76a8b309fbaf0f02215f16e5f706d49cd95 Reviewed-on: https://go-review.googlesource.com/c/go/+/544395 TryBot-Bypass: Michael Knyszek Reviewed-by: Matthew Dempsky Reviewed-by: Cherry Mui --- src/runtime/lockrank.go | 56 +++++++++++++++++++-------------------- src/runtime/mklockrank.go | 8 +++--- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/runtime/lockrank.go b/src/runtime/lockrank.go index de3b9ab3c6..c56991acb8 100644 --- a/src/runtime/lockrank.go +++ b/src/runtime/lockrank.go @@ -20,11 +20,11 @@ const ( lockRankSweep lockRankPollDesc lockRankCpuprof + lockRankWakeableSleep lockRankSched lockRankAllg lockRankAllp lockRankTimers - lockRankWakeableSleep lockRankNetpollInit lockRankHchan lockRankNotifyList @@ -81,11 +81,11 @@ var lockNames = []string{ lockRankSweep: "sweep", lockRankPollDesc: "pollDesc", lockRankCpuprof: "cpuprof", + lockRankWakeableSleep: "wakeableSleep", lockRankSched: "sched", lockRankAllg: "allg", lockRankAllp: "allp", lockRankTimers: "timers", - lockRankWakeableSleep: "wakeableSleep", lockRankNetpollInit: "netpollInit", lockRankHchan: "hchan", lockRankNotifyList: "notifyList", @@ -149,15 +149,15 @@ var lockPartialOrder [][]lockRank = [][]lockRank{ lockRankSweep: {}, lockRankPollDesc: {}, lockRankCpuprof: {}, - lockRankSched: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof}, - lockRankAllg: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched}, - lockRankAllp: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched}, - lockRankTimers: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllp, lockRankTimers}, - lockRankWakeableSleep: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllp, lockRankTimers}, - lockRankNetpollInit: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllp, lockRankTimers}, - lockRankHchan: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankHchan}, + lockRankWakeableSleep: {}, + lockRankSched: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep}, + lockRankAllg: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched}, + lockRankAllp: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched}, + lockRankTimers: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllp, lockRankTimers}, + lockRankNetpollInit: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllp, lockRankTimers}, + lockRankHchan: {lockRankSysmon, lockRankScavenge, lockRankSweep, lockRankWakeableSleep, lockRankHchan}, lockRankNotifyList: {}, - lockRankSudog: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankHchan, lockRankNotifyList}, + lockRankSudog: {lockRankSysmon, lockRankScavenge, lockRankSweep, lockRankWakeableSleep, lockRankHchan, lockRankNotifyList}, lockRankRwmutexW: {}, lockRankRwmutexR: {lockRankSysmon, lockRankRwmutexW}, lockRankRoot: {}, @@ -166,24 +166,24 @@ var lockPartialOrder [][]lockRank = [][]lockRank{ lockRankUserArenaState: {}, lockRankTraceBuf: {lockRankSysmon, lockRankScavenge}, lockRankTraceStrings: {lockRankSysmon, lockRankScavenge, lockRankTraceBuf}, - lockRankFin: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, - lockRankSpanSetSpine: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, - lockRankMspanSpecial: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, - lockRankGcBitsArenas: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankMspanSpecial}, - lockRankProfInsert: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, - lockRankProfBlock: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, - lockRankProfMemActive: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, - lockRankProfMemFuture: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankProfMemActive}, - lockRankGscan: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture}, - lockRankStackpool: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan}, - lockRankStackLarge: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan}, - lockRankHchanLeaf: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankHchanLeaf}, - lockRankWbufSpans: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan}, - lockRankMheap: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans}, - lockRankMheapSpecial: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap}, - lockRankGlobalAlloc: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap, lockRankMheapSpecial}, - lockRankTrace: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap}, - lockRankTraceStackTab: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankWakeableSleep, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap, lockRankTrace}, + lockRankFin: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, + lockRankSpanSetSpine: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, + lockRankMspanSpecial: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, + lockRankGcBitsArenas: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankMspanSpecial}, + lockRankProfInsert: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, + lockRankProfBlock: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, + lockRankProfMemActive: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, + lockRankProfMemFuture: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankProfMemActive}, + lockRankGscan: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture}, + lockRankStackpool: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan}, + lockRankStackLarge: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan}, + lockRankHchanLeaf: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankHchanLeaf}, + lockRankWbufSpans: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan}, + lockRankMheap: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans}, + lockRankMheapSpecial: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap}, + lockRankGlobalAlloc: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap, lockRankMheapSpecial}, + lockRankTrace: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap}, + lockRankTraceStackTab: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap, lockRankTrace}, lockRankPanic: {}, lockRankDeadlock: {lockRankPanic, lockRankDeadlock}, lockRankRaceFini: {lockRankPanic}, diff --git a/src/runtime/mklockrank.go b/src/runtime/mklockrank.go index 1f18312d1e..241439bdfb 100644 --- a/src/runtime/mklockrank.go +++ b/src/runtime/mklockrank.go @@ -53,18 +53,18 @@ NONE < sweep; # Scheduler, timers, netpoll -NONE < pollDesc, cpuprof; +NONE < pollDesc, cpuprof, wakeableSleep; assistQueue, cpuprof, forcegc, pollDesc, # pollDesc can interact with timers, which can lock sched. scavenge, sweep, - sweepWaiters + sweepWaiters, + wakeableSleep < sched; sched < allg, allp; -allp < timers; -timers < wakeableSleep; +allp, wakeableSleep < timers; timers < netpollInit; # Channels From cea35baf12cd8996c97f6dd3e62a0165d0e50843 Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Tue, 21 Nov 2023 23:57:36 +0000 Subject: [PATCH 096/313] runtime: hold sched.lock over traceThreadDestroy in dropm This is required by traceThreadDestroy, though it's not strictly necessary in this case. The requirement to hold sched.lock comes from the assumption that traceThreadDestroy is getting called when the thread leaves the tracer's view, but in this case the extra m that dropm is dropping never leaves the allm list. Nevertheless, traceThreadDestroy requires it just as a safety measure, and that's reasonable. dropm is generally rare on pthread platforms, so the extra lock acquire over this short critical section (and only when tracing is enabled) is fine. Change-Id: Ib631820963c74f2f087d14a0067d0441d75d6785 Reviewed-on: https://go-review.googlesource.com/c/go/+/544396 Reviewed-by: Matthew Dempsky Run-TryBot: Michael Knyszek Reviewed-by: Cherry Mui TryBot-Result: Gopher Robot --- src/runtime/proc.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/runtime/proc.go b/src/runtime/proc.go index e760572906..7a2283e360 100644 --- a/src/runtime/proc.go +++ b/src/runtime/proc.go @@ -2428,8 +2428,20 @@ func dropm() { // Flush all the M's buffers. This is necessary because the M might // be used on a different thread with a different procid, so we have // to make sure we don't write into the same buffer. - if traceEnabled() || traceShuttingDown() { + // + // N.B. traceThreadDestroy is a no-op in the old tracer, so avoid the + // unnecessary acquire/release of the lock. + if goexperiment.ExecTracer2 && (traceEnabled() || traceShuttingDown()) { + // Acquire sched.lock across thread destruction. One of the invariants of the tracer + // is that a thread cannot disappear from the tracer's view (allm or freem) without + // it noticing, so it requires that sched.lock be held over traceThreadDestroy. + // + // This isn't strictly necessary in this case, because this thread never leaves allm, + // but the critical section is short and dropm is rare on pthread platforms, so just + // take the lock and play it safe. traceThreadDestroy also asserts that the lock is held. + lock(&sched.lock) traceThreadDestroy(mp) + unlock(&sched.lock) } mp.isExtraInSig = false From 676002986c55a296ea348c30706d6b63a3256b7f Mon Sep 17 00:00:00 2001 From: Hiro Date: Wed, 22 Nov 2023 17:20:35 +0000 Subject: [PATCH 097/313] github: use forms for issue templates Migrate from markdown github issue templates to more user friendly yaml templates. Fixes #63970 Change-Id: I1baf8989f72c1b98bf0027bbb794c0324ea21e32 GitHub-Last-Rev: 725110bf87fa879c2787158a68d01612665ad4e6 GitHub-Pull-Request: golang/go#63655 Reviewed-on: https://go-review.googlesource.com/c/go/+/536776 Reviewed-by: Heschi Kreinick Run-TryBot: t hepudds TryBot-Result: Gopher Robot Reviewed-by: Dmitri Shuralyov Auto-Submit: Heschi Kreinick --- .github/ISSUE_TEMPLATE/00-bug.yml | 98 +++++++++++ .github/ISSUE_TEMPLATE/01-pkgsite.yml | 47 +++++ .github/ISSUE_TEMPLATE/02-pkgsite-removal.yml | 29 +++ .github/ISSUE_TEMPLATE/03-gopls.yml | 56 ++++++ .github/ISSUE_TEMPLATE/04-vuln.yml | 48 +++++ .github/ISSUE_TEMPLATE/10-proposal.yml | 15 ++ .github/ISSUE_TEMPLATE/11-language-change.yml | 165 ++++++++++++++++++ .../ISSUE_TEMPLATE/{ => archived}/00-bug.md | 0 .../{ => archived}/01-pkgsite.md | 0 .../{ => archived}/02-pkgsite-removal.md | 0 .../ISSUE_TEMPLATE/{ => archived}/03-gopls.md | 0 .../ISSUE_TEMPLATE/{ => archived}/04-vuln.md | 0 .../{ => archived}/10-proposal.md | 0 .../{ => archived}/11-language-change.md | 0 .github/ISSUE_TEMPLATE/config.yml | 2 +- 15 files changed, 459 insertions(+), 1 deletion(-) create mode 100644 .github/ISSUE_TEMPLATE/00-bug.yml create mode 100644 .github/ISSUE_TEMPLATE/01-pkgsite.yml create mode 100644 .github/ISSUE_TEMPLATE/02-pkgsite-removal.yml create mode 100644 .github/ISSUE_TEMPLATE/03-gopls.yml create mode 100644 .github/ISSUE_TEMPLATE/04-vuln.yml create mode 100644 .github/ISSUE_TEMPLATE/10-proposal.yml create mode 100644 .github/ISSUE_TEMPLATE/11-language-change.yml rename .github/ISSUE_TEMPLATE/{ => archived}/00-bug.md (100%) rename .github/ISSUE_TEMPLATE/{ => archived}/01-pkgsite.md (100%) rename .github/ISSUE_TEMPLATE/{ => archived}/02-pkgsite-removal.md (100%) rename .github/ISSUE_TEMPLATE/{ => archived}/03-gopls.md (100%) rename .github/ISSUE_TEMPLATE/{ => archived}/04-vuln.md (100%) rename .github/ISSUE_TEMPLATE/{ => archived}/10-proposal.md (100%) rename .github/ISSUE_TEMPLATE/{ => archived}/11-language-change.md (100%) diff --git a/.github/ISSUE_TEMPLATE/00-bug.yml b/.github/ISSUE_TEMPLATE/00-bug.yml new file mode 100644 index 0000000000..7a87618190 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/00-bug.yml @@ -0,0 +1,98 @@ +# https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-templates-for-your-repository#creating-issue-forms +# https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/syntax-for-githubs-form-schema +name: Bugs +description: The go command, standard library, or anything else +labels: [ 'kind/bug', 'bug' ] +title: "affected/package: " + +body: + - type: markdown + attributes: + value: | + Thanks for helping us improve! 🙏 Please answer these questions and provide as much information as possible about your problem. + + - type: input + id: go-version + attributes: + label: Go version + description: What version of Go are you using (`go version`)? + placeholder: ex. go version go1.20.7 darwin/arm64 + validations: + required: true + + - type: checkboxes + id: reproduce-latest-release + attributes: + label: Reproducibility + options: + - label: Does this issue reproduce with the latest release? + + - type: textarea + id: os-and-processor + attributes: + label: "What operating system and processor architecture are you using (`go env`)?" + placeholder: | + GO111MODULE="" + GOARCH="arm64" + GOBIN="/Users/gopher/go/bin" + GOCACHE="/Users/gopher/go/cache" + GOENV="/Users/gopher/Library/Application Support/go/env" + GOEXE="" + GOEXPERIMENT="" + GOFLAGS="" + GOHOSTARCH="arm64" + GOHOSTOS="darwin" + GOINSECURE="" + GOMODCACHE="/Users/gopher/go/pkg/mod" + GONOPROXY="" + GONOSUMDB="" + GOOS="darwin" + GOPATH="/Users/gopher/go" + GOPRIVATE="" + GOPROXY="https://proxy.golang.org,direct" + GOROOT="/usr/local/go" + GOSUMDB="sum.golang.org" + GOTMPDIR="" + GOTOOLDIR="/usr/local/go/pkg/tool/darwin_arm64" + GOVCS="" + GOVERSION="go1.20.7" + GCCGO="gccgo" + AR="ar" + CC="clang" + CXX="clang++" + CGO_ENABLED="1" + GOMOD="/dev/null" + GOWORK="" + CGO_CFLAGS="-O2 -g" + CGO_CPPFLAGS="" + CGO_CXXFLAGS="-O2 -g" + CGO_FFLAGS="-O2 -g" + CGO_LDFLAGS="-O2 -g" + PKG_CONFIG="pkg-config" + GOGCCFLAGS="-fPIC -arch arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/44/nbbyll_10jd0z8rj_qxm43740000gn/T/go-build2331607515=/tmp/go-build -gno-record-gcc-switches -fno-common" + render: shell + validations: + required: true + + - type: textarea + id: what-did-you-do + attributes: + label: "What did you do?" + description: "If possible, provide a recipe for reproducing the error. A complete runnable program is good. A link on go.dev/play is best." + validations: + required: true + + - type: textarea + id: expected-behavior + attributes: + label: "What did you expect to see?" + validations: + required: true + + - type: textarea + id: actual-behavior + attributes: + label: "What did you see instead?" + validations: + required: true + diff --git a/.github/ISSUE_TEMPLATE/01-pkgsite.yml b/.github/ISSUE_TEMPLATE/01-pkgsite.yml new file mode 100644 index 0000000000..714bc4198c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/01-pkgsite.yml @@ -0,0 +1,47 @@ +name: Pkg.go.dev bugs or feature requests +description: Issues or feature requests for the documentation site +title: "x/pkgsite: " +labels: ["pkgsite"] +body: + - type: markdown + attributes: + value: "Please answer these questions before submitting your issue. Thanks!" + - type: input + id: url + attributes: + label: "What is the URL of the page with the issue?" + validations: + required: true + - type: input + id: user-agent + attributes: + label: "What is your user agent?" + description: "You can find your user agent here: https://www.google.com/search?q=what+is+my+user+agent" + validations: + required: true + - type: textarea + id: screenshot + attributes: + label: "Screenshot" + description: "Please paste a screenshot of the page." + validations: + required: false + - type: textarea + id: what-did-you-do + attributes: + label: "What did you do?" + description: "If possible, provide a recipe for reproducing the error. Starting with a Private/Incognito tab/window may help rule out problematic browser extensions." + validations: + required: true + - type: textarea + id: expected-behavior + attributes: + label: "What did you expect to see?" + validations: + required: true + - type: textarea + id: actual-behavior + attributes: + label: "What did you see instead?" + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/02-pkgsite-removal.yml b/.github/ISSUE_TEMPLATE/02-pkgsite-removal.yml new file mode 100644 index 0000000000..71d0a19d71 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/02-pkgsite-removal.yml @@ -0,0 +1,29 @@ +name: Pkg.go.dev package removal request +description: Request a package be removed from the documentation site (pkg.go.dev) +title: "x/pkgsite: package removal request for [type path here]" +labels: ["pkgsite/package-removal"] +body: + - type: markdown + attributes: + value: "Please answer these questions before submitting your issue. Thanks!" + - type: input + id: package-path + attributes: + label: "What is the path of the package that you would like to have removed?" + description: "We can remove packages with a shared path prefix. For example, a request for 'github.com/author' would remove all pkg.go.dev pages with that package path prefix." + validations: + required: true + - type: textarea + id: package-owner + attributes: + label: "Are you the owner of this package?" + description: "Only the package owners can request to have their packages removed from pkg.go.dev." + validations: + required: true + - type: textarea + id: retraction-reason + attributes: + label: "What is the reason that you could not retract this package instead?" + description: "If you would like to have your module removed from pkg.go.dev, we recommend that you retract them, so that they can be removed from the go command and proxy.golang.org as well. Retracting a module version involves adding a retract directive to your go.mod file and publishing a new version. For example: https://github.com/jba/retract-demo/blob/main/go.mod#L5-L8. See https://pkg.go.dev/about#removing-a-package for additional tips on retractions." + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/03-gopls.yml b/.github/ISSUE_TEMPLATE/03-gopls.yml new file mode 100644 index 0000000000..d81c90c65d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/03-gopls.yml @@ -0,0 +1,56 @@ +name: Gopls bugs or feature requests +description: Issues or feature requests for the Go language server (gopls) +title: "x/tools/gopls: " +labels: ["gopls", "Tools"] +body: + - type: markdown + attributes: + value: "Please answer these questions before submitting your issue. Thanks!" + - type: input + id: gopls-version + attributes: + label: "gopls version" + description: "Output of `gopls -v version` on the command line" + validations: + required: true + - type: textarea + id: go-env + attributes: + label: "go env" + description: "Output of `go env` on the command line in your workspace directory" + render: shell + validations: + required: true + - type: textarea + id: what-did-you-do + attributes: + label: "What did you do?" + description: "If possible, provide a recipe for reproducing the error. A complete runnable program is good. A link on go.dev/play is better. A failing unit test is the best." + validations: + required: true + - type: textarea + id: expected-behavior + attributes: + label: "What did you expect to see?" + validations: + required: true + - type: textarea + id: actual-behavior + attributes: + label: "What did you see instead?" + validations: + required: true + - type: textarea + id: editor-and-settings + attributes: + label: "Editor and settings" + description: "Your editor and any settings you have configured (for example, your VSCode settings.json file)" + validations: + required: false + - type: textarea + id: logs + attributes: + label: "Logs" + description: "If possible please include gopls logs. Instructions for capturing them can be found here: https://github.com/golang/tools/blob/master/gopls/doc/troubleshooting.md#capture-logs" + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/04-vuln.yml b/.github/ISSUE_TEMPLATE/04-vuln.yml new file mode 100644 index 0000000000..dd14aeeb97 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/04-vuln.yml @@ -0,0 +1,48 @@ +name: Go vulnerability management - bugs and feature requests +description: Issues or feature requests about Go vulnerability management +title: "x/vuln: " +labels: ["vulncheck", "vulndb"] +body: + - type: markdown + attributes: + value: "Please answer these questions before submitting your issue. Thanks! To add a new vulnerability to the Go vulnerability database (https://vuln.go.dev), see https://go.dev/s/vulndb-report-new. To report an issue about a report, see https://go.dev/s/vulndb-report-feedback." + - type: input + id: go-version + attributes: + label: go version + description: What version of Go are you using (`go version`)? + placeholder: ex. go version go1.20.7 darwin/arm64 + validations: + required: true + - type: textarea + id: reproduce-latest-version + attributes: + label: "Does this issue reproduce at the latest version of golang.org/x/vuln?" + validations: + required: true + - type: textarea + id: os-and-processor + attributes: + label: "What operating system and processor architecture are you using (`go env`)?" + render: shell + validations: + required: true + - type: textarea + id: what-did-you-do + attributes: + label: "What did you do?" + description: "If possible, provide a recipe for reproducing the error. A complete runnable program is good. A link on go.dev/play is best." + validations: + required: true + - type: textarea + id: expected-behavior + attributes: + label: "What did you expect to see?" + validations: + required: true + - type: textarea + id: actual-behavior + attributes: + label: "What did you see instead?" + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/10-proposal.yml b/.github/ISSUE_TEMPLATE/10-proposal.yml new file mode 100644 index 0000000000..8eb6ceb26a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/10-proposal.yml @@ -0,0 +1,15 @@ +name: Proposals +description: New external API or other notable changes +title: "proposal: affected/package: " +labels: ["Proposal"] +body: + - type: markdown + attributes: + value: "Our proposal process is documented here: https://go.dev/s/proposal-process" + - type: textarea + id: proposal-details + attributes: + label: "Proposal Details" + description: "Please provide the details of your proposal here." + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/11-language-change.yml b/.github/ISSUE_TEMPLATE/11-language-change.yml new file mode 100644 index 0000000000..4965ab80ed --- /dev/null +++ b/.github/ISSUE_TEMPLATE/11-language-change.yml @@ -0,0 +1,165 @@ +name: Language Change Proposals +description: Changes to the language +labels: ["Proposal", "v2", "LanguageChange"] +title: "proposal: Go 2: " + + +body: + - type: markdown + attributes: + value: | + ## Our process for evaluating language changes can be found [here](https://go.googlesource.com/proposal/+/refs/heads/master#language-changes) + + - type: dropdown + id: author-go-experience + attributes: + label: "Go Programming Experience" + description: "Would you consider yourself a novice, intermediate, or experienced Go programmer?" + options: + - "Novice" + - "Intermediate" + - "Experienced" + default: 1 + + - type: input + id: author-other-languages-experience + attributes: + label: "Other Languages Experience" + description: "What other languages do you have experience with?" + placeholder: "Go, Python, JS, Rust" + validations: + required: false + + - type: checkboxes + id: related-idea + attributes: + label: "Related Idea" + options: + - label: "Has this idea, or one like it, been proposed before?" + - label: "Does this affect error handling?" + - label: "Is this about generics?" + - label: "Is this change backward compatible? Breaking the Go 1 compatibility guarantee is a large cost and requires a large benefit" + + - type: textarea + id: related-proposals + attributes: + label: Has this idea, or one like it, been proposed before? + description: If so, how does this proposal differ? + placeholder: | + Yes or No + + If yes, + 1. Mention the related proposals + 2. then describe how this proposal differs + validations: + required: true + + - type: textarea + id: error-handling-proposal + attributes: + label: Does this affect error handling? + description: If so, how does this differ from previous error handling proposals? + placeholder: | + Yes or No + + If yes, + 1.how does this differ from previous error handling proposals? + + validations: + required: true + + - type: textarea + id: generics-proposal + attributes: + label: Is this about generics? + description: If so, how does this relate to the accepted design and other generics proposals? + placeholder: | + Yes or No + + If yes, + 1. how does this relate to the accepted design and other generics proposals? + + validations: + required: true + + - type: textarea + id: proposal + attributes: + label: "Proposal" + description: "What is the proposed change? Who does this proposal help, and why? Please describe as precisely as possible the change to the language." + validations: + required: true + + - type: textarea + id: language-spec-changes + attributes: + label: "Language Spec Changes" + description: "What would change in the language spec?" + validations: + required: false + + - type: textarea + id: informal-change + attributes: + label: "Informal Change" + description: "Please also describe the change informally, as in a class teaching Go." + validations: + required: false + + - type: textarea + id: go-backwards-compatiblity + attributes: + label: Is this change backward compatible? + description: Breaking the Go 1 compatibility guarantee is a large cost and requires a large benefit. + placeholder: | + Yes or No + + If yes, + 1. Show example code before and after the change. + + validations: + required: true + + - type: textarea + id: orthogonality + attributes: + label: "Orthogonality: How does this change interact or overlap with existing features?" + description: "Is the goal of this change a performance improvement? If so, what quantifiable improvement should we expect? How would we measure it?" + validations: + required: false + + - type: textarea + id: learning-curve + attributes: + label: "Would this change make Go easier or harder to learn, and why?" + + - type: textarea + id: cost-description + attributes: + label: "Cost Description" + description: "What is the cost of this proposal? (Every language change has a cost)" + + - type: input + id: go-toolchain + attributes: + label: Changes to Go ToolChain + description: "How many tools (such as vet, gopls, gofmt, goimports, etc.) would be affected? " + validations: + required: false + + - type: input + id: perf-costs + attributes: + label: Performance Costs + description: "What is the compile time cost? What is the run time cost? " + validations: + required: false + + - type: textarea + id: prototype + attributes: + label: "Prototype" + description: "Can you describe a possible implementation?" + validations: + required: false + diff --git a/.github/ISSUE_TEMPLATE/00-bug.md b/.github/ISSUE_TEMPLATE/archived/00-bug.md similarity index 100% rename from .github/ISSUE_TEMPLATE/00-bug.md rename to .github/ISSUE_TEMPLATE/archived/00-bug.md diff --git a/.github/ISSUE_TEMPLATE/01-pkgsite.md b/.github/ISSUE_TEMPLATE/archived/01-pkgsite.md similarity index 100% rename from .github/ISSUE_TEMPLATE/01-pkgsite.md rename to .github/ISSUE_TEMPLATE/archived/01-pkgsite.md diff --git a/.github/ISSUE_TEMPLATE/02-pkgsite-removal.md b/.github/ISSUE_TEMPLATE/archived/02-pkgsite-removal.md similarity index 100% rename from .github/ISSUE_TEMPLATE/02-pkgsite-removal.md rename to .github/ISSUE_TEMPLATE/archived/02-pkgsite-removal.md diff --git a/.github/ISSUE_TEMPLATE/03-gopls.md b/.github/ISSUE_TEMPLATE/archived/03-gopls.md similarity index 100% rename from .github/ISSUE_TEMPLATE/03-gopls.md rename to .github/ISSUE_TEMPLATE/archived/03-gopls.md diff --git a/.github/ISSUE_TEMPLATE/04-vuln.md b/.github/ISSUE_TEMPLATE/archived/04-vuln.md similarity index 100% rename from .github/ISSUE_TEMPLATE/04-vuln.md rename to .github/ISSUE_TEMPLATE/archived/04-vuln.md diff --git a/.github/ISSUE_TEMPLATE/10-proposal.md b/.github/ISSUE_TEMPLATE/archived/10-proposal.md similarity index 100% rename from .github/ISSUE_TEMPLATE/10-proposal.md rename to .github/ISSUE_TEMPLATE/archived/10-proposal.md diff --git a/.github/ISSUE_TEMPLATE/11-language-change.md b/.github/ISSUE_TEMPLATE/archived/11-language-change.md similarity index 100% rename from .github/ISSUE_TEMPLATE/11-language-change.md rename to .github/ISSUE_TEMPLATE/archived/11-language-change.md diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index c07f1e4d1c..d6257daf2f 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,4 +1,4 @@ -blank_issues_enabled: false +blank_issues_enabled: true contact_links: - name: Questions about: Please use one of the forums for questions or general discussions From 186c4734247594fe7b27389b0233ece940a1d6f0 Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Wed, 22 Nov 2023 16:54:29 +0000 Subject: [PATCH 098/313] api: promote next to go1.22 Change-Id: Ib9d1eabfe6199575ea57183ccb21f62c40e11d84 Reviewed-on: https://go-review.googlesource.com/c/go/+/544555 Reviewed-by: Heschi Kreinick Auto-Submit: Michael Knyszek LUCI-TryBot-Result: Go LUCI --- api/go1.22.txt | 134 +++++++++++++++++++++++++++++++++++++++++++++ api/next/50102.txt | 9 --- api/next/50489.txt | 1 - api/next/51246.txt | 6 -- api/next/51971.txt | 3 - api/next/53693.txt | 6 -- api/next/54898.txt | 1 - api/next/56353.txt | 1 - api/next/57178.txt | 1 - api/next/58000.txt | 1 - api/next/58808.txt | 2 - api/next/59599.txt | 1 - api/next/60061.txt | 1 - api/next/60088.txt | 1 - api/next/60204.txt | 1 - api/next/60370.txt | 5 -- api/next/60665.txt | 6 -- api/next/61410.txt | 2 - api/next/61619.txt | 1 - api/next/61642.txt | 2 - api/next/61716.txt | 48 ---------------- api/next/61758.txt | 1 - api/next/61870.txt | 1 - api/next/61974.txt | 2 - api/next/62037.txt | 2 - api/next/62039.txt | 3 - api/next/62418.txt | 1 - api/next/62605.txt | 1 - api/next/63223.txt | 6 -- api/next/63725.txt | 18 ------ 30 files changed, 134 insertions(+), 134 deletions(-) create mode 100644 api/go1.22.txt delete mode 100644 api/next/50102.txt delete mode 100644 api/next/50489.txt delete mode 100644 api/next/51246.txt delete mode 100644 api/next/51971.txt delete mode 100644 api/next/53693.txt delete mode 100644 api/next/54898.txt delete mode 100644 api/next/56353.txt delete mode 100644 api/next/57178.txt delete mode 100644 api/next/58000.txt delete mode 100644 api/next/58808.txt delete mode 100644 api/next/59599.txt delete mode 100644 api/next/60061.txt delete mode 100644 api/next/60088.txt delete mode 100644 api/next/60204.txt delete mode 100644 api/next/60370.txt delete mode 100644 api/next/60665.txt delete mode 100644 api/next/61410.txt delete mode 100644 api/next/61619.txt delete mode 100644 api/next/61642.txt delete mode 100644 api/next/61716.txt delete mode 100644 api/next/61758.txt delete mode 100644 api/next/61870.txt delete mode 100644 api/next/61974.txt delete mode 100644 api/next/62037.txt delete mode 100644 api/next/62039.txt delete mode 100644 api/next/62418.txt delete mode 100644 api/next/62605.txt delete mode 100644 api/next/63223.txt delete mode 100644 api/next/63725.txt diff --git a/api/go1.22.txt b/api/go1.22.txt new file mode 100644 index 0000000000..ca67b4d6e8 --- /dev/null +++ b/api/go1.22.txt @@ -0,0 +1,134 @@ +pkg archive/tar, method (*Writer) AddFS(fs.FS) error #58000 +pkg archive/tar, type FileInfoNames interface, Gname(int) (string, error) #50102 +pkg archive/tar, type FileInfoNames interface { Gname, IsDir, ModTime, Mode, Name, Size, Sys, Uname } #50102 +pkg archive/tar, type FileInfoNames interface, IsDir() bool #50102 +pkg archive/tar, type FileInfoNames interface, Mode() fs.FileMode #50102 +pkg archive/tar, type FileInfoNames interface, ModTime() time.Time #50102 +pkg archive/tar, type FileInfoNames interface, Name() string #50102 +pkg archive/tar, type FileInfoNames interface, Size() int64 #50102 +pkg archive/tar, type FileInfoNames interface, Sys() interface{} #50102 +pkg archive/tar, type FileInfoNames interface, Uname(int) (string, error) #50102 +pkg archive/zip, method (*Writer) AddFS(fs.FS) error #54898 +pkg cmp, func Or[$0 comparable](...$0) $0 #60204 +pkg crypto/x509, func OIDFromInts([]uint64) (OID, error) #60665 +pkg crypto/x509, method (*CertPool) AddCertWithConstraint(*Certificate, func([]*Certificate) error) #57178 +pkg crypto/x509, method (OID) EqualASN1OID(asn1.ObjectIdentifier) bool #60665 +pkg crypto/x509, method (OID) Equal(OID) bool #60665 +pkg crypto/x509, method (OID) String() string #60665 +pkg crypto/x509, type Certificate struct, Policies []OID #60665 +pkg crypto/x509, type OID struct #60665 +pkg database/sql, method (*Null[$0]) Scan(interface{}) error #60370 +pkg database/sql, method (Null[$0]) Value() (driver.Value, error) #60370 +pkg database/sql, type Null[$0 interface{}] struct #60370 +pkg database/sql, type Null[$0 interface{}] struct, V $0 #60370 +pkg database/sql, type Null[$0 interface{}] struct, Valid bool #60370 +pkg debug/elf, const R_LARCH_64_PCREL = 109 #63725 +pkg debug/elf, const R_LARCH_64_PCREL R_LARCH #63725 +pkg debug/elf, const R_LARCH_ADD6 = 105 #63725 +pkg debug/elf, const R_LARCH_ADD6 R_LARCH #63725 +pkg debug/elf, const R_LARCH_ADD_ULEB128 = 107 #63725 +pkg debug/elf, const R_LARCH_ADD_ULEB128 R_LARCH #63725 +pkg debug/elf, const R_LARCH_ALIGN = 102 #63725 +pkg debug/elf, const R_LARCH_ALIGN R_LARCH #63725 +pkg debug/elf, const R_LARCH_CFA = 104 #63725 +pkg debug/elf, const R_LARCH_CFA R_LARCH #63725 +pkg debug/elf, const R_LARCH_DELETE = 101 #63725 +pkg debug/elf, const R_LARCH_DELETE R_LARCH #63725 +pkg debug/elf, const R_LARCH_PCREL20_S2 = 103 #63725 +pkg debug/elf, const R_LARCH_PCREL20_S2 R_LARCH #63725 +pkg debug/elf, const R_LARCH_SUB6 = 106 #63725 +pkg debug/elf, const R_LARCH_SUB6 R_LARCH #63725 +pkg debug/elf, const R_LARCH_SUB_ULEB128 = 108 #63725 +pkg debug/elf, const R_LARCH_SUB_ULEB128 R_LARCH #63725 +pkg debug/elf, const R_MIPS_PC32 = 248 #61974 +pkg debug/elf, const R_MIPS_PC32 R_MIPS #61974 +pkg encoding/base32, method (*Encoding) AppendDecode([]uint8, []uint8) ([]uint8, error) #53693 +pkg encoding/base32, method (*Encoding) AppendEncode([]uint8, []uint8) []uint8 #53693 +pkg encoding/base64, method (*Encoding) AppendDecode([]uint8, []uint8) ([]uint8, error) #53693 +pkg encoding/base64, method (*Encoding) AppendEncode([]uint8, []uint8) []uint8 #53693 +pkg encoding/hex, func AppendDecode([]uint8, []uint8) ([]uint8, error) #53693 +pkg encoding/hex, func AppendEncode([]uint8, []uint8) []uint8 #53693 +pkg go/ast, func Unparen(Expr) Expr #60061 +pkg go/types, func NewAlias(*TypeName, Type) *Alias #63223 +pkg go/types, func Unalias(Type) Type #63223 +pkg go/types, method (*Alias) Obj() *TypeName #63223 +pkg go/types, method (*Alias) String() string #63223 +pkg go/types, method (*Alias) Underlying() Type #63223 +pkg go/types, method (Checker) PkgNameOf(*ast.ImportSpec) *PkgName #62037 +pkg go/types, method (*Info) PkgNameOf(*ast.ImportSpec) *PkgName #62037 +pkg go/types, type Alias struct #63223 +pkg go/types, type Info struct, FileVersions map[*ast.File]string #62605 +pkg go/version, func Compare(string, string) int #62039 +pkg go/version, func IsValid(string) bool #62039 +pkg go/version, func Lang(string) string #62039 +pkg html/template, const ErrJSTemplate //deprecated #61619 +pkg io, method (*SectionReader) Outer() (ReaderAt, int64, int64) #61870 +pkg log/slog, func SetLogLoggerLevel(Level) Level #62418 +pkg math/big, method (*Rat) FloatPrec() (int, bool) #50489 +pkg math/rand/v2, func ExpFloat64() float64 #61716 +pkg math/rand/v2, func Float32() float32 #61716 +pkg math/rand/v2, func Float64() float64 #61716 +pkg math/rand/v2, func Int32() int32 #61716 +pkg math/rand/v2, func Int32N(int32) int32 #61716 +pkg math/rand/v2, func Int64() int64 #61716 +pkg math/rand/v2, func Int64N(int64) int64 #61716 +pkg math/rand/v2, func Int() int #61716 +pkg math/rand/v2, func IntN(int) int #61716 +pkg math/rand/v2, func N[$0 intType]($0) $0 #61716 +pkg math/rand/v2, func NewPCG(uint64, uint64) *PCG #61716 +pkg math/rand/v2, func New(Source) *Rand #61716 +pkg math/rand/v2, func NewZipf(*Rand, float64, float64, uint64) *Zipf #61716 +pkg math/rand/v2, func NormFloat64() float64 #61716 +pkg math/rand/v2, func Perm(int) []int #61716 +pkg math/rand/v2, func Shuffle(int, func(int, int)) #61716 +pkg math/rand/v2, func Uint32N(uint32) uint32 #61716 +pkg math/rand/v2, func Uint32() uint32 #61716 +pkg math/rand/v2, func Uint64N(uint64) uint64 #61716 +pkg math/rand/v2, func Uint64() uint64 #61716 +pkg math/rand/v2, func UintN(uint) uint #61716 +pkg math/rand/v2, method (*PCG) MarshalBinary() ([]uint8, error) #61716 +pkg math/rand/v2, method (*PCG) Seed(uint64, uint64) #61716 +pkg math/rand/v2, method (*PCG) Uint64() uint64 #61716 +pkg math/rand/v2, method (*PCG) UnmarshalBinary([]uint8) error #61716 +pkg math/rand/v2, method (*Rand) ExpFloat64() float64 #61716 +pkg math/rand/v2, method (*Rand) Float32() float32 #61716 +pkg math/rand/v2, method (*Rand) Float64() float64 #61716 +pkg math/rand/v2, method (*Rand) Int32() int32 #61716 +pkg math/rand/v2, method (*Rand) Int32N(int32) int32 #61716 +pkg math/rand/v2, method (*Rand) Int64() int64 #61716 +pkg math/rand/v2, method (*Rand) Int64N(int64) int64 #61716 +pkg math/rand/v2, method (*Rand) Int() int #61716 +pkg math/rand/v2, method (*Rand) IntN(int) int #61716 +pkg math/rand/v2, method (*Rand) NormFloat64() float64 #61716 +pkg math/rand/v2, method (*Rand) Perm(int) []int #61716 +pkg math/rand/v2, method (*Rand) Shuffle(int, func(int, int)) #61716 +pkg math/rand/v2, method (*Rand) Uint32N(uint32) uint32 #61716 +pkg math/rand/v2, method (*Rand) Uint32() uint32 #61716 +pkg math/rand/v2, method (*Rand) Uint64N(uint64) uint64 #61716 +pkg math/rand/v2, method (*Rand) Uint64() uint64 #61716 +pkg math/rand/v2, method (*Rand) UintN(uint) uint #61716 +pkg math/rand/v2, method (*Zipf) Uint64() uint64 #61716 +pkg math/rand/v2, type PCG struct #61716 +pkg math/rand/v2, type Rand struct #61716 +pkg math/rand/v2, type Source interface { Uint64 } #61716 +pkg math/rand/v2, type Source interface, Uint64() uint64 #61716 +pkg math/rand/v2, type Zipf struct #61716 +pkg net/http, func FileServerFS(fs.FS) Handler #51971 +pkg net/http, func NewFileTransportFS(fs.FS) RoundTripper #51971 +pkg net/http, func ServeFileFS(ResponseWriter, *Request, fs.FS, string) #51971 +pkg net/http, method (*Request) PathValue(string) string #61410 +pkg net/http, method (*Request) SetPathValue(string, string) #61410 +pkg net, method (*TCPConn) WriteTo(io.Writer) (int64, error) #58808 +pkg net/netip, method (AddrPort) Compare(AddrPort) int #61642 +pkg net/netip, method (Prefix) Compare(Prefix) int #61642 +pkg os, method (*File) WriteTo(io.Writer) (int64, error) #58808 +pkg reflect, func PtrTo //deprecated #59599 +pkg reflect, func TypeFor[$0 interface{}]() Type #60088 +pkg slices, func Concat[$0 interface{ ~[]$1 }, $1 interface{}](...$0) $0 #56353 +pkg syscall (linux-386-cgo), type SysProcAttr struct, PidFD *int #51246 +pkg syscall (linux-386), type SysProcAttr struct, PidFD *int #51246 +pkg syscall (linux-amd64-cgo), type SysProcAttr struct, PidFD *int #51246 +pkg syscall (linux-amd64), type SysProcAttr struct, PidFD *int #51246 +pkg syscall (linux-arm-cgo), type SysProcAttr struct, PidFD *int #51246 +pkg syscall (linux-arm), type SysProcAttr struct, PidFD *int #51246 +pkg testing/slogtest, func Run(*testing.T, func(*testing.T) slog.Handler, func(*testing.T) map[string]interface{}) #61758 diff --git a/api/next/50102.txt b/api/next/50102.txt deleted file mode 100644 index dcb7977e83..0000000000 --- a/api/next/50102.txt +++ /dev/null @@ -1,9 +0,0 @@ -pkg archive/tar, type FileInfoNames interface { Gname, IsDir, ModTime, Mode, Name, Size, Sys, Uname } #50102 -pkg archive/tar, type FileInfoNames interface, Gname(int) (string, error) #50102 -pkg archive/tar, type FileInfoNames interface, IsDir() bool #50102 -pkg archive/tar, type FileInfoNames interface, ModTime() time.Time #50102 -pkg archive/tar, type FileInfoNames interface, Mode() fs.FileMode #50102 -pkg archive/tar, type FileInfoNames interface, Name() string #50102 -pkg archive/tar, type FileInfoNames interface, Size() int64 #50102 -pkg archive/tar, type FileInfoNames interface, Sys() interface{} #50102 -pkg archive/tar, type FileInfoNames interface, Uname(int) (string, error) #50102 diff --git a/api/next/50489.txt b/api/next/50489.txt deleted file mode 100644 index 5fc8723c9e..0000000000 --- a/api/next/50489.txt +++ /dev/null @@ -1 +0,0 @@ -pkg math/big, method (*Rat) FloatPrec() (int, bool) #50489 diff --git a/api/next/51246.txt b/api/next/51246.txt deleted file mode 100644 index c8806c64a3..0000000000 --- a/api/next/51246.txt +++ /dev/null @@ -1,6 +0,0 @@ -pkg syscall (linux-386), type SysProcAttr struct, PidFD *int #51246 -pkg syscall (linux-386-cgo), type SysProcAttr struct, PidFD *int #51246 -pkg syscall (linux-amd64), type SysProcAttr struct, PidFD *int #51246 -pkg syscall (linux-amd64-cgo), type SysProcAttr struct, PidFD *int #51246 -pkg syscall (linux-arm), type SysProcAttr struct, PidFD *int #51246 -pkg syscall (linux-arm-cgo), type SysProcAttr struct, PidFD *int #51246 diff --git a/api/next/51971.txt b/api/next/51971.txt deleted file mode 100644 index f884c3c079..0000000000 --- a/api/next/51971.txt +++ /dev/null @@ -1,3 +0,0 @@ -pkg net/http, func ServeFileFS(ResponseWriter, *Request, fs.FS, string) #51971 -pkg net/http, func FileServerFS(fs.FS) Handler #51971 -pkg net/http, func NewFileTransportFS(fs.FS) RoundTripper #51971 diff --git a/api/next/53693.txt b/api/next/53693.txt deleted file mode 100644 index 5a6f09e6c8..0000000000 --- a/api/next/53693.txt +++ /dev/null @@ -1,6 +0,0 @@ -pkg encoding/base32, method (*Encoding) AppendDecode([]uint8, []uint8) ([]uint8, error) #53693 -pkg encoding/base32, method (*Encoding) AppendEncode([]uint8, []uint8) []uint8 #53693 -pkg encoding/base64, method (*Encoding) AppendDecode([]uint8, []uint8) ([]uint8, error) #53693 -pkg encoding/base64, method (*Encoding) AppendEncode([]uint8, []uint8) []uint8 #53693 -pkg encoding/hex, func AppendDecode([]uint8, []uint8) ([]uint8, error) #53693 -pkg encoding/hex, func AppendEncode([]uint8, []uint8) []uint8 #53693 diff --git a/api/next/54898.txt b/api/next/54898.txt deleted file mode 100644 index 44133bd377..0000000000 --- a/api/next/54898.txt +++ /dev/null @@ -1 +0,0 @@ -pkg archive/zip, method (*Writer) AddFS(fs.FS) error #54898 diff --git a/api/next/56353.txt b/api/next/56353.txt deleted file mode 100644 index c2504a7f63..0000000000 --- a/api/next/56353.txt +++ /dev/null @@ -1 +0,0 @@ -pkg slices, func Concat[$0 interface{ ~[]$1 }, $1 interface{}](...$0) $0 #56353 diff --git a/api/next/57178.txt b/api/next/57178.txt deleted file mode 100644 index 3ce4d408eb..0000000000 --- a/api/next/57178.txt +++ /dev/null @@ -1 +0,0 @@ -pkg crypto/x509, method (*CertPool) AddCertWithConstraint(*Certificate, func([]*Certificate) error) #57178 diff --git a/api/next/58000.txt b/api/next/58000.txt deleted file mode 100644 index 94db9637cb..0000000000 --- a/api/next/58000.txt +++ /dev/null @@ -1 +0,0 @@ -pkg archive/tar, method (*Writer) AddFS(fs.FS) error #58000 diff --git a/api/next/58808.txt b/api/next/58808.txt deleted file mode 100644 index f1105c3168..0000000000 --- a/api/next/58808.txt +++ /dev/null @@ -1,2 +0,0 @@ -pkg net, method (*TCPConn) WriteTo(io.Writer) (int64, error) #58808 -pkg os, method (*File) WriteTo(io.Writer) (int64, error) #58808 diff --git a/api/next/59599.txt b/api/next/59599.txt deleted file mode 100644 index 952291f323..0000000000 --- a/api/next/59599.txt +++ /dev/null @@ -1 +0,0 @@ -pkg reflect, func PtrTo //deprecated #59599 diff --git a/api/next/60061.txt b/api/next/60061.txt deleted file mode 100644 index 3e497addb7..0000000000 --- a/api/next/60061.txt +++ /dev/null @@ -1 +0,0 @@ -pkg go/ast, func Unparen(Expr) Expr #60061 diff --git a/api/next/60088.txt b/api/next/60088.txt deleted file mode 100644 index 6eacb139a7..0000000000 --- a/api/next/60088.txt +++ /dev/null @@ -1 +0,0 @@ -pkg reflect, func TypeFor[$0 interface{}]() Type #60088 diff --git a/api/next/60204.txt b/api/next/60204.txt deleted file mode 100644 index 62dddc620c..0000000000 --- a/api/next/60204.txt +++ /dev/null @@ -1 +0,0 @@ -pkg cmp, func Or[$0 comparable](...$0) $0 #60204 diff --git a/api/next/60370.txt b/api/next/60370.txt deleted file mode 100644 index 66ced0bfb7..0000000000 --- a/api/next/60370.txt +++ /dev/null @@ -1,5 +0,0 @@ -pkg database/sql, method (*Null[$0]) Scan(interface{}) error #60370 -pkg database/sql, method (Null[$0]) Value() (driver.Value, error) #60370 -pkg database/sql, type Null[$0 interface{}] struct #60370 -pkg database/sql, type Null[$0 interface{}] struct, Valid bool #60370 -pkg database/sql, type Null[$0 interface{}] struct, V $0 #60370 diff --git a/api/next/60665.txt b/api/next/60665.txt deleted file mode 100644 index 10e50e1832..0000000000 --- a/api/next/60665.txt +++ /dev/null @@ -1,6 +0,0 @@ -pkg crypto/x509, type Certificate struct, Policies []OID #60665 -pkg crypto/x509, type OID struct #60665 -pkg crypto/x509, method (OID) Equal(OID) bool #60665 -pkg crypto/x509, method (OID) EqualASN1OID(asn1.ObjectIdentifier) bool #60665 -pkg crypto/x509, method (OID) String() string #60665 -pkg crypto/x509, func OIDFromInts([]uint64) (OID, error) #60665 diff --git a/api/next/61410.txt b/api/next/61410.txt deleted file mode 100644 index 01c8a2c3e8..0000000000 --- a/api/next/61410.txt +++ /dev/null @@ -1,2 +0,0 @@ -pkg net/http, method (*Request) PathValue(string) string #61410 -pkg net/http, method (*Request) SetPathValue(string, string) #61410 diff --git a/api/next/61619.txt b/api/next/61619.txt deleted file mode 100644 index c63a3140e8..0000000000 --- a/api/next/61619.txt +++ /dev/null @@ -1 +0,0 @@ -pkg html/template, const ErrJSTemplate //deprecated #61619 diff --git a/api/next/61642.txt b/api/next/61642.txt deleted file mode 100644 index 4c8bf252df..0000000000 --- a/api/next/61642.txt +++ /dev/null @@ -1,2 +0,0 @@ -pkg net/netip, method (AddrPort) Compare(AddrPort) int #61642 -pkg net/netip, method (Prefix) Compare(Prefix) int #61642 diff --git a/api/next/61716.txt b/api/next/61716.txt deleted file mode 100644 index 05b9bb8429..0000000000 --- a/api/next/61716.txt +++ /dev/null @@ -1,48 +0,0 @@ -pkg math/rand/v2, func ExpFloat64() float64 #61716 -pkg math/rand/v2, func Float32() float32 #61716 -pkg math/rand/v2, func Float64() float64 #61716 -pkg math/rand/v2, func Int() int #61716 -pkg math/rand/v2, func Int32() int32 #61716 -pkg math/rand/v2, func Int32N(int32) int32 #61716 -pkg math/rand/v2, func Int64() int64 #61716 -pkg math/rand/v2, func Int64N(int64) int64 #61716 -pkg math/rand/v2, func IntN(int) int #61716 -pkg math/rand/v2, func N[$0 intType]($0) $0 #61716 -pkg math/rand/v2, func New(Source) *Rand #61716 -pkg math/rand/v2, func NewPCG(uint64, uint64) *PCG #61716 -pkg math/rand/v2, func NewZipf(*Rand, float64, float64, uint64) *Zipf #61716 -pkg math/rand/v2, func NormFloat64() float64 #61716 -pkg math/rand/v2, func Perm(int) []int #61716 -pkg math/rand/v2, func Shuffle(int, func(int, int)) #61716 -pkg math/rand/v2, func Uint32() uint32 #61716 -pkg math/rand/v2, func Uint32N(uint32) uint32 #61716 -pkg math/rand/v2, func Uint64() uint64 #61716 -pkg math/rand/v2, func Uint64N(uint64) uint64 #61716 -pkg math/rand/v2, func UintN(uint) uint #61716 -pkg math/rand/v2, method (*PCG) MarshalBinary() ([]uint8, error) #61716 -pkg math/rand/v2, method (*PCG) Seed(uint64, uint64) #61716 -pkg math/rand/v2, method (*PCG) Uint64() uint64 #61716 -pkg math/rand/v2, method (*PCG) UnmarshalBinary([]uint8) error #61716 -pkg math/rand/v2, method (*Rand) ExpFloat64() float64 #61716 -pkg math/rand/v2, method (*Rand) Float32() float32 #61716 -pkg math/rand/v2, method (*Rand) Float64() float64 #61716 -pkg math/rand/v2, method (*Rand) Int() int #61716 -pkg math/rand/v2, method (*Rand) Int32() int32 #61716 -pkg math/rand/v2, method (*Rand) Int32N(int32) int32 #61716 -pkg math/rand/v2, method (*Rand) Int64() int64 #61716 -pkg math/rand/v2, method (*Rand) Int64N(int64) int64 #61716 -pkg math/rand/v2, method (*Rand) IntN(int) int #61716 -pkg math/rand/v2, method (*Rand) NormFloat64() float64 #61716 -pkg math/rand/v2, method (*Rand) Perm(int) []int #61716 -pkg math/rand/v2, method (*Rand) Shuffle(int, func(int, int)) #61716 -pkg math/rand/v2, method (*Rand) Uint32() uint32 #61716 -pkg math/rand/v2, method (*Rand) Uint32N(uint32) uint32 #61716 -pkg math/rand/v2, method (*Rand) Uint64() uint64 #61716 -pkg math/rand/v2, method (*Rand) Uint64N(uint64) uint64 #61716 -pkg math/rand/v2, method (*Rand) UintN(uint) uint #61716 -pkg math/rand/v2, method (*Zipf) Uint64() uint64 #61716 -pkg math/rand/v2, type PCG struct #61716 -pkg math/rand/v2, type Rand struct #61716 -pkg math/rand/v2, type Source interface { Uint64 } #61716 -pkg math/rand/v2, type Source interface, Uint64() uint64 #61716 -pkg math/rand/v2, type Zipf struct #61716 diff --git a/api/next/61758.txt b/api/next/61758.txt deleted file mode 100644 index 35bd224965..0000000000 --- a/api/next/61758.txt +++ /dev/null @@ -1 +0,0 @@ -pkg testing/slogtest, func Run(*testing.T, func(*testing.T) slog.Handler, func(*testing.T) map[string]interface{}) #61758 diff --git a/api/next/61870.txt b/api/next/61870.txt deleted file mode 100644 index 27bb9f6425..0000000000 --- a/api/next/61870.txt +++ /dev/null @@ -1 +0,0 @@ -pkg io, method (*SectionReader) Outer() (ReaderAt, int64, int64) #61870 diff --git a/api/next/61974.txt b/api/next/61974.txt deleted file mode 100644 index d231a62848..0000000000 --- a/api/next/61974.txt +++ /dev/null @@ -1,2 +0,0 @@ -pkg debug/elf, const R_MIPS_PC32 = 248 #61974 -pkg debug/elf, const R_MIPS_PC32 R_MIPS #61974 diff --git a/api/next/62037.txt b/api/next/62037.txt deleted file mode 100644 index 78374214c8..0000000000 --- a/api/next/62037.txt +++ /dev/null @@ -1,2 +0,0 @@ -pkg go/types, method (*Info) PkgNameOf(*ast.ImportSpec) *PkgName #62037 -pkg go/types, method (Checker) PkgNameOf(*ast.ImportSpec) *PkgName #62037 diff --git a/api/next/62039.txt b/api/next/62039.txt deleted file mode 100644 index 8280e87751..0000000000 --- a/api/next/62039.txt +++ /dev/null @@ -1,3 +0,0 @@ -pkg go/version, func Compare(string, string) int #62039 -pkg go/version, func IsValid(string) bool #62039 -pkg go/version, func Lang(string) string #62039 diff --git a/api/next/62418.txt b/api/next/62418.txt deleted file mode 100644 index fd482f4ba8..0000000000 --- a/api/next/62418.txt +++ /dev/null @@ -1 +0,0 @@ -pkg log/slog, func SetLogLoggerLevel(Level) Level #62418 diff --git a/api/next/62605.txt b/api/next/62605.txt deleted file mode 100644 index 1b0e533d02..0000000000 --- a/api/next/62605.txt +++ /dev/null @@ -1 +0,0 @@ -pkg go/types, type Info struct, FileVersions map[*ast.File]string #62605 diff --git a/api/next/63223.txt b/api/next/63223.txt deleted file mode 100644 index 2dcafb872b..0000000000 --- a/api/next/63223.txt +++ /dev/null @@ -1,6 +0,0 @@ -pkg go/types, func NewAlias(*TypeName, Type) *Alias #63223 -pkg go/types, func Unalias(Type) Type #63223 -pkg go/types, method (*Alias) Obj() *TypeName #63223 -pkg go/types, method (*Alias) String() string #63223 -pkg go/types, method (*Alias) Underlying() Type #63223 -pkg go/types, type Alias struct #63223 diff --git a/api/next/63725.txt b/api/next/63725.txt deleted file mode 100644 index ff3e05348b..0000000000 --- a/api/next/63725.txt +++ /dev/null @@ -1,18 +0,0 @@ -pkg debug/elf, const R_LARCH_64_PCREL = 109 #63725 -pkg debug/elf, const R_LARCH_64_PCREL R_LARCH #63725 -pkg debug/elf, const R_LARCH_ADD6 = 105 #63725 -pkg debug/elf, const R_LARCH_ADD6 R_LARCH #63725 -pkg debug/elf, const R_LARCH_ADD_ULEB128 = 107 #63725 -pkg debug/elf, const R_LARCH_ADD_ULEB128 R_LARCH #63725 -pkg debug/elf, const R_LARCH_ALIGN = 102 #63725 -pkg debug/elf, const R_LARCH_ALIGN R_LARCH #63725 -pkg debug/elf, const R_LARCH_CFA = 104 #63725 -pkg debug/elf, const R_LARCH_CFA R_LARCH #63725 -pkg debug/elf, const R_LARCH_DELETE = 101 #63725 -pkg debug/elf, const R_LARCH_DELETE R_LARCH #63725 -pkg debug/elf, const R_LARCH_PCREL20_S2 = 103 #63725 -pkg debug/elf, const R_LARCH_PCREL20_S2 R_LARCH #63725 -pkg debug/elf, const R_LARCH_SUB6 = 106 #63725 -pkg debug/elf, const R_LARCH_SUB6 R_LARCH #63725 -pkg debug/elf, const R_LARCH_SUB_ULEB128 = 108 #63725 -pkg debug/elf, const R_LARCH_SUB_ULEB128 R_LARCH #63725 From 37aed23f51edc81c1c5166c65b7652eca609fad8 Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Wed, 22 Nov 2023 16:36:23 +0000 Subject: [PATCH 099/313] runtime: throw from the systemstack in wirep The exitsyscall path, since the introduction of the new execution tracer, stores a just little bit more data in the exitsyscall stack frame, causing a build failure from exceeding the nosplit limit with '-N -l' set on all packages (like Delve does). One of the paths through which this fails is "throw" from wirep, called by a callee of exitsyscall. By switching to the systemstack on this path, we can avoid hitting the nosplit limit, fixing the build. It's also not totally unreasonable to switch to the systemstack for the throws in this function, since the function has to be nosplit anyway. It gives the throw path a bit more wiggle room to dump information than it otherwise would have. Fixes #64113. Change-Id: I56e94e40614a202b8ac2fdc8b8b731493b74e5d0 Reviewed-on: https://go-review.googlesource.com/c/go/+/544535 LUCI-TryBot-Result: Go LUCI Reviewed-by: Cherry Mui --- src/runtime/proc.go | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/runtime/proc.go b/src/runtime/proc.go index 7a2283e360..6348335804 100644 --- a/src/runtime/proc.go +++ b/src/runtime/proc.go @@ -5769,15 +5769,23 @@ func wirep(pp *p) { gp := getg() if gp.m.p != 0 { - throw("wirep: already in go") + // Call on the systemstack to avoid a nosplit overflow build failure + // on some platforms when built with -N -l. See #64113. + systemstack(func() { + throw("wirep: already in go") + }) } if pp.m != 0 || pp.status != _Pidle { - id := int64(0) - if pp.m != 0 { - id = pp.m.ptr().id - } - print("wirep: p->m=", pp.m, "(", id, ") p->status=", pp.status, "\n") - throw("wirep: invalid p state") + // Call on the systemstack to avoid a nosplit overflow build failure + // on some platforms when built with -N -l. See #64113. + systemstack(func() { + id := int64(0) + if pp.m != 0 { + id = pp.m.ptr().id + } + print("wirep: p->m=", pp.m, "(", id, ") p->status=", pp.status, "\n") + throw("wirep: invalid p state") + }) } gp.m.p.set(pp) pp.m.set(gp.m) From f4cb2ac3517b4f9947b18a19c72470b7d8880dec Mon Sep 17 00:00:00 2001 From: Dmitri Shuralyov Date: Wed, 22 Nov 2023 15:09:57 -0500 Subject: [PATCH 100/313] .github: delete archived issue templates We can get the previous templates back from version control if needed. Delete these unused copies to avoid confusion. For #63970. Change-Id: I44e54da06e259239745f4a493de1dae94cca3755 Reviewed-on: https://go-review.googlesource.com/c/go/+/544536 Reviewed-by: Heschi Kreinick Reviewed-by: Dmitri Shuralyov Auto-Submit: Dmitri Shuralyov LUCI-TryBot-Result: Go LUCI --- .github/ISSUE_TEMPLATE/archived/00-bug.md | 45 ------------- .github/ISSUE_TEMPLATE/archived/01-pkgsite.md | 49 --------------- .../archived/02-pkgsite-removal.md | 39 ------------ .github/ISSUE_TEMPLATE/archived/03-gopls.md | 63 ------------------- .github/ISSUE_TEMPLATE/archived/04-vuln.md | 51 --------------- .../ISSUE_TEMPLATE/archived/10-proposal.md | 13 ---- .../archived/11-language-change.md | 55 ---------------- 7 files changed, 315 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/archived/00-bug.md delete mode 100644 .github/ISSUE_TEMPLATE/archived/01-pkgsite.md delete mode 100644 .github/ISSUE_TEMPLATE/archived/02-pkgsite-removal.md delete mode 100644 .github/ISSUE_TEMPLATE/archived/03-gopls.md delete mode 100644 .github/ISSUE_TEMPLATE/archived/04-vuln.md delete mode 100644 .github/ISSUE_TEMPLATE/archived/10-proposal.md delete mode 100644 .github/ISSUE_TEMPLATE/archived/11-language-change.md diff --git a/.github/ISSUE_TEMPLATE/archived/00-bug.md b/.github/ISSUE_TEMPLATE/archived/00-bug.md deleted file mode 100644 index f056dab7dd..0000000000 --- a/.github/ISSUE_TEMPLATE/archived/00-bug.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -name: Bugs -about: The go command, standard library, or anything else -title: "affected/package: " ---- - - - -### What version of Go are you using (`go version`)? - -

-$ go version
-
-
- -### Does this issue reproduce with the latest release? - - - -### What operating system and processor architecture are you using (`go env`)? - -
go env Output
-$ go env
-
-
- -### What did you do? - - - - - -### What did you expect to see? - - - -### What did you see instead? - - diff --git a/.github/ISSUE_TEMPLATE/archived/01-pkgsite.md b/.github/ISSUE_TEMPLATE/archived/01-pkgsite.md deleted file mode 100644 index 31f0fd16b1..0000000000 --- a/.github/ISSUE_TEMPLATE/archived/01-pkgsite.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -name: Pkg.go.dev bugs or feature requests -about: Issues or feature requests for the documentation site -title: "x/pkgsite: " -labels: pkgsite ---- - - - -### What is the URL of the page with the issue? - - - -### What is your user agent? - - - - - -### Screenshot - - - - - -### What did you do? - - - - - -### What did you expect to see? - - - -### What did you see instead? - - diff --git a/.github/ISSUE_TEMPLATE/archived/02-pkgsite-removal.md b/.github/ISSUE_TEMPLATE/archived/02-pkgsite-removal.md deleted file mode 100644 index 97fe317f5b..0000000000 --- a/.github/ISSUE_TEMPLATE/archived/02-pkgsite-removal.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -name: Pkg.go.dev package removal request -about: Request a package be removed from the documentation site (pkg.go.dev) -title: "x/pkgsite: package removal request for [type path here]" -labels: pkgsite/package-removal ---- - - - -### What is the path of the package that you would like to have removed? - - - - - -### Are you the owner of this package? - - - - - -### What is the reason that you could not retract this package instead? - - - - diff --git a/.github/ISSUE_TEMPLATE/archived/03-gopls.md b/.github/ISSUE_TEMPLATE/archived/03-gopls.md deleted file mode 100644 index a6b9d913c1..0000000000 --- a/.github/ISSUE_TEMPLATE/archived/03-gopls.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -name: Gopls bugs or feature requests -about: Issues or feature requests for the Go language server (gopls) -title: "x/tools/gopls: " -labels: - - gopls - - Tools ---- - - - -### gopls version - - - - - -### go env - - - - -### What did you do? - - - - - -### What did you expect to see? - - - -### What did you see instead? - - - -### Editor and settings - - - - - -### Logs - - - - diff --git a/.github/ISSUE_TEMPLATE/archived/04-vuln.md b/.github/ISSUE_TEMPLATE/archived/04-vuln.md deleted file mode 100644 index 7e129d78db..0000000000 --- a/.github/ISSUE_TEMPLATE/archived/04-vuln.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -name: Go vulnerability management - bugs and feature requests -about: Issues or feature requests about Go vulnerability management -title: "x/vuln: " -labels: "vulncheck or vulndb" ---- - - - -### What version of Go are you using (`go version`)? - -
-$ go version
-
-
- -### Does this issue reproduce at the latest version of golang.org/x/vuln? - - - -### What operating system and processor architecture are you using (`go env`)? - -
go env Output
-$ go env
-
-
- -### What did you do? - - - - - -### What did you expect to see? - - - -### What did you see instead? - - diff --git a/.github/ISSUE_TEMPLATE/archived/10-proposal.md b/.github/ISSUE_TEMPLATE/archived/10-proposal.md deleted file mode 100644 index ab30ddf417..0000000000 --- a/.github/ISSUE_TEMPLATE/archived/10-proposal.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -name: Proposals -about: New external API or other notable changes -title: "proposal: affected/package: " -labels: Proposal ---- - - - - diff --git a/.github/ISSUE_TEMPLATE/archived/11-language-change.md b/.github/ISSUE_TEMPLATE/archived/11-language-change.md deleted file mode 100644 index cc9b82b3b7..0000000000 --- a/.github/ISSUE_TEMPLATE/archived/11-language-change.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -name: Language Change Proposals -about: Changes to the language -title: "proposal: Go 2: " -labels: - - Proposal - - v2 - - LanguageChange ---- - - - -### Author background - -- **Would you consider yourself a novice, intermediate, or experienced Go programmer?** -- **What other languages do you have experience with?** - -### Related proposals - -- **Has this idea, or one like it, been proposed before?** - - **If so, how does this proposal differ?** -- **Does this affect error handling?** - - **If so, how does this differ from previous error handling proposals?** -- **Is this about generics?** - - **If so, how does this relate to the accepted design and other generics proposals?** - -### Proposal - -- **What is the proposed change?** -- **Who does this proposal help, and why?** -- **Please describe as precisely as possible the change to the language.** -- **What would change in the language spec?** -- **Please also describe the change informally, as in a class teaching Go.** -- **Is this change backward compatible?** - - Breaking the Go 1 compatibility guarantee is a large cost and requires a large benefit. - Show example code before and after the change. - - **Before** - - **After** -- **Orthogonality: how does this change interact or overlap with existing features?** -- **Is the goal of this change a performance improvement?** - - **If so, what quantifiable improvement should we expect?** - - **How would we measure it?** - -### Costs - -- **Would this change make Go easier or harder to learn, and why?** -- **What is the cost of this proposal? (Every language change has a cost).** -- **How many tools (such as vet, gopls, gofmt, goimports, etc.) would be affected?** -- **What is the compile time cost?** -- **What is the run time cost?** -- **Can you describe a possible implementation?** -- **Do you have a prototype? (This is not required.)** From 3e67f46d4f7d661504d281bdedbd1432c09bd751 Mon Sep 17 00:00:00 2001 From: Dmitri Shuralyov Date: Wed, 22 Nov 2023 14:31:37 -0500 Subject: [PATCH 101/313] .github: try "import/path: issue title" instead of "affected/package: " The multiple issue templates pre-populate the issue title with a prefix that Go issues customarily have. The "affected/package" phrase is short for "the import path of the affected package". Let's try simplifying it to just "import/path", and also include "issue title" to make the title a more representative template of what the final title should look like. Updates #29839. Change-Id: I9736d24cf3d0a51536ac13dd07dd189fb51da021 Reviewed-on: https://go-review.googlesource.com/c/go/+/544556 LUCI-TryBot-Result: Go LUCI Reviewed-by: Heschi Kreinick Auto-Submit: Dmitri Shuralyov Reviewed-by: Dmitri Shuralyov Reviewed-by: Sean Liao --- .github/ISSUE_TEMPLATE/00-bug.yml | 2 +- .github/ISSUE_TEMPLATE/01-pkgsite.yml | 2 +- .github/ISSUE_TEMPLATE/03-gopls.yml | 2 +- .github/ISSUE_TEMPLATE/04-vuln.yml | 2 +- .github/ISSUE_TEMPLATE/10-proposal.yml | 2 +- .github/ISSUE_TEMPLATE/11-language-change.yml | 2 +- .github/ISSUE_TEMPLATE/12-telemetry.yml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/00-bug.yml b/.github/ISSUE_TEMPLATE/00-bug.yml index 7a87618190..3e64b83655 100644 --- a/.github/ISSUE_TEMPLATE/00-bug.yml +++ b/.github/ISSUE_TEMPLATE/00-bug.yml @@ -3,7 +3,7 @@ name: Bugs description: The go command, standard library, or anything else labels: [ 'kind/bug', 'bug' ] -title: "affected/package: " +title: "import/path: issue title" body: - type: markdown diff --git a/.github/ISSUE_TEMPLATE/01-pkgsite.yml b/.github/ISSUE_TEMPLATE/01-pkgsite.yml index 714bc4198c..fb695857c7 100644 --- a/.github/ISSUE_TEMPLATE/01-pkgsite.yml +++ b/.github/ISSUE_TEMPLATE/01-pkgsite.yml @@ -1,6 +1,6 @@ name: Pkg.go.dev bugs or feature requests description: Issues or feature requests for the documentation site -title: "x/pkgsite: " +title: "x/pkgsite: issue title" labels: ["pkgsite"] body: - type: markdown diff --git a/.github/ISSUE_TEMPLATE/03-gopls.yml b/.github/ISSUE_TEMPLATE/03-gopls.yml index d81c90c65d..83759d65d8 100644 --- a/.github/ISSUE_TEMPLATE/03-gopls.yml +++ b/.github/ISSUE_TEMPLATE/03-gopls.yml @@ -1,6 +1,6 @@ name: Gopls bugs or feature requests description: Issues or feature requests for the Go language server (gopls) -title: "x/tools/gopls: " +title: "x/tools/gopls: issue title" labels: ["gopls", "Tools"] body: - type: markdown diff --git a/.github/ISSUE_TEMPLATE/04-vuln.yml b/.github/ISSUE_TEMPLATE/04-vuln.yml index dd14aeeb97..1759697307 100644 --- a/.github/ISSUE_TEMPLATE/04-vuln.yml +++ b/.github/ISSUE_TEMPLATE/04-vuln.yml @@ -1,6 +1,6 @@ name: Go vulnerability management - bugs and feature requests description: Issues or feature requests about Go vulnerability management -title: "x/vuln: " +title: "x/vuln: issue title" labels: ["vulncheck", "vulndb"] body: - type: markdown diff --git a/.github/ISSUE_TEMPLATE/10-proposal.yml b/.github/ISSUE_TEMPLATE/10-proposal.yml index 8eb6ceb26a..d2a256c5ae 100644 --- a/.github/ISSUE_TEMPLATE/10-proposal.yml +++ b/.github/ISSUE_TEMPLATE/10-proposal.yml @@ -1,6 +1,6 @@ name: Proposals description: New external API or other notable changes -title: "proposal: affected/package: " +title: "proposal: import/path: proposal title" labels: ["Proposal"] body: - type: markdown diff --git a/.github/ISSUE_TEMPLATE/11-language-change.yml b/.github/ISSUE_TEMPLATE/11-language-change.yml index 4965ab80ed..37ba2d7e40 100644 --- a/.github/ISSUE_TEMPLATE/11-language-change.yml +++ b/.github/ISSUE_TEMPLATE/11-language-change.yml @@ -1,7 +1,7 @@ name: Language Change Proposals description: Changes to the language labels: ["Proposal", "v2", "LanguageChange"] -title: "proposal: Go 2: " +title: "proposal: Go 2: proposal title" body: diff --git a/.github/ISSUE_TEMPLATE/12-telemetry.yml b/.github/ISSUE_TEMPLATE/12-telemetry.yml index 7f1a29c634..787a664165 100644 --- a/.github/ISSUE_TEMPLATE/12-telemetry.yml +++ b/.github/ISSUE_TEMPLATE/12-telemetry.yml @@ -1,6 +1,6 @@ name: Go Telemetry Proposals description: New telemetry counter or update on an existing one -title: "x/telemetry/config: " +title: "x/telemetry/config: issue title" labels: ["Telemetry-Proposal"] projects: ["golang/29"] body: From 0c7e5d3b8db6668d6bdb16410d59c0ae4133400a Mon Sep 17 00:00:00 2001 From: cui fliter Date: Fri, 3 Nov 2023 19:18:00 +0800 Subject: [PATCH 102/313] path: add available godoc link Change-Id: I6d40a59cde4c3f1d5094f5126fdbc1195285195f Reviewed-on: https://go-review.googlesource.com/c/go/+/539577 Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI Reviewed-by: Rob Pike Reviewed-by: Dmitri Shuralyov Auto-Submit: Dmitri Shuralyov --- src/path/filepath/match.go | 8 ++++---- src/path/filepath/path.go | 34 +++++++++++++++++----------------- src/path/match.go | 2 +- src/path/path.go | 2 +- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/path/filepath/match.go b/src/path/filepath/match.go index b5cc4b8cf3..12f0bfa7d3 100644 --- a/src/path/filepath/match.go +++ b/src/path/filepath/match.go @@ -35,7 +35,7 @@ var ErrBadPattern = errors.New("syntax error in pattern") // lo '-' hi matches character c for lo <= c <= hi // // Match requires pattern to match all of name, not just a substring. -// The only possible returned error is ErrBadPattern, when pattern +// The only possible returned error is [ErrBadPattern], when pattern // is malformed. // // On Windows, escaping is disabled. Instead, '\\' is treated as @@ -233,11 +233,11 @@ func getEsc(chunk string) (r rune, nchunk string, err error) { // Glob returns the names of all files matching pattern or nil // if there is no matching file. The syntax of patterns is the same -// as in Match. The pattern may describe hierarchical names such as -// /usr/*/bin/ed (assuming the Separator is '/'). +// as in [Match]. The pattern may describe hierarchical names such as +// /usr/*/bin/ed (assuming the [Separator] is '/'). // // Glob ignores file system errors such as I/O errors reading directories. -// The only possible returned error is ErrBadPattern, when pattern +// The only possible returned error is [ErrBadPattern], when pattern // is malformed. func Glob(pattern string) (matches []string, err error) { return globWithLimit(pattern, 0) diff --git a/src/path/filepath/path.go b/src/path/filepath/path.go index 3d693f840a..075cea848e 100644 --- a/src/path/filepath/path.go +++ b/src/path/filepath/path.go @@ -73,7 +73,7 @@ const ( // by purely lexical processing. It applies the following rules // iteratively until no further processing can be done: // -// 1. Replace multiple Separator elements with a single one. +// 1. Replace multiple [Separator] elements with a single one. // 2. Eliminate each . path name element (the current directory). // 3. Eliminate each inner .. path name element (the parent directory) // along with the non-.. element that precedes it. @@ -231,7 +231,7 @@ func FromSlash(path string) string { return strings.ReplaceAll(path, "/", string(Separator)) } -// SplitList splits a list of paths joined by the OS-specific ListSeparator, +// SplitList splits a list of paths joined by the OS-specific [ListSeparator], // usually found in PATH or GOPATH environment variables. // Unlike strings.Split, SplitList returns an empty slice when passed an empty // string. @@ -239,7 +239,7 @@ func SplitList(path string) []string { return splitList(path) } -// Split splits path immediately following the final Separator, +// Split splits path immediately following the final [Separator], // separating it into a directory and file name component. // If there is no Separator in path, Split returns an empty dir // and file set to path. @@ -254,7 +254,7 @@ func Split(path string) (dir, file string) { } // Join joins any number of path elements into a single path, -// separating them with an OS specific Separator. Empty elements +// separating them with an OS specific [Separator]. Empty elements // are ignored. The result is Cleaned. However, if the argument // list is empty or all its elements are empty, Join returns // an empty string. @@ -281,7 +281,7 @@ func Ext(path string) string { // links. // If path is relative the result will be relative to the current directory, // unless one of the components is an absolute symbolic link. -// EvalSymlinks calls Clean on the result. +// EvalSymlinks calls [Clean] on the result. func EvalSymlinks(path string) (string, error) { return evalSymlinks(path) } @@ -290,7 +290,7 @@ func EvalSymlinks(path string) (string, error) { // If the path is not absolute it will be joined with the current // working directory to turn it into an absolute path. The absolute // path name for a given file is not guaranteed to be unique. -// Abs calls Clean on the result. +// Abs calls [Clean] on the result. func Abs(path string) (string, error) { return abs(path) } @@ -308,12 +308,12 @@ func unixAbs(path string) (string, error) { // Rel returns a relative path that is lexically equivalent to targpath when // joined to basepath with an intervening separator. That is, -// Join(basepath, Rel(basepath, targpath)) is equivalent to targpath itself. +// [Join](basepath, Rel(basepath, targpath)) is equivalent to targpath itself. // On success, the returned path will always be relative to basepath, // even if basepath and targpath share no elements. // An error is returned if targpath can't be made relative to basepath or if // knowing the current working directory would be necessary to compute it. -// Rel calls Clean on the result. +// Rel calls [Clean] on the result. func Rel(basepath, targpath string) (string, error) { baseVol := VolumeName(basepath) targVol := VolumeName(targpath) @@ -396,7 +396,7 @@ var SkipDir error = fs.SkipDir // as an error by any function. var SkipAll error = fs.SkipAll -// WalkFunc is the type of the function called by Walk to visit each +// WalkFunc is the type of the function called by [Walk] to visit each // file or directory. // // The path argument contains the argument to Walk as a prefix. @@ -412,9 +412,9 @@ var SkipAll error = fs.SkipAll // The info argument is the fs.FileInfo for the named path. // // The error result returned by the function controls how Walk continues. -// If the function returns the special value SkipDir, Walk skips the +// If the function returns the special value [SkipDir], Walk skips the // current directory (path if info.IsDir() is true, otherwise path's -// parent directory). If the function returns the special value SkipAll, +// parent directory). If the function returns the special value [SkipAll], // Walk skips all remaining files and directories. Otherwise, if the function // returns a non-nil error, Walk stops entirely and returns that error. // @@ -425,14 +425,14 @@ var SkipAll error = fs.SkipAll // // Walk calls the function with a non-nil err argument in two cases. // -// First, if an os.Lstat on the root directory or any directory or file +// First, if an [os.Lstat] on the root directory or any directory or file // in the tree fails, Walk calls the function with path set to that // directory or file's path, info set to nil, and err set to the error // from os.Lstat. // // Second, if a directory's Readdirnames method fails, Walk calls the // function with path set to the directory's path, info, set to an -// fs.FileInfo describing the directory, and err set to the error from +// [fs.FileInfo] describing the directory, and err set to the error from // Readdirnames. type WalkFunc func(path string, info fs.FileInfo, err error) error @@ -514,7 +514,7 @@ func walk(path string, info fs.FileInfo, walkFn WalkFunc) error { // directory in the tree, including root. // // All errors that arise visiting files and directories are filtered by fn: -// see the fs.WalkDirFunc documentation for details. +// see the [fs.WalkDirFunc] documentation for details. // // The files are walked in lexical order, which makes the output deterministic // but requires WalkDir to read an entire directory into memory before proceeding @@ -542,7 +542,7 @@ func WalkDir(root string, fn fs.WalkDirFunc) error { // directory in the tree, including root. // // All errors that arise visiting files and directories are filtered by fn: -// see the WalkFunc documentation for details. +// see the [WalkFunc] documentation for details. // // The files are walked in lexical order, which makes the output deterministic // but requires Walk to read an entire directory into memory before proceeding @@ -550,7 +550,7 @@ func WalkDir(root string, fn fs.WalkDirFunc) error { // // Walk does not follow symbolic links. // -// Walk is less efficient than WalkDir, introduced in Go 1.16, +// Walk is less efficient than [WalkDir], introduced in Go 1.16, // which avoids calling os.Lstat on every visited file or directory. func Walk(root string, fn WalkFunc) error { info, err := os.Lstat(root) @@ -611,7 +611,7 @@ func Base(path string) string { } // Dir returns all but the last element of path, typically the path's directory. -// After dropping the final element, Dir calls Clean on the path and trailing +// After dropping the final element, Dir calls [Clean] on the path and trailing // slashes are removed. // If the path is empty, Dir returns ".". // If the path consists entirely of separators, Dir returns a single separator. diff --git a/src/path/match.go b/src/path/match.go index 673bbc7ff6..d8b6809568 100644 --- a/src/path/match.go +++ b/src/path/match.go @@ -32,7 +32,7 @@ var ErrBadPattern = errors.New("syntax error in pattern") // lo '-' hi matches character c for lo <= c <= hi // // Match requires pattern to match all of name, not just a substring. -// The only possible returned error is ErrBadPattern, when pattern +// The only possible returned error is [ErrBadPattern], when pattern // is malformed. func Match(pattern, name string) (matched bool, err error) { Pattern: diff --git a/src/path/path.go b/src/path/path.go index 50065ac731..5149a92c4f 100644 --- a/src/path/path.go +++ b/src/path/path.go @@ -214,7 +214,7 @@ func IsAbs(path string) bool { } // Dir returns all but the last element of path, typically the path's directory. -// After dropping the final element using Split, the path is Cleaned and trailing +// After dropping the final element using [Split], the path is Cleaned and trailing // slashes are removed. // If the path is empty, Dir returns ".". // If the path consists entirely of slashes followed by non-slash bytes, Dir From 0d018b49e33b1383dc0ae5cc968e800dffeeaf7d Mon Sep 17 00:00:00 2001 From: cui fliter Date: Sat, 18 Nov 2023 13:51:35 +0800 Subject: [PATCH 103/313] all: fix field names Change-Id: I3ad7a50707486ebdbbd676b3581df6e3ed0fd3a1 Reviewed-on: https://go-review.googlesource.com/c/go/+/543476 Auto-Submit: Dmitri Shuralyov TryBot-Result: Gopher Robot Reviewed-by: Keith Randall Reviewed-by: Keith Randall Reviewed-by: Dmitri Shuralyov Run-TryBot: shuang cui --- src/cmd/compile/internal/pgo/irgraph.go | 2 +- src/cmd/compile/internal/ssa/func.go | 2 +- src/cmd/compile/internal/ssa/prove.go | 7 ++++--- src/cmd/go/internal/modget/query.go | 2 +- src/database/sql/sql.go | 4 ++-- src/go/internal/gcimporter/ureader.go | 2 +- src/go/parser/parser_test.go | 2 +- src/runtime/mgcscavenge.go | 2 +- src/runtime/runtime2.go | 2 +- 9 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/cmd/compile/internal/pgo/irgraph.go b/src/cmd/compile/internal/pgo/irgraph.go index 7a7cd20f2b..54ac650272 100644 --- a/src/cmd/compile/internal/pgo/irgraph.go +++ b/src/cmd/compile/internal/pgo/irgraph.go @@ -129,7 +129,7 @@ type Profile struct { // the percentage threshold for hot/cold partitioning. TotalWeight int64 - // EdgeMap contains all unique call edges in the profile and their + // NamedEdgeMap contains all unique call edges in the profile and their // edge weight. NamedEdgeMap NamedEdgeMap diff --git a/src/cmd/compile/internal/ssa/func.go b/src/cmd/compile/internal/ssa/func.go index e94cb77f92..529c119dc3 100644 --- a/src/cmd/compile/internal/ssa/func.go +++ b/src/cmd/compile/internal/ssa/func.go @@ -64,7 +64,7 @@ type Func struct { // RegArgs is a slice of register-memory pairs that must be spilled and unspilled in the uncommon path of function entry. RegArgs []Spill - // AuxCall describing parameters and results for this function. + // OwnAux describes parameters and results for this function. OwnAux *AuxCall freeValues *Value // free Values linked by argstorage[0]. All other fields except ID are 0/nil. diff --git a/src/cmd/compile/internal/ssa/prove.go b/src/cmd/compile/internal/ssa/prove.go index 91f5fbe765..842719fb4c 100644 --- a/src/cmd/compile/internal/ssa/prove.go +++ b/src/cmd/compile/internal/ssa/prove.go @@ -100,10 +100,11 @@ func (d domain) String() string { } type pair struct { - v, w *Value // a pair of values, ordered by ID. + // a pair of values, ordered by ID. // v can be nil, to mean the zero value. // for booleans the zero value (v == nil) is false. - d domain + v, w *Value + d domain } // fact is a pair plus a relation for that pair. @@ -165,7 +166,7 @@ type factsTable struct { facts map[pair]relation // current known set of relation stack []fact // previous sets of relations - // order is a couple of partial order sets that record information + // order* is a couple of partial order sets that record information // about relations between SSA values in the signed and unsigned // domain. orderS *poset diff --git a/src/cmd/go/internal/modget/query.go b/src/cmd/go/internal/modget/query.go index b78c1c4621..498ba6c2ff 100644 --- a/src/cmd/go/internal/modget/query.go +++ b/src/cmd/go/internal/modget/query.go @@ -55,7 +55,7 @@ type query struct { // path. matchWildcard func(path string) bool - // canMatchWildcard, if non-nil, reports whether the module with the given + // canMatchWildcardInModule, if non-nil, reports whether the module with the given // path could lexically contain a package matching pattern, which must be a // wildcard. canMatchWildcardInModule func(mPath string) bool diff --git a/src/database/sql/sql.go b/src/database/sql/sql.go index 44b202192a..4f1197dc6e 100644 --- a/src/database/sql/sql.go +++ b/src/database/sql/sql.go @@ -1979,9 +1979,9 @@ type Conn struct { // Once done, all operations fail with ErrConnDone. done atomic.Bool - // releaseConn is a cache of c.closemuRUnlockCondReleaseConn + releaseConnOnce sync.Once + // releaseConnCache is a cache of c.closemuRUnlockCondReleaseConn // to save allocations in a call to grabConn. - releaseConnOnce sync.Once releaseConnCache releaseConn } diff --git a/src/go/internal/gcimporter/ureader.go b/src/go/internal/gcimporter/ureader.go index ac85a415b1..5397a2796f 100644 --- a/src/go/internal/gcimporter/ureader.go +++ b/src/go/internal/gcimporter/ureader.go @@ -118,7 +118,7 @@ type readerDict struct { // tparams is a slice of the constructed TypeParams for the element. tparams []*types.TypeParam - // devived is a slice of types derived from tparams, which may be + // derived is a slice of types derived from tparams, which may be // instantiated while reading the current element. derived []derivedInfo derivedTypes []types.Type // lazily instantiated from derived diff --git a/src/go/parser/parser_test.go b/src/go/parser/parser_test.go index e72c03a3d4..43b3416b27 100644 --- a/src/go/parser/parser_test.go +++ b/src/go/parser/parser_test.go @@ -573,7 +573,7 @@ type x int // comment var parseDepthTests = []struct { name string format string - // multiplier is used when a single statement may result in more than one + // parseMultiplier is used when a single statement may result in more than one // change in the depth level, for instance "1+(..." produces a BinaryExpr // followed by a UnaryExpr, which increments the depth twice. The test // case comment explains which nodes are triggering the multiple depth diff --git a/src/runtime/mgcscavenge.go b/src/runtime/mgcscavenge.go index e6725b4622..86c2103f18 100644 --- a/src/runtime/mgcscavenge.go +++ b/src/runtime/mgcscavenge.go @@ -307,7 +307,7 @@ type scavengerState struct { // See sleepRatio for more details. sleepController piController - // cooldown is the time left in nanoseconds during which we avoid + // controllerCooldown is the time left in nanoseconds during which we avoid // using the controller and we hold sleepRatio at a conservative // value. Used if the controller's assumptions fail to hold. controllerCooldown int64 diff --git a/src/runtime/runtime2.go b/src/runtime/runtime2.go index 6d40c7c466..01f1a50670 100644 --- a/src/runtime/runtime2.go +++ b/src/runtime/runtime2.go @@ -857,7 +857,7 @@ type schedt struct { sysmonwait atomic.Bool sysmonnote note - // safepointFn should be called on each P at the next GC + // safePointFn should be called on each P at the next GC // safepoint if p.runSafePointFn is set. safePointFn func(*p) safePointWait int32 From d961b12be9001cf8dbf8f52847607dbf84d94f8d Mon Sep 17 00:00:00 2001 From: Jes Cok Date: Fri, 24 Nov 2023 10:02:34 +0000 Subject: [PATCH 104/313] io/fs, os: unify PathError.Path for dirFS.{ReadFile, ReadDir} Fixes #64366 Change-Id: Ie78ab2cb9e11c0766665cd37fd7a26d36a1c24fa GitHub-Last-Rev: 3cb3bb84a0ccccc88ba30258f52f699ac1364a7b GitHub-Pull-Request: golang/go#64372 Reviewed-on: https://go-review.googlesource.com/c/go/+/544835 Reviewed-by: Dmitri Shuralyov Run-TryBot: Jes Cok LUCI-TryBot-Result: Go LUCI Auto-Submit: Bryan Mills TryBot-Result: Gopher Robot Reviewed-by: Bryan Mills --- src/io/fs/readdir_test.go | 18 ++++++++++++++++++ src/io/fs/readfile_test.go | 10 ++++++++++ src/os/file.go | 20 ++++++++++++++++++-- 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/io/fs/readdir_test.go b/src/io/fs/readdir_test.go index a2b2c121ff..4c409ae7a0 100644 --- a/src/io/fs/readdir_test.go +++ b/src/io/fs/readdir_test.go @@ -5,6 +5,7 @@ package fs_test import ( + "errors" . "io/fs" "os" "testing" @@ -91,3 +92,20 @@ func TestFileInfoToDirEntry(t *testing.T) { }) } } + +func errorPath(err error) string { + var perr *PathError + if !errors.As(err, &perr) { + return "" + } + return perr.Path +} + +func TestReadDirPath(t *testing.T) { + fsys := os.DirFS(t.TempDir()) + _, err1 := ReadDir(fsys, "non-existent") + _, err2 := ReadDir(struct{ FS }{fsys}, "non-existent") + if s1, s2 := errorPath(err1), errorPath(err2); s1 != s2 { + t.Fatalf("s1: %s != s2: %s", s1, s2) + } +} diff --git a/src/io/fs/readfile_test.go b/src/io/fs/readfile_test.go index 07219c1445..3c521f6142 100644 --- a/src/io/fs/readfile_test.go +++ b/src/io/fs/readfile_test.go @@ -6,6 +6,7 @@ package fs_test import ( . "io/fs" + "os" "testing" "testing/fstest" "time" @@ -57,3 +58,12 @@ func TestReadFile(t *testing.T) { t.Fatalf(`ReadFile(sub(.), "hello.txt") = %q, %v, want %q, nil`, data, err, "hello, world") } } + +func TestReadFilePath(t *testing.T) { + fsys := os.DirFS(t.TempDir()) + _, err1 := ReadFile(fsys, "non-existent") + _, err2 := ReadFile(struct{ FS }{fsys}, "non-existent") + if s1, s2 := errorPath(err1), errorPath(err2); s1 != s2 { + t.Fatalf("s1: %s != s2: %s", s1, s2) + } +} diff --git a/src/os/file.go b/src/os/file.go index 37a30ccf04..6fd0550eeb 100644 --- a/src/os/file.go +++ b/src/os/file.go @@ -690,7 +690,15 @@ func (dir dirFS) ReadFile(name string) ([]byte, error) { if err != nil { return nil, &PathError{Op: "readfile", Path: name, Err: err} } - return ReadFile(fullname) + b, err := ReadFile(fullname) + if err != nil { + if e, ok := err.(*PathError); ok { + // See comment in dirFS.Open. + e.Path = name + } + return nil, err + } + return b, nil } // ReadDir reads the named directory, returning all its directory entries sorted @@ -700,7 +708,15 @@ func (dir dirFS) ReadDir(name string) ([]DirEntry, error) { if err != nil { return nil, &PathError{Op: "readdir", Path: name, Err: err} } - return ReadDir(fullname) + entries, err := ReadDir(fullname) + if err != nil { + if e, ok := err.(*PathError); ok { + // See comment in dirFS.Open. + e.Path = name + } + return nil, err + } + return entries, nil } func (dir dirFS) Stat(name string) (fs.FileInfo, error) { From 6317fb41e920cc593620d4b9a55376472fc02c07 Mon Sep 17 00:00:00 2001 From: Lasse Folger Date: Fri, 24 Nov 2023 15:30:07 +0000 Subject: [PATCH 105/313] Revert "testing: simplify concurrency and cleanup logic" reverts CL 506755 Reason for revert: This leads to deadlocks of tests in Google internal testing For #64402 Change-Id: I78329fc9dcc2377e7e880b264ac1d18d577ef99a Reviewed-on: https://go-review.googlesource.com/c/go/+/544895 Auto-Submit: Bryan Mills Auto-Submit: Lasse Folger Reviewed-by: Bryan Mills TryBot-Result: Gopher Robot Run-TryBot: Bryan Mills --- src/cmd/cgo/internal/test/callback_windows.go | 4 +- src/testing/benchmark.go | 94 ++-- src/testing/fuzz.go | 207 ++++----- src/testing/panic_test.go | 91 ++-- src/testing/sub_test.go | 131 +++++- src/testing/testing.go | 414 +++++++++--------- 6 files changed, 502 insertions(+), 439 deletions(-) diff --git a/src/cmd/cgo/internal/test/callback_windows.go b/src/cmd/cgo/internal/test/callback_windows.go index b4e0867e77..95e97c9af9 100644 --- a/src/cmd/cgo/internal/test/callback_windows.go +++ b/src/cmd/cgo/internal/test/callback_windows.go @@ -29,7 +29,7 @@ USHORT backtrace(ULONG FramesToCapture, PVOID *BackTrace) { } ControlPc = context.Rip; - // Check if we left the user range. + // Check if we left the user range. if (ControlPc < 0x10000) { break; } @@ -89,7 +89,7 @@ func testCallbackCallersSEH(t *testing.T) { "test.testCallbackCallersSEH", "test.TestCallbackCallersSEH", "testing.tRunner", - "testing.(*T).Run.gowrap3", + "testing.(*T).Run.gowrap1", "runtime.goexit", } pc := make([]uintptr, 100) diff --git a/src/testing/benchmark.go b/src/testing/benchmark.go index da20c1c0c8..9491213ef1 100644 --- a/src/testing/benchmark.go +++ b/src/testing/benchmark.go @@ -176,10 +176,6 @@ func (b *B) ReportAllocs() { // runN runs a single benchmark for the specified number of iterations. func (b *B) runN(n int) { - if b.done { - panic("testing: internal error: runN when benchmark is already done") - } - benchmarkLock.Lock() defer benchmarkLock.Unlock() defer func() { @@ -200,46 +196,46 @@ func (b *B) runN(n int) { b.previousDuration = b.duration } -// run1 runs the first iteration of benchFunc. -// -// If no more iterations of this benchmark should be done, run1 sets b.done. -func (b *B) run1() { +// run1 runs the first iteration of benchFunc. It reports whether more +// iterations of this benchmarks should be run. +func (b *B) run1() bool { if ctx := b.context; ctx != nil { // Extend maxLen, if needed. if n := len(b.name) + ctx.extLen + 1; n > ctx.maxLen { ctx.maxLen = n + 8 // Add additional slack to avoid too many jumps in size. } } - - runOneDone := make(chan struct{}) go func() { // Signal that we're done whether we return normally // or by FailNow's runtime.Goexit. - defer close(runOneDone) + defer func() { + b.signal <- true + }() + b.runN(1) }() - <-runOneDone - + <-b.signal if b.failed { fmt.Fprintf(b.w, "%s--- FAIL: %s\n%s", b.chatty.prefix(), b.name, b.output) - b.done = true - close(b.doneOrParallel) - return + return false } // Only print the output if we know we are not going to proceed. // Otherwise it is printed in processBench. - if b.hasSub.Load() || b.skipped { + b.mu.RLock() + finished := b.finished + b.mu.RUnlock() + if b.hasSub.Load() || finished { tag := "BENCH" if b.skipped { tag = "SKIP" } - if b.chatty != nil && (len(b.output) > 0 || b.skipped) { + if b.chatty != nil && (len(b.output) > 0 || finished) { b.trimOutput() fmt.Fprintf(b.w, "%s--- %s: %s\n%s", b.chatty.prefix(), tag, b.name, b.output) } - b.done = true - close(b.doneOrParallel) + return false } + return true } var labelsOnce sync.Once @@ -266,10 +262,9 @@ func (b *B) run() { } } -// doBench calls b.launch in a separate goroutine and waits for it to complete. func (b *B) doBench() BenchmarkResult { go b.launch() - <-b.doneOrParallel + <-b.signal return b.result } @@ -281,10 +276,7 @@ func (b *B) launch() { // Signal that we're done whether we return normally // or by FailNow's runtime.Goexit. defer func() { - b.result = BenchmarkResult{b.N, b.duration, b.bytes, b.netAllocs, b.netBytes, b.extra} - b.setRanLeaf() - b.done = true - close(b.doneOrParallel) + b.signal <- true }() // Run the benchmark for at least the specified amount of time. @@ -324,6 +316,7 @@ func (b *B) launch() { b.runN(int(n)) } } + b.result = BenchmarkResult{b.N, b.duration, b.bytes, b.netAllocs, b.netBytes, b.extra} } // Elapsed returns the measured elapsed time of the benchmark. @@ -557,7 +550,6 @@ func runBenchmarks(importPath string, matchString func(pat, str string) (bool, e main.chatty = newChattyPrinter(main.w) } main.runN(1) - main.done = true return !main.failed } @@ -576,21 +568,18 @@ func (ctx *benchContext) processBench(b *B) { if i > 0 || j > 0 { b = &B{ common: common{ - doneOrParallel: make(chan struct{}), - name: b.name, - w: b.w, - chatty: b.chatty, - bench: true, + signal: make(chan bool), + name: b.name, + w: b.w, + chatty: b.chatty, + bench: true, }, benchFunc: b.benchFunc, benchTime: b.benchTime, } b.run1() } - var r BenchmarkResult - if !b.done { - r = b.doBench() - } + r := b.doBench() if b.failed { // The output could be very long here, but probably isn't. // We print it all, regardless, because we don't want to trim the reason @@ -633,13 +622,6 @@ var hideStdoutForTesting = false // A subbenchmark is like any other benchmark. A benchmark that calls Run at // least once will not be measured itself and will be called once with N=1. func (b *B) Run(name string, f func(b *B)) bool { - if b.previousN > 0 { - // If the benchmark calls Run we will only call it once with N=1. - // If it doesn't call Run the first time we try it, it must not - // call run on subsequent invocations either. - panic("testing: unexpected call to B.Run during iteration") - } - // Since b has subbenchmarks, we will no longer run it as a benchmark itself. // Release the lock and acquire it on exit to ensure locks stay paired. b.hasSub.Store(true) @@ -657,14 +639,14 @@ func (b *B) Run(name string, f func(b *B)) bool { n := runtime.Callers(2, pc[:]) sub := &B{ common: common{ - doneOrParallel: make(chan struct{}), - name: benchName, - parent: &b.common, - level: b.level + 1, - creator: pc[:n], - w: b.w, - chatty: b.chatty, - bench: true, + signal: make(chan bool), + name: benchName, + parent: &b.common, + level: b.level + 1, + creator: pc[:n], + w: b.w, + chatty: b.chatty, + bench: true, }, importPath: b.importPath, benchFunc: f, @@ -697,8 +679,7 @@ func (b *B) Run(name string, f func(b *B)) bool { } } - sub.run1() - if !sub.done { + if sub.run1() { sub.run() } b.add(sub.result) @@ -842,14 +823,13 @@ func (b *B) SetParallelism(p int) { func Benchmark(f func(b *B)) BenchmarkResult { b := &B{ common: common{ - doneOrParallel: make(chan struct{}), - w: discard{}, + signal: make(chan bool), + w: discard{}, }, benchFunc: f, benchTime: benchTime, } - b.run1() - if !b.done { + if b.run1() { b.run() } return b.result diff --git a/src/testing/fuzz.go b/src/testing/fuzz.go index 5a3117b1e0..d50ea793e0 100644 --- a/src/testing/fuzz.go +++ b/src/testing/fuzz.go @@ -70,6 +70,10 @@ type F struct { fuzzContext *fuzzContext testContext *testContext + // inFuzzFn is true when the fuzz function is running. Most F methods cannot + // be called when inFuzzFn is true. + inFuzzFn bool + // corpus is a set of seed corpus entries, added with F.Add and loaded // from testdata. corpus []corpusEntry @@ -296,13 +300,13 @@ func (f *F) Fuzz(ff any) { n := runtime.Callers(2, pc[:]) t := &T{ common: common{ - runParallel: make(chan struct{}), - doneOrParallel: make(chan struct{}), - name: testName, - parent: &f.common, - level: f.level + 1, - creator: pc[:n], - chatty: f.chatty, + barrier: make(chan bool), + signal: make(chan bool), + name: testName, + parent: &f.common, + level: f.level + 1, + creator: pc[:n], + chatty: f.chatty, }, context: f.testContext, } @@ -314,7 +318,7 @@ func (f *F) Fuzz(ff any) { if t.chatty != nil { t.chatty.Updatef(t.name, "=== RUN %s\n", t.name) } - f.inFuzzFn = true + f.common.inFuzzFn, f.inFuzzFn = true, true go tRunner(t, func(t *T) { args := []reflect.Value{reflect.ValueOf(t)} for _, v := range e.Values { @@ -330,11 +334,11 @@ func (f *F) Fuzz(ff any) { } fn.Call(args) }) - <-t.doneOrParallel + <-t.signal if t.chatty != nil && t.chatty.json { t.chatty.Updatef(t.parent.name, "=== NAME %s\n", t.parent.name) } - f.inFuzzFn = false + f.common.inFuzzFn, f.inFuzzFn = false, false return !t.Failed() } @@ -506,12 +510,12 @@ func runFuzzTests(deps testDeps, fuzzTests []InternalFuzzTarget, deadline time.T } f := &F{ common: common{ - doneOrParallel: make(chan struct{}), - runParallel: make(chan struct{}), - name: testName, - parent: &root, - level: root.level + 1, - chatty: root.chatty, + signal: make(chan bool), + barrier: make(chan bool), + name: testName, + parent: &root, + level: root.level + 1, + chatty: root.chatty, }, testContext: tctx, fuzzContext: fctx, @@ -521,12 +525,12 @@ func runFuzzTests(deps testDeps, fuzzTests []InternalFuzzTarget, deadline time.T f.chatty.Updatef(f.name, "=== RUN %s\n", f.name) } go fRunner(f, ft.Fn) - <-f.doneOrParallel + <-f.signal if f.chatty != nil && f.chatty.json { f.chatty.Updatef(f.parent.name, "=== NAME %s\n", f.parent.name) } ok = ok && !f.Failed() - ran = ran || f.ranAnyLeaf + ran = ran || f.ran } if !ran { // There were no tests to run on this iteration. @@ -588,12 +592,12 @@ func runFuzzing(deps testDeps, fuzzTests []InternalFuzzTarget) (ok bool) { f := &F{ common: common{ - doneOrParallel: make(chan struct{}), - runParallel: nil, // T.Parallel has no effect when fuzzing. - name: testName, - parent: &root, - level: root.level + 1, - chatty: root.chatty, + signal: make(chan bool), + barrier: nil, // T.Parallel has no effect when fuzzing. + name: testName, + parent: &root, + level: root.level + 1, + chatty: root.chatty, }, fuzzContext: fctx, testContext: tctx, @@ -603,7 +607,7 @@ func runFuzzing(deps testDeps, fuzzTests []InternalFuzzTarget) (ok bool) { f.chatty.Updatef(f.name, "=== RUN %s\n", f.name) } go fRunner(f, fuzzTest.Fn) - <-f.doneOrParallel + <-f.signal if f.chatty != nil { f.chatty.Updatef(f.parent.name, "=== NAME %s\n", f.parent.name) } @@ -621,12 +625,6 @@ func runFuzzing(deps testDeps, fuzzTests []InternalFuzzTarget) (ok bool) { // simplifications are made. We also require that F.Fuzz, F.Skip, or F.Fail is // called. func fRunner(f *F, fn func(*F)) { - // TODO(bcmills): This function has a lot of code and structure in common with - // tRunner. At some point it would probably be good to factor out the common - // parts to make the differences easier to spot. - - returned := false - // When this goroutine is done, either because runtime.Goexit was called, a // panic started, or fn returned normally, record the duration and send // t.signal, indicating the fuzz test is done. @@ -638,93 +636,96 @@ func fRunner(f *F, fn func(*F)) { // Unfortunately, recovering here adds stack frames, but the location of // the original panic should still be // clear. - - panicVal := recover() - if panicVal == nil && !f.skipped && !f.failed { - if !returned { - panicVal = errNilPanicOrGoexit - } else if !f.fuzzCalled { + f.checkRaces() + if f.Failed() { + numFailed.Add(1) + } + err := recover() + if err == nil { + f.mu.RLock() + fuzzNotCalled := !f.fuzzCalled && !f.skipped && !f.failed + if !f.finished && !f.skipped && !f.failed { + err = errNilPanicOrGoexit + } + f.mu.RUnlock() + if fuzzNotCalled && err == nil { f.Error("returned without calling F.Fuzz, F.Fail, or F.Skip") } } - if panicVal != nil { - // Mark the test as failed so that Cleanup functions can see its correct status. - f.Fail() - } else if f.runParallel != nil { - // Unblock inputs that called T.Parallel while running the seed corpus. - // This only affects fuzz tests run as normal tests. - // While fuzzing, T.Parallel has no effect, so f.parallelSubtests is empty - // and this is a no-op. - - // Check for races before starting parallel subtests, so that if a - // parallel subtest *also* triggers a data race we will report the two - // races to the two tests and not attribute all of them to the subtest. - f.checkRaces() - - close(f.runParallel) - f.parallelSubtests.Wait() - } - // Use a deferred call to ensure that we report that the test is - // complete even if a cleanup function calls t.FailNow. See issue 41355. + // complete even if a cleanup function calls F.FailNow. See issue 41355. + didPanic := false defer func() { - cleanupPanic := recover() - if panicVal == nil { - panicVal = cleanupPanic + if !didPanic { + // Only report that the test is complete if it doesn't panic, + // as otherwise the test binary can exit before the panic is + // reported to the user. See issue 41479. + f.signal <- true } - - // Only report that the test is complete if it doesn't panic, - // as otherwise the test binary can exit before the panic is - // reported to the user. See issue 41479. - if panicVal != nil { - // Flush the output log up to the root before dying. - for root := &f.common; root.parent != nil; root = root.parent { - root.mu.Lock() - root.duration += time.Since(root.start) - d := root.duration - root.mu.Unlock() - root.flushToParent(root.name, "--- FAIL: %s (%s)\n", root.name, fmtDuration(d)) - - // Since the parent will never finish running, do its cleanup now. - // Run the cleanup in a fresh goroutine in case it calls runtime.Goexit, - // which we cannot recover. - cleanupDone := make(chan struct{}) - go func() { - defer close(cleanupDone) - if r := root.parent.runCleanup(recoverAndReturnPanic); r != nil { - fmt.Fprintf(root.parent.w, "cleanup panicked with %v", r) - } - }() - <-cleanupDone - } - panic(panicVal) - } - - f.checkRaces() - f.duration += time.Since(f.start) - f.report() - - // Do not lock f.done to allow race detector to detect race in case - // the user does not appropriately synchronize a goroutine. - f.done = true - if f.parent != nil && !f.hasSub.Load() { - f.setRanLeaf() - } - - running.Delete(f.name) - close(f.doneOrParallel) }() - f.runCleanup(normalPanic) + // If we recovered a panic or inappropriate runtime.Goexit, fail the test, + // flush the output log up to the root, then panic. + doPanic := func(err any) { + f.Fail() + if r := f.runCleanup(recoverAndReturnPanic); r != nil { + f.Logf("cleanup panicked with %v", r) + } + for root := &f.common; root.parent != nil; root = root.parent { + root.mu.Lock() + root.duration += time.Since(root.start) + d := root.duration + root.mu.Unlock() + root.flushToParent(root.name, "--- FAIL: %s (%s)\n", root.name, fmtDuration(d)) + } + didPanic = true + panic(err) + } + if err != nil { + doPanic(err) + } + + // No panic or inappropriate Goexit. + f.duration += time.Since(f.start) + + if len(f.sub) > 0 { + // Unblock inputs that called T.Parallel while running the seed corpus. + // This only affects fuzz tests run as normal tests. + // While fuzzing, T.Parallel has no effect, so f.sub is empty, and this + // branch is not taken. f.barrier is nil in that case. + f.testContext.release() + close(f.barrier) + // Wait for the subtests to complete. + for _, sub := range f.sub { + <-sub.signal + } + cleanupStart := time.Now() + err := f.runCleanup(recoverAndReturnPanic) + f.duration += time.Since(cleanupStart) + if err != nil { + doPanic(err) + } + } + + // Report after all subtests have finished. + f.report() + f.done = true + f.setRan() + }() + defer func() { + if len(f.sub) == 0 { + f.runCleanup(normalPanic) + } }() - // Run the actual fuzz function. f.start = time.Now() f.resetRaces() fn(f) // Code beyond this point will not be executed when FailNow or SkipNow // is invoked. - returned = true + f.mu.Lock() + f.finished = true + f.mu.Unlock() } diff --git a/src/testing/panic_test.go b/src/testing/panic_test.go index 82e7087025..6307b84a7a 100644 --- a/src/testing/panic_test.go +++ b/src/testing/panic_test.go @@ -211,68 +211,57 @@ func TestPanicHelper(t *testing.T) { } func TestMorePanic(t *testing.T) { - subprocess := false - if os.Getenv("GO_WANT_HELPER_PROCESS") == "1" { - subprocess = true - } else { - testenv.MustHaveExec(t) - t.Parallel() - } + testenv.MustHaveExec(t) testCases := []struct { - issue int desc string - f func(*testing.T) + flags []string want string }{ { - issue: 48502, - desc: "runtime.Goexit in t.Cleanup after panic", - f: func(t *testing.T) { - t.Cleanup(func() { - t.Log("Goexiting in cleanup") - runtime.Goexit() - }) - t.Parallel() - panic("die") - }, - want: `panic: die [recovered] - panic: die`, + desc: "Issue 48502: call runtime.Goexit in t.Cleanup after panic", + flags: []string{"-test.run=^TestGoexitInCleanupAfterPanicHelper$"}, + want: `panic: die + panic: test executed panic(nil) or runtime.Goexit`, }, { - issue: 48515, - desc: "t.Run in t.Cleanup should trigger panic", - f: func(t *testing.T) { - t.Cleanup(func() { - t.Run("in-cleanup", func(t *testing.T) { - t.Log("must not be executed") - }) - }) - }, - want: `panic: testing: t.Run called during t.Cleanup`, + desc: "Issue 48515: call t.Run in t.Cleanup should trigger panic", + flags: []string{"-test.run=^TestCallRunInCleanupHelper$"}, + want: `panic: testing: t.Run called during t.Cleanup`, }, } for _, tc := range testCases { - tc := tc - t.Run(fmt.Sprintf("issue%v", tc.issue), func(t *testing.T) { - if subprocess { - tc.f(t) - return - } - - t.Parallel() - cmd := testenv.Command(t, os.Args[0], "-test.run="+t.Name()) - cmd.Env = append(cmd.Environ(), "GO_WANT_HELPER_PROCESS=1") - b, _ := cmd.CombinedOutput() - got := string(b) - t.Logf("%v:\n%s", tc.desc, got) - - want := tc.want - re := makeRegexp(want) - if ok, err := regexp.MatchString(re, got); !ok || err != nil { - t.Errorf("wanted:\n%s", want) - } - }) + cmd := exec.Command(os.Args[0], tc.flags...) + cmd.Env = append(os.Environ(), "GO_WANT_HELPER_PROCESS=1") + b, _ := cmd.CombinedOutput() + got := string(b) + want := tc.want + re := makeRegexp(want) + if ok, err := regexp.MatchString(re, got); !ok || err != nil { + t.Errorf("output:\ngot:\n%s\nwant:\n%s", got, want) + } } } + +func TestCallRunInCleanupHelper(t *testing.T) { + if os.Getenv("GO_WANT_HELPER_PROCESS") != "1" { + return + } + + t.Cleanup(func() { + t.Run("in-cleanup", func(t *testing.T) { + t.Log("must not be executed") + }) + }) +} + +func TestGoexitInCleanupAfterPanicHelper(t *testing.T) { + if os.Getenv("GO_WANT_HELPER_PROCESS") != "1" { + return + } + + t.Cleanup(func() { runtime.Goexit() }) + t.Parallel() + panic("die") +} diff --git a/src/testing/sub_test.go b/src/testing/sub_test.go index 7cbbd2e1cf..55b14c3795 100644 --- a/src/testing/sub_test.go +++ b/src/testing/sub_test.go @@ -21,6 +21,102 @@ func init() { benchTime.d = 100 * time.Millisecond } +func TestTestContext(t *T) { + const ( + add1 = 0 + done = 1 + ) + // After each of the calls are applied to the context, the + type call struct { + typ int // run or done + // result from applying the call + running int + waiting int + started bool + } + testCases := []struct { + max int + run []call + }{{ + max: 1, + run: []call{ + {typ: add1, running: 1, waiting: 0, started: true}, + {typ: done, running: 0, waiting: 0, started: false}, + }, + }, { + max: 1, + run: []call{ + {typ: add1, running: 1, waiting: 0, started: true}, + {typ: add1, running: 1, waiting: 1, started: false}, + {typ: done, running: 1, waiting: 0, started: true}, + {typ: done, running: 0, waiting: 0, started: false}, + {typ: add1, running: 1, waiting: 0, started: true}, + }, + }, { + max: 3, + run: []call{ + {typ: add1, running: 1, waiting: 0, started: true}, + {typ: add1, running: 2, waiting: 0, started: true}, + {typ: add1, running: 3, waiting: 0, started: true}, + {typ: add1, running: 3, waiting: 1, started: false}, + {typ: add1, running: 3, waiting: 2, started: false}, + {typ: add1, running: 3, waiting: 3, started: false}, + {typ: done, running: 3, waiting: 2, started: true}, + {typ: add1, running: 3, waiting: 3, started: false}, + {typ: done, running: 3, waiting: 2, started: true}, + {typ: done, running: 3, waiting: 1, started: true}, + {typ: done, running: 3, waiting: 0, started: true}, + {typ: done, running: 2, waiting: 0, started: false}, + {typ: done, running: 1, waiting: 0, started: false}, + {typ: done, running: 0, waiting: 0, started: false}, + }, + }} + for i, tc := range testCases { + ctx := &testContext{ + startParallel: make(chan bool), + maxParallel: tc.max, + } + for j, call := range tc.run { + doCall := func(f func()) chan bool { + done := make(chan bool) + go func() { + f() + done <- true + }() + return done + } + started := false + switch call.typ { + case add1: + signal := doCall(ctx.waitParallel) + select { + case <-signal: + started = true + case ctx.startParallel <- true: + <-signal + } + case done: + signal := doCall(ctx.release) + select { + case <-signal: + case <-ctx.startParallel: + started = true + <-signal + } + } + if started != call.started { + t.Errorf("%d:%d:started: got %v; want %v", i, j, started, call.started) + } + if ctx.running != call.running { + t.Errorf("%d:%d:running: got %v; want %v", i, j, ctx.running, call.running) + } + if ctx.numWaiting != call.waiting { + t.Errorf("%d:%d:waiting: got %v; want %v", i, j, ctx.numWaiting, call.waiting) + } + } + } +} + func TestTRun(t *T) { realTest := t testCases := []struct { @@ -415,10 +511,10 @@ func TestTRun(t *T) { buf := &strings.Builder{} root := &T{ common: common{ - doneOrParallel: make(chan struct{}), - runParallel: make(chan struct{}), - name: "", - w: buf, + signal: make(chan bool), + barrier: make(chan bool), + name: "", + w: buf, }, context: ctx, } @@ -427,6 +523,7 @@ func TestTRun(t *T) { root.chatty.json = tc.json } ok := root.Run(tc.desc, tc.f) + ctx.release() if ok != tc.ok { t.Errorf("%s:ok: got %v; want %v", tc.desc, ok, tc.ok) @@ -434,8 +531,8 @@ func TestTRun(t *T) { if ok != !root.Failed() { t.Errorf("%s:root failed: got %v; want %v", tc.desc, !ok, root.Failed()) } - if n := ctx.running(); n != 0 { - t.Errorf("%s:running non-zero: got %d", tc.desc, n) + if ctx.running != 0 || ctx.numWaiting != 0 { + t.Errorf("%s:running and waiting non-zero: got %d and %d", tc.desc, ctx.running, ctx.numWaiting) } got := strings.TrimSpace(buf.String()) want := strings.TrimSpace(tc.output) @@ -604,9 +701,9 @@ func TestBRun(t *T) { // the benchtime and catch the failure result of the subbenchmark. root := &B{ common: common{ - doneOrParallel: make(chan struct{}), - name: "root", - w: buf, + signal: make(chan bool), + name: "root", + w: buf, }, benchFunc: func(b *B) { ok = b.Run("test", tc.f) }, // Use Run to catch failure. benchTime: durationOrCountFlag{d: 1 * time.Microsecond}, @@ -740,8 +837,8 @@ func TestLogAfterComplete(t *T) { common: common{ // Use a buffered channel so that tRunner can write // to it although nothing is reading from it. - doneOrParallel: make(chan struct{}), - w: &buf, + signal: make(chan bool, 1), + w: &buf, }, context: ctx, } @@ -813,22 +910,18 @@ func TestCleanup(t *T) { func TestConcurrentCleanup(t *T) { cleanups := 0 t.Run("test", func(t *T) { - var wg sync.WaitGroup - wg.Add(2) + done := make(chan struct{}) for i := 0; i < 2; i++ { i := i go func() { t.Cleanup(func() { - // Although the calls to Cleanup are concurrent, the functions passed - // to Cleanup should be called sequentially, in some nondeterministic - // order based on when the Cleanup calls happened to be scheduled. - // So these assignments to the cleanups variable should not race. cleanups |= 1 << i }) - wg.Done() + done <- struct{}{} }() } - wg.Wait() + <-done + <-done }) if cleanups != 1|2 { t.Errorf("unexpected cleanup; got %d want 3", cleanups) diff --git a/src/testing/testing.go b/src/testing/testing.go index 96f71c89b9..ed8b3630f1 100644 --- a/src/testing/testing.go +++ b/src/testing/testing.go @@ -480,7 +480,7 @@ var ( cpuList []int testlogFile *os.File - anyFailed atomic.Bool + numFailed atomic.Uint32 // number of test failures running sync.Map // map[string]time.Time of running, unpaused tests ) @@ -593,40 +593,38 @@ const maxStackLen = 50 // captures common methods such as Errorf. type common struct { mu sync.RWMutex // guards this group of fields - output []byte // output generated by test or benchmark - w io.Writer // output to which flushToParent should write - ranAnyLeaf bool // Test or benchmark ran to completion without calling Run itself, or had a subtest that did so. + output []byte // Output generated by test or benchmark. + w io.Writer // For flushToParent. + ran bool // Test or benchmark (or one of its subtests) was executed. failed bool // Test or benchmark has failed. skipped bool // Test or benchmark has been skipped. - goexiting bool // Test function is attempting to abort by goexit (implies failed || skipped). done bool // Test is finished and all subtests have completed. helperPCs map[uintptr]struct{} // functions to be skipped when writing file/line info helperNames map[string]struct{} // helperPCs converted to function names cleanups []func() // optional functions to be called at the end of the test - cleanupName string // name of the cleanup function currently running - cleanupPc []uintptr // stack trace at the point where Cleanup was called + cleanupName string // Name of the cleanup function. + cleanupPc []uintptr // The stack trace at the point where Cleanup was called. + finished bool // Test function has completed. + inFuzzFn bool // Whether the fuzz target, if this is one, is running. - chatty *chattyPrinter // copy of chattyPrinter, if the chatty flag is set - bench bool // Current test is a benchmark. - runner string // function name of tRunner running the test - isParallel bool // Test is running in parallel. - inFuzzFn bool // Fuzz target, if this is one, is running. - inCleanup bool // Cleanup callbacks, if any, are running. + chatty *chattyPrinter // A copy of chattyPrinter, if the chatty flag is set. + bench bool // Whether the current test is a benchmark. + hasSub atomic.Bool // whether there are sub-benchmarks. + cleanupStarted atomic.Bool // Registered cleanup callbacks have started to execute + runner string // Function name of tRunner running the test. + isParallel bool // Whether the test is parallel. - parent *common - level int // nesting depth of test or benchmark - creator []uintptr // if level > 0, the stack trace at the point where the parent called t.Run - name string // name of test or benchmark - start time.Time // time test or benchmark started or resumed - duration time.Duration // time in the test function, excluding time blocked in t.Parallel - runParallel chan struct{} // Closed when parallel subtests may start. Nil when T.Parallel is not present (B) or not usable (when fuzzing). - doneOrParallel chan struct{} // Closed when the test is either blocked in Parallel or done running. + parent *common + level int // Nesting depth of test or benchmark. + creator []uintptr // If level > 0, the stack trace at the point where the parent called t.Run. + name string // Name of test or benchmark. + start time.Time // Time test or benchmark started + duration time.Duration + barrier chan bool // To signal parallel subtests they may start. Nil when T.Parallel is not present (B) or not usable (when fuzzing). + signal chan bool // To signal a test is done. + sub []*T // Queue of subtests to be run in parallel. - hasSub atomic.Bool // Test or benchmark has subtests or sub-benchmarks. - parallelSubtests sync.WaitGroup - runMu sync.Mutex // Held during calls to Run to prevent the total number of active subtests from exceeding the parallelism limit. - - lastRaceErrors atomic.Int64 // max value of race.Errors seen during the test or its subtests + lastRaceErrors atomic.Int64 // Max value of race.Errors seen during the test or its subtests. raceErrorLogged atomic.Bool tempDirMu sync.Mutex @@ -933,13 +931,13 @@ func (c *common) Name() string { return c.name } -func (c *common) setRanLeaf() { +func (c *common) setRan() { if c.parent != nil { - c.parent.setRanLeaf() + c.parent.setRan() } c.mu.Lock() defer c.mu.Unlock() - c.ranAnyLeaf = true + c.ran = true } // Fail marks the function as having failed but continues execution. @@ -954,7 +952,6 @@ func (c *common) Fail() { panic("Fail in goroutine after " + c.name + " has completed") } c.failed = true - anyFailed.Store(true) } // Failed reports whether the function has failed. @@ -1003,7 +1000,7 @@ func (c *common) FailNow() { // a top-of-stack deferred function now, we know that the send // only happens after any other stacked defers have completed. c.mu.Lock() - c.goexiting = true + c.finished = true c.mu.Unlock() runtime.Goexit() } @@ -1118,7 +1115,7 @@ func (c *common) SkipNow() { c.checkFuzzFn("SkipNow") c.mu.Lock() c.skipped = true - c.goexiting = true + c.finished = true c.mu.Unlock() runtime.Goexit() } @@ -1321,8 +1318,8 @@ const ( // If ph is recoverAndReturnPanic, it will catch panics, and return the // recovered value if any. func (c *common) runCleanup(ph panicHandling) (panicVal any) { - c.inCleanup = true - defer func() { c.inCleanup = false }() + c.cleanupStarted.Store(true) + defer c.cleanupStarted.Store(false) if ph == recoverAndReturnPanic { defer func() { @@ -1449,7 +1446,8 @@ func (t *T) Parallel() { if t.isEnvSet { panic("testing: t.Parallel called after t.Setenv; cannot set environment variables in parallel tests") } - if t.parent.runParallel == nil { + t.isParallel = true + if t.parent.barrier == nil { // T.Parallel has no effect when fuzzing. // Multiple processes may run in parallel, but only one input can run at a // time per process so we can attribute crashes to specific inputs. @@ -1462,7 +1460,7 @@ func (t *T) Parallel() { t.duration += time.Since(t.start) // Add to the list of tests to be released by the parent. - t.parent.parallelSubtests.Add(1) + t.parent.sub = append(t.parent.sub, t) // Report any races during execution of this test up to this point. // @@ -1481,19 +1479,9 @@ func (t *T) Parallel() { } running.Delete(t.name) - t.isParallel = true - - // Release the parent test to run. We can't just use parallelSem tokens for - // this because some callers (notably TestParallelSub) expect to be able to - // call Run from multiple goroutines and have those calls succeed. - // - // Instead, we close a channel to unblock the parent's call to Run, allowing - // it to resume. Then, we wait for it to finish and unblock its parallel - // subtests, and acquire a parallel run token so that we don't run too many of - // the subtests together all at once. - close(t.doneOrParallel) - <-t.parent.runParallel - t.context.acquireParallel() + t.signal <- true // Release calling test. + <-t.parent.barrier // Wait for the parent test to complete. + t.context.waitParallel() if t.chatty != nil { t.chatty.Updatef(t.name, "=== CONT %s\n", t.name) @@ -1550,13 +1538,19 @@ var errNilPanicOrGoexit = errors.New("test executed panic(nil) or runtime.Goexit func tRunner(t *T, fn func(t *T)) { t.runner = callerName(0) - returned := false // When this goroutine is done, either because fn(t) // returned normally or because a test failure triggered // a call to runtime.Goexit, record the duration and send // a signal saying that the test is done. defer func() { + t.checkRaces() + + // TODO(#61034): This is the wrong place for this check. + if t.Failed() { + numFailed.Add(1) + } + // Check if the test panicked or Goexited inappropriately. // // If this happens in a normal test, print output but continue panicking. @@ -1565,120 +1559,132 @@ func tRunner(t *T, fn func(t *T)) { // If this happens while fuzzing, recover from the panic and treat it like a // normal failure. It's important that the process keeps running in order to // find short inputs that cause panics. - panicVal := recover() - if !returned && !t.goexiting && panicVal == nil { - panicVal = errNilPanicOrGoexit + err := recover() + signal := true + + t.mu.RLock() + finished := t.finished + t.mu.RUnlock() + if !finished && err == nil { + err = errNilPanicOrGoexit for p := t.parent; p != nil; p = p.parent { p.mu.RLock() - pGoexiting := p.goexiting + finished = p.finished p.mu.RUnlock() - if pGoexiting { - t.Errorf("%v: subtest may have called FailNow on a parent test", panicVal) - panicVal = nil + if finished { + if !t.isParallel { + t.Errorf("%v: subtest may have called FailNow on a parent test", err) + err = nil + } + signal = false break } } } - if panicVal != nil && t.context.isFuzzing { + if err != nil && t.context.isFuzzing { prefix := "panic: " - if panicVal == errNilPanicOrGoexit { + if err == errNilPanicOrGoexit { prefix = "" } - t.Errorf("%s%s\n%s\n", prefix, panicVal, string(debug.Stack())) - panicVal = nil - } - - if panicVal != nil { - // Mark the test as failed so that Cleanup functions can see its correct status. - t.Fail() - } else if t.runParallel != nil { - // Run parallel subtests. - - // Check for races before starting parallel subtests, so that if a - // parallel subtest *also* triggers a data race we will report the two - // races to the two tests and not attribute all of them to the subtest. - t.checkRaces() - - if t.isParallel { - // Release our own parallel token first, so that it is available for - // subtests to acquire. - t.context.releaseParallel() - } - close(t.runParallel) - t.parallelSubtests.Wait() - if t.isParallel { - // Re-acquire a parallel token to limit concurrent cleanup. - t.context.acquireParallel() - } + t.Errorf("%s%s\n%s\n", prefix, err, string(debug.Stack())) + t.mu.Lock() + t.finished = true + t.mu.Unlock() + err = nil } // Use a deferred call to ensure that we report that the test is // complete even if a cleanup function calls t.FailNow. See issue 41355. + didPanic := false defer func() { - cleanupPanic := recover() - if panicVal == nil { - panicVal = cleanupPanic - } - // Only report that the test is complete if it doesn't panic, // as otherwise the test binary can exit before the panic is // reported to the user. See issue 41479. - if panicVal != nil { - // Flush the output log up to the root before dying. - for root := &t.common; root.parent != nil; root = root.parent { - root.mu.Lock() - root.duration += time.Since(root.start) - d := root.duration - root.mu.Unlock() - root.flushToParent(root.name, "--- FAIL: %s (%s)\n", root.name, fmtDuration(d)) - - // Since the parent will never finish running, do its cleanup now. - // Run the cleanup in a fresh goroutine in case it calls runtime.Goexit, - // which we cannot recover. - cleanupDone := make(chan struct{}) - go func() { - defer close(cleanupDone) - if r := root.parent.runCleanup(recoverAndReturnPanic); r != nil { - fmt.Fprintf(root.parent.w, "cleanup panicked with %v", r) - } - }() - <-cleanupDone - } - panic(panicVal) + if didPanic { + return } - - t.checkRaces() - t.duration += time.Since(t.start) - t.report() - - // Do not lock t.done to allow race detector to detect race in case - // the user does not appropriately synchronize a goroutine. - t.done = true - if t.parent != nil && !t.hasSub.Load() { - t.setRanLeaf() + if err != nil { + panic(err) } - running.Delete(t.name) - if t.isParallel { - t.context.releaseParallel() - t.parent.parallelSubtests.Done() - } else { - close(t.doneOrParallel) - } + t.signal <- signal }() - t.runCleanup(normalPanic) + doPanic := func(err any) { + t.Fail() + if r := t.runCleanup(recoverAndReturnPanic); r != nil { + t.Logf("cleanup panicked with %v", r) + } + // Flush the output log up to the root before dying. + for root := &t.common; root.parent != nil; root = root.parent { + root.mu.Lock() + root.duration += time.Since(root.start) + d := root.duration + root.mu.Unlock() + root.flushToParent(root.name, "--- FAIL: %s (%s)\n", root.name, fmtDuration(d)) + if r := root.parent.runCleanup(recoverAndReturnPanic); r != nil { + fmt.Fprintf(root.parent.w, "cleanup panicked with %v", r) + } + } + didPanic = true + panic(err) + } + if err != nil { + doPanic(err) + } + + t.duration += time.Since(t.start) + + if len(t.sub) > 0 { + // Run parallel subtests. + // Decrease the running count for this test. + t.context.release() + // Release the parallel subtests. + close(t.barrier) + // Wait for subtests to complete. + for _, sub := range t.sub { + <-sub.signal + } + cleanupStart := time.Now() + err := t.runCleanup(recoverAndReturnPanic) + t.duration += time.Since(cleanupStart) + if err != nil { + doPanic(err) + } + t.checkRaces() + if !t.isParallel { + // Reacquire the count for sequential tests. See comment in Run. + t.context.waitParallel() + } + } else if t.isParallel { + // Only release the count for this test if it was run as a parallel + // test. See comment in Run method. + t.context.release() + } + t.report() // Report after all subtests have finished. + + // Do not lock t.done to allow race detector to detect race in case + // the user does not appropriately synchronize a goroutine. + t.done = true + if t.parent != nil && !t.hasSub.Load() { + t.setRan() + } + }() + defer func() { + if len(t.sub) == 0 { + t.runCleanup(normalPanic) + } }() - // Run the actual test function. t.start = time.Now() t.resetRaces() fn(t) - // Code beyond this point will not be executed when FailNow or SkipNow - // is invoked. - returned = true + // code beyond here will not be executed when FailNow is invoked + t.mu.Lock() + t.finished = true + t.mu.Unlock() } // Run runs f as a subtest of t called name. It runs f in a separate goroutine @@ -1688,7 +1694,7 @@ func tRunner(t *T, fn func(t *T)) { // Run may be called simultaneously from multiple goroutines, but all such calls // must return before the outer test function for t returns. func (t *T) Run(name string, f func(t *T)) bool { - if t.inCleanup { + if t.cleanupStarted.Load() { panic("testing: t.Run called during t.Cleanup") } @@ -1702,56 +1708,40 @@ func (t *T) Run(name string, f func(t *T)) bool { // continue walking the stack into the parent test. var pc [maxStackLen]uintptr n := runtime.Callers(2, pc[:]) - sub := &T{ + t = &T{ common: common{ - runParallel: make(chan struct{}), - doneOrParallel: make(chan struct{}), - name: testName, - parent: &t.common, - level: t.level + 1, - creator: pc[:n], - chatty: t.chatty, + barrier: make(chan bool), + signal: make(chan bool, 1), + name: testName, + parent: &t.common, + level: t.level + 1, + creator: pc[:n], + chatty: t.chatty, }, context: t.context, } - sub.w = indenter{&sub.common} + t.w = indenter{&t.common} - // Ensure that only one non-parallel subtest runs at a time so that we don't - // exceed the -parallel setting due to concurrent calls. - // (Run may be called concurrently even if the test is not marked parallel — - // see TestParallelSub.) - t.runMu.Lock() - defer t.runMu.Unlock() - - if t.isParallel { - // Release our parallelism token for the subtest to use - // for its own parallel subtests. - t.context.releaseParallel() - defer t.context.acquireParallel() + if t.chatty != nil { + t.chatty.Updatef(t.name, "=== RUN %s\n", t.name) } - - if sub.chatty != nil { - sub.chatty.Updatef(sub.name, "=== RUN %s\n", sub.name) - } - running.Store(sub.name, time.Now()) + running.Store(t.name, time.Now()) // Instead of reducing the running count of this test before calling the // tRunner and increasing it afterwards, we rely on tRunner keeping the // count correct. This ensures that a sequence of sequential tests runs // without being preempted, even when their parent is a parallel test. This // may especially reduce surprises if *parallel == 1. - go tRunner(sub, f) - <-sub.doneOrParallel - if t.goexiting { - // The parent test (t) thinks it called runtime.Goexit, but here we are - // still running. It is likely that this subtest called FailNow or SkipNow - // on the t instead of sub, so propagate the Goexit to the parent goroutine. + go tRunner(t, f) + if !<-t.signal { + // At this point, it is likely that FailNow was called on one of the + // parent tests by one of the subtests. Continue aborting up the chain. runtime.Goexit() } if t.chatty != nil && t.chatty.json { - t.chatty.Updatef(t.name, "=== NAME %s\n", t.name) + t.chatty.Updatef(t.parent.name, "=== NAME %s\n", t.parent.name) } - return !sub.failed + return !t.failed } // Deadline reports the time at which the test binary will have @@ -1775,43 +1765,53 @@ type testContext struct { // does not match). isFuzzing bool - // parallelSem is a counting semaphore to limit concurrency of Parallel tests. - // It has a capacity equal to the parallel flag. - // Send a token to acquire; receive to release. - // Non-parallel tests do not require a token. - parallelSem chan token + mu sync.Mutex + + // Channel used to signal tests that are ready to be run in parallel. + startParallel chan bool + + // running is the number of tests currently running in parallel. + // This does not include tests that are waiting for subtests to complete. + running int + + // numWaiting is the number tests waiting to be run in parallel. + numWaiting int + + // maxParallel is a copy of the parallel flag. + maxParallel int } -// A token is a semaphore token. -type token struct{} - -// newTestContext returns a new testContext with the given parallelism and matcher. func newTestContext(maxParallel int, m *matcher) *testContext { - tc := &testContext{ - match: m, - parallelSem: make(chan token, maxParallel), - } - return tc -} - -// acquireParallel blocks until it can obtain a semaphore token for running a -// parallel test. -func (c *testContext) acquireParallel() { - c.parallelSem <- token{} -} - -// releaseParallel returns a semaphore token obtained by acquireParallel. -func (c *testContext) releaseParallel() { - select { - case <-c.parallelSem: - default: - panic("testing: internal error: no parallel token to release") + return &testContext{ + match: m, + startParallel: make(chan bool), + maxParallel: maxParallel, + running: 1, // Set the count to 1 for the main (sequential) test. } } -// running returns the number of semaphore tokens outstanding. -func (c *testContext) running() int { - return len(c.parallelSem) +func (c *testContext) waitParallel() { + c.mu.Lock() + if c.running < c.maxParallel { + c.running++ + c.mu.Unlock() + return + } + c.numWaiting++ + c.mu.Unlock() + <-c.startParallel +} + +func (c *testContext) release() { + c.mu.Lock() + if c.numWaiting == 0 { + c.running-- + c.mu.Unlock() + return + } + c.numWaiting-- + c.mu.Unlock() + c.startParallel <- true // Pick a waiting test to be run. } // No one should be using func Main anymore. @@ -2132,9 +2132,9 @@ func runTests(matchString func(pat, str string) (bool, error), tests []InternalT ctx.deadline = deadline t := &T{ common: common{ - doneOrParallel: make(chan struct{}), - runParallel: make(chan struct{}), - w: os.Stdout, + signal: make(chan bool, 1), + barrier: make(chan bool), + w: os.Stdout, }, context: ctx, } @@ -2147,12 +2147,12 @@ func runTests(matchString func(pat, str string) (bool, error), tests []InternalT } }) select { - case <-t.doneOrParallel: + case <-t.signal: default: - panic("internal error: tRunner exited without closing t.doneOrParallel") + panic("internal error: tRunner exited without sending on t.signal") } ok = ok && !t.Failed() - ran = ran || t.ranAnyLeaf + ran = ran || t.ran } } return ran, ok @@ -2390,5 +2390,5 @@ func parseCpuList() { } func shouldFailFast() bool { - return *failFast && anyFailed.Load() + return *failFast && numFailed.Load() > 0 } From e158cb21e58a8e50645a15f3747c76627eaaa231 Mon Sep 17 00:00:00 2001 From: Sean Liao Date: Thu, 23 Nov 2023 18:43:12 +0000 Subject: [PATCH 106/313] .github: clean up issue forms bugs: * drop unused labels * drop the reproduce checkbox: it's not a strong signal and introduces clutter in github as a task list * link go.dev/play govuln: * use correct label * ask for version of the tool * link go.dev/play telemetry: * align title with purpose Change-Id: Id7dd876e518c75dc22e9aec43d9af6e18af088fc Reviewed-on: https://go-review.googlesource.com/c/go/+/544775 Reviewed-by: Dmitri Shuralyov Reviewed-by: Dmitri Shuralyov Auto-Submit: Dmitri Shuralyov Reviewed-by: Michael Knyszek TryBot-Bypass: Dmitri Shuralyov --- .github/ISSUE_TEMPLATE/00-bug.yml | 15 +++++---------- .github/ISSUE_TEMPLATE/04-vuln.yml | 16 ++++++++++------ .github/ISSUE_TEMPLATE/12-telemetry.yml | 2 +- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/00-bug.yml b/.github/ISSUE_TEMPLATE/00-bug.yml index 3e64b83655..f3997ec3c1 100644 --- a/.github/ISSUE_TEMPLATE/00-bug.yml +++ b/.github/ISSUE_TEMPLATE/00-bug.yml @@ -2,7 +2,6 @@ # https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/syntax-for-githubs-form-schema name: Bugs description: The go command, standard library, or anything else -labels: [ 'kind/bug', 'bug' ] title: "import/path: issue title" body: @@ -15,18 +14,14 @@ body: id: go-version attributes: label: Go version - description: What version of Go are you using (`go version`)? + description: | + What version of Go are you using (`go version`)? + + Note: we only [support](https://go.dev/doc/devel/release#policy) the two most recent major releases. placeholder: ex. go version go1.20.7 darwin/arm64 validations: required: true - - type: checkboxes - id: reproduce-latest-release - attributes: - label: Reproducibility - options: - - label: Does this issue reproduce with the latest release? - - type: textarea id: os-and-processor attributes: @@ -78,7 +73,7 @@ body: id: what-did-you-do attributes: label: "What did you do?" - description: "If possible, provide a recipe for reproducing the error. A complete runnable program is good. A link on go.dev/play is best." + description: "If possible, provide a recipe for reproducing the error. A complete runnable program is good. A link on [go.dev/play](https://go.dev/play) is best." validations: required: true diff --git a/.github/ISSUE_TEMPLATE/04-vuln.yml b/.github/ISSUE_TEMPLATE/04-vuln.yml index 1759697307..ae1356886c 100644 --- a/.github/ISSUE_TEMPLATE/04-vuln.yml +++ b/.github/ISSUE_TEMPLATE/04-vuln.yml @@ -1,17 +1,21 @@ name: Go vulnerability management - bugs and feature requests description: Issues or feature requests about Go vulnerability management title: "x/vuln: issue title" -labels: ["vulncheck", "vulndb"] +labels: ["vulncheck or vulndb"] body: - type: markdown attributes: value: "Please answer these questions before submitting your issue. Thanks! To add a new vulnerability to the Go vulnerability database (https://vuln.go.dev), see https://go.dev/s/vulndb-report-new. To report an issue about a report, see https://go.dev/s/vulndb-report-feedback." - type: input - id: go-version + id: govulncheck-version attributes: - label: go version - description: What version of Go are you using (`go version`)? - placeholder: ex. go version go1.20.7 darwin/arm64 + label: govulncheck version + description: What version of govulncheck are you using (`govulncheck -version`)? + placeholder: | + Go: devel go1.22-0262ea1ff9 Thu Oct 26 18:46:50 2023 +0000 + Scanner: govulncheck@v1.0.2-0.20231108200754-fcf7dff7b242 + DB: https://vuln.go.dev + DB updated: 2023-11-21 15:39:17 +0000 UTC validations: required: true - type: textarea @@ -31,7 +35,7 @@ body: id: what-did-you-do attributes: label: "What did you do?" - description: "If possible, provide a recipe for reproducing the error. A complete runnable program is good. A link on go.dev/play is best." + description: "If possible, provide a recipe for reproducing the error. A complete runnable program is good. A link on [go.dev/play](https://go.dev/play) is best." validations: required: true - type: textarea diff --git a/.github/ISSUE_TEMPLATE/12-telemetry.yml b/.github/ISSUE_TEMPLATE/12-telemetry.yml index 787a664165..4215abfa99 100644 --- a/.github/ISSUE_TEMPLATE/12-telemetry.yml +++ b/.github/ISSUE_TEMPLATE/12-telemetry.yml @@ -1,6 +1,6 @@ name: Go Telemetry Proposals description: New telemetry counter or update on an existing one -title: "x/telemetry/config: issue title" +title: "x/telemetry/config: proposal title" labels: ["Telemetry-Proposal"] projects: ["golang/29"] body: From 94d6267060a619ef89ef296ed4691734e6be8de2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Mengu=C3=A9?= Date: Thu, 23 Nov 2023 09:17:56 +0100 Subject: [PATCH 107/313] text/template: more godoc links MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I4f3684ea6cbdcc09985c93fef5107d3bd006699e Reviewed-on: https://go-review.googlesource.com/c/go/+/544735 Reviewed-by: Dmitri Shuralyov TryBot-Result: Gopher Robot Auto-Submit: Daniel Martí Reviewed-by: Rob Pike Reviewed-by: Michael Knyszek Reviewed-by: Daniel Martí Run-TryBot: Daniel Martí --- src/text/template/doc.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/text/template/doc.go b/src/text/template/doc.go index 4c01b05ebf..032784bc3f 100644 --- a/src/text/template/doc.go +++ b/src/text/template/doc.go @@ -438,13 +438,13 @@ produce the text By construction, a template may reside in only one association. If it's necessary to have a template addressable from multiple associations, the template definition must be parsed multiple times to create distinct *Template -values, or must be copied with the Clone or AddParseTree method. +values, or must be copied with [Template.Clone] or [Template.AddParseTree]. Parse may be called multiple times to assemble the various associated templates; -see the ParseFiles and ParseGlob functions and methods for simple ways to parse -related templates stored in files. +see [ParseFiles], [ParseGlob], [Template.ParseFiles] and [Template.ParseGlob] +for simple ways to parse related templates stored in files. -A template may be executed directly or through ExecuteTemplate, which executes +A template may be executed directly or through [Template.ExecuteTemplate], which executes an associated template identified by name. To invoke our example above, we might write, From 7e5b7d7720e07588f752a3672d9983cc20626d89 Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Wed, 22 Nov 2023 20:37:13 +0000 Subject: [PATCH 108/313] doc: update release notes from the relnote tool For #61422. Change-Id: I0e091c30a445dbc55054c31837c6f051fea3c07d Reviewed-on: https://go-review.googlesource.com/c/go/+/544537 Auto-Submit: Michael Knyszek Reviewed-by: Dmitri Shuralyov Reviewed-by: Dmitri Shuralyov LUCI-TryBot-Result: Go LUCI --- doc/go1.22.html | 498 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 492 insertions(+), 6 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 287ee77bb5..287de0eebb 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -33,13 +33,53 @@ Do not send CLs removing the interior tags from such phrases.

Go command

+

- TODO: complete this section, or delete if not needed + +

+ + +

+ +

+ + +

+ +

+ + +

+

Cgo

- + +

+ +

+ +

Vet

+ +

+ TODO: https://go.dev/cl/539016: go/analysis/passes/loopclosure: disable checker after go1.22.; loopclosure was modified to only not report in files with GoVersion after 1.22. +

+ + +

+ +

+ + +

+ +

+ + +

+ +

Runtime

@@ -55,12 +95,59 @@ Do not send CLs removing the interior tags from such phrases.

Linker

+

+ TODO: https://go.dev/issue/62577: cmd/link, cmd/go: emit split DWARF on darwin +

+ + +

+ +

+

TODO: complete this section, or delete if not needed

Core library

+

New math/rand/v2 package

+ +

+ TODO: https://go.dev/cl/502495: math/rand/v2: start of new API; modified api/next/61716.txt +

+ +

+ TODO: https://go.dev/cl/502497: math/rand/v2: remove Read; modified api/next/61716.txt +

+ +

+ TODO: https://go.dev/cl/502498: math/rand/v2: remove Rand.Seed; modified api/next/61716.txt +

+ +

+ TODO: https://go.dev/cl/502499: math/rand/v2: change Source to use uint64; modified api/next/61716.txt +

+ +

+ TODO: https://go.dev/cl/502500: math/rand/v2: add, optimize N, UintN, Uint32N, Uint64N; modified api/next/61716.txt +

+ +

+ TODO: https://go.dev/cl/502505: math/rand/v2: add PCG-DXSM; modified api/next/61716.txt +

+ +

+ TODO: https://go.dev/cl/502506: math/rand/v2: delete Mitchell/Reeds source; modified api/next/61716.txt +

+ +

+ TODO: https://go.dev/cl/516857: math/rand/v2: rename various functions; modified api/next/61716.txt +

+ +

+ TODO: https://go.dev/cl/516859: math/rand/v2: add ChaCha8; modified api/next/61716.txt +

+

Minor changes to the library

@@ -74,6 +161,114 @@ Do not send CLs removing the interior tags from such phrases. TODO: complete this section

+
archive/tar
+
+

+ TODO: https://go.dev/issue/50102: add FileInfoNames interface +

+ +

+ TODO: https://go.dev/issue/58000: add (*Writer).AddFS +

+ +

+ TODO: https://go.dev/cl/513316: archive/tar: add AddFS method to Writer; modified api/next/58000.txt +

+ +

+ TODO: https://go.dev/cl/514235: archive/tar: add FileInfoNames interface; modified api/next/50102.txt +

+
+
+ +
bufio
+
+

+ TODO: https://go.dev/issue/56381: allow terminating Scanner early cleanly without a final token or an error +

+
+
+ +
cmd
+
+

+ TODO: https://go.dev/cl/498416: cmd: add a new analyzer for check missing values after append +

+
+
+ +
cmp
+
+

+ TODO: https://go.dev/issue/60204: add Or +

+ +

+ TODO: https://go.dev/cl/504883: cmp: add Or; modified api/next/60204.txt +

+
+
+ +
crypto/tls
+
+

+ TODO: https://go.dev/issue/43922: implement RFC7627 +

+ +

+ TODO: https://go.dev/issue/60107: QUIC 0-RTT APIs +

+ +

+ TODO: https://go.dev/issue/62459: make default minimum version for servers TLS 1.2 +

+ +

+ TODO: https://go.dev/issue/63413: disable RSA key exchange cipher suites by default +

+ +

+ TODO: https://go.dev/cl/514997: crypto/tls: change SendSessionTicket to take an options struct; modified api/go1.21.txt +

+ +

+ TODO: https://go.dev/cl/541516: crypto/tls: change default minimum version to 1.2 +

+ +

+ TODO: https://go.dev/cl/541517: crypto/tls: remove RSA KEX ciphers from the default list +

+ +

+ TODO: https://go.dev/cl/544155: crypto/tls: disable ExportKeyingMaterial without EMS +

+
+
+ +
crypto/x509
+
+

+ TODO: https://go.dev/issue/57178: support code-constrained roots +

+ +

+ TODO: https://go.dev/issue/58922: add android user trusted CA folder as a possible source for certificate retrieval +

+ +

+ TODO: https://go.dev/issue/60665: introduce new robust OID type & use it for certificate policies +

+ +

+ TODO: https://go.dev/cl/519315: crypto/x509: implement AddCertWithConstraint; modified api/next/57178.txt +

+ +

+ TODO: https://go.dev/cl/520535: crypto/x509: add new OID type and use it in Certificate; modified api/next/60665.txt +

+
+
+
database/sql

@@ -81,7 +276,215 @@ Do not send CLs removing the interior tags from such phrases. provide a way to scan nullable columns for any column types.

-
+ + +
encoding
+
+

+ TODO: https://go.dev/issue/53693: provide append-like variants +

+ +

+ TODO: https://go.dev/cl/504884: encoding: add AppendEncode and AppendDecode; modified api/next/53693.txt +

+ +

+ TODO: https://go.dev/cl/505236: encoding: reject negative runes in Encoding.WithPadding; Providing a negative rune to Encoding.WithPadding other than NoPadding made no semantic sense, and will now panic. +

+
+
+ +
encoding/binary
+
+

+ TODO: https://go.dev/issue/57237: add var NativeEndian; also x/sys/cpu.IsBigEndian +

+
+
+ +
go/ast
+
+

+ TODO: https://go.dev/issue/52463: formally deprecate Object +

+ +

+ TODO: https://go.dev/cl/504915: go/ast: deprecate Object; modified api/go1.21.txt +

+
+
+ +
go/types
+
+

+ TODO: https://go.dev/issue/62037: add Info.PkgName method +

+ +

+ TODO: https://go.dev/issue/62605: Export Info.FileVersions for access to file-specific version information +

+ +

+ TODO: https://go.dev/issue/63223: API changes to support explicit Alias nodes +

+ +

+ TODO: https://go.dev/cl/540056: go/types: export Info.FileVersions; modified api/next/62605.txt +

+ +

+ TODO: https://go.dev/issue/61035: go/types, types2: fix SizesFor("gc", ...) to match actual gc behavior +

+ +

+ TODO: https://go.dev/cl/541575: go/types, types2: implement Info.PkgNameOf; modified api/next/62037.txt +

+ +

+ TODO: https://go.dev/cl/541737: go/types, types2: implement Alias proposal (export API); modified api/next/63223.txt +

+
+
+ +
go/version
+
+

+ TODO: https://go.dev/issue/62039: package for handling Go version strings +

+ +

+ TODO: https://go.dev/cl/538895: go/version: add new package; modified api/next/62039.txt +

+
+
+ +
html/template
+
+

+ TODO: https://go.dev/issue/61619: allow actions in JS template literals +

+ +

+ TODO: https://go.dev/cl/507995: html/template: support parsing complex JS template literals; modified api/next/61619.txt +

+
+
+ +
io
+
+

+ TODO: https://go.dev/issue/61870: add SectionReader.Outer method +

+ +

+ TODO: https://go.dev/cl/526855: io: add (*SectionReader).Outer(); modified api/next/61870.txt +

+
+
+ +
log/slog
+
+

+ TODO: https://go.dev/issue/62418: enable setting level on default log.Logger +

+ +

+ TODO: https://go.dev/cl/525096: log/slog: add LogLoggerLevel to enable setting level on the default logger; modified api/next/62418.txt +

+
+
+ +
math/big
+
+

+ TODO: https://go.dev/issue/50489: Rat: add FloatPrec() (int, bool) +

+ +

+ TODO: https://go.dev/cl/539299: math/big: implement Rat.FloatPrec; modified api/next/50489.txt +

+
+
+ +
net
+
+

+ TODO: https://go.dev/issue/58808: arrange zero-copy of os.File and TCPConn to UnixConn +

+ +

+ TODO: https://go.dev/cl/467335: net: respect hosts file when resolving names for Windows +

+
+
+ +
net/http
+
+

+ TODO: https://go.dev/issue/51971: add ServeFileFS, FileServerFS, NewFileTransportFS +

+ +

+ TODO: https://go.dev/issue/61410: enhanced ServeMux routing +

+ +

+ TODO: https://go.dev/cl/513956: net/http: add ServeFileFS, FileServerFS, NewFileTransportFS; modified api/next/51971.txt +

+ +

+ TODO: https://go.dev/cl/517336: net/http: disallow empty Content-Length header +

+ +

+ TODO: https://go.dev/cl/528355: net/http: implement path value methods on Request; modified api/next/61410.txt +

+
+
+ +
net/http/cgi
+
+

+ TODO: https://go.dev/cl/539615: net/http/cgi: the PATH_INFO should be empty or start with a slash +

+
+
+ +
net/netip
+
+

+ TODO: https://go.dev/issue/61642: add Prefix.Compare and AddrPort.Compare +

+ +

+ TODO: https://go.dev/cl/524616: net/netip: add AddrPort.Compare and Prefix.Compare; modified api/next/61642.txt +

+
+
+ +
os
+
+

+ TODO: https://go.dev/cl/516555: os: follow all name surrogate reparse points in Stat on Windows +

+ +

+ TODO: https://go.dev/issue/58808: arrange zero-copy of os.File and TCPConn to UnixConn +

+
+
+ +
os/exec
+
+

+ TODO: https://go.dev/cl/528037: os/exec: fix edge cases in Windows PATH resolution +

+ +

+ TODO: https://go.dev/cl/528038: os/exec: avoid calling LookPath in cmd.Start for resolved paths +

+
+
reflect
@@ -95,11 +498,94 @@ Do not send CLs removing the interior tags from such phrases. a value to zero using the language == operator.

-
+ + +
runtime
+
+

+ TODO: https://go.dev/issue/61015: change mutex profile to scale contention by number of blocked goroutines +

+ +

+ TODO: https://go.dev/cl/543255: runtime: put allocation headers back at the start the object +

+
+
+ +
runtime/metrics
+
+

+ TODO: https://go.dev/issue/63340: provide histogram of all STW events +

+
+
+ +
slices
+
+

+ TODO: https://go.dev/issue/56353: add Concat +

+ +

+ TODO: https://go.dev/issue/63393: have Delete and others clear the tail +

+ +

+ TODO: https://go.dev/cl/504882: slices: add Concat +

+ +

+ TODO: https://go.dev/cl/540155: slices: make Insert panic if index is out of range and there are no values +

+
+
+ +
syscall
+
+

+ TODO: https://go.dev/issue/60797: undeprecate +

+ +

+ TODO: https://go.dev/cl/520266: syscall: add support to get pidfd from ForkExec on Linux +

+ +

+ TODO: https://go.dev/cl/541015: syscall: support O_SYNC flag for os.OpenFile on windows +

+
+
+ +
testing/slogtest
+
+

+ TODO: https://go.dev/issue/61758: support sub-tests +

+ +

+ TODO: https://go.dev/cl/516076: testing/slogtest: add Run to run cases as subtests; modified api/next/61758.txt +

+
+

Ports

-

- TODO: complete this section, or delete if not needed +

+ TODO: https://go.dev/cl/514907: all: add floating point option for ARM targets

+

+ TODO: https://go.dev/cl/481315: runtime, cmd/go: enable memory sanitizer on linux/loong64 +

+ +

+ TODO: https://go.dev/cl/517935: cmd/dist,internal/platform: enable openbsd/ppc64 port +

+ +

+ TODO: https://go.dev/cl/537615: debug/elf,cmd/link: add additional relocations for loong64; modified api/next/63725.txt +

+ +

+ TODO: https://go.dev/cl/469395: debug/elf,cmd/link: add additional MIPS64 relocation type; modified api/next/61974.txt +

From 4956c3437bd2f4448bcec51321f123d03731ddfc Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Mon, 27 Nov 2023 15:17:11 -0500 Subject: [PATCH 109/313] syscall: remove ptrace1 on darwin On Darwin, the ptrace syscall is called in ptrace1, which then be called in ptrace. This allows ptrace1 be disabled on iOS (by implementing ptrace differently). But we can also achieve this by adding a conditional directly in ptrace. This reduces stack usage with -N -l, while keeping ptrace disabled on iOS. For #64113. Change-Id: I89d8e317e77352fffdbb5a25ba21ee9cdf2e1e20 Reviewed-on: https://go-review.googlesource.com/c/go/+/545276 Reviewed-by: Michael Knyszek Run-TryBot: Cherry Mui TryBot-Result: Gopher Robot --- src/syscall/mksyscall.pl | 12 +++++++++++- src/syscall/ptrace_darwin.go | 14 -------------- src/syscall/ptrace_ios.go | 14 -------------- src/syscall/syscall_darwin_amd64.go | 2 +- src/syscall/syscall_darwin_arm64.go | 2 +- src/syscall/zsyscall_darwin_amd64.go | 6 +++++- src/syscall/zsyscall_darwin_arm64.go | 6 +++++- 7 files changed, 23 insertions(+), 33 deletions(-) delete mode 100644 src/syscall/ptrace_darwin.go delete mode 100644 src/syscall/ptrace_ios.go diff --git a/src/syscall/mksyscall.pl b/src/syscall/mksyscall.pl index 73d4b0f6e3..47efbffcbc 100755 --- a/src/syscall/mksyscall.pl +++ b/src/syscall/mksyscall.pl @@ -85,6 +85,9 @@ if($ARGV[0] =~ /^-/) { if($libc) { $extraimports = 'import "internal/abi"'; } +if($darwin) { + $extraimports .= "\nimport \"runtime\""; +} sub parseparamlist($) { my ($list) = @_; @@ -137,7 +140,7 @@ while(<>) { # without reading the header. $text .= "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n"; - if (($darwin && $func =~ /^ptrace1(Ptr)?$/) || (($openbsd && $libc) && $func =~ /^ptrace(Ptr)?$/)) { + if ((($darwin || ($openbsd && $libc)) && $func =~ /^ptrace(Ptr)?$/)) { # The ptrace function is called from forkAndExecInChild where stack # growth is forbidden. $text .= "//go:nosplit\n" @@ -147,6 +150,13 @@ while(<>) { my $out_decl = @out ? sprintf(" (%s)", join(', ', @out)) : ""; $text .= sprintf "func %s(%s)%s {\n", $func, join(', ', @in), $out_decl; + # Disable ptrace on iOS. + if ($darwin && $func =~ /^ptrace(Ptr)?$/) { + $text .= "\tif runtime.GOOS == \"ios\" {\n"; + $text .= "\t\tpanic(\"unimplemented\")\n"; + $text .= "\t}\n"; + } + # Check if err return available my $errvar = ""; foreach my $p (@out) { diff --git a/src/syscall/ptrace_darwin.go b/src/syscall/ptrace_darwin.go deleted file mode 100644 index 519e451c73..0000000000 --- a/src/syscall/ptrace_darwin.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !ios - -package syscall - -// Nosplit because it is called from forkAndExecInChild. -// -//go:nosplit -func ptrace(request int, pid int, addr uintptr, data uintptr) error { - return ptrace1(request, pid, addr, data) -} diff --git a/src/syscall/ptrace_ios.go b/src/syscall/ptrace_ios.go deleted file mode 100644 index fa8d000715..0000000000 --- a/src/syscall/ptrace_ios.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build ios - -package syscall - -// Nosplit because it is called from forkAndExecInChild. -// -//go:nosplit -func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { - panic("unimplemented") -} diff --git a/src/syscall/syscall_darwin_amd64.go b/src/syscall/syscall_darwin_amd64.go index ef3c1998aa..64e54ad730 100644 --- a/src/syscall/syscall_darwin_amd64.go +++ b/src/syscall/syscall_darwin_amd64.go @@ -24,7 +24,7 @@ func setTimeval(sec, usec int64) Timeval { //sys Stat(path string, stat *Stat_t) (err error) = SYS_stat64 //sys Statfs(path string, stat *Statfs_t) (err error) = SYS_statfs64 //sys fstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_fstatat64 -//sys ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) = SYS_ptrace +//sys ptrace(request int, pid int, addr uintptr, data uintptr) (err error) func SetKevent(k *Kevent_t, fd, mode, flags int) { k.Ident = uint64(fd) diff --git a/src/syscall/syscall_darwin_arm64.go b/src/syscall/syscall_darwin_arm64.go index cea42772bb..913c748374 100644 --- a/src/syscall/syscall_darwin_arm64.go +++ b/src/syscall/syscall_darwin_arm64.go @@ -24,7 +24,7 @@ func setTimeval(sec, usec int64) Timeval { //sys Stat(path string, stat *Stat_t) (err error) //sys Statfs(path string, stat *Statfs_t) (err error) //sys fstatat(fd int, path string, stat *Stat_t, flags int) (err error) -//sys ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) = SYS_ptrace +//sys ptrace(request int, pid int, addr uintptr, data uintptr) (err error) func SetKevent(k *Kevent_t, fd, mode, flags int) { k.Ident = uint64(fd) diff --git a/src/syscall/zsyscall_darwin_amd64.go b/src/syscall/zsyscall_darwin_amd64.go index 3ad9bad076..8812fb12cd 100644 --- a/src/syscall/zsyscall_darwin_amd64.go +++ b/src/syscall/zsyscall_darwin_amd64.go @@ -7,6 +7,7 @@ package syscall import "unsafe" import "internal/abi" +import "runtime" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2011,7 +2012,10 @@ func libc_fstatat64_trampoline() // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT //go:nosplit -func ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) { +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + if runtime.GOOS == "ios" { + panic("unimplemented") + } _, _, e1 := syscall6(abi.FuncPCABI0(libc_ptrace_trampoline), uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) if e1 != 0 { err = errnoErr(e1) diff --git a/src/syscall/zsyscall_darwin_arm64.go b/src/syscall/zsyscall_darwin_arm64.go index c2502c7842..22b096349d 100644 --- a/src/syscall/zsyscall_darwin_arm64.go +++ b/src/syscall/zsyscall_darwin_arm64.go @@ -7,6 +7,7 @@ package syscall import "unsafe" import "internal/abi" +import "runtime" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -2011,7 +2012,10 @@ func libc_fstatat_trampoline() // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT //go:nosplit -func ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) { +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + if runtime.GOOS == "ios" { + panic("unimplemented") + } _, _, e1 := syscall6(abi.FuncPCABI0(libc_ptrace_trampoline), uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) if e1 != 0 { err = errnoErr(e1) From 46410b78a53a5dff4f0fb1bc181103db4029384a Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Mon, 27 Nov 2023 17:21:08 -0800 Subject: [PATCH 110/313] cmd/compile: use correct type for slice pointer The type of the data pointer field of a slice should be a pointer to the element type, not a *uint8. This ensures that the SSA value representing the slice's data pointer can be spilled to the stack slot for the corresponding argument. Before this change the types didn't match so we ended up spilling the argument to an autotmp instead of to the dedicated argument slot. Fixes #64414 Change-Id: I09ee39e93f05aee07e3eceb14e39736d7fd70a33 Reviewed-on: https://go-review.googlesource.com/c/go/+/545357 LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall Reviewed-by: David Chase --- src/cmd/compile/internal/ssa/expand_calls.go | 6 ++--- src/cmd/compile/internal/ssagen/ssa.go | 2 +- src/runtime/traceback_test.go | 24 ++++++++++++++++++++ 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/cmd/compile/internal/ssa/expand_calls.go b/src/cmd/compile/internal/ssa/expand_calls.go index 298e29ec56..b0788f1db4 100644 --- a/src/cmd/compile/internal/ssa/expand_calls.go +++ b/src/cmd/compile/internal/ssa/expand_calls.go @@ -411,7 +411,7 @@ func (x *expandState) decomposeAsNecessary(pos src.XPos, b *Block, a, m0 *Value, return mem case types.TSLICE: - mem = x.decomposeOne(pos, b, a, mem, x.typs.BytePtr, OpSlicePtr, &rc) + mem = x.decomposeOne(pos, b, a, mem, at.Elem().PtrTo(), OpSlicePtr, &rc) pos = pos.WithNotStmt() mem = x.decomposeOne(pos, b, a, mem, x.typs.Int, OpSliceLen, &rc) return x.decomposeOne(pos, b, a, mem, x.typs.Int, OpSliceCap, &rc) @@ -564,7 +564,7 @@ func (x *expandState) rewriteSelectOrArg(pos src.XPos, b *Block, container, a, m return a case types.TSLICE: - addArg(x.rewriteSelectOrArg(pos, b, container, nil, m0, x.typs.BytePtr, rc.next(x.typs.BytePtr))) + addArg(x.rewriteSelectOrArg(pos, b, container, nil, m0, at.Elem().PtrTo(), rc.next(x.typs.BytePtr))) pos = pos.WithNotStmt() addArg(x.rewriteSelectOrArg(pos, b, container, nil, m0, x.typs.Int, rc.next(x.typs.Int))) addArg(x.rewriteSelectOrArg(pos, b, container, nil, m0, x.typs.Int, rc.next(x.typs.Int))) @@ -721,7 +721,7 @@ func (x *expandState) rewriteWideSelectToStores(pos src.XPos, b *Block, containe return m0 case types.TSLICE: - m0 = x.rewriteWideSelectToStores(pos, b, container, m0, x.typs.BytePtr, rc.next(x.typs.BytePtr)) + m0 = x.rewriteWideSelectToStores(pos, b, container, m0, at.Elem().PtrTo(), rc.next(x.typs.BytePtr)) pos = pos.WithNotStmt() m0 = x.rewriteWideSelectToStores(pos, b, container, m0, x.typs.Int, rc.next(x.typs.Int)) m0 = x.rewriteWideSelectToStores(pos, b, container, m0, x.typs.Int, rc.next(x.typs.Int)) diff --git a/src/cmd/compile/internal/ssagen/ssa.go b/src/cmd/compile/internal/ssagen/ssa.go index 45bf0e6dc4..c794d6ffd9 100644 --- a/src/cmd/compile/internal/ssagen/ssa.go +++ b/src/cmd/compile/internal/ssagen/ssa.go @@ -7133,7 +7133,7 @@ func EmitArgInfo(f *ir.Func, abiInfo *abi.ABIParamResultInfo) *obj.LSym { n := 0 writebyte := func(o uint8) { wOff = objw.Uint8(x, wOff, o) } - // Write one non-aggrgate arg/field/element. + // Write one non-aggregate arg/field/element. write1 := func(sz, offset int64) { if offset >= _special { writebyte(_offsetTooLarge) diff --git a/src/runtime/traceback_test.go b/src/runtime/traceback_test.go index 204b4f5316..88318782da 100644 --- a/src/runtime/traceback_test.go +++ b/src/runtime/traceback_test.go @@ -419,6 +419,17 @@ func TestTracebackArgs(t *testing.T) { "testTracebackArgs11b(0xffffffff?, 0xffffffff?, 0x3?, 0x4)", "testTracebackArgs11b(0x1, 0x2, 0x3, 0x4)"), }, + // Make sure spilled slice data pointers are spilled to the right location + // to ensure we see it listed without a ?. + // See issue 64414. + { + func() int { + poisonStack() + return testTracebackArgsSlice(testTracebackArgsSliceBackingStore[:]) + }, + // Note: capacity of the slice might be junk, as it is not used. + fmt.Sprintf("testTracebackArgsSlice({%p, 0x2, ", &testTracebackArgsSliceBackingStore[0]), + }, } for _, test := range tests { n := test.fn() @@ -667,6 +678,19 @@ func testTracebackArgs11b(a, b, c, d int32) int { return runtime.Stack(testTracebackArgsBuf[:], false) } +// norace to avoid race instrumentation changing spill locations. +// nosplit to avoid preemption or morestack spilling registers. +// +//go:norace +//go:nosplit +//go:noinline +func testTracebackArgsSlice(a []int) int { + n := runtime.Stack(testTracebackArgsBuf[:], false) + return a[1] + n +} + +var testTracebackArgsSliceBackingStore [2]int + // Poison the arg area with deterministic values. // //go:noinline From d59bd25a30bbfc96d4123517f6f7b637c910e059 Mon Sep 17 00:00:00 2001 From: Rhys Hiltner Date: Tue, 21 Nov 2023 15:31:26 -0800 Subject: [PATCH 111/313] runtime: test for contention in both semaphore paths Most contention on the runtime locks inside semaphores is observed in runtime.semrelease1, but it can also appear in runtime.semacquire1. When examining contention profiles in TestRuntimeLockMetricsAndProfile, allow call stacks that include either. For #64253 Change-Id: Id4f16af5e9a28615ab5032a3197e8df90f7e382f Reviewed-on: https://go-review.googlesource.com/c/go/+/544375 Reviewed-by: Dmitri Shuralyov Auto-Submit: Rhys Hiltner LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek --- src/runtime/metrics_test.go | 76 +++++++++++++++++++++++++------------ 1 file changed, 51 insertions(+), 25 deletions(-) diff --git a/src/runtime/metrics_test.go b/src/runtime/metrics_test.go index d28a589adc..7074abfd69 100644 --- a/src/runtime/metrics_test.go +++ b/src/runtime/metrics_test.go @@ -1018,7 +1018,7 @@ func TestRuntimeLockMetricsAndProfile(t *testing.T) { return metricGrowth, profileGrowth, p } - testcase := func(strictTiming bool, stk []string, workers int, fn func() bool) func(t *testing.T) (metricGrowth, profileGrowth float64, n, value int64) { + testcase := func(strictTiming bool, acceptStacks [][]string, workers int, fn func() bool) func(t *testing.T) (metricGrowth, profileGrowth float64, n, value int64) { return func(t *testing.T) (metricGrowth, profileGrowth float64, n, value int64) { metricGrowth, profileGrowth, p := measureDelta(t, func() { var started, stopped sync.WaitGroup @@ -1056,19 +1056,24 @@ func TestRuntimeLockMetricsAndProfile(t *testing.T) { t.Logf("lock contention growth in runtime/pprof's view (%fs)", profileGrowth) t.Logf("lock contention growth in runtime/metrics' view (%fs)", metricGrowth) - if goexperiment.StaticLockRanking { - if !slices.ContainsFunc(stk, func(s string) bool { - return s == "runtime.systemstack" || s == "runtime.mcall" || s == "runtime.mstart" - }) { - // stk is a call stack that is still on the user stack when - // it calls runtime.unlock. Add the extra function that - // we'll see, when the static lock ranking implementation of - // runtime.unlockWithRank switches to the system stack. - stk = append([]string{"runtime.unlockWithRank"}, stk...) + acceptStacks = append([][]string(nil), acceptStacks...) + for i, stk := range acceptStacks { + if goexperiment.StaticLockRanking { + if !slices.ContainsFunc(stk, func(s string) bool { + return s == "runtime.systemstack" || s == "runtime.mcall" || s == "runtime.mstart" + }) { + // stk is a call stack that is still on the user stack when + // it calls runtime.unlock. Add the extra function that + // we'll see, when the static lock ranking implementation of + // runtime.unlockWithRank switches to the system stack. + stk = append([]string{"runtime.unlockWithRank"}, stk...) + } } + acceptStacks[i] = stk } var stks [][]string + values := make([][2]int64, len(acceptStacks)) for _, s := range p.Sample { var have []string for _, loc := range s.Location { @@ -1077,18 +1082,26 @@ func TestRuntimeLockMetricsAndProfile(t *testing.T) { } } stks = append(stks, have) - if slices.Equal(have, stk) { - n += s.Value[0] - value += s.Value[1] + for i, stk := range acceptStacks { + if slices.Equal(have, stk) { + values[i][0] += s.Value[0] + values[i][1] += s.Value[1] + } } } - t.Logf("stack %v has samples totaling n=%d value=%d", stk, n, value) + for i, stk := range acceptStacks { + n += values[i][0] + value += values[i][1] + t.Logf("stack %v has samples totaling n=%d value=%d", stk, values[i][0], values[i][1]) + } if n == 0 && value == 0 { t.Logf("profile:\n%s", p) for _, have := range stks { t.Logf("have stack %v", have) } - t.Errorf("want stack %v", stk) + for _, stk := range acceptStacks { + t.Errorf("want stack %v", stk) + } } return metricGrowth, profileGrowth, n, value @@ -1140,18 +1153,18 @@ func TestRuntimeLockMetricsAndProfile(t *testing.T) { return true } - stk := []string{ + stks := [][]string{{ "runtime.unlock", "runtime_test." + name + ".func5.1", "runtime_test.(*contentionWorker).run", - } + }} t.Run("sample-1", func(t *testing.T) { old := runtime.SetMutexProfileFraction(1) defer runtime.SetMutexProfileFraction(old) needContention.Store(int64(len(mus) - 1)) - metricGrowth, profileGrowth, n, _ := testcase(true, stk, workers, fn)(t) + metricGrowth, profileGrowth, n, _ := testcase(true, stks, workers, fn)(t) if have, want := metricGrowth, delay.Seconds()*float64(len(mus)); have < want { // The test imposes a delay with usleep, verified with calls to @@ -1175,7 +1188,7 @@ func TestRuntimeLockMetricsAndProfile(t *testing.T) { defer runtime.SetMutexProfileFraction(old) needContention.Store(int64(len(mus) - 1)) - metricGrowth, profileGrowth, n, _ := testcase(true, stk, workers, fn)(t) + metricGrowth, profileGrowth, n, _ := testcase(true, stks, workers, fn)(t) // With 100 trials and profile fraction of 2, we expect to capture // 50 samples. Allow the test to pass if we get at least 20 samples; @@ -1231,11 +1244,20 @@ func TestRuntimeLockMetricsAndProfile(t *testing.T) { return true } - stk := []string{ - "runtime.unlock", - "runtime.semrelease1", - "runtime_test.TestRuntimeLockMetricsAndProfile.func6.1", - "runtime_test.(*contentionWorker).run", + stks := [][]string{ + { + "runtime.unlock", + "runtime.semrelease1", + "runtime_test.TestRuntimeLockMetricsAndProfile.func6.1", + "runtime_test.(*contentionWorker).run", + }, + { + "runtime.unlock", + "runtime.semacquire1", + "runtime.semacquire", + "runtime_test.TestRuntimeLockMetricsAndProfile.func6.1", + "runtime_test.(*contentionWorker).run", + }, } // Verify that we get call stack we expect, with anything more than zero @@ -1243,7 +1265,11 @@ func TestRuntimeLockMetricsAndProfile(t *testing.T) { // small relative to the expected overhead for us to verify its value // more directly. Leave that to the explicit lock/unlock test. - testcase(false, stk, workers, fn)(t) + testcase(false, stks, workers, fn)(t) + + if remaining := tries.Load(); remaining >= 0 { + t.Logf("finished test early (%d tries remaining)", remaining) + } }) } From 7ccddf040a2aacfd65c75de3b54965271a7cbd98 Mon Sep 17 00:00:00 2001 From: cui fliter Date: Fri, 3 Nov 2023 19:54:41 +0800 Subject: [PATCH 112/313] sort: add available godoc link Change-Id: I64645fef0ffd1cea7c7710ec974520f85e0f7496 Reviewed-on: https://go-review.googlesource.com/c/go/+/539579 Run-TryBot: shuang cui Reviewed-by: Bryan Mills Reviewed-by: qiulaidongfeng <2645477756@qq.com> Auto-Submit: Dmitri Shuralyov TryBot-Result: Gopher Robot Reviewed-by: Dmitri Shuralyov --- src/sort/search.go | 10 +++++----- src/sort/slice.go | 8 ++++---- src/sort/sort.go | 16 ++++++++-------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/sort/search.go b/src/sort/search.go index 874e40813d..ccf76dba24 100644 --- a/src/sort/search.go +++ b/src/sort/search.go @@ -117,7 +117,7 @@ func Find(n int, cmp func(int) int) (i int, found bool) { // Convenience wrappers for common cases. // SearchInts searches for x in a sorted slice of ints and returns the index -// as specified by Search. The return value is the index to insert x if x is +// as specified by [Search]. The return value is the index to insert x if x is // not present (it could be len(a)). // The slice must be sorted in ascending order. func SearchInts(a []int, x int) int { @@ -125,7 +125,7 @@ func SearchInts(a []int, x int) int { } // SearchFloat64s searches for x in a sorted slice of float64s and returns the index -// as specified by Search. The return value is the index to insert x if x is not +// as specified by [Search]. The return value is the index to insert x if x is not // present (it could be len(a)). // The slice must be sorted in ascending order. func SearchFloat64s(a []float64, x float64) int { @@ -140,11 +140,11 @@ func SearchStrings(a []string, x string) int { return Search(len(a), func(i int) bool { return a[i] >= x }) } -// Search returns the result of applying SearchInts to the receiver and x. +// Search returns the result of applying [SearchInts] to the receiver and x. func (p IntSlice) Search(x int) int { return SearchInts(p, x) } -// Search returns the result of applying SearchFloat64s to the receiver and x. +// Search returns the result of applying [SearchFloat64s] to the receiver and x. func (p Float64Slice) Search(x float64) int { return SearchFloat64s(p, x) } -// Search returns the result of applying SearchStrings to the receiver and x. +// Search returns the result of applying [SearchStrings] to the receiver and x. func (p StringSlice) Search(x string) int { return SearchStrings(p, x) } diff --git a/src/sort/slice.go b/src/sort/slice.go index 73ba548a47..bc9dd84ed2 100644 --- a/src/sort/slice.go +++ b/src/sort/slice.go @@ -14,12 +14,12 @@ import ( // // The sort is not guaranteed to be stable: equal elements // may be reversed from their original order. -// For a stable sort, use SliceStable. +// For a stable sort, use [SliceStable]. // // The less function must satisfy the same requirements as // the Interface type's Less method. // -// Note: in many situations, the newer slices.SortFunc function is more +// Note: in many situations, the newer [slices.SortFunc] function is more // ergonomic and runs faster. func Slice(x any, less func(i, j int) bool) { rv := reflectlite.ValueOf(x) @@ -36,7 +36,7 @@ func Slice(x any, less func(i, j int) bool) { // The less function must satisfy the same requirements as // the Interface type's Less method. // -// Note: in many situations, the newer slices.SortStableFunc function is more +// Note: in many situations, the newer [slices.SortStableFunc] function is more // ergonomic and runs faster. func SliceStable(x any, less func(i, j int) bool) { rv := reflectlite.ValueOf(x) @@ -47,7 +47,7 @@ func SliceStable(x any, less func(i, j int) bool) { // SliceIsSorted reports whether the slice x is sorted according to the provided less function. // It panics if x is not a slice. // -// Note: in many situations, the newer slices.IsSortedFunc function is more +// Note: in many situations, the newer [slices.IsSortedFunc] function is more // ergonomic and runs faster. func SliceIsSorted(x any, less func(i, j int) bool) bool { rv := reflectlite.ValueOf(x) diff --git a/src/sort/sort.go b/src/sort/sort.go index 8ea62a5e6a..6db161f0c0 100644 --- a/src/sort/sort.go +++ b/src/sort/sort.go @@ -40,7 +40,7 @@ type Interface interface { // It makes one call to data.Len to determine n and O(n*log(n)) calls to // data.Less and data.Swap. The sort is not guaranteed to be stable. // -// Note: in many situations, the newer slices.SortFunc function is more +// Note: in many situations, the newer [slices.SortFunc] function is more // ergonomic and runs faster. func Sort(data Interface) { n := data.Len() @@ -100,7 +100,7 @@ func Reverse(data Interface) Interface { // IsSorted reports whether data is sorted. // -// Note: in many situations, the newer slices.IsSortedFunc function is more +// Note: in many situations, the newer [slices.IsSortedFunc] function is more // ergonomic and runs faster. func IsSorted(data Interface) bool { n := data.Len() @@ -161,34 +161,34 @@ func (x StringSlice) Sort() { Sort(x) } // Ints sorts a slice of ints in increasing order. // -// Note: as of Go 1.22, this function simply calls slices.Sort. +// Note: as of Go 1.22, this function simply calls [slices.Sort]. func Ints(x []int) { intsImpl(x) } // Float64s sorts a slice of float64s in increasing order. // Not-a-number (NaN) values are ordered before other values. // -// Note: as of Go 1.22, this function simply calls slices.Sort. +// Note: as of Go 1.22, this function simply calls [slices.Sort]. func Float64s(x []float64) { float64sImpl(x) } // Strings sorts a slice of strings in increasing order. // -// Note: as of Go 1.22, this function simply calls slices.Sort. +// Note: as of Go 1.22, this function simply calls [slices.Sort]. func Strings(x []string) { stringsImpl(x) } // IntsAreSorted reports whether the slice x is sorted in increasing order. // -// Note: as of Go 1.22, this function simply calls slices.IsSorted. +// Note: as of Go 1.22, this function simply calls [slices.IsSorted]. func IntsAreSorted(x []int) bool { return intsAreSortedImpl(x) } // Float64sAreSorted reports whether the slice x is sorted in increasing order, // with not-a-number (NaN) values before any other values. // -// Note: as of Go 1.22, this function simply calls slices.IsSorted. +// Note: as of Go 1.22, this function simply calls [slices.IsSorted]. func Float64sAreSorted(x []float64) bool { return float64sAreSortedImpl(x) } // StringsAreSorted reports whether the slice x is sorted in increasing order. // -// Note: as of Go 1.22, this function simply calls slices.IsSorted. +// Note: as of Go 1.22, this function simply calls [slices.IsSorted]. func StringsAreSorted(x []string) bool { return stringsAreSortedImpl(x) } // Notes on stable sorting: From 5df4a6376f4368e55bfb848f27f078f237f01482 Mon Sep 17 00:00:00 2001 From: Mauri de Souza Meneguzzo Date: Tue, 28 Nov 2023 18:50:01 +0000 Subject: [PATCH 113/313] doc: document PCALIGN directive Fixes #64283 Change-Id: Ie0167410fc5557143f0b2e17af56ad9fe34605cf GitHub-Last-Rev: 77144c76d38ca261b6728ba12ff128d22553efa5 GitHub-Pull-Request: golang/go#64296 Reviewed-on: https://go-review.googlesource.com/c/go/+/544115 LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall Reviewed-by: Cherry Mui Auto-Submit: Keith Randall Reviewed-by: Keith Randall --- doc/asm.html | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/doc/asm.html b/doc/asm.html index f7787a4076..dd395ec833 100644 --- a/doc/asm.html +++ b/doc/asm.html @@ -464,6 +464,23 @@ Function is the outermost frame of the call stack. Traceback should stop at this +

Special instructions

+ +

+The PCALIGN pseudo-instruction is used to indicate that the next instruction should be aligned +to a specified boundary by padding with no-op instructions. +

+ +

+It is currently supported on arm64, amd64, ppc64, loong64 and riscv64. + +For example, the start of the MOVD instruction below is aligned to 32 bytes: +

+PCALIGN $32
+MOVD $2, R0
+
+

+

Interacting with Go types and constants

From b2efd1de97402ec4b8fb4e9e0ec29c8e49e8e200 Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Mon, 27 Nov 2023 22:27:32 +0000 Subject: [PATCH 114/313] runtime: put ReadMemStats debug assertions behind a double-check mode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ReadMemStats has a few assertions it makes about the consistency of the stats it's about to produce. Specifically, how those stats line up with runtime-internal stats. These checks are generally useful, but crashing just because some stats are wrong is a heavy price to pay. For a long time this wasn't a problem, but very recently it became a real problem. It turns out that there's real benign skew that can happen wherein sysmon (which doesn't synchronize with a STW) generates a trace event when tracing is enabled, and may mutate some stats while ReadMemStats is running its checks. Fix this by synchronizing with both sysmon and the tracer. This is a bit heavy-handed, but better that than false positives. Also, put the checks behind a debug mode. We want to reduce the risk of backporting this change, and again, it's not great to crash just because user-facing stats are off. Still, enable this debug mode during the runtime tests so we don't lose quite as much coverage from disabling these checks by default. Fixes #64401. Change-Id: I9adb3e5c7161d207648d07373a11da8a5f0fda9a Reviewed-on: https://go-review.googlesource.com/c/go/+/545277 LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Pratt Reviewed-by: Felix Geisendörfer --- src/runtime/export_test.go | 2 + src/runtime/gc_test.go | 5 ++ src/runtime/mstats.go | 114 +++++++++++++++++++++---------------- 3 files changed, 71 insertions(+), 50 deletions(-) diff --git a/src/runtime/export_test.go b/src/runtime/export_test.go index d071035e62..9249550fd7 100644 --- a/src/runtime/export_test.go +++ b/src/runtime/export_test.go @@ -464,6 +464,8 @@ func ReadMetricsSlow(memStats *MemStats, samplesp unsafe.Pointer, len, cap int) startTheWorld(stw) } +var DoubleCheckReadMemStats = &doubleCheckReadMemStats + // ReadMemStatsSlow returns both the runtime-computed MemStats and // MemStats accumulated by scanning the heap. func ReadMemStatsSlow() (base, slow MemStats) { diff --git a/src/runtime/gc_test.go b/src/runtime/gc_test.go index b80396aa11..c6759a172c 100644 --- a/src/runtime/gc_test.go +++ b/src/runtime/gc_test.go @@ -577,6 +577,11 @@ func TestPageAccounting(t *testing.T) { } } +func init() { + // Enable ReadMemStats' double-check mode. + *runtime.DoubleCheckReadMemStats = true +} + func TestReadMemStats(t *testing.T) { base, slow := runtime.ReadMemStatsSlow() if base != slow { diff --git a/src/runtime/mstats.go b/src/runtime/mstats.go index 874b08ae3a..87afec47c8 100644 --- a/src/runtime/mstats.go +++ b/src/runtime/mstats.go @@ -361,6 +361,11 @@ func ReadMemStats(m *MemStats) { startTheWorld(stw) } +// doubleCheckReadMemStats controls a double-check mode for ReadMemStats that +// ensures consistency between the values that ReadMemStats is using and the +// runtime-internal stats. +var doubleCheckReadMemStats = false + // readmemstats_m populates stats for internal runtime values. // // The world must be stopped. @@ -435,56 +440,65 @@ func readmemstats_m(stats *MemStats) { heapGoal := gcController.heapGoal() - // The world is stopped, so the consistent stats (after aggregation) - // should be identical to some combination of memstats. In particular: - // - // * memstats.heapInUse == inHeap - // * memstats.heapReleased == released - // * memstats.heapInUse + memstats.heapFree == committed - inStacks - inWorkBufs - inPtrScalarBits - // * memstats.totalAlloc == totalAlloc - // * memstats.totalFree == totalFree - // - // Check if that's actually true. - // - // TODO(mknyszek): Maybe don't throw here. It would be bad if a - // bug in otherwise benign accounting caused the whole application - // to crash. - if gcController.heapInUse.load() != uint64(consStats.inHeap) { - print("runtime: heapInUse=", gcController.heapInUse.load(), "\n") - print("runtime: consistent value=", consStats.inHeap, "\n") - throw("heapInUse and consistent stats are not equal") - } - if gcController.heapReleased.load() != uint64(consStats.released) { - print("runtime: heapReleased=", gcController.heapReleased.load(), "\n") - print("runtime: consistent value=", consStats.released, "\n") - throw("heapReleased and consistent stats are not equal") - } - heapRetained := gcController.heapInUse.load() + gcController.heapFree.load() - consRetained := uint64(consStats.committed - consStats.inStacks - consStats.inWorkBufs - consStats.inPtrScalarBits) - if heapRetained != consRetained { - print("runtime: global value=", heapRetained, "\n") - print("runtime: consistent value=", consRetained, "\n") - throw("measures of the retained heap are not equal") - } - if gcController.totalAlloc.Load() != totalAlloc { - print("runtime: totalAlloc=", gcController.totalAlloc.Load(), "\n") - print("runtime: consistent value=", totalAlloc, "\n") - throw("totalAlloc and consistent stats are not equal") - } - if gcController.totalFree.Load() != totalFree { - print("runtime: totalFree=", gcController.totalFree.Load(), "\n") - print("runtime: consistent value=", totalFree, "\n") - throw("totalFree and consistent stats are not equal") - } - // Also check that mappedReady lines up with totalMapped - released. - // This isn't really the same type of "make sure consistent stats line up" situation, - // but this is an opportune time to check. - if gcController.mappedReady.Load() != totalMapped-uint64(consStats.released) { - print("runtime: mappedReady=", gcController.mappedReady.Load(), "\n") - print("runtime: totalMapped=", totalMapped, "\n") - print("runtime: released=", uint64(consStats.released), "\n") - print("runtime: totalMapped-released=", totalMapped-uint64(consStats.released), "\n") - throw("mappedReady and other memstats are not equal") + if doubleCheckReadMemStats { + // Only check this if we're debugging. It would be bad to crash an application + // just because the debugging stats are wrong. We mostly rely on tests to catch + // these issues, and we enable the double check mode for tests. + // + // The world is stopped, so the consistent stats (after aggregation) + // should be identical to some combination of memstats. In particular: + // + // * memstats.heapInUse == inHeap + // * memstats.heapReleased == released + // * memstats.heapInUse + memstats.heapFree == committed - inStacks - inWorkBufs - inPtrScalarBits + // * memstats.totalAlloc == totalAlloc + // * memstats.totalFree == totalFree + // + // Check if that's actually true. + // + // Prevent sysmon and the tracer from skewing the stats since they can + // act without synchronizing with a STW. See #64401. + lock(&sched.sysmonlock) + lock(&trace.lock) + if gcController.heapInUse.load() != uint64(consStats.inHeap) { + print("runtime: heapInUse=", gcController.heapInUse.load(), "\n") + print("runtime: consistent value=", consStats.inHeap, "\n") + throw("heapInUse and consistent stats are not equal") + } + if gcController.heapReleased.load() != uint64(consStats.released) { + print("runtime: heapReleased=", gcController.heapReleased.load(), "\n") + print("runtime: consistent value=", consStats.released, "\n") + throw("heapReleased and consistent stats are not equal") + } + heapRetained := gcController.heapInUse.load() + gcController.heapFree.load() + consRetained := uint64(consStats.committed - consStats.inStacks - consStats.inWorkBufs - consStats.inPtrScalarBits) + if heapRetained != consRetained { + print("runtime: global value=", heapRetained, "\n") + print("runtime: consistent value=", consRetained, "\n") + throw("measures of the retained heap are not equal") + } + if gcController.totalAlloc.Load() != totalAlloc { + print("runtime: totalAlloc=", gcController.totalAlloc.Load(), "\n") + print("runtime: consistent value=", totalAlloc, "\n") + throw("totalAlloc and consistent stats are not equal") + } + if gcController.totalFree.Load() != totalFree { + print("runtime: totalFree=", gcController.totalFree.Load(), "\n") + print("runtime: consistent value=", totalFree, "\n") + throw("totalFree and consistent stats are not equal") + } + // Also check that mappedReady lines up with totalMapped - released. + // This isn't really the same type of "make sure consistent stats line up" situation, + // but this is an opportune time to check. + if gcController.mappedReady.Load() != totalMapped-uint64(consStats.released) { + print("runtime: mappedReady=", gcController.mappedReady.Load(), "\n") + print("runtime: totalMapped=", totalMapped, "\n") + print("runtime: released=", uint64(consStats.released), "\n") + print("runtime: totalMapped-released=", totalMapped-uint64(consStats.released), "\n") + throw("mappedReady and other memstats are not equal") + } + unlock(&trace.lock) + unlock(&sched.sysmonlock) } // We've calculated all the values we need. Now, populate stats. From aae7734658e5f302c0e3a10f6c5c596fd384dbd7 Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Tue, 28 Nov 2023 17:10:46 +0000 Subject: [PATCH 115/313] internal/trace/v2: tolerate having a P in GoCreateSyscall On non-pthread platforms, it's totally possible for the same M to GoCreateSyscall/GoDestroySyscall on the same thread multiple times. That same thread may hold onto its P through all those calls. For #64060. Change-Id: Ib968bfd439ecd5bc24fc98d78c06145b0d4b7802 Reviewed-on: https://go-review.googlesource.com/c/go/+/545515 Reviewed-by: Michael Pratt LUCI-TryBot-Result: Go LUCI --- src/internal/trace/v2/order.go | 2 +- .../generators/go122-create-syscall-with-p.go | 54 +++++++++++++++++++ .../tests/go122-create-syscall-with-p.test | 22 ++++++++ 3 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 src/internal/trace/v2/testdata/generators/go122-create-syscall-with-p.go create mode 100644 src/internal/trace/v2/testdata/tests/go122-create-syscall-with-p.test diff --git a/src/internal/trace/v2/order.go b/src/internal/trace/v2/order.go index 83cccb4722..bfc2c5c44d 100644 --- a/src/internal/trace/v2/order.go +++ b/src/internal/trace/v2/order.go @@ -485,7 +485,7 @@ func (o *ordering) advance(ev *baseEvent, evt *evTable, m ThreadID, gen uint64) // This event indicates that a goroutine is effectively // being created out of a cgo callback. Such a goroutine // is 'created' in the syscall state. - if err := validateCtx(curCtx, event.SchedReqs{Thread: event.MustHave, Proc: event.MustNotHave, Goroutine: event.MustNotHave}); err != nil { + if err := validateCtx(curCtx, event.SchedReqs{Thread: event.MustHave, Proc: event.MayHave, Goroutine: event.MustNotHave}); err != nil { return curCtx, false, err } // This goroutine is effectively being created. Add a state for it. diff --git a/src/internal/trace/v2/testdata/generators/go122-create-syscall-with-p.go b/src/internal/trace/v2/testdata/generators/go122-create-syscall-with-p.go new file mode 100644 index 0000000000..59055e5e62 --- /dev/null +++ b/src/internal/trace/v2/testdata/generators/go122-create-syscall-with-p.go @@ -0,0 +1,54 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Tests a G being created from within a syscall. +// +// Specifically, it tests a scenerio wherein a C +// thread is calling into Go, creating a goroutine in +// a syscall (in the tracer's model). Because the actual +// m can be reused, it's possible for that m to have never +// had its P (in _Psyscall) stolen. +// +// This is a regression test. The trace parser once required +// GoCreateSyscall to not have a P, but it can in the scenario +// described above. + +package main + +import ( + "internal/trace/v2" + "internal/trace/v2/event/go122" + testgen "internal/trace/v2/internal/testgen/go122" +) + +func main() { + testgen.Main(gen) +} + +func gen(t *testgen.Trace) { + t.DisableTimestamps() + + g := t.Generation(1) + + // A C thread calls into Go and acquires a P. It returns + // back to C, destroying the G. It then comes back to Go + // on the same thread and again returns to C. + // + // Note: on pthread platforms this can't happen on the + // same thread because the m is stashed in TLS between + // calls into Go, until the thread dies. This is still + // possible on other platforms, however. + b0 := g.Batch(trace.ThreadID(0), 0) + b0.Event("GoCreateSyscall", trace.GoID(4)) + b0.Event("ProcStatus", trace.ProcID(0), go122.ProcIdle) + b0.Event("ProcStart", trace.ProcID(0), testgen.Seq(1)) + b0.Event("GoSyscallEndBlocked") + b0.Event("GoStart", trace.GoID(4), testgen.Seq(1)) + b0.Event("GoSyscallBegin", testgen.Seq(2), testgen.NoStack) + b0.Event("GoDestroySyscall") + b0.Event("GoCreateSyscall", trace.GoID(4)) + b0.Event("GoSyscallEnd") + b0.Event("GoSyscallBegin", testgen.Seq(3), testgen.NoStack) + b0.Event("GoDestroySyscall") +} diff --git a/src/internal/trace/v2/testdata/tests/go122-create-syscall-with-p.test b/src/internal/trace/v2/testdata/tests/go122-create-syscall-with-p.test new file mode 100644 index 0000000000..95f86b6f2f --- /dev/null +++ b/src/internal/trace/v2/testdata/tests/go122-create-syscall-with-p.test @@ -0,0 +1,22 @@ +-- expect -- +SUCCESS +-- trace -- +Trace Go1.22 +EventBatch gen=1 m=0 time=0 size=34 +GoCreateSyscall dt=0 new_g=4 +ProcStatus dt=0 p=0 pstatus=2 +ProcStart dt=0 p=0 p_seq=1 +GoSyscallEndBlocked dt=0 +GoStart dt=0 g=4 g_seq=1 +GoSyscallBegin dt=0 p_seq=2 stack=0 +GoDestroySyscall dt=0 +GoCreateSyscall dt=0 new_g=4 +GoSyscallEnd dt=0 +GoSyscallBegin dt=0 p_seq=3 stack=0 +GoDestroySyscall dt=0 +EventBatch gen=1 m=18446744073709551615 time=0 size=5 +Frequency freq=15625000 +EventBatch gen=1 m=18446744073709551615 time=0 size=1 +Stacks +EventBatch gen=1 m=18446744073709551615 time=0 size=1 +Strings From 6111acc8e6bc96f5ca0fa58adf4a0226fff3dd28 Mon Sep 17 00:00:00 2001 From: Alan Donovan Date: Tue, 28 Nov 2023 16:07:01 -0500 Subject: [PATCH 116/313] go/types: include AST in instantiatedIdent panic message Updates golang/go#63933 Change-Id: I3ff71e92d124c850eb8b4d136e163bf5786897a2 Reviewed-on: https://go-review.googlesource.com/c/go/+/545615 LUCI-TryBot-Result: Go LUCI Reviewed-by: Robert Findley Auto-Submit: Alan Donovan --- src/go/types/check.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/go/types/check.go b/src/go/types/check.go index 4a5f0731df..85fd0744d2 100644 --- a/src/go/types/check.go +++ b/src/go/types/check.go @@ -14,6 +14,7 @@ import ( "go/token" "internal/godebug" . "internal/types/errors" + "strings" ) // nopos indicates an unknown position @@ -618,7 +619,12 @@ func instantiatedIdent(expr ast.Expr) *ast.Ident { case *ast.SelectorExpr: return x.Sel } - panic("instantiated ident not found") + + // extra debugging of #63933 + var buf strings.Builder + buf.WriteString("instantiated ident not found; please report: ") + ast.Fprint(&buf, token.NewFileSet(), expr, ast.NotNilFilter) + panic(buf.String()) } func (check *Checker) recordDef(id *ast.Ident, obj Object) { From 1908d4354b5b1cb02edd9f93d024551fe812eb22 Mon Sep 17 00:00:00 2001 From: qiulaidongfeng <2645477756@qq.com> Date: Wed, 29 Nov 2023 12:45:01 +0000 Subject: [PATCH 117/313] cmd/internal/moddeps: walk GOROOT when it is a symlink Fixes #64375 Change-Id: I24ce67ef254db447cdf37a3fda5b5ab5fc782a36 GitHub-Last-Rev: 05590b9e20b31413d455a6e87bc38843e33ff116 GitHub-Pull-Request: golang/go#64376 Reviewed-on: https://go-review.googlesource.com/c/go/+/544757 Auto-Submit: Bryan Mills Reviewed-by: Bryan Mills TryBot-Result: Gopher Robot Run-TryBot: Bryan Mills Reviewed-by: Dmitri Shuralyov --- src/cmd/internal/moddeps/moddeps_test.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/cmd/internal/moddeps/moddeps_test.go b/src/cmd/internal/moddeps/moddeps_test.go index ae890b66cb..3d4c99eecb 100644 --- a/src/cmd/internal/moddeps/moddeps_test.go +++ b/src/cmd/internal/moddeps/moddeps_test.go @@ -443,7 +443,14 @@ func findGorootModules(t *testing.T) []gorootModule { goBin := testenv.GoToolPath(t) goroot.once.Do(func() { - goroot.err = filepath.WalkDir(testenv.GOROOT(t), func(path string, info fs.DirEntry, err error) error { + // If the root itself is a symlink to a directory, + // we want to follow it (see https://go.dev/issue/64375). + // Add a trailing separator to force that to happen. + root := testenv.GOROOT(t) + if !os.IsPathSeparator(root[len(root)-1]) { + root += string(filepath.Separator) + } + goroot.err = filepath.WalkDir(root, func(path string, info fs.DirEntry, err error) error { if err != nil { return err } From b9a4eaa62b043fdb91f1f4a1e4b5ccfd3bdca36f Mon Sep 17 00:00:00 2001 From: qmuntal Date: Wed, 29 Nov 2023 11:15:54 +0100 Subject: [PATCH 118/313] cmd/cgo/internal/test: only test specific frames in testCallbackCallersSEH testCallbackCallersSEH will break if anything in this call chain is refactored to have a different number of function calls. This change makes the test more robust by only testing the frames that are actually relevant to the test. Change-Id: Idb51514d7079f55da6e6ddc52ad43b1ffe32c8c8 Reviewed-on: https://go-review.googlesource.com/c/go/+/545755 Run-TryBot: Quim Muntal LUCI-TryBot-Result: Go LUCI Reviewed-by: Than McIntosh Auto-Submit: Quim Muntal Reviewed-by: Bryan Mills TryBot-Result: Gopher Robot --- src/cmd/cgo/internal/test/callback_windows.go | 38 ++++--------------- 1 file changed, 7 insertions(+), 31 deletions(-) diff --git a/src/cmd/cgo/internal/test/callback_windows.go b/src/cmd/cgo/internal/test/callback_windows.go index 95e97c9af9..77bdfa4dd3 100644 --- a/src/cmd/cgo/internal/test/callback_windows.go +++ b/src/cmd/cgo/internal/test/callback_windows.go @@ -29,7 +29,7 @@ USHORT backtrace(ULONG FramesToCapture, PVOID *BackTrace) { } ControlPc = context.Rip; - // Check if we left the user range. + // Check if we left the user range. if (ControlPc < 0x10000) { break; } @@ -65,32 +65,17 @@ func testCallbackCallersSEH(t *testing.T) { // TODO: support SEH on other architectures. t.Skip("skipping on non-amd64") } - const cgoexpPrefix = "_cgoexp_" + // Only frames in the test package are checked. want := []string{ - "runtime.asmcgocall_landingpad", - "runtime.asmcgocall", - "runtime.cgocall", "test._Cfunc_backtrace", "test.testCallbackCallersSEH.func1.1", "test.testCallbackCallersSEH.func1", "test.goCallback", - cgoexpPrefix + "goCallback", - "runtime.cgocallbackg1", - "runtime.cgocallbackg", - "runtime.cgocallbackg", - "runtime.cgocallback", - "crosscall2", - "runtime.asmcgocall_landingpad", - "runtime.asmcgocall", - "runtime.cgocall", "test._Cfunc_callback", "test.nestedCall.func1", "test.nestedCall", "test.testCallbackCallersSEH", "test.TestCallbackCallersSEH", - "testing.tRunner", - "testing.(*T).Run.gowrap1", - "runtime.goexit", } pc := make([]uintptr, 100) n := 0 @@ -105,26 +90,17 @@ func testCallbackCallersSEH(t *testing.T) { } fname := f.Name() switch fname { - case "goCallback", "callback": - // TODO(qmuntal): investigate why these functions don't appear + case "goCallback": + // TODO(qmuntal): investigate why this function doesn't appear // when using the external linker. continue } - // Skip cgo-generated functions, the runtime might not know about them, - // depending on the link mode. - if strings.HasPrefix(fname, "_cgo_") { - continue - } - // Remove the cgo-generated random prefix. - if strings.HasPrefix(fname, cgoexpPrefix) { - idx := strings.Index(fname[len(cgoexpPrefix):], "_") - if idx >= 0 { - fname = cgoexpPrefix + fname[len(cgoexpPrefix)+idx+1:] - } - } // In module mode, this package has a fully-qualified import path. // Remove it if present. fname = strings.TrimPrefix(fname, "cmd/cgo/internal/") + if !strings.HasPrefix(fname, "test.") { + continue + } got = append(got, fname) } if !reflect.DeepEqual(want, got) { From c418da34cd82e041066259af123e6e36e7c2915f Mon Sep 17 00:00:00 2001 From: Peter Feichtinger Date: Fri, 24 Nov 2023 12:15:54 +0000 Subject: [PATCH 119/313] runtime: docfix countAlloc fix typo in `countAlloc` doc Change-Id: I9f0752412b7a7dfae4915870edeab4ac52e38b2d GitHub-Last-Rev: 6080d3c03ba6cacb1874af9724cfeb7cae27b78f GitHub-Pull-Request: golang/go#64357 Reviewed-on: https://go-review.googlesource.com/c/go/+/544755 Reviewed-by: Michael Pratt Reviewed-by: Hiro Hamada Reviewed-by: Michael Knyszek Auto-Submit: Michael Knyszek LUCI-TryBot-Result: Go LUCI --- src/runtime/mbitmap.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/mbitmap.go b/src/runtime/mbitmap.go index a0402d2933..cdd1c5fc3b 100644 --- a/src/runtime/mbitmap.go +++ b/src/runtime/mbitmap.go @@ -441,7 +441,7 @@ func typeBitsBulkBarrier(typ *_type, dst, src, size uintptr) { } // countAlloc returns the number of objects allocated in span s by -// scanning the allocation bitmap. +// scanning the mark bitmap. func (s *mspan) countAlloc() int { count := 0 bytes := divRoundUp(uintptr(s.nelems), 8) From 636c6e350dfc89c164f3e26aee85b241faf06ae0 Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Tue, 28 Nov 2023 13:09:42 -0800 Subject: [PATCH 120/313] doc: release notes for GOARM hardfloat/softfloat change See CL 514907 Change-Id: Ieba2d7737115c66990b0ea7629033e787a99be93 Reviewed-on: https://go-review.googlesource.com/c/go/+/545655 Reviewed-by: Keith Randall Reviewed-by: Ludi Rehak Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI Auto-Submit: Keith Randall --- doc/go1.22.html | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 287de0eebb..789ecc3c32 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -570,8 +570,15 @@ Do not send CLs removing the interior tags from such phrases.

Ports

+

Arm

- TODO: https://go.dev/cl/514907: all: add floating point option for ARM targets + The GOARM environment variable now allows you to select whether to use software or hardware floating point. + Previously, valid GOARM values were 5, 6, or 7. Now those same values can + be optionally followed by ,softfloat or ,hardfloat to select the floating-point implementation. +

+

+ This new option defaults to softfloat for version 5 and hardfloat for versions + 6 and 7.

From 27316739ac249bb07d47990ceb4013d442fd28dd Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Tue, 28 Nov 2023 09:50:25 +0700 Subject: [PATCH 121/313] types2, go/types: fix type checking of ~[]E passing to unsafe builtins Fixes #64406 Change-Id: I58002ad722a229fe6db0be08d745fbad86048c6d Reviewed-on: https://go-review.googlesource.com/c/go/+/545395 Reviewed-by: Robert Griesemer Run-TryBot: Robert Griesemer TryBot-Result: Gopher Robot Reviewed-by: Bryan Mills LUCI-TryBot-Result: Go LUCI Reviewed-by: Matthew Dempsky Auto-Submit: Robert Griesemer --- src/cmd/compile/internal/types2/builtins.go | 4 ++-- src/go/types/builtins.go | 4 ++-- .../types/testdata/fixedbugs/issue64406.go | 23 +++++++++++++++++++ 3 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 src/internal/types/testdata/fixedbugs/issue64406.go diff --git a/src/cmd/compile/internal/types2/builtins.go b/src/cmd/compile/internal/types2/builtins.go index 575a1daed2..60f6d7f415 100644 --- a/src/cmd/compile/internal/types2/builtins.go +++ b/src/cmd/compile/internal/types2/builtins.go @@ -799,7 +799,7 @@ func (check *Checker) builtin(x *operand, call *syntax.CallExpr, id builtinId) ( // unsafe.Slice(ptr *T, len IntegerType) []T check.verifyVersionf(call.Fun, go1_17, "unsafe.Slice") - ptr, _ := under(x.typ).(*Pointer) // TODO(gri) should this be coreType rather than under? + ptr, _ := coreType(x.typ).(*Pointer) if ptr == nil { check.errorf(x, InvalidUnsafeSlice, invalidArg+"%s is not a pointer", x) return @@ -820,7 +820,7 @@ func (check *Checker) builtin(x *operand, call *syntax.CallExpr, id builtinId) ( // unsafe.SliceData(slice []T) *T check.verifyVersionf(call.Fun, go1_20, "unsafe.SliceData") - slice, _ := under(x.typ).(*Slice) // TODO(gri) should this be coreType rather than under? + slice, _ := coreType(x.typ).(*Slice) if slice == nil { check.errorf(x, InvalidUnsafeSliceData, invalidArg+"%s is not a slice", x) return diff --git a/src/go/types/builtins.go b/src/go/types/builtins.go index 3a3cee1726..901573661b 100644 --- a/src/go/types/builtins.go +++ b/src/go/types/builtins.go @@ -798,7 +798,7 @@ func (check *Checker) builtin(x *operand, call *ast.CallExpr, id builtinId) (_ b // unsafe.Slice(ptr *T, len IntegerType) []T check.verifyVersionf(call.Fun, go1_17, "unsafe.Slice") - ptr, _ := under(x.typ).(*Pointer) // TODO(gri) should this be coreType rather than under? + ptr, _ := coreType(x.typ).(*Pointer) if ptr == nil { check.errorf(x, InvalidUnsafeSlice, invalidArg+"%s is not a pointer", x) return @@ -819,7 +819,7 @@ func (check *Checker) builtin(x *operand, call *ast.CallExpr, id builtinId) (_ b // unsafe.SliceData(slice []T) *T check.verifyVersionf(call.Fun, go1_20, "unsafe.SliceData") - slice, _ := under(x.typ).(*Slice) // TODO(gri) should this be coreType rather than under? + slice, _ := coreType(x.typ).(*Slice) if slice == nil { check.errorf(x, InvalidUnsafeSliceData, invalidArg+"%s is not a slice", x) return diff --git a/src/internal/types/testdata/fixedbugs/issue64406.go b/src/internal/types/testdata/fixedbugs/issue64406.go new file mode 100644 index 0000000000..54b959dbba --- /dev/null +++ b/src/internal/types/testdata/fixedbugs/issue64406.go @@ -0,0 +1,23 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package issue64406 + +import ( + "unsafe" +) + +func sliceData[E any, S ~[]E](s S) *E { + return unsafe.SliceData(s) +} + +func slice[E any, S ~*E](s S) []E { + return unsafe.Slice(s, 0) +} + +func f() { + s := []uint32{0} + _ = sliceData(s) + _ = slice(&s) +} From 83da21f0526ccebf0bcd83434e56b82c8a75f269 Mon Sep 17 00:00:00 2001 From: Dmitri Shuralyov Date: Wed, 29 Nov 2023 15:42:53 -0500 Subject: [PATCH 122/313] all: update vendored dependencies The Go 1.22 code freeze has recently started. This is a time to update all golang.org/x/... module versions that contribute packages to the std and cmd modules in the standard library to latest master versions. Generated with: go install golang.org/x/build/cmd/updatestd@latest go install golang.org/x/tools/cmd/bundle@latest updatestd -goroot=$(pwd) -branch=master For #36905. Change-Id: I76525261b9a954ed21a3bd3cb6c4a12e6c031d80 Cq-Include-Trybots: luci.golang.try:gotip-windows-amd64-longtest,gotip-linux-amd64-longtest,gotip-linux-386-longtest Reviewed-on: https://go-review.googlesource.com/c/go/+/546055 LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek Reviewed-by: Dmitri Shuralyov Auto-Submit: Dmitri Shuralyov --- src/cmd/go.mod | 8 +- src/cmd/go.sum | 16 +- src/cmd/vendor/golang.org/x/sys/unix/fcntl.go | 2 +- .../golang.org/x/sys/unix/ioctl_linux.go | 5 + .../vendor/golang.org/x/sys/unix/mkerrors.sh | 3 +- .../golang.org/x/sys/unix/pledge_openbsd.go | 110 ++----- .../golang.org/x/sys/unix/syscall_aix.go | 3 +- .../golang.org/x/sys/unix/syscall_bsd.go | 2 +- .../golang.org/x/sys/unix/syscall_linux.go | 29 +- .../golang.org/x/sys/unix/syscall_openbsd.go | 28 +- .../golang.org/x/sys/unix/syscall_solaris.go | 5 +- .../x/sys/unix/syscall_zos_s390x.go | 2 +- .../golang.org/x/sys/unix/unveil_openbsd.go | 41 ++- .../golang.org/x/sys/unix/zerrors_linux.go | 13 +- .../x/sys/unix/zerrors_linux_loong64.go | 1 + .../x/sys/unix/zerrors_linux_riscv64.go | 3 + .../golang.org/x/sys/unix/zsyscall_linux.go | 15 + .../x/sys/unix/zsyscall_openbsd_386.go | 71 +++++ .../x/sys/unix/zsyscall_openbsd_386.s | 20 ++ .../x/sys/unix/zsyscall_openbsd_amd64.go | 71 +++++ .../x/sys/unix/zsyscall_openbsd_amd64.s | 20 ++ .../x/sys/unix/zsyscall_openbsd_arm.go | 71 +++++ .../x/sys/unix/zsyscall_openbsd_arm.s | 20 ++ .../x/sys/unix/zsyscall_openbsd_arm64.go | 71 +++++ .../x/sys/unix/zsyscall_openbsd_arm64.s | 20 ++ .../x/sys/unix/zsyscall_openbsd_mips64.go | 71 +++++ .../x/sys/unix/zsyscall_openbsd_mips64.s | 20 ++ .../x/sys/unix/zsyscall_openbsd_ppc64.go | 71 +++++ .../x/sys/unix/zsyscall_openbsd_ppc64.s | 24 ++ .../x/sys/unix/zsyscall_openbsd_riscv64.go | 71 +++++ .../x/sys/unix/zsyscall_openbsd_riscv64.s | 20 ++ .../x/sys/unix/zsysnum_linux_386.go | 1 + .../x/sys/unix/zsysnum_linux_amd64.go | 2 + .../x/sys/unix/zsysnum_linux_arm.go | 1 + .../x/sys/unix/zsysnum_linux_arm64.go | 1 + .../x/sys/unix/zsysnum_linux_loong64.go | 1 + .../x/sys/unix/zsysnum_linux_mips.go | 1 + .../x/sys/unix/zsysnum_linux_mips64.go | 1 + .../x/sys/unix/zsysnum_linux_mips64le.go | 1 + .../x/sys/unix/zsysnum_linux_mipsle.go | 1 + .../x/sys/unix/zsysnum_linux_ppc.go | 1 + .../x/sys/unix/zsysnum_linux_ppc64.go | 1 + .../x/sys/unix/zsysnum_linux_ppc64le.go | 1 + .../x/sys/unix/zsysnum_linux_riscv64.go | 1 + .../x/sys/unix/zsysnum_linux_s390x.go | 1 + .../x/sys/unix/zsysnum_linux_sparc64.go | 1 + .../golang.org/x/sys/unix/ztypes_linux.go | 32 ++ .../x/sys/windows/syscall_windows.go | 5 +- .../x/sys/windows/zsyscall_windows.go | 19 ++ .../analysis/passes/testinggoroutine/doc.go | 2 +- .../testinggoroutine/testinggoroutine.go | 279 ++++++++++++------ .../analysis/passes/testinggoroutine/util.go | 96 ++++++ src/cmd/vendor/modules.txt | 8 +- src/go.mod | 8 +- src/go.sum | 16 +- src/net/http/h2_bundle.go | 150 +++++----- .../chacha20poly1305/chacha20poly1305_amd64.s | 24 +- .../golang.org/x/crypto/cryptobyte/asn1.go | 13 +- src/vendor/golang.org/x/crypto/hkdf/hkdf.go | 4 +- src/vendor/modules.txt | 8 +- 60 files changed, 1265 insertions(+), 342 deletions(-) create mode 100644 src/cmd/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/util.go diff --git a/src/cmd/go.mod b/src/cmd/go.mod index 8f66963c14..68ded94ba8 100644 --- a/src/cmd/go.mod +++ b/src/cmd/go.mod @@ -4,12 +4,12 @@ go 1.22 require ( github.com/google/pprof v0.0.0-20230811205829-9131a7e9cc17 - golang.org/x/arch v0.5.1-0.20231011141335-a6bdeed49307 + golang.org/x/arch v0.6.0 golang.org/x/mod v0.14.0 golang.org/x/sync v0.5.0 - golang.org/x/sys v0.13.1-0.20231011215430-1bfbee0e20e3 - golang.org/x/term v0.13.1-0.20231011140651-6a610bc55bff - golang.org/x/tools v0.15.1-0.20231120183520-8966034e4e53 + golang.org/x/sys v0.15.0 + golang.org/x/term v0.15.0 + golang.org/x/tools v0.16.1-0.20231129202111-1b1e4dafd51a ) require github.com/ianlancetaylor/demangle v0.0.0-20230524184225-eabc099b10ab // indirect diff --git a/src/cmd/go.sum b/src/cmd/go.sum index ea29f9f3a3..680616da07 100644 --- a/src/cmd/go.sum +++ b/src/cmd/go.sum @@ -2,15 +2,15 @@ github.com/google/pprof v0.0.0-20230811205829-9131a7e9cc17 h1:0h35ESZ02+hN/MFZb7 github.com/google/pprof v0.0.0-20230811205829-9131a7e9cc17/go.mod h1:Jh3hGz2jkYak8qXPD19ryItVnUgpgeqzdkY/D0EaeuA= github.com/ianlancetaylor/demangle v0.0.0-20230524184225-eabc099b10ab h1:BA4a7pe6ZTd9F8kXETBoijjFJ/ntaa//1wiH9BZu4zU= github.com/ianlancetaylor/demangle v0.0.0-20230524184225-eabc099b10ab/go.mod h1:gx7rwoVhcfuVKG5uya9Hs3Sxj7EIvldVofAWIUtGouw= -golang.org/x/arch v0.5.1-0.20231011141335-a6bdeed49307 h1:1nIbNxjxQ3+dss3xYMxayoIZONazUTg8/BENwc19sAQ= -golang.org/x/arch v0.5.1-0.20231011141335-a6bdeed49307/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= +golang.org/x/arch v0.6.0 h1:S0JTfE48HbRj80+4tbvZDYsJ3tGv6BUU3XxyZ7CirAc= +golang.org/x/arch v0.6.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.13.1-0.20231011215430-1bfbee0e20e3 h1:G9se7UpoI67yWrFY0IIFGf6H3nwLLUZFDBCyOJwWeSc= -golang.org/x/sys v0.13.1-0.20231011215430-1bfbee0e20e3/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.13.1-0.20231011140651-6a610bc55bff h1:4lCCwEX5qbLiqBk8cqIlwrDbmkzfggoqDXYLTU+jr30= -golang.org/x/term v0.13.1-0.20231011140651-6a610bc55bff/go.mod h1:tfGnZ3a6ww9diaioGSzdPRgIfpk6Odt1UPXNhRcgfag= -golang.org/x/tools v0.15.1-0.20231120183520-8966034e4e53 h1:OvqfI3Xzb220PLbcIqYXf6DUnr4RyR1MJOhkg8qsnaA= -golang.org/x/tools v0.15.1-0.20231120183520-8966034e4e53/go.mod h1:Qt/ThNq1+Jt2UJeOwUFFL3xcU1EExDk5yYNCBwMKeyA= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/tools v0.16.1-0.20231129202111-1b1e4dafd51a h1:0+Cdrtl1VNF5TeDTr0mLLPN4dMJFHnstbqMo/o1aReI= +golang.org/x/tools v0.16.1-0.20231129202111-1b1e4dafd51a/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= diff --git a/src/cmd/vendor/golang.org/x/sys/unix/fcntl.go b/src/cmd/vendor/golang.org/x/sys/unix/fcntl.go index 58c6bfc70f..6200876fb2 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/fcntl.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/fcntl.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build dragonfly || freebsd || linux || netbsd || openbsd +//go:build dragonfly || freebsd || linux || netbsd package unix diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ioctl_linux.go b/src/cmd/vendor/golang.org/x/sys/unix/ioctl_linux.go index 0d12c0851a..dbe680eab8 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/ioctl_linux.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/ioctl_linux.go @@ -231,3 +231,8 @@ func IoctlLoopGetStatus64(fd int) (*LoopInfo64, error) { func IoctlLoopSetStatus64(fd int, value *LoopInfo64) error { return ioctlPtr(fd, LOOP_SET_STATUS64, unsafe.Pointer(value)) } + +// IoctlLoopConfigure configures all loop device parameters in a single step +func IoctlLoopConfigure(fd int, value *LoopConfig) error { + return ioctlPtr(fd, LOOP_CONFIGURE, unsafe.Pointer(value)) +} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/mkerrors.sh b/src/cmd/vendor/golang.org/x/sys/unix/mkerrors.sh index cbe24150a7..6202638bae 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/src/cmd/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -519,6 +519,7 @@ ccflags="$@" $2 ~ /^LOCK_(SH|EX|NB|UN)$/ || $2 ~ /^LO_(KEY|NAME)_SIZE$/ || $2 ~ /^LOOP_(CLR|CTL|GET|SET)_/ || + $2 == "LOOP_CONFIGURE" || $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MREMAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT|UDP)_/ || $2 ~ /^NFC_(GENL|PROTO|COMM|RF|SE|DIRECTION|LLCP|SOCKPROTO)_/ || $2 ~ /^NFC_.*_(MAX)?SIZE$/ || @@ -560,7 +561,7 @@ ccflags="$@" $2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|LOCKS|MEMLOCK|MSGQUEUE|NICE|NOFILE|NPROC|RSS|RTPRIO|RTTIME|SIGPENDING|STACK)|RLIM_INFINITY/ || $2 ~ /^PRIO_(PROCESS|PGRP|USER)/ || $2 ~ /^CLONE_[A-Z_]+/ || - $2 !~ /^(BPF_TIMEVAL|BPF_FIB_LOOKUP_[A-Z]+)$/ && + $2 !~ /^(BPF_TIMEVAL|BPF_FIB_LOOKUP_[A-Z]+|BPF_F_LINK)$/ && $2 ~ /^(BPF|DLT)_/ || $2 ~ /^AUDIT_/ || $2 ~ /^(CLOCK|TIMER)_/ || diff --git a/src/cmd/vendor/golang.org/x/sys/unix/pledge_openbsd.go b/src/cmd/vendor/golang.org/x/sys/unix/pledge_openbsd.go index eb48294b27..6a09af53e6 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/pledge_openbsd.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/pledge_openbsd.go @@ -8,54 +8,31 @@ import ( "errors" "fmt" "strconv" - "syscall" - "unsafe" ) // Pledge implements the pledge syscall. // -// The pledge syscall does not accept execpromises on OpenBSD releases -// before 6.3. -// -// execpromises must be empty when Pledge is called on OpenBSD -// releases predating 6.3, otherwise an error will be returned. +// This changes both the promises and execpromises; use PledgePromises or +// PledgeExecpromises to only change the promises or execpromises +// respectively. // // For more information see pledge(2). func Pledge(promises, execpromises string) error { - maj, min, err := majmin() + if err := pledgeAvailable(); err != nil { + return err + } + + pptr, err := BytePtrFromString(promises) if err != nil { return err } - err = pledgeAvailable(maj, min, execpromises) + exptr, err := BytePtrFromString(execpromises) if err != nil { return err } - pptr, err := syscall.BytePtrFromString(promises) - if err != nil { - return err - } - - // This variable will hold either a nil unsafe.Pointer or - // an unsafe.Pointer to a string (execpromises). - var expr unsafe.Pointer - - // If we're running on OpenBSD > 6.2, pass execpromises to the syscall. - if maj > 6 || (maj == 6 && min > 2) { - exptr, err := syscall.BytePtrFromString(execpromises) - if err != nil { - return err - } - expr = unsafe.Pointer(exptr) - } - - _, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(unsafe.Pointer(pptr)), uintptr(expr), 0) - if e != 0 { - return e - } - - return nil + return pledge(pptr, exptr) } // PledgePromises implements the pledge syscall. @@ -64,30 +41,16 @@ func Pledge(promises, execpromises string) error { // // For more information see pledge(2). func PledgePromises(promises string) error { - maj, min, err := majmin() + if err := pledgeAvailable(); err != nil { + return err + } + + pptr, err := BytePtrFromString(promises) if err != nil { return err } - err = pledgeAvailable(maj, min, "") - if err != nil { - return err - } - - // This variable holds the execpromises and is always nil. - var expr unsafe.Pointer - - pptr, err := syscall.BytePtrFromString(promises) - if err != nil { - return err - } - - _, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(unsafe.Pointer(pptr)), uintptr(expr), 0) - if e != 0 { - return e - } - - return nil + return pledge(pptr, nil) } // PledgeExecpromises implements the pledge syscall. @@ -96,30 +59,16 @@ func PledgePromises(promises string) error { // // For more information see pledge(2). func PledgeExecpromises(execpromises string) error { - maj, min, err := majmin() + if err := pledgeAvailable(); err != nil { + return err + } + + exptr, err := BytePtrFromString(execpromises) if err != nil { return err } - err = pledgeAvailable(maj, min, execpromises) - if err != nil { - return err - } - - // This variable holds the promises and is always nil. - var pptr unsafe.Pointer - - exptr, err := syscall.BytePtrFromString(execpromises) - if err != nil { - return err - } - - _, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(pptr), uintptr(unsafe.Pointer(exptr)), 0) - if e != 0 { - return e - } - - return nil + return pledge(nil, exptr) } // majmin returns major and minor version number for an OpenBSD system. @@ -147,16 +96,15 @@ func majmin() (major int, minor int, err error) { // pledgeAvailable checks for availability of the pledge(2) syscall // based on the running OpenBSD version. -func pledgeAvailable(maj, min int, execpromises string) error { - // If OpenBSD <= 5.9, pledge is not available. - if (maj == 5 && min != 9) || maj < 5 { - return fmt.Errorf("pledge syscall is not available on OpenBSD %d.%d", maj, min) +func pledgeAvailable() error { + maj, min, err := majmin() + if err != nil { + return err } - // If OpenBSD <= 6.2 and execpromises is not empty, - // return an error - execpromises is not available before 6.3 - if (maj < 6 || (maj == 6 && min <= 2)) && execpromises != "" { - return fmt.Errorf("cannot use execpromises on OpenBSD %d.%d", maj, min) + // Require OpenBSD 6.4 as a minimum. + if maj < 6 || (maj == 6 && min <= 3) { + return fmt.Errorf("cannot call Pledge on OpenBSD %d.%d", maj, min) } return nil diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_aix.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_aix.go index 6d3009d214..67ce6cef2d 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_aix.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/syscall_aix.go @@ -106,7 +106,8 @@ func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { if n > 0 { sl += _Socklen(n) + 1 } - if sa.raw.Path[0] == '@' { + if sa.raw.Path[0] == '@' || (sa.raw.Path[0] == 0 && sl > 3) { + // Check sl > 3 so we don't change unnamed socket behavior. sa.raw.Path[0] = 0 // Don't count trailing NUL for abstract address. sl-- diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_bsd.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_bsd.go index 6f328e3a55..a00c3e5450 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_bsd.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/syscall_bsd.go @@ -316,7 +316,7 @@ func GetsockoptString(fd, level, opt int) (string, error) { if err != nil { return "", err } - return string(buf[:vallen-1]), nil + return ByteSliceToString(buf[:vallen]), nil } //sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_linux.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_linux.go index 6b8a4ad69c..0f85e29e62 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_linux.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -61,15 +61,23 @@ func FanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname string) ( } //sys fchmodat(dirfd int, path string, mode uint32) (err error) +//sys fchmodat2(dirfd int, path string, mode uint32, flags int) (err error) -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - // Linux fchmodat doesn't support the flags parameter. Mimick glibc's behavior - // and check the flags. Otherwise the mode would be applied to the symlink - // destination which is not what the user expects. - if flags&^AT_SYMLINK_NOFOLLOW != 0 { - return EINVAL - } else if flags&AT_SYMLINK_NOFOLLOW != 0 { - return EOPNOTSUPP +func Fchmodat(dirfd int, path string, mode uint32, flags int) error { + // Linux fchmodat doesn't support the flags parameter, but fchmodat2 does. + // Try fchmodat2 if flags are specified. + if flags != 0 { + err := fchmodat2(dirfd, path, mode, flags) + if err == ENOSYS { + // fchmodat2 isn't available. If the flags are known to be valid, + // return EOPNOTSUPP to indicate that fchmodat doesn't support them. + if flags&^(AT_SYMLINK_NOFOLLOW|AT_EMPTY_PATH) != 0 { + return EINVAL + } else if flags&(AT_SYMLINK_NOFOLLOW|AT_EMPTY_PATH) != 0 { + return EOPNOTSUPP + } + } + return err } return fchmodat(dirfd, path, mode) } @@ -417,7 +425,8 @@ func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { if n > 0 { sl += _Socklen(n) + 1 } - if sa.raw.Path[0] == '@' { + if sa.raw.Path[0] == '@' || (sa.raw.Path[0] == 0 && sl > 3) { + // Check sl > 3 so we don't change unnamed socket behavior. sa.raw.Path[0] = 0 // Don't count trailing NUL for abstract address. sl-- @@ -1301,7 +1310,7 @@ func GetsockoptString(fd, level, opt int) (string, error) { return "", err } } - return string(buf[:vallen-1]), nil + return ByteSliceToString(buf[:vallen]), nil } func GetsockoptTpacketStats(fd, level, opt int) (*TpacketStats, error) { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_openbsd.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_openbsd.go index 6f34479b59..b25343c71a 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_openbsd.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/syscall_openbsd.go @@ -137,18 +137,13 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e } func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { - var _p0 unsafe.Pointer + var bufptr *Statfs_t var bufsize uintptr if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) + bufptr = &buf[0] bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) } - r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = e1 - } - return + return getfsstat(bufptr, bufsize, flags) } //sysnb getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) @@ -171,6 +166,20 @@ func Getresgid() (rgid, egid, sgid int) { //sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL +//sys fcntl(fd int, cmd int, arg int) (n int, err error) +//sys fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) = SYS_FCNTL + +// FcntlInt performs a fcntl syscall on fd with the provided command and argument. +func FcntlInt(fd uintptr, cmd, arg int) (int, error) { + return fcntl(int(fd), cmd, arg) +} + +// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command. +func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error { + _, err := fcntlPtr(int(fd), cmd, unsafe.Pointer(lk)) + return err +} + //sys ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) func Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { @@ -326,4 +335,7 @@ func Uname(uname *Utsname) error { //sys write(fd int, p []byte) (n int, err error) //sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) //sys munmap(addr uintptr, length uintptr) (err error) +//sys getfsstat(stat *Statfs_t, bufsize uintptr, flags int) (n int, err error) //sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) +//sys pledge(promises *byte, execpromises *byte) (err error) +//sys unveil(path *byte, flags *byte) (err error) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_solaris.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_solaris.go index b99cfa1342..21974af064 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_solaris.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/syscall_solaris.go @@ -128,7 +128,8 @@ func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { if n > 0 { sl += _Socklen(n) + 1 } - if sa.raw.Path[0] == '@' { + if sa.raw.Path[0] == '@' || (sa.raw.Path[0] == 0 && sl > 3) { + // Check sl > 3 so we don't change unnamed socket behavior. sa.raw.Path[0] = 0 // Don't count trailing NUL for abstract address. sl-- @@ -157,7 +158,7 @@ func GetsockoptString(fd, level, opt int) (string, error) { if err != nil { return "", err } - return string(buf[:vallen-1]), nil + return ByteSliceToString(buf[:vallen]), nil } const ImplementsGetwd = true diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go index d99d05f1bc..b473038c61 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go @@ -1104,7 +1104,7 @@ func GetsockoptString(fd, level, opt int) (string, error) { return "", err } - return string(buf[:vallen-1]), nil + return ByteSliceToString(buf[:vallen]), nil } func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/unveil_openbsd.go b/src/cmd/vendor/golang.org/x/sys/unix/unveil_openbsd.go index 168d5ae779..cb7e598cef 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/unveil_openbsd.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/unveil_openbsd.go @@ -4,39 +4,48 @@ package unix -import ( - "syscall" - "unsafe" -) +import "fmt" // Unveil implements the unveil syscall. // For more information see unveil(2). // Note that the special case of blocking further // unveil calls is handled by UnveilBlock. func Unveil(path string, flags string) error { - pathPtr, err := syscall.BytePtrFromString(path) + if err := supportsUnveil(); err != nil { + return err + } + pathPtr, err := BytePtrFromString(path) if err != nil { return err } - flagsPtr, err := syscall.BytePtrFromString(flags) + flagsPtr, err := BytePtrFromString(flags) if err != nil { return err } - _, _, e := syscall.Syscall(SYS_UNVEIL, uintptr(unsafe.Pointer(pathPtr)), uintptr(unsafe.Pointer(flagsPtr)), 0) - if e != 0 { - return e - } - return nil + return unveil(pathPtr, flagsPtr) } // UnveilBlock blocks future unveil calls. // For more information see unveil(2). func UnveilBlock() error { - // Both pointers must be nil. - var pathUnsafe, flagsUnsafe unsafe.Pointer - _, _, e := syscall.Syscall(SYS_UNVEIL, uintptr(pathUnsafe), uintptr(flagsUnsafe), 0) - if e != 0 { - return e + if err := supportsUnveil(); err != nil { + return err } + return unveil(nil, nil) +} + +// supportsUnveil checks for availability of the unveil(2) system call based +// on the running OpenBSD version. +func supportsUnveil() error { + maj, min, err := majmin() + if err != nil { + return err + } + + // unveil is not available before 6.4 + if maj < 6 || (maj == 6 && min <= 3) { + return fmt.Errorf("cannot call Unveil on OpenBSD %d.%d", maj, min) + } + return nil } diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux.go index 2409c44780..c73cfe2f10 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -480,10 +480,13 @@ const ( BPF_FROM_BE = 0x8 BPF_FROM_LE = 0x0 BPF_FS_MAGIC = 0xcafe4a11 + BPF_F_AFTER = 0x10 BPF_F_ALLOW_MULTI = 0x2 BPF_F_ALLOW_OVERRIDE = 0x1 BPF_F_ANY_ALIGNMENT = 0x2 - BPF_F_KPROBE_MULTI_RETURN = 0x1 + BPF_F_BEFORE = 0x8 + BPF_F_ID = 0x20 + BPF_F_NETFILTER_IP_DEFRAG = 0x1 BPF_F_QUERY_EFFECTIVE = 0x1 BPF_F_REPLACE = 0x4 BPF_F_SLEEPABLE = 0x10 @@ -520,6 +523,7 @@ const ( BPF_MAJOR_VERSION = 0x1 BPF_MAXINSNS = 0x1000 BPF_MEM = 0x60 + BPF_MEMSX = 0x80 BPF_MEMWORDS = 0x10 BPF_MINOR_VERSION = 0x1 BPF_MISC = 0x7 @@ -775,6 +779,8 @@ const ( DEVLINK_GENL_MCGRP_CONFIG_NAME = "config" DEVLINK_GENL_NAME = "devlink" DEVLINK_GENL_VERSION = 0x1 + DEVLINK_PORT_FN_CAP_IPSEC_CRYPTO = 0x4 + DEVLINK_PORT_FN_CAP_IPSEC_PACKET = 0x8 DEVLINK_PORT_FN_CAP_MIGRATABLE = 0x2 DEVLINK_PORT_FN_CAP_ROCE = 0x1 DEVLINK_SB_THRESHOLD_TO_ALPHA_MAX = 0x14 @@ -1697,6 +1703,7 @@ const ( KEXEC_ON_CRASH = 0x1 KEXEC_PRESERVE_CONTEXT = 0x2 KEXEC_SEGMENT_MAX = 0x10 + KEXEC_UPDATE_ELFCOREHDR = 0x4 KEYCTL_ASSUME_AUTHORITY = 0x10 KEYCTL_CAPABILITIES = 0x1f KEYCTL_CAPS0_BIG_KEY = 0x10 @@ -1794,6 +1801,7 @@ const ( LOCK_SH = 0x1 LOCK_UN = 0x8 LOOP_CLR_FD = 0x4c01 + LOOP_CONFIGURE = 0x4c0a LOOP_CTL_ADD = 0x4c80 LOOP_CTL_GET_FREE = 0x4c82 LOOP_CTL_REMOVE = 0x4c81 @@ -2274,6 +2282,7 @@ const ( PERF_MEM_LVLNUM_PMEM = 0xe PERF_MEM_LVLNUM_RAM = 0xd PERF_MEM_LVLNUM_SHIFT = 0x21 + PERF_MEM_LVLNUM_UNC = 0x8 PERF_MEM_LVL_HIT = 0x2 PERF_MEM_LVL_IO = 0x1000 PERF_MEM_LVL_L1 = 0x8 @@ -3460,6 +3469,7 @@ const ( XDP_PACKET_HEADROOM = 0x100 XDP_PGOFF_RX_RING = 0x0 XDP_PGOFF_TX_RING = 0x80000000 + XDP_PKT_CONTD = 0x1 XDP_RING_NEED_WAKEUP = 0x1 XDP_RX_RING = 0x2 XDP_SHARED_UMEM = 0x1 @@ -3472,6 +3482,7 @@ const ( XDP_UMEM_REG = 0x4 XDP_UMEM_UNALIGNED_CHUNK_FLAG = 0x1 XDP_USE_NEED_WAKEUP = 0x8 + XDP_USE_SG = 0x10 XDP_ZEROCOPY = 0x4 XENFS_SUPER_MAGIC = 0xabba1974 XFS_SUPER_MAGIC = 0x58465342 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go index e6467bd23b..27ac4a09e2 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go @@ -118,6 +118,7 @@ const ( IXOFF = 0x1000 IXON = 0x400 LASX_CTX_MAGIC = 0x41535801 + LBT_CTX_MAGIC = 0x42540001 LSX_CTX_MAGIC = 0x53580001 MAP_ANON = 0x20 MAP_ANONYMOUS = 0x20 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go index c597e31db6..18f2813ed5 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go @@ -227,6 +227,9 @@ const ( PPPIOCUNBRIDGECHAN = 0x7434 PPPIOCXFERUNIT = 0x744e PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTRACE_GETFDPIC = 0x21 + PTRACE_GETFDPIC_EXEC = 0x0 + PTRACE_GETFDPIC_INTERP = 0x1 RLIMIT_AS = 0x9 RLIMIT_MEMLOCK = 0x8 RLIMIT_NOFILE = 0x7 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux.go index faca7a557b..1488d27128 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_linux.go @@ -37,6 +37,21 @@ func fchmodat(dirfd int, path string, mode uint32) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func fchmodat2(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ioctl(fd int, req uint, arg uintptr) (err error) { _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go index 9da3ec3772..a1d061597c 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go @@ -584,6 +584,32 @@ var libc_sysctl_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func fcntl(fd int, cmd int, arg int) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fcntl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fcntl fcntl "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) n = int(r0) @@ -2212,6 +2238,21 @@ var libc_munmap_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func getfsstat(stat *Statfs_t, bufsize uintptr, flags int) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_getfsstat_trampoline_addr, uintptr(unsafe.Pointer(stat)), uintptr(bufsize), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getfsstat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getfsstat getfsstat "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -2228,3 +2269,33 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error var libc_utimensat_trampoline_addr uintptr //go:cgo_import_dynamic libc_utimensat utimensat "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pledge(promises *byte, execpromises *byte) (err error) { + _, _, e1 := syscall_syscall(libc_pledge_trampoline_addr, uintptr(unsafe.Pointer(promises)), uintptr(unsafe.Pointer(execpromises)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pledge_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pledge pledge "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func unveil(path *byte, flags *byte) (err error) { + _, _, e1 := syscall_syscall(libc_unveil_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(flags)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_unveil_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_unveil unveil "libc.so" + + diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s index 3dcacd30d7..41b5617316 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s @@ -178,6 +178,11 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $4 DATA ·libc_sysctl_trampoline_addr(SB)/4, $libc_sysctl_trampoline<>(SB) +TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fcntl(SB) +GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $4 +DATA ·libc_fcntl_trampoline_addr(SB)/4, $libc_fcntl_trampoline<>(SB) + TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_ppoll(SB) GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $4 @@ -668,7 +673,22 @@ TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $4 DATA ·libc_munmap_trampoline_addr(SB)/4, $libc_munmap_trampoline<>(SB) +TEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getfsstat(SB) +GLOBL ·libc_getfsstat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getfsstat_trampoline_addr(SB)/4, $libc_getfsstat_trampoline<>(SB) + TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_utimensat(SB) GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $4 DATA ·libc_utimensat_trampoline_addr(SB)/4, $libc_utimensat_trampoline<>(SB) + +TEXT libc_pledge_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pledge(SB) +GLOBL ·libc_pledge_trampoline_addr(SB), RODATA, $4 +DATA ·libc_pledge_trampoline_addr(SB)/4, $libc_pledge_trampoline<>(SB) + +TEXT libc_unveil_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_unveil(SB) +GLOBL ·libc_unveil_trampoline_addr(SB), RODATA, $4 +DATA ·libc_unveil_trampoline_addr(SB)/4, $libc_unveil_trampoline<>(SB) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go index cc273c4126..5b2a740977 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go @@ -584,6 +584,32 @@ var libc_sysctl_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func fcntl(fd int, cmd int, arg int) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fcntl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fcntl fcntl "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) n = int(r0) @@ -2212,6 +2238,21 @@ var libc_munmap_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func getfsstat(stat *Statfs_t, bufsize uintptr, flags int) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_getfsstat_trampoline_addr, uintptr(unsafe.Pointer(stat)), uintptr(bufsize), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getfsstat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getfsstat getfsstat "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -2228,3 +2269,33 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error var libc_utimensat_trampoline_addr uintptr //go:cgo_import_dynamic libc_utimensat utimensat "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pledge(promises *byte, execpromises *byte) (err error) { + _, _, e1 := syscall_syscall(libc_pledge_trampoline_addr, uintptr(unsafe.Pointer(promises)), uintptr(unsafe.Pointer(execpromises)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pledge_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pledge pledge "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func unveil(path *byte, flags *byte) (err error) { + _, _, e1 := syscall_syscall(libc_unveil_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(flags)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_unveil_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_unveil unveil "libc.so" + + diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s index 2763620b01..4019a656f6 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s @@ -178,6 +178,11 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) +TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fcntl(SB) +GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB) + TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_ppoll(SB) GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $8 @@ -668,7 +673,22 @@ TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) +TEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getfsstat(SB) +GLOBL ·libc_getfsstat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getfsstat_trampoline_addr(SB)/8, $libc_getfsstat_trampoline<>(SB) + TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_utimensat(SB) GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $8 DATA ·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB) + +TEXT libc_pledge_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pledge(SB) +GLOBL ·libc_pledge_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pledge_trampoline_addr(SB)/8, $libc_pledge_trampoline<>(SB) + +TEXT libc_unveil_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_unveil(SB) +GLOBL ·libc_unveil_trampoline_addr(SB), RODATA, $8 +DATA ·libc_unveil_trampoline_addr(SB)/8, $libc_unveil_trampoline<>(SB) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go index fa34e22e3b..f6eda1344a 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go @@ -584,6 +584,32 @@ var libc_sysctl_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func fcntl(fd int, cmd int, arg int) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fcntl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fcntl fcntl "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) n = int(r0) @@ -2212,6 +2238,21 @@ var libc_munmap_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func getfsstat(stat *Statfs_t, bufsize uintptr, flags int) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_getfsstat_trampoline_addr, uintptr(unsafe.Pointer(stat)), uintptr(bufsize), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getfsstat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getfsstat getfsstat "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -2228,3 +2269,33 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error var libc_utimensat_trampoline_addr uintptr //go:cgo_import_dynamic libc_utimensat utimensat "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pledge(promises *byte, execpromises *byte) (err error) { + _, _, e1 := syscall_syscall(libc_pledge_trampoline_addr, uintptr(unsafe.Pointer(promises)), uintptr(unsafe.Pointer(execpromises)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pledge_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pledge pledge "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func unveil(path *byte, flags *byte) (err error) { + _, _, e1 := syscall_syscall(libc_unveil_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(flags)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_unveil_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_unveil unveil "libc.so" + + diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s index c922314048..ac4af24f90 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s @@ -178,6 +178,11 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $4 DATA ·libc_sysctl_trampoline_addr(SB)/4, $libc_sysctl_trampoline<>(SB) +TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fcntl(SB) +GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $4 +DATA ·libc_fcntl_trampoline_addr(SB)/4, $libc_fcntl_trampoline<>(SB) + TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_ppoll(SB) GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $4 @@ -668,7 +673,22 @@ TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $4 DATA ·libc_munmap_trampoline_addr(SB)/4, $libc_munmap_trampoline<>(SB) +TEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getfsstat(SB) +GLOBL ·libc_getfsstat_trampoline_addr(SB), RODATA, $4 +DATA ·libc_getfsstat_trampoline_addr(SB)/4, $libc_getfsstat_trampoline<>(SB) + TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_utimensat(SB) GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $4 DATA ·libc_utimensat_trampoline_addr(SB)/4, $libc_utimensat_trampoline<>(SB) + +TEXT libc_pledge_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pledge(SB) +GLOBL ·libc_pledge_trampoline_addr(SB), RODATA, $4 +DATA ·libc_pledge_trampoline_addr(SB)/4, $libc_pledge_trampoline<>(SB) + +TEXT libc_unveil_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_unveil(SB) +GLOBL ·libc_unveil_trampoline_addr(SB), RODATA, $4 +DATA ·libc_unveil_trampoline_addr(SB)/4, $libc_unveil_trampoline<>(SB) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go index ab61221477..55df20ae9d 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go @@ -584,6 +584,32 @@ var libc_sysctl_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func fcntl(fd int, cmd int, arg int) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fcntl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fcntl fcntl "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) n = int(r0) @@ -2212,6 +2238,21 @@ var libc_munmap_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func getfsstat(stat *Statfs_t, bufsize uintptr, flags int) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_getfsstat_trampoline_addr, uintptr(unsafe.Pointer(stat)), uintptr(bufsize), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getfsstat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getfsstat getfsstat "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -2228,3 +2269,33 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error var libc_utimensat_trampoline_addr uintptr //go:cgo_import_dynamic libc_utimensat utimensat "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pledge(promises *byte, execpromises *byte) (err error) { + _, _, e1 := syscall_syscall(libc_pledge_trampoline_addr, uintptr(unsafe.Pointer(promises)), uintptr(unsafe.Pointer(execpromises)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pledge_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pledge pledge "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func unveil(path *byte, flags *byte) (err error) { + _, _, e1 := syscall_syscall(libc_unveil_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(flags)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_unveil_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_unveil unveil "libc.so" + + diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s index a6bc32c922..f77d532121 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s @@ -178,6 +178,11 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) +TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fcntl(SB) +GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB) + TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_ppoll(SB) GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $8 @@ -668,7 +673,22 @@ TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) +TEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getfsstat(SB) +GLOBL ·libc_getfsstat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getfsstat_trampoline_addr(SB)/8, $libc_getfsstat_trampoline<>(SB) + TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_utimensat(SB) GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $8 DATA ·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB) + +TEXT libc_pledge_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pledge(SB) +GLOBL ·libc_pledge_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pledge_trampoline_addr(SB)/8, $libc_pledge_trampoline<>(SB) + +TEXT libc_unveil_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_unveil(SB) +GLOBL ·libc_unveil_trampoline_addr(SB), RODATA, $8 +DATA ·libc_unveil_trampoline_addr(SB)/8, $libc_unveil_trampoline<>(SB) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go index 3882790a52..8c1155cbc0 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go @@ -584,6 +584,32 @@ var libc_sysctl_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func fcntl(fd int, cmd int, arg int) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fcntl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fcntl fcntl "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) n = int(r0) @@ -2212,6 +2238,21 @@ var libc_munmap_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func getfsstat(stat *Statfs_t, bufsize uintptr, flags int) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_getfsstat_trampoline_addr, uintptr(unsafe.Pointer(stat)), uintptr(bufsize), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getfsstat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getfsstat getfsstat "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -2228,3 +2269,33 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error var libc_utimensat_trampoline_addr uintptr //go:cgo_import_dynamic libc_utimensat utimensat "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pledge(promises *byte, execpromises *byte) (err error) { + _, _, e1 := syscall_syscall(libc_pledge_trampoline_addr, uintptr(unsafe.Pointer(promises)), uintptr(unsafe.Pointer(execpromises)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pledge_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pledge pledge "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func unveil(path *byte, flags *byte) (err error) { + _, _, e1 := syscall_syscall(libc_unveil_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(flags)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_unveil_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_unveil unveil "libc.so" + + diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s index b4e7bceabf..fae140b62c 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s @@ -178,6 +178,11 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) +TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fcntl(SB) +GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB) + TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_ppoll(SB) GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $8 @@ -668,7 +673,22 @@ TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) +TEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getfsstat(SB) +GLOBL ·libc_getfsstat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getfsstat_trampoline_addr(SB)/8, $libc_getfsstat_trampoline<>(SB) + TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_utimensat(SB) GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $8 DATA ·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB) + +TEXT libc_pledge_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pledge(SB) +GLOBL ·libc_pledge_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pledge_trampoline_addr(SB)/8, $libc_pledge_trampoline<>(SB) + +TEXT libc_unveil_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_unveil(SB) +GLOBL ·libc_unveil_trampoline_addr(SB), RODATA, $8 +DATA ·libc_unveil_trampoline_addr(SB)/8, $libc_unveil_trampoline<>(SB) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go index 172ba7f62c..7cc80c58d9 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go @@ -584,6 +584,32 @@ var libc_sysctl_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func fcntl(fd int, cmd int, arg int) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fcntl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fcntl fcntl "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) n = int(r0) @@ -2212,6 +2238,21 @@ var libc_munmap_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func getfsstat(stat *Statfs_t, bufsize uintptr, flags int) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_getfsstat_trampoline_addr, uintptr(unsafe.Pointer(stat)), uintptr(bufsize), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getfsstat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getfsstat getfsstat "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -2228,3 +2269,33 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error var libc_utimensat_trampoline_addr uintptr //go:cgo_import_dynamic libc_utimensat utimensat "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pledge(promises *byte, execpromises *byte) (err error) { + _, _, e1 := syscall_syscall(libc_pledge_trampoline_addr, uintptr(unsafe.Pointer(promises)), uintptr(unsafe.Pointer(execpromises)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pledge_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pledge pledge "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func unveil(path *byte, flags *byte) (err error) { + _, _, e1 := syscall_syscall(libc_unveil_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(flags)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_unveil_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_unveil unveil "libc.so" + + diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s index ca3f766009..9d1e0ff06d 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s @@ -213,6 +213,12 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) +TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0 + CALL libc_fcntl(SB) + RET +GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB) + TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0 CALL libc_ppoll(SB) RET @@ -801,8 +807,26 @@ TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) +TEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0 + CALL libc_getfsstat(SB) + RET +GLOBL ·libc_getfsstat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getfsstat_trampoline_addr(SB)/8, $libc_getfsstat_trampoline<>(SB) + TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 CALL libc_utimensat(SB) RET GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $8 DATA ·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB) + +TEXT libc_pledge_trampoline<>(SB),NOSPLIT,$0-0 + CALL libc_pledge(SB) + RET +GLOBL ·libc_pledge_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pledge_trampoline_addr(SB)/8, $libc_pledge_trampoline<>(SB) + +TEXT libc_unveil_trampoline<>(SB),NOSPLIT,$0-0 + CALL libc_unveil(SB) + RET +GLOBL ·libc_unveil_trampoline_addr(SB), RODATA, $8 +DATA ·libc_unveil_trampoline_addr(SB)/8, $libc_unveil_trampoline<>(SB) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go index fd8e6f62fa..0688737f49 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go @@ -584,6 +584,32 @@ var libc_sysctl_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func fcntl(fd int, cmd int, arg int) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_fcntl_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_fcntl fcntl "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) n = int(r0) @@ -2212,6 +2238,21 @@ var libc_munmap_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func getfsstat(stat *Statfs_t, bufsize uintptr, flags int) (n int, err error) { + r0, _, e1 := syscall_syscall(libc_getfsstat_trampoline_addr, uintptr(unsafe.Pointer(stat)), uintptr(bufsize), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_getfsstat_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_getfsstat getfsstat "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -2228,3 +2269,33 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error var libc_utimensat_trampoline_addr uintptr //go:cgo_import_dynamic libc_utimensat utimensat "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pledge(promises *byte, execpromises *byte) (err error) { + _, _, e1 := syscall_syscall(libc_pledge_trampoline_addr, uintptr(unsafe.Pointer(promises)), uintptr(unsafe.Pointer(execpromises)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pledge_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pledge pledge "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func unveil(path *byte, flags *byte) (err error) { + _, _, e1 := syscall_syscall(libc_unveil_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(flags)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_unveil_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_unveil unveil "libc.so" + + diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s index 477a7d5b21..da115f9a4b 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s @@ -178,6 +178,11 @@ TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) +TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_fcntl(SB) +GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB) + TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_ppoll(SB) GLOBL ·libc_ppoll_trampoline_addr(SB), RODATA, $8 @@ -668,7 +673,22 @@ TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) +TEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_getfsstat(SB) +GLOBL ·libc_getfsstat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getfsstat_trampoline_addr(SB)/8, $libc_getfsstat_trampoline<>(SB) + TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_utimensat(SB) GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $8 DATA ·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB) + +TEXT libc_pledge_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pledge(SB) +GLOBL ·libc_pledge_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pledge_trampoline_addr(SB)/8, $libc_pledge_trampoline<>(SB) + +TEXT libc_unveil_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_unveil(SB) +GLOBL ·libc_unveil_trampoline_addr(SB), RODATA, $8 +DATA ·libc_unveil_trampoline_addr(SB)/8, $libc_unveil_trampoline<>(SB) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go index 2d181ba7b2..fcf3ecbdde 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go @@ -447,4 +447,5 @@ const ( SYS_FUTEX_WAITV = 449 SYS_SET_MEMPOLICY_HOME_NODE = 450 SYS_CACHESTAT = 451 + SYS_FCHMODAT2 = 452 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go index 2b25ab33cf..f56dc2504a 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go @@ -369,4 +369,6 @@ const ( SYS_FUTEX_WAITV = 449 SYS_SET_MEMPOLICY_HOME_NODE = 450 SYS_CACHESTAT = 451 + SYS_FCHMODAT2 = 452 + SYS_MAP_SHADOW_STACK = 453 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go index b43e7c4c21..974bf24676 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go @@ -411,4 +411,5 @@ const ( SYS_FUTEX_WAITV = 449 SYS_SET_MEMPOLICY_HOME_NODE = 450 SYS_CACHESTAT = 451 + SYS_FCHMODAT2 = 452 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go index d50622f82e..39a2739e23 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go @@ -314,4 +314,5 @@ const ( SYS_FUTEX_WAITV = 449 SYS_SET_MEMPOLICY_HOME_NODE = 450 SYS_CACHESTAT = 451 + SYS_FCHMODAT2 = 452 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go index 7c31dbe4fe..cf9c9d77e1 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go @@ -308,4 +308,5 @@ const ( SYS_FUTEX_WAITV = 449 SYS_SET_MEMPOLICY_HOME_NODE = 450 SYS_CACHESTAT = 451 + SYS_FCHMODAT2 = 452 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go index 2b01364d7e..10b7362ef4 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go @@ -431,4 +431,5 @@ const ( SYS_FUTEX_WAITV = 4449 SYS_SET_MEMPOLICY_HOME_NODE = 4450 SYS_CACHESTAT = 4451 + SYS_FCHMODAT2 = 4452 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go index 9bb31708e8..cd4d8b4fd3 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go @@ -361,4 +361,5 @@ const ( SYS_FUTEX_WAITV = 5449 SYS_SET_MEMPOLICY_HOME_NODE = 5450 SYS_CACHESTAT = 5451 + SYS_FCHMODAT2 = 5452 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go index 8413fe6dc0..2c0efca818 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go @@ -361,4 +361,5 @@ const ( SYS_FUTEX_WAITV = 5449 SYS_SET_MEMPOLICY_HOME_NODE = 5450 SYS_CACHESTAT = 5451 + SYS_FCHMODAT2 = 5452 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go index cf76a275ad..a72e31d391 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go @@ -431,4 +431,5 @@ const ( SYS_FUTEX_WAITV = 4449 SYS_SET_MEMPOLICY_HOME_NODE = 4450 SYS_CACHESTAT = 4451 + SYS_FCHMODAT2 = 4452 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go index 7999422733..c7d1e37471 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go @@ -438,4 +438,5 @@ const ( SYS_FUTEX_WAITV = 449 SYS_SET_MEMPOLICY_HOME_NODE = 450 SYS_CACHESTAT = 451 + SYS_FCHMODAT2 = 452 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go index 75904d52b9..f4d4838c87 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go @@ -410,4 +410,5 @@ const ( SYS_FUTEX_WAITV = 449 SYS_SET_MEMPOLICY_HOME_NODE = 450 SYS_CACHESTAT = 451 + SYS_FCHMODAT2 = 452 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go index f5f681c3de..b64f0e5911 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go @@ -410,4 +410,5 @@ const ( SYS_FUTEX_WAITV = 449 SYS_SET_MEMPOLICY_HOME_NODE = 450 SYS_CACHESTAT = 451 + SYS_FCHMODAT2 = 452 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go index 391954743d..95711195a0 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go @@ -315,4 +315,5 @@ const ( SYS_FUTEX_WAITV = 449 SYS_SET_MEMPOLICY_HOME_NODE = 450 SYS_CACHESTAT = 451 + SYS_FCHMODAT2 = 452 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go index f33ceef17d..f94e943bc4 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go @@ -376,4 +376,5 @@ const ( SYS_FUTEX_WAITV = 449 SYS_SET_MEMPOLICY_HOME_NODE = 450 SYS_CACHESTAT = 451 + SYS_FCHMODAT2 = 452 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go index a2ce59e73f..ba0c2bc515 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go @@ -389,4 +389,5 @@ const ( SYS_FUTEX_WAITV = 449 SYS_SET_MEMPOLICY_HOME_NODE = 450 SYS_CACHESTAT = 451 + SYS_FCHMODAT2 = 452 ) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux.go index 997bcd55ae..bbf8399ff5 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -2671,6 +2671,7 @@ const ( BPF_PROG_TYPE_LSM = 0x1d BPF_PROG_TYPE_SK_LOOKUP = 0x1e BPF_PROG_TYPE_SYSCALL = 0x1f + BPF_PROG_TYPE_NETFILTER = 0x20 BPF_CGROUP_INET_INGRESS = 0x0 BPF_CGROUP_INET_EGRESS = 0x1 BPF_CGROUP_INET_SOCK_CREATE = 0x2 @@ -2715,6 +2716,11 @@ const ( BPF_PERF_EVENT = 0x29 BPF_TRACE_KPROBE_MULTI = 0x2a BPF_LSM_CGROUP = 0x2b + BPF_STRUCT_OPS = 0x2c + BPF_NETFILTER = 0x2d + BPF_TCX_INGRESS = 0x2e + BPF_TCX_EGRESS = 0x2f + BPF_TRACE_UPROBE_MULTI = 0x30 BPF_LINK_TYPE_UNSPEC = 0x0 BPF_LINK_TYPE_RAW_TRACEPOINT = 0x1 BPF_LINK_TYPE_TRACING = 0x2 @@ -2725,6 +2731,18 @@ const ( BPF_LINK_TYPE_PERF_EVENT = 0x7 BPF_LINK_TYPE_KPROBE_MULTI = 0x8 BPF_LINK_TYPE_STRUCT_OPS = 0x9 + BPF_LINK_TYPE_NETFILTER = 0xa + BPF_LINK_TYPE_TCX = 0xb + BPF_LINK_TYPE_UPROBE_MULTI = 0xc + BPF_PERF_EVENT_UNSPEC = 0x0 + BPF_PERF_EVENT_UPROBE = 0x1 + BPF_PERF_EVENT_URETPROBE = 0x2 + BPF_PERF_EVENT_KPROBE = 0x3 + BPF_PERF_EVENT_KRETPROBE = 0x4 + BPF_PERF_EVENT_TRACEPOINT = 0x5 + BPF_PERF_EVENT_EVENT = 0x6 + BPF_F_KPROBE_MULTI_RETURN = 0x1 + BPF_F_UPROBE_MULTI_RETURN = 0x1 BPF_ANY = 0x0 BPF_NOEXIST = 0x1 BPF_EXIST = 0x2 @@ -2742,6 +2760,8 @@ const ( BPF_F_MMAPABLE = 0x400 BPF_F_PRESERVE_ELEMS = 0x800 BPF_F_INNER_MAP = 0x1000 + BPF_F_LINK = 0x2000 + BPF_F_PATH_FD = 0x4000 BPF_STATS_RUN_TIME = 0x0 BPF_STACK_BUILD_ID_EMPTY = 0x0 BPF_STACK_BUILD_ID_VALID = 0x1 @@ -2762,6 +2782,7 @@ const ( BPF_F_ZERO_CSUM_TX = 0x2 BPF_F_DONT_FRAGMENT = 0x4 BPF_F_SEQ_NUMBER = 0x8 + BPF_F_NO_TUNNEL_KEY = 0x10 BPF_F_TUNINFO_FLAGS = 0x10 BPF_F_INDEX_MASK = 0xffffffff BPF_F_CURRENT_CPU = 0xffffffff @@ -2778,6 +2799,8 @@ const ( BPF_F_ADJ_ROOM_ENCAP_L4_UDP = 0x10 BPF_F_ADJ_ROOM_NO_CSUM_RESET = 0x20 BPF_F_ADJ_ROOM_ENCAP_L2_ETH = 0x40 + BPF_F_ADJ_ROOM_DECAP_L3_IPV4 = 0x80 + BPF_F_ADJ_ROOM_DECAP_L3_IPV6 = 0x100 BPF_ADJ_ROOM_ENCAP_L2_MASK = 0xff BPF_ADJ_ROOM_ENCAP_L2_SHIFT = 0x38 BPF_F_SYSCTL_BASE_NAME = 0x1 @@ -2866,6 +2889,8 @@ const ( BPF_DEVCG_DEV_CHAR = 0x2 BPF_FIB_LOOKUP_DIRECT = 0x1 BPF_FIB_LOOKUP_OUTPUT = 0x2 + BPF_FIB_LOOKUP_SKIP_NEIGH = 0x4 + BPF_FIB_LOOKUP_TBID = 0x8 BPF_FIB_LKUP_RET_SUCCESS = 0x0 BPF_FIB_LKUP_RET_BLACKHOLE = 0x1 BPF_FIB_LKUP_RET_UNREACHABLE = 0x2 @@ -2901,6 +2926,7 @@ const ( BPF_CORE_ENUMVAL_EXISTS = 0xa BPF_CORE_ENUMVAL_VALUE = 0xb BPF_CORE_TYPE_MATCHES = 0xc + BPF_F_TIMER_ABS = 0x1 ) const ( @@ -2979,6 +3005,12 @@ type LoopInfo64 struct { Encrypt_key [32]uint8 Init [2]uint64 } +type LoopConfig struct { + Fd uint32 + Size uint32 + Info LoopInfo64 + _ [8]uint64 +} type TIPCSocketAddr struct { Ref uint32 diff --git a/src/cmd/vendor/golang.org/x/sys/windows/syscall_windows.go b/src/cmd/vendor/golang.org/x/sys/windows/syscall_windows.go index dcaa40977f..47dc579676 100644 --- a/src/cmd/vendor/golang.org/x/sys/windows/syscall_windows.go +++ b/src/cmd/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -155,6 +155,8 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys GetModuleFileName(module Handle, filename *uint16, size uint32) (n uint32, err error) = kernel32.GetModuleFileNameW //sys GetModuleHandleEx(flags uint32, moduleName *uint16, module *Handle) (err error) = kernel32.GetModuleHandleExW //sys SetDefaultDllDirectories(directoryFlags uint32) (err error) +//sys AddDllDirectory(path *uint16) (cookie uintptr, err error) = kernel32.AddDllDirectory +//sys RemoveDllDirectory(cookie uintptr) (err error) = kernel32.RemoveDllDirectory //sys SetDllDirectory(path string) (err error) = kernel32.SetDllDirectoryW //sys GetVersion() (ver uint32, err error) //sys FormatMessage(flags uint32, msgsrc uintptr, msgid uint32, langid uint32, buf []uint16, args *byte) (n uint32, err error) = FormatMessageW @@ -970,7 +972,8 @@ func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, int32, error) { if n > 0 { sl += int32(n) + 1 } - if sa.raw.Path[0] == '@' { + if sa.raw.Path[0] == '@' || (sa.raw.Path[0] == 0 && sl > 3) { + // Check sl > 3 so we don't change unnamed socket behavior. sa.raw.Path[0] = 0 // Don't count trailing NUL for abstract address. sl-- diff --git a/src/cmd/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/src/cmd/vendor/golang.org/x/sys/windows/zsyscall_windows.go index db6282e00a..146a1f0196 100644 --- a/src/cmd/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ b/src/cmd/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -184,6 +184,7 @@ var ( procGetAdaptersInfo = modiphlpapi.NewProc("GetAdaptersInfo") procGetBestInterfaceEx = modiphlpapi.NewProc("GetBestInterfaceEx") procGetIfEntry = modiphlpapi.NewProc("GetIfEntry") + procAddDllDirectory = modkernel32.NewProc("AddDllDirectory") procAssignProcessToJobObject = modkernel32.NewProc("AssignProcessToJobObject") procCancelIo = modkernel32.NewProc("CancelIo") procCancelIoEx = modkernel32.NewProc("CancelIoEx") @@ -330,6 +331,7 @@ var ( procReadProcessMemory = modkernel32.NewProc("ReadProcessMemory") procReleaseMutex = modkernel32.NewProc("ReleaseMutex") procRemoveDirectoryW = modkernel32.NewProc("RemoveDirectoryW") + procRemoveDllDirectory = modkernel32.NewProc("RemoveDllDirectory") procResetEvent = modkernel32.NewProc("ResetEvent") procResizePseudoConsole = modkernel32.NewProc("ResizePseudoConsole") procResumeThread = modkernel32.NewProc("ResumeThread") @@ -1605,6 +1607,15 @@ func GetIfEntry(pIfRow *MibIfRow) (errcode error) { return } +func AddDllDirectory(path *uint16) (cookie uintptr, err error) { + r0, _, e1 := syscall.Syscall(procAddDllDirectory.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + cookie = uintptr(r0) + if cookie == 0 { + err = errnoErr(e1) + } + return +} + func AssignProcessToJobObject(job Handle, process Handle) (err error) { r1, _, e1 := syscall.Syscall(procAssignProcessToJobObject.Addr(), 2, uintptr(job), uintptr(process), 0) if r1 == 0 { @@ -2879,6 +2890,14 @@ func RemoveDirectory(path *uint16) (err error) { return } +func RemoveDllDirectory(cookie uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procRemoveDllDirectory.Addr(), 1, uintptr(cookie), 0, 0) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func ResetEvent(event Handle) (err error) { r1, _, e1 := syscall.Syscall(procResetEvent.Addr(), 1, uintptr(event), 0, 0) if r1 == 0 { diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/doc.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/doc.go index a68adb12b4..4cd5b71e9e 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/doc.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/doc.go @@ -7,7 +7,7 @@ // // # Analyzer testinggoroutine // -// testinggoroutine: report calls to (*testing.T).Fatal from goroutines started by a test. +// testinggoroutine: report calls to (*testing.T).Fatal from goroutines started by a test // // Functions that abruptly terminate a test, such as the Fatal, Fatalf, FailNow, and // Skip{,f,Now} methods of *testing.T, must be called from the test goroutine itself. diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/testinggoroutine.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/testinggoroutine.go index 907b71503e..dc5307a15d 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/testinggoroutine.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/testinggoroutine.go @@ -6,18 +6,28 @@ package testinggoroutine import ( _ "embed" + "fmt" "go/ast" + "go/token" + "go/types" "golang.org/x/tools/go/analysis" "golang.org/x/tools/go/analysis/passes/inspect" "golang.org/x/tools/go/analysis/passes/internal/analysisutil" + "golang.org/x/tools/go/ast/astutil" "golang.org/x/tools/go/ast/inspector" - "golang.org/x/tools/internal/typeparams" + "golang.org/x/tools/go/types/typeutil" ) //go:embed doc.go var doc string +var reportSubtest bool + +func init() { + Analyzer.Flags.BoolVar(&reportSubtest, "subtest", false, "whether to check if t.Run subtest is terminated correctly; experimental") +} + var Analyzer = &analysis.Analyzer{ Name: "testinggoroutine", Doc: analysisutil.MustExtractDoc(doc, "testinggoroutine"), @@ -26,15 +36,6 @@ var Analyzer = &analysis.Analyzer{ Run: run, } -var forbidden = map[string]bool{ - "FailNow": true, - "Fatal": true, - "Fatalf": true, - "Skip": true, - "Skipf": true, - "SkipNow": true, -} - func run(pass *analysis.Pass) (interface{}, error) { inspect := pass.ResultOf[inspect.Analyzer].(*inspector.Inspector) @@ -42,38 +43,90 @@ func run(pass *analysis.Pass) (interface{}, error) { return nil, nil } - // Filter out anything that isn't a function declaration. - onlyFuncs := []ast.Node{ - (*ast.FuncDecl)(nil), + toDecl := localFunctionDecls(pass.TypesInfo, pass.Files) + + // asyncs maps nodes whose statements will be executed concurrently + // with respect to some test function, to the call sites where they + // are invoked asynchronously. There may be multiple such call sites + // for e.g. test helpers. + asyncs := make(map[ast.Node][]*asyncCall) + var regions []ast.Node + addCall := func(c *asyncCall) { + if c != nil { + r := c.region + if asyncs[r] == nil { + regions = append(regions, r) + } + asyncs[r] = append(asyncs[r], c) + } } - inspect.Nodes(onlyFuncs, func(node ast.Node, push bool) bool { - fnDecl, ok := node.(*ast.FuncDecl) - if !ok { + // Collect all of the go callee() and t.Run(name, callee) extents. + inspect.Nodes([]ast.Node{ + (*ast.FuncDecl)(nil), + (*ast.GoStmt)(nil), + (*ast.CallExpr)(nil), + }, func(node ast.Node, push bool) bool { + if !push { return false } + switch node := node.(type) { + case *ast.FuncDecl: + return hasBenchmarkOrTestParams(node) - if !hasBenchmarkOrTestParams(fnDecl) { - return false + case *ast.GoStmt: + c := goAsyncCall(pass.TypesInfo, node, toDecl) + addCall(c) + + case *ast.CallExpr: + c := tRunAsyncCall(pass.TypesInfo, node) + addCall(c) } + return true + }) - // Now traverse the benchmark/test's body and check that none of the - // forbidden methods are invoked in the goroutines within the body. - ast.Inspect(fnDecl, func(n ast.Node) bool { - goStmt, ok := n.(*ast.GoStmt) + // Check for t.Forbidden() calls within each region r that is a + // callee in some go r() or a t.Run("name", r). + // + // Also considers a special case when r is a go t.Forbidden() call. + for _, region := range regions { + ast.Inspect(region, func(n ast.Node) bool { + if n == region { + return true // always descend into the region itself. + } else if asyncs[n] != nil { + return false // will be visited by another region. + } + + call, ok := n.(*ast.CallExpr) if !ok { return true } + x, sel, fn := forbiddenMethod(pass.TypesInfo, call) + if x == nil { + return true + } - checkGoStmt(pass, goStmt) + for _, e := range asyncs[region] { + if !withinScope(e.scope, x) { + forbidden := formatMethod(sel, fn) // e.g. "(*testing.T).Forbidden - // No need to further traverse the GoStmt since right - // above we manually traversed it in the ast.Inspect(goStmt, ...) - return false + var context string + var where analysis.Range = e.async // Put the report at the go fun() or t.Run(name, fun). + if _, local := e.fun.(*ast.FuncLit); local { + where = call // Put the report at the t.Forbidden() call. + } else if id, ok := e.fun.(*ast.Ident); ok { + context = fmt.Sprintf(" (%s calls %s)", id.Name, forbidden) + } + if _, ok := e.async.(*ast.GoStmt); ok { + pass.ReportRangef(where, "call to %s from a non-test goroutine%s", forbidden, context) + } else if reportSubtest { + pass.ReportRangef(where, "call to %s on %s defined outside of the subtest%s", forbidden, x.Name(), context) + } + } + } + return true }) - - return false - }) + } return nil, nil } @@ -100,7 +153,6 @@ func typeIsTestingDotTOrB(expr ast.Expr) (string, bool) { if !ok { return "", false } - varPkg := selExpr.X.(*ast.Ident) if varPkg.Name != "testing" { return "", false @@ -111,73 +163,116 @@ func typeIsTestingDotTOrB(expr ast.Expr) (string, bool) { return varTypeName, ok } -// goStmtFunc returns the ast.Node of a call expression -// that was invoked as a go statement. Currently, only -// function literals declared in the same function, and -// static calls within the same package are supported. -func goStmtFun(goStmt *ast.GoStmt) ast.Node { - switch fun := goStmt.Call.Fun.(type) { - case *ast.IndexExpr, *typeparams.IndexListExpr: - x, _, _, _ := typeparams.UnpackIndexExpr(fun) - id, _ := x.(*ast.Ident) - if id == nil { - break - } - if id.Obj == nil { - break - } - if funDecl, ok := id.Obj.Decl.(ast.Node); ok { - return funDecl - } - case *ast.Ident: - // TODO(cuonglm): improve this once golang/go#48141 resolved. - if fun.Obj == nil { - break - } - if funDecl, ok := fun.Obj.Decl.(ast.Node); ok { - return funDecl - } - case *ast.FuncLit: - return goStmt.Call.Fun +// asyncCall describes a region of code that needs to be checked for +// t.Forbidden() calls as it is started asynchronously from an async +// node go fun() or t.Run(name, fun). +type asyncCall struct { + region ast.Node // region of code to check for t.Forbidden() calls. + async ast.Node // *ast.GoStmt or *ast.CallExpr (for t.Run) + scope ast.Node // Report t.Forbidden() if t is not declared within scope. + fun ast.Expr // fun in go fun() or t.Run(name, fun) +} + +// withinScope returns true if x.Pos() is in [scope.Pos(), scope.End()]. +func withinScope(scope ast.Node, x *types.Var) bool { + if scope != nil { + return x.Pos() != token.NoPos && scope.Pos() <= x.Pos() && x.Pos() <= scope.End() } - return goStmt.Call + return false } -// checkGoStmt traverses the goroutine and checks for the -// use of the forbidden *testing.(B, T) methods. -func checkGoStmt(pass *analysis.Pass, goStmt *ast.GoStmt) { - fn := goStmtFun(goStmt) - // Otherwise examine the goroutine to check for the forbidden methods. - ast.Inspect(fn, func(n ast.Node) bool { - selExpr, ok := n.(*ast.SelectorExpr) - if !ok { - return true - } +// goAsyncCall returns the extent of a call from a go fun() statement. +func goAsyncCall(info *types.Info, goStmt *ast.GoStmt, toDecl func(*types.Func) *ast.FuncDecl) *asyncCall { + call := goStmt.Call - _, bad := forbidden[selExpr.Sel.Name] - if !bad { - return true + fun := astutil.Unparen(call.Fun) + if id := funcIdent(fun); id != nil { + if lit := funcLitInScope(id); lit != nil { + return &asyncCall{region: lit, async: goStmt, scope: nil, fun: fun} } + } - // Now filter out false positives by the import-path/type. - ident, ok := selExpr.X.(*ast.Ident) - if !ok { - return true + if fn := typeutil.StaticCallee(info, call); fn != nil { // static call or method in the package? + if decl := toDecl(fn); decl != nil { + return &asyncCall{region: decl, async: goStmt, scope: nil, fun: fun} } - if ident.Obj == nil || ident.Obj.Decl == nil { - return true - } - field, ok := ident.Obj.Decl.(*ast.Field) - if !ok { - return true - } - if typeName, ok := typeIsTestingDotTOrB(field.Type); ok { - var fnRange analysis.Range = goStmt - if _, ok := fn.(*ast.FuncLit); ok { - fnRange = selExpr - } - pass.ReportRangef(fnRange, "call to (*%s).%s from a non-test goroutine", typeName, selExpr.Sel) - } - return true - }) + } + + // Check go statement for go t.Forbidden() or go func(){t.Forbidden()}(). + return &asyncCall{region: goStmt, async: goStmt, scope: nil, fun: fun} +} + +// tRunAsyncCall returns the extent of a call from a t.Run("name", fun) expression. +func tRunAsyncCall(info *types.Info, call *ast.CallExpr) *asyncCall { + if len(call.Args) != 2 { + return nil + } + run := typeutil.Callee(info, call) + if run, ok := run.(*types.Func); !ok || !isMethodNamed(run, "testing", "Run") { + return nil + } + + fun := astutil.Unparen(call.Args[1]) + if lit, ok := fun.(*ast.FuncLit); ok { // function lit? + return &asyncCall{region: lit, async: call, scope: lit, fun: fun} + } + + if id := funcIdent(fun); id != nil { + if lit := funcLitInScope(id); lit != nil { // function lit in variable? + return &asyncCall{region: lit, async: call, scope: lit, fun: fun} + } + } + + // Check within t.Run(name, fun) for calls to t.Forbidden, + // e.g. t.Run(name, func(t *testing.T){ t.Forbidden() }) + return &asyncCall{region: call, async: call, scope: fun, fun: fun} +} + +var forbidden = []string{ + "FailNow", + "Fatal", + "Fatalf", + "Skip", + "Skipf", + "SkipNow", +} + +// forbiddenMethod decomposes a call x.m() into (x, x.m, m) where +// x is a variable, x.m is a selection, and m is the static callee m. +// Returns (nil, nil, nil) if call is not of this form. +func forbiddenMethod(info *types.Info, call *ast.CallExpr) (*types.Var, *types.Selection, *types.Func) { + // Compare to typeutil.StaticCallee. + fun := astutil.Unparen(call.Fun) + selExpr, ok := fun.(*ast.SelectorExpr) + if !ok { + return nil, nil, nil + } + sel := info.Selections[selExpr] + if sel == nil { + return nil, nil, nil + } + + var x *types.Var + if id, ok := astutil.Unparen(selExpr.X).(*ast.Ident); ok { + x, _ = info.Uses[id].(*types.Var) + } + if x == nil { + return nil, nil, nil + } + + fn, _ := sel.Obj().(*types.Func) + if fn == nil || !isMethodNamed(fn, "testing", forbidden...) { + return nil, nil, nil + } + return x, sel, fn +} + +func formatMethod(sel *types.Selection, fn *types.Func) string { + var ptr string + rtype := sel.Recv() + if p, ok := rtype.(*types.Pointer); ok { + ptr = "*" + rtype = p.Elem() + } + return fmt.Sprintf("(%s%s).%s", ptr, rtype.String(), fn.Name()) } diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/util.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/util.go new file mode 100644 index 0000000000..805ccf49e4 --- /dev/null +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/util.go @@ -0,0 +1,96 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testinggoroutine + +import ( + "go/ast" + "go/types" + + "golang.org/x/tools/go/ast/astutil" + "golang.org/x/tools/internal/typeparams" +) + +// AST and types utilities that not specific to testinggoroutines. + +// localFunctionDecls returns a mapping from *types.Func to *ast.FuncDecl in files. +func localFunctionDecls(info *types.Info, files []*ast.File) func(*types.Func) *ast.FuncDecl { + var fnDecls map[*types.Func]*ast.FuncDecl // computed lazily + return func(f *types.Func) *ast.FuncDecl { + if f != nil && fnDecls == nil { + fnDecls = make(map[*types.Func]*ast.FuncDecl) + for _, file := range files { + for _, decl := range file.Decls { + if fnDecl, ok := decl.(*ast.FuncDecl); ok { + if fn, ok := info.Defs[fnDecl.Name].(*types.Func); ok { + fnDecls[fn] = fnDecl + } + } + } + } + } + // TODO: once we only support go1.19+, set f = f.Origin() here. + return fnDecls[f] + } +} + +// isMethodNamed returns true if f is a method defined +// in package with the path pkgPath with a name in names. +func isMethodNamed(f *types.Func, pkgPath string, names ...string) bool { + if f == nil { + return false + } + if f.Pkg() == nil || f.Pkg().Path() != pkgPath { + return false + } + if f.Type().(*types.Signature).Recv() == nil { + return false + } + for _, n := range names { + if f.Name() == n { + return true + } + } + return false +} + +func funcIdent(fun ast.Expr) *ast.Ident { + switch fun := astutil.Unparen(fun).(type) { + case *ast.IndexExpr, *typeparams.IndexListExpr: + x, _, _, _ := typeparams.UnpackIndexExpr(fun) // necessary? + id, _ := x.(*ast.Ident) + return id + case *ast.Ident: + return fun + default: + return nil + } +} + +// funcLitInScope returns a FuncLit that id is at least initially assigned to. +// +// TODO: This is closely tied to id.Obj which is deprecated. +func funcLitInScope(id *ast.Ident) *ast.FuncLit { + // Compare to (*ast.Object).Pos(). + if id.Obj == nil { + return nil + } + var rhs ast.Expr + switch d := id.Obj.Decl.(type) { + case *ast.AssignStmt: + for i, x := range d.Lhs { + if ident, isIdent := x.(*ast.Ident); isIdent && ident.Name == id.Name && i < len(d.Rhs) { + rhs = d.Rhs[i] + } + } + case *ast.ValueSpec: + for i, n := range d.Names { + if n.Name == id.Name && i < len(d.Values) { + rhs = d.Values[i] + } + } + } + lit, _ := rhs.(*ast.FuncLit) + return lit +} diff --git a/src/cmd/vendor/modules.txt b/src/cmd/vendor/modules.txt index dfde4b287b..fa05367a8a 100644 --- a/src/cmd/vendor/modules.txt +++ b/src/cmd/vendor/modules.txt @@ -17,7 +17,7 @@ github.com/google/pprof/third_party/svgpan # github.com/ianlancetaylor/demangle v0.0.0-20230524184225-eabc099b10ab ## explicit; go 1.13 github.com/ianlancetaylor/demangle -# golang.org/x/arch v0.5.1-0.20231011141335-a6bdeed49307 +# golang.org/x/arch v0.6.0 ## explicit; go 1.18 golang.org/x/arch/arm/armasm golang.org/x/arch/arm64/arm64asm @@ -37,15 +37,15 @@ golang.org/x/mod/zip # golang.org/x/sync v0.5.0 ## explicit; go 1.18 golang.org/x/sync/semaphore -# golang.org/x/sys v0.13.1-0.20231011215430-1bfbee0e20e3 +# golang.org/x/sys v0.15.0 ## explicit; go 1.18 golang.org/x/sys/plan9 golang.org/x/sys/unix golang.org/x/sys/windows -# golang.org/x/term v0.13.1-0.20231011140651-6a610bc55bff +# golang.org/x/term v0.15.0 ## explicit; go 1.18 golang.org/x/term -# golang.org/x/tools v0.15.1-0.20231120183520-8966034e4e53 +# golang.org/x/tools v0.16.1-0.20231129202111-1b1e4dafd51a ## explicit; go 1.18 golang.org/x/tools/cmd/bisect golang.org/x/tools/cover diff --git a/src/go.mod b/src/go.mod index 003d6a96a9..c18ae7760f 100644 --- a/src/go.mod +++ b/src/go.mod @@ -3,11 +3,11 @@ module std go 1.22 require ( - golang.org/x/crypto v0.14.1-0.20231011220222-8779cbd1c995 - golang.org/x/net v0.17.1-0.20231025180729-4c7a5b64f145 + golang.org/x/crypto v0.16.1-0.20231129163542-152cdb1503eb + golang.org/x/net v0.19.0 ) require ( - golang.org/x/sys v0.13.1-0.20231011215430-1bfbee0e20e3 // indirect - golang.org/x/text v0.13.1-0.20231011215848-6c97a165dd66 // indirect + golang.org/x/sys v0.15.0 // indirect + golang.org/x/text v0.14.0 // indirect ) diff --git a/src/go.sum b/src/go.sum index 22519d7feb..7c3519882a 100644 --- a/src/go.sum +++ b/src/go.sum @@ -1,8 +1,8 @@ -golang.org/x/crypto v0.14.1-0.20231011220222-8779cbd1c995 h1:fwu25/DhiXr/++jtzz2gHfC/FL/FimAGVxczaK4pjR8= -golang.org/x/crypto v0.14.1-0.20231011220222-8779cbd1c995/go.mod h1:aSyBXtGhRzSMdne9jbl3+PPMVS0IgOWF6Llc+HB5uUU= -golang.org/x/net v0.17.1-0.20231025180729-4c7a5b64f145 h1:b50rfQxeg+jm4ud87SAQt4escws56zdE+/rT1oKU4oU= -golang.org/x/net v0.17.1-0.20231025180729-4c7a5b64f145/go.mod h1:ctp6Rq0w6YZwLQMXSCn4tot1uuoj9E9vKYJV26guPn4= -golang.org/x/sys v0.13.1-0.20231011215430-1bfbee0e20e3 h1:G9se7UpoI67yWrFY0IIFGf6H3nwLLUZFDBCyOJwWeSc= -golang.org/x/sys v0.13.1-0.20231011215430-1bfbee0e20e3/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.13.1-0.20231011215848-6c97a165dd66 h1:9Dyvhe9/DDm3upTpNNwowKgum0eUka4TBRU6uHiINKo= -golang.org/x/text v0.13.1-0.20231011215848-6c97a165dd66/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/crypto v0.16.1-0.20231129163542-152cdb1503eb h1:1ceSY7sk6sJuiDREHpfyrqDnDljsLfEP2GuTClhBBfI= +golang.org/x/crypto v0.16.1-0.20231129163542-152cdb1503eb/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= +golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= diff --git a/src/net/http/h2_bundle.go b/src/net/http/h2_bundle.go index fea33276d8..ac41144d5b 100644 --- a/src/net/http/h2_bundle.go +++ b/src/net/http/h2_bundle.go @@ -1041,41 +1041,44 @@ func http2shouldRetryDial(call *http2dialCall, req *Request) bool { // TODO: Benchmark to determine if the pools are necessary. The GC may have // improved enough that we can instead allocate chunks like this: // make([]byte, max(16<<10, expectedBytesRemaining)) -var ( - http2dataChunkSizeClasses = []int{ - 1 << 10, - 2 << 10, - 4 << 10, - 8 << 10, - 16 << 10, - } - http2dataChunkPools = [...]sync.Pool{ - {New: func() interface{} { return make([]byte, 1<<10) }}, - {New: func() interface{} { return make([]byte, 2<<10) }}, - {New: func() interface{} { return make([]byte, 4<<10) }}, - {New: func() interface{} { return make([]byte, 8<<10) }}, - {New: func() interface{} { return make([]byte, 16<<10) }}, - } -) +var http2dataChunkPools = [...]sync.Pool{ + {New: func() interface{} { return new([1 << 10]byte) }}, + {New: func() interface{} { return new([2 << 10]byte) }}, + {New: func() interface{} { return new([4 << 10]byte) }}, + {New: func() interface{} { return new([8 << 10]byte) }}, + {New: func() interface{} { return new([16 << 10]byte) }}, +} func http2getDataBufferChunk(size int64) []byte { - i := 0 - for ; i < len(http2dataChunkSizeClasses)-1; i++ { - if size <= int64(http2dataChunkSizeClasses[i]) { - break - } + switch { + case size <= 1<<10: + return http2dataChunkPools[0].Get().(*[1 << 10]byte)[:] + case size <= 2<<10: + return http2dataChunkPools[1].Get().(*[2 << 10]byte)[:] + case size <= 4<<10: + return http2dataChunkPools[2].Get().(*[4 << 10]byte)[:] + case size <= 8<<10: + return http2dataChunkPools[3].Get().(*[8 << 10]byte)[:] + default: + return http2dataChunkPools[4].Get().(*[16 << 10]byte)[:] } - return http2dataChunkPools[i].Get().([]byte) } func http2putDataBufferChunk(p []byte) { - for i, n := range http2dataChunkSizeClasses { - if len(p) == n { - http2dataChunkPools[i].Put(p) - return - } + switch len(p) { + case 1 << 10: + http2dataChunkPools[0].Put((*[1 << 10]byte)(p)) + case 2 << 10: + http2dataChunkPools[1].Put((*[2 << 10]byte)(p)) + case 4 << 10: + http2dataChunkPools[2].Put((*[4 << 10]byte)(p)) + case 8 << 10: + http2dataChunkPools[3].Put((*[8 << 10]byte)(p)) + case 16 << 10: + http2dataChunkPools[4].Put((*[16 << 10]byte)(p)) + default: + panic(fmt.Sprintf("unexpected buffer len=%v", len(p))) } - panic(fmt.Sprintf("unexpected buffer len=%v", len(p))) } // dataBuffer is an io.ReadWriter backed by a list of data chunks. @@ -3058,41 +3061,6 @@ func http2summarizeFrame(f http2Frame) string { return buf.String() } -func http2traceHasWroteHeaderField(trace *httptrace.ClientTrace) bool { - return trace != nil && trace.WroteHeaderField != nil -} - -func http2traceWroteHeaderField(trace *httptrace.ClientTrace, k, v string) { - if trace != nil && trace.WroteHeaderField != nil { - trace.WroteHeaderField(k, []string{v}) - } -} - -func http2traceGot1xxResponseFunc(trace *httptrace.ClientTrace) func(int, textproto.MIMEHeader) error { - if trace != nil { - return trace.Got1xxResponse - } - return nil -} - -// dialTLSWithContext uses tls.Dialer, added in Go 1.15, to open a TLS -// connection. -func (t *http2Transport) dialTLSWithContext(ctx context.Context, network, addr string, cfg *tls.Config) (*tls.Conn, error) { - dialer := &tls.Dialer{ - Config: cfg, - } - cn, err := dialer.DialContext(ctx, network, addr) - if err != nil { - return nil, err - } - tlsCn := cn.(*tls.Conn) // DialContext comment promises this will always succeed - return tlsCn, nil -} - -func http2tlsUnderlyingConn(tc *tls.Conn) net.Conn { - return tc.NetConn() -} - var http2DebugGoroutines = os.Getenv("DEBUG_HTTP2_GOROUTINES") == "1" type http2goroutineLock uint64 @@ -6366,7 +6334,6 @@ type http2responseWriterState struct { wroteHeader bool // WriteHeader called (explicitly or implicitly). Not necessarily sent to user yet. sentHeader bool // have we sent the header frame? handlerDone bool // handler has finished - dirty bool // a Write failed; don't reuse this responseWriterState sentContentLen int64 // non-zero if handler set a Content-Length header wroteBytes int64 @@ -6486,7 +6453,6 @@ func (rws *http2responseWriterState) writeChunk(p []byte) (n int, err error) { date: date, }) if err != nil { - rws.dirty = true return 0, err } if endStream { @@ -6507,7 +6473,6 @@ func (rws *http2responseWriterState) writeChunk(p []byte) (n int, err error) { if len(p) > 0 || endStream { // only send a 0 byte DATA frame if we're ending the stream. if err := rws.conn.writeDataFromHandler(rws.stream, p, endStream); err != nil { - rws.dirty = true return 0, err } } @@ -6519,9 +6484,6 @@ func (rws *http2responseWriterState) writeChunk(p []byte) (n int, err error) { trailers: rws.trailers, endStream: true, }) - if err != nil { - rws.dirty = true - } return len(p), err } return len(p), nil @@ -6737,14 +6699,12 @@ func (rws *http2responseWriterState) writeHeader(code int) { h.Del("Transfer-Encoding") } - if rws.conn.writeHeaders(rws.stream, &http2writeResHeaders{ + rws.conn.writeHeaders(rws.stream, &http2writeResHeaders{ streamID: rws.stream.id, httpResCode: code, h: h, endStream: rws.handlerDone && !rws.hasTrailers(), - }) != nil { - rws.dirty = true - } + }) return } @@ -6809,19 +6769,10 @@ func (w *http2responseWriter) write(lenData int, dataB []byte, dataS string) (n func (w *http2responseWriter) handlerDone() { rws := w.rws - dirty := rws.dirty rws.handlerDone = true w.Flush() w.rws = nil - if !dirty { - // Only recycle the pool if all prior Write calls to - // the serverConn goroutine completed successfully. If - // they returned earlier due to resets from the peer - // there might still be write goroutines outstanding - // from the serverConn referencing the rws memory. See - // issue 20704. - http2responseWriterStatePool.Put(rws) - } + http2responseWriterStatePool.Put(rws) } // Push errors. @@ -8094,7 +8045,7 @@ func (cc *http2ClientConn) forceCloseConn() { if !ok { return } - if nc := http2tlsUnderlyingConn(tc); nc != nil { + if nc := tc.NetConn(); nc != nil { nc.Close() } } @@ -10282,6 +10233,37 @@ func http2traceFirstResponseByte(trace *httptrace.ClientTrace) { } } +func http2traceHasWroteHeaderField(trace *httptrace.ClientTrace) bool { + return trace != nil && trace.WroteHeaderField != nil +} + +func http2traceWroteHeaderField(trace *httptrace.ClientTrace, k, v string) { + if trace != nil && trace.WroteHeaderField != nil { + trace.WroteHeaderField(k, []string{v}) + } +} + +func http2traceGot1xxResponseFunc(trace *httptrace.ClientTrace) func(int, textproto.MIMEHeader) error { + if trace != nil { + return trace.Got1xxResponse + } + return nil +} + +// dialTLSWithContext uses tls.Dialer, added in Go 1.15, to open a TLS +// connection. +func (t *http2Transport) dialTLSWithContext(ctx context.Context, network, addr string, cfg *tls.Config) (*tls.Conn, error) { + dialer := &tls.Dialer{ + Config: cfg, + } + cn, err := dialer.DialContext(ctx, network, addr) + if err != nil { + return nil, err + } + tlsCn := cn.(*tls.Conn) // DialContext comment promises this will always succeed + return tlsCn, nil +} + // writeFramer is implemented by any type that is used to write frames. type http2writeFramer interface { writeFrame(http2writeContext) error diff --git a/src/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.s b/src/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.s index 541d696b67..731d2ac6db 100644 --- a/src/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.s +++ b/src/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.s @@ -183,11 +183,31 @@ GLOBL ·andMask<>(SB), (NOPTR+RODATA), $240 #define shiftD1Right BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xd2; BYTE $0x04 // PALIGNR $4, X10, X10 #define shiftD2Right BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xdb; BYTE $0x04 // PALIGNR $4, X11, X11 #define shiftD3Right BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xff; BYTE $0x04 // PALIGNR $4, X15, X15 + // Some macros + +// ROL rotates the uint32s in register R left by N bits, using temporary T. +#define ROL(N, R, T) \ + MOVO R, T; PSLLL $(N), T; PSRLL $(32-(N)), R; PXOR T, R + +// ROL16 rotates the uint32s in register R left by 16, using temporary T if needed. +#ifdef GOAMD64_v2 +#define ROL16(R, T) PSHUFB ·rol16<>(SB), R +#else +#define ROL16(R, T) ROL(16, R, T) +#endif + +// ROL8 rotates the uint32s in register R left by 8, using temporary T if needed. +#ifdef GOAMD64_v2 +#define ROL8(R, T) PSHUFB ·rol8<>(SB), R +#else +#define ROL8(R, T) ROL(8, R, T) +#endif + #define chachaQR(A, B, C, D, T) \ - PADDD B, A; PXOR A, D; PSHUFB ·rol16<>(SB), D \ + PADDD B, A; PXOR A, D; ROL16(D, T) \ PADDD D, C; PXOR C, B; MOVO B, T; PSLLL $12, T; PSRLL $20, B; PXOR T, B \ - PADDD B, A; PXOR A, D; PSHUFB ·rol8<>(SB), D \ + PADDD B, A; PXOR A, D; ROL8(D, T) \ PADDD D, C; PXOR C, B; MOVO B, T; PSLLL $7, T; PSRLL $25, B; PXOR T, B #define chachaQR_AVX2(A, B, C, D, T) \ diff --git a/src/vendor/golang.org/x/crypto/cryptobyte/asn1.go b/src/vendor/golang.org/x/crypto/cryptobyte/asn1.go index 6fc2838a3f..2492f796af 100644 --- a/src/vendor/golang.org/x/crypto/cryptobyte/asn1.go +++ b/src/vendor/golang.org/x/crypto/cryptobyte/asn1.go @@ -733,13 +733,14 @@ func (s *String) ReadOptionalASN1OctetString(out *[]byte, outPresent *bool, tag return true } -// ReadOptionalASN1Boolean sets *out to the value of the next ASN.1 BOOLEAN or, -// if the next bytes are not an ASN.1 BOOLEAN, to the value of defaultValue. -// It reports whether the operation was successful. -func (s *String) ReadOptionalASN1Boolean(out *bool, defaultValue bool) bool { +// ReadOptionalASN1Boolean attempts to read an optional ASN.1 BOOLEAN +// explicitly tagged with tag into out and advances. If no element with a +// matching tag is present, it sets "out" to defaultValue instead. It reports +// whether the read was successful. +func (s *String) ReadOptionalASN1Boolean(out *bool, tag asn1.Tag, defaultValue bool) bool { var present bool var child String - if !s.ReadOptionalASN1(&child, &present, asn1.BOOLEAN) { + if !s.ReadOptionalASN1(&child, &present, tag) { return false } @@ -748,7 +749,7 @@ func (s *String) ReadOptionalASN1Boolean(out *bool, defaultValue bool) bool { return true } - return s.ReadASN1Boolean(out) + return child.ReadASN1Boolean(out) } func (s *String) readASN1(out *String, outTag *asn1.Tag, skipHeader bool) bool { diff --git a/src/vendor/golang.org/x/crypto/hkdf/hkdf.go b/src/vendor/golang.org/x/crypto/hkdf/hkdf.go index dda3f143be..f4ded5fee2 100644 --- a/src/vendor/golang.org/x/crypto/hkdf/hkdf.go +++ b/src/vendor/golang.org/x/crypto/hkdf/hkdf.go @@ -56,7 +56,9 @@ func (f *hkdf) Read(p []byte) (int, error) { // Fill the rest of the buffer for len(p) > 0 { - f.expander.Reset() + if f.counter > 1 { + f.expander.Reset() + } f.expander.Write(f.prev) f.expander.Write(f.info) f.expander.Write([]byte{f.counter}) diff --git a/src/vendor/modules.txt b/src/vendor/modules.txt index 6d61189796..338c496bf9 100644 --- a/src/vendor/modules.txt +++ b/src/vendor/modules.txt @@ -1,4 +1,4 @@ -# golang.org/x/crypto v0.14.1-0.20231011220222-8779cbd1c995 +# golang.org/x/crypto v0.16.1-0.20231129163542-152cdb1503eb ## explicit; go 1.18 golang.org/x/crypto/chacha20 golang.org/x/crypto/chacha20poly1305 @@ -7,7 +7,7 @@ golang.org/x/crypto/cryptobyte/asn1 golang.org/x/crypto/hkdf golang.org/x/crypto/internal/alias golang.org/x/crypto/internal/poly1305 -# golang.org/x/net v0.17.1-0.20231025180729-4c7a5b64f145 +# golang.org/x/net v0.19.0 ## explicit; go 1.18 golang.org/x/net/dns/dnsmessage golang.org/x/net/http/httpguts @@ -17,10 +17,10 @@ golang.org/x/net/idna golang.org/x/net/lif golang.org/x/net/nettest golang.org/x/net/route -# golang.org/x/sys v0.13.1-0.20231011215430-1bfbee0e20e3 +# golang.org/x/sys v0.15.0 ## explicit; go 1.18 golang.org/x/sys/cpu -# golang.org/x/text v0.13.1-0.20231011215848-6c97a165dd66 +# golang.org/x/text v0.14.0 ## explicit; go 1.18 golang.org/x/text/secure/bidirule golang.org/x/text/transform From 858cd8da569938913541d013af27a2a2a875fcb5 Mon Sep 17 00:00:00 2001 From: Cosmos Nicolaou Date: Wed, 29 Nov 2023 11:04:57 -0800 Subject: [PATCH 123/313] runtime/pprof: retry vmmap invocation if it failed due to a reported temporary resource shortage As per #62352 the invocation of vmmap may fail (very rarely) due to a temporary lack of resources on the test runner machine. This PR allows for retrying the invocation a fixed number of times before giving up. This is because we suspect the failure is due to sensible to retry. Fixes: #62352 Change-Id: I51aa66b949753d8127cc307181b6ef32e91d5b05 Reviewed-on: https://go-review.googlesource.com/c/go/+/545935 Auto-Submit: Bryan Mills Run-TryBot: Bryan Mills Reviewed-by: Bryan Mills TryBot-Result: Gopher Robot Reviewed-by: Cherry Mui --- src/runtime/pprof/vminfo_darwin_test.go | 33 ++++++++++++++++++++----- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/src/runtime/pprof/vminfo_darwin_test.go b/src/runtime/pprof/vminfo_darwin_test.go index 1a3b67a0bf..8749a13390 100644 --- a/src/runtime/pprof/vminfo_darwin_test.go +++ b/src/runtime/pprof/vminfo_darwin_test.go @@ -34,7 +34,10 @@ func TestVMInfo(t *testing.T) { // the go toolchain itself. first = false }) - lo, hi := useVMMap(t) + lo, hi, err := useVMMapWithRetry(t) + if err != nil { + t.Fatal(err) + } if got, want := begin, lo; got != want { t.Errorf("got %x, want %x", got, want) } @@ -53,7 +56,21 @@ func TestVMInfo(t *testing.T) { } } -func useVMMap(t *testing.T) (hi, lo uint64) { +func useVMMapWithRetry(t *testing.T) (hi, lo uint64, err error) { + var retryable bool + for { + hi, lo, retryable, err = useVMMap(t) + if err == nil { + return hi, lo, nil + } + if !retryable { + return 0, 0, err + } + t.Logf("retrying vmmap after error: %v", err) + } +} + +func useVMMap(t *testing.T) (hi, lo uint64, retryable bool, err error) { pid := strconv.Itoa(os.Getpid()) testenv.MustHaveExecPath(t, "vmmap") cmd := testenv.Command(t, "vmmap", pid) @@ -63,20 +80,24 @@ func useVMMap(t *testing.T) (hi, lo uint64) { if ee, ok := cmdErr.(*exec.ExitError); ok && len(ee.Stderr) > 0 { t.Logf("%v: %v\n%s", cmd, cmdErr, ee.Stderr) } + retryable = bytes.Contains(out, []byte("resource shortage")) t.Logf("%v: %v", cmd, cmdErr) + if retryable { + return 0, 0, true, cmdErr + } } // Always parse the output of vmmap since it may return an error // code even if it successfully reports the text segment information // required for this test. - hi, lo, err := parseVmmap(out) + hi, lo, err = parseVmmap(out) if err != nil { if cmdErr != nil { - t.Fatalf("failed to parse vmmap output, vmmap reported an error: %v", err) + return 0, 0, false, fmt.Errorf("failed to parse vmmap output, vmmap reported an error: %v", err) } t.Logf("vmmap output: %s", out) - t.Fatalf("failed to parse vmmap output, vmmap did not report an error: %v", err) + return 0, 0, false, fmt.Errorf("failed to parse vmmap output, vmmap did not report an error: %v", err) } - return hi, lo + return hi, lo, false, nil } // parseVmmap parses the output of vmmap and calls addMapping for the first r-x TEXT segment in the output. From a27a525d1b4df74989ac9f6ad10394391fe3eb88 Mon Sep 17 00:00:00 2001 From: Alan Donovan Date: Mon, 20 Nov 2023 17:22:37 -0500 Subject: [PATCH 124/313] go/types: set correct Var.scopePos for parameters/results Previously, its value was unset (NoPos), but the correct value is a point after the signature (FuncType.End) and before the body. Also, fix a bug in Scope.Innermost whereby it would return the wrong (outer) scope when the query position was in the FuncType portion of a Func{Decl,Lit}. The fix is to set the scope's pos/end to those of the complete Func{Decl,Lit}. This is now documented at Info.Scopes, along with other missing information. Also, fix a bug in the go/types (but not types2) scope test, in which comments were discarded by the parser, causing the entire test to be a no-op (!). Also, make failures of TestScopeLookupParent more informative. Also, add a release note about the change in behavior. Fixes #64292 Fixes #64295 Change-Id: Ib681f59d1b0b43de977666db08302d7524d3305f Reviewed-on: https://go-review.googlesource.com/c/go/+/544035 Reviewed-by: Robert Findley Reviewed-by: Robert Griesemer Auto-Submit: Robert Griesemer LUCI-TryBot-Result: Go LUCI Run-TryBot: Robert Griesemer --- doc/go1.22.html | 12 +++++++ src/cmd/compile/internal/types2/api.go | 9 +++++ src/cmd/compile/internal/types2/api_test.go | 32 ++++++++++++++++-- src/cmd/compile/internal/types2/decl.go | 18 +++++++--- src/cmd/compile/internal/types2/expr.go | 4 +++ src/cmd/compile/internal/types2/signature.go | 28 ++++++++++------ src/cmd/compile/internal/types2/stmt.go | 4 --- src/cmd/compile/internal/types2/util_test.go | 7 +++- src/go/types/api.go | 9 +++++ src/go/types/api_test.go | 35 +++++++++++++++++--- src/go/types/decl.go | 14 +++++--- src/go/types/eval_test.go | 2 +- src/go/types/expr.go | 4 +++ src/go/types/signature.go | 27 ++++++++++----- src/go/types/stmt.go | 4 --- src/go/types/util_test.go | 7 +++- 16 files changed, 169 insertions(+), 47 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 789ecc3c32..8e9b6ee53c 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -486,6 +486,18 @@ Do not send CLs removing the interior tags from such phrases. +

go/types
+
+

+ The start position (Pos) + of the lexical environment block (Scope) + that represents a function body has changed: + it used to start at the opening curly brace of the function body, + but now starts at the function's func token. +

+
+
+
reflect

diff --git a/src/cmd/compile/internal/types2/api.go b/src/cmd/compile/internal/types2/api.go index 6628174428..bb02d9198e 100644 --- a/src/cmd/compile/internal/types2/api.go +++ b/src/cmd/compile/internal/types2/api.go @@ -268,6 +268,15 @@ type Info struct { // scope, the function scopes are embedded in the file scope of the file // containing the function declaration. // + // The Scope of a function contains the declarations of any + // type parameters, parameters, and named results, plus any + // local declarations in the body block. + // It is coextensive with the complete extent of the + // function's syntax ([*ast.FuncDecl] or [*ast.FuncLit]). + // The Scopes mapping does not contain an entry for the + // function body ([*ast.BlockStmt]); the function's scope is + // associated with the [*ast.FuncType]. + // // The following node types may appear in Scopes: // // *syntax.File diff --git a/src/cmd/compile/internal/types2/api_test.go b/src/cmd/compile/internal/types2/api_test.go index 56cddf6b29..c70d914453 100644 --- a/src/cmd/compile/internal/types2/api_test.go +++ b/src/cmd/compile/internal/types2/api_test.go @@ -1892,12 +1892,12 @@ const Pi = 3.1415 type T struct{} var Y, _ = lib.X, X -func F(){ +func F[T *U, U any](param1, param2 int) /*param1=undef*/ (res1 /*res1=undef*/, res2 int) /*param1=var:12*/ /*res1=var:12*/ /*U=typename:12*/ { const pi, e = 3.1415, /*pi=undef*/ 2.71828 /*pi=const:13*/ /*e=const:13*/ type /*t=undef*/ t /*t=typename:14*/ *t print(Y) /*Y=var:10*/ x, Y := Y, /*x=undef*/ /*Y=var:10*/ Pi /*x=var:16*/ /*Y=var:16*/ ; _ = x; _ = Y - var F = /*F=func:12*/ F /*F=var:17*/ ; _ = F + var F = /*F=func:12*/ F[*int, int] /*F=var:17*/ ; _ = F var a []int for i, x := range a /*i=undef*/ /*x=var:16*/ { _ = i; _ = x } @@ -1916,6 +1916,10 @@ func F(){ println(int) default /*int=var:31*/ : } + + _ = param1 + _ = res1 + return } /*main=undef*/ ` @@ -1981,7 +1985,29 @@ func F(){ _, gotObj := inner.LookupParent(id.Value, id.Pos()) if gotObj != wantObj { - t.Errorf("%s: got %v, want %v", id.Pos(), gotObj, wantObj) + // Print the scope tree of mainScope in case of error. + var printScopeTree func(indent string, s *Scope) + printScopeTree = func(indent string, s *Scope) { + t.Logf("%sscope %s %v-%v = %v", + indent, + ScopeComment(s), + s.Pos(), + s.End(), + s.Names()) + for i := range s.NumChildren() { + printScopeTree(indent+" ", s.Child(i)) + } + } + printScopeTree("", mainScope) + + t.Errorf("%s: Scope(%s).LookupParent(%s@%v) got %v, want %v [scopePos=%v]", + id.Pos(), + ScopeComment(inner), + id.Value, + id.Pos(), + gotObj, + wantObj, + ObjectScopePos(wantObj)) continue } } diff --git a/src/cmd/compile/internal/types2/decl.go b/src/cmd/compile/internal/types2/decl.go index 3abde44c71..3ffa9431e4 100644 --- a/src/cmd/compile/internal/types2/decl.go +++ b/src/cmd/compile/internal/types2/decl.go @@ -570,8 +570,11 @@ func (check *Checker) collectTypeParams(dst **TypeParamList, list []*syntax.Fiel // Declare type parameters up-front. // The scope of type parameters starts at the beginning of the type parameter // list (so we can have mutually recursive parameterized type bounds). - for i, f := range list { - tparams[i] = check.declareTypeParam(f.Name) + if len(list) > 0 { + scopePos := list[0].Pos() + for i, f := range list { + tparams[i] = check.declareTypeParam(f.Name, scopePos) + } } // Set the type parameters before collecting the type constraints because @@ -628,7 +631,7 @@ func (check *Checker) bound(x syntax.Expr) Type { return check.typ(x) } -func (check *Checker) declareTypeParam(name *syntax.Name) *TypeParam { +func (check *Checker) declareTypeParam(name *syntax.Name, scopePos syntax.Pos) *TypeParam { // Use Typ[Invalid] for the type constraint to ensure that a type // is present even if the actual constraint has not been assigned // yet. @@ -636,8 +639,8 @@ func (check *Checker) declareTypeParam(name *syntax.Name) *TypeParam { // constraints to make sure we don't rely on them if they // are not properly set yet. tname := NewTypeName(name.Pos(), check.pkg, name.Value, nil) - tpar := check.newTypeParam(tname, Typ[Invalid]) // assigns type to tname as a side-effect - check.declare(check.scope, name, tname, check.scope.pos) // TODO(gri) check scope position + tpar := check.newTypeParam(tname, Typ[Invalid]) // assigns type to tname as a side-effect + check.declare(check.scope, name, tname, scopePos) return tpar } @@ -750,6 +753,11 @@ func (check *Checker) funcDecl(obj *Func, decl *declInfo) { check.funcType(sig, fdecl.Recv, fdecl.TParamList, fdecl.Type) obj.color_ = saved + // Set the scope's extent to the complete "func (...) { ... }" + // so that Scope.Innermost works correctly. + sig.scope.pos = fdecl.Pos() + sig.scope.end = syntax.EndPos(fdecl) + if len(fdecl.TParamList) > 0 && fdecl.Body == nil { check.softErrorf(fdecl, BadDecl, "generic function is missing function body") } diff --git a/src/cmd/compile/internal/types2/expr.go b/src/cmd/compile/internal/types2/expr.go index 321b0c4762..e1c2c8ff2a 100644 --- a/src/cmd/compile/internal/types2/expr.go +++ b/src/cmd/compile/internal/types2/expr.go @@ -1081,6 +1081,10 @@ func (check *Checker) exprInternal(T Type, x *operand, e syntax.Expr, hint Type) case *syntax.FuncLit: if sig, ok := check.typ(e.Type).(*Signature); ok { + // Set the Scope's extent to the complete "func (...) {...}" + // so that Scope.Innermost works correctly. + sig.scope.pos = e.Pos() + sig.scope.end = syntax.EndPos(e) if !check.conf.IgnoreFuncBodies && e.Body != nil { // Anonymous functions are considered part of the // init expression/func declaration which contains diff --git a/src/cmd/compile/internal/types2/signature.go b/src/cmd/compile/internal/types2/signature.go index 8b896f7a90..18a64ec1a0 100644 --- a/src/cmd/compile/internal/types2/signature.go +++ b/src/cmd/compile/internal/types2/signature.go @@ -108,9 +108,12 @@ func (check *Checker) funcType(sig *Signature, recvPar *syntax.Field, tparams [] // - the receiver specification acts as local declaration for its type parameters, which may be blank _, rname, rparams := check.unpackRecv(recvPar.Type, true) if len(rparams) > 0 { + // The scope of the type parameter T in "func (r T[T]) f()" + // starts after f, not at "r"; see #52038. + scopePos := ftyp.Pos() tparams := make([]*TypeParam, len(rparams)) for i, rparam := range rparams { - tparams[i] = check.declareTypeParam(rparam) + tparams[i] = check.declareTypeParam(rparam, scopePos) } sig.rparams = bindTParams(tparams) // Blank identifiers don't get declared, so naive type-checking of the @@ -167,16 +170,21 @@ func (check *Checker) funcType(sig *Signature, recvPar *syntax.Field, tparams [] check.collectTypeParams(&sig.tparams, tparams) } - // Value (non-type) parameters' scope starts in the function body. Use a temporary scope for their - // declarations and then squash that scope into the parent scope (and report any redeclarations at - // that time). + // Use a temporary scope for all parameter declarations and then + // squash that scope into the parent scope (and report any + // redeclarations at that time). + // + // TODO(adonovan): now that each declaration has the correct + // scopePos, there should be no need for scope squashing. + // Audit to ensure all lookups honor scopePos and simplify. scope := NewScope(check.scope, nopos, nopos, "function body (temp. scope)") - var recvList []*Var // TODO(gri) remove the need for making a list here + scopePos := syntax.EndPos(ftyp) // all parameters' scopes start after the signature + var recvList []*Var // TODO(gri) remove the need for making a list here if recvPar != nil { - recvList, _ = check.collectParams(scope, []*syntax.Field{recvPar}, false) // use rewritten receiver type, if any + recvList, _ = check.collectParams(scope, []*syntax.Field{recvPar}, false, scopePos) // use rewritten receiver type, if any } - params, variadic := check.collectParams(scope, ftyp.ParamList, true) - results, _ := check.collectParams(scope, ftyp.ResultList, false) + params, variadic := check.collectParams(scope, ftyp.ParamList, true, scopePos) + results, _ := check.collectParams(scope, ftyp.ResultList, false, scopePos) scope.Squash(func(obj, alt Object) { var err error_ err.code = DuplicateDecl @@ -259,7 +267,7 @@ func (check *Checker) funcType(sig *Signature, recvPar *syntax.Field, tparams [] // collectParams declares the parameters of list in scope and returns the corresponding // variable list. -func (check *Checker) collectParams(scope *Scope, list []*syntax.Field, variadicOk bool) (params []*Var, variadic bool) { +func (check *Checker) collectParams(scope *Scope, list []*syntax.Field, variadicOk bool, scopePos syntax.Pos) (params []*Var, variadic bool) { if list == nil { return } @@ -294,7 +302,7 @@ func (check *Checker) collectParams(scope *Scope, list []*syntax.Field, variadic // ok to continue } par := NewParam(field.Name.Pos(), check.pkg, name, typ) - check.declare(scope, field.Name, par, scope.pos) + check.declare(scope, field.Name, par, scopePos) params = append(params, par) named = true } else { diff --git a/src/cmd/compile/internal/types2/stmt.go b/src/cmd/compile/internal/types2/stmt.go index e4bda49c52..7956bf3033 100644 --- a/src/cmd/compile/internal/types2/stmt.go +++ b/src/cmd/compile/internal/types2/stmt.go @@ -23,10 +23,6 @@ func (check *Checker) funcBody(decl *declInfo, name string, sig *Signature, body check.trace(body.Pos(), "-- %s: %s", name, sig) } - // set function scope extent - sig.scope.pos = body.Pos() - sig.scope.end = syntax.EndPos(body) - // save/restore current environment and set up function environment // (and use 0 indentation at function start) defer func(env environment, indent int) { diff --git a/src/cmd/compile/internal/types2/util_test.go b/src/cmd/compile/internal/types2/util_test.go index 4cbd002355..70058aad84 100644 --- a/src/cmd/compile/internal/types2/util_test.go +++ b/src/cmd/compile/internal/types2/util_test.go @@ -7,6 +7,11 @@ package types2 -import "cmd/compile/internal/syntax" +import ( + "cmd/compile/internal/syntax" +) func CmpPos(p, q syntax.Pos) int { return cmpPos(p, q) } + +func ScopeComment(s *Scope) string { return s.comment } +func ObjectScopePos(obj Object) syntax.Pos { return obj.scopePos() } diff --git a/src/go/types/api.go b/src/go/types/api.go index f729e33dec..796fe055e6 100644 --- a/src/go/types/api.go +++ b/src/go/types/api.go @@ -263,6 +263,15 @@ type Info struct { // scope, the function scopes are embedded in the file scope of the file // containing the function declaration. // + // The Scope of a function contains the declarations of any + // type parameters, parameters, and named results, plus any + // local declarations in the body block. + // It is coextensive with the complete extent of the + // function's syntax ([*ast.FuncDecl] or [*ast.FuncLit]). + // The Scopes mapping does not contain an entry for the + // function body ([*ast.BlockStmt]); the function's scope is + // associated with the [*ast.FuncType]. + // // The following node types may appear in Scopes: // // *ast.File diff --git a/src/go/types/api_test.go b/src/go/types/api_test.go index 594b92bb23..0dc5f35dff 100644 --- a/src/go/types/api_test.go +++ b/src/go/types/api_test.go @@ -27,7 +27,7 @@ import ( var nopos token.Pos func mustParse(fset *token.FileSet, src string) *ast.File { - f, err := parser.ParseFile(fset, pkgName(src), src, 0) + f, err := parser.ParseFile(fset, pkgName(src), src, parser.ParseComments) if err != nil { panic(err) // so we don't need to pass *testing.T } @@ -1896,12 +1896,12 @@ const Pi = 3.1415 type T struct{} var Y, _ = lib.X, X -func F(){ +func F[T *U, U any](param1, param2 int) /*param1=undef*/ (res1 /*res1=undef*/, res2 int) /*param1=var:12*/ /*res1=var:12*/ /*U=typename:12*/ { const pi, e = 3.1415, /*pi=undef*/ 2.71828 /*pi=const:13*/ /*e=const:13*/ type /*t=undef*/ t /*t=typename:14*/ *t print(Y) /*Y=var:10*/ x, Y := Y, /*x=undef*/ /*Y=var:10*/ Pi /*x=var:16*/ /*Y=var:16*/ ; _ = x; _ = Y - var F = /*F=func:12*/ F /*F=var:17*/ ; _ = F + var F = /*F=func:12*/ F[*int, int] /*F=var:17*/ ; _ = F var a []int for i, x := range a /*i=undef*/ /*x=var:16*/ { _ = i; _ = x } @@ -1920,6 +1920,10 @@ func F(){ println(int) default /*int=var:31*/ : } + + _ = param1 + _ = res1 + return } /*main=undef*/ ` @@ -1981,8 +1985,29 @@ func F(){ _, gotObj := inner.LookupParent(id.Name, id.Pos()) if gotObj != wantObj { - t.Errorf("%s: got %v, want %v", - fset.Position(id.Pos()), gotObj, wantObj) + // Print the scope tree of mainScope in case of error. + var printScopeTree func(indent string, s *Scope) + printScopeTree = func(indent string, s *Scope) { + t.Logf("%sscope %s %v-%v = %v", + indent, + ScopeComment(s), + s.Pos(), + s.End(), + s.Names()) + for i := range s.NumChildren() { + printScopeTree(indent+" ", s.Child(i)) + } + } + printScopeTree("", mainScope) + + t.Errorf("%s: Scope(%s).LookupParent(%s@%v) got %v, want %v [scopePos=%v]", + fset.Position(id.Pos()), + ScopeComment(inner), + id.Name, + id.Pos(), + gotObj, + wantObj, + ObjectScopePos(wantObj)) continue } } diff --git a/src/go/types/decl.go b/src/go/types/decl.go index c8716bd74f..0795cb5fce 100644 --- a/src/go/types/decl.go +++ b/src/go/types/decl.go @@ -638,8 +638,9 @@ func (check *Checker) collectTypeParams(dst **TypeParamList, list *ast.FieldList // Declare type parameters up-front, with empty interface as type bound. // The scope of type parameters starts at the beginning of the type parameter // list (so we can have mutually recursive parameterized interfaces). + scopePos := list.Pos() for _, f := range list.List { - tparams = check.declareTypeParams(tparams, f.Names) + tparams = check.declareTypeParams(tparams, f.Names, scopePos) } // Set the type parameters before collecting the type constraints because @@ -708,7 +709,7 @@ func (check *Checker) bound(x ast.Expr) Type { return check.typ(x) } -func (check *Checker) declareTypeParams(tparams []*TypeParam, names []*ast.Ident) []*TypeParam { +func (check *Checker) declareTypeParams(tparams []*TypeParam, names []*ast.Ident, scopePos token.Pos) []*TypeParam { // Use Typ[Invalid] for the type constraint to ensure that a type // is present even if the actual constraint has not been assigned // yet. @@ -717,8 +718,8 @@ func (check *Checker) declareTypeParams(tparams []*TypeParam, names []*ast.Ident // are not properly set yet. for _, name := range names { tname := NewTypeName(name.Pos(), check.pkg, name.Name, nil) - tpar := check.newTypeParam(tname, Typ[Invalid]) // assigns type to tpar as a side-effect - check.declare(check.scope, name, tname, check.scope.pos) // TODO(gri) check scope position + tpar := check.newTypeParam(tname, Typ[Invalid]) // assigns type to tpar as a side-effect + check.declare(check.scope, name, tname, scopePos) tparams = append(tparams, tpar) } @@ -835,6 +836,11 @@ func (check *Checker) funcDecl(obj *Func, decl *declInfo) { check.funcType(sig, fdecl.Recv, fdecl.Type) obj.color_ = saved + // Set the scope's extent to the complete "func (...) { ... }" + // so that Scope.Innermost works correctly. + sig.scope.pos = fdecl.Pos() + sig.scope.end = fdecl.End() + if fdecl.Type.TypeParams.NumFields() > 0 && fdecl.Body == nil { check.softErrorf(fdecl.Name, BadDecl, "generic function is missing function body") } diff --git a/src/go/types/eval_test.go b/src/go/types/eval_test.go index 4e995afd7e..dd9bd7f426 100644 --- a/src/go/types/eval_test.go +++ b/src/go/types/eval_test.go @@ -139,7 +139,7 @@ func TestEvalPos(t *testing.T) { /* c => , struct{c int} */ _ = c } - _ = func(a, b, c int) /* c => , string */ { + _ = func(a, b, c int /* c => , string */) /* c => , int */ { /* c => , int */ } _ = c diff --git a/src/go/types/expr.go b/src/go/types/expr.go index b018939730..ecd0d56908 100644 --- a/src/go/types/expr.go +++ b/src/go/types/expr.go @@ -1059,6 +1059,10 @@ func (check *Checker) exprInternal(T Type, x *operand, e ast.Expr, hint Type) ex case *ast.FuncLit: if sig, ok := check.typ(e.Type).(*Signature); ok { + // Set the Scope's extent to the complete "func (...) {...}" + // so that Scope.Innermost works correctly. + sig.scope.pos = e.Pos() + sig.scope.end = e.End() if !check.conf.IgnoreFuncBodies && e.Body != nil { // Anonymous functions are considered part of the // init expression/func declaration which contains diff --git a/src/go/types/signature.go b/src/go/types/signature.go index ed9fcfe58e..cad42cb942 100644 --- a/src/go/types/signature.go +++ b/src/go/types/signature.go @@ -7,6 +7,7 @@ package types import ( "fmt" "go/ast" + "go/token" . "internal/types/errors" ) @@ -115,7 +116,10 @@ func (check *Checker) funcType(sig *Signature, recvPar *ast.FieldList, ftyp *ast // - the receiver specification acts as local declaration for its type parameters, which may be blank _, rname, rparams := check.unpackRecv(recvPar.List[0].Type, true) if len(rparams) > 0 { - tparams := check.declareTypeParams(nil, rparams) + // The scope of the type parameter T in "func (r T[T]) f()" + // starts after f, not at "r"; see #52038. + scopePos := ftyp.Params.Pos() + tparams := check.declareTypeParams(nil, rparams, scopePos) sig.rparams = bindTParams(tparams) // Blank identifiers don't get declared, so naive type-checking of the // receiver type expression would fail in Checker.collectParams below, @@ -176,13 +180,18 @@ func (check *Checker) funcType(sig *Signature, recvPar *ast.FieldList, ftyp *ast } } - // Value (non-type) parameters' scope starts in the function body. Use a temporary scope for their - // declarations and then squash that scope into the parent scope (and report any redeclarations at - // that time). + // Use a temporary scope for all parameter declarations and then + // squash that scope into the parent scope (and report any + // redeclarations at that time). + // + // TODO(adonovan): now that each declaration has the correct + // scopePos, there should be no need for scope squashing. + // Audit to ensure all lookups honor scopePos and simplify. scope := NewScope(check.scope, nopos, nopos, "function body (temp. scope)") - recvList, _ := check.collectParams(scope, recvPar, false) - params, variadic := check.collectParams(scope, ftyp.Params, true) - results, _ := check.collectParams(scope, ftyp.Results, false) + scopePos := ftyp.End() // all parameters' scopes start after the signature + recvList, _ := check.collectParams(scope, recvPar, false, scopePos) + params, variadic := check.collectParams(scope, ftyp.Params, true, scopePos) + results, _ := check.collectParams(scope, ftyp.Results, false, scopePos) scope.squash(func(obj, alt Object) { check.errorf(obj, DuplicateDecl, "%s redeclared in this block", obj.Name()) check.reportAltDecl(alt) @@ -262,7 +271,7 @@ func (check *Checker) funcType(sig *Signature, recvPar *ast.FieldList, ftyp *ast // collectParams declares the parameters of list in scope and returns the corresponding // variable list. -func (check *Checker) collectParams(scope *Scope, list *ast.FieldList, variadicOk bool) (params []*Var, variadic bool) { +func (check *Checker) collectParams(scope *Scope, list *ast.FieldList, variadicOk bool, scopePos token.Pos) (params []*Var, variadic bool) { if list == nil { return } @@ -290,7 +299,7 @@ func (check *Checker) collectParams(scope *Scope, list *ast.FieldList, variadicO // ok to continue } par := NewParam(name.Pos(), check.pkg, name.Name, typ) - check.declare(scope, name, par, scope.pos) + check.declare(scope, name, par, scopePos) params = append(params, par) } named = true diff --git a/src/go/types/stmt.go b/src/go/types/stmt.go index 7a3bcf029b..288d74b95a 100644 --- a/src/go/types/stmt.go +++ b/src/go/types/stmt.go @@ -24,10 +24,6 @@ func (check *Checker) funcBody(decl *declInfo, name string, sig *Signature, body check.trace(body.Pos(), "-- %s: %s", name, sig) } - // set function scope extent - sig.scope.pos = body.Pos() - sig.scope.end = body.End() - // save/restore current environment and set up function environment // (and use 0 indentation at function start) defer func(env environment, indent int) { diff --git a/src/go/types/util_test.go b/src/go/types/util_test.go index 205237211f..70d376f0bb 100644 --- a/src/go/types/util_test.go +++ b/src/go/types/util_test.go @@ -9,6 +9,11 @@ package types -import "go/token" +import ( + "go/token" +) func CmpPos(p, q token.Pos) int { return cmpPos(p, q) } + +func ScopeComment(s *Scope) string { return s.comment } +func ObjectScopePos(obj Object) token.Pos { return obj.scopePos() } From b4fa5b163df118b35a836bbe5706ac268b4cc14b Mon Sep 17 00:00:00 2001 From: Jes Cok Date: Wed, 29 Nov 2023 16:23:18 +0000 Subject: [PATCH 125/313] debug/elf: return error in DynValue for invalid dynamic section size This is a follow-up to CL 536400. Fixes #64446 Change-Id: I35646732f62cb1937fd448f94ea518544d4295d4 GitHub-Last-Rev: 55db18a909fd44e6b2f2b98fd1a44ad01bb37932 GitHub-Pull-Request: golang/go#64448 Reviewed-on: https://go-review.googlesource.com/c/go/+/545835 LUCI-TryBot-Result: Go LUCI Run-TryBot: Jes Cok Reviewed-by: Dmitri Shuralyov Reviewed-by: Than McIntosh TryBot-Result: Gopher Robot --- src/debug/elf/file.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/debug/elf/file.go b/src/debug/elf/file.go index fcbe76b195..7228447c21 100644 --- a/src/debug/elf/file.go +++ b/src/debug/elf/file.go @@ -1656,6 +1656,14 @@ func (f *File) DynValue(tag DynTag) ([]uint64, error) { return nil, err } + dynSize := 8 + if f.Class == ELFCLASS64 { + dynSize = 16 + } + if len(d)%dynSize != 0 { + return nil, errors.New("length of dynamic section is not a multiple of dynamic entry size") + } + // Parse the .dynamic section as a string of bytes. var vals []uint64 for len(d) > 0 { From 76d90a34dd39b3e218e4c201d4497dca09c1cd6f Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Wed, 29 Nov 2023 16:13:07 -0500 Subject: [PATCH 126/313] testing: remove tests from the running log while they are waiting on parallel subtests The parallel subtests are themselves removed from the running map while they are blocked on calls to t.Parallel, so it is misleading to log their parents as if they are running when we know they cannot be making any kind of meaningful progress. Fixes #64404. Change-Id: Iaad11d5d4f4c86d775d36e5285c49629dccddd74 Reviewed-on: https://go-review.googlesource.com/c/go/+/546018 Run-TryBot: Bryan Mills TryBot-Result: Gopher Robot Auto-Submit: Bryan Mills Reviewed-by: Alan Donovan --- src/testing/testing.go | 17 ++++- src/testing/testing_test.go | 144 ++++++++++++++++++++++++++++++++++++ 2 files changed, 160 insertions(+), 1 deletion(-) diff --git a/src/testing/testing.go b/src/testing/testing.go index ed8b3630f1..5c06aea5f8 100644 --- a/src/testing/testing.go +++ b/src/testing/testing.go @@ -1638,15 +1638,22 @@ func tRunner(t *T, fn func(t *T)) { if len(t.sub) > 0 { // Run parallel subtests. - // Decrease the running count for this test. + + // Decrease the running count for this test and mark it as no longer running. t.context.release() + running.Delete(t.name) + // Release the parallel subtests. close(t.barrier) // Wait for subtests to complete. for _, sub := range t.sub { <-sub.signal } + + // Run any cleanup callbacks, marking the test as running + // in case the cleanup hangs. cleanupStart := time.Now() + running.Store(t.name, cleanupStart) err := t.runCleanup(recoverAndReturnPanic) t.duration += time.Since(cleanupStart) if err != nil { @@ -1733,11 +1740,19 @@ func (t *T) Run(name string, f func(t *T)) bool { // without being preempted, even when their parent is a parallel test. This // may especially reduce surprises if *parallel == 1. go tRunner(t, f) + + // The parent goroutine will block until the subtest either finishes or calls + // Parallel, but in general we don't know whether the parent goroutine is the + // top-level test function or some other goroutine it has spawned. + // To avoid confusing false-negatives, we leave the parent in the running map + // even though in the typical case it is blocked. + if !<-t.signal { // At this point, it is likely that FailNow was called on one of the // parent tests by one of the subtests. Continue aborting up the chain. runtime.Goexit() } + if t.chatty != nil && t.chatty.json { t.chatty.Updatef(t.parent.name, "=== NAME %s\n", t.parent.name) } diff --git a/src/testing/testing_test.go b/src/testing/testing_test.go index 91c6ccf21d..166ebb7ab3 100644 --- a/src/testing/testing_test.go +++ b/src/testing/testing_test.go @@ -6,13 +6,18 @@ package testing_test import ( "bytes" + "fmt" "internal/race" "internal/testenv" "os" + "os/exec" "path/filepath" "regexp" + "slices" + "strings" "sync" "testing" + "time" ) // This is exactly what a test would do without a TestMain. @@ -636,3 +641,142 @@ func BenchmarkSubRacy(b *testing.B) { doRace() // should be reported separately } + +func TestRunningTests(t *testing.T) { + t.Parallel() + + // Regression test for https://go.dev/issue/64404: + // on timeout, the "running tests" message should not include + // tests that are waiting on parked subtests. + + if os.Getenv("GO_WANT_HELPER_PROCESS") == "1" { + for i := 0; i < 2; i++ { + t.Run(fmt.Sprintf("outer%d", i), func(t *testing.T) { + t.Parallel() + for j := 0; j < 2; j++ { + t.Run(fmt.Sprintf("inner%d", j), func(t *testing.T) { + t.Parallel() + for { + time.Sleep(1 * time.Millisecond) + } + }) + } + }) + } + } + + timeout := 10 * time.Millisecond + for { + cmd := testenv.Command(t, os.Args[0], "-test.run=^"+t.Name()+"$", "-test.timeout="+timeout.String(), "-test.parallel=4") + cmd.Env = append(cmd.Environ(), "GO_WANT_HELPER_PROCESS=1") + out, err := cmd.CombinedOutput() + t.Logf("%v:\n%s", cmd, out) + if _, ok := err.(*exec.ExitError); !ok { + t.Fatal(err) + } + + // Because the outer subtests (and TestRunningTests itself) are marked as + // parallel, their test functions return (and are no longer “running”) + // before the inner subtests are released to run and hang. + // Only those inner subtests should be reported as running. + want := []string{ + "TestRunningTests/outer0/inner0", + "TestRunningTests/outer0/inner1", + "TestRunningTests/outer1/inner0", + "TestRunningTests/outer1/inner1", + } + + got, ok := parseRunningTests(out) + if slices.Equal(got, want) { + break + } + if ok { + t.Logf("found running tests:\n%s\nwant:\n%s", strings.Join(got, "\n"), strings.Join(want, "\n")) + } else { + t.Logf("no running tests found") + } + t.Logf("retrying with longer timeout") + timeout *= 2 + } +} + +func TestRunningTestsInCleanup(t *testing.T) { + t.Parallel() + + if os.Getenv("GO_WANT_HELPER_PROCESS") == "1" { + for i := 0; i < 2; i++ { + t.Run(fmt.Sprintf("outer%d", i), func(t *testing.T) { + // Not parallel: we expect to see only one outer test, + // stuck in cleanup after its subtest finishes. + + t.Cleanup(func() { + for { + time.Sleep(1 * time.Millisecond) + } + }) + + for j := 0; j < 2; j++ { + t.Run(fmt.Sprintf("inner%d", j), func(t *testing.T) { + t.Parallel() + }) + } + }) + } + } + + timeout := 10 * time.Millisecond + for { + cmd := testenv.Command(t, os.Args[0], "-test.run=^"+t.Name()+"$", "-test.timeout="+timeout.String()) + cmd.Env = append(cmd.Environ(), "GO_WANT_HELPER_PROCESS=1") + out, err := cmd.CombinedOutput() + t.Logf("%v:\n%s", cmd, out) + if _, ok := err.(*exec.ExitError); !ok { + t.Fatal(err) + } + + // TestRunningTestsInCleanup is blocked in the call to t.Run, + // but its test function has not yet returned so it should still + // be considered to be running. + // outer1 hasn't even started yet, so only outer0 and the top-level + // test function should be reported as running. + want := []string{ + "TestRunningTestsInCleanup", + "TestRunningTestsInCleanup/outer0", + } + + got, ok := parseRunningTests(out) + if slices.Equal(got, want) { + break + } + if ok { + t.Logf("found running tests:\n%s\nwant:\n%s", strings.Join(got, "\n"), strings.Join(want, "\n")) + } else { + t.Logf("no running tests found") + } + t.Logf("retrying with longer timeout") + timeout *= 2 + } +} + +func parseRunningTests(out []byte) (runningTests []string, ok bool) { + inRunningTests := false + for _, line := range strings.Split(string(out), "\n") { + if inRunningTests { + if trimmed, ok := strings.CutPrefix(line, "\t"); ok { + if name, _, ok := strings.Cut(trimmed, " "); ok { + runningTests = append(runningTests, name) + continue + } + } + + // This line is not the name of a running test. + return runningTests, true + } + + if strings.TrimSpace(line) == "running tests:" { + inRunningTests = true + } + } + + return nil, false +} From bda1ef13f8f9954d20b712ece649776c272f8526 Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Thu, 30 Nov 2023 10:04:16 -0800 Subject: [PATCH 127/313] cmd/compile: fix memcombine pass for big endian, > 1 byte elements The shift amounts were wrong in this case, leading to miscompilation of load combining. Also the store combining was not triggering when it should. Fixes #64468 Change-Id: Iaeb08972c5fc1d6f628800334789c6af7216e87b Reviewed-on: https://go-review.googlesource.com/c/go/+/546355 Reviewed-by: David Chase Reviewed-by: Mauri de Souza Meneguzzo Reviewed-by: Keith Randall LUCI-TryBot-Result: Go LUCI --- src/cmd/compile/internal/ssa/memcombine.go | 12 +- .../compile/internal/test/memcombine_test.go | 126 ++++++++++++++++++ test/codegen/memcombine.go | 37 +++++ 3 files changed, 169 insertions(+), 6 deletions(-) diff --git a/src/cmd/compile/internal/ssa/memcombine.go b/src/cmd/compile/internal/ssa/memcombine.go index 848b1e57a7..b1a47510be 100644 --- a/src/cmd/compile/internal/ssa/memcombine.go +++ b/src/cmd/compile/internal/ssa/memcombine.go @@ -313,8 +313,8 @@ func combineLoads(root *Value, n int64) bool { if isLittleEndian && shift0 != 0 { v = leftShift(loadBlock, pos, v, shift0) } - if isBigEndian && shift0-(n-1)*8 != 0 { - v = leftShift(loadBlock, pos, v, shift0-(n-1)*8) + if isBigEndian && shift0-(n-1)*size*8 != 0 { + v = leftShift(loadBlock, pos, v, shift0-(n-1)*size*8) } // Install with (Copy v). @@ -662,14 +662,14 @@ func combineStores(root *Value, n int64) bool { isLittleEndian := true shift0 := shift(a[0].store, shiftBase) for i := int64(1); i < n; i++ { - if shift(a[i].store, shiftBase) != shift0+i*8 { + if shift(a[i].store, shiftBase) != shift0+i*size*8 { isLittleEndian = false break } } isBigEndian := true for i := int64(1); i < n; i++ { - if shift(a[i].store, shiftBase) != shift0-i*8 { + if shift(a[i].store, shiftBase) != shift0-i*size*8 { isBigEndian = false break } @@ -692,8 +692,8 @@ func combineStores(root *Value, n int64) bool { if isLittleEndian && shift0 != 0 { sv = rightShift(root.Block, root.Pos, sv, shift0) } - if isBigEndian && shift0-(n-1)*8 != 0 { - sv = rightShift(root.Block, root.Pos, sv, shift0-(n-1)*8) + if isBigEndian && shift0-(n-1)*size*8 != 0 { + sv = rightShift(root.Block, root.Pos, sv, shift0-(n-1)*size*8) } if sv.Type.Size() > size*n { sv = truncate(root.Block, root.Pos, sv, sv.Type.Size(), size*n) diff --git a/src/cmd/compile/internal/test/memcombine_test.go b/src/cmd/compile/internal/test/memcombine_test.go index c7e7a208dd..3fc4a004a3 100644 --- a/src/cmd/compile/internal/test/memcombine_test.go +++ b/src/cmd/compile/internal/test/memcombine_test.go @@ -71,3 +71,129 @@ func readUint32be(b []byte) uint64 { //go:noinline func nop() { } + +type T32 struct { + a, b uint32 +} + +//go:noinline +func (t *T32) bigEndianLoad() uint64 { + return uint64(t.a)<<32 | uint64(t.b) +} + +//go:noinline +func (t *T32) littleEndianLoad() uint64 { + return uint64(t.a) | (uint64(t.b) << 32) +} + +//go:noinline +func (t *T32) bigEndianStore(x uint64) { + t.a = uint32(x >> 32) + t.b = uint32(x) +} + +//go:noinline +func (t *T32) littleEndianStore(x uint64) { + t.a = uint32(x) + t.b = uint32(x >> 32) +} + +type T16 struct { + a, b uint16 +} + +//go:noinline +func (t *T16) bigEndianLoad() uint32 { + return uint32(t.a)<<16 | uint32(t.b) +} + +//go:noinline +func (t *T16) littleEndianLoad() uint32 { + return uint32(t.a) | (uint32(t.b) << 16) +} + +//go:noinline +func (t *T16) bigEndianStore(x uint32) { + t.a = uint16(x >> 16) + t.b = uint16(x) +} + +//go:noinline +func (t *T16) littleEndianStore(x uint32) { + t.a = uint16(x) + t.b = uint16(x >> 16) +} + +type T8 struct { + a, b uint8 +} + +//go:noinline +func (t *T8) bigEndianLoad() uint16 { + return uint16(t.a)<<8 | uint16(t.b) +} + +//go:noinline +func (t *T8) littleEndianLoad() uint16 { + return uint16(t.a) | (uint16(t.b) << 8) +} + +//go:noinline +func (t *T8) bigEndianStore(x uint16) { + t.a = uint8(x >> 8) + t.b = uint8(x) +} + +//go:noinline +func (t *T8) littleEndianStore(x uint16) { + t.a = uint8(x) + t.b = uint8(x >> 8) +} + +func TestIssue64468(t *testing.T) { + t32 := T32{1, 2} + if got, want := t32.bigEndianLoad(), uint64(1<<32+2); got != want { + t.Errorf("T32.bigEndianLoad got %x want %x\n", got, want) + } + if got, want := t32.littleEndianLoad(), uint64(1+2<<32); got != want { + t.Errorf("T32.littleEndianLoad got %x want %x\n", got, want) + } + t16 := T16{1, 2} + if got, want := t16.bigEndianLoad(), uint32(1<<16+2); got != want { + t.Errorf("T16.bigEndianLoad got %x want %x\n", got, want) + } + if got, want := t16.littleEndianLoad(), uint32(1+2<<16); got != want { + t.Errorf("T16.littleEndianLoad got %x want %x\n", got, want) + } + t8 := T8{1, 2} + if got, want := t8.bigEndianLoad(), uint16(1<<8+2); got != want { + t.Errorf("T8.bigEndianLoad got %x want %x\n", got, want) + } + if got, want := t8.littleEndianLoad(), uint16(1+2<<8); got != want { + t.Errorf("T8.littleEndianLoad got %x want %x\n", got, want) + } + t32.bigEndianStore(1<<32 + 2) + if got, want := t32, (T32{1, 2}); got != want { + t.Errorf("T32.bigEndianStore got %x want %x\n", got, want) + } + t32.littleEndianStore(1<<32 + 2) + if got, want := t32, (T32{2, 1}); got != want { + t.Errorf("T32.littleEndianStore got %x want %x\n", got, want) + } + t16.bigEndianStore(1<<16 + 2) + if got, want := t16, (T16{1, 2}); got != want { + t.Errorf("T16.bigEndianStore got %x want %x\n", got, want) + } + t16.littleEndianStore(1<<16 + 2) + if got, want := t16, (T16{2, 1}); got != want { + t.Errorf("T16.littleEndianStore got %x want %x\n", got, want) + } + t8.bigEndianStore(1<<8 + 2) + if got, want := t8, (T8{1, 2}); got != want { + t.Errorf("T8.bigEndianStore got %x want %x\n", got, want) + } + t8.littleEndianStore(1<<8 + 2) + if got, want := t8, (T8{2, 1}); got != want { + t.Errorf("T8.littleEndianStore got %x want %x\n", got, want) + } +} diff --git a/test/codegen/memcombine.go b/test/codegen/memcombine.go index 1b8abc348a..db5c81f905 100644 --- a/test/codegen/memcombine.go +++ b/test/codegen/memcombine.go @@ -882,3 +882,40 @@ func wideStore2(p *[8]uint64, x, y uint64) { // s390x:-"STMG",-"MOVD" p[1] = y } + +func store32le(p *struct{ a, b uint32 }, x uint64) { + // amd64:"MOVQ",-"MOVL",-"SHRQ" + // arm64:"MOVD",-"MOVW",-"LSR" + // ppc64le:"MOVD",-"MOVW",-"SRD" + p.a = uint32(x) + // amd64:-"MOVL",-"SHRQ" + // arm64:-"MOVW",-"LSR" + // ppc64le:-"MOVW",-"SRD" + p.b = uint32(x >> 32) +} +func store32be(p *struct{ a, b uint32 }, x uint64) { + // ppc64:"MOVD",-"MOVW",-"SRD" + // s390x:"MOVD",-"MOVW",-"SRD" + p.a = uint32(x >> 32) + // ppc64:-"MOVW",-"SRD" + // s390x:-"MOVW",-"SRD" + p.b = uint32(x) +} +func store16le(p *struct{ a, b uint16 }, x uint32) { + // amd64:"MOVL",-"MOVW",-"SHRL" + // arm64:"MOVW",-"MOVH",-"UBFX" + // ppc64le:"MOVW",-"MOVH",-"SRW" + p.a = uint16(x) + // amd64:-"MOVW",-"SHRL" + // arm64:-"MOVH",-"UBFX" + // ppc64le:-"MOVH",-"SRW" + p.b = uint16(x >> 16) +} +func store16be(p *struct{ a, b uint16 }, x uint32) { + // ppc64:"MOVW",-"MOVH",-"SRW" + // s390x:"MOVW",-"MOVH",-"SRW" + p.a = uint16(x >> 16) + // ppc64:-"MOVH",-"SRW" + // s390x:-"MOVH",-"SRW" + p.b = uint16(x) +} From 446a5dcf5a3230ce9832682d8f521071d8a34a2b Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Thu, 5 Oct 2023 12:20:11 -0700 Subject: [PATCH 128/313] bytes: add a boundary test for Count of 1 byte This bottoms out in internal/bytealg.Count, which does a fair amount of avx shenanigans. Make sure we're not reading out of bounds. Change-Id: Ied0e461f536f75acc24c6797f7fc74e3f3901c10 Reviewed-on: https://go-review.googlesource.com/c/go/+/533116 Reviewed-by: Matthew Dempsky Reviewed-by: Jorropo Reviewed-by: Achille Roussel LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall --- src/bytes/boundary_test.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/bytes/boundary_test.go b/src/bytes/boundary_test.go index f9855fcb05..67f377e089 100644 --- a/src/bytes/boundary_test.go +++ b/src/bytes/boundary_test.go @@ -98,3 +98,18 @@ func TestIndexNearPageBoundary(t *testing.T) { } q[len(q)-1] = 0 } + +func TestCountNearPageBoundary(t *testing.T) { + t.Parallel() + b := dangerousSlice(t) + for i := range b { + c := Count(b[i:], []byte{1}) + if c != 0 { + t.Fatalf("Count(b[%d:], {1})=%d, want 0\n", i, c) + } + c = Count(b[:i], []byte{0}) + if c != i { + t.Fatalf("Count(b[:%d], {0})=%d, want %d\n", i, c, i) + } + } +} From fbfe62bc802d27539a858afd66ae335ff94b1d25 Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Fri, 1 Dec 2023 00:16:24 +0700 Subject: [PATCH 129/313] cmd/compile: fix typecheck range over rune literal With range over int, the rune literal in range expression will be left as untyped rune, but idealType is not handling this case, causing ICE. Fixing this by setting the concrete type for untyped rune expresison. Fixes #64471 Change-Id: I07a151c54ea1d9e1b92e4d96cdfb6e73dca13862 Reviewed-on: https://go-review.googlesource.com/c/go/+/546296 Reviewed-by: Dmitri Shuralyov Auto-Submit: Cuong Manh Le Reviewed-by: Matthew Dempsky LUCI-TryBot-Result: Go LUCI --- src/cmd/compile/internal/noder/helpers.go | 2 ++ test/range3.go | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/src/cmd/compile/internal/noder/helpers.go b/src/cmd/compile/internal/noder/helpers.go index 1f7b497599..f9e3838fd9 100644 --- a/src/cmd/compile/internal/noder/helpers.go +++ b/src/cmd/compile/internal/noder/helpers.go @@ -99,6 +99,8 @@ func idealType(tv syntax.TypeAndValue) types2.Type { typ = types2.Typ[types2.Bool] // expression in "if" or "for" condition case types2.UntypedString: typ = types2.Typ[types2.String] // argument to "append" or "copy" calls + case types2.UntypedRune: + typ = types2.Typ[types2.Int32] // range over rune default: return nil } diff --git a/test/range3.go b/test/range3.go index 4f770a2b70..f58a398f94 100644 --- a/test/range3.go +++ b/test/range3.go @@ -74,9 +74,17 @@ func testint4() { } } +// Issue #64471. +func testint5() { + for i := range 'a' { + var _ *rune = &i // ensure i has type rune + } +} + func main() { testint1() testint2() testint3() testint4() + testint5() } From 2e6387cbec924dbd01007421d7442125037c66b2 Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Thu, 30 Nov 2023 21:02:24 +0000 Subject: [PATCH 130/313] doc: add release notes about bootstrap toolchain version For #61422. Change-Id: Ie0d3c05752d29aa65983add85935d2505560ec55 Reviewed-on: https://go-review.googlesource.com/c/go/+/546029 Auto-Submit: Michael Knyszek LUCI-TryBot-Result: Go LUCI Reviewed-by: Cherry Mui --- doc/go1.22.html | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/doc/go1.22.html b/doc/go1.22.html index 8e9b6ee53c..ccaafa7ff7 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -108,6 +108,14 @@ Do not send CLs removing the interior tags from such phrases. TODO: complete this section, or delete if not needed

+

Bootstrap

+ +

+ As mentioned in the Go 1.20 release notes, Go 1.22 now requires + the final point release of Go 1.20 or later for bootstrap. + We expect that Go 1.24 will require the final point release of Go 1.22 or later for bootstrap. +

+

Core library

New math/rand/v2 package

From 5a2161ce9ec130271ec67566ecb5a842497e8742 Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Thu, 30 Nov 2023 18:13:51 +0000 Subject: [PATCH 131/313] runtime: emit the correct P status from a safepoint in the v2 tracer The GoSyscallBegin event is a signal for both the P and the G to enter a syscall state for the trace parser. (Ps can't have their own event because it's too hard to model. As soon as the P enters _Psyscall it can get stolen out of it.) But there's a window in time between when that event is emitted and when the P enters _Psyscall where the P's status can get emitted. In this window the tracer will emit the wrong status: Running instead of Syscall. Really any call into the tracer could emit a status event for the P, but in this particular case it's when running a safepoint function that explicitly emits an event for the P's status. The fix is straightforward. The source-of-truth on syscall status is the G's status, so the function that emits the P's status just needs to check the status of any G attached to it. If it's in _Gsyscall, then the tracer should emit a Syscall status for the P if it's in _Prunning. Fixes #64318. Change-Id: I3b0fb0d41ff578e62810b04fa5a3ef73e2929b0a Reviewed-on: https://go-review.googlesource.com/c/go/+/546025 LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Pratt --- src/runtime/trace2status.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/runtime/trace2status.go b/src/runtime/trace2status.go index 0f64452c3e..c4a0eced8c 100644 --- a/src/runtime/trace2status.go +++ b/src/runtime/trace2status.go @@ -82,8 +82,17 @@ func (w traceWriter) writeProcStatusForP(pp *p, inSTW bool) traceWriter { // in _Pgcstop, but we model it as running in the tracer. status = traceProcRunning } - case _Prunning, _Psyscall: + case _Prunning: status = traceProcRunning + // There's a short window wherein the goroutine may have entered _Gsyscall + // but it still owns the P (it's not in _Psyscall yet). The goroutine entering + // _Gsyscall is the tracer's signal that the P its bound to is also in a syscall, + // so we need to emit a status that matches. See #64318. + if w.mp.p.ptr() == pp && readgstatus(w.mp.curg)&^_Gscan == _Gsyscall { + status = traceProcSyscall + } + case _Psyscall: + status = traceProcSyscall default: throw("attempt to trace invalid or unsupported P status") } From 70c7fb75e9768630ca23ff5cbf79c9b597bc068e Mon Sep 17 00:00:00 2001 From: Joel Sing Date: Sun, 26 Nov 2023 02:48:05 +1100 Subject: [PATCH 132/313] cmd/compile: correct code generation for right shifts on riscv64 The code generation on riscv64 will currently result in incorrect assembly when a 32 bit integer is right shifted by an amount that exceeds the size of the type. In particular, this occurs when an int32 or uint32 is cast to a 64 bit type and right shifted by a value larger than 31. Fix this by moving the SRAW/SRLW conversion into the right shift rules and removing the SignExt32to64/ZeroExt32to64. Add additional rules that rewrite to SRAIW/SRLIW when the shift is less than the size of the type, or replace/eliminate the shift when it exceeds the size of the type. Add SSA tests that would have caught this issue. Also add additional codegen tests to ensure that the resulting assembly is what we expect in these overflow cases. Fixes #64285 Change-Id: Ie97b05668597cfcb91413afefaab18ee1aa145ec Reviewed-on: https://go-review.googlesource.com/c/go/+/545035 Reviewed-by: Russ Cox Reviewed-by: Cherry Mui Reviewed-by: M Zhuo Reviewed-by: Mark Ryan Run-TryBot: Joel Sing TryBot-Result: Gopher Robot --- .../compile/internal/ssa/_gen/RISCV64.rules | 96 ++-- .../compile/internal/ssa/rewriteRISCV64.go | 409 ++++++++++-------- .../internal/test/testdata/arith_test.go | 66 +++ test/codegen/shift.go | 30 ++ 4 files changed, 381 insertions(+), 220 deletions(-) diff --git a/src/cmd/compile/internal/ssa/_gen/RISCV64.rules b/src/cmd/compile/internal/ssa/_gen/RISCV64.rules index 9afe5995ae..fc206c42d3 100644 --- a/src/cmd/compile/internal/ssa/_gen/RISCV64.rules +++ b/src/cmd/compile/internal/ssa/_gen/RISCV64.rules @@ -153,27 +153,27 @@ // SRL only considers the bottom 6 bits of y, similarly SRLW only considers the // bottom 5 bits of y. Ensure that the result is always zero if the shift exceeds // the maximum value. See Lsh above for a detailed description. -(Rsh8Ux8 x y) && !shiftIsBounded(v) => (AND (SRL (ZeroExt8to64 x) y) (Neg8 (SLTIU [64] (ZeroExt8to64 y)))) -(Rsh8Ux16 x y) && !shiftIsBounded(v) => (AND (SRL (ZeroExt8to64 x) y) (Neg8 (SLTIU [64] (ZeroExt16to64 y)))) -(Rsh8Ux32 x y) && !shiftIsBounded(v) => (AND (SRL (ZeroExt8to64 x) y) (Neg8 (SLTIU [64] (ZeroExt32to64 y)))) -(Rsh8Ux64 x y) && !shiftIsBounded(v) => (AND (SRL (ZeroExt8to64 x) y) (Neg8 (SLTIU [64] y))) -(Rsh16Ux8 x y) && !shiftIsBounded(v) => (AND (SRL (ZeroExt16to64 x) y) (Neg16 (SLTIU [64] (ZeroExt8to64 y)))) -(Rsh16Ux16 x y) && !shiftIsBounded(v) => (AND (SRL (ZeroExt16to64 x) y) (Neg16 (SLTIU [64] (ZeroExt16to64 y)))) -(Rsh16Ux32 x y) && !shiftIsBounded(v) => (AND (SRL (ZeroExt16to64 x) y) (Neg16 (SLTIU [64] (ZeroExt32to64 y)))) -(Rsh16Ux64 x y) && !shiftIsBounded(v) => (AND (SRL (ZeroExt16to64 x) y) (Neg16 (SLTIU [64] y))) -(Rsh32Ux8 x y) && !shiftIsBounded(v) => (AND (SRL (ZeroExt32to64 x) y) (Neg32 (SLTIU [32] (ZeroExt8to64 y)))) -(Rsh32Ux16 x y) && !shiftIsBounded(v) => (AND (SRL (ZeroExt32to64 x) y) (Neg32 (SLTIU [32] (ZeroExt16to64 y)))) -(Rsh32Ux32 x y) && !shiftIsBounded(v) => (AND (SRL (ZeroExt32to64 x) y) (Neg32 (SLTIU [32] (ZeroExt32to64 y)))) -(Rsh32Ux64 x y) && !shiftIsBounded(v) => (AND (SRL (ZeroExt32to64 x) y) (Neg32 (SLTIU [32] y))) -(Rsh64Ux8 x y) && !shiftIsBounded(v) => (AND (SRL x y) (Neg64 (SLTIU [64] (ZeroExt8to64 y)))) -(Rsh64Ux16 x y) && !shiftIsBounded(v) => (AND (SRL x y) (Neg64 (SLTIU [64] (ZeroExt16to64 y)))) -(Rsh64Ux32 x y) && !shiftIsBounded(v) => (AND (SRL x y) (Neg64 (SLTIU [64] (ZeroExt32to64 y)))) -(Rsh64Ux64 x y) && !shiftIsBounded(v) => (AND (SRL x y) (Neg64 (SLTIU [64] y))) +(Rsh8Ux8 x y) && !shiftIsBounded(v) => (AND (SRL (ZeroExt8to64 x) y) (Neg8 (SLTIU [64] (ZeroExt8to64 y)))) +(Rsh8Ux16 x y) && !shiftIsBounded(v) => (AND (SRL (ZeroExt8to64 x) y) (Neg8 (SLTIU [64] (ZeroExt16to64 y)))) +(Rsh8Ux32 x y) && !shiftIsBounded(v) => (AND (SRL (ZeroExt8to64 x) y) (Neg8 (SLTIU [64] (ZeroExt32to64 y)))) +(Rsh8Ux64 x y) && !shiftIsBounded(v) => (AND (SRL (ZeroExt8to64 x) y) (Neg8 (SLTIU [64] y))) +(Rsh16Ux8 x y) && !shiftIsBounded(v) => (AND (SRL (ZeroExt16to64 x) y) (Neg16 (SLTIU [64] (ZeroExt8to64 y)))) +(Rsh16Ux16 x y) && !shiftIsBounded(v) => (AND (SRL (ZeroExt16to64 x) y) (Neg16 (SLTIU [64] (ZeroExt16to64 y)))) +(Rsh16Ux32 x y) && !shiftIsBounded(v) => (AND (SRL (ZeroExt16to64 x) y) (Neg16 (SLTIU [64] (ZeroExt32to64 y)))) +(Rsh16Ux64 x y) && !shiftIsBounded(v) => (AND (SRL (ZeroExt16to64 x) y) (Neg16 (SLTIU [64] y))) +(Rsh32Ux8 x y) && !shiftIsBounded(v) => (AND (SRLW x y) (Neg32 (SLTIU [32] (ZeroExt8to64 y)))) +(Rsh32Ux16 x y) && !shiftIsBounded(v) => (AND (SRLW x y) (Neg32 (SLTIU [32] (ZeroExt16to64 y)))) +(Rsh32Ux32 x y) && !shiftIsBounded(v) => (AND (SRLW x y) (Neg32 (SLTIU [32] (ZeroExt32to64 y)))) +(Rsh32Ux64 x y) && !shiftIsBounded(v) => (AND (SRLW x y) (Neg32 (SLTIU [32] y))) +(Rsh64Ux8 x y) && !shiftIsBounded(v) => (AND (SRL x y) (Neg64 (SLTIU [64] (ZeroExt8to64 y)))) +(Rsh64Ux16 x y) && !shiftIsBounded(v) => (AND (SRL x y) (Neg64 (SLTIU [64] (ZeroExt16to64 y)))) +(Rsh64Ux32 x y) && !shiftIsBounded(v) => (AND (SRL x y) (Neg64 (SLTIU [64] (ZeroExt32to64 y)))) +(Rsh64Ux64 x y) && !shiftIsBounded(v) => (AND (SRL x y) (Neg64 (SLTIU [64] y))) -(Rsh8Ux(64|32|16|8) x y) && shiftIsBounded(v) => (SRL (ZeroExt8to64 x) y) -(Rsh16Ux(64|32|16|8) x y) && shiftIsBounded(v) => (SRL (ZeroExt16to64 x) y) -(Rsh32Ux(64|32|16|8) x y) && shiftIsBounded(v) => (SRL (ZeroExt32to64 x) y) -(Rsh64Ux(64|32|16|8) x y) && shiftIsBounded(v) => (SRL x y) +(Rsh8Ux(64|32|16|8) x y) && shiftIsBounded(v) => (SRL (ZeroExt8to64 x) y) +(Rsh16Ux(64|32|16|8) x y) && shiftIsBounded(v) => (SRL (ZeroExt16to64 x) y) +(Rsh32Ux(64|32|16|8) x y) && shiftIsBounded(v) => (SRLW x y) +(Rsh64Ux(64|32|16|8) x y) && shiftIsBounded(v) => (SRL x y) // SRA only considers the bottom 6 bits of y, similarly SRAW only considers the // bottom 5 bits. If y is greater than the maximum value (either 63 or 31 @@ -188,27 +188,27 @@ // // We don't need to sign-extend the OR result, as it will be at minimum 8 bits, // more than the 5 or 6 bits SRAW and SRA care about. -(Rsh8x8 x y) && !shiftIsBounded(v) => (SRA (SignExt8to64 x) (OR y (ADDI [-1] (SLTIU [64] (ZeroExt8to64 y))))) -(Rsh8x16 x y) && !shiftIsBounded(v) => (SRA (SignExt8to64 x) (OR y (ADDI [-1] (SLTIU [64] (ZeroExt16to64 y))))) -(Rsh8x32 x y) && !shiftIsBounded(v) => (SRA (SignExt8to64 x) (OR y (ADDI [-1] (SLTIU [64] (ZeroExt32to64 y))))) -(Rsh8x64 x y) && !shiftIsBounded(v) => (SRA (SignExt8to64 x) (OR y (ADDI [-1] (SLTIU [64] y)))) -(Rsh16x8 x y) && !shiftIsBounded(v) => (SRA (SignExt16to64 x) (OR y (ADDI [-1] (SLTIU [64] (ZeroExt8to64 y))))) -(Rsh16x16 x y) && !shiftIsBounded(v) => (SRA (SignExt16to64 x) (OR y (ADDI [-1] (SLTIU [64] (ZeroExt16to64 y))))) -(Rsh16x32 x y) && !shiftIsBounded(v) => (SRA (SignExt16to64 x) (OR y (ADDI [-1] (SLTIU [64] (ZeroExt32to64 y))))) -(Rsh16x64 x y) && !shiftIsBounded(v) => (SRA (SignExt16to64 x) (OR y (ADDI [-1] (SLTIU [64] y)))) -(Rsh32x8 x y) && !shiftIsBounded(v) => (SRA (SignExt32to64 x) (OR y (ADDI [-1] (SLTIU [32] (ZeroExt8to64 y))))) -(Rsh32x16 x y) && !shiftIsBounded(v) => (SRA (SignExt32to64 x) (OR y (ADDI [-1] (SLTIU [32] (ZeroExt16to64 y))))) -(Rsh32x32 x y) && !shiftIsBounded(v) => (SRA (SignExt32to64 x) (OR y (ADDI [-1] (SLTIU [32] (ZeroExt32to64 y))))) -(Rsh32x64 x y) && !shiftIsBounded(v) => (SRA (SignExt32to64 x) (OR y (ADDI [-1] (SLTIU [32] y)))) -(Rsh64x8 x y) && !shiftIsBounded(v) => (SRA x (OR y (ADDI [-1] (SLTIU [64] (ZeroExt8to64 y))))) -(Rsh64x16 x y) && !shiftIsBounded(v) => (SRA x (OR y (ADDI [-1] (SLTIU [64] (ZeroExt16to64 y))))) -(Rsh64x32 x y) && !shiftIsBounded(v) => (SRA x (OR y (ADDI [-1] (SLTIU [64] (ZeroExt32to64 y))))) -(Rsh64x64 x y) && !shiftIsBounded(v) => (SRA x (OR y (ADDI [-1] (SLTIU [64] y)))) +(Rsh8x8 x y) && !shiftIsBounded(v) => (SRA (SignExt8to64 x) (OR y (ADDI [-1] (SLTIU [64] (ZeroExt8to64 y))))) +(Rsh8x16 x y) && !shiftIsBounded(v) => (SRA (SignExt8to64 x) (OR y (ADDI [-1] (SLTIU [64] (ZeroExt16to64 y))))) +(Rsh8x32 x y) && !shiftIsBounded(v) => (SRA (SignExt8to64 x) (OR y (ADDI [-1] (SLTIU [64] (ZeroExt32to64 y))))) +(Rsh8x64 x y) && !shiftIsBounded(v) => (SRA (SignExt8to64 x) (OR y (ADDI [-1] (SLTIU [64] y)))) +(Rsh16x8 x y) && !shiftIsBounded(v) => (SRA (SignExt16to64 x) (OR y (ADDI [-1] (SLTIU [64] (ZeroExt8to64 y))))) +(Rsh16x16 x y) && !shiftIsBounded(v) => (SRA (SignExt16to64 x) (OR y (ADDI [-1] (SLTIU [64] (ZeroExt16to64 y))))) +(Rsh16x32 x y) && !shiftIsBounded(v) => (SRA (SignExt16to64 x) (OR y (ADDI [-1] (SLTIU [64] (ZeroExt32to64 y))))) +(Rsh16x64 x y) && !shiftIsBounded(v) => (SRA (SignExt16to64 x) (OR y (ADDI [-1] (SLTIU [64] y)))) +(Rsh32x8 x y) && !shiftIsBounded(v) => (SRAW x (OR y (ADDI [-1] (SLTIU [32] (ZeroExt8to64 y))))) +(Rsh32x16 x y) && !shiftIsBounded(v) => (SRAW x (OR y (ADDI [-1] (SLTIU [32] (ZeroExt16to64 y))))) +(Rsh32x32 x y) && !shiftIsBounded(v) => (SRAW x (OR y (ADDI [-1] (SLTIU [32] (ZeroExt32to64 y))))) +(Rsh32x64 x y) && !shiftIsBounded(v) => (SRAW x (OR y (ADDI [-1] (SLTIU [32] y)))) +(Rsh64x8 x y) && !shiftIsBounded(v) => (SRA x (OR y (ADDI [-1] (SLTIU [64] (ZeroExt8to64 y))))) +(Rsh64x16 x y) && !shiftIsBounded(v) => (SRA x (OR y (ADDI [-1] (SLTIU [64] (ZeroExt16to64 y))))) +(Rsh64x32 x y) && !shiftIsBounded(v) => (SRA x (OR y (ADDI [-1] (SLTIU [64] (ZeroExt32to64 y))))) +(Rsh64x64 x y) && !shiftIsBounded(v) => (SRA x (OR y (ADDI [-1] (SLTIU [64] y)))) -(Rsh8x(64|32|16|8) x y) && shiftIsBounded(v) => (SRA (SignExt8to64 x) y) -(Rsh16x(64|32|16|8) x y) && shiftIsBounded(v) => (SRA (SignExt16to64 x) y) -(Rsh32x(64|32|16|8) x y) && shiftIsBounded(v) => (SRA (SignExt32to64 x) y) -(Rsh64x(64|32|16|8) x y) && shiftIsBounded(v) => (SRA x y) +(Rsh8x(64|32|16|8) x y) && shiftIsBounded(v) => (SRA (SignExt8to64 x) y) +(Rsh16x(64|32|16|8) x y) && shiftIsBounded(v) => (SRA (SignExt16to64 x) y) +(Rsh32x(64|32|16|8) x y) && shiftIsBounded(v) => (SRAW x y) +(Rsh64x(64|32|16|8) x y) && shiftIsBounded(v) => (SRA x y) // Rotates. (RotateLeft8 x (MOVDconst [c])) => (Or8 (Lsh8x64 x (MOVDconst [c&7])) (Rsh8Ux64 x (MOVDconst [-c&7]))) @@ -710,10 +710,18 @@ (MOVDnop (MOVDconst [c])) => (MOVDconst [c]) // Avoid unnecessary zero and sign extension when right shifting. -(SRL (MOVWUreg x) y) => (SRLW x y) -(SRLI [x] (MOVWUreg y)) => (SRLIW [int64(x&31)] y) -(SRA (MOVWreg x) y) => (SRAW x y) -(SRAI [x] (MOVWreg y)) => (SRAIW [int64(x&31)] y) +(SRAI [x] (MOVWreg y)) && x >= 0 && x <= 31 => (SRAIW [int64(x)] y) +(SRLI [x] (MOVWUreg y)) && x >= 0 && x <= 31 => (SRLIW [int64(x)] y) + +// Replace right shifts that exceed size of signed type. +(SRAI [x] (MOVBreg y)) && x >= 8 => (SRAI [63] (SLLI [56] y)) +(SRAI [x] (MOVHreg y)) && x >= 16 => (SRAI [63] (SLLI [48] y)) +(SRAI [x] (MOVWreg y)) && x >= 32 => (SRAIW [31] y) + +// Eliminate right shifts that exceed size of unsigned type. +(SRLI [x] (MOVBUreg y)) && x >= 8 => (MOVDconst [0]) +(SRLI [x] (MOVHUreg y)) && x >= 16 => (MOVDconst [0]) +(SRLI [x] (MOVWUreg y)) && x >= 32 => (MOVDconst [0]) // Fold constant into immediate instructions where possible. (ADD (MOVDconst [val]) x) && is32Bit(val) && !t.IsPtr() => (ADDI [val] x) diff --git a/src/cmd/compile/internal/ssa/rewriteRISCV64.go b/src/cmd/compile/internal/ssa/rewriteRISCV64.go index 6009c41f2d..52ddca1c7d 100644 --- a/src/cmd/compile/internal/ssa/rewriteRISCV64.go +++ b/src/cmd/compile/internal/ssa/rewriteRISCV64.go @@ -6260,20 +6260,6 @@ func rewriteValueRISCV64_OpRISCV64SNEZ(v *Value) bool { func rewriteValueRISCV64_OpRISCV64SRA(v *Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] - // match: (SRA (MOVWreg x) y) - // result: (SRAW x y) - for { - t := v.Type - if v_0.Op != OpRISCV64MOVWreg { - break - } - x := v_0.Args[0] - y := v_1 - v.reset(OpRISCV64SRAW) - v.Type = t - v.AddArg2(x, y) - return true - } // match: (SRA x (MOVDconst [val])) // result: (SRAI [int64(val&63)] x) for { @@ -6291,8 +6277,10 @@ func rewriteValueRISCV64_OpRISCV64SRA(v *Value) bool { } func rewriteValueRISCV64_OpRISCV64SRAI(v *Value) bool { v_0 := v.Args[0] + b := v.Block // match: (SRAI [x] (MOVWreg y)) - // result: (SRAIW [int64(x&31)] y) + // cond: x >= 0 && x <= 31 + // result: (SRAIW [int64(x)] y) for { t := v.Type x := auxIntToInt64(v.AuxInt) @@ -6300,9 +6288,71 @@ func rewriteValueRISCV64_OpRISCV64SRAI(v *Value) bool { break } y := v_0.Args[0] + if !(x >= 0 && x <= 31) { + break + } v.reset(OpRISCV64SRAIW) v.Type = t - v.AuxInt = int64ToAuxInt(int64(x & 31)) + v.AuxInt = int64ToAuxInt(int64(x)) + v.AddArg(y) + return true + } + // match: (SRAI [x] (MOVBreg y)) + // cond: x >= 8 + // result: (SRAI [63] (SLLI [56] y)) + for { + t := v.Type + x := auxIntToInt64(v.AuxInt) + if v_0.Op != OpRISCV64MOVBreg { + break + } + y := v_0.Args[0] + if !(x >= 8) { + break + } + v.reset(OpRISCV64SRAI) + v.AuxInt = int64ToAuxInt(63) + v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, t) + v0.AuxInt = int64ToAuxInt(56) + v0.AddArg(y) + v.AddArg(v0) + return true + } + // match: (SRAI [x] (MOVHreg y)) + // cond: x >= 16 + // result: (SRAI [63] (SLLI [48] y)) + for { + t := v.Type + x := auxIntToInt64(v.AuxInt) + if v_0.Op != OpRISCV64MOVHreg { + break + } + y := v_0.Args[0] + if !(x >= 16) { + break + } + v.reset(OpRISCV64SRAI) + v.AuxInt = int64ToAuxInt(63) + v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, t) + v0.AuxInt = int64ToAuxInt(48) + v0.AddArg(y) + v.AddArg(v0) + return true + } + // match: (SRAI [x] (MOVWreg y)) + // cond: x >= 32 + // result: (SRAIW [31] y) + for { + x := auxIntToInt64(v.AuxInt) + if v_0.Op != OpRISCV64MOVWreg { + break + } + y := v_0.Args[0] + if !(x >= 32) { + break + } + v.reset(OpRISCV64SRAIW) + v.AuxInt = int64ToAuxInt(31) v.AddArg(y) return true } @@ -6341,20 +6391,6 @@ func rewriteValueRISCV64_OpRISCV64SRAW(v *Value) bool { func rewriteValueRISCV64_OpRISCV64SRL(v *Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] - // match: (SRL (MOVWUreg x) y) - // result: (SRLW x y) - for { - t := v.Type - if v_0.Op != OpRISCV64MOVWUreg { - break - } - x := v_0.Args[0] - y := v_1 - v.reset(OpRISCV64SRLW) - v.Type = t - v.AddArg2(x, y) - return true - } // match: (SRL x (MOVDconst [val])) // result: (SRLI [int64(val&63)] x) for { @@ -6373,7 +6409,8 @@ func rewriteValueRISCV64_OpRISCV64SRL(v *Value) bool { func rewriteValueRISCV64_OpRISCV64SRLI(v *Value) bool { v_0 := v.Args[0] // match: (SRLI [x] (MOVWUreg y)) - // result: (SRLIW [int64(x&31)] y) + // cond: x >= 0 && x <= 31 + // result: (SRLIW [int64(x)] y) for { t := v.Type x := auxIntToInt64(v.AuxInt) @@ -6381,12 +6418,66 @@ func rewriteValueRISCV64_OpRISCV64SRLI(v *Value) bool { break } y := v_0.Args[0] + if !(x >= 0 && x <= 31) { + break + } v.reset(OpRISCV64SRLIW) v.Type = t - v.AuxInt = int64ToAuxInt(int64(x & 31)) + v.AuxInt = int64ToAuxInt(int64(x)) v.AddArg(y) return true } + // match: (SRLI [x] (MOVBUreg y)) + // cond: x >= 8 + // result: (MOVDconst [0]) + for { + t := v.Type + x := auxIntToInt64(v.AuxInt) + if v_0.Op != OpRISCV64MOVBUreg { + break + } + if !(x >= 8) { + break + } + v.reset(OpRISCV64MOVDconst) + v.Type = t + v.AuxInt = int64ToAuxInt(0) + return true + } + // match: (SRLI [x] (MOVHUreg y)) + // cond: x >= 16 + // result: (MOVDconst [0]) + for { + t := v.Type + x := auxIntToInt64(v.AuxInt) + if v_0.Op != OpRISCV64MOVHUreg { + break + } + if !(x >= 16) { + break + } + v.reset(OpRISCV64MOVDconst) + v.Type = t + v.AuxInt = int64ToAuxInt(0) + return true + } + // match: (SRLI [x] (MOVWUreg y)) + // cond: x >= 32 + // result: (MOVDconst [0]) + for { + t := v.Type + x := auxIntToInt64(v.AuxInt) + if v_0.Op != OpRISCV64MOVWUreg { + break + } + if !(x >= 32) { + break + } + v.reset(OpRISCV64MOVDconst) + v.Type = t + v.AuxInt = int64ToAuxInt(0) + return true + } // match: (SRLI [x] (MOVDconst [y])) // result: (MOVDconst [int64(uint64(y) >> uint32(x))]) for { @@ -7035,7 +7126,7 @@ func rewriteValueRISCV64_OpRsh32Ux16(v *Value) bool { typ := &b.Func.Config.Types // match: (Rsh32Ux16 x y) // cond: !shiftIsBounded(v) - // result: (AND (SRL (ZeroExt32to64 x) y) (Neg32 (SLTIU [32] (ZeroExt16to64 y)))) + // result: (AND (SRLW x y) (Neg32 (SLTIU [32] (ZeroExt16to64 y)))) for { t := v.Type x := v_0 @@ -7044,33 +7135,29 @@ func rewriteValueRISCV64_OpRsh32Ux16(v *Value) bool { break } v.reset(OpRISCV64AND) - v0 := b.NewValue0(v.Pos, OpRISCV64SRL, t) - v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) - v1.AddArg(x) - v0.AddArg2(v1, y) - v2 := b.NewValue0(v.Pos, OpNeg32, t) - v3 := b.NewValue0(v.Pos, OpRISCV64SLTIU, t) - v3.AuxInt = int64ToAuxInt(32) - v4 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) - v4.AddArg(y) - v3.AddArg(v4) + v0 := b.NewValue0(v.Pos, OpRISCV64SRLW, t) + v0.AddArg2(x, y) + v1 := b.NewValue0(v.Pos, OpNeg32, t) + v2 := b.NewValue0(v.Pos, OpRISCV64SLTIU, t) + v2.AuxInt = int64ToAuxInt(32) + v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) + v3.AddArg(y) v2.AddArg(v3) - v.AddArg2(v0, v2) + v1.AddArg(v2) + v.AddArg2(v0, v1) return true } // match: (Rsh32Ux16 x y) // cond: shiftIsBounded(v) - // result: (SRL (ZeroExt32to64 x) y) + // result: (SRLW x y) for { x := v_0 y := v_1 if !(shiftIsBounded(v)) { break } - v.reset(OpRISCV64SRL) - v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) - v0.AddArg(x) - v.AddArg2(v0, y) + v.reset(OpRISCV64SRLW) + v.AddArg2(x, y) return true } return false @@ -7082,7 +7169,7 @@ func rewriteValueRISCV64_OpRsh32Ux32(v *Value) bool { typ := &b.Func.Config.Types // match: (Rsh32Ux32 x y) // cond: !shiftIsBounded(v) - // result: (AND (SRL (ZeroExt32to64 x) y) (Neg32 (SLTIU [32] (ZeroExt32to64 y)))) + // result: (AND (SRLW x y) (Neg32 (SLTIU [32] (ZeroExt32to64 y)))) for { t := v.Type x := v_0 @@ -7091,33 +7178,29 @@ func rewriteValueRISCV64_OpRsh32Ux32(v *Value) bool { break } v.reset(OpRISCV64AND) - v0 := b.NewValue0(v.Pos, OpRISCV64SRL, t) - v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) - v1.AddArg(x) - v0.AddArg2(v1, y) - v2 := b.NewValue0(v.Pos, OpNeg32, t) - v3 := b.NewValue0(v.Pos, OpRISCV64SLTIU, t) - v3.AuxInt = int64ToAuxInt(32) - v4 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) - v4.AddArg(y) - v3.AddArg(v4) + v0 := b.NewValue0(v.Pos, OpRISCV64SRLW, t) + v0.AddArg2(x, y) + v1 := b.NewValue0(v.Pos, OpNeg32, t) + v2 := b.NewValue0(v.Pos, OpRISCV64SLTIU, t) + v2.AuxInt = int64ToAuxInt(32) + v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) + v3.AddArg(y) v2.AddArg(v3) - v.AddArg2(v0, v2) + v1.AddArg(v2) + v.AddArg2(v0, v1) return true } // match: (Rsh32Ux32 x y) // cond: shiftIsBounded(v) - // result: (SRL (ZeroExt32to64 x) y) + // result: (SRLW x y) for { x := v_0 y := v_1 if !(shiftIsBounded(v)) { break } - v.reset(OpRISCV64SRL) - v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) - v0.AddArg(x) - v.AddArg2(v0, y) + v.reset(OpRISCV64SRLW) + v.AddArg2(x, y) return true } return false @@ -7126,10 +7209,9 @@ func rewriteValueRISCV64_OpRsh32Ux64(v *Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - typ := &b.Func.Config.Types // match: (Rsh32Ux64 x y) // cond: !shiftIsBounded(v) - // result: (AND (SRL (ZeroExt32to64 x) y) (Neg32 (SLTIU [32] y))) + // result: (AND (SRLW x y) (Neg32 (SLTIU [32] y))) for { t := v.Type x := v_0 @@ -7138,31 +7220,27 @@ func rewriteValueRISCV64_OpRsh32Ux64(v *Value) bool { break } v.reset(OpRISCV64AND) - v0 := b.NewValue0(v.Pos, OpRISCV64SRL, t) - v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) - v1.AddArg(x) - v0.AddArg2(v1, y) - v2 := b.NewValue0(v.Pos, OpNeg32, t) - v3 := b.NewValue0(v.Pos, OpRISCV64SLTIU, t) - v3.AuxInt = int64ToAuxInt(32) - v3.AddArg(y) - v2.AddArg(v3) - v.AddArg2(v0, v2) + v0 := b.NewValue0(v.Pos, OpRISCV64SRLW, t) + v0.AddArg2(x, y) + v1 := b.NewValue0(v.Pos, OpNeg32, t) + v2 := b.NewValue0(v.Pos, OpRISCV64SLTIU, t) + v2.AuxInt = int64ToAuxInt(32) + v2.AddArg(y) + v1.AddArg(v2) + v.AddArg2(v0, v1) return true } // match: (Rsh32Ux64 x y) // cond: shiftIsBounded(v) - // result: (SRL (ZeroExt32to64 x) y) + // result: (SRLW x y) for { x := v_0 y := v_1 if !(shiftIsBounded(v)) { break } - v.reset(OpRISCV64SRL) - v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) - v0.AddArg(x) - v.AddArg2(v0, y) + v.reset(OpRISCV64SRLW) + v.AddArg2(x, y) return true } return false @@ -7174,7 +7252,7 @@ func rewriteValueRISCV64_OpRsh32Ux8(v *Value) bool { typ := &b.Func.Config.Types // match: (Rsh32Ux8 x y) // cond: !shiftIsBounded(v) - // result: (AND (SRL (ZeroExt32to64 x) y) (Neg32 (SLTIU [32] (ZeroExt8to64 y)))) + // result: (AND (SRLW x y) (Neg32 (SLTIU [32] (ZeroExt8to64 y)))) for { t := v.Type x := v_0 @@ -7183,33 +7261,29 @@ func rewriteValueRISCV64_OpRsh32Ux8(v *Value) bool { break } v.reset(OpRISCV64AND) - v0 := b.NewValue0(v.Pos, OpRISCV64SRL, t) - v1 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) - v1.AddArg(x) - v0.AddArg2(v1, y) - v2 := b.NewValue0(v.Pos, OpNeg32, t) - v3 := b.NewValue0(v.Pos, OpRISCV64SLTIU, t) - v3.AuxInt = int64ToAuxInt(32) - v4 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) - v4.AddArg(y) - v3.AddArg(v4) + v0 := b.NewValue0(v.Pos, OpRISCV64SRLW, t) + v0.AddArg2(x, y) + v1 := b.NewValue0(v.Pos, OpNeg32, t) + v2 := b.NewValue0(v.Pos, OpRISCV64SLTIU, t) + v2.AuxInt = int64ToAuxInt(32) + v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) + v3.AddArg(y) v2.AddArg(v3) - v.AddArg2(v0, v2) + v1.AddArg(v2) + v.AddArg2(v0, v1) return true } // match: (Rsh32Ux8 x y) // cond: shiftIsBounded(v) - // result: (SRL (ZeroExt32to64 x) y) + // result: (SRLW x y) for { x := v_0 y := v_1 if !(shiftIsBounded(v)) { break } - v.reset(OpRISCV64SRL) - v0 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) - v0.AddArg(x) - v.AddArg2(v0, y) + v.reset(OpRISCV64SRLW) + v.AddArg2(x, y) return true } return false @@ -7221,7 +7295,7 @@ func rewriteValueRISCV64_OpRsh32x16(v *Value) bool { typ := &b.Func.Config.Types // match: (Rsh32x16 x y) // cond: !shiftIsBounded(v) - // result: (SRA (SignExt32to64 x) (OR y (ADDI [-1] (SLTIU [32] (ZeroExt16to64 y))))) + // result: (SRAW x (OR y (ADDI [-1] (SLTIU [32] (ZeroExt16to64 y))))) for { t := v.Type x := v_0 @@ -7229,36 +7303,32 @@ func rewriteValueRISCV64_OpRsh32x16(v *Value) bool { if !(!shiftIsBounded(v)) { break } - v.reset(OpRISCV64SRA) + v.reset(OpRISCV64SRAW) v.Type = t - v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) - v0.AddArg(x) - v1 := b.NewValue0(v.Pos, OpRISCV64OR, y.Type) - v2 := b.NewValue0(v.Pos, OpRISCV64ADDI, y.Type) - v2.AuxInt = int64ToAuxInt(-1) - v3 := b.NewValue0(v.Pos, OpRISCV64SLTIU, y.Type) - v3.AuxInt = int64ToAuxInt(32) - v4 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) - v4.AddArg(y) - v3.AddArg(v4) + v0 := b.NewValue0(v.Pos, OpRISCV64OR, y.Type) + v1 := b.NewValue0(v.Pos, OpRISCV64ADDI, y.Type) + v1.AuxInt = int64ToAuxInt(-1) + v2 := b.NewValue0(v.Pos, OpRISCV64SLTIU, y.Type) + v2.AuxInt = int64ToAuxInt(32) + v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) + v3.AddArg(y) v2.AddArg(v3) - v1.AddArg2(y, v2) - v.AddArg2(v0, v1) + v1.AddArg(v2) + v0.AddArg2(y, v1) + v.AddArg2(x, v0) return true } // match: (Rsh32x16 x y) // cond: shiftIsBounded(v) - // result: (SRA (SignExt32to64 x) y) + // result: (SRAW x y) for { x := v_0 y := v_1 if !(shiftIsBounded(v)) { break } - v.reset(OpRISCV64SRA) - v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) - v0.AddArg(x) - v.AddArg2(v0, y) + v.reset(OpRISCV64SRAW) + v.AddArg2(x, y) return true } return false @@ -7270,7 +7340,7 @@ func rewriteValueRISCV64_OpRsh32x32(v *Value) bool { typ := &b.Func.Config.Types // match: (Rsh32x32 x y) // cond: !shiftIsBounded(v) - // result: (SRA (SignExt32to64 x) (OR y (ADDI [-1] (SLTIU [32] (ZeroExt32to64 y))))) + // result: (SRAW x (OR y (ADDI [-1] (SLTIU [32] (ZeroExt32to64 y))))) for { t := v.Type x := v_0 @@ -7278,36 +7348,32 @@ func rewriteValueRISCV64_OpRsh32x32(v *Value) bool { if !(!shiftIsBounded(v)) { break } - v.reset(OpRISCV64SRA) + v.reset(OpRISCV64SRAW) v.Type = t - v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) - v0.AddArg(x) - v1 := b.NewValue0(v.Pos, OpRISCV64OR, y.Type) - v2 := b.NewValue0(v.Pos, OpRISCV64ADDI, y.Type) - v2.AuxInt = int64ToAuxInt(-1) - v3 := b.NewValue0(v.Pos, OpRISCV64SLTIU, y.Type) - v3.AuxInt = int64ToAuxInt(32) - v4 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) - v4.AddArg(y) - v3.AddArg(v4) + v0 := b.NewValue0(v.Pos, OpRISCV64OR, y.Type) + v1 := b.NewValue0(v.Pos, OpRISCV64ADDI, y.Type) + v1.AuxInt = int64ToAuxInt(-1) + v2 := b.NewValue0(v.Pos, OpRISCV64SLTIU, y.Type) + v2.AuxInt = int64ToAuxInt(32) + v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) + v3.AddArg(y) v2.AddArg(v3) - v1.AddArg2(y, v2) - v.AddArg2(v0, v1) + v1.AddArg(v2) + v0.AddArg2(y, v1) + v.AddArg2(x, v0) return true } // match: (Rsh32x32 x y) // cond: shiftIsBounded(v) - // result: (SRA (SignExt32to64 x) y) + // result: (SRAW x y) for { x := v_0 y := v_1 if !(shiftIsBounded(v)) { break } - v.reset(OpRISCV64SRA) - v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) - v0.AddArg(x) - v.AddArg2(v0, y) + v.reset(OpRISCV64SRAW) + v.AddArg2(x, y) return true } return false @@ -7316,10 +7382,9 @@ func rewriteValueRISCV64_OpRsh32x64(v *Value) bool { v_1 := v.Args[1] v_0 := v.Args[0] b := v.Block - typ := &b.Func.Config.Types // match: (Rsh32x64 x y) // cond: !shiftIsBounded(v) - // result: (SRA (SignExt32to64 x) (OR y (ADDI [-1] (SLTIU [32] y)))) + // result: (SRAW x (OR y (ADDI [-1] (SLTIU [32] y)))) for { t := v.Type x := v_0 @@ -7327,34 +7392,30 @@ func rewriteValueRISCV64_OpRsh32x64(v *Value) bool { if !(!shiftIsBounded(v)) { break } - v.reset(OpRISCV64SRA) + v.reset(OpRISCV64SRAW) v.Type = t - v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) - v0.AddArg(x) - v1 := b.NewValue0(v.Pos, OpRISCV64OR, y.Type) - v2 := b.NewValue0(v.Pos, OpRISCV64ADDI, y.Type) - v2.AuxInt = int64ToAuxInt(-1) - v3 := b.NewValue0(v.Pos, OpRISCV64SLTIU, y.Type) - v3.AuxInt = int64ToAuxInt(32) - v3.AddArg(y) - v2.AddArg(v3) - v1.AddArg2(y, v2) - v.AddArg2(v0, v1) + v0 := b.NewValue0(v.Pos, OpRISCV64OR, y.Type) + v1 := b.NewValue0(v.Pos, OpRISCV64ADDI, y.Type) + v1.AuxInt = int64ToAuxInt(-1) + v2 := b.NewValue0(v.Pos, OpRISCV64SLTIU, y.Type) + v2.AuxInt = int64ToAuxInt(32) + v2.AddArg(y) + v1.AddArg(v2) + v0.AddArg2(y, v1) + v.AddArg2(x, v0) return true } // match: (Rsh32x64 x y) // cond: shiftIsBounded(v) - // result: (SRA (SignExt32to64 x) y) + // result: (SRAW x y) for { x := v_0 y := v_1 if !(shiftIsBounded(v)) { break } - v.reset(OpRISCV64SRA) - v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) - v0.AddArg(x) - v.AddArg2(v0, y) + v.reset(OpRISCV64SRAW) + v.AddArg2(x, y) return true } return false @@ -7366,7 +7427,7 @@ func rewriteValueRISCV64_OpRsh32x8(v *Value) bool { typ := &b.Func.Config.Types // match: (Rsh32x8 x y) // cond: !shiftIsBounded(v) - // result: (SRA (SignExt32to64 x) (OR y (ADDI [-1] (SLTIU [32] (ZeroExt8to64 y))))) + // result: (SRAW x (OR y (ADDI [-1] (SLTIU [32] (ZeroExt8to64 y))))) for { t := v.Type x := v_0 @@ -7374,36 +7435,32 @@ func rewriteValueRISCV64_OpRsh32x8(v *Value) bool { if !(!shiftIsBounded(v)) { break } - v.reset(OpRISCV64SRA) + v.reset(OpRISCV64SRAW) v.Type = t - v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) - v0.AddArg(x) - v1 := b.NewValue0(v.Pos, OpRISCV64OR, y.Type) - v2 := b.NewValue0(v.Pos, OpRISCV64ADDI, y.Type) - v2.AuxInt = int64ToAuxInt(-1) - v3 := b.NewValue0(v.Pos, OpRISCV64SLTIU, y.Type) - v3.AuxInt = int64ToAuxInt(32) - v4 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) - v4.AddArg(y) - v3.AddArg(v4) + v0 := b.NewValue0(v.Pos, OpRISCV64OR, y.Type) + v1 := b.NewValue0(v.Pos, OpRISCV64ADDI, y.Type) + v1.AuxInt = int64ToAuxInt(-1) + v2 := b.NewValue0(v.Pos, OpRISCV64SLTIU, y.Type) + v2.AuxInt = int64ToAuxInt(32) + v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) + v3.AddArg(y) v2.AddArg(v3) - v1.AddArg2(y, v2) - v.AddArg2(v0, v1) + v1.AddArg(v2) + v0.AddArg2(y, v1) + v.AddArg2(x, v0) return true } // match: (Rsh32x8 x y) // cond: shiftIsBounded(v) - // result: (SRA (SignExt32to64 x) y) + // result: (SRAW x y) for { x := v_0 y := v_1 if !(shiftIsBounded(v)) { break } - v.reset(OpRISCV64SRA) - v0 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) - v0.AddArg(x) - v.AddArg2(v0, y) + v.reset(OpRISCV64SRAW) + v.AddArg2(x, y) return true } return false diff --git a/src/cmd/compile/internal/test/testdata/arith_test.go b/src/cmd/compile/internal/test/testdata/arith_test.go index 2b8cd9fad3..cd7b5bc2c4 100644 --- a/src/cmd/compile/internal/test/testdata/arith_test.go +++ b/src/cmd/compile/internal/test/testdata/arith_test.go @@ -268,6 +268,70 @@ func testOverflowConstShift(t *testing.T) { } } +//go:noinline +func rsh64x64ConstOverflow8(x int8) int64 { + return int64(x) >> 9 +} + +//go:noinline +func rsh64x64ConstOverflow16(x int16) int64 { + return int64(x) >> 17 +} + +//go:noinline +func rsh64x64ConstOverflow32(x int32) int64 { + return int64(x) >> 33 +} + +func testArithRightShiftConstOverflow(t *testing.T) { + allSet := int64(-1) + if got, want := rsh64x64ConstOverflow8(0x7f), int64(0); got != want { + t.Errorf("rsh64x64ConstOverflow8 failed: got %v, want %v", got, want) + } + if got, want := rsh64x64ConstOverflow16(0x7fff), int64(0); got != want { + t.Errorf("rsh64x64ConstOverflow16 failed: got %v, want %v", got, want) + } + if got, want := rsh64x64ConstOverflow32(0x7ffffff), int64(0); got != want { + t.Errorf("rsh64x64ConstOverflow32 failed: got %v, want %v", got, want) + } + if got, want := rsh64x64ConstOverflow8(int8(-1)), allSet; got != want { + t.Errorf("rsh64x64ConstOverflow8 failed: got %v, want %v", got, want) + } + if got, want := rsh64x64ConstOverflow16(int16(-1)), allSet; got != want { + t.Errorf("rsh64x64ConstOverflow16 failed: got %v, want %v", got, want) + } + if got, want := rsh64x64ConstOverflow32(int32(-1)), allSet; got != want { + t.Errorf("rsh64x64ConstOverflow32 failed: got %v, want %v", got, want) + } +} + +//go:noinline +func rsh64Ux64ConstOverflow8(x uint8) uint64 { + return uint64(x) >> 9 +} + +//go:noinline +func rsh64Ux64ConstOverflow16(x uint16) uint64 { + return uint64(x) >> 17 +} + +//go:noinline +func rsh64Ux64ConstOverflow32(x uint32) uint64 { + return uint64(x) >> 33 +} + +func testRightShiftConstOverflow(t *testing.T) { + if got, want := rsh64Ux64ConstOverflow8(0xff), uint64(0); got != want { + t.Errorf("rsh64Ux64ConstOverflow8 failed: got %v, want %v", got, want) + } + if got, want := rsh64Ux64ConstOverflow16(0xffff), uint64(0); got != want { + t.Errorf("rsh64Ux64ConstOverflow16 failed: got %v, want %v", got, want) + } + if got, want := rsh64Ux64ConstOverflow32(0xffffffff), uint64(0); got != want { + t.Errorf("rsh64Ux64ConstOverflow32 failed: got %v, want %v", got, want) + } +} + // test64BitConstMult tests that rewrite rules don't fold 64 bit constants // into multiply instructions. func test64BitConstMult(t *testing.T) { @@ -918,6 +982,8 @@ func TestArithmetic(t *testing.T) { testShiftCX(t) testSubConst(t) testOverflowConstShift(t) + testArithRightShiftConstOverflow(t) + testRightShiftConstOverflow(t) testArithConstShift(t) testArithRshConst(t) testLargeConst(t) diff --git a/test/codegen/shift.go b/test/codegen/shift.go index 32cfaffae0..50d60426d0 100644 --- a/test/codegen/shift.go +++ b/test/codegen/shift.go @@ -22,12 +22,42 @@ func rshConst64Ux64(v uint64) uint64 { return v >> uint64(33) } +func rshConst64Ux64Overflow32(v uint32) uint64 { + // riscv64:"MOV\t\\$0,",-"SRL" + return uint64(v) >> 32 +} + +func rshConst64Ux64Overflow16(v uint16) uint64 { + // riscv64:"MOV\t\\$0,",-"SRL" + return uint64(v) >> 16 +} + +func rshConst64Ux64Overflow8(v uint8) uint64 { + // riscv64:"MOV\t\\$0,",-"SRL" + return uint64(v) >> 8 +} + func rshConst64x64(v int64) int64 { // ppc64x:"SRAD" // riscv64:"SRAI\t",-"OR",-"SLTIU" return v >> uint64(33) } +func rshConst64x64Overflow32(v int32) int64 { + // riscv64:"SRAIW",-"SLLI",-"SRAI\t" + return int64(v) >> 32 +} + +func rshConst64x64Overflow16(v int16) int64 { + // riscv64:"SLLI","SRAI",-"SRAIW" + return int64(v) >> 16 +} + +func rshConst64x64Overflow8(v int8) int64 { + // riscv64:"SLLI","SRAI",-"SRAIW" + return int64(v) >> 8 +} + func lshConst32x64(v int32) int32 { // ppc64x:"SLW" // riscv64:"SLLI",-"AND",-"SLTIU", -"MOVW" From 40f6fbf147fd72da1f6a898375af9a965c7a4659 Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Fri, 1 Dec 2023 14:04:35 -0500 Subject: [PATCH 133/313] cmd/link: update flag doc Update the go doc for linker flags. Remove flags that no longer exist. Also remove flags that are intended for debugging the linker from user docs. Add -aslr to the doc. The -n flag does nothing except print a nearly useless message on XCOFF linking. Deprecate it. Fixes #64476. Change-Id: I518c9c6cc009eae50b7c11308348524ad6a62b69 Reviewed-on: https://go-review.googlesource.com/c/go/+/546615 Reviewed-by: Than McIntosh LUCI-TryBot-Result: Go LUCI --- src/cmd/link/doc.go | 12 ++---------- src/cmd/link/internal/ld/main.go | 2 +- src/cmd/link/internal/ld/xcoff.go | 2 +- 3 files changed, 4 insertions(+), 12 deletions(-) diff --git a/src/cmd/link/doc.go b/src/cmd/link/doc.go index c5f43a2954..b0f2700ac1 100644 --- a/src/cmd/link/doc.go +++ b/src/cmd/link/doc.go @@ -43,10 +43,10 @@ Flags: or initialized to a constant string expression. -X will not work if the initializer makes a function call or refers to other variables. Note that before Go 1.5 this option took two separate arguments. - -a - Disassemble output. -asan Link with C/C++ address sanitizer support. + -aslr + Enable ASLR for buildmode=c-shared on windows (default true). -buildid id Record id as Go toolchain build id. -buildmode mode @@ -64,8 +64,6 @@ Flags: The dynamic header is on by default, even without any references to dynamic libraries, because many common system tools now assume the presence of the header. - -debugtramp int - Debug trampolines. -dumpdep Dump symbol dependency graph. -extar ar @@ -104,8 +102,6 @@ Flags: Set runtime.MemProfileRate to rate. -msan Link with C/C++ memory sanitizer support. - -n - Dump symbol table. -o file Write output to file (default a.out, or a.out.exe on Windows). -pluginpath path @@ -116,13 +112,9 @@ Flags: Link with race detection libraries. -s Omit the symbol table and debug information. - -shared - Generated shared object (implies -linkmode external; experimental). -tmpdir dir Write temporary files to dir. Temporary files are only used in external linking mode. - -u - Reject unsafe packages. -v Print trace of linker operations. -w diff --git a/src/cmd/link/internal/ld/main.go b/src/cmd/link/internal/ld/main.go index e120f90a22..feb4ba5c17 100644 --- a/src/cmd/link/internal/ld/main.go +++ b/src/cmd/link/internal/ld/main.go @@ -90,7 +90,7 @@ var ( flagF = flag.Bool("f", false, "ignore version mismatch") flagG = flag.Bool("g", false, "disable go package data checks") flagH = flag.Bool("h", false, "halt on error") - flagN = flag.Bool("n", false, "dump symbol table") + flagN = flag.Bool("n", false, "no-op (deprecated)") FlagS = flag.Bool("s", false, "disable symbol table") flag8 bool // use 64-bit addresses in symbol table flagInterpreter = flag.String("I", "", "use `linker` as ELF dynamic linker") diff --git a/src/cmd/link/internal/ld/xcoff.go b/src/cmd/link/internal/ld/xcoff.go index 2f887366b7..d915ab393b 100644 --- a/src/cmd/link/internal/ld/xcoff.go +++ b/src/cmd/link/internal/ld/xcoff.go @@ -1140,7 +1140,7 @@ func (f *xcoffFile) asmaixsym(ctxt *Link) { putaixsym(ctxt, s, TextSym) } - if ctxt.Debugvlog != 0 || *flagN { + if ctxt.Debugvlog != 0 { ctxt.Logf("symsize = %d\n", uint32(symSize)) } xfile.updatePreviousFile(ctxt, true) From 67c86037af2bd46ff847cfa4e33b7148f58c1f93 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Thu, 30 Nov 2023 12:52:01 -0800 Subject: [PATCH 134/313] go/types, types2: add testcase for alias issue Using the new type Alias node, this issue is now fixed. Add a test case. Fixes #50729. Change-Id: I22a4cf31b83de497e052989ca2054227e65e9937 Reviewed-on: https://go-review.googlesource.com/c/go/+/546455 Run-TryBot: Robert Griesemer Reviewed-by: Robert Findley Auto-Submit: Robert Griesemer TryBot-Result: Gopher Robot Reviewed-by: Robert Griesemer --- .../types/testdata/fixedbugs/issue50729b.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/internal/types/testdata/fixedbugs/issue50729b.go diff --git a/src/internal/types/testdata/fixedbugs/issue50729b.go b/src/internal/types/testdata/fixedbugs/issue50729b.go new file mode 100644 index 0000000000..bc1f4406e5 --- /dev/null +++ b/src/internal/types/testdata/fixedbugs/issue50729b.go @@ -0,0 +1,15 @@ +// -gotypesalias=1 + +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package p + +type d[T any] struct{} +type ( + b d[a] +) + +type a = func(c) +type c struct{ a } From 5d1287fa62de7b9c401749cd79147a5e38b11209 Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Fri, 1 Dec 2023 12:37:40 -0800 Subject: [PATCH 135/313] doc: remove encoding/binary.NativeEndian release note placeholder This was released in 1.21, release noted in CL 524675. (I think it was missed originally and then and backported, but then somehow incorrectly made it into the 1.22 dragnet.) Change-Id: I45f3182f14f77f8b92a3b7d5ef0011b71fd3c176 Reviewed-on: https://go-review.googlesource.com/c/go/+/546675 Reviewed-by: Dmitri Shuralyov Reviewed-by: Keith Randall TryBot-Bypass: Keith Randall Reviewed-by: Dmitri Shuralyov --- doc/go1.22.html | 8 -------- 1 file changed, 8 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index ccaafa7ff7..b6be84168e 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -302,14 +302,6 @@ Do not send CLs removing the interior tags from such phrases.
-
encoding/binary
-
-

- TODO: https://go.dev/issue/57237: add var NativeEndian; also x/sys/cpu.IsBigEndian -

-
-
-
go/ast

From ecb9d9b95ccba900de9504b3699a219c84b0aa96 Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Fri, 1 Dec 2023 12:54:00 -0800 Subject: [PATCH 136/313] doc: document changes to slices package Change-Id: I4e3f9812463251acd312372dd8a4f8c2cea9e289 Reviewed-on: https://go-review.googlesource.com/c/go/+/545996 Reviewed-by: Eli Bendersky Reviewed-by: Keith Randall TryBot-Bypass: Keith Randall --- doc/go1.22.html | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index b6be84168e..0d358b8046 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -534,20 +534,16 @@ Do not send CLs removing the interior tags from such phrases.

slices
-

- TODO: https://go.dev/issue/56353: add Concat +

+ The new function Concat concatenates multiple slices.

-

- TODO: https://go.dev/issue/63393: have Delete and others clear the tail +

+ Functions that shrink the size of a slice (Delete, DeleteFunc, Compact, CompactFunc, and Replace) now zero the elements between the new length and the old length.

-

- TODO: https://go.dev/cl/504882: slices: add Concat -

- -

- TODO: https://go.dev/cl/540155: slices: make Insert panic if index is out of range and there are no values +

+ Insert now always panics if the argument i is out of range. Previously it did not panic in this situation if there were no elements to be inserted.

From 26b1694d9ad06b4f237526f507494edb948a4866 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Thu, 30 Nov 2023 11:00:56 -0500 Subject: [PATCH 137/313] testing: add regression tests for reentrant calls to T.Run These tests represent two patterns of usage, found in Google-internal tests, that deadlocked after CL 506755. TestConcurrentRun is a minor variation on TestParallelSub, with the additional expectation that the concurrent calls to Run (without explicit calls to Parallel) proceed without blocking. It replaces TestParallelSub. TestParentRun is similar, but instead of calling Run concurrently it calls Run from within the subtest body. It almost certainly represents an accidental misuse of T.Run, but since that pattern used to run to completion we don't want to break it accidentally. (Perhaps it should be diagnosed with a vet check instead?) While we are testing concurrency, this also cleans up TestConcurrentCleanup to use a clearer synchronization pattern. Fixes #64402. Change-Id: I14fc7e7085a994c284509eac28190c3a8feb04cd Reviewed-on: https://go-review.googlesource.com/c/go/+/546019 Auto-Submit: Bryan Mills LUCI-TryBot-Result: Go LUCI Reviewed-by: Alan Donovan --- src/testing/sub_test.go | 28 ++++++++-------------------- src/testing/testing_test.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 20 deletions(-) diff --git a/src/testing/sub_test.go b/src/testing/sub_test.go index 55b14c3795..1c23d054a0 100644 --- a/src/testing/sub_test.go +++ b/src/testing/sub_test.go @@ -767,22 +767,6 @@ func TestBenchmarkReadMemStatsBeforeFirstRun(t *T) { }) } -func TestParallelSub(t *T) { - c := make(chan int) - block := make(chan int) - for i := 0; i < 10; i++ { - go func(i int) { - <-block - t.Run(fmt.Sprint(i), func(t *T) {}) - c <- 1 - }(i) - } - close(block) - for i := 0; i < 10; i++ { - <-c - } -} - type funcWriter struct { write func([]byte) (int, error) } @@ -910,18 +894,22 @@ func TestCleanup(t *T) { func TestConcurrentCleanup(t *T) { cleanups := 0 t.Run("test", func(t *T) { - done := make(chan struct{}) + var wg sync.WaitGroup + wg.Add(2) for i := 0; i < 2; i++ { i := i go func() { t.Cleanup(func() { + // Although the calls to Cleanup are concurrent, the functions passed + // to Cleanup should be called sequentially, in some nondeterministic + // order based on when the Cleanup calls happened to be scheduled. + // So these assignments to the cleanups variable should not race. cleanups |= 1 << i }) - done <- struct{}{} + wg.Done() }() } - <-done - <-done + wg.Wait() }) if cleanups != 1|2 { t.Errorf("unexpected cleanup; got %d want 3", cleanups) diff --git a/src/testing/testing_test.go b/src/testing/testing_test.go index 166ebb7ab3..d3822dfd57 100644 --- a/src/testing/testing_test.go +++ b/src/testing/testing_test.go @@ -780,3 +780,35 @@ func parseRunningTests(out []byte) (runningTests []string, ok bool) { return nil, false } + +func TestConcurrentRun(t *testing.T) { + // Regression test for https://go.dev/issue/64402: + // this deadlocked after https://go.dev/cl/506755. + + block := make(chan struct{}) + var ready, done sync.WaitGroup + for i := 0; i < 2; i++ { + ready.Add(1) + done.Add(1) + go t.Run("", func(*testing.T) { + ready.Done() + <-block + done.Done() + }) + } + ready.Wait() + close(block) + done.Wait() +} + +func TestParentRun(t1 *testing.T) { + // Regression test for https://go.dev/issue/64402: + // this deadlocked after https://go.dev/cl/506755. + + t1.Run("outer", func(t2 *testing.T) { + t2.Log("Hello outer!") + t1.Run("not_inner", func(t3 *testing.T) { // Note: this is t1.Run, not t2.Run. + t3.Log("Hello inner!") + }) + }) +} From cf3d253c1b6d61cff9e1ba2425c0a8bddbd8af0e Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Fri, 1 Dec 2023 21:05:34 +0000 Subject: [PATCH 138/313] runtime: check if mp.curg is nil before readgstatus in writeProcStatusForP CL 546025 failed to check if mp.curg is nil, causing all sorts of failures. It can very well be nil in this context. For #64318. Fixes #64507. Change-Id: I4a95c3fa16d5e1dee8041394c4bdb9c6ba04f032 Reviewed-on: https://go-review.googlesource.com/c/go/+/546636 Reviewed-by: Michael Pratt LUCI-TryBot-Result: Go LUCI --- src/runtime/trace2status.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/trace2status.go b/src/runtime/trace2status.go index c4a0eced8c..a4a8905196 100644 --- a/src/runtime/trace2status.go +++ b/src/runtime/trace2status.go @@ -88,7 +88,7 @@ func (w traceWriter) writeProcStatusForP(pp *p, inSTW bool) traceWriter { // but it still owns the P (it's not in _Psyscall yet). The goroutine entering // _Gsyscall is the tracer's signal that the P its bound to is also in a syscall, // so we need to emit a status that matches. See #64318. - if w.mp.p.ptr() == pp && readgstatus(w.mp.curg)&^_Gscan == _Gsyscall { + if w.mp.p.ptr() == pp && w.mp.curg != nil && readgstatus(w.mp.curg)&^_Gscan == _Gsyscall { status = traceProcSyscall } case _Psyscall: From 3220bbe1fbbf3d1f46cea9dce5e012d3b54901ee Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Thu, 30 Nov 2023 19:36:46 +0000 Subject: [PATCH 139/313] doc: add release notes for allocation headers For #61422. Change-Id: Ia7cb2721e52d9ccd932a49e0c331868eb7749f94 Reviewed-on: https://go-review.googlesource.com/c/go/+/546027 Reviewed-by: Cherry Mui Auto-Submit: Michael Knyszek Reviewed-by: Keith Randall LUCI-TryBot-Result: Go LUCI --- doc/go1.22.html | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 0d358b8046..9ef372164e 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -83,8 +83,26 @@ Do not send CLs removing the interior tags from such phrases.

Runtime

-

- TODO: complete this section, or delete if not needed +

+ The runtime now keeps type-based garbage collection metadata nearer to each + heap object, improving the CPU performance (latency or throughput) of Go programs + by 1—3%. + This change also reduces the memory overhead of the majority Go programs by + approximately 1% by deduplicating redundant metadata. + Some programs may see a smaller improvement because this change adjusts the size + class boundaries of the memory allocator, so some objects may be moved up a size + class. +
+ A consequence of this change is that some objects' addresses that were previously + always aligned to a 16 byte (or higher) boundary will now only be aligned to an 8 + byte boundary. + Some programs that use assembly instructions that require memory addresses to be + more than 8-byte aligned and rely on the memory allocator's previous alignment behavior + may break, but we expect such programs to be rare. + Such programs may be built with GOEXPERIMENT=noallocheaders to revert + to the old metadata layout and restore the previous alignment behavior, but package + owners should update their assembly code to avoid the alignment assumption, as this + workaround will be removed in a future release.

Compiler

@@ -517,10 +535,6 @@ Do not send CLs removing the interior tags from such phrases.

TODO: https://go.dev/issue/61015: change mutex profile to scale contention by number of blocked goroutines

- -

- TODO: https://go.dev/cl/543255: runtime: put allocation headers back at the start the object -

From 58bfef82fcafdb13c6f456313d2972c4530a8193 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Fri, 1 Dec 2023 16:27:43 -0500 Subject: [PATCH 140/313] net/http: avoid leaking io.Copy goroutines (and hijacked connections) in TestTransportNoReuseAfterEarlyResponse Fixes #64252 (maybe). Change-Id: Iba2a403a9347be4206f14acb11591dc2eb7f9fb8 Reviewed-on: https://go-review.googlesource.com/c/go/+/546616 Reviewed-by: Damien Neil LUCI-TryBot-Result: Go LUCI Auto-Submit: Bryan Mills --- src/net/http/transport_test.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/net/http/transport_test.go b/src/net/http/transport_test.go index 8c09de70ff..3057024b76 100644 --- a/src/net/http/transport_test.go +++ b/src/net/http/transport_test.go @@ -3499,6 +3499,7 @@ func testTransportNoReuseAfterEarlyResponse(t *testing.T, mode testMode) { c net.Conn } var getOkay bool + var copying sync.WaitGroup closeConn := func() { sconn.Lock() defer sconn.Unlock() @@ -3510,7 +3511,10 @@ func testTransportNoReuseAfterEarlyResponse(t *testing.T, mode testMode) { } } } - defer closeConn() + defer func() { + closeConn() + copying.Wait() + }() ts := newClientServerTest(t, mode, HandlerFunc(func(w ResponseWriter, r *Request) { if r.Method == "GET" { @@ -3522,7 +3526,12 @@ func testTransportNoReuseAfterEarlyResponse(t *testing.T, mode testMode) { sconn.c = conn sconn.Unlock() conn.Write([]byte("HTTP/1.1 200 OK\r\nContent-Length: 3\r\n\r\nfoo")) // keep-alive - go io.Copy(io.Discard, conn) + + copying.Add(1) + go func() { + io.Copy(io.Discard, conn) + copying.Done() + }() })).ts c := ts.Client() From de5b418bea70aaf27de1f47e9b5813940d1e15a4 Mon Sep 17 00:00:00 2001 From: zzkcode Date: Thu, 30 Nov 2023 11:39:29 +0000 Subject: [PATCH 141/313] runtime: let the fault thread to crash the process Let the fault thread to crash the program to make sure while gdb coredump file could see the correct backtrace in the number one thread in gdb. Fixes #63277. Change-Id: Ie4473f76f0feba596091433918bcd35a4ff7e11b GitHub-Last-Rev: f4615c23f663a2f0794ca9e5c86fc2f0cc8552d7 GitHub-Pull-Request: golang/go#63666 Reviewed-on: https://go-review.googlesource.com/c/go/+/536895 Reviewed-by: Michael Pratt Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI --- src/runtime/runtime-gdb_unix_test.go | 216 ++++++++++++++++++++++----- src/runtime/signal_unix.go | 37 +++-- 2 files changed, 206 insertions(+), 47 deletions(-) diff --git a/src/runtime/runtime-gdb_unix_test.go b/src/runtime/runtime-gdb_unix_test.go index 5413306f77..23eb3e2362 100644 --- a/src/runtime/runtime-gdb_unix_test.go +++ b/src/runtime/runtime-gdb_unix_test.go @@ -20,6 +20,43 @@ import ( "testing" ) +func canGenerateCore(t *testing.T) bool { + // Ensure there is enough RLIMIT_CORE available to generate a full core. + var lim syscall.Rlimit + err := syscall.Getrlimit(syscall.RLIMIT_CORE, &lim) + if err != nil { + t.Fatalf("error getting rlimit: %v", err) + } + // Minimum RLIMIT_CORE max to allow. This is a conservative estimate. + // Most systems allow infinity. + const minRlimitCore = 100 << 20 // 100 MB + if lim.Max < minRlimitCore { + t.Skipf("RLIMIT_CORE max too low: %#+v", lim) + } + + // Make sure core pattern will send core to the current directory. + b, err := os.ReadFile("/proc/sys/kernel/core_pattern") + if err != nil { + t.Fatalf("error reading core_pattern: %v", err) + } + if string(b) != "core\n" { + t.Skipf("Unexpected core pattern %q", string(b)) + } + + coreUsesPID := false + b, err = os.ReadFile("/proc/sys/kernel/core_uses_pid") + if err == nil { + switch string(bytes.TrimSpace(b)) { + case "0": + case "1": + coreUsesPID = true + default: + t.Skipf("unexpected core_uses_pid value %q", string(b)) + } + } + return coreUsesPID +} + const coreSignalSource = ` package main @@ -81,45 +118,12 @@ func TestGdbCoreSignalBacktrace(t *testing.T) { t.Parallel() checkGdbVersion(t) - // Ensure there is enough RLIMIT_CORE available to generate a full core. - var lim syscall.Rlimit - err := syscall.Getrlimit(syscall.RLIMIT_CORE, &lim) - if err != nil { - t.Fatalf("error getting rlimit: %v", err) - } - // Minimum RLIMIT_CORE max to allow. This is a conservative estimate. - // Most systems allow infinity. - const minRlimitCore = 100 << 20 // 100 MB - if lim.Max < minRlimitCore { - t.Skipf("RLIMIT_CORE max too low: %#+v", lim) - } - - // Make sure core pattern will send core to the current directory. - b, err := os.ReadFile("/proc/sys/kernel/core_pattern") - if err != nil { - t.Fatalf("error reading core_pattern: %v", err) - } - if string(b) != "core\n" { - t.Skipf("Unexpected core pattern %q", string(b)) - } - - coreUsesPID := false - b, err = os.ReadFile("/proc/sys/kernel/core_uses_pid") - if err == nil { - switch string(bytes.TrimSpace(b)) { - case "0": - case "1": - coreUsesPID = true - default: - t.Skipf("unexpected core_uses_pid value %q", string(b)) - } - } - - dir := t.TempDir() + coreUsesPID := canGenerateCore(t) // Build the source code. + dir := t.TempDir() src := filepath.Join(dir, "main.go") - err = os.WriteFile(src, []byte(coreSignalSource), 0644) + err := os.WriteFile(src, []byte(coreSignalSource), 0644) if err != nil { t.Fatalf("failed to create file: %v", err) } @@ -230,3 +234,143 @@ func TestGdbCoreSignalBacktrace(t *testing.T) { t.Fatalf("could not find runtime symbol in backtrace after signal handler:\n%s", rest) } } + +const coreCrashThreadSource = ` +package main + +/* +#cgo CFLAGS: -g -O0 +#include +#include +void trigger_crash() +{ + int* ptr = NULL; + *ptr = 1024; +} +*/ +import "C" +import ( + "flag" + "fmt" + "os" + "runtime/debug" + "syscall" +) + +func enableCore() { + debug.SetTraceback("crash") + + var lim syscall.Rlimit + err := syscall.Getrlimit(syscall.RLIMIT_CORE, &lim) + if err != nil { + panic(fmt.Sprintf("error getting rlimit: %v", err)) + } + lim.Cur = lim.Max + fmt.Fprintf(os.Stderr, "Setting RLIMIT_CORE = %+#v\n", lim) + err = syscall.Setrlimit(syscall.RLIMIT_CORE, &lim) + if err != nil { + panic(fmt.Sprintf("error setting rlimit: %v", err)) + } +} + +func main() { + flag.Parse() + + enableCore() + + C.trigger_crash() +} +` + +// TestGdbCoreCrashThreadBacktrace tests that runtime could let the fault thread to crash process +// and make fault thread as number one thread while gdb in a core file +func TestGdbCoreCrashThreadBacktrace(t *testing.T) { + if runtime.GOOS != "linux" { + // N.B. This test isn't fundamentally Linux-only, but it needs + // to know how to enable/find core files on each OS. + t.Skip("Test only supported on Linux") + } + if runtime.GOARCH != "386" && runtime.GOARCH != "amd64" { + // TODO(go.dev/issue/25218): Other architectures use sigreturn + // via VDSO, which we somehow don't handle correctly. + t.Skip("Backtrace through signal handler only works on 386 and amd64") + } + + checkGdbEnvironment(t) + t.Parallel() + checkGdbVersion(t) + + coreUsesPID := canGenerateCore(t) + + // Build the source code. + dir := t.TempDir() + src := filepath.Join(dir, "main.go") + err := os.WriteFile(src, []byte(coreCrashThreadSource), 0644) + if err != nil { + t.Fatalf("failed to create file: %v", err) + } + cmd := exec.Command(testenv.GoToolPath(t), "build", "-o", "a.exe", "main.go") + cmd.Dir = dir + out, err := testenv.CleanCmdEnv(cmd).CombinedOutput() + if err != nil { + t.Fatalf("building source %v\n%s", err, out) + } + + // Start the test binary. + cmd = testenv.Command(t, "./a.exe") + cmd.Dir = dir + var output bytes.Buffer + cmd.Stdout = &output // for test logging + cmd.Stderr = &output + + if err := cmd.Start(); err != nil { + t.Fatalf("error starting test binary: %v", err) + } + + pid := cmd.Process.Pid + + err = cmd.Wait() + t.Logf("child output:\n%s", output.String()) + if err == nil { + t.Fatalf("Wait succeeded, want SIGABRT") + } + ee, ok := err.(*exec.ExitError) + if !ok { + t.Fatalf("Wait err got %T %v, want exec.ExitError", ee, ee) + } + ws, ok := ee.Sys().(syscall.WaitStatus) + if !ok { + t.Fatalf("Sys got %T %v, want syscall.WaitStatus", ee.Sys(), ee.Sys()) + } + if ws.Signal() != syscall.SIGABRT { + t.Fatalf("Signal got %d want SIGABRT", ws.Signal()) + } + if !ws.CoreDump() { + t.Fatalf("CoreDump got %v want true", ws.CoreDump()) + } + + coreFile := "core" + if coreUsesPID { + coreFile += fmt.Sprintf(".%d", pid) + } + + // Execute gdb commands. + args := []string{"-nx", "-batch", + "-iex", "add-auto-load-safe-path " + filepath.Join(testenv.GOROOT(t), "src", "runtime"), + "-ex", "backtrace", + filepath.Join(dir, "a.exe"), + filepath.Join(dir, coreFile), + } + cmd = testenv.Command(t, "gdb", args...) + + got, err := cmd.CombinedOutput() + t.Logf("gdb output:\n%s", got) + if err != nil { + t.Fatalf("gdb exited with error: %v", err) + } + + re := regexp.MustCompile(`#.* trigger_crash`) + if found := re.Find(got) != nil; !found { + t.Fatalf("could not find trigger_crash in backtrace") + } +} diff --git a/src/runtime/signal_unix.go b/src/runtime/signal_unix.go index cd9fd5d796..84391d58ed 100644 --- a/src/runtime/signal_unix.go +++ b/src/runtime/signal_unix.go @@ -597,7 +597,7 @@ func adjustSignalStack(sig uint32, mp *m, gsigStack *gsignalStack) bool { // crashing is the number of m's we have waited for when implementing // GOTRACEBACK=crash when a signal is received. -var crashing int32 +var crashing atomic.Int32 // testSigtrap and testSigusr1 are used by the runtime tests. If // non-nil, it is called on SIGTRAP/SIGUSR1. If it returns true, the @@ -730,7 +730,7 @@ func sighandler(sig uint32, info *siginfo, ctxt unsafe.Pointer, gp *g) { mp.throwing = throwTypeRuntime mp.caughtsig.set(gp) - if crashing == 0 { + if crashing.Load() == 0 { startpanic_m() } @@ -740,11 +740,11 @@ func sighandler(sig uint32, info *siginfo, ctxt unsafe.Pointer, gp *g) { if level > 0 { goroutineheader(gp) tracebacktrap(c.sigpc(), c.sigsp(), c.siglr(), gp) - if crashing > 0 && gp != mp.curg && mp.curg != nil && readgstatus(mp.curg)&^_Gscan == _Grunning { + if crashing.Load() > 0 && gp != mp.curg && mp.curg != nil && readgstatus(mp.curg)&^_Gscan == _Grunning { // tracebackothers on original m skipped this one; trace it now. goroutineheader(mp.curg) traceback(^uintptr(0), ^uintptr(0), 0, mp.curg) - } else if crashing == 0 { + } else if crashing.Load() == 0 { tracebackothers(gp) print("\n") } @@ -752,20 +752,35 @@ func sighandler(sig uint32, info *siginfo, ctxt unsafe.Pointer, gp *g) { } if docrash { - crashing++ - if crashing < mcount()-int32(extraMLength.Load()) { + isCrashThread := false + if crashing.CompareAndSwap(0, 1) { + isCrashThread = true + } else { + crashing.Add(1) + } + if crashing.Load() < mcount()-int32(extraMLength.Load()) { // There are other m's that need to dump their stacks. // Relay SIGQUIT to the next m by sending it to the current process. // All m's that have already received SIGQUIT have signal masks blocking // receipt of any signals, so the SIGQUIT will go to an m that hasn't seen it yet. - // When the last m receives the SIGQUIT, it will fall through to the call to - // crash below. Just in case the relaying gets botched, each m involved in + // The first m will wait until all ms received the SIGQUIT, then crash/exit. + // Just in case the relaying gets botched, each m involved in // the relay sleeps for 5 seconds and then does the crash/exit itself. - // In expected operation, the last m has received the SIGQUIT and run - // crash/exit and the process is gone, all long before any of the - // 5-second sleeps have finished. + // The faulting m is crashing first so it is the faulting thread in the core dump (see issue #63277): + // in expected operation, the first m will wait until the last m has received the SIGQUIT, + // and then run crash/exit and the process is gone. + // However, if it spends more than 5 seconds to send SIGQUIT to all ms, + // any of ms may crash/exit the process after waiting for 5 seconds. print("\n-----\n\n") raiseproc(_SIGQUIT) + } + if isCrashThread { + i := 0 + for (crashing.Load() < mcount()-int32(extraMLength.Load())) && i < 10 { + i++ + usleep(500 * 1000) + } + } else { usleep(5 * 1000 * 1000) } printDebugLog() From b94532d08d53d40b23ae3db366a29786270df594 Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Thu, 30 Nov 2023 19:11:58 +0000 Subject: [PATCH 142/313] doc: add release notes for the new execution tracer For #60773. For #62627. For #63960. For #61422. Change-Id: I3c933f7522f65cd36d11d38a268556d92c8053f9 Reviewed-on: https://go-review.googlesource.com/c/go/+/546026 Reviewed-by: Michael Pratt LUCI-TryBot-Result: Go LUCI Auto-Submit: Michael Knyszek --- doc/go1.22.html | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/doc/go1.22.html b/doc/go1.22.html index 9ef372164e..157ff501a8 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -60,6 +60,22 @@ Do not send CLs removing the interior tags from such phrases.

+

Trace

+ + +

+ The trace tool's web UI has been gently refreshed as part of the + work to support the new tracer, resolving several issues and improving the + readability of various sub-pages. + The web UI now supports exploring traces in a thread-oriented view. + The trace viewer also now displays the full duration of all system calls. +
+ These improvements only apply for viewing traces produced by programs built with + Go 1.22 or newer. + A future release will bring some of these improvements to traces produced by older + version of Go. +

+

Vet

@@ -546,6 +562,35 @@ Do not send CLs removing the interior tags from such phrases. +

runtime/trace
+
+

+ The execution tracer has been completely overhauled in this release, resolving several long-standing + issues and paving the way for new use-cases for execution traces. +
+ Execution traces now use the operating system's clock on most platforms (Windows excluded) so + it is possible to correlate them with traces produced by lower-level components. + Execution traces no longer depend on the reliability of the platform's clock to produce a correct trace. + Execution traces are now partitioned regularly on-the-fly and as a result may be processed in a + streamable way. + Execution traces now contain complete durations for all system calls. + Execution traces now contain information about the operating system threads that goroutines executed on. + The latency impact of starting and stopping execution traces has been dramatically reduced. + Execution traces may now begin or end during the garbage collection mark phase. +
+ To allow Go developers to take advantage of these improvements, an experimental + trace reading package is available at golang.org/x/exp/trace. + Note that this package only works on traces produced by programs built with Go 1.22 at the moment. + Please try out the package and provide feedback on + the corresponding proposal issue. +
+ If you experience any issues with the new execution tracer implementation, you may switch back to the + old implementation by building your Go program with GOEXPERIMENT=noexectracer2. + If you do, please file an issue, otherwise this option will be removed in a future release. +

+
+
+
slices

From 92b6cdeb4250861b1e81451ef699307993856b0a Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Thu, 30 Nov 2023 21:14:52 +0000 Subject: [PATCH 143/313] doc: add release notes for runtime/pprof changes For #50891. For #61015. For #61422. Change-Id: I30d580814ac02fe9f3fbd1a101b2cc05947a9aaa Reviewed-on: https://go-review.googlesource.com/c/go/+/546475 Reviewed-by: Cherry Mui Reviewed-by: Michael Pratt LUCI-TryBot-Result: Go LUCI --- doc/go1.22.html | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 157ff501a8..7ffe434821 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -546,14 +546,6 @@ Do not send CLs removing the interior tags from such phrases.

-
runtime
-
-

- TODO: https://go.dev/issue/61015: change mutex profile to scale contention by number of blocked goroutines -

-
-
-
runtime/metrics

@@ -562,6 +554,23 @@ Do not send CLs removing the interior tags from such phrases.

+
runtime/pprof
+
+

+ Mutex profiles now scale contention by the number of goroutines blocked on the mutex. + This provides a more accurate representation of the degree to which a mutex is a bottleneck in + a Go program. + For instance, if 100 goroutines are blocked on a mutex for 10 milliseconds, a mutex profile will + now record 1 second of delay instead of 10 milliseconds of delay. +

+ +

+ CPU profiles on Darwin platforms now contain the process's memory map, enabling the disassembly + view in the pprof tool. +

+
+
+
runtime/trace

From 1926a0b573f5a55220752c16405770e910a18a6a Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Sat, 2 Dec 2023 16:37:17 -0500 Subject: [PATCH 144/313] cmd/compile: update PGO profile MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since the default.pgo profile is collected, there has been a lot of development and refactoring in the compiler. It's time to refresh the compiler's PGO profile. As we are in the freeze, there will probably not be many major changes to the compiler, so this should be good for Go 1.22. Profile collected by running the cmd/compile/profile.sh script on the linux-amd64-perf gomote. Benchmark results on Linux/AMD64: │ nopgo.txt │ old.txt │ new.txt │ │ sec/op │ sec/op vs base │ sec/op vs base │ Template 127.4m ± 0% 125.3m ± 0% -1.65% (p=0.000 n=20) 123.5m ± 0% -3.07% (p=0.000 n=20) Unicode 105.94m ± 0% 100.77m ± 0% -4.87% (p=0.000 n=20) 99.26m ± 0% -6.30% (p=0.000 n=20) GoTypes 798.2m ± 1% 784.4m ± 0% -1.73% (p=0.000 n=20) 769.4m ± 1% -3.61% (p=0.000 n=20) Compiler 85.10m ± 0% 82.03m ± 1% -3.61% (p=0.000 n=20) 79.77m ± 1% -6.26% (p=0.000 n=20) SSA 6.054 ± 0% 5.945 ± 0% -1.81% (p=0.000 n=20) 5.811 ± 0% -4.03% (p=0.000 n=20) Flate 75.37m ± 1% 74.11m ± 0% -1.66% (p=0.000 n=20) 73.02m ± 1% -3.12% (p=0.000 n=20) GoParser 144.6m ± 1% 141.7m ± 1% -1.95% (p=0.000 n=20) 140.5m ± 1% -2.83% (p=0.000 n=20) Reflect 312.9m ± 1% 304.9m ± 1% -2.56% (p=0.000 n=20) 300.4m ± 0% -4.00% (p=0.000 n=20) Tar 115.8m ± 0% 113.6m ± 0% -1.88% (p=0.000 n=20) 111.9m ± 1% -3.33% (p=0.000 n=20) XML 145.9m ± 1% 143.6m ± 0% -1.58% (p=0.000 n=20) 141.3m ± 1% -3.15% (p=0.000 n=20) geomean 224.1m 218.9m -2.34% 215.2m -3.98% This also shows that a stale profile (the old one) still brings a speedup, but smaller, as expected. As before, the profile is transferrable. Benchmark results on Darwin/ARM64: │ nopgo.txt │ old.txt │ new.txt │ │ sec/op │ sec/op vs base │ sec/op vs base │ Template 71.31m ± 34% 68.97m ± 1% -3.28% (p=0.000 n=20) 68.66m ± 38% -3.71% (p=0.030 n=20) Unicode 58.70m ± 1% 55.64m ± 1% -5.20% (p=0.000 n=20) 53.05m ± 1% -9.61% (p=0.000 n=20) GoTypes 422.9m ± 0% 412.7m ± 0% -2.43% (p=0.000 n=20) 406.0m ± 1% -4.01% (p=0.000 n=20) Compiler 45.89m ± 1% 42.67m ± 2% -7.00% (p=0.000 n=20) 42.96m ± 1% -6.38% (p=0.000 n=20) SSA 3.190 ± 0% 3.090 ± 0% -3.15% (p=0.000 n=20) 3.007 ± 1% -5.74% (p=0.000 n=20) Flate 42.02m ± 1% 41.09m ± 1% -2.20% (p=0.000 n=20) 40.58m ± 1% -3.43% (p=0.000 n=20) GoParser 75.75m ± 1% 73.84m ± 1% -2.52% (p=0.000 n=20) 72.66m ± 1% -4.08% (p=0.000 n=20) Reflect 163.7m ± 1% 158.1m ± 1% -3.39% (p=0.000 n=20) 155.3m ± 1% -5.10% (p=0.000 n=20) Tar 62.03m ± 1% 60.15m ± 0% -3.02% (p=0.000 n=20) 59.74m ± 1% -3.69% (p=0.000 n=20) XML 79.38m ± 1% 77.32m ± 1% -2.59% (p=0.000 n=20) 75.05m ± 2% -5.45% (p=0.000 n=20) geomean 120.9m 116.6m -3.49% 114.6m -5.14% For #60234. Change-Id: I4ead6158f835c2e69c0f51ea24d044b82a7320cb Reviewed-on: https://go-review.googlesource.com/c/go/+/546337 Reviewed-by: Dmitri Shuralyov Reviewed-by: Michael Pratt LUCI-TryBot-Result: Go LUCI --- src/cmd/compile/default.pgo | Bin 355761 -> 286041 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/cmd/compile/default.pgo b/src/cmd/compile/default.pgo index 2ba79688d4ba4434f531fec90e538471bd3f5d6b..0f925ec69cb3c1603fdf0f44ac45dafaf32076b5 100644 GIT binary patch literal 286041 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

MSfvc^54coyfDckMj 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

-;_ZdTD&8rc$~pwTT*J>;0*)#&7dv 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 AE2z|sns$}K^p3le=CY_yH+tVkNf*#u`o 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 *{=IU>NY_yJI3+ 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

a|-lj6DVilO%u$afb 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�{yV`O^XQK(Q*OMHN8(#7%6p2aB zszn`h{{>|eQxsRGRl})*#56aIHA7liWrl|_Q$K>L%J(d!)6|ZS;Vbu$qUNHGu_}WS z^@ywYoGv)>7wU|d0lE}TPc2tePMC!uxsTCuWr9(f+n(~Am$HdjeyJ`|UyFJ31ZXi@ zJN0}C>MCbznXb@2guQ5vPoF{S_?|;DAN8;WLtz*5TrEo+^zM^JMfYc5HAl1(_4vxP zUx32OP6_RFbvz3}E`p_HYe(oC^ne9hY1I=Z@3gXsWw0W%nhPYu3ef(WOqX65dqTZ0 zR>2N?X%5d8@=xE|{bsB(mM#L^G~DXwImOz?%wT@beL@#nWzOfJw{o&{zs(%z6zdcO zpLQec6dP#U?x0Z9xfU*33~$Lzw2e&i!uzr?P9HD9o?g;nKdeTv1vd4B+QID;^1my) z*amu#qMaXC7}&*4I7%PocWuyL`SaP@&^U>ma|bLVOjkfm{i(8vU9iYT?X7wSdMnUD zpY{@o#?$SC?U{*HYrzgE5yJGTqxpmi5{Hx~pHeL2eQ|`Q>2*%8Np;7RMO#DzH;!~4*@4c911sOxDI}Q* zA|7mSRPWc6{s~|=V|D3=KTgDy-j#XAbH_rYJ^X5`aKJhfNFy?Sp-KLgwo<*c> zA{VTEdKVJ?fkpm%^>;TiyN8ADqInql4ZW1YABol%J~2A+1ncFM&S*SaAIY*nvZi|NoU;6oI8ZS#r%c_I5Gn zPoWNhVEVNZu(Q{-t?(JuQLyC=T|b_eN>{!^KM-vzn!(>*1#2)p-E!yx3zj*|{j}3d zj$@-K2Yb-tvO_$==2Zc7=~$haN}y+kKWnl-)Iz7Y2DX_@%hRDl*8iGefy#r#uR_~m zuD)OoIi+l(8tlbQS44d%rqgwx(Q4-FTJT{X)&Mo;XxsBB1G&J~c9_(0-b4Q1$|mZ7 z29M=1t>^SVWcc0@lOote16bz_qx?p!@-LMXH@GNE&4dLu(Fn3y;IcK*{@KLQxUEBg zSxTfCEUJx#gx5Uf?<*x*fRehniQKozUDsxk?Y^1Z#Ahy=g~dBRP&UyD)>gzR`os9(%{_dDL)S#)mUfxZlMf^_)%^wCG=kp3zYv**~J(q`bC!BTK1GTFdX9) zX!Z0asPmK|P){bnIv&$^D9=w)D5YCuC??w^+8!O~v^ZadrpgyFy`le9*~K)_ys214 z;#Bj1viGjO47v(s=OMQfqr7BzpbYz}@)o&1vhJ%YNIXK@tt<5RiU^cF%oP(L|A(@R z88mH#>csK%qJGSkq1CL5K(p+YeU}Jn#N$8V*51TV-Sv=vu7boNrBuKFpPmfxm}dF)m^fSRd(TdeF!eZntjf77pDsaT)~=H z`wpXD;&|`oFFSeZ&*^2xJzU2cTL&w0cVz#J*Z}J)e_Qp^OZ+PuU^mfl<$}J+jSYZ8 zYHS!}r}So}Xq~lvmt-c63ds$N1Q5u&rqwMDd@MP3!>e z==e}-fV=F3XUl*Ex+BT_hP751j}87Tn)a*SiPU}Lq0WdfH0_kkTa9#x$woTFpDCLNM@v*Q z?G^uC=6WkBB7h1z`mM@K{3S~#M1ss;*PcATt?VKSsPT@zYwd;*hz3i4N){6+Cp?Wd zWt%WVCGbXX8^IYY&p5afEfreXY zW3)%<&%Xquv)+z-kK4^Gxr@#3Gmd7}XHwCp+xQDX!uZ>#rE5 ze?Ab?*IQf&l=tzLWoUcRM{nw2FFA|zMmbpRU3NzPDf#E>eNn+5jx>JclstnUIVHb@ zjXzM%VNzG(6LW3)i)sRuU0maGZ>DGWj*xXXs*_s?1#;qNHhG_ z2Ag4HXaUP?AxjRFLyWQlYd*+z{W_zYTEEL|FPsI>PRPf2m$vV+cPvyVGR3+-btB>Wt{(@I_s> zYQwu#teub;#BK_@34O&e3(0&NENkQ)GyOJ82~d2T)5enobG}KbI0H&#{yMSZbN^w}EmIdR;%*_&Refqy;kl)jgoTYqY4P2O3AO`(TfT z=zNe7h`qor2Ea;2b)@7jMt#uOOs=|RN(`~cWvGTj-(^)TCVI;Zl+*b2VX*1T^f+Jj zls{2UF#^=`gt3`Ae)M9X;T$u{hc#m}N5ICw_6l^u(9+L93uQk)aPx7~1fAAqM_QB%K(w7~OOf%fm%=$V!3q1ZVl{a0Z`^gFA6tnE>m+xlM zn(|UX;tA(IP_T*oCL|X!juBXr7p_kl(aw!RSFgCLdzs{W(;s_qka*4QWZ~!Y?ApW*XG65kD)RT0 zP3&^Lo976roMMlA!KcSQ?DOM;JicaH<#lgm69-^VO5fT;g2W+E_))vdKKJX!spBOC z_7R%u%yhLsfd@TP97JNl^2~GA-&0b=0S(}Aqfa&QAO-83{ACv7 zNRR-wHKe1aK2~;d4rsZa$K(QwOkr7nu;*qd@@*N*epS zOM61+2^A#L!Qxk#L*$)|TN&Tup2FLj8z<$sP&Sdt7cr{?|2OEYKGD{$z`y*P!6e%dw+P+xXCQ|9y9&YX+MG`)10F4d%POq zZ?;+FeTVVe4WCgqQG~YHZJny-ZGPZXuh*e%;x4!RB47Db7+d}x1YkYdYA3V}`v_;V2C&JCy0mH> z&ayYaqF(XNB=!`Rh+Q;N{>GvForu$wjUZ;jym#Z&TyE3?gOyn8d+G9vZH-)U7! zw18bVlIp}*+xWJ!A7ln5$E#z^&GMag^_$({h z1|Q8-0-S<ptLB!82cZ7CYbwSZtOKAH4k@^jHqS zMXj@@1}di*BQs+4w1~K9kuRW-jB`!iGE)nHO@K9Ba$DmzG0A727^B0Ur~IsPiYfm5 z4wcEvzH;B?qn+lfoMM{uWtIDAgOFJshOP2~x02!k+IBL{h#R|j$dzVV0aI_v3NCVoFnyPs zARCszX3W@!gU>6wSmvg>I*6t^EBe_`N`i?N~{B2`+pZC8+?EzZlO0LNNhV^;xFabl}&`AFAy6VWd1t$VS$hQ4QRJO%}pV^W)*UP7Fn=o8(Q~ThwhaN z7E+~$fs!^4EIg$M>?&!;w2<~6Qk(>ZSj8b=iu;|pCV4HBmsXw-BT{A*t3y|@K- z)WU0sIv*o-L?>8TyY}3DgbCio^_M$~&&8cGlwWNEc?iF_`cg<=Qkr=x9p+V z|L$;>6&{=5J(Q?7dD!aqVsLRUMTU7xvczfvU>mUvA$cYwPTO}WoW>{#bOwcVe>wh( z$|?FO)@OJGdg3crU3p{jq5a)M+ja`I$tpj23r|z+Cr3P0fVlsC8Y2!Z%14w3%0hbf z4*(9tYG1AlOv^zI`PdAfCqVuiWfMa{k^S^{`iU&Tcnovg5^2|)^N`QHl}(KB(W3QH z9Lmiog|~aAVY?Uun|Ciy@}3w6%P>6748@EdXE*6_Ht~IGk=o0JPd>>fU!eV>R?5fF z!luBwHYilzc*#xLS}6r@>R6TzEXD_%H>qS%9&!bv@Q|-qd=IbqH?jp2_|f-SYu$B~ znu{ee0~GbfNSPjJq*i}Sp>;&o?jz5#3KqpxZ3v!t$JfZn|AfDq#UlRuKCF=QlrI*^ zU8R!OnRYQp5k1Nom*6Rzv2NzUT56b(@RbJ(Ge6^#G-xaQ9wzVtCF&K;=D`-f&(w6Z zmq%M<1m1s%o77eI-L*hDhp}4*>olvoL&I9(OZ3x)tkGKz;U!kVGMlwq&#x$(cutXM zTvV)`VC3f-w~8cJKDk!j>T{QgK33{xonvU`C?5ga;CoF_yWaGY8<2{d6oIMChj7_0 z{{p%tduf?LuNS1OU`;Eq_-U2fh+AqQQ~(kSTQ6nkjPSw83Prc!8?Tc1;Qv5&S#;rayM zZdLDz1MV@=$(Zo%CuJ`GpwA*Fe+$|sx43nhBb%%&N^nFqa){f($Y~kxt=<=J_~LJ3 ze*P{n*hiK_KMei>q~}5weKZ0g7;GX0Eb=Zhh~4#N3DHoXx_*l68$KM}vp`XIU9Z1@ zKMVsJ@6)%De*j$*D7He+s1!Pzg596fmlvxZDnLYnRfdJSPUYRKI~WBxzrnXmu}Y{j z(Lf#fj2YYYXBb%wP*0)DnpJ`AEf%Og-OXx)rX7rA9Gc?H^Y`r!loat`O|h=SD0JQg zkcuIyF9p7`90M8Y1MSo%&Y^9sMynUU3EdJXxRdcg)q!#V4}ZbzG0l=-*d1k;E@>)6#4rnJ?e0;~RpYR|2h?MJ&TDDnO)ybv_J6$DI|jbeYyuz!%xf zFPQYHhaU|FBTCb3^-g0*h&2KtJWiI|=j!6F{>RMhV+>me$# z!1iXz?s*%bfZ1SI&H6EPbEQ`( z!&iplZ$BeLn12dQ*Ee(_foVH*O|Y6x%^rhY=FhHh8y`Jo97PMjUPcbmeBv!LpeYoB z?Jvz@7XJqs0>N0spJ?S)Jmf9ep~YaE14a%KAzK*U&#yZ$vh#alvD-u`M?-sLB;#a% z1t@)8D^H6wmV!MmrpI5mhphEgPEp3e4L+7H_j;hrwoS40poc=~FwNigs>uJb1l0i zJ-3VNTxc&j{bGFOHS}K%7sDG)+(IAuu?iBkeBnx(3Cnz;RMIQ;pD3HCLsR!XdQpuD z`8DMf_3W{&cW)jC@Z}8@M6Y!Qu%9WLxWR=oOCO{jZ~4p0E*gPG_OzQN9afvb8t+r# z$TB|G3>03;WM9wy4Ih>kuqS3bGxe97U>D06SvKV>%Wx)a1}`> z$xlSSMDR%u)uF~%3onkmaUUKi{AlC%W*4dVi!GNsVfsMJKJ^4pZB%;;V-Y_;{)v7nN6mq_M4^z11 z@!oC8m&x!)fN~~u)w0(RP@`ZAA=(0e@Z0KrF-BP#!t3ovf&oRY*xg%RG6AQKaZcz( ztv&LXFafp|?G~ly6qDREuG4l{A1JxvQ>47?sXh=>?55OdwCxATL_Af;DVb+sydmTF zr+>hBf@A991F)e%rdsLskZq?`ka!5TSeZ`;nNzIIKk6yhm~RzLH*3$*0vRYn@boia zDYM$IiiIB@gH<)U^1y`x&2kWQR`z^++Y_MaJ{=uPZSX0lMVdZ`{zN&&98h&PC5jQ1 zO3AVYkulF*qDo(-vh4CRu#!A|66?UpX@SdnP_LMAte8a(U?V+hYb-cr+r<*ta;eUj z$%JjoloDoWbT6Pb0$p)42oT>aSt=oL+$w} zr+C5DcA$;idoCk)B{r3HZXjmm-hF(21FY{21M}NX%27`vYGfB`>?S8pp)Ld-VO37? zk|TOVyS^?2{>)dVeNhF8EwoMb>7sLg*GMi+Z^CWvqhmVlay@VQx#B0t`cBB_bV}t8 zVX9@ntImiW?p?iS-&G9lVizsv3#hP_oRo2X$|m-};)`78okHwL`#?ozsitoCQcVY3 zpcnMTc>XEn6o;H7x7gKrRvGSEya{-ZBea#h(s9bK(XDSdfDgE*C!ChcHt4FK;3&AL zOG_E$uE6rbwas(MPdP;>SZzMTX3lxYr*x+CFfN79qV3{6`m|MgNa)gGpYUuNT||IYnnk(lu|Y+C!g>%qer@3R6(pj7?hi3O@kXHh6Xh)uE%Jp$oe|MS z6MZiCe3*Ns@iaYJW6+XN&0O$z+y=7Nd&%Ika65x#!xkzpu`S^FVQ_G-ss*$bUqu77u3^ z&=UPd$2e8~g0hQ5KCEekp^sb=Si`QC)8qasNF;-8-l66t6V z9tb0Cb}HD@StD1L#VCrN2G*9W3l~P>`P0FwSG7;XDd@34>mhF0R%{{@EK`TcurU5b zzGj+^OyZ$B3vBeVE`OiG+*Dx8PuY9v7CB&1K_Uk%w1}C?bTDhTuMB`Xi>957q@P!3 z8v_|$kcSUE@8a)HTVy8QET1De&n4e&k?nsUdMsFXn7+!3d{5cLW%f#{%hJdctOYaQb{YxBA@>ScL^tJkqpxI!vSN!7IdTJ=Sa)2n6{ZeJzEtxu?r zxIB_RfD-!&QwN!q@cp60f~_{`o1*VQi3Peeu6-nSa9X;}#pIr+-7fBMU6_}5uORh$ zxEJK>b<6eL%k@3Xgi>c+QRRIU15JFf5Igj(AaR#}d(JH`#VU$? zlug{@3>$JOMsf631xk9RQywun^uQ<7baVs&qxpeGIzDyJ8=_!ca!Ys|Acom(mvoN8 zVdmo;`GoZ$=kWrafinA_LXG7L4Amv~c`-8vw(G8t+Qm3n*rX0}E5-Dhph(@(WuyM9 zvWZEqwEGNNxnq@IQcf{NvDnA+MOUEYD|83SdOZ3x+G@wfUFI#xmI)!{KfR%4Mk8 zD`11E%xQBcP<}%>#p)-lkHU}j1j;TCZ*IkX-02FfTZvS4$w{Cr=aJjCZ- zP&{{$-3>JAs;-0OM3N=@7-O*U3C&+L@FrStytIo=uC7Zu7UKb=+)L^|o!WE#UnslS zqC)nZTXuh-9K*-9+1*jh_cs;5nwGElt9h(*_sG+TgM3ZloIt62>!eJ<6Yo$9TGNvF z2B!5c<-s0@Xx}2c@e_L-j+eT?2F}R)TqW*xBc(W?YFO;%c5(=kGOTygDTfLWM_^qY zOpftN$OUQzZvY?P(sPyh0)l_Y61Uvht1U8*8Y$SL$2w0EGt-2EO=svh-f${6PSe#*C%U5)9lMkVa0u{X00r4!v7r~FcNuzzoOD5t390^v^rOkyuRdx{twDm}5 zI0(nAhz2Wv%6pxwe)568a*7zRtZV084k7(M%3IX>%GEDG3q@P@rY>7rj;S9979B-R z?W`3_35Dg~QBDz$ro9X|Dda6)2xCi3KwICUzOMg2lwF(yTFGK&l?*?5|JRjWoCkZ6 ztBdn&da59C0qjXO|J0SaV9sJhEGD9(IApVB2n0Hk=|ID83}Y{rnT^D=W}H8EA`q^^Ub@-l3c# z^M{Pxc()cr*-uq~xQMpYCY|r$+zfsv3ov<$n)1CsIp(drMLz36Iz=|xCZpa>D7eG> ze6-!!p$YYVpyBD73l_FcHsEr#$m0WTlMMz!nX`+0u)3$(fu<2N^Agy84i%>|ANj9U zkhlzVafk2lP)eps{zS&}R-c1nR?S#vCRMP`Au0u>9&+Y1R8+7XBSvm0P(Ji^i zAunRJ&>do8DX?=9Iua!j5~7srtudBH=aaJ33o0rfErdQC!-2BO*Qi|+%gm~1OK~q| z7bMES8eh9-gQ)bCm6$i>9Dp}EB9^5DE5JI;=s_kKs016G*C{fY)BGCPOo-0^k^sqG z#W`o@CjMh(7u8(4M*X4}Hp2>e9qe8zmFAH^*^C8L12%Pz8fdN;U4CjQfHtFDM}`IL zWOZP7=b1XT)*s80DP-rE?H_H$6S=${J8hIjY5==3O?RLt9&-K+6jQLa#_ncx3KR)qCP52eB^sSZ0YR ztK9!x6(CyCcyRUqq3gY)>fF*Z&qdw>g!VazBSBSH-MihkE4V$~E{ArPYdlkJyLx)f zc)G`xZdKh|w{ExF?l9ABcaO(wrUO|d5rja1ND>(oKoUU&At6ABoJAH{1d+2yv!3TW z`_tjp?Y~&-w-4uh-wyA7_q*S)hJ`WUCp#Gd^Axbi%(6|-|7RT968o8ts#*ik%oXiL zP~@)s#dEM))A`}64$cpaXj&Q5@w@*~Sw$1O!c27j#z{%h3^pERUKm-$3y>Gb`k&Q4SQl7S65Uvb{NyI~?{2WJ zL*1__=#?Hm;Cu<)|Gng&smr35&yde#w;^8gkCmHv=p_G%vWPxPnc!RYn77|m0ivJd z(#Jd5VLu$>-NguFV!iP zZz+bscI)j`tN*dGh!H+d39n>+MV4U08wF}LtcYWNM!Cs5ZpOiUj6d{(UU(7ivKp&q z94w_xAK;nVVgfAUM9Y8yoB>`_WbL#wb0#{)A|`I!F%3rJk#kN$_+T6|)JJP`cr$zz;gfBdo+N&Xir9v3y@bQKiUP)9g9e4%iJxFC44bO#{SdI~U48VTr7-mS%-l-f$QMp>46hZ& z?+wuh_bg9!S%iZ<33`8f;U)&1sjgl@OJ(UTH-`(22(T$Ls$>rx6A5&n_xF{G@AiS2isU=hSfJNG75v50d}Y5$f1U23SC1i zA`?w(Np_#1ZhS))Q2VtO`>AAtnym3^`lJ%#sx0Cb*ra*Rx2gbf8>nT{2rc!LvS`1_&nOIM`MpuIGvsyS^Pae7$!CZI1 z-o)GWpjS9S-37|32z5NO{Wm#bkn@HgkQQ3c6f3|>n#No`4A zO6&pHqj$RU8GR)lf}NPAzGJMhM||=d_HiA;yO&c0G&&Y_40Dy)kR=sp8oWp2_>z!& zUs9JvCC96w!Hi6%S@>(vY0xm82;_LZwlhG47%d$plsQ|3NaR`CR^!i*-3V5$KAhUxX(MRO~KrDIf^MLYvb zd7ynH@fHn0TlsqNu#299ZJT8k?wVy40z@O4G8@hW5`?+RRX61;n$VU#tfQVH=nK^h z_IT7PI~rU^Opao3J~4w5yJ>G z>nCF`8pfDBh}s^sjb@$6zMSN4q!a2z+p%NsT16ihD*5_x~rWiHh)i9!~j^y zBl`vVbDTK`fy#E+`@84mgfI?~td07L691iEPBcgif$i03d(t5~b(mt@yrceeWfdbp zHRcL?1+g&-mNBDUArsIsV_^4RY5UJ-P+NflBeeE$6aPA4Z1vjE&&oWnIUCJ%rYyZR z3HGp+(zIV1cdb*Lp}jilZ5Y2X4K~-Q;{=PL2G4*cK6#&j-y&v#cFo!HWhkydkGGgi zE6YQs{WcU=urbGpW)*L^&Ti;Czzn9O;!JDTFZ-9!TY*MQuYwm|&|AOH93edF&$t?q zK+BW@Q>+Er>LU9+mA`mPxq45>9$mG^9{s+uiWM}KnkAN#gi>Oa0xpHe`dD{afWL7R zbh^m%WwAy{aHY;sG@WOb=JoH>xaer8+W-pRqaEtCkokY0q}T)tE^tWqyTuh(pm*q= z57lL{%}z|x2`;~>6I@!w4kfr*Su_>O_%0_zCqEr@f$2#0xCnI7EQVI@1KmB)ifk$s zSqiaaI@y=I%4rD2cU-cmy6|E+rq?0=_mqatdKcLXv2?_VZd~ur`N<%Qam^nHp?7RZ zxJ3GCxXQm!Ulk`@M^~EpN^bJ6m78dClYgt+#0ytm*qw4NIo@AcMBooFg5~_D7p@YA zpdg@wTn9%_s|W^rVzL6T5U`t%wXbm@ULzFj#LOE05VJZA?EbcnqyE2?MT7&jwbE^B z-mubN0lHnz*&1V&^nnPyASa+oM4)XeGSVT6{?tWI;z%EfrfX&%pMR@95K%yT3tx~d z=*UM_`>OyEjZefZ@PzQjPj)&PiCQZmjbhN&Uri0fNYqMAWCH_y6>VjP3KZ=wJD~c+ z{($xix(pV($@_G4v-&_>1M4k%@3i73 zN?qmOGZoPQk%&*^RPqvd*As_ZCIxE8?_Nh+aGc%=p`s@Nm2UG|M%L0{0Bj{grxt925}yV(_;TO%eVUUD7a77-SDZFx zaiYgg>Z>9hEboAcZ5$IXyNMom`A^klk%13fxyjIoY!CLq&#_%wMJ8uvD^Hm@PBITY zmc{-^TeatL{>A$|&Us!~S^**(pJ=@Og+)njaiosvAKL08i*V4o&G#7zae1F6sNc$) z^>B5A(9UR?^!qmmRmn7@?=`@&H0M5A0s2_M!Awz9Jv!)h3;d7yRTfb0!r4=Emw! z5n4hD!Dh|>{Xkho5!a7nZGNjL2CF?=W2OXbBVSkM>W5BthwtuKZp|w0f?ZvsPWHf6 z23nOx+~aFFXa`ntpZ|LHCrZKQ?`ZQhYx97H66%Qx|rnGN${}K}ja6T35 z;(JP2#Ur4^kbb-Em&HrV!6vThT!V?e$|5Q#Y8`Ylj8rTFlyG-vtOfW?fXOHg5fDpd5m6G`xvHY?ALenU@Uc(Z)kv}c!;5? zWW!y)WN9m~S&OdgL))WgOjEb%WTdU?=ae+7GS*<)4}i5k)3+zA z4?PH$-N+5Q)mvuxLR$sPs@EZKtOqv))=|WWf*u#lBC8mtP@dOUlN^Z=us7yG@6bnm zAV#^O@4Rz;uM5534aPA?$Jmo^nbzo$FW%T)#JI{{8eh@YXWqL;(D=$8>eZ~7egj}5 z5p-BC_mWlLffmarH0vU>6z3F0lc|b+2}&$b-S!!u_!%xG)313F12YTuu2Fw(*;@sO zIk0CLTwZVe3}eo$n~^zn9&HcKRD^rOe!Ri?5$+`u&}R!^FNf%_SnMQ^q0TRYjU9%v zy37Un7s?`*xZ$;GGu6L@GRuBz*EhVmF3MNDrF?4ASx-)1<0n?Q8D;QX)8b(`+^vGG zCuvsUq&^gDU`HvA7h#WFWv`QQje879w2qIAHfBH)U6kL2`U)~IrLD0E7|~7kd)5mj3i;L`|e=D_!HF_@=2pNa(-DSTlGk|`@ zO|Cl`f%GiFutzCiR`a=rwXx69t{SE<-vv2_VL9M--px41-is3Fxp&->M_7WO)Q64? zhn#oQdSymn0vxfw&00y@_=RJzs1~|Ol{(2-8e=KwQ+R!rb3x8P)jb7kis3!PugTj` zLjr%uhMLirhg)E{i7HtdFI+(lDS^0}l zu!dvm`32|cjnnLISkA)G)S0VQnR2l3AF?ihu7~&BU0oJe!1mwrBCO1X6|XIZWQjn_ zZYU2>{ho3Y{SpawwSrDcwZ3xXpDC+|`XTe0>S9P!Ush5?gY~947F_)yeGhc1l5v0N zr(kJOmGtBCktg`oSg`y+nz>f|j3kqBVBz_X!B+i@ETZvX8{uSYeuiX70E->t)z^)4 zh6(!`Skn=&H0GRe@Ue(QKJn3(5&3+RSyzExPB!E5*8OBXcDW?5>Ta?PKe>#PW-{1p z7ulwtTmriR)>2D$>zrKlgfa@2I^INQC_kA7-9Htqv67j8|B<2Fqyc5`>D0obPU@1l z3D!UO+D*BN&*b-v7~FrUEFzu%zhzJVTaEwE0J?RTD`(qJmg8qK!EWSn)_*F)fU-E( z`t9-BPiRF2Ixf`5#$5WUf-TkPHMBr~fFH8Vg-$>5ePtCnKqnzD@v&8R7@SbQ#)`+L>~6k>%e5!~?MFWlUUYlpA*!&n_C_sSnZC z`kFp=dwy~kBlHNYr&oLR{h_jma-h@j_euP$q5|k(jHijh^G21wO0d2ly(UMY5>;^y zm^rsH@e7Z^@&cRc5+G4E|2qXto89F!x~Q3pwo@B> z{#seY3!s^__qii1q6MhL!BZkYy!;{4$)B<1-f=TlcPrY09IM4k(Z)Ur+ILm1!jA`^ zcFqaMQM8B-P5?8^^tY5%bn*q?>cY2;Udmr|fxWJDFlFMrat$J*8%^8#YM~2V)Wd0T zmtLlG7vutVwqA;Lvup;9pnYKX+q9{$3o2Fn#gTpXlSU(i0B z3+L2V#VgLLaBV00t6#Dc4N;uG)z847ieXB;MY{g3c*+EH=LlGCF}IroKjYGOlrnXb z^?h52|r~yBRYOY?BB7K)H)<9~p)vxyPB^p*5$&FDZ-Ir#!eyKZ<-0mX$c5 z3Nxhd*|yPL?+jf+-_g}NsmtP!8e-k&Zppr-EaC_)iz`MJ0Z&FE9aBL`)LyCKkS!;a zEsow!r`(@RC&@eXh5ZrKohDt(uMNvP2y8NgT7A8*k=Zl&M@+<`)7myUDPIu+)*Pp+ z(Y!N8Oimqm*hsKm)1f>JQz#1TNgq#eTON#L-S&_znB~!EiW{TDMWnYZ@Gu-N z=9s{Wj~S$m9`TsnSHTXC_1U3MD2s>%+c<2;lihTczoG&}98l9Z2SDdjt#*+&&?E6^ z+s~y$3l(w|Ka~KMI7oNdKu@`fjr7`&SmDFLt=1wE!J>8fhZ-ni*MW+{ct^2%o=FFi zfXYmh@2{%>k<52_8BNbCo1FiO5&WC*feH{e&=z_3^G@^6F=JEEcJ+=9*7*m@DpG;+ z3OMvP+>H`dX<&>j#fJ^z1P!;zMCNp`$zyD5*=QTi?{G10e*V3(h+CYyrMlwB_moxK z26|}Tm+n9r$pK3n)+_E6BuOr3QnB6XYt2nv7I{Fkh8NmnDLrqtY5- zlgrRV3czyBL_(}&S_l?3sf+8Bd#C_W1Xfr?eKg@5&I#@!+0D4dDMs6y1I7X$IZIZL zD*;O|&9axF<^tUq*MVr|zoC4^-5)V8*{+N75Ro?dl6%cP&fj63wS)fe_c_K9x?1Kb zexnqu!3@3sHK?;(fbVD&YH*PW7G)6+IQg#i;$x}q@=w&4#6zH`$s;a~PN4ZNat24t zN9+hWFUeC2+ELdjk;=277)L*nrnD=gjc(G?-(~iZ)tfGN4vr=0->n^IV zisxW;=1s<@pS#Jhibl@7s57BOO<;j7)Ksc`WIRM~Gg#^k<}r#pPe+&+Trmk+eIA2a z(ZZ4Ja8xUvyT~BgXVLV?EG+s>B}FS`-g}2mDcV5BYV72@P<7eK<|S<+L~93F#l~Aa zOoK0zz;*JOO%J_HcV!V>6cpOBeE`|f4U}KVfS5!NS&NC@1Gc+*$8I{EhZfZfc00El{HG@`GaI`q7pguBGkoDytX(Ix@5K)A4%{to?y@H7Uj+?G@O| zOL-1xrpx=2TKZN{qa~=If(@_!S&Qit7p|k!-KZjPd=iui?-7>s*>Fvh9!TJi_G+I zon$I3u!ue0ARK$i1H9=pSX-Hnk4nHcH3Jq@u5(=dJ7pEKK;eCi#qPKuL)_J6F~{j{ ztw*^@`Y4-ul?&{I{XPawRuu!C68TmJ{Vf*I>BksRG0*rCAHd@AUkUZF+)stORHK(A8@-+O7gi+&+*F|WXnnVwWv6AbfG zRuK;NJdi3)xYejje+BGr4g)-|*<>_iV+2_Ex=sq|4UHA3p^R6h1#WT*Gc^iq{DJm^ znetZtA{s1pk_k)_ZStP|1dD@E44U$`bx+-g6uSzRdxJKTLsv;@*5@MEJk*CG7HzfJ zoVdHLGT8Nfx|9P~!%Z~~ADLXk`-CO<|AnoOh0Eh9i)NnX7OVC*h8-1b2q`tXY~}1kjh`A zgH5(hQfT?gW@qM1EWm8bK-0TXU6b(V&|rZ&#`N9iLu|TP9GFS|dV_~-qvi^Br;k4O zZgLvB<}IMagHDG7-+?<5L)}KpiV?WvkhOy;0dmmx#;k~%PqzTDt|@JIIYqbR@dsCQ zngHsi`CxHrtiE>D!^qTC05%)T@P&FIA7lIr!TKK1YWz}28&p`Js5kuAR*7C=;WkRi zVzfOlRpYn#`4X@ovvyZ6q~jf~-!1yNM|c~ae|N#EOK3vXB^1KF?+k@TOrgV+nK?R3;j0UxrVExMZ2N4L0;E_Ju&lsc|kh`T7I(VP`myK z2hvQ!;is&kp3CKgwSbdtG79thDW7|0nEn{&==S#vXwA&8xhmnNM6n`VFyqxipTX^*soOYW!mka}LTEJqb z^=xOl{+E0V^Dg`q9=DZJY)SubCN|?XPSqCPk!(rX<7C{GFb6?9S4@Q7IG9zm1FU4D z1&`U|&2-_N9H}#RkX=A826PPMo{RDq-Tb9Y25UrEWRMH%wjP~VQuI*571^CcXouxg z+S93Z!n~lQf?a!D=6Gli^pZ*Fy?(T1?K61mswZdd08mZ@%}fXGMwX#LGRI=PR`Cj~ z{k5+8K=bzyXZO|jNxPL81{#cI7Sl*iqZEoZpCnmj4z|P*j^O}(y?f8g252Co+*Ys9 zL2chfRzvoUalqoWqZoZ&fx?FLQVjHivdX75mq4Q90JuO$zY=&&S(&b#dv8H4pX7#; z!5z8UDp^l`iqg@%^<2T(VH&I_oHn^cPx-HvRm^Y%>ZzyQu*npbWu>%vrdbx)9N2*A zPSNbD0>nJn+cdHin|$PCBya3;fx3#eGQ$(5&KJ^&D?Gwe`HKa#CBJ2K@+gjj+T86g z7SU9Co$1g=Eb`ZlZ>)7um&FoyyewA6$dK|+b%6}4Smv`8=x3w*$y-Xj=d_)q+T=6* zevq$xjE!T3pD)&*zw4@e#VT0ls&*7BprhCt#nVmNZAU!~E5$lkLKyFchCOAai~4o3 z0hW?Q-^rU&2ICRaB~7hopLCPz)N5^i=a#hvc95uZuQT!ZHV4nlN|TQLVFzrZ>hl*t z!RJ(f*hO2K5eu_xkw=$}X&$OnfY{?pj8d2kOT(_d>1AX#+vo3?6+~~GSN`IF8p9W6 z#(2j;4P3K_4K2GE(PX!w+8v@T*mS~uMDGI%-DQSibzP7tn1jb)N!vQ_!OxUMobVTQ z*+!PHKcy6_eMaAy^G0^Jz>lzLJ=PWc!te`0V9S*{Pw)YzYB1QanLC(a#33KC5DD)h z(`-gYnozLXL7fGjhuJW&#}!o9rkv#plNW%+JH}V|iYs7UfpqHHbC(A^Uqt}shIerp zddW_vF94f2B|ft)MuD9sY2V~2j6^h8VzBo5E5Xaf@I_3Io<(%uRj}X=9?H`_MPrlQ|?!Ud!zQ;dRg=-SvCOtin;bZ&+(nj6j$`k-fws_h zYoY55-51JNq=UT+33O8) zBHKoromFH22EL<%aj>f#_>!`SO#X;N9lQXM1$6z&=c`twUQz)f8*O2Gq4qnZ7f!~~ z=E`-D*w9W4FAlzn=(OAFbTm>uI9#w@YS;04Wso5QzpDOvk!8(5H8CFmgSjrnc z{enD|MLg!Pn?;xYnX-y%4$wY3HBcCr3^ib-LG+bP_mn4i`C72iGYM|%__0Y&`gS+D zc0pOi6R?+U+_c6lMpn*xu*P@#Cl=@r%b60a7uEqSu$-uc{MlYtqc%tb-?l>sH5K74 zo`dZ==-gJ(2-Gp+P-675XrgpJ`P{kghtP02k!H2-MH|QqPNaGrw9b5bEnurjx>`C9 zPcJE~uF}>WH@)XY_cEU@%p0NV5SrwnT#pYiO<};$H^Xb-taH$0*iR8y^ZKh-Te{Ea_}q}eL=p$ z0jr1a_uB6E)a|UK=mo0mql?tPkl$Ap(FZa)&*WYA-Q+Kz;&R{9Dd@Ql27qevUKuus zxO2)P201(Od5l<=yhC_J@sLc{!(5wug)jIo*tPw|5Sm`xwVSjVh!ILBU4Jo*rtl*w z`n}%r|1+GU3bEEk&~$a%NEaX(LN^L@VqU{@e;WfEKOq~pyE=|@-tTC={tedA1Uo#N z7eskBJcU)f=GM`sOZ}{0f_e)UWrQEcxX5lV0I>#k=QjVh&?Z9#rn^n1uw((hcYtkC z7FmrE+295|>EM>-D>k`d4{7(@Y=#(a@qM1^gLpcG(Kgs(j9!J4 z`s{K|C+qk)9)kD4B29sUli)sO%-bM*tjtZOL3$s6Eg6m)**)DOhLUNr12m z1&cj<9u5O5`J&p#RuPW2ofJyzx1RDDM*0facAO4mS;zNAfQ`lRI_!;;yor?`36|fM zWL`+Pi+euCeiVhKr7_y9OV7(J{8ThpvYA$O&{l&J- z)>!4I>YNb|n+Voi!jGqW$t;F!fh}ge|5mF=0!q0 z-2i*~MUf2_k%G43FjlrJc9vgP{vs9VO(m0s-?1^P?6H$Pf{K}jrhDdU|2xVeZUVhE zQ#<%7i%16=y`w9^|3Fzp22gw;KQ-vgv}>6_%kd0H8FZFc&`(+Hx-FV6a@=IMlX4Sx zZ8AVvL^hg24^Hq6bIvT1dJCxb@h(1HuB&2k`kCfy2A1T2UE9(H;V&zHk;~Vf`J4qk zpNU@4^u#R7cozeo4;EQ&zpJ1tWdR@6Oq-X2d0q&Xwof7BQ08>OM_EM?mz`Ou_ZWh@ znA4(12S&~aXs2NJjgqI@6aBf19D`84gSL=vU7aEWFLxL0m04EyD^N~>`ikfTlILl- zYux8N57GG?xW$#SONX>$%OPH?3@pK@f;#D91QU&U5@rjqK+IG~8{;mMqOwzfmA3~H?vUB^+l(ns5=Weq|=slbK zeZwc~owM>4kI^*QphNE$x17|6q8f0ZT;HRFINYP`yUGRT)WSz1UK#GFZbp)eTCiJY z(t+8Jl||HnRj1j-BBL*!P!xpFS~YfF(k9#QDOcTTf+$!2APmeR~mvALemfOJ+O$$4#eszGI#Bf~=c^VnrI>B12D0XhU z@sQZ{6XuvRlgKmDi`z_~KEAAD+4X=0F6%(EHfDwei*c-#ZxwyqFN_O|ZciD6&-JrM zOhfu>=+gsWr%U>gnLlZe-4v`N3_GzbUs2|k@lv+fQ~pq ziiMM0&nwg;6D;yE#M2ZX?rhztX|U2Fntk$oWV5I87c-oscXf#T*Nq*MM~zu(59Td- zpr?{zjuI};?%wm;DnQIr5E%(Q)7>Con5>2R^&1Y%DzB~Y+vGHQXo36wE5nX&irWC#?Y zRqiZz&zK-?I2oB+*C>Fh^eqBw(5{0`7c&BS*;#J8DvQ_vTbrbMS7l_M*aT{*)?>DW zQ|%VmLcG2!eSnR9o6PiDDUr$|c7DQ?BMd-D^yc;b?oSvNtYZ>>1*$5wi8Ixd_JMk5 zwM#m$1P=J0Ez}b3T$InTqTW$9o1WIQnAwNy!V+zH!_MFjp-I$h42Vx6-UXO@u&0*V@=S@5Av)}up$ z!5$`SQ(+`)4}k3s>JIteltqO8l-YY&&g#0SRLWn30p$(^;!~ZT(jUuK$avZXO z(d9Y{tn0ciGO%z?Nf8Y;+(by1q{DSvSl=(vZ8-S*v?xhTy|R$|kM z{VDUi^8laVAseAO{hn-q2#7<|l{#(!^&Un_?0`em{r4`3jrie4mH5 z^0R&k`J6?~cE5yROo9TSvQ7GR2uWK*m6LquudJdFO(~%i@Qqeki>EFEYo2D>^h%q& z&4dA9jiqGiJ~G`!DN({v3o;6G_{ai0S(OcQ-(3uP;~-@fckr2>*9?))be2`<&%0o^ z%tVzqk=_GJxRpmone(#6MM-fV?2%4y{}p8sr6A#NnfBwcjkQ?I_>a3f7fL;(`2)^6 zM`s_4c*x&03t)XmS;Zru!*uOX(8@emU=Qq}CT{Y#aCCGr1bqdX0$aK57kJAsC&Npu z7n(@rPgww3N7nthvWO}Qm`Lq)_-o1{9s`{?6i2m)YM`eH+F9Z2DnQh*r{_3Rt8Fsa z-Zl;BSTh||`Z-|%dwK9r}40n0Y#qd8a zbaBWBwC^hCnd23o%{HCy81K>s_U>#V&~~yJT~@EdRY}nScKZHW-y%BsP*aYHM!SGo zZ)vY$1&xzkeTNb=&RIT!#O$GXFeN6fx4qoIO1U_qouS|;(MR$AAnc3WFXmijDW+mS zK9g)_TTFE}vn^W10LP$?R=W`&SqiZ-2v)eRz1nxrDSz<_>{=YND%xw;Ke5R`e0+!! z`h~twq>J$|*h(gIO@~W5(T)J^jB49A6}wTsk+B_yddP>&F~Hq7_w(D}4VqKY7Wq^s zeJ#TBouGg;i$k%l@N2L*or;jYKa)TklRD*F7@Y;crgt6E!Uu?H?x4G$w=ywaV}{bh z%T*q>Dl_!Cd+;Wnk!gL1KBg1ECt&Et0^U$^OkcMk6rHh@8~Gf zZjra`4kHo&5IQUu?Jezx@*knYvJ+FZuU8;WEC*mua;S3D`^aYu*rN0|ErB_hWrtv^ z@9fHHFedL2H~L+D9opo09eT_*(@C$F4zQH*XSJJCDp2N0J6I@x5%@FgQJF0J-(Zte z-JaX1{09AuK4!6{vsHxdVz+rY76u5cR3rGAVbj9k>Fr2wu(@&_EGa@53)WC zY^+^-sn6ia!oiYiD2fwZjf6;7z?SM)oIjUe$z9Z5kdYUZRYc$uLuOEAHTo$M?7@k? zJw3GFo(>B2RS|`@N1-fO>li!cCdxgSGA$Y(xNGL6c>0O5iWt6DxxU$|fo!}AR+Ub5 zs?lcTu4-c7k-Nw`Cl4<|;l*cCp1r`2{jPk8=Xh}*2iE`*hoSvKKor!O*kC<9G|I} zgioGuf3#D`uPibctQaiQ3@Gfv5wnE9Kdm3>|A6Yt zh4jd<9a-f7>&b$}&7BDy&{fFpp>6i1zQ``UtSsU_`@+0t$5FoYXDs5Zga7|ZSwtBZ z-vb>n_ovW-*{>6NcTA6WjuzIky0&NicBV`d!`7ww4 z3afbbGiDOgeh)1+Wf2WrR+;(-{*AJV=loc__FiEDs7A2eAzte)I~j-ECa`xgtnU5N zCJP`Uo58~8XhUzcNp9(FHX}Co1>ZS~w#Rmx+_WgGXyJTFC+o1uVX&8!JB5ag@|?Ws z3k{c#SyJt6$gFFaj%{G`S7PYFcY$TY+kr-_?FO1ToC`aEZs)J!Q=K;Xn^2oQjO@mp zXnKC2GvwrBu(~)$9FxRbL^s#ipq`E2ho;MMj?_^<(GVNGU?=S?%o*u!q$}E3lG&{aZ!&-y!ZCsSX8a zEMgdJCqjFX{(Gpj9JXU^Dt?Zx90j}4Y|qsa$l|a-JyWc974Bpd!X4+wbQ#wy^vwk2 zU7kJiHyfXN4HP)Y>$?A7)b5^SH<;-KSWs<>tJf&c67C~&U6j9==5+XibSzdegQnDc z?Jl2yAD^XMf6Tmwzb^aFDT|n+K)TPW-U%-B*_j8*Ug9txy2)akRNnl|2x+vR7V16K z2Vwy%thkU7hF1Aq({a*GblI2{a*~n^A%6K1MT=PPbOEjJDHw zU59D|s`Oh5m#0+mbfJ@On~}S5h40v*4<+5Sz4C=_lsSI?wzHhV`>(MrvVi9sA-|=* zF4lj>I*SeVW8>XlJ~rCJR;^+KA1#`pS@of-tjF5h1Zyyy#%{TyU;M=u*tN=22N&R% zE;0s^avM!$=52K+4x>BVfK89x6m-%qU%H!9zSl+eLSiSn%Wmk>duTg&bqLnwWh7+U z2a9|`sXSnj0}w3-R5XtITpR*no857Cv5I#b;@fI>F<(7&#PJHR*hN0WZg_&WdxJXh+?0vHn_;UP)q_p#u7Ir zZHEmiFIaXTZ!q6_;6QH`!C=kx++~;CWjeOc5U|u!X1vrDCZo^G6nt;!$21{m#lONw zSwtAvyKu*tig2K;6@3Ewin59;Kzob&=IjcVRK&-u46Ne>D(m9@Wjx+K z3T&-LZ%qAvS4j~K7JtuvlkuOGMZ|!NAMRnA^w{M8pe*7lP{fF?pZSN%Dq=sTJE)dE z+vv$Su=Q=u0DXh^&|A(qD_;?hwv2{T7v&*(Z8Clw!<_)wouZS1GI;75*wYEx3Hoe? z>YoUTK*A$zb*CXL8!72!OZ2@r3*%++?UUbE)3%6gpf?UVg{|TiP)L^UkEiI5+hB8N3t{Jg zjZEm5zU8H?A{T5rn+L%sJ~9!@G>>m#W-1?X%v7GwsXedDSQRsp3vAvoD|dh>1nXGk z)nLC(#yc5N2MoR|Vn?UwyN`H`X))OLuFh8a8mE^Mu(E8PL7F^y^>YVkzfo7L%x5GQ z*)A2*18;fP(@;z&v10F`ZTFVGzZju20oP0%lbU9plkIdS0K0GA+r~f&mhtDG>+Tx# zRu=I9Ea;W?aKdtX2=sEFC-i!6xlh+tusgvz;VVar~->B;x*8KjfF!V1I@nDnr#%$x$KrOHBG0FF^MrOEAUOQvnng!e1)RC}5 zkQQ?s@@><05(6%*MU42ztHUigLs6-)C;jz#`2$|@Fsu2nEi)IBd*g5|o% zCpproqq^PHuZtzlrM%#tfk7!e$xv2}>F2ZmC4K zgo70>QU%|=AcL^=Tmegr(5KXa--RLymTiVK-N5%nf)(uPu(~^#Ur}I>%<2}uqbwpC zDF2K?Z<&h?Fdl7HQ9Pu!SmeJo(xE5eD-+OEVgv){pOeh+x9MdB0AKrrb{qa&v@5o2 zi%4Xr_1VwemH3M5KSb8Wtp%=3nF z3Kn0f(}ow~bLn7rikauE!rLg$ngO=jt`of9aZw+NOt7Mob^OGHP2ynn+9qi?>UNT) zzDkNLj?Z2DE##j=RpmU%p~uXw2a`_T`h)??`o@Mw?Au@mQ%15l7nzC^RL&<1{Gh3L z(k6LD+3O@5F(q@+mf6Mo{462gLX_ok`i;_#8|f_bF%0?a!zmgFrfhNtdf~nEGX9*h zh=NZTp+hmZctQR*`o18krN1cR2t8&7q-mSHtlY((r`*AV7W3ib7&$p(lYQ=x z>rQf###Xe=7Cl3!4SCD|5&A2ieMXD=9ZZS4V9^DvzViPtMVxnrAnZT zGa25hfO1!~ntu;t_n1%DOZ#`8ls7SU)nJSH^xM}b`BYaU7e@{I>y|cdGRH@dO!1*cpvT*~mQl`cE30S%YcP{GF(Yj=r}3tiz@z7( zzJdkL(z9*uq6`vBiWabi>3SU9FYrM7l8bgrSGTKz=F$q5cZ;Wn10VTq6(HI;@2{V! zch%w{6VYGooD$1A0`n`%B07Mc*HA-iccR;RCpVL;?5#RaS%cB)0(-EdPya*jPybfY z%|$T7)!pqX8<;H%Y;+3o)|<*MHkCfG$xV9QE?hL+@cJp)UTG}@8tDMg zjOiYd=LannENe{#F-B zOh~Z;IJmEshu?&5${ANrwR_z~UZtnNCp0-Y6w|kgb+D(|^vx}IF%Ib)e56@+;OmW^jIHyP+rO#;#5=HS zWi)fVwaH@!7Q5m+ZWV_d?<0LR*o^se#O?@XwfIptxr_lnrtDdy(ZAZ)a9%k9yK6*J zADx$nbRD1wAJ?mmPL+W_hmPeK^Jx)5V2!%q#dX?Gf6k0eTHBam%>uB+Sw?^g%2@Pn7}_3}Q`<>*k`p-1hJz)UkIo(83fT2J>h5Jyeob8#5kF_K zVP5)&Smj5`O-MOL*H=DRnXVyH2SFG0b8cU8j`yN@ZgT%?$||DKwmr`<=s1f!fdq~L zdvu$pxXkms!Mh6d(p0>Ap(w|K1r=-4AFT{=V7u*(nZe_MHn+5E{XbMzk-(n1&a5Z5 zFUn(@QNh9-E0b76B3O&*8~UG=Ra^%ej-aE=noY(-@+I;8qR7_mE|tk(p)FL1<9Y2S z#f_gcQEMA?&~MW`lLB(mrH8Q}!G}soO>QigbQeHrM`!O+L9sCs@FOU~MV8Mk^{3{7_j%7FbP?mUunq z)Mb%PW;l4?b*8KIcVsxe;TBr1oOa=TH*NAYy7V^KVJO+OlohVZB67e|VmO!oCwc6w z{6#L%Tr54wOPpnaGpBhHPQ7`2?_fF=Y}v3MF@F9pl)uPFQ$*rjd{LN-{K!Zl*-wvH zG>uH^9OnN)xr-5RS?jEPMIoA=_UbxEMbVhxMS!c*G}okibG{V=WtURpu62^Jc+L`b zQXMbiw{0>20!SF=lRId7)y^ztp0O?k?;kD;%kZSuMHQurHX6%Y9u zkviIS$rB1ISmqbih_i}ve#Nr(W4z|1E{h7V;QO6A0k^v-6fy}Sz7j31C!be+2O-<4 zCMXmk z*6Pr<*P`|QNU$ehTV{4j&e3|Xs6J-y*tN+Ac+RI3cyZb+vifzXtYA}px+3TFXHZ$e zn$6Is+t6g5bAV##&=%_@*YW-_?sERi&|T3MSE$wFeEfbB*o&7slrILdt{E(_kkvcIFO4>`PJhoe+JzZXtY)D6m*+x_8A>esd4e|kWj9%d zO{DARwAt${C%pUbri2;R6(^GMWIbT7%{+M7m|4AGH=eDS_s(v@O;+RR*vDO=hnsfM zdHIixP5aeFXtHREnbnK+*PzLA^(D`uujhPa-k&Io7-WYPb0b*vk-w`hi&va}>AG~_ zue~oFIE0qzHXasw&l#DKhrtTFb>!9!)-(VsyQ(iE7@h0BRx!@6Thpm--=Oa%IQOsU%3;Z@8Vj~>ZbQKy%3n-UKz3_q>3+Mj^tYA2nBp>P z)!NM;m}zzV#WY3A9h%M$Z8FEja8La`D6?pqd7#UBu$;&&B}*$c*9ae(jtM&lHlIq> z|Hvl0nD!NHB2s5iW>J?nV0~tw=|jBS0@%Y)F2D*ex$dMs6pLW(V?0{TSmb%AZWdYP zWXu!Rd04_n?&j+I!A=}#mcg=Csi!Ua%D!J!R`HhWHccmEzXug|g?%@uuemtGSGi-A zcC(6zCu`HKaeWD)E~8TBc6{z( zc)T8io$m7pp6V%kaRfi1;3?LXNyc&9KIO(SuMdgEm=%Ga;>gs(6nBqYRXAFj z_w+<+gx+@rtnW6r!*C(nyp&Z$@Eek}U1SuKCh}9d+25hho21W36wr&?OrD-C4Zp5v z>VPi zEuK$)pYCO+=VTyePy*Q624~A17nuzm&>-y(i~R>;4>5D6LQqNGSf)9&p#?BgFZ zW%_lHLwzArhu%m6iW}B`;LJjh3^p>aYdw8mS;Y;YM`v?erGQP|)(&J0WljYvuF|`E zu&=U;G_a->>KL6)G7lYo6D+pweQ2^(qywe57(Qz5@{zZ?EHXHIBJS|m;UfP)xrtC0 zT1Yd|GS{y!6XNluSzuAQI=K0tD2vGcl&LxBE_h<2LVt_DQ=w-hv;E!%+gsC`*P{!{ zSLA@bDLZjd9%9l{E_7qGa{;?XbV<0sH7>3rnDz=yH)0sNe&8f{oX`57BmOMO$9F@YIjMj*aSo{pXC# z&zN%_$|B0qmOV7cKu>38qNxCSYi5KykWf^)P>p=~I*Q|!mmG%@QiZmfTKcd{I<#G1 zx~N(Uli>G!%KIL@2k$U>09aO|UQAK$$|Cx}dT(hX#U*7G{h!jGfvWSWr<_A~3~+lf zQ!DcJau96Y)P;*N171;5nx=-of>z4)G*1&koQIKmX_x{hxfvh(mYfmFUyN`zwDhra zFUb|W-Wy-}HDwW_9G}}vRI}pCeQb;)YZhsKiPszFm(2p^e^OWro@5{Ye#TyRqbA9c6@MUEY3lv>vA`cgVPP2HC zzTztX(vUv8kTgqZx>m>Y;Z>_-P;P=%W@58l<~A`%KkzDVIS6U>mXge@d{K&NvBLd- zUK`r~lloAsa-V+a81is7EtJ1l`vN)ghV%8{`2^IXsA*WaRuH7&(1Bn-OiO!Qp zpVFg`7J=YPav59DF{eeZ&c6_hbK?nj!iVb)cCv0Kxnorpaf+s!1#dA5O5Vc63j787 zDv6SB(@k#DI{>VsROdij|B~_-!C>W&b-2zaX6m5;5rU?$Q*D;WvYRCam=z0cbH;Wb z;VK)k&4+=V6g#A8wTf`C_Gn#V`RR9*MO*>P?dGV5T#~=3EFuD^%S@^Y6bZCx#>fA$ zvWO_47h65})Dt&}Wg89DoM>MwG~&kqB{`S$XuhTo5wPrYs^BtlA-#LW($` zEq!7A50pj3gWQbJaeA1A2|$5|yyHm~GM;V#V54S@T-KpX`~~m2*TAy8Wz3%_tGLeR z7}HwM9dug~SgKipJseXh8LaIpj|h1d$ql^F%?RSTfwsIRn#VS*hFD4gTRTm&+cP7v zf>XiXn#Vqt14{!t&SUx0V|RJSqO9U3SY$l+^XFbN7sHzlmN};nW=H7546ym9I_xp? zSD>15kV^H2vcRA!PJ>%x_Wyn4p#nrUSea3ppv}`b6>su*Y7w{C#nHwBUAv^sYm6yc}G6-v+2(0sjgRNs~!#!mYRa3NO)aZqVS(QTn>Fr7A9@@4K<|OI*3muk^t>FosQkr!u*Q0tl#e6>U3%Rm zb7PmXX@I8X#&d?BP#M^@28y6HH#vlJ`U9?qJl?5=U6PHi#+}-qDT{cBrhy)N#)T6% zby++jy1`TZp||`o7Kgk1wz7(Hv?OF`$Js{wUIo`s6fJ>G-g1N9svPSI{kd*>tAf?# z*q!M1@vo1$)&_Zd(;kF-Gp1xhK?`98;)hn1a|&e{fzKJqu9cmjo( z2Q*&SJOL{TJX2Dy9_;9BWZ+Y<PuB9I;i)f`BFkSfnK9o?-w3yedjOHVgq2RT%2hB_1 z*>g}n!4`Dk*?267PN0KHc0#tdq|G43MF!Jeini@Ghclf;bc0nT>w_w_P@t70?J0N_ zI&Cl5)eY@g{R#rC5A1fEc9Wm@64X$Bu2sKa_uqvY%IV;EGi()uU{8m&nS1jysG(ek z_qEydA3_ZU8h)= z{FmTbydjM@Ir~gA&{Oo{7TEO;yA|{e3k7f%I9iJ=Vu!Q9p@Lt4 z*yR|T*GVUi*GYS58&A@*YZ)SLpW_vw!yvy2m6I>s&D~2lHcY#R z{3){-Llws6h$>g;8S6;8Rc2zoAG58Gu@}{@G7xj)gaTqvhi~n(A^`X4D=buY(<AM2nXs5)}>#^;&95i0$A1e9KX7Gfi;X9U9kaLMFg70AL-zdYRr~M zu%zyE8N6zdDXzu^cRzNwIJAY8>Jv?>mkJQ^U{?x1pO~xMS$$n3plxf7 zmV*CI9q}9=x%Vxoq@VF1qZ8YWLNX+Ry*%pzbscQbOkvsNrz|4rGnSxar>|J$Zz+F~ z4D?{I258kvOnbg)|FR_eq+$9#NOhHRomtBwJEJ_7B2-E9j6|*f3 z>_rX_8Y9j!4TE+QEZejNuA_I;IgQSGRcC;$Wor*=#x-Yx<)(Avh`%ITFG4E?tI5(Q zfN6-4Y_Qc)F8g39pJB9afj#`<`lz=*W04t-?sX?Q1ksTLHqk_dufT#}h!`C!!>dNZs3RVb!ld1ll=A&UiY)C;t2wZm>(Weu((wDnJL z^BZ-QqZgo5Vkexl}I0#LQlJVm-7YnQd+ZW3 zOuG<2dmrpo4Tb&m1v!HSQ3@8-!$&Ffln;HNkb=$B=)H}>WDh=LNW6ZXc1Kh3L$oy( z=_~7|uR|pT>j~`oeAXDNC`ZfWsdh0hu&Dr1!Iw&Hax?PAJ;wk(@G+c?Dk(V{nD6-S z8#+rBP-iuhpWQkqo3KnCgDoX8TgOu&`!A{hQ4N;)MNZ%rQNxFR$FKcux#O-bi&~(B zU%rpEh&r@1r`q!#Ga1?wpzT&_@;Oe1Qd-Y}IHrwiL&zHz6(F8+sdn;ncirV2UhST{ zaZULQZNu$!MAtc^8$M&MH+{{^DwfZ|ikoS`x^_tpc_??$?It%dmm4{6Gw7XD*4?S4EwjHRhOlP3VVyacJ zm?J9kCFf=7SCmC`a(x;OUZs+T;x3@X0UEj&o#haXrR?s<`d0gUP*Z_IuIM=LHb|;o zu;{ZDaQeVP&1yHagZG2QRcN-uOsjml2aG9?bU}An#2}w;g>K|Ym$+BH;vnZdWOCUj-o|^4f(<>_R+Io`6=RgZcX(tO zx**GFCFNfBSZ@OTkeCx-ZF&0ECjZaXm&9wZpnewdZ?eivs{bu6vJYP}iN=B@~ig-*&&D`WffcO!n1W3w>ev1>A=B#2;?2^1GD;|)#3@| zl(KE-yGU?_V77=ow%yiA;(kvBh<%{98EcMyT3Oz5{EtKB2fgi(!eQ%|vtV1r5t2!IzQXf}S@w!1^t*yLnx$7-IQdSWR6jGtZi=HyQ-SR@EByL*J~EuU;3k=lle^BKP@$RqpUj zp=FDp99Y^aIRz?6p#AuL1+a{@G64?-s2oyL32a6A*vz#{VFIm&YTtmo@pUpOuTGGO zY9pYFyL^*~b@A?eRRyf`aqxKMVT#~Oa4`W zrx@0orF8zaB#9!@3aIs%zbG%5<<3`IfStT3_HgH7=>w5LQUjIOCdy}xzq;w22gV94 zJ>s)rQ;2$J`fS)H5}7L+KV7F)nEKj*wPhT^=L>9E;%*1DE8CA}EDj2GNb4T+=c-*0 zr=7quPx^PBWKq`vY)_hROD8sWyMR3!^Dl*qf6h)|jZtS<|KrB1-GB~{`q!{KO_x*` zu&0}*k7nL*LuwC@z4g8_1heaYUCe;|+n8c&vlrNLX~@eqgJjrgdk*JdV6BcP)II)N<73 zsLTtOeElYdR>!1BXM6*wZMy5K{ggJ4@z>n~e*vi*I~CN{d9Uz9>R=uwJYl6rI9AxgRW8e z&ctP4W$(U=a7B75*$+CDjWxw6u!XsPd*ovgbQM^~4L{5yIPw^v>=`B=AvG>7b49MP zu8711zXqt{l0U1~%yUEPx+wcJX{@c9(B=tg?{5E}eX(x5x*`2?!xva_CUjFiH!jB& zheMQw{XS@Mx51OL)ZWo2VWEyV@suYuVgLl-I=pD%M>`Jr*ufPB{~G4!+<5gA$mq^PvIvi-CAOQWrlc$DZ_hkgU#3$5X7^{vySqY~HxhanE0LpO zbovI=ahjMhuT7xKnB5luo6Pq4-x9g;4{XH)-^g+`-c1IUR3e9)`v@zMM3n-p>b~q{ z__ObLXq&@~0MAdoGNpuSEE}5X}r^mECE^2l@=k4TIeROUae-T0W1~ z#JY}J32fr-AU?4(mR@iz)e$R35>*EEKp0oyiAUZ34(?WoF#zoBSzjN^?awS=?aBV3 z*W>5hkje%&R64!bEQS2!09x~8x)$$s<5ez@hRI#i^QgGd&I5MsifG?Qu_VMYKbD^S zhZ|D)$g4Z~j(g^iDgbn5pKRwoh@;e3h02MsGh9cDKG>XU80o$G{P9Tpc zF_m2psP}|yUzR3BV%3%dOFJc4Spp3Ls}O-3@*T&FVc}2-?CEB?o8J;kKLy2oLwq9p z1@S;}0j*zAZAILUFM#+~Nq?^sY=MEbL87XDL%d!6>Sd;!Z@BSl6Y|EQ{veCRWtB)@ zviQ(h9;7il;!CF<;$ACb{EUBCanu9Jm2Y&t<8DZ`0=bwXW(4bO`hgo#TL2~Ro3?`%rPL-$>82PEu9MT1klHHpe$EdmgZ0}s zK($eiC~}*tU0z)vmM3RsQwFf@z=or2O?2T7k>(+P2Fr!c+zG5a!(SgCm%CD;Qf7Lz zidVaU<(&3Cn~6nirwHAd((|q`;c`t>XAsG*C@&lVn@Pjje4kr7{ zAz59Vl>s|0PS++Zssjf-Cz@%87-qjsXVGE9GL|lhifo9Z6m-~#lr0)8p$V&+^P;T| zznef^0C*=76rk0lVbuSk^laYrydyRUm!uX`z755ogk1%eaZ6Tu>l0`cL+1*xBTa%G zj-lPN+(b1h&6z6GUA9fVF|Mt$f>3$!>Z-KFV#&)2Mm9>vq`#wnG&`Sn=c{qSIu05$ zEW$UK^g8IP=;d^OA=Qb6)b%&Sd#S8<55?2D`QWd>9z?w=K6%kiR5ySvP7=Tm@~J6#Y=| zuk-ufS?9;AyE0EiBYKFJ!+TP@l$F!EJqdHnePDwZ{Jq>}Nc{s5@n*51Ua9C0+_~!E z8{%Wb-%mYzR4f8y23#%|lOEc%LUUhGkEL1zx6NoB0;+2c)tnZ$RBy=1hi}5SSjs7l8Ip0Xvo<{)e{2(h5lCGhtYr{(@2*8z=pfc<}eJ8VLFVU^~0~s95zvQh`05 z8E;^&N(Oei<}PYfoP>%HS%Q{a1gv$Y-A+iQ0?UZH7k|S|REq(fDL*wW zRW;MsF$x3Vp~$;lEGo1$CUUoNseEGDbpNO8?p&1ys5IRlRO3Uk!3yxm7SVaRCM|~! zN(a{Pn>@|BYB}=8BNuFcb&>V-~uT}usc*2hwSr&5R)kfRo z=5v5$-4avOzIhl*A(ad4?D}&M%5P0ur^;i|*j!6dwR~Wk*NVTqi+05EKcJN2`}o@K zS(F#=vMQ7wiC)0}^LH-buNDy)k^sT3sz6@e2H8zKA5Skub`#}D zwGvs~(a#Ek1p@v0iw$w$6_ z+)BAc1?+faVU_v&Q}e|w@K1a9bM6O=6W6EzuUR|%~kRqGj z585itbXSbdo95CBZb-EOnph%RmYp_z(2ZAH0d0Ha?`(F9Spcwym2$MT*OGhf?V=nn z_;Xb1d%#+OZI3#y>JZaaU_ul4;`oMK`2&0h#pe zq#p@ojflG(>#qsYIaGAFG~ZJ(3hfEeXWfwMl8RoMnx^dEa_6c&fbw&E4nRwj`AXF~#IO&=;Qk-bhDd37K|{qpbVfz7btCaNQ%mQIWG zpO2xd)6!pxZyc3Yn)1z6YM*!G)iKeRW&ZYbEk^Khk;1cn@5?kj0IaacZ}q2`@lJ>& zU+}m8e(bV338+7B(Tp|Pmm*Fk21S|uCgYKiIwh0JyCQ0y26XVA5aJ@8oi~F{{=Q$`y|(d)dCxAOhKJDCPdtsUItd)J8i>xRj&90YP&ik zm|UV71-7T*SE<8EFvqK+P4CM>xGI6-!D*!(TKz6-*W9^k99Um%MHn1jlSkuY9Js{7w#fw_c3w8 zmv2%QzHm<(^tjK(Qes?I_oan8$MJ+XE@Kq%gUVN~|;TqsIQeS<3H zPL)if=l$LKR&wX7MguK|EYVeAUiZkCC-DMJzraJSPgHD26g6_LcN|_3{e)kG#OaON&hI}Z`_bd0d#oq3~G0d=tXzFS_Eiyzu4q$ zN)R8ljj>b#(Md&Ceg1Ulru$+z0I2KmkXVTk-NJvC0IOar{zPjMWWrhsXkvW&w(nI8 zmoz{}mx(LPN}W0(P0N6d6w1AdjF6b=rpsfC{S)2skejHM1KXM{*nKNn0z8}ao@%s<#*0_(2LvGefSNHhbM~qeht!R?TvMMHGTv7q-L^O=R zYJ9E|*s;t0MPPBmw*gpZ(t~M+fs$+lG``9YEOJl6vjSVx2h5z46aO2fx2~?|8Xr3WY`ct^Jii@}&T<{K z1K9PA|IgE}M70x7Jih2VST1_U!E(InK;FPz-+b!?yK<*_dPOaF-VR776o{w9Qx?_W zxr4yg9rh`K1b;sStZb)m4qXiLbr@J}&NN+;8^=9>R@VFeUABMHov(VOM=t&94jF`} z4_Qmk`R7e?`?OzXh8sR#JTG*zh zMjE7Y4y9<3xk1d$P9d*28mwLX>716|C&}L7+E{7=g&qP{byen&G@UMCOr8;GD;Bof zAE0}N`;s~H?rm(Ksz%cSGu;bo34}8oXi>sPZML;;=95Z@G!;GN7URVwHN> zBykyjQloXV-H^H>9UYD9_Ldv3Mnxgzi1b#?jd%;VDpG#i*X|95>!>k#H9B~`cMV<% z7CtWgB;Vh~cpu0rpo0yvnz&?&eZh6%Cs`*VRAL-$JppKcvjos;OrX_r^GXO%r`T9u zpB15+H-YWA=Eq`g|Cl>h-4af4GYM>LbRKP!$^Nz|%KQF#qxjdm11x{$zEZrJ1a|qj z?}ITD%bdHw?(7t6w^EHdC}Q;{vF+|jH#PWV=1#mDQul#9TPBw1AE12b=?B8fl4aXx zRL4AFt1N>K;Fk}PcQ#4tbxfgY6V)SN8A+l)ADbl1J2i%CQRm0VTQKGm#=Q5rbJY`3 z0?{zh`T9OXxpP&%Ja@`pfKJ?(_*DS2r$ps+8T66Ja`_I{eTB&Ctrg!p5=vHF z@cb*tEOPek+bm}=3DhjNv4E|Nn&E6i$%=t(s`sO3Zk5|uz$&7c#F|(OZ26=wL$}bf zC4!ZT-{$H7eczp{N&)pnPdK{egrf}L)p40x^5Upp_^h;dm4B^P9Qdpk8O!i3aZkw> ztW+F znnN^RX$XK$Vra+6gQ@ zI-!36{1s5{IpMEeCKXw3qT2PQ1dUIdK3YR0IX}m zKT$o4IlT+mWQ8wwKXc>N9)bG((a|rvt|D8t;*2P7cEowzUSMl`Wv{nRlXHiCA`H%DJ3aq1$NnS0E}a%V zoo~=>!=0~=%8ayKOo-~|((hwr%H{h+bxb-krD>+g+JO*NS#C%j7sa$D8LyQ`A}|cd zEKuTGi%5K?6Tr$^ee3LEp{*j|o&I^sE$F#Hk>XSST-kuR@{|aDnST>COLIw`29~sX zdVl`&Zb%KuJku?A1wTdEV$3Q(9Xc$7k0Pt=vog{Odw?y`C<|3T2P|XFZ`vUrMpoOS ziJ4U|)hQJ#=Mm&JZS|etyz=|e)0~m?Qa783>!}Mv)b%_EX^U+KVG+$i>wr0C;x^Z`QWaHwa zZoC>pR!`KZeLqBETt4y0-{lpz^4CP47G|MDO+~Qp|9Y*6F zK)WaXrKNarm;`ojx$k?UEWr(_yTJ192s^8bY~$V&%@)0XBlk$|18XUj+hjR5c<~GB z0k9qa4|4cWRCum$9J(H(y=in)@>sNjCa6z_GflXW#m&^~JkJtn}16Ce&-CT`{G3hOktDF9npzpbf zY5}0`jZ)|B2{a|=Fb3s_xd8H#HcHV>#efbas$^i5Rl+(C+SDfZEfOeMd|DnDxepy58RmI5j}cFuPl zZmQSiPI4OXiWUB`S2L8`GGG@^`;n5xQC>Q*O;KkDGK`nMCAJfC)^XFKQ8@>(s2vOM zjJJdyOWxH0l>l2ImAoV;d&@%9VY~5aC9v9df4Ha50YjC>YxkoZV0y{~RCnGFv9ul) z&jQx6TCScxoFyA3*?^uE`@Si5qA_x$$)ZtVo&zJ5_UZOFJL^%9JYYjLat&{10zLk$ z8?W+#b#?g%JTmMOHY{8$0Y?HIv$`(DJ6@peGNebezve;f2vknR4FTPY~mPGD(I#k!<3fvT}K zoSG|+T|1DqYrk*n{be^^?GiD5A|^v8?1;ykPGC!i-bJ@|i@as}?5!0o*(JKL#a|Z7 zdCDGO50@>T-kxv6fbEuEXj>qHq|-@A%U&t@E?Lm$Ta*z8ehREO$G@+)R}5EyZF#r* z_yfSM%-nltbx;Iza;E)pT@3xi4XH!O$sX{}Ret1#)L}p)7yO;Ie{mC4kBr^O#g*L& z^mKOQ0*i34UgVwa5eH98;^+`aQXjA<{h}h%EvnbtmsCHn%cH)7r*Hq7gQp{Sp#9wr zg^x;it(C*8t^`_!j~|mMVTtcrKMnG5T%3Vp6YbU`EB=}|5?)gqN2%;4s_V#GQzzGhmd~St zplho=2@xJNAu>|wYsFq+u`)1L$ZBMPBAGP@3_6M0-4wyT?Hl&)5HnX`oly@AzjWi( zZ9tPZ{nMGfSTo&`IV^MfV4@j{XHtf0-L7|x9A(ie@m7UAwcIc2okLAf zDECFlZ1Cp-VE_+gX1eHGMP{ZxR3F z85Z%W$T|~^MKppwUJUH|gP!Sq@QctTOMqpkO^O4W*%JL^sXSIY)A(vYqsPy?i7M@F z38f|UW6>O{v0Yo;u_DsD40#iqM2)Y|X-ljdQt805?O5v%BHt9<^Jd@V3oUkv&>QugUq)@R^`0m@vMk( zTo$mF`{EBG$DjtoovX5eCEb^JNP83Lkwlu$0eJSIZ%r&-yK;dIbop#^@q64vl?Uv` zok7tG&rv#bPXBbo+I;E8UGI#akSYMQJQ}C?Pr+dUrLFeej@=Hp^VMo#nL8!M<^x+! zX4~Uv3B;;MN}DV@6a|qXRSYQgx_ordAQWqj{5o@B`m8||*-?W=#jI8OH+sHy?Kx0b zV1sKn|ofS`okM>w&dD z_Jg2rmA%!s@efi26?`8#;t{TwGr6m zgZ`do8@nM@CEu9Q?1`%SZP{CrU#+qufr}oR^bACK6Y_@F%Lezp1QEI#`O^-GAw2vX z7C7;$7TEfcHaSn77qN7$1J;x7_h!EY1pv0FZiesakZJ&y9QE$axM1b>loa<&^%&A|3Nk(2zXx%5RhUbO&P7xfLiRD7-iYuzd<+r=sp5up`WNvrsf z-k(6rQQ|GY?vDBHnKGc#+kkZ(6l=-SSo#FW>f7RdR7PEPEZr2cDpC`52ecPUymny6 zj`$u4o}gQ|13NnE9|2TCLG1vRktuxjKtjZe#ZF*{m->-B2S4GG>X71Hhz2Z8RJ(wj z*ek#(&=mNe6<_U$=?uKEnamYE5AS-wUtY_j*!{| z>}rnO$uVh>#HW%5-#N{{mkDPTfr{?f4D0S(wGY@}x2(ekL)0NYX!lDsZ~IXMKJA9o z0TIxiNaN0-AG?k^D5~mO+OMxM2epV}qC=p{fOv-Rv|S96XbyR zD4^V1vU9fnIXV3~CKcQ6bB^XXH&Gpz@i6HJc$M{!zr{5mb5ulk_Qzm(60c4GI~bk! zBcZ8)J>BJRAIWC*Ah4WLKNgLI<2@xxugmw>{{#z;)4$#$aYA2 zi0%P9BO_>ooFE?3>9}|b09KLaZwCLu4XJa0R%N}zb>h{q$XE34*&upr1lWOm(R(*k zKY$h(q&BfG(v7m6!<7Ja?|TECp#1 zVLO~at7JiW1z^#XziqM}zZeD9cO?=e>N#5dJ0PUMst$;Aw?2!~q4UP1^Y%{*lML^1 zKub=~*wv3$*JP@`cMP8^nF|IGudd5n8EpXxqB$Xgc+`(#azZRqfmP3R+monn%JA+K zUV9`&w_>0-XVV~B;+FK&(sx2Ph16})kv($jvkcrTr0xiTx+}L-p2dr`@ubj{<{6iT zB%7)W+cp8_i@@=wW*V5*n` zHs1dbMe0ouW&BLI2qiYK9}@8{Qic&N0Sr}!U=5cTL0`qD9}P+3u}E3j}qiI z8CY%9Ew=0;rvR&7;s-Q415LOH*p^8#8(eAAzq*Mk70|W}F>BqVsQhCyf(R}~-oR0@ z^V(<75&UWiu$(Dzo^&gg+A-ZM1y)oi5j{RaPiMI=sWd=S%VZ~Yg6J!*rEUM3@E947NH)d$-m4GrIiczAf)p z+<2A!J#qc)M+p;dp9Ab+hU@~C8xeWUm9`s|i{T?NH29BhyvhUC6!m9tYnGd+@`3HI z^xeR2(j#tQ<>6U8hKJ%nD#B z(Ve5y5`apE!5Ud(ZHuR8_}&I!8F&0ZH4+hSqYR-WIZiIosb~%;Ca{KTIjejh)nM+a z26X1Ke=aEolbe7ox#8cY+6C2H^F5h2-!Ui-sahGhGa_fjt2#hgy|RmNdmde#4Q2`K zQuG*iKML0XEP18yohup@K@J;%6&DJrk=Rcm)$~0%6!9&9Uvd*wGoai&*)D9DL;LX6 z#yJr`WGy1Lhy2JJ9th_5Bs7;86zni)7_&_)uw!Yyk^9~cx*@eiUagQ$+Z8W?>DmBY z8Ie}VokKa6`?A^!tUVIrykB-Pel6DdHas#m^3G;mNVSXTJ(9ES&(cCYJX>jGv+V@D z{bqQ!(n+y$0^T(vJX;wwi)T3juNVoFVmQVLcqvF&G@EBT0k6Ue&sH|g;W1I{bn_ro!Y$z#uX#rteHM$M-W@&}z)ypM)wt3(QO*!hrmN)N}V7wEV6x10}q z6pm3Z(r@!`J0J1>IUJ+jL%+kn<9x*XcsNGAmwuOj*ZGL|Tj3b>5`C0E>U_-mOgKh4 z^n3h!&d0qEhi9vo=@a}3=l8vpD7QUcEB-6zRqrek zAEPhw7oAtVW)+^TeviJyUvggcM(prx^>O;Y{C}NSy~9X+g8rKS+IiLMLgM%7Z}@MV zSH1Rm;o0hw^kx3C^Qt$7w)qr&g}>sw>Me#8eVYE3|JHfcTWW-3)Mx0c{8i^`-si(H z>JRAe`0t!AcpnMRR-dK6=f8Je^JEzOA^ijYgY%mA5ViRneVxDVyyo3U&L7b~@;^GS zc~6n}-}DXshVz=2g{pm?zRBNoKIBy*=a1=I{4M9(UKQHxPv|@R9p~Gg7miVXO0VF=%4tXoHx9E_{*Qsclo={n_e$o|8sha-*Vpc4kGav^ftfke9vn{@n5BX z=6`nn#Y+g!R)0y~=kGfo^7`@q|Dk{7e|3J~9YW%-=!g76=SSWHy#Gb|H~u&0N8WWL zzC=IfA3Hz7Fo;qAm;Rmq-T4pi1L4`~ujwcJ6X&PiVLbIW^fUgM^HVPc&G%*cPySEm zr(O+e`4##v{x9d}k$(PL`UU^O`MI|l0{>O|CI8a-Z||4kIqGZlKm0#VlIAsO;h_3E zTA=X)4e1p~|2-|#c%h_EXyI7(8YOF-tT`!~_s8L&`UhI1@gmJh)x66_I97d~7Hhm% z(w`2;s(+*<8ZVKz=Y?a{H)yHGOEu>|yhVC=j`}90X`F`ScfzsiTeM8$Wt#Jb_tXr> zs&7-e#_5`~T=QbXvFbaNp>c-htkAqKgk#m~v{K`hlKe_|j(USuX}n5v-t;~a4yu2m zOpP-&Crk6j&2UhCm$Eg^)|?#8yB`P#)ti*7ajv90kbaBuG|rQB%A9aey-oQV=SzBx z9S*ARQGvziblzaj`VPMJpVu{*~5f zyar{SE4^E%L5|3Mox-k>=fHSa!p>nBvDah2v&N810Vv`OPl znp2~B@!_EQ8P#fBE4kHp`#-5p<2p%?BmG}guW`Mk>y2X+24aWg79h>HF7zN}IF+o?R*knxr*`9s6pglNyiM9-6MA`(M(rB63-IA^ zoJ!SbyT;q)jc0l|PA%4GhsHbPo4NSr5{-6hyi+PTjOJXbQHRDInzKvueija@G>tkn z?$n&!n)lb?IJHcpE{(f1XOHG(p%CdBb!*(MIeRrPD-ezY!`i3uJ^`8mWN5Ts9n<)j z0KEVTG&-*FaRF*j^g@jWG#-eQ6u@eYPH22Wfc*f9G&-sANdb1v3dgBpjRrLy6krR0 zH5#4L_>=%w(FtocI<4{PNNt1RI8~z2kj6s-?51#>D%I$W#%BcB37|})vl^cjAO}Nk zokr(0KBqbV%PT`auGeT-<6)$0(ZuB%jc7a~FN_1I(CECz=OaIz9gb6#8eP!%f&fKm zo(&pZ)c9iL9{@ILbV=h&0-TNu$EhlfE^B;QfXAqOwMJJoz7lCbd~}mWqZ*G!`VHTx z(deqiR|Pl~3dgBhjm9({6JRV94yrnh#x)+-oNEzfQm@fjixl75+DP>c8#8C{7iuJD8denl5|eeodvpg z-3-U6of<9Fd7%Is(Qq9aCF`6lz*CHXT^gn6oFc$ke4|sNMLI9iomAaBjZw5)qs2Ne z7T^egE{&GxyhL}F>fSa8+8&M4bWRgsD+<=F(K4Nv39t-3x>uugozn$4jhSGdM$2_x zt~&uQ6>YI!qYRxhklu#$0gYDZyaMTV$jCvBR_eS`$LN0mm3c^`RXVTIoj>>fE*w;c zHOkaEQ+HnTwnO9gXq2UM7SiR=-@O`T>zs}6eKj0ZeH!KHoP%U1q@!P>T%B`~z7Y%u z)e(*Ibk0M1JJLrr%GWs`=@!)Zm_`LU7wAr*?hWF9$2D55^J)QJ4hPkMMnyUo;f0&e zhvU=JQlqsxuN7bzO*E)ciOwYgWMhDz(x_DDQUP}2mD3uP>0G8e z>vZod^vaM%>vdi)Pi(~#XEZ9;xm<^uy^YR1t5Jo{71DQ;c;%c%l{!}n@B~xQutpnn z-k>`hb?@ilI5nbCmCjYtQ+?>E^BPs_T#cGszEs9EP`{9>632h~-L zT6Atfdhzq&pc>O?v(B55?o9~Csd0^3b#B$2ExI>~rn;t4o6cK4 zHR{y4Q(ovp+uqS=x6Zo-7{}O})Tm46E&+-mHFq`Iqw^l!`6I6k^}eT3x6a-2$=Aa{ zbzh^sI`7q;eY*Gga8NzaXur<;CH;HhIQ3AY13DkjorAi!0l$2t(IK4=39tshV~q~$ zd{}pSbgvl-`-w)qI`^Wf_P!7fs;3(D>D-6(<-~BDn$oCW=YILZV~ET%jgIJiM1Uih z0h4q(s`F6+8UZZO>6p&Pq+08RQs{JC=i^e1768dQ4d^@|Pn4tLDLS3d`2;Gy4i7BS z>7>pl<(nJv%~YKRbsiL8E1G7pPN#G}B~|}YIH;EBbXw=rlKxsaPA%1GNarE>MFpfT zO{X(DpAp~^I&_&%XLUX+Kt4X1uG2Z4&*{#mynB$c4MG|bmyY()#I0|bh@PTCHcc6D;!jrI$hTJvhG~bz0Zb&DodwP zok!8w=Qtcx**aa-`Ks=W>E27>pvuu{T<3A!xu$!68xE>mov!PAUDAI6CZW@W&J((G zL-%@7g?ycE>U#oXHe+XI^EIvjsR_71w}ed>O84C zcXjU>G(fRV_jJA|Ko;hRH9Fnb`M$i;f{(7%>4DA<1UQ8OU82)Nogd2h1g$UC>5GVYBC-Q;sgyYnDou2CaRMHC}rR6$J={zOc^1s4CRiV=} zou5hi{U8xKB^jJ#Al(Xi*`U(`gBKXiLc_a>me{CMvcbvnL^^u6N~aWqQv?7HuGVRh z!HW#%HONa)ZPF>#;8ep2cuVknjZTXVUTio^3>ka1IxRJLDV|S8ew|Kf2B+cqyXcB~ zot7EA4CyNa^V8<%W}CcsuchCY@FoyaI33%nAopvra1wUWxQ_ zDAE?4RvEm?z%W{XUu@PX)8I@2ei4pStvY2HoMk{)7h4&I#hfYNX7YWb<`PijXvBAZLv&QgTPzasY8oXB04UoCrI+Yk)VqlV4 zicfUuRBCXkfvGG7jk8CmGK0&|I1TR!2UWLD>kM9pbnbgVAaq)9@Ot@YJ4(4vr*ebK zrLlep0-;ld!4-y6X~>f7fKD3>-e5Qz4G-k&piWf=S4kTAhjgkoxY}?w8D0VigibXE z*GL+KqerJ&gKH(-1p(^Ssm|a!!>KnsP=G$28Vqib^d8iyU#CWc8wEH7;D}C51~(Z_ zvj9PLRHqh$TLkz;IH->4wAtXzlKx3JP94{&)!blPF?4r#SQjP=tx?KF6&fpytZ^!|`e z9R_y@P>m)08J%_+yvuMp4ey&^5IXHPc(>tn8QxCF`8l2T7`#V-768LKbsO9*z#;r( zM5nz5?-gJS3gx^``wZSEfOOsko%S2NUx42Y2h~NL4j6pEa1I(Chhx$$~dmmQG<^Pa2aI%noh?IK4v(_4R3BZsIKcYVDNz9oG@fUn$YQ_!6zj>AN)b5 zL4yaS$Pe((n>w8`_>_DgAOF0i(`kcG3$O~kd0VF;gNF>~Ohm-)=ycZLvy!gCCnj|| zXYe@z&H=cq)3CwA(oRn>knZU;V(^Fn8`1dpbvkeGdFkOHyz)S&3kF{hpcpFQp-vYK zz9_F0fapBZ>5{>hM05QJ973nd246OuD@H^QJ<(~@;86jvcz>$XRfDfe`s?AKn$l^^ z;4%4t8xE>xI*l7VE^YZ77=%IB48A5!bsjCTz@X~}Ul-soT7RKI69!KRkcrk$Ht2@I zH>8lC0f8{+rolHQ{k?EdEi&kq!M7w0x}R#$ZG&%%hWR$=gF$x;z9YTyW;jkQF=*1@ zNl7n2vn(~}uEBSuGltNTX$IXh_?`joT!^*sGK20Ld|yVwMcI-t=z+lx43Nr3tU{L? z^w8jk^28z3E5o2i20xN-Jb+xUFzB(tj}7NjUL(>g4SHhm6Qs96QLZxRsliWW8v9Z> zPGuT2W$=_#YXYUpGU%DX&!l1Y1IRWg$>byxzytg<$Djo!FAyLZPvjc3(By>z+<>CW zGbq{QWYbA8y$^-sRK7urOkQL*52eLrjzI`#`L|~prs}+ zMLGlNB7@RQPBWcPMW*{=gO-`R%yi!8P2h)X3`#dS-E@|lBG+pT$}l;@bXJ(&H9Sya z&`Oh6n$9ZIivfQyDAVLjNrN|)8I)ymmg!_i3bf9k9Fue816bUzHz?QSTq*E=NNBl1 zc_!xx@R#8@Rbf!R$@!*JU`FP_N`nebE)?Ld5D0@-o4i_pRYD*PDl)l9fO1G}l|jWO z7YlF(GFffV8k5(U&e}*RHW^f6a*64bnh_RLV^EpNWddN%sx@ex$?HsKz3G8#*BMl9 za=GbLnBEXxs5hw6o~~!k{LTn@p$K^!_9qRILWJnA~DIn6%$y-dP&GhDlgKDcmTTR|-I@?U|li&{qwVT{7=`s|l-JtCzZ#SJC zrdI@M+HTNJlXsd@aAT$-5vu!x!ZL1n%@1ma8T_wXrIaZOy>vQ1q`AtgZ7)e-*gU`o)?Z&dki{g z@d4jOdS zc}Rd0n7xk~bjIW}0$jj!aNMA?CZ9E(bEemiats(WZ1S)GC1|}92920JVmjv|gY~3A z7filjf{7i$=pHoaqRAIc=aT7RS#-*v%O+noohzn?b=GNvMok_yovWso1_2l{Xw2j> z0lonSVbHkAY7#r5-WprpY%2 zXa;cJpj#&25}*RW1%qyzd|QgW5DTA+2Hi3Fj{H@&DlZu{Y4W7$+%>&pc;&J|_e{Pg zK(}l|7K(H=#j~fq~4}nRTw9(>?NbmU|n1o4H7FSu$ zr@S&~-At3JEv`oTjvQ>5w8`R47N*c*h*7plH5S(h&?7{`q*{w>Elk3TQOaDC>MX94 zC!PVwGpXL{?Yk62wZ!~G2 z#rrI0zvWG#NL3~su=s!gsn9glCLOf+pa4)Dn@l=n@gXVmeJIr$lMY*aSRQCXwQEi4 zvAD-_dMyv@<2sZ2EbgMy51?ISs%SCkgvBSMGl$U^n@u`t@kz@Ww7i3OqSd5R7N4>(-BjU; zEhe3|__P2wA^L454Ou*7VY;bC#kQJs#^N&q4C0AxCY`nTtN@L&Az{)vi_clku;tyu zU$&bxV)2LoyP&Ohm~`Ia^CEU5=+T`fU9k9q<@}MC4pHtf>7vCKE$5QuZO3rhWzuDf zFAJ~-UDj#R6^pM3fK}~olSVBbwVbP#SA!ARWzv|%V*=FUjXfrfTRd(#*CLYJZPIm% zuUpQ94C)$qz@OO1A0w*Xz@bSjrOhjCknrz=S(voS z=2enjj-OmKDbwam+sU#41l1*zvTe?`o#mSMFCZ2s<=C8KJGr*ER)~d3c{bW!LIU~_?uxlulO)uck33vEmpBPiyWNvmyMZ97G_w*nOzH>ud>VjJ9~2;aPB(i)rB z*dQaXg@fw4No#FhYopiR3( z=)GGemD^k{09xj@NfkC%*ci;RqkhMvN}DTf4Am?-;4o=}%^PgU;}USgyC!Y4d86$l zdexr=uP~{~<|-S*ED59NzDdF9KTWo%)#g^DcOso)(H5JxAiZCB zg+*;Px7p5C+xv%bP^DV5&E{>kGp2hV1Ff*A-R5>1sx%8yx5T3DHg8AE4Sp&dR7)+| zVe<~#dCuz;Qen|fn|I1+$@vaQg+(1UcgP5P2z{Pz(Jq^J*;x9?VsW`eoi=w0uopmv zMZ0a@ZDXk>x?qJxT{d?KP$~Np7VWWlk4P?xxyqt$o4chQrqH;V7VWipuYB_?RBx6= z`)uAPV)!y>g+=>q-Y;n}eaW%tfXxSN=U_ytaxFS!^C80-Mbj0Q(0_*`$WYJNZk4iOi z@sDDQj@f)nRLTDN;hEjnrQ zN!uB;J$#|eqEj}Xk~CI)>nu8L^J&|;A;*D1wces3n}_g=oIeDuu;`40 z7M->EEYgjygyU4DMdxfjCmnhQZN0&wVVj3-XT*+d25q$Hyv^qYkkg(ji!RuFL4Z~0 zjcSW7+I-P=N;E0tCW|iFd)1!f~q8qA8oFM7Yjk*|FQAXEr|*pc!1D%c7(JCk4O_egH0E(SiUkkn~T(ajM&* zg#lg|z$D#^h0b1!k^`I^a8d%^`@^wnpGAuTyeQzj=(*uowcn!D0H-4P1uzMV76*87 z0L;A?Eqc(RB>`R%aI#IWSD1uFO9Q+#fD&EB7&>fGT7c66&ayzndZovr^Z=*J6T30{ z_FA+&z{>*|mZzZX`z*=`a7F;5O!!K_MJoclLI9atk65%az$*o~D*F=_tqSle0j|vo z$Esr%Wd=Ai;C#gUA$WvESpm+Hf25({0~TcmI6DA^bRW`n!lIl2=LmpV?xaPz0nQCz zCVeg(rv@#`3vgZldUgU|IAu|Ofb#`Nfyke>s35=v0u17bA&UwFTqwW}{Ns#8s{_0` z;JoJ5V-TISs3^ci0p}GgdxGkmMa2OwMq19QhAmnX;57kE_dR#9>i&fU6^=LQ9NWv?;)wNXtQ{H)~$y*jR1-J?61`M9t7BvUBIp74mQ%K*js3pKH$lr>Fn6zkffHx!EjOqTa zMXdpD6_NQ07=%Sz0=z}in}tDG)E3~jfRn1rCd~tjwgz}Bey|>^wTBjM3-GppvqSfi z&@hiIYXARedhh7Ep6xtrvE4JL&3xw^%KH4%)AJ7a4_J(z;7K=Ue^jROM(L|@6`Txs zQu^++%)j~yP6a$w`-8Njp@P!^Pb=_TSwsbA0-n)nzd{VngbL0EJRA7$mNQtjW?}{B z0-h7O`&-r2Ose2~!1ICsi}H_zK~&Hlusskmwp1BJ1s4KdP+*Vr)RYP?2D}&uWB3zc z5EWbscuD1_QiW+1bOh`Ogum^QN=~ofa=^<9td(ZYsGu`or!?!VFou~GTnTt3@K=NK zpl(c5a4q091$3vPse-P6U4cJ8wB~TnuHbsW>k9OW*37BkM!*|^zZsM=fO9Lj74VkI z;``34;C8^AdIRQB|;9LE}9T|(Y6}$`hF7WSz zQuxBU3O)q<5cuziM{3Rb3O)w>DDrku^9>bz3iwIw!$&>hsNi$J&oWaE=@CZ-Ujlv+ zxs6q4HdiphaDI~}?_zmF?6^t?*rLsn>ZLeUo;b

2?S;08NaS9YwXLeOkZ&+{q;UQ(a4Cd|% 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 z

Nx+X@V#%GJ1Bst{wX{QO->@v!)Q8) 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 From 818de275c0170dce86f2e4c6b3c70fbbea99bf94 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Mon, 4 Dec 2023 13:31:21 -0500 Subject: [PATCH 145/313] doc: add release notes for PGO improvements For #61577. For #61422. Change-Id: I575bf657fb36bd7103c73620bb2371d0f490af20 Reviewed-on: https://go-review.googlesource.com/c/go/+/546935 Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI --- doc/go1.22.html | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 7ffe434821..4c180fd653 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -124,7 +124,14 @@ Do not send CLs removing the interior tags from such phrases.

Compiler

- TODO: complete this section, or delete if not needed + TODO: complete this section. +

+ +

+ Profile-guided Optimization (PGO) builds + can now devirtualize a higher proportion of calls than previously possible. + Most programs from a representative set of Go programs now see between 2 and + 14% improvement from enabling PGO.

Linker

From 098f059d077d01d9151e2e76901f62a7f2d52fec Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Mon, 4 Dec 2023 17:47:52 -0500 Subject: [PATCH 146/313] runtime: require cgo for cgo gdb test Fixes #64542. Change-Id: Ic0dc37dfefac83fd3aab6dacfec58b8ee9105fbd Reviewed-on: https://go-review.googlesource.com/c/go/+/547135 TryBot-Result: Gopher Robot Run-TryBot: Michael Pratt Auto-Submit: Michael Pratt Commit-Queue: Michael Pratt Reviewed-by: Cherry Mui Reviewed-by: Bryan Mills --- src/runtime/runtime-gdb_unix_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/runtime/runtime-gdb_unix_test.go b/src/runtime/runtime-gdb_unix_test.go index 23eb3e2362..a1f2401a6e 100644 --- a/src/runtime/runtime-gdb_unix_test.go +++ b/src/runtime/runtime-gdb_unix_test.go @@ -296,6 +296,7 @@ func TestGdbCoreCrashThreadBacktrace(t *testing.T) { t.Skip("Backtrace through signal handler only works on 386 and amd64") } + testenv.MustHaveCGO(t) checkGdbEnvironment(t) t.Parallel() checkGdbVersion(t) From 16d3040a84be821d801b75bd1a3d8ab4cc89ee36 Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Thu, 30 Nov 2023 22:59:04 -0800 Subject: [PATCH 147/313] maps: fix aliasing problems with Clone Make sure to alloc+copy large keys and values instead of aliasing them, when they might be updated by a future assignment. Fixes #64474 Change-Id: Ie2226a81cf3897e4e2ee24472f2966d397ace53f Reviewed-on: https://go-review.googlesource.com/c/go/+/546515 Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall Reviewed-by: Mauri de Souza Meneguzzo --- src/maps/maps_test.go | 58 +++++++++++++++++++++++++++++++++++++++++++ src/runtime/map.go | 22 +++++++++++++--- 2 files changed, 76 insertions(+), 4 deletions(-) diff --git a/src/maps/maps_test.go b/src/maps/maps_test.go index 5e3f9ca03b..fa30fe8c2b 100644 --- a/src/maps/maps_test.go +++ b/src/maps/maps_test.go @@ -182,3 +182,61 @@ func TestCloneWithMapAssign(t *testing.T) { } } } + +func TestCloneLarge(t *testing.T) { + // See issue 64474. + type K [17]float64 // > 128 bytes + type V [17]float64 + + var zero float64 + negZero := -zero + + for tst := 0; tst < 3; tst++ { + // Initialize m with a key and value. + m := map[K]V{} + var k1 K + var v1 V + m[k1] = v1 + + switch tst { + case 0: // nothing, just a 1-entry map + case 1: + // Add more entries to make it 2 buckets + // 1 entry already + // 7 more fill up 1 bucket + // 1 more to grow to 2 buckets + for i := 0; i < 7+1; i++ { + m[K{float64(i) + 1}] = V{} + } + case 2: + // Capture the map mid-grow + // 1 entry already + // 7 more fill up 1 bucket + // 5 more (13 total) fill up 2 buckets + // 13 more (26 total) fill up 4 buckets + // 1 more to start the 4->8 bucket grow + for i := 0; i < 7+5+13+1; i++ { + m[K{float64(i) + 1}] = V{} + } + } + + // Clone m, which should freeze the map's contents. + c := Clone(m) + + // Update m with new key and value. + k2, v2 := k1, v1 + k2[0] = negZero + v2[0] = 1.0 + m[k2] = v2 + + // Make sure c still has its old key and value. + for k, v := range c { + if math.Signbit(k[0]) { + t.Errorf("tst%d: sign bit of key changed; got %v want %v", tst, k, k1) + } + if v != v1 { + t.Errorf("tst%d: value changed; got %v want %v", tst, v, v1) + } + } + } +} diff --git a/src/runtime/map.go b/src/runtime/map.go index 7048949073..11daeb7568 100644 --- a/src/runtime/map.go +++ b/src/runtime/map.go @@ -1480,12 +1480,24 @@ func moveToBmap(t *maptype, h *hmap, dst *bmap, pos int, src *bmap) (*bmap, int) dst.tophash[pos] = src.tophash[i] if t.IndirectKey() { - *(*unsafe.Pointer)(dstK) = *(*unsafe.Pointer)(srcK) + srcK = *(*unsafe.Pointer)(srcK) + if t.NeedKeyUpdate() { + kStore := newobject(t.Key) + typedmemmove(t.Key, kStore, srcK) + srcK = kStore + } + // Note: if NeedKeyUpdate is false, then the memory + // used to store the key is immutable, so we can share + // it between the original map and its clone. + *(*unsafe.Pointer)(dstK) = srcK } else { typedmemmove(t.Key, dstK, srcK) } if t.IndirectElem() { - *(*unsafe.Pointer)(dstEle) = *(*unsafe.Pointer)(srcEle) + srcEle = *(*unsafe.Pointer)(srcEle) + eStore := newobject(t.Elem) + typedmemmove(t.Elem, eStore, srcEle) + *(*unsafe.Pointer)(dstEle) = eStore } else { typedmemmove(t.Elem, dstEle, srcEle) } @@ -1509,14 +1521,14 @@ func mapclone2(t *maptype, src *hmap) *hmap { fatal("concurrent map clone and map write") } - if src.B == 0 { + if src.B == 0 && !(t.IndirectKey() && t.NeedKeyUpdate()) && !t.IndirectElem() { + // Quick copy for small maps. dst.buckets = newobject(t.Bucket) dst.count = src.count typedmemmove(t.Bucket, dst.buckets, src.buckets) return dst } - //src.B != 0 if dst.B == 0 { dst.buckets = newobject(t.Bucket) } @@ -1564,6 +1576,8 @@ func mapclone2(t *maptype, src *hmap) *hmap { continue } + // oldB < dst.B, so a single source bucket may go to multiple destination buckets. + // Process entries one at a time. for srcBmap != nil { // move from oldBlucket to new bucket for i := uintptr(0); i < bucketCnt; i++ { From 285ef16b3872faccb877abaef5e481a630acdaf2 Mon Sep 17 00:00:00 2001 From: Damien Neil Date: Tue, 7 Nov 2023 10:47:56 -0800 Subject: [PATCH 148/313] net/http: limit chunked data overhead The chunked transfer encoding adds some overhead to the content transferred. When writing one byte per chunk, for example, there are five bytes of overhead per byte of data transferred: "1\r\nX\r\n" to send "X". Chunks may include "chunk extensions", which we skip over and do not use. For example: "1;chunk extension here\r\nX\r\n". A malicious sender can use chunk extensions to add about 4k of overhead per byte of data. (The maximum chunk header line size we will accept.) Track the amount of overhead read in chunked data, and produce an error if it seems excessive. Fixes #64433 Fixes CVE-2023-39326 Change-Id: I40f8d70eb6f9575fb43f506eb19132ccedafcf39 Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/2076135 Reviewed-by: Tatiana Bradley Reviewed-by: Roland Shoemaker Reviewed-on: https://go-review.googlesource.com/c/go/+/547335 Reviewed-by: Dmitri Shuralyov Reviewed-by: Dmitri Shuralyov LUCI-TryBot-Result: Go LUCI --- src/net/http/internal/chunked.go | 34 ++++++++++++--- src/net/http/internal/chunked_test.go | 59 +++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 6 deletions(-) diff --git a/src/net/http/internal/chunked.go b/src/net/http/internal/chunked.go index 5a174415dc..aad8e5aa09 100644 --- a/src/net/http/internal/chunked.go +++ b/src/net/http/internal/chunked.go @@ -39,7 +39,8 @@ type chunkedReader struct { n uint64 // unread bytes in chunk err error buf [2]byte - checkEnd bool // whether need to check for \r\n chunk footer + checkEnd bool // whether need to check for \r\n chunk footer + excess int64 // "excessive" chunk overhead, for malicious sender detection } func (cr *chunkedReader) beginChunk() { @@ -49,10 +50,36 @@ func (cr *chunkedReader) beginChunk() { if cr.err != nil { return } + cr.excess += int64(len(line)) + 2 // header, plus \r\n after the chunk data + line = trimTrailingWhitespace(line) + line, cr.err = removeChunkExtension(line) + if cr.err != nil { + return + } cr.n, cr.err = parseHexUint(line) if cr.err != nil { return } + // A sender who sends one byte per chunk will send 5 bytes of overhead + // for every byte of data. ("1\r\nX\r\n" to send "X".) + // We want to allow this, since streaming a byte at a time can be legitimate. + // + // A sender can use chunk extensions to add arbitrary amounts of additional + // data per byte read. ("1;very long extension\r\nX\r\n" to send "X".) + // We don't want to disallow extensions (although we discard them), + // but we also don't want to allow a sender to reduce the signal/noise ratio + // arbitrarily. + // + // We track the amount of excess overhead read, + // and produce an error if it grows too large. + // + // Currently, we say that we're willing to accept 16 bytes of overhead per chunk, + // plus twice the amount of real data in the chunk. + cr.excess -= 16 + (2 * int64(cr.n)) + cr.excess = max(cr.excess, 0) + if cr.excess > 16*1024 { + cr.err = errors.New("chunked encoding contains too much non-data") + } if cr.n == 0 { cr.err = io.EOF } @@ -140,11 +167,6 @@ func readChunkLine(b *bufio.Reader) ([]byte, error) { if len(p) >= maxLineLength { return nil, ErrLineTooLong } - p = trimTrailingWhitespace(p) - p, err = removeChunkExtension(p) - if err != nil { - return nil, err - } return p, nil } diff --git a/src/net/http/internal/chunked_test.go b/src/net/http/internal/chunked_test.go index 5e29a786dd..b99090c1f8 100644 --- a/src/net/http/internal/chunked_test.go +++ b/src/net/http/internal/chunked_test.go @@ -239,3 +239,62 @@ func TestChunkEndReadError(t *testing.T) { t.Errorf("expected %v, got %v", readErr, err) } } + +func TestChunkReaderTooMuchOverhead(t *testing.T) { + // If the sender is sending 100x as many chunk header bytes as chunk data, + // we should reject the stream at some point. + chunk := []byte("1;") + for i := 0; i < 100; i++ { + chunk = append(chunk, 'a') // chunk extension + } + chunk = append(chunk, "\r\nX\r\n"...) + const bodylen = 1 << 20 + r := NewChunkedReader(&funcReader{f: func(i int) ([]byte, error) { + if i < bodylen { + return chunk, nil + } + return []byte("0\r\n"), nil + }}) + _, err := io.ReadAll(r) + if err == nil { + t.Fatalf("successfully read body with excessive overhead; want error") + } +} + +func TestChunkReaderByteAtATime(t *testing.T) { + // Sending one byte per chunk should not trip the excess-overhead detection. + const bodylen = 1 << 20 + r := NewChunkedReader(&funcReader{f: func(i int) ([]byte, error) { + if i < bodylen { + return []byte("1\r\nX\r\n"), nil + } + return []byte("0\r\n"), nil + }}) + got, err := io.ReadAll(r) + if err != nil { + t.Errorf("unexpected error: %v", err) + } + if len(got) != bodylen { + t.Errorf("read %v bytes, want %v", len(got), bodylen) + } +} + +type funcReader struct { + f func(iteration int) ([]byte, error) + i int + b []byte + err error +} + +func (r *funcReader) Read(p []byte) (n int, err error) { + if len(r.b) == 0 && r.err == nil { + r.b, r.err = r.f(r.i) + r.i++ + } + n = copy(p, r.b) + r.b = r.b[n:] + if len(r.b) > 0 { + return n, nil + } + return n, r.err +} From af5d544b6d847e1610132aa6301afd2c2cd77d9f Mon Sep 17 00:00:00 2001 From: Jes Cok Date: Tue, 5 Dec 2023 04:12:45 +0000 Subject: [PATCH 149/313] log/slog: correct doc examples for Handler.WithGroup Fixes #64519 Change-Id: Iaea5de74402b77eb5a42979bd3baa1276b13d585 GitHub-Last-Rev: 5080a257b2d7aa7c4333d05bdef0b5dcbb0449ed GitHub-Pull-Request: golang/go#64551 Reviewed-on: https://go-review.googlesource.com/c/go/+/547215 Reviewed-by: Bryan Mills Reviewed-by: Jonathan Amsterdam Run-TryBot: Jes Cok TryBot-Result: Gopher Robot --- src/log/slog/handler.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/log/slog/handler.go b/src/log/slog/handler.go index 2182bfb609..2ff85b582e 100644 --- a/src/log/slog/handler.go +++ b/src/log/slog/handler.go @@ -76,11 +76,11 @@ type Handler interface { // A Handler should treat WithGroup as starting a Group of Attrs that ends // at the end of the log event. That is, // - // logger.WithGroup("s").LogAttrs(level, msg, slog.Int("a", 1), slog.Int("b", 2)) + // logger.WithGroup("s").LogAttrs(ctx, level, msg, slog.Int("a", 1), slog.Int("b", 2)) // // should behave like // - // logger.LogAttrs(level, msg, slog.Group("s", slog.Int("a", 1), slog.Int("b", 2))) + // logger.LogAttrs(ctx, level, msg, slog.Group("s", slog.Int("a", 1), slog.Int("b", 2))) // // If the name is empty, WithGroup returns the receiver. WithGroup(name string) Handler From 3822e161a30ff4c6e288e10dbf3345a61ce1c3ff Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Mon, 4 Dec 2023 10:45:50 -0800 Subject: [PATCH 150/313] doc: add release note for math/big.Rat.FloatPrec For #50489. Change-Id: I4544a24327196eb3ed62af64ae5ddb1f60441d12 Reviewed-on: https://go-review.googlesource.com/c/go/+/546357 Reviewed-by: Alan Donovan Auto-Submit: Robert Griesemer Reviewed-by: Robert Griesemer TryBot-Bypass: Robert Griesemer --- doc/go1.22.html | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 4c180fd653..fdc9827bb2 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -437,12 +437,10 @@ Do not send CLs removing the interior tags from such phrases.
math/big
-

- TODO: https://go.dev/issue/50489: Rat: add FloatPrec() (int, bool) -

- -

- TODO: https://go.dev/cl/539299: math/big: implement Rat.FloatPrec; modified api/next/50489.txt +

+ The new method Rat.FloatPrec computes the number of fractional decimal digits + required to represent a rational number accurately as a floating-point number, and whether accurate decimal representation + is possible in the first place.

From 3d2645f337091e8cd3f6f0979716fa6cd124ffaa Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Tue, 5 Dec 2023 12:30:19 -0500 Subject: [PATCH 151/313] doc/go1.22: document enabling PIE by default on darwin/amd64 Updates #61229. For #61422. Change-Id: I6cf8169c1e310e0de734250dbe04fb36e14728d9 Reviewed-on: https://go-review.googlesource.com/c/go/+/547455 Reviewed-by: Than McIntosh LUCI-TryBot-Result: Go LUCI --- doc/go1.22.html | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index fdc9827bb2..1393be1dc9 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -140,11 +140,6 @@ Do not send CLs removing the interior tags from such phrases. TODO: https://go.dev/issue/62577: cmd/link, cmd/go: emit split DWARF on darwin

- -

- -

-

TODO: complete this section, or delete if not needed

@@ -651,6 +646,16 @@ Do not send CLs removing the interior tags from such phrases.

Ports

+

Darwin

+

+ On macOS on 64-bit x86 architecture (the darwin/amd64 port), + the Go toolchain now generates position-independent executables (PIE) by default. + Non-PIE binaries can be generated by specifying the -buildmode=exe + build flag. + On 64-bit ARM-based macOS (the darwin/arm64 port), + the Go toolchain already generates PIE by default. +

+

Arm

The GOARM environment variable now allows you to select whether to use software or hardware floating point. From c915215af65897cc9cffed75630cbfbc6b2462cc Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Tue, 5 Dec 2023 17:31:34 +0000 Subject: [PATCH 152/313] runtime: add the disablethp GODEBUG setting Go 1.21.1 and Go 1.22 have ceased working around an issue with Linux kernel defaults for transparent huge pages that can result in excessive memory overheads. (https://bugzilla.kernel.org/show_bug.cgi?id=93111) Many Linux distributions disable huge pages altogether these days, so this problem isn't quite as far-reaching as it used to be. Also, the problem only affects Go programs with very particular memory usage patterns. That being said, because the runtime used to actively deal with this problem (but with some unpredictable behavior), it's preventing users that don't have a lot of control over their execution environment from upgrading to Go beyond Go 1.20. This change adds a GODEBUG to smooth over the transition. The GODEBUG setting disables transparent huge pages for all heap memory on Linux, which is much more predictable than restoring the old behavior. Fixes #64332. Change-Id: I73b1894337f0f0b1a5a17b90da1221e118e0b145 Reviewed-on: https://go-review.googlesource.com/c/go/+/547475 Reviewed-by: Michael Pratt Auto-Submit: Michael Knyszek LUCI-TryBot-Result: Go LUCI --- doc/godebug.md | 13 +++++++++++++ src/runtime/extern.go | 7 +++++++ src/runtime/mem_linux.go | 8 ++++++++ src/runtime/runtime1.go | 2 ++ 4 files changed, 30 insertions(+) diff --git a/doc/godebug.md b/doc/godebug.md index 50033b6f17..f7baea30b2 100644 --- a/doc/godebug.md +++ b/doc/godebug.md @@ -165,6 +165,19 @@ when the connection supports neither TLS 1.3 nor Extended Master Secret (implemented in Go 1.21). It can be reenabled with the [`tlsunsafeekm` setting](/pkg/crypto/tls/#ConnectionState.ExportKeyingMaterial). +Go 1.22 changed how the runtime interacts with transparent huge pages on Linux. +In particular, a common default Linux kernel configuration can result in +significant memory overheads, and Go 1.22 no longer works around this default. +To work around this issue without adjusting kernel settings, transparent huge +pages can be disabled for Go memory with the +[`disablethp` setting](/pkg/runtime#hdr-Environment_Variable). +This behavior was backported to Go 1.21.1, but the setting is only available +starting with Go 1.21.6. +This setting may be removed in a future release, and users impacted by this issue +should adjust their Linux configuration according to the recommendations in the +[GC guide](/doc/gc-guide#Linux_transparent_huge_pages), or switch to a Linux +distribution that disables transparent huge pages altogether. + ### Go 1.21 Go 1.21 made it a run-time error to call `panic` with a nil interface value, diff --git a/src/runtime/extern.go b/src/runtime/extern.go index d199720b9b..03050df766 100644 --- a/src/runtime/extern.go +++ b/src/runtime/extern.go @@ -55,6 +55,13 @@ It is a comma-separated list of name=val pairs setting these named variables: cgocheck mode can be enabled using GOEXPERIMENT (which requires a rebuild), see https://pkg.go.dev/internal/goexperiment for details. + disablethp: setting disablethp=1 on Linux disables transparent huge pages for the heap. + It has no effect on other platforms. disablethp is meant for compatibility with versions + of Go before 1.21, which stopped working around a Linux kernel default that can result + in significant memory overuse. See https://go.dev/issue/64332. This setting will be + removed in a future release, so operators should tweak their Linux configuration to suit + their needs before then. See https://go.dev/doc/gc-guide#Linux_transparent_huge_pages. + dontfreezetheworld: by default, the start of a fatal panic or throw "freezes the world", preempting all threads to stop all running goroutines, which makes it possible to traceback all goroutines, and diff --git a/src/runtime/mem_linux.go b/src/runtime/mem_linux.go index c9823d3011..d63c38c209 100644 --- a/src/runtime/mem_linux.go +++ b/src/runtime/mem_linux.go @@ -170,4 +170,12 @@ func sysMapOS(v unsafe.Pointer, n uintptr) { print("runtime: mmap(", v, ", ", n, ") returned ", p, ", ", err, "\n") throw("runtime: cannot map pages in arena address space") } + + // Disable huge pages if the GODEBUG for it is set. + // + // Note that there are a few sysHugePage calls that can override this, but + // they're all for GC metadata. + if debug.disablethp != 0 { + sysNoHugePageOS(v, n) + } } diff --git a/src/runtime/runtime1.go b/src/runtime/runtime1.go index 877d94eef2..087d5ebce7 100644 --- a/src/runtime/runtime1.go +++ b/src/runtime/runtime1.go @@ -309,6 +309,7 @@ type dbgVar struct { var debug struct { cgocheck int32 clobberfree int32 + disablethp int32 dontfreezetheworld int32 efence int32 gccheckmark int32 @@ -344,6 +345,7 @@ var dbgvars = []*dbgVar{ {name: "allocfreetrace", value: &debug.allocfreetrace}, {name: "clobberfree", value: &debug.clobberfree}, {name: "cgocheck", value: &debug.cgocheck}, + {name: "disablethp", value: &debug.disablethp}, {name: "dontfreezetheworld", value: &debug.dontfreezetheworld}, {name: "efence", value: &debug.efence}, {name: "gccheckmark", value: &debug.gccheckmark}, From 6d7b3c8cd15794811949bb1ca12172eb35ace6ab Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Wed, 29 Nov 2023 22:18:32 +0000 Subject: [PATCH 153/313] internal/trace/v2: handle thread ID reuse correctly To begin with, CL 545515 made the trace parser tolerant of GoCreateSyscall having a P, but that was wrong. Because dropm trashes the M's syscalltick, that case should never be possible. So the first thing this change does is it rewrites the test that CL introduced to expect a failure instead of a success. What I'd misinterpreted as a case that should be allowed was actually the same as the other issues causing #64060, which is that the parser doesn't correctly implement what happens to Ps when a thread calls back into Go on non-pthread platforms, and what happens when a thread dies on pthread platorms (or more succinctly, what the runtime does when it calls dropm). Specifically, the GoDestroySyscall event implies that if any P is still running on that M when it's called, that the P stops running. This is what is intended by the runtime trashing the M's syscalltick; when it calls back into Go, the tracer models that thread as obtaining a new P from scratch. Handling this incorrectly manifests in one of two ways. On pthread platforms, GoDestroySyscall is only emitted when a C thread that previously called into Go is destroyed. However, that thread ID can be reused. Because we have no thread events, whether it's the same thread or not is totally ambiguous to the tracer. Therefore, the tracer may observe a thread that previously died try to start running with a new P under the same identity. The association to the old P is still intact because the ID is the same, and the tracer gets confused -- it appears as if two Ps are running on the same M! On non-pthread platforms, GoDestroySyscall is emitted on every return to C from Go code. In this case, the same thread with the same identity is naturally going to keep calling back into Go. But again, since the runtime trashes syscalltick in dropm, it's always going to acquire a P from the tracer's perspective. But if this is a different P than before, just like the pthread case, the parser is going to get confused, since it looks like two Ps are running on the same M! The case that CL 545515 actually handled was actually the non-pthread case, specifically where the same P is reacquired by an M calling back into Go. In this case, if we tolerate having a P, then what we'll observe is the M stealing its own P from itself, then running with it. Now that we know what the problem is, how do we fix it? This change addresses the problem by emitting an extra event when encountering a GoDestroySyscall with an active P in its context. In this case, it emits an additional ProcSteal event to steal from itself, indicating that the P stopped running. This removes any association between that M and that P, resolving any ambiguity in the tracer. There's one other minor detail that needs to be worked out, and that's what happens to any *real* ProcSteal event that stole the P we're now emitting an extra ProcSteal event for. Since, this event is going to look for an M that may have moved on already and the P at this point is already idle. Luckily, we have *exactly* the right fix for this. The handler for GoDestroySyscall now moves any active P it has to the ProcSyscallAbandoned state, indicating that we've lost information about the P and that it should be treated as already idle. Conceptually this all makes sense: this is a P in _Psyscall that has been abandoned by the M it was previously bound to. It's unfortunate how complicated this has all ended up being, but we can take a closer look at that in the future. Fixes #64060. Change-Id: Ie9e6eb9cf738607617446e3487392643656069a2 Reviewed-on: https://go-review.googlesource.com/c/go/+/546096 Reviewed-by: Michael Pratt TryBot-Result: Gopher Robot LUCI-TryBot-Result: Go LUCI Run-TryBot: Michael Knyszek Auto-Submit: Michael Knyszek --- src/internal/trace/v2/order.go | 68 ++++++++++++++++++- src/internal/trace/v2/reader.go | 5 ++ .../go122-create-syscall-reuse-thread-id.go | 61 +++++++++++++++++ .../generators/go122-create-syscall-with-p.go | 10 ++- .../go122-create-syscall-reuse-thread-id.test | 23 +++++++ .../tests/go122-create-syscall-with-p.test | 24 +++---- src/internal/trace/v2/testtrace/validation.go | 2 +- 7 files changed, 171 insertions(+), 22 deletions(-) create mode 100644 src/internal/trace/v2/testdata/generators/go122-create-syscall-reuse-thread-id.go create mode 100644 src/internal/trace/v2/testdata/tests/go122-create-syscall-reuse-thread-id.test diff --git a/src/internal/trace/v2/order.go b/src/internal/trace/v2/order.go index bfc2c5c44d..e1abddca6c 100644 --- a/src/internal/trace/v2/order.go +++ b/src/internal/trace/v2/order.go @@ -23,6 +23,23 @@ type ordering struct { gcSeq uint64 gcState gcState initialGen uint64 + + // Some events like GoDestroySyscall produce two events instead of one. + // extraEvent is this extra space. advance must not be called unless + // the extraEvent has been consumed with consumeExtraEvent. + // + // TODO(mknyszek): Replace this with a more formal queue. + extraEvent Event +} + +// consumeExtraEvent consumes the extra event. +func (o *ordering) consumeExtraEvent() Event { + if o.extraEvent.Kind() == EventBad { + return Event{} + } + r := o.extraEvent + o.extraEvent = Event{} + return r } // advance checks if it's valid to proceed with ev which came from thread m. @@ -83,6 +100,12 @@ func (o *ordering) advance(ev *baseEvent, evt *evTable, m ThreadID, gen uint64) // we haven't lost the relevant information. Promote the status and advance. oldState = ProcRunning ev.args[1] = uint64(go122.ProcSyscall) + } else if status == go122.ProcSyscallAbandoned && s.status == go122.ProcSyscallAbandoned { + // If we're passing through ProcSyscallAbandoned, then there's no promotion + // to do. We've lost the M that this P is associated with. However it got there, + // it's going to appear as idle in the API, so pass through as idle. + oldState = ProcIdle + ev.args[1] = uint64(go122.ProcSyscallAbandoned) } else if s.status != status { return curCtx, false, fmt.Errorf("inconsistent status for proc %d: old %v vs. new %v", pid, s.status, status) } @@ -101,9 +124,13 @@ func (o *ordering) advance(ev *baseEvent, evt *evTable, m ThreadID, gen uint64) if status == go122.ProcRunning || status == go122.ProcSyscall { newCtx.P = pid } - // Set the current context to the state of the M current running this G. Otherwise - // we'll emit a Running -> Running event that doesn't correspond to the right M. - if status == go122.ProcSyscallAbandoned && oldState != ProcUndetermined { + // If we're advancing through ProcSyscallAbandoned *but* oldState is running then we've + // promoted it to ProcSyscall. However, because it's ProcSyscallAbandoned, we know this + // P is about to get stolen and its status very likely isn't being emitted by the same + // thread it was bound to. Since this status is Running -> Running and Running is binding, + // we need to make sure we emit it in the right context: the context to which it is bound. + // Find it, and set our current context to it. + if status == go122.ProcSyscallAbandoned && oldState == ProcRunning { // N.B. This is slow but it should be fairly rare. found := false for mid, ms := range o.mStates { @@ -502,6 +529,15 @@ func (o *ordering) advance(ev *baseEvent, evt *evTable, m ThreadID, gen uint64) // cgo callback is disappearing, either because the callback // ending or the C thread that called it is being destroyed. // + // Also, treat this as if we lost our P too. + // The thread ID may be reused by the platform and we'll get + // really confused if we try to steal the P is this is running + // with later. The new M with the same ID could even try to + // steal back this P from itself! + // + // The runtime is careful to make sure that any GoCreateSyscall + // event will enter the runtime emitting events for reacquiring a P. + // // Note: we might have a P here. The P might not be released // eagerly by the runtime, and it might get stolen back later // (or never again, if the program is going to exit). @@ -519,6 +555,32 @@ func (o *ordering) advance(ev *baseEvent, evt *evTable, m ThreadID, gen uint64) // This goroutine is exiting itself. delete(o.gStates, curCtx.G) newCtx.G = NoGoroutine + + // If we have a proc, then we're dissociating from it now. See the comment at the top of the case. + if curCtx.P != NoProc { + pState, ok := o.pStates[curCtx.P] + if !ok { + return curCtx, false, fmt.Errorf("found invalid proc %d during %s", curCtx.P, go122.EventString(typ)) + } + if pState.status != go122.ProcSyscall { + return curCtx, false, fmt.Errorf("proc %d in unexpected state %s during %s", curCtx.P, pState.status, go122.EventString(typ)) + } + // See the go122-create-syscall-reuse-thread-id test case for more details. + pState.status = go122.ProcSyscallAbandoned + newCtx.P = NoProc + + // Queue an extra self-ProcSteal event. + o.extraEvent = Event{ + table: evt, + ctx: curCtx, + base: baseEvent{ + typ: go122.EvProcSteal, + time: ev.time, + }, + } + o.extraEvent.base.args[0] = uint64(curCtx.P) + o.extraEvent.base.extra(version.Go122)[0] = uint64(go122.ProcSyscall) + } return curCtx, true, nil // Handle tasks. Tasks are interesting because: diff --git a/src/internal/trace/v2/reader.go b/src/internal/trace/v2/reader.go index b58cc6fcb1..446b2add30 100644 --- a/src/internal/trace/v2/reader.go +++ b/src/internal/trace/v2/reader.go @@ -85,6 +85,11 @@ func (r *Reader) ReadEvent() (e Event, err error) { r.lastTs = e.base.time }() + // Consume any extra events produced during parsing. + if ev := r.order.consumeExtraEvent(); ev.Kind() != EventBad { + return ev, nil + } + // Check if we need to refresh the generation. if len(r.frontier) == 0 && len(r.cpuSamples) == 0 { if !r.emittedSync { diff --git a/src/internal/trace/v2/testdata/generators/go122-create-syscall-reuse-thread-id.go b/src/internal/trace/v2/testdata/generators/go122-create-syscall-reuse-thread-id.go new file mode 100644 index 0000000000..107cce2cc2 --- /dev/null +++ b/src/internal/trace/v2/testdata/generators/go122-create-syscall-reuse-thread-id.go @@ -0,0 +1,61 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Tests a G being created from within a syscall. +// +// Specifically, it tests a scenerio wherein a C +// thread is calling into Go, creating a goroutine in +// a syscall (in the tracer's model). The system is free +// to reuse thread IDs, so first a thread ID is used to +// call into Go, and then is used for a Go-created thread. +// +// This is a regression test. The trace parser didn't correctly +// model GoDestroySyscall as dropping its P (even if the runtime +// did). It turns out this is actually fine if all the threads +// in the trace have unique IDs, since the P just stays associated +// with an eternally dead thread, and it's stolen by some other +// thread later. But if thread IDs are reused, then the tracer +// gets confused when trying to advance events on the new thread. +// The now-dead thread which exited on a GoDestroySyscall still has +// its P associated and this transfers to the newly-live thread +// in the parser's state because they share a thread ID. + +package main + +import ( + "internal/trace/v2" + "internal/trace/v2/event/go122" + testgen "internal/trace/v2/internal/testgen/go122" +) + +func main() { + testgen.Main(gen) +} + +func gen(t *testgen.Trace) { + g := t.Generation(1) + + // A C thread calls into Go and acquires a P. It returns + // back to C, destroying the G. + b0 := g.Batch(trace.ThreadID(0), 0) + b0.Event("GoCreateSyscall", trace.GoID(4)) + b0.Event("GoSyscallEndBlocked") + b0.Event("ProcStatus", trace.ProcID(0), go122.ProcIdle) + b0.Event("ProcStart", trace.ProcID(0), testgen.Seq(1)) + b0.Event("GoStatus", trace.GoID(4), trace.NoThread, go122.GoRunnable) + b0.Event("GoStart", trace.GoID(4), testgen.Seq(1)) + b0.Event("GoSyscallBegin", testgen.Seq(2), testgen.NoStack) + b0.Event("GoDestroySyscall") + + // A new Go-created thread with the same ID appears and + // starts running, then tries to steal the P from the + // first thread. The stealing is interesting because if + // the parser handles GoDestroySyscall wrong, then we + // have a self-steal here potentially that doesn't make + // sense. + b1 := g.Batch(trace.ThreadID(0), 0) + b1.Event("ProcStatus", trace.ProcID(1), go122.ProcIdle) + b1.Event("ProcStart", trace.ProcID(1), testgen.Seq(1)) + b1.Event("ProcSteal", trace.ProcID(0), testgen.Seq(3), trace.ThreadID(0)) +} diff --git a/src/internal/trace/v2/testdata/generators/go122-create-syscall-with-p.go b/src/internal/trace/v2/testdata/generators/go122-create-syscall-with-p.go index 59055e5e62..4cb1c4a9a7 100644 --- a/src/internal/trace/v2/testdata/generators/go122-create-syscall-with-p.go +++ b/src/internal/trace/v2/testdata/generators/go122-create-syscall-with-p.go @@ -8,11 +8,9 @@ // thread is calling into Go, creating a goroutine in // a syscall (in the tracer's model). Because the actual // m can be reused, it's possible for that m to have never -// had its P (in _Psyscall) stolen. -// -// This is a regression test. The trace parser once required -// GoCreateSyscall to not have a P, but it can in the scenario -// described above. +// had its P (in _Psyscall) stolen if the runtime doesn't +// model the scenario correctly. Make sure we reject such +// traces. package main @@ -27,7 +25,7 @@ func main() { } func gen(t *testgen.Trace) { - t.DisableTimestamps() + t.ExpectFailure(".*expected a proc but didn't have one.*") g := t.Generation(1) diff --git a/src/internal/trace/v2/testdata/tests/go122-create-syscall-reuse-thread-id.test b/src/internal/trace/v2/testdata/tests/go122-create-syscall-reuse-thread-id.test new file mode 100644 index 0000000000..1820738384 --- /dev/null +++ b/src/internal/trace/v2/testdata/tests/go122-create-syscall-reuse-thread-id.test @@ -0,0 +1,23 @@ +-- expect -- +SUCCESS +-- trace -- +Trace Go1.22 +EventBatch gen=1 m=0 time=0 size=37 +GoCreateSyscall dt=1 new_g=4 +GoSyscallEndBlocked dt=1 +ProcStatus dt=1 p=0 pstatus=2 +ProcStart dt=1 p=0 p_seq=1 +GoStatus dt=1 g=4 m=18446744073709551615 gstatus=1 +GoStart dt=1 g=4 g_seq=1 +GoSyscallBegin dt=1 p_seq=2 stack=0 +GoDestroySyscall dt=1 +EventBatch gen=1 m=0 time=0 size=13 +ProcStatus dt=1 p=1 pstatus=2 +ProcStart dt=1 p=1 p_seq=1 +ProcSteal dt=1 p=0 p_seq=3 m=0 +EventBatch gen=1 m=18446744073709551615 time=0 size=5 +Frequency freq=15625000 +EventBatch gen=1 m=18446744073709551615 time=0 size=1 +Stacks +EventBatch gen=1 m=18446744073709551615 time=0 size=1 +Strings diff --git a/src/internal/trace/v2/testdata/tests/go122-create-syscall-with-p.test b/src/internal/trace/v2/testdata/tests/go122-create-syscall-with-p.test index 95f86b6f2f..9b329b8bae 100644 --- a/src/internal/trace/v2/testdata/tests/go122-create-syscall-with-p.test +++ b/src/internal/trace/v2/testdata/tests/go122-create-syscall-with-p.test @@ -1,19 +1,19 @@ -- expect -- -SUCCESS +FAILURE ".*expected a proc but didn't have one.*" -- trace -- Trace Go1.22 EventBatch gen=1 m=0 time=0 size=34 -GoCreateSyscall dt=0 new_g=4 -ProcStatus dt=0 p=0 pstatus=2 -ProcStart dt=0 p=0 p_seq=1 -GoSyscallEndBlocked dt=0 -GoStart dt=0 g=4 g_seq=1 -GoSyscallBegin dt=0 p_seq=2 stack=0 -GoDestroySyscall dt=0 -GoCreateSyscall dt=0 new_g=4 -GoSyscallEnd dt=0 -GoSyscallBegin dt=0 p_seq=3 stack=0 -GoDestroySyscall dt=0 +GoCreateSyscall dt=1 new_g=4 +ProcStatus dt=1 p=0 pstatus=2 +ProcStart dt=1 p=0 p_seq=1 +GoSyscallEndBlocked dt=1 +GoStart dt=1 g=4 g_seq=1 +GoSyscallBegin dt=1 p_seq=2 stack=0 +GoDestroySyscall dt=1 +GoCreateSyscall dt=1 new_g=4 +GoSyscallEnd dt=1 +GoSyscallBegin dt=1 p_seq=3 stack=0 +GoDestroySyscall dt=1 EventBatch gen=1 m=18446744073709551615 time=0 size=5 Frequency freq=15625000 EventBatch gen=1 m=18446744073709551615 time=0 size=1 diff --git a/src/internal/trace/v2/testtrace/validation.go b/src/internal/trace/v2/testtrace/validation.go index 448ef9d9dd..021c7785fd 100644 --- a/src/internal/trace/v2/testtrace/validation.go +++ b/src/internal/trace/v2/testtrace/validation.go @@ -225,7 +225,7 @@ func (v *Validator) Event(ev trace.Event) error { ctx := state.binding if ctx != nil { if ctx.P != id { - e.Errorf("tried to stop proc %d when it wasn't currently executing (currently executing %d) on thread %d", id, ctx.P, ev.Thread()) + e.Errorf("tried to stop proc %d when it wasn't currently executing (currently executing %d) on thread %d", id, ctx.P, ctx.M) } ctx.P = trace.NoProc state.binding = nil From d92434935f1b6af5ece81cf13171dbe216df6254 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Thu, 30 Nov 2023 12:25:43 -0500 Subject: [PATCH 154/313] math/rand/v2: add ChaCha8 This is a replay of CL 516859, after its rollback in CL 543895, with big-endian systems fixed and the tests disabled on RISC-V since the compiler is broken there (#64285). ChaCha8 provides a cryptographically strong generator alongside PCG, so that people who want stronger randomness have access to that. On systems with 128-bit vector math assembly (amd64 and arm64), ChaCha8 runs at about the same speed as PCG (25% slower on amd64, 2% faster on arm64). Fixes #64284. Change-Id: I6290bb8ace28e1aff9a61f805dbe380ccdf25b94 Reviewed-on: https://go-review.googlesource.com/c/go/+/546020 Reviewed-by: Filippo Valsorda Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI --- api/go1.22.txt | 36 +- src/go/build/deps_test.go | 13 +- src/internal/chacha8rand/chacha8.go | 178 +++++++ src/internal/chacha8rand/chacha8_amd64.s | 177 +++++++ src/internal/chacha8rand/chacha8_arm64.s | 106 ++++ src/internal/chacha8rand/chacha8_generic.go | 235 +++++++++ src/internal/chacha8rand/chacha8_stub.s | 12 + src/internal/chacha8rand/export_test.go | 8 + src/internal/chacha8rand/rand_test.go | 192 +++++++ src/math/rand/v2/chacha8.go | 46 ++ src/math/rand/v2/chacha8_test.go | 531 ++++++++++++++++++++ 11 files changed, 1515 insertions(+), 19 deletions(-) create mode 100644 src/internal/chacha8rand/chacha8.go create mode 100644 src/internal/chacha8rand/chacha8_amd64.s create mode 100644 src/internal/chacha8rand/chacha8_arm64.s create mode 100644 src/internal/chacha8rand/chacha8_generic.go create mode 100644 src/internal/chacha8rand/chacha8_stub.s create mode 100644 src/internal/chacha8rand/export_test.go create mode 100644 src/internal/chacha8rand/rand_test.go create mode 100644 src/math/rand/v2/chacha8.go create mode 100644 src/math/rand/v2/chacha8_test.go diff --git a/api/go1.22.txt b/api/go1.22.txt index ca67b4d6e8..90ab686b11 100644 --- a/api/go1.22.txt +++ b/api/go1.22.txt @@ -1,9 +1,9 @@ pkg archive/tar, method (*Writer) AddFS(fs.FS) error #58000 -pkg archive/tar, type FileInfoNames interface, Gname(int) (string, error) #50102 pkg archive/tar, type FileInfoNames interface { Gname, IsDir, ModTime, Mode, Name, Size, Sys, Uname } #50102 +pkg archive/tar, type FileInfoNames interface, Gname(int) (string, error) #50102 pkg archive/tar, type FileInfoNames interface, IsDir() bool #50102 -pkg archive/tar, type FileInfoNames interface, Mode() fs.FileMode #50102 pkg archive/tar, type FileInfoNames interface, ModTime() time.Time #50102 +pkg archive/tar, type FileInfoNames interface, Mode() fs.FileMode #50102 pkg archive/tar, type FileInfoNames interface, Name() string #50102 pkg archive/tar, type FileInfoNames interface, Size() int64 #50102 pkg archive/tar, type FileInfoNames interface, Sys() interface{} #50102 @@ -12,8 +12,8 @@ pkg archive/zip, method (*Writer) AddFS(fs.FS) error #54898 pkg cmp, func Or[$0 comparable](...$0) $0 #60204 pkg crypto/x509, func OIDFromInts([]uint64) (OID, error) #60665 pkg crypto/x509, method (*CertPool) AddCertWithConstraint(*Certificate, func([]*Certificate) error) #57178 -pkg crypto/x509, method (OID) EqualASN1OID(asn1.ObjectIdentifier) bool #60665 pkg crypto/x509, method (OID) Equal(OID) bool #60665 +pkg crypto/x509, method (OID) EqualASN1OID(asn1.ObjectIdentifier) bool #60665 pkg crypto/x509, method (OID) String() string #60665 pkg crypto/x509, type Certificate struct, Policies []OID #60665 pkg crypto/x509, type OID struct #60665 @@ -54,8 +54,8 @@ pkg go/types, func Unalias(Type) Type #63223 pkg go/types, method (*Alias) Obj() *TypeName #63223 pkg go/types, method (*Alias) String() string #63223 pkg go/types, method (*Alias) Underlying() Type #63223 -pkg go/types, method (Checker) PkgNameOf(*ast.ImportSpec) *PkgName #62037 pkg go/types, method (*Info) PkgNameOf(*ast.ImportSpec) *PkgName #62037 +pkg go/types, method (Checker) PkgNameOf(*ast.ImportSpec) *PkgName #62037 pkg go/types, type Alias struct #63223 pkg go/types, type Info struct, FileVersions map[*ast.File]string #62605 pkg go/version, func Compare(string, string) int #62039 @@ -68,24 +68,29 @@ pkg math/big, method (*Rat) FloatPrec() (int, bool) #50489 pkg math/rand/v2, func ExpFloat64() float64 #61716 pkg math/rand/v2, func Float32() float32 #61716 pkg math/rand/v2, func Float64() float64 #61716 +pkg math/rand/v2, func Int() int #61716 pkg math/rand/v2, func Int32() int32 #61716 pkg math/rand/v2, func Int32N(int32) int32 #61716 pkg math/rand/v2, func Int64() int64 #61716 pkg math/rand/v2, func Int64N(int64) int64 #61716 -pkg math/rand/v2, func Int() int #61716 pkg math/rand/v2, func IntN(int) int #61716 pkg math/rand/v2, func N[$0 intType]($0) $0 #61716 -pkg math/rand/v2, func NewPCG(uint64, uint64) *PCG #61716 pkg math/rand/v2, func New(Source) *Rand #61716 +pkg math/rand/v2, func NewChaCha8([32]uint8) *ChaCha8 #61716 +pkg math/rand/v2, func NewPCG(uint64, uint64) *PCG #61716 pkg math/rand/v2, func NewZipf(*Rand, float64, float64, uint64) *Zipf #61716 pkg math/rand/v2, func NormFloat64() float64 #61716 pkg math/rand/v2, func Perm(int) []int #61716 pkg math/rand/v2, func Shuffle(int, func(int, int)) #61716 -pkg math/rand/v2, func Uint32N(uint32) uint32 #61716 pkg math/rand/v2, func Uint32() uint32 #61716 -pkg math/rand/v2, func Uint64N(uint64) uint64 #61716 +pkg math/rand/v2, func Uint32N(uint32) uint32 #61716 pkg math/rand/v2, func Uint64() uint64 #61716 +pkg math/rand/v2, func Uint64N(uint64) uint64 #61716 pkg math/rand/v2, func UintN(uint) uint #61716 +pkg math/rand/v2, method (*ChaCha8) MarshalBinary() ([]uint8, error) #61716 +pkg math/rand/v2, method (*ChaCha8) Seed([32]uint8) #61716 +pkg math/rand/v2, method (*ChaCha8) Uint64() uint64 #61716 +pkg math/rand/v2, method (*ChaCha8) UnmarshalBinary([]uint8) error #61716 pkg math/rand/v2, method (*PCG) MarshalBinary() ([]uint8, error) #61716 pkg math/rand/v2, method (*PCG) Seed(uint64, uint64) #61716 pkg math/rand/v2, method (*PCG) Uint64() uint64 #61716 @@ -93,42 +98,43 @@ pkg math/rand/v2, method (*PCG) UnmarshalBinary([]uint8) error #61716 pkg math/rand/v2, method (*Rand) ExpFloat64() float64 #61716 pkg math/rand/v2, method (*Rand) Float32() float32 #61716 pkg math/rand/v2, method (*Rand) Float64() float64 #61716 +pkg math/rand/v2, method (*Rand) Int() int #61716 pkg math/rand/v2, method (*Rand) Int32() int32 #61716 pkg math/rand/v2, method (*Rand) Int32N(int32) int32 #61716 pkg math/rand/v2, method (*Rand) Int64() int64 #61716 pkg math/rand/v2, method (*Rand) Int64N(int64) int64 #61716 -pkg math/rand/v2, method (*Rand) Int() int #61716 pkg math/rand/v2, method (*Rand) IntN(int) int #61716 pkg math/rand/v2, method (*Rand) NormFloat64() float64 #61716 pkg math/rand/v2, method (*Rand) Perm(int) []int #61716 pkg math/rand/v2, method (*Rand) Shuffle(int, func(int, int)) #61716 -pkg math/rand/v2, method (*Rand) Uint32N(uint32) uint32 #61716 pkg math/rand/v2, method (*Rand) Uint32() uint32 #61716 -pkg math/rand/v2, method (*Rand) Uint64N(uint64) uint64 #61716 +pkg math/rand/v2, method (*Rand) Uint32N(uint32) uint32 #61716 pkg math/rand/v2, method (*Rand) Uint64() uint64 #61716 +pkg math/rand/v2, method (*Rand) Uint64N(uint64) uint64 #61716 pkg math/rand/v2, method (*Rand) UintN(uint) uint #61716 pkg math/rand/v2, method (*Zipf) Uint64() uint64 #61716 +pkg math/rand/v2, type ChaCha8 struct #61716 pkg math/rand/v2, type PCG struct #61716 pkg math/rand/v2, type Rand struct #61716 pkg math/rand/v2, type Source interface { Uint64 } #61716 pkg math/rand/v2, type Source interface, Uint64() uint64 #61716 pkg math/rand/v2, type Zipf struct #61716 +pkg net, method (*TCPConn) WriteTo(io.Writer) (int64, error) #58808 pkg net/http, func FileServerFS(fs.FS) Handler #51971 pkg net/http, func NewFileTransportFS(fs.FS) RoundTripper #51971 pkg net/http, func ServeFileFS(ResponseWriter, *Request, fs.FS, string) #51971 pkg net/http, method (*Request) PathValue(string) string #61410 pkg net/http, method (*Request) SetPathValue(string, string) #61410 -pkg net, method (*TCPConn) WriteTo(io.Writer) (int64, error) #58808 pkg net/netip, method (AddrPort) Compare(AddrPort) int #61642 pkg net/netip, method (Prefix) Compare(Prefix) int #61642 pkg os, method (*File) WriteTo(io.Writer) (int64, error) #58808 pkg reflect, func PtrTo //deprecated #59599 pkg reflect, func TypeFor[$0 interface{}]() Type #60088 pkg slices, func Concat[$0 interface{ ~[]$1 }, $1 interface{}](...$0) $0 #56353 -pkg syscall (linux-386-cgo), type SysProcAttr struct, PidFD *int #51246 pkg syscall (linux-386), type SysProcAttr struct, PidFD *int #51246 -pkg syscall (linux-amd64-cgo), type SysProcAttr struct, PidFD *int #51246 +pkg syscall (linux-386-cgo), type SysProcAttr struct, PidFD *int #51246 pkg syscall (linux-amd64), type SysProcAttr struct, PidFD *int #51246 -pkg syscall (linux-arm-cgo), type SysProcAttr struct, PidFD *int #51246 +pkg syscall (linux-amd64-cgo), type SysProcAttr struct, PidFD *int #51246 pkg syscall (linux-arm), type SysProcAttr struct, PidFD *int #51246 +pkg syscall (linux-arm-cgo), type SysProcAttr struct, PidFD *int #51246 pkg testing/slogtest, func Run(*testing.T, func(*testing.T) slog.Handler, func(*testing.T) map[string]interface{}) #61758 diff --git a/src/go/build/deps_test.go b/src/go/build/deps_test.go index 147137262b..1b93e78c70 100644 --- a/src/go/build/deps_test.go +++ b/src/go/build/deps_test.go @@ -52,14 +52,19 @@ var depsRules = ` # These packages depend only on internal/goarch and unsafe. internal/goarch, unsafe - < internal/abi; + < internal/abi, internal/chacha8rand; unsafe < maps; # RUNTIME is the core runtime group of packages, all of them very light-weight. - internal/abi, internal/cpu, internal/goarch, - internal/coverage/rtcov, internal/godebugs, internal/goexperiment, - internal/goos, unsafe + internal/abi, + internal/chacha8rand, + internal/coverage/rtcov, + internal/cpu, + internal/goarch, + internal/godebugs, + internal/goexperiment, + internal/goos < internal/bytealg < internal/itoa < internal/unsafeheader diff --git a/src/internal/chacha8rand/chacha8.go b/src/internal/chacha8rand/chacha8.go new file mode 100644 index 0000000000..654ac1bc9d --- /dev/null +++ b/src/internal/chacha8rand/chacha8.go @@ -0,0 +1,178 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package chacha8rand implements a pseudorandom generator +// based on ChaCha8. It is used by both runtime and math/rand/v2 +// and must have no dependencies. +package chacha8rand + +const ( + ctrInc = 4 // increment counter by 4 between block calls + ctrMax = 16 // reseed when counter reaches 16 + chunk = 32 // each chunk produced by block is 32 uint64s + reseed = 4 // reseed with 4 words +) + +// block is the chacha8rand block function. +func block(seed *[4]uint64, blocks *[32]uint64, counter uint32) + +// A State holds the state for a single random generator. +// It must be used from one goroutine at a time. +// If used by multiple goroutines at a time, the goroutines +// may see the same random values, but the code will not +// crash or cause out-of-bounds memory accesses. +type State struct { + buf [32]uint64 + seed [4]uint64 + i uint32 + n uint32 + c uint32 +} + +// Next returns the next random value, along with a boolean +// indicating whether one was available. +// If one is not available, the caller should call Refill +// and then repeat the call to Next. +// +// Next is //go:nosplit to allow its use in the runtime +// with per-m data without holding the per-m lock. +//go:nosplit +func (s *State) Next() (uint64, bool) { + i := s.i + if i >= s.n { + return 0, false + } + s.i = i + 1 + return s.buf[i&31], true // i&31 eliminates bounds check +} + +// Init seeds the State with the given seed value. +func (s *State) Init(seed [32]byte) { + s.Init64([4]uint64{ + leUint64(seed[0*8:]), + leUint64(seed[1*8:]), + leUint64(seed[2*8:]), + leUint64(seed[3*8:]), + }) +} + +// Init64 seeds the state with the given seed value. +func (s *State) Init64(seed [4]uint64) { + s.seed = seed + block(&s.seed, &s.buf, 0) + s.c = 0 + s.i = 0 + s.n = chunk +} + +// Refill refills the state with more random values. +// After a call to Refill, an immediate call to Next will succeed +// (unless multiple goroutines are incorrectly sharing a state). +func (s *State) Refill() { + s.c += ctrInc + if s.c == ctrMax { + // Reseed with generated uint64s for forward secrecy. + // Normally this is done immediately after computing a block, + // but we do it immediately before computing the next block, + // to allow a much smaller serialized state (just the seed plus offset). + // This gives a delayed benefit for the forward secrecy + // (you can reconstruct the recent past given a memory dump), + // which we deem acceptable in exchange for the reduced size. + s.seed[0] = s.buf[len(s.buf)-reseed+0] + s.seed[1] = s.buf[len(s.buf)-reseed+1] + s.seed[2] = s.buf[len(s.buf)-reseed+2] + s.seed[3] = s.buf[len(s.buf)-reseed+3] + s.c = 0 + } + block(&s.seed, &s.buf, s.c) + s.i = 0 + s.n = uint32(len(s.buf)) + if s.c == ctrMax-ctrInc { + s.n = uint32(len(s.buf)) - reseed + } +} + +// Marshal marshals the state into a byte slice. +// Marshal and Unmarshal are functions, not methods, +// so that they will not be linked into the runtime +// when it uses the State struct, since the runtime +// does not need these. +func Marshal(s *State) []byte { + data := make([]byte, 6*8) + copy(data, "chacha8:") + used := (s.c/ctrInc)*chunk + s.i + bePutUint64(data[1*8:], uint64(used)) + for i, seed := range s.seed { + lePutUint64(data[(2+i)*8:], seed) + } + return data +} + +type errUnmarshalChaCha8 struct{} + +func (*errUnmarshalChaCha8) Error() string { + return "invalid ChaCha8 encoding" +} + +// Unmarshal unmarshals the state from a byte slice. +func Unmarshal(s *State, data []byte) error { + if len(data) != 6*8 || string(data[:8]) != "chacha8:" { + return new(errUnmarshalChaCha8) + } + used := beUint64(data[1*8:]) + if used > (ctrMax/ctrInc)*chunk-reseed { + return new(errUnmarshalChaCha8) + } + for i := range s.seed { + s.seed[i] = leUint64(data[(2+i)*8:]) + } + s.c = ctrInc * (uint32(used) / chunk) + block(&s.seed, &s.buf, s.c) + s.i = uint32(used) % chunk + s.n = chunk + if s.c == ctrMax-ctrInc { + s.n = chunk - reseed + } + return nil +} + +// binary.bigEndian.Uint64, copied to avoid dependency +func beUint64(b []byte) uint64 { + _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 | + uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56 +} + +// binary.bigEndian.PutUint64, copied to avoid dependency +func bePutUint64(b []byte, v uint64) { + _ = b[7] // early bounds check to guarantee safety of writes below + b[0] = byte(v >> 56) + b[1] = byte(v >> 48) + b[2] = byte(v >> 40) + b[3] = byte(v >> 32) + b[4] = byte(v >> 24) + b[5] = byte(v >> 16) + b[6] = byte(v >> 8) + b[7] = byte(v) +} + +// binary.littleEndian.Uint64, copied to avoid dependency +func leUint64(b []byte) uint64 { + _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | + uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 +} + +// binary.littleEndian.PutUint64, copied to avoid dependency +func lePutUint64(b []byte, v uint64) { + _ = b[7] // early bounds check to guarantee safety of writes below + b[0] = byte(v) + b[1] = byte(v >> 8) + b[2] = byte(v >> 16) + b[3] = byte(v >> 24) + b[4] = byte(v >> 32) + b[5] = byte(v >> 40) + b[6] = byte(v >> 48) + b[7] = byte(v >> 56) +} diff --git a/src/internal/chacha8rand/chacha8_amd64.s b/src/internal/chacha8rand/chacha8_amd64.s new file mode 100644 index 0000000000..cadd516c09 --- /dev/null +++ b/src/internal/chacha8rand/chacha8_amd64.s @@ -0,0 +1,177 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include "textflag.h" + +// ChaCha8 is ChaCha with 8 rounds. +// See https://cr.yp.to/chacha/chacha-20080128.pdf. +// See chacha8_generic.go for additional details. + +// ROL rotates the uint32s in register R left by N bits, using temporary T. +#define ROL(N, R, T) \ + MOVO R, T; PSLLL $(N), T; PSRLL $(32-(N)), R; PXOR T, R + +// ROL16 rotates the uint32s in register R left by 16, using temporary T if needed. +#ifdef GOAMD64_v2 +#define ROL16(R, T) PSHUFB ·rol16<>(SB), R +#else +#define ROL16(R, T) ROL(16, R, T) +#endif + +// ROL8 rotates the uint32s in register R left by 8, using temporary T if needed. +#ifdef GOAMD64_v2 +#define ROL8(R, T) PSHUFB ·rol8<>(SB), R +#else +#define ROL8(R, T) ROL(8, R, T) +#endif + +// QR is the ChaCha quarter-round on A, B, C, and D. T is an available temporary. +#define QR(A, B, C, D, T) \ + PADDD B, A; PXOR A, D; ROL16(D, T); \ + PADDD D, C; PXOR C, B; MOVO B, T; PSLLL $12, T; PSRLL $20, B; PXOR T, B; \ + PADDD B, A; PXOR A, D; ROL8(D, T); \ + PADDD D, C; PXOR C, B; MOVO B, T; PSLLL $7, T; PSRLL $25, B; PXOR T, B + +// REPLREG replicates the register R into 4 uint32s in XR. +#define REPLREG(R, XR) \ + MOVQ R, XR; \ + PSHUFD $0, XR, XR + +// REPL replicates the uint32 constant val into 4 uint32s in XR. It smashes DX. +#define REPL(val, XR) \ + MOVL $val, DX; \ + REPLREG(DX, XR) + +// SEED copies the off'th uint32 of the seed into the register XR, +// replicating it into all four stripes of the register. +#define SEED(off, reg, XR) \ + MOVL (4*off)(AX), reg; \ + REPLREG(reg, XR) \ + +// block runs 4 ChaCha8 block transformations in the four stripes of the X registers. + +// func block(seed *[8]uint32, blocks *[16][4]uint32, counter uint32) +TEXT ·block(SB), NOSPLIT, $16 + // seed in AX + // blocks in BX + // counter in CX + MOVQ seed+0(FP), AX + MOVQ blocks+8(FP), BX + MOVL counter+16(FP), CX + + // Load initial constants into top row. + REPL(0x61707865, X0) + REPL(0x3320646e, X1) + REPL(0x79622d32, X2) + REPL(0x6b206574, X3) + + // Load counter into bottom left cell. + // Each stripe gets a different counter: 0, 1, 2, 3. + // (PINSRD is not available in GOAMD64_v1, + // so just do it in memory on all systems. + // This is not on the critical path.) + MOVL CX, 0(SP) + INCL CX + MOVL CX, 4(SP) + INCL CX + MOVL CX, 8(SP) + INCL CX + MOVL CX, 12(SP) + MOVOU 0(SP), X12 + + // Load seed words into next two rows and into DI, SI, R8..R13 + SEED(0, DI, X4) + SEED(1, SI, X5) + SEED(2, R8, X6) + SEED(3, R9, X7) + SEED(4, R10, X8) + SEED(5, R11, X9) + SEED(6, R12, X10) + SEED(7, R13, X11) + + // Zeros for remaining two matrix entries. + // We have just enough XMM registers to hold the state, + // without one for the temporary, so we flush and restore + // some values to and from memory to provide a temporary. + // The initial temporary is X15, so zero its memory instead + // of X15 itself. + MOVL $0, DX + MOVQ DX, X13 + MOVQ DX, X14 + MOVOU X14, (15*16)(BX) + + // 4 iterations. Each iteration is 8 quarter-rounds. + MOVL $4, DX +loop: + QR(X0, X4, X8, X12, X15) + MOVOU X4, (4*16)(BX) // save X4 + QR(X1, X5, X9, X13, X15) + MOVOU (15*16)(BX), X15 // reload X15; temp now X4 + QR(X2, X6, X10, X14, X4) + QR(X3, X7, X11, X15, X4) + + QR(X0, X5, X10, X15, X4) + MOVOU X15, (15*16)(BX) // save X15 + QR(X1, X6, X11, X12, X4) + MOVOU (4*16)(BX), X4 // reload X4; temp now X15 + QR(X2, X7, X8, X13, X15) + QR(X3, X4, X9, X14, X15) + + DECL DX + JNZ loop + + // Store interlaced blocks back to output buffer, + // adding original seed along the way. + + // First the top and bottom rows. + MOVOU X0, (0*16)(BX) + MOVOU X1, (1*16)(BX) + MOVOU X2, (2*16)(BX) + MOVOU X3, (3*16)(BX) + MOVOU X12, (12*16)(BX) + MOVOU X13, (13*16)(BX) + MOVOU X14, (14*16)(BX) + // X15 has already been stored. + + // Now we have X0-X3, X12-X15 available for temporaries. + // Add seed rows back to output. We left seed in DI, SI, R8..R13 above. + REPLREG(DI, X0) + REPLREG(SI, X1) + REPLREG(R8, X2) + REPLREG(R9, X3) + REPLREG(R10, X12) + REPLREG(R11, X13) + REPLREG(R12, X14) + REPLREG(R13, X15) + PADDD X0, X4 + PADDD X1, X5 + PADDD X2, X6 + PADDD X3, X7 + PADDD X12, X8 + PADDD X13, X9 + PADDD X14, X10 + PADDD X15, X11 + MOVOU X4, (4*16)(BX) + MOVOU X5, (5*16)(BX) + MOVOU X6, (6*16)(BX) + MOVOU X7, (7*16)(BX) + MOVOU X8, (8*16)(BX) + MOVOU X9, (9*16)(BX) + MOVOU X10, (10*16)(BX) + MOVOU X11, (11*16)(BX) + + MOVL $0, AX + MOVQ AX, X15 // must be 0 on return + + RET + +// rotate left 16 indexes for PSHUFB +GLOBL ·rol16<>(SB), NOPTR|RODATA, $16 +DATA ·rol16<>+0(SB)/8, $0x0504070601000302 +DATA ·rol16<>+8(SB)/8, $0x0D0C0F0E09080B0A + +// rotate left 8 indexes for PSHUFB +GLOBL ·rol8<>(SB), NOPTR|RODATA, $16 +DATA ·rol8<>+0(SB)/8, $0x0605040702010003 +DATA ·rol8<>+8(SB)/8, $0x0E0D0C0F0A09080B diff --git a/src/internal/chacha8rand/chacha8_arm64.s b/src/internal/chacha8rand/chacha8_arm64.s new file mode 100644 index 0000000000..4f36a7021c --- /dev/null +++ b/src/internal/chacha8rand/chacha8_arm64.s @@ -0,0 +1,106 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include "textflag.h" + +// QR is the ChaCha quarter-round on A, B, C, and D. +// V30 is used as a temporary, and V31 is assumed to +// hold the index table for rotate left 8. +#define QR(A, B, C, D) \ + VADD A.S4, B.S4, A.S4; VEOR D.B16, A.B16, D.B16; VREV32 D.H8, D.H8; \ + VADD C.S4, D.S4, C.S4; VEOR B.B16, C.B16, V30.B16; VSHL $12, V30.S4, B.S4; VSRI $20, V30.S4, B.S4 \ + VADD A.S4, B.S4, A.S4; VEOR D.B16, A.B16, D.B16; VTBL V31.B16, [D.B16], D.B16; \ + VADD C.S4, D.S4, C.S4; VEOR B.B16, C.B16, V30.B16; VSHL $7, V30.S4, B.S4; VSRI $25, V30.S4, B.S4 + +// block runs 4 ChaCha8 block transformations in the four stripes of the V registers. + +// func block(seed *[8]uint32, blocks *[4][16]uint32, counter uint32) +TEXT ·block(SB), NOSPLIT, $16 + // seed in R0 + // blocks in R1 + MOVD seed+0(FP), R0 + MOVD blocks+8(FP), R1 + MOVW counter+16(FP), R2 + + // Load initial constants into top row. + MOVD $·chachaConst(SB), R10 + VLD4R (R10), [V0.S4, V1.S4, V2.S4, V3.S4] + + // Load increment and rotate 8 constants into V30, V31. + MOVD $·chachaIncRot(SB), R11 + VLD1 (R11), [V30.S4, V31.S4] + + VLD4R.P 16(R0), [V4.S4, V5.S4, V6.S4, V7.S4] + VLD4R.P 16(R0), [V8.S4, V9.S4, V10.S4, V11.S4] + + // store counter to memory to replicate its uint32 halfs back out + MOVW R2, 0(RSP) + VLD1R 0(RSP), [V12.S4] + + // Add 0, 1, 2, 3 to counter stripes. + VADD V30.S4, V12.S4, V12.S4 + + // Zeros for remaining two matrix entries. + VEOR V13.B16, V13.B16, V13.B16 + VEOR V14.B16, V14.B16, V14.B16 + VEOR V15.B16, V15.B16, V15.B16 + + // Save seed state for adding back later. + VMOV V4.B16, V20.B16 + VMOV V5.B16, V21.B16 + VMOV V6.B16, V22.B16 + VMOV V7.B16, V23.B16 + VMOV V8.B16, V24.B16 + VMOV V9.B16, V25.B16 + VMOV V10.B16, V26.B16 + VMOV V11.B16, V27.B16 + + // 4 iterations. Each iteration is 8 quarter-rounds. + MOVD $4, R0 +loop: + QR(V0, V4, V8, V12) + QR(V1, V5, V9, V13) + QR(V2, V6, V10, V14) + QR(V3, V7, V11, V15) + + QR(V0, V5, V10, V15) + QR(V1, V6, V11, V12) + QR(V2, V7, V8, V13) + QR(V3, V4, V9, V14) + + SUB $1, R0 + CBNZ R0, loop + + // Add seed back. + VADD V4.S4, V20.S4, V4.S4 + VADD V5.S4, V21.S4, V5.S4 + VADD V6.S4, V22.S4, V6.S4 + VADD V7.S4, V23.S4, V7.S4 + VADD V8.S4, V24.S4, V8.S4 + VADD V9.S4, V25.S4, V9.S4 + VADD V10.S4, V26.S4, V10.S4 + VADD V11.S4, V27.S4, V11.S4 + + // Store interlaced blocks back to output buffer. + VST1.P [ V0.B16, V1.B16, V2.B16, V3.B16], 64(R1) + VST1.P [ V4.B16, V5.B16, V6.B16, V7.B16], 64(R1) + VST1.P [ V8.B16, V9.B16, V10.B16, V11.B16], 64(R1) + VST1.P [V12.B16, V13.B16, V14.B16, V15.B16], 64(R1) + RET + +GLOBL ·chachaConst(SB), NOPTR|RODATA, $32 +DATA ·chachaConst+0x00(SB)/4, $0x61707865 +DATA ·chachaConst+0x04(SB)/4, $0x3320646e +DATA ·chachaConst+0x08(SB)/4, $0x79622d32 +DATA ·chachaConst+0x0c(SB)/4, $0x6b206574 + +GLOBL ·chachaIncRot(SB), NOPTR|RODATA, $32 +DATA ·chachaIncRot+0x00(SB)/4, $0x00000000 +DATA ·chachaIncRot+0x04(SB)/4, $0x00000001 +DATA ·chachaIncRot+0x08(SB)/4, $0x00000002 +DATA ·chachaIncRot+0x0c(SB)/4, $0x00000003 +DATA ·chachaIncRot+0x10(SB)/4, $0x02010003 +DATA ·chachaIncRot+0x14(SB)/4, $0x06050407 +DATA ·chachaIncRot+0x18(SB)/4, $0x0A09080B +DATA ·chachaIncRot+0x1c(SB)/4, $0x0E0D0C0F diff --git a/src/internal/chacha8rand/chacha8_generic.go b/src/internal/chacha8rand/chacha8_generic.go new file mode 100644 index 0000000000..2a0f5cd1d6 --- /dev/null +++ b/src/internal/chacha8rand/chacha8_generic.go @@ -0,0 +1,235 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// ChaCha8 is ChaCha with 8 rounds. +// See https://cr.yp.to/chacha/chacha-20080128.pdf. +// +// ChaCha8 operates on a 4x4 matrix of uint32 values, initially set to: +// +// const1 const2 const3 const4 +// seed seed seed seed +// seed seed seed seed +// counter64 0 0 +// +// We use the same constants as ChaCha20 does, a random seed, +// and a counter. Running ChaCha8 on this input produces +// a 4x4 matrix of pseudo-random values with as much entropy +// as the seed. +// +// Given SIMD registers that can hold N uint32s, it is possible +// to run N ChaCha8 block transformations in parallel by filling +// the first register with the N copies of const1, the second +// with N copies of const2, and so on, and then running the operations. +// +// Each iteration of ChaCha8Rand operates over 32 bytes of input and +// produces 992 bytes of RNG output, plus 32 bytes of input for the next +// iteration. +// +// The 32 bytes of input are used as a ChaCha8 key, with a zero nonce, to +// produce 1024 bytes of output (16 blocks, with counters 0 to 15). +// First, for each block, the values 0x61707865, 0x3320646e, 0x79622d32, +// 0x6b206574 are subtracted from the 32-bit little-endian words at +// position 0, 1, 2, and 3 respectively, and an increasing counter +// starting at zero is subtracted from each word at position 12. Then, +// this stream is permuted such that for each sequence of four blocks, +// first we output the first four bytes of each block, then the next four +// bytes of each block, and so on. Finally, the last 32 bytes of output +// are used as the input of the next iteration, and the remaining 992 +// bytes are the RNG output. +// +// See https://c2sp.org/chacha8rand for additional details. +// +// Normal ChaCha20 implementations for encryption use this same +// parallelism but then have to deinterlace the results so that +// it appears the blocks were generated separately. For the purposes +// of generating random numbers, the interlacing is fine. +// We are simply locked in to preserving the 4-way interlacing +// in any future optimizations. +package chacha8rand + +import ( + "internal/goarch" + "unsafe" +) + +// setup sets up 4 ChaCha8 blocks in b32 with the counter and seed. +// Note that b32 is [16][4]uint32 not [4][16]uint32: the blocks are interlaced +// the same way they would be in a 4-way SIMD implementations. +func setup(seed *[4]uint64, b32 *[16][4]uint32, counter uint32) { + // Convert to uint64 to do half as many stores to memory. + b := (*[16][2]uint64)(unsafe.Pointer(b32)) + + // Constants; same as in ChaCha20: "expand 32-byte k" + b[0][0] = 0x61707865_61707865 + b[0][1] = 0x61707865_61707865 + + b[1][0] = 0x3320646e_3320646e + b[1][1] = 0x3320646e_3320646e + + b[2][0] = 0x79622d32_79622d32 + b[2][1] = 0x79622d32_79622d32 + + b[3][0] = 0x6b206574_6b206574 + b[3][1] = 0x6b206574_6b206574 + + // Seed values. + var x64 uint64 + var x uint32 + + x = uint32(seed[0]) + x64 = uint64(x)<<32 | uint64(x) + b[4][0] = x64 + b[4][1] = x64 + + x = uint32(seed[0] >> 32) + x64 = uint64(x)<<32 | uint64(x) + b[5][0] = x64 + b[5][1] = x64 + + x = uint32(seed[1]) + x64 = uint64(x)<<32 | uint64(x) + b[6][0] = x64 + b[6][1] = x64 + + x = uint32(seed[1] >> 32) + x64 = uint64(x)<<32 | uint64(x) + b[7][0] = x64 + b[7][1] = x64 + + x = uint32(seed[2]) + x64 = uint64(x)<<32 | uint64(x) + b[8][0] = x64 + b[8][1] = x64 + + x = uint32(seed[2] >> 32) + x64 = uint64(x)<<32 | uint64(x) + b[9][0] = x64 + b[9][1] = x64 + + x = uint32(seed[3]) + x64 = uint64(x)<<32 | uint64(x) + b[10][0] = x64 + b[10][1] = x64 + + x = uint32(seed[3] >> 32) + x64 = uint64(x)<<32 | uint64(x) + b[11][0] = x64 + b[11][1] = x64 + + // Counters. + if goarch.BigEndian { + b[12][0] = uint64(counter+0)<<32 | uint64(counter+1) + b[12][1] = uint64(counter+2)<<32 | uint64(counter+3) + } else { + b[12][0] = uint64(counter+0) | uint64(counter+1)<<32 + b[12][1] = uint64(counter+2) | uint64(counter+3)<<32 + } + + // Zeros. + b[13][0] = 0 + b[13][1] = 0 + b[14][0] = 0 + b[14][1] = 0 + + b[15][0] = 0 + b[15][1] = 0 +} + +func _() { + // block and block_generic must have same type + x := block + x = block_generic + _ = x +} + +// block_generic is the non-assembly block implementation, +// for use on systems without special assembly. +// Even on such systems, it is quite fast: on GOOS=386, +// ChaCha8 using this code generates random values faster than PCG-DXSM. +func block_generic(seed *[4]uint64, buf *[32]uint64, counter uint32) { + b := (*[16][4]uint32)(unsafe.Pointer(buf)) + + setup(seed, b, counter) + + for i := range b[0] { + // Load block i from b[*][i] into local variables. + b0 := b[0][i] + b1 := b[1][i] + b2 := b[2][i] + b3 := b[3][i] + b4 := b[4][i] + b5 := b[5][i] + b6 := b[6][i] + b7 := b[7][i] + b8 := b[8][i] + b9 := b[9][i] + b10 := b[10][i] + b11 := b[11][i] + b12 := b[12][i] + b13 := b[13][i] + b14 := b[14][i] + b15 := b[15][i] + + // 4 iterations of eight quarter-rounds each is 8 rounds + for round := 0; round < 4; round++ { + b0, b4, b8, b12 = qr(b0, b4, b8, b12) + b1, b5, b9, b13 = qr(b1, b5, b9, b13) + b2, b6, b10, b14 = qr(b2, b6, b10, b14) + b3, b7, b11, b15 = qr(b3, b7, b11, b15) + + b0, b5, b10, b15 = qr(b0, b5, b10, b15) + b1, b6, b11, b12 = qr(b1, b6, b11, b12) + b2, b7, b8, b13 = qr(b2, b7, b8, b13) + b3, b4, b9, b14 = qr(b3, b4, b9, b14) + } + + // Store block i back into b[*][i]. + // Add b4..b11 back to the original key material, + // like in ChaCha20, to avoid trivial invertibility. + // There is no entropy in b0..b3 and b12..b15 + // so we can skip the additions and save some time. + b[0][i] = b0 + b[1][i] = b1 + b[2][i] = b2 + b[3][i] = b3 + b[4][i] += b4 + b[5][i] += b5 + b[6][i] += b6 + b[7][i] += b7 + b[8][i] += b8 + b[9][i] += b9 + b[10][i] += b10 + b[11][i] += b11 + b[12][i] = b12 + b[13][i] = b13 + b[14][i] = b14 + b[15][i] = b15 + } + + if goarch.BigEndian { + // On a big-endian system, reading the uint32 pairs as uint64s + // will word-swap them compared to little-endian, so we word-swap + // them here first to make the next swap get the right answer. + for i, x := range buf { + buf[i] = x>>32 | x<<32 + } + } +} + +// qr is the (inlinable) ChaCha8 quarter round. +func qr(a, b, c, d uint32) (_a, _b, _c, _d uint32) { + a += b + d ^= a + d = d<<16 | d>>16 + c += d + b ^= c + b = b<<12 | b>>20 + a += b + d ^= a + d = d<<8 | d>>24 + c += d + b ^= c + b = b<<7 | b>>25 + return a, b, c, d +} diff --git a/src/internal/chacha8rand/chacha8_stub.s b/src/internal/chacha8rand/chacha8_stub.s new file mode 100644 index 0000000000..09be558fcb --- /dev/null +++ b/src/internal/chacha8rand/chacha8_stub.s @@ -0,0 +1,12 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !amd64 && !arm64 + +#include "textflag.h" + +// func block(counter uint64, seed *[8]uint32, blocks *[16][4]uint32) +TEXT ·block(SB), NOSPLIT, $0 + JMP ·block_generic(SB) + diff --git a/src/internal/chacha8rand/export_test.go b/src/internal/chacha8rand/export_test.go new file mode 100644 index 0000000000..70478a45c3 --- /dev/null +++ b/src/internal/chacha8rand/export_test.go @@ -0,0 +1,8 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package chacha8rand + +var Block = block +var Block_generic = block_generic diff --git a/src/internal/chacha8rand/rand_test.go b/src/internal/chacha8rand/rand_test.go new file mode 100644 index 0000000000..f4770999c9 --- /dev/null +++ b/src/internal/chacha8rand/rand_test.go @@ -0,0 +1,192 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package chacha8rand_test + +import ( + "bytes" + "encoding/binary" + "fmt" + . "internal/chacha8rand" + "slices" + "testing" +) + +func TestOutput(t *testing.T) { + var s State + s.Init(seed) + for i := range output { + for { + x, ok := s.Next() + if ok { + if x != output[i] { + t.Errorf("#%d: have %#x want %#x", i, x, output[i]) + } + break + } + s.Refill() + } + } +} + +func TestMarshal(t *testing.T) { + var s State + s.Init(seed) + for i := range output { + for { + b := Marshal(&s) + s = State{} + err := Unmarshal(&s, b) + if err != nil { + t.Fatalf("#%d: Unmarshal: %v", i, err) + } + x, ok := s.Next() + if ok { + if x != output[i] { + t.Fatalf("#%d: have %#x want %#x", i, x, output[i]) + } + break + } + s.Refill() + } + } +} + +func BenchmarkBlock(b *testing.B) { + var seed [4]uint64 + var blocks [32]uint64 + + for i := 0; i < b.N; i++ { + Block(&seed, &blocks, 0) + } + b.SetBytes(32 * 8) +} + +func TestBlockGeneric(t *testing.T) { + var b1, b2 [32]uint64 + s := seed // byte seed + seed := [4]uint64{ + binary.LittleEndian.Uint64(s[0*8:]), + binary.LittleEndian.Uint64(s[1*8:]), + binary.LittleEndian.Uint64(s[2*8:]), + binary.LittleEndian.Uint64(s[3*8:]), + } + + Block(&seed, &b1, 4) + Block_generic(&seed, &b2, 4) + if !slices.Equal(b1[:], b2[:]) { + var out bytes.Buffer + fmt.Fprintf(&out, "%-18s %-18s\n", "block", "block_generic") + for i := range b1 { + suffix := "" + if b1[i] != b2[i] { + suffix = " mismatch!" + } + fmt.Fprintf(&out, "%#016x %#016x%s\n", b1[i], b2[i], suffix) + } + t.Errorf("block and block_generic disagree:\n%s", out.String()) + } +} + +// Golden output test to make sure algorithm never changes, +// so that its use in math/rand/v2 stays stable. +// See https://c2sp.org/chacha8rand. + +var seed = [32]byte([]byte("ABCDEFGHIJKLMNOPQRSTUVWXYZ123456")) + +var output = []uint64{ + 0xb773b6063d4616a5, 0x1160af22a66abc3c, 0x8c2599d9418d287c, 0x7ee07e037edc5cd6, + 0xcfaa9ee02d1c16ad, 0x0e090eef8febea79, 0x3c82d271128b5b3e, 0x9c5addc11252a34f, + 0xdf79bb617d6ceea6, 0x36d553591f9d736a, 0xeef0d14e181ee01f, 0x089bfc760ae58436, + 0xd9e52b59cc2ad268, 0xeb2fb4444b1b8aba, 0x4f95c8a692c46661, 0xc3c6323217cae62c, + 0x91ebb4367f4e2e7e, 0x784cf2c6a0ec9bc6, 0x5c34ec5c34eabe20, 0x4f0a8f515570daa8, + 0xfc35dcb4113d6bf2, 0x5b0da44c645554bc, 0x6d963da3db21d9e1, 0xeeaefc3150e500f3, + 0x2d37923dda3750a5, 0x380d7a626d4bc8b0, 0xeeaf68ede3d7ee49, 0xf4356695883b717c, + 0x846a9021392495a4, 0x8e8510549630a61b, 0x18dc02545dbae493, 0x0f8f9ff0a65a3d43, + 0xccf065f7190ff080, 0xfd76d1aa39673330, 0x95d232936cba6433, 0x6c7456d1070cbd17, + 0x462acfdaff8c6562, 0x5bafab866d34fc6a, 0x0c862f78030a2988, 0xd39a83e407c3163d, + 0xc00a2b7b45f22ebf, 0x564307c62466b1a9, 0x257e0424b0c072d4, 0x6fb55e99496c28fe, + 0xae9873a88f5cd4e0, 0x4657362ac60d3773, 0x1c83f91ecdf23e8e, 0x6fdc0792c15387c0, + 0x36dad2a30dfd2b5c, 0xa4b593290595bdb7, 0x4de18934e4cc02c5, 0xcdc0d604f015e3a7, + 0xfba0dbf69ad80321, 0x60e8bea3d139de87, 0xd18a4d851ef48756, 0x6366447c2215f34a, + 0x05682e97d3d007ee, 0x4c0e8978c6d54ab2, 0xcf1e9f6a6712edc2, 0x061439414c80cfd3, + 0xd1a8b6e2745c0ead, 0x31a7918d45c410e8, 0xabcc61ad90216eec, 0x4040d92d2032a71a, + 0x3cd2f66ffb40cd68, 0xdcd051c07295857a, 0xeab55cbcd9ab527e, 0x18471dce781bdaac, + 0xf7f08cd144dc7252, 0x5804e0b13d7f40d1, 0x5cb1a446e4b2d35b, 0xe6d4a728d2138a06, + 0x05223e40ca60dad8, 0x2d61ec3206ac6a68, 0xab692356874c17b8, 0xc30954417676de1c, + 0x4f1ace3732225624, 0xfba9510813988338, 0x997f200f52752e11, 0x1116aaafe86221fa, + 0x07ce3b5cb2a13519, 0x2956bc72bc458314, 0x4188b7926140eb78, 0x56ca6dbfd4adea4d, + 0x7fe3c22349340ce5, 0x35c08f9c37675f8a, 0x11e1c7fbef5ed521, 0x98adc8464ec1bc75, + 0xd163b2c73d1203f8, 0x8c761ee043a2f3f3, 0x24b99d6accecd7b7, 0x793e31aa112f0370, + 0x8e87dc2a19285139, 0x4247ae04f7096e25, 0x514f3122926fe20f, 0xdc6fb3f045d2a7e9, + 0x15cb30cecdd18eba, 0xcbc7fdecf6900274, 0x3fb5c696dc8ba021, 0xd1664417c8d274e6, + 0x05f7e445ea457278, 0xf920bbca1b9db657, 0x0c1950b4da22cb99, 0xf875baf1af09e292, + 0xbed3d7b84250f838, 0xf198e8080fd74160, 0xc9eda51d9b7ea703, 0xf709ef55439bf8f6, + 0xd20c74feebf116fc, 0x305668eb146d7546, 0x829af3ec10d89787, 0x15b8f9697b551dbc, + 0xfc823c6c8e64b8c9, 0x345585e8183b40bc, 0x674b4171d6581368, 0x1234d81cd670e9f7, + 0x0e505210d8a55e19, 0xe8258d69eeeca0dc, 0x05d4c452e8baf67e, 0xe8dbe30116a45599, + 0x1cf08ce1b1176f00, 0xccf7d0a4b81ecb49, 0x303fea136b2c430e, 0x861d6c139c06c871, + 0x5f41df72e05e0487, 0x25bd7e1e1ae26b1d, 0xbe9f4004d662a41d, 0x65bf58d483188546, + 0xd1b27cff69db13cc, 0x01a6663372c1bb36, 0x578dd7577b727f4d, 0x19c78f066c083cf6, + 0xdbe014d4f9c391bb, 0x97fbb2dd1d13ffb3, 0x31c91e0af9ef8d4f, 0x094dfc98402a43ba, + 0x069bd61bea37b752, 0x5b72d762e8d986ca, 0x72ee31865904bc85, 0xd1f5fdc5cd36c33e, + 0xba9b4980a8947cad, 0xece8f05eac49ab43, 0x65fe1184abae38e7, 0x2d7cb9dea5d31452, + 0xcc71489476e467e3, 0x4c03a258a578c68c, 0x00efdf9ecb0fd8fc, 0x9924cad471e2666d, + 0x87f8668318f765e9, 0xcb4dc57c1b55f5d8, 0xd373835a86604859, 0xe526568b5540e482, + 0x1f39040f08586fec, 0xb764f3f00293f8e6, 0x049443a2f6bd50a8, 0x76fec88697d3941a, + 0x3efb70d039bae7a2, 0xe2f4611368eca8a8, 0x7c007a96e01d2425, 0xbbcce5768e69c5bf, + 0x784fb4985c42aac3, 0xf72b5091aa223874, 0x3630333fb1e62e07, 0x8e7319ebdebbb8de, + 0x2a3982bca959fa00, 0xb2b98b9f964ba9b3, 0xf7e31014adb71951, 0xebd0fca3703acc82, + 0xec654e2a2fe6419a, 0xb326132d55a52e2c, 0x2248c57f44502978, 0x32710c2f342daf16, + 0x0517b47b5acb2bec, 0x4c7a718fca270937, 0xd69142bed0bcc541, 0xe40ebcb8ff52ce88, + 0x3e44a2dbc9f828d4, 0xc74c2f4f8f873f58, 0x3dbf648eb799e45b, 0x33f22475ee0e86f8, + 0x1eb4f9ee16d47f65, 0x40f8d2b8712744e3, 0xb886b4da3cb14572, 0x2086326fbdd6f64d, + 0xcc3de5907dd882b9, 0xa2e8b49a5ee909df, 0xdbfb8e7823964c10, 0x70dd6089ef0df8d5, + 0x30141663cdd9c99f, 0x04b805325c240365, 0x7483d80314ac12d6, 0x2b271cb91aa7f5f9, + 0x97e2245362abddf0, 0x5a84f614232a9fab, 0xf71125fcda4b7fa2, 0x1ca5a61d74b27267, + 0x38cc6a9b3adbcb45, 0xdde1bb85dc653e39, 0xe9d0c8fa64f89fd4, 0x02c5fb1ecd2b4188, + 0xf2bd137bca5756e5, 0xadefe25d121be155, 0x56cd1c3c5d893a8e, 0x4c50d337beb65bb9, + 0x918c5151675cf567, 0xaba649ffcfb56a1e, 0x20c74ab26a2247cd, 0x71166bac853c08da, + 0xb07befe2e584fc5d, 0xda45ff2a588dbf32, 0xdb98b03c4d75095e, 0x60285ae1aaa65a4c, + 0xf93b686a263140b8, 0xde469752ee1c180e, 0xcec232dc04129aae, 0xeb916baa1835ea04, + 0xd49c21c8b64388ff, 0x72a82d9658864888, 0x003348ef7eac66a8, 0x7f6f67e655b209eb, + 0x532ffb0b7a941b25, 0xd940ade6128deede, 0xdf24f2a1af89fe23, 0x95aa3b4988195ae0, + 0x3da649404f94be4a, 0x692dad132c3f7e27, 0x40aee76ecaaa9eb8, 0x1294a01e09655024, + 0x6df797abdba4e4f5, 0xea2fb6024c1d7032, 0x5f4e0492295489fc, 0x57972914ea22e06a, + 0x9a8137d133aad473, 0xa2e6dd6ae7cdf2f3, 0x9f42644f18086647, 0x16d03301c170bd3e, + 0x908c416fa546656d, 0xe081503be22e123e, 0x077cf09116c4cc72, 0xcbd25cd264b7f229, + 0x3db2f468ec594031, 0x46c00e734c9badd5, 0xd0ec0ac72075d861, 0x3037cb3cf80b7630, + 0x574c3d7b3a2721c6, 0xae99906a0076824b, 0xb175a5418b532e70, 0xd8b3e251ee231ddd, + 0xb433eec25dca1966, 0x530f30dc5cff9a93, 0x9ff03d98b53cd335, 0xafc4225076558cdf, + 0xef81d3a28284402a, 0x110bdbf51c110a28, 0x9ae1b255d027e8f6, 0x7de3e0aa24688332, + 0xe483c3ecd2067ee2, 0xf829328b276137e6, 0xa413ccad57562cad, 0xe6118e8b496acb1f, + 0x8288dca6da5ec01f, 0xa53777dc88c17255, 0x8a00f1e0d5716eda, 0x618e6f47b7a720a8, + 0x9e3907b0c692a841, 0x978b42ca963f34f3, 0x75e4b0cd98a7d7ef, 0xde4dbd6e0b5f4752, + 0x0252e4153f34493f, 0x50f0e7d803734ef9, 0x237766a38ed167ee, 0x4124414001ee39a0, + 0xd08df643e535bb21, 0x34f575b5a9a80b74, 0x2c343af87297f755, 0xcd8b6d99d821f7cb, + 0xe376fd7256fc48ae, 0xe1b06e7334352885, 0xfa87b26f86c169eb, 0x36c1604665a971de, + 0xdba147c2239c8e80, 0x6b208e69fc7f0e24, 0x8795395b6f2b60c3, 0x05dabee9194907f4, + 0xb98175142f5ed902, 0x5e1701e2021ddc81, 0x0875aba2755eed08, 0x778d83289251de95, + 0x3bfbe46a039ecb31, 0xb24704fce4cbd7f9, 0x6985ffe9a7c91e3d, 0xc8efb13df249dabb, + 0xb1037e64b0f4c9f6, 0x55f69fd197d6b7c3, 0x672589d71d68a90c, 0xbebdb8224f50a77e, + 0x3f589f80007374a7, 0xd307f4635954182a, 0xcff5850c10d4fd90, 0xc6da02dfb6408e15, + 0x93daeef1e2b1a485, 0x65d833208aeea625, 0xe2b13fa13ed3b5fa, 0x67053538130fb68e, + 0xc1042f6598218fa9, 0xee5badca749b8a2e, 0x6d22a3f947dae37d, 0xb62c6d1657f4dbaf, + 0x6e007de69704c20b, 0x1af2b913fc3841d8, 0xdc0e47348e2e8e22, 0x9b1ddef1cf958b22, + 0x632ed6b0233066b8, 0xddd02d3311bed8f2, 0xf147cfe1834656e9, 0x399aaa49d511597a, + 0x6b14886979ec0309, 0x64fc4ac36b5afb97, 0xb82f78e07f7cf081, 0x10925c9a323d0e1b, + 0xf451c79ee13c63f6, 0x7c2fc180317876c7, 0x35a12bd9eecb7d22, 0x335654a539621f90, + 0xcc32a3f35db581f0, 0xc60748a80b2369cb, 0x7c4dd3b08591156b, 0xac1ced4b6de22291, + 0xa32cfa2df134def5, 0x627108918dea2a53, 0x0555b1608fcb4ff4, 0x143ee7ac43aaa33c, + 0xdae90ce7cf4fc218, 0x4d68fc2582bcf4b5, 0x37094e1849135d71, 0xf7857e09f3d49fd8, + 0x007538c503768be7, 0xedf648ba2f6be601, 0xaa347664dd72513e, 0xbe63893c6ef23b86, + 0x130b85710605af97, 0xdd765c6b1ef6ab56, 0xf3249a629a97dc6b, 0x2a114f9020fab8e5, + 0x5a69e027cfc6ad08, 0x3c4ccb36f1a5e050, 0x2e9e7d596834f0a5, 0x2430be6858fce789, + 0xe90b862f2466e597, 0x895e2884f159a9ec, 0x26ab8fa4902fcb57, 0xa6efff5c54e1fa50, + 0x333ac4e5811a8255, 0xa58d515f02498611, 0xfe5a09dcb25c6ef4, 0x03898988ab5f5818, + 0x289ff6242af6c617, 0x3d9dd59fd381ea23, 0x52d7d93d8a8aae51, 0xc76a123d511f786f, + 0xf68901edaf00c46c, 0x8c630871b590de80, 0x05209c308991e091, 0x1f809f99b4788177, + 0x11170c2eb6c19fd8, 0x44433c779062ba58, 0xc0acb51af1874c45, 0x9f2e134284809fa1, + 0xedb523bd15c619fa, 0x02d97fd53ecc23c0, 0xacaf05a34462374c, 0xddd9c6d34bffa11f, +} diff --git a/src/math/rand/v2/chacha8.go b/src/math/rand/v2/chacha8.go new file mode 100644 index 0000000000..6b9aa72782 --- /dev/null +++ b/src/math/rand/v2/chacha8.go @@ -0,0 +1,46 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package rand + +import "internal/chacha8rand" + +// A ChaCha8 is a ChaCha8-based cryptographically strong +// random number generator. +type ChaCha8 struct { + state chacha8rand.State +} + +// NewChaCha8 returns a new ChaCha8 seeded with the given seed. +func NewChaCha8(seed [32]byte) *ChaCha8 { + c := new(ChaCha8) + c.state.Init(seed) + return c +} + +// Seed resets the ChaCha8 to behave the same way as NewChaCha8(seed). +func (c *ChaCha8) Seed(seed [32]byte) { + c.state.Init(seed) +} + +// Uint64 returns a uniformly distributed random uint64 value. +func (c *ChaCha8) Uint64() uint64 { + for { + x, ok := c.state.Next() + if ok { + return x + } + c.state.Refill() + } +} + +// UnmarshalBinary implements the encoding.BinaryUnmarshaler interface. +func (c *ChaCha8) UnmarshalBinary(data []byte) error { + return chacha8rand.Unmarshal(&c.state, data) +} + +// MarshalBinary implements the encoding.BinaryMarshaler interface. +func (c *ChaCha8) MarshalBinary() ([]byte, error) { + return chacha8rand.Marshal(&c.state), nil +} diff --git a/src/math/rand/v2/chacha8_test.go b/src/math/rand/v2/chacha8_test.go new file mode 100644 index 0000000000..2c55b479b2 --- /dev/null +++ b/src/math/rand/v2/chacha8_test.go @@ -0,0 +1,531 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package rand_test + +import ( + . "math/rand/v2" + "testing" +) + +func TestChaCha8(t *testing.T) { + p := NewChaCha8(chacha8seed) + for i, x := range chacha8output { + if u := p.Uint64(); u != x { + t.Errorf("ChaCha8 #%d = %#x, want %#x", i, u, x) + } + } + + p.Seed(chacha8seed) + for i, x := range chacha8output { + if u := p.Uint64(); u != x { + t.Errorf("ChaCha8 #%d = %#x, want %#x", i, u, x) + } + } +} + +func TestChaCha8Marshal(t *testing.T) { + p := NewChaCha8(chacha8seed) + for i, x := range chacha8output { + enc, err := p.MarshalBinary() + if err != nil { + t.Fatalf("#%d: MarshalBinary: %v", i, err) + } + if string(enc) != chacha8marshal[i] { + t.Fatalf("#%d: MarshalBinary=%q, want %q", i, enc, chacha8marshal[i]) + } + *p = ChaCha8{} + if err := p.UnmarshalBinary(enc); err != nil { + t.Fatalf("#%d: UnmarshalBinary: %v", i, err) + } + if u := p.Uint64(); u != x { + t.Errorf("ChaCha8 #%d = %#x, want %#x", i, u, x) + } + } +} + +func BenchmarkChaCha8(b *testing.B) { + p := NewChaCha8([32]byte{1, 2, 3, 4, 5}) + var t uint64 + for n := b.N; n > 0; n-- { + t += p.Uint64() + } + Sink = t +} + +// Golden output test to make sure algorithm never changes, +// so that its use in math/rand/v2 stays stable. + +var chacha8seed = [32]byte([]byte("ABCDEFGHIJKLMNOPQRSTUVWXYZ123456")) + +var chacha8output = []uint64{ + 0xb773b6063d4616a5, 0x1160af22a66abc3c, 0x8c2599d9418d287c, 0x7ee07e037edc5cd6, + 0xcfaa9ee02d1c16ad, 0x0e090eef8febea79, 0x3c82d271128b5b3e, 0x9c5addc11252a34f, + 0xdf79bb617d6ceea6, 0x36d553591f9d736a, 0xeef0d14e181ee01f, 0x089bfc760ae58436, + 0xd9e52b59cc2ad268, 0xeb2fb4444b1b8aba, 0x4f95c8a692c46661, 0xc3c6323217cae62c, + 0x91ebb4367f4e2e7e, 0x784cf2c6a0ec9bc6, 0x5c34ec5c34eabe20, 0x4f0a8f515570daa8, + 0xfc35dcb4113d6bf2, 0x5b0da44c645554bc, 0x6d963da3db21d9e1, 0xeeaefc3150e500f3, + 0x2d37923dda3750a5, 0x380d7a626d4bc8b0, 0xeeaf68ede3d7ee49, 0xf4356695883b717c, + 0x846a9021392495a4, 0x8e8510549630a61b, 0x18dc02545dbae493, 0x0f8f9ff0a65a3d43, + 0xccf065f7190ff080, 0xfd76d1aa39673330, 0x95d232936cba6433, 0x6c7456d1070cbd17, + 0x462acfdaff8c6562, 0x5bafab866d34fc6a, 0x0c862f78030a2988, 0xd39a83e407c3163d, + 0xc00a2b7b45f22ebf, 0x564307c62466b1a9, 0x257e0424b0c072d4, 0x6fb55e99496c28fe, + 0xae9873a88f5cd4e0, 0x4657362ac60d3773, 0x1c83f91ecdf23e8e, 0x6fdc0792c15387c0, + 0x36dad2a30dfd2b5c, 0xa4b593290595bdb7, 0x4de18934e4cc02c5, 0xcdc0d604f015e3a7, + 0xfba0dbf69ad80321, 0x60e8bea3d139de87, 0xd18a4d851ef48756, 0x6366447c2215f34a, + 0x05682e97d3d007ee, 0x4c0e8978c6d54ab2, 0xcf1e9f6a6712edc2, 0x061439414c80cfd3, + 0xd1a8b6e2745c0ead, 0x31a7918d45c410e8, 0xabcc61ad90216eec, 0x4040d92d2032a71a, + 0x3cd2f66ffb40cd68, 0xdcd051c07295857a, 0xeab55cbcd9ab527e, 0x18471dce781bdaac, + 0xf7f08cd144dc7252, 0x5804e0b13d7f40d1, 0x5cb1a446e4b2d35b, 0xe6d4a728d2138a06, + 0x05223e40ca60dad8, 0x2d61ec3206ac6a68, 0xab692356874c17b8, 0xc30954417676de1c, + 0x4f1ace3732225624, 0xfba9510813988338, 0x997f200f52752e11, 0x1116aaafe86221fa, + 0x07ce3b5cb2a13519, 0x2956bc72bc458314, 0x4188b7926140eb78, 0x56ca6dbfd4adea4d, + 0x7fe3c22349340ce5, 0x35c08f9c37675f8a, 0x11e1c7fbef5ed521, 0x98adc8464ec1bc75, + 0xd163b2c73d1203f8, 0x8c761ee043a2f3f3, 0x24b99d6accecd7b7, 0x793e31aa112f0370, + 0x8e87dc2a19285139, 0x4247ae04f7096e25, 0x514f3122926fe20f, 0xdc6fb3f045d2a7e9, + 0x15cb30cecdd18eba, 0xcbc7fdecf6900274, 0x3fb5c696dc8ba021, 0xd1664417c8d274e6, + 0x05f7e445ea457278, 0xf920bbca1b9db657, 0x0c1950b4da22cb99, 0xf875baf1af09e292, + 0xbed3d7b84250f838, 0xf198e8080fd74160, 0xc9eda51d9b7ea703, 0xf709ef55439bf8f6, + 0xd20c74feebf116fc, 0x305668eb146d7546, 0x829af3ec10d89787, 0x15b8f9697b551dbc, + 0xfc823c6c8e64b8c9, 0x345585e8183b40bc, 0x674b4171d6581368, 0x1234d81cd670e9f7, + 0x0e505210d8a55e19, 0xe8258d69eeeca0dc, 0x05d4c452e8baf67e, 0xe8dbe30116a45599, + 0x1cf08ce1b1176f00, 0xccf7d0a4b81ecb49, 0x303fea136b2c430e, 0x861d6c139c06c871, + 0x5f41df72e05e0487, 0x25bd7e1e1ae26b1d, 0xbe9f4004d662a41d, 0x65bf58d483188546, + 0xd1b27cff69db13cc, 0x01a6663372c1bb36, 0x578dd7577b727f4d, 0x19c78f066c083cf6, + 0xdbe014d4f9c391bb, 0x97fbb2dd1d13ffb3, 0x31c91e0af9ef8d4f, 0x094dfc98402a43ba, + 0x069bd61bea37b752, 0x5b72d762e8d986ca, 0x72ee31865904bc85, 0xd1f5fdc5cd36c33e, + 0xba9b4980a8947cad, 0xece8f05eac49ab43, 0x65fe1184abae38e7, 0x2d7cb9dea5d31452, + 0xcc71489476e467e3, 0x4c03a258a578c68c, 0x00efdf9ecb0fd8fc, 0x9924cad471e2666d, + 0x87f8668318f765e9, 0xcb4dc57c1b55f5d8, 0xd373835a86604859, 0xe526568b5540e482, + 0x1f39040f08586fec, 0xb764f3f00293f8e6, 0x049443a2f6bd50a8, 0x76fec88697d3941a, + 0x3efb70d039bae7a2, 0xe2f4611368eca8a8, 0x7c007a96e01d2425, 0xbbcce5768e69c5bf, + 0x784fb4985c42aac3, 0xf72b5091aa223874, 0x3630333fb1e62e07, 0x8e7319ebdebbb8de, + 0x2a3982bca959fa00, 0xb2b98b9f964ba9b3, 0xf7e31014adb71951, 0xebd0fca3703acc82, + 0xec654e2a2fe6419a, 0xb326132d55a52e2c, 0x2248c57f44502978, 0x32710c2f342daf16, + 0x0517b47b5acb2bec, 0x4c7a718fca270937, 0xd69142bed0bcc541, 0xe40ebcb8ff52ce88, + 0x3e44a2dbc9f828d4, 0xc74c2f4f8f873f58, 0x3dbf648eb799e45b, 0x33f22475ee0e86f8, + 0x1eb4f9ee16d47f65, 0x40f8d2b8712744e3, 0xb886b4da3cb14572, 0x2086326fbdd6f64d, + 0xcc3de5907dd882b9, 0xa2e8b49a5ee909df, 0xdbfb8e7823964c10, 0x70dd6089ef0df8d5, + 0x30141663cdd9c99f, 0x04b805325c240365, 0x7483d80314ac12d6, 0x2b271cb91aa7f5f9, + 0x97e2245362abddf0, 0x5a84f614232a9fab, 0xf71125fcda4b7fa2, 0x1ca5a61d74b27267, + 0x38cc6a9b3adbcb45, 0xdde1bb85dc653e39, 0xe9d0c8fa64f89fd4, 0x02c5fb1ecd2b4188, + 0xf2bd137bca5756e5, 0xadefe25d121be155, 0x56cd1c3c5d893a8e, 0x4c50d337beb65bb9, + 0x918c5151675cf567, 0xaba649ffcfb56a1e, 0x20c74ab26a2247cd, 0x71166bac853c08da, + 0xb07befe2e584fc5d, 0xda45ff2a588dbf32, 0xdb98b03c4d75095e, 0x60285ae1aaa65a4c, + 0xf93b686a263140b8, 0xde469752ee1c180e, 0xcec232dc04129aae, 0xeb916baa1835ea04, + 0xd49c21c8b64388ff, 0x72a82d9658864888, 0x003348ef7eac66a8, 0x7f6f67e655b209eb, + 0x532ffb0b7a941b25, 0xd940ade6128deede, 0xdf24f2a1af89fe23, 0x95aa3b4988195ae0, + 0x3da649404f94be4a, 0x692dad132c3f7e27, 0x40aee76ecaaa9eb8, 0x1294a01e09655024, + 0x6df797abdba4e4f5, 0xea2fb6024c1d7032, 0x5f4e0492295489fc, 0x57972914ea22e06a, + 0x9a8137d133aad473, 0xa2e6dd6ae7cdf2f3, 0x9f42644f18086647, 0x16d03301c170bd3e, + 0x908c416fa546656d, 0xe081503be22e123e, 0x077cf09116c4cc72, 0xcbd25cd264b7f229, + 0x3db2f468ec594031, 0x46c00e734c9badd5, 0xd0ec0ac72075d861, 0x3037cb3cf80b7630, + 0x574c3d7b3a2721c6, 0xae99906a0076824b, 0xb175a5418b532e70, 0xd8b3e251ee231ddd, + 0xb433eec25dca1966, 0x530f30dc5cff9a93, 0x9ff03d98b53cd335, 0xafc4225076558cdf, + 0xef81d3a28284402a, 0x110bdbf51c110a28, 0x9ae1b255d027e8f6, 0x7de3e0aa24688332, + 0xe483c3ecd2067ee2, 0xf829328b276137e6, 0xa413ccad57562cad, 0xe6118e8b496acb1f, + 0x8288dca6da5ec01f, 0xa53777dc88c17255, 0x8a00f1e0d5716eda, 0x618e6f47b7a720a8, + 0x9e3907b0c692a841, 0x978b42ca963f34f3, 0x75e4b0cd98a7d7ef, 0xde4dbd6e0b5f4752, + 0x0252e4153f34493f, 0x50f0e7d803734ef9, 0x237766a38ed167ee, 0x4124414001ee39a0, + 0xd08df643e535bb21, 0x34f575b5a9a80b74, 0x2c343af87297f755, 0xcd8b6d99d821f7cb, + 0xe376fd7256fc48ae, 0xe1b06e7334352885, 0xfa87b26f86c169eb, 0x36c1604665a971de, + 0xdba147c2239c8e80, 0x6b208e69fc7f0e24, 0x8795395b6f2b60c3, 0x05dabee9194907f4, + 0xb98175142f5ed902, 0x5e1701e2021ddc81, 0x0875aba2755eed08, 0x778d83289251de95, + 0x3bfbe46a039ecb31, 0xb24704fce4cbd7f9, 0x6985ffe9a7c91e3d, 0xc8efb13df249dabb, + 0xb1037e64b0f4c9f6, 0x55f69fd197d6b7c3, 0x672589d71d68a90c, 0xbebdb8224f50a77e, + 0x3f589f80007374a7, 0xd307f4635954182a, 0xcff5850c10d4fd90, 0xc6da02dfb6408e15, + 0x93daeef1e2b1a485, 0x65d833208aeea625, 0xe2b13fa13ed3b5fa, 0x67053538130fb68e, + 0xc1042f6598218fa9, 0xee5badca749b8a2e, 0x6d22a3f947dae37d, 0xb62c6d1657f4dbaf, + 0x6e007de69704c20b, 0x1af2b913fc3841d8, 0xdc0e47348e2e8e22, 0x9b1ddef1cf958b22, + 0x632ed6b0233066b8, 0xddd02d3311bed8f2, 0xf147cfe1834656e9, 0x399aaa49d511597a, + 0x6b14886979ec0309, 0x64fc4ac36b5afb97, 0xb82f78e07f7cf081, 0x10925c9a323d0e1b, + 0xf451c79ee13c63f6, 0x7c2fc180317876c7, 0x35a12bd9eecb7d22, 0x335654a539621f90, + 0xcc32a3f35db581f0, 0xc60748a80b2369cb, 0x7c4dd3b08591156b, 0xac1ced4b6de22291, + 0xa32cfa2df134def5, 0x627108918dea2a53, 0x0555b1608fcb4ff4, 0x143ee7ac43aaa33c, + 0xdae90ce7cf4fc218, 0x4d68fc2582bcf4b5, 0x37094e1849135d71, 0xf7857e09f3d49fd8, + 0x007538c503768be7, 0xedf648ba2f6be601, 0xaa347664dd72513e, 0xbe63893c6ef23b86, + 0x130b85710605af97, 0xdd765c6b1ef6ab56, 0xf3249a629a97dc6b, 0x2a114f9020fab8e5, + 0x5a69e027cfc6ad08, 0x3c4ccb36f1a5e050, 0x2e9e7d596834f0a5, 0x2430be6858fce789, + 0xe90b862f2466e597, 0x895e2884f159a9ec, 0x26ab8fa4902fcb57, 0xa6efff5c54e1fa50, + 0x333ac4e5811a8255, 0xa58d515f02498611, 0xfe5a09dcb25c6ef4, 0x03898988ab5f5818, + 0x289ff6242af6c617, 0x3d9dd59fd381ea23, 0x52d7d93d8a8aae51, 0xc76a123d511f786f, + 0xf68901edaf00c46c, 0x8c630871b590de80, 0x05209c308991e091, 0x1f809f99b4788177, + 0x11170c2eb6c19fd8, 0x44433c779062ba58, 0xc0acb51af1874c45, 0x9f2e134284809fa1, + 0xedb523bd15c619fa, 0x02d97fd53ecc23c0, 0xacaf05a34462374c, 0xddd9c6d34bffa11f, +} + +var chacha8marshal = []string{ + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x00ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x01ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x02ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x03ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x04ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x05ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x06ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\aABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\bABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\tABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\nABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\vABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\fABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\rABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x0eABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x0fABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x10ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x11ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x12ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x13ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x14ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x15ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x16ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x17ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x18ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x19ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1aABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1bABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1cABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1dABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1eABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1fABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00 ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00!ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\"ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00#ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00$ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00%ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00&ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00'ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00(ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00)ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00*ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00+ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00,ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00-ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00.ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00/ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x000ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x001ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x002ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x003ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x004ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x005ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x006ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x007ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x008ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x009ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00;ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00?ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00@ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00AABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00BABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00CABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00DABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00EABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00FABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00GABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00HABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00IABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00JABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00KABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00LABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00MABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00NABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00OABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00PABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00QABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00RABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00SABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00TABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00UABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00VABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00WABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00XABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00YABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00ZABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00[ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\\ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00]ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00^ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00_ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00`ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00aABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00bABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00cABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00dABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00eABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00fABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00gABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00hABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00iABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00jABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00kABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00lABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00mABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00nABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00oABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00pABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00qABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00rABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00sABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00tABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00uABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00vABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00wABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00xABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00yABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00zABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00{ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00|ABCDEFGHIJKLMNOPQRSTUVWXYZ123456", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x01>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x02>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x03>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x04>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x05>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x06>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\a>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\b>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\t>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\n>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\v>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\f>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\r>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x0e>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x0f>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x10>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x11>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x12>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x13>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x14>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x15>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x16>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x17>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x18>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x19>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1a>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1b>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1c>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1d>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1e>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1f>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00 >\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00!>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\">\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00#>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00$>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00%>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00&>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00'>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00(>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00)>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00*>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00+>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00,>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00->\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00.>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00/>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x000>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x001>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x002>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x003>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x004>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x005>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x006>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x007>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x008>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x009>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00:>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00;>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00<>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00=>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00>>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00?>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00@>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00A>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00B>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00C>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00D>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00E>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00F>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00G>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00H>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00I>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00J>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00K>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00L>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00M>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00N>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00O>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00P>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00Q>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00R>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00S>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00T>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00U>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00V>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00W>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00X>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00Y>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00Z>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00[>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\\>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00]>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00^>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00_>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00`>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00a>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00b>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00c>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00d>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00e>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00f>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00g>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00h>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00i>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00j>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00k>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00l>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00m>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00n>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00o>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00p>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00q>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00r>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00s>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00t>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00u>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00v>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00w>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00x>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00y>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00z>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00{>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00|>\x15\x0e\xacHk4O\x11a\xa8R\xcd5\x9atr\x8cXO\x9c]\x10\xdf\xf61\xea\x11\x18\x06\x8a\xaa", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x01K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x02K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x03K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x04K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x05K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x06K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\aK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\bK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\tK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\nK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\vK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\fK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\rK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x0eK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x0fK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x10K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x11K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x12K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x13K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x14K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x15K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x16K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x17K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x18K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x19K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1aK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1bK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1cK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1dK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1eK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\x1fK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00 K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00!K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\"K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00#K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00$K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00%K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00&K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00'K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00(K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00)K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00*K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00+K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00,K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00-K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00.K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00/K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x000K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x001K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x002K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x003K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x004K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x005K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x006K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x007K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x008K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x009K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00:K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00;K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00?K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00@K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00AK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00BK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00CK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00DK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00EK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00FK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00GK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00HK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00IK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00JK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00KK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00LK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00MK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00NK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00OK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00PK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00QK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00RK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00SK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00TK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00UK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00VK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00WK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00XK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00YK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00ZK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00[K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00\\K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00]K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00^K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00_K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00`K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00aK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00bK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00cK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00dK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00eK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00fK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00gK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00hK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00iK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00jK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00kK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00lK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00mK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00nK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00oK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00pK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00qK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00rK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00sK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00tK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00uK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00vK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00wK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00xK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00yK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00zK3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", + "chacha8:\x00\x00\x00\x00\x00\x00\x00{K3\x9bB!,\x94\x9d\x975\xce'O_t\xee|\xb21\x87\xbb\xbb\xfd)\x8f\xe52\x01\vP\fk", +} From c29444ef39a44ad56ddf7b3d2aa8a51df1163e04 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Sun, 6 Aug 2023 13:26:28 +1000 Subject: [PATCH 155/313] math/rand, math/rand/v2: use ChaCha8 for global rand MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move ChaCha8 code into internal/chacha8rand and use it to implement runtime.rand, which is used for the unseeded global source for both math/rand and math/rand/v2. This also affects the calculation of the start point for iteration over very very large maps (when the 32-bit fastrand is not big enough). The benefit is that misuse of the global random number generators in math/rand and math/rand/v2 in contexts where non-predictable randomness is important for security reasons is no longer a security problem, removing a common mistake among programmers who are unaware of the different kinds of randomness. The cost is an extra 304 bytes per thread stored in the m struct plus 2-3ns more per random uint64 due to the more sophisticated algorithm. Using PCG looks like it would cost about the same, although I haven't benchmarked that. Before this, the math/rand and math/rand/v2 global generator was wyrand (https://github.com/wangyi-fudan/wyhash). For math/rand, using wyrand instead of the Mitchell/Reeds/Thompson ALFG was justifiable, since the latter was not any better. But for math/rand/v2, the global generator really should be at least as good as one of the well-studied, specific algorithms provided directly by the package, and it's not. (Wyrand is still reasonable for scheduling and cache decisions.) Good randomness does have a cost: about twice wyrand. Also rationalize the various runtime rand references. goos: linux goarch: amd64 pkg: math/rand/v2 cpu: AMD Ryzen 9 7950X 16-Core Processor │ bbb48afeb7.amd64 │ 5cf807d1ea.amd64 │ │ sec/op │ sec/op vs base │ ChaCha8-32 1.862n ± 2% 1.861n ± 2% ~ (p=0.825 n=20) PCG_DXSM-32 1.471n ± 1% 1.460n ± 2% ~ (p=0.153 n=20) SourceUint64-32 1.636n ± 2% 1.582n ± 1% -3.30% (p=0.000 n=20) GlobalInt64-32 2.087n ± 1% 3.663n ± 1% +75.54% (p=0.000 n=20) GlobalInt64Parallel-32 0.1042n ± 1% 0.2026n ± 1% +94.48% (p=0.000 n=20) GlobalUint64-32 2.263n ± 2% 3.724n ± 1% +64.57% (p=0.000 n=20) GlobalUint64Parallel-32 0.1019n ± 1% 0.1973n ± 1% +93.67% (p=0.000 n=20) Int64-32 1.771n ± 1% 1.774n ± 1% ~ (p=0.449 n=20) Uint64-32 1.863n ± 2% 1.866n ± 1% ~ (p=0.364 n=20) GlobalIntN1000-32 3.134n ± 3% 4.730n ± 2% +50.95% (p=0.000 n=20) IntN1000-32 2.489n ± 1% 2.489n ± 1% ~ (p=0.683 n=20) Int64N1000-32 2.521n ± 1% 2.516n ± 1% ~ (p=0.394 n=20) Int64N1e8-32 2.479n ± 1% 2.478n ± 2% ~ (p=0.743 n=20) Int64N1e9-32 2.530n ± 2% 2.514n ± 2% ~ (p=0.193 n=20) Int64N2e9-32 2.501n ± 1% 2.494n ± 1% ~ (p=0.616 n=20) Int64N1e18-32 3.227n ± 1% 3.205n ± 1% ~ (p=0.101 n=20) Int64N2e18-32 3.647n ± 1% 3.599n ± 1% ~ (p=0.019 n=20) Int64N4e18-32 5.135n ± 1% 5.069n ± 2% ~ (p=0.034 n=20) Int32N1000-32 2.657n ± 1% 2.637n ± 1% ~ (p=0.180 n=20) Int32N1e8-32 2.636n ± 1% 2.636n ± 1% ~ (p=0.763 n=20) Int32N1e9-32 2.660n ± 2% 2.638n ± 1% ~ (p=0.358 n=20) Int32N2e9-32 2.662n ± 2% 2.618n ± 2% ~ (p=0.064 n=20) Float32-32 2.272n ± 2% 2.239n ± 2% ~ (p=0.194 n=20) Float64-32 2.272n ± 1% 2.286n ± 2% ~ (p=0.763 n=20) ExpFloat64-32 3.762n ± 1% 3.744n ± 1% ~ (p=0.171 n=20) NormFloat64-32 3.706n ± 1% 3.655n ± 2% ~ (p=0.066 n=20) Perm3-32 32.93n ± 3% 34.62n ± 1% +5.13% (p=0.000 n=20) Perm30-32 202.9n ± 1% 204.0n ± 1% ~ (p=0.482 n=20) Perm30ViaShuffle-32 115.0n ± 1% 114.9n ± 1% ~ (p=0.358 n=20) ShuffleOverhead-32 112.8n ± 1% 112.7n ± 1% ~ (p=0.692 n=20) Concurrent-32 2.107n ± 0% 3.725n ± 1% +76.75% (p=0.000 n=20) goos: darwin goarch: arm64 pkg: math/rand/v2 │ bbb48afeb7.arm64 │ 5cf807d1ea.arm64 │ │ sec/op │ sec/op vs base │ ChaCha8-8 2.480n ± 0% 2.429n ± 0% -2.04% (p=0.000 n=20) PCG_DXSM-8 2.531n ± 0% 2.530n ± 0% ~ (p=0.877 n=20) SourceUint64-8 2.534n ± 0% 2.533n ± 0% ~ (p=0.732 n=20) GlobalInt64-8 2.172n ± 1% 4.794n ± 0% +120.67% (p=0.000 n=20) GlobalInt64Parallel-8 0.4320n ± 0% 0.9605n ± 0% +122.32% (p=0.000 n=20) GlobalUint64-8 2.182n ± 0% 4.770n ± 0% +118.58% (p=0.000 n=20) GlobalUint64Parallel-8 0.4307n ± 0% 0.9583n ± 0% +122.51% (p=0.000 n=20) Int64-8 4.107n ± 0% 4.104n ± 0% ~ (p=0.416 n=20) Uint64-8 4.080n ± 0% 4.080n ± 0% ~ (p=0.052 n=20) GlobalIntN1000-8 2.814n ± 2% 5.643n ± 0% +100.50% (p=0.000 n=20) IntN1000-8 4.141n ± 0% 4.139n ± 0% ~ (p=0.140 n=20) Int64N1000-8 4.140n ± 0% 4.140n ± 0% ~ (p=0.313 n=20) Int64N1e8-8 4.140n ± 0% 4.139n ± 0% ~ (p=0.103 n=20) Int64N1e9-8 4.139n ± 0% 4.140n ± 0% ~ (p=0.761 n=20) Int64N2e9-8 4.140n ± 0% 4.140n ± 0% ~ (p=0.636 n=20) Int64N1e18-8 5.266n ± 0% 5.326n ± 1% +1.14% (p=0.001 n=20) Int64N2e18-8 6.052n ± 0% 6.167n ± 0% +1.90% (p=0.000 n=20) Int64N4e18-8 8.826n ± 0% 9.051n ± 0% +2.55% (p=0.000 n=20) Int32N1000-8 4.127n ± 0% 4.132n ± 0% +0.12% (p=0.000 n=20) Int32N1e8-8 4.126n ± 0% 4.131n ± 0% +0.12% (p=0.000 n=20) Int32N1e9-8 4.127n ± 0% 4.132n ± 0% +0.12% (p=0.000 n=20) Int32N2e9-8 4.132n ± 0% 4.131n ± 0% ~ (p=0.017 n=20) Float32-8 4.109n ± 0% 4.105n ± 0% ~ (p=0.379 n=20) Float64-8 4.107n ± 0% 4.106n ± 0% ~ (p=0.867 n=20) ExpFloat64-8 5.339n ± 0% 5.383n ± 0% +0.82% (p=0.000 n=20) NormFloat64-8 5.735n ± 0% 5.737n ± 1% ~ (p=0.856 n=20) Perm3-8 26.65n ± 0% 26.80n ± 1% +0.58% (p=0.000 n=20) Perm30-8 194.8n ± 1% 197.0n ± 0% +1.18% (p=0.000 n=20) Perm30ViaShuffle-8 156.6n ± 0% 157.6n ± 1% +0.61% (p=0.000 n=20) ShuffleOverhead-8 124.9n ± 0% 125.5n ± 0% +0.52% (p=0.000 n=20) Concurrent-8 2.434n ± 3% 5.066n ± 0% +108.09% (p=0.000 n=20) goos: linux goarch: 386 pkg: math/rand/v2 cpu: AMD Ryzen 9 7950X 16-Core Processor │ bbb48afeb7.386 │ 5cf807d1ea.386 │ │ sec/op │ sec/op vs base │ ChaCha8-32 11.295n ± 1% 4.748n ± 2% -57.96% (p=0.000 n=20) PCG_DXSM-32 7.693n ± 1% 7.738n ± 2% ~ (p=0.542 n=20) SourceUint64-32 7.658n ± 2% 7.622n ± 2% ~ (p=0.344 n=20) GlobalInt64-32 3.473n ± 2% 7.526n ± 2% +116.73% (p=0.000 n=20) GlobalInt64Parallel-32 0.3198n ± 0% 0.5444n ± 0% +70.22% (p=0.000 n=20) GlobalUint64-32 3.612n ± 0% 7.575n ± 1% +109.69% (p=0.000 n=20) GlobalUint64Parallel-32 0.3168n ± 0% 0.5403n ± 0% +70.51% (p=0.000 n=20) Int64-32 7.673n ± 2% 7.789n ± 1% ~ (p=0.122 n=20) Uint64-32 7.773n ± 1% 7.827n ± 2% ~ (p=0.920 n=20) GlobalIntN1000-32 6.268n ± 1% 9.581n ± 1% +52.87% (p=0.000 n=20) IntN1000-32 10.33n ± 2% 10.45n ± 1% ~ (p=0.233 n=20) Int64N1000-32 10.98n ± 2% 11.01n ± 1% ~ (p=0.401 n=20) Int64N1e8-32 11.19n ± 2% 10.97n ± 1% ~ (p=0.033 n=20) Int64N1e9-32 11.06n ± 1% 11.08n ± 1% ~ (p=0.498 n=20) Int64N2e9-32 11.10n ± 1% 11.01n ± 2% ~ (p=0.995 n=20) Int64N1e18-32 15.23n ± 2% 15.04n ± 1% ~ (p=0.973 n=20) Int64N2e18-32 15.89n ± 1% 15.85n ± 1% ~ (p=0.409 n=20) Int64N4e18-32 18.96n ± 2% 19.34n ± 2% ~ (p=0.048 n=20) Int32N1000-32 10.46n ± 2% 10.44n ± 2% ~ (p=0.480 n=20) Int32N1e8-32 10.46n ± 2% 10.49n ± 2% ~ (p=0.951 n=20) Int32N1e9-32 10.28n ± 2% 10.26n ± 1% ~ (p=0.431 n=20) Int32N2e9-32 10.50n ± 2% 10.44n ± 2% ~ (p=0.249 n=20) Float32-32 13.80n ± 2% 13.80n ± 2% ~ (p=0.751 n=20) Float64-32 23.55n ± 2% 23.87n ± 0% ~ (p=0.408 n=20) ExpFloat64-32 15.36n ± 1% 15.29n ± 2% ~ (p=0.316 n=20) NormFloat64-32 13.57n ± 1% 13.79n ± 1% +1.66% (p=0.005 n=20) Perm3-32 45.70n ± 2% 46.99n ± 2% +2.81% (p=0.001 n=20) Perm30-32 399.0n ± 1% 403.8n ± 1% +1.19% (p=0.006 n=20) Perm30ViaShuffle-32 349.0n ± 1% 350.4n ± 1% ~ (p=0.909 n=20) ShuffleOverhead-32 322.3n ± 1% 323.8n ± 1% ~ (p=0.410 n=20) Concurrent-32 3.331n ± 1% 7.312n ± 1% +119.50% (p=0.000 n=20) For #61716. Change-Id: Ibdddeed85c34d9ae397289dc899e04d4845f9ed2 Reviewed-on: https://go-review.googlesource.com/c/go/+/516860 Reviewed-by: Michael Pratt Reviewed-by: Filippo Valsorda LUCI-TryBot-Result: Go LUCI --- src/cmd/compile/internal/test/inl_test.go | 2 +- .../internal/typecheck/_builtin/runtime.go | 2 +- src/cmd/compile/internal/typecheck/builtin.go | 2 +- src/cmd/compile/internal/walk/builtin.go | 4 +- src/cmd/internal/goobj/builtinlist.go | 2 +- src/cmd/internal/objabi/pkgspecial.go | 2 + src/cmd/link/internal/ld/data.go | 9 +- src/hash/maphash/maphash_runtime.go | 6 +- src/internal/chacha8rand/chacha8.go | 19 ++ src/internal/chacha8rand/chacha8_amd64.s | 5 +- src/internal/chacha8rand/chacha8_arm64.s | 6 +- src/internal/chacha8rand/export_test.go | 4 + src/internal/chacha8rand/rand_test.go | 10 + src/internal/coverage/pkid.go | 1 + src/math/rand/rand.go | 30 +-- src/math/rand/v2/rand.go | 18 +- src/net/dnsclient.go | 6 +- src/os/tempfile.go | 8 +- src/runtime/alg.go | 17 +- src/runtime/export_test.go | 8 +- src/runtime/iface.go | 8 +- src/runtime/malloc.go | 4 +- src/runtime/map.go | 23 +- src/runtime/map_fast32.go | 2 +- src/runtime/map_fast64.go | 2 +- src/runtime/map_faststr.go | 2 +- src/runtime/mbitmap_allocheaders.go | 4 +- src/runtime/mgcpacer.go | 2 +- src/runtime/mprof.go | 12 +- src/runtime/os3_solaris.go | 4 +- src/runtime/os_aix.go | 4 +- src/runtime/os_darwin.go | 4 +- src/runtime/os_darwin_arm64.go | 1 - src/runtime/os_dragonfly.go | 4 +- src/runtime/os_freebsd.go | 4 +- src/runtime/os_freebsd_arm.go | 1 - src/runtime/os_freebsd_arm64.go | 1 - src/runtime/os_js.go | 5 + src/runtime/os_linux.go | 17 +- src/runtime/os_linux_arm.go | 1 - src/runtime/os_linux_arm64.go | 1 - src/runtime/os_linux_mips64x.go | 1 - src/runtime/os_linux_mipsx.go | 1 - src/runtime/os_netbsd.go | 4 +- src/runtime/os_netbsd_arm.go | 1 - src/runtime/os_netbsd_arm64.go | 1 - src/runtime/os_openbsd.go | 4 +- src/runtime/os_openbsd_arm.go | 1 - src/runtime/os_openbsd_arm64.go | 1 - src/runtime/os_openbsd_mips64.go | 1 - src/runtime/os_plan9.go | 20 +- src/runtime/os_plan9_arm.go | 1 - src/runtime/os_wasip1.go | 5 +- src/runtime/os_wasm.go | 2 - src/runtime/os_windows.go | 9 +- src/runtime/proc.go | 34 +-- src/runtime/rand.go | 225 ++++++++++++++++++ src/runtime/rand_test.go | 11 + src/runtime/runtime2.go | 26 +- src/runtime/select.go | 2 +- src/runtime/sema.go | 2 +- src/runtime/stubs.go | 90 ------- src/runtime/symtab.go | 2 +- src/sync/pool.go | 5 +- test/live.go | 2 +- test/live_regabi.go | 2 +- 66 files changed, 415 insertions(+), 305 deletions(-) create mode 100644 src/runtime/rand.go diff --git a/src/cmd/compile/internal/test/inl_test.go b/src/cmd/compile/internal/test/inl_test.go index 6d10f6c54c..0ccc7b3761 100644 --- a/src/cmd/compile/internal/test/inl_test.go +++ b/src/cmd/compile/internal/test/inl_test.go @@ -44,7 +44,6 @@ func TestIntendedInlining(t *testing.T) { "chanbuf", "evacuated", "fastlog2", - "fastrand", "float64bits", "funcspdelta", "getm", @@ -54,6 +53,7 @@ func TestIntendedInlining(t *testing.T) { "nextslicecap", "noescape", "pcvalueCacheKey", + "rand32", "readUnaligned32", "readUnaligned64", "releasem", diff --git a/src/cmd/compile/internal/typecheck/_builtin/runtime.go b/src/cmd/compile/internal/typecheck/_builtin/runtime.go index f27a773a88..421152967c 100644 --- a/src/cmd/compile/internal/typecheck/_builtin/runtime.go +++ b/src/cmd/compile/internal/typecheck/_builtin/runtime.go @@ -122,7 +122,7 @@ func panicrangeexit() // defer in range over func func deferrangefunc() interface{} -func fastrand() uint32 +func rand32() uint32 // *byte is really *runtime.Type func makemap64(mapType *byte, hint int64, mapbuf *any) (hmap map[any]any) diff --git a/src/cmd/compile/internal/typecheck/builtin.go b/src/cmd/compile/internal/typecheck/builtin.go index 142fc26d2e..09f60c68c0 100644 --- a/src/cmd/compile/internal/typecheck/builtin.go +++ b/src/cmd/compile/internal/typecheck/builtin.go @@ -104,7 +104,7 @@ var runtimeDecls = [...]struct { {"efaceeq", funcTag, 72}, {"panicrangeexit", funcTag, 9}, {"deferrangefunc", funcTag, 73}, - {"fastrand", funcTag, 74}, + {"rand32", funcTag, 74}, {"makemap64", funcTag, 76}, {"makemap", funcTag, 77}, {"makemap_small", funcTag, 78}, diff --git a/src/cmd/compile/internal/walk/builtin.go b/src/cmd/compile/internal/walk/builtin.go index 90c32154b9..37143baa28 100644 --- a/src/cmd/compile/internal/walk/builtin.go +++ b/src/cmd/compile/internal/walk/builtin.go @@ -358,8 +358,8 @@ func walkMakeMap(n *ir.MakeExpr, init *ir.Nodes) ir.Node { if n.Esc() == ir.EscNone { // Only need to initialize h.hash0 since // hmap h has been allocated on the stack already. - // h.hash0 = fastrand() - rand := mkcall("fastrand", types.Types[types.TUINT32], init) + // h.hash0 = rand32() + rand := mkcall("rand32", types.Types[types.TUINT32], init) hashsym := hmapType.Field(4).Sym // hmap.hash0 see reflect.go:hmap appendWalkStmt(init, ir.NewAssignStmt(base.Pos, ir.NewSelectorExpr(base.Pos, ir.ODOT, h, hashsym), rand)) return typecheck.ConvNop(h, t) diff --git a/src/cmd/internal/goobj/builtinlist.go b/src/cmd/internal/goobj/builtinlist.go index 03982d54f2..fb729f512e 100644 --- a/src/cmd/internal/goobj/builtinlist.go +++ b/src/cmd/internal/goobj/builtinlist.go @@ -83,7 +83,7 @@ var builtins = [...]struct { {"runtime.efaceeq", 1}, {"runtime.panicrangeexit", 1}, {"runtime.deferrangefunc", 1}, - {"runtime.fastrand", 1}, + {"runtime.rand32", 1}, {"runtime.makemap64", 1}, {"runtime.makemap", 1}, {"runtime.makemap_small", 1}, diff --git a/src/cmd/internal/objabi/pkgspecial.go b/src/cmd/internal/objabi/pkgspecial.go index 9bf07153a4..6df95f33f9 100644 --- a/src/cmd/internal/objabi/pkgspecial.go +++ b/src/cmd/internal/objabi/pkgspecial.go @@ -50,6 +50,7 @@ var runtimePkgs = []string{ "internal/abi", "internal/bytealg", + "internal/chacha8rand", "internal/coverage/rtcov", "internal/cpu", "internal/goarch", @@ -79,6 +80,7 @@ var allowAsmABIPkgs = []string{ "reflect", "syscall", "internal/bytealg", + "internal/chacha8rand", "runtime/internal/syscall", "runtime/internal/startlinetest", } diff --git a/src/cmd/link/internal/ld/data.go b/src/cmd/link/internal/ld/data.go index 2d761c7ee7..f4ea8407c8 100644 --- a/src/cmd/link/internal/ld/data.go +++ b/src/cmd/link/internal/ld/data.go @@ -56,10 +56,11 @@ import ( func isRuntimeDepPkg(pkg string) bool { switch pkg { case "runtime", - "sync/atomic", // runtime may call to sync/atomic, due to go:linkname - "internal/abi", // used by reflectcall (and maybe more) - "internal/bytealg", // for IndexByte - "internal/cpu": // for cpu features + "sync/atomic", // runtime may call to sync/atomic, due to go:linkname + "internal/abi", // used by reflectcall (and maybe more) + "internal/bytealg", // for IndexByte + "internal/chacha8rand", // for rand + "internal/cpu": // for cpu features return true } return strings.HasPrefix(pkg, "runtime/internal/") && !strings.HasSuffix(pkg, "_test") diff --git a/src/hash/maphash/maphash_runtime.go b/src/hash/maphash/maphash_runtime.go index 98097ff9c3..b831df2cf4 100644 --- a/src/hash/maphash/maphash_runtime.go +++ b/src/hash/maphash/maphash_runtime.go @@ -10,8 +10,8 @@ import ( "unsafe" ) -//go:linkname runtime_fastrand64 runtime.fastrand64 -func runtime_fastrand64() uint64 +//go:linkname runtime_rand runtime.rand +func runtime_rand() uint64 //go:linkname runtime_memhash runtime.memhash //go:noescape @@ -39,5 +39,5 @@ func rthashString(s string, state uint64) uint64 { } func randUint64() uint64 { - return runtime_fastrand64() + return runtime_rand() } diff --git a/src/internal/chacha8rand/chacha8.go b/src/internal/chacha8rand/chacha8.go index 654ac1bc9d..ce55c07d05 100644 --- a/src/internal/chacha8rand/chacha8.go +++ b/src/internal/chacha8rand/chacha8.go @@ -93,6 +93,25 @@ func (s *State) Refill() { } } +// Reseed reseeds the state with new random values. +// After a call to Reseed, any previously returned random values +// have been erased from the memory of the state and cannot be +// recovered. +func (s *State) Reseed() { + var seed [4]uint64 + for i := range seed { + for { + x, ok := s.Next() + if ok { + seed[i] = x + break + } + s.Refill() + } + } + s.Init64(seed) +} + // Marshal marshals the state into a byte slice. // Marshal and Unmarshal are functions, not methods, // so that they will not be linked into the runtime diff --git a/src/internal/chacha8rand/chacha8_amd64.s b/src/internal/chacha8rand/chacha8_amd64.s index cadd516c09..b56deb3b0b 100644 --- a/src/internal/chacha8rand/chacha8_amd64.s +++ b/src/internal/chacha8rand/chacha8_amd64.s @@ -52,13 +52,10 @@ // block runs 4 ChaCha8 block transformations in the four stripes of the X registers. // func block(seed *[8]uint32, blocks *[16][4]uint32, counter uint32) -TEXT ·block(SB), NOSPLIT, $16 +TEXT ·block(SB), NOSPLIT, $16 // seed in AX // blocks in BX // counter in CX - MOVQ seed+0(FP), AX - MOVQ blocks+8(FP), BX - MOVL counter+16(FP), CX // Load initial constants into top row. REPL(0x61707865, X0) diff --git a/src/internal/chacha8rand/chacha8_arm64.s b/src/internal/chacha8rand/chacha8_arm64.s index 4f36a7021c..18e34dd148 100644 --- a/src/internal/chacha8rand/chacha8_arm64.s +++ b/src/internal/chacha8rand/chacha8_arm64.s @@ -16,12 +16,10 @@ // block runs 4 ChaCha8 block transformations in the four stripes of the V registers. // func block(seed *[8]uint32, blocks *[4][16]uint32, counter uint32) -TEXT ·block(SB), NOSPLIT, $16 +TEXT ·block(SB), NOSPLIT, $16 // seed in R0 // blocks in R1 - MOVD seed+0(FP), R0 - MOVD blocks+8(FP), R1 - MOVW counter+16(FP), R2 + // counter in R2 // Load initial constants into top row. MOVD $·chachaConst(SB), R10 diff --git a/src/internal/chacha8rand/export_test.go b/src/internal/chacha8rand/export_test.go index 70478a45c3..728aded682 100644 --- a/src/internal/chacha8rand/export_test.go +++ b/src/internal/chacha8rand/export_test.go @@ -6,3 +6,7 @@ package chacha8rand var Block = block var Block_generic = block_generic + +func Seed(s *State) [4]uint64 { + return s.seed +} diff --git a/src/internal/chacha8rand/rand_test.go b/src/internal/chacha8rand/rand_test.go index f4770999c9..2975013bfa 100644 --- a/src/internal/chacha8rand/rand_test.go +++ b/src/internal/chacha8rand/rand_test.go @@ -53,6 +53,16 @@ func TestMarshal(t *testing.T) { } } +func TestReseed(t *testing.T) { + var s State + s.Init(seed) + old := Seed(&s) + s.Reseed() + if Seed(&s) == old { + t.Errorf("Reseed did not change seed") + } +} + func BenchmarkBlock(b *testing.B) { var seed [4]uint64 var blocks [32]uint64 diff --git a/src/internal/coverage/pkid.go b/src/internal/coverage/pkid.go index 8ddd44d6bb..372a9cb19f 100644 --- a/src/internal/coverage/pkid.go +++ b/src/internal/coverage/pkid.go @@ -49,6 +49,7 @@ var rtPkgs = [...]string{ "internal/goarch", "runtime/internal/atomic", "internal/goos", + "internal/chacha8rand", "runtime/internal/sys", "internal/abi", "runtime/internal/math", diff --git a/src/math/rand/rand.go b/src/math/rand/rand.go index 78e176e78f..a8ed9c0cb7 100644 --- a/src/math/rand/rand.go +++ b/src/math/rand/rand.go @@ -273,7 +273,7 @@ func (r *Rand) Read(p []byte) (n int, err error) { switch src := r.src.(type) { case *lockedSource: return src.read(p, &r.readVal, &r.readPos) - case *fastSource: + case *runtimeSource: return src.read(p, &r.readVal, &r.readPos) } return read(p, r.src, &r.readVal, &r.readPos) @@ -328,8 +328,8 @@ func globalRand() *Rand { r.Seed(1) } else { r = &Rand{ - src: &fastSource{}, - s64: &fastSource{}, + src: &runtimeSource{}, + s64: &runtimeSource{}, } } @@ -346,29 +346,29 @@ func globalRand() *Rand { return r } -//go:linkname fastrand64 -func fastrand64() uint64 +//go:linkname runtime_rand runtime.rand +func runtime_rand() uint64 -// fastSource is an implementation of Source64 that uses the runtime +// runtimeSource is an implementation of Source64 that uses the runtime // fastrand functions. -type fastSource struct { +type runtimeSource struct { // The mutex is used to avoid race conditions in Read. mu sync.Mutex } -func (*fastSource) Int63() int64 { - return int64(fastrand64() & rngMask) +func (*runtimeSource) Int63() int64 { + return int64(runtime_rand() & rngMask) } -func (*fastSource) Seed(int64) { - panic("internal error: call to fastSource.Seed") +func (*runtimeSource) Seed(int64) { + panic("internal error: call to runtimeSource.Seed") } -func (*fastSource) Uint64() uint64 { - return fastrand64() +func (*runtimeSource) Uint64() uint64 { + return runtime_rand() } -func (fs *fastSource) read(p []byte, readVal *int64, readPos *int8) (n int, err error) { +func (fs *runtimeSource) read(p []byte, readVal *int64, readPos *int8) (n int, err error) { fs.mu.Lock() n, err = read(p, fs, readVal, readPos) fs.mu.Unlock() @@ -405,7 +405,7 @@ func Seed(seed int64) { // Otherwise either // 1) orig == nil, which is the normal case when Seed is the first // top-level function to be called, or - // 2) orig is already a fastSource, in which case we need to change + // 2) orig is already a runtimeSource, in which case we need to change // to a lockedSource. // Either way we do the same thing. diff --git a/src/math/rand/v2/rand.go b/src/math/rand/v2/rand.go index 5382f809e0..f490408472 100644 --- a/src/math/rand/v2/rand.go +++ b/src/math/rand/v2/rand.go @@ -250,20 +250,16 @@ func (r *Rand) Shuffle(n int, swap func(i, j int)) { // globalRand is the source of random numbers for the top-level // convenience functions. -var globalRand = &Rand{src: &fastSource{}} +var globalRand = &Rand{src: &runtimeSource{}} -//go:linkname fastrand64 -func fastrand64() uint64 +//go:linkname runtime_rand runtime.rand +func runtime_rand() uint64 -// fastSource is a Source that uses the runtime fastrand functions. -type fastSource struct{} +// runtimeSource is a Source that uses the runtime fastrand functions. +type runtimeSource struct{} -func (*fastSource) Int64() int64 { - return int64(fastrand64() << 1 >> 1) -} - -func (*fastSource) Uint64() uint64 { - return fastrand64() +func (*runtimeSource) Uint64() uint64 { + return runtime_rand() } // Int64 returns a non-negative pseudo-random 63-bit integer as an int64 diff --git a/src/net/dnsclient.go b/src/net/dnsclient.go index b609dbd468..204620b2ed 100644 --- a/src/net/dnsclient.go +++ b/src/net/dnsclient.go @@ -8,15 +8,17 @@ import ( "internal/bytealg" "internal/itoa" "sort" + _ "unsafe" // for go:linkname "golang.org/x/net/dns/dnsmessage" ) // provided by runtime -func fastrandu() uint +//go:linkname runtime_rand runtime.rand +func runtime_rand() uint64 func randInt() int { - return int(fastrandu() >> 1) // clear sign bit + return int(uint(runtime_rand()) >> 1) // clear sign bit } func randIntn(n int) int { diff --git a/src/os/tempfile.go b/src/os/tempfile.go index 315f65ad9c..7f2b6a883c 100644 --- a/src/os/tempfile.go +++ b/src/os/tempfile.go @@ -8,16 +8,18 @@ import ( "errors" "internal/bytealg" "internal/itoa" + _ "unsafe" // for go:linkname ) -// fastrand provided by runtime. +// random number source provided by runtime. // We generate random temporary file names so that there's a good // chance the file doesn't exist yet - keeps the number of tries in // TempFile to a minimum. -func fastrand() uint32 +//go:linkname runtime_rand runtime.rand +func runtime_rand() uint64 func nextRandom() string { - return itoa.Uitoa(uint(fastrand())) + return itoa.Uitoa(uint(runtime_rand())) } // CreateTemp creates a new temporary file in the directory dir, diff --git a/src/runtime/alg.go b/src/runtime/alg.go index 336058d159..eaf9c91490 100644 --- a/src/runtime/alg.go +++ b/src/runtime/alg.go @@ -66,7 +66,7 @@ func f32hash(p unsafe.Pointer, h uintptr) uintptr { case f == 0: return c1 * (c0 ^ h) // +0, -0 case f != f: - return c1 * (c0 ^ h ^ uintptr(fastrand())) // any kind of NaN + return c1 * (c0 ^ h ^ uintptr(rand())) // any kind of NaN default: return memhash(p, h, 4) } @@ -78,7 +78,7 @@ func f64hash(p unsafe.Pointer, h uintptr) uintptr { case f == 0: return c1 * (c0 ^ h) // +0, -0 case f != f: - return c1 * (c0 ^ h ^ uintptr(fastrand())) // any kind of NaN + return c1 * (c0 ^ h ^ uintptr(rand())) // any kind of NaN default: return memhash(p, h, 8) } @@ -390,17 +390,18 @@ func alginit() { initAlgAES() return } - getRandomData((*[len(hashkey) * goarch.PtrSize]byte)(unsafe.Pointer(&hashkey))[:]) - hashkey[0] |= 1 // make sure these numbers are odd - hashkey[1] |= 1 - hashkey[2] |= 1 - hashkey[3] |= 1 + for i := range hashkey { + hashkey[i] = uintptr(rand()) | 1 // make sure these numbers are odd + } } func initAlgAES() { useAeshash = true // Initialize with random data so hash collisions will be hard to engineer. - getRandomData(aeskeysched[:]) + key := (*[hashRandomBytes / 8]uint64)(unsafe.Pointer(&aeskeysched)) + for i := range key { + key[i] = bootstrapRand() + } } // Note: These routines perform the read with a native endianness. diff --git a/src/runtime/export_test.go b/src/runtime/export_test.go index 9249550fd7..2e707b96e2 100644 --- a/src/runtime/export_test.go +++ b/src/runtime/export_test.go @@ -31,6 +31,8 @@ var Exitsyscall = exitsyscall var LockedOSThread = lockedOSThread var Xadduintptr = atomic.Xadduintptr +var ReadRandomFailed = &readRandomFailed + var Fastlog2 = fastlog2 var Atoi = atoi @@ -398,9 +400,9 @@ func CountPagesInUse() (pagesInUse, counted uintptr) { return } -func Fastrand() uint32 { return fastrand() } -func Fastrand64() uint64 { return fastrand64() } -func Fastrandn(n uint32) uint32 { return fastrandn(n) } +func Fastrand() uint32 { return uint32(rand()) } +func Fastrand64() uint64 { return rand() } +func Fastrandn(n uint32) uint32 { return randn(n) } type ProfBuf profBuf diff --git a/src/runtime/iface.go b/src/runtime/iface.go index b8c7caeebc..bad49a346e 100644 --- a/src/runtime/iface.go +++ b/src/runtime/iface.go @@ -440,14 +440,14 @@ func typeAssert(s *abi.TypeAssert, t *_type) *itab { // Maybe update the cache, so the next time the generated code // doesn't need to call into the runtime. - if fastrand()&1023 != 0 { + if cheaprand()&1023 != 0 { // Only bother updating the cache ~1 in 1000 times. return tab } // Load the current cache. oldC := (*abi.TypeAssertCache)(atomic.Loadp(unsafe.Pointer(&s.Cache))) - if fastrand()&uint32(oldC.Mask) != 0 { + if cheaprand()&uint32(oldC.Mask) != 0 { // As cache gets larger, choose to update it less often // so we can amortize the cost of building a new cache. return tab @@ -540,7 +540,7 @@ func interfaceSwitch(s *abi.InterfaceSwitch, t *_type) (int, *itab) { // Maybe update the cache, so the next time the generated code // doesn't need to call into the runtime. - if fastrand()&1023 != 0 { + if cheaprand()&1023 != 0 { // Only bother updating the cache ~1 in 1000 times. // This ensures we don't waste memory on switches, or // switch arguments, that only happen a few times. @@ -549,7 +549,7 @@ func interfaceSwitch(s *abi.InterfaceSwitch, t *_type) (int, *itab) { // Load the current cache. oldC := (*abi.InterfaceSwitchCache)(atomic.Loadp(unsafe.Pointer(&s.Cache))) - if fastrand()&uint32(oldC.Mask) != 0 { + if cheaprand()&uint32(oldC.Mask) != 0 { // As cache gets larger, choose to update it less often // so we can amortize the cost of building a new cache // (that cost is linear in oldc.Mask). diff --git a/src/runtime/malloc.go b/src/runtime/malloc.go index ce03114edc..e2cb2e456e 100644 --- a/src/runtime/malloc.go +++ b/src/runtime/malloc.go @@ -1472,7 +1472,7 @@ func fastexprand(mean int) int32 { // x = -log_e(q) * mean // x = log_2(q) * (-log_e(2)) * mean ; Using log_2 for efficiency const randomBitCount = 26 - q := fastrandn(1< 0 { qlog = 0 @@ -1490,7 +1490,7 @@ func nextSampleNoFP() uintptr { rate = 0x3fffffff } if rate != 0 { - return uintptr(fastrandn(uint32(2 * rate))) + return uintptr(cheaprandn(uint32(2 * rate))) } return 0 } diff --git a/src/runtime/map.go b/src/runtime/map.go index 11daeb7568..cd3f838fa1 100644 --- a/src/runtime/map.go +++ b/src/runtime/map.go @@ -238,8 +238,8 @@ func (h *hmap) incrnoverflow() { // as many overflow buckets as buckets. mask := uint32(1)<<(h.B-15) - 1 // Example: if h.B == 18, then mask == 7, - // and fastrand & 7 == 0 with probability 1/8. - if fastrand()&mask == 0 { + // and rand() & 7 == 0 with probability 1/8. + if uint32(rand())&mask == 0 { h.noverflow++ } } @@ -293,7 +293,7 @@ func makemap64(t *maptype, hint int64, h *hmap) *hmap { // at compile time and the map needs to be allocated on the heap. func makemap_small() *hmap { h := new(hmap) - h.hash0 = fastrand() + h.hash0 = uint32(rand()) return h } @@ -312,7 +312,7 @@ func makemap(t *maptype, hint int, h *hmap) *hmap { if h == nil { h = new(hmap) } - h.hash0 = fastrand() + h.hash0 = uint32(rand()) // Find the size parameter B which will hold the requested # of elements. // For hint < 0 overLoadFactor returns false since hint < bucketCnt. @@ -797,7 +797,7 @@ search: // Reset the hash seed to make it more difficult for attackers to // repeatedly trigger hash collisions. See issue 25237. if h.count == 0 { - h.hash0 = fastrand() + h.hash0 = uint32(rand()) } break search } @@ -843,12 +843,7 @@ func mapiterinit(t *maptype, h *hmap, it *hiter) { } // decide where to start - var r uintptr - if h.B > 31-bucketCntBits { - r = uintptr(fastrand64()) - } else { - r = uintptr(fastrand()) - } + r := uintptr(rand()) it.startBucket = r & bucketMask(h.B) it.offset = uint8(r >> h.B & (bucketCnt - 1)) @@ -1032,7 +1027,7 @@ func mapclear(t *maptype, h *hmap) { // Reset the hash seed to make it more difficult for attackers to // repeatedly trigger hash collisions. See issue 25237. - h.hash0 = fastrand() + h.hash0 = uint32(rand()) // Keep the mapextra allocation but clear any extra information. if h.extra != nil { @@ -1619,7 +1614,7 @@ func keys(m any, p unsafe.Pointer) { return } s := (*slice)(p) - r := int(fastrand()) + r := int(rand()) offset := uint8(r >> h.B & (bucketCnt - 1)) if h.B == 0 { copyKeys(t, h, (*bmap)(h.buckets), s, offset) @@ -1682,7 +1677,7 @@ func values(m any, p unsafe.Pointer) { return } s := (*slice)(p) - r := int(fastrand()) + r := int(rand()) offset := uint8(r >> h.B & (bucketCnt - 1)) if h.B == 0 { copyValues(t, h, (*bmap)(h.buckets), s, offset) diff --git a/src/runtime/map_fast32.go b/src/runtime/map_fast32.go index d10dca3e91..e1dd495365 100644 --- a/src/runtime/map_fast32.go +++ b/src/runtime/map_fast32.go @@ -348,7 +348,7 @@ search: // Reset the hash seed to make it more difficult for attackers to // repeatedly trigger hash collisions. See issue 25237. if h.count == 0 { - h.hash0 = fastrand() + h.hash0 = uint32(rand()) } break search } diff --git a/src/runtime/map_fast64.go b/src/runtime/map_fast64.go index d771e0b747..7ca35ec6cb 100644 --- a/src/runtime/map_fast64.go +++ b/src/runtime/map_fast64.go @@ -350,7 +350,7 @@ search: // Reset the hash seed to make it more difficult for attackers to // repeatedly trigger hash collisions. See issue 25237. if h.count == 0 { - h.hash0 = fastrand() + h.hash0 = uint32(rand()) } break search } diff --git a/src/runtime/map_faststr.go b/src/runtime/map_faststr.go index ef71da859a..22e1f61f06 100644 --- a/src/runtime/map_faststr.go +++ b/src/runtime/map_faststr.go @@ -376,7 +376,7 @@ search: // Reset the hash seed to make it more difficult for attackers to // repeatedly trigger hash collisions. See issue 25237. if h.count == 0 { - h.hash0 = fastrand() + h.hash0 = uint32(rand()) } break search } diff --git a/src/runtime/mbitmap_allocheaders.go b/src/runtime/mbitmap_allocheaders.go index 33535a515a..2151c12b85 100644 --- a/src/runtime/mbitmap_allocheaders.go +++ b/src/runtime/mbitmap_allocheaders.go @@ -907,14 +907,14 @@ func heapSetType(x, dataSize uintptr, typ *_type, header **_type, span *mspan) ( if header == nil { maxIterBytes = dataSize } - off := alignUp(uintptr(fastrand())%dataSize, goarch.PtrSize) + off := alignUp(uintptr(cheaprand())%dataSize, goarch.PtrSize) size := dataSize - off if size == 0 { off -= goarch.PtrSize size += goarch.PtrSize } interior := x + off - size -= alignDown(uintptr(fastrand())%size, goarch.PtrSize) + size -= alignDown(uintptr(cheaprand())%size, goarch.PtrSize) if size == 0 { size = goarch.PtrSize } diff --git a/src/runtime/mgcpacer.go b/src/runtime/mgcpacer.go index 3d07cc70e8..e9af3d60cd 100644 --- a/src/runtime/mgcpacer.go +++ b/src/runtime/mgcpacer.go @@ -712,7 +712,7 @@ func (c *gcControllerState) enlistWorker() { } myID := gp.m.p.ptr().id for tries := 0; tries < 5; tries++ { - id := int32(fastrandn(uint32(gomaxprocs - 1))) + id := int32(cheaprandn(uint32(gomaxprocs - 1))) if id >= myID { id++ } diff --git a/src/runtime/mprof.go b/src/runtime/mprof.go index b1930b3020..aeb03985cc 100644 --- a/src/runtime/mprof.go +++ b/src/runtime/mprof.go @@ -498,7 +498,7 @@ func blockevent(cycles int64, skip int) { // blocksampled returns true for all events where cycles >= rate. Shorter // events have a cycles/rate random chance of returning true. func blocksampled(cycles, rate int64) bool { - if rate <= 0 || (rate > cycles && int64(fastrand())%rate > cycles) { + if rate <= 0 || (rate > cycles && cheaprand64()%rate > cycles) { return false } return true @@ -589,11 +589,11 @@ func (lt *lockTimer) begin() { if rate != 0 && rate < lt.timeRate { lt.timeRate = rate } - if int64(fastrand())%lt.timeRate == 0 { + if int64(cheaprand())%lt.timeRate == 0 { lt.timeStart = nanotime() } - if rate > 0 && int64(fastrand())%rate == 0 { + if rate > 0 && int64(cheaprand())%rate == 0 { lt.tickStart = cputicks() } } @@ -645,8 +645,8 @@ func (prof *mLockProfile) recordLock(cycles int64, l *mutex) { // We can only store one call stack for runtime-internal lock contention // on this M, and we've already got one. Decide which should stay, and // add the other to the report for runtime._LostContendedLock. - prevScore := fastrand64() % uint64(prev) - thisScore := fastrand64() % uint64(cycles) + prevScore := uint64(cheaprand64()) % uint64(prev) + thisScore := uint64(cheaprand64()) % uint64(cycles) if prevScore > thisScore { prof.cyclesLost += cycles return @@ -790,7 +790,7 @@ func mutexevent(cycles int64, skip int) { cycles = 0 } rate := int64(atomic.Load64(&mutexprofilerate)) - if rate > 0 && int64(fastrand())%rate == 0 { + if rate > 0 && cheaprand64()%rate == 0 { saveblockevent(cycles, rate, skip+1, mutexProfile) } } diff --git a/src/runtime/os3_solaris.go b/src/runtime/os3_solaris.go index 81629f02a2..92daf13b1a 100644 --- a/src/runtime/os3_solaris.go +++ b/src/runtime/os3_solaris.go @@ -198,11 +198,11 @@ func exitThread(wait *atomic.Uint32) { var urandom_dev = []byte("/dev/urandom\x00") //go:nosplit -func getRandomData(r []byte) { +func readRandom(r []byte) int { fd := open(&urandom_dev[0], 0 /* O_RDONLY */, 0) n := read(fd, unsafe.Pointer(&r[0]), int32(len(r))) closefd(fd) - extendRandom(r, int(n)) + return int(n) } func goenvs() { diff --git a/src/runtime/os_aix.go b/src/runtime/os_aix.go index b26922c908..3a5078a64c 100644 --- a/src/runtime/os_aix.go +++ b/src/runtime/os_aix.go @@ -239,11 +239,11 @@ func exitThread(wait *atomic.Uint32) { var urandom_dev = []byte("/dev/urandom\x00") //go:nosplit -func getRandomData(r []byte) { +func readRandom(r []byte) int { fd := open(&urandom_dev[0], 0 /* O_RDONLY */, 0) n := read(fd, unsafe.Pointer(&r[0]), int32(len(r))) closefd(fd) - extendRandom(r, int(n)) + return int(n) } func goenvs() { diff --git a/src/runtime/os_darwin.go b/src/runtime/os_darwin.go index ff33db084b..430d1865df 100644 --- a/src/runtime/os_darwin.go +++ b/src/runtime/os_darwin.go @@ -194,11 +194,11 @@ func getPageSize() uintptr { var urandom_dev = []byte("/dev/urandom\x00") //go:nosplit -func getRandomData(r []byte) { +func readRandom(r []byte) int { fd := open(&urandom_dev[0], 0 /* O_RDONLY */, 0) n := read(fd, unsafe.Pointer(&r[0]), int32(len(r))) closefd(fd) - extendRandom(r, int(n)) + return int(n) } func goenvs() { diff --git a/src/runtime/os_darwin_arm64.go b/src/runtime/os_darwin_arm64.go index b808150de0..ebc1b139a6 100644 --- a/src/runtime/os_darwin_arm64.go +++ b/src/runtime/os_darwin_arm64.go @@ -6,7 +6,6 @@ package runtime //go:nosplit func cputicks() int64 { - // Currently cputicks() is used in blocking profiler and to seed runtime·fastrand(). // runtime·nanotime() is a poor approximation of CPU ticks that is enough for the profiler. return nanotime() } diff --git a/src/runtime/os_dragonfly.go b/src/runtime/os_dragonfly.go index 80c1267765..2aeea17755 100644 --- a/src/runtime/os_dragonfly.go +++ b/src/runtime/os_dragonfly.go @@ -181,11 +181,11 @@ func osinit() { var urandom_dev = []byte("/dev/urandom\x00") //go:nosplit -func getRandomData(r []byte) { +func readRandom(r []byte) int { fd := open(&urandom_dev[0], 0 /* O_RDONLY */, 0) n := read(fd, unsafe.Pointer(&r[0]), int32(len(r))) closefd(fd) - extendRandom(r, int(n)) + return int(n) } func goenvs() { diff --git a/src/runtime/os_freebsd.go b/src/runtime/os_freebsd.go index c05e00f6ac..d0d6f14fa0 100644 --- a/src/runtime/os_freebsd.go +++ b/src/runtime/os_freebsd.go @@ -283,11 +283,11 @@ func osinit() { var urandom_dev = []byte("/dev/urandom\x00") //go:nosplit -func getRandomData(r []byte) { +func readRandom(r []byte) int { fd := open(&urandom_dev[0], 0 /* O_RDONLY */, 0) n := read(fd, unsafe.Pointer(&r[0]), int32(len(r))) closefd(fd) - extendRandom(r, int(n)) + return int(n) } func goenvs() { diff --git a/src/runtime/os_freebsd_arm.go b/src/runtime/os_freebsd_arm.go index ae80119fe1..5f6bf46798 100644 --- a/src/runtime/os_freebsd_arm.go +++ b/src/runtime/os_freebsd_arm.go @@ -49,7 +49,6 @@ func archauxv(tag, val uintptr) { //go:nosplit func cputicks() int64 { - // Currently cputicks() is used in blocking profiler and to seed runtime·fastrand(). // runtime·nanotime() is a poor approximation of CPU ticks that is enough for the profiler. return nanotime() } diff --git a/src/runtime/os_freebsd_arm64.go b/src/runtime/os_freebsd_arm64.go index b5b25f0dc5..58bc5d34b7 100644 --- a/src/runtime/os_freebsd_arm64.go +++ b/src/runtime/os_freebsd_arm64.go @@ -6,7 +6,6 @@ package runtime //go:nosplit func cputicks() int64 { - // Currently cputicks() is used in blocking profiler and to seed fastrand(). // nanotime() is a poor approximation of CPU ticks that is enough for the profiler. return nanotime() } diff --git a/src/runtime/os_js.go b/src/runtime/os_js.go index 65fb499de6..099c5265a0 100644 --- a/src/runtime/os_js.go +++ b/src/runtime/os_js.go @@ -32,6 +32,11 @@ func usleep(usec uint32) { //go:noescape func getRandomData(r []byte) +func readRandom(r []byte) int { + getRandomData(r) + return len(r) +} + func goenvs() { goenvs_unix() } diff --git a/src/runtime/os_linux.go b/src/runtime/os_linux.go index 6386b82a85..0ba607fe1f 100644 --- a/src/runtime/os_linux.go +++ b/src/runtime/os_linux.go @@ -288,10 +288,6 @@ func sysargs(argc int32, argv **byte) { auxv = auxvreadbuf[: pairs*2 : pairs*2] } -// startupRandomData holds random bytes initialized at startup. These come from -// the ELF AT_RANDOM auxiliary vector. -var startupRandomData []byte - // secureMode holds the value of AT_SECURE passed in the auxiliary vector. var secureMode bool @@ -303,7 +299,7 @@ func sysauxv(auxv []uintptr) (pairs int) { case _AT_RANDOM: // The kernel provides a pointer to 16-bytes // worth of random data. - startupRandomData = (*[16]byte)(unsafe.Pointer(val))[:] + startupRand = (*[16]byte)(unsafe.Pointer(val))[:] case _AT_PAGESZ: physPageSize = val @@ -352,16 +348,11 @@ func osinit() { var urandom_dev = []byte("/dev/urandom\x00") -func getRandomData(r []byte) { - if startupRandomData != nil { - n := copy(r, startupRandomData) - extendRandom(r, n) - return - } +func readRandom(r []byte) int { fd := open(&urandom_dev[0], 0 /* O_RDONLY */, 0) n := read(fd, unsafe.Pointer(&r[0]), int32(len(r))) closefd(fd) - extendRandom(r, int(n)) + return int(n) } func goenvs() { @@ -656,7 +647,7 @@ func setThreadCPUProfiler(hz int32) { // activates may do a couple milliseconds of GC-related work and nothing // else in the few seconds that the profiler observes. spec := new(itimerspec) - spec.it_value.setNsec(1 + int64(fastrandn(uint32(1e9/hz)))) + spec.it_value.setNsec(1 + int64(cheaprandn(uint32(1e9/hz)))) spec.it_interval.setNsec(1e9 / int64(hz)) var timerid int32 diff --git a/src/runtime/os_linux_arm.go b/src/runtime/os_linux_arm.go index b9779159ad..5e1274ebab 100644 --- a/src/runtime/os_linux_arm.go +++ b/src/runtime/os_linux_arm.go @@ -52,7 +52,6 @@ func osArchInit() {} //go:nosplit func cputicks() int64 { - // Currently cputicks() is used in blocking profiler and to seed fastrand(). // nanotime() is a poor approximation of CPU ticks that is enough for the profiler. return nanotime() } diff --git a/src/runtime/os_linux_arm64.go b/src/runtime/os_linux_arm64.go index 2daa56fce7..62cead1d22 100644 --- a/src/runtime/os_linux_arm64.go +++ b/src/runtime/os_linux_arm64.go @@ -19,7 +19,6 @@ func osArchInit() {} //go:nosplit func cputicks() int64 { - // Currently cputicks() is used in blocking profiler and to seed fastrand(). // nanotime() is a poor approximation of CPU ticks that is enough for the profiler. return nanotime() } diff --git a/src/runtime/os_linux_mips64x.go b/src/runtime/os_linux_mips64x.go index 11d35bc020..770cc27ba7 100644 --- a/src/runtime/os_linux_mips64x.go +++ b/src/runtime/os_linux_mips64x.go @@ -19,7 +19,6 @@ func osArchInit() {} //go:nosplit func cputicks() int64 { - // Currently cputicks() is used in blocking profiler and to seed fastrand(). // nanotime() is a poor approximation of CPU ticks that is enough for the profiler. return nanotime() } diff --git a/src/runtime/os_linux_mipsx.go b/src/runtime/os_linux_mipsx.go index cdf83ff71d..3807e6d051 100644 --- a/src/runtime/os_linux_mipsx.go +++ b/src/runtime/os_linux_mipsx.go @@ -13,7 +13,6 @@ func osArchInit() {} //go:nosplit func cputicks() int64 { - // Currently cputicks() is used in blocking profiler and to seed fastrand(). // nanotime() is a poor approximation of CPU ticks that is enough for the profiler. return nanotime() } diff --git a/src/runtime/os_netbsd.go b/src/runtime/os_netbsd.go index 7cbba48194..8abb688aae 100644 --- a/src/runtime/os_netbsd.go +++ b/src/runtime/os_netbsd.go @@ -274,11 +274,11 @@ func osinit() { var urandom_dev = []byte("/dev/urandom\x00") //go:nosplit -func getRandomData(r []byte) { +func readRandom(r []byte) int { fd := open(&urandom_dev[0], 0 /* O_RDONLY */, 0) n := read(fd, unsafe.Pointer(&r[0]), int32(len(r))) closefd(fd) - extendRandom(r, int(n)) + return int(n) } func goenvs() { diff --git a/src/runtime/os_netbsd_arm.go b/src/runtime/os_netbsd_arm.go index 5fb4e08d66..7494a387e3 100644 --- a/src/runtime/os_netbsd_arm.go +++ b/src/runtime/os_netbsd_arm.go @@ -31,7 +31,6 @@ func checkgoarm() { //go:nosplit func cputicks() int64 { - // Currently cputicks() is used in blocking profiler and to seed runtime·fastrand(). // runtime·nanotime() is a poor approximation of CPU ticks that is enough for the profiler. return nanotime() } diff --git a/src/runtime/os_netbsd_arm64.go b/src/runtime/os_netbsd_arm64.go index 2dda9c9274..48841afdb6 100644 --- a/src/runtime/os_netbsd_arm64.go +++ b/src/runtime/os_netbsd_arm64.go @@ -20,7 +20,6 @@ func lwp_mcontext_init(mc *mcontextt, stk unsafe.Pointer, mp *m, gp *g, fn uintp //go:nosplit func cputicks() int64 { - // Currently cputicks() is used in blocking profiler and to seed runtime·fastrand(). // runtime·nanotime() is a poor approximation of CPU ticks that is enough for the profiler. return nanotime() } diff --git a/src/runtime/os_openbsd.go b/src/runtime/os_openbsd.go index aa2ba859a8..856979910a 100644 --- a/src/runtime/os_openbsd.go +++ b/src/runtime/os_openbsd.go @@ -142,11 +142,11 @@ func osinit() { var urandom_dev = []byte("/dev/urandom\x00") //go:nosplit -func getRandomData(r []byte) { +func readRandom(r []byte) int { fd := open(&urandom_dev[0], 0 /* O_RDONLY */, 0) n := read(fd, unsafe.Pointer(&r[0]), int32(len(r))) closefd(fd) - extendRandom(r, int(n)) + return int(n) } func goenvs() { diff --git a/src/runtime/os_openbsd_arm.go b/src/runtime/os_openbsd_arm.go index 0a2409676c..d5dc8cb479 100644 --- a/src/runtime/os_openbsd_arm.go +++ b/src/runtime/os_openbsd_arm.go @@ -17,7 +17,6 @@ func checkgoarm() { //go:nosplit func cputicks() int64 { - // Currently cputicks() is used in blocking profiler and to seed runtime·fastrand(). // runtime·nanotime() is a poor approximation of CPU ticks that is enough for the profiler. return nanotime() } diff --git a/src/runtime/os_openbsd_arm64.go b/src/runtime/os_openbsd_arm64.go index d71de7d196..4b2c6e3fe9 100644 --- a/src/runtime/os_openbsd_arm64.go +++ b/src/runtime/os_openbsd_arm64.go @@ -6,7 +6,6 @@ package runtime //go:nosplit func cputicks() int64 { - // Currently cputicks() is used in blocking profiler and to seed runtime·fastrand(). // runtime·nanotime() is a poor approximation of CPU ticks that is enough for the profiler. return nanotime() } diff --git a/src/runtime/os_openbsd_mips64.go b/src/runtime/os_openbsd_mips64.go index ae220cd683..e5eeb2dcd1 100644 --- a/src/runtime/os_openbsd_mips64.go +++ b/src/runtime/os_openbsd_mips64.go @@ -6,7 +6,6 @@ package runtime //go:nosplit func cputicks() int64 { - // Currently cputicks() is used in blocking profiler and to seed runtime·fastrand(). // runtime·nanotime() is a poor approximation of CPU ticks that is enough for the profiler. return nanotime() } diff --git a/src/runtime/os_plan9.go b/src/runtime/os_plan9.go index f4ff4d5f45..77446d09d3 100644 --- a/src/runtime/os_plan9.go +++ b/src/runtime/os_plan9.go @@ -327,24 +327,8 @@ func crash() { } //go:nosplit -func getRandomData(r []byte) { - // inspired by wyrand see hash32.go for detail - t := nanotime() - v := getg().m.procid ^ uint64(t) - - for len(r) > 0 { - v ^= 0xa0761d6478bd642f - v *= 0xe7037ed1a0b428db - size := 8 - if len(r) < 8 { - size = len(r) - } - for i := 0; i < size; i++ { - r[i] = byte(v >> (8 * i)) - } - r = r[size:] - v = v>>32 | v<<32 - } +func readRandom(r []byte) int { + return 0 } func initsig(preinit bool) { diff --git a/src/runtime/os_plan9_arm.go b/src/runtime/os_plan9_arm.go index f165a34151..cce6229323 100644 --- a/src/runtime/os_plan9_arm.go +++ b/src/runtime/os_plan9_arm.go @@ -10,7 +10,6 @@ func checkgoarm() { //go:nosplit func cputicks() int64 { - // Currently cputicks() is used in blocking profiler and to seed runtime·fastrand(). // runtime·nanotime() is a poor approximation of CPU ticks that is enough for the profiler. return nanotime() } diff --git a/src/runtime/os_wasip1.go b/src/runtime/os_wasip1.go index 8811bb6178..acac2b3f7a 100644 --- a/src/runtime/os_wasip1.go +++ b/src/runtime/os_wasip1.go @@ -180,10 +180,11 @@ func usleep(usec uint32) { } } -func getRandomData(r []byte) { +func readRandom(r []byte) int { if random_get(unsafe.Pointer(&r[0]), size(len(r))) != 0 { - throw("random_get failed") + return 0 } + return len(r) } func goenvs() { diff --git a/src/runtime/os_wasm.go b/src/runtime/os_wasm.go index bf78dfb5f9..ce260de67e 100644 --- a/src/runtime/os_wasm.go +++ b/src/runtime/os_wasm.go @@ -122,9 +122,7 @@ func syscall_now() (sec int64, nsec int32) { //go:nosplit func cputicks() int64 { - // Currently cputicks() is used in blocking profiler and to seed runtime·fastrand(). // runtime·nanotime() is a poor approximation of CPU ticks that is enough for the profiler. - // TODO: need more entropy to better seed fastrand. return nanotime() } diff --git a/src/runtime/os_windows.go b/src/runtime/os_windows.go index 3772a864b2..6533b64004 100644 --- a/src/runtime/os_windows.go +++ b/src/runtime/os_windows.go @@ -468,7 +468,10 @@ func initLongPathSupport() { // strictly necessary, but is a nice validity check for the near to // medium term, when this functionality is still relatively new in // Windows. - getRandomData(longFileName[len(longFileName)-33 : len(longFileName)-1]) + targ := longFileName[len(longFileName)-33 : len(longFileName)-1] + if readRandom(targ) != len(targ) { + readTimeRandom(targ) + } start := copy(longFileName[:], sysDirectory[:sysDirectoryLen]) const dig = "0123456789abcdef" for i := 0; i < 32; i++ { @@ -519,12 +522,12 @@ func osinit() { } //go:nosplit -func getRandomData(r []byte) { +func readRandom(r []byte) int { n := 0 if stdcall2(_ProcessPrng, uintptr(unsafe.Pointer(&r[0])), uintptr(len(r)))&0xff != 0 { n = len(r) } - extendRandom(r, n) + return n } func goenvs() { diff --git a/src/runtime/proc.go b/src/runtime/proc.go index 6348335804..7bb8b81c26 100644 --- a/src/runtime/proc.go +++ b/src/runtime/proc.go @@ -784,8 +784,8 @@ func schedinit() { godebug := getGodebugEarly() initPageTrace(godebug) // must run after mallocinit but before anything allocates cpuinit(godebug) // must run before alginit - alginit() // maps, hash, fastrand must not be used before this call - fastrandinit() // must run before mcommoninit + randinit() // must run before alginit, mcommoninit + alginit() // maps, hash, rand must not be used before this call mcommoninit(gp.m, -1) modulesinit() // provides activeModules typelinksinit() // uses maps, activeModules @@ -900,18 +900,7 @@ func mcommoninit(mp *m, id int64) { mp.id = mReserveID() } - lo := uint32(int64Hash(uint64(mp.id), fastrandseed)) - hi := uint32(int64Hash(uint64(cputicks()), ^fastrandseed)) - if lo|hi == 0 { - hi = 1 - } - // Same behavior as for 1.17. - // TODO: Simplify this. - if goarch.BigEndian { - mp.fastrand = uint64(lo)<<32 | uint64(hi) - } else { - mp.fastrand = uint64(hi)<<32 | uint64(lo) - } + mrandinit(mp) mpreinit(mp) if mp.gsignal != nil { @@ -957,13 +946,6 @@ const ( osHasLowResClock = osHasLowResClockInt > 0 ) -var fastrandseed uintptr - -func fastrandinit() { - s := (*[unsafe.Sizeof(fastrandseed)]byte)(unsafe.Pointer(&fastrandseed))[:] - getRandomData(s) -} - // Mark gp ready to run. func ready(gp *g, traceskip int, next bool) { status := readgstatus(gp) @@ -3566,7 +3548,7 @@ func stealWork(now int64) (gp *g, inheritTime bool, rnow, pollUntil int64, newWo for i := 0; i < stealTries; i++ { stealTimersOrRunNextG := i == stealTries-1 - for enum := stealOrder.start(fastrand()); !enum.done(); enum.next() { + for enum := stealOrder.start(cheaprand()); !enum.done(); enum.next() { if sched.gcwaiting.Load() { // GC work may be available. return nil, false, now, pollUntil, true @@ -4955,7 +4937,7 @@ func newproc1(fn *funcval, callergp *g, callerpc uintptr) *g { } } // Track initial transition? - newg.trackingSeq = uint8(fastrand()) + newg.trackingSeq = uint8(cheaprand()) if newg.trackingSeq%gTrackingPeriod == 0 { newg.tracking = true } @@ -6636,7 +6618,7 @@ const randomizeScheduler = raceenabled // If the run queue is full, runnext puts g on the global queue. // Executed only by the owner P. func runqput(pp *p, gp *g, next bool) { - if randomizeScheduler && next && fastrandn(2) == 0 { + if randomizeScheduler && next && randn(2) == 0 { next = false } @@ -6689,7 +6671,7 @@ func runqputslow(pp *p, gp *g, h, t uint32) bool { if randomizeScheduler { for i := uint32(1); i <= n; i++ { - j := fastrandn(i + 1) + j := cheaprandn(i + 1) batch[i], batch[j] = batch[j], batch[i] } } @@ -6730,7 +6712,7 @@ func runqputbatch(pp *p, q *gQueue, qsize int) { return (pp.runqtail + o) % uint32(len(pp.runq)) } for i := uint32(1); i < n; i++ { - j := fastrandn(i + 1) + j := cheaprandn(i + 1) pp.runq[off(i)], pp.runq[off(j)] = pp.runq[off(j)], pp.runq[off(i)] } } diff --git a/src/runtime/rand.go b/src/runtime/rand.go new file mode 100644 index 0000000000..6cb8deef51 --- /dev/null +++ b/src/runtime/rand.go @@ -0,0 +1,225 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Random number generation + +package runtime + +import ( + "internal/chacha8rand" + "internal/goarch" + "runtime/internal/math" + "unsafe" + _ "unsafe" // for go:linkname +) + +// OS-specific startup can set startupRand if the OS passes +// random data to the process at startup time. +// For example Linux passes 16 bytes in the auxv vector. +var startupRand []byte + +// globalRand holds the global random state. +// It is only used at startup and for creating new m's. +// Otherwise the per-m random state should be used +// by calling goodrand. +var globalRand struct { + lock mutex + seed [32]byte + state chacha8rand.State + init bool +} + +var readRandomFailed bool + +// randinit initializes the global random state. +// It must be called before any use of grand. +func randinit() { + lock(&globalRand.lock) + if globalRand.init { + fatal("randinit twice") + } + + seed := &globalRand.seed + if startupRand != nil { + for i, c := range startupRand { + seed[i%len(seed)] ^= c + } + clear(startupRand) + startupRand = nil + } else { + if readRandom(seed[:]) != len(seed) { + // readRandom should never fail, but if it does we'd rather + // not make Go binaries completely unusable, so make up + // some random data based on the current time. + readRandomFailed = true + readTimeRandom(seed[:]) + } + } + globalRand.state.Init(*seed) + clear(seed[:]) + globalRand.init = true + unlock(&globalRand.lock) +} + +// readTimeRandom stretches any entropy in the current time +// into entropy the length of r and XORs it into r. +// This is a fallback for when readRandom does not read +// the full requested amount. +// Whatever entropy r already contained is preserved. +func readTimeRandom(r []byte) { + // Inspired by wyrand. + // An earlier version of this code used getg().m.procid as well, + // but note that this is called so early in startup that procid + // is not initialized yet. + v := uint64(nanotime()) + for len(r) > 0 { + v ^= 0xa0761d6478bd642f + v *= 0xe7037ed1a0b428db + size := 8 + if len(r) < 8 { + size = len(r) + } + for i := 0; i < size; i++ { + r[i] ^= byte(v >> (8 * i)) + } + r = r[size:] + v = v>>32 | v<<32 + } +} + +// bootstrapRand returns a random uint64 from the global random generator. +func bootstrapRand() uint64 { + lock(&globalRand.lock) + if !globalRand.init { + fatal("randinit missed") + } + for { + if x, ok := globalRand.state.Next(); ok { + unlock(&globalRand.lock) + return x + } + globalRand.state.Refill() + } +} + +// bootstrapRandReseed reseeds the bootstrap random number generator, +// clearing from memory any trace of previously returned random numbers. +func bootstrapRandReseed() { + lock(&globalRand.lock) + if !globalRand.init { + fatal("randinit missed") + } + globalRand.state.Reseed() + unlock(&globalRand.lock) +} + +// rand32 is uint32(rand()), called from compiler-generated code. +//go:nosplit +func rand32() uint32 { + return uint32(rand()) +} + +// rand returns a random uint64 from the per-m chacha8 state. +// Do not change signature: used via linkname from other packages. +//go:nosplit +//go:linkname rand +func rand() uint64 { + // Note: We avoid acquirem here so that in the fast path + // there is just a getg, an inlined c.Next, and a return. + // The performance difference on a 16-core AMD is + // 3.7ns/call this way versus 4.3ns/call with acquirem (+16%). + mp := getg().m + c := &mp.chacha8 + for { + // Note: c.Next is marked nosplit, + // so we don't need to use mp.locks + // on the fast path, which is that the + // first attempt succeeds. + x, ok := c.Next() + if ok { + return x + } + mp.locks++ // hold m even though c.Refill may do stack split checks + c.Refill() + mp.locks-- + } +} + +// mrandinit initializes the random state of an m. +func mrandinit(mp *m) { + var seed [4]uint64 + for i := range seed { + seed[i] = bootstrapRand() + } + bootstrapRandReseed() // erase key we just extracted + mp.chacha8.Init64(seed) + mp.cheaprand = rand() +} + +// randn is like rand() % n but faster. +// Do not change signature: used via linkname from other packages. +//go:nosplit +//go:linkname randn +func randn(n uint32) uint32 { + // See https://lemire.me/blog/2016/06/27/a-fast-alternative-to-the-modulo-reduction/ + return uint32((uint64(uint32(rand())) * uint64(n)) >> 32) +} + +// cheaprand is a non-cryptographic-quality 32-bit random generator +// suitable for calling at very high frequency (such as during scheduling decisions) +// and at sensitive moments in the runtime (such as during stack unwinding). +// it is "cheap" in the sense of both expense and quality. +// +// cheaprand must not be exported to other packages: +// the rule is that other packages using runtime-provided +// randomness must always use rand. +//go:nosplit +func cheaprand() uint32 { + mp := getg().m + // Implement wyrand: https://github.com/wangyi-fudan/wyhash + // Only the platform that math.Mul64 can be lowered + // by the compiler should be in this list. + if goarch.IsAmd64|goarch.IsArm64|goarch.IsPpc64| + goarch.IsPpc64le|goarch.IsMips64|goarch.IsMips64le| + goarch.IsS390x|goarch.IsRiscv64|goarch.IsLoong64 == 1 { + mp.cheaprand += 0xa0761d6478bd642f + hi, lo := math.Mul64(mp.cheaprand, mp.cheaprand^0xe7037ed1a0b428db) + return uint32(hi ^ lo) + } + + // Implement xorshift64+: 2 32-bit xorshift sequences added together. + // Shift triplet [17,7,16] was calculated as indicated in Marsaglia's + // Xorshift paper: https://www.jstatsoft.org/article/view/v008i14/xorshift.pdf + // This generator passes the SmallCrush suite, part of TestU01 framework: + // http://simul.iro.umontreal.ca/testu01/tu01.html + t := (*[2]uint32)(unsafe.Pointer(&mp.cheaprand)) + s1, s0 := t[0], t[1] + s1 ^= s1 << 17 + s1 = s1 ^ s0 ^ s1>>7 ^ s0>>16 + t[0], t[1] = s0, s1 + return s0 + s1 +} + +// cheaprand64 is a non-cryptographic-quality 63-bit random generator +// suitable for calling at very high frequency (such as during sampling decisions). +// it is "cheap" in the sense of both expense and quality. +// +// cheaprand64 must not be exported to other packages: +// the rule is that other packages using runtime-provided +// randomness must always use rand. +//go:nosplit +func cheaprand64() int64 { + return int64(cheaprand())<<31 ^ int64(cheaprand()) +} + +// cheaprandn is like cheaprand() % n but faster. +// +// cheaprandn must not be exported to other packages: +// the rule is that other packages using runtime-provided +// randomness must always use randn. +//go:nosplit +func cheaprandn(n uint32) uint32 { + // See https://lemire.me/blog/2016/06/27/a-fast-alternative-to-the-modulo-reduction/ + return uint32((uint64(cheaprand()) * uint64(n)) >> 32) +} diff --git a/src/runtime/rand_test.go b/src/runtime/rand_test.go index 92d07ebada..94648c5216 100644 --- a/src/runtime/rand_test.go +++ b/src/runtime/rand_test.go @@ -10,6 +10,17 @@ import ( "testing" ) +func TestReadRandom(t *testing.T) { + if *ReadRandomFailed { + switch GOOS { + default: + t.Fatalf("readRandom failed at startup") + case "plan9": + // ok + } + } +} + func BenchmarkFastrand(b *testing.B) { b.RunParallel(func(pb *testing.PB) { for pb.Next() { diff --git a/src/runtime/runtime2.go b/src/runtime/runtime2.go index 01f1a50670..e64be992b0 100644 --- a/src/runtime/runtime2.go +++ b/src/runtime/runtime2.go @@ -6,6 +6,7 @@ package runtime import ( "internal/abi" + "internal/chacha8rand" "internal/goarch" "runtime/internal/atomic" "runtime/internal/sys" @@ -577,7 +578,6 @@ type m struct { isExtraInC bool // m is an extra m that is not executing Go code isExtraInSig bool // m is an extra m in a signal handler freeWait atomic.Uint32 // Whether it is safe to free g0 and delete m (one of freeMRef, freeMStack, freeMWait) - fastrand uint64 needextram bool traceback uint8 ncgocall uint64 // number of cgo calls in total @@ -632,6 +632,9 @@ type m struct { mOS + chacha8 chacha8rand.State + cheaprand uint64 + // Up to 10 locks held by this m, maintained by the lock ranking code. locksHeldLen int locksHeld [10]heldLockInfo @@ -1009,27 +1012,6 @@ type forcegcstate struct { idle atomic.Bool } -// extendRandom extends the random numbers in r[:n] to the whole slice r. -// Treats n<0 as n==0. -func extendRandom(r []byte, n int) { - if n < 0 { - n = 0 - } - for n < len(r) { - // Extend random bits using hash function & time seed - w := n - if w > 16 { - w = 16 - } - h := memhash(unsafe.Pointer(&r[n-w]), uintptr(nanotime()), uintptr(w)) - for i := 0; i < goarch.PtrSize && n < len(r); i++ { - r[n] = byte(h) - n++ - h >>= 8 - } - } -} - // A _defer holds an entry on the list of deferred calls. // If you add a field here, add code to clear it in deferProcStack. // This struct must match the code in cmd/compile/internal/ssagen/ssa.go:deferstruct diff --git a/src/runtime/select.go b/src/runtime/select.go index 34c06375c2..b3a3085cb0 100644 --- a/src/runtime/select.go +++ b/src/runtime/select.go @@ -173,7 +173,7 @@ func selectgo(cas0 *scase, order0 *uint16, pc0 *uintptr, nsends, nrecvs int, blo continue } - j := fastrandn(uint32(norder + 1)) + j := cheaprandn(uint32(norder + 1)) pollorder[norder] = pollorder[j] pollorder[j] = uint16(i) norder++ diff --git a/src/runtime/sema.go b/src/runtime/sema.go index 3b6874ca11..c87fc7658e 100644 --- a/src/runtime/sema.go +++ b/src/runtime/sema.go @@ -338,7 +338,7 @@ func (root *semaRoot) queue(addr *uint32, s *sudog, lifo bool) { // // s.ticket compared with zero in couple of places, therefore set lowest bit. // It will not affect treap's quality noticeably. - s.ticket = fastrand() | 1 + s.ticket = cheaprand() | 1 s.parent = last *pt = s diff --git a/src/runtime/stubs.go b/src/runtime/stubs.go index cf856e135f..34984d86ff 100644 --- a/src/runtime/stubs.go +++ b/src/runtime/stubs.go @@ -6,8 +6,6 @@ package runtime import ( "internal/abi" - "internal/goarch" - "runtime/internal/math" "unsafe" ) @@ -120,94 +118,6 @@ func reflect_memmove(to, from unsafe.Pointer, n uintptr) { // exported value for testing const hashLoad = float32(loadFactorNum) / float32(loadFactorDen) -//go:nosplit -func fastrand() uint32 { - mp := getg().m - // Implement wyrand: https://github.com/wangyi-fudan/wyhash - // Only the platform that math.Mul64 can be lowered - // by the compiler should be in this list. - if goarch.IsAmd64|goarch.IsArm64|goarch.IsPpc64| - goarch.IsPpc64le|goarch.IsMips64|goarch.IsMips64le| - goarch.IsS390x|goarch.IsRiscv64|goarch.IsLoong64 == 1 { - mp.fastrand += 0xa0761d6478bd642f - hi, lo := math.Mul64(mp.fastrand, mp.fastrand^0xe7037ed1a0b428db) - return uint32(hi ^ lo) - } - - // Implement xorshift64+: 2 32-bit xorshift sequences added together. - // Shift triplet [17,7,16] was calculated as indicated in Marsaglia's - // Xorshift paper: https://www.jstatsoft.org/article/view/v008i14/xorshift.pdf - // This generator passes the SmallCrush suite, part of TestU01 framework: - // http://simul.iro.umontreal.ca/testu01/tu01.html - t := (*[2]uint32)(unsafe.Pointer(&mp.fastrand)) - s1, s0 := t[0], t[1] - s1 ^= s1 << 17 - s1 = s1 ^ s0 ^ s1>>7 ^ s0>>16 - t[0], t[1] = s0, s1 - return s0 + s1 -} - -//go:nosplit -func fastrandn(n uint32) uint32 { - // This is similar to fastrand() % n, but faster. - // See https://lemire.me/blog/2016/06/27/a-fast-alternative-to-the-modulo-reduction/ - return uint32(uint64(fastrand()) * uint64(n) >> 32) -} - -func fastrand64() uint64 { - mp := getg().m - // Implement wyrand: https://github.com/wangyi-fudan/wyhash - // Only the platform that math.Mul64 can be lowered - // by the compiler should be in this list. - if goarch.IsAmd64|goarch.IsArm64|goarch.IsPpc64| - goarch.IsPpc64le|goarch.IsMips64|goarch.IsMips64le| - goarch.IsS390x|goarch.IsRiscv64 == 1 { - mp.fastrand += 0xa0761d6478bd642f - hi, lo := math.Mul64(mp.fastrand, mp.fastrand^0xe7037ed1a0b428db) - return hi ^ lo - } - - // Implement xorshift64+: 2 32-bit xorshift sequences added together. - // Xorshift paper: https://www.jstatsoft.org/article/view/v008i14/xorshift.pdf - // This generator passes the SmallCrush suite, part of TestU01 framework: - // http://simul.iro.umontreal.ca/testu01/tu01.html - t := (*[2]uint32)(unsafe.Pointer(&mp.fastrand)) - s1, s0 := t[0], t[1] - s1 ^= s1 << 17 - s1 = s1 ^ s0 ^ s1>>7 ^ s0>>16 - r := uint64(s0 + s1) - - s0, s1 = s1, s0 - s1 ^= s1 << 17 - s1 = s1 ^ s0 ^ s1>>7 ^ s0>>16 - r += uint64(s0+s1) << 32 - - t[0], t[1] = s0, s1 - return r -} - -func fastrandu() uint { - if goarch.PtrSize == 4 { - return uint(fastrand()) - } - return uint(fastrand64()) -} - -//go:linkname rand_fastrand64 math/rand.fastrand64 -func rand_fastrand64() uint64 { return fastrand64() } - -//go:linkname rand2_fastrand64 math/rand/v2.fastrand64 -func rand2_fastrand64() uint64 { return fastrand64() } - -//go:linkname sync_fastrandn sync.fastrandn -func sync_fastrandn(n uint32) uint32 { return fastrandn(n) } - -//go:linkname net_fastrandu net.fastrandu -func net_fastrandu() uint { return fastrandu() } - -//go:linkname os_fastrand os.fastrand -func os_fastrand() uint32 { return fastrand() } - // in internal/bytealg/equal_*.s // //go:noescape diff --git a/src/runtime/symtab.go b/src/runtime/symtab.go index 87b687a196..8b878525d0 100644 --- a/src/runtime/symtab.go +++ b/src/runtime/symtab.go @@ -931,7 +931,7 @@ func pcvalue(f funcInfo, off uint32, targetpc uintptr, strict bool) (int32, uint cache.inUse++ if cache.inUse == 1 { e := &cache.entries[ck] - ci := fastrandn(uint32(len(cache.entries[ck]))) + ci := cheaprandn(uint32(len(cache.entries[ck]))) e[ci] = e[0] e[0] = pcvalueCacheEnt{ targetpc: targetpc, diff --git a/src/sync/pool.go b/src/sync/pool.go index ffab67bf19..3359aba57b 100644 --- a/src/sync/pool.go +++ b/src/sync/pool.go @@ -76,7 +76,8 @@ type poolLocal struct { } // from runtime -func fastrandn(n uint32) uint32 +//go:linkname runtime_randn runtime.randn +func runtime_randn(n uint32) uint32 var poolRaceHash [128]uint64 @@ -97,7 +98,7 @@ func (p *Pool) Put(x any) { return } if race.Enabled { - if fastrandn(4) == 0 { + if runtime_randn(4) == 0 { // Randomly drop x on floor. return } diff --git a/test/live.go b/test/live.go index 6badb011b0..5658c8ba06 100644 --- a/test/live.go +++ b/test/live.go @@ -667,7 +667,7 @@ func bad40() { func good40() { ret := T40{} // ERROR "stack object ret T40$" - ret.m = make(map[int]int) // ERROR "live at call to fastrand: .autotmp_[0-9]+$" "stack object .autotmp_[0-9]+ runtime.hmap$" + ret.m = make(map[int]int) // ERROR "live at call to rand32: .autotmp_[0-9]+$" "stack object .autotmp_[0-9]+ runtime.hmap$" t := &ret printnl() // ERROR "live at call to printnl: ret$" // Note: ret is live at the printnl because the compiler moves &ret diff --git a/test/live_regabi.go b/test/live_regabi.go index 80a9cc1002..a335126b3f 100644 --- a/test/live_regabi.go +++ b/test/live_regabi.go @@ -664,7 +664,7 @@ func bad40() { func good40() { ret := T40{} // ERROR "stack object ret T40$" - ret.m = make(map[int]int) // ERROR "live at call to fastrand: .autotmp_[0-9]+$" "stack object .autotmp_[0-9]+ runtime.hmap$" + ret.m = make(map[int]int) // ERROR "live at call to rand32: .autotmp_[0-9]+$" "stack object .autotmp_[0-9]+ runtime.hmap$" t := &ret printnl() // ERROR "live at call to printnl: ret$" // Note: ret is live at the printnl because the compiler moves &ret From 5686b650cc6e75ac28f76a3c02176cb3f25b13c4 Mon Sep 17 00:00:00 2001 From: Alan Donovan Date: Tue, 5 Dec 2023 14:22:53 -0500 Subject: [PATCH 156/313] doc/go_spec.html: rename golang.org to go.dev Fixes #64513 Change-Id: I45d6a4ba2170308260f3b8f7965affc9948f3fcf Reviewed-on: https://go-review.googlesource.com/c/go/+/547476 Reviewed-by: Dmitri Shuralyov Reviewed-by: Dmitri Shuralyov LUCI-TryBot-Result: Go LUCI Auto-Submit: Alan Donovan --- doc/go1.17_spec.html | 2 +- doc/go_spec.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/go1.17_spec.html b/doc/go1.17_spec.html index 15e73c3867..16c6d40ffc 100644 --- a/doc/go1.17_spec.html +++ b/doc/go1.17_spec.html @@ -8,7 +8,7 @@

This is a reference manual for the Go programming language. For -more information and other documents, see golang.org. +more information and other documents, see go.dev.

diff --git a/doc/go_spec.html b/doc/go_spec.html index 18f88d5ead..f68441e664 100644 --- a/doc/go_spec.html +++ b/doc/go_spec.html @@ -10,7 +10,7 @@ This is the reference manual for the Go programming language. The pre-Go1.18 version, without generics, can be found here. -For more information and other documents, see golang.org. +For more information and other documents, see go.dev.

From ed30ee6c56505905880e63266641de32666e1c0b Mon Sep 17 00:00:00 2001 From: Alan Donovan Date: Tue, 5 Dec 2023 15:16:18 -0500 Subject: [PATCH 157/313] doc/go1.22: document ast.Object deprecation The api.txt changes were originally recorded by mistake (sorry) into go1.21.txt; see CL 504915, which made the actual change in August. Change-Id: If46b48d9714f01605888a6e975c1a03ccfce3b3e Reviewed-on: https://go-review.googlesource.com/c/go/+/547637 LUCI-TryBot-Result: Go LUCI Reviewed-by: Robert Griesemer Auto-Submit: Alan Donovan Commit-Queue: Alan Donovan --- api/go1.22.txt | 5 +++++ doc/go1.22.html | 28 +++++++++++++++++++++++----- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/api/go1.22.txt b/api/go1.22.txt index 90ab686b11..d2a1ae7a88 100644 --- a/api/go1.22.txt +++ b/api/go1.22.txt @@ -48,7 +48,12 @@ pkg encoding/base64, method (*Encoding) AppendDecode([]uint8, []uint8) ([]uint8, pkg encoding/base64, method (*Encoding) AppendEncode([]uint8, []uint8) []uint8 #53693 pkg encoding/hex, func AppendDecode([]uint8, []uint8) ([]uint8, error) #53693 pkg encoding/hex, func AppendEncode([]uint8, []uint8) []uint8 #53693 +pkg go/ast, func NewPackage //deprecated #52463 pkg go/ast, func Unparen(Expr) Expr #60061 +pkg go/ast, type Importer //deprecated #52463 +pkg go/ast, type Object //deprecated #52463 +pkg go/ast, type Package //deprecated #52463 +pkg go/ast, type Scope //deprecated #52463 pkg go/types, func NewAlias(*TypeName, Type) *Alias #63223 pkg go/types, func Unalias(Type) Type #63223 pkg go/types, method (*Alias) Obj() *TypeName #63223 diff --git a/doc/go1.22.html b/doc/go1.22.html index 1393be1dc9..a7dd391aeb 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -340,12 +340,30 @@ Do not send CLs removing the interior tags from such phrases.

go/ast
-

- TODO: https://go.dev/issue/52463: formally deprecate Object +

+ The following declarations related to + syntactic identifier resolution + are now deprecated: + Ident.Obj, + Object, + Scope, + File.Scope, + File.Unresolved, + Importer, + Package, + NewPackage.

- -

- TODO: https://go.dev/cl/504915: go/ast: deprecate Object; modified api/go1.21.txt +

+ Identifiers cannot be accurately resolved without type information. + Consider, for example, the identifier K + in T{K: ""}: it could be the name of a local variable + if T is a map type, or the name of a field if T is a struct type. +

+

+ New programs should use the go/types + package to resolve identifiers; + see Object, Info.Uses, + and Info.Defs for details.

From 34416d7f6f93cd6562636e311c362ebe421f1a4c Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Tue, 5 Dec 2023 12:56:04 -0800 Subject: [PATCH 158/313] cmd/compile: fix escape analysis of string min/max When I was plumbing min/max support through the compiler, I was thinking mostly about numeric argument types. As a result, I forgot that escape analysis would need to be aware that min/max can operate on string values, which contain pointers. Fixes #64565. Change-Id: I36127ce5a2da942401910fa0f9de922726c9f94d Reviewed-on: https://go-review.googlesource.com/c/go/+/547715 Reviewed-by: Keith Randall Reviewed-by: Mauri de Souza Meneguzzo Auto-Submit: Matthew Dempsky LUCI-TryBot-Result: Go LUCI --- src/cmd/compile/internal/escape/call.go | 13 ++++++++++--- test/escape_calls.go | 7 +++++++ test/fixedbugs/issue64565.go | 15 +++++++++++++++ test/fixedbugs/issue64565.out | 3 +++ 4 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 test/fixedbugs/issue64565.go create mode 100644 test/fixedbugs/issue64565.out diff --git a/src/cmd/compile/internal/escape/call.go b/src/cmd/compile/internal/escape/call.go index bf40de0544..4a3753ada9 100644 --- a/src/cmd/compile/internal/escape/call.go +++ b/src/cmd/compile/internal/escape/call.go @@ -155,10 +155,17 @@ func (e *escape) call(ks []hole, call ir.Node) { e.discard(call.X) e.discard(call.Y) - case ir.ODELETE, ir.OMAX, ir.OMIN, ir.OPRINT, ir.OPRINTLN, ir.ORECOVERFP: + case ir.ODELETE, ir.OPRINT, ir.OPRINTLN, ir.ORECOVERFP: call := call.(*ir.CallExpr) - for i := range call.Args { - e.discard(call.Args[i]) + for _, arg := range call.Args { + e.discard(arg) + } + e.discard(call.RType) + + case ir.OMIN, ir.OMAX: + call := call.(*ir.CallExpr) + for _, arg := range call.Args { + argument(ks[0], arg) } e.discard(call.RType) diff --git a/test/escape_calls.go b/test/escape_calls.go index aa7c7f516c..5424c006ee 100644 --- a/test/escape_calls.go +++ b/test/escape_calls.go @@ -52,3 +52,10 @@ func bar() { s := "string" f([]string{s}) // ERROR "\[\]string{...} escapes to heap" } + +func strmin(a, b, c string) string { // ERROR "leaking param: a to result ~r0 level=0" "leaking param: b to result ~r0 level=0" "leaking param: c to result ~r0 level=0" + return min(a, b, c) +} +func strmax(a, b, c string) string { // ERROR "leaking param: a to result ~r0 level=0" "leaking param: b to result ~r0 level=0" "leaking param: c to result ~r0 level=0" + return max(a, b, c) +} diff --git a/test/fixedbugs/issue64565.go b/test/fixedbugs/issue64565.go new file mode 100644 index 0000000000..634025ce3e --- /dev/null +++ b/test/fixedbugs/issue64565.go @@ -0,0 +1,15 @@ +// run + +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +func main() { + m := "0" + for _, c := range "321" { + m = max(string(c), m) + println(m) + } +} diff --git a/test/fixedbugs/issue64565.out b/test/fixedbugs/issue64565.out new file mode 100644 index 0000000000..1f242fa6f0 --- /dev/null +++ b/test/fixedbugs/issue64565.out @@ -0,0 +1,3 @@ +3 +3 +3 From 53393062ba95299e82ecaa3a0af69315e414e624 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Mon, 4 Dec 2023 11:13:32 -0800 Subject: [PATCH 159/313] doc: add release note for go/types.Info.FileVersions For #62605. Change-Id: I3c06b835c874c1be5aa5293e3906bdd06c021d87 Reviewed-on: https://go-review.googlesource.com/c/go/+/546836 Auto-Submit: Robert Griesemer Reviewed-by: Michael Knyszek Reviewed-by: Robert Griesemer TryBot-Bypass: Robert Griesemer --- doc/go1.22.html | 58 ++++++++++++++++++++++--------------------------- 1 file changed, 26 insertions(+), 32 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index a7dd391aeb..dc752a9ffe 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -368,38 +368,6 @@ Do not send CLs removing the interior tags from such phrases.
-
go/types
-
-

- TODO: https://go.dev/issue/62037: add Info.PkgName method -

- -

- TODO: https://go.dev/issue/62605: Export Info.FileVersions for access to file-specific version information -

- -

- TODO: https://go.dev/issue/63223: API changes to support explicit Alias nodes -

- -

- TODO: https://go.dev/cl/540056: go/types: export Info.FileVersions; modified api/next/62605.txt -

- -

- TODO: https://go.dev/issue/61035: go/types, types2: fix SizesFor("gc", ...) to match actual gc behavior -

- -

- TODO: https://go.dev/cl/541575: go/types, types2: implement Info.PkgNameOf; modified api/next/62037.txt -

- -

- TODO: https://go.dev/cl/541737: go/types, types2: implement Alias proposal (export API); modified api/next/63223.txt -

-
-
-
go/version

@@ -540,6 +508,26 @@ Do not send CLs removing the interior tags from such phrases.

go/types
+

+ TODO: https://go.dev/issue/62037: add Info.PkgName method +

+ +

+ TODO: https://go.dev/issue/63223: API changes to support explicit Alias nodes +

+ +

+ TODO: https://go.dev/issue/61035: go/types, types2: fix SizesFor("gc", ...) to match actual gc behavior +

+ +

+ TODO: https://go.dev/cl/541575: go/types, types2: implement Info.PkgNameOf; modified api/next/62037.txt +

+ +

+ TODO: https://go.dev/cl/541737: go/types, types2: implement Alias proposal (export API); modified api/next/63223.txt +

+

The start position (Pos) of the lexical environment block (Scope) @@ -547,6 +535,12 @@ Do not send CLs removing the interior tags from such phrases. it used to start at the opening curly brace of the function body, but now starts at the function's func token.

+ +

+ The Info struct now exports the + FileVersions map + which provides per-file Go version information. +

From ba519019d2f39df29060eec104b47c7c9ea720b2 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Mon, 4 Dec 2023 11:38:50 -0800 Subject: [PATCH 160/313] doc: add release note for changes to go/types/SizesFor For #61035. Change-Id: I27e2c44f9275b508d9dccc50da80896384a4c8fc Reviewed-on: https://go-review.googlesource.com/c/go/+/546837 TryBot-Bypass: Robert Griesemer Reviewed-by: Alan Donovan Reviewed-by: Robert Griesemer Auto-Submit: Robert Griesemer --- doc/go1.22.html | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index dc752a9ffe..c1535cc275 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -516,8 +516,11 @@ Do not send CLs removing the interior tags from such phrases. TODO: https://go.dev/issue/63223: API changes to support explicit Alias nodes

-

- TODO: https://go.dev/issue/61035: go/types, types2: fix SizesFor("gc", ...) to match actual gc behavior +

+ The implementation of SizesFor has been adjusted to compute + the same type sizes as the compiler when the compiler argument for SizesFor is "gc". + The default Sizes implementation used by the type checker is now + types.SizesFor("gc", "amd64").

From 49f022cfa382e7326d2a6e3237dbed1ac43ae7b6 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Mon, 4 Dec 2023 12:35:35 -0800 Subject: [PATCH 161/313] doc: add release note for go/types/PkgNameOf For #62037. Change-Id: Id1d02f88205e5ea62662e78c8313731ec9e55b1e Reviewed-on: https://go-review.googlesource.com/c/go/+/546975 Reviewed-by: Alan Donovan TryBot-Bypass: Robert Griesemer Reviewed-by: Robert Griesemer Auto-Submit: Robert Griesemer --- doc/go1.22.html | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index c1535cc275..7642ff5bfd 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -508,8 +508,9 @@ Do not send CLs removing the interior tags from such phrases.

go/types
-

- TODO: https://go.dev/issue/62037: add Info.PkgName method +

+ The new helper method PkgNameOf returns the local package name + for the given import declaration.

@@ -523,10 +524,6 @@ Do not send CLs removing the interior tags from such phrases. types.SizesFor("gc", "amd64").

-

- TODO: https://go.dev/cl/541575: go/types, types2: implement Info.PkgNameOf; modified api/next/62037.txt -

-

TODO: https://go.dev/cl/541737: go/types, types2: implement Alias proposal (export API); modified api/next/63223.txt

From 1e9de4db88089f0959462f2932666c9aed273d70 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Mon, 4 Dec 2023 13:24:13 -0800 Subject: [PATCH 162/313] doc: add release note for go/types.Alias type and Unalias function Also, add some missing tags. For #63223. Change-Id: I570b82be830b3c124420c5715ab1165ca53725f9 Reviewed-on: https://go-review.googlesource.com/c/go/+/546358 Auto-Submit: Robert Griesemer Reviewed-by: Alan Donovan Reviewed-by: Robert Griesemer TryBot-Bypass: Robert Griesemer --- doc/go1.22.html | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 7642ff5bfd..9a84d3dd74 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -513,8 +513,22 @@ Do not send CLs removing the interior tags from such phrases. for the given import declaration.

-

- TODO: https://go.dev/issue/63223: API changes to support explicit Alias nodes +

+ The new Alias type represents type aliases. + Previously, type aliases were not represented explicitly, so a reference to a type alias was equivalent + to spelling out the aliased type, and the name of the alias was lost. + The new representation retains the intermediate Alias. + This enables improved error reporting (the name of an alias can be reported), and allows for better handling + of cyclic type declarations involving type aliases. + In a future release, Alias types will also carry type parameter information. + The new function Unalias returns the actual type denoted by an + Alias type (or any other Type for that matter). + Because Alias types may break existing type switches that do not know to check for them, + this functionality is controlled by a GODEBUG field named gotypesalias. + With gotypesalias=0, everything behaves as before, and Alias types are never created. + With gotypesalias=1, Alias types are created and clients must expect them. + The default is gotypesalias=0. + In a future release, the default will be changed to gotypesalias=1.

@@ -524,13 +538,9 @@ Do not send CLs removing the interior tags from such phrases. types.SizesFor("gc", "amd64").

-

- TODO: https://go.dev/cl/541737: go/types, types2: implement Alias proposal (export API); modified api/next/63223.txt -

-

- The start position (Pos) - of the lexical environment block (Scope) + The start position (Pos) + of the lexical environment block (Scope) that represents a function body has changed: it used to start at the opening curly brace of the function body, but now starts at the function's func token. From 3c31998f4f20d79bf2b42f7a43df1867b8c08259 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Mon, 4 Dec 2023 13:31:23 -0800 Subject: [PATCH 163/313] doc: re-arrange release notes for go/types Better order in description of changes to go/types. Move go/types section up so it's in alphabetical order again. No changes to actual content. Change-Id: If2f085b665b412489e5dfdba79b7f93598ff2785 Reviewed-on: https://go-review.googlesource.com/c/go/+/546359 Reviewed-by: Alan Donovan Reviewed-by: Robert Griesemer Auto-Submit: Robert Griesemer TryBot-Bypass: Robert Griesemer --- doc/go1.22.html | 96 ++++++++++++++++++++++++------------------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 9a84d3dd74..fb45dfe45f 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -368,6 +368,54 @@ Do not send CLs removing the interior tags from such phrases.

+
go/types
+
+

+ The new Alias type represents type aliases. + Previously, type aliases were not represented explicitly, so a reference to a type alias was equivalent + to spelling out the aliased type, and the name of the alias was lost. + The new representation retains the intermediate Alias. + This enables improved error reporting (the name of an alias can be reported), and allows for better handling + of cyclic type declarations involving type aliases. + In a future release, Alias types will also carry type parameter information. + The new function Unalias returns the actual type denoted by an + Alias type (or any other Type for that matter). + Because Alias types may break existing type switches that do not know to check for them, + this functionality is controlled by a GODEBUG field named gotypesalias. + With gotypesalias=0, everything behaves as before, and Alias types are never created. + With gotypesalias=1, Alias types are created and clients must expect them. + The default is gotypesalias=0. + In a future release, the default will be changed to gotypesalias=1. +

+ +

+ The Info struct now exports the + FileVersions map + which provides per-file Go version information. +

+ +

+ The new helper method PkgNameOf returns the local package name + for the given import declaration. +

+ +

+ The implementation of SizesFor has been adjusted to compute + the same type sizes as the compiler when the compiler argument for SizesFor is "gc". + The default Sizes implementation used by the type checker is now + types.SizesFor("gc", "amd64"). +

+ +

+ The start position (Pos) + of the lexical environment block (Scope) + that represents a function body has changed: + it used to start at the opening curly brace of the function body, + but now starts at the function's func token. +

+
+
+
go/version

@@ -506,54 +554,6 @@ Do not send CLs removing the interior tags from such phrases.

-
go/types
-
-

- The new helper method PkgNameOf returns the local package name - for the given import declaration. -

- -

- The new Alias type represents type aliases. - Previously, type aliases were not represented explicitly, so a reference to a type alias was equivalent - to spelling out the aliased type, and the name of the alias was lost. - The new representation retains the intermediate Alias. - This enables improved error reporting (the name of an alias can be reported), and allows for better handling - of cyclic type declarations involving type aliases. - In a future release, Alias types will also carry type parameter information. - The new function Unalias returns the actual type denoted by an - Alias type (or any other Type for that matter). - Because Alias types may break existing type switches that do not know to check for them, - this functionality is controlled by a GODEBUG field named gotypesalias. - With gotypesalias=0, everything behaves as before, and Alias types are never created. - With gotypesalias=1, Alias types are created and clients must expect them. - The default is gotypesalias=0. - In a future release, the default will be changed to gotypesalias=1. -

- -

- The implementation of SizesFor has been adjusted to compute - the same type sizes as the compiler when the compiler argument for SizesFor is "gc". - The default Sizes implementation used by the type checker is now - types.SizesFor("gc", "amd64"). -

- -

- The start position (Pos) - of the lexical environment block (Scope) - that represents a function body has changed: - it used to start at the opening curly brace of the function body, - but now starts at the function's func token. -

- -

- The Info struct now exports the - FileVersions map - which provides per-file Go version information. -

-
-
-
reflect

From 1661bf02c8fa7802505de040386365d76dacd0af Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Tue, 5 Dec 2023 13:01:30 -0800 Subject: [PATCH 164/313] doc: add release note for new go/version package For #62039. Change-Id: Id19a4c06489ad24dc44c7caf2405d155d96c6fcb Reviewed-on: https://go-review.googlesource.com/c/go/+/547695 Reviewed-by: Michael Knyszek TryBot-Bypass: Robert Griesemer Reviewed-by: Robert Griesemer Auto-Submit: Robert Griesemer --- doc/go1.22.html | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index fb45dfe45f..e7f7e48889 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -418,12 +418,9 @@ Do not send CLs removing the interior tags from such phrases.

go/version
-

- TODO: https://go.dev/issue/62039: package for handling Go version strings -

- -

- TODO: https://go.dev/cl/538895: go/version: add new package; modified api/next/62039.txt +

+ The new go/version package implements functions + for validating and comparing Go version strings.

From 01dfae914bb4658d096c3ab8f5210bcf3f665171 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Tue, 5 Dec 2023 13:40:45 -0800 Subject: [PATCH 165/313] doc: add release notes for changes to encoding packages For #53693. Change-Id: I360f5cb9caf5fa77267a100eebcc282955677abe Reviewed-on: https://go-review.googlesource.com/c/go/+/547755 Reviewed-by: Robert Griesemer Reviewed-by: Michael Knyszek Auto-Submit: Robert Griesemer Reviewed-by: Joseph Tsai TryBot-Bypass: Robert Griesemer --- doc/go1.22.html | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index e7f7e48889..12203742bd 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -324,16 +324,21 @@ Do not send CLs removing the interior tags from such phrases.
encoding
-

- TODO: https://go.dev/issue/53693: provide append-like variants +

+ The new methods AppendEncode and AppendDecode added to + each of the Encoding types in the packages + encoding/base32, + encoding/base64, and + encoding/hex + simplify encoding and decoding from and to byte slices by taking care of byte slice buffer management.

-

- TODO: https://go.dev/cl/504884: encoding: add AppendEncode and AppendDecode; modified api/next/53693.txt -

- -

- TODO: https://go.dev/cl/505236: encoding: reject negative runes in Encoding.WithPadding; Providing a negative rune to Encoding.WithPadding other than NoPadding made no semantic sense, and will now panic. +

+ The methods + base32.Encoding.WithPadding and + base64.Encoding.WithPadding + now panic if the padding argument is a negative value other than + NoPadding.

From e418258993cc1a11816baf5d9004cea3b029ae7c Mon Sep 17 00:00:00 2001 From: "khr@golang.org" Date: Tue, 5 Dec 2023 22:54:10 +0000 Subject: [PATCH 166/313] doc: document new cmp.Or function Change-Id: I41ea06018daae2c929edc24a714007cede9296ed Reviewed-on: https://go-review.googlesource.com/c/go/+/547756 TryBot-Bypass: Keith Randall Reviewed-by: Than McIntosh Auto-Submit: Keith Randall Reviewed-by: Keith Randall --- doc/go1.22.html | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 12203742bd..05c7cc090c 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -243,12 +243,8 @@ Do not send CLs removing the interior tags from such phrases.
cmp
-

- TODO: https://go.dev/issue/60204: add Or -

- -

- TODO: https://go.dev/cl/504883: cmp: add Or; modified api/next/60204.txt +

+ The new function Or returns the first in a sequence of values that is not the zero value.

From c002a5d8abef3037dd5f13e0c60cf42b86b4d885 Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Tue, 5 Dec 2023 15:15:06 -0500 Subject: [PATCH 167/313] doc: add release note on coverage testing of no-test packages Add a small release note blurb to describe the changes in CL 495447 relating to "go test -cover" runs on packages with functions but no tests. For #61422. Change-Id: Ib8163ac70b902f0d7f9f470b944e7f70711e3cf3 Reviewed-on: https://go-review.googlesource.com/c/go/+/547635 Reviewed-by: Bryan Mills Auto-Submit: Than McIntosh LUCI-TryBot-Result: Go LUCI --- doc/go1.22.html | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/doc/go1.22.html b/doc/go1.22.html index 05c7cc090c..64afa898af 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -53,6 +53,25 @@ Do not send CLs removing the interior tags from such phrases.

+ +

+`go` `test` `-cover` now prints coverage summaries for covered +packages that do not have their own test files. Prior to Go 1.22 a +`go` `test` `-cover` run for such a package would report +

+ +

+ ? mymod/mypack [no test files] +

+ +

+ and now with Go 1.22, functions in the package are treated as uncovered: +

+ +

+ mymod/mypack coverage: 0.0% of statements +

+

Cgo

From 5214949d41dda9d02490526d4e92a6cfa91a2b4a Mon Sep 17 00:00:00 2001 From: Roland Shoemaker Date: Mon, 4 Dec 2023 10:00:41 -0800 Subject: [PATCH 168/313] crypto/x509: revert Policies marshaling behavior Don't marshal Policies field. Updates #64248 Change-Id: I7e6d8b9ff1b3698bb4f585fa82fc4050eff3ae4d Reviewed-on: https://go-review.googlesource.com/c/go/+/546915 LUCI-TryBot-Result: Go LUCI Reviewed-by: Damien Neil --- src/crypto/x509/x509.go | 30 +++--------------------------- src/crypto/x509/x509_test.go | 27 --------------------------- 2 files changed, 3 insertions(+), 54 deletions(-) diff --git a/src/crypto/x509/x509.go b/src/crypto/x509/x509.go index fa2785aace..29d8e6bff7 100644 --- a/src/crypto/x509/x509.go +++ b/src/crypto/x509/x509.go @@ -1186,9 +1186,9 @@ func buildCertExtensions(template *Certificate, subjectIsEmpty bool, authorityKe n++ } - if (len(template.PolicyIdentifiers) > 0 || len(template.Policies) > 0) && + if len(template.PolicyIdentifiers) > 0 && !oidInExtensions(oidExtensionCertificatePolicies, template.ExtraExtensions) { - ret[n], err = marshalCertificatePolicies(template.Policies, template.PolicyIdentifiers) + ret[n], err = marshalCertificatePolicies(template.PolicyIdentifiers) if err != nil { return nil, err } @@ -1373,32 +1373,12 @@ func marshalBasicConstraints(isCA bool, maxPathLen int, maxPathLenZero bool) (pk return ext, err } -func marshalCertificatePolicies(policies []OID, policyIdentifiers []asn1.ObjectIdentifier) (pkix.Extension, error) { +func marshalCertificatePolicies(policyIdentifiers []asn1.ObjectIdentifier) (pkix.Extension, error) { ext := pkix.Extension{Id: oidExtensionCertificatePolicies} b := cryptobyte.NewBuilder(make([]byte, 0, 128)) b.AddASN1(cryptobyte_asn1.SEQUENCE, func(child *cryptobyte.Builder) { - // added is used to track OIDs which are duplicated in both Policies and PolicyIdentifiers - // so they can be skipped. Note that this explicitly doesn't check for duplicate OIDs in - // Policies or in PolicyIdentifiers themselves, as this would be considered breaking behavior. - added := map[string]bool{} - for _, v := range policies { - child.AddASN1(cryptobyte_asn1.SEQUENCE, func(child *cryptobyte.Builder) { - child.AddASN1(cryptobyte_asn1.OBJECT_IDENTIFIER, func(child *cryptobyte.Builder) { - oidStr := v.String() - added[oidStr] = true - if len(v.der) == 0 { - child.SetError(errors.New("invalid policy object identifier")) - return - } - child.AddBytes(v.der) - }) - }) - } for _, v := range policyIdentifiers { - if added[v.String()] { - continue - } child.AddASN1(cryptobyte_asn1.SEQUENCE, func(child *cryptobyte.Builder) { child.AddASN1ObjectIdentifier(v) }) @@ -1547,7 +1527,6 @@ var emptyASN1Subject = []byte{0x30, 0} // - PermittedIPRanges // - PermittedURIDomains // - PolicyIdentifiers -// - Policies // - SerialNumber // - SignatureAlgorithm // - Subject @@ -1571,9 +1550,6 @@ var emptyASN1Subject = []byte{0x30, 0} // // If SubjectKeyId from template is empty and the template is a CA, SubjectKeyId // will be generated from the hash of the public key. -// -// If both PolicyIdentifiers and Policies are populated, any OID which appears -// in both slices will only be added to the certificate policies extension once. func CreateCertificate(rand io.Reader, template, parent *Certificate, pub, priv any) ([]byte, error) { key, ok := priv.(crypto.Signer) if !ok { diff --git a/src/crypto/x509/x509_test.go b/src/crypto/x509/x509_test.go index f32c390900..47cddceacf 100644 --- a/src/crypto/x509/x509_test.go +++ b/src/crypto/x509/x509_test.go @@ -3928,25 +3928,14 @@ func TestCertificateOIDPolicies(t *testing.T) { NotBefore: time.Unix(1000, 0), NotAfter: time.Unix(100000, 0), PolicyIdentifiers: []asn1.ObjectIdentifier{[]int{1, 2, 3}}, - Policies: []OID{ - mustNewOIDFromInts(t, []uint64{1, 2, 3}), - mustNewOIDFromInts(t, []uint64{1, 2, 3, 4, 5}), - mustNewOIDFromInts(t, []uint64{1, 2, 3, math.MaxInt32}), - mustNewOIDFromInts(t, []uint64{1, 2, 3, math.MaxUint32, math.MaxUint64}), - }, } var expectPolicyIdentifiers = []asn1.ObjectIdentifier{ []int{1, 2, 3}, - []int{1, 2, 3, 4, 5}, - []int{1, 2, 3, math.MaxInt32}, } var expectPolicies = []OID{ mustNewOIDFromInts(t, []uint64{1, 2, 3}), - mustNewOIDFromInts(t, []uint64{1, 2, 3, 4, 5}), - mustNewOIDFromInts(t, []uint64{1, 2, 3, math.MaxInt32}), - mustNewOIDFromInts(t, []uint64{1, 2, 3, math.MaxUint32, math.MaxUint64}), } certDER, err := CreateCertificate(rand.Reader, &template, &template, rsaPrivateKey.Public(), rsaPrivateKey) @@ -3967,19 +3956,3 @@ func TestCertificateOIDPolicies(t *testing.T) { t.Errorf("cert.Policies = %v, want: %v", cert.Policies, expectPolicies) } } - -func TestInvalidPolicyOID(t *testing.T) { - template := Certificate{ - SerialNumber: big.NewInt(1), - Subject: pkix.Name{CommonName: "Cert"}, - NotBefore: time.Now(), - NotAfter: time.Now().Add(time.Hour), - PolicyIdentifiers: []asn1.ObjectIdentifier{[]int{1, 2, 3}}, - Policies: []OID{OID{}}, - } - _, err := CreateCertificate(rand.Reader, &template, &template, rsaPrivateKey.Public(), rsaPrivateKey) - expected := "invalid policy object identifier" - if err.Error() != expected { - t.Fatalf("CreateCertificate() unexpected error: %v, want: %v", err, expected) - } -} From c80bd631a53762a44d0e0f5bf6fd558a691a2167 Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Tue, 5 Dec 2023 12:36:13 -0500 Subject: [PATCH 169/313] doc/go1.22: document linker flag changes Updates #41004. For #61422. Change-Id: I5ab60d8e9d30986233d7adec400ef059bbe4c1a9 Reviewed-on: https://go-review.googlesource.com/c/go/+/547515 Reviewed-by: Than McIntosh LUCI-TryBot-Result: Go LUCI --- doc/go1.22.html | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 64afa898af..d7e8bbd7fb 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -155,12 +155,22 @@ packages that do not have their own test files. Prior to Go 1.22 a

Linker

-

- TODO: https://go.dev/issue/62577: cmd/link, cmd/go: emit split DWARF on darwin +

+ The linker's -s and -w flags are now behave more + consistently across all platforms. + The -w flag suppresses DWARF debug information generation. + The -s flag suppresses symbol table generation. + The -s flag also implies the -w flag, which can be + negated with -w=0. + That is, -s -w=0 will generate a binary with DWARF + debug information generation but without the symbol table.

-

- TODO: complete this section, or delete if not needed +

+ On ELF platforms, the -B linker flag now accepts a special form: + with -B gobuildid, the linker will generate a GNU + build ID (the ELF NT_GNU_BUILD_ID note) derived from the Go + build ID.

Bootstrap

From 6e33a6376e5bbbfa34c72c34d61abcc3f5891772 Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Mon, 27 Nov 2023 12:24:59 -0500 Subject: [PATCH 170/313] cmd/go: use local go cache for cover_statements script test Use a test-local directory for GOCACHE in "cover_statements" script test, as a workaround for issue 64014. For the portion of this test that verifies that caching works correctly, the cache should theoretically always behave reliably/deterministically, however if other tests are concurrently accessing the cache while this test is running, it can lead to cache lookup failures, which manifest as a flaky failure. To avoid such flakes, use a separate isolated GOCACHE for this test. For #64014. Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest Change-Id: Ia66798215a75b7c41188ed15920c17b73f40152a Reviewed-on: https://go-review.googlesource.com/c/go/+/545235 LUCI-TryBot-Result: Go LUCI Reviewed-by: Bryan Mills --- src/cmd/go/testdata/script/cover_statements.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/cmd/go/testdata/script/cover_statements.txt b/src/cmd/go/testdata/script/cover_statements.txt index 24b5751154..030177cb8b 100644 --- a/src/cmd/go/testdata/script/cover_statements.txt +++ b/src/cmd/go/testdata/script/cover_statements.txt @@ -1,5 +1,13 @@ [short] skip +# Workaround for issue 64014 -- for the portion of this test that +# verifies that caching works correctly, the cache should theoretically +# always behave reliably/deterministically, however if other tests are +# concurrently accessing the cache while this test is running, it can +# lead to cache lookup failures, which manifest as test failures here. +# To avoid such flakes, use a separate isolated GOCACHE for this test. +env GOCACHE=$WORK/cache + # Initial run with simple coverage. go test -cover ./pkg1 ./pkg2 ./pkg3 ./pkg4 [!GOEXPERIMENT:coverageredesign] stdout 'pkg1 \[no test files\]' From 98fd8f5768169c1c9cc9ae20490bd1b63ea55461 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Mon, 4 Dec 2023 14:28:30 -0500 Subject: [PATCH 171/313] runtime: rename GODEBUG=profileruntimelocks to runtimecontentionstacks profileruntimelocks is new in CL 544195, but the name is deceptive. Even with profileruntimelocks=0, runtime-internal locks are still profiled. The actual difference is that call stacks are not collected. Instead all contention is reported at runtime._LostContendedLock. Rename this setting to runtimecontentionstacks to make its name more aligned with its behavior. In addition, for this release the default is profileruntimelocks=0, meaning that users are fairly likely to encounter runtime._LostContendedLock. Rename it to runtime._LostContendedRuntimeLock in an attempt to make it more intuitive that these are runtime locks, not locks in application code. For #57071. Change-Id: I38aac28b2c0852db643d53b1eab3f3bc42a43393 Reviewed-on: https://go-review.googlesource.com/c/go/+/547055 Reviewed-by: Michael Knyszek Auto-Submit: Michael Pratt LUCI-TryBot-Result: Go LUCI Reviewed-by: Rhys Hiltner --- src/runtime/extern.go | 15 ++++++------ src/runtime/metrics_test.go | 4 ++-- src/runtime/mprof.go | 10 ++++---- src/runtime/proc.go | 2 +- src/runtime/runtime1.go | 46 ++++++++++++++++++------------------- 5 files changed, 39 insertions(+), 38 deletions(-) diff --git a/src/runtime/extern.go b/src/runtime/extern.go index 03050df766..b7bf0a505b 100644 --- a/src/runtime/extern.go +++ b/src/runtime/extern.go @@ -152,13 +152,14 @@ It is a comma-separated list of name=val pairs setting these named variables: risk in that scenario. Currently not supported on Windows, plan9 or js/wasm. Setting this option for some applications can produce large traces, so use with care. - profileruntimelocks: setting profileruntimelocks=1 includes call stacks related to - contention on runtime-internal locks in the "mutex" profile, subject to the - MutexProfileFraction setting. The call stacks will correspond to the unlock call that - released the lock. But instead of the value corresponding to the amount of contention that - call stack caused, it corresponds to the amount of time the caller of unlock had to wait - in its original call to lock. A future release is expected to align those and remove this - setting. + runtimecontentionstacks: setting runtimecontentionstacks=1 enables inclusion of call stacks + related to contention on runtime-internal locks in the "mutex" profile, subject to the + MutexProfileFraction setting. When runtimecontentionstacks=0, contention on + runtime-internal locks will report as "runtime._LostContendedRuntimeLock". When + runtimecontentionstacks=1, the call stacks will correspond to the unlock call that released + the lock. But instead of the value corresponding to the amount of contention that call + stack caused, it corresponds to the amount of time the caller of unlock had to wait in its + original call to lock. A future release is expected to align those and remove this setting. invalidptr: invalidptr=1 (the default) causes the garbage collector and stack copier to crash the program if an invalid pointer value (for example, 1) diff --git a/src/runtime/metrics_test.go b/src/runtime/metrics_test.go index 7074abfd69..fc0321e4c5 100644 --- a/src/runtime/metrics_test.go +++ b/src/runtime/metrics_test.go @@ -956,12 +956,12 @@ func TestRuntimeLockMetricsAndProfile(t *testing.T) { { before := os.Getenv("GODEBUG") for _, s := range strings.Split(before, ",") { - if strings.HasPrefix(s, "profileruntimelocks=") { + if strings.HasPrefix(s, "runtimecontentionstacks=") { t.Logf("GODEBUG includes explicit setting %q", s) } } defer func() { os.Setenv("GODEBUG", before) }() - os.Setenv("GODEBUG", fmt.Sprintf("%s,profileruntimelocks=1", before)) + os.Setenv("GODEBUG", fmt.Sprintf("%s,runtimecontentionstacks=1", before)) } t.Logf("NumCPU %d", runtime.NumCPU()) diff --git a/src/runtime/mprof.go b/src/runtime/mprof.go index aeb03985cc..e5c11c58c9 100644 --- a/src/runtime/mprof.go +++ b/src/runtime/mprof.go @@ -552,7 +552,7 @@ func saveblockevent(cycles, rate int64, skip int, which bucketType) { // previous lock call took (like the user-space "block" profile). // // Thus, reporting the call stacks of runtime-internal lock contention is -// guarded by GODEBUG for now. Set GODEBUG=profileruntimelocks=1 to enable. +// guarded by GODEBUG for now. Set GODEBUG=runtimecontentionstacks=1 to enable. // // TODO(rhysh): plumb through the delay duration, remove GODEBUG, update comment // @@ -644,7 +644,7 @@ func (prof *mLockProfile) recordLock(cycles int64, l *mutex) { if prev := prof.cycles; prev > 0 { // We can only store one call stack for runtime-internal lock contention // on this M, and we've already got one. Decide which should stay, and - // add the other to the report for runtime._LostContendedLock. + // add the other to the report for runtime._LostContendedRuntimeLock. prevScore := uint64(cheaprand64()) % uint64(prev) thisScore := uint64(cheaprand64()) % uint64(cycles) if prevScore > thisScore { @@ -690,8 +690,8 @@ func (prof *mLockProfile) captureStack() { } prof.pending = 0 - if debug.profileruntimelocks.Load() == 0 { - prof.stack[0] = abi.FuncPCABIInternal(_LostContendedLock) + sys.PCQuantum + if debug.runtimeContentionStacks.Load() == 0 { + prof.stack[0] = abi.FuncPCABIInternal(_LostContendedRuntimeLock) + sys.PCQuantum prof.stack[1] = 0 return } @@ -733,7 +733,7 @@ func (prof *mLockProfile) store() { saveBlockEventStack(cycles, rate, prof.stack[:nstk], mutexProfile) if lost > 0 { lostStk := [...]uintptr{ - abi.FuncPCABIInternal(_LostContendedLock) + sys.PCQuantum, + abi.FuncPCABIInternal(_LostContendedRuntimeLock) + sys.PCQuantum, } saveBlockEventStack(lost, rate, lostStk[:], mutexProfile) } diff --git a/src/runtime/proc.go b/src/runtime/proc.go index 7bb8b81c26..661dc0f1ca 100644 --- a/src/runtime/proc.go +++ b/src/runtime/proc.go @@ -5279,7 +5279,7 @@ func _ExternalCode() { _ExternalCode() } func _LostExternalCode() { _LostExternalCode() } func _GC() { _GC() } func _LostSIGPROFDuringAtomic64() { _LostSIGPROFDuringAtomic64() } -func _LostContendedLock() { _LostContendedLock() } +func _LostContendedRuntimeLock() { _LostContendedRuntimeLock() } func _VDSO() { _VDSO() } // Called if we receive a SIGPROF signal. diff --git a/src/runtime/runtime1.go b/src/runtime/runtime1.go index 087d5ebce7..6f4a89df2b 100644 --- a/src/runtime/runtime1.go +++ b/src/runtime/runtime1.go @@ -307,28 +307,28 @@ type dbgVar struct { // existing int var for that value, which may // already have an initial value. var debug struct { - cgocheck int32 - clobberfree int32 - disablethp int32 - dontfreezetheworld int32 - efence int32 - gccheckmark int32 - gcpacertrace int32 - gcshrinkstackoff int32 - gcstoptheworld int32 - gctrace int32 - invalidptr int32 - madvdontneed int32 // for Linux; issue 28466 - profileruntimelocks atomic.Int32 - scavtrace int32 - scheddetail int32 - schedtrace int32 - tracebackancestors int32 - asyncpreemptoff int32 - harddecommit int32 - adaptivestackstart int32 - tracefpunwindoff int32 - traceadvanceperiod int32 + cgocheck int32 + clobberfree int32 + disablethp int32 + dontfreezetheworld int32 + efence int32 + gccheckmark int32 + gcpacertrace int32 + gcshrinkstackoff int32 + gcstoptheworld int32 + gctrace int32 + invalidptr int32 + madvdontneed int32 // for Linux; issue 28466 + runtimeContentionStacks atomic.Int32 + scavtrace int32 + scheddetail int32 + schedtrace int32 + tracebackancestors int32 + asyncpreemptoff int32 + harddecommit int32 + adaptivestackstart int32 + tracefpunwindoff int32 + traceadvanceperiod int32 // debug.malloc is used as a combined debug check // in the malloc function and should be set @@ -355,7 +355,7 @@ var dbgvars = []*dbgVar{ {name: "gctrace", value: &debug.gctrace}, {name: "invalidptr", value: &debug.invalidptr}, {name: "madvdontneed", value: &debug.madvdontneed}, - {name: "profileruntimelocks", atomic: &debug.profileruntimelocks}, + {name: "runtimecontentionstacks", atomic: &debug.runtimeContentionStacks}, {name: "sbrk", value: &debug.sbrk}, {name: "scavtrace", value: &debug.scavtrace}, {name: "scheddetail", value: &debug.scheddetail}, From 3f2bf706f7f6c260cb83410131d3c2d508e05a94 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Mon, 4 Dec 2023 15:12:25 -0500 Subject: [PATCH 172/313] runtime/metrics: document runtime-internal locks in /sync/mutex/wait/total:seconds For #57071. Change-Id: I7ce6c35bed95a6ea3cdc17007f861c5dd82404d2 Reviewed-on: https://go-review.googlesource.com/c/go/+/547056 Auto-Submit: Michael Pratt Reviewed-by: Rhys Hiltner Reviewed-by: Michael Knyszek LUCI-TryBot-Result: Go LUCI --- src/runtime/metrics/description.go | 2 +- src/runtime/metrics/doc.go | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/runtime/metrics/description.go b/src/runtime/metrics/description.go index abe7440f10..19a7dbf07a 100644 --- a/src/runtime/metrics/description.go +++ b/src/runtime/metrics/description.go @@ -441,7 +441,7 @@ var allDesc = []Description{ }, { Name: "/sync/mutex/wait/total:seconds", - Description: "Approximate cumulative time goroutines have spent blocked on a sync.Mutex or sync.RWMutex. This metric is useful for identifying global changes in lock contention. Collect a mutex or block profile using the runtime/pprof package for more detailed contention data.", + Description: "Approximate cumulative time goroutines have spent blocked on a sync.Mutex, sync.RWMutex, or runtime-internal lock. This metric is useful for identifying global changes in lock contention. Collect a mutex or block profile using the runtime/pprof package for more detailed contention data.", Kind: KindFloat64, Cumulative: true, }, diff --git a/src/runtime/metrics/doc.go b/src/runtime/metrics/doc.go index 8df475666e..ba153174a6 100644 --- a/src/runtime/metrics/doc.go +++ b/src/runtime/metrics/doc.go @@ -447,10 +447,10 @@ Below is the full list of supported metrics, ordered lexicographically. monotonically. /sync/mutex/wait/total:seconds - Approximate cumulative time goroutines have spent blocked - on a sync.Mutex or sync.RWMutex. This metric is useful for - identifying global changes in lock contention. Collect a mutex - or block profile using the runtime/pprof package for more - detailed contention data. + Approximate cumulative time goroutines have spent blocked on a + sync.Mutex, sync.RWMutex, or runtime-internal lock. This metric + is useful for identifying global changes in lock contention. + Collect a mutex or block profile using the runtime/pprof package + for more detailed contention data. */ package metrics From 7b5a3733fce46aa44449c5ba28876f5a1e630650 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Mon, 4 Dec 2023 18:29:35 -0500 Subject: [PATCH 173/313] cmd/go/internal/modfetch/codehost: add new git tags before statLocal instead of after gitRepo.statLocal reports tag and version information. If we are statting a hash that corresponds to a tag, we need to add that tag before calling statLocal so that it can be included in that information. Fixes #53955. Updates #56881. Change-Id: I69a71428e6ed9096d4cb8ed1bb79531415ff06c1 Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest,gotip-windows-amd64-longtest Reviewed-on: https://go-review.googlesource.com/c/go/+/547155 Auto-Submit: Bryan Mills LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Matloob --- src/cmd/go/internal/modfetch/codehost/git.go | 24 ++++--- src/cmd/go/testdata/script/get_issue53955.txt | 67 +++++++++++++++++++ 2 files changed, 82 insertions(+), 9 deletions(-) create mode 100644 src/cmd/go/testdata/script/get_issue53955.txt diff --git a/src/cmd/go/internal/modfetch/codehost/git.go b/src/cmd/go/internal/modfetch/codehost/git.go index d1a18a8d58..294e50ff12 100644 --- a/src/cmd/go/internal/modfetch/codehost/git.go +++ b/src/cmd/go/internal/modfetch/codehost/git.go @@ -18,6 +18,7 @@ import ( "os/exec" "path/filepath" "runtime" + "slices" "sort" "strconv" "strings" @@ -154,7 +155,7 @@ type gitRepo struct { refsErr error localTagsOnce sync.Once - localTags map[string]bool + localTags sync.Map // map[string]bool } const ( @@ -166,7 +167,6 @@ const ( // loadLocalTags loads tag references from the local git cache // into the map r.localTags. -// Should only be called as r.localTagsOnce.Do(r.loadLocalTags). func (r *gitRepo) loadLocalTags(ctx context.Context) { // The git protocol sends all known refs and ls-remote filters them on the client side, // so we might as well record both heads and tags in one shot. @@ -176,10 +176,9 @@ func (r *gitRepo) loadLocalTags(ctx context.Context) { return } - r.localTags = make(map[string]bool) for _, line := range strings.Split(string(out), "\n") { if line != "" { - r.localTags[line] = true + r.localTags.Store(line, true) } } } @@ -430,7 +429,7 @@ func (r *gitRepo) stat(ctx context.Context, rev string) (info *RevInfo, err erro // Maybe rev is a tag we already have locally. // (Note that we're excluding branches, which can be stale.) r.localTagsOnce.Do(func() { r.loadLocalTags(ctx) }) - if r.localTags[rev] { + if _, ok := r.localTags.Load(rev); ok { return r.statLocal(ctx, rev, "refs/tags/"+rev) } @@ -506,11 +505,18 @@ func (r *gitRepo) stat(ctx context.Context, rev string) (info *RevInfo, err erro // Either way, try a local stat before falling back to network I/O. if !didStatLocal { if info, err := r.statLocal(ctx, rev, hash); err == nil { - if after, found := strings.CutPrefix(ref, "refs/tags/"); found { - // Make sure tag exists, so it will be in localTags next time the go command is run. - Run(ctx, r.dir, "git", "tag", after, hash) + tag, fromTag := strings.CutPrefix(ref, "refs/tags/") + if fromTag && !slices.Contains(info.Tags, tag) { + // The local repo includes the commit hash we want, but it is missing + // the corresponding tag. Add that tag and try again. + _, err := Run(ctx, r.dir, "git", "tag", tag, hash) + if err != nil { + return nil, err + } + r.localTags.Store(tag, true) + return r.statLocal(ctx, rev, ref) } - return info, nil + return info, err } } diff --git a/src/cmd/go/testdata/script/get_issue53955.txt b/src/cmd/go/testdata/script/get_issue53955.txt new file mode 100644 index 0000000000..c6d45d5c50 --- /dev/null +++ b/src/cmd/go/testdata/script/get_issue53955.txt @@ -0,0 +1,67 @@ +# Regression test for https://go.dev/issue/53955. +# New remote tags were erroneously added to the local clone of a repo +# only *after* extracting version information for a locally-cached commit, +# causing the version information to have incomplete Tags and Version fields. + +[short] skip 'constructs a local git repo' +[!git] skip +[!net:github.com] skip 'does not actually use github.com because of insteadOf, but silence network check just in case' + +env GIT_CONFIG_GLOBAL=$WORK/.gitconfig +env GIT_ALLOW_PROTOCOL=file +env GOPRIVATE=github.com/golang/issue53955 + +[!GOOS:windows] exec git config --global 'url.file://'$WORK'/repo.insteadOf' 'https://github.com/golang/issue53955' +[GOOS:windows] exec git config --global 'url.file:///'$WORK'/repo.insteadOf' 'https://github.com/golang/issue53955' + +cd $WORK/repo + +env GIT_AUTHOR_NAME='Go Gopher' +env GIT_AUTHOR_EMAIL='gopher@golang.org' +env GIT_COMMITTER_NAME=$GIT_AUTHOR_NAME +env GIT_COMMITTER_EMAIL=$GIT_AUTHOR_EMAIL + +exec git init + +env GIT_COMMITTER_DATE=2022-07-19T11:07:00-04:00 +env GIT_AUTHOR_DATE=2022-07-19T11:07:00-04:00 +exec git add go.mod issue53955.go +exec git commit -m 'initial commit' +exec git branch -m main +exec git tag v1.0.9 + +env GIT_COMMITTER_DATE=2022-07-19T11:07:01-04:00 +env GIT_AUTHOR_DATE=2022-07-19T11:07:01-04:00 +exec git add extra.go +exec git commit -m 'next commit' +exec git show-ref --tags --heads +cmp stdout $WORK/.git-refs-1 + +cd $WORK/m +go get -x github.com/golang/issue53955@2cb3d49f +stderr '^go: added github.com/golang/issue53955 v1.0.10-0.20220719150701-2cb3d49f8874$' + +cd $WORK/repo +exec git tag v1.0.10 + +cd $WORK/m +go get -x github.com/golang/issue53955@v1.0.10 +! stderr 'v1\.0\.10 is not a tag' +stderr '^go: upgraded github.com/golang/issue53955 v.* => v1\.0\.10$' + +-- $WORK/repo/go.mod -- +module github.com/golang/issue53955 + +go 1.18 +-- $WORK/repo/issue53955.go -- +package issue53955 +-- $WORK/repo/extra.go -- +package issue53955 +-- $WORK/.git-refs-1 -- +2cb3d49f8874b9362ed0ddd2a6512e4108bbf6b1 refs/heads/main +050526ebf5883191e990529eb3cc9345abaf838c refs/tags/v1.0.9 +-- $WORK/m/go.mod -- +module m + +go 1.18 +-- $WORK/.gitconfig -- From 459cd35ec092fdb48e1825ccd01fb630a77474bf Mon Sep 17 00:00:00 2001 From: cui fliter Date: Sat, 7 Oct 2023 16:13:04 +0800 Subject: [PATCH 174/313] doc/go1.22: mention new #vet analyzer Change-Id: Ib135101bc8adbdb158c5e98bcca14e13d7ac963b Reviewed-on: https://go-review.googlesource.com/c/go/+/533555 TryBot-Result: Gopher Robot Reviewed-by: Alan Donovan LUCI-TryBot-Result: Go LUCI Run-TryBot: Tim King Reviewed-by: Tim King --- doc/go1.22.html | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/doc/go1.22.html b/doc/go1.22.html index d7e8bbd7fb..2950a5b085 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -116,6 +116,47 @@ packages that do not have their own test files. Prior to Go 1.22 a

+

Vet

+ +

New warnings for missing values after append

+ +

+ The vet tool now reports calls to + append that pass + no values to be appended to the slice, such as slice = append(slice). + Such a statement has no effect, and experience has shown that is nearly always a mistake. +

+ +

New warnings for deferring time.Since

+ +

+ The vet tool now reports a non-deferred call to + time.Since(t) within a defer statement. + This is equivalent to calling time.Now().Sub(t) before the defer statement, + not when the deferred function is called. In nearly all cases, the correct code + requires deferring the time.Since call. For example: +

+ +
+t := time.Now()
+defer log.Println(time.Since(t)) // non-deferred call to time.Since
+tmp := time.Since(t); defer log.Println(tmp) // equivalent to the previous defer
+
+defer func() {
+  log.Println(time.Since(t)) // a correctly deferred call to time.Since
+}()
+
+ +

New warnings for mismatched key-value pairs in log/slog calls

+ +

+ The vet tool now reports invalid arguments in calls to functions and methods + in the structured logging package, log/slog, + that accept alternating key/value pairs. + It reports calls where an argument in a key position is neither a + string nor a slog.Attr, and where a final key is missing its value. +

+

Runtime

From a9c9cc07ac0d3dc73865a57e6ce45c22ada3b5c9 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Mon, 20 Nov 2023 11:22:48 +1100 Subject: [PATCH 175/313] iter, runtime: add coroutine support The exported API is only available with GOEXPERIMENT=rangefunc. This will let Go 1.22 users who want to experiment with rangefuncs access an efficient implementation of iter.Pull and iter.Pull2. For #61897. Change-Id: I6ef5fa8f117567efe4029b7b8b0f4d9b85697fb7 Reviewed-on: https://go-review.googlesource.com/c/go/+/543319 Reviewed-by: Michael Knyszek LUCI-TryBot-Result: Go LUCI --- src/cmd/dist/test.go | 11 ++ src/cmd/internal/objabi/funcid.go | 1 + src/go/build/deps_test.go | 3 + src/internal/abi/symtab.go | 1 + src/iter/iter.go | 161 +++++++++++++++++++++++++++++ src/iter/pull_test.go | 118 +++++++++++++++++++++ src/runtime/coro.go | 165 ++++++++++++++++++++++++++++++ src/runtime/proc.go | 8 +- src/runtime/runtime2.go | 5 + src/runtime/sizeof_test.go | 6 +- src/runtime/traceback.go | 2 +- 11 files changed, 475 insertions(+), 6 deletions(-) create mode 100644 src/iter/iter.go create mode 100644 src/iter/pull_test.go create mode 100644 src/runtime/coro.go diff --git a/src/cmd/dist/test.go b/src/cmd/dist/test.go index 4450129e08..5e62bbf4c2 100644 --- a/src/cmd/dist/test.go +++ b/src/cmd/dist/test.go @@ -719,6 +719,17 @@ func (t *tester) registerTests() { }) } + // GOEXPERIMENT=rangefunc tests + if !t.compileOnly { + t.registerTest("GOEXPERIMENT=rangefunc go test iter", + &goTest{ + variant: "iter", + short: t.short, + env: []string{"GOEXPERIMENT=rangefunc"}, + pkg: "iter", + }) + } + // GODEBUG=gcstoptheworld=2 tests. We only run these in long-test // mode (with GO_TEST_SHORT=0) because this is just testing a // non-critical debug setting. diff --git a/src/cmd/internal/objabi/funcid.go b/src/cmd/internal/objabi/funcid.go index 007107e778..d9b47f1ec9 100644 --- a/src/cmd/internal/objabi/funcid.go +++ b/src/cmd/internal/objabi/funcid.go @@ -14,6 +14,7 @@ var funcIDs = map[string]abi.FuncID{ "asmcgocall": abi.FuncID_asmcgocall, "asyncPreempt": abi.FuncID_asyncPreempt, "cgocallback": abi.FuncID_cgocallback, + "corostart": abi.FuncID_corostart, "debugCallV2": abi.FuncID_debugCallV2, "gcBgMarkWorker": abi.FuncID_gcBgMarkWorker, "rt0_go": abi.FuncID_rt0_go, diff --git a/src/go/build/deps_test.go b/src/go/build/deps_test.go index 1b93e78c70..7ce8d346b4 100644 --- a/src/go/build/deps_test.go +++ b/src/go/build/deps_test.go @@ -83,6 +83,9 @@ var depsRules = ` < internal/oserror, math/bits < RUNTIME; + internal/race + < iter; + # slices depends on unsafe for overlapping check, cmp for comparison # semantics, and math/bits for # calculating bitlength of numbers. unsafe, cmp, math/bits diff --git a/src/internal/abi/symtab.go b/src/internal/abi/symtab.go index bf6ea82f1c..ce1b650155 100644 --- a/src/internal/abi/symtab.go +++ b/src/internal/abi/symtab.go @@ -44,6 +44,7 @@ const ( FuncID_asmcgocall FuncID_asyncPreempt FuncID_cgocallback + FuncID_corostart FuncID_debugCallV2 FuncID_gcBgMarkWorker FuncID_goexit diff --git a/src/iter/iter.go b/src/iter/iter.go new file mode 100644 index 0000000000..240df00f7f --- /dev/null +++ b/src/iter/iter.go @@ -0,0 +1,161 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build goexperiment.rangefunc + +// Package iter provides basic definitions and operations +// related to iteration in Go. +// +// This package is experimental and can only be imported +// when building with GOEXPERIMENT=rangefunc. +package iter + +import ( + "internal/race" + "unsafe" + _ "unsafe" +) // for linkname + +// Seq is an iterator over sequences of individual values. +// When called as seq(yield), seq calls yield(v) for each value v in the sequence, +// stopping early if yield returns false. +type Seq[V any] func(yield func(V) bool) + +// Seq2 is an iterator over sequences of pairs of values, most commonly key-value pairs. +// When called as seq(yield), seq calls yield(k, v) for each pair (k, v) in the sequence, +// stopping early if yield returns false. +type Seq2[K, V any] func(yield func(K, V) bool) + +type coro struct{} + +//go:linkname newcoro runtime.newcoro +func newcoro(func(*coro)) *coro + +//go:linkname coroswitch runtime.coroswitch +func coroswitch(*coro) + +// Pull converts the “push-style” iterator sequence seq +// into a “pull-style” iterator accessed by the two functions +// next and stop. +// +// Next returns the next value in the sequence +// and a boolean indicating whether the value is valid. +// When the sequence is over, next returns the zero V and false. +// It is valid to call next after reaching the end of the sequence +// or after calling stop. These calls will continue +// to return the zero V and false. +// +// Stop ends the iteration. It must be called when the caller is +// no longer interested in next values and next has not yet +// signaled that the sequence is over (with a false boolean return). +// It is valid to call stop multiple times and when next has +// already returned false. +// +// It is an error to call next or stop from multiple goroutines +// simultaneously. +func Pull[V any](seq Seq[V]) (next func() (V, bool), stop func()) { + var ( + v V + ok bool + done bool + racer int + ) + c := newcoro(func(c *coro) { + race.Acquire(unsafe.Pointer(&racer)) + yield := func(v1 V) bool { + if done { + return false + } + v, ok = v1, true + race.Release(unsafe.Pointer(&racer)) + coroswitch(c) + race.Acquire(unsafe.Pointer(&racer)) + return !done + } + seq(yield) + var v0 V + v, ok = v0, false + done = true + race.Release(unsafe.Pointer(&racer)) + }) + next = func() (v1 V, ok1 bool) { + race.Write(unsafe.Pointer(&racer)) // detect races + if done { + return + } + race.Release(unsafe.Pointer(&racer)) + coroswitch(c) + race.Acquire(unsafe.Pointer(&racer)) + return v, ok + } + stop = func() { + race.Write(unsafe.Pointer(&racer)) // detect races + if !done { + done = true + race.Release(unsafe.Pointer(&racer)) + coroswitch(c) + race.Acquire(unsafe.Pointer(&racer)) + } + } + return next, stop +} + +// Pull2 converts the “push-style” iterator sequence seq +// into a “pull-style” iterator accessed by the two functions +// next and stop. +// +// Next returns the next pair in the sequence +// and a boolean indicating whether the pair is valid. +// When the sequence is over, next returns a pair of zero values and false. +// It is valid to call next after reaching the end of the sequence +// or after calling stop. These calls will continue +// to return a pair of zero values and false. +// +// Stop ends the iteration. It must be called when the caller is +// no longer interested in next values and next has not yet +// signaled that the sequence is over (with a false boolean return). +// It is valid to call stop multiple times and when next has +// already returned false. +// +// It is an error to call next or stop from multiple goroutines +// simultaneously. +func Pull2[K, V any](seq Seq2[K, V]) (next func() (K, V, bool), stop func()) { + var ( + k K + v V + ok bool + done bool + ) + c := newcoro(func(c *coro) { + yield := func(k1 K, v1 V) bool { + if done { + return false + } + k, v, ok = k1, v1, true + coroswitch(c) + return !done + } + seq(yield) + var k0 K + var v0 V + k, v, ok = k0, v0, false + done = true + }) + next = func() (k1 K, v1 V, ok1 bool) { + race.Write(unsafe.Pointer(&c)) // detect races + if done { + return + } + coroswitch(c) + return k, v, ok + } + stop = func() { + race.Write(unsafe.Pointer(&c)) // detect races + if !done { + done = true + coroswitch(c) + } + } + return next, stop +} diff --git a/src/iter/pull_test.go b/src/iter/pull_test.go new file mode 100644 index 0000000000..38e0ee993a --- /dev/null +++ b/src/iter/pull_test.go @@ -0,0 +1,118 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build goexperiment.rangefunc + +package iter + +import ( + "fmt" + "runtime" + "testing" +) + +func count(n int) Seq[int] { + return func(yield func(int) bool) { + for i := range n { + if !yield(i) { + break + } + } + } +} + +func squares(n int) Seq2[int, int64] { + return func(yield func(int, int64) bool) { + for i := range n { + if !yield(i, int64(i)*int64(i)) { + break + } + } + } +} + +func TestPull(t *testing.T) { + + for end := 0; end <= 3; end++ { + t.Run(fmt.Sprint(end), func(t *testing.T) { + ng := runtime.NumGoroutine() + wantNG := func(want int) { + if xg := runtime.NumGoroutine() - ng; xg != want { + t.Helper() + t.Errorf("have %d extra goroutines, want %d", xg, want) + } + } + wantNG(0) + next, stop := Pull(count(3)) + wantNG(1) + for i := range end { + v, ok := next() + if v != i || ok != true { + t.Fatalf("next() = %d, %v, want %d, %v", v, ok, i, true) + } + wantNG(1) + } + wantNG(1) + if end < 3 { + stop() + wantNG(0) + } + for range 2 { + v, ok := next() + if v != 0 || ok != false { + t.Fatalf("next() = %d, %v, want %d, %v", v, ok, 0, false) + } + wantNG(0) + } + wantNG(0) + + stop() + stop() + stop() + wantNG(0) + }) + } +} + +func TestPull2(t *testing.T) { + for end := 0; end <= 3; end++ { + t.Run(fmt.Sprint(end), func(t *testing.T) { + ng := runtime.NumGoroutine() + wantNG := func(want int) { + if xg := runtime.NumGoroutine() - ng; xg != want { + t.Helper() + t.Errorf("have %d extra goroutines, want %d", xg, want) + } + } + wantNG(0) + next, stop := Pull2(squares(3)) + wantNG(1) + for i := range end { + k, v, ok := next() + if k != i || v != int64(i*i) || ok != true { + t.Fatalf("next() = %d, %d, %v, want %d, %d, %v", k, v, ok, i, i*i, true) + } + wantNG(1) + } + wantNG(1) + if end < 3 { + stop() + wantNG(0) + } + for range 2 { + k, v, ok := next() + if v != 0 || ok != false { + t.Fatalf("next() = %d, %d, %v, want %d, %d, %v", k, v, ok, 0, 0, false) + } + wantNG(0) + } + wantNG(0) + + stop() + stop() + stop() + wantNG(0) + }) + } +} diff --git a/src/runtime/coro.go b/src/runtime/coro.go new file mode 100644 index 0000000000..0d6666e343 --- /dev/null +++ b/src/runtime/coro.go @@ -0,0 +1,165 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package runtime + +import "unsafe" + +// A coro represents extra concurrency without extra parallelism, +// as would be needed for a coroutine implementation. +// The coro does not represent a specific coroutine, only the ability +// to do coroutine-style control transfers. +// It can be thought of as like a special channel that always has +// a goroutine blocked on it. If another goroutine calls coroswitch(c), +// the caller becomes the goroutine blocked in c, and the goroutine +// formerly blocked in c starts running. +// These switches continue until a call to coroexit(c), +// which ends the use of the coro by releasing the blocked +// goroutine in c and exiting the current goroutine. +// +// Coros are heap allocated and garbage collected, so that user code +// can hold a pointer to a coro without causing potential dangling +// pointer errors. +type coro struct { + gp guintptr + f func(*coro) +} + +//go:linkname newcoro + +// newcoro creates a new coro containing a +// goroutine blocked waiting to run f +// and returns that coro. +func newcoro(f func(*coro)) *coro { + c := new(coro) + c.f = f + pc := getcallerpc() + gp := getg() + systemstack(func() { + start := corostart + startfv := *(**funcval)(unsafe.Pointer(&start)) + gp = newproc1(startfv, gp, pc) + }) + gp.coroarg = c + gp.waitreason = waitReasonCoroutine + casgstatus(gp, _Grunnable, _Gwaiting) + c.gp.set(gp) + return c +} + +//go:linkname corostart + +// corostart is the entry func for a new coroutine. +// It runs the coroutine user function f passed to corostart +// and then calls coroexit to remove the extra concurrency. +func corostart() { + gp := getg() + c := gp.coroarg + gp.coroarg = nil + + c.f(c) + coroexit(c) +} + +// coroexit is like coroswitch but closes the coro +// and exits the current goroutine +func coroexit(c *coro) { + gp := getg() + gp.coroarg = c + gp.coroexit = true + mcall(coroswitch_m) +} + +//go:linkname coroswitch + +// coroswitch switches to the goroutine blocked on c +// and then blocks the current goroutine on c. +func coroswitch(c *coro) { + gp := getg() + gp.coroarg = c + mcall(coroswitch_m) +} + +// coroswitch_m is the implementation of coroswitch +// that runs on the m stack. +// +// Note: Coroutine switches are expected to happen at +// an order of magnitude (or more) higher frequency +// than regular goroutine switches, so this path is heavily +// optimized to remove unnecessary work. +// The fast path here is three CAS: the one at the top on gp.atomicstatus, +// the one in the middle to choose the next g, +// and the one at the bottom on gnext.atomicstatus. +// It is important not to add more atomic operations or other +// expensive operations to the fast path. +func coroswitch_m(gp *g) { + // TODO(rsc,mknyszek): add tracing support in a lightweight manner. + // Probably the tracer will need a global bool (set and cleared during STW) + // that this code can check to decide whether to use trace.gen.Load(); + // we do not want to do the atomic load all the time, especially when + // tracer use is relatively rare. + c := gp.coroarg + gp.coroarg = nil + exit := gp.coroexit + gp.coroexit = false + mp := gp.m + + if exit { + gdestroy(gp) + gp = nil + } else { + // If we can CAS ourselves directly from running to waiting, so do, + // keeping the control transfer as lightweight as possible. + gp.waitreason = waitReasonCoroutine + if !gp.atomicstatus.CompareAndSwap(_Grunning, _Gwaiting) { + // The CAS failed: use casgstatus, which will take care of + // coordinating with the garbage collector about the state change. + casgstatus(gp, _Grunning, _Gwaiting) + } + + // Clear gp.m. + setMNoWB(&gp.m, nil) + } + + // The goroutine stored in c is the one to run next. + // Swap it with ourselves. + var gnext *g + for { + // Note: this is a racy load, but it will eventually + // get the right value, and if it gets the wrong value, + // the c.gp.cas will fail, so no harm done other than + // a wasted loop iteration. + // The cas will also sync c.gp's + // memory enough that the next iteration of the racy load + // should see the correct value. + // We are avoiding the atomic load to keep this path + // as lightweight as absolutely possible. + // (The atomic load is free on x86 but not free elsewhere.) + next := c.gp + if next.ptr() == nil { + throw("coroswitch on exited coro") + } + var self guintptr + self.set(gp) + if c.gp.cas(next, self) { + gnext = next.ptr() + break + } + } + + // Start running next, without heavy scheduling machinery. + // Set mp.curg and gnext.m and then update scheduling state + // directly if possible. + setGNoWB(&mp.curg, gnext) + setMNoWB(&gnext.m, mp) + if !gnext.atomicstatus.CompareAndSwap(_Gwaiting, _Grunning) { + // The CAS failed: use casgstatus, which will take care of + // coordinating with the garbage collector about the state change. + casgstatus(gnext, _Gwaiting, _Grunnable) + casgstatus(gnext, _Grunnable, _Grunning) + } + + // Switch to gnext. Does not return. + gogo(&gnext.sched) +} diff --git a/src/runtime/proc.go b/src/runtime/proc.go index 661dc0f1ca..aae30dc2a8 100644 --- a/src/runtime/proc.go +++ b/src/runtime/proc.go @@ -4175,6 +4175,11 @@ func goexit1() { // goexit continuation on g0. func goexit0(gp *g) { + gdestroy(gp) + schedule() +} + +func gdestroy(gp *g) { mp := getg().m pp := mp.p.ptr() @@ -4211,7 +4216,7 @@ func goexit0(gp *g) { if GOARCH == "wasm" { // no threads yet on wasm gfput(pp, gp) - schedule() // never returns + return } if mp.lockedInt != 0 { @@ -4234,7 +4239,6 @@ func goexit0(gp *g) { mp.lockedExt = 0 } } - schedule() } // save updates getg().sched to refer to pc and sp so that a following diff --git a/src/runtime/runtime2.go b/src/runtime/runtime2.go index e64be992b0..2d3fd30e63 100644 --- a/src/runtime/runtime2.go +++ b/src/runtime/runtime2.go @@ -483,6 +483,7 @@ type g struct { // inMarkAssist indicates whether the goroutine is in mark assist. // Used by the execution tracer. inMarkAssist bool + coroexit bool // argument to coroswitch_m raceignore int8 // ignore race detection events nocgocallback bool // whether disable callback from C @@ -507,6 +508,8 @@ type g struct { timer *timer // cached timer for time.Sleep selectDone atomic.Uint32 // are we participating in a select and did someone win the race? + coroarg *coro // argument during coroutine transfers + // goroutineProfiled indicates the status of this goroutine's stack for the // current in-progress goroutine profile goroutineProfiled goroutineProfileStateHolder @@ -1124,6 +1127,7 @@ const ( waitReasonFlushProcCaches // "flushing proc caches" waitReasonTraceGoroutineStatus // "trace goroutine status" waitReasonTraceProcStatus // "trace proc status" + waitReasonCoroutine // "coroutine" ) var waitReasonStrings = [...]string{ @@ -1162,6 +1166,7 @@ var waitReasonStrings = [...]string{ waitReasonFlushProcCaches: "flushing proc caches", waitReasonTraceGoroutineStatus: "trace goroutine status", waitReasonTraceProcStatus: "trace proc status", + waitReasonCoroutine: "coroutine", } func (w waitReason) String() string { diff --git a/src/runtime/sizeof_test.go b/src/runtime/sizeof_test.go index ccc0864ca9..aa8caaadda 100644 --- a/src/runtime/sizeof_test.go +++ b/src/runtime/sizeof_test.go @@ -17,9 +17,9 @@ import ( func TestSizeof(t *testing.T) { const _64bit = unsafe.Sizeof(uintptr(0)) == 8 - g32bit := uintptr(252) + g32bit := uintptr(256) if goexperiment.ExecTracer2 { - g32bit = uintptr(256) + g32bit = uintptr(260) } var tests = []struct { @@ -27,7 +27,7 @@ func TestSizeof(t *testing.T) { _32bit uintptr // size on 32bit platforms _64bit uintptr // size on 64bit platforms }{ - {runtime.G{}, g32bit, 408}, // g, but exported for testing + {runtime.G{}, g32bit, 424}, // g, but exported for testing {runtime.Sudog{}, 56, 88}, // sudog, but exported for testing } diff --git a/src/runtime/traceback.go b/src/runtime/traceback.go index 66a1cc85ee..1e5afc6bdd 100644 --- a/src/runtime/traceback.go +++ b/src/runtime/traceback.go @@ -1322,7 +1322,7 @@ func isSystemGoroutine(gp *g, fixed bool) bool { if !f.valid() { return false } - if f.funcID == abi.FuncID_runtime_main || f.funcID == abi.FuncID_handleAsyncEvent { + if f.funcID == abi.FuncID_runtime_main || f.funcID == abi.FuncID_corostart || f.funcID == abi.FuncID_handleAsyncEvent { return false } if f.funcID == abi.FuncID_runfinq { From 71fc9d4da5c9f626802630cd2b220518e71c4ad5 Mon Sep 17 00:00:00 2001 From: lotusirous Date: Mon, 13 Nov 2023 22:03:09 +0700 Subject: [PATCH 176/313] gover: support Semantic Versioning major versions beyond 1 For #64033 Change-Id: Iab132f86c66aa6115a349d8032e9766a14dad02e Reviewed-on: https://go-review.googlesource.com/c/go/+/541915 LUCI-TryBot-Result: Go LUCI Reviewed-by: Bryan Mills Reviewed-by: Carlos Amedee Auto-Submit: Bryan Mills --- src/go/version/version.go | 11 +++++++++-- src/go/version/version_test.go | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/go/version/version.go b/src/go/version/version.go index 20c9cbc477..466c8091ea 100644 --- a/src/go/version/version.go +++ b/src/go/version/version.go @@ -7,7 +7,10 @@ // [Go versions]: https://go.dev/doc/toolchain#version package version // import "go/version" -import "internal/gover" +import ( + "internal/gover" + "strings" +) // stripGo converts from a "go1.21" version to a "1.21" version. // If v does not start with "go", stripGo returns the empty string (a known invalid version). @@ -33,7 +36,11 @@ func Lang(x string) string { if v == "" { return "" } - return x[:2+len(v)] // "go"+v without allocation + if strings.HasPrefix(x[2:], v) { + return x[:2+len(v)] // "go"+v without allocation + } else { + return "go" + v + } } // Compare returns -1, 0, or +1 depending on whether diff --git a/src/go/version/version_test.go b/src/go/version/version_test.go index 62aabad3a1..7c12e7ffd9 100644 --- a/src/go/version/version_test.go +++ b/src/go/version/version_test.go @@ -48,6 +48,7 @@ var langTests = []testCase1[string, string]{ {"go1.2.3", "go1.2"}, {"go1.2", "go1.2"}, {"go1", "go1"}, + {"go222", "go222.0"}, {"go1.999testmod", "go1.999"}, } From e9eb2beeb22d73d348920b8d68e019195c3ead81 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Mon, 4 Dec 2023 15:13:13 -0500 Subject: [PATCH 177/313] runtime/pprof: document block and mutex profiles Amazingly, we seem to have nearly no in-tree documentation on the semantics of block and mutex profiles. Add brief summaries, including the new behavior from CL 506415 and CL 544195. For #14689. For #44920. For #57071. For #61015. Change-Id: I1a6edce7c434fcb43f17c83eb362b1f9d1a32df1 Reviewed-on: https://go-review.googlesource.com/c/go/+/547057 LUCI-TryBot-Result: Go LUCI Reviewed-by: Rhys Hiltner Auto-Submit: Michael Pratt Reviewed-by: Michael Knyszek --- src/runtime/pprof/pprof.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/runtime/pprof/pprof.go b/src/runtime/pprof/pprof.go index d3a3c788b1..2cf260a828 100644 --- a/src/runtime/pprof/pprof.go +++ b/src/runtime/pprof/pprof.go @@ -126,6 +126,31 @@ import ( // pprof display to -alloc_space, the total number of bytes allocated since // the program began (including garbage-collected bytes). // +// The block profile tracks time spent blocked on synchronization primitives, +// such as [sync.Mutex], [sync.RWMutex], [sync.WaitGroup], [sync.Cond], and +// channel send/receive/select. Stack traces correspond to the location that +// blocked (for example, [sync.Mutex.Lock]). Sample values correspond to +// cumulative time spent blocked at that stack trace, subject to time-based +// sampling specified by [runtime.SetBlockProfileRate]. +// +// The mutex profile tracks contention on mutexes, such as [sync.Mutex], +// [sync.RWMutex], and runtime-internal locks. Stack traces correspond to the +// end of the critical section causing contention. For example, a lock held for +// a long time while other goroutines are waiting to acquire the lock will +// report contention when the lock is finally unlocked (that is, at +// [sync.Mutex.Unlock]). Sample values correspond to the approximate cumulative +// time other goroutines spent blocked waiting for the lock, subject to +// event-based sampling specified by [runtime.SetMutexProfileFraction]. For +// example, if a caller holds a lock for 1s while 5 other goroutines are +// waiting for the entire second to acquire the lock, its unlock call stack +// will report 5s of contention. +// +// In the mutex profile, runtime-internal locks are always reported at the +// location "runtime._LostContendedRuntimeLock". More detailed stack traces for +// runtime-internal locks can be obtained by setting +// `GODEBUG=runtimecontentionstacks=1` (see package [runtime] docs for +// caveats). +// // The CPU profile is not available as a Profile. It has a special API, // the [StartCPUProfile] and [StopCPUProfile] functions, because it streams // output to a writer during profiling. From 3b8b550a35965245657ea204865baa6ee727297d Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Mon, 4 Dec 2023 15:43:41 -0500 Subject: [PATCH 178/313] doc: document runtimecontentionstacks For #57071. Change-Id: Ic1645af57aa589917c67154a5e4ad0b4edd7ba90 Reviewed-on: https://go-review.googlesource.com/c/go/+/547058 Reviewed-by: Michael Knyszek Reviewed-by: Rhys Hiltner LUCI-TryBot-Result: Go LUCI Auto-Submit: Michael Pratt --- doc/godebug.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/godebug.md b/doc/godebug.md index f7baea30b2..9710940118 100644 --- a/doc/godebug.md +++ b/doc/godebug.md @@ -178,6 +178,13 @@ should adjust their Linux configuration according to the recommendations in the [GC guide](/doc/gc-guide#Linux_transparent_huge_pages), or switch to a Linux distribution that disables transparent huge pages altogether. +Go 1.22 added contention on runtime-internal locks to the [`mutex` +profile](/pkg/runtime/pprof#Profile). Contention on these locks is always +reported at `runtime._LostContendedRuntimeLock`. Complete stack traces of +runtime locks can be enabled with the [`runtimecontentionstacks` +setting](/pkg/runtime#hdr-Environment_Variable). These stack traces have +non-standard semantics, see setting documentation for details. + ### Go 1.21 Go 1.21 made it a run-time error to call `panic` with a nil interface value, From ff9269ee11d9ac3069572e40d641eb5884ae6abd Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Mon, 4 Dec 2023 16:45:33 -0500 Subject: [PATCH 179/313] doc: add release notes for runtime-internal contention For #57071. For #61422. Change-Id: I5d546d8828be897cb087e85a1251213c582b3894 Reviewed-on: https://go-review.googlesource.com/c/go/+/547059 Reviewed-by: Rhys Hiltner LUCI-TryBot-Result: Go LUCI Auto-Submit: Michael Pratt Reviewed-by: Michael Knyszek --- doc/go1.22.html | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/doc/go1.22.html b/doc/go1.22.html index 2950a5b085..331c790d21 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -638,6 +638,13 @@ defer func() {

runtime/metrics
+

+ /sync/mutex/wait/total:seconds now includes contention on + runtime-internal locks in addition to + sync.Mutex and + sync.RWMutex. +

+

TODO: https://go.dev/issue/63340: provide histogram of all STW events

@@ -654,6 +661,14 @@ defer func() { now record 1 second of delay instead of 10 milliseconds of delay.

+

+ Mutex profiles also now include contention on runtime-internal locks in addition to + sync.Mutex and + sync.RWMutex. + Contention on runtime-internal locks is always reported at runtime._LostContendedRuntimeLock. + A future release will add complete stack traces in these cases. +

+

CPU profiles on Darwin platforms now contain the process's memory map, enabling the disassembly view in the pprof tool. From 6ee27198544ce9ed7979839abff7248708168862 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Mon, 4 Dec 2023 17:31:58 -0500 Subject: [PATCH 180/313] doc: add STW metrics to release notes For #63340. For #61422. Change-Id: Ib74bb54b0450e96b7f4b7eb7ba2ae7ac2d40171a Reviewed-on: https://go-review.googlesource.com/c/go/+/547095 Reviewed-by: Michael Knyszek LUCI-TryBot-Result: Go LUCI Auto-Submit: Michael Pratt Reviewed-by: Mauri de Souza Meneguzzo --- doc/go1.22.html | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 331c790d21..e5facbd892 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -638,16 +638,30 @@ defer func() {

runtime/metrics
+

+ Four new histogram metrics + /sched/pauses/stopping/gc:seconds, + /sched/pauses/stopping/other:seconds, + /sched/pauses/total/gc:seconds, and + /sched/pauses/total/other:seconds provide additional details + about stop-the-world pauses. + The "stopping" metrics report the time taken from deciding to stop the + world until all goroutines are stopped. + The "total" metrics report the time taken from deciding to stop the world + until it is started again. +

+ +

+ The /gc/pauses:seconds metric is deprecated, as it is + equivalent to the new /sched/pauses/total/gc:seconds metric. +

+

/sync/mutex/wait/total:seconds now includes contention on runtime-internal locks in addition to sync.Mutex and sync.RWMutex.

- -

- TODO: https://go.dev/issue/63340: provide histogram of all STW events -

From e914671f5d5e72b2f897a9f2dfc6bf2203d3254a Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Wed, 6 Dec 2023 12:34:02 -0500 Subject: [PATCH 181/313] runtime/pprof: add section headers to Profile doc Adding explicit section headers makes it cleaner to split the profile descriptions into multiple paragraphs, as there is now an explicit transition from discussion of one profile type to the next. For #14689. Change-Id: Ifcff918367e91a165ee5f74423be3935b421972b Reviewed-on: https://go-review.googlesource.com/c/go/+/547955 Reviewed-by: Rhys Hiltner Reviewed-by: Michael Knyszek LUCI-TryBot-Result: Go LUCI Auto-Submit: Michael Pratt --- src/runtime/pprof/pprof.go | 55 ++++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/src/runtime/pprof/pprof.go b/src/runtime/pprof/pprof.go index 2cf260a828..1e698425d7 100644 --- a/src/runtime/pprof/pprof.go +++ b/src/runtime/pprof/pprof.go @@ -109,6 +109,12 @@ import ( // These predefined profiles maintain themselves and panic on an explicit // [Profile.Add] or [Profile.Remove] method call. // +// The CPU profile is not available as a Profile. It has a special API, +// the [StartCPUProfile] and [StopCPUProfile] functions, because it streams +// output to a writer during profiling. +// +// # Heap profile +// // The heap profile reports statistics as of the most recently completed // garbage collection; it elides more recent allocation to avoid skewing // the profile away from live data and toward garbage. @@ -122,38 +128,47 @@ import ( // flags select which to display, defaulting to -inuse_space (live objects, // scaled by size). // +// # Allocs profile +// // The allocs profile is the same as the heap profile but changes the default // pprof display to -alloc_space, the total number of bytes allocated since // the program began (including garbage-collected bytes). // +// # Block profile +// // The block profile tracks time spent blocked on synchronization primitives, // such as [sync.Mutex], [sync.RWMutex], [sync.WaitGroup], [sync.Cond], and -// channel send/receive/select. Stack traces correspond to the location that -// blocked (for example, [sync.Mutex.Lock]). Sample values correspond to -// cumulative time spent blocked at that stack trace, subject to time-based -// sampling specified by [runtime.SetBlockProfileRate]. +// channel send/receive/select. +// +// Stack traces correspond to the location that blocked (for example, +// [sync.Mutex.Lock]). +// +// Sample values correspond to cumulative time spent blocked at that stack +// trace, subject to time-based sampling specified by +// [runtime.SetBlockProfileRate]. +// +// # Mutex profile // // The mutex profile tracks contention on mutexes, such as [sync.Mutex], -// [sync.RWMutex], and runtime-internal locks. Stack traces correspond to the -// end of the critical section causing contention. For example, a lock held for -// a long time while other goroutines are waiting to acquire the lock will -// report contention when the lock is finally unlocked (that is, at -// [sync.Mutex.Unlock]). Sample values correspond to the approximate cumulative -// time other goroutines spent blocked waiting for the lock, subject to -// event-based sampling specified by [runtime.SetMutexProfileFraction]. For -// example, if a caller holds a lock for 1s while 5 other goroutines are -// waiting for the entire second to acquire the lock, its unlock call stack -// will report 5s of contention. +// [sync.RWMutex], and runtime-internal locks. // -// In the mutex profile, runtime-internal locks are always reported at the -// location "runtime._LostContendedRuntimeLock". More detailed stack traces for +// Stack traces correspond to the end of the critical section causing +// contention. For example, a lock held for a long time while other goroutines +// are waiting to acquire the lock will report contention when the lock is +// finally unlocked (that is, at [sync.Mutex.Unlock]). +// +// Sample values correspond to the approximate cumulative time other goroutines +// spent blocked waiting for the lock, subject to event-based sampling +// specified by [runtime.SetMutexProfileFraction]. For example, if a caller +// holds a lock for 1s while 5 other goroutines are waiting for the entire +// second to acquire the lock, its unlock call stack will report 5s of +// contention. +// +// Runtime-internal locks are always reported at the location +// "runtime._LostContendedRuntimeLock". More detailed stack traces for // runtime-internal locks can be obtained by setting // `GODEBUG=runtimecontentionstacks=1` (see package [runtime] docs for // caveats). -// -// The CPU profile is not available as a Profile. It has a special API, -// the [StartCPUProfile] and [StopCPUProfile] functions, because it streams -// output to a writer during profiling. type Profile struct { name string mu sync.Mutex From fecaea97e42aaabf75ee834bc01da0537fc9a27a Mon Sep 17 00:00:00 2001 From: David Chase Date: Tue, 5 Dec 2023 16:11:20 -0500 Subject: [PATCH 182/313] doc: changes for loong64 linux port register abi, memory sanitizer, new relocations, buildmode=plugin Change-Id: Ib7f023f61be26fc1369a3db454f6d8828e5b5b33 Reviewed-on: https://go-review.googlesource.com/c/go/+/547638 Run-TryBot: David Chase Reviewed-by: Cherry Mui TryBot-Result: Gopher Robot --- doc/go1.22.html | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index e5facbd892..07901c82ab 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -786,17 +786,19 @@ defer func() { 6 and 7.

+

Loong64

- TODO: https://go.dev/cl/481315: runtime, cmd/go: enable memory sanitizer on linux/loong64 + The loong64 port now supports passing function arguments and results using registers.

+

+ The linux/loong64 port now supports the memory sanitizer, new-style linker relocations, and the plugin build mode. +

+

TODO: https://go.dev/cl/517935: cmd/dist,internal/platform: enable openbsd/ppc64 port

-

- TODO: https://go.dev/cl/537615: debug/elf,cmd/link: add additional relocations for loong64; modified api/next/63725.txt -

TODO: https://go.dev/cl/469395: debug/elf,cmd/link: add additional MIPS64 relocation type; modified api/next/61974.txt From 0ff2b33ea0cdd6358010bd484ba3159f740a45df Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Wed, 6 Dec 2023 12:47:32 -0500 Subject: [PATCH 183/313] cmd/go: avoid hard-coding runtime dependencies in TestNewReleaseRebuildsStalePackagesInGOPATH Fixes #64583. Change-Id: Idbe50fe77f6030f2402ac436abe6710cb1183730 Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest,gotip-windows-amd64-longtest Reviewed-on: https://go-review.googlesource.com/c/go/+/547995 Reviewed-by: Russ Cox Auto-Submit: Bryan Mills LUCI-TryBot-Result: Go LUCI --- src/cmd/go/go_test.go | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go index bae83eb92f..32822950f1 100644 --- a/src/cmd/go/go_test.go +++ b/src/cmd/go/go_test.go @@ -881,22 +881,17 @@ func TestNewReleaseRebuildsStalePackagesInGOPATH(t *testing.T) { // Copy the runtime packages into a temporary GOROOT // so that we can change files. - for _, copydir := range []string{ - "src/runtime", - "src/internal/abi", - "src/internal/bytealg", - "src/internal/coverage/rtcov", - "src/internal/cpu", - "src/internal/goarch", - "src/internal/godebugs", - "src/internal/goexperiment", - "src/internal/goos", - "src/internal/coverage/rtcov", - "src/math/bits", - "src/unsafe", + var dirs []string + tg.run("list", "-deps", "runtime") + pkgs := strings.Split(strings.TrimSpace(tg.getStdout()), "\n") + for _, pkg := range pkgs { + dirs = append(dirs, filepath.Join("src", pkg)) + } + dirs = append(dirs, filepath.Join("pkg/tool", goHostOS+"_"+goHostArch), "pkg/include", - } { + ) + for _, copydir := range dirs { srcdir := filepath.Join(testGOROOT, copydir) tg.tempDir(filepath.Join("goroot", copydir)) err := filepath.WalkDir(srcdir, @@ -912,6 +907,9 @@ func TestNewReleaseRebuildsStalePackagesInGOPATH(t *testing.T) { return err } dest := filepath.Join("goroot", copydir, srcrel) + if _, err := os.Stat(dest); err == nil { + return nil + } data, err := os.ReadFile(path) if err != nil { return err From 2b4425759cd90edfb8f4ff4e8be397062ba99d91 Mon Sep 17 00:00:00 2001 From: Joe Tsai Date: Wed, 6 Dec 2023 14:03:17 -0800 Subject: [PATCH 184/313] doc: add release notes for changes to encoding/json package The escaping of certain control characters has been changed. The change is compliant with the JSON specification. The JSON package never promised exactly how JSON formatted and has historically changed its representation over time. Change-Id: I8b23f503cfff86c460f642693b50dee24038fb0d Reviewed-on: https://go-review.googlesource.com/c/go/+/548075 Run-TryBot: Joseph Tsai Auto-Submit: Joseph Tsai LUCI-TryBot-Result: Go LUCI Reviewed-by: Dmitri Shuralyov TryBot-Result: Gopher Robot Reviewed-by: Robert Griesemer --- doc/go1.22.html | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/doc/go1.22.html b/doc/go1.22.html index 07901c82ab..2f08803221 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -409,6 +409,17 @@ defer func() {

+
encoding/json
+
+

+ Marshaling and encoding functionality now escapes + '\b' and '\f' characters as + \b and \f instead of + \u0008 and \u000c. +

+
+
+
go/ast

From 5e724ccb2b092a6bc294b63c4e33ed1da317ca87 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Wed, 6 Dec 2023 16:36:10 -0800 Subject: [PATCH 185/313] go/types, types2: don't print aliased type (in comments) for Alias types Fixes #64584. Change-Id: I756d6026d10f130c1dd5026891b7cc3c640d7f78 Reviewed-on: https://go-review.googlesource.com/c/go/+/548135 Reviewed-by: Alan Donovan Run-TryBot: Robert Griesemer TryBot-Result: Gopher Robot Reviewed-by: Robert Griesemer Auto-Submit: Robert Griesemer --- src/cmd/compile/internal/types2/issues_test.go | 2 +- src/cmd/compile/internal/types2/typestring.go | 2 -- src/go/types/issues_test.go | 2 +- src/go/types/typestring.go | 2 -- 4 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/cmd/compile/internal/types2/issues_test.go b/src/cmd/compile/internal/types2/issues_test.go index 95b9f94078..a8b70b8964 100644 --- a/src/cmd/compile/internal/types2/issues_test.go +++ b/src/cmd/compile/internal/types2/issues_test.go @@ -998,7 +998,7 @@ type S struct{ A } } got := S.String() - const want = "type p.S struct{p.A /* = []int */}" + const want = "type p.S struct{p.A}" if got != want { t.Fatalf("got %q; want %q", got, want) } diff --git a/src/cmd/compile/internal/types2/typestring.go b/src/cmd/compile/internal/types2/typestring.go index 0e0da0f7f6..4b410af6b7 100644 --- a/src/cmd/compile/internal/types2/typestring.go +++ b/src/cmd/compile/internal/types2/typestring.go @@ -331,8 +331,6 @@ func (w *typeWriter) typ(typ Type) { if w.ctxt != nil { // TODO(gri) do we need to print the alias type name, too? w.typ(Unalias(t.obj.typ)) - } else { - w.string(fmt.Sprintf(" /* = %s */", Unalias(t.obj.typ))) } default: diff --git a/src/go/types/issues_test.go b/src/go/types/issues_test.go index c38459e488..91631fe9c7 100644 --- a/src/go/types/issues_test.go +++ b/src/go/types/issues_test.go @@ -1008,7 +1008,7 @@ type S struct{ A } } got := S.String() - const want = "type p.S struct{p.A /* = []int */}" + const want = "type p.S struct{p.A}" if got != want { t.Fatalf("got %q; want %q", got, want) } diff --git a/src/go/types/typestring.go b/src/go/types/typestring.go index d5623d3d86..23bddb2673 100644 --- a/src/go/types/typestring.go +++ b/src/go/types/typestring.go @@ -334,8 +334,6 @@ func (w *typeWriter) typ(typ Type) { if w.ctxt != nil { // TODO(gri) do we need to print the alias type name, too? w.typ(Unalias(t.obj.typ)) - } else { - w.string(fmt.Sprintf(" /* = %s */", Unalias(t.obj.typ))) } default: From 2e4d9a18011a65c42a371bad7b4125acb3c0bc4e Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Thu, 7 Dec 2023 10:24:55 -0500 Subject: [PATCH 186/313] cmd/go: set global .gitconfig location more robustly in tests Also confirm that setting the location actually worked before proceeding with the rest of the test. This fixes a test failure with git versions older than 2.32.0. Updates #53955. Fixes #64603. Change-Id: I1a954975a3d8300e8b4dca045d3a15438a0407ec Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest,gotip-windows-amd64-longtest Reviewed-on: https://go-review.googlesource.com/c/go/+/548215 LUCI-TryBot-Result: Go LUCI Reviewed-by: Russ Cox Reviewed-by: Michael Matloob Run-TryBot: Bryan Mills --- src/cmd/go/testdata/script/get_issue53955.txt | 16 ++++++++++++++-- .../script/mod_download_git_bareRepository.txt | 17 +++++++++++++---- .../script/mod_download_git_decorate_full.txt | 16 +++++++++++----- .../testdata/script/mod_download_issue51114.txt | 15 ++++++++++++--- .../script/mod_download_private_vcs.txt | 15 ++++++++++++--- 5 files changed, 62 insertions(+), 17 deletions(-) diff --git a/src/cmd/go/testdata/script/get_issue53955.txt b/src/cmd/go/testdata/script/get_issue53955.txt index c6d45d5c50..685c6facaa 100644 --- a/src/cmd/go/testdata/script/get_issue53955.txt +++ b/src/cmd/go/testdata/script/get_issue53955.txt @@ -7,7 +7,16 @@ [!git] skip [!net:github.com] skip 'does not actually use github.com because of insteadOf, but silence network check just in case' -env GIT_CONFIG_GLOBAL=$WORK/.gitconfig +# Redirect git to a test-specific .gitconfig. +# GIT_CONFIG_GLOBAL suffices for git 2.32.0 and newer. +# For older git versions we also set $HOME. +env GIT_CONFIG_GLOBAL=$WORK${/}home${/}gopher${/}.gitconfig +env HOME=$WORK${/}home${/}gopher +exec git config --global --show-origin user.name +stdout 'Go Gopher' + +# Inject a local repo in place of a remote one, so that we can +# add commits to the repo partway through the test. env GIT_ALLOW_PROTOCOL=file env GOPRIVATE=github.com/golang/issue53955 @@ -64,4 +73,7 @@ package issue53955 module m go 1.18 --- $WORK/.gitconfig -- +-- $WORK/home/gopher/.gitconfig -- +[user] + name = Go Gopher + email = gopher@golang.org diff --git a/src/cmd/go/testdata/script/mod_download_git_bareRepository.txt b/src/cmd/go/testdata/script/mod_download_git_bareRepository.txt index 8050461c65..a61283ca49 100644 --- a/src/cmd/go/testdata/script/mod_download_git_bareRepository.txt +++ b/src/cmd/go/testdata/script/mod_download_git_bareRepository.txt @@ -1,8 +1,14 @@ [short] skip [!git] skip -[!GOOS:linux] skip # Uses XDG_CONFIG_HOME -env GIT_CONFIG_GLOBAL=$WORK/.gitconfig +# Redirect git to a test-specific .gitconfig. +# GIT_CONFIG_GLOBAL suffices for git 2.32.0 and newer. +# For older git versions we also set $HOME. +env GIT_CONFIG_GLOBAL=$WORK${/}home${/}gopher${/}.gitconfig +env HOME=$WORK${/}home${/}gopher +exec git config --global --show-origin user.name +stdout 'Go Gopher' + env GOPRIVATE=vcs-test.golang.org go mod download -x @@ -14,6 +20,9 @@ go 1.18 require vcs-test.golang.org/git/gitrepo1.git v1.2.3 --- $WORK/.gitconfig -- +-- $WORK/home/gopher/.gitconfig -- +[user] + name = Go Gopher + email = gopher@golang.org [safe] -bareRepository = explicit + bareRepository = explicit diff --git a/src/cmd/go/testdata/script/mod_download_git_decorate_full.txt b/src/cmd/go/testdata/script/mod_download_git_decorate_full.txt index 080ccf072e..9afd347746 100644 --- a/src/cmd/go/testdata/script/mod_download_git_decorate_full.txt +++ b/src/cmd/go/testdata/script/mod_download_git_decorate_full.txt @@ -3,12 +3,15 @@ env GO111MODULE=on [short] skip [!git] skip +# Redirect git to a test-specific .gitconfig. +# GIT_CONFIG_GLOBAL suffices for git 2.32.0 and newer. +# For older git versions we also set $HOME. +env GIT_CONFIG_GLOBAL=$WORK${/}home${/}gopher${/}.gitconfig +env HOME=$WORK${/}home${/}gopher +exec git config --global --show-origin user.name +stdout 'Go Gopher' + env GOPROXY=direct -env HOME=$WORK/home/gopher - - -go env GOPROXY -stdout 'direct' exec git config --get log.decorate stdout 'full' @@ -24,5 +27,8 @@ go list -m vcs-test.golang.org/git/gitrepo1.git@v1.2.3 stdout 'vcs-test.golang.org/git/gitrepo1.git v1.2.3' -- $WORK/home/gopher/.gitconfig -- +[user] + name = Go Gopher + email = gopher@golang.org [log] decorate = full diff --git a/src/cmd/go/testdata/script/mod_download_issue51114.txt b/src/cmd/go/testdata/script/mod_download_issue51114.txt index 4d274d61a9..a28d467bb8 100644 --- a/src/cmd/go/testdata/script/mod_download_issue51114.txt +++ b/src/cmd/go/testdata/script/mod_download_issue51114.txt @@ -1,8 +1,14 @@ [!net:github.com] skip [!git] skip -[!GOOS:linux] skip # Uses XDG_CONFIG_HOME -env GIT_CONFIG_GLOBAL=$WORK/.gitconfig +# Redirect git to a test-specific .gitconfig. +# GIT_CONFIG_GLOBAL suffices for git 2.32.0 and newer. +# For older git versions we also set $HOME. +env GIT_CONFIG_GLOBAL=$WORK${/}home${/}gopher${/}.gitconfig +env HOME=$WORK${/}home${/}gopher +exec git config --global --show-origin user.name +stdout 'Go Gopher' + env GOPROXY=direct ! go mod download @@ -15,6 +21,9 @@ go 1.18 require github.com/golang/notexist/subdir v0.1.0 --- $WORK/.gitconfig -- +-- $WORK/home/gopher/.gitconfig -- +[user] + name = Go Gopher + email = gopher@golang.org [url "git@github.com:"] insteadOf = https://github.com/ diff --git a/src/cmd/go/testdata/script/mod_download_private_vcs.txt b/src/cmd/go/testdata/script/mod_download_private_vcs.txt index 2f72a4213a..5c8d93a978 100644 --- a/src/cmd/go/testdata/script/mod_download_private_vcs.txt +++ b/src/cmd/go/testdata/script/mod_download_private_vcs.txt @@ -5,6 +5,14 @@ env GO111MODULE=on [!git] skip env GOPROXY=direct +# Redirect git to a test-specific .gitconfig. +# GIT_CONFIG_GLOBAL suffices for git 2.32.0 and newer. +# For older git versions we also set $HOME. +env GIT_CONFIG_GLOBAL=$WORK${/}home${/}gopher${/}.gitconfig +env HOME=$WORK${/}home${/}gopher +exec git config --global --show-origin user.name +stdout 'Go Gopher' + ! go mod download github.com/golang/nonexist@latest stderr 'Confirm the import path was entered correctly.' stderr 'If this is a private repository, see https://golang.org/doc/faq#git_https for additional information.' @@ -27,7 +35,7 @@ stderr '^If this is a private repository, see https://golang.org/doc/faq#git_htt # Test that Git clone errors will be shown to the user instead of a generic # "unknown revision" error. To do this we want to force git ls-remote to return # an error we don't already have special handling for. See golang/go#42751. -env HOME=$WORK${/}home${/}gopher +exec git config --global url.git@github.com.insteadOf https://github.com/ env GIT_SSH_COMMAND=false ! go install github.com/golang/nonexist@master stderr 'fatal: Could not read from remote repository.' @@ -35,5 +43,6 @@ stderr 'fatal: Could not read from remote repository.' ! stdout . -- $WORK/home/gopher/.gitconfig -- -[url "git@github.com:"] - insteadOf = https://github.com/ +[user] + name = Go Gopher + email = gopher@golang.org From 4601857c1c7f5f72c75366763ff71fdcbe5f84be Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Thu, 7 Dec 2023 11:34:35 -0500 Subject: [PATCH 187/313] doc/go1.22: document openbsd/ppc64 port Updates #56001. For #61422. Change-Id: Ie4afbc42191b155d28945bd8f104ad7a63d30db9 Reviewed-on: https://go-review.googlesource.com/c/go/+/547999 LUCI-TryBot-Result: Go LUCI Reviewed-by: Than McIntosh --- doc/go1.22.html | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 2f08803221..d11a633029 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -805,9 +805,10 @@ defer func() { The linux/loong64 port now supports the memory sanitizer, new-style linker relocations, and the plugin build mode.

- +

OpenBSD

- TODO: https://go.dev/cl/517935: cmd/dist,internal/platform: enable openbsd/ppc64 port + Go 1.22 adds an experimental port to OpenBSD on big-endian 64-bit PowerPC + (openbsd/ppc64).

From bb34112d4df7b5dfd12fc83b8d1305631a7b8708 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Mon, 4 Dec 2023 15:32:01 -0500 Subject: [PATCH 188/313] os: document Readlink behavior for relative links Also provide a runnable example to illustrate that behavior. This should help users to avoid the common mistake of expecting os.Readlink to return an absolute path. Fixes #57766. Change-Id: I8f60aa111ebda0cae985758615019aaf26d5cb41 Reviewed-on: https://go-review.googlesource.com/c/go/+/546995 Auto-Submit: Bryan Mills LUCI-TryBot-Result: Go LUCI Reviewed-by: Carlos Amedee Reviewed-by: Rob Pike --- src/os/example_test.go | 54 ++++++++++++++++++++++++++++++++++++++++++ src/os/file.go | 9 +++++++ src/os/file_plan9.go | 4 +--- src/os/file_unix.go | 4 +--- src/os/file_windows.go | 8 +++---- 5 files changed, 68 insertions(+), 11 deletions(-) diff --git a/src/os/example_test.go b/src/os/example_test.go index e9657ed1fc..656232c472 100644 --- a/src/os/example_test.go +++ b/src/os/example_test.go @@ -263,3 +263,57 @@ func ExampleMkdirAll() { log.Fatal(err) } } + +func ExampleReadlink() { + // First, we create a relative symlink to a file. + d, err := os.MkdirTemp("", "") + if err != nil { + log.Fatal(err) + } + defer os.RemoveAll(d) + targetPath := filepath.Join(d, "hello.txt") + if err := os.WriteFile(targetPath, []byte("Hello, Gophers!"), 0644); err != nil { + log.Fatal(err) + } + linkPath := filepath.Join(d, "hello.link") + if err := os.Symlink("hello.txt", filepath.Join(d, "hello.link")); err != nil { + if errors.Is(err, errors.ErrUnsupported) { + // Allow the example to run on platforms that do not support symbolic links. + fmt.Printf("%s links to %s\n", filepath.Base(linkPath), "hello.txt") + return + } + log.Fatal(err) + } + + // Readlink returns the relative path as passed to os.Symlink. + dst, err := os.Readlink(linkPath) + if err != nil { + log.Fatal(err) + } + fmt.Printf("%s links to %s\n", filepath.Base(linkPath), dst) + + var dstAbs string + if filepath.IsAbs(dst) { + dstAbs = dst + } else { + // Symlink targets are relative to the directory containing the link. + dstAbs = filepath.Join(filepath.Dir(linkPath), dst) + } + + // Check that the target is correct by comparing it with os.Stat + // on the original target path. + dstInfo, err := os.Stat(dstAbs) + if err != nil { + log.Fatal(err) + } + targetInfo, err := os.Stat(targetPath) + if err != nil { + log.Fatal(err) + } + if !os.SameFile(dstInfo, targetInfo) { + log.Fatalf("link destination (%s) is not the same file as %s", dstAbs, targetPath) + } + + // Output: + // hello.link links to hello.txt +} diff --git a/src/os/file.go b/src/os/file.go index 6fd0550eeb..090ffba4dc 100644 --- a/src/os/file.go +++ b/src/os/file.go @@ -392,6 +392,15 @@ func Rename(oldpath, newpath string) error { return rename(oldpath, newpath) } +// Readlink returns the destination of the named symbolic link. +// If there is an error, it will be of type *PathError. +// +// If the link destination is relative, Readlink returns the relative path +// without resolving it to an absolute one. +func Readlink(name string) (string, error) { + return readlink(name) +} + // Many functions in package syscall return a count of -1 instead of 0. // Using fixCount(call()) instead of call() corrects the count. func fixCount(n int, err error) (int, error) { diff --git a/src/os/file_plan9.go b/src/os/file_plan9.go index 03cdb5be4a..4cab2d4cdf 100644 --- a/src/os/file_plan9.go +++ b/src/os/file_plan9.go @@ -505,9 +505,7 @@ func Symlink(oldname, newname string) error { return &LinkError{"symlink", oldname, newname, syscall.EPLAN9} } -// Readlink returns the destination of the named symbolic link. -// If there is an error, it will be of type *PathError. -func Readlink(name string) (string, error) { +func readlink(name string) (string, error) { return "", &PathError{Op: "readlink", Path: name, Err: syscall.EPLAN9} } diff --git a/src/os/file_unix.go b/src/os/file_unix.go index 533a48404b..a527b23e4f 100644 --- a/src/os/file_unix.go +++ b/src/os/file_unix.go @@ -426,9 +426,7 @@ func Symlink(oldname, newname string) error { return nil } -// Readlink returns the destination of the named symbolic link. -// If there is an error, it will be of type *PathError. -func Readlink(name string) (string, error) { +func readlink(name string) (string, error) { for len := 128; ; len *= 2 { b := make([]byte, len) var ( diff --git a/src/os/file_windows.go b/src/os/file_windows.go index 63d53a1df8..8b04ed6e47 100644 --- a/src/os/file_windows.go +++ b/src/os/file_windows.go @@ -406,7 +406,7 @@ func normaliseLinkPath(path string) (string, error) { return "", errors.New("GetFinalPathNameByHandle returned unexpected path: " + s) } -func readlink(path string) (string, error) { +func readReparseLink(path string) (string, error) { h, err := openSymlink(path) if err != nil { return "", err @@ -438,10 +438,8 @@ func readlink(path string) (string, error) { } } -// Readlink returns the destination of the named symbolic link. -// If there is an error, it will be of type *PathError. -func Readlink(name string) (string, error) { - s, err := readlink(fixLongPath(name)) +func readlink(name string) (string, error) { + s, err := readReparseLink(fixLongPath(name)) if err != nil { return "", &PathError{Op: "readlink", Path: name, Err: err} } From b11d19e03b57d6cec1142002a22c3df732118847 Mon Sep 17 00:00:00 2001 From: Ruinan Date: Thu, 30 Nov 2023 15:54:06 +0800 Subject: [PATCH 189/313] cmd/asm: print absolute PC for all patterns "off(PC)" in testEndToEnd Before this CL, testEndToEnd only turns the relative PC to absolute PC when pattern "off(PC)" is the suffix of an instruction. But there are some instructions like: ADR 10(PC), R10 it's also acceptable for the assembler while the pattern "off(PC)" is not a suffix, which makes the test fail. This CL fixes this issue by searching the pattern in the whole string instead of only in the suffix. Change-Id: I0cffedeb7b3c63abca7697671088cf993aff71ff Reviewed-on: https://go-review.googlesource.com/c/go/+/547235 Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI Reviewed-by: Ruinan Sun Reviewed-by: Carlos Amedee --- src/cmd/asm/internal/asm/endtoend_test.go | 14 ++++++++++---- src/cmd/asm/internal/asm/testdata/arm64.s | 8 ++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/cmd/asm/internal/asm/endtoend_test.go b/src/cmd/asm/internal/asm/endtoend_test.go index 592d7b4b76..6e1aa1cd95 100644 --- a/src/cmd/asm/internal/asm/endtoend_test.go +++ b/src/cmd/asm/internal/asm/endtoend_test.go @@ -141,11 +141,17 @@ Diff: // Turn relative (PC) into absolute (PC) automatically, // so that most branch instructions don't need comments // giving the absolute form. - if len(f) > 0 && strings.HasSuffix(printed, "(PC)") { - last := f[len(f)-1] - n, err := strconv.Atoi(last[:len(last)-len("(PC)")]) + if len(f) > 0 && strings.Contains(printed, "(PC)") { + index := len(f) - 1 + suf := "(PC)" + for !strings.HasSuffix(f[index], suf) { + index-- + suf = "(PC)," + } + str := f[index] + n, err := strconv.Atoi(str[:len(str)-len(suf)]) if err == nil { - f[len(f)-1] = fmt.Sprintf("%d(PC)", seq+n) + f[index] = fmt.Sprintf("%d%s", seq+n, suf) } } diff --git a/src/cmd/asm/internal/asm/testdata/arm64.s b/src/cmd/asm/internal/asm/testdata/arm64.s index 46ea6645af..12b4e3255e 100644 --- a/src/cmd/asm/internal/asm/testdata/arm64.s +++ b/src/cmd/asm/internal/asm/testdata/arm64.s @@ -981,6 +981,14 @@ again: ADR next, R11 // ADR R11 // 2b000010 next: NOP + ADR -2(PC), R10 // 0a000010 + ADR 2(PC), R16 // 10000010 + ADR -26(PC), R1 // 01000010 + ADR 12(PC), R2 // 02000010 + ADRP -2(PC), R10 // 0a000090 + ADRP 2(PC), R16 // 10000090 + ADRP -26(PC), R1 // 01000090 + ADRP 12(PC), R2 // 02000090 // LDP/STP LDP (R0), (R0, R1) // 000440a9 From 77e76c4387d1ba69fc00e5e85e9e70f259675456 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Wed, 6 Dec 2023 09:50:42 -0500 Subject: [PATCH 190/313] cmd/go: unset CC when we remove it from PATH in TestScript/cgo_stale_precompiled Otherwise, if make.bash produced a relative default CC path but the user has an absolute path to CC set in their environment, the test will fail spuriously. For #64423. Change-Id: I0f3e1d04851585e1b39266badcda9f17489332d9 Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest,gotip-windows-amd64-longtest Reviewed-on: https://go-review.googlesource.com/c/go/+/547997 LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Matloob Auto-Submit: Bryan Mills --- .../go/testdata/script/cgo_stale_precompiled.txt | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/cmd/go/testdata/script/cgo_stale_precompiled.txt b/src/cmd/go/testdata/script/cgo_stale_precompiled.txt index eb7e10557b..b2a0e0c8d5 100644 --- a/src/cmd/go/testdata/script/cgo_stale_precompiled.txt +++ b/src/cmd/go/testdata/script/cgo_stale_precompiled.txt @@ -29,8 +29,12 @@ env GOROOT_FINAL=$oldGOROOT_FINAL # no longer installed anyway! Since we're requiring a C compiler in order to # build and use cgo libraries in the standard library, we should make sure it # matches what's in the cache. -[!abscc] env CGO_ENABLED=1 -[!abscc] [!GOOS:plan9] env PATH='' # Guaranteed not to include $(go env CC)! -[!abscc] [GOOS:plan9] env path='' -[!abscc] ! go build -x runtime/cgo -[!abscc] stderr 'C compiler .* not found' + +[abscc] stop + +env CGO_ENABLED=1 +env CC='' +[!GOOS:plan9] env PATH='' # Guaranteed not to include $(go env CC)! +[GOOS:plan9] env path='' +! go build -x runtime/cgo +stderr 'C compiler .* not found' From c71eedf90aff3fc73a645b88d2e5166b8a0179fd Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Wed, 6 Dec 2023 15:19:59 -0500 Subject: [PATCH 191/313] cmd/go: accept clang versions with vendor prefixes To better diagnose bugs like this one in the future, I think we should also refuse to use a C compiler if we can't identify a sensible version for it. I did not do that in this CL because I want it to be small and low-risk for possible backporting. Fixes #64423. Change-Id: I21e44fc55f6fcf76633e4fecf6400c226a742351 Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest,gotip-windows-amd64-longtest Reviewed-on: https://go-review.googlesource.com/c/go/+/547998 Auto-Submit: Bryan Mills LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Matloob --- src/cmd/go/internal/work/buildid.go | 17 ++- .../script/build_cc_cache_issue64423.txt | 121 ++++++++++++++++++ 2 files changed, 136 insertions(+), 2 deletions(-) create mode 100644 src/cmd/go/testdata/script/build_cc_cache_issue64423.txt diff --git a/src/cmd/go/internal/work/buildid.go b/src/cmd/go/internal/work/buildid.go index 276f524afa..0769443712 100644 --- a/src/cmd/go/internal/work/buildid.go +++ b/src/cmd/go/internal/work/buildid.go @@ -9,6 +9,7 @@ import ( "fmt" "os" "os/exec" + "regexp" "strings" "cmd/go/internal/base" @@ -236,10 +237,22 @@ func (b *Builder) gccToolID(name, language string) (id, exe string, err error) { } version := "" + gccVersionRE := regexp.MustCompile(`^[0-9]+\.[0-9]+\.[0-9]+`) lines := strings.Split(string(out), "\n") for _, line := range lines { - if fields := strings.Fields(line); len(fields) > 1 && fields[1] == "version" || len(fields) > 2 && fields[2] == "version" { - version = line + fields := strings.Fields(line) + for i, field := range fields { + if strings.HasSuffix(field, ":") { + // Avoid parsing fields of lines like "Configured with: …", which may + // contain arbitrary substrings. + break + } + if field == "version" && i < len(fields)-1 && gccVersionRE.MatchString(fields[i+1]) { + version = line + break + } + } + if version != "" { break } } diff --git a/src/cmd/go/testdata/script/build_cc_cache_issue64423.txt b/src/cmd/go/testdata/script/build_cc_cache_issue64423.txt new file mode 100644 index 0000000000..f1bc2c3108 --- /dev/null +++ b/src/cmd/go/testdata/script/build_cc_cache_issue64423.txt @@ -0,0 +1,121 @@ +# Regression test for https://go.dev/issue/64423: +# +# When we parse the version for a Clang binary, we should accept +# an arbitrary vendor prefix, which (as of 2023) may be injected +# by defining CLANG_VENDOR when building clang itself. +# +# Since we don't want to actually rebuild the Clang toolchain in +# this test, we instead simulate it by injecting a fake "clang" +# binary that runs the real one as a subprocess. + +[!cgo] skip +[short] skip 'builds and links a fake clang binary' +[!cc:clang] skip 'test is specific to clang version parsing' + +# Save the location of the real clang command for our fake one to use. +go run ./which clang +cp stdout $WORK/.realclang + +# Build a fake clang and ensure that it is the one in $PATH. +mkdir $WORK/bin +go build -o $WORK/bin/clang$GOEXE ./fakeclang +[!GOOS:plan9] env PATH=$WORK${/}bin +[GOOS:plan9] env path=$WORK${/}bin + +# Force CGO_ENABLED=1 so that the following commands should error +# out if the fake clang doesn't work. +env CGO_ENABLED=1 + +# The bug in https://go.dev/issue/64423 resulted in cache keys that +# didn't contain any information about the C compiler. +# Since the bug was in cache key computation, isolate the cache: +# if we change the way caching works, we want the test to fail +# instead of accidentally reusing the cached information from a +# previous test run. +env GOCACHE=$WORK${/}.cache +mkdir $GOCACHE + +go build -x runtime/cgo + + # Tell our fake clang to stop working. + # Previously, 'go build -x runtime/cgo' would continue to + # succeed because both the broken clang and the non-broken one + # resulted in a cache key with no clang version information. +env GO_BREAK_CLANG=1 +! go build -x runtime/cgo +stderr '# runtime/cgo\nGO_BREAK_CLANG is set' + +-- go.mod -- +module example/issue64423 +go 1.20 +-- which/main.go -- +package main + +import ( + "os" + "os/exec" +) + +func main() { + path, err := exec.LookPath(os.Args[1]) + if err != nil { + panic(err) + } + os.Stdout.WriteString(path) +} +-- fakeclang/main.go -- +package main + +import ( + "bufio" + "bytes" + "log" + "os" + "os/exec" + "path/filepath" + "strings" +) + +func main() { + if os.Getenv("GO_BREAK_CLANG") != "" { + os.Stderr.WriteString("GO_BREAK_CLANG is set\n") + os.Exit(1) + } + + b, err := os.ReadFile(filepath.Join(os.Getenv("WORK"), ".realclang")) + if err != nil { + log.Fatal(err) + } + clang := string(bytes.TrimSpace(b)) + cmd := exec.Command(clang, os.Args[1:]...) + cmd.Stdout = os.Stdout + stderr, err := cmd.StderrPipe() + if err != nil { + log.Fatal(err) + } + + if err := cmd.Start(); err != nil { + log.Fatal(err) + } + + r := bufio.NewReader(stderr) + for { + line, err := r.ReadString('\n') + if line != "" { + if strings.Contains(line, "clang version") { + // Simulate a clang version string with an arbitrary vendor prefix. + const vendorString = "Gopher Solutions Unlimited " + os.Stderr.WriteString(vendorString) + } + os.Stderr.WriteString(line) + } + if err != nil { + break + } + } + os.Stderr.Close() + + if err := cmd.Wait(); err != nil { + os.Exit(1) + } +} From e1c0349a7c607cdfcfa8f7c0c6b70aceff9d3752 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Wed, 6 Dec 2023 13:29:03 -0500 Subject: [PATCH 192/313] internal/profile: fully decode proto even if there are no samples This is a partial revert of CL 483137. CL 483137 started checking errors in postDecode, which is good. Now we can catch more malformed pprof protos. However this made TestEmptyProfile fail, so an early return was added when the profile was "empty" (no samples). Unfortunately, this was problematic. Profiles with no samples can still be valid, but skipping postDecode meant that the resulting Profile was missing values from the string table. In particular, net/http/pprof needs to parse empty profiles in order to pass through the sample and period types to a final output proto. CL 483137 broke this behavior. internal/profile.Parse is only used in two places: in cmd/compile to parse PGO pprof profiles, and in net/http/pprof to parse before/after pprof profiles for delta profiles. In both cases, the input is never literally empty (0 bytes). Even a pprof proto with no samples still contains some header fields, such as sample and period type. Upstream github.com/google/pprof/profile even has an explicit error on 0 byte input, so `go tool pprof` will not support such an input. Thus TestEmptyProfile was misleading; this profile doesn't need to support empty input at all. Resolve this by removing TestEmptyProfile and replacing it with an explicit error on empty input, as upstream github.com/google/pprof/profile has. For non-empty input, always run postDecode to ensure the string table is processed. TestConvertCPUProfileEmpty is reverted back to assert the values from before CL 483137. Note that in this case "Empty" means no samples, not a 0 byte input. Continue to allow empty files for PGO in order to minimize the chance of last minute breakage if some users have empty files. Fixes #64566. Change-Id: I83a1f0200ae225ac6da0009d4b2431fe215b283f Reviewed-on: https://go-review.googlesource.com/c/go/+/547996 Reviewed-by: Michael Knyszek LUCI-TryBot-Result: Go LUCI Reviewed-by: Cherry Mui --- src/cmd/compile/internal/pgo/irgraph.go | 15 ++++-- src/internal/profile/encode.go | 3 -- src/internal/profile/profile.go | 17 ++++-- src/internal/profile/profile_test.go | 15 ------ src/net/http/pprof/pprof_test.go | 63 ++++++++++++++++++++++ src/net/http/pprof/testdata/delta_mutex.go | 43 +++++++++++++++ src/runtime/pprof/proto_test.go | 10 ++-- 7 files changed, 136 insertions(+), 30 deletions(-) create mode 100644 src/net/http/pprof/testdata/delta_mutex.go diff --git a/src/cmd/compile/internal/pgo/irgraph.go b/src/cmd/compile/internal/pgo/irgraph.go index 54ac650272..96485e33ab 100644 --- a/src/cmd/compile/internal/pgo/irgraph.go +++ b/src/cmd/compile/internal/pgo/irgraph.go @@ -46,6 +46,7 @@ import ( "cmd/compile/internal/pgo/internal/graph" "cmd/compile/internal/typecheck" "cmd/compile/internal/types" + "errors" "fmt" "internal/profile" "os" @@ -145,18 +146,22 @@ func New(profileFile string) (*Profile, error) { return nil, fmt.Errorf("error opening profile: %w", err) } defer f.Close() - profile, err := profile.Parse(f) - if err != nil { + p, err := profile.Parse(f) + if errors.Is(err, profile.ErrNoData) { + // Treat a completely empty file the same as a profile with no + // samples: nothing to do. + return nil, nil + } else if err != nil { return nil, fmt.Errorf("error parsing profile: %w", err) } - if len(profile.Sample) == 0 { + if len(p.Sample) == 0 { // We accept empty profiles, but there is nothing to do. return nil, nil } valueIndex := -1 - for i, s := range profile.SampleType { + for i, s := range p.SampleType { // Samples count is the raw data collected, and CPU nanoseconds is just // a scaled version of it, so either one we can find is fine. if (s.Type == "samples" && s.Unit == "count") || @@ -170,7 +175,7 @@ func New(profileFile string) (*Profile, error) { return nil, fmt.Errorf(`profile does not contain a sample index with value/type "samples/count" or cpu/nanoseconds"`) } - g := graph.NewGraph(profile, &graph.Options{ + g := graph.NewGraph(p, &graph.Options{ SampleValue: func(v []int64) int64 { return v[valueIndex] }, }) diff --git a/src/internal/profile/encode.go b/src/internal/profile/encode.go index 72d6fe2fa7..94d04bf094 100644 --- a/src/internal/profile/encode.go +++ b/src/internal/profile/encode.go @@ -207,9 +207,6 @@ var profileDecoder = []decoder{ // suffix X) and populates the corresponding exported fields. // The unexported fields are cleared up to facilitate testing. func (p *Profile) postDecode() error { - if p.Empty() { - return nil - } var err error mappings := make(map[uint64]*Mapping) diff --git a/src/internal/profile/profile.go b/src/internal/profile/profile.go index c779bb2b11..02d1bed3de 100644 --- a/src/internal/profile/profile.go +++ b/src/internal/profile/profile.go @@ -141,10 +141,14 @@ func Parse(r io.Reader) (*Profile, error) { } orig = data } - if p, err = parseUncompressed(orig); err != nil { - if p, err = parseLegacy(orig); err != nil { - return nil, fmt.Errorf("parsing profile: %v", err) - } + + var lErr error + p, pErr := parseUncompressed(orig) + if pErr != nil { + p, lErr = parseLegacy(orig) + } + if pErr != nil && lErr != nil { + return nil, fmt.Errorf("parsing profile: not a valid proto profile (%w) or legacy profile (%w)", pErr, lErr) } if err := p.CheckValid(); err != nil { @@ -155,6 +159,7 @@ func Parse(r io.Reader) (*Profile, error) { var errUnrecognized = fmt.Errorf("unrecognized profile format") var errMalformed = fmt.Errorf("malformed profile format") +var ErrNoData = fmt.Errorf("empty input file") func parseLegacy(data []byte) (*Profile, error) { parsers := []func([]byte) (*Profile, error){ @@ -180,6 +185,10 @@ func parseLegacy(data []byte) (*Profile, error) { } func parseUncompressed(data []byte) (*Profile, error) { + if len(data) == 0 { + return nil, ErrNoData + } + p := &Profile{} if err := unmarshal(data, p); err != nil { return nil, err diff --git a/src/internal/profile/profile_test.go b/src/internal/profile/profile_test.go index e1963f3351..84158b6233 100644 --- a/src/internal/profile/profile_test.go +++ b/src/internal/profile/profile_test.go @@ -5,24 +5,9 @@ package profile import ( - "bytes" "testing" ) -func TestEmptyProfile(t *testing.T) { - var buf bytes.Buffer - p, err := Parse(&buf) - if err != nil { - t.Error("Want no error, got", err) - } - if p == nil { - t.Fatal("Want a valid profile, got ") - } - if !p.Empty() { - t.Errorf("Profile should be empty, got %#v", p) - } -} - func TestParseContention(t *testing.T) { tests := []struct { name string diff --git a/src/net/http/pprof/pprof_test.go b/src/net/http/pprof/pprof_test.go index f82ad45bf6..24ad59ab39 100644 --- a/src/net/http/pprof/pprof_test.go +++ b/src/net/http/pprof/pprof_test.go @@ -6,12 +6,14 @@ package pprof import ( "bytes" + "encoding/base64" "fmt" "internal/profile" "internal/testenv" "io" "net/http" "net/http/httptest" + "path/filepath" "runtime" "runtime/pprof" "strings" @@ -261,3 +263,64 @@ func seen(p *profile.Profile, fname string) bool { } return false } + +// TestDeltaProfileEmptyBase validates that we still receive a valid delta +// profile even if the base contains no samples. +// +// Regression test for https://go.dev/issue/64566. +func TestDeltaProfileEmptyBase(t *testing.T) { + if testing.Short() { + // Delta profile collection has a 1s minimum. + t.Skip("skipping in -short mode") + } + + testenv.MustHaveGoRun(t) + + gotool, err := testenv.GoTool() + if err != nil { + t.Fatalf("error finding go tool: %v", err) + } + + out, err := testenv.Command(t, gotool, "run", filepath.Join("testdata", "delta_mutex.go")).CombinedOutput() + if err != nil { + t.Fatalf("error running profile collection: %v\noutput: %s", err, out) + } + + // Log the binary output for debugging failures. + b64 := make([]byte, base64.StdEncoding.EncodedLen(len(out))) + base64.StdEncoding.Encode(b64, out) + t.Logf("Output in base64.StdEncoding: %s", b64) + + p, err := profile.Parse(bytes.NewReader(out)) + if err != nil { + t.Fatalf("Parse got err %v want nil", err) + } + + t.Logf("Output as parsed Profile: %s", p) + + if len(p.SampleType) != 2 { + t.Errorf("len(p.SampleType) got %d want 2", len(p.SampleType)) + } + if p.SampleType[0].Type != "contentions" { + t.Errorf(`p.SampleType[0].Type got %q want "contentions"`, p.SampleType[0].Type) + } + if p.SampleType[0].Unit != "count" { + t.Errorf(`p.SampleType[0].Unit got %q want "count"`, p.SampleType[0].Unit) + } + if p.SampleType[1].Type != "delay" { + t.Errorf(`p.SampleType[1].Type got %q want "delay"`, p.SampleType[1].Type) + } + if p.SampleType[1].Unit != "nanoseconds" { + t.Errorf(`p.SampleType[1].Unit got %q want "nanoseconds"`, p.SampleType[1].Unit) + } + + if p.PeriodType == nil { + t.Fatal("p.PeriodType got nil want not nil") + } + if p.PeriodType.Type != "contentions" { + t.Errorf(`p.PeriodType.Type got %q want "contentions"`, p.PeriodType.Type) + } + if p.PeriodType.Unit != "count" { + t.Errorf(`p.PeriodType.Unit got %q want "count"`, p.PeriodType.Unit) + } +} diff --git a/src/net/http/pprof/testdata/delta_mutex.go b/src/net/http/pprof/testdata/delta_mutex.go new file mode 100644 index 0000000000..634069c8a0 --- /dev/null +++ b/src/net/http/pprof/testdata/delta_mutex.go @@ -0,0 +1,43 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This binary collects a 1s delta mutex profile and dumps it to os.Stdout. +// +// This is in a subprocess because we want the base mutex profile to be empty +// (as a regression test for https://go.dev/issue/64566) and the only way to +// force reset the profile is to create a new subprocess. +// +// This manually collects the HTTP response and dumps to stdout in order to +// avoid any flakiness around port selection for a real HTTP server. +package main + +import ( + "bytes" + "fmt" + "log" + "net/http" + "net/http/pprof" + "net/http/httptest" + "runtime" +) + +func main() { + // Disable the mutex profiler. This is the default, but that default is + // load-bearing for this test, which needs the base profile to be empty. + runtime.SetMutexProfileFraction(0) + + h := pprof.Handler("mutex") + + req := httptest.NewRequest("GET", "/debug/pprof/mutex?seconds=1", nil) + rec := httptest.NewRecorder() + rec.Body = new(bytes.Buffer) + + h.ServeHTTP(rec, req) + resp := rec.Result() + if resp.StatusCode != http.StatusOK { + log.Fatalf("Request failed: %s\n%s", resp.Status, rec.Body) + } + + fmt.Print(rec.Body) +} diff --git a/src/runtime/pprof/proto_test.go b/src/runtime/pprof/proto_test.go index e1a7f2306d..85cd066946 100644 --- a/src/runtime/pprof/proto_test.go +++ b/src/runtime/pprof/proto_test.go @@ -45,7 +45,7 @@ func fmtJSON(x any) string { return string(js) } -func TestConvertCPUProfileEmpty(t *testing.T) { +func TestConvertCPUProfileNoSamples(t *testing.T) { // A test server with mock cpu profile data. var buf bytes.Buffer @@ -64,9 +64,13 @@ func TestConvertCPUProfileEmpty(t *testing.T) { } // Expected PeriodType and SampleType. - sampleType := []*profile.ValueType{{}, {}} + periodType := &profile.ValueType{Type: "cpu", Unit: "nanoseconds"} + sampleType := []*profile.ValueType{ + {Type: "samples", Unit: "count"}, + {Type: "cpu", Unit: "nanoseconds"}, + } - checkProfile(t, p, 2000*1000, nil, sampleType, nil, "") + checkProfile(t, p, 2000*1000, periodType, sampleType, nil, "") } func f1() { f1() } From dca2ef236151e5606a5863d82f1a10289ce77105 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Thu, 7 Dec 2023 11:11:01 -0500 Subject: [PATCH 193/313] runtime: put runtime.fastrand back temporarily Callers should be using math/rand/v2.Uint64 instead, but there are lots of linkname references to runtime.fastrand in public code. If we break it all now, that will require people to use //go:build tags to use rand/v2.Uint64 with Go 1.22 and keep using the linkname for earlier versions. Instead, leave the linkname working and then we can remove it in Go 1.24, at which point everyone should be able to use math/rand/v2.Uint64 unconditionally. Change-Id: I7287ca4f67c270b009562313661cc28a4c2219a4 Reviewed-on: https://go-review.googlesource.com/c/go/+/548235 Reviewed-by: Michael Pratt Reviewed-by: David Chase LUCI-TryBot-Result: Go LUCI Reviewed-by: Cherry Mui Auto-Submit: Russ Cox --- src/runtime/rand.go | 22 ++++++++++++++++++++++ src/runtime/rand_test.go | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/src/runtime/rand.go b/src/runtime/rand.go index 6cb8deef51..10cd116fad 100644 --- a/src/runtime/rand.go +++ b/src/runtime/rand.go @@ -223,3 +223,25 @@ func cheaprandn(n uint32) uint32 { // See https://lemire.me/blog/2016/06/27/a-fast-alternative-to-the-modulo-reduction/ return uint32((uint64(cheaprand()) * uint64(n)) >> 32) } + +// Too much legacy code has go:linkname references +// to runtime.fastrand and friends, so keep these around for now. +// Code should migrate to math/rand/v2.Uint64, +// which is just as fast, but that's only available in Go 1.22+. +// It would be reasonable to remove these in Go 1.24. +// Do not call these from package runtime. + +//go:linkname legacy_fastrand runtime.fastrand +func legacy_fastrand() uint32 { + return uint32(rand()) +} + +//go:linkname legacy_fastrandn runtime.fastrandn +func legacy_fastrandn(n uint32) uint32 { + return randn(n) +} + +//go:linkname legacy_fastrand64 runtime.fastrand64 +func legacy_fastrand64() uint64 { + return rand() +} diff --git a/src/runtime/rand_test.go b/src/runtime/rand_test.go index 94648c5216..baecb6984d 100644 --- a/src/runtime/rand_test.go +++ b/src/runtime/rand_test.go @@ -8,6 +8,7 @@ import ( . "runtime" "strconv" "testing" + _ "unsafe" // for go:linkname ) func TestReadRandom(t *testing.T) { @@ -62,3 +63,35 @@ func BenchmarkFastrandn(b *testing.B) { }) } } + +//go:linkname fastrand runtime.fastrand +func fastrand() uint32 + +//go:linkname fastrandn runtime.fastrandn +func fastrandn(uint32) uint32 + +//go:linkname fastrand64 runtime.fastrand64 +func fastrand64() uint64 + +func TestLegacyFastrand(t *testing.T) { + // Testing mainly that the calls work at all, + // but check that all three don't return the same number (1 in 2^64 chance) + { + x, y, z := fastrand(), fastrand(), fastrand() + if x == y && y == z { + t.Fatalf("fastrand three times = %#x, %#x, %#x, want different numbers", x, y, z) + } + } + { + x, y, z := fastrandn(1e9), fastrandn(1e9), fastrandn(1e9) + if x == y && y == z { + t.Fatalf("fastrandn three times = %#x, %#x, %#x, want different numbers", x, y, z) + } + } + { + x, y, z := fastrand64(), fastrand64(), fastrand64() + if x == y && y == z { + t.Fatalf("fastrand64 three times = %#x, %#x, %#x, want different numbers", x, y, z) + } + } +} From 788a22775931ed6ca26426c5bf78ce3716b304ba Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Thu, 7 Dec 2023 11:09:29 -0800 Subject: [PATCH 194/313] cmd/compile: fix SCCP propagation into jump tables We can't delete all the outgoing edges and then add one back in, because then we've lost the argument of any phi at the target. Instead, move the important target to the front of the list and delete the rest. This normally isn't a problem, because there is never normally a phi at the target of a jump table. But this isn't quite true when in race build mode, because there is a phi of the result of a bunch of raceread calls. The reason this happens is that each case is written like this (where e is the runtime.eface we're switching on): if e.type == $type.int32 { m = raceread(e.data, m1) } m2 = phi(m1, m) if e.type == $type.int32 { .. do case .. goto blah } so that if e.type is not $type.int32, it falls through to the default case. This default case will have a memory phi for all the (jumped around and not actually called) raceread calls. If we instead did it like if e.type == $type.int32 { raceread(e.data) .. do case .. goto blah } That would paper over this bug, as it is the only way to construct a jump table whose target is a block with a phi in it. (Yet.) But we'll fix the underlying bug in this CL. Maybe we can do the rewrite mentioned above later. (It is an optimization for -race mode, which isn't particularly important.) Fixes #64606 Change-Id: I6f6e3c90eb1e2638112920ee2e5b6581cef04ea4 Reviewed-on: https://go-review.googlesource.com/c/go/+/548356 Reviewed-by: Keith Randall Reviewed-by: David Chase LUCI-TryBot-Result: Go LUCI --- src/cmd/compile/internal/ssa/block.go | 17 ++++++++++++- src/cmd/compile/internal/ssa/deadcode.go | 2 ++ src/cmd/compile/internal/ssa/sccp.go | 8 +++--- test/fixedbugs/issue64606.go | 32 ++++++++++++++++++++++++ 4 files changed, 54 insertions(+), 5 deletions(-) create mode 100644 test/fixedbugs/issue64606.go diff --git a/src/cmd/compile/internal/ssa/block.go b/src/cmd/compile/internal/ssa/block.go index 4a24a181e5..26af10b59c 100644 --- a/src/cmd/compile/internal/ssa/block.go +++ b/src/cmd/compile/internal/ssa/block.go @@ -297,6 +297,8 @@ func (b *Block) removePred(i int) { // removeSucc removes the ith output edge from b. // It is the responsibility of the caller to remove // the corresponding predecessor edge. +// Note that this potentially reorders successors of b, so it +// must be used very carefully. func (b *Block) removeSucc(i int) { n := len(b.Succs) - 1 if i != n { @@ -323,6 +325,19 @@ func (b *Block) swapSuccessors() { b.Likely *= -1 } +// Swaps b.Succs[x] and b.Succs[y]. +func (b *Block) swapSuccessorsByIdx(x, y int) { + if x == y { + return + } + ex := b.Succs[x] + ey := b.Succs[y] + b.Succs[x] = ey + b.Succs[y] = ex + ex.b.Preds[ex.i].i = y + ey.b.Preds[ey.i].i = x +} + // removePhiArg removes the ith arg from phi. // It must be called after calling b.removePred(i) to // adjust the corresponding phi value of the block: @@ -339,7 +354,7 @@ func (b *Block) swapSuccessors() { func (b *Block) removePhiArg(phi *Value, i int) { n := len(b.Preds) if numPhiArgs := len(phi.Args); numPhiArgs-1 != n { - b.Fatalf("inconsistent state, num predecessors: %d, num phi args: %d", n, numPhiArgs) + b.Fatalf("inconsistent state for %v, num predecessors: %d, num phi args: %d", phi, n, numPhiArgs) } phi.Args[i].Uses-- phi.Args[i] = phi.Args[n] diff --git a/src/cmd/compile/internal/ssa/deadcode.go b/src/cmd/compile/internal/ssa/deadcode.go index ae9fd2ef24..3bd1737bab 100644 --- a/src/cmd/compile/internal/ssa/deadcode.go +++ b/src/cmd/compile/internal/ssa/deadcode.go @@ -312,6 +312,8 @@ func deadcode(f *Func) { // removeEdge removes the i'th outgoing edge from b (and // the corresponding incoming edge from b.Succs[i].b). +// Note that this potentially reorders successors of b, so it +// must be used very carefully. func (b *Block) removeEdge(i int) { e := b.Succs[i] c := e.b diff --git a/src/cmd/compile/internal/ssa/sccp.go b/src/cmd/compile/internal/ssa/sccp.go index 3c109548ab..86c6117d87 100644 --- a/src/cmd/compile/internal/ssa/sccp.go +++ b/src/cmd/compile/internal/ssa/sccp.go @@ -533,12 +533,12 @@ func rewireSuccessor(block *Block, constVal *Value) bool { block.ResetControls() return true case BlockJumpTable: + // Remove everything but the known taken branch. idx := int(constVal.AuxInt) - targetBlock := block.Succs[idx].b - for len(block.Succs) > 0 { - block.removeEdge(0) + block.swapSuccessorsByIdx(0, idx) + for len(block.Succs) > 1 { + block.removeEdge(1) } - block.AddEdgeTo(targetBlock) block.Kind = BlockPlain block.Likely = BranchUnknown block.ResetControls() diff --git a/test/fixedbugs/issue64606.go b/test/fixedbugs/issue64606.go new file mode 100644 index 0000000000..9b53c1041f --- /dev/null +++ b/test/fixedbugs/issue64606.go @@ -0,0 +1,32 @@ +// build -race + +//go:build race + +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +func main() { + var o any = uint64(5) + switch o.(type) { + case int: + goto ret + case int8: + goto ret + case int16: + goto ret + case int32: + goto ret + case int64: + goto ret + case float32: + goto ret + case float64: + goto ret + default: + goto ret + } +ret: +} From 4bf1ca4b0ce9a08f4c45d68fe49857914f668f69 Mon Sep 17 00:00:00 2001 From: Raghvender Date: Mon, 20 Nov 2023 19:43:13 -0600 Subject: [PATCH 195/313] cmd/compile: fix error message for mismatch between the number of type params and arguments Fixes #64276 Change-Id: Ib6651669904e6ea0daf275d85d8bd008b8b21cc6 Reviewed-on: https://go-review.googlesource.com/c/go/+/544018 Reviewed-by: raghvender sundarjee Reviewed-by: Dmitri Shuralyov Auto-Submit: Robert Griesemer Reviewed-by: Robert Griesemer Run-TryBot: Robert Griesemer TryBot-Result: Gopher Robot --- .../compile/internal/types2/instantiate.go | 35 ++++++++++++------- src/cmd/compile/internal/types2/typexpr.go | 2 +- src/go/types/instantiate.go | 35 ++++++++++++------- src/go/types/typexpr.go | 2 +- .../types/testdata/check/typeinference.go | 34 +++++++++++------- .../types/testdata/check/typeinst0.go | 2 +- .../types/testdata/fixedbugs/issue49541.go | 4 +-- .../types/testdata/fixedbugs/issue50929.go | 12 +++---- .../types/testdata/fixedbugs/issue51232.go | 10 +++--- .../types/testdata/fixedbugs/issue51233.go | 8 ++--- .../types/testdata/fixedbugs/issue51339.go | 8 +++-- test/typeparam/issue51232.go | 10 +++--- test/typeparam/issue51233.go | 8 ++--- 13 files changed, 100 insertions(+), 70 deletions(-) diff --git a/src/cmd/compile/internal/types2/instantiate.go b/src/cmd/compile/internal/types2/instantiate.go index 0c6b202ff9..e33d4b41c2 100644 --- a/src/cmd/compile/internal/types2/instantiate.go +++ b/src/cmd/compile/internal/types2/instantiate.go @@ -122,7 +122,8 @@ func (check *Checker) instance(pos syntax.Pos, orig Type, targs []Type, expandin assert(expanding == nil) // function instances cannot be reached from Named types tparams := orig.TypeParams() - if !check.validateTArgLen(pos, tparams.Len(), len(targs)) { + // TODO(gri) investigate if this is needed (type argument and parameter count seem to be correct here) + if !check.validateTArgLen(pos, orig.String(), tparams.Len(), len(targs)) { return Typ[Invalid] } if tparams.Len() == 0 { @@ -150,19 +151,27 @@ func (check *Checker) instance(pos syntax.Pos, orig Type, targs []Type, expandin return updateContexts(res) } -// validateTArgLen verifies that the length of targs and tparams matches, -// reporting an error if not. If validation fails and check is nil, -// validateTArgLen panics. -func (check *Checker) validateTArgLen(pos syntax.Pos, ntparams, ntargs int) bool { - if ntargs != ntparams { - // TODO(gri) provide better error message - if check != nil { - check.errorf(pos, WrongTypeArgCount, "got %d arguments but %d type parameters", ntargs, ntparams) - return false - } - panic(fmt.Sprintf("%v: got %d arguments but %d type parameters", pos, ntargs, ntparams)) +// validateTArgLen checks that the number of type arguments (got) matches the +// number of type parameters (want); if they don't match an error is reported. +// If validation fails and check is nil, validateTArgLen panics. +func (check *Checker) validateTArgLen(pos syntax.Pos, name string, want, got int) bool { + var qual string + switch { + case got < want: + qual = "not enough" + case got > want: + qual = "too many" + default: + return true } - return true + + msg := check.sprintf("%s type arguments for type %s: have %d, want %d", qual, name, got, want) + if check != nil { + check.error(atPos(pos), WrongTypeArgCount, msg) + return false + } + + panic(fmt.Sprintf("%v: %s", pos, msg)) } func (check *Checker) verify(pos syntax.Pos, tparams []*TypeParam, targs []Type, ctxt *Context) (int, error) { diff --git a/src/cmd/compile/internal/types2/typexpr.go b/src/cmd/compile/internal/types2/typexpr.go index 0ee92be6ee..81adcbd9cf 100644 --- a/src/cmd/compile/internal/types2/typexpr.go +++ b/src/cmd/compile/internal/types2/typexpr.go @@ -463,7 +463,7 @@ func (check *Checker) instantiatedType(x syntax.Expr, xlist []syntax.Expr, def * // errors. check.recordInstance(x, inst.TypeArgs().list(), inst) - if check.validateTArgLen(x.Pos(), inst.TypeParams().Len(), inst.TypeArgs().Len()) { + if check.validateTArgLen(x.Pos(), inst.obj.name, inst.TypeParams().Len(), inst.TypeArgs().Len()) { if i, err := check.verify(x.Pos(), inst.TypeParams().list(), inst.TypeArgs().list(), check.context()); err != nil { // best position for error reporting pos := x.Pos() diff --git a/src/go/types/instantiate.go b/src/go/types/instantiate.go index 34dfd85a26..bf7ecc5316 100644 --- a/src/go/types/instantiate.go +++ b/src/go/types/instantiate.go @@ -124,7 +124,8 @@ func (check *Checker) instance(pos token.Pos, orig Type, targs []Type, expanding assert(expanding == nil) // function instances cannot be reached from Named types tparams := orig.TypeParams() - if !check.validateTArgLen(pos, tparams.Len(), len(targs)) { + // TODO(gri) investigate if this is needed (type argument and parameter count seem to be correct here) + if !check.validateTArgLen(pos, orig.String(), tparams.Len(), len(targs)) { return Typ[Invalid] } if tparams.Len() == 0 { @@ -152,19 +153,27 @@ func (check *Checker) instance(pos token.Pos, orig Type, targs []Type, expanding return updateContexts(res) } -// validateTArgLen verifies that the length of targs and tparams matches, -// reporting an error if not. If validation fails and check is nil, -// validateTArgLen panics. -func (check *Checker) validateTArgLen(pos token.Pos, ntparams, ntargs int) bool { - if ntargs != ntparams { - // TODO(gri) provide better error message - if check != nil { - check.errorf(atPos(pos), WrongTypeArgCount, "got %d arguments but %d type parameters", ntargs, ntparams) - return false - } - panic(fmt.Sprintf("%v: got %d arguments but %d type parameters", pos, ntargs, ntparams)) +// validateTArgLen checks that the number of type arguments (got) matches the +// number of type parameters (want); if they don't match an error is reported. +// If validation fails and check is nil, validateTArgLen panics. +func (check *Checker) validateTArgLen(pos token.Pos, name string, want, got int) bool { + var qual string + switch { + case got < want: + qual = "not enough" + case got > want: + qual = "too many" + default: + return true } - return true + + msg := check.sprintf("%s type arguments for type %s: have %d, want %d", qual, name, got, want) + if check != nil { + check.error(atPos(pos), WrongTypeArgCount, msg) + return false + } + + panic(fmt.Sprintf("%v: %s", pos, msg)) } func (check *Checker) verify(pos token.Pos, tparams []*TypeParam, targs []Type, ctxt *Context) (int, error) { diff --git a/src/go/types/typexpr.go b/src/go/types/typexpr.go index 2835958d98..c887b5115a 100644 --- a/src/go/types/typexpr.go +++ b/src/go/types/typexpr.go @@ -454,7 +454,7 @@ func (check *Checker) instantiatedType(ix *typeparams.IndexExpr, def *TypeName) // errors. check.recordInstance(ix.Orig, inst.TypeArgs().list(), inst) - if check.validateTArgLen(ix.Pos(), inst.TypeParams().Len(), inst.TypeArgs().Len()) { + if check.validateTArgLen(ix.Pos(), inst.obj.name, inst.TypeParams().Len(), inst.TypeArgs().Len()) { if i, err := check.verify(ix.Pos(), inst.TypeParams().list(), inst.TypeArgs().list(), check.context()); err != nil { // best position for error reporting pos := ix.Pos() diff --git a/src/internal/types/testdata/check/typeinference.go b/src/internal/types/testdata/check/typeinference.go index 0478d9390f..8dac938ef9 100644 --- a/src/internal/types/testdata/check/typeinference.go +++ b/src/internal/types/testdata/check/typeinference.go @@ -8,8 +8,9 @@ package typeInference // basic inference type Tb[P ~*Q, Q any] int + func _() { - var x Tb /* ERROR "got 1 arguments" */ [*int] + var x Tb /* ERROR "not enough type arguments for type Tb: have 1, want 2" */ [*int] var y Tb[*int, int] x = y /* ERRORx `cannot use y .* in assignment` */ _ = x @@ -17,8 +18,9 @@ func _() { // recursive inference type Tr[A any, B *C, C *D, D *A] int + func _() { - var x Tr /* ERROR "got 1 arguments" */ [string] + var x Tr /* ERROR "not enough type arguments for type Tr: have 1, want 4" */ [string] var y Tr[string, ***string, **string, *string] var z Tr[int, ***int, **int, *int] x = y /* ERRORx `cannot use y .* in assignment` */ @@ -28,22 +30,30 @@ func _() { // other patterns of inference type To0[A any, B []A] int -type To1[A any, B struct{a A}] int +type To1[A any, B struct{ a A }] int type To2[A any, B [][]A] int type To3[A any, B [3]*A] int -type To4[A any, B any, C struct{a A; b B}] int +type To4[A any, B any, C struct { + a A + b B +}] int + func _() { - var _ To0 /* ERROR "got 1 arguments" */ [int] - var _ To1 /* ERROR "got 1 arguments" */ [int] - var _ To2 /* ERROR "got 1 arguments" */ [int] - var _ To3 /* ERROR "got 1 arguments" */ [int] - var _ To4 /* ERROR "got 2 arguments" */ [int, string] + var _ To0 /* ERROR "not enough type arguments for type To0: have 1, want 2" */ [int] + var _ To1 /* ERROR "not enough type arguments for type To1: have 1, want 2" */ [int] + var _ To2 /* ERROR "not enough type arguments for type To2: have 1, want 2" */ [int] + var _ To3 /* ERROR "not enough type arguments for type To3: have 1, want 2" */ [int] + var _ To4 /* ERROR "not enough type arguments for type To4: have 2, want 3" */ [int, string] } // failed inference type Tf0[A, B any] int -type Tf1[A any, B ~struct{a A; c C}, C any] int +type Tf1[A any, B ~struct { + a A + c C +}, C any] int + func _() { - var _ Tf0 /* ERROR "got 1 arguments but 2 type parameters" */ [int] - var _ Tf1 /* ERROR "got 1 arguments but 3 type parameters" */ [int] + var _ Tf0 /* ERROR "not enough type arguments for type Tf0: have 1, want 2" */ [int] + var _ Tf1 /* ERROR "not enough type arguments for type Tf1: have 1, want 3" */ [int] } diff --git a/src/internal/types/testdata/check/typeinst0.go b/src/internal/types/testdata/check/typeinst0.go index bbcdaec04a..155f1ef440 100644 --- a/src/internal/types/testdata/check/typeinst0.go +++ b/src/internal/types/testdata/check/typeinst0.go @@ -42,7 +42,7 @@ type _ myInt /* ERROR "not a generic type" */ [] // ERROR "expected type argumen // TODO(gri) better error messages type _ T1[] // ERROR "expected type argument list" type _ T1[x /* ERROR "not a type" */ ] -type _ T1 /* ERROR "got 2 arguments but 1 type parameters" */ [int, float32] +type _ T1 /* ERROR "too many type arguments for type T1: have 2, want 1" */ [int, float32] var _ T2[int] = T2[int]{} diff --git a/src/internal/types/testdata/fixedbugs/issue49541.go b/src/internal/types/testdata/fixedbugs/issue49541.go index da3731195b..665ed1da7c 100644 --- a/src/internal/types/testdata/fixedbugs/issue49541.go +++ b/src/internal/types/testdata/fixedbugs/issue49541.go @@ -13,7 +13,7 @@ func (S[A, B]) m() {} // TODO(gri): with type-type inference enabled we should only report one error // below. See issue #50588. -func _[A any](s S /* ERROR "got 1 arguments but 2 type parameters" */ [A]) { +func _[A any](s S /* ERROR "not enough type arguments for type S: have 1, want 2" */ [A]) { // we should see no follow-on errors below s.f = 1 s.m() @@ -22,7 +22,7 @@ func _[A any](s S /* ERROR "got 1 arguments but 2 type parameters" */ [A]) { // another test case from the issue func _() { - X /* ERROR "cannot infer Q" */ (Interface[*F /* ERROR "got 1 arguments but 2 type parameters" */ [string]](Impl{})) + X /* ERROR "cannot infer Q" */ (Interface[*F /* ERROR "not enough type arguments for type F: have 1, want 2" */ [string]](Impl{})) } func X[Q Qer](fs Interface[Q]) { diff --git a/src/internal/types/testdata/fixedbugs/issue50929.go b/src/internal/types/testdata/fixedbugs/issue50929.go index 64c7cd664f..a665e229be 100644 --- a/src/internal/types/testdata/fixedbugs/issue50929.go +++ b/src/internal/types/testdata/fixedbugs/issue50929.go @@ -16,7 +16,7 @@ func G[A, B any](F[A, B]) { func _() { // TODO(gri) only report one error below (issue #50932) - var x F /* ERROR "got 1 arguments but 2 type parameters" */ [int] + var x F /* ERROR "not enough type arguments for type F: have 1, want 2" */ [int] G(x /* ERROR "does not match" */) } @@ -46,9 +46,9 @@ func NSG[G any](c RSC[G]) { fmt.Println(c) } -func MMD[Rc RC /* ERROR "got 1 arguments" */ [RG], RG any, G any]() M /* ERROR "got 2 arguments" */ [Rc, RG] { +func MMD[Rc RC /* ERROR "not enough type arguments for type RC: have 1, want 2" */ [RG], RG any, G any]() M /* ERROR "not enough type arguments for type" */ [Rc, RG] { - var nFn NFn /* ERROR "got 2 arguments" */ [Rc, RG] + var nFn NFn /* ERROR "not enough type arguments for type NFn: have 2, want 3" */ [Rc, RG] var empty Rc switch any(empty).(type) { @@ -58,11 +58,11 @@ func MMD[Rc RC /* ERROR "got 1 arguments" */ [RG], RG any, G any]() M /* ERROR " nFn = NSG /* ERROR "cannot use NSG[G]" */ [G] } - return M /* ERROR "got 2 arguments" */ [Rc, RG]{ + return M /* ERROR "not enough type arguments for type M: have 2, want 3" */ [Rc, RG]{ Fn: func(rc Rc) { - NC(nFn /* ERROR "does not match" */ ) + NC(nFn /* ERROR "does not match" */) }, } - return M /* ERROR "got 2 arguments" */ [Rc, RG]{} + return M /* ERROR "not enough type arguments for type M: have 2, want 3" */ [Rc, RG]{} } diff --git a/src/internal/types/testdata/fixedbugs/issue51232.go b/src/internal/types/testdata/fixedbugs/issue51232.go index 27693a3e4d..c5832d2976 100644 --- a/src/internal/types/testdata/fixedbugs/issue51232.go +++ b/src/internal/types/testdata/fixedbugs/issue51232.go @@ -11,20 +11,20 @@ type RC[RG any] interface { type Fn[RCT RC[RG], RG any] func(RCT) type F[RCT RC[RG], RG any] interface { - Fn() Fn /* ERROR "got 1 arguments" */ [RCT] + Fn() Fn /* ERROR "not enough type arguments for type Fn: have 1, want 2" */ [RCT] } type concreteF[RCT RC[RG], RG any] struct { - makeFn func() Fn /* ERROR "got 1 arguments" */ [RCT] + makeFn func() Fn /* ERROR "not enough type arguments for type Fn: have 1, want 2" */ [RCT] } -func (c *concreteF[RCT, RG]) Fn() Fn /* ERROR "got 1 arguments" */ [RCT] { +func (c *concreteF[RCT, RG]) Fn() Fn /* ERROR "not enough type arguments for type Fn: have 1, want 2" */ [RCT] { return c.makeFn() } -func NewConcrete[RCT RC[RG], RG any](Rc RCT) F /* ERROR "got 1 arguments" */ [RCT] { +func NewConcrete[RCT RC[RG], RG any](Rc RCT) F /* ERROR "not enough type arguments for type F: have 1, want 2" */ [RCT] { // TODO(rfindley): eliminate the duplicate error below. - return & /* ERRORx `cannot use .* as F\[RCT\]` */ concreteF /* ERROR "got 1 arguments" */ [RCT]{ + return & /* ERRORx `cannot use .* as F\[RCT\]` */ concreteF /* ERROR "not enough type arguments for type concreteF: have 1, want 2" */ [RCT]{ makeFn: nil, } } diff --git a/src/internal/types/testdata/fixedbugs/issue51233.go b/src/internal/types/testdata/fixedbugs/issue51233.go index e2f97fc456..d96d3d1aa0 100644 --- a/src/internal/types/testdata/fixedbugs/issue51233.go +++ b/src/internal/types/testdata/fixedbugs/issue51233.go @@ -12,16 +12,16 @@ type RC[RG any] interface { type Fn[RCT RC[RG], RG any] func(RCT) -type FFn[RCT RC[RG], RG any] func() Fn /* ERROR "got 1 arguments" */ [RCT] +type FFn[RCT RC[RG], RG any] func() Fn /* ERROR "not enough type arguments for type Fn: have 1, want 2" */ [RCT] type F[RCT RC[RG], RG any] interface { - Fn() Fn /* ERROR "got 1 arguments" */ [RCT] + Fn() Fn /* ERROR "not enough type arguments for type Fn: have 1, want 2" */ [RCT] } type concreteF[RCT RC[RG], RG any] struct { - makeFn FFn /* ERROR "got 1 arguments" */ [RCT] + makeFn FFn /* ERROR "not enough type arguments for type FFn: have 1, want 2" */ [RCT] } -func (c *concreteF[RCT, RG]) Fn() Fn /* ERROR "got 1 arguments" */ [RCT] { +func (c *concreteF[RCT, RG]) Fn() Fn /* ERROR "not enough type arguments for type Fn: have 1, want 2" */ [RCT] { return c.makeFn() } diff --git a/src/internal/types/testdata/fixedbugs/issue51339.go b/src/internal/types/testdata/fixedbugs/issue51339.go index 65c213462b..fd10daa2c2 100644 --- a/src/internal/types/testdata/fixedbugs/issue51339.go +++ b/src/internal/types/testdata/fixedbugs/issue51339.go @@ -9,10 +9,12 @@ package p type T[P any, B *P] struct{} -func (T /* ERROR "cannot use generic type" */ ) m0() {} +func (T /* ERROR "cannot use generic type" */) m0() {} // TODO(rfindley): eliminate the duplicate errors here. -func (/* ERROR "got 1 type parameter, but receiver base type declares 2" */ T /* ERROR "got 1 arguments but 2 type parameters" */ [_]) m1() {} +func ( /* ERROR "got 1 type parameter, but receiver base type declares 2" */ T /* ERROR "not enough type arguments for type" */ [_]) m1() { +} func (T[_, _]) m2() {} + // TODO(gri) this error is unfortunate (issue #51343) -func (T /* ERROR "got 3 arguments but 2 type parameters" */ [_, _, _]) m3() {} +func (T /* ERROR "too many type arguments for type" */ [_, _, _]) m3() {} diff --git a/test/typeparam/issue51232.go b/test/typeparam/issue51232.go index 0d25e1863d..f4728f6e7c 100644 --- a/test/typeparam/issue51232.go +++ b/test/typeparam/issue51232.go @@ -13,19 +13,19 @@ type RC[RG any] interface { type Fn[RCT RC[RG], RG any] func(RCT) type F[RCT RC[RG], RG any] interface { - Fn() Fn[RCT] // ERROR "got 1 arguments" + Fn() Fn[RCT] // ERROR "not enough type arguments for type Fn: have 1, want 2" } type concreteF[RCT RC[RG], RG any] struct { - makeFn func() Fn[RCT] // ERROR "got 1 arguments" + makeFn func() Fn[RCT] // ERROR "not enough type arguments for type Fn: have 1, want 2" } -func (c *concreteF[RCT, RG]) Fn() Fn[RCT] { // ERROR "got 1 arguments" +func (c *concreteF[RCT, RG]) Fn() Fn[RCT] { // ERROR "not enough type arguments for type Fn: have 1, want 2" return c.makeFn() } -func NewConcrete[RCT RC[RG], RG any](Rc RCT) F[RCT] { // ERROR "got 1 arguments" - return &concreteF[RCT]{ // ERROR "cannot use" "got 1 arguments" +func NewConcrete[RCT RC[RG], RG any](Rc RCT) F[RCT] { // ERROR "not enough type arguments for type F: have 1, want 2" + return &concreteF[RCT]{ // ERROR "cannot use" "not enough type arguments for type concreteF: have 1, want 2" makeFn: nil, } } diff --git a/test/typeparam/issue51233.go b/test/typeparam/issue51233.go index 96a25ddb9c..5f2a045d84 100644 --- a/test/typeparam/issue51233.go +++ b/test/typeparam/issue51233.go @@ -13,16 +13,16 @@ type RC[RG any] interface { type Fn[RCT RC[RG], RG any] func(RCT) -type FFn[RCT RC[RG], RG any] func() Fn[RCT] // ERROR "got 1 arguments" +type FFn[RCT RC[RG], RG any] func() Fn[RCT] // ERROR "not enough type arguments for type Fn: have 1, want 2" type F[RCT RC[RG], RG any] interface { - Fn() Fn[RCT] // ERROR "got 1 arguments" + Fn() Fn[RCT] // ERROR "not enough type arguments for type Fn: have 1, want 2" } type concreteF[RCT RC[RG], RG any] struct { - makeFn FFn[RCT] // ERROR "got 1 arguments" + makeFn FFn[RCT] // ERROR "not enough type arguments for type FFn: have 1, want 2" } -func (c *concreteF[RCT, RG]) Fn() Fn[RCT] { // ERROR "got 1 arguments" +func (c *concreteF[RCT, RG]) Fn() Fn[RCT] { // ERROR "not enough type arguments for type Fn: have 1, want 2" return c.makeFn() } From 78b42a5338aa1fa293acc5bbb7ef9122a7acc2ba Mon Sep 17 00:00:00 2001 From: eric fang Date: Wed, 6 Dec 2023 03:41:13 +0000 Subject: [PATCH 196/313] cmd/internal/obj/arm64: fix invalid register pair for LDP ZR register can be used in register pair of LDP, LDPW and LDPSW instructions, but now it's not allowed. This CL fixes this issue. Change-Id: I8467502de4664214e0b7dad0295c44f6cff16ee6 Reviewed-on: https://go-review.googlesource.com/c/go/+/547815 TryBot-Result: Gopher Robot Reviewed-by: Cherry Mui Reviewed-by: David Chase Run-TryBot: Eric Fang --- src/cmd/asm/internal/asm/testdata/arm64.s | 3 +++ src/cmd/asm/internal/asm/testdata/arm64error.s | 1 - src/cmd/internal/obj/arm64/asm7.go | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/cmd/asm/internal/asm/testdata/arm64.s b/src/cmd/asm/internal/asm/testdata/arm64.s index 12b4e3255e..ecad08b37a 100644 --- a/src/cmd/asm/internal/asm/testdata/arm64.s +++ b/src/cmd/asm/internal/asm/testdata/arm64.s @@ -1011,6 +1011,7 @@ next: LDP -8(R0), (R1, R2) // 01887fa9 LDP x(SB), (R1, R2) LDP x+8(SB), (R1, R2) + LDP 8(R1), (ZR, R2) // 3f8840a9 LDPW -5(R0), (R1, R2) // 1b1400d1610b4029 LDPW (R0), (R1, R2) // 01084029 LDPW 4(R0), (R1, R2) // 01884029 @@ -1028,6 +1029,7 @@ next: LDPW 1024(RSP), (R1, R2) // fb031091610b4029 LDPW x(SB), (R1, R2) LDPW x+8(SB), (R1, R2) + LDPW 8(R1), (ZR, R2) // 3f084129 LDPSW (R0), (R1, R2) // 01084069 LDPSW 4(R0), (R1, R2) // 01884069 LDPSW -4(R0), (R1, R2) // 01887f69 @@ -1044,6 +1046,7 @@ next: LDPSW 1024(RSP), (R1, R2) // fb031091610b4069 LDPSW x(SB), (R1, R2) LDPSW x+8(SB), (R1, R2) + LDPSW 8(R1), (ZR, R2) // 3f084169 STP (R3, R4), (R5) // a31000a9 STP (R3, R4), 8(R5) // a39000a9 STP.W (R3, R4), 8(R5) // a39080a9 diff --git a/src/cmd/asm/internal/asm/testdata/arm64error.s b/src/cmd/asm/internal/asm/testdata/arm64error.s index e1eafa2b46..3ac8788424 100644 --- a/src/cmd/asm/internal/asm/testdata/arm64error.s +++ b/src/cmd/asm/internal/asm/testdata/arm64error.s @@ -66,7 +66,6 @@ TEXT errors(SB),$0 LDP.W 8(R3), (R2, R3) // ERROR "constrained unpredictable behavior" LDP (R1), (R2, R2) // ERROR "constrained unpredictable behavior" LDP (R0), (F0, F1) // ERROR "invalid register pair" - LDP (R0), (R3, ZR) // ERROR "invalid register pair" LDXPW (RSP), (R2, R2) // ERROR "constrained unpredictable behavior" LDAXPW (R5), (R2, R2) // ERROR "constrained unpredictable behavior" MOVD.P 300(R2), R3 // ERROR "offset out of range [-256,255]" diff --git a/src/cmd/internal/obj/arm64/asm7.go b/src/cmd/internal/obj/arm64/asm7.go index 0991ec9201..03f0fb06da 100644 --- a/src/cmd/internal/obj/arm64/asm7.go +++ b/src/cmd/internal/obj/arm64/asm7.go @@ -7741,7 +7741,7 @@ func (c *ctxt7) opldpstp(p *obj.Prog, o *Optab, vo int32, rbase, rl, rh int16, l c.ctxt.Diag("invalid register pair %v\n", p) } case ALDP, ALDPW, ALDPSW: - if rl < REG_R0 || REG_R30 < rl || rh < REG_R0 || REG_R30 < rh { + if rl < REG_R0 || REG_R31 < rl || rh < REG_R0 || REG_R31 < rh { c.ctxt.Diag("invalid register pair %v\n", p) } case ASTP, ASTPW: From 6cdf2ccae8a30b20c82bf01e7989f0971d1a4764 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Fri, 8 Dec 2023 12:20:35 -0500 Subject: [PATCH 197/313] cmd/go: relax version regexp from CL 547998 In CL 547998 I relaxed cmd/go's parsing of version lines to allow it to recognize clang versions with vendor prefixes. To prevent false-positives, I added a check for a version 3-tuple following the word "version". However, it appears that some releases of GCC use only a 2-tuple instead. Updates #64423. Fixes #64619. Change-Id: I5f1d0881b6295544a46ab958c6ad4c2155cf51fe Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest,gotip-windows-amd64-longtest Reviewed-on: https://go-review.googlesource.com/c/go/+/548120 TryBot-Result: Gopher Robot Reviewed-by: Michael Matloob Run-TryBot: Bryan Mills Auto-Submit: Bryan Mills LUCI-TryBot-Result: Go LUCI --- src/cmd/go/internal/work/buildid.go | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/cmd/go/internal/work/buildid.go b/src/cmd/go/internal/work/buildid.go index 0769443712..bf923d0d5e 100644 --- a/src/cmd/go/internal/work/buildid.go +++ b/src/cmd/go/internal/work/buildid.go @@ -9,7 +9,6 @@ import ( "fmt" "os" "os/exec" - "regexp" "strings" "cmd/go/internal/base" @@ -237,7 +236,6 @@ func (b *Builder) gccToolID(name, language string) (id, exe string, err error) { } version := "" - gccVersionRE := regexp.MustCompile(`^[0-9]+\.[0-9]+\.[0-9]+`) lines := strings.Split(string(out), "\n") for _, line := range lines { fields := strings.Fields(line) @@ -247,9 +245,18 @@ func (b *Builder) gccToolID(name, language string) (id, exe string, err error) { // contain arbitrary substrings. break } - if field == "version" && i < len(fields)-1 && gccVersionRE.MatchString(fields[i+1]) { - version = line - break + if field == "version" && i < len(fields)-1 { + // Check that the next field is plausibly a version number. + // We require only that it begins with an ASCII digit, + // since we don't know what version numbering schemes a given + // C compiler may use. (Clang and GCC mostly seem to follow the scheme X.Y.Z, + // but in https://go.dev/issue/64619 we saw "8.3 [DragonFly]", and who knows + // what other C compilers like "zig cc" might report?) + next := fields[i+1] + if len(next) > 0 && next[0] >= '0' && next[0] <= '9' { + version = line + break + } } } if version != "" { From e1cba47ee06d59751e09fc8777ee9c57211018a5 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Thu, 7 Dec 2023 21:08:17 -0800 Subject: [PATCH 198/313] go/parser: fix panic in object resolution for invalid type parameter list This change restores the original logic in parseParameterList to what it was before CL 538858 (which caused the issue), not in exact wording but in identical semantic meaning, and thus restores this function to a state that we know was working fine. However, the change keeps the improved error reporting introduced by CL 538858. To keep the code changes somewhat minimal as we are close to RC1, the improved error handling exists twice for now even though it could be factored out. Fixes #64534. Change-Id: I0b7bbf74d28811e8aae74f838f2d424f78af1f38 Reviewed-on: https://go-review.googlesource.com/c/go/+/548395 Reviewed-by: Alan Donovan Run-TryBot: Robert Griesemer Reviewed-by: Robert Griesemer Auto-Submit: Robert Griesemer TryBot-Result: Gopher Robot --- src/go/parser/parser.go | 28 +++++++++++++++++++++++++-- src/go/parser/testdata/issue64534.src | 10 ++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 src/go/parser/testdata/issue64534.src diff --git a/src/go/parser/parser.go b/src/go/parser/parser.go index a28960523e..17808b366f 100644 --- a/src/go/parser/parser.go +++ b/src/go/parser/parser.go @@ -881,6 +881,13 @@ func (p *parser) parseParameterList(name0 *ast.Ident, typ0 ast.Expr, closing tok // Type parameters are the only parameter list closed by ']'. tparams := closing == token.RBRACK + pos0 := p.pos + if name0 != nil { + pos0 = name0.Pos() + } else if typ0 != nil { + pos0 = typ0.Pos() + } + // Note: The code below matches the corresponding code in the syntax // parser closely. Changes must be reflected in either parser. // For the code to match, we use the local []field list that @@ -923,8 +930,8 @@ func (p *parser) parseParameterList(name0 *ast.Ident, typ0 ast.Expr, closing tok } // distribute parameter types (len(list) > 0) - if named == 0 && !tparams { - // all unnamed and we're not in a type parameter list => found names are type names + if named == 0 { + // all unnamed => found names are type names for i := 0; i < len(list); i++ { par := &list[i] if typ := par.name; typ != nil { @@ -932,6 +939,23 @@ func (p *parser) parseParameterList(name0 *ast.Ident, typ0 ast.Expr, closing tok par.name = nil } } + if tparams { + // This is the same error handling as below, adjusted for type parameters only. + // See comment below for details. (go.dev/issue/64534) + var errPos token.Pos + var msg string + if named == typed /* same as typed == 0 */ { + errPos = p.pos // position error at closing ] + msg = "missing type constraint" + } else { + errPos = pos0 // position at opening [ or first name + msg = "missing type parameter name" + if len(list) == 1 { + msg += " or invalid array length" + } + } + p.error(errPos, msg) + } } else if named != len(list) { // some named or we're in a type parameter list => all must be named var errPos token.Pos // left-most error position (or invalid) diff --git a/src/go/parser/testdata/issue64534.src b/src/go/parser/testdata/issue64534.src new file mode 100644 index 0000000000..006cc934a1 --- /dev/null +++ b/src/go/parser/testdata/issue64534.src @@ -0,0 +1,10 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Test case for go.dev/issue/64534. +// Parser should not panic during object resolution. + +package main + +func _[A /* ERROR "missing type parameter name" */ $(B](){}} From aa4a95011cf13e2a4ca39032dca932de16cb3b4b Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Fri, 8 Dec 2023 15:02:47 -0500 Subject: [PATCH 199/313] doc/go1.22: document additional constants in debug/elf package Updates #61974, #63725. For #61422. Change-Id: Ifd6c62e877dbd13f0e86fef801fe70d39fb3a66b Reviewed-on: https://go-review.googlesource.com/c/go/+/548478 Reviewed-by: Than McIntosh LUCI-TryBot-Result: Go LUCI --- doc/go1.22.html | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index d11a633029..f9b98bff8e 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -388,6 +388,19 @@ defer func() {
+
debug/elf
+
+

+ Constant R_MIPS_PC32 is defined for use with MIPS64 systems. +

+
+
+

+ Additional R_LARCH_* constants are defined for use with LoongArch systems. +

+
+
+
encoding

@@ -810,8 +823,3 @@ defer func() { Go 1.22 adds an experimental port to OpenBSD on big-endian 64-bit PowerPC (openbsd/ppc64).

- - -

- TODO: https://go.dev/cl/469395: debug/elf,cmd/link: add additional MIPS64 relocation type; modified api/next/61974.txt -

From 9869a0ce7e2685a72641452efc17f039b9040164 Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Fri, 8 Dec 2023 15:11:12 -0500 Subject: [PATCH 200/313] doc/go1.22: fix go test -cover formatting For #61422. Change-Id: I3591673b55fef35bc429d2e1ce4bc72c0129c03c Reviewed-on: https://go-review.googlesource.com/c/go/+/548479 Reviewed-by: Than McIntosh LUCI-TryBot-Result: Go LUCI --- doc/go1.22.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index f9b98bff8e..e252c3c227 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -55,9 +55,9 @@ Do not send CLs removing the interior tags from such phrases.

-`go` `test` `-cover` now prints coverage summaries for covered +go test -cover now prints coverage summaries for covered packages that do not have their own test files. Prior to Go 1.22 a -`go` `test` `-cover` run for such a package would report +go test -cover run for such a package would report

From b55bf2d786e947a7ab33585420c4ac8841945f5d Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Fri, 8 Dec 2023 15:11:47 -0500 Subject: [PATCH 201/313] doc/go1.22: remove stale TODO and comments for vet changes They are already mentioned in the Vet section. For #61422. Change-Id: I773881df8c6a97263fc3d516e1d38b95679f2693 Reviewed-on: https://go-review.googlesource.com/c/go/+/548480 Reviewed-by: Than McIntosh TryBot-Bypass: Cherry Mui --- doc/go1.22.html | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index e252c3c227..fc0d95510f 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -101,23 +101,6 @@ packages that do not have their own test files. Prior to Go 1.22 a TODO: https://go.dev/cl/539016: go/analysis/passes/loopclosure: disable checker after go1.22.; loopclosure was modified to only not report in files with GoVersion after 1.22.

- -

- -

- - -

- -

- - -

- -

- -

Vet

-

New warnings for missing values after append

@@ -303,14 +286,6 @@ defer func() {

-
cmd
-
-

- TODO: https://go.dev/cl/498416: cmd: add a new analyzer for check missing values after append -

-
-
-
cmp

From f360ffd95a9c2a40901a53956901681ef53b7049 Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Fri, 8 Dec 2023 15:33:14 -0500 Subject: [PATCH 202/313] doc/go1.22: document that reflect.PtrTo is deprecated Updates #59599. For #61422. Change-Id: I923be38b719a78dd983372acad93f710a53b0922 Reviewed-on: https://go-review.googlesource.com/c/go/+/548036 Reviewed-by: Keith Randall TryBot-Bypass: Cherry Mui Reviewed-by: Keith Randall --- doc/go1.22.html | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/doc/go1.22.html b/doc/go1.22.html index fc0d95510f..c87d9d3b21 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -633,6 +633,12 @@ defer func() { a value to zero using the language == operator.

+
+

+ The PtrTo function is deprecated, + in favor of PointerTo. +

+
runtime/metrics
From fe1b2f95e6dbfb6e6212bb391706ae62eb0ae5ec Mon Sep 17 00:00:00 2001 From: David Chase Date: Wed, 29 Nov 2023 16:09:26 -0500 Subject: [PATCH 203/313] doc: describe for loop changes (lifetime, range int; range func experiment) See also https://go.dev/wiki/RangefuncExperiment, written as a companion to this change. For #61422. Change-Id: I129bf38dd2fa4aef47454138b4ca5ed18653aecf Reviewed-on: https://go-review.googlesource.com/c/go/+/546095 Reviewed-by: Cherry Mui Run-TryBot: David Chase TryBot-Result: Gopher Robot Reviewed-by: Alan Donovan --- doc/go1.22.html | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index c87d9d3b21..7e2b4da20c 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -26,7 +26,39 @@ Do not send CLs removing the interior tags from such phrases.

Changes to the language

- TODO: complete this section + +Go 1.22 makes two changes to "for" loops. +

    +
  • + Previously, the variables declared by a "for" loop were created once and updated by each iteration. In Go 1.22, each iteration of the loop creates new variables, to avoid accidental sharing bugs. + The transition support tooling + described in the proposal continues to work in the same way it did in Go 1.21. +
  • +
  • + "For" loops may now range over integers. + For example: +
    +package main
    +
    +import "fmt"
    +
    +func main() {
    +  for i := range 10 {
    +    fmt.Println(10 - i)
    +  }
    +  fmt.Println("go1.22 has lift-off!")
    +}
    +
    + See the spec for details. +
  • +
+ + +

+

+ Go 1.22 includes a preview of a language change we are considering + for a future version of Go: range-over-function iterators. + Building with GOEXPERIMENT=rangefunc enables this feature.

Tools

From ca804118b1ff4ea6cd0b83808e140671d7e10f6f Mon Sep 17 00:00:00 2001 From: qmuntal Date: Thu, 7 Dec 2023 00:59:54 +0100 Subject: [PATCH 204/313] doc: document that the Windows hosts file is now respected For #57757. For #61422. Change-Id: Icbe9a86b43eb0816dc5899a1c14b50ee22db1c5d Reviewed-on: https://go-review.googlesource.com/c/go/+/548095 Reviewed-by: Alex Brainman LUCI-TryBot-Result: Go LUCI Reviewed-by: Bryan Mills Reviewed-by: Dmitri Shuralyov --- doc/go1.22.html | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 7e2b4da20c..bf39db39e5 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -580,7 +580,10 @@ defer func() {

- TODO: https://go.dev/cl/467335: net: respect hosts file when resolving names for Windows + The Go DNS Resolver, used when building the binary with "-tags=netgo", + now searches a matching name in the Windows hosts file, + located at %SystemRoot%\System32\drivers\etc\hosts, + before making a DNS query.

From 46ea4ab5cb87e9e5d443029f5f1a4bba012804d3 Mon Sep 17 00:00:00 2001 From: qmuntal Date: Thu, 7 Dec 2023 21:45:57 +0100 Subject: [PATCH 205/313] doc: document that os.Stat follows all link reparse points on Windows For #61422. Change-Id: I2bb59a1ae38c40368343414a6077bb09c1675a6b Reviewed-on: https://go-review.googlesource.com/c/go/+/548315 Reviewed-by: Bryan Mills LUCI-TryBot-Result: Go LUCI Reviewed-by: Cherry Mui Reviewed-by: Alex Brainman --- doc/go1.22.html | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index bf39db39e5..b363aaf14b 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -635,7 +635,10 @@ defer func() {
os

- TODO: https://go.dev/cl/516555: os: follow all name surrogate reparse points in Stat on Windows + On Windows, the Stat function now follows all reparse points + that link to another named entity in the system. + It was previously only following IO_REPARSE_TAG_SYMLINK and + IO_REPARSE_TAG_MOUNT_POINT reparse points.

From ba7c4e47b32fa99db8aa05331426b328bb39517a Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Sat, 9 Dec 2023 14:32:10 -0500 Subject: [PATCH 206/313] os: limit temp file randomness to uint32 CL 516860 accidentally changed the randomness used in TempFile from 32 to 64 bits on 64-bit platforms, meaning from 10 to 20 decimal bytes. This is enough to cause problems in a few tests because it makes temporary directory names just a little bit longer. Limit back down to 32 bits of randomness, which is fine, and add a test to avoid repeating the mistake. Fixes #64605. Change-Id: I17b8c063d11d5c0a96a68b5e5f83c889a13bca77 Reviewed-on: https://go-review.googlesource.com/c/go/+/548635 Reviewed-by: Bryan Mills LUCI-TryBot-Result: Go LUCI Auto-Submit: Russ Cox --- src/os/os_test.go | 24 ++++++++++++++++++++++++ src/os/tempfile.go | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/os/os_test.go b/src/os/os_test.go index 7e0e0b90be..2f5b117bd9 100644 --- a/src/os/os_test.go +++ b/src/os/os_test.go @@ -3330,3 +3330,27 @@ func TestPipeCloseRace(t *testing.T) { t.Errorf("got nils %d errs %d, want 2 2", nils, errs) } } + +func TestRandomLen(t *testing.T) { + for range 5 { + dir, err := MkdirTemp(t.TempDir(), "*") + if err != nil { + t.Fatal(err) + } + base := filepath.Base(dir) + if len(base) > 10 { + t.Errorf("MkdirTemp returned len %d: %s", len(base), base) + } + } + for range 5 { + f, err := CreateTemp(t.TempDir(), "*") + if err != nil { + t.Fatal(err) + } + base := filepath.Base(f.Name()) + f.Close() + if len(base) > 10 { + t.Errorf("CreateTemp returned len %d: %s", len(base), base) + } + } +} diff --git a/src/os/tempfile.go b/src/os/tempfile.go index 7f2b6a883c..66c65e6c78 100644 --- a/src/os/tempfile.go +++ b/src/os/tempfile.go @@ -19,7 +19,7 @@ import ( func runtime_rand() uint64 func nextRandom() string { - return itoa.Uitoa(uint(runtime_rand())) + return itoa.Uitoa(uint(uint32(runtime_rand()))) } // CreateTemp creates a new temporary file in the directory dir, From 59275e266a222564fc1a39f17b913a74838478f4 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Fri, 8 Dec 2023 17:01:43 -0500 Subject: [PATCH 207/313] doc: document os/exec changes on Windows For #61422. Updates #62596. Updates #61493. Change-Id: I5c910f9961da24d90b3618ee53540118db06ff91 Reviewed-on: https://go-review.googlesource.com/c/go/+/548481 Auto-Submit: Bryan Mills Reviewed-by: Alex Brainman Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI --- doc/go1.22.html | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index b363aaf14b..bbd71b5893 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -650,11 +650,22 @@ defer func() {

os/exec

- TODO: https://go.dev/cl/528037: os/exec: fix edge cases in Windows PATH resolution + On Windows, LookPath now + ignores empty entries in %PATH%, and returns + ErrNotFound (instead of ErrNotExist) if + no executable file extension is found to resolve an otherwise-unambiguous + name.

-

- TODO: https://go.dev/cl/528038: os/exec: avoid calling LookPath in cmd.Start for resolved paths +

+ On Windows, Command and + Cmd.Start no + longer call LookPath if the path to the executable is already + absolute and has an executable file extension. In addition, + Cmd.Start no longer writes the resolved extension back to + the Path field, + so it is now safe to call the String method concurrently + with a call to Start.

From 052d402985816c1fc0f07424e53eaace3fa5e408 Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Fri, 8 Dec 2023 13:50:22 -0800 Subject: [PATCH 208/313] runtime: clear mspan.largeType more carefully in the case of arenas The pointer stored in mspan.largeType is an invalid pointer when the span is an arena. We need to make sure that pointer isn't seen by the garbage collector, as it might barf on it. Make sure we zero the pointer using a uintptr write so the old value isn't picked up by the write barrier. The mspan.largeType field itself is in a NotInHeap struct, so a heap scan won't find it. The only way we find it is when writing it, or when reading it and putting it in a GC-reachable location. I think we might need to audit the runtime to make sure these pointers aren't being passed in places where the GC might (non-conservatively) scan a stack frame it lives in. (It might be ok, many such places are either systemstack or nosplit.) Change-Id: Ie059d054e0da4d48a4c4b3be88b8e1e46ffa7d10 Reviewed-on: https://go-review.googlesource.com/c/go/+/548535 Reviewed-by: Michael Knyszek Reviewed-by: Keith Randall LUCI-TryBot-Result: Go LUCI --- src/runtime/mgcsweep.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/runtime/mgcsweep.go b/src/runtime/mgcsweep.go index 2d84c0d07c..0fbb23d573 100644 --- a/src/runtime/mgcsweep.go +++ b/src/runtime/mgcsweep.go @@ -796,7 +796,10 @@ func (sl *sweepLocked) sweep(preserve bool) bool { s := spanOf(uintptr(unsafe.Pointer(s.largeType))) mheap_.freeManual(s, spanAllocPtrScalarBits) }) - s.largeType = nil + // Make sure to zero this pointer without putting the old + // value in a write buffer, as the old value might be an + // invalid pointer. See arena.go:(*mheap).allocUserArenaChunk. + *(*uintptr)(unsafe.Pointer(&s.largeType)) = 0 } // Count the free in the consistent, external stats. From 20a03fc7130d8d99b513071c7e413b436ea649a2 Mon Sep 17 00:00:00 2001 From: Tolya Korniltsev Date: Mon, 4 Dec 2023 17:53:29 +0700 Subject: [PATCH 209/313] runtime/pprof: fix generics function names profileBuilder is using Frame->Function as key for checking if we already emitted a function. However for generics functions it has dots there [...], so sometimes for different functions with different generics types, the profileBuilder emits wrong functions. Fixes #64528 Change-Id: I8b39245e0b18f4288ce758c912c6748f87cba39a Reviewed-on: https://go-review.googlesource.com/c/go/+/546815 Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Pratt --- src/runtime/pprof/proto.go | 7 ++-- src/runtime/pprof/protomem_test.go | 62 ++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 3 deletions(-) diff --git a/src/runtime/pprof/proto.go b/src/runtime/pprof/proto.go index cdc4bd7c80..db9384eb21 100644 --- a/src/runtime/pprof/proto.go +++ b/src/runtime/pprof/proto.go @@ -611,13 +611,14 @@ func (b *profileBuilder) emitLocation() uint64 { b.pb.uint64Opt(tagLocation_Address, uint64(firstFrame.PC)) for _, frame := range b.deck.frames { // Write out each line in frame expansion. - funcID := uint64(b.funcs[frame.Function]) + funcName := runtime_FrameSymbolName(&frame) + funcID := uint64(b.funcs[funcName]) if funcID == 0 { funcID = uint64(len(b.funcs)) + 1 - b.funcs[frame.Function] = int(funcID) + b.funcs[funcName] = int(funcID) newFuncs = append(newFuncs, newFunc{ id: funcID, - name: runtime_FrameSymbolName(&frame), + name: funcName, file: frame.File, startLine: int64(runtime_FrameStartLine(&frame)), }) diff --git a/src/runtime/pprof/protomem_test.go b/src/runtime/pprof/protomem_test.go index 156f6286a9..505c323d68 100644 --- a/src/runtime/pprof/protomem_test.go +++ b/src/runtime/pprof/protomem_test.go @@ -6,8 +6,11 @@ package pprof import ( "bytes" + "fmt" "internal/profile" "runtime" + "slices" + "strings" "testing" ) @@ -82,3 +85,62 @@ func TestConvertMemProfile(t *testing.T) { }) } } + +func genericAllocFunc[T interface{ uint32 | uint64 }](n int) []T { + return make([]T, n) +} + +func profileToString(p *profile.Profile) []string { + var res []string + for _, s := range p.Sample { + var funcs []string + for i := len(s.Location) - 1; i >= 0; i-- { + loc := s.Location[i] + for j := len(loc.Line) - 1; j >= 0; j-- { + line := loc.Line[j] + funcs = append(funcs, line.Function.Name) + } + } + res = append(res, fmt.Sprintf("%s %v", strings.Join(funcs, ";"), s.Value)) + } + return res +} + +// This is a regression test for https://go.dev/issue/64528 . +func TestGenericsHashKeyInPprofBuilder(t *testing.T) { + previousRate := runtime.MemProfileRate + runtime.MemProfileRate = 1 + defer func() { + runtime.MemProfileRate = previousRate + }() + for _, sz := range []int{128, 256} { + genericAllocFunc[uint32](sz / 4) + } + for _, sz := range []int{32, 64} { + genericAllocFunc[uint64](sz / 8) + } + + runtime.GC() + buf := bytes.NewBuffer(nil) + if err := WriteHeapProfile(buf); err != nil { + t.Fatalf("writing profile: %v", err) + } + p, err := profile.Parse(buf) + if err != nil { + t.Fatalf("profile.Parse: %v", err) + } + + actual := profileToString(p) + expected := []string{ + "testing.tRunner;runtime/pprof.TestGenericsHashKeyInPprofBuilder;runtime/pprof.genericAllocFunc[go.shape.uint32] [1 128 0 0]", + "testing.tRunner;runtime/pprof.TestGenericsHashKeyInPprofBuilder;runtime/pprof.genericAllocFunc[go.shape.uint32] [1 256 0 0]", + "testing.tRunner;runtime/pprof.TestGenericsHashKeyInPprofBuilder;runtime/pprof.genericAllocFunc[go.shape.uint64] [1 32 0 0]", + "testing.tRunner;runtime/pprof.TestGenericsHashKeyInPprofBuilder;runtime/pprof.genericAllocFunc[go.shape.uint64] [1 64 0 0]", + } + + for _, l := range expected { + if !slices.Contains(actual, l) { + t.Errorf("profile = %v\nwant = %v", strings.Join(actual, "\n"), l) + } + } +} From 9db508d46fe201ecc6184ebd7b73770ed38fbdf9 Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Mon, 11 Dec 2023 18:43:11 +0000 Subject: [PATCH 210/313] doc: fix formatting of runtime and runtime/trace release notes For #61422. Change-Id: I621627140d2d5ebede9b932a7e55fbe92ded5249 Reviewed-on: https://go-review.googlesource.com/c/go/+/548935 Auto-Submit: Michael Knyszek LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Pratt --- doc/go1.22.html | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index bbd71b5893..fca4f5ba53 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -177,13 +177,14 @@ defer func() {

The runtime now keeps type-based garbage collection metadata nearer to each heap object, improving the CPU performance (latency or throughput) of Go programs - by 1—3%. + by 1–3%. This change also reduces the memory overhead of the majority Go programs by approximately 1% by deduplicating redundant metadata. Some programs may see a smaller improvement because this change adjusts the size class boundaries of the memory allocator, so some objects may be moved up a size class. -
+

+

A consequence of this change is that some objects' addresses that were previously always aligned to a 16 byte (or higher) boundary will now only be aligned to an 8 byte boundary. @@ -749,7 +750,8 @@ defer func() {

The execution tracer has been completely overhauled in this release, resolving several long-standing issues and paving the way for new use-cases for execution traces. -
+

+

Execution traces now use the operating system's clock on most platforms (Windows excluded) so it is possible to correlate them with traces produced by lower-level components. Execution traces no longer depend on the reliability of the platform's clock to produce a correct trace. @@ -759,13 +761,15 @@ defer func() { Execution traces now contain information about the operating system threads that goroutines executed on. The latency impact of starting and stopping execution traces has been dramatically reduced. Execution traces may now begin or end during the garbage collection mark phase. -
+

+

To allow Go developers to take advantage of these improvements, an experimental trace reading package is available at golang.org/x/exp/trace. Note that this package only works on traces produced by programs built with Go 1.22 at the moment. Please try out the package and provide feedback on the corresponding proposal issue. -
+

+

If you experience any issues with the new execution tracer implementation, you may switch back to the old implementation by building your Go program with GOEXPERIMENT=noexectracer2. If you do, please file an issue, otherwise this option will be removed in a future release. From c844970ffb4f8c72e23364c5563d429d3535a0ff Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Mon, 11 Dec 2023 14:14:10 -0500 Subject: [PATCH 211/313] doc/go1.22: fix stale id for math/rand/v2 For #61422. Change-Id: If87f30229e5e5351e81d42c777259335af3533e6 Reviewed-on: https://go-review.googlesource.com/c/go/+/548878 Auto-Submit: Michael Pratt LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek --- doc/go1.22.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index fca4f5ba53..414f30e6fb 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -240,7 +240,7 @@ defer func() {

Core library

-

New math/rand/v2 package

+

New math/rand/v2 package

TODO: https://go.dev/cl/502495: math/rand/v2: start of new API; modified api/next/61716.txt From 100651b6f2b33d073b54da2ff07601ab3cc029b5 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Mon, 11 Dec 2023 11:29:36 -0500 Subject: [PATCH 212/313] doc/go1.22: document workspace vendoring For #61422. Updates #60056. Change-Id: Ie7c7e12acc173f1ff1644555016e51a52509bd6d Reviewed-on: https://go-review.googlesource.com/c/go/+/548815 Auto-Submit: Bryan Mills Reviewed-by: Michael Matloob LUCI-TryBot-Result: Go LUCI --- doc/go1.22.html | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 414f30e6fb..631184a0e8 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -67,7 +67,20 @@ func main() {

- + Commands in workspaces can now + use a vendor directory containing the dependencies of the + workspace. The directory is created by + go work vendor, + and used by build commands when the -mod flag is set to + vendor, which is the default when a workspace vendor + directory is present. +

+

+ Note that the vendor directory's contents for a workspace are different + from those of a single module: if the directory at the root of a workspace also + contains one of the modules in the workspace, its vendor directory + can contain the dependencies of either the workspace or of the module, + but not both.

From 78dcb5327a45a6a9cd7829dbbf62ad853c60793d Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Mon, 11 Dec 2023 15:03:39 -0500 Subject: [PATCH 213/313] doc/go1.22: document syscall changes For #61422. Change-Id: I976b8cc14893b91e5140c7b53d0773bca57cb19d Reviewed-on: https://go-review.googlesource.com/c/go/+/548936 LUCI-TryBot-Result: Go LUCI Auto-Submit: Michael Pratt Reviewed-by: Michael Knyszek --- doc/go1.22.html | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 631184a0e8..0b222a2e49 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -655,6 +655,10 @@ defer func() { IO_REPARSE_TAG_MOUNT_POINT reparse points.

+

+ On Windows, passing O_SYNC to OpenFile now causes write operations to go directly to disk, equivalent to O_SYNC on Unix platforms. +

+

TODO: https://go.dev/issue/58808: arrange zero-copy of os.File and TCPConn to UnixConn

@@ -809,15 +813,18 @@ defer func() {
syscall

- TODO: https://go.dev/issue/60797: undeprecate + The syscall package has been frozen since Go 1.4 and was marked as deprecated in Go 1.11, causing many editors to warn about any use of the package. + However, some non-deprecated functionality requires use of the syscall package, such as the os/exec.Cmd.SysProcAttr field. + To avoid unnecesary complaints on such code, the syscall package is no longer marked as deprecated. + The package remains frozen to most new functionality, and new code remains encouraged to use golang.org/x/sys/unix or golang.org/x/sys/windows where possible.

- TODO: https://go.dev/cl/520266: syscall: add support to get pidfd from ForkExec on Linux + On Linux, the new SysProcAttr.PidFD field allows obtaining a PID FD when starting a child process via StartProcess or os/exec.

- TODO: https://go.dev/cl/541015: syscall: support O_SYNC flag for os.OpenFile on windows + On Windows, passing O_SYNC to Open now causes write operations to go directly to disk, equivalent to O_SYNC on Unix platforms.

From d0ed476f3e08a66e379682d4f7538c23ec1c2284 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Mon, 11 Dec 2023 15:49:09 -0500 Subject: [PATCH 214/313] doc/go1.22: add TODOs for missing APIs Add TODOs for APIs mentioned in api/go1.22.txt but missing from the release notes. The issue list was generated with: $ awk '{print substr($NF, 2, length($NF)-1)}' < ../api/go1.22.txt | uniq | xargs -I{} sh -c 'echo -n "{}: " && grep -c {} ../doc/go1.22.html' For #61422. Change-Id: I85d41c28530e6b5e3e388a41206b251278c91dd5 Reviewed-on: https://go-review.googlesource.com/c/go/+/548937 Auto-Submit: Michael Pratt LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek --- doc/go1.22.html | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 0b222a2e49..b9286f7898 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -324,6 +324,14 @@ defer func() {
+
archive/zip
+
+

+ TODO: https://go.dev/issue/54898: archive/zip: add (*Writer).AddFS +

+
+
+
bufio

@@ -481,6 +489,10 @@ defer func() { see Object, Info.Uses, and Info.Defs for details.

+ +

+ TODO: https://go.dev/issue/60061: go/ast: add func Unparen(Expr) Expr +

@@ -699,12 +711,15 @@ defer func() { These changes make IsZero consistent with comparing a value to zero using the language == operator.

-
-
+

The PtrTo function is deprecated, in favor of PointerTo.

+ +

+ TODO: https://go.dev/issue/60088: reflect: add TypeFor +

@@ -819,7 +834,7 @@ defer func() { The package remains frozen to most new functionality, and new code remains encouraged to use golang.org/x/sys/unix or golang.org/x/sys/windows where possible.

-

+

On Linux, the new SysProcAttr.PidFD field allows obtaining a PID FD when starting a child process via StartProcess or os/exec.

From c22781cb3319fa4befc7944b0a8e00fbd6632115 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Mon, 11 Dec 2023 15:55:17 -0500 Subject: [PATCH 215/313] doc/go1.22: remove compiler TODO For #61422. Change-Id: Id4eed9affde20857d6b60c0b6d7d1443ea5e460b Reviewed-on: https://go-review.googlesource.com/c/go/+/548938 Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI Auto-Submit: Michael Pratt Reviewed-by: Keith Randall --- doc/go1.22.html | 4 ---- 1 file changed, 4 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index b9286f7898..f21c774ef1 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -212,10 +212,6 @@ defer func() {

Compiler

-

- TODO: complete this section. -

-

Profile-guided Optimization (PGO) builds can now devirtualize a higher proportion of calls than previously possible. From e872807e2b7d74ba4ac474e697027a9318439d04 Mon Sep 17 00:00:00 2001 From: qmuntal Date: Sat, 9 Dec 2023 01:03:32 +0100 Subject: [PATCH 216/313] doc: document SEH changes For #57302. For #61422. Change-Id: Iee4e6600bf473eb982d0cb7330f7b2c1b48b9e13 Reviewed-on: https://go-review.googlesource.com/c/go/+/548575 Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI Reviewed-by: Than McIntosh Reviewed-by: Dmitri Shuralyov --- doc/go1.22.html | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/doc/go1.22.html b/doc/go1.22.html index f21c774ef1..3c67dee3bb 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -239,6 +239,17 @@ defer func() { build ID.

+

+ On Windows, when building with -linkmode=internal, the linker now + preserves SEH information from C object files by copying the .pdata + and .xdata sections into the final binary. + This helps with debugging and profiling binaries using native tools, such as WinDbg. + Note that until now, C functions' SEH exception handlers were not being honored, + so this change may cause some programs to behave differently. + -linkmode=external is not affected by this change, as external linkers + already preserve SEH information. +

+

Bootstrap

From a839ec1e73c25d47cc329e93b9508fb53277bdd2 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Fri, 8 Dec 2023 11:26:30 -0500 Subject: [PATCH 217/313] cmd/go/internal/modload: classify "invalid pseudo-version" errors in Query If we encounter an unclassified error in modload.Query, it takes precedence even if the package is found in some other module. (That is intentional, so that if a package exists in both a parent and a nested module the outcome is deterministic, and does not shift if a temporary error causes one of the modules to be unavailable.) A pseudo-version is formed from a base version and a commit hash. Each version tag is specific to the module in a particular directory of the repo (often the root directory), whereas the commit hash is the same for all subdirectories. When we go to check a particular subdirectory for the requested package, we may find that that version is not valid for that combination of , but we should keep looking to see whether it is valid for a module in some other subdirectory. Fixes #47650. Change-Id: Id48f590ce906a3d4cf4e82fc66137bf67613277d Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest,gotip-windows-amd64-longtest Reviewed-on: https://go-review.googlesource.com/c/go/+/548475 Reviewed-by: Michael Matloob LUCI-TryBot-Result: Go LUCI Auto-Submit: Bryan Mills --- src/cmd/go/internal/modfetch/coderepo.go | 12 +++++- src/cmd/go/internal/modload/query.go | 17 +++++--- .../go/testdata/script/mod_get_issue47650.txt | 29 +++++++++++++ .../go/testdata/vcstest/git/issue47650.txt | 41 +++++++++++++++++++ 4 files changed, 93 insertions(+), 6 deletions(-) create mode 100644 src/cmd/go/testdata/script/mod_get_issue47650.txt create mode 100644 src/cmd/go/testdata/vcstest/git/issue47650.txt diff --git a/src/cmd/go/internal/modfetch/coderepo.go b/src/cmd/go/internal/modfetch/coderepo.go index 7d83ac6971..75c34e9fcb 100644 --- a/src/cmd/go/internal/modfetch/coderepo.go +++ b/src/cmd/go/internal/modfetch/coderepo.go @@ -514,10 +514,20 @@ func (r *codeRepo) convert(ctx context.Context, info *codehost.RevInfo, statVers // Determine version. if module.IsPseudoVersion(statVers) { + // Validate the go.mod location and major version before + // we check for an ancestor tagged with the pseude-version base. + // + // We can rule out an invalid subdirectory or major version with only + // shallow commit information, but checking the pseudo-version base may + // require downloading a (potentially more expensive) full history. + revInfo, err = checkCanonical(statVers) + if err != nil { + return revInfo, err + } if err := r.validatePseudoVersion(ctx, info, statVers); err != nil { return nil, err } - return checkCanonical(statVers) + return revInfo, nil } // statVers is not a pseudo-version, so we need to either resolve it to a diff --git a/src/cmd/go/internal/modload/query.go b/src/cmd/go/internal/modload/query.go index 895c6c0032..c4cf55442b 100644 --- a/src/cmd/go/internal/modload/query.go +++ b/src/cmd/go/internal/modload/query.go @@ -891,11 +891,12 @@ func queryPrefixModules(ctx context.Context, candidateModules []string, queryMod // is most likely to find helpful: the most useful class of error at the // longest matching path. var ( - noPackage *PackageNotInModuleError - noVersion *NoMatchingVersionError - noPatchBase *NoPatchBaseError - invalidPath *module.InvalidPathError // see comment in case below - notExistErr error + noPackage *PackageNotInModuleError + noVersion *NoMatchingVersionError + noPatchBase *NoPatchBaseError + invalidPath *module.InvalidPathError // see comment in case below + invalidVersion error + notExistErr error ) for _, r := range results { switch rErr := r.err.(type) { @@ -931,6 +932,10 @@ func queryPrefixModules(ctx context.Context, candidateModules []string, queryMod if notExistErr == nil { notExistErr = rErr } + } else if iv := (*module.InvalidVersionError)(nil); errors.As(rErr, &iv) { + if invalidVersion == nil { + invalidVersion = rErr + } } else if err == nil { if len(found) > 0 || noPackage != nil { // golang.org/issue/34094: If we have already found a module that @@ -961,6 +966,8 @@ func queryPrefixModules(ctx context.Context, candidateModules []string, queryMod err = noPatchBase case invalidPath != nil: err = invalidPath + case invalidVersion != nil: + err = invalidVersion case notExistErr != nil: err = notExistErr default: diff --git a/src/cmd/go/testdata/script/mod_get_issue47650.txt b/src/cmd/go/testdata/script/mod_get_issue47650.txt new file mode 100644 index 0000000000..8561b21df0 --- /dev/null +++ b/src/cmd/go/testdata/script/mod_get_issue47650.txt @@ -0,0 +1,29 @@ +# Regression test for https://go.dev/issue/47650: +# 'go get' with a pseudo-version of a non-root package within a module +# erroneously rejected the pseudo-version as invalid, because it did not fetch +# enough commit history to validate the pseudo-version base. + +[short] skip 'creates and uses a git repository' +[!git] skip + +env GOPRIVATE=vcs-test.golang.org + +# If we request a package in a subdirectory of a module by commit hash, we +# successfully resolve it to a pseudo-version derived from a tag on the parent +# commit. +cp go.mod go.mod.orig +go get -x vcs-test.golang.org/git/issue47650.git/cmd/issue47650@21535ef346c3 +stderr '^go: added vcs-test.golang.org/git/issue47650.git v0.1.1-0.20210811175200-21535ef346c3$' + +# Explicitly requesting that same version should succeed, fetching additional +# history for the requested commit as needed in order to validate the +# pseudo-version base. +go clean -modcache +cp go.mod.orig go.mod +go get -x vcs-test.golang.org/git/issue47650.git/cmd/issue47650@v0.1.1-0.20210811175200-21535ef346c3 +stderr '^go: added vcs-test.golang.org/git/issue47650.git v0.1.1-0.20210811175200-21535ef346c3$' + +-- go.mod -- +module example + +go 1.20 diff --git a/src/cmd/go/testdata/vcstest/git/issue47650.txt b/src/cmd/go/testdata/vcstest/git/issue47650.txt new file mode 100644 index 0000000000..fe037cea64 --- /dev/null +++ b/src/cmd/go/testdata/vcstest/git/issue47650.txt @@ -0,0 +1,41 @@ +handle git + +env GIT_AUTHOR_NAME='Bryan C. Mills' +env GIT_AUTHOR_EMAIL='bcmills@google.com' +env GIT_COMMITTER_NAME=$GIT_AUTHOR_NAME +env GIT_COMMITTER_EMAIL=$GIT_AUTHOR_EMAIL + +git init + +at 2021-08-11T13:52:00-04:00 +git add cmd +git commit -m 'add cmd/issue47650' +git tag v0.1.0 + +git add go.mod +git commit -m 'add go.mod' + +git show-ref --tags --heads +cmp stdout .git-refs + +git log --oneline --decorate=short +cmp stdout .git-log + +-- .git-refs -- +21535ef346c3e79fd09edd75bd4725f06c828e43 refs/heads/main +4d237df2dbfc8a443af2f5e84be774f08a2aed0c refs/tags/v0.1.0 +-- .git-log -- +21535ef (HEAD -> main) add go.mod +4d237df (tag: v0.1.0) add cmd/issue47650 +-- go.mod -- +module vcs-test.golang.org/git/issue47650.git + +go 1.17 +-- cmd/issue47650/main.go -- +package main + +import "os" + +func main() { + os.Stdout.WriteString("Hello, world!") +} From f4ff0e25054d1159396cc1d9252f1e94021ce46c Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Mon, 11 Dec 2023 16:14:24 -0500 Subject: [PATCH 218/313] net: remove an arbitrary timeout in TestAcceptTimeoutMustReturn This probably fixes the failure mode seen in https://build.golang.org/log/e73acfd930cbe82302505cac0041d9883e2360c5. If not, allowing the test to deadlock and dump goroutines should produce better debugging information than the existing "didn't return in an expected time" failure message. For #58901. Change-Id: Ie0bb1887a4329d2f6b0e7348a4820af71385494e Reviewed-on: https://go-review.googlesource.com/c/go/+/548881 Auto-Submit: Bryan Mills LUCI-TryBot-Result: Go LUCI Reviewed-by: Damien Neil --- src/net/timeout_test.go | 43 ++++++++++++++--------------------------- 1 file changed, 15 insertions(+), 28 deletions(-) diff --git a/src/net/timeout_test.go b/src/net/timeout_test.go index 563a842cf9..ca86f31ef2 100644 --- a/src/net/timeout_test.go +++ b/src/net/timeout_test.go @@ -242,35 +242,22 @@ func TestAcceptTimeoutMustReturn(t *testing.T) { ln := newLocalListener(t, "tcp") defer ln.Close() - max := time.NewTimer(time.Second) - defer max.Stop() - ch := make(chan error) - go func() { - if err := ln.(*TCPListener).SetDeadline(noDeadline); err != nil { - t.Error(err) - } - if err := ln.(*TCPListener).SetDeadline(time.Now().Add(10 * time.Millisecond)); err != nil { - t.Error(err) - } - c, err := ln.Accept() - if err == nil { - c.Close() - } - ch <- err - }() + if err := ln.(*TCPListener).SetDeadline(noDeadline); err != nil { + t.Error(err) + } + if err := ln.(*TCPListener).SetDeadline(time.Now().Add(10 * time.Millisecond)); err != nil { + t.Error(err) + } + c, err := ln.Accept() + if err == nil { + c.Close() + } - select { - case <-max.C: - ln.Close() - <-ch // wait for tester goroutine to stop - t.Fatal("Accept didn't return in an expected time") - case err := <-ch: - if perr := parseAcceptError(err); perr != nil { - t.Error(perr) - } - if !isDeadlineExceeded(err) { - t.Fatal(err) - } + if perr := parseAcceptError(err); perr != nil { + t.Error(perr) + } + if !isDeadlineExceeded(err) { + t.Fatal(err) } } From b18b05881691861c4279a50010829150f1684fa9 Mon Sep 17 00:00:00 2001 From: Roland Shoemaker Date: Mon, 4 Dec 2023 10:17:34 -0800 Subject: [PATCH 219/313] crypto/x509: gate Policies marshaling with GODEBUG Use a GODEBUG to choose which certificate policy field to use. If x509usepolicies=1 is set, use the Policies field, otherwise use the PolicyIdentifiers field. Fixes #64248 Change-Id: I3f0b56102e0bac4ebe800497717c61c58ef3f092 Reviewed-on: https://go-review.googlesource.com/c/go/+/546916 Reviewed-by: Damien Neil LUCI-TryBot-Result: Go LUCI --- doc/godebug.md | 9 +++++++ src/crypto/x509/x509.go | 42 ++++++++++++++++++++++++++------- src/crypto/x509/x509_test.go | 43 ++++++++++++++++++++++++++++++++++ src/internal/godebugs/table.go | 1 + src/runtime/metrics/doc.go | 5 ++++ 5 files changed, 92 insertions(+), 8 deletions(-) diff --git a/doc/godebug.md b/doc/godebug.md index 9710940118..a7619c9a3d 100644 --- a/doc/godebug.md +++ b/doc/godebug.md @@ -185,6 +185,15 @@ runtime locks can be enabled with the [`runtimecontentionstacks` setting](/pkg/runtime#hdr-Environment_Variable). These stack traces have non-standard semantics, see setting documentation for details. +Go 1.22 added a new [`crypto/x509.Certificate`](/pkg/crypto/x509/#Certificate) +field, [`Policies`](/pkg/crypto/x509/#Certificate.Policies), which supports +certificate policy OIDs with components larger than 31 bits. By default this +field is only used during parsing, when it is populated with policy OIDs, but +not used during marshaling. It can be used to marshal these larger OIDs, instead +of the existing PolicyIdentifiers field, by using the +[`x509usepolicies` setting.](/pkg/crypto/x509/#CreateCertificate). + + ### Go 1.21 Go 1.21 made it a run-time error to call `panic` with a nil interface value, diff --git a/src/crypto/x509/x509.go b/src/crypto/x509/x509.go index 29d8e6bff7..f33283b559 100644 --- a/src/crypto/x509/x509.go +++ b/src/crypto/x509/x509.go @@ -1101,6 +1101,8 @@ func isIA5String(s string) error { return nil } +var usePoliciesField = godebug.New("x509usepolicies") + func buildCertExtensions(template *Certificate, subjectIsEmpty bool, authorityKeyId []byte, subjectKeyId []byte) (ret []pkix.Extension, err error) { ret = make([]pkix.Extension, 10 /* maximum number of elements. */) n := 0 @@ -1186,9 +1188,10 @@ func buildCertExtensions(template *Certificate, subjectIsEmpty bool, authorityKe n++ } - if len(template.PolicyIdentifiers) > 0 && + usePolicies := usePoliciesField.Value() == "1" + if ((!usePolicies && len(template.PolicyIdentifiers) > 0) || (usePolicies && len(template.Policies) > 0)) && !oidInExtensions(oidExtensionCertificatePolicies, template.ExtraExtensions) { - ret[n], err = marshalCertificatePolicies(template.PolicyIdentifiers) + ret[n], err = marshalCertificatePolicies(template.Policies, template.PolicyIdentifiers) if err != nil { return nil, err } @@ -1373,15 +1376,30 @@ func marshalBasicConstraints(isCA bool, maxPathLen int, maxPathLenZero bool) (pk return ext, err } -func marshalCertificatePolicies(policyIdentifiers []asn1.ObjectIdentifier) (pkix.Extension, error) { +func marshalCertificatePolicies(policies []OID, policyIdentifiers []asn1.ObjectIdentifier) (pkix.Extension, error) { ext := pkix.Extension{Id: oidExtensionCertificatePolicies} b := cryptobyte.NewBuilder(make([]byte, 0, 128)) b.AddASN1(cryptobyte_asn1.SEQUENCE, func(child *cryptobyte.Builder) { - for _, v := range policyIdentifiers { - child.AddASN1(cryptobyte_asn1.SEQUENCE, func(child *cryptobyte.Builder) { - child.AddASN1ObjectIdentifier(v) - }) + if usePoliciesField.Value() == "1" { + usePoliciesField.IncNonDefault() + for _, v := range policies { + child.AddASN1(cryptobyte_asn1.SEQUENCE, func(child *cryptobyte.Builder) { + child.AddASN1(cryptobyte_asn1.OBJECT_IDENTIFIER, func(child *cryptobyte.Builder) { + if len(v.der) == 0 { + child.SetError(errors.New("invalid policy object identifier")) + return + } + child.AddBytes(v.der) + }) + }) + } + } else { + for _, v := range policyIdentifiers { + child.AddASN1(cryptobyte_asn1.SEQUENCE, func(child *cryptobyte.Builder) { + child.AddASN1ObjectIdentifier(v) + }) + } } }) @@ -1526,7 +1544,8 @@ var emptyASN1Subject = []byte{0x30, 0} // - PermittedEmailAddresses // - PermittedIPRanges // - PermittedURIDomains -// - PolicyIdentifiers +// - PolicyIdentifiers (see note below) +// - Policies (see note below) // - SerialNumber // - SignatureAlgorithm // - Subject @@ -1550,6 +1569,13 @@ var emptyASN1Subject = []byte{0x30, 0} // // If SubjectKeyId from template is empty and the template is a CA, SubjectKeyId // will be generated from the hash of the public key. +// +// The PolicyIdentifier and Policies fields are both used to marshal certificate +// policy OIDs. By default, only the PolicyIdentifier is marshaled, but if the +// GODEBUG setting "x509usepolicies" has the value "1", the Policies field will +// be marshalled instead of the PolicyIdentifier field. The Policies field can +// be used to marshal policy OIDs which have components that are larger than 31 +// bits. func CreateCertificate(rand io.Reader, template, parent *Certificate, pub, priv any) ([]byte, error) { key, ok := priv.(crypto.Signer) if !ok { diff --git a/src/crypto/x509/x509_test.go b/src/crypto/x509/x509_test.go index 47cddceacf..ead0453f66 100644 --- a/src/crypto/x509/x509_test.go +++ b/src/crypto/x509/x509_test.go @@ -3956,3 +3956,46 @@ func TestCertificateOIDPolicies(t *testing.T) { t.Errorf("cert.Policies = %v, want: %v", cert.Policies, expectPolicies) } } + +func TestCertificatePoliciesGODEBUG(t *testing.T) { + template := Certificate{ + SerialNumber: big.NewInt(1), + Subject: pkix.Name{CommonName: "Cert"}, + NotBefore: time.Unix(1000, 0), + NotAfter: time.Unix(100000, 0), + PolicyIdentifiers: []asn1.ObjectIdentifier{[]int{1, 2, 3}}, + Policies: []OID{mustNewOIDFromInts(t, []uint64{1, 2, math.MaxUint32 + 1})}, + } + + expectPolicies := []OID{mustNewOIDFromInts(t, []uint64{1, 2, 3})} + certDER, err := CreateCertificate(rand.Reader, &template, &template, rsaPrivateKey.Public(), rsaPrivateKey) + if err != nil { + t.Fatalf("CreateCertificate() unexpected error: %v", err) + } + + cert, err := ParseCertificate(certDER) + if err != nil { + t.Fatalf("ParseCertificate() unexpected error: %v", err) + } + + if !slices.EqualFunc(cert.Policies, expectPolicies, OID.Equal) { + t.Errorf("cert.Policies = %v, want: %v", cert.Policies, expectPolicies) + } + + t.Setenv("GODEBUG", "x509usepolicies=1") + expectPolicies = []OID{mustNewOIDFromInts(t, []uint64{1, 2, math.MaxUint32 + 1})} + + certDER, err = CreateCertificate(rand.Reader, &template, &template, rsaPrivateKey.Public(), rsaPrivateKey) + if err != nil { + t.Fatalf("CreateCertificate() unexpected error: %v", err) + } + + cert, err = ParseCertificate(certDER) + if err != nil { + t.Fatalf("ParseCertificate() unexpected error: %v", err) + } + + if !slices.EqualFunc(cert.Policies, expectPolicies, OID.Equal) { + t.Errorf("cert.Policies = %v, want: %v", cert.Policies, expectPolicies) + } +} diff --git a/src/internal/godebugs/table.go b/src/internal/godebugs/table.go index 3a76214b39..a0a0672966 100644 --- a/src/internal/godebugs/table.go +++ b/src/internal/godebugs/table.go @@ -51,6 +51,7 @@ var All = []Info{ {Name: "tlsunsafeekm", Package: "crypto/tls", Changed: 22, Old: "1"}, {Name: "x509sha1", Package: "crypto/x509"}, {Name: "x509usefallbackroots", Package: "crypto/x509"}, + {Name: "x509usepolicies", Package: "crypto/x509"}, {Name: "zipinsecurepath", Package: "archive/zip"}, } diff --git a/src/runtime/metrics/doc.go b/src/runtime/metrics/doc.go index ba153174a6..e5a1fbc8d2 100644 --- a/src/runtime/metrics/doc.go +++ b/src/runtime/metrics/doc.go @@ -327,6 +327,11 @@ Below is the full list of supported metrics, ordered lexicographically. package due to a non-default GODEBUG=x509usefallbackroots=... setting. + /godebug/non-default-behavior/x509usepolicies:events + The number of non-default behaviors executed by the crypto/x509 + package due to a non-default GODEBUG=x509usepolicies=... + setting. + /godebug/non-default-behavior/zipinsecurepath:events The number of non-default behaviors executed by the archive/zip package due to a non-default GODEBUG=zipinsecurepath=... From e70d34330690e385be5dd2a3adea3c38c621826d Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Tue, 12 Dec 2023 10:49:55 -0500 Subject: [PATCH 220/313] =?UTF-8?q?cmd/go:=20explicitly=20name=20the=20def?= =?UTF-8?q?ault=20branch=20=E2=80=9Cmain=E2=80=9D=20in=20testdata/vcstest/?= =?UTF-8?q?git/issue57650.txt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updates #47650. Change-Id: I90c0a51b390326129643d5b90fe935d44e5e5372 Reviewed-on: https://go-review.googlesource.com/c/go/+/549155 TryBot-Result: Gopher Robot Run-TryBot: Bryan Mills Auto-Submit: Bryan Mills Reviewed-by: Michael Matloob --- src/cmd/go/testdata/vcstest/git/issue47650.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cmd/go/testdata/vcstest/git/issue47650.txt b/src/cmd/go/testdata/vcstest/git/issue47650.txt index fe037cea64..52040787c8 100644 --- a/src/cmd/go/testdata/vcstest/git/issue47650.txt +++ b/src/cmd/go/testdata/vcstest/git/issue47650.txt @@ -10,6 +10,7 @@ git init at 2021-08-11T13:52:00-04:00 git add cmd git commit -m 'add cmd/issue47650' +git branch -m main git tag v0.1.0 git add go.mod From 3f442ab06242d76c17f909fc7fc2de7908f3fc1c Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Mon, 11 Dec 2023 16:19:42 -0500 Subject: [PATCH 221/313] doc/go1.22: document archive/tar and archive/zip changes For #61422. Change-Id: Icf56cba0ac40b46caf3072bf2951b07403f47f36 Reviewed-on: https://go-review.googlesource.com/c/go/+/548939 Auto-Submit: Michael Pratt LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek --- doc/go1.22.html | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 3c67dee3bb..fae3714366 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -313,28 +313,20 @@ defer func() {

archive/tar
-

- TODO: https://go.dev/issue/50102: add FileInfoNames interface +

+ The new method Writer.AddFS adds all of the files from an fs.FS to the archive.

-

- TODO: https://go.dev/issue/58000: add (*Writer).AddFS -

- -

- TODO: https://go.dev/cl/513316: archive/tar: add AddFS method to Writer; modified api/next/58000.txt -

- -

- TODO: https://go.dev/cl/514235: archive/tar: add FileInfoNames interface; modified api/next/50102.txt +

+ If the argument to FileInfoHeader implements the new FileInfoNames interface, then the interface methods will be used to set the UID/GID of the file header. This allows applications to override the default UID/GID resolution.

archive/zip
-

- TODO: https://go.dev/issue/54898: archive/zip: add (*Writer).AddFS +

+ The new method Writer.AddFS adds all of the files from an fs.FS to the archive.

From 1541af5ce81b9f58845fdbf0bf72b7b6965b5e96 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Mon, 11 Dec 2023 16:37:49 -0500 Subject: [PATCH 222/313] doc/go1.22: document bufio changes For #61422. Change-Id: I1b20c536a5b1c105286c84e7c1c7e37eb89bbc93 Reviewed-on: https://go-review.googlesource.com/c/go/+/548879 Reviewed-by: Michael Knyszek Auto-Submit: Michael Pratt LUCI-TryBot-Result: Go LUCI --- doc/go1.22.html | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index fae3714366..18d42e5b53 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -333,8 +333,10 @@ defer func() {
bufio
-

- TODO: https://go.dev/issue/56381: allow terminating Scanner early cleanly without a final token or an error +

+ When a SplitFunc returns ErrFinalToken with a nil token, Scanner will now stop immediately. + Previously, it would report a final empty token before stopping, which was usually not desired. + Callers that do want to report a final empty token can do so by returning []byte{} rather than nil.

From 018c1da0cfcac0cbcff426d15bc2428c47d499ba Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Mon, 11 Dec 2023 16:45:56 -0500 Subject: [PATCH 223/313] doc/go1.22: document io changes Change-Id: I1dd4030782ad20512836927d42bc8fe3d93437d7 Reviewed-on: https://go-review.googlesource.com/c/go/+/548880 LUCI-TryBot-Result: Go LUCI Auto-Submit: Michael Pratt Reviewed-by: Michael Knyszek --- doc/go1.22.html | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 18d42e5b53..e5fac31ae6 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -568,12 +568,8 @@ defer func() {
io
-

- TODO: https://go.dev/issue/61870: add SectionReader.Outer method -

- -

- TODO: https://go.dev/cl/526855: io: add (*SectionReader).Outer(); modified api/next/61870.txt +

+ The new SectionReader.Outer method returns the ReaderAt, offset, and size passed to NewSectionReader.

From 7baaa20e38613efb820892abb3abeadcd2198800 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Mon, 11 Dec 2023 18:22:59 -0800 Subject: [PATCH 224/313] doc: emphasize gotypesalias GODEBUG flag in go 1.22 release notes Per discussion with rfindley. Change-Id: Ia1cff05aff724eb8c919ffcc1fac121ca017efe9 Reviewed-on: https://go-review.googlesource.com/c/go/+/549056 Auto-Submit: Robert Griesemer Reviewed-by: Robert Griesemer TryBot-Bypass: Robert Griesemer Reviewed-by: Robert Findley --- doc/go1.22.html | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index e5fac31ae6..f1e713cb9e 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -503,18 +503,22 @@ defer func() { The new Alias type represents type aliases. Previously, type aliases were not represented explicitly, so a reference to a type alias was equivalent to spelling out the aliased type, and the name of the alias was lost. - The new representation retains the intermediate Alias. - This enables improved error reporting (the name of an alias can be reported), and allows for better handling + The new representation retains the intermediate Alias. + This enables improved error reporting (the name of a type alias can be reported), and allows for better handling of cyclic type declarations involving type aliases. In a future release, Alias types will also carry type parameter information. The new function Unalias returns the actual type denoted by an Alias type (or any other Type for that matter). +

+

Because Alias types may break existing type switches that do not know to check for them, this functionality is controlled by a GODEBUG field named gotypesalias. With gotypesalias=0, everything behaves as before, and Alias types are never created. With gotypesalias=1, Alias types are created and clients must expect them. The default is gotypesalias=0. In a future release, the default will be changed to gotypesalias=1. + Clients of go/types are urged to adjust their code as soon as possible + to work with gotypesalias=1 to eliminate problems early.

From ce43fb806f8fc1442adfef812db9301910d3210c Mon Sep 17 00:00:00 2001 From: Alan Donovan Date: Mon, 11 Dec 2023 17:50:08 -0500 Subject: [PATCH 225/313] doc/go1.22: document ast.Unparen Updates #60061 Change-Id: Ifa51f0bac0346ebc352c7524204aa94336a2b5ad Reviewed-on: https://go-review.googlesource.com/c/go/+/548882 LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Pratt --- doc/go1.22.html | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index f1e713cb9e..a7a51a1ffd 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -492,7 +492,10 @@ defer func() {

- TODO: https://go.dev/issue/60061: go/ast: add func Unparen(Expr) Expr + The new ast.Unparen + function removes any enclosing + parentheses from + an expression.

From 699807f323739582f37814c29fece6e3564eb13d Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Mon, 11 Dec 2023 12:31:25 -0500 Subject: [PATCH 226/313] doc/go1.22: remove empty cgo section The only issue in this section, #56378, does not need a release note for Go 1.22 because its feature was disabled for this release. For #61422. Updates #56378. Change-Id: Ia4e090994cd9ac04e855f8b3a2c6ca0cde4485d2 Reviewed-on: https://go-review.googlesource.com/c/go/+/548876 Auto-Submit: Bryan Mills Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI --- doc/go1.22.html | 7 ------- 1 file changed, 7 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index a7a51a1ffd..720d356efe 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -117,13 +117,6 @@ packages that do not have their own test files. Prior to Go 1.22 a mymod/mypack coverage: 0.0% of statements

-

Cgo

- - -

- -

-

Trace

From 2643a591728b0fd2bd1e007443442254d1200201 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Mon, 11 Dec 2023 13:28:25 -0800 Subject: [PATCH 227/313] go/types, types2: better error message for cases of reverse type inference Introduce a new type "target" to pass around target types together with a suitable description (typically a variable name) for a better error message. As a side effect, using a specific type (target), rather than just Type avoids accidental confusion with other types. Use the target type description for a better error message in some cases. The error message can be further improved by flipping the order of the sentence (for another CL to keep this one small and simple). Also, and unrelated to this fix, remove the first argument to errorf in infer.go: the argument is always "type" (there's only one call). For #60747. Change-Id: I2118d0fe9e2b4aac959371941064e0e9ca7b3b6e Reviewed-on: https://go-review.googlesource.com/c/go/+/548995 Auto-Submit: Robert Griesemer Run-TryBot: Robert Griesemer Reviewed-by: Robert Griesemer Reviewed-by: Robert Findley TryBot-Result: Gopher Robot --- .../compile/internal/types2/assignments.go | 15 +++++- src/cmd/compile/internal/types2/call.go | 14 ++--- src/cmd/compile/internal/types2/decl.go | 2 +- src/cmd/compile/internal/types2/expr.go | 51 +++++++++++-------- src/cmd/compile/internal/types2/infer.go | 10 ++-- src/go/types/assignments.go | 15 +++++- src/go/types/call.go | 14 ++--- src/go/types/decl.go | 2 +- src/go/types/expr.go | 51 +++++++++++-------- src/go/types/infer.go | 10 ++-- .../types/testdata/examples/inference2.go | 16 +++--- .../types/testdata/fixedbugs/issue60688.go | 2 +- .../types/testdata/fixedbugs/issue60747.go | 13 +++++ 13 files changed, 138 insertions(+), 77 deletions(-) create mode 100644 src/internal/types/testdata/fixedbugs/issue60747.go diff --git a/src/cmd/compile/internal/types2/assignments.go b/src/cmd/compile/internal/types2/assignments.go index 079802b0b0..338a114ff9 100644 --- a/src/cmd/compile/internal/types2/assignments.go +++ b/src/cmd/compile/internal/types2/assignments.go @@ -244,8 +244,15 @@ func (check *Checker) assignVar(lhs, rhs syntax.Expr, x *operand) { } if x == nil { + var target *target + // avoid calling syntax.String if not needed + if T != nil { + if _, ok := under(T).(*Signature); ok { + target = newTarget(T, syntax.String(lhs)) + } + } x = new(operand) - check.expr(T, x, rhs) + check.expr(target, x, rhs) } context := "assignment" @@ -369,7 +376,11 @@ func (check *Checker) initVars(lhs []*Var, orig_rhs []syntax.Expr, returnStmt sy if l == r && !isCall { var x operand for i, lhs := range lhs { - check.expr(lhs.typ, &x, orig_rhs[i]) + desc := lhs.name + if returnStmt != nil && desc == "" { + desc = "result variable" + } + check.expr(newTarget(lhs.typ, desc), &x, orig_rhs[i]) check.initVar(lhs, &x, context) } return diff --git a/src/cmd/compile/internal/types2/call.go b/src/cmd/compile/internal/types2/call.go index 439f515265..7d9b80f661 100644 --- a/src/cmd/compile/internal/types2/call.go +++ b/src/cmd/compile/internal/types2/call.go @@ -16,8 +16,8 @@ import ( // funcInst type-checks a function instantiation. // The incoming x must be a generic function. // If inst != nil, it provides some or all of the type arguments (inst.Index). -// If target type tsig != nil, the signature may be used to infer missing type -// arguments of x, if any. At least one of tsig or inst must be provided. +// If target != nil, it may be used to infer missing type arguments of x, if any. +// At least one of T or inst must be provided. // // There are two modes of operation: // @@ -32,8 +32,8 @@ import ( // // If an error (other than a version error) occurs in any case, it is reported // and x.mode is set to invalid. -func (check *Checker) funcInst(tsig *Signature, pos syntax.Pos, x *operand, inst *syntax.IndexExpr, infer bool) ([]Type, []syntax.Expr) { - assert(tsig != nil || inst != nil) +func (check *Checker) funcInst(T *target, pos syntax.Pos, x *operand, inst *syntax.IndexExpr, infer bool) ([]Type, []syntax.Expr) { + assert(T != nil || inst != nil) var instErrPos poser if inst != nil { @@ -87,7 +87,7 @@ func (check *Checker) funcInst(tsig *Signature, pos syntax.Pos, x *operand, inst // var args []*operand var params []*Var - if tsig != nil && sig.tparams != nil { + if T != nil && sig.tparams != nil { if !versionErr && !check.allowVersion(check.pkg, instErrPos, go1_21) { if inst != nil { check.versionErrorf(instErrPos, go1_21, "partially instantiated function in assignment") @@ -100,8 +100,8 @@ func (check *Checker) funcInst(tsig *Signature, pos syntax.Pos, x *operand, inst // The type of the argument operand is tsig, which is the type of the LHS in an assignment // or the result type in a return statement. Create a pseudo-expression for that operand // that makes sense when reported in error messages from infer, below. - expr := syntax.NewName(x.Pos(), "variable in assignment") - args = []*operand{{mode: value, expr: expr, typ: tsig}} + expr := syntax.NewName(x.Pos(), T.desc) + args = []*operand{{mode: value, expr: expr, typ: T.sig}} } // Rename type parameters to avoid problems with recursive instantiations. diff --git a/src/cmd/compile/internal/types2/decl.go b/src/cmd/compile/internal/types2/decl.go index 3ffa9431e4..f3e3418f4f 100644 --- a/src/cmd/compile/internal/types2/decl.go +++ b/src/cmd/compile/internal/types2/decl.go @@ -449,7 +449,7 @@ func (check *Checker) varDecl(obj *Var, lhs []*Var, typ, init syntax.Expr) { if lhs == nil || len(lhs) == 1 { assert(lhs == nil || lhs[0] == obj) var x operand - check.expr(obj.typ, &x, init) + check.expr(newTarget(obj.typ, obj.name), &x, init) check.initVar(obj, &x, "variable declaration") return } diff --git a/src/cmd/compile/internal/types2/expr.go b/src/cmd/compile/internal/types2/expr.go index e1c2c8ff2a..124d9701d6 100644 --- a/src/cmd/compile/internal/types2/expr.go +++ b/src/cmd/compile/internal/types2/expr.go @@ -956,18 +956,32 @@ const ( statement ) -// TODO(gri) In rawExpr below, consider using T instead of hint and -// some sort of "operation mode" instead of allowGeneric. -// May be clearer and less error-prone. +// target represent the (signature) type and description of the LHS +// variable of an assignment, or of a function result variable. +type target struct { + sig *Signature + desc string +} + +// newTarget creates a new target for the given type and description. +// The result is nil if typ is not a signature. +func newTarget(typ Type, desc string) *target { + if typ != nil { + if sig, _ := under(typ).(*Signature); sig != nil { + return &target{sig, desc} + } + } + return nil +} // rawExpr typechecks expression e and initializes x with the expression // value or type. If an error occurred, x.mode is set to invalid. -// If a non-nil target type T is given and e is a generic function -// or function call, T is used to infer the type arguments for e. +// If a non-nil target T is given and e is a generic function, +// T is used to infer the type arguments for e. // If hint != nil, it is the type of a composite literal element. // If allowGeneric is set, the operand type may be an uninstantiated // parameterized type or function value. -func (check *Checker) rawExpr(T Type, x *operand, e syntax.Expr, hint Type, allowGeneric bool) exprKind { +func (check *Checker) rawExpr(T *target, x *operand, e syntax.Expr, hint Type, allowGeneric bool) exprKind { if check.conf.Trace { check.trace(e.Pos(), "-- expr %s", e) check.indent++ @@ -989,9 +1003,9 @@ func (check *Checker) rawExpr(T Type, x *operand, e syntax.Expr, hint Type, allo } // If x is a generic type, or a generic function whose type arguments cannot be inferred -// from a non-nil target type T, nonGeneric reports an error and invalidates x.mode and x.typ. +// from a non-nil target T, nonGeneric reports an error and invalidates x.mode and x.typ. // Otherwise it leaves x alone. -func (check *Checker) nonGeneric(T Type, x *operand) { +func (check *Checker) nonGeneric(T *target, x *operand) { if x.mode == invalid || x.mode == novalue { return } @@ -1004,10 +1018,8 @@ func (check *Checker) nonGeneric(T Type, x *operand) { case *Signature: if t.tparams != nil { if enableReverseTypeInference && T != nil { - if tsig, _ := under(T).(*Signature); tsig != nil { - check.funcInst(tsig, x.Pos(), x, nil, true) - return - } + check.funcInst(T, x.Pos(), x, nil, true) + return } what = "function" } @@ -1022,7 +1034,7 @@ func (check *Checker) nonGeneric(T Type, x *operand) { // exprInternal contains the core of type checking of expressions. // Must only be called by rawExpr. // (See rawExpr for an explanation of the parameters.) -func (check *Checker) exprInternal(T Type, x *operand, e syntax.Expr, hint Type) exprKind { +func (check *Checker) exprInternal(T *target, x *operand, e syntax.Expr, hint Type) exprKind { // make sure x has a valid state in case of bailout // (was go.dev/issue/5770) x.mode = invalid @@ -1332,11 +1344,10 @@ func (check *Checker) exprInternal(T Type, x *operand, e syntax.Expr, hint Type) case *syntax.IndexExpr: if check.indexExpr(x, e) { - var tsig *Signature - if enableReverseTypeInference && T != nil { - tsig, _ = under(T).(*Signature) + if !enableReverseTypeInference { + T = nil } - check.funcInst(tsig, e.Pos(), x, e, true) + check.funcInst(T, e.Pos(), x, e, true) } if x.mode == invalid { goto Error @@ -1547,11 +1558,11 @@ func (check *Checker) typeAssertion(e syntax.Expr, x *operand, T Type, typeSwitc } // expr typechecks expression e and initializes x with the expression value. -// If a non-nil target type T is given and e is a generic function -// or function call, T is used to infer the type arguments for e. +// If a non-nil target T is given and e is a generic function or +// a function call, T is used to infer the type arguments for e. // The result must be a single value. // If an error occurred, x.mode is set to invalid. -func (check *Checker) expr(T Type, x *operand, e syntax.Expr) { +func (check *Checker) expr(T *target, x *operand, e syntax.Expr) { check.rawExpr(T, x, e, nil, false) check.exclude(x, 1< Date: Mon, 11 Dec 2023 17:54:18 -0800 Subject: [PATCH 228/313] go/types, types2: flip message contents for reverse type inference errors Add a new flag 'reverse' to control the formatting of type inference error messages. This change only impacts error messages. Fixes #60747. Change-Id: I81e13075e3157252ccc09f358bd29bd676c34499 Reviewed-on: https://go-review.googlesource.com/c/go/+/549055 Reviewed-by: Robert Findley Reviewed-by: Robert Griesemer Auto-Submit: Robert Griesemer Run-TryBot: Robert Griesemer TryBot-Result: Gopher Robot --- src/cmd/compile/internal/types2/call.go | 6 ++++-- src/cmd/compile/internal/types2/infer.go | 10 ++++++++-- src/go/types/call.go | 6 ++++-- src/go/types/infer.go | 10 ++++++++-- src/internal/types/testdata/examples/inference2.go | 14 +++++++------- .../types/testdata/fixedbugs/issue60688.go | 2 +- .../types/testdata/fixedbugs/issue60747.go | 4 ++-- 7 files changed, 34 insertions(+), 18 deletions(-) diff --git a/src/cmd/compile/internal/types2/call.go b/src/cmd/compile/internal/types2/call.go index 7d9b80f661..db7d86e3d3 100644 --- a/src/cmd/compile/internal/types2/call.go +++ b/src/cmd/compile/internal/types2/call.go @@ -87,6 +87,7 @@ func (check *Checker) funcInst(T *target, pos syntax.Pos, x *operand, inst *synt // var args []*operand var params []*Var + var reverse bool if T != nil && sig.tparams != nil { if !versionErr && !check.allowVersion(check.pkg, instErrPos, go1_21) { if inst != nil { @@ -102,13 +103,14 @@ func (check *Checker) funcInst(T *target, pos syntax.Pos, x *operand, inst *synt // that makes sense when reported in error messages from infer, below. expr := syntax.NewName(x.Pos(), T.desc) args = []*operand{{mode: value, expr: expr, typ: T.sig}} + reverse = true } // Rename type parameters to avoid problems with recursive instantiations. // Note that NewTuple(params...) below is (*Tuple)(nil) if len(params) == 0, as desired. tparams, params2 := check.renameTParams(pos, sig.TypeParams().list(), NewTuple(params...)) - targs = check.infer(pos, tparams, targs, params2.(*Tuple), args) + targs = check.infer(pos, tparams, targs, params2.(*Tuple), args, reverse) if targs == nil { // error was already reported x.mode = invalid @@ -608,7 +610,7 @@ func (check *Checker) arguments(call *syntax.CallExpr, sig *Signature, targs []T // infer missing type arguments of callee and function arguments if len(tparams) > 0 { - targs = check.infer(call.Pos(), tparams, targs, sigParams, args) + targs = check.infer(call.Pos(), tparams, targs, sigParams, args, false) if targs == nil { // TODO(gri) If infer inferred the first targs[:n], consider instantiating // the call signature for better error messages/gopls behavior. diff --git a/src/cmd/compile/internal/types2/infer.go b/src/cmd/compile/internal/types2/infer.go index 94f2de7b3c..a520f70253 100644 --- a/src/cmd/compile/internal/types2/infer.go +++ b/src/cmd/compile/internal/types2/infer.go @@ -24,9 +24,11 @@ const enableReverseTypeInference = true // disable for debugging // based on the given type parameters tparams, type arguments targs, function parameters params, and // function arguments args, if any. There must be at least one type parameter, no more type arguments // than type parameters, and params and args must match in number (incl. zero). +// If reverse is set, an error message's contents are reversed for a better error message for some +// errors related to reverse type inference (where the function call is synthetic). // If successful, infer returns the complete list of given and inferred type arguments, one for each // type parameter. Otherwise the result is nil and appropriate errors will be reported. -func (check *Checker) infer(pos syntax.Pos, tparams []*TypeParam, targs []Type, params *Tuple, args []*operand) (inferred []Type) { +func (check *Checker) infer(pos syntax.Pos, tparams []*TypeParam, targs []Type, params *Tuple, args []*operand, reverse bool) (inferred []Type) { // Don't verify result conditions if there's no error handler installed: // in that case, an error leads to an exit panic and the result value may // be incorrect. But in that case it doesn't matter because callers won't @@ -137,7 +139,11 @@ func (check *Checker) infer(pos syntax.Pos, tparams []*TypeParam, targs []Type, // InvalidTypeArg). We can't differentiate these cases, so fall back on // the more general CannotInferTypeArgs. if inferred != tpar { - check.errorf(arg, CannotInferTypeArgs, "type %s of %s does not match inferred type %s for %s", targ, arg.expr, inferred, tpar) + if reverse { + check.errorf(arg, CannotInferTypeArgs, "inferred type %s for %s does not match type %s of %s", inferred, tpar, targ, arg.expr) + } else { + check.errorf(arg, CannotInferTypeArgs, "type %s of %s does not match inferred type %s for %s", targ, arg.expr, inferred, tpar) + } } else { check.errorf(arg, CannotInferTypeArgs, "type %s of %s does not match %s", targ, arg.expr, tpar) } diff --git a/src/go/types/call.go b/src/go/types/call.go index 5ac556c511..c7de3bdb9f 100644 --- a/src/go/types/call.go +++ b/src/go/types/call.go @@ -89,6 +89,7 @@ func (check *Checker) funcInst(T *target, pos token.Pos, x *operand, ix *typepar // var args []*operand var params []*Var + var reverse bool if T != nil && sig.tparams != nil { if !versionErr && !check.allowVersion(check.pkg, instErrPos, go1_21) { if ix != nil { @@ -105,13 +106,14 @@ func (check *Checker) funcInst(T *target, pos token.Pos, x *operand, ix *typepar expr := ast.NewIdent(T.desc) expr.NamePos = x.Pos() // correct position args = []*operand{{mode: value, expr: expr, typ: T.sig}} + reverse = true } // Rename type parameters to avoid problems with recursive instantiations. // Note that NewTuple(params...) below is (*Tuple)(nil) if len(params) == 0, as desired. tparams, params2 := check.renameTParams(pos, sig.TypeParams().list(), NewTuple(params...)) - targs = check.infer(atPos(pos), tparams, targs, params2.(*Tuple), args) + targs = check.infer(atPos(pos), tparams, targs, params2.(*Tuple), args, reverse) if targs == nil { // error was already reported x.mode = invalid @@ -610,7 +612,7 @@ func (check *Checker) arguments(call *ast.CallExpr, sig *Signature, targs []Type // infer missing type arguments of callee and function arguments if len(tparams) > 0 { - targs = check.infer(call, tparams, targs, sigParams, args) + targs = check.infer(call, tparams, targs, sigParams, args, false) if targs == nil { // TODO(gri) If infer inferred the first targs[:n], consider instantiating // the call signature for better error messages/gopls behavior. diff --git a/src/go/types/infer.go b/src/go/types/infer.go index ed9841f06e..889de000b0 100644 --- a/src/go/types/infer.go +++ b/src/go/types/infer.go @@ -26,9 +26,11 @@ const enableReverseTypeInference = true // disable for debugging // based on the given type parameters tparams, type arguments targs, function parameters params, and // function arguments args, if any. There must be at least one type parameter, no more type arguments // than type parameters, and params and args must match in number (incl. zero). +// If reverse is set, an error message's contents are reversed for a better error message for some +// errors related to reverse type inference (where the function call is synthetic). // If successful, infer returns the complete list of given and inferred type arguments, one for each // type parameter. Otherwise the result is nil and appropriate errors will be reported. -func (check *Checker) infer(posn positioner, tparams []*TypeParam, targs []Type, params *Tuple, args []*operand) (inferred []Type) { +func (check *Checker) infer(posn positioner, tparams []*TypeParam, targs []Type, params *Tuple, args []*operand, reverse bool) (inferred []Type) { // Don't verify result conditions if there's no error handler installed: // in that case, an error leads to an exit panic and the result value may // be incorrect. But in that case it doesn't matter because callers won't @@ -139,7 +141,11 @@ func (check *Checker) infer(posn positioner, tparams []*TypeParam, targs []Type, // InvalidTypeArg). We can't differentiate these cases, so fall back on // the more general CannotInferTypeArgs. if inferred != tpar { - check.errorf(arg, CannotInferTypeArgs, "type %s of %s does not match inferred type %s for %s", targ, arg.expr, inferred, tpar) + if reverse { + check.errorf(arg, CannotInferTypeArgs, "inferred type %s for %s does not match type %s of %s", inferred, tpar, targ, arg.expr) + } else { + check.errorf(arg, CannotInferTypeArgs, "type %s of %s does not match inferred type %s for %s", targ, arg.expr, inferred, tpar) + } } else { check.errorf(arg, CannotInferTypeArgs, "type %s of %s does not match %s", targ, arg.expr, tpar) } diff --git a/src/internal/types/testdata/examples/inference2.go b/src/internal/types/testdata/examples/inference2.go index a4cfa3b413..91f9df1d84 100644 --- a/src/internal/types/testdata/examples/inference2.go +++ b/src/internal/types/testdata/examples/inference2.go @@ -27,9 +27,9 @@ var ( _ func(int) int = f3[int] v6 func(int, int) = f4 - v7 func(int, string) = f4 // ERROR "type func(int, string) of v7 does not match inferred type func(int, int) for func(P, P)" + v7 func(int, string) = f4 // ERROR "inferred type func(int, int) for func(P, P) does not match type func(int, string) of v7" v8 func(int) []int = f5 - v9 func(string) []int = f5 // ERROR "type func(string) []int of v9 does not match inferred type func(string) []string for func(P) []P" + v9 func(string) []int = f5 // ERROR "inferred type func(string) []string for func(P) []P does not match type func(string) []int of v9" _, _ func(int) = f1, f1 _, _ func(int) = f1, f2 // ERROR "cannot infer P" @@ -49,13 +49,13 @@ func _() { v5 = f3[int] v6 = f4 - v7 = f4 // ERROR "type func(int, string) of v7 does not match inferred type func(int, int) for func(P, P)" + v7 = f4 // ERROR "inferred type func(int, int) for func(P, P) does not match type func(int, string) of v7" v8 = f5 - v9 = f5 // ERROR "type func(string) []int of v9 does not match inferred type func(string) []string for func(P) []P" + v9 = f5 // ERROR "inferred type func(string) []string for func(P) []P does not match type func(string) []int of v9" // non-trivial LHS var a [2]func(string) []int - a[0] = f5 // ERROR "type func(string) []int of a[0] does not match inferred type func(string) []string for func(P) []P" + a[0] = f5 // ERROR "inferred type func(string) []string for func(P) []P does not match type func(string) []int of a[0]" } // Return statements @@ -66,11 +66,11 @@ func _() func(int) int { return f3[int] } func _() func(int, int) { return f4 } func _() func(int, string) { - return f4 /* ERROR "type func(int, string) of result variable does not match inferred type func(int, int) for func(P, P)" */ + return f4 /* ERROR "inferred type func(int, int) for func(P, P) does not match type func(int, string) of result variable" */ } func _() func(int) []int { return f5 } func _() func(string) []int { - return f5 /* ERROR "type func(string) []int of result variable does not match inferred type func(string) []string for func(P) []P" */ + return f5 /* ERROR "inferred type func(string) []string for func(P) []P does not match type func(string) []int of result variable" */ } func _() (_, _ func(int)) { return f1, f1 } diff --git a/src/internal/types/testdata/fixedbugs/issue60688.go b/src/internal/types/testdata/fixedbugs/issue60688.go index ba27f28851..61b9f91510 100644 --- a/src/internal/types/testdata/fixedbugs/issue60688.go +++ b/src/internal/types/testdata/fixedbugs/issue60688.go @@ -13,4 +13,4 @@ func g[P any](P, string) {} // be identical to match). // The result is an error from type inference, rather than an // error from an assignment mismatch. -var f func(int, String) = g // ERROR "type func(int, String) of f does not match inferred type func(int, string) for func(P, string)" +var f func(int, String) = g // ERROR "inferred type func(int, string) for func(P, string) does not match type func(int, String) of f" diff --git a/src/internal/types/testdata/fixedbugs/issue60747.go b/src/internal/types/testdata/fixedbugs/issue60747.go index c76e3d008c..6587a4e557 100644 --- a/src/internal/types/testdata/fixedbugs/issue60747.go +++ b/src/internal/types/testdata/fixedbugs/issue60747.go @@ -6,8 +6,8 @@ package p func f[P any](P) P { panic(0) } -var v func(string) int = f // ERROR "type func(string) int of v does not match inferred type func(string) string for func(P) P" +var v func(string) int = f // ERROR "inferred type func(string) string for func(P) P does not match type func(string) int of v" func _() func(string) int { - return f // ERROR "type func(string) int of result variable does not match inferred type func(string) string for func(P) P" + return f // ERROR "inferred type func(string) string for func(P) P does not match type func(string) int of result variable" } From c2079deb24c3dd5189f09a34f4ccbe7bf5cffa42 Mon Sep 17 00:00:00 2001 From: Mauri de Souza Meneguzzo Date: Mon, 11 Dec 2023 00:22:50 +0000 Subject: [PATCH 229/313] cmd/cgo/internal/testsanitizers: check for go build and cgo in fuzzer and msan tests Make sure the platform we are running the tests on can compile programs and has cgo support in order to run the fuzzer and msan tests. This is the same approach used by the asan tests, which share the same requirements. Fixes #64626 Change-Id: I7c0b912dabdd1b7d7d44437e4ade5e5994994796 GitHub-Last-Rev: 9fae6970f0f3b32a24893ef32fc4b38fa5a2a96d GitHub-Pull-Request: golang/go#64640 Reviewed-on: https://go-review.googlesource.com/c/go/+/548715 LUCI-TryBot-Result: Go LUCI Auto-Submit: Bryan Mills Reviewed-by: Matthew Dempsky Reviewed-by: Bryan Mills --- src/cmd/cgo/internal/testsanitizers/libfuzzer_test.go | 3 +++ src/cmd/cgo/internal/testsanitizers/msan_test.go | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/cmd/cgo/internal/testsanitizers/libfuzzer_test.go b/src/cmd/cgo/internal/testsanitizers/libfuzzer_test.go index f84c9f37ae..3f5b1d91c7 100644 --- a/src/cmd/cgo/internal/testsanitizers/libfuzzer_test.go +++ b/src/cmd/cgo/internal/testsanitizers/libfuzzer_test.go @@ -7,11 +7,14 @@ package sanitizers_test import ( + "internal/testenv" "strings" "testing" ) func TestLibFuzzer(t *testing.T) { + testenv.MustHaveGoBuild(t) + testenv.MustHaveCGO(t) goos, err := goEnv("GOOS") if err != nil { t.Fatal(err) diff --git a/src/cmd/cgo/internal/testsanitizers/msan_test.go b/src/cmd/cgo/internal/testsanitizers/msan_test.go index 1a22b5246c..83d66f6660 100644 --- a/src/cmd/cgo/internal/testsanitizers/msan_test.go +++ b/src/cmd/cgo/internal/testsanitizers/msan_test.go @@ -8,11 +8,14 @@ package sanitizers_test import ( "internal/platform" + "internal/testenv" "strings" "testing" ) func TestMSAN(t *testing.T) { + testenv.MustHaveGoBuild(t) + testenv.MustHaveCGO(t) goos, err := goEnv("GOOS") if err != nil { t.Fatal(err) From 4daf924f6323c735ae4ff3d731c5e825fc632c2d Mon Sep 17 00:00:00 2001 From: Damien Neil Date: Tue, 12 Dec 2023 10:52:57 -0800 Subject: [PATCH 230/313] doc/go1.22: remove reference to #60107 This was implemented in Go 1.21. Change-Id: Ic434670938589f10f367b1f893c4427e6f0b991c Reviewed-on: https://go-review.googlesource.com/c/go/+/549196 Auto-Submit: Damien Neil Reviewed-by: Roland Shoemaker LUCI-TryBot-Result: Go LUCI Reviewed-by: Mauri de Souza Meneguzzo --- doc/go1.22.html | 4 ---- 1 file changed, 4 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 720d356efe..daae19fdbc 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -348,10 +348,6 @@ defer func() { TODO: https://go.dev/issue/43922: implement RFC7627

-

- TODO: https://go.dev/issue/60107: QUIC 0-RTT APIs -

-

TODO: https://go.dev/issue/62459: make default minimum version for servers TLS 1.2

From 962dade46b07a7d914b23de0bc8cc66e0c5b7ced Mon Sep 17 00:00:00 2001 From: qmuntal Date: Sun, 10 Dec 2023 18:38:08 +0100 Subject: [PATCH 231/313] doc: document SetUnhandledExceptionFilter interop For #50951. For #61422. Change-Id: Ib9038a00de8f4d8606443e9acd414402023cde63 Reviewed-on: https://go-review.googlesource.com/c/go/+/548319 Reviewed-by: Alex Brainman LUCI-TryBot-Result: Go LUCI Reviewed-by: Bryan Mills Reviewed-by: Cherry Mui --- doc/go1.22.html | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/go1.22.html b/doc/go1.22.html index daae19fdbc..8bcaeedc00 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -203,6 +203,13 @@ defer func() { workaround will be removed in a future release.

+

+ On the windows/amd64 port, programs linking or loading Go libraries built with + -buildmode=c-archive or -buildmode=c-shared can now use + the SetUnhandledExceptionFilter Win32 function to catch exceptions not handled + by the Go runtime. Note that this was already supported on the windows/386 port. +

+

Compiler

From dce7f335c5f9373dc1b56d7165f1a722e9240c61 Mon Sep 17 00:00:00 2001 From: Damien Neil Date: Tue, 12 Dec 2023 11:10:35 -0800 Subject: [PATCH 232/313] doc/go1.22: document zero-copy to net.UnixConn For #58808 Change-Id: Id73b9e4b5fb96426a01b76ce7a1053a6ad61a58e Reviewed-on: https://go-review.googlesource.com/c/go/+/549197 LUCI-TryBot-Result: Go LUCI Reviewed-by: Roland Shoemaker Auto-Submit: Damien Neil --- doc/go1.22.html | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 8bcaeedc00..31218beba6 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -602,7 +602,10 @@ defer func() {

net

- TODO: https://go.dev/issue/58808: arrange zero-copy of os.File and TCPConn to UnixConn + When io.Copy copies + from a TCPConn to a UnixConn, + it will now use Linux's sendfile(2) system call if possible, + using the new method TCPConn.WriteTo.

@@ -672,7 +675,10 @@ defer func() {

- TODO: https://go.dev/issue/58808: arrange zero-copy of os.File and TCPConn to UnixConn + When io.Copy copies + from a File to a net.UnixConn, + it will now use Linux's sendfile(2) system call if possible, + using the new method File.WriteTo.

From 89c532e8b29ae8ea944f6b6ba887d57ac5faf387 Mon Sep 17 00:00:00 2001 From: Damien Neil Date: Tue, 12 Dec 2023 11:27:01 -0800 Subject: [PATCH 233/313] doc/go1.22: document minor net/http changes For #51971 For #61679 Change-Id: Ie7b44201a9c40f5563c6d6051d22ae807ad0480d Reviewed-on: https://go-review.googlesource.com/c/go/+/549198 LUCI-TryBot-Result: Go LUCI Auto-Submit: Damien Neil Reviewed-by: Mauri de Souza Meneguzzo Reviewed-by: Roland Shoemaker --- doc/go1.22.html | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 31218beba6..9cea5ba8c2 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -620,19 +620,24 @@ defer func() {
net/http

- TODO: https://go.dev/issue/51971: add ServeFileFS, FileServerFS, NewFileTransportFS + The new functions + ServeFileFS, + FileServerFS, and + NewFileTransportFS + are versions of the existing + ServeFile, FileServer, and NewFileTransport, + operating on an fs.FS.

TODO: https://go.dev/issue/61410: enhanced ServeMux routing

-

- TODO: https://go.dev/cl/513956: net/http: add ServeFileFS, FileServerFS, NewFileTransportFS; modified api/next/51971.txt -

- -

- TODO: https://go.dev/cl/517336: net/http: disallow empty Content-Length header +

+ The HTTP server and client now reject requests and responses containing + an invalid empty Content-Length header. + The previous behavior may be restored by setting + GODEBUG field httplaxcontentlength=1.

From 400e24a8be852e7b20eb4af1999b28c20bb4ea21 Mon Sep 17 00:00:00 2001 From: Roland Shoemaker Date: Tue, 12 Dec 2023 09:28:03 -0800 Subject: [PATCH 234/313] crypto/x509: properly gate test on macos version Fixes the gating of TestIssue51759 by shelling out to sw_vers to check what version of macOS we are on. Fixes #64677 Change-Id: I5eef4fa39e5449e7b2aa73864625c3abf002aef8 Reviewed-on: https://go-review.googlesource.com/c/go/+/549195 Reviewed-by: Bryan Mills Auto-Submit: Roland Shoemaker LUCI-TryBot-Result: Go LUCI --- src/crypto/x509/verify_test.go | 35 +++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/src/crypto/x509/verify_test.go b/src/crypto/x509/verify_test.go index 7bc74462de..861d2b3890 100644 --- a/src/crypto/x509/verify_test.go +++ b/src/crypto/x509/verify_test.go @@ -16,9 +16,11 @@ import ( "fmt" "internal/testenv" "math/big" + "os/exec" "reflect" "runtime" "sort" + "strconv" "strings" "testing" "time" @@ -1867,17 +1869,40 @@ func TestSystemRootsErrorUnwrap(t *testing.T) { } } +func macosMajorVersion(t *testing.T) (int, error) { + cmd := testenv.Command(t, "sw_vers", "-productVersion") + out, err := cmd.Output() + if err != nil { + if ee, ok := err.(*exec.ExitError); ok && len(ee.Stderr) > 0 { + return 0, fmt.Errorf("%v: %v\n%s", cmd, err, ee.Stderr) + } + return 0, fmt.Errorf("%v: %v", cmd, err) + } + before, _, ok := strings.Cut(string(out), ".") + major, err := strconv.Atoi(before) + if !ok || err != nil { + return 0, fmt.Errorf("%v: unexpected output: %q", cmd, out) + } + + return major, nil +} + func TestIssue51759(t *testing.T) { if runtime.GOOS != "darwin" { t.Skip("only affects darwin") } - builder := testenv.Builder() - if builder == "" { - t.Skip("only run this test on the builders, as we have no reasonable way to gate tests on macOS versions elsewhere") - } - if builder == "darwin-amd64-10_14" || builder == "darwin-amd64-10_15" { + + testenv.MustHaveExecPath(t, "sw_vers") + if vers, err := macosMajorVersion(t); err != nil { + if builder := testenv.Builder(); builder != "" { + t.Fatalf("unable to determine macOS version: %s", err) + } else { + t.Skip("unable to determine macOS version") + } + } else if vers < 11 { t.Skip("behavior only enforced in macOS 11 and after") } + // badCertData contains a cert that we parse as valid // but that macOS SecCertificateCreateWithData rejects. const badCertData = "0\x82\x01U0\x82\x01\a\xa0\x03\x02\x01\x02\x02\x01\x020\x05\x06\x03+ep0R1P0N\x06\x03U\x04\x03\x13Gderpkey8dc58100b2493614ee1692831a461f3f4dd3f9b3b088e244f887f81b4906ac260\x1e\x17\r220112235755Z\x17\r220313235755Z0R1P0N\x06\x03U\x04\x03\x13Gderpkey8dc58100b2493614ee1692831a461f3f4dd3f9b3b088e244f887f81b4906ac260*0\x05\x06\x03+ep\x03!\x00bA\xd8e\xadW\xcb\xefZ\x89\xb5\"\x1eR\x9d\xba\x0e:\x1042Q@\u007f\xbd\xfb{ks\x04\xd1£\x020\x000\x05\x06\x03+ep\x03A\x00[\xa7\x06y\x86(\x94\x97\x9eLwA\x00\x01x\xaa\xbc\xbd Ê]\n(΅!ف0\xf5\x9a%I\x19<\xffo\xf1\xeaaf@\xb1\xa7\xaf\xfd\xe9R\xc7\x0f\x8d&\xd5\xfc\x0f;Ϙ\x82\x84a\xbc\r" From 7cac742f1769f92313eac2188088c36d4aae1b74 Mon Sep 17 00:00:00 2001 From: Mauri de Souza Meneguzzo Date: Tue, 12 Dec 2023 21:32:10 +0000 Subject: [PATCH 235/313] doc/go1.22: document reflect.TypeFor Change-Id: I122a3422f541f66d9f6e644a9f287f0e5a5729d2 GitHub-Last-Rev: 1d9fe39d0c1221d7179476383f3d503e45daa051 GitHub-Pull-Request: golang/go#64688 Reviewed-on: https://go-review.googlesource.com/c/go/+/549295 Reviewed-by: Michael Pratt Auto-Submit: Michael Knyszek LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek --- doc/go1.22.html | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 9cea5ba8c2..1ac0e7e6ee 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -728,8 +728,13 @@ defer func() { in favor of PointerTo.

-

- TODO: https://go.dev/issue/60088: reflect: add TypeFor +

+ The new function TypeFor + returns the Type that represents + the type argument T. + Previously, to get the reflect.Type value for a type, one had to use + reflect.TypeOf((*T)(nil)).Elem(). + This may now be written as reflect.TypeFor[T]().

From 58c28ba286dd0e98fe4cca80f5d64bbcb824a685 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Tue, 12 Dec 2023 15:40:16 -0800 Subject: [PATCH 236/313] go/types, types2: avoid confusing error message "have m(T), want m(T)" This is a partial fix for situations where a method lookup leads to an error due to non-matching signatures, but where the signatures print exactly the same. This can happen if both signatures contain type parameters (after instantiation) and the type parameters have the same name (such as "T"). For now, rather than printing a confusing error message in this case, leave away the confusing part of the error message (at the cost of providing slightly less information). In the long run, we need to find a better solution for this problem; but this seems better than what we had before. For #61685. Change-Id: I259183f08b9db400ffc8e1cf447967c640a0f444 Reviewed-on: https://go-review.googlesource.com/c/go/+/549296 Reviewed-by: Robert Griesemer Run-TryBot: Robert Griesemer TryBot-Result: Gopher Robot Reviewed-by: Robert Findley Auto-Submit: Robert Griesemer --- src/cmd/compile/internal/types2/lookup.go | 14 ++++++++++++-- src/go/types/lookup.go | 14 ++++++++++++-- .../types/testdata/fixedbugs/issue61685.go | 15 +++++++++++++++ 3 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 src/internal/types/testdata/fixedbugs/issue61685.go diff --git a/src/cmd/compile/internal/types2/lookup.go b/src/cmd/compile/internal/types2/lookup.go index 893cdb157d..014a5489cd 100644 --- a/src/cmd/compile/internal/types2/lookup.go +++ b/src/cmd/compile/internal/types2/lookup.go @@ -445,8 +445,18 @@ func (check *Checker) missingMethod(V, T Type, static bool, equivalent func(x, y // Add package information to disambiguate (go.dev/issue/54258). fs, ms = check.funcString(f, true), check.funcString(m, true) } - *cause = check.sprintf("(wrong type for method %s)\n\t\thave %s\n\t\twant %s", - m.Name(), fs, ms) + if fs == ms { + // We still have "want Foo, have Foo". + // This is most likely due to different type parameters with + // the same name appearing in the instantiated signatures + // (go.dev/issue/61685). + // Rather than reporting this misleading error cause, for now + // just point out that the method signature is incorrect. + // TODO(gri) should find a good way to report the root cause + *cause = check.sprintf("(wrong type for method %s)", m.Name()) + break + } + *cause = check.sprintf("(wrong type for method %s)\n\t\thave %s\n\t\twant %s", m.Name(), fs, ms) case ambigSel: *cause = check.sprintf("(ambiguous selector %s.%s)", V, m.Name()) case ptrRecv: diff --git a/src/go/types/lookup.go b/src/go/types/lookup.go index 2857ba358c..05d30c178a 100644 --- a/src/go/types/lookup.go +++ b/src/go/types/lookup.go @@ -447,8 +447,18 @@ func (check *Checker) missingMethod(V, T Type, static bool, equivalent func(x, y // Add package information to disambiguate (go.dev/issue/54258). fs, ms = check.funcString(f, true), check.funcString(m, true) } - *cause = check.sprintf("(wrong type for method %s)\n\t\thave %s\n\t\twant %s", - m.Name(), fs, ms) + if fs == ms { + // We still have "want Foo, have Foo". + // This is most likely due to different type parameters with + // the same name appearing in the instantiated signatures + // (go.dev/issue/61685). + // Rather than reporting this misleading error cause, for now + // just point out that the method signature is incorrect. + // TODO(gri) should find a good way to report the root cause + *cause = check.sprintf("(wrong type for method %s)", m.Name()) + break + } + *cause = check.sprintf("(wrong type for method %s)\n\t\thave %s\n\t\twant %s", m.Name(), fs, ms) case ambigSel: *cause = check.sprintf("(ambiguous selector %s.%s)", V, m.Name()) case ptrRecv: diff --git a/src/internal/types/testdata/fixedbugs/issue61685.go b/src/internal/types/testdata/fixedbugs/issue61685.go new file mode 100644 index 0000000000..b88b222eb9 --- /dev/null +++ b/src/internal/types/testdata/fixedbugs/issue61685.go @@ -0,0 +1,15 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package p + +func _[T any](x any) { + f /* ERROR "T (type I[T]) does not satisfy I[T] (wrong type for method m)" */ (x.(I[T])) +} + +func f[T I[T]](T) {} + +type I[T any] interface { + m(T) +} From f2d243db8f7592fc436ec8a71637875b6c3223ec Mon Sep 17 00:00:00 2001 From: Mauri de Souza Meneguzzo Date: Tue, 12 Dec 2023 21:39:54 +0000 Subject: [PATCH 237/313] iter: fix race instrumentation for Pull2 Pull2 tests are failing with -race, giving false-positive race conditions due to bad race instrumentation. No tests for this as it should be caught by the race builders. The only reason it was not caught is because it is behind GOEXPERIMENT=rangefunc. Fixes #64651 Change-Id: I20554da930b0e19594e0e267f01a1e7a9cbc577a GitHub-Last-Rev: 7c1f19238d2c0b7efa5f0a2033893914e402bbc2 GitHub-Pull-Request: golang/go#64653 Reviewed-on: https://go-review.googlesource.com/c/go/+/548895 LUCI-TryBot-Result: Go LUCI Reviewed-by: Cherry Mui Reviewed-by: Michael Knyszek --- src/iter/iter.go | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/iter/iter.go b/src/iter/iter.go index 240df00f7f..40e4770347 100644 --- a/src/iter/iter.go +++ b/src/iter/iter.go @@ -14,8 +14,7 @@ package iter import ( "internal/race" "unsafe" - _ "unsafe" -) // for linkname +) // Seq is an iterator over sequences of individual values. // When called as seq(yield), seq calls yield(v) for each value v in the sequence, @@ -122,18 +121,22 @@ func Pull[V any](seq Seq[V]) (next func() (V, bool), stop func()) { // simultaneously. func Pull2[K, V any](seq Seq2[K, V]) (next func() (K, V, bool), stop func()) { var ( - k K - v V - ok bool - done bool + k K + v V + ok bool + done bool + racer int ) c := newcoro(func(c *coro) { + race.Acquire(unsafe.Pointer(&racer)) yield := func(k1 K, v1 V) bool { if done { return false } k, v, ok = k1, v1, true + race.Release(unsafe.Pointer(&racer)) coroswitch(c) + race.Acquire(unsafe.Pointer(&racer)) return !done } seq(yield) @@ -141,20 +144,25 @@ func Pull2[K, V any](seq Seq2[K, V]) (next func() (K, V, bool), stop func()) { var v0 V k, v, ok = k0, v0, false done = true + race.Release(unsafe.Pointer(&racer)) }) next = func() (k1 K, v1 V, ok1 bool) { - race.Write(unsafe.Pointer(&c)) // detect races + race.Write(unsafe.Pointer(&racer)) // detect races if done { return } + race.Release(unsafe.Pointer(&racer)) coroswitch(c) + race.Acquire(unsafe.Pointer(&racer)) return k, v, ok } stop = func() { - race.Write(unsafe.Pointer(&c)) // detect races + race.Write(unsafe.Pointer(&racer)) // detect races if !done { done = true + race.Release(unsafe.Pointer(&racer)) coroswitch(c) + race.Acquire(unsafe.Pointer(&racer)) } } return next, stop From 0b3dd75f6c889d71f7b9bda022b239a1bc7fe4d9 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Tue, 12 Dec 2023 17:52:36 -0800 Subject: [PATCH 238/313] go/types, types2: better error message when missing method is unexported Change lookupMethod such that "foldCase" means "ignore case and package" and analyze a lookup result further to determine if a method name was not exported, and report a better error message in that case. Fixes #59831. Change-Id: Ice6222e1fc00dba13caeda6c48971e8473d12da5 Reviewed-on: https://go-review.googlesource.com/c/go/+/549298 Run-TryBot: Robert Griesemer Auto-Submit: Robert Griesemer Reviewed-by: Robert Findley TryBot-Result: Gopher Robot Reviewed-by: Robert Griesemer --- .../compile/internal/types2/issues_test.go | 73 +++++++++++++++++++ src/cmd/compile/internal/types2/lookup.go | 18 +++-- src/go/types/issues_test.go | 73 +++++++++++++++++++ src/go/types/lookup.go | 18 +++-- 4 files changed, 172 insertions(+), 10 deletions(-) diff --git a/src/cmd/compile/internal/types2/issues_test.go b/src/cmd/compile/internal/types2/issues_test.go index a8b70b8964..a8893cf6de 100644 --- a/src/cmd/compile/internal/types2/issues_test.go +++ b/src/cmd/compile/internal/types2/issues_test.go @@ -1003,3 +1003,76 @@ type S struct{ A } t.Fatalf("got %q; want %q", got, want) } } + +func TestIssue59831(t *testing.T) { + // Package a exports a type S with an unexported method m; + // the tests check the error messages when m is not found. + const asrc = `package a; type S struct{}; func (S) m() {}` + apkg := mustTypecheck(asrc, nil, nil) + + // Package b exports a type S with an exported method m; + // the tests check the error messages when M is not found. + const bsrc = `package b; type S struct{}; func (S) M() {}` + bpkg := mustTypecheck(bsrc, nil, nil) + + tests := []struct { + imported *Package + src, err string + }{ + // tests importing a (or nothing) + {apkg, `package a1; import "a"; var _ interface { M() } = a.S{}`, + "a.S does not implement interface{M()} (missing method M) have m() want M()"}, + + {apkg, `package a2; import "a"; var _ interface { m() } = a.S{}`, + "a.S does not implement interface{m()} (unexported method m)"}, // test for issue + + {nil, `package a3; type S struct{}; func (S) m(); var _ interface { M() } = S{}`, + "S does not implement interface{M()} (missing method M) have m() want M()"}, + + {nil, `package a4; type S struct{}; func (S) m(); var _ interface { m() } = S{}`, + ""}, // no error expected + + {nil, `package a5; type S struct{}; func (S) m(); var _ interface { n() } = S{}`, + "S does not implement interface{n()} (missing method n)"}, + + // tests importing b (or nothing) + {bpkg, `package b1; import "b"; var _ interface { m() } = b.S{}`, + "b.S does not implement interface{m()} (missing method m) have M() want m()"}, + + {bpkg, `package b2; import "b"; var _ interface { M() } = b.S{}`, + ""}, // no error expected + + {nil, `package b3; type S struct{}; func (S) M(); var _ interface { M() } = S{}`, + ""}, // no error expected + + {nil, `package b4; type S struct{}; func (S) M(); var _ interface { m() } = S{}`, + "S does not implement interface{m()} (missing method m) have M() want m()"}, + + {nil, `package b5; type S struct{}; func (S) M(); var _ interface { n() } = S{}`, + "S does not implement interface{n()} (missing method n)"}, + } + + for _, test := range tests { + // typecheck test source + conf := Config{Importer: importHelper{pkg: test.imported}} + pkg, err := typecheck(test.src, &conf, nil) + if err == nil { + if test.err != "" { + t.Errorf("package %s: got no error, want %q", pkg.Name(), test.err) + } + continue + } + if test.err == "" { + t.Errorf("package %s: got %q, want not error", pkg.Name(), err.Error()) + } + + // flatten reported error message + errmsg := strings.ReplaceAll(err.Error(), "\n", " ") + errmsg = strings.ReplaceAll(errmsg, "\t", "") + + // verify error message + if !strings.Contains(errmsg, test.err) { + t.Errorf("package %s: got %q, want %q", pkg.Name(), errmsg, test.err) + } + } +} diff --git a/src/cmd/compile/internal/types2/lookup.go b/src/cmd/compile/internal/types2/lookup.go index 014a5489cd..bc47c15060 100644 --- a/src/cmd/compile/internal/types2/lookup.go +++ b/src/cmd/compile/internal/types2/lookup.go @@ -96,7 +96,7 @@ func LookupFieldOrMethod(T Type, addressable bool, pkg *Package, name string) (o // and missingMethod (the latter doesn't care about struct fields). // // If foldCase is true, method names are considered equal if they are equal -// with case folding. +// with case folding, irrespective of which package they are in. // // The resulting object may not be fully type-checked. func lookupFieldOrMethodImpl(T Type, addressable bool, pkg *Package, name string, foldCase bool) (obj Object, index []int, indirect bool) { @@ -343,6 +343,7 @@ func (check *Checker) missingMethod(V, T Type, static bool, equivalent func(x, y ok = iota notFound wrongName + unexported wrongSig ambigSel ptrRecv @@ -388,6 +389,11 @@ func (check *Checker) missingMethod(V, T Type, static bool, equivalent func(x, y f, _ = obj.(*Func) if f != nil { state = wrongName + if f.name == m.name { + // If the names are equal, f must be unexported + // (otherwise the package wouldn't matter). + state = unexported + } } } break @@ -436,8 +442,9 @@ func (check *Checker) missingMethod(V, T Type, static bool, equivalent func(x, y } case wrongName: fs, ms := check.funcString(f, false), check.funcString(m, false) - *cause = check.sprintf("(missing method %s)\n\t\thave %s\n\t\twant %s", - m.Name(), fs, ms) + *cause = check.sprintf("(missing method %s)\n\t\thave %s\n\t\twant %s", m.Name(), fs, ms) + case unexported: + *cause = check.sprintf("(unexported method %s)", m.Name()) case wrongSig: fs, ms := check.funcString(f, false), check.funcString(m, false) if fs == ms { @@ -582,11 +589,12 @@ func fieldIndex(fields []*Var, pkg *Package, name string) int { } // lookupMethod returns the index of and method with matching package and name, or (-1, nil). -// If foldCase is true, method names are considered equal if they are equal with case folding. +// If foldCase is true, method names are considered equal if they are equal with case folding +// and their packages are ignored (e.g., pkg1.m, pkg1.M, pkg2.m, and pkg2.M are all equal). func lookupMethod(methods []*Func, pkg *Package, name string, foldCase bool) (int, *Func) { if name != "_" { for i, m := range methods { - if (m.name == name || foldCase && strings.EqualFold(m.name, name)) && m.sameId(pkg, m.name) { + if m.sameId(pkg, name) || foldCase && strings.EqualFold(m.name, name) { return i, m } } diff --git a/src/go/types/issues_test.go b/src/go/types/issues_test.go index 91631fe9c7..b4c8218bc4 100644 --- a/src/go/types/issues_test.go +++ b/src/go/types/issues_test.go @@ -1013,3 +1013,76 @@ type S struct{ A } t.Fatalf("got %q; want %q", got, want) } } + +func TestIssue59831(t *testing.T) { + // Package a exports a type S with an unexported method m; + // the tests check the error messages when m is not found. + const asrc = `package a; type S struct{}; func (S) m() {}` + apkg := mustTypecheck(asrc, nil, nil) + + // Package b exports a type S with an exported method m; + // the tests check the error messages when M is not found. + const bsrc = `package b; type S struct{}; func (S) M() {}` + bpkg := mustTypecheck(bsrc, nil, nil) + + tests := []struct { + imported *Package + src, err string + }{ + // tests importing a (or nothing) + {apkg, `package a1; import "a"; var _ interface { M() } = a.S{}`, + "a.S does not implement interface{M()} (missing method M) have m() want M()"}, + + {apkg, `package a2; import "a"; var _ interface { m() } = a.S{}`, + "a.S does not implement interface{m()} (unexported method m)"}, // test for issue + + {nil, `package a3; type S struct{}; func (S) m(); var _ interface { M() } = S{}`, + "S does not implement interface{M()} (missing method M) have m() want M()"}, + + {nil, `package a4; type S struct{}; func (S) m(); var _ interface { m() } = S{}`, + ""}, // no error expected + + {nil, `package a5; type S struct{}; func (S) m(); var _ interface { n() } = S{}`, + "S does not implement interface{n()} (missing method n)"}, + + // tests importing b (or nothing) + {bpkg, `package b1; import "b"; var _ interface { m() } = b.S{}`, + "b.S does not implement interface{m()} (missing method m) have M() want m()"}, + + {bpkg, `package b2; import "b"; var _ interface { M() } = b.S{}`, + ""}, // no error expected + + {nil, `package b3; type S struct{}; func (S) M(); var _ interface { M() } = S{}`, + ""}, // no error expected + + {nil, `package b4; type S struct{}; func (S) M(); var _ interface { m() } = S{}`, + "S does not implement interface{m()} (missing method m) have M() want m()"}, + + {nil, `package b5; type S struct{}; func (S) M(); var _ interface { n() } = S{}`, + "S does not implement interface{n()} (missing method n)"}, + } + + for _, test := range tests { + // typecheck test source + conf := Config{Importer: importHelper{pkg: test.imported}} + pkg, err := typecheck(test.src, &conf, nil) + if err == nil { + if test.err != "" { + t.Errorf("package %s: got no error, want %q", pkg.Name(), test.err) + } + continue + } + if test.err == "" { + t.Errorf("package %s: got %q, want not error", pkg.Name(), err.Error()) + } + + // flatten reported error message + errmsg := strings.ReplaceAll(err.Error(), "\n", " ") + errmsg = strings.ReplaceAll(errmsg, "\t", "") + + // verify error message + if !strings.Contains(errmsg, test.err) { + t.Errorf("package %s: got %q, want %q", pkg.Name(), errmsg, test.err) + } + } +} diff --git a/src/go/types/lookup.go b/src/go/types/lookup.go index 05d30c178a..7723c43565 100644 --- a/src/go/types/lookup.go +++ b/src/go/types/lookup.go @@ -98,7 +98,7 @@ func LookupFieldOrMethod(T Type, addressable bool, pkg *Package, name string) (o // and missingMethod (the latter doesn't care about struct fields). // // If foldCase is true, method names are considered equal if they are equal -// with case folding. +// with case folding, irrespective of which package they are in. // // The resulting object may not be fully type-checked. func lookupFieldOrMethodImpl(T Type, addressable bool, pkg *Package, name string, foldCase bool) (obj Object, index []int, indirect bool) { @@ -345,6 +345,7 @@ func (check *Checker) missingMethod(V, T Type, static bool, equivalent func(x, y ok = iota notFound wrongName + unexported wrongSig ambigSel ptrRecv @@ -390,6 +391,11 @@ func (check *Checker) missingMethod(V, T Type, static bool, equivalent func(x, y f, _ = obj.(*Func) if f != nil { state = wrongName + if f.name == m.name { + // If the names are equal, f must be unexported + // (otherwise the package wouldn't matter). + state = unexported + } } } break @@ -438,8 +444,9 @@ func (check *Checker) missingMethod(V, T Type, static bool, equivalent func(x, y } case wrongName: fs, ms := check.funcString(f, false), check.funcString(m, false) - *cause = check.sprintf("(missing method %s)\n\t\thave %s\n\t\twant %s", - m.Name(), fs, ms) + *cause = check.sprintf("(missing method %s)\n\t\thave %s\n\t\twant %s", m.Name(), fs, ms) + case unexported: + *cause = check.sprintf("(unexported method %s)", m.Name()) case wrongSig: fs, ms := check.funcString(f, false), check.funcString(m, false) if fs == ms { @@ -584,11 +591,12 @@ func fieldIndex(fields []*Var, pkg *Package, name string) int { } // lookupMethod returns the index of and method with matching package and name, or (-1, nil). -// If foldCase is true, method names are considered equal if they are equal with case folding. +// If foldCase is true, method names are considered equal if they are equal with case folding +// and their packages are ignored (e.g., pkg1.m, pkg1.M, pkg2.m, and pkg2.M are all equal). func lookupMethod(methods []*Func, pkg *Package, name string, foldCase bool) (int, *Func) { if name != "_" { for i, m := range methods { - if (m.name == name || foldCase && strings.EqualFold(m.name, name)) && m.sameId(pkg, m.name) { + if m.sameId(pkg, name) || foldCase && strings.EqualFold(m.name, name) { return i, m } } From cc5ccd71ef6df461fed01a91c18c5adde10ae2c8 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Wed, 13 Dec 2023 11:12:44 -0800 Subject: [PATCH 239/313] doc: in pre-generic spec, be explicit that it is not the current spec Change-Id: I4cf7efc8e704d41ee2e3743f6aa712cc46dd1fe9 Reviewed-on: https://go-review.googlesource.com/c/go/+/549515 TryBot-Bypass: Robert Griesemer Reviewed-by: Robert Griesemer Auto-Submit: Robert Griesemer Reviewed-by: Alan Donovan --- doc/go1.17_spec.html | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/doc/go1.17_spec.html b/doc/go1.17_spec.html index 16c6d40ffc..c87d9aff3c 100644 --- a/doc/go1.17_spec.html +++ b/doc/go1.17_spec.html @@ -7,8 +7,11 @@

Introduction

-This is a reference manual for the Go programming language. For -more information and other documents, see go.dev. +This is the reference manual for the Go programming language as it was for +language version 1.17, in October 2021, before the introduction of generics. +It is provided for historical interest. +The current reference manual can be found here. +For more information and other documents, see go.dev.

From d95e25e83c922aa63fcb1f596d6bdf1786789edb Mon Sep 17 00:00:00 2001 From: Tolya Korniltsev Date: Tue, 12 Dec 2023 22:24:34 +0700 Subject: [PATCH 240/313] runtime/pprof: fix inlined generics locations When generic function[a,b] is inlined to the same generic function[b,a] with different types (not recursion) it is expected to get a pprof with a single Location with two functions. However due to incorrect check for generics names using runtime.Frame.Function, the profileBuilder assumes it is a recursion and emits separate Location. This change fixes the recursion check for generics functions by using runtime_expandFinalInlineFrame Fixes #64641 Change-Id: I3f58818f08ee322b281daa377fa421555ad328c9 Reviewed-on: https://go-review.googlesource.com/c/go/+/549135 Run-TryBot: Michael Pratt TryBot-Result: Gopher Robot Reviewed-by: Cherry Mui Reviewed-by: Michael Pratt LUCI-TryBot-Result: Go LUCI --- src/runtime/pprof/proto.go | 2 +- src/runtime/pprof/protomem_test.go | 99 ++++++++++++++++++++++++++---- 2 files changed, 89 insertions(+), 12 deletions(-) diff --git a/src/runtime/pprof/proto.go b/src/runtime/pprof/proto.go index db9384eb21..5214374bd9 100644 --- a/src/runtime/pprof/proto.go +++ b/src/runtime/pprof/proto.go @@ -561,7 +561,7 @@ func (d *pcDeck) tryAdd(pc uintptr, frames []runtime.Frame, symbolizeResult symb if last.Entry != newFrame.Entry { // newFrame is for a different function. return false } - if last.Function == newFrame.Function { // maybe recursion. + if runtime_FrameSymbolName(&last) == runtime_FrameSymbolName(&newFrame) { // maybe recursion. return false } } diff --git a/src/runtime/pprof/protomem_test.go b/src/runtime/pprof/protomem_test.go index 505c323d68..5fb67c53f6 100644 --- a/src/runtime/pprof/protomem_test.go +++ b/src/runtime/pprof/protomem_test.go @@ -8,6 +8,7 @@ import ( "bytes" "fmt" "internal/profile" + "internal/testenv" "runtime" "slices" "strings" @@ -90,22 +91,31 @@ func genericAllocFunc[T interface{ uint32 | uint64 }](n int) []T { return make([]T, n) } -func profileToString(p *profile.Profile) []string { +func profileToStrings(p *profile.Profile) []string { var res []string for _, s := range p.Sample { - var funcs []string - for i := len(s.Location) - 1; i >= 0; i-- { - loc := s.Location[i] - for j := len(loc.Line) - 1; j >= 0; j-- { - line := loc.Line[j] - funcs = append(funcs, line.Function.Name) - } - } - res = append(res, fmt.Sprintf("%s %v", strings.Join(funcs, ";"), s.Value)) + res = append(res, sampleToString(s)) } return res } +func sampleToString(s *profile.Sample) string { + var funcs []string + for i := len(s.Location) - 1; i >= 0; i-- { + loc := s.Location[i] + funcs = locationToStrings(loc, funcs) + } + return fmt.Sprintf("%s %v", strings.Join(funcs, ";"), s.Value) +} + +func locationToStrings(loc *profile.Location, funcs []string) []string { + for j := range loc.Line { + line := loc.Line[len(loc.Line)-1-j] + funcs = append(funcs, line.Function.Name) + } + return funcs +} + // This is a regression test for https://go.dev/issue/64528 . func TestGenericsHashKeyInPprofBuilder(t *testing.T) { previousRate := runtime.MemProfileRate @@ -130,7 +140,7 @@ func TestGenericsHashKeyInPprofBuilder(t *testing.T) { t.Fatalf("profile.Parse: %v", err) } - actual := profileToString(p) + actual := profileToStrings(p) expected := []string{ "testing.tRunner;runtime/pprof.TestGenericsHashKeyInPprofBuilder;runtime/pprof.genericAllocFunc[go.shape.uint32] [1 128 0 0]", "testing.tRunner;runtime/pprof.TestGenericsHashKeyInPprofBuilder;runtime/pprof.genericAllocFunc[go.shape.uint32] [1 256 0 0]", @@ -144,3 +154,70 @@ func TestGenericsHashKeyInPprofBuilder(t *testing.T) { } } } + +type opAlloc struct { + buf [128]byte +} + +type opCall struct { +} + +var sink []byte + +func storeAlloc() { + sink = make([]byte, 16) +} + +func nonRecursiveGenericAllocFunction[CurrentOp any, OtherOp any](alloc bool) { + if alloc { + storeAlloc() + } else { + nonRecursiveGenericAllocFunction[OtherOp, CurrentOp](true) + } +} + +func TestGenericsInlineLocations(t *testing.T) { + if testenv.OptimizationOff() { + t.Skip("skipping test with optimizations disabled") + } + + previousRate := runtime.MemProfileRate + runtime.MemProfileRate = 1 + defer func() { + runtime.MemProfileRate = previousRate + sink = nil + }() + + nonRecursiveGenericAllocFunction[opAlloc, opCall](true) + nonRecursiveGenericAllocFunction[opCall, opAlloc](false) + + runtime.GC() + + buf := bytes.NewBuffer(nil) + if err := WriteHeapProfile(buf); err != nil { + t.Fatalf("writing profile: %v", err) + } + p, err := profile.Parse(buf) + if err != nil { + t.Fatalf("profile.Parse: %v", err) + } + + const expectedSample = "testing.tRunner;runtime/pprof.TestGenericsInlineLocations;runtime/pprof.nonRecursiveGenericAllocFunction[go.shape.struct {},go.shape.struct { runtime/pprof.buf [128]uint8 }];runtime/pprof.nonRecursiveGenericAllocFunction[go.shape.struct { runtime/pprof.buf [128]uint8 },go.shape.struct {}];runtime/pprof.storeAlloc [1 16 1 16]" + const expectedLocation = "runtime/pprof.nonRecursiveGenericAllocFunction[go.shape.struct {},go.shape.struct { runtime/pprof.buf [128]uint8 }];runtime/pprof.nonRecursiveGenericAllocFunction[go.shape.struct { runtime/pprof.buf [128]uint8 },go.shape.struct {}];runtime/pprof.storeAlloc" + const expectedLocationNewInliner = "runtime/pprof.TestGenericsInlineLocations;" + expectedLocation + var s *profile.Sample + for _, sample := range p.Sample { + if sampleToString(sample) == expectedSample { + s = sample + break + } + } + if s == nil { + t.Fatalf("expected \n%s\ngot\n%s", expectedSample, strings.Join(profileToStrings(p), "\n")) + } + loc := s.Location[0] + actual := strings.Join(locationToStrings(loc, nil), ";") + if expectedLocation != actual && expectedLocationNewInliner != actual { + t.Errorf("expected a location with at least 3 functions\n%s\ngot\n%s\n", expectedLocation, actual) + } +} From 6146a73d279d73b6138191929d2f1fad22188f51 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Wed, 13 Dec 2023 14:15:53 -0800 Subject: [PATCH 241/313] go/types, types2: report error for range over int if Go version < 1.22 Fixes #64704. Change-Id: Ied3af46ab534343cdafba5ee27680b9c6ef3d37a Reviewed-on: https://go-review.googlesource.com/c/go/+/549459 Auto-Submit: Robert Griesemer Reviewed-by: Robert Griesemer Run-TryBot: Robert Griesemer Reviewed-by: Alan Donovan TryBot-Result: Gopher Robot --- src/cmd/compile/internal/types2/stmt.go | 20 +++++++++++++------ src/cmd/compile/internal/types2/version.go | 1 + src/go/types/stmt.go | 17 +++++++++++----- src/go/types/version.go | 1 + .../types/testdata/fixedbugs/issue64704.go | 12 +++++++++++ 5 files changed, 40 insertions(+), 11 deletions(-) create mode 100644 src/internal/types/testdata/fixedbugs/issue64704.go diff --git a/src/cmd/compile/internal/types2/stmt.go b/src/cmd/compile/internal/types2/stmt.go index 7956bf3033..a07bc9370a 100644 --- a/src/cmd/compile/internal/types2/stmt.go +++ b/src/cmd/compile/internal/types2/stmt.go @@ -861,7 +861,9 @@ func (check *Checker) rangeStmt(inner stmtContext, s *syntax.ForStmt, rclause *s var key, val Type if x.mode != invalid { // Ranging over a type parameter is permitted if it has a core type. - k, v, cause, isFunc, ok := rangeKeyVal(x.typ) + k, v, cause, isFunc, ok := rangeKeyVal(x.typ, func(v goVersion) bool { + return check.allowVersion(check.pkg, x.expr, v) + }) switch { case !ok && cause != "": check.softErrorf(&x, InvalidRangeExpr, "cannot range over %s: %s", &x, cause) @@ -964,16 +966,18 @@ func (check *Checker) rangeStmt(inner stmtContext, s *syntax.ForStmt, rclause *s } // RangeKeyVal returns the key and value types for a range over typ. +// Exported for use by the compiler (does not exist in go/types). func RangeKeyVal(typ Type) (Type, Type) { - key, val, _, _, _ := rangeKeyVal(typ) + key, val, _, _, _ := rangeKeyVal(typ, nil) return key, val } // rangeKeyVal returns the key and value type produced by a range clause -// over an expression of type typ. If the range clause is not permitted, -// rangeKeyVal returns ok = false. When ok = false, rangeKeyVal may also -// return a reason in cause. -func rangeKeyVal(typ Type) (key, val Type, cause string, isFunc, ok bool) { +// over an expression of type typ. +// If allowVersion != nil, it is used to check the required language version. +// If the range clause is not permitted, rangeKeyVal returns ok = false. +// When ok = false, rangeKeyVal may also return a reason in cause. +func rangeKeyVal(typ Type, allowVersion func(goVersion) bool) (key, val Type, cause string, isFunc, ok bool) { bad := func(cause string) (Type, Type, string, bool, bool) { return Typ[Invalid], Typ[Invalid], cause, false, false } @@ -991,6 +995,9 @@ func rangeKeyVal(typ Type) (key, val Type, cause string, isFunc, ok bool) { return Typ[Int], universeRune, "", false, true // use 'rune' name } if isInteger(typ) { + if allowVersion != nil && !allowVersion(go1_22) { + return bad("requires go1.22 or later") + } return orig, nil, "", false, true } case *Array: @@ -1005,6 +1012,7 @@ func rangeKeyVal(typ Type) (key, val Type, cause string, isFunc, ok bool) { } return typ.elem, nil, "", false, true case *Signature: + // TODO(gri) when this becomes enabled permanently, add version check if !buildcfg.Experiment.RangeFunc { break } diff --git a/src/cmd/compile/internal/types2/version.go b/src/cmd/compile/internal/types2/version.go index 12c86ef9fe..5aa3c803b5 100644 --- a/src/cmd/compile/internal/types2/version.go +++ b/src/cmd/compile/internal/types2/version.go @@ -43,6 +43,7 @@ var ( go1_18 = asGoVersion("go1.18") go1_20 = asGoVersion("go1.20") go1_21 = asGoVersion("go1.21") + go1_22 = asGoVersion("go1.22") // current (deployed) Go version go_current = asGoVersion(fmt.Sprintf("go1.%d", goversion.Version)) diff --git a/src/go/types/stmt.go b/src/go/types/stmt.go index 288d74b95a..35c485827d 100644 --- a/src/go/types/stmt.go +++ b/src/go/types/stmt.go @@ -852,7 +852,9 @@ func (check *Checker) rangeStmt(inner stmtContext, s *ast.RangeStmt) { var key, val Type if x.mode != invalid { // Ranging over a type parameter is permitted if it has a core type. - k, v, cause, isFunc, ok := rangeKeyVal(x.typ) + k, v, cause, isFunc, ok := rangeKeyVal(x.typ, func(v goVersion) bool { + return check.allowVersion(check.pkg, x.expr, v) + }) switch { case !ok && cause != "": check.softErrorf(&x, InvalidRangeExpr, "cannot range over %s: %s", &x, cause) @@ -955,10 +957,11 @@ func (check *Checker) rangeStmt(inner stmtContext, s *ast.RangeStmt) { } // rangeKeyVal returns the key and value type produced by a range clause -// over an expression of type typ. If the range clause is not permitted, -// rangeKeyVal returns ok = false. When ok = false, rangeKeyVal may also -// return a reason in cause. -func rangeKeyVal(typ Type) (key, val Type, cause string, isFunc, ok bool) { +// over an expression of type typ. +// If allowVersion != nil, it is used to check the required language version. +// If the range clause is not permitted, rangeKeyVal returns ok = false. +// When ok = false, rangeKeyVal may also return a reason in cause. +func rangeKeyVal(typ Type, allowVersion func(goVersion) bool) (key, val Type, cause string, isFunc, ok bool) { bad := func(cause string) (Type, Type, string, bool, bool) { return Typ[Invalid], Typ[Invalid], cause, false, false } @@ -976,6 +979,9 @@ func rangeKeyVal(typ Type) (key, val Type, cause string, isFunc, ok bool) { return Typ[Int], universeRune, "", false, true // use 'rune' name } if isInteger(typ) { + if allowVersion != nil && !allowVersion(go1_22) { + return bad("requires go1.22 or later") + } return orig, nil, "", false, true } case *Array: @@ -990,6 +996,7 @@ func rangeKeyVal(typ Type) (key, val Type, cause string, isFunc, ok bool) { } return typ.elem, nil, "", false, true case *Signature: + // TODO(gri) when this becomes enabled permanently, add version check if !buildcfg.Experiment.RangeFunc { break } diff --git a/src/go/types/version.go b/src/go/types/version.go index cfbab0f2a8..f2466edc1f 100644 --- a/src/go/types/version.go +++ b/src/go/types/version.go @@ -44,6 +44,7 @@ var ( go1_18 = asGoVersion("go1.18") go1_20 = asGoVersion("go1.20") go1_21 = asGoVersion("go1.21") + go1_22 = asGoVersion("go1.22") // current (deployed) Go version go_current = asGoVersion(fmt.Sprintf("go1.%d", goversion.Version)) diff --git a/src/internal/types/testdata/fixedbugs/issue64704.go b/src/internal/types/testdata/fixedbugs/issue64704.go new file mode 100644 index 0000000000..c8e9056cdd --- /dev/null +++ b/src/internal/types/testdata/fixedbugs/issue64704.go @@ -0,0 +1,12 @@ +// -lang=go1.21 + +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package p + +func _() { + for range 10 /* ERROR "cannot range over 10 (untyped int constant): requires go1.22 or later" */ { + } +} From d1a186d7d07034b75f1d3fe950804efec3b9089a Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Wed, 13 Dec 2023 11:37:46 -0500 Subject: [PATCH 242/313] doc: add release note fragment on inlining changes Add some material to the "compiler" portion of the release notes describing the 1.22 changes to the inliner. For #61422. Updates #61502. Change-Id: Ic7f1cb7f70752446d2465ea3da6bd7488436342b Reviewed-on: https://go-review.googlesource.com/c/go/+/549395 Reviewed-by: David Chase Reviewed-by: Matthew Dempsky LUCI-TryBot-Result: Go LUCI --- doc/go1.22.html | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/doc/go1.22.html b/doc/go1.22.html index 1ac0e7e6ee..c4337f1fe7 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -219,6 +219,18 @@ defer func() { 14% improvement from enabling PGO.

+

+ The compiler now interleaves devirtualization and inlining, so interface + method calls are better optimized. +

+ +

+ Go 1.22 also includes a preview of an enhanced implementation of the compiler's inlining phase that uses heuristics to boost inlinability at call sites deemed "important" (for example, in loops) and discourage inlining at call sites deemed "unimportant" (for example, on panic paths). + Building with GOEXPERIMENT=newinliner enables the new call-site + heuristics; see issue #61502 for + more info and to provide feedback. +

+

Linker

From 5f48662c5aab0f8c594b77ca183687264121f6b5 Mon Sep 17 00:00:00 2001 From: Dmitri Shuralyov Date: Thu, 14 Dec 2023 10:37:33 -0500 Subject: [PATCH 243/313] doc/go1.22: pre-announce dropping macOS 10.15 support For #64207. For #23011. Change-Id: I17ff221718aef03e9cda0ae4eb7b79896933553a Reviewed-on: https://go-review.googlesource.com/c/go/+/549655 LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Pratt Auto-Submit: Dmitri Shuralyov Reviewed-by: Dmitri Shuralyov --- doc/go1.22.html | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/go1.22.html b/doc/go1.22.html index c4337f1fe7..a2ae843bc7 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -895,6 +895,9 @@ defer func() { On 64-bit ARM-based macOS (the darwin/arm64 port), the Go toolchain already generates PIE by default.

+

+ Go 1.22 is the last release that will run on macOS 10.15 Catalina. Go 1.23 will require macOS 11 Big Sur or later. +

Arm

From 527829a7cba4ded29f98fae97f8bab9de247d5fe Mon Sep 17 00:00:00 2001 From: Danil Timerbulatov Date: Fri, 8 Dec 2023 00:17:19 +0300 Subject: [PATCH 244/313] all: remove newline characters after return statements This commit is aimed at improving the readability and consistency of the code base. Extraneous newline characters were present after some return statements, creating unnecessary separation in the code. Fixes #64610 Change-Id: Ic1b05bf11761c4dff22691c2f1c3755f66d341f7 Reviewed-on: https://go-review.googlesource.com/c/go/+/548316 Auto-Submit: Dmitri Shuralyov LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Pratt Reviewed-by: Dmitri Shuralyov Reviewed-by: Dmitri Shuralyov --- src/cmd/compile/internal/base/hashdebug.go | 1 - src/cmd/compile/internal/loopvar/loopvar_test.go | 8 ++++---- src/cmd/compile/internal/loopvar/testdata/opt-121.go | 1 - src/cmd/compile/internal/loopvar/testdata/opt-122.go | 1 - src/cmd/compile/internal/loopvar/testdata/opt.go | 1 - src/cmd/compile/internal/ssa/func.go | 1 - src/cmd/compile/internal/test/testdata/ctl_test.go | 2 -- src/cmd/link/internal/loadxcoff/ldxcoff.go | 1 - src/cmd/link/internal/mips/obj.go | 1 - src/cmd/link/internal/ppc64/asm.go | 1 - src/database/sql/convert.go | 1 - src/hash/fnv/fnv.go | 1 - src/internal/bisect/bisect.go | 1 - src/internal/syscall/unix/at_fstatat.go | 1 - src/log/slog/logger.go | 1 - src/math/big/float_test.go | 2 -- src/net/http/server.go | 1 - src/os/file_plan9.go | 1 - src/runtime/os2_aix.go | 2 -- src/runtime/runtime1.go | 1 - src/runtime/syscall_aix.go | 1 - src/runtime/traceback_test.go | 1 - src/text/template/parse/node.go | 1 - test/codegen/bits.go | 2 -- test/codegen/memcombine.go | 1 - test/codegen/noextend.go | 1 - test/escape2.go | 1 - test/escape2n.go | 1 - test/fixedbugs/issue32680b.go | 1 - test/fixedbugs/issue56923.go | 1 - test/typeparam/issue50485.dir/a.go | 1 - test/typeparam/issue51925.go | 1 - 32 files changed, 4 insertions(+), 39 deletions(-) diff --git a/src/cmd/compile/internal/base/hashdebug.go b/src/cmd/compile/internal/base/hashdebug.go index de7f01f09e..8342a5b9d9 100644 --- a/src/cmd/compile/internal/base/hashdebug.go +++ b/src/cmd/compile/internal/base/hashdebug.go @@ -204,7 +204,6 @@ func NewHashDebug(ev, s string, file io.Writer) *HashDebug { i++ } return hd - } // TODO: Delete when we switch to bisect-only. diff --git a/src/cmd/compile/internal/loopvar/loopvar_test.go b/src/cmd/compile/internal/loopvar/loopvar_test.go index c8e11dbd07..64cfdb77d9 100644 --- a/src/cmd/compile/internal/loopvar/loopvar_test.go +++ b/src/cmd/compile/internal/loopvar/loopvar_test.go @@ -251,7 +251,7 @@ func TestLoopVarVersionEnableFlag(t *testing.T) { t.Logf(m) - yCount := strings.Count(m, "opt.go:16:6: loop variable private now per-iteration, heap-allocated (loop inlined into ./opt.go:30)") + yCount := strings.Count(m, "opt.go:16:6: loop variable private now per-iteration, heap-allocated (loop inlined into ./opt.go:29)") nCount := strings.Count(m, "shared") if yCount != 1 { @@ -290,7 +290,7 @@ func TestLoopVarVersionEnableGoBuild(t *testing.T) { t.Logf(m) - yCount := strings.Count(m, "opt-122.go:18:6: loop variable private now per-iteration, heap-allocated (loop inlined into ./opt-122.go:32)") + yCount := strings.Count(m, "opt-122.go:18:6: loop variable private now per-iteration, heap-allocated (loop inlined into ./opt-122.go:31)") nCount := strings.Count(m, "shared") if yCount != 1 { @@ -329,7 +329,7 @@ func TestLoopVarVersionDisableFlag(t *testing.T) { t.Logf(m) // expect error - yCount := strings.Count(m, "opt.go:16:6: loop variable private now per-iteration, heap-allocated (loop inlined into ./opt.go:30)") + yCount := strings.Count(m, "opt.go:16:6: loop variable private now per-iteration, heap-allocated (loop inlined into ./opt.go:29)") nCount := strings.Count(m, "shared") if yCount != 0 { @@ -368,7 +368,7 @@ func TestLoopVarVersionDisableGoBuild(t *testing.T) { t.Logf(m) // expect error - yCount := strings.Count(m, "opt-121.go:18:6: loop variable private now per-iteration, heap-allocated (loop inlined into ./opt-121.go:32)") + yCount := strings.Count(m, "opt-121.go:18:6: loop variable private now per-iteration, heap-allocated (loop inlined into ./opt-121.go:31)") nCount := strings.Count(m, "shared") if yCount != 0 { diff --git a/src/cmd/compile/internal/loopvar/testdata/opt-121.go b/src/cmd/compile/internal/loopvar/testdata/opt-121.go index 131033b13c..4afb658fc8 100644 --- a/src/cmd/compile/internal/loopvar/testdata/opt-121.go +++ b/src/cmd/compile/internal/loopvar/testdata/opt-121.go @@ -19,7 +19,6 @@ func inline(j, k int) []*int { a = append(a, &private) } return a - } //go:noinline diff --git a/src/cmd/compile/internal/loopvar/testdata/opt-122.go b/src/cmd/compile/internal/loopvar/testdata/opt-122.go index 0ed6feee04..9dceab9175 100644 --- a/src/cmd/compile/internal/loopvar/testdata/opt-122.go +++ b/src/cmd/compile/internal/loopvar/testdata/opt-122.go @@ -19,7 +19,6 @@ func inline(j, k int) []*int { a = append(a, &private) } return a - } //go:noinline diff --git a/src/cmd/compile/internal/loopvar/testdata/opt.go b/src/cmd/compile/internal/loopvar/testdata/opt.go index 1bcd73614d..82c8616bcd 100644 --- a/src/cmd/compile/internal/loopvar/testdata/opt.go +++ b/src/cmd/compile/internal/loopvar/testdata/opt.go @@ -17,7 +17,6 @@ func inline(j, k int) []*int { a = append(a, &private) } return a - } //go:noinline diff --git a/src/cmd/compile/internal/ssa/func.go b/src/cmd/compile/internal/ssa/func.go index 529c119dc3..031d94f90c 100644 --- a/src/cmd/compile/internal/ssa/func.go +++ b/src/cmd/compile/internal/ssa/func.go @@ -721,7 +721,6 @@ func (f *Func) ConstOffPtrSP(t *types.Type, c int64, sp *Value) *Value { v.AddArg(sp) } return v - } func (f *Func) Frontend() Frontend { return f.fe } diff --git a/src/cmd/compile/internal/test/testdata/ctl_test.go b/src/cmd/compile/internal/test/testdata/ctl_test.go index ff3a1609c5..501f79eee1 100644 --- a/src/cmd/compile/internal/test/testdata/ctl_test.go +++ b/src/cmd/compile/internal/test/testdata/ctl_test.go @@ -70,7 +70,6 @@ func switch_ssa(a int) int { ret += 1 } return ret - } func fallthrough_ssa(a int) int { @@ -92,7 +91,6 @@ func fallthrough_ssa(a int) int { ret++ } return ret - } func testFallthrough(t *testing.T) { diff --git a/src/cmd/link/internal/loadxcoff/ldxcoff.go b/src/cmd/link/internal/loadxcoff/ldxcoff.go index 920e1c85fd..29d162596a 100644 --- a/src/cmd/link/internal/loadxcoff/ldxcoff.go +++ b/src/cmd/link/internal/loadxcoff/ldxcoff.go @@ -155,7 +155,6 @@ func Load(l *loader.Loader, arch *sys.Arch, localSymVersion int, input *bio.Read } } return textp, nil - } // Convert symbol xcoff type to sym.SymKind diff --git a/src/cmd/link/internal/mips/obj.go b/src/cmd/link/internal/mips/obj.go index e07ee0b208..c76e267cc2 100644 --- a/src/cmd/link/internal/mips/obj.go +++ b/src/cmd/link/internal/mips/obj.go @@ -103,5 +103,4 @@ func archinit(ctxt *ld.Link) { func adddynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loader.Sym, r loader.Reloc, rIdx int) bool { ld.Exitf("adddynrel currently unimplemented for MIPS") return false - } diff --git a/src/cmd/link/internal/ppc64/asm.go b/src/cmd/link/internal/ppc64/asm.go index 91eef5e461..09647d84b1 100644 --- a/src/cmd/link/internal/ppc64/asm.go +++ b/src/cmd/link/internal/ppc64/asm.go @@ -917,7 +917,6 @@ func xcoffreloc1(arch *sys.Arch, out *ld.OutBuf, ldr *loader.Loader, s loader.Sy emitReloc(ld.XCOFF_R_REF|0x3F<<8, 0) } return true - } func elfreloc1(ctxt *ld.Link, out *ld.OutBuf, ldr *loader.Loader, s loader.Sym, r loader.ExtReloc, ri int, sectoff int64) bool { diff --git a/src/database/sql/convert.go b/src/database/sql/convert.go index d1a8981e5e..cca5d15e07 100644 --- a/src/database/sql/convert.go +++ b/src/database/sql/convert.go @@ -203,7 +203,6 @@ func driverArgsConnLocked(ci driver.Conn, ds *driverStmt, args []any) ([]driver. } return nvargs, nil - } // convertAssign is the same as convertAssignRows, but without the optional diff --git a/src/hash/fnv/fnv.go b/src/hash/fnv/fnv.go index a3a944a05e..29439e2c1d 100644 --- a/src/hash/fnv/fnv.go +++ b/src/hash/fnv/fnv.go @@ -241,7 +241,6 @@ func (s *sum64) MarshalBinary() ([]byte, error) { b = append(b, magic64...) b = appendUint64(b, uint64(*s)) return b, nil - } func (s *sum64a) MarshalBinary() ([]byte, error) { diff --git a/src/internal/bisect/bisect.go b/src/internal/bisect/bisect.go index bf67ceb9d7..3e5a6849f7 100644 --- a/src/internal/bisect/bisect.go +++ b/src/internal/bisect/bisect.go @@ -482,7 +482,6 @@ func (m *Matcher) stack(w Writer) bool { } } return m.ShouldEnable(h) - } // Writer is the same interface as io.Writer. diff --git a/src/internal/syscall/unix/at_fstatat.go b/src/internal/syscall/unix/at_fstatat.go index 8f25fe9f64..25de336a80 100644 --- a/src/internal/syscall/unix/at_fstatat.go +++ b/src/internal/syscall/unix/at_fstatat.go @@ -24,5 +24,4 @@ func Fstatat(dirfd int, path string, stat *syscall.Stat_t, flags int) error { } return nil - } diff --git a/src/log/slog/logger.go b/src/log/slog/logger.go index f03aeec295..4d21ee7990 100644 --- a/src/log/slog/logger.go +++ b/src/log/slog/logger.go @@ -145,7 +145,6 @@ func (l *Logger) WithGroup(name string) *Logger { c := l.clone() c.handler = l.handler.WithGroup(name) return c - } // New creates a new Logger with the given non-nil Handler. diff --git a/src/math/big/float_test.go b/src/math/big/float_test.go index 7d6bf034df..bb045a0b48 100644 --- a/src/math/big/float_test.go +++ b/src/math/big/float_test.go @@ -194,13 +194,11 @@ func alike(x, y *Float) bool { func alike32(x, y float32) bool { // we can ignore NaNs return x == y && math.Signbit(float64(x)) == math.Signbit(float64(y)) - } func alike64(x, y float64) bool { // we can ignore NaNs return x == y && math.Signbit(x) == math.Signbit(y) - } func TestFloatMantExp(t *testing.T) { diff --git a/src/net/http/server.go b/src/net/http/server.go index 36a03f4a32..9245778590 100644 --- a/src/net/http/server.go +++ b/src/net/http/server.go @@ -3812,7 +3812,6 @@ func numLeadingCRorLF(v []byte) (n int) { break } return - } func strSliceContains(ss []string, s string) bool { diff --git a/src/os/file_plan9.go b/src/os/file_plan9.go index 4cab2d4cdf..c0ee6b33f9 100644 --- a/src/os/file_plan9.go +++ b/src/os/file_plan9.go @@ -542,7 +542,6 @@ func tempDir() string { dir = "/tmp" } return dir - } // Chdir changes the current working directory to the file, diff --git a/src/runtime/os2_aix.go b/src/runtime/os2_aix.go index 8af88d1832..0d20079242 100644 --- a/src/runtime/os2_aix.go +++ b/src/runtime/os2_aix.go @@ -428,7 +428,6 @@ func write1(fd uintptr, p unsafe.Pointer, n int32) int32 { } // Note that in this case we can't return a valid errno value. return write2(fd, uintptr(p), n) - } //go:nosplit @@ -641,7 +640,6 @@ func sysconf(name int32) uintptr { throw("syscall sysconf") } return r - } // pthread functions returns its error code in the main return value diff --git a/src/runtime/runtime1.go b/src/runtime/runtime1.go index 6f4a89df2b..afe1bdd298 100644 --- a/src/runtime/runtime1.go +++ b/src/runtime/runtime1.go @@ -623,7 +623,6 @@ func reflect_resolveTypeOff(rtype unsafe.Pointer, off int32) unsafe.Pointer { //go:linkname reflect_resolveTextOff reflect.resolveTextOff func reflect_resolveTextOff(rtype unsafe.Pointer, off int32) unsafe.Pointer { return toRType((*_type)(rtype)).textOff(textOff(off)) - } // reflectlite_resolveNameOff resolves a name offset from a base pointer. diff --git a/src/runtime/syscall_aix.go b/src/runtime/syscall_aix.go index e87d4d6d7a..7738fca602 100644 --- a/src/runtime/syscall_aix.go +++ b/src/runtime/syscall_aix.go @@ -164,7 +164,6 @@ func syscall_exit(code uintptr) { func syscall_fcntl1(fd, cmd, arg uintptr) (val, err uintptr) { val, err = syscall3(&libc_fcntl, fd, cmd, arg) return - } //go:linkname syscall_forkx syscall.forkx diff --git a/src/runtime/traceback_test.go b/src/runtime/traceback_test.go index 88318782da..8cbccac673 100644 --- a/src/runtime/traceback_test.go +++ b/src/runtime/traceback_test.go @@ -461,7 +461,6 @@ func testTracebackArgs2(a bool, b struct { return b.a + b.b + b.c + b.x[0] + b.x[1] + int(d[0]) + int(d[1]) + int(d[2]) } return n - } //go:noinline diff --git a/src/text/template/parse/node.go b/src/text/template/parse/node.go index 47268225c8..c36688825c 100644 --- a/src/text/template/parse/node.go +++ b/src/text/template/parse/node.go @@ -284,7 +284,6 @@ func (a *ActionNode) tree() *Tree { func (a *ActionNode) Copy() Node { return a.tr.newAction(a.Pos, a.Line, a.Pipe.CopyPipe()) - } // CommandNode holds a command (a pipeline inside an evaluating action). diff --git a/test/codegen/bits.go b/test/codegen/bits.go index 67daf12d62..4b6c8b94b8 100644 --- a/test/codegen/bits.go +++ b/test/codegen/bits.go @@ -382,7 +382,6 @@ func signextendAndMask8to64(a int8) (s, z uint64) { // ppc64x: -"MOVB", "ANDCC\t[$]247," z = uint64(uint8(a)) & 0x3F7 return - } // Verify zero-extended values are not sign-extended under a bit mask (#61297) @@ -392,7 +391,6 @@ func zeroextendAndMask8to64(a int8, b int16) (x, y uint64) { // ppc64x: -"MOVH\t", -"ANDCC", "MOVHZ" y = uint64(b) & 0xFFFF return - } // Verify rotate and mask instructions, and further simplified instructions for small types diff --git a/test/codegen/memcombine.go b/test/codegen/memcombine.go index db5c81f905..6d6c33d947 100644 --- a/test/codegen/memcombine.go +++ b/test/codegen/memcombine.go @@ -348,7 +348,6 @@ func reassoc_load_uint32(b []byte) uint32 { func extrashift_load_uint32(b []byte) uint32 { // amd64:`MOVL\s\([A-Z]+\)`,`SHLL\s[$]2`,-`MOV[BW]`,-`OR` return uint32(b[0])<<2 | uint32(b[1])<<10 | uint32(b[2])<<18 | uint32(b[3])<<26 - } func outoforder_load_uint32(b []byte) uint32 { diff --git a/test/codegen/noextend.go b/test/codegen/noextend.go index 98ad0ece89..193f75b092 100644 --- a/test/codegen/noextend.go +++ b/test/codegen/noextend.go @@ -277,7 +277,6 @@ func shouldSignEXT(x int) int64 { ret += int64(int8(x & 0x1100000000000011)) return ret - } func noIntermediateExtension(a, b, c uint32) uint32 { diff --git a/test/escape2.go b/test/escape2.go index 99f85914a3..3e5d11f88e 100644 --- a/test/escape2.go +++ b/test/escape2.go @@ -397,7 +397,6 @@ func exprsw(i *int) *int { // ERROR "leaking param: i to result ~r0 level=0$" return nil } return nil - } // assigning to an array element is like assigning to the array diff --git a/test/escape2n.go b/test/escape2n.go index 350be65202..2613152150 100644 --- a/test/escape2n.go +++ b/test/escape2n.go @@ -397,7 +397,6 @@ func exprsw(i *int) *int { // ERROR "leaking param: i to result ~r0 level=0$" return nil } return nil - } // assigning to an array element is like assigning to the array diff --git a/test/fixedbugs/issue32680b.go b/test/fixedbugs/issue32680b.go index 61e531701a..09bc3a9ce0 100644 --- a/test/fixedbugs/issue32680b.go +++ b/test/fixedbugs/issue32680b.go @@ -12,5 +12,4 @@ func hashBytesRaw(b0, b1, b2, b3, b7 byte) uint64 { func doStuff(data []byte) uint64 { return hashBytesRaw(data[0], data[1], data[2], data[3], data[7]) - } diff --git a/test/fixedbugs/issue56923.go b/test/fixedbugs/issue56923.go index 700a1046a9..7cc9494b76 100644 --- a/test/fixedbugs/issue56923.go +++ b/test/fixedbugs/issue56923.go @@ -18,7 +18,6 @@ func (r EqFunc[T]) Eqv(a, b T) bool { func New[T any](f func(a, b T) bool) Eq[T] { return EqFunc[T](f) - } func Equal(a, b []byte) bool { diff --git a/test/typeparam/issue50485.dir/a.go b/test/typeparam/issue50485.dir/a.go index 3a7c71a711..97cf4d2549 100644 --- a/test/typeparam/issue50485.dir/a.go +++ b/test/typeparam/issue50485.dir/a.go @@ -219,7 +219,6 @@ func (r ApplicativeFunctor2[H, HT, A1, A2, R]) ApOption(a Option[A1]) Applicativ func (r ApplicativeFunctor2[H, HT, A1, A2, R]) Ap(a A1) ApplicativeFunctor1[Cons[A1, H], A1, A2, R] { return r.ApOption(Some(a)) - } func Applicative2[A1, A2, R any](fn Func2[A1, A2, R]) ApplicativeFunctor2[Nil, Nil, A1, A2, R] { diff --git a/test/typeparam/issue51925.go b/test/typeparam/issue51925.go index 0a385acd17..abebf67766 100644 --- a/test/typeparam/issue51925.go +++ b/test/typeparam/issue51925.go @@ -25,7 +25,6 @@ func min[T IntLike](x, y T) T { return x } return y - } // Min returns the minimum element of `nums`. From 3b5537739428fc6983ccc913b5a73de594124ae4 Mon Sep 17 00:00:00 2001 From: cui fliter Date: Wed, 13 Dec 2023 22:50:17 +0800 Subject: [PATCH 245/313] doc: add missing html tags Change-Id: Ieb1a9efdff571f402dd44815e0fbe2cf5a2d55b1 Reviewed-on: https://go-review.googlesource.com/c/go/+/549355 Reviewed-by: Michael Pratt Run-TryBot: shuang cui TryBot-Result: Gopher Robot Reviewed-by: Cherry Mui --- doc/go1.22.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index a2ae843bc7..3a441f4cf7 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -326,7 +326,7 @@ defer func() {

archive/tar

- The new method Writer.AddFS adds all of the files from an fs.FS to the archive. + The new method Writer.AddFS adds all of the files from an fs.FS to the archive.

@@ -338,7 +338,7 @@ defer func() {

archive/zip

- The new method Writer.AddFS adds all of the files from an fs.FS to the archive. + The new method Writer.AddFS adds all of the files from an fs.FS to the archive.

@@ -703,7 +703,7 @@ defer func() {
os/exec

- On Windows, LookPath now + On Windows, LookPath now ignores empty entries in %PATH%, and returns ErrNotFound (instead of ErrNotExist) if no executable file extension is found to resolve an otherwise-unambiguous From 6396a42b99daab77f6207f6c3011f7ffd7bbe173 Mon Sep 17 00:00:00 2001 From: qmuntal Date: Tue, 12 Dec 2023 19:20:24 +0100 Subject: [PATCH 246/313] doc: document Windows os.ReadDir improvements For #61422. Change-Id: Icc1868ef9516766d0f422849866ef8de27bfa4c5 Reviewed-on: https://go-review.googlesource.com/c/go/+/549275 Reviewed-by: Mauri de Souza Meneguzzo LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Pratt Reviewed-by: Bryan Mills Reviewed-by: Alex Brainman --- doc/go1.22.html | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/doc/go1.22.html b/doc/go1.22.html index 3a441f4cf7..233f7e1fb0 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -691,6 +691,15 @@ defer func() { On Windows, passing O_SYNC to OpenFile now causes write operations to go directly to disk, equivalent to O_SYNC on Unix platforms.

+

+ On Windows, the ReadDir, + File.ReadDir, + File.Readdir, + and File.Readdirnames functions + now read directory entries in batches to reduce the number of system calls, + improving performance up to 30%. +

+

When io.Copy copies from a File to a net.UnixConn, From d2867b29c2812772b69d6d52b168def57064de9b Mon Sep 17 00:00:00 2001 From: Davis Goodin Date: Wed, 13 Dec 2023 11:38:01 -0800 Subject: [PATCH 247/313] doc: improve release note for Windows hosts file being respected Make a grammar fix (searches -> searches for) and simplify "when building with" phrase. For #61422. Change-Id: I179b3816c0e223a16e4969290b2c1ed19d44c556 Reviewed-on: https://go-review.googlesource.com/c/go/+/549457 Reviewed-by: Bryan Mills LUCI-TryBot-Result: Go LUCI Auto-Submit: Bryan Mills Reviewed-by: Quim Muntal Reviewed-by: Michael Pratt --- doc/go1.22.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 233f7e1fb0..cd20bb7479 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -621,8 +621,8 @@ defer func() {

- The Go DNS Resolver, used when building the binary with "-tags=netgo", - now searches a matching name in the Windows hosts file, + The Go DNS Resolver, used when building with "-tags=netgo", + now searches for a matching name in the Windows hosts file, located at %SystemRoot%\System32\drivers\etc\hosts, before making a DNS query.

From 2f706871b95ceedecb0d0cf62b83e4f0f9a403b7 Mon Sep 17 00:00:00 2001 From: qiulaidongfeng <2645477756@qq.com> Date: Thu, 14 Dec 2023 13:12:45 +0000 Subject: [PATCH 248/313] runtime: delete todo of the list field for mspan Change-Id: I10a3308c19da08d2ff0c8077bb74ad888ee04fea GitHub-Last-Rev: 3e95b71384a25e0b29029731b72cf2c7f6a96055 GitHub-Pull-Request: golang/go#64077 Reviewed-on: https://go-review.googlesource.com/c/go/+/541755 Reviewed-by: Michael Pratt TryBot-Result: Gopher Robot Reviewed-by: Michael Knyszek Auto-Submit: Michael Pratt --- src/runtime/mheap.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/mheap.go b/src/runtime/mheap.go index 0bbda4aa3b..0069328346 100644 --- a/src/runtime/mheap.go +++ b/src/runtime/mheap.go @@ -399,7 +399,7 @@ type mspan struct { _ sys.NotInHeap next *mspan // next span in list, or nil if none prev *mspan // previous span in list, or nil if none - list *mSpanList // For debugging. TODO: Remove. + list *mSpanList // For debugging. startAddr uintptr // address of first byte of span aka s.base() npages uintptr // number of pages in span From 23fee06a140ea6e5ac184e255786900479ca52ca Mon Sep 17 00:00:00 2001 From: Andy Pan Date: Wed, 13 Dec 2023 09:23:18 +0800 Subject: [PATCH 249/313] doc/go1.22: correct the system call name used for zero-copy from net.TCPConn to net.UnixConn For #58808 Change-Id: I9b27af30888aaaa9659387a32c57aaea136b1c3a Reviewed-on: https://go-review.googlesource.com/c/go/+/549335 Reviewed-by: Damien Neil Reviewed-by: Michael Pratt Auto-Submit: Michael Pratt LUCI-TryBot-Result: Go LUCI --- doc/go1.22.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index cd20bb7479..bf01cffce0 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -616,7 +616,7 @@ defer func() {

When io.Copy copies from a TCPConn to a UnixConn, - it will now use Linux's sendfile(2) system call if possible, + it will now use Linux's splice(2) system call if possible, using the new method TCPConn.WriteTo.

From 6aa482681ca72aa3b18d4491e6db1694ef1be6bc Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Fri, 5 May 2023 09:13:15 -0400 Subject: [PATCH 250/313] cmd/go/internal/vcweb: set GIT_PROTOCOL in the git CGI handler MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This works around a bug in 'git http-backend' that was fixed in Git 2.34.0,¹ and will hopefully allow the tests in cmd/go/internal/modfetch/codehost to pass reliably using older Git releases (I tested with 2.30.2). ¹https://github.com/git/git/commit/ff6a37c99e3343633c53f56789afcc8f8165d276 Fixes #56881. Change-Id: Icd2e4d252d5f712685d146f34e11922dd0c41ff0 Reviewed-on: https://go-review.googlesource.com/c/go/+/549795 Reviewed-by: Michael Matloob Auto-Submit: Bryan Mills TryBot-Result: Gopher Robot Run-TryBot: Bryan Mills --- .../go/internal/modfetch/codehost/git_test.go | 6 --- src/cmd/go/internal/vcweb/git.go | 39 ++++++++++++++----- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/src/cmd/go/internal/modfetch/codehost/git_test.go b/src/cmd/go/internal/modfetch/codehost/git_test.go index 328ab5bf58..dba9935b58 100644 --- a/src/cmd/go/internal/modfetch/codehost/git_test.go +++ b/src/cmd/go/internal/modfetch/codehost/git_test.go @@ -280,9 +280,6 @@ func TestLatest(t *testing.T) { t.Fatal(err) } if !reflect.DeepEqual(info, tt.info) { - if !reflect.DeepEqual(info.Tags, tt.info.Tags) { - testenv.SkipFlaky(t, 56881) - } t.Errorf("Latest: incorrect info\nhave %+v (origin %+v)\nwant %+v (origin %+v)", info, info.Origin, tt.info, tt.info.Origin) } } @@ -661,9 +658,6 @@ func TestStat(t *testing.T) { } info.Origin = nil // TestLatest and ../../../testdata/script/reuse_git.txt test Origin well enough if !reflect.DeepEqual(info, tt.info) { - if !reflect.DeepEqual(info.Tags, tt.info.Tags) { - testenv.SkipFlaky(t, 56881) - } t.Errorf("Stat: incorrect info\nhave %+v\nwant %+v", *info, *tt.info) } } diff --git a/src/cmd/go/internal/vcweb/git.go b/src/cmd/go/internal/vcweb/git.go index 316c2382ba..d1e0563bed 100644 --- a/src/cmd/go/internal/vcweb/git.go +++ b/src/cmd/go/internal/vcweb/git.go @@ -37,16 +37,35 @@ func (h *gitHandler) Handler(dir string, env []string, logger *log.Logger) (http return nil, ServerNotInstalledError{name: "git"} } - handler := &cgi.Handler{ - Path: h.gitPath, - Logger: logger, - Args: []string{"http-backend"}, - Dir: dir, - Env: append(slices.Clip(env), - "GIT_PROJECT_ROOT="+dir, - "GIT_HTTP_EXPORT_ALL=1", - ), - } + baseEnv := append(slices.Clip(env), + "GIT_PROJECT_ROOT="+dir, + "GIT_HTTP_EXPORT_ALL=1", + ) + + handler := http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + // The Git client sends the requested Git protocol version as a + // "Git-Protocol" HTTP request header, which the CGI host then converts + // to an environment variable (HTTP_GIT_PROTOCOL). + // + // However, versions of Git older that 2.34.0 don't recognize the + // HTTP_GIT_PROTOCOL variable, and instead need that value to be set in the + // GIT_PROTOCOL variable. We do so here so that vcweb can work reliably + // with older Git releases. (As of the time of writing, the Go project's + // builders were on Git version 2.30.2.) + env := slices.Clip(baseEnv) + if p := req.Header.Get("Git-Protocol"); p != "" { + env = append(env, "GIT_PROTOCOL="+p) + } + + h := &cgi.Handler{ + Path: h.gitPath, + Logger: logger, + Args: []string{"http-backend"}, + Dir: dir, + Env: env, + } + h.ServeHTTP(w, req) + }) return handler, nil } From 7c282ba12a9078eefab1d6e1a42ca8a1ae723737 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Thu, 14 Dec 2023 14:26:20 -0500 Subject: [PATCH 251/313] cmd/go/internal/modfetch: simplify a redundant condition In gitRepo.stat, we were checking ref != "" twice, which confused me during casual reading because it made it seem like the string could be empty when it actually never is. For #56881. Change-Id: Ib83303a149ea771399cb55fedd5dfa02ad411ff0 Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest,gotip-windows-amd64-longtest Reviewed-on: https://go-review.googlesource.com/c/go/+/549855 LUCI-TryBot-Result: Go LUCI Auto-Submit: Bryan Mills Reviewed-by: Michael Matloob --- src/cmd/go/internal/modfetch/codehost/git.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/cmd/go/internal/modfetch/codehost/git.go b/src/cmd/go/internal/modfetch/codehost/git.go index 294e50ff12..d3a713223c 100644 --- a/src/cmd/go/internal/modfetch/codehost/git.go +++ b/src/cmd/go/internal/modfetch/codehost/git.go @@ -530,13 +530,7 @@ func (r *gitRepo) stat(ctx context.Context, rev string) (info *RevInfo, err erro if r.fetchLevel <= fetchSome && ref != "" && hash != "" && !r.local { r.fetchLevel = fetchSome var refspec string - if ref != "" && ref != "HEAD" { - // If we do know the ref name, save the mapping locally - // so that (if it is a tag) it can show up in localTags - // on a future call. Also, some servers refuse to allow - // full hashes in ref specs, so prefer a ref name if known. - refspec = ref + ":" + ref - } else { + if ref == "HEAD" { // Fetch the hash but give it a local name (refs/dummy), // because that triggers the fetch behavior of creating any // other known remote tags for the hash. We never use @@ -544,6 +538,12 @@ func (r *gitRepo) stat(ctx context.Context, rev string) (info *RevInfo, err erro // overwritten in the next command, and that's fine. ref = hash refspec = hash + ":refs/dummy" + } else { + // If we do know the ref name, save the mapping locally + // so that (if it is a tag) it can show up in localTags + // on a future call. Also, some servers refuse to allow + // full hashes in ref specs, so prefer a ref name if known. + refspec = ref + ":" + ref } release, err := base.AcquireNet() From e44b8b15b19058b7a22a859ab4159f924856f688 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Fri, 1 Dec 2023 14:25:48 -0500 Subject: [PATCH 252/313] cmd/go/internal/toolchain: make a best effort to parse 'go run' and 'go install' flags MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When the argument to 'go install' or 'go run' looks like a versioned package, we make a best effort to switch to a toolchain compatible with the module containing that package, by fetching its go.mod file and checking the go version it specifies. At this point in the code, we have not yet parsed the arguments given on the command line: instead, we just make a best effort to find one we can use to select a toolchain version. Since that toolchain may be newer, the command to install it may also include flags that are only supported by that Go version — and we don't want to fail due to an error that would be resolved by switching to a more appropriate toolchain. So at this point in the code we can't parse the flags in a way that will surface errors, but we want to make a best effort to parse the ones that we know about. It turns out that “parse the flags we know about” is already a familiar problem: that's also what we do in 'go test', so we can reuse the cmdflag library from that to do the best-effort pass of parsing. If it turns out that we don't need to switch toolchains after all, cmd/go's main function will parse the flags again, and will report any errors at that point. This fixes a regression, introduced in CL 497879, which caused 'go install -modcacherw pkg@version' to unset the write bit for directories created while selecting the toolchain to use. Fixes #64282. Updates #57001. Change-Id: Icc409c57858aa15c7d58a97a61964b4bc2560547 Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest,gotip-windows-amd64-longtest Reviewed-on: https://go-review.googlesource.com/c/go/+/546635 LUCI-TryBot-Result: Go LUCI Auto-Submit: Bryan Mills Reviewed-by: Michael Matloob --- src/cmd/go/internal/base/goflags.go | 10 ++-- src/cmd/go/internal/modfetch/fetch.go | 20 +++---- src/cmd/go/internal/test/testflag.go | 2 +- src/cmd/go/internal/toolchain/exec.go | 6 +- src/cmd/go/internal/toolchain/select.go | 56 ++++++++++++------- src/cmd/go/internal/vet/vetflag.go | 2 +- src/cmd/go/main.go | 2 +- .../script/install_modcacherw_issue64282.txt | 32 +++++++++++ .../script/malformed_gosum_issue62345.txt | 2 +- .../go/testdata/script/work_sum_mismatch.txt | 4 +- 10 files changed, 91 insertions(+), 45 deletions(-) create mode 100644 src/cmd/go/testdata/script/install_modcacherw_issue64282.txt diff --git a/src/cmd/go/internal/base/goflags.go b/src/cmd/go/internal/base/goflags.go index eced2c5d58..3d5a76d54b 100644 --- a/src/cmd/go/internal/base/goflags.go +++ b/src/cmd/go/internal/base/goflags.go @@ -88,7 +88,7 @@ type boolFlag interface { } // SetFromGOFLAGS sets the flags in the given flag set using settings in $GOFLAGS. -func SetFromGOFLAGS(flags *flag.FlagSet) { +func SetFromGOFLAGS(flags *flag.FlagSet, ignoreErrors bool) { InitGOFLAGS() // This loop is similar to flag.Parse except that it ignores @@ -121,22 +121,22 @@ func SetFromGOFLAGS(flags *flag.FlagSet) { if fb, ok := f.Value.(boolFlag); ok && fb.IsBoolFlag() { if hasValue { - if err := flags.Set(f.Name, value); err != nil { + if err := flags.Set(f.Name, value); err != nil && !ignoreErrors { fmt.Fprintf(flags.Output(), "go: invalid boolean value %q for flag %s (from %s): %v\n", value, name, where, err) flags.Usage() } } else { - if err := flags.Set(f.Name, "true"); err != nil { + if err := flags.Set(f.Name, "true"); err != nil && !ignoreErrors { fmt.Fprintf(flags.Output(), "go: invalid boolean flag %s (from %s): %v\n", name, where, err) flags.Usage() } } } else { - if !hasValue { + if !hasValue && !ignoreErrors { fmt.Fprintf(flags.Output(), "go: flag needs an argument: %s (from %s)\n", name, where) flags.Usage() } - if err := flags.Set(f.Name, value); err != nil { + if err := flags.Set(f.Name, value); err != nil && !ignoreErrors { fmt.Fprintf(flags.Output(), "go: invalid value %q for flag %s (from %s): %v\n", value, name, where, err) flags.Usage() } diff --git a/src/cmd/go/internal/modfetch/fetch.go b/src/cmd/go/internal/modfetch/fetch.go index eeab6da62a..b3c77dfbc2 100644 --- a/src/cmd/go/internal/modfetch/fetch.go +++ b/src/cmd/go/internal/modfetch/fetch.go @@ -525,7 +525,7 @@ func readGoSum(dst map[module.Version][]string, file string, data []byte) { // ignore malformed line so that go mod tidy can fix go.sum continue } else { - base.Fatalf("malformed go.sum:\n%s:%d: wrong number of fields %v\n", file, lineno, len(f)) + base.Fatalf("go: malformed go.sum:\n%s:%d: wrong number of fields %v\n", file, lineno, len(f)) } } if f[2] == emptyGoModHash { @@ -574,32 +574,32 @@ func checkMod(ctx context.Context, mod module.Version) { // Do the file I/O before acquiring the go.sum lock. ziphash, err := CachePath(ctx, mod, "ziphash") if err != nil { - base.Fatalf("verifying %v", module.VersionError(mod, err)) + base.Fatalf("go: verifying %v", module.VersionError(mod, err)) } data, err := lockedfile.Read(ziphash) if err != nil { - base.Fatalf("verifying %v", module.VersionError(mod, err)) + base.Fatalf("go: verifying %v", module.VersionError(mod, err)) } data = bytes.TrimSpace(data) if !isValidSum(data) { // Recreate ziphash file from zip file and use that to check the mod sum. zip, err := CachePath(ctx, mod, "zip") if err != nil { - base.Fatalf("verifying %v", module.VersionError(mod, err)) + base.Fatalf("go: verifying %v", module.VersionError(mod, err)) } err = hashZip(mod, zip, ziphash) if err != nil { - base.Fatalf("verifying %v", module.VersionError(mod, err)) + base.Fatalf("go: verifying %v", module.VersionError(mod, err)) } return } h := string(data) if !strings.HasPrefix(h, "h1:") { - base.Fatalf("verifying %v", module.VersionError(mod, fmt.Errorf("unexpected ziphash: %q", h))) + base.Fatalf("go: verifying %v", module.VersionError(mod, fmt.Errorf("unexpected ziphash: %q", h))) } if err := checkModSum(mod, h); err != nil { - base.Fatalf("%s", err) + base.Fatal(err) } } @@ -684,7 +684,7 @@ func haveModSumLocked(mod module.Version, h string) bool { return true } if strings.HasPrefix(vh, "h1:") { - base.Fatalf("verifying %s@%s: checksum mismatch\n\tdownloaded: %v\n\t%s: %v"+goSumMismatch, mod.Path, mod.Version, h, sumFileName, vh) + base.Fatalf("go: verifying %s@%s: checksum mismatch\n\tdownloaded: %v\n\t%s: %v"+goSumMismatch, mod.Path, mod.Version, h, sumFileName, vh) } } // Also check workspace sums. @@ -696,7 +696,7 @@ func haveModSumLocked(mod module.Version, h string) bool { if h == vh { foundMatch = true } else if strings.HasPrefix(vh, "h1:") { - base.Fatalf("verifying %s@%s: checksum mismatch\n\tdownloaded: %v\n\t%s: %v"+goSumMismatch, mod.Path, mod.Version, h, goSumFile, vh) + base.Fatalf("go: verifying %s@%s: checksum mismatch\n\tdownloaded: %v\n\t%s: %v"+goSumMismatch, mod.Path, mod.Version, h, goSumFile, vh) } } } @@ -895,7 +895,7 @@ func TrimGoSum(keep map[module.Version]bool) { defer goSum.mu.Unlock() inited, err := initGoSum() if err != nil { - base.Fatalf("%s", err) + base.Fatal(err) } if !inited { return diff --git a/src/cmd/go/internal/test/testflag.go b/src/cmd/go/internal/test/testflag.go index 425378889d..22c3ab1302 100644 --- a/src/cmd/go/internal/test/testflag.go +++ b/src/cmd/go/internal/test/testflag.go @@ -222,7 +222,7 @@ func (f *shuffleFlag) Set(value string) error { // go test fmt -custom-flag-for-fmt-test // go test -x math func testFlags(args []string) (packageNames, passToTest []string) { - base.SetFromGOFLAGS(&CmdTest.Flag) + base.SetFromGOFLAGS(&CmdTest.Flag, false) addFromGOFLAGS := map[string]bool{} CmdTest.Flag.Visit(func(f *flag.Flag) { if short := strings.TrimPrefix(f.Name, "test."); passFlagToTest[short] { diff --git a/src/cmd/go/internal/toolchain/exec.go b/src/cmd/go/internal/toolchain/exec.go index 820fe93e87..acfb9e943c 100644 --- a/src/cmd/go/internal/toolchain/exec.go +++ b/src/cmd/go/internal/toolchain/exec.go @@ -44,12 +44,12 @@ func execGoToolchain(gotoolchain, dir, exe string) { if e.ProcessState.Exited() { os.Exit(e.ProcessState.ExitCode()) } - base.Fatalf("exec %s: %s", gotoolchain, e.ProcessState) + base.Fatalf("go: exec %s: %s", gotoolchain, e.ProcessState) } - base.Fatalf("exec %s: %s", exe, err) + base.Fatalf("go: exec %s: %s", exe, err) } os.Exit(0) } err := syscall.Exec(exe, os.Args, os.Environ()) - base.Fatalf("exec %s: %v", gotoolchain, err) + base.Fatalf("go: exec %s: %v", gotoolchain, err) } diff --git a/src/cmd/go/internal/toolchain/select.go b/src/cmd/go/internal/toolchain/select.go index 9fd1549a61..84fa7f685c 100644 --- a/src/cmd/go/internal/toolchain/select.go +++ b/src/cmd/go/internal/toolchain/select.go @@ -8,10 +8,10 @@ package toolchain import ( "context" "errors" + "flag" "fmt" "go/build" "io/fs" - "log" "os" "path/filepath" "runtime" @@ -20,10 +20,12 @@ import ( "cmd/go/internal/base" "cmd/go/internal/cfg" + "cmd/go/internal/cmdflag" "cmd/go/internal/gover" "cmd/go/internal/modfetch" "cmd/go/internal/modload" "cmd/go/internal/run" + "cmd/go/internal/work" "golang.org/x/mod/module" ) @@ -85,9 +87,6 @@ func FilterEnv(env []string) []string { // It must be called early in startup. // See https://go.dev/doc/toolchain#select. func Select() { - log.SetPrefix("go: ") - defer log.SetPrefix("") - if !modload.WillBeEnabled() { return } @@ -133,15 +132,15 @@ func Select() { v := gover.FromToolchain(min) if v == "" { if plus { - base.Fatalf("invalid GOTOOLCHAIN %q: invalid minimum toolchain %q", gotoolchain, min) + base.Fatalf("go: invalid GOTOOLCHAIN %q: invalid minimum toolchain %q", gotoolchain, min) } - base.Fatalf("invalid GOTOOLCHAIN %q", gotoolchain) + base.Fatalf("go: invalid GOTOOLCHAIN %q", gotoolchain) } minToolchain = min minVers = v } if plus && suffix != "auto" && suffix != "path" { - base.Fatalf("invalid GOTOOLCHAIN %q: only version suffixes are +auto and +path", gotoolchain) + base.Fatalf("go: invalid GOTOOLCHAIN %q: only version suffixes are +auto and +path", gotoolchain) } mode = suffix } @@ -172,7 +171,7 @@ func Select() { // has a suffix like "go1.21.1-foo" and toolchain is "go1.21.1".) toolVers := gover.FromToolchain(toolchain) if toolVers == "" || (!strings.HasPrefix(toolchain, "go") && !strings.Contains(toolchain, "-go")) { - base.Fatalf("invalid toolchain %q in %s", toolchain, base.ShortPath(file)) + base.Fatalf("go: invalid toolchain %q in %s", toolchain, base.ShortPath(file)) } if gover.Compare(toolVers, minVers) > 0 { gotoolchain = toolchain @@ -194,7 +193,7 @@ func Select() { // so that we have initialized gover.Startup for use in error messages. if target := os.Getenv(targetEnv); target != "" && TestVersionSwitch != "loop" { if gover.LocalToolchain() != target { - base.Fatalf("toolchain %v invoked to provide %v", gover.LocalToolchain(), target) + base.Fatalf("go: toolchain %v invoked to provide %v", gover.LocalToolchain(), target) } os.Unsetenv(targetEnv) @@ -225,7 +224,7 @@ func Select() { // We want to disallow mistakes / bad ideas like GOTOOLCHAIN=bash, // since we will find that in the path lookup. if !strings.HasPrefix(gotoolchain, "go1") && !strings.Contains(gotoolchain, "-go1") { - base.Fatalf("invalid GOTOOLCHAIN %q", gotoolchain) + base.Fatalf("go: invalid GOTOOLCHAIN %q", gotoolchain) } Exec(gotoolchain) @@ -244,8 +243,6 @@ var TestVersionSwitch string // as a source of Go toolchains. Otherwise Exec tries the PATH but then downloads // a toolchain if necessary. func Exec(gotoolchain string) { - log.SetPrefix("go: ") - writeBits = sysWriteBits() count, _ := strconv.Atoi(os.Getenv(countEnv)) @@ -253,7 +250,7 @@ func Exec(gotoolchain string) { fmt.Fprintf(os.Stderr, "go: switching from go%v to %v [depth %d]\n", gover.Local(), gotoolchain, count) } if count >= maxSwitch { - base.Fatalf("too many toolchain switches") + base.Fatalf("go: too many toolchain switches") } os.Setenv(countEnv, fmt.Sprint(count+1)) @@ -276,7 +273,7 @@ func Exec(gotoolchain string) { case "loop", "mismatch": exe, err := os.Executable() if err != nil { - base.Fatalf("%v", err) + base.Fatal(err) } execGoToolchain(gotoolchain, os.Getenv("GOROOT"), exe) } @@ -291,7 +288,7 @@ func Exec(gotoolchain string) { // GOTOOLCHAIN=auto looks in PATH and then falls back to download. // GOTOOLCHAIN=path only looks in PATH. if pathOnly { - base.Fatalf("cannot find %q in PATH", gotoolchain) + base.Fatalf("go: cannot find %q in PATH", gotoolchain) } // Set up modules without an explicit go.mod, to download distribution. @@ -310,9 +307,9 @@ func Exec(gotoolchain string) { dir, err := modfetch.Download(context.Background(), m) if err != nil { if errors.Is(err, fs.ErrNotExist) { - base.Fatalf("download %s for %s/%s: toolchain not available", gotoolchain, runtime.GOOS, runtime.GOARCH) + base.Fatalf("go: download %s for %s/%s: toolchain not available", gotoolchain, runtime.GOOS, runtime.GOARCH) } - base.Fatalf("download %s: %v", gotoolchain, err) + base.Fatalf("go: download %s: %v", gotoolchain, err) } // On first use after download, set the execute bits on the commands @@ -321,7 +318,7 @@ func Exec(gotoolchain string) { if runtime.GOOS != "windows" { info, err := os.Stat(filepath.Join(dir, "bin/go")) if err != nil { - base.Fatalf("download %s: %v", gotoolchain, err) + base.Fatalf("go: download %s: %v", gotoolchain, err) } if info.Mode()&0111 == 0 { // allowExec sets the exec permission bits on all files found in dir. @@ -342,7 +339,7 @@ func Exec(gotoolchain string) { return nil }) if err != nil { - base.Fatalf("download %s: %v", gotoolchain, err) + base.Fatalf("go: download %s: %v", gotoolchain, err) } } @@ -384,7 +381,7 @@ func Exec(gotoolchain string) { err = raceSafeCopy(srcUGoMod, srcGoMod) } if err != nil { - base.Fatalf("download %s: %v", gotoolchain, err) + base.Fatalf("go: download %s: %v", gotoolchain, err) } } @@ -475,7 +472,7 @@ func modGoToolchain() (file, goVers, toolchain string) { data, err := os.ReadFile(file) if err != nil { - base.Fatalf("%v", err) + base.Fatal(err) } return file, gover.GoModLookup(data, "go"), gover.GoModLookup(data, "toolchain") } @@ -492,6 +489,7 @@ func goInstallVersion() bool { // Check for pkg@version. var arg string + var cmdFlags *flag.FlagSet switch os.Args[1] { default: return false @@ -500,6 +498,7 @@ func goInstallVersion() bool { // across a toolchain switch. To make that work, assume the pkg@version // is the last argument and skip the flag parsing. arg = os.Args[len(os.Args)-1] + cmdFlags = &work.CmdInstall.Flag case "run": // For run, the pkg@version can be anywhere on the command line, // because it is preceded by run flags and followed by arguments to the @@ -507,6 +506,7 @@ func goInstallVersion() bool { // flags a little bit, to know whether each flag takes an optional argument. // We can still allow unknown flags as long as they have an explicit =value. args := os.Args[2:] + cmdFlags = &run.CmdRun.Flag for i := 0; i < len(args); i++ { a := args[i] if !strings.HasPrefix(a, "-") { @@ -554,6 +554,20 @@ func goInstallVersion() bool { return false } + // Make a best effort to parse flags so that module flags like -modcacherw + // will take effect (see https://go.dev/issue/64282). + args := os.Args[2:] + for len(args) > 0 { + var err error + _, args, err = cmdflag.ParseOne(cmdFlags, args) + if errors.Is(err, cmdflag.ErrFlagTerminator) { + break + } + // Ignore all other errors: they may be new flags — or updated syntax for + // existing flags — intended for a newer Go toolchain. + } + base.SetFromGOFLAGS(cmdFlags, true) + // It would be correct to simply return true here, bypassing use // of the current go.mod or go.work, and let "go run" or "go install" // do the rest, including a toolchain switch. diff --git a/src/cmd/go/internal/vet/vetflag.go b/src/cmd/go/internal/vet/vetflag.go index eb7af6508d..601ae9aa64 100644 --- a/src/cmd/go/internal/vet/vetflag.go +++ b/src/cmd/go/internal/vet/vetflag.go @@ -116,7 +116,7 @@ func vetFlags(args []string) (passToVet, packageNames []string) { // Record the set of vet tool flags set by GOFLAGS. We want to pass them to // the vet tool, but only if they aren't overridden by an explicit argument. - base.SetFromGOFLAGS(&CmdVet.Flag) + base.SetFromGOFLAGS(&CmdVet.Flag, false) addFromGOFLAGS := map[string]bool{} CmdVet.Flag.Visit(func(f *flag.Flag) { if isVetFlag[f.Name] { diff --git a/src/cmd/go/main.go b/src/cmd/go/main.go index d380aae489..b309cb867a 100644 --- a/src/cmd/go/main.go +++ b/src/cmd/go/main.go @@ -234,7 +234,7 @@ func invoke(cmd *base.Command, args []string) { if cmd.CustomFlags { args = args[1:] } else { - base.SetFromGOFLAGS(&cmd.Flag) + base.SetFromGOFLAGS(&cmd.Flag, false) cmd.Flag.Parse(args[1:]) args = cmd.Flag.Args() } diff --git a/src/cmd/go/testdata/script/install_modcacherw_issue64282.txt b/src/cmd/go/testdata/script/install_modcacherw_issue64282.txt new file mode 100644 index 0000000000..ea644f789e --- /dev/null +++ b/src/cmd/go/testdata/script/install_modcacherw_issue64282.txt @@ -0,0 +1,32 @@ +# Regression test for https://go.dev/issue/64282: +# 'go install' and 'go run' with pkg@version arguments should make +# a best effort to parse flags before they download modules to +# identify which toolchain version to use, because those flags +# may affect the downloaded contents. + +# However, the best-effort flag parsing should not interfere with +# actual flag parsing if we don't switch toolchains. In particular, +# unrecognized flags should still be diagnosed after the module for +# the requested package has been downloaded and checked for toolchain +# upgrades. + +! go install -cake=delicious -modcacherw example.com/printversion@v0.1.0 +stderr '^flag provided but not defined: -cake$' + +[!short] go install -modcacherw example.com/printversion@v0.1.0 + # Because the -modcacherw flag was set, we should be able to modify the contents + # of a directory within the module cache. +cp $WORK/extraneous.txt $GOPATH/pkg/mod/example.com/printversion@v0.1.0/extraneous_file.go + + +# We should also apply flags from GOFLAGS at this step. + +go clean -modcache +env GOFLAGS=-modcacherw +! go install -cake=delicious example.com/printversion@v0.1.0 +stderr '^flag provided but not defined: -cake$' +cp $WORK/extraneous.txt $GOPATH/pkg/mod/example.com/printversion@v0.1.0/extraneous_file.go + + +-- $WORK/extraneous.txt -- +This is not a Go source file. diff --git a/src/cmd/go/testdata/script/malformed_gosum_issue62345.txt b/src/cmd/go/testdata/script/malformed_gosum_issue62345.txt index 23c41beae9..35fad29193 100644 --- a/src/cmd/go/testdata/script/malformed_gosum_issue62345.txt +++ b/src/cmd/go/testdata/script/malformed_gosum_issue62345.txt @@ -1,5 +1,5 @@ ! go mod download -stderr '^malformed go.sum:\n.*go.sum:3: wrong number of fields 5\n$' +stderr '^go: malformed go.sum:\n.*go.sum:3: wrong number of fields 5\n$' go mod tidy cmp go.sum go.sum.after-tidy diff --git a/src/cmd/go/testdata/script/work_sum_mismatch.txt b/src/cmd/go/testdata/script/work_sum_mismatch.txt index ca5d71dc5e..d4997aa372 100644 --- a/src/cmd/go/testdata/script/work_sum_mismatch.txt +++ b/src/cmd/go/testdata/script/work_sum_mismatch.txt @@ -4,7 +4,7 @@ cmpenv stderr want-error -- want-error -- -verifying rsc.io/sampler@v1.3.0/go.mod: checksum mismatch +go: verifying rsc.io/sampler@v1.3.0/go.mod: checksum mismatch downloaded: h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= $WORK${/}gopath${/}src${/}a${/}go.sum: h1:U1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= @@ -58,4 +58,4 @@ import ( func main() { fmt.Println(quote.Hello()) -} \ No newline at end of file +} From d73b4322ed8105e8cad438868ec8ad7d635799eb Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Wed, 13 Dec 2023 23:35:30 -0500 Subject: [PATCH 253/313] net/netip: remove Prefix.Compare for Go 1.22 API questions remain, so we decided to back it out for Go 1.22. Code still lives in the repo, just unexported. For #61642. Change-Id: Iccd91b0da48ae72dec9f660476826a220c7ca4be Reviewed-on: https://go-review.googlesource.com/c/go/+/549615 LUCI-TryBot-Result: Go LUCI Reviewed-by: David Anderson Auto-Submit: Russ Cox Reviewed-by: Damien Neil --- api/go1.22.txt | 1 - src/net/netip/export_test.go | 2 ++ src/net/netip/netip.go | 7 +++++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/api/go1.22.txt b/api/go1.22.txt index d2a1ae7a88..86eb80deaf 100644 --- a/api/go1.22.txt +++ b/api/go1.22.txt @@ -131,7 +131,6 @@ pkg net/http, func ServeFileFS(ResponseWriter, *Request, fs.FS, string) #51971 pkg net/http, method (*Request) PathValue(string) string #61410 pkg net/http, method (*Request) SetPathValue(string, string) #61410 pkg net/netip, method (AddrPort) Compare(AddrPort) int #61642 -pkg net/netip, method (Prefix) Compare(Prefix) int #61642 pkg os, method (*File) WriteTo(io.Writer) (int64, error) #58808 pkg reflect, func PtrTo //deprecated #59599 pkg reflect, func TypeFor[$0 interface{}]() Type #60088 diff --git a/src/net/netip/export_test.go b/src/net/netip/export_test.go index 59971fa2e4..72347ee01b 100644 --- a/src/net/netip/export_test.go +++ b/src/net/netip/export_test.go @@ -28,3 +28,5 @@ var TestAppendToMarshal = testAppendToMarshal func (a Addr) IsZero() bool { return a.isZero() } func (p Prefix) IsZero() bool { return p.isZero() } + +func (p Prefix) Compare(p2 Prefix) int { return p.compare(p2) } diff --git a/src/net/netip/netip.go b/src/net/netip/netip.go index 1d20a4aa7f..9acc48a6e0 100644 --- a/src/net/netip/netip.go +++ b/src/net/netip/netip.go @@ -1261,12 +1261,15 @@ func (p Prefix) isZero() bool { return p == Prefix{} } // IsSingleIP reports whether p contains exactly one IP. func (p Prefix) IsSingleIP() bool { return p.IsValid() && p.Bits() == p.ip.BitLen() } -// Compare returns an integer comparing two prefixes. +// compare returns an integer comparing two prefixes. // The result will be 0 if p == p2, -1 if p < p2, and +1 if p > p2. // Prefixes sort first by validity (invalid before valid), then // address family (IPv4 before IPv6), then prefix length, then // address. -func (p Prefix) Compare(p2 Prefix) int { +// +// Unexported for Go 1.22 because we may want to compare by p.Addr first. +// See post-acceptance discussion on go.dev/issue/61642. +func (p Prefix) compare(p2 Prefix) int { if c := cmp.Compare(p.Addr().BitLen(), p2.Addr().BitLen()); c != 0 { return c } From 5e939b3a9ce7864551e86c04a05db887c25e2759 Mon Sep 17 00:00:00 2001 From: Roland Shoemaker Date: Mon, 11 Dec 2023 11:44:23 -0800 Subject: [PATCH 254/313] doc: add crypto/tls and crypto/x509 release notes Updates #61422 Change-Id: If561f701882396f8e28e2fc3fa9c76c7169f752e Reviewed-on: https://go-review.googlesource.com/c/go/+/548975 Reviewed-by: Filippo Valsorda Reviewed-by: Damien Neil Auto-Submit: Roland Shoemaker LUCI-TryBot-Result: Go LUCI --- doc/go1.22.html | 60 +++++++++++++++++++++---------------------------- 1 file changed, 26 insertions(+), 34 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index bf01cffce0..792ea655ac 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -363,32 +363,22 @@ defer func() {
crypto/tls
-

- TODO: https://go.dev/issue/43922: implement RFC7627 +

+ ConnectionState.ExportKeyingMaterial will now + return an error unless TLS 1.3 is in use, or the extended_master_secret extension is supported by both the server and + client. crypto/tls has supported this extension since Go 1.20. This can be disabled with the + tlsunsafeekm=1 GODEBUG setting.

-

- TODO: https://go.dev/issue/62459: make default minimum version for servers TLS 1.2 +

+ By default, the minimum version offered by crypto/tls servers is now TLS 1.2 if not specified with + config.MinimumVersion, matching the behavior of crypto/tls + clients. This change can be reverted with the tls10server=1 GODEBUG setting.

-

- TODO: https://go.dev/issue/63413: disable RSA key exchange cipher suites by default -

- -

- TODO: https://go.dev/cl/514997: crypto/tls: change SendSessionTicket to take an options struct; modified api/go1.21.txt -

- -

- TODO: https://go.dev/cl/541516: crypto/tls: change default minimum version to 1.2 -

- -

- TODO: https://go.dev/cl/541517: crypto/tls: remove RSA KEX ciphers from the default list -

- -

- TODO: https://go.dev/cl/544155: crypto/tls: disable ExportKeyingMaterial without EMS +

+ By default, cipher suites without ECDHE support are no longer offered by either clients or servers during pre-TLS 1.3 + handshakes. This change can be reverted with the tlsrsakex=1 GODEBUG setting.

@@ -396,23 +386,25 @@ defer func() {
crypto/x509

- TODO: https://go.dev/issue/57178: support code-constrained roots + The new CertPool.AddCertWithConstraint + method can be used to add customized constraints to root certificates to be applied during chain building.

-

- TODO: https://go.dev/issue/58922: add android user trusted CA folder as a possible source for certificate retrieval +

+ On Android, root certificates will now be loaded from /data/misc/keychain/certs-added as well as /system/etc/security/cacerts.

-

- TODO: https://go.dev/issue/60665: introduce new robust OID type & use it for certificate policies -

+

+ A new type, OID, supports ASN.1 Object Identifiers with individual + components larger than 31 bits. A new field which uses this type, Policies, + is added to the Certificate struct, and is now populated during parsing. Any OIDs which cannot be represented + using a asn1.ObjectIdentifier will appear in Policies, + but not in the old PolicyIdentifiers field. -

- TODO: https://go.dev/cl/519315: crypto/x509: implement AddCertWithConstraint; modified api/next/57178.txt -

- -

- TODO: https://go.dev/cl/520535: crypto/x509: add new OID type and use it in Certificate; modified api/next/60665.txt + When calling CreateCertificate, the Policies field is ignored, and + policies are taken from the PolicyIdentifiers field. Using the x509usepolicies=1 GODEBUG setting inverts this, + populating certificate policies from the Policies field, and ignoring the PolicyIdentifiers field. We may change the + default value of x509usepolicies in Go 1.23, making Policies the default field for marshaling.

From b60bf8f8e131b026eb2691e736d3df9dce852297 Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Thu, 14 Dec 2023 13:07:50 -0800 Subject: [PATCH 255/313] cmd/asm: fix encoding for arm right shift by constant 0 Right shifts, for some odd reasons, can encode shifts of constant 1-32 instead of 0-31. Left shifts, however, can encode shifts 0-31. When the shift amount is 0, arm recommends encoding right shifts using left shifts. Fixes #64715 Change-Id: Id3825349aa7195028037893dfe01fa0e405eaa51 Reviewed-on: https://go-review.googlesource.com/c/go/+/549955 Reviewed-by: Cherry Mui Reviewed-by: Cuong Manh Le LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall --- src/cmd/asm/internal/asm/testdata/arm.s | 8 ++++++++ src/cmd/internal/obj/arm/asm5.go | 8 ++++++++ test/fixedbugs/issue64715.go | 25 +++++++++++++++++++++++++ test/fixedbugs/issue64715.out | 1 + 4 files changed, 42 insertions(+) create mode 100644 test/fixedbugs/issue64715.go create mode 100644 test/fixedbugs/issue64715.out diff --git a/src/cmd/asm/internal/asm/testdata/arm.s b/src/cmd/asm/internal/asm/testdata/arm.s index 2ba22c71de..2b8cadbed8 100644 --- a/src/cmd/asm/internal/asm/testdata/arm.s +++ b/src/cmd/asm/internal/asm/testdata/arm.s @@ -870,10 +870,13 @@ jmp_label_3: BIC.S R0@>R1, R2 // 7021d2e1 // SRL + SRL $0, R5, R6 // 0560a0e1 + SRL $1, R5, R6 // a560a0e1 SRL $14, R5, R6 // 2567a0e1 SRL $15, R5, R6 // a567a0e1 SRL $30, R5, R6 // 256fa0e1 SRL $31, R5, R6 // a56fa0e1 + SRL $32, R5, R6 // 2560a0e1 SRL.S $14, R5, R6 // 2567b0e1 SRL.S $15, R5, R6 // a567b0e1 SRL.S $30, R5, R6 // 256fb0e1 @@ -892,10 +895,13 @@ jmp_label_3: SRL.S R5, R7 // 3775b0e1 // SRA + SRA $0, R5, R6 // 0560a0e1 + SRA $1, R5, R6 // c560a0e1 SRA $14, R5, R6 // 4567a0e1 SRA $15, R5, R6 // c567a0e1 SRA $30, R5, R6 // 456fa0e1 SRA $31, R5, R6 // c56fa0e1 + SRA $32, R5, R6 // 4560a0e1 SRA.S $14, R5, R6 // 4567b0e1 SRA.S $15, R5, R6 // c567b0e1 SRA.S $30, R5, R6 // 456fb0e1 @@ -914,6 +920,8 @@ jmp_label_3: SRA.S R5, R7 // 5775b0e1 // SLL + SLL $0, R5, R6 // 0560a0e1 + SLL $1, R5, R6 // 8560a0e1 SLL $14, R5, R6 // 0567a0e1 SLL $15, R5, R6 // 8567a0e1 SLL $30, R5, R6 // 056fa0e1 diff --git a/src/cmd/internal/obj/arm/asm5.go b/src/cmd/internal/obj/arm/asm5.go index 24b9bdd980..9731bd4151 100644 --- a/src/cmd/internal/obj/arm/asm5.go +++ b/src/cmd/internal/obj/arm/asm5.go @@ -1099,6 +1099,14 @@ func (c *ctxt5) oplook(p *obj.Prog) *Optab { fmt.Printf("\t\t%d %d\n", p.From.Type, p.To.Type) } + if (p.As == ASRL || p.As == ASRA) && p.From.Type == obj.TYPE_CONST && p.From.Offset == 0 { + // Right shifts are weird - a shift that looks like "shift by constant 0" actually + // means "shift by constant 32". Use left shift in this situation instead. + // See issue 64715. + // TODO: rotate by 0? Not currently supported, but if we ever do then include it here. + p.As = ASLL + } + ops := oprange[p.As&obj.AMask] c1 := &xcmp[a1] c3 := &xcmp[a3] diff --git a/test/fixedbugs/issue64715.go b/test/fixedbugs/issue64715.go new file mode 100644 index 0000000000..bf117165b7 --- /dev/null +++ b/test/fixedbugs/issue64715.go @@ -0,0 +1,25 @@ +// run + +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +func boolInt32(b bool) int32 { + if b { + return 1 + } + + return 0 +} + +func f(left uint16, right int32) (r uint16) { + return left >> right +} + +var n = uint16(65535) + +func main() { + println(f(n, boolInt32(int64(n^n) > 1))) +} diff --git a/test/fixedbugs/issue64715.out b/test/fixedbugs/issue64715.out new file mode 100644 index 0000000000..7a53b35687 --- /dev/null +++ b/test/fixedbugs/issue64715.out @@ -0,0 +1 @@ +65535 From 3313bbb4055f38f53cd43c6c5782a229f445f230 Mon Sep 17 00:00:00 2001 From: David Chase Date: Thu, 14 Dec 2023 14:20:12 -0500 Subject: [PATCH 256/313] runtime: add race annotations in IncNonDefault Also use CompareAndSwap to make the code actually less racy. Added a test which will be meaningful when run under the race detector (tested it -race with broken fix in runtime, it failed). Fixes #64649 Change-Id: I5972e08901d1adc8ba74858edad7eba91be1b0ce Reviewed-on: https://go-review.googlesource.com/c/go/+/549796 Run-TryBot: David Chase Reviewed-by: Mauri de Souza Meneguzzo Reviewed-by: Cherry Mui TryBot-Result: Gopher Robot --- src/internal/godebug/godebug_test.go | 31 ++++++++++++++++++++++++++++ src/runtime/runtime.go | 10 ++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/internal/godebug/godebug_test.go b/src/internal/godebug/godebug_test.go index ed8e93d453..1ed0a365ab 100644 --- a/src/internal/godebug/godebug_test.go +++ b/src/internal/godebug/godebug_test.go @@ -7,6 +7,7 @@ package godebug_test import ( "fmt" . "internal/godebug" + "internal/race" "internal/testenv" "os" "os/exec" @@ -70,6 +71,36 @@ func TestMetrics(t *testing.T) { } } +// TestPanicNilRace checks for a race in the runtime caused by use of runtime +// atomics (not visible to usual race detection) to install the counter for +// non-default panic(nil) semantics. For #64649. +func TestPanicNilRace(t *testing.T) { + if !race.Enabled { + t.Skip("Skipping test intended for use with -race.") + } + if os.Getenv("GODEBUG") != "panicnil=1" { + cmd := testenv.CleanCmdEnv(testenv.Command(t, os.Args[0], "-test.run=^TestPanicNilRace$", "-test.v", "-test.parallel=2", "-test.count=1")) + cmd.Env = append(cmd.Env, "GODEBUG=panicnil=1") + out, err := cmd.CombinedOutput() + t.Logf("output:\n%s", out) + + if err != nil { + t.Errorf("Was not expecting a crash") + } + return + } + + test := func(t *testing.T) { + t.Parallel() + defer func() { + recover() + }() + panic(nil) + } + t.Run("One", test) + t.Run("Two", test) +} + func TestCmdBisect(t *testing.T) { testenv.MustHaveGoBuild(t) out, err := exec.Command("go", "run", "cmd/vendor/golang.org/x/tools/cmd/bisect", "GODEBUG=buggy=1#PATTERN", os.Args[0], "-test.run=^TestBisectTestCase$").CombinedOutput() diff --git a/src/runtime/runtime.go b/src/runtime/runtime.go index 0829a84e43..92cdfc310e 100644 --- a/src/runtime/runtime.go +++ b/src/runtime/runtime.go @@ -172,7 +172,15 @@ func (g *godebugInc) IncNonDefault() { // *godebug.Setting. inc = new(func()) *inc = (*newInc)(g.name) - g.inc.Store(inc) + if raceenabled { + racerelease(unsafe.Pointer(&g.inc)) + } + if !g.inc.CompareAndSwap(nil, inc) { + inc = g.inc.Load() + } + } + if raceenabled { + raceacquire(unsafe.Pointer(&g.inc)) } (*inc)() } From f8170cc01722a562eec7cf00836ee008b490c534 Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Thu, 14 Dec 2023 16:29:50 -0800 Subject: [PATCH 257/313] cmd/asm: for arm, rewrite argument shifted right by 0 to left by 0. Right shift by 0 has bad semantics. Make sure if we try to right shift by 0, do a left shift by 0 instead. CL 549955 handled full instructions with this strange no-op encoding. This CL handles the shift done to instruction register inputs. (The former is implemented using the latter, but not until deep inside the assembler.) Update #64715 Change-Id: Ibfabb4b13e2595551e58b977162fe005aaaa0ad1 Reviewed-on: https://go-review.googlesource.com/c/go/+/550335 Run-TryBot: Cherry Mui TryBot-Result: Gopher Robot Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall --- src/cmd/asm/internal/asm/testdata/arm.s | 14 ++++++++++++++ src/cmd/internal/obj/arm/asm5.go | 18 ++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/src/cmd/asm/internal/asm/testdata/arm.s b/src/cmd/asm/internal/asm/testdata/arm.s index 2b8cadbed8..93edc8854e 100644 --- a/src/cmd/asm/internal/asm/testdata/arm.s +++ b/src/cmd/asm/internal/asm/testdata/arm.s @@ -943,6 +943,20 @@ jmp_label_3: SLL R5, R7 // 1775a0e1 SLL.S R5, R7 // 1775b0e1 +// Ops with zero shifts should encode as left shifts + ADD R0<<0, R1, R2 // 002081e0 + ADD R0>>0, R1, R2 // 002081e0 + ADD R0->0, R1, R2 // 002081e0 + ADD R0@>0, R1, R2 // 002081e0 + MOVW R0<<0(R1), R2 // 002091e7 + MOVW R0>>0(R1), R2 // 002091e7 + MOVW R0->0(R1), R2 // 002091e7 + MOVW R0@>0(R1), R2 // 002091e7 + MOVW R0, R1<<0(R2) // 010082e7 + MOVW R0, R1>>0(R2) // 010082e7 + MOVW R0, R1->0(R2) // 010082e7 + MOVW R0, R1@>0(R2) // 010082e7 + // MULA / MULS MULAWT R1, R2, R3, R4 // c23124e1 MULAWB R1, R2, R3, R4 // 823124e1 diff --git a/src/cmd/internal/obj/arm/asm5.go b/src/cmd/internal/obj/arm/asm5.go index 9731bd4151..4e6eff9e17 100644 --- a/src/cmd/internal/obj/arm/asm5.go +++ b/src/cmd/internal/obj/arm/asm5.go @@ -1106,6 +1106,24 @@ func (c *ctxt5) oplook(p *obj.Prog) *Optab { // TODO: rotate by 0? Not currently supported, but if we ever do then include it here. p.As = ASLL } + if p.As != AMOVB && p.As != AMOVBS && p.As != AMOVBU && p.As != AMOVH && p.As != AMOVHS && p.As != AMOVHU && p.As != AXTAB && p.As != AXTABU && p.As != AXTAH && p.As != AXTAHU { + // Same here, but for shifts encoded in Addrs. + // Don't do it for the extension ops, which + // need to keep their RR shifts. + fixShift := func(a *obj.Addr) { + if a.Type == obj.TYPE_SHIFT { + typ := a.Offset & SHIFT_RR + isConst := a.Offset&(1<<4) == 0 + amount := a.Offset >> 7 & 0x1f + if isConst && amount == 0 && (typ == SHIFT_LR || typ == SHIFT_AR || typ == SHIFT_RR) { + a.Offset -= typ + a.Offset += SHIFT_LL + } + } + } + fixShift(&p.From) + fixShift(&p.To) + } ops := oprange[p.As&obj.AMask] c1 := &xcmp[a1] From 793097161b3a263b2b0912265cf99d4d9c6218fa Mon Sep 17 00:00:00 2001 From: Jes Cok Date: Fri, 15 Dec 2023 04:33:18 +0000 Subject: [PATCH 258/313] all: fix copyright headers Change-Id: Ib16986fb088030b93140e48c17e3d7bb2c9312cf GitHub-Last-Rev: 41572879f8f45c963c0e3ab9862bc0de59781a13 GitHub-Pull-Request: golang/go#64731 Reviewed-on: https://go-review.googlesource.com/c/go/+/549956 Run-TryBot: Jes Cok TryBot-Result: Gopher Robot Reviewed-by: Dmitri Shuralyov Reviewed-by: Bryan Mills Reviewed-by: Dmitri Shuralyov Auto-Submit: Dmitri Shuralyov --- src/cmd/cgo/internal/test/issue9400/asm_mips64x.s | 2 +- src/cmd/cgo/internal/test/issue9400/asm_riscv64.s | 2 +- src/cmd/cgo/internal/testgodefs/testdata/fieldtypedef.go | 2 +- src/cmd/compile/internal/types2/errorcalls_test.go | 2 +- src/cmd/go/internal/mmap/mmap.go | 2 +- src/cmd/go/internal/mmap/mmap_other.go | 2 +- src/cmd/go/internal/mmap/mmap_unix.go | 2 +- src/cmd/go/internal/mmap/mmap_windows.go | 2 +- src/go/types/errorcalls_test.go | 2 +- src/runtime/asan0.go | 2 +- src/runtime/profbuf.go | 2 +- src/runtime/signal_aix_ppc64.go | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/cmd/cgo/internal/test/issue9400/asm_mips64x.s b/src/cmd/cgo/internal/test/issue9400/asm_mips64x.s index 1f492eafe9..3edba3dd82 100644 --- a/src/cmd/cgo/internal/test/issue9400/asm_mips64x.s +++ b/src/cmd/cgo/internal/test/issue9400/asm_mips64x.s @@ -1,4 +1,4 @@ -// Copyright 2016 The Go Authors. All rights reserved. +// Copyright 2016 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. diff --git a/src/cmd/cgo/internal/test/issue9400/asm_riscv64.s b/src/cmd/cgo/internal/test/issue9400/asm_riscv64.s index fa34f6bd37..0f10e3a326 100644 --- a/src/cmd/cgo/internal/test/issue9400/asm_riscv64.s +++ b/src/cmd/cgo/internal/test/issue9400/asm_riscv64.s @@ -1,4 +1,4 @@ -// Copyright 2020 The Go Authors. All rights reserved. +// Copyright 2020 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. diff --git a/src/cmd/cgo/internal/testgodefs/testdata/fieldtypedef.go b/src/cmd/cgo/internal/testgodefs/testdata/fieldtypedef.go index b0c507477f..d3ab1902c1 100644 --- a/src/cmd/cgo/internal/testgodefs/testdata/fieldtypedef.go +++ b/src/cmd/cgo/internal/testgodefs/testdata/fieldtypedef.go @@ -1,4 +1,4 @@ -// Copyright 2018 The Go Authors. All rights reserve d. +// Copyright 2018 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. diff --git a/src/cmd/compile/internal/types2/errorcalls_test.go b/src/cmd/compile/internal/types2/errorcalls_test.go index 6153b42a34..ba4dc87b6a 100644 --- a/src/cmd/compile/internal/types2/errorcalls_test.go +++ b/src/cmd/compile/internal/types2/errorcalls_test.go @@ -1,6 +1,6 @@ // Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE ast. +// license that can be found in the LICENSE file. package types2_test diff --git a/src/cmd/go/internal/mmap/mmap.go b/src/cmd/go/internal/mmap/mmap.go index 0cad9caf27..fcbd3e08c1 100644 --- a/src/cmd/go/internal/mmap/mmap.go +++ b/src/cmd/go/internal/mmap/mmap.go @@ -1,4 +1,4 @@ -// Copyright 2011 The Go Authors. All rights reserved. +// Copyright 2011 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. diff --git a/src/cmd/go/internal/mmap/mmap_other.go b/src/cmd/go/internal/mmap/mmap_other.go index 22e9395b21..4d2844fc37 100644 --- a/src/cmd/go/internal/mmap/mmap_other.go +++ b/src/cmd/go/internal/mmap/mmap_other.go @@ -1,4 +1,4 @@ -// Copyright 2022 The Go Authors. All rights reserved. +// Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. diff --git a/src/cmd/go/internal/mmap/mmap_unix.go b/src/cmd/go/internal/mmap/mmap_unix.go index 53bcbb92a8..5dce872368 100644 --- a/src/cmd/go/internal/mmap/mmap_unix.go +++ b/src/cmd/go/internal/mmap/mmap_unix.go @@ -1,4 +1,4 @@ -// Copyright 2011 The Go Authors. All rights reserved. +// Copyright 2011 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. diff --git a/src/cmd/go/internal/mmap/mmap_windows.go b/src/cmd/go/internal/mmap/mmap_windows.go index 1cf62feca3..d00bef71e5 100644 --- a/src/cmd/go/internal/mmap/mmap_windows.go +++ b/src/cmd/go/internal/mmap/mmap_windows.go @@ -1,4 +1,4 @@ -// Copyright 2011 The Go Authors. All rights reserved. +// Copyright 2011 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. diff --git a/src/go/types/errorcalls_test.go b/src/go/types/errorcalls_test.go index d76c06da30..0238909282 100644 --- a/src/go/types/errorcalls_test.go +++ b/src/go/types/errorcalls_test.go @@ -1,6 +1,6 @@ // Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE ast. +// license that can be found in the LICENSE file. package types_test diff --git a/src/runtime/asan0.go b/src/runtime/asan0.go index 0948786200..bcfd96f1ab 100644 --- a/src/runtime/asan0.go +++ b/src/runtime/asan0.go @@ -1,4 +1,4 @@ -// Copyright 2021 The Go Authors. All rights reserved. +// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. diff --git a/src/runtime/profbuf.go b/src/runtime/profbuf.go index 5772a8020c..d3afbcd8c7 100644 --- a/src/runtime/profbuf.go +++ b/src/runtime/profbuf.go @@ -1,4 +1,4 @@ -// Copyright 2017 The Go Authors. All rights reserved. +// Copyright 2017 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. diff --git a/src/runtime/signal_aix_ppc64.go b/src/runtime/signal_aix_ppc64.go index c6cb91a0a2..8ae0f749ed 100644 --- a/src/runtime/signal_aix_ppc64.go +++ b/src/runtime/signal_aix_ppc64.go @@ -1,4 +1,4 @@ -/// Copyright 2018 The Go Authors. All rights reserved. +// Copyright 2018 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. From 9b4b3e5acca2dabe107fa2c3ed963097d78a4562 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Wed, 13 Dec 2023 15:07:28 -0500 Subject: [PATCH 259/313] runtime: properly model rwmutex in lock ranking Currently, lock ranking doesn't really try to model rwmutex. It records the internal locks rLock and wLock, but in a subpar fashion: 1. wLock is held from lock to unlock, so it works OK, but it conflates write locks of all rwmutexes as rwmutexW, rather than allowing different rwmutexes to have different rankings. 2. rLock is an internal implementation detail that is only taken when there is contention in rlock. As as result, the reader lock path is almost never checked. Add proper modeling. rwmutexR and rwmutexW remain as the ranks of the internal locks, which have their own ordering. The new init method is passed the ranks of the higher level lock that this represents, just like lockInit for mutex. execW ordered before MALLOC captures the case from #64722. i.e., there can be allocation between BeforeFork and AfterFork. For #64722. Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-staticlockranking Change-Id: I23335b28faa42fb04f1bc9da02fdf54d1616cd28 Reviewed-on: https://go-review.googlesource.com/c/go/+/549536 Reviewed-by: Michael Knyszek LUCI-TryBot-Result: Go LUCI --- src/runtime/export_test.go | 4 ++ src/runtime/lockrank.go | 87 ++++++++++++++++++++++--------------- src/runtime/mklockrank.go | 39 ++++++++++++++--- src/runtime/proc.go | 2 + src/runtime/rwmutex.go | 48 +++++++++++++++++--- src/runtime/rwmutex_test.go | 4 ++ 6 files changed, 138 insertions(+), 46 deletions(-) diff --git a/src/runtime/export_test.go b/src/runtime/export_test.go index 2e707b96e2..11e4bd26c5 100644 --- a/src/runtime/export_test.go +++ b/src/runtime/export_test.go @@ -586,6 +586,10 @@ type RWMutex struct { rw rwmutex } +func (rw *RWMutex) Init() { + rw.rw.init(lockRankTestR, lockRankTestW) +} + func (rw *RWMutex) RLock() { rw.rw.rlock() } diff --git a/src/runtime/lockrank.go b/src/runtime/lockrank.go index c56991acb8..43b3239f1e 100644 --- a/src/runtime/lockrank.go +++ b/src/runtime/lockrank.go @@ -18,9 +18,16 @@ const ( lockRankSweepWaiters lockRankAssistQueue lockRankSweep - lockRankPollDesc + lockRankTestR + lockRankTestW + lockRankAllocmW + lockRankExecW lockRankCpuprof + lockRankPollDesc lockRankWakeableSleep + // SCHED + lockRankAllocmR + lockRankExecR lockRankSched lockRankAllg lockRankAllp @@ -29,8 +36,6 @@ const ( lockRankHchan lockRankNotifyList lockRankSudog - lockRankRwmutexW - lockRankRwmutexR lockRankRoot lockRankItab lockRankReflectOffs @@ -64,6 +69,8 @@ const ( lockRankPanic lockRankDeadlock lockRankRaceFini + lockRankRwmutexW + lockRankRwmutexR ) // lockRankLeafRank is the rank of lock that does not have a declared rank, @@ -79,9 +86,15 @@ var lockNames = []string{ lockRankSweepWaiters: "sweepWaiters", lockRankAssistQueue: "assistQueue", lockRankSweep: "sweep", - lockRankPollDesc: "pollDesc", + lockRankTestR: "testR", + lockRankTestW: "testW", + lockRankAllocmW: "allocmW", + lockRankExecW: "execW", lockRankCpuprof: "cpuprof", + lockRankPollDesc: "pollDesc", lockRankWakeableSleep: "wakeableSleep", + lockRankAllocmR: "allocmR", + lockRankExecR: "execR", lockRankSched: "sched", lockRankAllg: "allg", lockRankAllp: "allp", @@ -90,8 +103,6 @@ var lockNames = []string{ lockRankHchan: "hchan", lockRankNotifyList: "notifyList", lockRankSudog: "sudog", - lockRankRwmutexW: "rwmutexW", - lockRankRwmutexR: "rwmutexR", lockRankRoot: "root", lockRankItab: "itab", lockRankReflectOffs: "reflectOffs", @@ -119,6 +130,8 @@ var lockNames = []string{ lockRankPanic: "panic", lockRankDeadlock: "deadlock", lockRankRaceFini: "raceFini", + lockRankRwmutexW: "rwmutexW", + lockRankRwmutexR: "rwmutexR", } func (rank lockRank) String() string { @@ -147,44 +160,50 @@ var lockPartialOrder [][]lockRank = [][]lockRank{ lockRankSweepWaiters: {}, lockRankAssistQueue: {}, lockRankSweep: {}, - lockRankPollDesc: {}, + lockRankTestR: {}, + lockRankTestW: {}, + lockRankAllocmW: {}, + lockRankExecW: {}, lockRankCpuprof: {}, + lockRankPollDesc: {}, lockRankWakeableSleep: {}, - lockRankSched: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep}, - lockRankAllg: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched}, - lockRankAllp: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched}, - lockRankTimers: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllp, lockRankTimers}, - lockRankNetpollInit: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllp, lockRankTimers}, - lockRankHchan: {lockRankSysmon, lockRankScavenge, lockRankSweep, lockRankWakeableSleep, lockRankHchan}, + lockRankAllocmR: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep}, + lockRankExecR: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep}, + lockRankSched: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR}, + lockRankAllg: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched}, + lockRankAllp: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched}, + lockRankTimers: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllp, lockRankTimers}, + lockRankNetpollInit: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllp, lockRankTimers}, + lockRankHchan: {lockRankSysmon, lockRankScavenge, lockRankSweep, lockRankTestR, lockRankWakeableSleep, lockRankHchan}, lockRankNotifyList: {}, - lockRankSudog: {lockRankSysmon, lockRankScavenge, lockRankSweep, lockRankWakeableSleep, lockRankHchan, lockRankNotifyList}, - lockRankRwmutexW: {}, - lockRankRwmutexR: {lockRankSysmon, lockRankRwmutexW}, + lockRankSudog: {lockRankSysmon, lockRankScavenge, lockRankSweep, lockRankTestR, lockRankWakeableSleep, lockRankHchan, lockRankNotifyList}, lockRankRoot: {}, lockRankItab: {}, lockRankReflectOffs: {lockRankItab}, lockRankUserArenaState: {}, lockRankTraceBuf: {lockRankSysmon, lockRankScavenge}, lockRankTraceStrings: {lockRankSysmon, lockRankScavenge, lockRankTraceBuf}, - lockRankFin: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, - lockRankSpanSetSpine: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, - lockRankMspanSpecial: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, - lockRankGcBitsArenas: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankMspanSpecial}, - lockRankProfInsert: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, - lockRankProfBlock: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, - lockRankProfMemActive: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, - lockRankProfMemFuture: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankProfMemActive}, - lockRankGscan: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture}, - lockRankStackpool: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan}, - lockRankStackLarge: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan}, - lockRankHchanLeaf: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankHchanLeaf}, - lockRankWbufSpans: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan}, - lockRankMheap: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans}, - lockRankMheapSpecial: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap}, - lockRankGlobalAlloc: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap, lockRankMheapSpecial}, - lockRankTrace: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap}, - lockRankTraceStackTab: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankPollDesc, lockRankCpuprof, lockRankWakeableSleep, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRwmutexW, lockRankRwmutexR, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap, lockRankTrace}, + lockRankFin: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, + lockRankSpanSetSpine: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, + lockRankMspanSpecial: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, + lockRankGcBitsArenas: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankMspanSpecial}, + lockRankProfInsert: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, + lockRankProfBlock: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, + lockRankProfMemActive: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, + lockRankProfMemFuture: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankProfMemActive}, + lockRankGscan: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture}, + lockRankStackpool: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan}, + lockRankStackLarge: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan}, + lockRankHchanLeaf: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankHchanLeaf}, + lockRankWbufSpans: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan}, + lockRankMheap: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans}, + lockRankMheapSpecial: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap}, + lockRankGlobalAlloc: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap, lockRankMheapSpecial}, + lockRankTrace: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap}, + lockRankTraceStackTab: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap, lockRankTrace}, lockRankPanic: {}, lockRankDeadlock: {lockRankPanic, lockRankDeadlock}, lockRankRaceFini: {lockRankPanic}, + lockRankRwmutexW: {lockRankTestW, lockRankAllocmW, lockRankExecW}, + lockRankRwmutexR: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankTestW, lockRankAllocmW, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankRwmutexW}, } diff --git a/src/runtime/mklockrank.go b/src/runtime/mklockrank.go index 241439bdfb..d9ffcbef8d 100644 --- a/src/runtime/mklockrank.go +++ b/src/runtime/mklockrank.go @@ -52,8 +52,16 @@ NONE < assistQueue, sweep; +# Test only +NONE < testR, testW; + # Scheduler, timers, netpoll -NONE < pollDesc, cpuprof, wakeableSleep; +NONE < + allocmW, + execW, + cpuprof, + pollDesc, + wakeableSleep; assistQueue, cpuprof, forcegc, @@ -61,21 +69,23 @@ assistQueue, scavenge, sweep, sweepWaiters, + testR, wakeableSleep +# Above SCHED are things that can call into the scheduler. +< SCHED +# Below SCHED is the scheduler implementation. +< allocmR, + execR < sched; sched < allg, allp; allp, wakeableSleep < timers; timers < netpollInit; # Channels -scavenge, sweep, wakeableSleep < hchan; +scavenge, sweep, testR, wakeableSleep < hchan; NONE < notifyList; hchan, notifyList < sudog; -# RWMutex -NONE < rwmutexW; -rwmutexW, sysmon < rwmutexR; - # Semaphores NONE < root; @@ -100,6 +110,9 @@ traceBuf < traceStrings; # Malloc allg, + allocmR, + execR, # May grow stack + execW, # May allocate after BeforeFork hchan, notifyList, reflectOffs, @@ -136,7 +149,7 @@ gcBitsArenas, < STACKGROW # Below STACKGROW is the stack allocator/copying implementation. < gscan; -gscan, rwmutexR < stackpool; +gscan < stackpool; gscan < stackLarge; # Generally, hchan must be acquired before gscan. But in one case, # where we suspend a G and then shrink its stack, syncadjustsudogs @@ -189,6 +202,18 @@ NONE < panic; panic < deadlock; # raceFini is only held while exiting. panic < raceFini; + +# RWMutex +allocmW, + execW, + testW +< rwmutexW; + +rwmutexW, + allocmR, + execR, + testR +< rwmutexR; ` // cyclicRanks lists lock ranks that allow multiple locks of the same diff --git a/src/runtime/proc.go b/src/runtime/proc.go index aae30dc2a8..b9715f267e 100644 --- a/src/runtime/proc.go +++ b/src/runtime/proc.go @@ -759,6 +759,8 @@ func schedinit() { lockInit(&reflectOffs.lock, lockRankReflectOffs) lockInit(&finlock, lockRankFin) lockInit(&cpuprof.lock, lockRankCpuprof) + allocmLock.init(lockRankAllocmR, lockRankAllocmW) + execLock.init(lockRankExecR, lockRankExecW) traceLockInit() // Enforce that this lock is always a leaf lock. // All of this lock's critical sections should be diff --git a/src/runtime/rwmutex.go b/src/runtime/rwmutex.go index ede3d13599..89fe16c10d 100644 --- a/src/runtime/rwmutex.go +++ b/src/runtime/rwmutex.go @@ -25,6 +25,37 @@ type rwmutex struct { readerCount atomic.Int32 // number of pending readers readerWait atomic.Int32 // number of departing readers + + readRank lockRank // semantic lock rank for read locking + writeRank lockRank // semantic lock rank for write locking +} + +// Lock ranking an rwmutex has two aspects: +// +// Semantic ranking: this rwmutex represents some higher level lock that +// protects some resource (e.g., allocmLock protects creation of new Ms). The +// read and write locks of that resource need to be represented in the lock +// rank. +// +// Internal ranking: as an implementation detail, rwmutex uses two mutexes: +// rLock and wLock. These have lock order requirements: wLock must be locked +// before rLock. This also needs to be represented in the lock rank. +// +// Internal ranking is represented by assigning ranks rwmutexR and rwmutexW to +// rLock and wLock, respectively. +// +// Semantic ranking is represented by acquiring readRank during read lock and +// writeRank during write lock. +// +// readRank is always taken before rwmutexR and writeRank is always taken +// before rwmutexW, so each unique rwmutex must record this order in the lock +// ranking. +func (rw *rwmutex) init(readRank, writeRank lockRank) { + rw.readRank = readRank + rw.writeRank = writeRank + + lockInit(&rw.rLock, lockRankRwmutexR) + lockInit(&rw.wLock, lockRankRwmutexW) } const rwmutexMaxReaders = 1 << 30 @@ -36,10 +67,14 @@ func (rw *rwmutex) rlock() { // deadlock (issue #20903). Alternatively, we could drop the P // while sleeping. acquirem() + + acquireLockRank(rw.readRank) + lockWithRankMayAcquire(&rw.rLock, getLockRank(&rw.rLock)) + if rw.readerCount.Add(1) < 0 { // A writer is pending. Park on the reader queue. systemstack(func() { - lockWithRank(&rw.rLock, lockRankRwmutexR) + lock(&rw.rLock) if rw.readerPass > 0 { // Writer finished. rw.readerPass -= 1 @@ -67,7 +102,7 @@ func (rw *rwmutex) runlock() { // A writer is pending. if rw.readerWait.Add(-1) == 0 { // The last reader unblocks the writer. - lockWithRank(&rw.rLock, lockRankRwmutexR) + lock(&rw.rLock) w := rw.writer.ptr() if w != nil { notewakeup(&w.park) @@ -75,18 +110,20 @@ func (rw *rwmutex) runlock() { unlock(&rw.rLock) } } + releaseLockRank(rw.readRank) releasem(getg().m) } // lock locks rw for writing. func (rw *rwmutex) lock() { // Resolve competition with other writers and stick to our P. - lockWithRank(&rw.wLock, lockRankRwmutexW) + acquireLockRank(rw.writeRank) + lock(&rw.wLock) m := getg().m // Announce that there is a pending writer. r := rw.readerCount.Add(-rwmutexMaxReaders) + rwmutexMaxReaders // Wait for any active readers to complete. - lockWithRank(&rw.rLock, lockRankRwmutexR) + lock(&rw.rLock) if r != 0 && rw.readerWait.Add(r) != 0 { // Wait for reader to wake us up. systemstack(func() { @@ -108,7 +145,7 @@ func (rw *rwmutex) unlock() { throw("unlock of unlocked rwmutex") } // Unblock blocked readers. - lockWithRank(&rw.rLock, lockRankRwmutexR) + lock(&rw.rLock) for rw.readers.ptr() != nil { reader := rw.readers.ptr() rw.readers = reader.schedlink @@ -122,4 +159,5 @@ func (rw *rwmutex) unlock() { unlock(&rw.rLock) // Allow other writers to proceed. unlock(&rw.wLock) + releaseLockRank(rw.writeRank) } diff --git a/src/runtime/rwmutex_test.go b/src/runtime/rwmutex_test.go index ddb16aead4..bdeb9c4901 100644 --- a/src/runtime/rwmutex_test.go +++ b/src/runtime/rwmutex_test.go @@ -29,6 +29,7 @@ func parallelReader(m *RWMutex, clocked chan bool, cunlock *atomic.Bool, cdone c func doTestParallelReaders(numReaders int) { GOMAXPROCS(numReaders + 1) var m RWMutex + m.Init() clocked := make(chan bool, numReaders) var cunlock atomic.Bool cdone := make(chan bool) @@ -100,6 +101,7 @@ func HammerRWMutex(gomaxprocs, numReaders, num_iterations int) { // Number of active readers + 10000 * number of active writers. var activity int32 var rwm RWMutex + rwm.Init() cdone := make(chan bool) go writer(&rwm, num_iterations, &activity, cdone) var i int @@ -141,6 +143,7 @@ func BenchmarkRWMutexUncontended(b *testing.B) { } b.RunParallel(func(pb *testing.PB) { var rwm PaddedRWMutex + rwm.Init() for pb.Next() { rwm.RLock() rwm.RLock() @@ -154,6 +157,7 @@ func BenchmarkRWMutexUncontended(b *testing.B) { func benchmarkRWMutex(b *testing.B, localWork, writeRatio int) { var rwm RWMutex + rwm.Init() b.RunParallel(func(pb *testing.PB) { foo := 0 for pb.Next() { From 8e3930f2588a3f6d8fcaac7ef8add9c2d5dedc0e Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Mon, 18 Dec 2023 17:03:19 +0000 Subject: [PATCH 260/313] runtime: skip TestRuntimeLockMetricsAndProfile for flakiness This test was added to check new mutex profile functionality. Specifically, it checks to make sure that the functionality behind GODEBUG=runtimecontentionstacks works. The runtime currently tracks contention from runtime-internal mutexes in mutex profiles, but it does not record stack traces for them, attributing the time to a dummy symbol. This GODEBUG enables collecting stacks. Just disable the test. Even if this functionality breaks, it won't affect Go users and it'll help keep the builders green. It's fine to leave the test because this will be revisited in the next dev cycle. For #64253. Change-Id: I7938fe0f036fc4e4a0764f030e691e312ec2c9b5 Reviewed-on: https://go-review.googlesource.com/c/go/+/550775 LUCI-TryBot-Result: Go LUCI Reviewed-by: Eli Bendersky Reviewed-by: Cherry Mui Auto-Submit: Michael Knyszek --- src/runtime/metrics_test.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/runtime/metrics_test.go b/src/runtime/metrics_test.go index fc0321e4c5..d7f41334cd 100644 --- a/src/runtime/metrics_test.go +++ b/src/runtime/metrics_test.go @@ -9,6 +9,7 @@ import ( "fmt" "internal/goexperiment" "internal/profile" + "internal/testenv" "os" "reflect" "runtime" @@ -947,6 +948,8 @@ func TestSchedPauseMetrics(t *testing.T) { } func TestRuntimeLockMetricsAndProfile(t *testing.T) { + testenv.SkipFlaky(t, 64253) + old := runtime.SetMutexProfileFraction(0) // enabled during sub-tests defer runtime.SetMutexProfileFraction(old) if old != 0 { From a7097243e462802f3055da9f843013e450a75092 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Tue, 12 Dec 2023 16:26:45 -0500 Subject: [PATCH 261/313] internal/syscall/windows: fix the signature of SetFileInformationByHandle Also fix its call site in internal/poll to pass the length of the actual buffer instead of an unrelated variable, and update the definition of FILE_BASIC_INFO to match the documented field types and add padding that is empirically needed on the 386 architecture. Passing a pointer to a Go-allocated buffer as type uintptr violates the unsafe.Pointer conversion rules, which allow such a conversion only in the call expression itself for a call to syscall.Syscall or equivalent. That can allow the buffer to be corrupted arbitrarily if the Go runtime happens to garbage-collect it while the call to SetFileInformationByHandle is in progress. The Microsoft documentation for SetFileInformationByHandle specifies its third argument type as LPVOID, which corresponds to Go's unsafe.Pointer, not uintptr. Fixes #58933 (maybe). Change-Id: If577b57adea9922f5fcca55e46030c703d8f035c Cq-Include-Trybots: luci.golang.try:gotip-windows-amd64-longtest Reviewed-on: https://go-review.googlesource.com/c/go/+/549256 LUCI-TryBot-Result: Go LUCI Reviewed-by: Than McIntosh Auto-Submit: Bryan Mills Reviewed-by: Quim Muntal Reviewed-by: Alex Brainman --- src/internal/poll/fd_windows.go | 3 +-- .../syscall/windows/syscall_windows.go | 21 ++++++++++++++----- .../syscall/windows/zsyscall_windows.go | 2 +- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/internal/poll/fd_windows.go b/src/internal/poll/fd_windows.go index 9df39edced..2095a6aa29 100644 --- a/src/internal/poll/fd_windows.go +++ b/src/internal/poll/fd_windows.go @@ -1037,8 +1037,7 @@ func (fd *FD) Fchmod(mode uint32) error { var du windows.FILE_BASIC_INFO du.FileAttributes = attrs - l := uint32(unsafe.Sizeof(d)) - return windows.SetFileInformationByHandle(fd.Sysfd, windows.FileBasicInfo, uintptr(unsafe.Pointer(&du)), l) + return windows.SetFileInformationByHandle(fd.Sysfd, windows.FileBasicInfo, unsafe.Pointer(&du), uint32(unsafe.Sizeof(du))) } // Fchdir wraps syscall.Fchdir. diff --git a/src/internal/syscall/windows/syscall_windows.go b/src/internal/syscall/windows/syscall_windows.go index 5854ca60b5..d10e30cb68 100644 --- a/src/internal/syscall/windows/syscall_windows.go +++ b/src/internal/syscall/windows/syscall_windows.go @@ -129,11 +129,22 @@ type SecurityAttributes struct { } type FILE_BASIC_INFO struct { - CreationTime syscall.Filetime - LastAccessTime syscall.Filetime - LastWriteTime syscall.Filetime - ChangedTime syscall.Filetime + CreationTime int64 + LastAccessTime int64 + LastWriteTime int64 + ChangedTime int64 FileAttributes uint32 + + // Pad out to 8-byte alignment. + // + // Without this padding, TestChmod fails due to an argument validation error + // in SetFileInformationByHandle on windows/386. + // + // https://learn.microsoft.com/en-us/cpp/build/reference/zp-struct-member-alignment?view=msvc-170 + // says that “The C/C++ headers in the Windows SDK assume the platform's + // default alignment is used.” What we see here is padding rather than + // alignment, but maybe it is related. + _ uint32 } const ( @@ -150,7 +161,7 @@ const ( //sys GetComputerNameEx(nameformat uint32, buf *uint16, n *uint32) (err error) = GetComputerNameExW //sys MoveFileEx(from *uint16, to *uint16, flags uint32) (err error) = MoveFileExW //sys GetModuleFileName(module syscall.Handle, fn *uint16, len uint32) (n uint32, err error) = kernel32.GetModuleFileNameW -//sys SetFileInformationByHandle(handle syscall.Handle, fileInformationClass uint32, buf uintptr, bufsize uint32) (err error) = kernel32.SetFileInformationByHandle +//sys SetFileInformationByHandle(handle syscall.Handle, fileInformationClass uint32, buf unsafe.Pointer, bufsize uint32) (err error) = kernel32.SetFileInformationByHandle //sys VirtualQuery(address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) = kernel32.VirtualQuery //sys GetTempPath2(buflen uint32, buf *uint16) (n uint32, err error) = GetTempPath2W diff --git a/src/internal/syscall/windows/zsyscall_windows.go b/src/internal/syscall/windows/zsyscall_windows.go index 5a587ad4f1..931f157cf1 100644 --- a/src/internal/syscall/windows/zsyscall_windows.go +++ b/src/internal/syscall/windows/zsyscall_windows.go @@ -342,7 +342,7 @@ func RtlVirtualUnwind(handlerType uint32, baseAddress uintptr, pc uintptr, entry return } -func SetFileInformationByHandle(handle syscall.Handle, fileInformationClass uint32, buf uintptr, bufsize uint32) (err error) { +func SetFileInformationByHandle(handle syscall.Handle, fileInformationClass uint32, buf unsafe.Pointer, bufsize uint32) (err error) { r1, _, e1 := syscall.Syscall6(procSetFileInformationByHandle.Addr(), 4, uintptr(handle), uintptr(fileInformationClass), uintptr(buf), uintptr(bufsize), 0, 0) if r1 == 0 { err = errnoErr(e1) From 2acbdd086d4660ae5e4adc429858df4758d675e3 Mon Sep 17 00:00:00 2001 From: Mauri de Souza Meneguzzo Date: Wed, 13 Dec 2023 19:58:23 +0000 Subject: [PATCH 262/313] cmd/cgo/internal/testsanitizers: fix msan test failing with clang >= 16 Clang 16 introduced a more aggressive behavior regarding uninitialized memory in the memory sanitizer. The new option -fsanitize-memory-param-retval is enabled by default and makes the test msan8 fail, since it uses an uninitialized variable on purpose. Disable this behavior if we are running with clang 16+. Fixes #64616 Change-Id: If366f978bef984ea73f6ae958f24c8fce99b59fe GitHub-Last-Rev: 60bd64a8fb24a552fce23fb2b43a75e92443e039 GitHub-Pull-Request: golang/go#64691 Reviewed-on: https://go-review.googlesource.com/c/go/+/549297 Auto-Submit: Bryan Mills Reviewed-by: Bryan Mills LUCI-TryBot-Result: Go LUCI Reviewed-by: Than McIntosh --- src/cmd/cgo/internal/testsanitizers/msan_test.go | 5 ++++- src/cmd/cgo/internal/testsanitizers/testdata/msan8.go | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/cmd/cgo/internal/testsanitizers/msan_test.go b/src/cmd/cgo/internal/testsanitizers/msan_test.go index 83d66f6660..c534b72442 100644 --- a/src/cmd/cgo/internal/testsanitizers/msan_test.go +++ b/src/cmd/cgo/internal/testsanitizers/msan_test.go @@ -71,7 +71,10 @@ func TestMSAN(t *testing.T) { defer dir.RemoveAll(t) outPath := dir.Join(name) - mustRun(t, config.goCmdWithExperiments("build", []string{"-o", outPath, srcPath(tc.src)}, tc.experiments)) + buildcmd := config.goCmdWithExperiments("build", []string{"-o", outPath, srcPath(tc.src)}, tc.experiments) + // allow tests to define -f flags in CGO_CFLAGS + replaceEnv(buildcmd, "CGO_CFLAGS_ALLOW", "-f.*") + mustRun(t, buildcmd) cmd := hangProneCmd(outPath) if tc.wantErr { diff --git a/src/cmd/cgo/internal/testsanitizers/testdata/msan8.go b/src/cmd/cgo/internal/testsanitizers/testdata/msan8.go index 1cb5c5677f..e79d343cc7 100644 --- a/src/cmd/cgo/internal/testsanitizers/testdata/msan8.go +++ b/src/cmd/cgo/internal/testsanitizers/testdata/msan8.go @@ -5,6 +5,13 @@ package main /* +// For clang >= 16, uninitialized memory is more aggressively reported. +// Restore the old behavior for this particular test as it relies on +// uninitialized variables. See #64616 +#if __clang_major__ >= 16 +#cgo CFLAGS: -fno-sanitize-memory-param-retval +#endif + #include #include #include From 08bec0db3970319ef868b3c11d6cc077cab408b1 Mon Sep 17 00:00:00 2001 From: Irakli Safareli Date: Mon, 18 Dec 2023 08:53:03 +0000 Subject: [PATCH 263/313] builtin: mention PanicNilError in comments of recover As of CL 461956 `recover` will not return `nil` if `panic` is called with `nil`. I have updated comments of `recover` to account for this change. Change-Id: Ibd0b27fe9b89fb29349b62ad34e762239a1d165b GitHub-Last-Rev: c773abb75c8cd8e08c3470f064a3205573156fea GitHub-Pull-Request: golang/go#64393 Reviewed-on: https://go-review.googlesource.com/c/go/+/544975 Reviewed-by: Mauri de Souza Meneguzzo Reviewed-by: Than McIntosh Reviewed-by: Keith Randall LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall --- src/builtin/builtin.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/builtin/builtin.go b/src/builtin/builtin.go index da0ace1498..668c799ca7 100644 --- a/src/builtin/builtin.go +++ b/src/builtin/builtin.go @@ -284,9 +284,10 @@ func panic(v any) // by restoring normal execution and retrieves the error value passed to the // call of panic. If recover is called outside the deferred function it will // not stop a panicking sequence. In this case, or when the goroutine is not -// panicking, or if the argument supplied to panic was nil, recover returns -// nil. Thus the return value from recover reports whether the goroutine is -// panicking. +// panicking, recover returns nil. +// +// Prior to Go 1.21, recover would also return nil if panic is called with +// a nil argument. See [panic] for details. func recover() any // The print built-in function formats its arguments in an From 450f5d90c2c85cb2b031bcf4a65c3b1467231977 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Mon, 18 Dec 2023 13:34:36 -0500 Subject: [PATCH 264/313] doc: add math/rand/v2 release notes Change-Id: If1922413ff948f9b8d8cebec6756b6870f38c162 Reviewed-on: https://go-review.googlesource.com/c/go/+/550777 Reviewed-by: David Chase LUCI-TryBot-Result: Go LUCI --- doc/go1.22.html | 99 ++++++++++++++++++++++++++++++++++++------------- 1 file changed, 74 insertions(+), 25 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 792ea655ac..3d63e99eeb 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -274,40 +274,89 @@ defer func() {

New math/rand/v2 package

-

- TODO: https://go.dev/cl/502495: math/rand/v2: start of new API; modified api/next/61716.txt + + + + + + + + + + +

+ Go 1.22 includes the first “v2” package in the standard library, + math/rand/v2. + The changes compared to math/rand are + detailed in proposal #61716. The most important changes are:

-

- TODO: https://go.dev/cl/502497: math/rand/v2: remove Read; modified api/next/61716.txt -

+
    +
  • The Read method, deprecated in math/rand, +was not carried forward for math/rand/v2. +(It remains available in math/rand.) +The vast majority of calls to Read should use +crypto/rand’s Read instead. +Otherwise a custom Read can be constructed using the Uint64 method. -

    - TODO: https://go.dev/cl/502498: math/rand/v2: remove Rand.Seed; modified api/next/61716.txt -

    +
  • The global generator accessed by top-level functions is unconditionally randomly seeded. +Because the API guarantees no fixed sequence of results, +optimizations like per-thread random generator states are now possible. -

    - TODO: https://go.dev/cl/502499: math/rand/v2: change Source to use uint64; modified api/next/61716.txt -

    +
  • The Source +interface now has a single Uint64 method; +there is no Source64 interface. -

    - TODO: https://go.dev/cl/502500: math/rand/v2: add, optimize N, UintN, Uint32N, Uint64N; modified api/next/61716.txt -

    +
  • Many methods now use faster algorithms that were not possible to adopt in math/rand +because they changed the output streams. -

    - TODO: https://go.dev/cl/502505: math/rand/v2: add PCG-DXSM; modified api/next/61716.txt -

    +
  • The +Intn, +Int31, +Int31n, +Int63, +and +Int64n +top-level functions and methods from math/rand +are spelled more idiomatically in math/rand/v2: +IntN, +Int32, +Int32N, +Int64, +and +Int64N. +There are also new top-level functions and methods +Uint32, +Uint32N, +Uint64, +Uint64N, +Uint, +and +UintN. -

    - TODO: https://go.dev/cl/502506: math/rand/v2: delete Mitchell/Reeds source; modified api/next/61716.txt -

    +
  • The +new generic function N +is like +Int64N or +Uint64N +but works for any integer type. +For example a random duration from 0 up to 5 minutes is +rand.N(5*time.Minute). -

    - TODO: https://go.dev/cl/516857: math/rand/v2: rename various functions; modified api/next/61716.txt -

    +
  • The Mitchell & Reeds LFSR generator provided by +math/rand’s Source +has been replaced by two more modern pseudo-random generator sources: +ChaCha8 +PCG. +ChaCha8 is a new, cryptographically strong random number generator +roughly similar to PCG in efficiency. +ChaCha8 is the algorithm used for the top-level functions in math/rand/v2. +As of Go 1.22, math/rand's top-level functions (when not explicitly seeded) +and the Go runtime also use ChaCha8 for randomness. +
-

- TODO: https://go.dev/cl/516859: math/rand/v2: add ChaCha8; modified api/next/61716.txt +

+We plan to include an API migration tool in a future release, likely Go 1.23.

Minor changes to the library

From 761e10be8805bf0b3afd015cf9f09856a6066ad2 Mon Sep 17 00:00:00 2001 From: qmuntal Date: Sun, 17 Dec 2023 17:51:25 +0100 Subject: [PATCH 265/313] cmd/link/internal/loadpe: update comment about @feat.00 symbol handling The @feat.00 comment is outdated, as Go does support SEH on windows/amd64. While here, simplify it and add a link to the relevant documentation. Change-Id: I6e3c786ca4f4809baf46015edf569d06b12f1239 Reviewed-on: https://go-review.googlesource.com/c/go/+/550635 Reviewed-by: Than McIntosh TryBot-Result: Gopher Robot Reviewed-by: Dmitri Shuralyov Run-TryBot: Quim Muntal LUCI-TryBot-Result: Go LUCI --- src/cmd/link/internal/loadpe/ldpe.go | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/cmd/link/internal/loadpe/ldpe.go b/src/cmd/link/internal/loadpe/ldpe.go index e4134607c4..1ba6debb4e 100644 --- a/src/cmd/link/internal/loadpe/ldpe.go +++ b/src/cmd/link/internal/loadpe/ldpe.go @@ -493,17 +493,10 @@ func Load(l *loader.Loader, arch *sys.Arch, localSymVersion int, input *bio.Read continue } if pesym.SectionNumber == IMAGE_SYM_ABSOLUTE && bytes.Equal(pesym.Name[:], []byte("@feat.00")) { - // Microsoft's linker looks at whether all input objects have an empty - // section called @feat.00. If all of them do, then it enables SEH; - // otherwise it doesn't enable that feature. So, since around the Windows - // XP SP2 era, most tools that make PE objects just tack on that section, - // so that it won't gimp Microsoft's linker logic. Go doesn't support SEH, - // so in theory, none of this really matters to us. But actually, if the - // linker tries to ingest an object with @feat.00 -- which are produced by - // LLVM's resource compiler, for example -- it chokes because of the - // IMAGE_SYM_ABSOLUTE section that it doesn't know how to deal with. Since - // @feat.00 is just a marking anyway, skip IMAGE_SYM_ABSOLUTE sections that - // are called @feat.00. + // The PE documentation says that, on x86 platforms, the absolute symbol named @feat.00 + // is used to indicate that the COFF object supports SEH. + // Go doesn't support SEH on windows/386, so we can ignore this symbol. + // See https://learn.microsoft.com/en-us/windows/win32/debug/pe-format#the-sxdata-section continue } var sect *pe.Section From 7058f09a8b2570d4a7bfdd64017300206c22ebfe Mon Sep 17 00:00:00 2001 From: Tim King Date: Mon, 18 Dec 2023 12:01:43 -0800 Subject: [PATCH 266/313] cmd: go get golang.org/x/tools@83bceaf2 and revendor go get golang.org/x/tools@83bceaf2 # CL 550395 go mod tidy go mod vendor Fixes #64786 Change-Id: Ia9879975eb3e8e4130ded7b2d8ba1277b5811eec Reviewed-on: https://go-review.googlesource.com/c/go/+/550895 TryBot-Result: Gopher Robot Run-TryBot: Tim King Reviewed-by: Alan Donovan LUCI-TryBot-Result: Go LUCI --- src/cmd/go.mod | 2 +- src/cmd/go.sum | 4 +- .../go/analysis/passes/composite/composite.go | 4 +- .../go/analysis/passes/copylock/copylock.go | 2 +- .../passes/ifaceassert/parameterized.go | 4 +- .../passes/internal/analysisutil/util.go | 4 + .../go/analysis/passes/nilfunc/nilfunc.go | 2 +- .../tools/go/analysis/passes/printf/types.go | 2 +- .../x/tools/go/analysis/passes/shift/shift.go | 2 +- .../analysis/passes/stringintconv/string.go | 2 +- .../analysis/passes/testinggoroutine/util.go | 2 +- .../x/tools/go/analysis/passes/tests/tests.go | 5 +- .../go/analysis/passes/unmarshal/unmarshal.go | 3 +- .../go/analysis/unitchecker/unitchecker.go | 3 +- .../x/tools/go/ast/astutil/enclosing.go | 8 +- .../x/tools/go/ast/astutil/rewrite.go | 8 +- .../x/tools/go/ast/inspector/typeof.go | 4 +- .../x/tools/go/types/objectpath/objectpath.go | 14 +- .../x/tools/go/types/typeutil/callee.go | 2 +- .../x/tools/go/types/typeutil/map.go | 20 +- .../internal/analysisinternal/analysis.go | 386 ++++++++++++++++++ .../analysisinternal}/extractdoc.go | 2 +- .../x/tools/internal/facts/imports.go | 14 +- .../x/tools/internal/typeparams/common.go | 24 +- .../x/tools/internal/typeparams/coretype.go | 8 +- .../internal/typeparams/enabled_go117.go | 12 - .../internal/typeparams/enabled_go118.go | 15 - .../x/tools/internal/typeparams/normalize.go | 20 +- .../internal/typeparams/typeparams_go117.go | 197 --------- .../internal/typeparams/typeparams_go118.go | 151 ------- .../{versions_go121.go => versions.go} | 9 +- .../tools/internal/versions/versions_go122.go | 38 -- src/cmd/vendor/modules.txt | 3 +- 33 files changed, 473 insertions(+), 503 deletions(-) create mode 100644 src/cmd/vendor/golang.org/x/tools/internal/analysisinternal/analysis.go rename src/cmd/vendor/golang.org/x/tools/{go/analysis/passes/internal/analysisutil => internal/analysisinternal}/extractdoc.go (99%) delete mode 100644 src/cmd/vendor/golang.org/x/tools/internal/typeparams/enabled_go117.go delete mode 100644 src/cmd/vendor/golang.org/x/tools/internal/typeparams/enabled_go118.go delete mode 100644 src/cmd/vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go delete mode 100644 src/cmd/vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go rename src/cmd/vendor/golang.org/x/tools/internal/versions/{versions_go121.go => versions.go} (80%) delete mode 100644 src/cmd/vendor/golang.org/x/tools/internal/versions/versions_go122.go diff --git a/src/cmd/go.mod b/src/cmd/go.mod index 68ded94ba8..7a426887b4 100644 --- a/src/cmd/go.mod +++ b/src/cmd/go.mod @@ -9,7 +9,7 @@ require ( golang.org/x/sync v0.5.0 golang.org/x/sys v0.15.0 golang.org/x/term v0.15.0 - golang.org/x/tools v0.16.1-0.20231129202111-1b1e4dafd51a + golang.org/x/tools v0.16.2-0.20231218185909-83bceaf2424d ) require github.com/ianlancetaylor/demangle v0.0.0-20230524184225-eabc099b10ab // indirect diff --git a/src/cmd/go.sum b/src/cmd/go.sum index 680616da07..8ea3d75bd1 100644 --- a/src/cmd/go.sum +++ b/src/cmd/go.sum @@ -12,5 +12,5 @@ golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= -golang.org/x/tools v0.16.1-0.20231129202111-1b1e4dafd51a h1:0+Cdrtl1VNF5TeDTr0mLLPN4dMJFHnstbqMo/o1aReI= -golang.org/x/tools v0.16.1-0.20231129202111-1b1e4dafd51a/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= +golang.org/x/tools v0.16.2-0.20231218185909-83bceaf2424d h1:9YOyUBubvYqtjjtZBnI62JT9/QB9jfPwOQ7xLeyuOIU= +golang.org/x/tools v0.16.2-0.20231218185909-83bceaf2424d/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/composite/composite.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/composite/composite.go index c7a49776fe..847063bb32 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/composite/composite.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/composite/composite.go @@ -72,7 +72,7 @@ func run(pass *analysis.Pass) (interface{}, error) { } var structuralTypes []types.Type switch typ := typ.(type) { - case *typeparams.TypeParam: + case *types.TypeParam: terms, err := typeparams.StructuralTerms(typ) if err != nil { return // invalid type @@ -163,7 +163,7 @@ func isLocalType(pass *analysis.Pass, typ types.Type) bool { case *types.Named: // names in package foo are local to foo_test too return strings.TrimSuffix(x.Obj().Pkg().Path(), "_test") == strings.TrimSuffix(pass.Pkg.Path(), "_test") - case *typeparams.TypeParam: + case *types.TypeParam: return strings.TrimSuffix(x.Obj().Pkg().Path(), "_test") == strings.TrimSuffix(pass.Pkg.Path(), "_test") } return false diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/copylock/copylock.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/copylock/copylock.go index 2eeb0a330a..6cbbc7e814 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/copylock/copylock.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/copylock/copylock.go @@ -255,7 +255,7 @@ func lockPath(tpkg *types.Package, typ types.Type, seen map[types.Type]bool) typ } seen[typ] = true - if tpar, ok := typ.(*typeparams.TypeParam); ok { + if tpar, ok := typ.(*types.TypeParam); ok { terms, err := typeparams.StructuralTerms(tpar) if err != nil { return nil // invalid type diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/ifaceassert/parameterized.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/ifaceassert/parameterized.go index b84577fcf8..12507f9967 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/ifaceassert/parameterized.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/ifaceassert/parameterized.go @@ -95,14 +95,14 @@ func (w *tpWalker) isParameterized(typ types.Type) (res bool) { return w.isParameterized(t.Elem()) case *types.Named: - list := typeparams.NamedTypeArgs(t) + list := t.TypeArgs() for i, n := 0, list.Len(); i < n; i++ { if w.isParameterized(list.At(i)) { return true } } - case *typeparams.TypeParam: + case *types.TypeParam: return true default: diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/internal/analysisutil/util.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/internal/analysisutil/util.go index c0060753f9..3f01b3b55d 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/internal/analysisutil/util.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/internal/analysisutil/util.go @@ -13,6 +13,8 @@ import ( "go/token" "go/types" "os" + + "golang.org/x/tools/internal/analysisinternal" ) // Format returns a string representation of the expression. @@ -150,3 +152,5 @@ func IsFunctionNamed(f *types.Func, pkgPath string, names ...string) bool { } return false } + +var MustExtractDoc = analysisinternal.MustExtractDoc diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/nilfunc/nilfunc.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/nilfunc/nilfunc.go index 6df134399a..778f7f1f8f 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/nilfunc/nilfunc.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/nilfunc/nilfunc.go @@ -62,7 +62,7 @@ func run(pass *analysis.Pass) (interface{}, error) { obj = pass.TypesInfo.Uses[v] case *ast.SelectorExpr: obj = pass.TypesInfo.Uses[v.Sel] - case *ast.IndexExpr, *typeparams.IndexListExpr: + case *ast.IndexExpr, *ast.IndexListExpr: // Check generic functions such as "f[T1,T2]". x, _, _, _ := typeparams.UnpackIndexExpr(v) if id, ok := x.(*ast.Ident); ok { diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/printf/types.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/printf/types.go index 7cbb0bdbf5..ab98e56998 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/printf/types.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/printf/types.go @@ -72,7 +72,7 @@ func (m *argMatcher) match(typ types.Type, topLevel bool) bool { return true } - if typ, _ := typ.(*typeparams.TypeParam); typ != nil { + if typ, _ := typ.(*types.TypeParam); typ != nil { // Avoid infinite recursion through type parameters. if m.seen[typ] { return true diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/shift/shift.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/shift/shift.go index bafb9112e1..e272df709f 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/shift/shift.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/shift/shift.go @@ -99,7 +99,7 @@ func checkLongShift(pass *analysis.Pass, node ast.Node, x, y ast.Expr) { } var structuralTypes []types.Type switch t := t.(type) { - case *typeparams.TypeParam: + case *types.TypeParam: terms, err := typeparams.StructuralTerms(t) if err != nil { return // invalid type diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/stringintconv/string.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/stringintconv/string.go index bb04dae626..b2591ccff5 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/stringintconv/string.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/stringintconv/string.go @@ -195,7 +195,7 @@ func run(pass *analysis.Pass) (interface{}, error) { func structuralTypes(t types.Type) ([]types.Type, error) { var structuralTypes []types.Type switch t := t.(type) { - case *typeparams.TypeParam: + case *types.TypeParam: terms, err := typeparams.StructuralTerms(t) if err != nil { return nil, err diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/util.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/util.go index 805ccf49e4..d156851db1 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/util.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/testinggoroutine/util.go @@ -57,7 +57,7 @@ func isMethodNamed(f *types.Func, pkgPath string, names ...string) bool { func funcIdent(fun ast.Expr) *ast.Ident { switch fun := astutil.Unparen(fun).(type) { - case *ast.IndexExpr, *typeparams.IndexListExpr: + case *ast.IndexExpr, *ast.IndexListExpr: x, _, _, _ := typeparams.UnpackIndexExpr(fun) // necessary? id, _ := x.(*ast.Ident) return id diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/tests/tests.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/tests/tests.go index d0b0ebb101..6db12f3cb9 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/tests/tests.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/tests/tests.go @@ -17,7 +17,6 @@ import ( "golang.org/x/tools/go/analysis" "golang.org/x/tools/go/analysis/passes/internal/analysisutil" - "golang.org/x/tools/internal/typeparams" ) //go:embed doc.go @@ -391,7 +390,7 @@ func checkExampleName(pass *analysis.Pass, fn *ast.FuncDecl) { if results := fn.Type.Results; results != nil && len(results.List) != 0 { pass.Reportf(fn.Pos(), "%s should return nothing", fnName) } - if tparams := typeparams.ForFuncType(fn.Type); tparams != nil && len(tparams.List) > 0 { + if tparams := fn.Type.TypeParams; tparams != nil && len(tparams.List) > 0 { pass.Reportf(fn.Pos(), "%s should not have type params", fnName) } @@ -460,7 +459,7 @@ func checkTest(pass *analysis.Pass, fn *ast.FuncDecl, prefix string) { return } - if tparams := typeparams.ForFuncType(fn.Type); tparams != nil && len(tparams.List) > 0 { + if tparams := fn.Type.TypeParams; tparams != nil && len(tparams.List) > 0 { // Note: cmd/go/internal/load also errors about TestXXX and BenchmarkXXX functions with type parameters. // We have currently decided to also warn before compilation/package loading. This can help users in IDEs. // TODO(adonovan): use ReportRangef(tparams). diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/unmarshal/unmarshal.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/unmarshal/unmarshal.go index 7043baa899..f4e73528b4 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/unmarshal/unmarshal.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/unmarshal/unmarshal.go @@ -14,7 +14,6 @@ import ( "golang.org/x/tools/go/analysis/passes/internal/analysisutil" "golang.org/x/tools/go/ast/inspector" "golang.org/x/tools/go/types/typeutil" - "golang.org/x/tools/internal/typeparams" ) //go:embed doc.go @@ -92,7 +91,7 @@ func run(pass *analysis.Pass) (interface{}, error) { t := pass.TypesInfo.Types[call.Args[argidx]].Type switch t.Underlying().(type) { - case *types.Pointer, *types.Interface, *typeparams.TypeParam: + case *types.Pointer, *types.Interface, *types.TypeParam: return } diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/unitchecker/unitchecker.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/unitchecker/unitchecker.go index 36eed808d8..1fa0d1f68f 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/unitchecker/unitchecker.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/unitchecker/unitchecker.go @@ -50,7 +50,6 @@ import ( "golang.org/x/tools/go/analysis" "golang.org/x/tools/go/analysis/internal/analysisflags" "golang.org/x/tools/internal/facts" - "golang.org/x/tools/internal/typeparams" "golang.org/x/tools/internal/versions" ) @@ -259,10 +258,10 @@ func run(fset *token.FileSet, cfg *Config, analyzers []*analysis.Analyzer) ([]re Defs: make(map[*ast.Ident]types.Object), Uses: make(map[*ast.Ident]types.Object), Implicits: make(map[ast.Node]types.Object), + Instances: make(map[*ast.Ident]types.Instance), Scopes: make(map[ast.Node]*types.Scope), Selections: make(map[*ast.SelectorExpr]*types.Selection), } - typeparams.InitInstanceInfo(info) versions.InitFileVersions(info) pkg, err := tc.Check(cfg.ImportPath, fset, files, info) diff --git a/src/cmd/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go b/src/cmd/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go index 9fa5aa192c..2c4c4e2328 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go +++ b/src/cmd/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go @@ -11,8 +11,6 @@ import ( "go/ast" "go/token" "sort" - - "golang.org/x/tools/internal/typeparams" ) // PathEnclosingInterval returns the node that encloses the source @@ -322,7 +320,7 @@ func childrenOf(n ast.Node) []ast.Node { children = append(children, n.Recv) } children = append(children, n.Name) - if tparams := typeparams.ForFuncType(n.Type); tparams != nil { + if tparams := n.Type.TypeParams; tparams != nil { children = append(children, tparams) } if n.Type.Params != nil { @@ -377,7 +375,7 @@ func childrenOf(n ast.Node) []ast.Node { tok(n.Lbrack, len("[")), tok(n.Rbrack, len("]"))) - case *typeparams.IndexListExpr: + case *ast.IndexListExpr: children = append(children, tok(n.Lbrack, len("[")), tok(n.Rbrack, len("]"))) @@ -588,7 +586,7 @@ func NodeDescription(n ast.Node) string { return "decrement statement" case *ast.IndexExpr: return "index expression" - case *typeparams.IndexListExpr: + case *ast.IndexListExpr: return "index list expression" case *ast.InterfaceType: return "interface type" diff --git a/src/cmd/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go b/src/cmd/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go index f430b21b9b..58934f7663 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go +++ b/src/cmd/vendor/golang.org/x/tools/go/ast/astutil/rewrite.go @@ -9,8 +9,6 @@ import ( "go/ast" "reflect" "sort" - - "golang.org/x/tools/internal/typeparams" ) // An ApplyFunc is invoked by Apply for each node n, even if n is nil, @@ -252,7 +250,7 @@ func (a *application) apply(parent ast.Node, name string, iter *iterator, n ast. a.apply(n, "X", nil, n.X) a.apply(n, "Index", nil, n.Index) - case *typeparams.IndexListExpr: + case *ast.IndexListExpr: a.apply(n, "X", nil, n.X) a.applyList(n, "Indices") @@ -293,7 +291,7 @@ func (a *application) apply(parent ast.Node, name string, iter *iterator, n ast. a.apply(n, "Fields", nil, n.Fields) case *ast.FuncType: - if tparams := typeparams.ForFuncType(n); tparams != nil { + if tparams := n.TypeParams; tparams != nil { a.apply(n, "TypeParams", nil, tparams) } a.apply(n, "Params", nil, n.Params) @@ -408,7 +406,7 @@ func (a *application) apply(parent ast.Node, name string, iter *iterator, n ast. case *ast.TypeSpec: a.apply(n, "Doc", nil, n.Doc) a.apply(n, "Name", nil, n.Name) - if tparams := typeparams.ForTypeSpec(n); tparams != nil { + if tparams := n.TypeParams; tparams != nil { a.apply(n, "TypeParams", nil, tparams) } a.apply(n, "Type", nil, n.Type) diff --git a/src/cmd/vendor/golang.org/x/tools/go/ast/inspector/typeof.go b/src/cmd/vendor/golang.org/x/tools/go/ast/inspector/typeof.go index 703c813954..2a872f89d4 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/ast/inspector/typeof.go +++ b/src/cmd/vendor/golang.org/x/tools/go/ast/inspector/typeof.go @@ -12,8 +12,6 @@ package inspector import ( "go/ast" "math" - - "golang.org/x/tools/internal/typeparams" ) const ( @@ -171,7 +169,7 @@ func typeOf(n ast.Node) uint64 { return 1 << nIncDecStmt case *ast.IndexExpr: return 1 << nIndexExpr - case *typeparams.IndexListExpr: + case *ast.IndexListExpr: return 1 << nIndexListExpr case *ast.InterfaceType: return 1 << nInterfaceType diff --git a/src/cmd/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go b/src/cmd/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go index e742ecc464..11d5c8c3ad 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go +++ b/src/cmd/vendor/golang.org/x/tools/go/types/objectpath/objectpath.go @@ -223,7 +223,7 @@ func (enc *Encoder) For(obj types.Object) (Path, error) { // Reject obviously non-viable cases. switch obj := obj.(type) { case *types.TypeName: - if _, ok := obj.Type().(*typeparams.TypeParam); !ok { + if _, ok := obj.Type().(*types.TypeParam); !ok { // With the exception of type parameters, only package-level type names // have a path. return "", fmt.Errorf("no path for %v", obj) @@ -283,7 +283,7 @@ func (enc *Encoder) For(obj types.Object) (Path, error) { } } else { if named, _ := T.(*types.Named); named != nil { - if r := findTypeParam(obj, typeparams.ForNamed(named), path, nil); r != nil { + if r := findTypeParam(obj, named.TypeParams(), path, nil); r != nil { // generic named type return Path(r), nil } @@ -462,7 +462,7 @@ func find(obj types.Object, T types.Type, path []byte, seen map[*types.TypeName] } return find(obj, T.Elem(), append(path, opElem), seen) case *types.Signature: - if r := findTypeParam(obj, typeparams.ForSignature(T), path, seen); r != nil { + if r := findTypeParam(obj, T.TypeParams(), path, seen); r != nil { return r } if r := find(obj, T.Params(), append(path, opParams), seen); r != nil { @@ -505,7 +505,7 @@ func find(obj types.Object, T types.Type, path []byte, seen map[*types.TypeName] } } return nil - case *typeparams.TypeParam: + case *types.TypeParam: name := T.Obj() if name == obj { return append(path, opObj) @@ -525,7 +525,7 @@ func find(obj types.Object, T types.Type, path []byte, seen map[*types.TypeName] panic(T) } -func findTypeParam(obj types.Object, list *typeparams.TypeParamList, path []byte, seen map[*types.TypeName]bool) []byte { +func findTypeParam(obj types.Object, list *types.TypeParamList, path []byte, seen map[*types.TypeName]bool) []byte { for i := 0; i < list.Len(); i++ { tparam := list.At(i) path2 := appendOpArg(path, opTypeParam, i) @@ -562,7 +562,7 @@ func Object(pkg *types.Package, p Path) (types.Object, error) { } // abstraction of *types.{Named,Signature} type hasTypeParams interface { - TypeParams() *typeparams.TypeParamList + TypeParams() *types.TypeParamList } // abstraction of *types.{Named,TypeParam} type hasObj interface { @@ -664,7 +664,7 @@ func Object(pkg *types.Package, p Path) (types.Object, error) { t = tparams.At(index) case opConstraint: - tparam, ok := t.(*typeparams.TypeParam) + tparam, ok := t.(*types.TypeParam) if !ok { return nil, fmt.Errorf("cannot apply %q to %s (got %T, want type parameter)", code, t, t) } diff --git a/src/cmd/vendor/golang.org/x/tools/go/types/typeutil/callee.go b/src/cmd/vendor/golang.org/x/tools/go/types/typeutil/callee.go index 90b3ab0e21..90dc541adf 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/types/typeutil/callee.go +++ b/src/cmd/vendor/golang.org/x/tools/go/types/typeutil/callee.go @@ -22,7 +22,7 @@ func Callee(info *types.Info, call *ast.CallExpr) types.Object { // Look through type instantiation if necessary. isInstance := false switch fun.(type) { - case *ast.IndexExpr, *typeparams.IndexListExpr: + case *ast.IndexExpr, *ast.IndexListExpr: // When extracting the callee from an *IndexExpr, we need to check that // it is a *types.Func and not a *types.Var. // Example: Don't match a slice m within the expression `m[0]()`. diff --git a/src/cmd/vendor/golang.org/x/tools/go/types/typeutil/map.go b/src/cmd/vendor/golang.org/x/tools/go/types/typeutil/map.go index 7bd2fdb38b..544246dac1 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/types/typeutil/map.go +++ b/src/cmd/vendor/golang.org/x/tools/go/types/typeutil/map.go @@ -219,7 +219,7 @@ type Hasher struct { // generic types or functions, and instantiated signatures do not have type // parameter lists, we should never encounter a second non-empty type // parameter list when hashing a generic signature. - sigTParams *typeparams.TypeParamList + sigTParams *types.TypeParamList } // MakeHasher returns a new Hasher instance. @@ -297,7 +297,7 @@ func (h Hasher) hashFor(t types.Type) uint32 { // We should never encounter a generic signature while hashing another // generic signature, but defensively set sigTParams only if h.mask is // unset. - tparams := typeparams.ForSignature(t) + tparams := t.TypeParams() if h.sigTParams == nil && tparams.Len() != 0 { h = Hasher{ // There may be something more efficient than discarding the existing @@ -318,7 +318,7 @@ func (h Hasher) hashFor(t types.Type) uint32 { return hash + 3*h.hashTuple(t.Params()) + 5*h.hashTuple(t.Results()) - case *typeparams.Union: + case *types.Union: return h.hashUnion(t) case *types.Interface: @@ -354,14 +354,14 @@ func (h Hasher) hashFor(t types.Type) uint32 { case *types.Named: hash := h.hashPtr(t.Obj()) - targs := typeparams.NamedTypeArgs(t) + targs := t.TypeArgs() for i := 0; i < targs.Len(); i++ { targ := targs.At(i) hash += 2 * h.Hash(targ) } return hash - case *typeparams.TypeParam: + case *types.TypeParam: return h.hashTypeParam(t) case *types.Tuple: @@ -381,7 +381,7 @@ func (h Hasher) hashTuple(tuple *types.Tuple) uint32 { return hash } -func (h Hasher) hashUnion(t *typeparams.Union) uint32 { +func (h Hasher) hashUnion(t *types.Union) uint32 { // Hash type restrictions. terms, err := typeparams.UnionTermSet(t) // if err != nil t has invalid type restrictions. Fall back on a non-zero @@ -392,7 +392,7 @@ func (h Hasher) hashUnion(t *typeparams.Union) uint32 { return h.hashTermSet(terms) } -func (h Hasher) hashTermSet(terms []*typeparams.Term) uint32 { +func (h Hasher) hashTermSet(terms []*types.Term) uint32 { hash := 9157 + 2*uint32(len(terms)) for _, term := range terms { // term order is not significant. @@ -416,7 +416,7 @@ func (h Hasher) hashTermSet(terms []*typeparams.Term) uint32 { // are not identical. // // Otherwise the hash of t depends only on t's pointer identity. -func (h Hasher) hashTypeParam(t *typeparams.TypeParam) uint32 { +func (h Hasher) hashTypeParam(t *types.TypeParam) uint32 { if h.sigTParams != nil { i := t.Index() if i >= 0 && i < h.sigTParams.Len() && t == h.sigTParams.At(i) { @@ -489,7 +489,7 @@ func (h Hasher) shallowHash(t types.Type) uint32 { case *types.Pointer: return 4393139 - case *typeparams.Union: + case *types.Union: return 562448657 case *types.Interface: @@ -504,7 +504,7 @@ func (h Hasher) shallowHash(t types.Type) uint32 { case *types.Named: return h.hashPtr(t.Obj()) - case *typeparams.TypeParam: + case *types.TypeParam: return h.hashPtr(t.Obj()) } panic(fmt.Sprintf("shallowHash: %T: %v", t, t)) diff --git a/src/cmd/vendor/golang.org/x/tools/internal/analysisinternal/analysis.go b/src/cmd/vendor/golang.org/x/tools/internal/analysisinternal/analysis.go new file mode 100644 index 0000000000..2b29168047 --- /dev/null +++ b/src/cmd/vendor/golang.org/x/tools/internal/analysisinternal/analysis.go @@ -0,0 +1,386 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package analysisinternal provides gopls' internal analyses with a +// number of helper functions that operate on typed syntax trees. +package analysisinternal + +import ( + "bytes" + "fmt" + "go/ast" + "go/token" + "go/types" + "strconv" +) + +func TypeErrorEndPos(fset *token.FileSet, src []byte, start token.Pos) token.Pos { + // Get the end position for the type error. + offset, end := fset.PositionFor(start, false).Offset, start + if offset >= len(src) { + return end + } + if width := bytes.IndexAny(src[offset:], " \n,():;[]+-*"); width > 0 { + end = start + token.Pos(width) + } + return end +} + +func ZeroValue(f *ast.File, pkg *types.Package, typ types.Type) ast.Expr { + under := typ + if n, ok := typ.(*types.Named); ok { + under = n.Underlying() + } + switch u := under.(type) { + case *types.Basic: + switch { + case u.Info()&types.IsNumeric != 0: + return &ast.BasicLit{Kind: token.INT, Value: "0"} + case u.Info()&types.IsBoolean != 0: + return &ast.Ident{Name: "false"} + case u.Info()&types.IsString != 0: + return &ast.BasicLit{Kind: token.STRING, Value: `""`} + default: + panic(fmt.Sprintf("unknown basic type %v", u)) + } + case *types.Chan, *types.Interface, *types.Map, *types.Pointer, *types.Signature, *types.Slice, *types.Array: + return ast.NewIdent("nil") + case *types.Struct: + texpr := TypeExpr(f, pkg, typ) // typ because we want the name here. + if texpr == nil { + return nil + } + return &ast.CompositeLit{ + Type: texpr, + } + } + return nil +} + +// IsZeroValue checks whether the given expression is a 'zero value' (as determined by output of +// analysisinternal.ZeroValue) +func IsZeroValue(expr ast.Expr) bool { + switch e := expr.(type) { + case *ast.BasicLit: + return e.Value == "0" || e.Value == `""` + case *ast.Ident: + return e.Name == "nil" || e.Name == "false" + default: + return false + } +} + +// TypeExpr returns syntax for the specified type. References to +// named types from packages other than pkg are qualified by an appropriate +// package name, as defined by the import environment of file. +func TypeExpr(f *ast.File, pkg *types.Package, typ types.Type) ast.Expr { + switch t := typ.(type) { + case *types.Basic: + switch t.Kind() { + case types.UnsafePointer: + return &ast.SelectorExpr{X: ast.NewIdent("unsafe"), Sel: ast.NewIdent("Pointer")} + default: + return ast.NewIdent(t.Name()) + } + case *types.Pointer: + x := TypeExpr(f, pkg, t.Elem()) + if x == nil { + return nil + } + return &ast.UnaryExpr{ + Op: token.MUL, + X: x, + } + case *types.Array: + elt := TypeExpr(f, pkg, t.Elem()) + if elt == nil { + return nil + } + return &ast.ArrayType{ + Len: &ast.BasicLit{ + Kind: token.INT, + Value: fmt.Sprintf("%d", t.Len()), + }, + Elt: elt, + } + case *types.Slice: + elt := TypeExpr(f, pkg, t.Elem()) + if elt == nil { + return nil + } + return &ast.ArrayType{ + Elt: elt, + } + case *types.Map: + key := TypeExpr(f, pkg, t.Key()) + value := TypeExpr(f, pkg, t.Elem()) + if key == nil || value == nil { + return nil + } + return &ast.MapType{ + Key: key, + Value: value, + } + case *types.Chan: + dir := ast.ChanDir(t.Dir()) + if t.Dir() == types.SendRecv { + dir = ast.SEND | ast.RECV + } + value := TypeExpr(f, pkg, t.Elem()) + if value == nil { + return nil + } + return &ast.ChanType{ + Dir: dir, + Value: value, + } + case *types.Signature: + var params []*ast.Field + for i := 0; i < t.Params().Len(); i++ { + p := TypeExpr(f, pkg, t.Params().At(i).Type()) + if p == nil { + return nil + } + params = append(params, &ast.Field{ + Type: p, + Names: []*ast.Ident{ + { + Name: t.Params().At(i).Name(), + }, + }, + }) + } + var returns []*ast.Field + for i := 0; i < t.Results().Len(); i++ { + r := TypeExpr(f, pkg, t.Results().At(i).Type()) + if r == nil { + return nil + } + returns = append(returns, &ast.Field{ + Type: r, + }) + } + return &ast.FuncType{ + Params: &ast.FieldList{ + List: params, + }, + Results: &ast.FieldList{ + List: returns, + }, + } + case *types.Named: + if t.Obj().Pkg() == nil { + return ast.NewIdent(t.Obj().Name()) + } + if t.Obj().Pkg() == pkg { + return ast.NewIdent(t.Obj().Name()) + } + pkgName := t.Obj().Pkg().Name() + + // If the file already imports the package under another name, use that. + for _, cand := range f.Imports { + if path, _ := strconv.Unquote(cand.Path.Value); path == t.Obj().Pkg().Path() { + if cand.Name != nil && cand.Name.Name != "" { + pkgName = cand.Name.Name + } + } + } + if pkgName == "." { + return ast.NewIdent(t.Obj().Name()) + } + return &ast.SelectorExpr{ + X: ast.NewIdent(pkgName), + Sel: ast.NewIdent(t.Obj().Name()), + } + case *types.Struct: + return ast.NewIdent(t.String()) + case *types.Interface: + return ast.NewIdent(t.String()) + default: + return nil + } +} + +// StmtToInsertVarBefore returns the ast.Stmt before which we can safely insert a new variable. +// Some examples: +// +// Basic Example: +// z := 1 +// y := z + x +// If x is undeclared, then this function would return `y := z + x`, so that we +// can insert `x := ` on the line before `y := z + x`. +// +// If stmt example: +// if z == 1 { +// } else if z == y {} +// If y is undeclared, then this function would return `if z == 1 {`, because we cannot +// insert a statement between an if and an else if statement. As a result, we need to find +// the top of the if chain to insert `y := ` before. +func StmtToInsertVarBefore(path []ast.Node) ast.Stmt { + enclosingIndex := -1 + for i, p := range path { + if _, ok := p.(ast.Stmt); ok { + enclosingIndex = i + break + } + } + if enclosingIndex == -1 { + return nil + } + enclosingStmt := path[enclosingIndex] + switch enclosingStmt.(type) { + case *ast.IfStmt: + // The enclosingStmt is inside of the if declaration, + // We need to check if we are in an else-if stmt and + // get the base if statement. + return baseIfStmt(path, enclosingIndex) + case *ast.CaseClause: + // Get the enclosing switch stmt if the enclosingStmt is + // inside of the case statement. + for i := enclosingIndex + 1; i < len(path); i++ { + if node, ok := path[i].(*ast.SwitchStmt); ok { + return node + } else if node, ok := path[i].(*ast.TypeSwitchStmt); ok { + return node + } + } + } + if len(path) <= enclosingIndex+1 { + return enclosingStmt.(ast.Stmt) + } + // Check if the enclosing statement is inside another node. + switch expr := path[enclosingIndex+1].(type) { + case *ast.IfStmt: + // Get the base if statement. + return baseIfStmt(path, enclosingIndex+1) + case *ast.ForStmt: + if expr.Init == enclosingStmt || expr.Post == enclosingStmt { + return expr + } + } + return enclosingStmt.(ast.Stmt) +} + +// baseIfStmt walks up the if/else-if chain until we get to +// the top of the current if chain. +func baseIfStmt(path []ast.Node, index int) ast.Stmt { + stmt := path[index] + for i := index + 1; i < len(path); i++ { + if node, ok := path[i].(*ast.IfStmt); ok && node.Else == stmt { + stmt = node + continue + } + break + } + return stmt.(ast.Stmt) +} + +// WalkASTWithParent walks the AST rooted at n. The semantics are +// similar to ast.Inspect except it does not call f(nil). +func WalkASTWithParent(n ast.Node, f func(n ast.Node, parent ast.Node) bool) { + var ancestors []ast.Node + ast.Inspect(n, func(n ast.Node) (recurse bool) { + if n == nil { + ancestors = ancestors[:len(ancestors)-1] + return false + } + + var parent ast.Node + if len(ancestors) > 0 { + parent = ancestors[len(ancestors)-1] + } + ancestors = append(ancestors, n) + return f(n, parent) + }) +} + +// MatchingIdents finds the names of all identifiers in 'node' that match any of the given types. +// 'pos' represents the position at which the identifiers may be inserted. 'pos' must be within +// the scope of each of identifier we select. Otherwise, we will insert a variable at 'pos' that +// is unrecognized. +func MatchingIdents(typs []types.Type, node ast.Node, pos token.Pos, info *types.Info, pkg *types.Package) map[types.Type][]string { + + // Initialize matches to contain the variable types we are searching for. + matches := make(map[types.Type][]string) + for _, typ := range typs { + if typ == nil { + continue // TODO(adonovan): is this reachable? + } + matches[typ] = nil // create entry + } + + seen := map[types.Object]struct{}{} + ast.Inspect(node, func(n ast.Node) bool { + if n == nil { + return false + } + // Prevent circular definitions. If 'pos' is within an assignment statement, do not + // allow any identifiers in that assignment statement to be selected. Otherwise, + // we could do the following, where 'x' satisfies the type of 'f0': + // + // x := fakeStruct{f0: x} + // + if assign, ok := n.(*ast.AssignStmt); ok && pos > assign.Pos() && pos <= assign.End() { + return false + } + if n.End() > pos { + return n.Pos() <= pos + } + ident, ok := n.(*ast.Ident) + if !ok || ident.Name == "_" { + return true + } + obj := info.Defs[ident] + if obj == nil || obj.Type() == nil { + return true + } + if _, ok := obj.(*types.TypeName); ok { + return true + } + // Prevent duplicates in matches' values. + if _, ok = seen[obj]; ok { + return true + } + seen[obj] = struct{}{} + // Find the scope for the given position. Then, check whether the object + // exists within the scope. + innerScope := pkg.Scope().Innermost(pos) + if innerScope == nil { + return true + } + _, foundObj := innerScope.LookupParent(ident.Name, pos) + if foundObj != obj { + return true + } + // The object must match one of the types that we are searching for. + // TODO(adonovan): opt: use typeutil.Map? + if names, ok := matches[obj.Type()]; ok { + matches[obj.Type()] = append(names, ident.Name) + } else { + // If the object type does not exactly match + // any of the target types, greedily find the first + // target type that the object type can satisfy. + for typ := range matches { + if equivalentTypes(obj.Type(), typ) { + matches[typ] = append(matches[typ], ident.Name) + } + } + } + return true + }) + return matches +} + +func equivalentTypes(want, got types.Type) bool { + if types.Identical(want, got) { + return true + } + // Code segment to help check for untyped equality from (golang/go#32146). + if rhs, ok := want.(*types.Basic); ok && rhs.Info()&types.IsUntyped > 0 { + if lhs, ok := got.Underlying().(*types.Basic); ok { + return rhs.Info()&types.IsConstType == lhs.Info()&types.IsConstType + } + } + return types.AssignableTo(want, got) +} diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/internal/analysisutil/extractdoc.go b/src/cmd/vendor/golang.org/x/tools/internal/analysisinternal/extractdoc.go similarity index 99% rename from src/cmd/vendor/golang.org/x/tools/go/analysis/passes/internal/analysisutil/extractdoc.go rename to src/cmd/vendor/golang.org/x/tools/internal/analysisinternal/extractdoc.go index 0e175ca06f..39507723d3 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/internal/analysisutil/extractdoc.go +++ b/src/cmd/vendor/golang.org/x/tools/internal/analysisinternal/extractdoc.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -package analysisutil +package analysisinternal import ( "fmt" diff --git a/src/cmd/vendor/golang.org/x/tools/internal/facts/imports.go b/src/cmd/vendor/golang.org/x/tools/internal/facts/imports.go index f64695ea52..1fe63ca6b5 100644 --- a/src/cmd/vendor/golang.org/x/tools/internal/facts/imports.go +++ b/src/cmd/vendor/golang.org/x/tools/internal/facts/imports.go @@ -6,8 +6,6 @@ package facts import ( "go/types" - - "golang.org/x/tools/internal/typeparams" ) // importMap computes the import map for a package by traversing the @@ -55,7 +53,7 @@ func importMap(imports []*types.Package) map[string]*types.Package { // infinite expansions: // type N[T any] struct { F *N[N[T]] } // importMap() is called on such types when Analyzer.RunDespiteErrors is true. - T = typeparams.NamedTypeOrigin(T) + T = T.Origin() if !typs[T] { typs[T] = true addObj(T.Obj()) @@ -63,12 +61,12 @@ func importMap(imports []*types.Package) map[string]*types.Package { for i := 0; i < T.NumMethods(); i++ { addObj(T.Method(i)) } - if tparams := typeparams.ForNamed(T); tparams != nil { + if tparams := T.TypeParams(); tparams != nil { for i := 0; i < tparams.Len(); i++ { addType(tparams.At(i)) } } - if targs := typeparams.NamedTypeArgs(T); targs != nil { + if targs := T.TypeArgs(); targs != nil { for i := 0; i < targs.Len(); i++ { addType(targs.At(i)) } @@ -88,7 +86,7 @@ func importMap(imports []*types.Package) map[string]*types.Package { case *types.Signature: addType(T.Params()) addType(T.Results()) - if tparams := typeparams.ForSignature(T); tparams != nil { + if tparams := T.TypeParams(); tparams != nil { for i := 0; i < tparams.Len(); i++ { addType(tparams.At(i)) } @@ -108,11 +106,11 @@ func importMap(imports []*types.Package) map[string]*types.Package { for i := 0; i < T.NumEmbeddeds(); i++ { addType(T.EmbeddedType(i)) // walk Embedded for implicits } - case *typeparams.Union: + case *types.Union: for i := 0; i < T.Len(); i++ { addType(T.Term(i).Type()) } - case *typeparams.TypeParam: + case *types.TypeParam: if !typs[T] { typs[T] = true addObj(T.Obj()) diff --git a/src/cmd/vendor/golang.org/x/tools/internal/typeparams/common.go b/src/cmd/vendor/golang.org/x/tools/internal/typeparams/common.go index d0d0649fe2..cdab988531 100644 --- a/src/cmd/vendor/golang.org/x/tools/internal/typeparams/common.go +++ b/src/cmd/vendor/golang.org/x/tools/internal/typeparams/common.go @@ -42,7 +42,7 @@ func UnpackIndexExpr(n ast.Node) (x ast.Expr, lbrack token.Pos, indices []ast.Ex switch e := n.(type) { case *ast.IndexExpr: return e.X, e.Lbrack, []ast.Expr{e.Index}, e.Rbrack - case *IndexListExpr: + case *ast.IndexListExpr: return e.X, e.Lbrack, e.Indices, e.Rbrack } return nil, token.NoPos, nil, token.NoPos @@ -63,7 +63,7 @@ func PackIndexExpr(x ast.Expr, lbrack token.Pos, indices []ast.Expr, rbrack toke Rbrack: rbrack, } default: - return &IndexListExpr{ + return &ast.IndexListExpr{ X: x, Lbrack: lbrack, Indices: indices, @@ -74,7 +74,7 @@ func PackIndexExpr(x ast.Expr, lbrack token.Pos, indices []ast.Expr, rbrack toke // IsTypeParam reports whether t is a type parameter. func IsTypeParam(t types.Type) bool { - _, ok := t.(*TypeParam) + _, ok := t.(*types.TypeParam) return ok } @@ -100,11 +100,11 @@ func OriginMethod(fn *types.Func) *types.Func { // Receiver is a *types.Interface. return fn } - if ForNamed(named).Len() == 0 { + if named.TypeParams().Len() == 0 { // Receiver base has no type parameters, so we can avoid the lookup below. return fn } - orig := NamedTypeOrigin(named) + orig := named.Origin() gfn, _, _ := types.LookupFieldOrMethod(orig, true, fn.Pkg(), fn.Name()) // This is a fix for a gopls crash (#60628) due to a go/types bug (#60634). In: @@ -157,7 +157,7 @@ func OriginMethod(fn *types.Func) *types.Func { // // In this case, GenericAssignableTo reports that instantiations of Container // are assignable to the corresponding instantiation of Interface. -func GenericAssignableTo(ctxt *Context, V, T types.Type) bool { +func GenericAssignableTo(ctxt *types.Context, V, T types.Type) bool { // If V and T are not both named, or do not have matching non-empty type // parameter lists, fall back on types.AssignableTo. @@ -167,9 +167,9 @@ func GenericAssignableTo(ctxt *Context, V, T types.Type) bool { return types.AssignableTo(V, T) } - vtparams := ForNamed(VN) - ttparams := ForNamed(TN) - if vtparams.Len() == 0 || vtparams.Len() != ttparams.Len() || NamedTypeArgs(VN).Len() != 0 || NamedTypeArgs(TN).Len() != 0 { + vtparams := VN.TypeParams() + ttparams := TN.TypeParams() + if vtparams.Len() == 0 || vtparams.Len() != ttparams.Len() || VN.TypeArgs().Len() != 0 || TN.TypeArgs().Len() != 0 { return types.AssignableTo(V, T) } @@ -182,7 +182,7 @@ func GenericAssignableTo(ctxt *Context, V, T types.Type) bool { // Minor optimization: ensure we share a context across the two // instantiations below. if ctxt == nil { - ctxt = NewContext() + ctxt = types.NewContext() } var targs []types.Type @@ -190,12 +190,12 @@ func GenericAssignableTo(ctxt *Context, V, T types.Type) bool { targs = append(targs, vtparams.At(i)) } - vinst, err := Instantiate(ctxt, V, targs, true) + vinst, err := types.Instantiate(ctxt, V, targs, true) if err != nil { panic("type parameters should satisfy their own constraints") } - tinst, err := Instantiate(ctxt, T, targs, true) + tinst, err := types.Instantiate(ctxt, T, targs, true) if err != nil { return false } diff --git a/src/cmd/vendor/golang.org/x/tools/internal/typeparams/coretype.go b/src/cmd/vendor/golang.org/x/tools/internal/typeparams/coretype.go index 71248209ee..7ea8840eab 100644 --- a/src/cmd/vendor/golang.org/x/tools/internal/typeparams/coretype.go +++ b/src/cmd/vendor/golang.org/x/tools/internal/typeparams/coretype.go @@ -108,15 +108,15 @@ func CoreType(T types.Type) types.Type { // // _NormalTerms makes no guarantees about the order of terms, except that it // is deterministic. -func _NormalTerms(typ types.Type) ([]*Term, error) { +func _NormalTerms(typ types.Type) ([]*types.Term, error) { switch typ := typ.(type) { - case *TypeParam: + case *types.TypeParam: return StructuralTerms(typ) - case *Union: + case *types.Union: return UnionTermSet(typ) case *types.Interface: return InterfaceTermSet(typ) default: - return []*Term{NewTerm(false, typ)}, nil + return []*types.Term{types.NewTerm(false, typ)}, nil } } diff --git a/src/cmd/vendor/golang.org/x/tools/internal/typeparams/enabled_go117.go b/src/cmd/vendor/golang.org/x/tools/internal/typeparams/enabled_go117.go deleted file mode 100644 index 18212390e1..0000000000 --- a/src/cmd/vendor/golang.org/x/tools/internal/typeparams/enabled_go117.go +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !go1.18 -// +build !go1.18 - -package typeparams - -// Enabled reports whether type parameters are enabled in the current build -// environment. -const Enabled = false diff --git a/src/cmd/vendor/golang.org/x/tools/internal/typeparams/enabled_go118.go b/src/cmd/vendor/golang.org/x/tools/internal/typeparams/enabled_go118.go deleted file mode 100644 index d67148823c..0000000000 --- a/src/cmd/vendor/golang.org/x/tools/internal/typeparams/enabled_go118.go +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build go1.18 -// +build go1.18 - -package typeparams - -// Note: this constant is in a separate file as this is the only acceptable -// diff between the <1.18 API of this package and the 1.18 API. - -// Enabled reports whether type parameters are enabled in the current build -// environment. -const Enabled = true diff --git a/src/cmd/vendor/golang.org/x/tools/internal/typeparams/normalize.go b/src/cmd/vendor/golang.org/x/tools/internal/typeparams/normalize.go index 9c631b6512..93c80fdc96 100644 --- a/src/cmd/vendor/golang.org/x/tools/internal/typeparams/normalize.go +++ b/src/cmd/vendor/golang.org/x/tools/internal/typeparams/normalize.go @@ -60,7 +60,7 @@ var ErrEmptyTypeSet = errors.New("empty type set") // // StructuralTerms makes no guarantees about the order of terms, except that it // is deterministic. -func StructuralTerms(tparam *TypeParam) ([]*Term, error) { +func StructuralTerms(tparam *types.TypeParam) ([]*types.Term, error) { constraint := tparam.Constraint() if constraint == nil { return nil, fmt.Errorf("%s has nil constraint", tparam) @@ -78,7 +78,7 @@ func StructuralTerms(tparam *TypeParam) ([]*Term, error) { // // See the documentation of StructuralTerms for more information on // normalization. -func InterfaceTermSet(iface *types.Interface) ([]*Term, error) { +func InterfaceTermSet(iface *types.Interface) ([]*types.Term, error) { return computeTermSet(iface) } @@ -88,11 +88,11 @@ func InterfaceTermSet(iface *types.Interface) ([]*Term, error) { // // See the documentation of StructuralTerms for more information on // normalization. -func UnionTermSet(union *Union) ([]*Term, error) { +func UnionTermSet(union *types.Union) ([]*types.Term, error) { return computeTermSet(union) } -func computeTermSet(typ types.Type) ([]*Term, error) { +func computeTermSet(typ types.Type) ([]*types.Term, error) { tset, err := computeTermSetInternal(typ, make(map[types.Type]*termSet), 0) if err != nil { return nil, err @@ -103,9 +103,9 @@ func computeTermSet(typ types.Type) ([]*Term, error) { if tset.terms.isAll() { return nil, nil } - var terms []*Term + var terms []*types.Term for _, term := range tset.terms { - terms = append(terms, NewTerm(term.tilde, term.typ)) + terms = append(terms, types.NewTerm(term.tilde, term.typ)) } return terms, nil } @@ -162,7 +162,7 @@ func computeTermSetInternal(t types.Type, seen map[types.Type]*termSet, depth in tset.terms = allTermlist for i := 0; i < u.NumEmbeddeds(); i++ { embedded := u.EmbeddedType(i) - if _, ok := embedded.Underlying().(*TypeParam); ok { + if _, ok := embedded.Underlying().(*types.TypeParam); ok { return nil, fmt.Errorf("invalid embedded type %T", embedded) } tset2, err := computeTermSetInternal(embedded, seen, depth+1) @@ -171,7 +171,7 @@ func computeTermSetInternal(t types.Type, seen map[types.Type]*termSet, depth in } tset.terms = tset.terms.intersect(tset2.terms) } - case *Union: + case *types.Union: // The term set of a union is the union of term sets of its terms. tset.terms = nil for i := 0; i < u.Len(); i++ { @@ -184,7 +184,7 @@ func computeTermSetInternal(t types.Type, seen map[types.Type]*termSet, depth in return nil, err } terms = tset2.terms - case *TypeParam, *Union: + case *types.TypeParam, *types.Union: // A stand-alone type parameter or union is not permitted as union // term. return nil, fmt.Errorf("invalid union term %T", t) @@ -199,7 +199,7 @@ func computeTermSetInternal(t types.Type, seen map[types.Type]*termSet, depth in return nil, fmt.Errorf("exceeded max term count %d", maxTermCount) } } - case *TypeParam: + case *types.TypeParam: panic("unreachable") default: // For all other types, the term set is just a single non-tilde term diff --git a/src/cmd/vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go b/src/cmd/vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go deleted file mode 100644 index 7ed86e1711..0000000000 --- a/src/cmd/vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go +++ /dev/null @@ -1,197 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !go1.18 -// +build !go1.18 - -package typeparams - -import ( - "go/ast" - "go/token" - "go/types" -) - -func unsupported() { - panic("type parameters are unsupported at this go version") -} - -// IndexListExpr is a placeholder type, as type parameters are not supported at -// this Go version. Its methods panic on use. -type IndexListExpr struct { - ast.Expr - X ast.Expr // expression - Lbrack token.Pos // position of "[" - Indices []ast.Expr // index expressions - Rbrack token.Pos // position of "]" -} - -// ForTypeSpec returns an empty field list, as type parameters on not supported -// at this Go version. -func ForTypeSpec(*ast.TypeSpec) *ast.FieldList { - return nil -} - -// ForFuncType returns an empty field list, as type parameters are not -// supported at this Go version. -func ForFuncType(*ast.FuncType) *ast.FieldList { - return nil -} - -// TypeParam is a placeholder type, as type parameters are not supported at -// this Go version. Its methods panic on use. -type TypeParam struct{ types.Type } - -func (*TypeParam) Index() int { unsupported(); return 0 } -func (*TypeParam) Constraint() types.Type { unsupported(); return nil } -func (*TypeParam) Obj() *types.TypeName { unsupported(); return nil } - -// TypeParamList is a placeholder for an empty type parameter list. -type TypeParamList struct{} - -func (*TypeParamList) Len() int { return 0 } -func (*TypeParamList) At(int) *TypeParam { unsupported(); return nil } - -// TypeList is a placeholder for an empty type list. -type TypeList struct{} - -func (*TypeList) Len() int { return 0 } -func (*TypeList) At(int) types.Type { unsupported(); return nil } - -// NewTypeParam is unsupported at this Go version, and panics. -func NewTypeParam(name *types.TypeName, constraint types.Type) *TypeParam { - unsupported() - return nil -} - -// SetTypeParamConstraint is unsupported at this Go version, and panics. -func SetTypeParamConstraint(tparam *TypeParam, constraint types.Type) { - unsupported() -} - -// NewSignatureType calls types.NewSignature, panicking if recvTypeParams or -// typeParams is non-empty. -func NewSignatureType(recv *types.Var, recvTypeParams, typeParams []*TypeParam, params, results *types.Tuple, variadic bool) *types.Signature { - if len(recvTypeParams) != 0 || len(typeParams) != 0 { - panic("signatures cannot have type parameters at this Go version") - } - return types.NewSignature(recv, params, results, variadic) -} - -// ForSignature returns an empty slice. -func ForSignature(*types.Signature) *TypeParamList { - return nil -} - -// RecvTypeParams returns a nil slice. -func RecvTypeParams(sig *types.Signature) *TypeParamList { - return nil -} - -// IsComparable returns false, as no interfaces are type-restricted at this Go -// version. -func IsComparable(*types.Interface) bool { - return false -} - -// IsMethodSet returns true, as no interfaces are type-restricted at this Go -// version. -func IsMethodSet(*types.Interface) bool { - return true -} - -// IsImplicit returns false, as no interfaces are implicit at this Go version. -func IsImplicit(*types.Interface) bool { - return false -} - -// MarkImplicit does nothing, because this Go version does not have implicit -// interfaces. -func MarkImplicit(*types.Interface) {} - -// ForNamed returns an empty type parameter list, as type parameters are not -// supported at this Go version. -func ForNamed(*types.Named) *TypeParamList { - return nil -} - -// SetForNamed panics if tparams is non-empty. -func SetForNamed(_ *types.Named, tparams []*TypeParam) { - if len(tparams) > 0 { - unsupported() - } -} - -// NamedTypeArgs returns nil. -func NamedTypeArgs(*types.Named) *TypeList { - return nil -} - -// NamedTypeOrigin is the identity method at this Go version. -func NamedTypeOrigin(named *types.Named) *types.Named { - return named -} - -// Term holds information about a structural type restriction. -type Term struct { - tilde bool - typ types.Type -} - -func (m *Term) Tilde() bool { return m.tilde } -func (m *Term) Type() types.Type { return m.typ } -func (m *Term) String() string { - pre := "" - if m.tilde { - pre = "~" - } - return pre + m.typ.String() -} - -// NewTerm is unsupported at this Go version, and panics. -func NewTerm(tilde bool, typ types.Type) *Term { - return &Term{tilde, typ} -} - -// Union is a placeholder type, as type parameters are not supported at this Go -// version. Its methods panic on use. -type Union struct{ types.Type } - -func (*Union) Len() int { return 0 } -func (*Union) Term(i int) *Term { unsupported(); return nil } - -// NewUnion is unsupported at this Go version, and panics. -func NewUnion(terms []*Term) *Union { - unsupported() - return nil -} - -// InitInstanceInfo is a noop at this Go version. -func InitInstanceInfo(*types.Info) {} - -// Instance is a placeholder type, as type parameters are not supported at this -// Go version. -type Instance struct { - TypeArgs *TypeList - Type types.Type -} - -// GetInstances returns a nil map, as type parameters are not supported at this -// Go version. -func GetInstances(info *types.Info) map[*ast.Ident]Instance { return nil } - -// Context is a placeholder type, as type parameters are not supported at -// this Go version. -type Context struct{} - -// NewContext returns a placeholder Context instance. -func NewContext() *Context { - return &Context{} -} - -// Instantiate is unsupported on this Go version, and panics. -func Instantiate(ctxt *Context, typ types.Type, targs []types.Type, validate bool) (types.Type, error) { - unsupported() - return nil, nil -} diff --git a/src/cmd/vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go b/src/cmd/vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go deleted file mode 100644 index cf301af1db..0000000000 --- a/src/cmd/vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go +++ /dev/null @@ -1,151 +0,0 @@ -// Copyright 2021 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build go1.18 -// +build go1.18 - -package typeparams - -import ( - "go/ast" - "go/types" -) - -// IndexListExpr is an alias for ast.IndexListExpr. -type IndexListExpr = ast.IndexListExpr - -// ForTypeSpec returns n.TypeParams. -func ForTypeSpec(n *ast.TypeSpec) *ast.FieldList { - if n == nil { - return nil - } - return n.TypeParams -} - -// ForFuncType returns n.TypeParams. -func ForFuncType(n *ast.FuncType) *ast.FieldList { - if n == nil { - return nil - } - return n.TypeParams -} - -// TypeParam is an alias for types.TypeParam -type TypeParam = types.TypeParam - -// TypeParamList is an alias for types.TypeParamList -type TypeParamList = types.TypeParamList - -// TypeList is an alias for types.TypeList -type TypeList = types.TypeList - -// NewTypeParam calls types.NewTypeParam. -func NewTypeParam(name *types.TypeName, constraint types.Type) *TypeParam { - return types.NewTypeParam(name, constraint) -} - -// SetTypeParamConstraint calls tparam.SetConstraint(constraint). -func SetTypeParamConstraint(tparam *TypeParam, constraint types.Type) { - tparam.SetConstraint(constraint) -} - -// NewSignatureType calls types.NewSignatureType. -func NewSignatureType(recv *types.Var, recvTypeParams, typeParams []*TypeParam, params, results *types.Tuple, variadic bool) *types.Signature { - return types.NewSignatureType(recv, recvTypeParams, typeParams, params, results, variadic) -} - -// ForSignature returns sig.TypeParams() -func ForSignature(sig *types.Signature) *TypeParamList { - return sig.TypeParams() -} - -// RecvTypeParams returns sig.RecvTypeParams(). -func RecvTypeParams(sig *types.Signature) *TypeParamList { - return sig.RecvTypeParams() -} - -// IsComparable calls iface.IsComparable(). -func IsComparable(iface *types.Interface) bool { - return iface.IsComparable() -} - -// IsMethodSet calls iface.IsMethodSet(). -func IsMethodSet(iface *types.Interface) bool { - return iface.IsMethodSet() -} - -// IsImplicit calls iface.IsImplicit(). -func IsImplicit(iface *types.Interface) bool { - return iface.IsImplicit() -} - -// MarkImplicit calls iface.MarkImplicit(). -func MarkImplicit(iface *types.Interface) { - iface.MarkImplicit() -} - -// ForNamed extracts the (possibly empty) type parameter object list from -// named. -func ForNamed(named *types.Named) *TypeParamList { - return named.TypeParams() -} - -// SetForNamed sets the type params tparams on n. Each tparam must be of -// dynamic type *types.TypeParam. -func SetForNamed(n *types.Named, tparams []*TypeParam) { - n.SetTypeParams(tparams) -} - -// NamedTypeArgs returns named.TypeArgs(). -func NamedTypeArgs(named *types.Named) *TypeList { - return named.TypeArgs() -} - -// NamedTypeOrigin returns named.Orig(). -func NamedTypeOrigin(named *types.Named) *types.Named { - return named.Origin() -} - -// Term is an alias for types.Term. -type Term = types.Term - -// NewTerm calls types.NewTerm. -func NewTerm(tilde bool, typ types.Type) *Term { - return types.NewTerm(tilde, typ) -} - -// Union is an alias for types.Union -type Union = types.Union - -// NewUnion calls types.NewUnion. -func NewUnion(terms []*Term) *Union { - return types.NewUnion(terms) -} - -// InitInstanceInfo initializes info to record information about type and -// function instances. -func InitInstanceInfo(info *types.Info) { - info.Instances = make(map[*ast.Ident]types.Instance) -} - -// Instance is an alias for types.Instance. -type Instance = types.Instance - -// GetInstances returns info.Instances. -func GetInstances(info *types.Info) map[*ast.Ident]Instance { - return info.Instances -} - -// Context is an alias for types.Context. -type Context = types.Context - -// NewContext calls types.NewContext. -func NewContext() *Context { - return types.NewContext() -} - -// Instantiate calls types.Instantiate. -func Instantiate(ctxt *Context, typ types.Type, targs []types.Type, validate bool) (types.Type, error) { - return types.Instantiate(ctxt, typ, targs, validate) -} diff --git a/src/cmd/vendor/golang.org/x/tools/internal/versions/versions_go121.go b/src/cmd/vendor/golang.org/x/tools/internal/versions/versions.go similarity index 80% rename from src/cmd/vendor/golang.org/x/tools/internal/versions/versions_go121.go rename to src/cmd/vendor/golang.org/x/tools/internal/versions/versions.go index cf4a7d0360..e16f6c33a5 100644 --- a/src/cmd/vendor/golang.org/x/tools/internal/versions/versions_go121.go +++ b/src/cmd/vendor/golang.org/x/tools/internal/versions/versions.go @@ -2,11 +2,14 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !go1.22 -// +build !go1.22 - package versions +// Note: If we use build tags to use go/versions when go >=1.22, +// we run into go.dev/issue/53737. Under some operations users would see an +// import of "go/versions" even if they would not compile the file. +// For example, during `go get -u ./...` (go.dev/issue/64490) we do not try to include +// For this reason, this library just a clone of go/versions for the moment. + // Lang returns the Go language version for version x. // If x is not a valid version, Lang returns the empty string. // For example: diff --git a/src/cmd/vendor/golang.org/x/tools/internal/versions/versions_go122.go b/src/cmd/vendor/golang.org/x/tools/internal/versions/versions_go122.go deleted file mode 100644 index c1c1814b28..0000000000 --- a/src/cmd/vendor/golang.org/x/tools/internal/versions/versions_go122.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2023 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build go1.22 -// +build go1.22 - -package versions - -import ( - "go/version" -) - -// Lang returns the Go language version for version x. -// If x is not a valid version, Lang returns the empty string. -// For example: -// -// Lang("go1.21rc2") = "go1.21" -// Lang("go1.21.2") = "go1.21" -// Lang("go1.21") = "go1.21" -// Lang("go1") = "go1" -// Lang("bad") = "" -// Lang("1.21") = "" -func Lang(x string) string { return version.Lang(x) } - -// Compare returns -1, 0, or +1 depending on whether -// x < y, x == y, or x > y, interpreted as Go versions. -// The versions x and y must begin with a "go" prefix: "go1.21" not "1.21". -// Invalid versions, including the empty string, compare less than -// valid versions and equal to each other. -// The language version "go1.21" compares less than the -// release candidate and eventual releases "go1.21rc1" and "go1.21.0". -// Custom toolchain suffixes are ignored during comparison: -// "go1.21.0" and "go1.21.0-bigcorp" are equal. -func Compare(x, y string) int { return version.Compare(x, y) } - -// IsValid reports whether the version x is valid. -func IsValid(x string) bool { return version.IsValid(x) } diff --git a/src/cmd/vendor/modules.txt b/src/cmd/vendor/modules.txt index fa05367a8a..d2caf1ffb0 100644 --- a/src/cmd/vendor/modules.txt +++ b/src/cmd/vendor/modules.txt @@ -45,7 +45,7 @@ golang.org/x/sys/windows # golang.org/x/term v0.15.0 ## explicit; go 1.18 golang.org/x/term -# golang.org/x/tools v0.16.1-0.20231129202111-1b1e4dafd51a +# golang.org/x/tools v0.16.2-0.20231218185909-83bceaf2424d ## explicit; go 1.18 golang.org/x/tools/cmd/bisect golang.org/x/tools/cover @@ -92,6 +92,7 @@ golang.org/x/tools/go/ast/inspector golang.org/x/tools/go/cfg golang.org/x/tools/go/types/objectpath golang.org/x/tools/go/types/typeutil +golang.org/x/tools/internal/analysisinternal golang.org/x/tools/internal/bisect golang.org/x/tools/internal/facts golang.org/x/tools/internal/typeparams From c564d4ae0876895b2a9bd941f1f90022e8318f29 Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Mon, 18 Dec 2023 21:11:13 +0000 Subject: [PATCH 267/313] Revert "cmd/cgo/internal/testsanitizers: fix msan test failing with clang >= 16" This reverts commit https://go.dev/cl/c/go/+/549297 Reason for revert: breaks clang builder Change-Id: I2321dec9bc1fc20dfafa8a984303b0b5710f8aac Reviewed-on: https://go-review.googlesource.com/c/go/+/550779 Auto-Submit: Than McIntosh LUCI-TryBot-Result: Go LUCI Reviewed-by: Mauri de Souza Meneguzzo Reviewed-by: Matthew Dempsky --- src/cmd/cgo/internal/testsanitizers/msan_test.go | 5 +---- src/cmd/cgo/internal/testsanitizers/testdata/msan8.go | 7 ------- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/src/cmd/cgo/internal/testsanitizers/msan_test.go b/src/cmd/cgo/internal/testsanitizers/msan_test.go index c534b72442..83d66f6660 100644 --- a/src/cmd/cgo/internal/testsanitizers/msan_test.go +++ b/src/cmd/cgo/internal/testsanitizers/msan_test.go @@ -71,10 +71,7 @@ func TestMSAN(t *testing.T) { defer dir.RemoveAll(t) outPath := dir.Join(name) - buildcmd := config.goCmdWithExperiments("build", []string{"-o", outPath, srcPath(tc.src)}, tc.experiments) - // allow tests to define -f flags in CGO_CFLAGS - replaceEnv(buildcmd, "CGO_CFLAGS_ALLOW", "-f.*") - mustRun(t, buildcmd) + mustRun(t, config.goCmdWithExperiments("build", []string{"-o", outPath, srcPath(tc.src)}, tc.experiments)) cmd := hangProneCmd(outPath) if tc.wantErr { diff --git a/src/cmd/cgo/internal/testsanitizers/testdata/msan8.go b/src/cmd/cgo/internal/testsanitizers/testdata/msan8.go index e79d343cc7..1cb5c5677f 100644 --- a/src/cmd/cgo/internal/testsanitizers/testdata/msan8.go +++ b/src/cmd/cgo/internal/testsanitizers/testdata/msan8.go @@ -5,13 +5,6 @@ package main /* -// For clang >= 16, uninitialized memory is more aggressively reported. -// Restore the old behavior for this particular test as it relies on -// uninitialized variables. See #64616 -#if __clang_major__ >= 16 -#cgo CFLAGS: -fno-sanitize-memory-param-retval -#endif - #include #include #include From 7383b2a4db5dc93c9b875b42d5add73d27cc4b9f Mon Sep 17 00:00:00 2001 From: Filippo Valsorda Date: Thu, 14 Dec 2023 17:07:19 +0100 Subject: [PATCH 268/313] crypto/internal/boring: upgrade module to fips-20220613 Also, add EVP_aead_aes_*_gcm_tls13 to the build, which we will need in a following CL, to avoid rebuilding the syso twice. Updates #64717 Updates #62372 Change-Id: Ie4d853ad9b914c1095cad60694a1ae6f77dc22ce Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-boringcrypto Reviewed-on: https://go-review.googlesource.com/c/go/+/549695 Reviewed-by: Than McIntosh LUCI-TryBot-Result: Go LUCI Reviewed-by: Roland Shoemaker --- src/crypto/internal/boring/Dockerfile | 28 +++++++++++------- src/crypto/internal/boring/LICENSE | 2 +- src/crypto/internal/boring/README.md | 7 +++-- src/crypto/internal/boring/build-goboring.sh | 2 +- src/crypto/internal/boring/build.sh | 6 ++++ src/crypto/internal/boring/goboringcrypto.h | 2 ++ .../syso/goboringcrypto_linux_amd64.syso | Bin 2555664 -> 2427120 bytes .../syso/goboringcrypto_linux_arm64.syso | Bin 1980296 -> 2105896 bytes 8 files changed, 31 insertions(+), 16 deletions(-) diff --git a/src/crypto/internal/boring/Dockerfile b/src/crypto/internal/boring/Dockerfile index 58eb028e8a..8fde5c0018 100644 --- a/src/crypto/internal/boring/Dockerfile +++ b/src/crypto/internal/boring/Dockerfile @@ -13,15 +13,21 @@ WORKDIR /boring ENV LANG=C ENV LANGUAGE= -# Following NIST submission draft dated July 3, 2021. -# This corresponds to boringssl.googlesource.com/boringssl tag fips-20210429. -ENV ClangV=12 +# Following NIST submission draft for In Progress module validation. +# This corresponds to boringssl.googlesource.com/boringssl tag fips-20220613. RUN apt-get update && \ - apt-get install --no-install-recommends -y cmake xz-utils wget unzip ca-certificates clang-$ClangV python + apt-get install --no-install-recommends -y cmake xz-utils wget unzip ca-certificates python lsb-release software-properties-common gnupg + +# Install Clang. +ENV ClangV=14 +RUN \ + wget https://apt.llvm.org/llvm.sh && \ + chmod +x llvm.sh && \ + ./llvm.sh $ClangV # Download, validate, unpack, build, and install Ninja. -ENV NinjaV=1.10.2 -ENV NinjaH=ce35865411f0490368a8fc383f29071de6690cbadc27704734978221f25e2bed +ENV NinjaV=1.10.1 +ENV NinjaH=a6b6f7ac360d4aabd54e299cc1d8fa7b234cd81b9401693da21221c62569a23e RUN \ wget https://github.com/ninja-build/ninja/archive/refs/tags/v$NinjaV.tar.gz && \ echo "$NinjaH v$NinjaV.tar.gz" >sha && sha256sum -c sha && \ @@ -33,9 +39,9 @@ RUN \ # Download, validate, unpack, and install Go. ARG GOARCH -ENV GoV=1.16.5 -ENV GoHamd64=b12c23023b68de22f74c0524f10b753e7b08b1504cb7e417eccebdd3fae49061 -ENV GoHarm64=d5446b46ef6f36fdffa852f73dfbbe78c1ddf010b99fa4964944b9ae8b4d6799 +ENV GoV=1.18.1 +ENV GoHamd64=b3b815f47ababac13810fc6021eb73d65478e0b2db4b09d348eefad9581a2334 +ENV GoHarm64=56a91851c97fb4697077abbca38860f735c32b38993ff79b088dac46e4735633 RUN \ eval GoH=\${GoH$GOARCH} && \ wget https://golang.org/dl/go$GoV.linux-$GOARCH.tar.gz && \ @@ -45,8 +51,8 @@ RUN \ ln -s /usr/local/go/bin/go /usr/local/bin/ # Download, validate, and unpack BoringCrypto. -ENV BoringV=853ca1ea1168dff08011e5d42d94609cc0ca2e27 -ENV BoringH=a4d069ccef6f3c7bc0c68de82b91414f05cb817494cd1ab483dcf3368883c7c2 +ENV BoringV=0c6f40132b828e92ba365c6b7680e32820c63fa7 +ENV BoringH=62f733289f2d677c2723f556aa58034c438f3a7bbca6c12b156538a88e38da8a RUN \ wget https://commondatastorage.googleapis.com/chromium-boringssl-fips/boringssl-$BoringV.tar.xz && \ echo "$BoringH boringssl-$BoringV.tar.xz" >sha && sha256sum -c sha && \ diff --git a/src/crypto/internal/boring/LICENSE b/src/crypto/internal/boring/LICENSE index 38990bdb77..05b0963f5e 100644 --- a/src/crypto/internal/boring/LICENSE +++ b/src/crypto/internal/boring/LICENSE @@ -6,7 +6,7 @@ When building with GOEXPERIMENT=boringcrypto, the following applies. The goboringcrypto_linux_amd64.syso object file is built from BoringSSL source code by build/build.sh and is covered by the BoringSSL license reproduced below and also at -https://boringssl.googlesource.com/boringssl/+/fips-20190808/LICENSE. +https://boringssl.googlesource.com/boringssl/+/fips-20220613/LICENSE. BoringSSL is a fork of OpenSSL. As such, large parts of it fall under OpenSSL licensing. Files that are completely new have a Google copyright and an ISC diff --git a/src/crypto/internal/boring/README.md b/src/crypto/internal/boring/README.md index ec02786d96..62106cdc70 100644 --- a/src/crypto/internal/boring/README.md +++ b/src/crypto/internal/boring/README.md @@ -27,13 +27,14 @@ syso/goboringcrypto_linux_arm64.syso is built with: GOARCH=arm64 ./build.sh -Both run on an x86 Debian Linux system using Docker. +Both run using Docker. + For the arm64 build to run on an x86 system, you need apt-get install qemu-user-static qemu-binfmt-support to allow the x86 kernel to run arm64 binaries via QEMU. +For the amd64 build to run on an Apple Silicon macOS, you need Rosetta 2. + See build.sh for more details about the build. - - diff --git a/src/crypto/internal/boring/build-goboring.sh b/src/crypto/internal/boring/build-goboring.sh index 4938b5eac3..c43fad24e8 100755 --- a/src/crypto/internal/boring/build-goboring.sh +++ b/src/crypto/internal/boring/build-goboring.sh @@ -122,7 +122,7 @@ awk -f boringx.awk goboringcrypto.h # writes goboringcrypto.x awk -f boringh.awk goboringcrypto.h # writes goboringcrypto[01].h ls -l ../boringssl/include -clang++ -std=c++11 -fPIC -I../boringssl/include -O2 -o a.out goboringcrypto.cc +clang++ -fPIC -I../boringssl/include -O2 -o a.out goboringcrypto.cc ./a.out || exit 2 # clang implements u128 % u128 -> u128 by calling __umodti3, diff --git a/src/crypto/internal/boring/build.sh b/src/crypto/internal/boring/build.sh index ec960d729d..e2026018a3 100755 --- a/src/crypto/internal/boring/build.sh +++ b/src/crypto/internal/boring/build.sh @@ -22,6 +22,12 @@ platform="" buildargs="" case "$GOARCH" in amd64) + if ! docker run --rm -t amd64/ubuntu:focal uname -m >/dev/null 2>&1; then + echo "# Docker cannot run amd64 binaries." + exit 1 + fi + platform="--platform linux/amd64" + buildargs="--build-arg ubuntu=amd64/ubuntu" ;; arm64) if ! docker run --rm -t arm64v8/ubuntu:focal uname -m >/dev/null 2>&1; then diff --git a/src/crypto/internal/boring/goboringcrypto.h b/src/crypto/internal/boring/goboringcrypto.h index 2b11049728..3663a1b1c3 100644 --- a/src/crypto/internal/boring/goboringcrypto.h +++ b/src/crypto/internal/boring/goboringcrypto.h @@ -125,7 +125,9 @@ void _goboringcrypto_EVP_AEAD_CTX_cleanup(GO_EVP_AEAD_CTX*); int _goboringcrypto_EVP_AEAD_CTX_seal(const GO_EVP_AEAD_CTX*, uint8_t*, size_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t); int _goboringcrypto_EVP_AEAD_CTX_open(const GO_EVP_AEAD_CTX*, uint8_t*, size_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t, const uint8_t*, size_t); const GO_EVP_AEAD* _goboringcrypto_EVP_aead_aes_128_gcm_tls12(void); +const GO_EVP_AEAD* _goboringcrypto_EVP_aead_aes_128_gcm_tls13(void); const GO_EVP_AEAD* _goboringcrypto_EVP_aead_aes_256_gcm_tls12(void); +const GO_EVP_AEAD* _goboringcrypto_EVP_aead_aes_256_gcm_tls13(void); enum go_evp_aead_direction_t { go_evp_aead_open = 0, go_evp_aead_seal = 1 diff --git a/src/crypto/internal/boring/syso/goboringcrypto_linux_amd64.syso b/src/crypto/internal/boring/syso/goboringcrypto_linux_amd64.syso index 6cea7893553abfee72af501a05a11ea09b396232..b99e7f57661c084a9c0f3ee7723e43042a9c6303 100644 GIT binary patch literal 2427120 zcmeFa3w)K;neU$+0t5)YQPUPJ*4V}tD%M1?nu?VTiM|_llvY}8#fqatJFPWLNP4vf z-AT*axI0X1r#)w!GoCq}p6N_y>Y4HMZ!a@Vh!DVA2$Wl@AXeR*Ehd150FwN_zh}Ms zl7QOw{AWJ%`5*nroAs{SyVkRw`+C;et@ZJ%izAVu?0=D>4;SU%vbjY?gT?3PUgleB ze$kAgcjWTkO1uSuw;=Eq1m1$cTM&2)0&hX!EeN~?fwv&=76jgcz*`V_3j+UnArQSG z`tj>y!S+~i#1D?A*0fD4>X={R2YcedNIW?7BSv1_a{7;oii?U`DsGB?Dtb#gAkU>n z_f82@mtH=t$UC>LsOV$k{<~z{f8MzN{(jtl?;iKx>Er$z9QWV#{yi@hl@=BG!Qqa7 z9%N*GFz9#fE%6hbn|T)&6r$i>kl69w3o)`vu#LNn^(vfQX9V8 z`tajxT^mYi)9czimu*8LJDH|e)h0u=A3y$}YeOk*_PRE^X|q*TNc8VyuVg+8-Gi9R-dT(dO5*=>v@YZ##U#pl-ba0)tp~ST>}CTAW9L zcGF-9$$@T~9u}}@GSbIi`fA)v<`y-7l9z+LY-d3IgS-GR2f3pp4yqk>8`He}T2)fK zXfTH~0oJ0mqKd~IRrASzjQlOCw2_xCUKoIVzqPKaoLcd!B|Pt{s^r;RwVc6GP|eHj zRV)4EFRNAq2|w7Es-CLVYK*H<<5JaVT&AXt)ME~tNKKq+V6ZPSq&;&OMTS9Yf{mAY zu5df)>1R54*;o6SQ|1`8`WYlkv8PVs&H$m2-;yKbi8C%Q^EfRH!7#V~H)MdhO@}8HOuBLU-??@`Vh=FPY&`6>PV?`1RAhBi_lggAA*mRB zkK-3NuKs=ah4*xpUz|VpEq?J9zxcn5Ulg7Be;>d2m{Tu;SJ5u+84>4fF2Co5wiudA z?>W)Qd&`BXGw#ZAk>KT=(lOmB9cQ6x+??_COkX!VrAWeNRBzpu6~Aa&QJzJukTA6W zs5F{QXa6eiV`5;@k42YW?d>X^h63DsM5lzOX%RZP8s zb#4%TVtqsd@e?Pew%nKQLR-s@_B73?e6ly2VMM*tOR5<9HRWnX#xJTV^^+I=w`(RB z#ex^SbBp4^5gYRS)JGdN-unOVhg&yu(7)%nAnCPLFw*QN%Ts&qoXF=I%YezMT}-jj zEYg><)L96WX^z2OKe?=`+8|*t2$#?AxUSp};#JjtPhHjJ)GPvy z)%7)_@nmyVWjuLd;_Ar-2)5P_)_b!iFyz$540a(4`ZW#Nz{K(lWS1y24KVT#y`Yk( zsX?q<(;=pQ&-UDpDMel0dKyb<}oYFM~H zLQ0Ioh2ttls;f%t&8+nVmbtEKuUB4QWT`=KR=t3nTK)NO#1U`SG-Y}lHu3?(MyW_= z(rw&^D%M)u*%^reRUhAtZ@L>a99Xy;Vn5Og&Z6v{&s^t~J_7J)!g6Ps$xXnQ3g})#Hwdr0+X?5=)tV0W2k}^rRo7W}cweim4R-8}niur?B+o47kph z0LVLl#Tmfj3@O2%E|>oMM|!sMBtxM3BOa|hsBlBIDtuJWR(m$yGG95L)U%bR*Vwv* zCST#vsz>8>%XwYIqm>6eG_F+r&#v?nBgNjme>%CS=n=8E^vlp+es<75Z9l}n&uTD@ z3+(Iei+`lAd{limS&yGxNwNnN>1CxG_mDU&TmcCi*SlOgI3e}^$PD_*43o?T$?=90FX&sSopO+Fnk=6lf9|dKlPB#eo67JixFAn4TGf zzoxk9ux4fRPb`84yZ82qiIkuMya=MDS_QL^;(^$RmUK4 z$m;aw`hS*hH*3}dGM~`y0oiX<+n}>etu>^2FY_Cm(n0!q)Ovnee-32FSKs`ib`7z zhaA=#rW$@atZW4zgD$`8*~xTW;f3u6ZuhLAD1me(*+vBeOTB7!Xy`bw%*)~az+K)F zDhclg;@)zShVuh=cq>(3NZ%RpYX`lyFPDJrA;2)L8Z#QSfe)Kr?6q}SRcE#WS-ker zDNw;0e24;$!c)|e=q(_lJ8oY-AYNO_{L!IBw1nJ{R#*6jIpr6%a zuPW(5^FdXs14!h<6$H%w4QeBXaJ!%iMoLD}M3^LitK6vRB@%l?69Wg-e#CXToIm}; zY9P9mNlQz5w71`?P;?0py#f9Sg#E9mBK{G1UT}5Lmw?{?JSm_Mz9OT@vtE9q-e1(~ z3rhW#mT{Td{g3eqdU*ZI00-^T>S3EwGN{FOfHg^DK{Us%2Q;EdkU=eQR*)Sx!~o26 zKB5{usv$5@c$eYY?JN|1@o82^Yu2wtqCPAMz%6GCviAqo=QtEKm;?O*MsCe$3GTkfK~c}+;R{V58M@?6788j zC_%y&P4gIdQjb18w&(#LZhbe2kgY7L}vR3xqzcO)Gy^j+~>~ zISYo(A$8#*_xI9|y1!R`Qh#$!4r+=D=xpWVwIrAi?9W^I=y%*g$Y@`+8;P>&H6E;| zmtg=I+DLD2t(%H&dvrCQ^xFQH`#{xHA4gf{hm z)&famwKlYV!;h^rG;S#x^7;|$Ag~)ZiY5u8C*a;Vz`thWFeZI9M({?CTgGBk&mu|_ z*t0|JjE6i!Is6EKKSZ9KlhWL!SPzKEKq@-v;sKE}Z}ELGGJ#LtN1-%q*L5bHw_iM^ z(NI|_xT1L%;TxtFStYyG))#5=7s? zf?yX}f*|e1{cL&Q=akxNiGfJlV%&lW3rop%9&i!*GHpuVbi9QMP$2?{1get#lPJ(= z$l9q#zuFlFsRvXfJ_EX#MEQM?$tTF>~11 z%JjqT@7s>MzvoPNWpvc((};VyqgTEnegfiT;FBv~53tBSR)k@*L|>xIeQtdh&T8;ZTz#onyC%gVhQ7LZO{OYF?`KGM|_Eyv*0j5?+?@vP3V-d0EcOa=onNWhF0YPLFmZewA^0xQcO9owP zbe^nd6k0eutzmBNb^#r)G-w31Zlmn2LHAzm!rY-MjS) z{(}DU0JSbwk1)-qElR+;osGOpAcd_-jtZISHji7X4x)sXCSyZ*8|Ot734dVPwjlIw zIB&X!c({#UmNcW1@HT6DzlKNWPH0IYv@V>l4|b|xkcXjK*bJsvihpuXYR#u6;>GM4_1eFM z^D64in&jOu!JCa=aMsmu)rD}?h4_MJT@6=V2v=QLsTa8FLb&R}YQ4Z!7s6E+&escE zbs=1J;S#;TRTsil7cSS!N?um-B0*7!V=a2i7-{hb!~^*4eO}x9rw~YxchukW(%+GR z!0-di8b4^Rn$dBO{KvVCe%np`?~X}d`6K(A-`_7e9Z<1MwlO_GqW^6xTvgP%kx;c$ zK3V}-Tg-xzupMWkb7ef|GTquM10>MmIC@it`XSS8>Xq<Ar#2+4%|0@0>z(hm{$N|RYeOk*R=PF_C)b9AwP65Fht$U%He6n(rmqxwv zB5!tERi(B_!gO^(dVWEANkMvfL3(9DdUZj1E$OyeFc+S}6gYGtF%Oxh_a~ z8-q4iCs`k{mw9TCtS`2gxO$^Qdi~_QIewz2vSuiC`OVXc+|B{< zG|7hzOn$IG^>*@scO8ng)az=VcgfL!yI~1WMHxr~UJ0*jyuWHS9V>NT)mo(ruoo0) zJU`s8mj%!$KL}V^=Z%=j(&>;$cD)N{kx3%6L1J`-e-e#SiyL9zOG_QJ(8ZS5Di#3 z74qUu;J}yZ`t|J{)k)75rK44-_ zIfuhs>?)>O!kcWX3%@CczSsY>hWBeSGL#Y;V^fsFuF_RR=q}e7Bv7sKGx`8TR?r{? zp~&oZ#=|m2edIqT+qtm5DJm`k#Z1o!+%kvI)9^N{1!C0tFjAJRw2%@>*H(uPen(wZ zX~#px{|H7AKVi=_^*>(3-k1e~q587VHEU@V8Zm7}tPg@k-t7CT9F@4`pDm-Eg*@3XE+7&ii&8XvHaFd1R$g(F7| z)&et&3W_@WOl9}kC`gFMD)Ne^8V^-ic3gIbX z|1(-uDFGv<33ORDS@+otw4P{-O<=UL+$5ww;z=t&?1Qu-GmqAW%5RHmGPXi=n8j(( zRX8nX%IunYg?Pf291wwqghn2_$2LQ7(M&kQfTV^#5JGw!ju*6YIR4{s zX+ty@?l2y}4Gmeb`1XM*74J)7;jT-@yj@0SNCf0ZqLNTr?G(uXLW z;I*}8OFLECn=S36w50iut=C?a?9G<+QZli5v6bvq$zZl*FC~+jYpi5YB}LG!jbxCL z$<6Peq~t>?D0c-VwI=W4v!8389!m_YMm$B*BdjlxSyG1z_C@m|a>d$l;g=s97k+uk zxbRDFT=?bRj|;zi_qg!O)5nEhGWcWV-o4uij~Jt{&0>VH;3?uO2+WKHCt_VMm5kHb zEI4!evQTNeoxj@OWm~wh!~;2cK^H|5I)&~0H&xic`b{)@mS(Sru%Icaae1ngCDRW> z_`OxO$Aw$;hCwW-(RlM%ug=i(0 zstbX}z6Q|yr$6k%5pBp4xE9YEatm=9D-Sshpw0z~x~M~%Dg05xaz?Xtp)aJUOMoUV zNjaZ_ATmfc!oOe?R!8m4I8`0^qTJAOC(kE;9ZhUt?X5{YqXoXlB|J^OkLY7pZg46N zx|B4nJyncK{t65Ey!2Gof0LRWHvBZY*SmIF(#1kyD-w`5- z*IEj55$P5%7s03!B=eI$u38Pu;=wPgN_o$G*x?VM91J8UOkMEkxHinDF@DuxEOB79 zpUA9knEgugH(3bRNUC)7-=t?Zcne->z$e)CVo6+qV8>E>J|eYw0GPKrox~D*scQ+R zFHqE(&2iF-oCmWxYqN>fN}z&n(nEq+2zr2jxLRx@>bLwIYG@y7zR?c`!U25B2GIC$ zm9_R7e~{J4kxc3@ukfIUbh@1ToF2ov-|yrssr#~`6IX#_Yg)dE*P2Jb_U#bGXf1k} z_N`+4G)>!~MrpDZ^Nhkf!ascPmS@ft)8Scp^VS!rKKMUC2mp^5m%`)pTcbMM3?nC$ zam?jX2|RO_FaC(ei9Jqjv;B%*A#hgP0dmwd=aG@0D0TzzG!GFf4^_u$JLd4(OYf%b zC`!Pzoma>qcAhZ|(gpJwr^rj&IYu3neW&Z&HjEHF)K*X~YuqSJk(ak8Lup=-ci2j6 zr@7eLFwvaCvqwWIP+b@bkV4^c2ovf_4#VDD;d#)OK2&)2+KXeRjwLy29;jaT@C8qKsQOc~TrV1ks;va1?D`bw_VUGriv4$wFdo|hKS{B75oFJ@ z7^c;mvHON9y<_LLwjet^6K4B{%Dm%`c}+g9vHs3#{Qe=wi*3g)i`Z|h#_u}?VoS-_ zzE^=74+D8qHC}Z6hH5;h0z(>y%;uh!=DrNkSBS-Cl#Z=0EWX25N|^5sB;*LkjM9So zS);TP0RG0RFX!VDraBfDR$G|_?MfJ?*ER$x;(7Fg7sRz^$ER6{AMM7< zg;-)FGG3l|ZO_oSA$j$vMWj)sxcSC-u+C5H8}X0qw#)1@-U};s@iG2p8Mt zmO~(%S17rJxBKQwQ1M2gpV(08C(GC{>(Ztf|Bgml)@76}kJbhI68k30 zW!m0B4k6Zl`%pZ2>3d2i$s{GeQ(~4ppll-8hDjwWkH3NlwLd}8H z_phBsGv}7NQu|q%^9lhlAC`1S)hvb75?VaTYb&=8Kko8fssN1slA!uQI5`9VMJjliQ=dD*V84>N#E zKVg3h{K3=6?FFGj^8$+FO_JgDox!s2#nN8Sw6I8!H?b@b{U(f&QMMDpIjn~auS3g1 zv!Dv1FK=0>%|3lsZP2rG$HGF(q6mbi${5Q+Z6xN5ULjnLYxTPCPz}pMBtw-Pk&`fI zw>rr?gTrHC1C(M}m!-X%}|H$;N@m&RI8-)>)?vUJ!TEYn?tM!A|w@ zW`YA`iW*o6&M$+d;^x1X#CRjY4gDx3c8pFo!d<52n^4Fa37+}tHRA#sVLo-8hl_-Q zu5!|!O;Us*?+;Wx2;{`Fv{HVOLtd#5ZL`^5dC2^T*a`GwDtpdzE2U8Fm|Z7jm!@1z zG`Brwf!MCjUYk1#)5KjW4go0PN8a>bhk3YevIYY&8w#0|(XcXSFwjgoOz0@)4W+iw zXt0$yrOn{=BTvu}Pcj)kYonE=>`Vs0P*#=x5QfB9`d%Gs<@n@jz~6-CV}ZtDJ3xk?^T3E9gi_HO9( zP6zBn7(L)8-_{?aXu=tO#~FX+Cx1}2n(Ee@A8be+sGC;Q-r4dmescPczCWetS334k zGxT#T+@k0sSMj_louZ1LSXdglshe7ff?83lb*a@_N3A>yT&s9{w{3J}s z54QWky3`@6|Est%gT2si@As3J{zLI(HU#Rac2`yD&t=l2E_355OHH6=G_hg0E_gLa z`H4r%?F`HB?XP*`=yJX|Hr(Q*jQ>-A&lvesYF?gKV#$@Mnoj?o5htAXaLfsC)dfR| z7Z6TEUi%Z|NH_)eSKSy9l0;1AAe&2L$&U}mB{QB(9a)Ho>Uwzs*6HZKP89HtT|-VF z-Tu;T;yI#>42gK~aMf};%Dii>-|^$BGD`cWiQyu+1vi8>nvV#AdqtWNkziK%({ z)g?X$Q_l}xmb_~E0rE;;2poI6^j7`~pJy!&>RuVvsG9#ALH1!p)%)^-?7ewGc77k?VvjMRKcIn;eP>$~}7&Ua(+Dq0qcCQ-O1t`8n~85E|& z?x*Mi*T;6{_JKU;XFS+R!fe7(@~ZL`jf4$WPSmq)tlEP~Thu?{lT@)VRfW9cgyJEK z6mp>_2uK)WC)cIO$R;)ePytZdyJX<-Miy7qmm(x>_^3T*EsoiaG-%vXLQy?wE0|?~08@3|e~W}R|C6G__84H(q=+o%%i8e;1K4A+`He7sn>;ne<+Ucv9>`kc{{7jFR(YeDgZbJN7~gL&Aza$Us=$HF=I2v{ zQZ>q5pe@Z-OFZn>gGp$f&_%U6$Y@+b$Hwra5Z`=O1)-~wf;NW&6lgQGKioCcj%%gX z(82-wf8Z9B@#{#65dx^mEQJ5~Xvj-3%3em}u1GM)I?j9w_EHbfQCVk*c;x{%V1dXw zs6y7#mRRkf6ta!dbef5VbYU(`TcH7!LL&P21+53GL|mZzJ{cq|KHR8GHUb&87Dl#v zsjPp`F$P0zh>4VWezg7TXxf79+|rU|`bs97HAwR8>IYR1ioB)dXW7*QC$lSynHOF{$i{;nG65DF zsf9<{IgV$Q2P0!rj7odvkSgSm^-?=trIkQRiAD*ww^74AjMo4ei_eF2ZQn@5FS>(Y zF(0O9OzTt(3*R#g%Xol`n-k^peH*3)TM7w{R}2U`;Mh!x3Xj7H;j z2r1n}*I&p~R|J9e+Guq{N&@HM8g4PQIE3Ky4RLoywNhBkf{FARbwCTBA_eA5%W)~F zVSrq^rkrmeI|glij7>2#3yT>H;Uxy+q7wNCO(DugFaQ!VIErD>M6BG7z}N{Rq>CrIU~gI1({5*C_{%mC=jhfm_6*DndnSL|9TZ}(5s^U-5_;Z zs((m%L;BP!DiDX_pK&WI7yp8mLw1E+$+9c)XJc1<2&N+bM0^mRdQm<8(m|!(+oQnS zM&VeFXVD>;Dhm^}rkqqRs6zp(xC^{iOFW!g5yj);q~T#4*$#Dpp6GYg`fRuLWNht$ z5LGb24JRm-$l?`1chJP7~ z^01{bTE;VE%+y%u@6Ns$!<%p}YK&o806M%8$L_d6)~^=w8~K=e#iWgug!^L@be8>J1v*2ACK2=StqyKOW}P^ttEB8Q)fv% z;IvpBc|r+i>Eu9B+^>tKMR{Pn=r<|@OXbrKkL7}#Xfsv-I*6tfOHQ1&iKQ^SnZ_t! zx&Crd&rKYRmEVSPIFSz7lG;SdVw_EPfsn#{ut0(6I)F6EASs~#AC0DwLuuN?18z^lq7+LQVS1hq!9Q4DR9Q&kiN7r_F-Jz zV(jf)jPzfWIGxSr%Q{x0L)$<>;BlTWC^;+^I)=gTa1aObQWEgIrdMZV0b{3I;K$$8sT^ACNvQTmLCOKerUA_QnhrEGXD;x3@8Z7No7Ao$} zj+^)x<}<*^jz0rNzNZDy<_HAA11u5GljhQhR^YPF9f`JDq`)9yL+YN?Z}T0!)mmN zYxq)M3Or)l!P815x%<5p(^Jh*c$;D)e)VN;t;B78dMLzLQ2bH=*xl+ zm=?@RK-`_`oS9kgutL|n01BGeISOGCp446{=B&s|51146!Yke1OY7a=D;xB8oIOXU zV%94k`wj^{YVq>jwN6q<&+2apW?D2;w!sC>xw@bPjCw}`SK8NICSx`Z|J<=Vy zu#4gYyT#Z@fT$L$E#;j0QWsjXfn*Km5ceeuzsAf7$WUFD~%8QAl1^ zUE3l@D}9(3?;p7jD7EgA@cs|{ii#s~dq#J=3qbBpZTt!QTzAw@<_TcM+R$JA z!iD&*oxl9;eh0@shLN22X*3D$HV7tUz2~3e%bLW;PWGPv)x{LOj`#d0bdUG^Z}E$N z?w(V7&;MQ{NKTIz6i4}f^bzMa@1Qt!lt+H>MqlCh->cSc{BP6v+dFf^XX7|G{J&PU zQxE@{n%5ux;2azN4;kN&SD$+L8LCj6EGRA<{^JyTAPN!g7r1%C_t<L*!TOTcYodzw6)%-@6m$yt1d=4#)zaYf9#d!vfbu~+s{bR1UI zc+Q_$@o^O5#`C}9(s0w`>-^;B4*9cx{j2Hrg+2ax1Af=&Rr7~-MBjbayAI7SeacTR zKJ3rl@~?LF)9k1H^Pcd#PEg_3(RbhRuEQ(5Z4;}kJNaG3pqrjMmk)O%@|%9E)Z?TY z-&XDFFcdH-_s@+qY8?EOMx@uMMlD$a6n#wiYi34Sde#eUQAcn4Z{Dg$wIIjdXzE5iMR zHG)BM;-i~k)kI)Wkp}yi}averkUiRZoMRssVe@!-{# zUuT+Kzxh7GFDN?LzVHNzas1)U`uE!Yl1ABYY)L11i^1x1;}i!kt?T%5S=4)q;E{4K z@g7l;qEbG}HAlz^b`iy}OTE)4|C}PSM)KfE{o*gCFl+3(=x7gJ)CFHD^V+{bHSebj zromj-EST1nD)oN4XlkTu&7!GYY0?X(L^iHjFvaDUD!x`4f~s!Q~e#zu4tRlpi6#sF*obdWp*zc${T{Q1?f{EU*1Nh}C#NOeG;T0Aq&N z9wjGz+oVDeuUM-?OR?E6$09HJ5$@L-@#4V?-q)W7vsp90>p+RmZG1&Vn*~k0JUPlE2+D_8-lMc80IL|g0lMd(Ux!iCxKmh zgn6P-jMfF|NSAl-&v|8!4#IGd^x7XHhr(F0WGZ^eX|d$oGdRsP%}>rbGalI#k8Jj9 z!T)b}`n5;qd*ANSSvb8M^uFB{Z5#I5SJJ+cD{w!94eqG`A z{_7$Mk-+=!5M7eKDf6qu5{r`sko`VSU;QSAuzo$d+{pY8@ z9M$FM@IQ?HPKSLeY~w$c{&cwLP3iBSsgy^U-<|$4chzhfS{G@aRToLa8m7TQrWp&F z60(pfSr#%?EM#hVG_pQcyPUD6zT(!izjoUHm7fVC9iLs#)%{JjbrE= z6Ht`vI#wb1pXBC9RAZ?viCHH8F^_bDCKkNr2XhH|JP~REI2w-}dlN07iT2V0KFi;D(EEB?z_f8(Nbz*z z@m`cA-U~#$7n~&jU$0)F{68gk@WKyx*$+(92jCpy4(pmf5l!qnH~lx93JT$c;@~;O zVVYAMjzya1p3JXubwYi?-krWM&FKsE!E89ji~=`@@gJ}KlPptabrxTZUtGT=cq0Fs z6tA3@z0KAACI$9J%iEk0^d4sczd!ZrU(pHnuwsKLg92J+rpo_@%(GLUxErhY%+$B_ zr!3X+>#6d>{D41%=Pa>G z_q~Ov$0*mZCO=3w1gZMqVCtC-jNl!oDERJoP@BhqBfW1s*WSu(`2n+NXdi9fBc|rv z`@ebhgE>_-7;JaQz)v*<&o=}knfF>eW=BO;>Wg2S!i66j1}Tdr))V`_p5t93p7-^y z3gbFT{Y%O&hy`VH{Eqpg>nd>4F8Au)mFTm z@~_zj48IjmPJj8Y&FUNsPrNuBi;ToN=3LCe)G%gTmPc9!{Muvj z;AyXYCau#6b&)LLVu;ScSnWW|^jPp{oH+T?^j}gUV=VHLz55+=xI`Qv-P;fQ(4ZD2 zD=t}-oLe2M-R6vr$7F)UYG3iby$;_fc^j}I+Iqb9f1t(u%0piJ-;kh_%2ktVHl?4} zNP~lZ;#rK5kL;D=)AcgO$OeoNZdWmn0oPL`UL2|ELv=V4)#1!?j1O2sFSbW{mNis} zHIQ3gcP7?H{7i1oURqumR;qRe%F>ETt5uDygWb_H((;d)Iq~30mKTrE#|P!akd-NS z0j`9^UKZzA^{TJd^rv-yMopjjN#65241)#r+Ad(8*uS_f9@5FhV6&Si`#E8Jzuz&p z+`nY*nXzDQ1w&$CwzOo_w7r!E>5N(>o_}p|a^74UQg zJE3W==w0-H5msizkSByZ5#$Jf6EEd0z0$Nq;N~}c0nd;l^V1xepO*UN_aX7J)TLiG z&)}WCQ+2CLNfm2aUzGl&V*3hqW8ja5L04cij#cc;Q!oDL&Vz3=3^XJAN!_Im`*M8C z4F#5_3EqD#uISR9m*oKL#$ic(^3=i$iGZxEqi5F@@m%iXxy2o86``{JWO zPL8osf^z4H%;HyYJ&@N{1--^2#~UKA#UZT*5yFYmrX}KeezM{MKRI_6lm$saOvei; zYuG4jw7zX!OBGbr!fKzu_p(=bI-34-b&Ibagr>h$57msug5lVa-dKdZmyMmhV}&$8t#;pOnNE5y&{iJx5#Kf6NwY@YbpK zV@PwV(jOB)A`Ck5BJARZy|JJ-)|HwV)5e0>#VfX!8_aghHrZ@KgMw4rMj} zE*t<5cx^|;@`l#K0lr4cm$cQ;heLnm$@ISic|ybXYpI_81rH~DLhiJ~?;3zR^}wBm zbKL2Sn*PiuYx?Z8So>|#PulpzYYmc`Fb%MXBT-@+thd;PIAF*(Ea@1BC5>~C%Ce50 z*IFJI>zE}8kerue9ev^W4Zf$Byo3H(#9na_RDvI}2C%)-mWh7k)lAJVB#Zpn8N${% zCO7Oy^7Itzn0Ik3n0JX2N{1wrwl;q@*necVAt?;!ToMID{nMG%@Ee#R(jg&!1F0Pb z&+`0+@`|}2WVH}=t`N0aNIF+YS}g>f3xaL{h$HZuET7pN9o>@WBx6;bf;+<28j8Jl z;y8XXt08!tBLp#1ymanDdm*Eh-gi3v<@rsX;_SJ@D}A{A^#9(pU*#)1PDlKhNq2g0f3!oK{CCk%Z#wGqrU_)}3`9e+;vzrUpqnOEO^+q7 z1y?tF_dX9NaXQmJ_)AS+`hSqIC|Pm^T>isYRTm*{VT+Q=$GvaYG5gxVsP{eiFc(yO zyW6i_FLn&Z@@KuD)S}gHq(WD`c4)r$y$zycn$3vU9wPTqzxF8_*L2pk>6ml-^U!vE zWw+P<8%sRlwQnUc|J~*s-$*iAxy@_;6$z#%O{p{OHlK%I&tO}~EOKrmL{=RrR$e!q zM|^rY%1~LUSH7%l26$d|ns>uK{w_TY~fOEfB4-af5TO{-~Dcbaso_-SY;p-=Z7*>tsk@EBNIudPy$80vw6>JATZ zNmr64_DY3fexUJmNMw04XM=00J*HHEd2ia+H2f^CM}ehUE!#EiGzk!MAc6*%q(ue;PmSf}h4B zJ2EvUOXIUSwko9=-JY1IP@jaKo`IJH*5GtW`010)pQ{Uw9@%AZdlrUDB3B=xg5K6t zuu+EmOmvO59Duu^z+us#z=iadK?Gzh$dDYQK&pPGEKZS4kL{U3seI3>m!ZO^0N~Lp$*-r$APT?Ukm!@GUw2M!YXn zWv+HPzrAw`H|mjdMrN+dIb#F5B{^TLVob4)vdLJbe6Os8%*kK$Vjc0x;>r`?$ng@m z=6d$F9yOM%pI6eL5?|M#V3_3%+OPZy%q6wsbaM_6b&(yK*M2|MYVlSW z9-Quw&((_0E#o2l%G2u-DAf^Zv|~1YZzI$>W471xWe!L04|kT?&uY!`8EmpM0I zntVJctMcxBz!p+?h^mA&JlZS6=-te{fW8tZPDNfDa^zJ5hr%?t_bAIA57PP7*7zNk zt7|S4r1W*DBpg@1Q@ZrNxX!lW|JnN0AZ>({RIWnrDXVfD*%wxoIBkP4CCr^Qjy@?G@AKPONt z2FAxuu|F&KR1V_{w`bR~t6g3)0l7T^VP0M_Idq@uc5>UFEfG4Flqau2w*L);F+ubEoaFJSr8&;8TFg;jV7;;<4-JwsW)ST;QE`&RK`dyE6o3fmp1s zR?JK#TOjk<;v>!d1XqaSR|~~I!(*)-jwXJu4mMU9?TElK%LqsL+i##9pum+aiGDOS z11v?1mGg8Kk+fGA-$$76mmH#y3vWaLoL0ThBiXaUgOJ-KU@2-Exwn@ z)sJBfS#xz2C+f)&qSy8qZL-~LO8+Zw(4*}+Ir33pq@xyYFNu!!i4q}ilVOMgp~h~Y>}Yf@tBWVm5|5$2`}k~m7}5A80e?@lJR}4x*!hZ%UuuOwABrJ z_@BI_o2&;aq(4I{&#%a7ddwKs`ru_m^<}YS*#}`-9_Ies21Iu}@^UY#|N#s3HB$`|3w56 ziXSk@yH{>or-S_yDO=RJ;i4jq=CQytJ-4WS?M^3tw5Y7@_(k<=pK*(d681;*rA7TD ze{E4eLgEc#h@}4&ENbX43h-c-mz*n*o-2?pJxAbOb`J7sop%Ep2d9_J_8uZz3HVeV7e1BSx5}4cx90#O42z>m zg6P7#WnQ@pk@!o)vvqQQbN>gw7km8@`?Zphjyub*_-uI#$`|)a>`pBg8+a5zv>)K7 zOyXYMao?-M5p;!r+bWz)?}*)YU1{obSBg6wY47|}+z+17^;kb5Fjn!;|Am%OTu}<7 z^?agBWq-GCx*HDrLH2Dhlka+Rm?huRyg#un67)v#R9W^ZZx!j(xi|Ug@p1YyFz&dz^oj+H;@7?xe>v{OkMa944YxIx`nTO&+K~KXtk@S)V*CQH zHahBq6{YR{UfX{s?R0f# zOYDo()n>ld6zjk;okYmq>^&?WVbAmBb$eUQs6U}%mo!cq?!=Kn5dJZEKyzJQ)H#0& z)vQWK^DcHVwim(Ry`T0G*t?V0Zrp88xAbRD1Kc;&^zp^JzQyMj1r;e<(LQ0u7A{8t zm`-16AG-S-KY6!+IVfO`G#@bM_1zABnYTrQkLN&H8tu8-VCfb%r^V&R=xI-TouB%)4{g{_?GPVgOWn{b|&^_;rn(# zd`kG1>~`=i+2!Cnd}{cX;Mt~1NAvCwzMbArJAtpjT?pSZaTGfEdW(XRv^&RQ2%m!s z{+TSj-*!z|c(+;YpqFra@Q1nLrl@FjQPX*Ta(epblXQ`;T|mU{@Cu+3edH!_goKbS zI5BihMRCh~ER?5tFG@Z78UY6oNu1*){%s#Cm7AvA@7g!P?`VAX2_toP=p52+5 z!26<(k`0T_ELjIgdK!}Rv-q#|fiSz*;tHX5duN^J1JreE+xzZ5%STaj^t`2jp1)Yy zU5Dlgqnq4wjbR-GoP}oyONBS=H|6A2#b1fB2$hyHT(E#!wO384>0^6ph*|J8oQtpd z$*&N?HNp-yclg0J4kw<&gcvPbRmKsg&KizQ4Q$FZu{)*fF2eT${N_HLilZC`>m^Zl zRLA7HNX3s<@?3Vbn&<6D=ac&^|Mu~=^ym^&9IgsmEGPA-wOC0Ccc(TVH@w#JKe_R# z`2*}F9_5vFd~PDUzu3#_;=_YfT}P_o!(p3B9NsOQ@6(yIl^Zz_$r(1^yZcE_KsBG8 zAFbAB+T1Pp8u`7_-j>5$p45CrG|^gK)EtY3Km}FUz)5XG=ZvyLk_F-Yc@Wkc2yY|9 z)y*S7`rm+k&|TBl-v4hvxX8QiuwT2qxz3Nw+2SWZ8Zl|m^iuj7+P)6>Urjvkz&|e! z?(~E7#X7Fh`6oZQ3N}2N`WNK2)^-Yc(Zn^S5qS=RIXlyGKE2*@tyn9l{X4DKfx`8A z{>|3w#2>g`uyR{5@BYqca83DG0)$~?3Vt45>+Ke>`E-a%`0wTL-xw6(lBc4AC|+F) zr5HyCpB)QW`u}%>r#3Nj_>bHDjp3vFqoVts;nQv2L-Iy9tz88JO zxbr8ek^Ve(Tp{_-FOst9M3Z>sb$kgGCypZ7pmPKwO!hOQiKF6_qwKKBlM!d{g)J37 zc?+C!HwO>klY zRd4sTsZ=xm+kVGcD3C1G>_e;S{Q%nk1j
8~`vf3s22$p!X0Zhib7g|%`j*R@cH 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 G_38P`c%DN4IiQez$wMmi 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⁣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 #r({^1bWR^h`|} z{~yfy?EHv2BQ-3@qjt|fBnftF_J>e4Km zf6*l`n7=Oi(X8OWb)r{vN2^=(y~;Ocif*?A+hzynA48v7%YsnimYVoos)&o|YlP^h zh;W$&9WqN11DCsWSPh8&WQu63X^S(S>bMJW3JIo|1PikgbRz-onte!k0s+smVC=3& z!FZMiV{^o{&CaYBnW;(O;JaK|VMhNw*;&`8#FiTU_nqj!!-+2{>HT)KQ483EE9)1h`cfCWDF7hJ5LjQfGtN$KM^mr@V zWgpHDR~q2KNVn`|R_MRKm06t-Nm&QXiF5zE^Sy0;&i;HoU8G|~c^91Dq-`0}_6xFQ zNZT)HRsP9q*5yD*;SdML8l5uEGN%l@k!2q7pB;I{^%#O#0xtbx2jljNmUOf8|1P-y1V^^gYe}xwq{MZ>2(O z_7;!5fgW?(-r}5o_P{p#<@MCD?POy2gSPo2`u2Ysza3B6{{+AF5XiUTx1%1}D}M73 zwKx3sY~TOm`0YZ9$VN%E4|g=(vhdqcB=}eH+lgfMzXiX2XXRe;o9UnA#D~)KN0z;d z?gztq?VM4uW^)5Q+bRZZyUlf6y451KjU~Me)o-V(13zdCorgy5$rTb?G&|dS6A@Hc zrDHA`5BEazCMh*&|9mltlDqi{!HHYBF*tCuv#(A5`7t*6^Gd#-!lIu`pkdUH78)_! zcDWiUX$_Z6Z~yPeCIrq$g*bBJEeG>AI&bc8>ecyJoAG#Myi8%Sg|tF>!R?Y+7>-QF zwv}d!$}V9{jdQV^e{7NS#)h5v%Lt$BkG*U7e(^lZsOl+3RUffDc$*sTk?NP>RC%1I zUfbq8s{F=&*%`Y2Ej4FwX zmTiJG4SeEoHBeS4sqH$xCqHQ_as9;_g1)K_`|Oc!R`{Evu3sNW)U0Ruz|-tvZYBVw zU5wSCboU0Wn(Ha4>Ye8)3H2`Vl#K4}^^}b3UE%qDU8!o~`Tm`yQ}pa9n4W_9{=KEO zCg!2ixh6(wdXffW(r5McQk@2^+S-&KF3ZY#uNj6a*N4yXZ+*FM_@qFr$y9iI4t-DG z_AtFNXml~CtqE_`OCz5t*#U;%?s@Lc0>xK^*pBey8mxRdk{UJe6HlG&6E)ac|LGZG zXYK9psBgmuhVnnjo~QYTSv3YR)>*AeJCB?f_{hNdU5T*hIM!`^W|`0Vxjq>e$j`m2T;TCc!#s?~htqyl=bpttR7n>a5U`hhm+x-xyJ(!x#}^je;_($A6BYC=0SEJK=J zw8&atB;R4CWY1RQIW^9fVm8>`Q@X~4QB6D9n`PB3Y*Q2_6X_sxYJXLG#G=J%+TXZoi0Te2zbIGX`Bn~Cpc zWmEYr*}N9-uy0CiHm$E`W%FgXy*Fx3$Jw+(b~yKGzDebNNG%A|*uRsLGlyX5A)=qZ zN~K&~R^b}hedcsMQDZW!(L@x#!^7&)#x^93^eFC3#4r-Q8+fIyID~l8zVF5>LSr zN+Kbr=x4lsYV_mNPlYHv;S~K*v!Ab3ZqnEE5rFF&=d=}OW8qd)5qNA5LjgPE4u&An z`<^1|Kk!SJj;c^KAf`k_?O0_}MI;;dMy@qkI?w(cMYzPU24Sy6@q?zQj4Obj%r{77 zxBaOuHKx8O{tl1iRx>ni!iK#iY#wJ4cCiT`xfV@X zHS_=D?tS2^F6;h(jvF#_c(#}diLuq}-fqc;lCh-Ri7h^#{2W<|X=X`5N~Voq6TQ{}^{+Qwi56c`}?T)+TovL;N zZLD!N)+21EVQabi*yu-~q1n(eT4_02|dtwnUTa*S{SE`~stRrY^yAs-|gx*m? z9c_H*RMbWKuu&h@njBh{13M_D?^g~>_4OTnU2nb~ysg4twNKB7OfqjP^c(zitkvCS z-LX+))-8q4>G`;xk1D@I6sAE>tTnD`Q>yiP+CkVUg)OA2XjM8clk&3%zh3(>3QKtI zRPjvJn=&`(T zo>GbG`%Yf&CV|32eh{PeZZYp@M#9b3eCr>R50zjce!*rez>E8CX9G#cAfa4tfM zOL@PYe_qh^{wnq>b!?#+N4VE=ZZ!vCAQ*qg>)h|*+QB~!*{WhfRC=Ji?2&0zN;@1w>PM_E(djsslP9{yJHFfHS6%`2o9t*cewO^WKNN#d=?BlT)E zHLtpp2KTqpjTh33D4MEu zqu#!yw~VnWy2^k;)y3!7$c-usjhz4if5%|I`BFterms1R6f~lh>GT6<^JCzEX01B^ zLYo5jTPapM;XBSBV&2WV5DT1>Hsb@{-9(fNDMr;Sx~QrupPyMJ{M=f`&xA^SnJ`Je zw@%{)G-t*RrJ&W`(0h#y+pgrsc;MA;mCTHKYC!Msq%Kk$*zvSV?bpa7^hvC{59>>l zezxe#R^1)f&ko{(rzF5wG!Ov!YcOf7gG?Isz=yv|Ky{0Vx2l_*+RR5YEWjA>EP*{G z3NI9yqJeHIU?|884ND}H{{UGNqD*BGxSA15RjOh(F-rZ6Ua#bbp7pnqd&f2+sf18| z4#A*RMVlpp_qQ_i%`k%K{Z$=`drWyuWF#38Ze?Pj57n$;Fw^;K*@Td zSF6dkRtx67L1&mD z9>+d18 z%!eF(IL4ca7SqglG-yMoGAyV;gPKtTghJ2O{U-hFw=bU2{ZaeEww9`3T1$mAEeK7l zB6J6Jup`H?1Q8Gb$q&?R=%oY7yc<{n=y=QCM!r;NT&WkyX0v{xN@*Rhj6h(1)Gh0X z0vptKD0H?kVGto4=n0V=JOUR3uQ!4EmQ>XL@hXLc`94#=q zvzOTkc9_SV{#SoE?(bi_X+L=ar*z}8+H;w{s<}|h|8+dzR~kpvvz(AsggIPt0?nT- zl03>aUsocGT86UdFcs015>Myhotne1hn(_!mcgUe5F_TBbV*DVu@!gtX ztgp^D2Wf=AjDPW9j>kEVnbuqMNX~();25~~aU@FxN2K#f+f(+G>zE_Ei;S~1wWGTF zI-FEtnFyA?Q~i0SI?QIqSoE2=d-xMn7XQ=9{$1qNO%Y;`DA)GZ?|zeGDAB2=YXi#$ zZD2W29c#bV3-2_++HYotL5l;nUu|7A{r;4xCFqs(E;>bexFQVKWZ}#_n8g8?gPN@u z>%i>$Y0YV>caReYOlxw;SfVKdM)mjn6`gMBO3u?uwxwIzG?Vor_h)@BGWrnBJs{eB z)VAftYRh1_#+FFZq-0%&WEL+;8@8xDa`ANsDHJ9a( z!GPwnEL~LlEU)y4$&dqUAOm;u-C5C_y9Gu5+IygK&9QPa8;5vnHNy=AvA9%2Y??va z-k!$M8Rami0bBg|nG#QcN8_o^c5;ksdb>C3JzUevx4rdEf6B9+`uV13ztoA$gcJL; zvz_vu5^!(~p9K!eUgB#lUF*O0O_tMKbxYyscq7zNL({naIlrbBeF&LNAPGW#C0|wa zS45rC6?gwjijJMqB{RPn#{_LK84$hVh^6BjM8|IUu2a(S)zneV$(A=d9G}yHzfg`u zK|aQ2&vZhtA7gLJmY)EUj_CX{PEi*y;m~95Pl&A%pl*CrDTTKN8amFdD5b||If2Mb zu!nuJ%zH-fJZc!vH{HqQYym87zHbD$qf?dKjIo8~;iG-dReI?#wUL=Hz?h=Lffvk2)wq8>Gy|@z98NVgUl3~cH0*9jyPO$#CTlmOkMHk!TP(>{o=OShQ-iAWnpihlSsm zL?|~THK)GZ@6@xR0B{Y4-$^lydEng#oVxRz$Q^>u)f%3A*#Ec07yedOyT2TUYw+%~ zW+VkJg^<|y5kAOFe{}z~2FTUuW63LyiC_YmkctYlIy)wufA{kTw&nrj~8YQ_flT-G6duKf3I4 zfdwhARLZNXcWOIieUsWRruUaBvuRKhyW(V>~6-}9-oaiVyFWL&KX zq1Js$__r5s`jKSeKJ}i3`}4l+;$d|Wh>gN-Ic3V~Xtv9z?6 z?QWBToZW|rT^8ifqpSa!Qot&PvSx3eQk&*RMswz#$2PI>(m?S>m41xkIy$2GCSXI+ zvP`tinxwme6*Hj|s7O;Jc_A5j1fE)RpILX!CQwdSiWZ;U-D^-u+v}(^E5qx|46oQ&@%ygI53PPF&(3wZnxKoLD%yMRHDtS2!9$ zhQc?pa_*H5X#X&j5Xt-81wvhZEqTk2m-@~^XVyru;G%FtAape6{t@ovmf++D zv$HT3y^IRA_c=c@ytE-Y!q>3+XnASFeIF?=U3Omqchv*AtJx7KrW2N#GHPeyo~TX> zY(M{`*E5kdJO*^mHIdAA+%w3%h6*$_SiGivaEg1fzCBo%x7Hhy*W!iq);p2wd`|B& z*0&5>W6E3}$)2O83r^m4ZDceK?@c=J?O<_z`#__=cy*ag-bI;RIeck z=~%`WR@X_JkQuf{aZ})Lq;oA@>*cvQe zG;!CL*I4F%yh$st(2qUew(1d9{?ZpWG_jF0JRfiH zKfjs~6mfCQ?!NfgIBJ=i)}AOCV^!g)@wy_ssyw_zD?(R$bq90800TXy8~c9Ihr zzCdGd?`Zw z6h*=|wnqzjDWIK1c}}Q2j?a8F%%ChfP@ltxT^(kPHW10YTGhV;A=!CO5$}!Hl$_Pn^RD_S>K_&XE2~3eqc|frqi@!&M#mh84f_2&Jy&>5xUN}1) zZqF5K`Jjbk$;ZFOkzBG^T}yH&8PN% zk?X?qw~~0g9pjCslGRKkW-WR3ZP0sfYcG%9MGU?+nTV!t%CF`Nyjx@6rPbr!(e3Xa z#jeZrZn-y~p#SuO@%1L3WjF|$!X>a^7r)V8Zb$OpC^gI;-PS+y4%Ex!USl)9`{;*5 zo$v}r+i78RNL&+;^&U`pkXEbzsiMvq?uP0|8-o-ZgZA{cBxX(0x3mN!Q%46v_Y6m} z4yzmdwGn=02}c$>k>h{xNj)M)67F)3w79+~1~kO;jO6^_&#nV}O zI!jL(JZ0!fjz!qQdZLDzsS|$x!%;vY@UjrcEq>b#9cLfy9lQ!ghF|7I@`^BbO^Wq8&#Tn&xTV3?h4o)$|W$_3XNVwu#!=&)bax@s_+Q4!3WyRZJTa8&21+|`~Y{EBiIyOMtzRg zydGrS7C63ky6=OI59PBhbJQABmE24g!YqP%T5396W(n_MPfC`5PNTB-9SZL`f>9c> z-=0yO&rPa3=Hbt_BrtdQmCz5wzo@r{P)iQd$r;l}OJ9Zl`JQ(r1YRP-zfy!>BBH-i zL|-C;zY>Dy%(75VP7QJ=oC-8q9_U>i@aLRO4Jro2eqk2tXg+c-;}x1ty~u=e0AwoE;f2=(nZX+pxV|#F zY9SmBv@y8%#m3%02;eHC&P%LaPQ6aG7WRz!q}aFoC$^qZ`BBXh<===o?{wwwi{I=v zk1r0WyOH`lsPffS;r?b>_2nS&Ww*^kQ{w=!vquLm9|V2*=F%07J}>gsUZyBQJN@__ z!wCy^xtjIu89K%=^4-w}Sswf|Nl7!2MrME*buNeb@IY^iu=i5Xvrbxw=Ns)_k&Rt3 zJ0o;r(99u;w`1Kayg@|tGO_^dP8~8v0dhv|waLrlqx@G&3`{c!$R40+2l5K^t}`Fa z1G{#~hFmhZBkA#^Jg!f|BC}0I|V<<9@6FWwje>9?M@^Q^yhQE*sR`h|^{r%(Fo)?qGhDDc^d7e#^ogDG~yc z7_fu*@dn`*Dre%^qX9T>%Fiwb;XuI*Fd-u+G9H{elYpV-vQPu~fOY2=#?`zprigxi zJip1|yhIM?#dA299L~)t_bmyQF0P)AU^*i9vSA9QodVyRcpl`G=bxK*u8y9hF{^_~ zybF{1^Qi!lpfB}|^@cdKT~E!%c4n>UWRU=UW;$9OH)lK<1;XE&dMZ(4lyy&j70f&K z70KS<&#W}O$Tp+%{=Xt}HJ1(LK|*?KLP%c#yL)Iva*$oY=lCESV>-iu(GFe#jPMp5 z9{m2Z&Fz@<1v%jqvq-M7oEvZ zm|WN~>38ZD>Wd~yk8K=C4ynAfpH+XROOhsk%$&mO6dqN2bu)9y!-qmUvjVTs=)Hl^ z%a@t5u@V4u6N?Lk{$fhvuN}u5JTuC1srH~7RNhaMSsw^)B zH);eH>n>+}87{8^%@03KX(WnqYpTgDuDD}2QXV%nYYfL;c)BGY&)1^uZ!Zx-f6NB8 z_#gflA8VH(znVagsl>s$ho^FJ!+49Udss!5A^9qOkq~u|3{^&$R>GeZ47)JgR5JV% zpe~2b-Q0`76>9V2wls7M+vS@zo7GM)nTRtdVRmQyE$Lm&AjEW27~4T2^j-Mg$_x30O6j4S&|#?`lZET{UxHSh~jEbqamBaj4|OMYix=`0mMbMvcxTS>#$IO9EDZRqH{H zY;b&A<;7K$!M>%xB7j?Nm1S{D?+qe~0O~3*zGzV**x zw6Hhz)-na{Z0sdctciCh>J@m?eN;FR2=(Spzp}j4qd2ts`2K~EYdK7F*>|#PYCHu zwsc=tr*vnR`+9vf0WLkhnon{$;j6iV%W+@LNG{#JnoGDG^VNKi3yz8}Y*Dn?ozPG#{;$+UaygrvhN|h++da+hcS$X|y z_O_qA{@Zwe|=I?FCtaX2zb+!jDAOuk5i|C++zdOFykYqPvsn zf4QSy`p=Sh-}HlLmVR1)%uS{LO8@ldq?O5qsty-0sr zV{iNQM`iS9q;K0li}{p3b1Ke@|4v?e%@!oiejmPnf&8ee?x{~@Q z^S6VTA;F8v%nPKAmE!|eHa}T?8lpW{WLh=mi;4M|%IK$7{(a^7=XWhnntnvd%Il_P zGT}KBlkDqOX>{st&A}<(sJ(IdU6xlQzmFlQ_dX$Wj_2F!mF~QIcS0dfmvz9j%IKHh zt^B|0)1CqiJ6o03o_Fj_wkMFUre(CI+B13=I`L`y>kQI=Un>2MQ>FjAcS~P~-K6M2 zgY2a8|L0rD^7jJFCzb!i>+e$jGf4k)sr0q9x?lR*pMz;z(~nG6yoBXWeE{e zOZCT`(DE#=09*gDd^YSv27mEq>9aYvQK!Iye`gp*H!Nko3SaEYtUcdfu?dwSce>(S z(kD)}iSt{<`Gw*XVYWlAeO^eRQ^^{lH{cHdr=2CBSYYnYE4i3yKBnM}wEPvwzm`M> z3`pA=Y2;4Peg|i9jfBs=5gaU!_jYS(C7D0SIvlk5CNzA)& za!m9t!jXlOOkckBOVIL_W|`8gRDA#QA(NDrPNX7tf?0?QBb>U7@7eMu4u*){@Zhmt zQ}~iEHI8ac+(G}T@x?K(8Y5aaQ$#VnjAsjTxX!?v{oq|c)e6>KoU6SP%9$0%rkI}hJGon&P^Q4Ug`TCpR$B`w078jaylihMOz zcq~52+5AE7#ukJCge~abNJ`Evra5()IQw``1O25EQi|Ts7um?Miy1rln=%g_`Lj-q z;^?cn1kq-bn-G0pQ1UEvsC0ZWY>(--1dfycF<)y@kH62=V@c*v6S}r=wu(#nO-hus zvhI;W*{rb`Gv><%pl)3dURg46^dz&eBJyPphVg~A8T-Kr><62%A7G+*NBv9%COMHm z70%|Nx23(9*1P{FeHyxoFM$PH)q2O4(0UmvMVNW2&8(a2tRCJc2`%1``n|#R?X&8) zJzh=f_w*0TH_9Y5#t))q`yX1RhLFx3s-MJ)Jby?Fz7Yo*c1PAboTgxA!ZI-9`=8G~ zyTr?!WR*`QFj%tJlQF#{`GFhnY#%|sYVOYB?rY{QgS*K@Gg@a0=lPs9YFXH}mg%0l z+QI>*Ri7;EBKKh3qoO;ECt9#PR8`BT3#-`<#pGvnT%)|8ctjFa){KZ9p>6D^-!Pw$ z`sA}Gya zCWSux4K03|wM_QVDEy4kM9x)~Wc+iqCdv`itixBNY#J;wGu}GYZ#jJt=ITa^FbtU& zQs^>*w?Y@~Y}f-CMSu1OO=Yp>4nXNty8{QJI2q^59N%&Qi{?f3hmrDt|6!eSBVbv? zRluSlAgZ3G!g0OF6q4A`E^4tkKT~R?sn--n-7N9m)tVC(&EiGdYK{#Z8vyx z6ugOnH*5TJE>)_KaHaeTO=G1uRyta{{YEh7oFAS7b3OtuX$M~hxBsBe*RNBQz=BKp z8lBo8yG7e6C{e2-+Buh{lhav}nHqT7#DtP>3lnDsj-ODySVLgZsnXc9giZof&}k&# zQEAZW30?@Dw4xNaR^w}~^?c?Nu-Bela!V#`QN}TgPe(D1rR=!|zbcb3_4y=BU6+I@ zxU67mNli<5k4$@E+xFPb%?PCq489(L2GcHi5KTGD_>wXqNs)9J z08REG2{wN?9oY0wm!9?4eux6wr3QaWpp6QQ71p8+6qH08f*%yxe6J7MnDN#}UWFho zWdiuznd03IkEhF}R`8jpfpYb$u@2X46xw9LyPc7=E15UcUDF4SmU*&-6OQ?M#Q^6d<7GGm!1(#o` z_5pH^=?rX-<@}+pb7v~_5Bh|*ZS|}|4^ikwLThOgvsn;ucDBwk?JI1b6OG=D7vr`jkbFbIw=awbXLq}1gqe0{SJ$Fpf|xOt5JD+AX>7s%2Ol2_<{x5)N1iIx`|0+|*87`f&>e2M#-%qsz3qCOr#(5DR|5u-n_nMC* z`4}ysoOaQnJ(5V>Hc9(EZqjmOrh&DDpGERzTIf8+@U?JA?dn9nlhFL=w!rm)FHqWv zfg7OJkIR~5X%%-9{nWq5qhF|oBI`!Awm+QeFI6YiUri4?top9+}sS#5t|_~~}*?#*=kt7b1$l?GIoI^l(7+%<*FvsN#S>Qa~1e60OSI_jK0 z1+yJBPrW$WsS7D$JUCOpSDAj8!Oo_^YadB(1Kan%Quls-!9TuxzaTU7>AQF4^hEd0 z3z!pKV}~&98GA(9ST)aS`hMu`scv|cSwwJ1V#9MZR^5;C=zvJ}I_|M5*UK2=G&h;c z+FhYzSyB)E<2s$vEi>|Ih5hW{PobE#3j|3aHjZ|~qT_%51@)X)+H|*qFX|KA!v1v% zZswN>YT-Vlxe^TMm~%0g;zx$fx72&^g3eJ#4foWG~Y z6oVIym9Lrpe^Wq!)CrV6q)7fbpa-023gb*WAhm{;u{YoN9S+w0TB==0Ii(O38w&G@rM6WuvAP1U8f@@HI$7xQ*Fpc~#(q0O1w+T2K>O%{xX zeJm7XU-JQ)hyqRWhoor4m(-fGA0?(%5;ooIxxe-+q~^TJB$odCPH5#>PQl9l%Lnr4 z;}$IuD6-23^2Xp3Jb#-@ZBWLKzsPW< zfS8GO=+9%MlX+A>u}DQ(sI4RYIX~34D)k(WhT49gdUQe^vzhaW>B8r8ErPGdOI;`!=1*}xF#$QR}Rq`a6N0J8DJie;-mCe#`LQeNJt^;+vY`_3=Yr98W3^LieG)^8g4Kb%0Tpn z3+Y$APTNNszj~Rv+SXu9 z(e_}T3~l4_VVUtD^WFqFBXd-5`{e%@dt0^%)7z!}dOKm?{(JhH4Nb*qeLb7J{_*|I zVN4hLIQVp=Qg`bf()_*lUwq8NLCHujf|_pJKs$i=ZwMmW4W<<_I}A7ye~VEc+FAZb z8t)Z6&}-%hDx-5Eb_p{G`j8l$6Rr^7nq8V>gcScAhZWglIgGfBYjndMENQrsJA3lM zC1M(>1xbAoC5a=zvA>orLcMHB!$dZ~OwTe#8EZyq&6bI5D8$d&p`|tZOz=+=D7GFy z5y|tl&sn?MaQh8#`yRX&&5+iXQJW6o7Nw`r z-qA1r9g$d&SS*)(`Jl3c5hmdoR2{N}$u= z{de94@7Xre2kqe>r^NeD^u_zkYyrnsXI3n{gZ>TH{nE&P%sOhEdu;1idB%y&nI}l`Iza*NW)HnRwrWpvQ8@%Z#8m zlxz|7M$<1W6I|jCX*w)n>GXX2Wi*wbcTob5{mi7pa&;qV@BO-wus4LL2zyO6YZ3O4Bq?$Fkor-&T<14(T_tUG47tw7lNnOq){ruL z1VGJGHgcf%&uYuc=$Gckkuu)WwLg^MFf#asS?MFuVhQ68`^Rq?WWQ6sp`QF1S0Lqe zs6+`7?_R{Vo_-=;FCyMNDvyZwHW%yW=9D7dZ6tLH5s%JHopO`dH)Vu4y9N{qk0r_z z`GSO}uIE%6vv~CU61zT>b)v|3Wl8z&zhc^;@nT~5oAGJoJ65+pMk>QK9*1v>e6cLF zL-JViIX|>xRq8psBDC}OJdRZGkqlqScarVu`A^DsuUh%8NAg`~TwYAzMN?Z+zVp{E zq;PYRX2iQKT9Q%5c>mY{#sl)*KFN0ooX1d3Ub6Dta^$nikywUFxru|}^!dVl<>@hht{=n>4 zlul;Nz-Sjsr;Lu0?g8-RLymGpKUQ}z)RUwqO>xvtL+=P2Zi3VIA}BD`VX2s%Ryx=S zR!>`4R=?MTFC%>H4T7e_Q(4?TJMnrJ%lMz?xR{ojZ&c7vbC#8d>)Eut6s@{urkMd_ zd1$v6xjid7bs zv#(q-^Bc}g$pOT4?P zPbuI^l=3Q4iT(f!PTGE8^po@Ws6P!C{fTh(r;Ty?d!M}wI5&RPP|%+aEzlprg83U1 zzh=g-Sc=S_3a&ronm&J&#{6NL?bS`wcQ`Jdam3u=!Cf(k{_zs!kN5~+HJpSAl5rdQLp?bAE?QD6J|feL?)vM_OXDDFWMS01R>ssO|#+#%xr6^9{v z%}14F=K(a9U5beh^|kWiKkcyj_>N*8PR2Y!Oq_F1!=pE0aU8eygkq|yCZ_y9Pup)k z>I96nD+y2g6n&Iq3hB*>+)u>$`0e;ynn*em@r`~v4!>{5mB_@+#3ew$f4lsNn?9S! zHtmTxo$y6B*OZu3v&^R#7pwM?&;@#=P5 zL8;HfE1_ZU3OPm}JRf)^$2U~uH*}oA8}eWOhCFk>f&23}aBjyNUa-aSeX!zA(3$@p zzkkkuXnL`9QT4ZEUosw${DwgnuP>jgjpWOHj<2D*@>M|#OSzY-%>4;x?cT_>zOuPv&kgS{n>&&nfOyPfHzirhGYkJm&#Pe_{R}IGitlMRIvxim z;x&N%a36t}xDWL7vZ9^Yw}vQFScsw}gEY7XNQ@g0`!PRpPp8^DuZ^50(BTWeH^Em^ zGJAi|+zE`?PCg7R8Gn|&%PAQT&(OQ9lJS`fgmu{RG3i}@jOiksqV&#p9_0Ts32%si@U#PNH%F%pnd%=z7S(_QP;S^m#p zn*wznJe%*Xwy};Jq)-0OtY=MW9&L?P`p}Gv{@6Q3Ji z=7zR)VzS=vM!wC$#shA{o=lg88D@jtJ_57h%y|_!(BBBB;DE!-Pd?e5J?e0Z7VP?t zoXpV(p&#$`-zW!SEM_0{w*}KCCKB3t{)g`;Dl!|IiFQTruW5;WlQ*Lds~G+{HPp8KQDb5@ zU8LU8nis=^*w=D*CdaFfBEBDDz;wIR$Bv!p?T-8+=x+p{a7NQ?dUR&i><AUTV5la#&#aoc2_vP@52?hhkv`Gqvx+LJ$3iQ%NZ%-v+U|zkJZ!&`DIA*W$1Ke zI&gd?nc|@)Z4xCl-=zJ6$CbNr0D>EutVrfMo_Qg&^2Grko+fiAML5%VrE`$?_m%W(<++>wh!4kVByZzFTjK{VQPuuaxoY7BA6(xkJ)I z%A@%A3Hg#5z-;c^6`jqdilA?wSKLmGa14NIW`6U{Zw|kig#pxMB}t=omrWl*hMf9+ zwn^Y{^lB2YYq08FUsGtu)!M>$Q6PNlP3X_Icu6aKYzVn0pOWiUt^8sA^VHpn>Fqm1 z@qwCC_szVzYgn}sz8&g41aT?X^(ikX~eTF!R}9guJ)Ve(kK4hL4oG+ zWu!8oE+Y^=yKY=29{n?MM{E82XLHF`&5Tc&bZYt^K|kNYlg^pZ&*ur5PCo-anK|I^ zqMyH%BDkBChi5=PYw_RnzlVN8q?}F%MHK5@>E}8koPvHj$7HhNQ6uU91pQQkIpzG1 z=D(2tycGU4m*sSBThquOOPlXL1N_MYe};lT!@(cc#WNrJF8DJ%jz3rZ#L&+zr^g?K z6#nEAGM#?Pp7}fJr}tk^LqE5i0)L+P@u}#CjRa2JOjeRN#{wL|HgDt42Q~~^ci)v4 zZk|?B`o;5(j5@czH~0LTrvCb|qf_QjIQD7^|8Jqq)dwjaP&DvWi~sZl$F#x;%5s{^ z?i>zqB=PQV;s^QkMv$H6bR)MGRn*;{AE>J;4Af1SDvl6nD)$$iiY3I^T@ftdxgVvf zhMhHfJ|#PONT)@ZMFjtfK)7mB!2fzh`1UD@hEePdyUf7mFlLzjIGFvo92^idk25@h zzPXdR>$}fMvH(u3pI+S%Ju6V>_b&^C&%>{N^%P2L5byD2nc*ow9<{Ws`2|NksK zxBlQv>G={em-#m=9{8+tDq_~#^0FN^~bxdOLO|C9n6u|5$*F#eK)G@JDJjFG-Q=5UI1EyotiPso!zSw#U5kHRj}I)>FBthQ6?xQD z#NzUKmBQs|64hrRdCww8MD;|Kz~!N&nJQXO^i$*?r{ifvm}VlNV%s(#!tU?OX9Nvb zcda9@FyTk*6$Y0v;fI!Tm!4SX1=JG_1iXCI^hD?=ON|~?_=Z@9!@(L_ErZr@EMvy| zMy+YT)_R->Z99(Fwxs{Q(dh5Ydb5PLdVQ9;ox#L&_4*up&)FK)>xbHV6tc#AlxVgB ztghkAqWbDWCLPyvB0|y$B>w2I6Oi8MwFJZ*&{FfZb$M~%bI|m>tYt4B6h>e5>*ck= z=}Wtw>=9P)zw+W+h1aVe-1R$Q_J}(_eW`H!o38}Ah28fSe0N9^zyDTxE>n~I-=XKh ztdx8YdfxNcd(d;%`KP7ly?Ljn=f{=qKbW2!(o848yU71t>G?t;oGCr$li2?pdj1eo zJ-5vpdF0aLPZo^&(4r~c(qG(q!@qw157$?HbHNiIeq~SD7l+Lp^TQpzkN#%+r;C30 zc6o-0Z0e-1rgS0Q@-o9usst^H4a7N+@g zXU~Q#xy-YdXYA!!b8&7#F*G`Qid7hSz0Z8yP-egUwF6~e*B->fX+}eqVY>})UmPwk z%$DJ>BKP(@+-h0Fp$v?NjJjxeU+9E29~Pa$e7Gli-}j&*U)4>qUs5opcySaQc(sgs zx45aF5mD=5q8{Pn6oTz1diEsX#7?8x;N4ptw)s(8@4#&$iCfsB?8NQgsUo@;x|f zlabd{T66cTEu3~la-4!`{{K=IF!#aa4Nk#T|Uu9Y?DNJF{s*FbJXo<*_!r4zVGheTVjB}j2bAIMT<`>RZH--_s z`qYQ{l_$G}5F8Q1 zSqD|M-OtzuossoO_j5dO^K^H;y_w(LVm~Ji%X+fA&Av#SmsQ){X8y42|e&-ah7ieO9ULBR~lut>h!neV~Zkq ztmv7fT^~RUde9#Ests?8{>!BtKRS6r8Ll2x3X_R3h#iRbj?&2`V+$R;cn$3nhK+Ip zyDcWbolF)oWIvS_LU}RAs*PF7>u~f>3K?p2(!$79wT|995d9G!7n1jYcINN~7mqh< zV6c5&0dBF7K<*ED%h7Bqu=L4eEnV@`t2f|Ntg9I{@PDv(z)6d zdEBXcP-NqTKU+rsKB&gw`n_lD_3`J-H>N;&`ICC{a@JQ$nDF~TK0nt|^U;OepmQF@ z^{lI-55ZtY*;7;1fVj>`k$@L@Rmr=Pb;KA`b!uWwPlMh6#({s%1C1N`EajF(UNx(O zlQ~Vs47aJQ=|G`mu(gM}GiMCeA$1%!RT$F(daY_b?J;x;6(4fuC_1w?NJH)#9kkJ~ zJrnSU_M6+xs5C)ReDH~WXkUE`i1L>qrr`w>h zqM??(fg6Td{BXKo(*@O^z9ur7670(Kd`!1<;8tkSY<6XHNL_Nhwemmn)9RekjnyBZ zTD__kOX@g(>D+8~O=zq&)*Lk5J_6jbV@>PL+`4B?AC#Bg#aR0^Z?u_-Q-SP(W=>s= z8D{y>>IdyG%QwTU+gDx8FuTMIvs7!5ALDIkzwt&bDbTJ=Cu1~QPw$f(i(9nVP96^! zbZn%J4lL67KH5FOj-agAQ2Nx`C*8<+h{I4*UcG8%Cgpv5v}q`(4;8_jTs&No^i&PS z>n~#%f1_E{L}iMc2Ns<~cf>FQ?qKvI3Y<=o4x8C6*>4ePp3V0O)WW3}P|Ib(Z}ci* zD)zB{(d+mALO0T66cyo^`{u-Y4omv9*GBhmVhUHH2b`w-{+GVNSq_&Tvg6y zu+SVb)kd#5J2fxP@X^Ru^Gt$H$_uCR>lNO^uU(nk9+>7* zBF#VZ18=JXoXNMAA>)DcYCz)%)PQ}U6q3LJJ}nF!w%n~(uHeh_6r-hxkCkZc){+VJs@+T|t0e=hl0*}`J zQHOPMSa-vYOcQcTbTq-zAla?6yy0*(b7UW`kowRLyPz3Vw`4OkM*XB?kh(x^m z6ZfO^wi4pW##lCC-o2fNr5ZJ+oXyaQy+N<(po!E+i+38k|Nn3AH=s^u@=_=Agjysi zX}w&SuMgq%(I3DMTqJGDQ81u5GXj(qUVX6hI|I|>nJxuWZG6nrvFLRq5uAK`84mG5 zn|nw&SoeF4!-~?cgEY5ucTEJ;E8XdT@Ma#=6QH668Uv5h%|%~M(c|X=DVRCk>(E+H}a#XE;N&YH5A}jbodK8EBM~KX}8O9Y@VaN?=h$N zaQoSDep-k9ddTP&H$3`{i zzSk^zw>~N!SS%b%f+6y#kD{MS9#wDDRh3Dby7LR*T3m_hjY%IcN|Y113G~{UK(FKx zG2IFLVo_#){4%f7@Z!lWYRUwDZF$B%82sAu91p^;E%o+h{+1T|If-9e+U$!Yer@Tr zFARQdN#R#x9KYl#4E!3t1zGkPf^zChKm59?Gl5@MCGg8F?K%a1tvZ$d^m3D`lcqo6 zPWiGML}Q7rdZe(3_DddXj|Bc-CQ88)r|#7sDRM!xQ}@H4n>(C`H#%V)(kV*aqrc>( z7b(1&gO1*B{3t?IQRm1`!A6O!#6M|L{lXA2i7Frgc)N=f}M<+3BPcKKyW3*~8Y3$JYK%x(Ia!DCwju7sVx6IDMC0@AR z3&&-hBW<#5g|Uo8gSoGp^RgZ(tT)LMVY`Wd-!EI_MxDnJ_vt@7u9R?e-Al71^7Qu3 za&y-OIkMP4|IHGQf;P101lfj?yQ9MY!VX4eQIJCT=P%{s3a4Rjj{gM~;%zT-icL|o zg2Ql2waN3(U(JrCO>RRh$H}Os0fyX%a9g~^8^%#Si1Zsc%5tTbyUJNGJD#oMYYzBd zScF%mA}51ZbVKWCouiI_{*f##aP@dO)EPo61buA|A6;LUle@xw(Z=r`;1#Tt4B61Z z?q_6*m?AMeDN0ioKTAr21xw@gX0^Xlu+H%s0`OndDNv=1X=|Ftl~&Omz~)x-#0XH1elX# z2^r)B3rLOiqn(c4Qc~564@E&=v$~x)hBA)qa>I*VP5~%bCd!~IL^)Q5RV0>&C<&Ke zV&9`z(@gwltpF?%gtD5nnf1sHg@Ft~YePhBdZu}h7fmvdG7i6z{|$)#pJ z&rlG{FP$(X$LV9le6sKv6Rftd&0L|eZF>7u{H?|nsS+ewa0TpERPl1_sT;quR~hkjOze!Pq)E$SNed5B%es+T5no}VE*L!vZ!eYyXI zWf*6Qq&GRL8VjBs#)%0eD+9h2pzRLUD!#Bp#O6`kEKZl;<+>7Ap`q7lqSt$LH`N(} zA4+m?Sid`r69X{DZouCy{omY&co`n7K;Bi9PP0x1jxU@c@%>ahR60X$q1m}B(;X*l ztZ+hWN$!L~sf-S{xv#kkQdHf9s|?5tzxvS1CdNYyD%^qvZ4CGAB_06w7b3D-MO57_ zE=J{4TL#nYtXtZu{hLNI1STh}TR7WD1aW(~olfo4xeCo~a zb$#zRug;1OR5$macj**7R9tim9z%TZxKzOP{Z$v1IlH;9c_^^{`5Z4pYC&JO6Iwlh zA+m`f62tW86*LD67AJsE13kPhSkO2jl8whV01z5aj1>6A)tpww>3dATLmZHyhAQ7# z#@hxGf|Uk9i3WjVz=yIRQ4n%*(6`vhg=j^ahRT4{jqZ^hBChbFpl^9FmvN)~i~}st zk$XZm*~JUAnSsW9PDF5COjO;P+CeQ1CWa=}JXnH}8c15}{!at3%*q;V+A^R4r8>-!)iT62U4+3PaV}DNMH;Y7szg z%wk(ouwc0Xt4HDh$-s}}AUF*=MhzAuC;`T10O=6}jRtO@97_%b2Q~R&5y%Ww5}HZ^ zCR7?QdUa15V1x(~z*ujh$%!O!Ktl+Ga&RKFo*k10Vc!K6+2U^*@p2QhKQM~m62Pdl z9#tqX5e5&p1`*-lZyK7!1sfE&krs3%Re*>qyxd~~e@NOAZ5kp5eFwZD^9|f4a8S?B zfC1nj5&$5$)Pi8E#~$mOf~FrhN(;Pz01pYLg5llt)&{5(uHJrn)N2CuJl|o9dOcq5 z)^q}FCbc)+h8+ybV^EMd^&SInpxz^evni0U&T)pw12A`EbXR6j4^s7Q_Hr8x;H`GG z2vmQt@x%5UGVlUdyDQ^Fx(dcFB8@?$ha7FOjRW2$4^MGJ-3J;B;@J-d@g#QTZiI<@ zxx3xs{m!s1F+(I55C@|f@M#zdVnx1u;T9Q6j+4JeKjOt-W|=be&T?|Qz2c|?;@#x= zHfnGS7r5Yo#mR*Lw^Fo52$Go%is@t73KEWg{#Np$S3B{&?1@fsxl8?m1waoZ3m5_J z>%7SDD*-2iVc2R6xJ-zQg@uB7&`*j!Ex)H#1mTh#@zaS4f@tML^5Ph2guOcqj z78UmcM9YMVFWIgY!6Ab*AZfs1_p4R?^H@$iRfG5BfSiBwmGw3}}|dI2ptR2}uG+<;=GveP}S>BvH*jzX6`OLERtpHMqH} z=!kmsJmlJ_87fF$j0n0E{MieMG`qQ*!H-6T@rsd#Z8nbyT$Lg!*J^bOKw-cZzttNrn$FLpS7mnJzr}Q8yLJ^xB+P>SO7Dy0u2H> zjp#`r8qSVB`W-1Ju0iHZh+xLW5Db$y?^7atixJXcM}Pvo$FPRU)SGaqf5|699VjxfWH>pRWaT7yDm`It@D+^6R8p z*&)B5j*JiaSTHwAm#=pvvoNVq5@ZjZ)-QO&SPZd~^fnXNG9>l-YV|rovxg&psg3ag zzbU=fHQ?7O!Ju!C3&oszxTmX$v^kG4V2q1CIzpsC@z1b2|)BFgBT!R??Rmg002Z| z*ooB@#e&E?Kh9$k${^H(haijyKnHk(90nJVFE6O@CWB5UjiGu*OC%SbkzblEQ9?gR zloIw}nNm=vh*jx3E3za#=m@_lh52#%70||m6&ZwTbbamO#K?#!kVx`yNJC%3HEHqa zN^b6PMmqjUb`yu7s)2yG+dzEmz3Rey zg2e}%VKf#~gLIPbO)qy#I-RkB;)Tst);Yj%#ufm@cp2hKhCaEwNq3IkA^%7!@fn#s z$c4vz@fR_x1m|%J7HO)v0cwD_!z)QuoaZ&c2lvZL+ya#0Md{RdRP$T2k$q03;gzA` z8HTvSDTaQ~?`ZBGY7UE$$qAMQ5hC!Ec(S9UWF47Ol7kyI=3OfJ040QiZPY+^eM{|S zqnmq3ay!1c3s$o<$FMTGg@DZK8GhE06)b3hlUa=lVxR*jMDh@4TH-Q2rI8&Z!P?AQ z2 zu7_(P8U*>yKYuTz2k7ksB{6mM0D()y^`w?(dBuCYVH6z?%Bu(}2DwU1)G2OoE~;jH zLQX?PprC4lNE1_&m)p~aG)WLvxx2{qQ7n$3NBA_R4S;A%!~_h&$sF z&ypmCV4;&fSFko%@CKxUGgoZU$rVfUge^tPc3p&+!^xlf*e_`XW)X=&9t1m!JoF|I zw=pgVRVpTmn|P@~B4~(kMo22rw=xSWP?oXqLL~;>#^@X9213FCX&o6TjL3xr&1jmW z0-Dwvi!bil<~PIl))_e_L$(khfa^OR%;jX^7tk)~TbrWHo=l)gDAKu$vUdo@{4Zcf zga<-HW9V-hX}6&vb+#kxOQl!b5FB>U@vRo~@q9;vh;2#L-}N=p<*!>E?@dyC&7hHk z$ctgAT85=|2O8n|CXtM!j@vJVY&gvF5pAJ_v&;8CYHO+Rt71qx`4+d_?1scC^a zUaShaJ@Lh8S)xspI4TBtZkO3?j9a|c8HPD&In<2RM|?F+ems^!8b?T@u?5oPW0J8} zU3_r~aF!dRcL!<6qJWjv0t}_=fS>{SR>~L*Lq3SgdxKcPLiMZxXpmnBakjYnX%%`y zGgEmlBY=3MQH79$u(-CxjR1@QQJunAJ>G~^EKbtUQWqtpi!(?^;{X(s0j2|G==xrRvFfcd zkU>FqTr3GPX*uCX%%hG|8Uw`Wa0X1Nm2^)BfMrGkmRAL35dq}9k+<88>W12H`0FI6 zcnSQ~;mD(>R0FYGNA^#V=Mpb>eTuxXvO?ZQF>r8iVa!yr=0nb~E|dgA*t&BJ$?FcB zeA*PzHBw?XL(%aabaR(ENzu=dVTtOXf%)JG%SrgnENoF?i;SU7B~HO>DQ4>y9Q})d zJLJ@Yv}kI7RObz@H`w470W(p)64_*6zsEo%!w7Th+nDf8kfiRhR77LCnnCzts!1^XiPfj9svOKkA=l6a zi$GOl^bh*B2Xptwi4XLX0vQay4Ph;YusXyaT^XCV0=I@hy<#B{GCDI*`($oG;UXkv zFf95~B{oQv$PqvdHU1Jc1GVK8M*Kal^cRR0aNciq$ga5U;7FFImgwqdtU|y^=@U{T zd!PbiQSAapkM!fD=)!0*;pHzH+JgS$Eu$%?*NnC5H5`k$!&-ykzoJ)(Fr}d)TD;-m zyHmW?8rB!biD4Vmj8fi-T`X8|Fj(-;0=dabaZ|1L1YWX4P`-U|RJbZ?q%h2Y24mY8 z)ZuVEBZwdi0Xe{hK@KxRw9$YKv*wM4Q2Ovwz$cE2ru+M73xFSd7?46cfO;Set6f5y zP!d>W5lKcU`bnb$Ryw87aeb>$Ch6OT1S@qU)x-5SQTZJ7Ns(VZt$MbD96zHFS z6v6?;*HJ>r;swz0aZSw_KDx~CQFJv_r8pxrs4>YXa6r0|lq?5@I$%&@BnA8dJ zGc}qNRnv&YjfQ<%uC2GG;e4;f1w0QbO$vyXgDw|YTMoL#biT;AL>NfwOoZwV4r*p2 zWklv~s*%xsJB5t06|PDb8lezb=* ze;_MZfH`7Muz&@|!>?q)6YMiP$v)9sWz0yhPtg>>vs4UpQv4;2YBAIBNXR+9V8dV? z+;gdiE~!pSfUEeSFV`gYm* zNz89=VUQK+>pTJ&D&}d~`eZ;c+}XKQ@|I+|lxoV9r&Lq4!MBAgx+3A)5TnfMp~Ji_yC`dGXS zfH0OV^f|A1wORRq@j)veFg~0#2Z*GSm;+p8IF$q_%RgD%;pFbqvm**|wZ7pbO;q}4 z!yZ~6v3EZm0j@~p6aSQEX9?YCqWfO4nyBHQdlExH{8OwaH_F_*mwUv;)fH_mEp!E` zhhs<^6vdoe6yP1TfW|NTS_n42zS`Dk-D|LuP z4dE3OmBsc#6~jWC3=74#tjvLFdgwIh!$Uu{_`o>4gg7`sm0$XBvh zCb=l2Kv0nda$h{!JxPTT7AnqQSg4_<1Pdh^Y!U1sHz>>GmSCZY+#Tg^Stu;lGB~BI zC4DBAVXT&W*2WpEietDaC2Qptbt5-Q=93K?vj(q4#|cg<0@hqm#v?WZIH@?Q z>s#jL?$ujyaF4gjFv(0Gu?!YII)*b;5Yr_LN)@otgumsCZ?Q8kgIsW`H+nyysO zsc!LN5KOP0BWd#AA%O(;Rb?$-+q>XA$M9Uv^2QOtgjP4+NS=BRM zwlW43qY+}vj3*BMc5M&r zbPtOK#ZFn3Cp{aE+CqwqDb0JHj-4KeE2PM7afK9_Kj_;kMv1-NUSOvn%|63U1^;5F z$0+mxY1-Vcw(Rt%X0gyhS*~;SHB4S5v{7+KW9l$;VT4Esa--Pkv~(U@WTrJBSi~{d z-ckd1{~vpAA70gU-}!PtP9(?eIf|WBs%b4Hni*+`Gg9NE_|~nZ1Sfmj``AiMY|>^r zv~d}dx-n_6LtV!f5l&H#k3;j&gg)atqucRJnO;8=rq_={62BY)LI*G)z<{s<2r%{$ zG9Zi*vN3Q!-``sM>?4dbFHi3u_j!iL)>(V+wbx#I?ce*`q7CVTBf88J*r_?JrIO-G zG9{NgL_9sCl*DA>D2j}<(x4VgW6}FKV222L#R$Dr0A(nEf5A4I%~TqEiNceN^7BW; zmxzg!w1T+UIvrP4)X(`#xN5$T=Ia~_ zT26)a2eQx+p39nSW4;^1T7(t(xW@rI`M3v-WjG%DuUP+bK9{3- z`5S8P$TwllxCSYKPiFMV!3!e49Xsv{XqdR)srv$>N^nU)1wHHYWxbrY*<~1N3 zdSsN!>7&lp%ZLbm6}DbrJ~s54c1oz5Q84?S>nnNdJXJ9jc)0k}j5ctRnYVBm#9V+iMxW3L0oUMZl8GU|0j1C}Mm6HPyaoZ8q$nRG?wO@y}3ywKRAu{iM< zu{d!a113OWrST)3b(^Lz!eh=#DzF3$1vHmvsIWc*OTZv@G#Cg6I-aMvUJ)H5i=1Z` zeT-rEtZb@=z3OSL#%3AG?p&l(#-7BlfpI?PM!U&L4Gh3}pctC6J}U?OV2lAV==u=a zr`^cJvg%1;>HgA^}Jys@8bg)p45+hw$AHYuK!EuuX>SGE`zj;H_CFu% zr`Vy#EA`XGg7yOuVRp3_gOO`n3qD7xQ#rZHzl zpMX(fC^633Y}5NV%+awImLj6^-&hhVX{ng}s_z8R^|t!AjjL!>gOK^~ZQiF+lik0VPau8_bgb)J2hC`jxVp zB8S>Xk@QspV;{gc7Mp&n%TCmyH~lJX48>xK6BVX{yg$|SyA24b2pe-Q1EZ}tQ8E2W z0gl-!U;}#SANneZu~?&#-A;$~C$l{lyuL~Rq2i?Wkjunk$*?T8ih^OTcH%7+IyPvI z)V#q9x8NRo%TxhQ2vf^4|bp}axwvxq4ocC5!&%wj&yJBg`?9&Qh=cTU1X}SLy^<)J zSfY`SOVkAOYdBVjZOho}moY{_3Fn#P)WVX~nypr=OwOw`rreCF(-xgg9Kodsu$hsd zJgAt8&c?EAcq$w4K6vc9tX~kI-UCXCa>WL|>{^!jQjhLWXMPW)?4^un6zYJp#(a!ihEbh|wQ!vQZ zHs`(DrV7*>N4slnNv7=gvx+$#8@aiB9^kStASbsm3l+ zKpfd_FKeP;6QZikD2KJ8GivFN>bICT-m;NoIjsOC5zP%2umm4*-Yt~PvWYKLp2-0n zn-*e3b7N)N3Bg_CZi5Ec8GJf6@tMXd6W`WKm~kdPm$F3f3N3_4NlbA{uesXtHFgIr z481R?@6)n7cLc5!3?3Ek=53Xp=Is$80lJ8m$+6MUNW>ONEKV2sImA;IJY@VX;g5rW7;-r8bI4-zh4Ej55=T|-UKgY0 zm5TWyRiYr)6;dT58USNMC#iNKf{+X8HzU@0&_iv5;HX_U_l(()Fa+d1^q8l70E_{* zBd-b2LS9{bp}{6_d#Mu*xHJo(kseRy4R*0dzhvSiGcd{xHMP%THbqBS8y7JkhKOcd`OX4T3lk=)$1oJPsUXNmQduH%uF{3i**O z5VDFem_^!G)|TuO`Z*ZZ7KmGpB%oM~`y}%ol77efudgOP8FfgBw)v0Akc05~F+LME zYFH}Zp|L#-BRJ@|L7-ouz#y8!#wB8!SO9wmP7zblNFm7J0j9t078(Wzhjv0&o$t1+ z1@E%VKCS|hPEK_)0@BXTc)f6$f$0q733O5L=b2WQ5|Hs(EI@@6Oc-u6@~KxxlxbW+ zar*$_6E2eecmQ7$hB}ClCW4c#5R?skLE{C~e^Ys;cz=@=n_@Wn@ww zLxwf(EG-tEI992Syn}BJ3}ByCa{DYF=ZOE{FG0eUT8XEFcROOXBx3(9c1gkjDV~D!D?epXyW5N}NRiF57-%?Unb=deOr57PpzGt)G0ytoVij2J}S$J3j0TCFgi*3g{ z!}m7X&(Q^!?`uOm<#U*g+%;%uK8KW7(_*Ckct753T|@DRB~K`ec|z!G_qH3C<~eX_ z-X7`jknDlbSil>=1iVp>iCg)F&Bonh8amgXbg74SBbiVBMt8SCsznD2OBGEl9IAa4 ziZf!aSS$4awmfUEl9kKjF&hsM+$xR8OOHxX-v>x~|DEL?dxk{NU9XWR7xeB!@$ki& z)o`lve$Wb*DTjr{0qLfF_c|8egsy1!D0L_co*HAC5jzj#>&PAn@Yo8`q-MW8xM# zl7gpTgtCDKp}bOZM6pxko?+fBzf(17W$n_jnK)5L?guJ|PiYg&ON@*h9!MM#iHXSv z`yj1YA^8s{@xHZx#H0i%&D6b`=Jo9wXI&O_$1(s=G-8CzS)PGDF9miwf`<*ybePLX zk3c%62J~noL^v|*ZvH}!oY$=^J3`_sWXC?U@g%Y%UVmAo0+Sqf12vVgRZu<5vr@~Q zHd!Gy%I7VKQG{AH6&F_}rL1L3wtg@W?hm3aknvGSNLZLE#G1AiLs`E@z?_3@F;GOP zI_!#L^9z#>7SwJ`OxKt+OlVBvs!o9#`W(g=FTfY~R`SII#up=~I#!}fG;M@NG;Pc` zrLd(a&SLT+U$YO``{nZDRxdBY;&_5f?T= z+hjsuxse%uG>fg>{KDHzSS%=-dWpBZ7+q>+p_CN05Q3mw0CdD^V_|^Ir0*Dm6CFug z@y6pW1Hom6aj~8v<5aA-S`70tOP$vKZj*F35(q#}QLqupSo8rcB4oS}(>*~I#1MEh zs5KFBbvy>Z>BFFV?G$%0%t~MS#3g6gy>MgLIQB|mf?2W)c3%3AvS4S$^~-EIlPu9SBQo>6cZ1!;FJg(&{u>kS{hN=Gc2H1t_AU)(u5qF zP*hbHw>gF3-!TiHR_=lCD*7D2z z!xNPO%cmj*&5B^w86reb%YbAhMBmf|v_<&`Cz|BQ`3dxX=5l=QlEN7HR z!2<6jL!`rx)x?saBV37O*kG~(FTEHm*;HK$?u_1qmW&||TIsY7oWCX6Rc4!$1d)*F zu9I-kGJu(hswj+VH#va^_M4xS25`+NUI$k_)lO5rcU0<-c$rkd=ci>^v34`@9vZI| z;3Dr8e{hI;Si3*{6LQg%^GqTl4mlG5j{;_v7fY&O7Jsy&l%c;bTF_t1NL0TwaRxhZ z#Dq|nG_a;=<70n?gR!>|n(k9}Atmmkt?8Af}OkQHZ?Dx)Kac9=i*_F*| zt$^i$Db8St$c$;!RWz@xaD=tP<_SJ-+0LXW%eyJHh&U^zQj5EePjni}sL(?a+LXUZ zEQEDJzCj^uT#r3fw!jALXjF(wFZ)Cl7=bS9>MmUw<^C8#q_ohj)lnlUXUBuwr!!&t zDT2ToUypJR*0K5nb=gLe;Q5Sv@0AYMyb^0?jc5hNKugxg(>&-{%xoK^_4W!IrDSje zKo8RuNI`)izsQ^SAR{yUi1l(oswO*{t~*}?6x;ynim(ei$6R5G3lxtrW148yDJIJU zI)Qag(-QHLI)i9jGYWFGflNxp4|JR~cgF^dtpmNs!&)=_)>(|T+=*QG_aL7VOZcLq z_BE<0PL`t~5V0JP6sfqoeYUPL?4%bX?FT(iI6gtW(?xu{Bc=fXtglNMQRF=ZjsRzQ ztguEs?WIcGEIL@F6@Y|}XfR+{*_0<-NX>7?_ORk<*t+>eoW4wmRZtEX-@ebZ1?$RJ78AchOgwld|Cuc=&LA^hX5WF z3``M~5v`*03RycP_2UtQR4~DuIC-McuRvmjO{`>TlR$fRsV`okK{?63|hzqf_1SNHQNF(mIzC2 zz}olL%|Xp6aL)Sa2c$p{HJlyP5El2WFHHD;)(7;akOy#J1-3?7gPLN{^Ep95Cc??8L#**CNJeZPL;(R<9F#=9xxDMU$Uti~O?i$V_;r+sp zeW=o57I3dbI=GJMgA4V5MRL1}=kOxXY_vlgcS%fyu$1bpIwk))n$~5XFBb5IY%pht z9%LX%U`Bu>s~Fv2yqMa=5*R}n4I1%731MKkHq=yeqK#mK&Ndm6J0+tTeSwlO?_EJT z!X#)!fmbaQ^x;~n)j+hc^z`e4<1TL%U-jaZJ&?@r*)rzYEReZ|Gz*T6aHP&;YhQxY zSXnMD)NE0PW;lyJLpuX*gYr<@;~4RMro504!&$s;aSfXn|s>Pb0Q|XGz7;+sX2B8$X98DIYXKdJ>+0R zH^8MK!*cERDXI+S7yQu(azic^<5aben}_tAg_rHARAml&6Q3{c$311HD=}mq+KdG^ zlX=Fvqs@S6TUdua$jt`JJgNxyJC)Fy5YYp=8AQyvRUxnK5kf{YF*#Pb&KIy#=q1^e z7S#_i++Iz7npp`XCRmvg@{mRpBh+Aq6Enn9x*$}UI?Jz0Z#KeYCSGNyMl2uhp+4RD+8A~|3r zE9ubu(lMqo7!2I&&xXNWZX~bNIP27;$&WD4jeJAdXfn)-o3cGjY>?F@229W+oV`aB zDbeq_l|H)Fi_DH<*;zDkC;oY?faehrhMd;)T43}Pe7HSbeR;+G_k46Fa9tUErt z=^Vg$8c( zCg;~SZ%X4qqn?hpGFR6N3y;`xJM|Y~Ar!&F#Ula?Hpj7M@K#OO_wOPXikoA}oLE&k zqDT`Ju+73lF85%a#nmXLb-&{k&R4h<7n&s!V^JGqxm~m@#ZrvND&$p0r9s|w(pL!a zk~FV_2l3YYRo9E}gN>K4Qo?%nh?`cjQX=1Axl>u`{s3M>(VrR^Zv`u54+K~#K@1ot z-iwt2;hvS^vwzkVH|;T28cQ#HLewp|Oy4E^6q)35taPlA66aq!M=jvCS6-O1vBDqE zpvL)uk7)mrkznZtRj93~WV^uCGoO2Bu=MpJD--0VC();}Cp02yC@wnpAX~#dHHiqq za!T$&nCHX*N{996q(>bf!!F(K#60olWP}E;cUF$j>{)tw1X%lnV(sM-W(PUjxgj3p zrluhGvsId8#Y7MRzSHZ@l}E}1xgQu7UJPxfF04020*HGl>rGSt7pS*z;Kk zBxOj&-#pqBIcXAT*z*8DA=7}&E)rmYK+^o|F(|^=oLb&gT&1EksA{Em9AeTzBU*KV zN#ZVhn++~_$G3S$1BUnr#63HxuR#$QH02s@8dr%0$j29;Sm)~mqf8wn!Kpo?^D%x8y+fm*Mwngi`-s-Hq{j0nc zUejj`;NSgXj~m#(``sQl(6`rn-oSn7h9bxyO2#Ji>ywP>GCk{l9gLZtq}2KG5EJ0QR>E=Y>&r!V|N21VH9iVS9Omn3$DE0F-VOo|i{Rh?yJY zDn8KnJdT%#sUT*m$9C2~oiF&k3LLi?QA7T6=v=z~PSKeEZ*VxlXph4{&E;|UF3{tD z0*7IJzXXRrcR3t(T4ZQi3-B6f7Zp_f z@=htXXNv8f(y4RvpVRg(9WR)9A@6+y$m`XK0c-4P@4t9}8T)4|Y(FizIpLhG+VHB=G0xKZJEl!@-Ja$CVeWt6id))_k9|1EXRC|{ zmEITSKDIvGb-bhdXiB>SvGE5NXZVXju4;X-tJF7A)jh&iTG{E2^Sm#}u~o>f6L7cg zS5urvZjq6O^VjSOb{z}yRpZ@Uh-cFq|5g^J=Z`}5RF9DAacJsoC}%+?cojmWW!JmRIylho0l>U;CA zE2t+US-Q0{NM&I|BRNMlouvMY4Y5_1})X77BLUh5YuRdPYKiyQPir7=V1V8Bb-p*_k2@9duBj zyAC>a(4~WBXMdGdw3lPmUb4yYW!>ad*^q;^y6E(BGY23jrCW$4&}fRBqjY1{?US{Amin_N=Xt?2`LMO>O`W2D8OK^O|s*K0^8 zgte+VPS5WlVoeb&3zq487zu1$*mIX)83~MH1!(^=Z6ZxeupC1I`$Ggvt&%K^62VwO zvuH^AO0Sip4S@0M~b-`3@ASs z3zm4M93gNb7@H?>54X$b?*&VHUCEqAgm}r#yg`7?9Kn)~Ua%xYvO=&#UaSx-Pw-j~ z%-3smN=lxm*W%FaP3B%}9osFq*J4q&Mm6aEyw<^p97dcx_F9|pAXb;(0OQaVyC1e+0QN063+Y-6Q;r{G88fx;x=Ux8 zeJp#kquA*d)SPq+5|gkO-dTkl`Wa?-8?*anb?$fE#A@P+o%mq)t4wTL-^pujUT4d5 zxj}QmhO1x)JkxKJr=9J2t7C4*U0?iKs`TA!xC%Myc>a6LA`#CQtO)a;g>OlpbvLtf zX#-qBtJe;XWM2*yA!Fm8uLL-v@}Hf{av9U=$lt!wv8^zF`%G5P_#S7U5L4_MnZfB- z-02&(aQaDjsOOVhd8*7rZ-R-QG|pPJ$lhtdy;J@}9piq%0lU)N`S3Mr?`X4L++1v? zsac8mYNa8*E-RqpZoTf0u6D1>gTU`%JY_ds%}w>F{EX+&^sKsy)wmrhHHE!{U91hN z?g?J-CM1EA?kzf}PIl#})_=70)W6ZM`wo|xr<>o|561KREV<4bzaMsAn2EVF{hhCC zbG)3C5sa6j(}00lKOIkGW-(63@jbk}OuRKzyB+|$%cwmFYNsktI|-8&HJd`bB1*MU zv8b^S)j-I`gH(*?+5DHFefwmSyM%@nJjpgU6j^~H)Y}y=F+c3NS#+$@0x*T5-64E~ zP!F00>~a1M2(>7hd{D-lWN?J+w|WbJ1-0ps)Gk*Fh|Ckaq8gkeXDCD$G!iJ(Zz@iH zW(I>FWcnOrdQ2}CAHf!60>HX~31FkW>7*qOQZxM+6b(NBEpC(V9~L4?9Wy2sIa9SP znE=rCr9Q9;Ln9qMrQXL$uRctDFVqKnFQe3s?dZKa#f<00^?n$o1#oWjZri4T3br3wL&Xkh?bhzJ zzw4jK#D2#m=dJyXl*<95?xU1BGoK8R&MC1xCqB|I|2y@r$g^I9!X!qfa1d{yis1HVX z!rTo5B7Lu>IEn7yPu|2yd^h8wO<`{4fRUjwXiE2yl%Jav2GbR;Dfg>#{iH15d47Zc zf6D(~swsBl0~Cj$o^{=Cpg3%7+|$@sgKS)s;&2GXp%48e)TCilRqZM9CRb%s$I6t} z@gNUekiKtOmDZoeV^z{J;8|5l14}nQQKjgTbjuT7aCI^%%l}wYuie4sb}MLfOcYY- zWmnTT80a&tVwR6#{b`qjgGVHhcMtKAB@xa>z%P>GyUb;EcfYKX%yd*(bxcU)6X|mX zJ4m{vk4YhsF}F||x^*m=<)q{1n8>uC{Ur8c}rpV{?pAmsrB1kKhjqO{$8{DMY1g@RPSaZJZ`ar8c(wH> z?n8+&7CKH}{6}1xv|Fv~xQ$^(FE9~A^ zHLc}w-WOMQSR56Rn_M9*N;^#ufMa8E#+ArZc!(7pn9C@rN6VG5vPxMjy=rwSFI8LL zY%K?pb5d^W0Q9`dxi-4=62)ag0(U3P>YJGl{}L zz6$f#)X3oywxIDHMIYH8)vVV>h}@<)3iGUDbtV5h_R8!E&SG!bCvPLD(D;_!KwdFL z163OR{e*2xISa6up;wwW67vw3yk`}E>01a@%y$s(h=K)B<3m1HT^V{YXx?Zu^#x|? zJDDjvmNE5#7oW|b?$iZ6x7WduXID^$3VM(u2)dFMXiHWVNU-nkZjI{f`@n+*DwdaE3?D0gzNN#*RT{RRZ)!LxzpgBYlROtbZ={&%)=0rS=KH z;i#5)z`0F)4|6**5Lv`Nre{Td9!EQv#U=$yp)4 zL?MMrUsvQb6hYe@j(O!^yL}@S3@6ZdZqsN7hgNp|{&Ve&h489v}ar zeI)-b`2PIH=Y79a{9A#KOJ6TCs`Mf$pwg2Ra;)4;shJT40O}Y;u8@p=30dsrQ97=+ zV@M{R5Ire;_7OM!BjU1;5{S0UPia#s5-ind@!T-SfP}J!x%O&}ECHT& zM(tIuU8i;zZ3|Vxl8X#LUj=DO7@$E!LkGQZEsQpz3xv5}4Ra4yN7O(La}Q)79G_Br zLu*1c_-J$Bl)_&Z;RwwjGzAJ08$hrXi*hUOlh~n$#HRU{y90<&n1i_SA~q!vA_M^? zColw|k)E6k8IF++$3rc^c+eR7xJ=^91JM_ZdxQg$h7C=k3-QRV3j;DI3OVt{{8KC- zyYj~C8rG5(y%X-Y8NO}VUu3*wYhQjUj9aUg(rTg$8LRp5a z*r;mt$xX;l?SV>96`^paeaSxU%Vb_p*r7}2R>{7%Did^YQEk*ie2T)oO{?U#@$2ET zW#PQ*zsudPS4j3Q+W*ec#zz12br$P-dE2sV>TPXFQc+1jJE>42>s20XUY8mGsr@8%%A;6F}@EAlUUO&)g+RN$FttUAORU{=n?%y zCBz+ffP}4N|0VtsofUirS>s znxKWE-E8{iNh5VG-c^U$D7Q0iZu4TBGZ(4!N4hfvs7ThusP?EO z+U`y?CIU`FO9KWXkXl9oKH^5?4K@SodB7R+7y~WfjE|!X&Py%a%_&fM;9dC{ zM#L*%`ANsZr|zykAq8)d3Xd(971c_{}K8s;MLMUt;B6~!jX7{$+F|aWpYN=oqAL9g?@y%hi^o_we%zYz6 zf1i-+z**#zYIsUmSGftt_bamJVD#=K6%-<>nhd(y06v=w>ueIHk*w0w1e}&eL|BcB zPBEndqcrm|R9dKRtxD+_f(ZK;0t;j@Kq;l0jYgO*pv>Q`hA@P;?u;c*(IhefpEfvA zK^4*k;2RM1d*lv;q_YtvnL^}%g1^WZKL1ITJXVM~fQl(zorjS}X_KInlQBqsk&T~H z%h}pD!49DP2-x9e2a85v@gxUmmFc^c3SFBNOF*6pUs78n`z>r95{5vN1=e85y~2p+;M{0p3JISg!V{ArBeSap2rC15M@1N?wL)64^gy*r*BE$ z*Rmj+et2v_M|x5J3H&Dy_aQFVWOJX_hP-Z*UPGxN!NYPRq@a{b(2EH(KrQH$m;h{I zdXhxjv-dXk?GAHat%K&rvN4G_QEl_vo8Tao}3GSM&TtWv||XzmX;T`oXFN= zQ##7BZ3RxX;Umy#u!P_rwb)Ku#6+Q&+qRP@E1^?W(2*M?8QbQVsw3?xt&x2W6DSJu z3J4WW_kK(JF1+BBBvD<;93h}70T39pm^&rzT7s=*uWx};PZ5sEpdsmRZ!8?ck`*jp zAsl1Yqw1UGu^&~G0$NOc359}^q7shD{1KiHWozFe-Cx2RC)k!wdxo$tBO4qmGaXKD zF0*k@h}P)4ttMGO1ZtHDuLzn(LiSsz6d%&yrKpZ;l~o``N0A7N%z_eIY6KKOt>eoD zQ6={C6I)G+L?Cz=v$yf+Jx4Z~@rrtLBC_)(Mu=)LAmJ#nl?M6;pdlu#Y%17Ag>R_G zmnG2Ki1UITf_ns;0LwcD(~3*<)k&Nk3F8McLmz2`5tUQbS8pxwS4nF20XGp`l7$RI zx(*E|O_;aui)5x{Ik*aS_T+On3*8U-MDBP8X!L2}&pJOVUr6d0FC>4UFsYdjwH*rT z01F9vFx&H*2_7y-T_!J>DTIT?QLB_~DTb1m3u38AM5+`~mY6{e9%@_GP(qDyHhL+; zvmzjLz5u>j^{s8)X57#uxSa-@cu%1~2vOj>|`*m4<>U+N1sPL=ln{aj^_9e@m5 z)%D3pi{Gx7w>~{5eP3D>6CX6NiwPbsX>ceC+IM0>n0~lmmqt7S;DwM|LP6R9gWa&& zqyr6gcSd6YJd6eDG!KF>1SLSdZ4CZkVWW7I5k&@w!DDXIpdPx;9=hJf0I*G~)6Ia1 zS4~I|vh;)b``)dBW7zS0mNfYa(>cQ7Qohy60!^lodM1lC0%c_ z{gp(RWI2^O_Ht`Q5QFJ>W%#xT254;%SGbGf1?fU0{~F&@Aa51R;b|yA)s(y&&@mg>;e# z?jWh5&`1>NS>6;fPl}leJkNF#KekSb=WaYn>EcRh0)EJiL%h}` zEMwT$jI_;%ym$^9q8MAabfclx^9gE6;bS*=zHhrq?s0z9wbFnKX3f#LUWZt}&<^Rmr2)Zu>I_j5 z(S$OqN9nd&0M*z{fxV$q=T&D2i0&RIROOH=GJzeWR*VKUh$BN$TfrJ9qPC3$DXR;G zPipo>H5eiK2qTX0Ky(S;MB?tT4lbfhx_YVG0A zz1X+Dkx>-b5&bzpDA+F+q{nvg|Db{dVnsdd*`(`-;MQL+&}oA@EJ#1_%7XMuFKMvj z8urA3bn_>_{i>qK?mnZl7xjqq1aAGxx9sf6?F*RA6%Xp5BYkpcLHe%K{C|obMV%lF zZEPDuzQ_RA-($CoZ6_ijYAIX%ydJ!CgScwbz9 zOWRITzGUu(0v%K|RnMN$2E~9vu+QrcmSkAO4pR{0QW$6ya(aq#qB={nf&O-yL}4b9 zf_RGQ^inyIh+?I}6Q_VEg|F$6VO>q$uR1^R+m?sf7rT1+?|48W_K6d(X6{! zM6>LOKOx6Ztp!2Lkz&Lz-PMq=nZTSsC;>=9*iHJ)K1t9Abe($(bhJxxNx)UwtXDb% zV^1jws6DB%hXgVQG^jO*tf0DpJuD?h6;5TI&gb&Q09QfQRSd9l$MVp28F{DGSpm)1 zf}$W1iNR4GBIKl&flwtitUxG4mR(X3!XKuzdkE}BM$k<>z*P;E(1GBCc0dEs2nk57 z)oQI(tHDV_>s6L7wME(@68*L$?gvjS%&2T~IRla24>6UCTiWRXOfKwg0VMh28XL_C zWD)o%HqYK1uMA&X9|1uc1l-M2dboyZ#V@R|y)fT-rPSX4)y8sYc4vrAFMA!piPoRw44Nh?;oabIpQd;FQBY)^Y zwqNOwvH1Y|oHz9w`z8`P>o0Pe{xLQzoKc_;3a~B0Zk0E|_oG*$OPK!gI}SGxOeA0+ zykZwxOH^W%{xO=0MwhZCV~!uC8Sx#jgK0`Xeo-s}2EM{H03>W1WS{z%To2OJZ~#zu zMXLXDdzejj9;$F8^@hk+!grV~L=BTDh%S|ciGmH03dNjYDo_XT2PFe>UOIG&Od2#b zrU;MdwHxn|O_iA>_k!X3=!4ZC>}T9LDk{qgA!kJj$vVzMPl{nXl5#}TggkAC*gcgb zo%D|}j}D3@2h_dx&sb%{=o#rBBlsdHLRMJPy~I{AB9CLic?~Athe`<{;vws)TBiNo zH41&Xd=E=OS8XbwX~-1dHhi~DYzHJw1=-rY=p$^sgS%E9yN6^?Q$Rw-(?TW=9=?eD zMqt8g%}#JT#z=&d(5Yo(wtiGve6z>%#SYIKuz{cLqTl5z$cEBWHVB~a6L0GxXn}MfXPh@4s&;WK za;6=?CV=+%i%Mr2-2Z8VbmxV@?BG0Yrtr*#z^FhJF*@vB1(LX~K|K*BgA7iHw`8#- zwglA1EO0?Q()dNiM#3kxfl{YRQLfTr6+}ALS|LYm1Uuo3e2Ci`fz1NGq#>AGNLN|CxJ28Nl)u;p@B6{!!4Girk zx)p2e(a2dE3tJ4t|?qc0He##7WWu}^fQ7~nqKc}n$!r~4x`}nW7$DOk=tL7yU{kV zLZU$`lKR60w4*5YB$bJ0*8##105NvAJqjT_p;xa{AgUU@dgnECoPY{ir~#h_M!&yI z1pz9G!HLFW`_a2c6c8KH8YpHJX@{6q(LzdvzDwFMTacrLiUw7&POTFlYKB(y-G^Xv zoNG{P#GEaAF}7Nl-YjreOC8%7QI+6^VVZ~nf+LXUojd|0xrjIrrm;{7k#UJUF>d68 z3i1cY$o+~f8Za#C0|7qlt;O1?Iy1&xfJXMDvKv<7!z!uc5UAyqTfS19{9Y%wt(K<0 zCcqI}7ZDID(vBQuKmA(jRfugG*HwQm&Bmc%76nfN*$tI>)QM275Fr7B+KuaanY>p~ z4Qq|$!HQK-(fB+aRael#)*215+F;N6bm};W$>gOVJS2f_p-I)mt5Bv~W^$2KySH8U zj@wuUw2^fbYZj_KD z;T{(O{sv)=NGu71DOSYF=^;v~du;iXoDccb)-N^|8)@0t9NQDIRl{8lV7mtJ*?i*= z_`h;WEIkJA1ZwMCdlox8W8uVzYGFC-dA@y$@g=l9nt*mh zB0)R!u?+1eTeat7Ie3QXgL1S%?}|1 zOfUmM1|_OGYB{29 zeahqn6Ow^Jxt0l5MfzK#M-D~#nG6XL9kO9qS~*7OHWDO2)d(W_XE_3U4X0jKe7FU505!5J>O#dLA86TmcEa-X2Hc_~*0d*>-x(A6sA-|bO#_RKv2q3b8 zJfvrfLp;TX1me!N7|UK|+a|a=sviu=eftie z^TKpK9sjzJJmDRT&0d*?mlo_Q*pTZAxWE7_p}}aNoK_fbR@!M2}A-FVIHcZu$p_Qc}85hgx9%;&bQjN``&&5HI0zjgxCbE{i zLH(N{MGmhIag{0TSNBe0{2HE=5{+#^#;gI;s0(2WadURhIqpfZ2bH^D{%?rsV!alH zUR%)m&WA1RIaAcffq(+A-X>$RDu-rFo&z{YPbF>WS?AwzJYcn^S8eK_bqz$kM_5n0 z8#b}hOGA#(+jA7MVs;z#6;V!Dh!c}yZPJTIBQ_RtTxWtq+^?*L1oLfZ2fCutKeBr=w z$Zn7_Wf;J$)o0MvIBZS9E&95MA$!7S?cFfLORwTnVxXdArLEV17E;5Pw=Z%5@sbki zMB07$fIg{l4M^>JXe*KqG||Uu!L@7_eB5O&v{W+rA>y;ld4QCmAT6{uMTYy`InnRY zjWMsew-aPd)7!R;hV?Mm$GrIRl*22INAz~GVd9Pq>(3*!Dx?IbtHRu47Tv|3lyD1A zt5pGOo6&0d4wlw3VknmK>#HgEy|P=Dcd}bcQX%Vf~3nrbuU| zpf#cvk~>^LEu?u?CgP>EU=gEq@#|s{Plvd1y&+**DkAQx40Go6REj!m09hDgn^EZ2 zDPoP6?)Oz^8&6AC<4Fsnt7WW`nS}ivkXpl*eL?Q3rl|fOq#6;Q~r@%SPz`$Q)cEaE5~ecnpSL;m_EJtg#tB*6H+p)A|2v8P48I=lkA-dmJ2B z$6u%;1|gz+G}0T4bU`DXRgX7uAmhPF4`YrU(|vXp|I08gl`(wgk6ECz{6+PQ|BZ~! zG}r?lNu5qV@>TN_6%-IH$AzwHRRRi&!u& z!I{Jv-g6yyp5@MQ&9qtb$LUhX3oOcLEV-bD-{jUqdfp-3`le2u)V&w@Gj?7#wz?Oe z9rOg5pl4AXm5z&?O1wbp)7LHIZDnn@f92mP`9a1zph3NKluo7S+b@w|bIrB48t~^IRdLVz*2csNMlhlgv=%vtR6Nc^BsPv#ys&u_1s@)!&tXwFHWykmuno+O1NBs}ig03;NwVsXaaN%y9;*n&l=;Gl9}8h2ksKo;%xUVWB+!8o<3Vnf5bg)o^y=;_~$V` zsjR;bG8~mVY%p7YT2{VQSk$D?u7K>GYPF%!xZ0(;l~m!oOKycCRludap?DE@Gevtt z9XyehE_BqK^5pE{AZOem%2tqML9Zr&UJ(snT1Tl7$eigT~L@K-q3*I*nRgwt4Rnbg}LS|ISkrj zG&M#xDAB4~$lStA1ZNXo;?Kxp;mIwji`6gIK%blCaq?80jGa~BACe|u5AH}O@NPzSM!IwqLD_hPIwvGrhEsDlO{lb=p zjh6On6@UsL^-6570K|uyy7cug3y8C|8%|HWL6ath(Le!yFT?$*r8ky=&yLBGmTlqP z8Jwt(Z2h>mt97x4`jpBYImfOz6z+qk6veL^LfOk+Vi~0i69`G%cO?XFVBmum1P+HI zh5^r3&tZna3~Gimp|n1|Aa8}jH?)x=mG#R3QCS5<9pIUO9o$qrZ+Eo^0or7#H6E)> z3d6cGY>zR_L}3ErV#BrS>qm0iP%s-|1+)%Z#uQLdKS1p@X;91zRVsBbi@UI=$dTK1 z5670kjOP_&Fl)#*vcXWjDa?>6aaX=-UAFP0TvKu_+1VvJ+e&ajb(H&RCd&O$T|}7X zh*2n0v4Mv+)nfEh6rt3oWwY9UPv;R-t7CVlR;?s*BYn%yfxoU}*LW1bFd zTn;)dqHs%vUz^9;D3r>=UdGhsX?|OPO>Zm)?Ra#Dg*oN>WVFe0q1!CI&1`CV@bTC*Hg~e<*eX7 z`3dCHKBi!&7T8VE=%xY`@ogv!fsz1n(|s8X1NW9V*2kRUatJ2gK^7`@kkGb{v%ZY9 zh#hRL(N+oN)DqCoFk26+Yyb-ltmD9xM;==M0kfV4mp~4K(^lKUk|!&r%#6f8i){g# zMls6YkfCT+wO*rHF;maQYQN^&73HgDN!b|BwhZe1S76=xm$E!@u3h$!6k0u@>okby z!G22=f(#vlcjRw+1Zm?BsIm2Dz%24D6$fXw8y1cO?Zu=h}}eg07l0P4TZT$A$iav-xpv63}kjtBngWpIMG!&1uS%rQuHLxSm=sH zz+XdEi+gb}%ZxrG*R%^kv2~oUX;ftvTrjou`S8l$u<%$H!f#iHZ_8$nZd~0B*sx$3^*)6w*84# z7Lvrna<5Q@DVD1e*&yteNQ{#Y*9xi^xtb;CJ=8{LIB>`XLKOlQy99_Jn^_Jj^D<@~)w^H$*kw^<* z?!{6}g<;YaG#t0X2v9BM9b>emz-CgVn>Qi=fpB0^<@{A!bpx(#XQg0GH%3@h6_QF! zP0>uZV5k6y!EIqEng_7fsRm`a+Fw{pB^(8T`2k(1JdY}vxxHmeSU(DTkc-rI`_#{R zwnBw6=@EQU3>&F^(#l~TUU1UUW`uN7*-olOP9=Sm~7L8CM3mc|@B0KBpF9d-@vUR8SYqxRu_@Pl%0r%{m;{VIW9DF_y`J z!`V7)cVMn&oyey20N4u%fes3BbkBu)s*a321d4q^nv2C5BTICJz#{phuRv2x&nyHz za^5(>&x!OR&4x^UCJ}*d;MPvf2cwL+8P!T{&EmEd^1)5u82C>_r{y;UpoMN^go7aL z>bj%6Yb6}RB0?g*z88U3Yax{+a9-9tCv-yzkYPa%Rb(~fSR<)@tw)ZqT#bqN1gjT= zB=5Xh(k0)KirF4^|6*EMipL5lA}S|X%VTZ^ga+U}a z!LCa*N(p8F3hHF+ERp-9>?{#~bEYWsmyl)i5Fd@S38BDR>=XKjEaU-1+h37y;dbUF z^^t(C$*5&As>i@Ap0`e9)JW>u1oWSBaHhf$U1dU1D1#8NCd-(7qjHo^n$u5)GhZWM zH`1NRq=R~6G=lT3GJ=uHXP{p|EE)&uvGxoj&pc-45dglHEwZDY4gkKRE=UBV{HJ-S zoLjSQ0sb9YFArWQOGvZ6&2=e~`I&zuPBiP5Ofc(xAy;{o||DsbtV-ovL*V8RjOS(=!6c-8{l57mGg2jak?|D|9>( zL$tF7#fW7inY?0#F*-8wdtsQSGMF{r!h2ynJkP7&t8FZkfEH=&g{D3@)G}{Az3u9x zuFkis;A<=sIR(Yej;KSY2A-#w)7c1&(uuUpydgL@DANNg85ky$U4hC%Km{a}=#)St zf!Q|LY>~j!TeoYj#PzA8EC4C$n81>`+jSUmg(S0FokoV5DCtT%P)a#9Hq}IGx+kx-fn5zM1k3C{U&48 z%w;2?i*K<#HW7yKW|r(|NYoMz38!W~+tkHuyq1Izm_+IkT`Y2il!%^X-6-ny8o zXhp`OmZRDFF-48Q5EY+KYqeTk$mmp_@(}>$wiv2l^L$#O6rB#&l|`oEr5bpbGfM74 z?Uzs~{v|<2K_-f0v@#3&NXwOkwOVV)6ijJ>3p|8&NvSwB3g*`*emSb&8l^}p*bU+$ zy}YGL2ytRH6FdpMJmhj=CRy$6uzOsbd?XNyDlXbZ4--2=U_?ZQ!R?HdMmBWZtLJlZ zM7rb(wN{%;7x9S`jQ+NiVj!r(Td=ocaaBG;h4r9=XaGR)+f3nLtfU#?qhL2`7S@{T zuyKp|GZitw3bzVy0~PUu!J#jaPa|EhzVA|n5r+X#<&;BH3(*To4(hp?2uFp>(t?`E zAyWUADSrxp!nLa(cD2Uw&#UrJqU`!gpMVW5Wz*s}p>Wkol7SYuaal4eE6YDo3 z2=V){)qv}{3wpjmX5$J|^OX8liG8^<>^ZMZYid8&$^Y&A-^%|D{GUnJzCX%;YktCA zg50kXR~7W!F<-6RU1E!Pu2o#??u9|_b|~mw8J)|xbBj2a;ar{0)wy#^qWlY8%#2Hc z4fg%=QSPqJWWXO8MC91|A$QljWXvBq`Q`R`oSvTy`y<1){NMN5$d6km&D0g=&bbr0 zAF5ZyBOH*sEf{h?w0p~w|B;q2$USanb8ZiY@>~2!-|Xj#7hr3h-=SWZXv+=+yQ+4i z=PTI8vHA9V6+E-ha64^knzff&N@CWO5A5!rA1poJdj$o!{xrznbbWzg6rzy7;rbD4 zQp5L}>*eXg4l%JlwfOH4ny#PErEKb0Hvh!+T{Oe|vg>>KML?HPvFA`{$DJKtpgQv3 z{XcrlhK5TXb^qURvid#1p}lhd2*jNs1Bea)q62{F03bR5hzm^pqqrl9Q!6$g6 zt3O>8)KD@+`3Tc%&h}i`aiZpeHbqd%RPMpm@&?ryH!1}^DbB31GZutD9`t+(_KAM}JG%SU4YG zVt+Buib8g;n;+bGBK_!Vgos@B3oTfY;452V&SUv=_q9KIJpFjS8c^st(|x|`n>8%; z#Hh-R_fQ!9oglx6Fm_u>?Q+s{uKUQ0p!>pA-%P8NeA@(nH;sND2nxDidnY-SzOIXN z(@v9kwepP62q)N}j+UM2bw_$)`f};`Z*Y`<+8lmF+H818Zk{eTsTENA8yojY7q-9z=)02+- zXRL$0#q6YcebW3$()_igc~#O(CC!P(@;Zzq&5@+JJ85oCnlB{Hr<3M?DK{~@lx~~J z(0Q+x=rs?NmRkpV<8POnY$^=<1t4PMS|9&A&~Wk0;IUq`4$%{#nxepW>PVWON}98hW<%2aP}00IXGii<{%>zkuSJEsd&F7Nl zKPJt;Pnu68&A(2X-%Xl-nKTzA%|A(+zn?VkNSbq!=8Z}7<4NCE(W z=2m;PPPcVf=FC7ToE~_j#O*+BVZhL%f&czLx zx?i9F%NIifGu_rp7lYvi6_=lI>FSU3#{cWH?A|c{4+vVS)EAIP5u;>RmzSbq>!P;d zpUr0vk+zA_fB8>UEabBm)+yL^p!=9bjq0m(0uLhYi})3II_O;Hj`^BhcKvA!H$?t( zLRuoDVO*wz?K;y-%a5LJh&?7h^AUZ=ay&zLq1 z`tjk8KONY5(Y!#FS5p3-#k$A#ox)n(_v-XW6*=S@;x5LUgQ09!DOKnmnI6=PbKk|KZ)tX@ zZ`z@D=U8US6WFAthO$bdSKN~CV5g~lev8`8jhj0f3mr8Wo(sU4cE=)Lo^LoD3;paQ zggQ)JhMjFXzmvetlbdLuy$Iit=(X3-jfIZ%-)x{5UT~I(6gCb$5q5828-+VZvWC`j`R zzi;zM5IPHf<}pA#-%^jeM-Gf5eb`|iweKv?D2UVb!5i_iyj2);76GQ1|cy(X*r_e?wM4>(Xg8?GT zpL1Q#w@>VEPd{^98UDL;og-b}|Gc|?p?%`Oob)rOuH|Y03IWlhzrpxm-+7+=z(;<@-)SA@618RK!UfKx zmpx0b(arp6D~$e-A90P0I2X1PT+r#-02XF^5f|<+$APUPcw~ zpSop@w>M0&Zw#rYyyc4tNyzJ^^7kU3pkHe!F$ygryVhXSxfLr!JF!*I& zz`%U3g96i$U@|}1we(JQErrPVEmeOb-nsPHZ@Mj2`%Ye`N)bTh)<8<5E+ni3i5LH>@EHCf6k}Pf40HzRmu)s z^L5iM+c=N4>d4ROhqxu>uEsSz->u+g6E>A1UNE?aP2>EBCn6n=iT&sRJ*b`Hb;=eAS5baT?KsTXi=YE#m&OE)ED zicL#}kcUf8wN05_#X6Pe=jZk3A9m{<=Gl~V>BgHyGP*A`;OI$z=ero_rlLXh|0)^? z#w$eNDeym8rAe( zYs7j%mSDodtU>z))A)_;CC;M7GU72R?fj@N_&gg>GJ{wnRi;(HJ)@ET-0_nEpp8|E=*>0%5Gt1&dJ#>n=(V>^oP@>}?7j5XHh*``6e zcV*MKjxoq_Tc=%e5~PM%VaHF~>vi1KG53p1XL-d?wzY-~c*u@=n@;;hkKjJ+>l#9% z$G2uHZe2uI!S)J&>lz)qS!C?eG8SP^Tt?ScGo%Xx3X_3EGL+V>-NIhCZ#*hBKzdtvld*r$xcU4pHmCx6;O^nS< zB)Y!Ws)#x4-k1uOUP$rci=)-4`>$-BVf7_HP-)L!=TYSbOQnq5uUxVO$TZ0QBa`LE%GY*gZRez2Q8PpUP-v(2A zA6oVAKcr>2rW(zn%f9il>Rx^?H_;$}{Zo6VPy1pg4xv=(|EhJ+q8HA07nojI_$3rh z;XG-D z>GWi#XEWuQrk{Uorr_w&P3dJ{gzEMb&kilyln(nUmAH?g#Py5ZE!(u@H(49Bw{s63+?7C^)T zm((|KNxgw&HXZL_s%Lli(RaI~mT48b4^MGPwJTq3Lw)m5%`KM9yd+AED z&lPPuWBH4l=6-mbJIo*TVR!2~{876v`yrR?;35g1crH6IFKmf4u7r0xHUJNPWudL3)xMTMg%rf=6 zMB1QB{sd50!d(#Ne^{a&e&zOd8MWKZ#JsJvb?aLfAs;}}$Ur?(B8!CDlqg8Wtb<1M&OiQ2i3Yadl9-1@XCheeWE?zgm5r7-tt7LM>e!w_^c zpjW*t7;Se9N@QOsu61CY!$YFg4ii`=kX4WoTk>InryQ0F5%&oS=PW0i!tm!j55N*Y z066ChgjWOVa%}h7Gx~LN<=6s-pkO1gF!`otprSDI#jIrhn%@o~R1m&AULO({G;1xlZnDU6`)n?xxz}p`5b*xYAVF$+c2UW3T0z3C zv01Q!KDrV(v7~as8Hv4Q1xY<)1?^}9c5Ak@Q?#-k4P7bftAyGO>}4&U1)GKWsw)+v zrmv|FcJ>JII9fR^O+loE)RXixif$uqq*tq$I+K28SoG<8wu{^yNY0aXt zbDKT^6(nm1w8kWN)$ZaMJbBzw5dt6a3fhfRG~YvoY4hR@tjs~Ci<(i9T#tm;A$kq>cObm00 zLyx~S$DITjd9qnh1pB!UT5=5_+{8i&wjf}URsdhUY|ehV`Bxw;C1S}9K| zvhWY-M6yYc`#L?zP_h_8zC73=vBe0FrO4J)ImHP!u5o}|)RbQXMa!UpX_1{*sP z_#IIH-WYsYdgJAW@o!M7I$OJsLJPJP(;2p7G!*8W-I}lZ9Yh4x)v#}#d@qeasPjvx z8ssE#u>kz48b>c5@dChN{ee5)2BfnYX#xUS!L}yMBuSzrM~Q-SFK030@g(+_sXYa* zQ|^!Ae8(7Now8hNw*Zty2;Mz}>wzu*r=TEPI}$%-P-)O>G&Ji@G`W#Vo&_=GnUtL4 z1&kcN1>~{28U#ioq@Q6Z>Q&f~CaWOEI0j(n{sVH|rBFVUK)DMBC@MK z?y050_)rBGa-VX9eSMI;($7#RW4#{y?^W)OMOy0?Md9KqNHebB;nm7qXBGL<8ze%E zQ`dv_Rupxw7M((?>@A^DR^Oh#;djViQ*Ty-wFQffs6#@GLKYx->$DPlsq`~*oBq9+ z(uihB*l$T%9P-}xw6@FpS?&KocSk9s+AZ_~=CZYewn#g}+T-@jDMY}rlnNqXPlp(t zx-Eaz%q&F`QsXSouNy##Cm9Jyn6z6SUWxi~+uZW#^Ha7~{!A8Q(l5r4@sJ3fiEf#q zq5^@(mae5CwIRSb_iea6f71-;vR{u85ib~okv+kQzh;D7G&+d%q6tX>=RS$ zze{AZ>mip7QU)!E-Ahk9kD7ORX=C6b9RqT@3i|C?=1Qq>yw)E}Ee=VN4?mC!KhTlk ze}qIA6oF*T>Gy>n_$;SCYo}Lh2{2?zUxy=<7QTJ)VmDS+24nPlsbkUO;^(x>T{WFV zqnD(YeL~F~`4UV-U2~t|HL<i!umyBo244HYLQ%Uj_mUzydsLZ43W#stR0v}q{)x| zN7j^pQnTSqlrB!nlk==wy&kyn+odN?U%Z&j{c1M1fb_B~Yx=LNC9Q!7vSiKp6KTMO zkjQ!%elX*Ubw~!BSs%{$!)h=SERk?Z7`9T>i2k+Z@w^-6611#~7pwy5Qkz|maY=P8 z?Fa!2iqMo5w@hy^rJfm>FhlW8c?MBq6CJ zTa=lQHbrI25?QmPlF*RkQ55Z^QfbpJmCBa22xTd4(lSyB$rgUsxn~$X@298l=ll8n z{`kFK?_SSiuKS#GpZl!Wx%SfwUjrERs@Bz2A$5ikrABaR?3Au!JH%@VrSFekI)mrN0MX8%8C%CIvB z7_uFJqeno_2z)MzfCY}qgg!7wM&c9jCV_yRu!Y;^-h=#Frv)+PE$9Tb4O^ zh_X$)09~@C!4r;4VBTy&6VBeHoE?g=0W4Ld5kXjCG;Stq=o^|4P9`86{DyLE_6q*n zv_RN-d`8MS>9s!~^v*?f6{r>tSO~jM00N|lp;h(EjQypq2?f}b1{}rT=4*5^fVg|g zP=!;p(E@mF5JtgK&JcZs)a-iDT!g1);lCI02yzJV(Bat*%;I5?%o)@XJ1Y2HKxw>_ zp#DLf1Sx?EOCI$Qjs`IQT7)tI%OLs1=t!^zJ0Kt4{D$5DRE+i$vaD`}bQIr@ot~!N zhrX}P*0cROGO!r`!o$k3J6Flc?F7M0(h>YVcQihDsc%p@yVR(x2QPIOzX5)%RNq*s zQBhGRB4Lmq8U#I^bO`xE=tOH3wk(JgMBz3a6d3#&0sa8?1?M*cLbz~g5f|Yyz$K}y z4DELFm`2#3GA>4XgHBGKl^Bksl|_^P8?eoj+5PSqjt&d}hI?AWh=P=_jt)^!sJ%$yr~1T}+Kr3*YHh)kMfE-2e{hy$ zYgLi?&MkNw*|ZekziH~_=ohxb75w=%vQ3@e1swsUaSEQr-ahD#3fKqDpV|8(n3Gk2 zngZ#?C>>6|WcDoO9T98~C5wsLK>=jhq=rUoS@~{iQ-4v49yP$}JCwpN8(76EU zlcTM{BNjp-ke7ZNr>#MI7trWUw#o(%R|tiELC51T>mUQyJmS*?Qcyxa;95Yghz)|P z!C~p3PT7tfA9ZM1Y=opA&+!w)mQciQ=GftZ&KFo#P=tNN5C+%vA5;~#^P;-IyaO9GjHK@5YXf?Q@LZG*(!{-c^qZ`~hKRR*vnm`EM2QLL8 zPsMlep$eBL_T!WUith-w!$GJe(FU+I3xp7<90O?3W2AEYw)AZES~pXkav~ z4z#>EiwX<};ZQ*MpAKpXbUPXqxCOZKC`gK~20pITN~i*E9m87$QI%jrvs)nwp$MQK zi$RDPhciy_3I+aO1fvmj5hp%=`8Yhpshh*uf|>)Kz37%SFeOApiZ`tx4bMVoj}CR9 z$?!p=iard+S}zpV9SBIA2QJchH)m~b_UW+0(td{rNub`YVh*FgLkn?;RZI~_~86> z0M0KA-h!!~1yKO)w7zk+0;uLWNEFABD2S`plX2+YHpxo_9Tesqluu}Y1zpDGSU40^ zKcX-LV6c%Q6-X#x`1{eSNA_`A)to}(bo65yOt|2dq1p~QdZd@vOst@b!re;jS;TiD zj6)1`26U0&RF1S0fTuuQ4PplZ5-r1(YlIH;Aw0}u7b38L9<>7%8<06Tb;}jG{y>+9 z-GXt(Ed#(-nB7HY;|N1*{Min=R0da@$EFB|@f+09-Xm~iw#+ARF%MviX5eONHwWoP zL*wuTj=Ve27Via_>=!#KsQd=t=(hu63IS~lYAp(S4>zSyhae09PN+cmKKLyIh8W@m zegd!(XhUGgaSVwcjBv~o%C3*ZJi)&S;^INNR`)ob5#|Rv*)Yn7<1fM}LjQh@BMC>5 zJXiB*=Kz|vj83%zFPwxVt6kD~p7m(MF!5b{(9B#Q4`z?)4_4xN&3 z;MXn@T~_rR@eJ)ia!jrD-*et`e|+ z;*hAH*g^&neN=&Plbz3OfH4HE`zxSx*@|nUPA&(98`o5$(SVB@RV!_&MMz<-T27}n zfi4@?vn{m|ADK2lYXq!Ao z3@sJ3vB0Xm@;>SlXmKp?O*qz4y4LewS~{j^fwtSp{s7J!n#$;Huv6`|L+bT!5SkKf z$YC|xseT7beRNGXFg;W#37*Jk7$D#f!9JN}hD<#WYX+; z6`y{gnZGn}e*Y(B?<`yb)jDELh*RNGb^wN)IAmj;VA~Xa2f~A#w~-I2;C!C;wG~h)y3^eWMaY6af>LAfk|&sxTVmcEGrUL>7bwZ1Nvs$Dtt! zMugi&MD-nqAwd!gg!Ncyfa;K}I?0A&JGR6|X%3|InFT8Vi3Z1!9N=y<#$bZn7YYD( z$?3N&@<~BQ9kLZf@}VR@w1%L-CiFQbhrMEtpeFl z8JIDlX@3fARp+RL#5Qp@J#j9@HgOF!YJm)>+ijB|ARDv|C^#_r857>K1^50C4RM_0 z9`0s_f9zx6?I^M;_=CuvjTC^U!3Fkgnx>g<^m6oYM8bOZ*@)!#xCI>&+ZW@D1knAn z--+#Ui9O<2k(>cm3-k!u3(^Q+6hMKq0LALFZ}{77Gwp7dWw|fa8*30 zDInl4evrVC$?dIOVk?6%INHZ1q^;Cy8a=O2lX0GyZE$BtsAOX|W*yK&V08E#KOVtO zu!{S}6zCd=$Jl11pi_T>pLDSAUxFCNHnABA)2V|f0zNwRzyS;-WPqk?8A;N>^^X#O zjHCz(SJXVp{tb^uywQM_am33O7<7yi3ow$bk=O*p31Be5M$4QABC|BMjVroS6VMT% z5)sT0(7BO~jHMZg_JE6{0T&0MXhevq;L6I1xu)DS?#OWb`)M!D)r=w8q01 zF{qWmGr3SuEV))-BHtk<@&RHnfd#}}<(gjt?^FyvUv#zkGPZzl6UESXVa?11qqpWq z=yhmG&;~ttLS=#N#Ca}ouWN6Bq6<(vm*_EY-?&n9q`zkNiO}M`5$%A)_XX&41@Jk< zGdGim!NM7R!5qG@i1`MLrsg{SGD5%l+s=Z~;>3Ruryxbrf8)QvP{Q5a|I_#{^&qgN zCnCc}Te$l+IVS~{AQExnzw9V2ma0Vj^gwF4E|#GZ5sdIb?*TJ_kOdIS6QBUD#{+3o z7fS*Ppc)VgfkOur&n&`N4Xht<2{$^5;I;NK5Mi2^il|=jzJb?p0qQGOB@|#=`m*x5 z;0-Q#jtd^+f_uk6ByEj{dg;j*Ig~z#%RjI}pa93Qe=QeWJqDuYEW}^q20$^zbMbZ? za6wHjsK^DyxF8=F{HZ+F^G+`KfeSWs!5S`D!UgYe!OL9m)EJ0->Gmn0?)oFC4bI4H z$8!Pv%8DEV5$A&@nB{|)UXAo*(6z5D$FaItc3f~S7o5ojr*J`4E-1wX1-Kx_1$)r) zU@w4AT<|p)e98qYxZr&*c%2KL<$_1K;2tiRzy-H(!S!6wn+vYuf{VD|JT5q!3+i$~ zbuK8&1%al6I^v$)_9 zE||&%w{yWrE*Q)Oy|~~?E@;mMt+=2O7o5rk)wrMx7Zl=xJY29BEjV^BK6AkqF4({Y zA9BG0E||jw&vU^HE||sz6S?44E*Q!M@%4{42aWbh*|EmibIVw9K_f0Wl?$qIK^ZP6 z#07b{V6XhxCq8q*7B1Mp1s`(30xp=t1}1(6ZIp~!v{j|EIwAiBu^K{%F0Z0Ebtcr3PHlCOpQ{l>Ye#sCUN4yXtf|EGKE zaZc_P_(cRd45u5S($h4F5WZwAg351Wtl+MHAin=ikd>5wh_CXu&VeNb+kN0~v1U-s zTDW2WXB&#u|5puSj>c1gm^;v>cW)pLP7L1XZk#UxYsyO2YknA_|NBlSd-bhy{)L=` zc#rTsU<%jgke zmKv^ffyUkgf)OXw3gDN^Zg{64v-?68k(L`rLJQg|u`Q;B4}2qk9U>$o?``G`QQ~ve zB5Gw~4fuH`ljhb!(HflI`@ynDXC_dYh$}+;=o_e!H9+R{A2`i|6y$)nH0lC-IM@&PpyOK8x2#7~;A;?ITm;w)W(gl7c8CWWLyMPySwbF# zDtJsIG(a*mZXgJA+Gx-RZXgKQ^aMOAljtvjAdpZai2?ivJJcL?$Y|Aj}QXCQ~LcC`(Jy~*tE!t>Sq6N@9FtXQN zCi;e^xmxraiuwR34YW>dlmNI427qjRga>2eHBGV&2M#_GU>Mb}>lW6eA7H~3jl%@iISJU)p zT5R5hrj>@TA++~vpe7pFFc!e?SpqF?5v&2w6d=bW54J-k)hD9v9?6eL5G5BsDPCwE_22^Jj_}KSO|qnGarqK@QKyJ zgOWVaEmC062?G32tZGO?8#o3=1b5Z^#LB~yE~+1gB)mfW6#u{?LWQVk0i?q@jw};W z@Cw=MWc1sJKWPFCz#ezRqpjmqh>!%g!mq4rPzqJ3f_Dn9&vTX3iu)~{vV!b4wk3#QIDZm-1 z0vHRH#xHf{La96EcrMOx@!`3nHchp~yiVI2LY71ajz}H?WD|*(wlJkZ)j{ zN{~1iYtdIhMn-22$%j{gj0sKTIIO}&&?)GwTZ-JM!2T_9kfrHN!hV?ZiG+(oRrsV0 ztg>*iaBZ`y{t3j`QXs;hYs0J(Qz8~$5T;7^umOF7r5+=Ro%4gWiaaoai=goLiuDWF zzoP;u_WD9c>t{EPYcwAbiE7|L?*R=H*E?Da+C0uXnj5fpfcf@6y`#6I(fcJ}FFPIs zNTbGu>!pp4)=L`=)=L|W)k_QdTc}?2@*Aib1Sn(v(LL<*p&j>+?!lmykjwFphB&?8 zA6gGyn=2wlGkg{1BU^~?ahaKH>b7xtNf77g?gNLSoT z*RQ5SEE#l-DHQ@zfw&d|-arX>E*vof?mSqg z8|gq@(e)eXR8Zl=cObHVKfK;RFC2!~E8#o6wW^&+@H=0I0VXy|m}cu2(UUjB zyQOq$1IPXkeG{JXcl$tc+}o(yOD*dygKx%!c|%Mzb?~^o4Q~9P+56GX$BECxNSY4* zw$s78dO9?R?QYwSR2o2-o3q7VEE$16j_{~g?H3@I5b0~N8tppg;{Q1R3xE#BAW{@; z)-h@n0x%-nu2%|39#{rmw$uBs=Mzn2J~+=W#A7|afj*$~3oT?=kK56*f!|%n;TLGY zIDDXR%Nksq$HAGShcbIDv08z7Ly|d!|8NA4i}?_Li%b~b;Hfy;yn`3Kt9~3%DgN#U zRu<=7H`w|3yI)yph!=z}y@3Hn2qup6jI4d&Kt&k$DzJ~JZVZ15)s0dQ<4h%-6L>1v z*mSXWaFWc)Fiwa}#Ov&01>+S!OCTL@$yb&lrzI+Q5n!io;6_9&GUxLc9Mqf-P2dx=7M1WTHGIi8N!d$vGW?DL5;9U9H6nSNP29#hxrDq4iE!E9?yUT2~2#$ac$9Ac)L5k#p!CcUb3$6qZ0#T7@3EzN_fo-aXf)<*h+fNEV zL;r2nfdl)<=zXnPhz0=R6RSixL-0vK-3O}0ZFB(Ocw@CeNT6TGV1GXvg9kW^1@|Je zSq$8*pUq-{Ss9zfI-<_$@+g-zmhi_h=wj94Ywj2Ff4o0EoS2%(+wYbr=N~Ht-YT>e0H2KF=uzzGe%)DME@ z!Ky)69J!6Q<9?(-ts(|P1*ruocKWd88Wa0~Ged@_s2Y;G1q7g~{cOQ}M_}~60RI&W zh+<*^0dg3<;LQSed0TP*(UTp)nq$x|*{+YF+F#f~WPXHNAe!J~R5uuEfDv7l9T@Du ze}Dzi4Liuw75deOUs460?JdX%Xpo zkg?ENPS4(;I+D)osPTP_)KYAILUTHy*E|)Yc#jWx)6G>Qc}Eqipb)Ek^a1 zGxUe;^uhV8oDQ{J;anS3fa=?U?jwZSp*6SQb!4Fi--Ih1cG$s@h`d-mp_xzz{6Sao zp^tbXhg`VQ5o`(J3C`nXa61ayZTmRXVQa7&3hI~J>VvMW#g6dK)<9hy;$Jcf-|`^C zq$UUy@&$GkW~<+5tN)R4XLN1ARZon((Zyh=`pS-4%D6i^6LzW}?ZDdo*66AL2Lf9- zs`a7iFv;{pJ~n@EfM1rh1w3$}50G7klHbrFnMH?o)zJ0vkOt)_CB@bN93&ZV2f2Yi z^v?iwL;n+Q^HliN6i#}!9KeJQ69!6J)n?Gp+NriMsBmLDI7e5a0~u;pp(l#K`KS4h zv?>khL%ICPBD8E1dx2(T?O9C1AV>lJi?7-;)=WD{N@9LP=a5lfsO2dAg*LbbHhkmqkLqMtE8XIOksIgUlo*`fHIm4{MhiO-f=X*bRdo z?*3W>VUj2Zg?f0+y2H(cJHqIRc+0~1%I2ZjgVunj()e3Q+G1@X;H5I>{*k4NkQ)z_ zNgT>Ih4$c#$^Zoa(=T9Up^9N`GW$lt`B_5n#GFM6YeKsiuMsCBxCB2?`-@m&FkVSA z%)udAJhFyhRW3qrffVB;JRw;WaqN7-zsF&tUg197@J$2sP4q!O))8oD5(ZRzSUs~( zfEM2YHRLO!N-skWJ-z^l&3VZ{Y|`e{(196@IYLh+-+}MZ0m&v|N9l-!fa3I|Ss)A3 zfRa$Z7kU*=AtG*1qhH7R0hk>=2psEfRF>VbVnkz+?qf?xF^R9?ElYSSz94)CLg=K? z`Hn@ALt)6GD)Uonh!|@d6ym%BqyoGpgufLA#2cq^ivQF&2vcUF1C6`y2;awtgH>rm z!dO}G2eRHL@nEcPC}AJ`;f}U<3d9)0(EsQkkTTdJmV-TdMaU8jN+JcMCC`xPNYtF- z_-p*=MHV>OO=p_H#5Cip5Y_;?x`b60&_4o0ON%RnWOUGbyrO%UQ;eE6NHLOVNUN^( zjKScutTGsOho<_MZtDbN0gjg@z9-t-0@m*&S-=zbV zzYv-Vj4et<*nAh1{2%aJb`XzB4qU#uO{NP-KzG0a)~G4G8-2nI<}Mis@O+^4z`Nm& zH~d)KItW9>n#3Ss7D?6;XL-T}8A)a=|IuecxHzK>-T{f0*u2CDie2Iy^>zW66cz)D zfXBTRVEo^_e zjtL}b>=3Lh;uci8;@8qKcxi1^Is}z=fYRuqv&1U691I<@i|D}HArj3hX#vG99^$p( zl16`siWY|!6g>%U$JD1Ye-JI0{XDe45VLLvk)QD;3pO1j+O{ru+ZH^vneTD8gi?BP zI4oXt`#S_VD<&j1F(D=`x_5^HO9lM-+5_p#RutU~VD9*%`Rjxd?Df(KW+v?Q(y0kK zt2<}GU(ZfDq>inZPDgkeTQ8kH@Px0I&W!+Z`1InR;jmr`!X~HClNEZPp@35!BF_T} zStx`;mo1YO;S?t!3z=|`qW}Fe9flDroDZGC6gV50Rbc-FAYEWOMBgeQFpS#JdijAA zSR%*`SoQ9XhNGqu1HwipBk|I>-#`ZGd9`s}q1BGLcugFtDnY4LL zbfbqGRw8U($TA6EOizji+o2v<<1Zl}5J){s#2WAkXSP6JiGL9FO#_+rCtAaK?g}Pz z_HcVCYAK1Hgp#I%1*f$L0isrxS!)v5O>Y;o;!qQK^Wxl*_!0;bb5=qM;2WS>^l+pz z3@hIbA_=AyKv1suceM0ET3QjMXvZ>jJ`}UIw@J2uS`MYvEtn%bxG2bqW(%~%5!?vV z0#p@NK=7%QS*a_aKH%nM`#d|43qC@3Z)3(2C%_f?$ZdJMpUCp_3E{FvP0k6$wH`@JRw3M4SfD;>@8=bmfB- ziaidEK_b|Zr4)ovHSoT{eG>j?3xEkk7!tOzrI*O48*K@e<5tu-T3inxbfk>jVU^?| zVrA?l572vZy|0^sBMv|N8LkRs-Sm3%L& z8p4gCmn4DPA=nzVhQDbuhhg-#xJSg=sSKkRG^QRrqvB|YWXtyasSheD#JwS%nAbRdDu=UUSSo!=V|fjP@@HNEA09BodB{#tzeG= zYn5zxac%zy>(N}G6v!wIEiv{21Co)Yya=7oqw9!B8*2wH;O|ilbkEJQ5C|uVS~*It^P4g%G+q4Qa476pVqL3)=|eKDr}d zF93_D5GIt5uMK=Nw3G3ji!V?drLZ>Sdgx_Z*XWpkY~8Rm+qQCU3X8a{T}#2r4xmRCc^5xI*0gAI<9Rk)cj`bFu# z>*+dokDxWa|I*@spun)TK>=PNoBpj(xc|T828Z|tc>PO$h zj?lmTt2Nzc&Gp+c&~dGB;)3qdYfPyqX6LRFvP#j^yFYV`L$iZy<&B4nnXz48r-|9` z8ezt_9T^Tub=RG)Sw)&&@cC_TRm)GFW5EIZU(2)j1Z49j>#mI>{I$`E7Mj9Cc>Q{M|bRP8m!@ zOix8mke4!fJAHev5D%G*kwj2c=J3A+O;1&i%1hQ3Ci2KZ1_YzW|DnJ{3gUV?dP2NZ zx9xO-7m>t6f_y~69)~;?aXtOn$FiM}$0c z$osc{|JGesG{Mm4QGC|YYVhH-+ZH?HOw-E9-H%<>g46f7Y@A<2){Nd{QGKyLruXU- zn)L9{wp$m?HY~8OyVl)vdFoE4jKPcEldtamEG&vW-)phv_$xl~36*B|PyEPNdLEhK zGTA`aaN0281&L5LV_T5?^vAar-_)$X``mM`plL<>l;cmn4+#%7-CST4yP(oMCGq&F zPg5NOnKUuo9=q~xeM^tY4_~z9CS{(jFEv=WMK|Ow|NNcvc1We(y;>P*a97mr2zlv3 z<;!yurmEEWOd2qmkwDtGAo7T%%h@oRQ8V*J(D2o>#V2pgCNY05kUVI>jK3)T#rCXm z;vKgj#fNn^n<*0B5a&AxvtQkw3gc!FVQY_{z)v=sw$u5OISlW$y zShj@wFwb%>_rZF6F`E_a3=CCZvtkkZ$s;VpYROz{_QO0&OP!@lIp3LQX|>cs2jM%& zWIt^13i0*cgw3Bnt{C0Ug7X3tTf%*V{lIwxU5RF)qtE^d{xA*4ZzutB-~rIw*aO0L zV-JS<(|&o-MMb%r1(&yu7{^CtsjbsKPc!mcykvrO^t<}b6Rq14o;mi2mMOYSa(Pte z{rGlysaw+?r4>W-!%<_P8WkIhWjMZ6)e!5e%Vtj4sNiqsd+zxOtvP9i3lA{g7j2xe z`Mpd^zM%!dQ#N^GdrO}#Y1crKcImaF&hs~{EYH!%{In#_Iw0VC#rkfOL|bE(zgC5_ z`nI6@q1|KkKYu2+_x0n+TXt264;z|gt(xJws=lXvs4Q^l>Ck{s74h>=?ryia6_+M8 zf5#E}*K@*XOm)UL@^Ag+!H5_c6s!W65XkMsF=68?6Rr|+33-GNG6FjGRF7RCExyMt&^B682c*)bs z^O2{6r-!GXhd?9~#fgeUEuuEjkT{cQOf(@{6CH?7#8pIBVgPYHF_aiVOd{?k?kAog zo+D-xuM=+*%ZLw&wZul^YvOxiC$Wb(NE{;ak*FjZNtPr}(jZMD>5$AwmZW(k2Fae} zKyoH|kbFteq*ziCX)oz0DU)=Lbd_|ER7ff#RgoT(>Pao6cG3`OghV7$$pU0ivLsoW zEKi<9)*|bY7n4_zoylJ02y!fWH+e5PoqUj-LCzvyAZL@Wlk>?Hq8L!j zC>E5(l%*6WiZjKP;!9aiVNwoLGAO4h*_3;fd`dCpA*Gq}lF~wHqjXSuDE$;Nm5-`O zRikQ9wW+#PL#ic}LA9gWQyr*IR9C7Wbv-qL8c$86?xr55W>U{lv#Dj&XVg||JGFz_ zL+zywQN{U{`BnM#`HlEZ_!;~w_}%$E_}B6W@rUzA@<;Q>^2hTh@$co|&wr3VgZ~`= z1^yiVd;Ep`kNKbRzvutR|AoJkznh;ZASxg!ATOXMpe3LqU?yNKuvlP)fU|&?K#)MB zK%zjhz+Qoa0*3{11#Sxz3p^BfEbvmGMW9WfM_^EZPf$QmR8T`uS5RNjLU5I!tDw7J zfMBR#gdkHeQ7~07UGS*jb-^6L+k$z5WrD4O?*-chI|X|M2L%a2L?N1xxRA1ts*tvj zj*y9vnUKAZgOIP#CZSlNc%cNLB%x%XOrZ-xxkC4Z%0K{GCGxILGql6QLcMGQr9~QnUoGW}=xLCMW zxL&wf_=|9daKA7gO@Jmulcs6Vv}pP?OPV#!j%H6=N^_#EqOGO*(V}VTv=g*US{5yv zcAb_(%cIrOp3t7r+GriLLD~?FC_)oa7Eu+^5YZMf5-|}m6Im?cD-tTQNhDGvUL-*z zRb;QoQISlM(;}Beu8QP|6pB=cd=%*v=@uChA&Ux#N{UVr)e$ukohNE7>Llta>LKbY z8YCJk$`nl&JuG@c^t5P}=mpVY(Gt;G(MHjaq8*|=qJyGBVv1tQVrpVqV%lQ*Vl%}o z#H_`Zin)rd7Yh~JBo-yMTWr7BWwGmGIbyfP^2G|ps>Eu=UW*Nh@retG%Zg7D*Abs7 zZYe%boFQ&6zCzqte66^zcz}4Mc&vDWc#?Rk_+Ig&;u+$X#q-3A#p}hNiN6+a7ylyO zE#5CaA}%kXDxoW3AYm*qPr^>ZNy1MeNMgN2xJ0tVL5U2B6B1V?awYCbJd~)HXqEUV zL6#Jd6qS^gRF>3`)RNSeoGED{X(4GT$&hrF^padF=_eT_87;|_+%1_ZxnJ_IWR7H> zWT9k)PAW9 zsdG}7rE;Y1Nfk>ymU<%fOsZL`Me4m&yVMt{Ua5X5sx(bnO?r~FfwYCRv$ThFgmk2I zvUIxiVd)I%)6&xiEpIRHAnzpaCGRI6DjzM+luwmEDxW2vFJB^GE8i&p zOuj?DSDvaMt{|&0NkLmdN5MeBL}8wSje@;`gF>i6tU{7Pvcf@yOoh`5ISRQ76$&j1 z-3t8*R7H73RYf&LLq#J+GerwU8^xuH&Waw2zKZJ=!xbYHqZAVq6BW}H4=QFTo>t6K zysnt5Sfbdd*sR#1*rV95NKoQa5>OIXl2+1C(pJ({GErhE*(up81t_goN>tjdl&*9_ zDO)K|sZgmzsZ8mi(o3aQr4FTDr6DDPvXC-OSzg&lnW1c>yjXdya=3D&a=db?@_yxm z%14z?D_>U5QO;9-qTHg4_*x)}Mny0CzG0hG!hqMu2s|W;h>CfP z{0z1n>z4uir9I}qJpK3K-$&s0bEJP>uI^r;zmqhKFXQ2XL^9g3 zBus4~W9c##w!8@Ej|ihk;s5&ge_g{*Y;n5jZTDRYhm`jmQaye%-u&yy=OL>OUYG2? zbt5r#S0}Y)xvbIR&s+CKN-Zh4XM8oE&oK1$4wEUNfgpEr?$44j4Va38pCr8e{GN4~Cj9)kRaR1h= z`bF>Wc@t!ewAO7rWL!X6z0>u^lqmUU2YRd+D-K)vNMF7uJ;~I2%Kon*2VK5TG%s0n zn_!mB=WaMBc>BqaBJ&;h(>7$(dN2CpI1DV_p1{o4-RBqm2n@%lr)!LJDsCknvA&cS zl&h3F%ae*GXaZ+~5TlFab$^%^P^htG>}a+8p)AV&d-wq}ntptDU>Di1wNFP@ zM)64CaIA$GQG&92k$A$&(&a|UJEztjog82O<;myC9p@7&C)`gW&)jvjOsQKXJ1kJq zcui8);R8;+7H_sKn>@>br^`9tLCb&kGM8B)8~Af)NWWUJZ{n07=VJ%*_w0G0)%RWT zp5`HmEp5;B#dE&hD&Tj!TCKP>_UL9y#VskHgk68vhcXYl*zYrSUOUPOU87&g+Wh&m z?7BxKTA?5Vt2QAL_&CFcBmig_RY#veQaYYP{*N&lhiCpif%sT)+B1BE%pWgEx_+U@ zV%qXWR#$Qx^PBEW5-_qb;pB zJ92u}25l$2{!nEZetadLwWn2m?7?_!>-1myDs}SBt#78{FSX{aUOn05ANM`TH-ka; zt21Ldk_zJccU=4bKLJ%0SBo~pOv9#65G`8%q!1%6xSb+CEgH+e;df6^I2W6~6^lO@ zTaQ_JTJxIJhc?@OD^2m!lx87)BYd*|~b7OtRYDAXG?2dndsXn>2@TJ&+Kh}S1mvi!3 z(*Ue<&2@z@#~d)Toz;1nZBiILtElPGi?3L~#6@3HGCHx>{a*Pux-MX!FYli3HA^3p z=1;w|>H6wF*55kug8x1XUhMdlfmE%*R7_xY%c)79JFxq^Tz8&7NWz>idqlj?%i!q`Dc?WVUn;3=d@=nK_H>&|3g$+^u9nxnn?3C%mKnd{ z{&MZTSbnp{CzJkT*te8!Hz#ikEbHvs<_({Ru*tl#-(pOc{IUMfDWMZz>Tbhm&hkr{ z3dgZi@>{0QG@F5~4vAZRBefV)&u+NZQlE!?9yr=kHTV*Xo;+de^S#BG)!Q#A8wZvC zSpSJA)ykA(wpgB1YSw4@T5L;FMUg@B2*&86rd=1Ah#j{poorZZg$>@AKP55`uBV(6 zewfdHA0~EHh4pUj@E_~f(eKf@^w(P~aCK0vyL=gDyT$a7d+sL8`f#H8v@$X_+q7(( zM|1}E+^@uIvAYbmd`L?5g0d%;#=Nr4F+Svv^-~q3bY*-=SPre`>|f`?us4~B)6X5f zg((US`Xp3XV6o4q4U#{-#~ger2Q#Woun$i8W;(+PSk|lrbE1pzAM1~18K`MrgD^pL z&YQ*ctgu`6XZ7Bm{RUIFFBWnZe2ASMD*qO>U;}2QGEjVal?=A%{@oo7v3s!CSzt3r zeDKHm-Dp9Z^wMu(nN;68?Y3;}c^rL^DJX}hsJo|2^WyGU-&T=7)9A zosPTM3hYsv>~dAi<-3rvT}2WWWbd1~OraCYVZEMnTYo!tTj#))@2wyISbwB~=>>Z5 zRjlbmUr_g~i&$x$VOp$~0@lW7t1B*EjwxRyI?PSg#6D%L&=c86!NT@EI_)>N2fMo_ zzO!BP&+EV4vwX`z{S3_3C8;j8iWdt#m+DQF9>E;9Fcx=T>cmDo$!W$RhDsQ!Z1gTeahBZU;o(te?Y1KuO=<)c^NR#Yagc5;g-}Wz7LZ=)ohzNsT$M& zxy~+k1>Z=JaAH`!A*3I7dex@o`y7#Z4#}+3r9a@{7%u2&Qw%_a3`Rs)ZIc(1R z=q$VE4cPY27xrl#{D`%txXp1W_QK}xy`n7OK7d_buv1`JX(x8!;gd(=awXW#A{qHr z;7|A`{-Ps2WY_YrjTkApbx`)kcI=RlLskm!3(Vl+eXDi*o?yD-TAyP=w6Sg-;yUB= z5c5v#-Oi?{7ohlR71wa7`(yn>15?{q(Dz^|`V%awwJ%~nmpWLTc)km(Ut>6gIc~#L zz0d8E*p!SVe|cu2a9j<`kxI)@O}dPIdLB_E*xdBT`oCdWSBuYWz*0Yy9j?3BhD{>+ z$?2&2V)vJ|M7K@wz|OC6o?ntNA0r#@kojVfjP1}a@xHW68C!f`WAFW+@BUc7)WtcD zuU)rcvw0%7#0&6XUId#k={Y`FXV>$SH4ucdUuLe%4C86oQ)}aepRE|!W4X8(y;X%+ zo~GQDr_};~tp7oeklKWcd$6-#Jj{)|mtcDZ1rub=9%2Sd&S=~7nqzws?e~0>8pfn^ zdRCs)Az)|Jde!q*$YC8q8#dhSi>=kwOMvbBen9TbVc^|jvVYdQ^S2eEcW4n(r zePr6KvF_Ujf!n>x{#ZY+Z@+r=uraoGk&@^0G;3^PbGrQx=T{inW_@DSRxRv&@wN6R z^1)dB)j2&kLW41>%Z|&vOT;n9Veg}q^gq*ADb|1Wk~?VFROc%OGa_`bG==opM<%3U zd7_Nh!T0hoAJHi$`%152p+eeO)~+I0jJdn0`|Aws%GzVs)3!$bvHjQI4hBZaWn)Lr z2u-1jeZ%H4EyZ3N`(e*cZBBM*G{;N=Ru7I)cVe@KGMobq4`B+2?Oi)Vov=^E9vMCL zFaB8ng{;-K8QmALnT@WG*2malaiUc`GZvO&cP>;|&9CCe0`r?@$PxUp$*t;l5~_x= zrhzc8o*%LpIqi$BiU9eK_3t|rbxFbg3&#H-ExY&YYV2@FxAB5q5tvI(vB^eq7*@)< z>AuB!8kR($t=PZr23DKCl|Mi_6%&rKy-Vvi`D6XR=MxNP0F#h1N8+5!Q@xLy2sgjD z{!G6UE~2p}LOXPDQ>nwu(;HkXz)**ouUElASnR(-i+JF70A_V=%tSn%=l;qI zQMLtJnCJKK2~M=M%`jOp^U;TmYb5syGDCy>R)yrHX;9zhTNRyMvzGN@ck!XZRFB|U zFY8b5Tlqu%iR#mYdiPJE>oZS=ZeV#OMJ%Pn#HpFyxIJz!&p*mk|Sae`0|T(!i3^kknwzIk29m;4~mFktxt^>tVKz6)FQEnhb= z^1-m2`u@U%BLTbo%=zUn%&p=vHH-26+)O%4B}Ti}+%fKrH$EFJyDK|1gj!mdy>^kX z)&7F%7d91lEngQ`+ou?p#QXJZhmXIsla;=Tp0aCd{j|%Si|&Ox>xUN~yt`Jn_s+-` zrddcMUFMWHZ<4~(w|bp5YT7IB*K54p`=zvdx)bx@$Dp4U~PB^1AYF0#}kpF4Mqhm^8{*?JmKOdj2zC`Y!NNnD{^})CM1@V#BcdrwE^zP<9 zL$%$r{PJxAh8A`lDIQpQ>O#HdkN)zN;z#cHm8YkLDDda6={Ame;I4J?smE(#oW(J$ z?Q`nGerh3kMVezxdQDM5eEZ9NCY0NUt;{zkYx~BvD1Du3KfU;Hm|p7K<*h4)uFgG8 zpCr$4m>eo{-RsPe`GvM}u1gf1w9F3J-||}(^syz*HN&D~>;1$NcVhNE#l)r zZ16a=*xG_;yQa#wkn0mKDjldPZ;#Ka%zApR&GB`!P|4C~yJ=2CkK8?uN>_Za@>|mu z^4PO|f{6RG=!wV^ZwQmHZ8ZMc?b+cnLjb7zWVZ z8$5OKt{MpPH3+)#Q?&Zx&?;ZI16wXHc`F<{CC_Pn3vHfPq+wF{{rj(bLq26Rgl#2j z&yx<_vw3~|Q{N3{tUO=kYQLz2kZqUxsL7M8rY*ZfPd`#v)cVRHLS>$8N6<6(dkMvw zI#)a9#LArad>ztIdpASq%ChzEU0%?a=^y%jY(A~y&{XZf^waUCM;7ckuk`u+JXz~w z$ID-fomb5GVK*tHYhtL&$jK??@7`FwJeM0<-E^C9?yq;DfkgjrOV^)jQGM4^Aw$}; z$=Lr^$Oh-&gz9^HBM#+O?)|v3OYrFSfXp;~WzVARjBVu(M_tkashKW=3{(DQ@ueSb z87;V8V^|Pr(VA5-iRm{>z^Zl)@uJSe+})P_Rc~xXEv8&Oo}S%VeOh~sW&PT-GY=P3 zY=1|nt7@3If6vI={LR)Xb!++WTF8shcBn!cOU&2?YKdq{WnxeItuEWOPYf z&=(+oc$(mvbnQYM|EAz=8J1t_{l2%xAI`bqxhY?zqKq)XqIBJ{$Dof@iPSFx>jK(OMNPim4yecX%tv?v~;d@ zxOC;U=DHsv&jTOH99_2k7dZ^*9ak|_O$Dgh%dQ@)oWlW+I@d>a_G zUiY!Hwb!zmJU5>QPt;@ z6nQ!yi;vo7aH_C%-T7xJ63ImJgizzzk4@f9%lmP<<-Yq9`V8H^Ahq^~jZ-A=>yY*c z51y4Z-noi@aYV_+NrmkTQ_L=o48}%L7W7TJa^UX6gqIQ7-dn>)ZknyzJFz{BS)shz z_KMuFJ0;uN)NxnaR5^XhwvBv`65eaA`&R!bId#5J&XusxLbcK_XBN%x;um3Ey!c$u zPx^{Q&zjH`XD&Q^XWO+;$NGE2!1}l~(o^eRzJE2t-_PULN?Rk_t8qQFu;bo}W_$i#F7p&rwJ#S0g8q_wiMT*x&iM;ILl1_Kx=V9X=(YKFXW7CY&=jlxnNh z$=h%|bb)t-=}c=QbJMT>)9u49Ib>%_uaeuxUmrR{b(xb5pSaDth$kv*p6tz$7|C9$ zeMCz%!=uCYsrq-gsm&3&O0DyptG`5EUM{D5b;lt> zp!Q)`=1`TBH>F&u=xA-T%oL;8$F!Z>`wuV#H0TXeqC$7iy{>Lu;r?jDv6nF$&9wz7 z_swRdCeD6P_x^B%mrj&x&I051Wrx;pB)yxrhJRwzr#G*o1Jn859nF!um@Ij!TRAl4 zh-YU?u<4G4Y1;1b8|2E}qu(FfOVcp%%vMS~FC@6@mPU&jw%5le!nZCEy4vU+Tn(+byLGqm|;GJ ztCa6e@T}RgKlfvWZ$iP~0`JFHR%OmT*~+&+x|bd(<~EU8x-4H>dTN>2(6rD?1AdOq z2Xl3DCKb(`z&y5G>wfb`ugRve?^t>A=cm5log}%6>~=S|>28S4*0;;Qsy!kG?~Q$@ z9%k^B`uqvMrSSQ;&JUO#_DgP=YsjCPyUftLaliG>h*xJiJilje3g(xds}eI<3YLIL zF@95r&BEVob7b@|r)<&fs8`D+rpC-^Sa#U#rOcuw6P+}hDfd!hIt8DX{UzO?AGZBdgd6;mV7SVb~LPJwKHF`=_a2=?{t=K==&b1 zJoOkWt8AvPxnt%@*KIX(^CwAf`84J7xp?bigQwhx3o^7O9XU1he!cF+_2RpD=|SER zDUm)kOj*qu$!pA60fvWOnlB0$3doqRt=Rvt(Opvi=Tu#_$o{g2HrEz4EM{NY~xZ@wFLMut|plsG$OB+P8OD4Tie%38lK$8Hn`UGDCjW^gdQb?RhGulBiX z_i3)#cVoCB*=CW^cS|vkNBh3&=Tx%P-l;aHcV+~;BvS9>VtX71b6*CP))?p6wr`}= z?$^eeY4?pq>^eE02?e``E>vc!Rzme&tVyQ-jm+Ul!*6Gt4@`p)Tn`$1aI`eW~$mqKp6bB_A-?7ETg^J?FN3R`aQcvgMBKi#%17n!cw|f6erH-n8Wsk_p64ADbYlQi34??&x^;GtVgwDiCFWX{Pg z5-JyN9*s-QEIpl7nU=gZJTsJcm8YrR%cn25Rjlv7=`4Un4($m_2vUA{GH+tq@;RB) zLd*KXgjNWOIGyO(TKXzFPHHH3gQ=S5yQyL2H;Ou@TkH~0eV;jZyMSlqxpnP-r4VL& z)i2q&Oi*u*e(z>AKd}q%)cZEyNLoWUr=5FP^=yNqi%E0|ul&85)Y8BeE9yiZzT+=8 zSy1oq{LS4rf2%pqAi z`mcF2Zt^xooVk<~R??o9`8pxfW75s`IZ->Uv`;K*QVBABp8avkd`HRmcTIns-GQyK zbieNSwZOx!vUtkQYI++@T3>Ckare{-@k1VA{w8i)UX*>ye(x1AY^+l(OeM|Ace;N5 z(Gh*8T@7*P@7Wc{9EmA9^=xjT)A1c?P3PwC6&R8DxH8Cd#-LP`+HT&9+x2HWc(>H? zfNqJ0T2#~94Li2QdS^YDst~!bWx(^6HAP+4_kDqYplQa`TZ%r7@8+~e_Ka;MsJA3p4&|DGhV7>~YBq)VQD#k*|&nUJ&bU3kF_ne-s)7v7;;el1viAOv)YmBr-c{|o# zS~R6wbf4kj#}aNS0@pAblc>9it&h)k^G5AdA2RE*9|+x%a3jAYCe|s8oRa-4H%<16 zNpt)WY5#p^+}B*OxO4XXi%&~xw%N&KemHGhm3r*>%WLWOuA8j4B(AJi-ZJ!gP$c!* zg|t-c%9GgE`6|M$sddTcerQa0eZEL2G{O6LezY;g#@|YfBt89TLzMbvqsgZtXQgDU zY0uwORsU$>J0+Pw|1^QLX_#ZQ^@=w;mE<>0+ZHfA%DzqRr1r*r53S2i8)*0XT4|KT z3ig$~`Y|;k=fkrp!w+XSK1=z^xSA7ge&<-=@k0iyH@?y6yRb@#c;bb=)~VvS(rS-D z$HIy=7v^f4-B{_ZXgSZB+3Qent$c-7UvA;7OcUaMx2#I>@Hv{iM&&ck*{|U*>sq<~ z^JNvkp`@(#u!H+-gd0@vZQI7wwr$(CPu)&!+qP}nw)yTqyuZlK zPFB{ZR3V8`Cu+QrzPD}d-g+}pMylNzg;=fgK-W5{OeIUZ!6R%- zD{!!@ML@+txCF=UceOCga-X?chu2y^SIJ=yU9**Do?XiZbeM(CM{h$Ht6m6%VN-~p zEw_|Iz)pWD4BaRj=45_pHe2PPPBtsgppo?`6McfUv`wBUe9_3);sRe2pFL#RKg1vW zAd?rdF=8a<2HFullq^syKBG&mKI)e(4nD6-EB$CT+h*XAS`RWJ19Ey(vqXzdymoHI zxY4Gp9a}|EV~hrqg%(%GO$2ywuVNGgcJ=T(`d|;1Fhv+bFYz`+iUf4vdk_{1@kyOa zHS28SKfF2By%7MMTUZe|YeVm9+6njV< z63EhDuNo`6j;2qjV>M%pW#YavX}}#6^8XX?fJ&rf&(Ow~wqLuo(4|@*tRyC)xsm^= zJd4s0r!AbP@1y!guShR%vphuhZco{-I7WVRff&{4hqQ9K-~bq?Ff}?A9oqA&XUD=T za)02vOi8&Auv5hjR%1MU?~Eop(Y}T3ExuvuM;jB9Lb!zAW^65$47t(Sp~1`>PHDPm zDxt^;&vm_-z&sAHu$mosdX%{r06rr_^NRHo6dD3pJ*uTlJQ8$@0vVu%iiB7h*C@J3 z!3lIwKV}eU4@~Sz6Ft<2ZSDbAr8XB0XlKYl(b|9nx+MlvPE2^6GLP|7X>*RMU;N;3 z*5ZF3q69%q#mrhUrZe|z=2TH{K0voqdl6i$k4^mBk6!g_IkaDy28lJ%chYCXX%H|P!ntOt#xnNeS9bW||J3iHQ>(-f z5;s>%mgInls}R#!kz2ByH=Zk7Tm~Xy_n9xaph%l+Ro;%msictsGZ#jOI}gdbxa25X z{EBjab3gI{epNJ!_WBe{mo&=5vWvQ=w7}mQU5^xEC;4LO;=(mQ0N8_||FiF!mVsNE za7B3QWXrFm{jDa>Qyf7_tyYxp27?)5K0E4!1`Yz70+aE_zBFeKkryl{GE>!rX`b;@ zewlXsU<=MH5taI9nR&U1_4cs}&$e_EpvEg+&?&lM7Gm1+xJeTpFp2}8z>u2nde3%T z`mAwnxVLJ@QV>blSLB6(+QfCtUDpL4cgWl+C%kot?*L(Od+cO#b1og2{wux>y;sHd zJ8NKlOz@t|w7%GO9jAB)B#{M5J{gq2>^7JZtM(PdT4W5_;l|Io4CdpI7AP0Q*q&as z2Tzg!@aau-$V?FgwhE6Ah)xB6Otsx?cg}@Eg@)k-#vd67hAs6S<;+w|4*pDG__+>1 zG3Ct&s;vRETRQ>Xq=h~5ijV>vBtsBH3C*dfSE#)LCx?wyevPWyTORzHv#T46Iwd(U zN|wcF37D#Fd431N1H4*)Sv}YvFYKE*>sMTD$t&I>0)egw7dbz^#4Ig80Jajg#gpx8 zBcBTBT95Jk!hC+TsoQ-i`FuXny5GEY-_9q+U)d1@tzeK9;3Urk8Z$4-da?q3e6}wG$7v zAzV()6aLph84OOjNo~#i$Nu!YhFL8EOlQrD=K&l4w-BI;uW^S1q8lX!Jyn? zZk1zjS@@WyCYJ5b&gH*x3;w9iQ(zz80z9L)Bh+CJ_|Htw?*f7a&(2+6d&{iy0trxr z7D^8(eB&2}*Mt`~4J9^BoY#tV6e1U0TSj3O)VfYORJFDnTS{>Zt_vMg8yK)er%1%i zLHNrkp8kc~+*6|afe!MsK|SFs`M=9fCff)$u#u6*9`pRzb_LZHyb{Lf6!sL~?gk9& zGKnX=c49E;Kc(OVbn*3d$)oqQU}ZrO>_o@uK@`)qvrOxPrD@N5Fc}a&NSc?AjhirS zaTR*_Dg5akaZSk0WyUAN51>)-Q%rvj91s4>F}SgppM!V#Vw^KP27}1xf;Bw({ zlp)CyS>qqGHHk}dKdUYr#(CU><(NSha9WntQporB0dt?T7K%qhS+K8jx)}YMYEnIlarkw($>qJMGGMvf%1K8J4*$X-L7v>&n~!qQKq)WNgn!$43th z@U6giBF88N^UxaT%?{MXLH9Y*??@+}G#j`!wNrGGeo*Yf)sveAM!OJkDAj zh3#HOj5NC1G!Yf#$ z#;c*%8XCAnhy8^dj-h1d*Cj9>t&Ie(k#{OSW)QTgAuH=m9dapF$H;YPd%WSDAr%t$ z_5F&P!+p!@mTzMm1aND_J%N_ndm^ITnjX!|ACwiE)=yU9Nak3+*H>-4wZlOV?&C5> zUBPJt7H`>A4gBS*1WP?wh+y#%2CFZThQh+X6`#K9Q<=qJ{M3~SWwDHWdEXHKB$>0+ zTu<3M0k>*ILN+dU_Z)d+tCJNz#HbfduQJRzFXFF)!qi?#^!HfCA4V;0x43XGF zc*1fC)P21d8b~QO>W9%5QyU)YB!Wgsn`Ma|AY^j{Qj9s*(JE=uLfodq3%|07J}t=f zhb17>r{LIq;(&?M*%Z5ACy`?u$ju3TUm38EHFUya#s!id+uoLhdn}(SP7xiQc$f7+ zEl}JCtxVT1x)%L;HO>?XX{pa{LA}4*Y}8a{vb&4kxu4nv=HlEI1?&$oG` z;?HZO6%Xzr{a)4Qjg8w$f(uekt=Qc-$I9c>cvm;KSHSGy-8UJoKHM&4t}uHewnPX! zn%6{-oaS>h878C0)WE1mit`a{IHvpeVJ3um9I(B3Y<#j+;i>Eku>+j-k2dyynf zpr@d#OcWr#1w%)uIEE=4-H31FWa!|*v^??ya=8~YK~0q?Q-;&4tMXldtD!%1dR1Ym zwCJEh0y2fnaS@9g!uz-AU3IvN2gxEB2x_ITmFtOI1XeCd#9tc3`8f+R=EcZijCxPM z1;#+HL?_km&#mRh&7Eq`o2~o2zv-e!hn-3uoE+K?hLz#RkS8ygHAQ~22R4X#EuloS z+q*ds2mVpEFr2)Q&iIL30 zGZ6oL_}iOdq)vCSOoI*=GP-vhUF))kL2l}*8pn8cEoOZo5Du1n>m44`ej-Bj=c}q} z9~Avl)mRGDpY}<6Kfvh7n^`myVX}TM4@M`}pBEHJzpN~M{vXk9 zal0i18r!8_!n-oSpJ|a|2_4}I-`oUy6YncFQ9El%Uw0~rsnCU;Z#iYWCLRd-N{F73 z(W35pD$j#BK6U()SrY_r!vel-;gcDzzeMP9Lo8u6&*Bz`D<8IoTiQL=xVUX(wFow% z8}bnsnJoZow40@`XD}jy$NRlpZ*C;CtHy%w5{nBfJF0E)5FvU<0+NxgU#t|;rwhXM zQQg+gM?~TayZmA{9DP-rOsT6M3hcVbmKcj-Q>=YXgf7)Cj3!${CYR|owkMw+c-Ry)luYaVT{TJ8AH9+ zDbW_qTw@-yHPg*9Wyfxb4ge~=}9I|U< zcmV!SpPc7p_irC}>85fu4y!Kc);0Z?lcZJ1WQP-b!ki2ZBT~uvZLbX7(dT%74lu$SX&!iN_03whn@QM>nL{NGM()1(S z8H9go4ZRtuVRnsj+spu``zI$W;cwmI69I0)uC%W3BBa|gR_(EV2$F=#tMhB;JbzuX zWj9-h*szT8AztiJz`R2o|<|%4B+T2%3(#{hgOngIm--2+^)7B7;o^5x^WF@>_6LuU=p{4ef9H+up zaNOo79F;zek)POBIoXrE zgCEtBQ|BvOKk2zN6H#P-&9E+f;y8HeVcA>suok12NnM_EnR`rz+{8H0wzPXN;@OXG zsHk%&$RAYWa!aX%8q((cRiMMA+TVf8VzCdOR=#m11s+o(fR&Ew$|zm? z+vxFq6{{}u4dUL?V7mE_XKPM^*N`78{!6Vl^|jsC@3}PgQ9lM8=zoSWQEhDQdQVcl z9OnuUkifiTXNnJCGvyNUXNL>d)DOwkQE57<2d~nQwGasT8_IDqpzuYgr}5rQ8z{?au(!7X5+%SMH8=cY+&kSB6r@74sX6-jp4xi zYsa5JN^`nOgiV+6RKO08?&-!4dYXwq6 z5DjM`DBBCKD&fVdvbvb4}7FY`e8us zi{oD^!sIw3;B4#WEIQ9KVra|aU-R2l)6ET`^PTI%dxBcmdo;yD9!9Lvn zE$moCE3fDf7`_SJjX+ee4OWD_F~b>+UH|^`*Ad)-Ppf0|hD+9Xk;t}470iNunhox9 z_1*MmVvPTD1}JByu)F9ri`Kxaf7>~H());B9e7v5H3pc5ru+~{tPFaQ!C8=7<0l>{TDbh5u}u9WBAIFuAT_wm@?W>-!0 z2+6ZCU&PN^KWlTxbB;z{Ia$TQWiothZ2ga>qNdOhK@GW z_0z#9##ko%3iLr`0=>>tW=zJ?WG|dkXEimYx7^?F>^w$4b)J2>``;uyD&)68At`w# zcBo_;(3y@LFC_G6`7No-vuLnYS}Y?KC3?$vP>#%Z#JN?>SD7gQ`Y9z-)Of7`l(_$7=s!@$xb>y(spv5BnogZq7l5<)-a5+Yj zU7rtg+z-D@fe~|bCA+iz5%#>~CF9XO#a5jISf%Voy6~E;Fo@qsmtd| zTkzGW>Yt-GCF9pmy^05#CdcB05<8>hJ$17%&EM^9gqT_)Di+$>djb8leUOm_}Kja#aHldenT;1Ikv zN>}`s)8_Dv6~Ectl-J68O#<#3bM4suGp!ba-xZ=b{~-nis3Ty^r4My9#Z3XQY zDl`O*#9$XT{Dw2w0%NyfVhO!WAqF9)suis|>gKb&^~2Tuii*sam!Ai>h}4)M;w3a7 z0s@D1z7=F7fVY1mHNsjFjfu;Kl;udNEOI5em++m^gYsO{dck3my;ExdDe1=TB|NaC zHGCJwxN)|glZP4u0J+Tvpx)=+0tu!a%%Vu+5K0`oFi>To-0+{doQ=yN|LhBW4JYb= zXGYGBadDe?iOY@irh5G3+yxoGu`B|<7wwI+lDDX7P(!`z?G!5uA^d1KMi=b+dYnsa zBRf>(Uyl%*a^l{8q&n-&@J_~hTNU$*%~rGknnQp6%q1oH2kb;m%Q>x}xy^2nQ0+d2>?# zwtT5_a48ty+Fq-Dqo&&+Dfv~y$1`_d7<(I;m}jehha`cH zF;W;Qo?NMsT7ym~sfZZGfiwr5JgF^Lzn}xI^5AR2+22*HSoMz)3UkuJdUc0(@BIJ- zUsjtNj>XXd%XgNAqFe}6@@IguMXU^f#WTK<>fY#`|Dw7{+m#pb6L+Kh?7}H$IJX?r z>j2UNQ@4vNnsjWqg`AXdQ9nS}*;C@JmXzac4I~!t92&X`mGewoV-#;E!mwLaf}rMZ zn_-$_IvRD8!Nm~bHFZ*)Bl5TRtFCrTsgu|dQw6D1%ei%akyF{V@O|pggN8|q_wO_^ zW0u->w%kUX2;^== z`Si9b;7$N|nQ0|&c0lB@9%;By@dkZ2_T<{{P(A%><}XqsFshI|~xf*%%x znbUbnQFMnm^Fi^$`Dqm1;V)#Hlh2ufUcr(e&^v4M^3?hW|6EResf}Jz|)|>^j&U3A+-q1^AGRT^;%VC^}_SW#~<^CLBBJg59w~cOuK-O>Q=? zA1fz(?IePir^UW6ig{8bQT{j+i$jujGw+AhwBW-jUf!51Xxn?|<8QFr^hH^SG3Ik^nHEB%zCnhLl^?|tk5&O9i%da-CqjP3 zN%#v%d@tNTUy7$4sm*=Ksu&hUt^D44pe()k@FLAz-vIP)aMq3SamT04=;UGxoF-am zS!Q2v^^lYM_v{-DYjv_RnCqJx%PMaF_}-T>JNd+Y(dN|<`C*{Lit=J(KB#G3*t^b@ zl_}z{^KSfv0g*u7;{1NePvnO};fzrsYf)m_?NVm;AN^M= zLYx_NQsU%?+@{rBDB&WVGNsh7U1-65ON0of9O1P~2*~WFZ+xo7yv?WfYYUvq%a!nT zF%}jfi`a$TfwL{<$ahnRvpy#TGB$hS^0S_u(Nx$3eyV6%ON{bqJnutkwXk$}QW(m; z1jCFxKwe}G7B>md$!pF+h`6n#FxtwFFa_gj>S^wL%7>6Kd*uIcS?R6liC3?O=wkV< z46@&B#C-tpKi%MF;CL+=#{>kbWnnMb7v(XrpW^t*ks(Mp{!*7NZ9jnZJ-@IE{T~y| zmrdzKY{Dg`J`VApwZFtr`kpnpPs?ycPooJ9h?|Mq@Xr0~mh|D4tCA{6a<1WUaf#lsVQ!Fn-_m1U5Iz?N!&3 zJ+6Bhgh(uj$UhPiy*oDdc+^-Ma^d>g%4|S5-MY)I1h4b?7)|rS&<2L+Pe$>nY7F^V z{_Q4$Q5)^Wd39#Pt@&@(0NZpe(r;b4^gy9#4YCoK=ZaxZ3NDYngv`oa+sum~Leph^ z8iqDylh}LmS^6czce_)*vzOi|V9`>oH$gTcZ>fp6Vr;~PTX|JJaYTEWvCE8J=amV4R%*~kJx^V9 zf%975sy|DkIvOJdGe<&a!cV3EgydL9x zua<`v($@yC5vQHLoKYZ_}q9hKE+n5M~D%D=?!4b&{D!M_>fS|IBb31B>j#x!|L zXp2~X*CrR=i9GqUhjn~JsI7HvWWuO{U<%9@gC zyU)2t&H29i&Pr_nD;8_>?TpP9=Efpy#iqQ7XjRpz9s7Lra#t}1p|4* zu>QA(1pP}Wc4#@L!Q3j4`&sA{y*BI4S5N|`lG@c&ztDEc8>ih)IEN2K0XICC@0Uk0 znix>s74rdpkIGL!&6u9k8k&pK%gbm?9C*$70c_;zNgoL^c7+D3gtxNFF@@S8&kQg} z5f1(s9^Ku7oyUa#{6ou1A>?)MEY219rw+;KERKI#E%1EaMr-U}A(Sc=vA`I?k%h2J zo0s~Pt~4@cT@n8QBp#RNf;tFNke@13A`E+6Zz#|zqimN9_AUlwoBf@4_cJ8fQ^|0+ z_z40Pz<;O*=}EiC6GCnkmb4=q@zc$}{MeTjz_}^0{H}FQc`L2m>Dft!NeQ41aI;;G)bj zMnq#iy{((mAH*{yszSFM=@FBZ!di|i^4}{f;kO9+8v}k8ECs2TeW0SmMy@BB_t7Eq z%x+Km&VuJ}bKv(((0!)1`stMYa509+86|m7`R_<1(CUSa?kQPgJff4_p4yNi;PBA@&Tj z^gb8cYwma8mZqv{Ya+GoOnf(RN+vsoOn=F21QqP}a=<@=U!_YirbFP&IPPb@b`y!B zS6U=m z(kj|RScXBZFNav}|7Sv<@LUJD?fa za#px~A0fM8Hdk?>yXa+l4>n>x;UP*0x#b5j1Jbeg0iS>L#9r%$dwC@R5U5Qgmi`x0 zGUo2Rn$w#t-AWw%hfNfT zB#Kdx@}V#lGb~$t9Y17xTT`>wSsFbV?iPLz-A4vP1?i62hk_gAGgDcAcI!Qk{NG7; zp*To!s(P-a6T19ac5t*c7Ngg3KiODrf1!KpH-~ zB4f=liQKbM!<=&0wkXpkj8N%tdn!A%5uC5BuOaqZ+xWtK3Z@9ME~)qgQv*d>ZLa5O~Mx*78pwSk|f@bt|AKk}Y*f+nW^7 z-WKSrtlXL9gjb4&CLQoTn3TW%n@LyO(MM*aF~2}@t5eAD4`^hd5M=xE1o@Y0`2wUu z)5K9DN5KtGvByOM9$e9y=>s0n>14$RHEc@T6d(xAAx8c1!JMdnJfDjv1W*>Nqoi%$ z#D?FaO6*A3V+}r>Ef)JxZAD^Jj@+he1L^=o1M5r80@Y`f7&>NqPRot5J@~VPdNLYT zE@h=`4qNT{a(?8QF)Hn|=-ir*D09+mM0R?1Nq`uuDW=^mp@C*F*|(^$Pd!$9n19BT zM(yo}a<}$S|p}z1aH+e_hx|tPs$_| z1Ar2HR%Dh|1C6xo{KlXw`YKj9FT)8WcT{Ehnc4Je8Fx*8KWLVl(W%53Jj=1H)`}x{ zRKII$A!>RN&UG?(Q-Cq94pWo?{1=VTl#YKkMBx>BSq|;(uG=qN`(g3nj^~MEO{H+w zu{z9&?TI|`hoVhGJV;l&a&fmmIbNB2L6^yb&&bT{urG8kW8d4!Q%Aj-9ey{J#mdm{ zx1M~g@iJd|2?i}RS=$&EPGn<)w>NQQBb6H=6hz#LxeC4b4tM;BET&RYekaAJ-}C^w z8mBIh(;Lb}<%o1*_+y_}gMX70s_ySio;#M%U#6ZBPC}>Qp-_dCCh7NHHf6e?yo0flHK|BW zmBMNv5`G=Im`t$9ukt6>S&UpQw#y!*p9C8Od?tZ}^vXm|poM|*^BDgAEpM_Lp5chd zG&&q^w2tYFGoQqO20o<;+QPbEjwOYt+=%}uH)#@$VEhVa56@5@cAGISaakC5xb0R3 zctjFPa^Y)0D4`e2OA_xeA@3*nOKyS}7|r6mZsKC$iGCRoO_GW zh7t5lG4hR`>y15)^0!&_Je3f<^YY8#@_OYp_5i{Cy?qPkmw^Xr95`Uq?uGhEhRwrP zx+P7lVCiSpwK!(({Ikm``h22cxmRv6aydNxTB{|gj~dPKwFMhoQ$gFU1u-eNWO#4egcqjCt_OP@2q#s=8JWtnbs2XL)*qZr~1v@0NSNX35oR z;oOd-W9K*F@FMHyQbmIdOH`-6Zt?e|VFjWW~wESz?O}&LX7@F(BQH{}0q@TVtIXq;fyJP9d zXf*D&T--xG20@M(guMR6p2y}VHR+efeFS)P;_&D=ej*$CcV24?Tg`EI!lw3=3Fa?~ zo&;@EMSA5XDnD{QDbjxjqFDA0H=S4?NAwd(EToPP$FUMeyPOL8wpH1oXTfJcX$|UK zGce(UO{;cvWdh|LS_j6-B9>87Nl?Nf)}&%h^8LP!Oethwc2>LBr7&a|Y;; z$U1~a_dgsjW6395W+q7Uq`zeb(v%`do!49Jz&5{%^<62!N~<5f9|hrBSC8br%2#~j3W9eK0_dWFIlRXWbrBAZ$wOck zo*b=2`L7Z$I$guWn_4Lop;wUmJkkv);cYTjgXZ2m=3$hvC66gJQoJRD#^thu)Z2dq zYOXX2_9V|}Ub7YFME)Y&<@5-Q7s7*}CUnsT$&#LeMUJuXcBzNOI_=D7d@QHqB}ZOE`m zuSN^6&BWWVZYRMFTfAjp4&V{&KJa%31g2XSTQ` za)&OK&fOU5qYP_@OfENB zH?#H>QSc_^iSP` z^S0&mp^y(%1|i1x?UE4r*PXfHu(|9HmYCTaVKsM%f9>7WG*=aszUIzo`qn}u@1T$t zN>Zl$Byq91^HjR29u;gBhAGo46&L0deW3c7$v1J~PI#*_!3%s;#n+Rkr@!m7)0c5@ zBa zj1AAG&OHh^h07tI5>XncvvGLmb!J^~NBypon)-|GCAPvN?vc5r8Gji$TYQo z(zj#K7UN}kzq}-*wL$AAHb>RwKC&vO{Jkxg;d9Y^ZXN9_0VpG~beun8uHD_uXQf=- zKa>w`OsJfdKq9y^KBdr*RWlrqYJQ|vJrPF6I1j7<@WIkCmx=Feu$+VoobM~!w*;)X zSc`{gzmm5((Ot+Bq&W>(>D|!vr#Di#Vb(YG8sOeMwOhAyXOhAEsuW{oR2UiO3JN5) zu4QYzmFD|}>q|aj(i~+PN4yGzE17>wrn7ivc$~r1f}<+l4APqg~xJK1peLesf7gr>TT@H)5qQd`BV(QP`fPGwbf=MQexLZ2}X#Q{~> zF9CffHeLQ&YEiK>%HI?dN#u6JL0jgJ#gr+M3)(MCf{iCUP2a+~t&Cn$d^>n%Wgy3v zdC_1)KePAL+P@}w!h1eb++DFNXrXj@+FG!bN6`6ly@t?DRi#4eAJ)ZI9GV+a^QNsJ ze-keKgV3u_deZRKo`bkHT8f7{EuO@huQkcx2!MAGt0i@N~gFdX80?r;YVuc@>EDGwSwtZ3r#%6C#{|V*( z*03GkZew4EM#RN3`~`#VME&@xN|g-nmfzEKMk}ZDH(#_>7Pgt%-#-V-wp|5_EA zzm?DP!+8v?k<{osJ7U|y_dnzFVJP!{(2fdYwlsgp+L1b_9QPw9PlJm0m+$?WvkyP;(+7yrrVz0bDua z>q>yX@;Y{SSfCbsc{$y}s|(~kd}h>?M@ie?U)sTL;?sfkVh|^m=Vr&=cG)jW2LIud zePCTTnZ=D3HnI3gfq7WJ7!7VWWfWIKI@;R6G%B67jn($Rq4n3kSbk-w8rG;_+2M>H41m9)2*Nu5n--|N2D-UxxZ~uMNYnRARFq_EKq$^~!-{ z5K8K(KF*Q%1pV*nNt{~I=lA5}I zeFQTO-5nZahz{@M#fLQ!f5%vHN?3FMl;U(Lr6T>(h_Yz}x00w71htOAEHA6-CXO}I zT@jo83b#aC3;nl}ymh#08S`(2X|85#0xY0*lNTIsO&Ay_U)%(gXUJg1`Irw5C7G%S+b7Kq1In%B}2*Vw?nA^DA zum55cwL*&izX)t*gx$Ng$B|-D^4#gnKag-Z7n5zg;YKb@G`Yk{bX(W4rW&^s-aRiR7lu$?74e5OhF>(1>k1LWuQSZl=S>kw2P= zzd@Fr(H7)g8QPv_^7R07eAefs=Jo<#@193sGjI#O`~%I6bfpYW;F36aEF~)2HlZuH z0w3yM|At>9Mvm-z&tqmB7jfTaxxhg9H|x8aKT8O7UJ=b#xOMu@(AoqLBNY=ue<;w< z3FU+S`9pw+B(_jm5UP_P@2{rCS6rbTK|d6{SE(r{P;88EY##pL1GTb3`W-|xEOa)1 zsASF2y$m55%kVf1V0$5Pgf^>>S+8j%HqB3MbnT$+s#As546RyJlFn($IWIM@`2|d+ z42=nf>o>OJQE6@0g!H7e%fA^k2F#o1>Feqz)WD@$r203r3RP{y6|JbTceA_TeH|V4 zZ;*EqtXaOvn=i50G+Zs_h@OE8uY-r9hDzCA_Czc1Ontavm&A@Nt8S^FPvD70Yi3dK zxVMx1Tl~uDW#`3XVfl9$OBEL)L#O6nknbM1IqOi_rhcJ1mfYd#VPBKIxur>+3q0_) z>+RAdKiQ}~)41)N5M|*Xf5D|vnzA^zXoCxKeY-Mrm6*ZeZdLbQ4lOkj;fQWM5w4LC zDQfX=0O>Z!?wYDVQ$w!y()5t?@lTC;wO;stqP+?BR)uoG8FzH7*o8^4S;nf`(%*q< z8rbj6?0g$YHjfC@8&>?tem!vUGs3Qqnl-72O(#TZ8f3cjUS%ip<4oq-mCW22kCldy zbKz6{@N)ekq#Roo)*#PLL`gJPXAsBLp^yvaCzaF6*q02nAy~|SK^Fq)>xt>%=*EdAB7yobvZm8TUjKj z`z>KqOI2-h8}QL=umrHsy)&4Dj`3$IRMe*Ft@X3UvDBs$xlhhF{g}I{Goi~2t*;S< zy$_RC43_}Hzd);l%Ft)0yPQGf97NLDtu*LTuos$)_!Qk&%1+sm@Kno&(0n()o|knUQGNb;4;2 z^IG;*c%62yxaG=tCjqDU1dAv|NJ8$jx2PS1;dE~Be|MXtIS49aG2tH$JoIiu+n(m) zQV$W;(VXMd`oxI9F@QOZ4ViwT;N%ZZ_c1p-E_QxhD`XU-bbTJoH-j9M73{-gi`eDU zSU@+lX;;O7ODSspH0u(*BM=2DIj|mcX2Aix?tAlX#Zlw}pF9FA`&m%U_WLKKWrgiI zwR3g^)yKl+C}hZ$7;IwO%3I2O;8jK2=h2`sh6uhw;WV(8M^vKOH~L?Bk(XyeA!z^( ztXeED4iFInQ|RU#2Vwx)QH2jU37r3zzjYcnVP)8AWv2n!w8{lLp9X)akMF)1{>Q7p zH0Vfye+;!zW&Eey6<|mJ&m<0@pW2&KHysY_c!o5p<%hF)CxeAj5rH<-dB^>E@GkBp zQ~F5v)j0s`8#buT0LJY#WOG47@4(2l*PF1DuVZ~5*ukI7AkVirG)XGjhC5nkMg`v? z*|nTqG05Xe0xIyGHzVP)gb5v=$hEcdx&BhW>!LMlz8fAJ9we3T*jkHaBKx(ZfpVQZ zGXRcp!oO)G@c|X}gNA|GM>iD<#R`Mrn4`Lnl-_`|&zzwl8f|0q5MTLfKMPcR1O)^ynGT#y7k0pKNqeTDov zLN!*b`%Y}1=4rvAfkT#-h&ecXsL&6b#BRFJZDZ4nAK7=Y)5x~3ZU_NuGp`Pgkl5tQ zVjnGta%K9?$hDMfjjHb<(xasNLV6dDVTw`=VI35lRo!e40HIjn%fR6hyw6RE8%o?t;-}v@Y zA7pgw{aStyB$suI$M`lPEsx2j+7GIAT6fkv zZ*)LB-!KlnY)K*A9(w;A0a2LN<*pZZ zgWK(o#-&Ol!TWf!QX-)%`kWRZPX!p?q$+DoqzZ=@&ZvgTfct*PE-P6iH$yf^5u6ea zr3p3@!$G^o_b!QlH!vf#915p`>Mm!> z`at}(k}E1%^2^b-F`HW5j9cFl_)uP*8VT<-5R-2?AtHo2&k*>uZbU6ri}GJ0S5Mvh zs`SsmhHU`8&f$=1m0OxPXS6jtSDqpz^JV~&2Jl!=SrL9c33pU zoPHK@na=w24x-@>&d@OTjAnYa_>sJbnVmo7AZJposuYuZc|V8=2*%!VOpf*;V2gaU zB{QHg4<4e0c6w36pRv$hKiZ&hwbTX>#_n*d9vbwtyh79X;pSE-aM9c$nP|NGhtx4e znLqn@hZDA>bJYNYE~hpk_6@5GJC`_}faPI+zAHw!o?Wg*|B80}(;Yc7!Ea6a_T8G9lL&Bn|2!-*1-EIzg237m@h~DMbLKF;bm-B z-|G-2CGCc59beLTI?rgEE|frPwG>{ZM|cst5lV7_5d4cIpbj>ulKrc)Uk~ES9cv{r zM@3Dn+xa!jIh}I+TD} zbPcvzff_N|tas&|IL#UrbMz;a_tMf#MH*$y3+L)hRx|Yt9n;i<*fXniB)ofDE%UAb zq~;NqA*!mG3l;u1J9yNx`GK$K{Kw?1y-p6I(_LudP2M<{^c#gz3oXOK{;jH~m0M4L z5t!ntHZ!5ZRM=DooKpBl4-_o8zG!rZEA^x<+@iQfiLd&l?FlssJ8dc{@e@)uNk%sZ zU4W{q3cCJWftG4s#qq@S5{h4^l`-=9Rz3+=GWmd^4Yt#$HqwiuYAyFDG<rc@@iF z63jbeqEcYq3mfK|4QIt}jGqYK!1~?|Zl?V!VPl`7a@AXbGRIpx*;ut0%ZDQUt0MnS z#5zH{n7dn^M-(t-WNAuIlR8lcKeJSpjVf;wi?aj0{NcN~EVPl!@p1 zw2auDlNOVjySN!!Ry>*GwySj)B<_C?n((x)k)~|x%WtI_KLuu$@dgyr;xCBqv$;UW zb@U6d&Jm17Sx(XxB`(4XA(hVoU%4Cj*RH`cN;5lP8V+Jtm=^PuJjeq%Ru~*t@Y$=K zXk>|uJ_NBDzBM^MX*;{Gg@3k8B_c9lvucr%+2yVJ{52|~{yvF4m7hfQCk<{uEc>4d zn3U*1k!e?fY|zi{zpmHY^_Jj@NR@#4JD=OxtTLu+-V|uTgiHN5MW$+r>xgiiT;9oQ zKdJou%JEr8dL>}jxWr(2dTxr->x;$CL)>{JKe4+l)%HPZ(MO8o-fjPhi!U2Ggh_9Bop4P z8@_xFws)2RT}yUW%)Ua2=c#RVrikc0^PX9JHj&j;!&w`13!Vo<{`V3h{IBT(88w~E zr`kQJ7TG?%oW9$=)%krcQ zI)%cYlkgQXZSk}yQhNqcG*X~C7{F{uY?G`FlE>2z@jhytGD=qGEyn~<(MO#hxd2$p z(75piB4qs!EkM%0KYpgU^x;2zae_Gx1=uDTScX_2Z}9gFWb>KA>t-qz0%6<;9(s0l z!SYfYhnZO#4rT?DMm%j|7Y}Rdd+j$T*5~kTB3rk|SQo`RVUZswhNwW`jI+C^x}AuD zt=zq3OF-ZsXUU5?&Ak3~Qy=bEqxt)oGxI30X~A7(59x9p!G5r@9;^CFJAbZ`TCHfHffXhlO34O4ICdI&GhMFpN$1 zsFjUpDk>Wd4H5Evos7jlx{uG*f$rXD-+TE{A1PifOat`setlTP|8Tpc(o_8feYXirIaZc*{Tpz$-TE?d*IpK zhQM3$Zx5e$?p|g8%+U$)eeYX&Uq?mE0{4dcD5^gP9|8{r3FeZbWDdy=c>NfD2 zL2k@>u-^G7HyoCSx=?)>B|2Irl=#*|Jut?ZcY)8AR-R#T1PW1mFkU+Lp9HJNKC%9= z`OV}E`H!6!ap~2smin3oP4@Pp5+I#kzt8}{&5Jc3FhAz_N1Y0po@fU;)I(1%o@gHg z36hW&DpXAer=XnGlcKI=fX0eN{$bFJ0FVG1zcUcFZHmBHm2@dI(AB|N{Izu872;?1 z=@R$m00M@+3{w4wC89pGtSJI6$ngJ6;nAFPp2k^XOK69Qxy+Uv=7rjmWYD7myIn0j z7i;J`(<<`g@Smrp9^~i{3=Q2S*U|y`C@lkskn=H~gDH67aX))lt^!50k@gG~Vf?(M(Zq21fBOPCRjcgz~CBjU)MMilDo;Xf^NWiAB$A~R%-X<46V8KzJb zu6dIln92NNuDN8!G%0N{*3+)*WlmlKvs5G~1eN(m_6e)ZiXw^>%T3q$5WI)Zw63XtIhDp@3UW$wvJo#4$%rCv)vMz&I?Wy;gjp8g))22?P< zZF=HY8C~6f+_#R8O?^0aXiD|uEq2EVlt-L+2eX-7TTQ-#HhFGV3^*m@K*!qiH!WbU zJ1dnD$}oL(1AqH9QWbM{P5V?@|Lv>-3Ze8ldYOC*GbS0SgS%kCZET&2lpef z8$k)$4qk)*;r)yPH1Lp+bZ~MWhML4CVeaY%4Nu`^J5K@^{F}z;@uN|JV`!)8sKdj^ z)B~|BbpSMLvlx;SM!W(_P*Ha4b$`bC>nhMzi-guIsSm^E0+_voCsmql*>GB$7K1

Q8-^@U|hRMfC%HSmJV-LM2L440&2gf4l!wrXtlH6()t9ILdh3RZHX7< z@F3t{P<9EcpbK-wE?x-}Xn$65t1)8`AO=UDE7C!Csn2rSb0dnaUga}rTBLjQ)zGLF zodN@#j~%-6xmEnk@idRAq2;@cLZr-Ry(TeV{fB`jSP)1$mo@;PVZFFxW}Bl3sAVnh z-a>5|Yh#p81Zhc3R$bjk?h*EPFo)7fIxl;avJNmseHE0H6r2`rWhyJFdZg2K-2lL( zJ|w13PKKf`go)cnY;l6OpGRTW*WVJ{_OjqsESfuKUHI23hQ3A=vVsrY*sue}%LDQG zGz>-=p4S)yTrTtY7eT1Hh=_}KCUU^sH$0Cg4;&on8`2QQp!eWtgnZQC!0fFPBJi7; zi?l)#eX0wVKtf1eX3HDIxNT6IJjkg` zfjG~udemIzMN75~L;NO$>KNFWRGSAoO2WYc5wPnT92OjCOK&AY!`Ou zZr7Uk4~|p9A4Qk2vjk=dnD~^}&q*?FLlI+XPa;9Rr?e+QDXicc(zOFO8Pmd40-Gn$ zlF7?P_JPnAU7Y}sEcou|PcStis-CLVMg#KWksPcCpV|sUVTzV`7UHHJ z8nXv{_rX-*`+-+}c)Qk093SK0F1=y=1rd1Zp<42QjxT#3m-3vOk^jvSRM94GiM%wv zPTK*`@eQ;iKAU~Cap{zEb2C{X`J84Hy;r|v5E=~Mu3d&Dktc)G3%5S2+Uzu+TRpt5 zTy3p{La0a90@Thpg&)Sn~+#GciZo7$7zLF#QA>=S*h~K8px7 zn2md(M-5%6Rs(v(qjY3hcAlMVmS+E_Na|rUNInl(cR?`Auc;TpA-nyvXPPg6p>K7l z!9}7WBx@>>BJfI-C%$C<1XwD@W#p~bkMO2Bz5k6nKoqJ>sPDvF4=Y3}8@Zu2cbU%@ z<4Cs_4(ZOnVjGRXcpwXL;(CzX&6^BMQ!(Fz&aF9Aus;N9geKTS5CfT$^F*=Mz^P#; zgmFhkfVA3+4})%-{}9>;1t*Y6$uxy#7K{=2(Z280>v_@N_jC!U^`cv&yM5DU z0Q72OZY)$RKG(%lo7pBlqdaVV4F(2E?_UPO@xIODl3V?K59W7JgK#GBNyXQ{A@MZO zIvXGq{4@ih!pdLvQbjZgo|=k+FlCq1q1b(i^3-{cbHHE2*wPnGBz<^<27_=#WBl*s zI``z=mfKyWNhKGt6#I^Pu06fjAM{S;C1L$u-i@$7R0*UdNJ!q5BFtr&jTs-J-wtkZH;O{XU-PY^mzGb* z!^-!0Jfs1dWz!E?a9yyPEq}WV^CyYZg!zoD(IY@bdWizlUJ^0|LP0&PEm!-gg8Jj~ z4ghn3RSNOxXb4QDJPT`Q{9#)RM6P^WjU~Y`bt^zYi@+fvBa_}$i5m8=2ox>&`e-#< zmd~D`3!=g%Jjy5JlGhrARA~P5x~ZcbKY#*;Bc-J2-|Ut;jeT= z2K<%hE1nWlkYO|xJ1X1iTw#E7a7^2tp-Bp7)6$Q~gc}a3xIY78^h?(l@;*~#ZJ&sT zF3Q8?$5?S^K`Y$*4QKm*B}{|?3XyevSBTFCzc%yEDqiGJQY0dUJ)(S#F4- zxF#6#9s1!}4cKdHc?-0Xx@R<(@mtogR0;RnMw^UX@pumNpvaeD$)tsvrt_$q&g5Ya zWy0 zu0%K;4~nFMS5c*m>bbmAjQ3ew*# zX~RTQW~PDDUmOX2b)X56whL_PLvv=i=yH(ki-dr%4%9KsHvM@DNWGQyL+xc@e5V1w zKn*S@(af()h`}5!$j|JwQ%79^!dl3m365o~%BIJVbFu`UHb&3tXJk-G(C6aJ?9Df# zV;e|16oBp6t0_Q;3$VP$HeZO=G&=Y!Ljv2r?woO8v-dK3 z{?Xbucx>>npg~lrSD|1~b=2bNa7l0=kQ*mc)ho>lO5!sw_*egVP*(Ck;=Y_ESYPWW zG&L4t)=25Z?r$e60}$HAE4I;7D(CRsQG;>1=O83@AVrgn5db>>k2aR%NeUGvEzSUI za0EX#wkQnHma$kyTGqOJi=XWLRfKGQhH))li45tC^ZD%?;|p8_?Dp7Rp*Jc~QrL{= zIhG@9OnjUbQ=0EEf`ROdZWIZX$W6*0S3_c-|>G^79+ zb{Uq)c)SNzagQemj~b2YMuf6qrnck1fkznkdD7+`%Tae?ww}e-mH+ss z-qTpOkZl-L_q5-^wo4A&0VpeL^;}#{R#YES&!3kmpR{wzXCq1hDb`E74t!&I~C7mpzgchB2^H0ycDw|yWcYMWK4y*(kb zf&3{8AWW>mhaDH6;KS>ls(}bg455KmXiJtOHo(rAofS{&aWd~EB2xuPNbbd>zA>@`@sw~-Po-Bu|!)nlI*;ba;KtGg*VNIZs1-A7Gm0Sf&b2s()F24 zKCmmSH20=z5Jf36M_kebW(BqGuX*4Ml0{h`gNbLL7j9_fT1vO*zGhiQjU^tUbEY_z z92A4{!5qDYMkv&na?8;+K zFSW1>c*iZRBEJVYXfWiV=wauo{?}b%={po9M?89d%Z=C{;19~|3CHqKpj8Y%wcTaN`iDzdkXqy9Gn!_q7lz85Zf zmM|%090m;D3GjzR?Z)k_N&(C3v9CL{9KA`1HZ3Szi@kxb7aH(>xY`^$1`y}Odh;QZ zf&4;tR%}{a0j5@PK6Ug&3R|IGc@F|usaT2E$TyF*b+)9N=(l6)8p96^4EwY$AOEL0 z=9TUH6qaG5^?;bGQE`+4|F+)S+-Rtb5ye}j&LB)xAllfP*2ENUcf!h>SuJA0BFoHB zyQyeXw%w$(K}j1?@lPy>rTcEQ8UNwnMT5j+LjyI$-zgqFE>uPBdY?3r%a`#WgvyTq zS}Qx)_NpW3UKf0}GOslu^xRY)R@Ns6L!k@ev31epUY&=veSn#BHpIuxTh*LZM5T9f zzy$#l|H9^^ecFwmsrMMcH7yPx7%)tNY|Po9Jf#Mn9jfsj%pt1iv2{u`LqRg!pS}(# z6KyJ5b)=X-7rhqQ|1%*)vbp;p8V`f;= zzsRUc@l6p`<*t`&?8W^}N;lLPRH!VE!c28|AH>rqp38ALTwnuvP!Nf1$wHx?J%sRt zHj)-JNp$m*C<^*7sw{JG0Ty9!!sxQ2x_?8=h$q9WqwS`Sfz3GwE-RinLh0fvg(cKfdCDOL)|(BpSM7m!2%=BE3rgeo@4;YX@AiZY1h7_vgs-tAE50Zc z7E|?OfhV#YtRh)Ob@Gj4KP#nN@3W`GSKe_HvUiS)08E1rENC$?UDZqQBxuKR9JUvR zz|ppy2&KXU3EMG0T}~KsAqku~#tgt)?R?$Bk0)X46(Abc_%~{ZQjRXIGnwaacvr+4 zAyF*OO#ZW&1i~b;5Sy*#wT;qGdf1S|FUmRv(Tr(rQyb|AEfG)F3A�g1OFbIeZx` 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

A`#TSFgrdl{& zK)Yp+mQ|;4wjBtZPy-w+ezIL~$tjo~*L6 z46&{H|Lj!Eq=xuzM}db)jW64^hb&87DMSh&%~$9|u*O&+eSL6zb(Zz{A%(6Kx3Xsg zk3@%!)x2Isyr~nx(;|`C&b)a-W(S@}LS#IBcJwWHC-MxoMAUKQu3=ssN(jZjHWDHB z>eEk}ycK@+D`KlOEZ=B0Prq3YPiLNUP4m~AW`p=0dr2|4!HUE?a0XFbk~=a8AP96q zZxtfTD@e#1QvC0EG#3)TF=$+nlyk(7QliRDJR6TH5YmJV?3*pY-(=74Mx}VI>pw&B z&U1Ui9%3IAhBG%O*6eEb?brdUf*=-VYv>snfjWcRwVBdUq9b65OYplo47>G2nslyd z>osRP-V;Z~Sm4mjOg$_JxwJ|=7k+qF2GRa<) zQg5k+taH3-W}sp7TdIOWtO&mlSanJK?Hq~K-yG5qzW8T*wTzJ_r~g)b8eKM%-ZEtb z#Wf@X&2%OZUi`p9vAdl3{84U_2F0&hZbKa+uDn10|7&)*(^dWb!bmatA~GY%{l`*k z`x)et5dVpHNhKwj+txg%Eb$y+p@lBV3xV8xRMM>?d?lTaML+7BvDPQPA1q|1fdmw_ z<_GQg;L?Ud9olNupNbA50g~lO8;o$THpv42`b#VB5A$GQYL0~ltv6=Sbkjd)cTCRv z-iUE6OVv4MYijjS(#fdY;ZL$&5Byk6@^fqMov)q+2W2yhSPiKu$1bnMVq4yBv%=G^ z&vIPaHADl|8H|QS;eO$hUtox_)ungt#9*p %wpzxBLHFdgeW@lLPFl{n%2L_aqo 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

(&k4$Wv$ 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

48muLKhB{jO!wqhK(} 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 z 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 z zb-w>^?Oc9&tG?*U{71sb8|JPbo_Bo=u4i)Br4?iOr!M8X)@>H9Z=B07@7R~m+J5tJ z?Kr(ANwGx8*Adcqf|cYpQfj^pXB^i zmmdBnw;n8rE!Kphbr~#wnvU21e5}zJp-a=Fxin3Svsy3e!RIlW{P}Wudm?tMgjbF~ zIYfu3equMjhnkD4;h48;+L)*1PF6vZcGLfIb@dgEm#em_Q;sCoL;dd!hxmKw@#k@s z--v76mr{)TB^g{(+i@H_R$r%x0G;BnvFJC;bNU+@=M1`}y^h?n&p~(_Hw+*uzC`fuZG< zAojRtL2|aw?Fkf(i~E_#Q(N^$o}*D7`;7RRJRRw6r9Q&@HFp=w$&x-2&NHq|`Kp?G zHex2q{1#>A{7rPyg=|wbKgfSJLTcJo@+?OF6V+C^dZII}TENB|^jSaQSSU_Ps2y_;}9utUjnRC8_UB2d`3rR6R#5q2{6ah@1a?1zFEF^{M>*hWvGG zRDhj^%ED3nbVSl@TJ@|zMF!>R$#(G86fJYj;ElP&t$R0S@jW$s&PDx}?|F~SuSHfa z9-I>k2QC&gK%d9*>Y6`SF50;u)Tpwvl+_V~C7VYNro zgYL{PqPOH5gM44e=e#ye-cNix$>!=q&p}RWl_N>9c?sB}1T4aPTR4|(FL~Po>!QM9 z@8k`CCr|5M2JXko^?oVsp>e_QN=uh;O`K_(0lM#>j7GkZ$R`VjQ+1N0KE(Ib+@pOu z?(5zzVVrz4aV(WzztFlgpq#C>99f#kTj5<9i-CWa=NGBtwM^5K_wO`@^oHS2&XeVQ zOnzg;`+U(+fsd&^l2k`c;XJ5JFwQ^ReDfGxQ-}wSFOt4Gu~;;{tcBQPQp?@j^}M{5 z?&cL8R`hD`S9-tPdv5R9y`PoIuFeH2KKF}Z>ie3?-2dKR`{VOU+UAlp?=bhN zNrqxsV6$;lY%)GS8pEdJb1B9-<;?;%K-)=@_VIf6NxrtEJbA<1M7=M0Sy9mrh3!gS zmN8<8hz(pRqbsql{U_o~ZJs0XtTokCUX>Okg9B*V2yPYo0c(S|2HgQu)&~ zZX@|m`s8@^#c_$gC_njgN$b7ZWs8bR)?azAc4gwAFYev0^i^@$SHyS4JRRnW1o@rg z*0Xn4_fq-Q@~3I{jpaY9{OdL_$=7kCQH4udXH)r4)mQDcBWXX^gScAvR@UheZspI7C_AYA|MCv;8D{lqaZ)32q8Lw69Y z%3VRZa&4mi{+wLP3a(A?EPN5P-|Yd-)U1AR`z3hi2S{4A&kK0yZUNf#9YtQ?ypHEQ zj^hU$F*FBg(;h7^Ae8VlcjR1=0EQ%<=8hNUJ}sXQq5btd&DKdJDmTsMNqprl3t!tQ zt*w&eYkMsVU)wFTL6Tfz+I~Mv;(2pNZO3JiuOUCJ?UTw1WruAS+B&pN=-;6qhyL1( zZrMPeXWF(~wN3m_ugCxNH~->)YFkakEn2qHKdrMz{Qr9Xdrmof)-7F2jp0ctY@Z}f z5*D_55+@1MspBt6pfC%fBSKz3yL-G0l&f z6SZ!0gp})?3#D96h24Fi)T`+ia{Vctl6WPIV~L~$@CO8&giA|>N|t(c$&0Ml+B*jk zGoXg;%Y5#I3IR8MnwGES=5f}NpTm4)EM3c{7)?Hp&E-qGo`zFycwE-F$uT9AlXkwW z@pW0{7c6T9(i8>WhK|w<&w81^C28e1$17aU^<85*%WJWm?MHjun&Q~pKPQjJTT=LA zQwCt}9WXzSccjRB?h^V zTZRD6Gby<4NhGCBl0d=I+^MupCX|FT!u*1X6#Et)=s!PqP zd z{r`YJXgph5YA(KHkU8zRG}(GB3}4}SI9*s?Ce?B*eMQT+gn89V*A>krou65FT;DV& zPwQamZdwNmPj$2Klw;xP{W1$rpNk3GUZ5qC-VY0XVhNG}ZROA6EBbv53vX2;PuGPO zd8-+Ds~dTGzpuHuzfjzBHx~cX-{7;fo8I@c@brG2g{NyC3s0Yswea-5orS0OAuV>% z`*{|5x=*BixVfbF`7Au$x3cguM&3rkv!soMqw4?HuCl{^7b|I_A~PKH}VcJ@(wieDuicA zeT8J1#~vg+%Y0Iwueb2}8F_~od50Q#hZ%YOjl9E+JpFEl#V$t(&k_%g6rLp=Wg!X2 zeTUM(Jw`Z|`F*94H_%X~QjRt91_{q%=fOtaaYmj|z32p^ydlD~j2}ad@=i4JPBQX_ z3D4rE!-Z!_*r{rkdP=hlPtcuEi+&@7XPLiP@AsT0@+|G9`(2iDM;YY_&6Lg%mSw+b zwD2tRwKGknM$uVD-q}W;m3EF0E$hZ}g=dKyV})n2UsiaQ_B~H{7CWDB;g zH1fs^PxsiGOBV^j!n@eWyTr(wVB}pYJWJe|C_Ib5TxR4=GV(4Lo+Z9i3(sQbD~!A= zjl4e^d6SL2tBkxU!n5@AtBt&CjJ#`&yz7j->y5mr!n6444MyIL!n63xO-5dgk$1E3 zEcLj>$h%c|mUueN$h*zRyIpvebcc{E^__0y-D%|AW#rv0Jc}RPW0ZHV@GNoiJ|pjb z;aSGjS|jfP;aU9UK_l-WBX5S0_ptCR=}$r`Fc2RRj-@?j3ePgmJSsfPeCRRZS?v6{ zkvB_tmVWev@GSoPq>=ZOkymHrJ#FMYW8^(+3vl zG4kFu^4>G@-Z%0ZjJ&@ac^?>g|1k0v7?~S}4jJzL>yq}D` zpN%}7j9cbc`aKHEyx979bCJlitdFdZjkhq$YiZ=QGV=6yNG$bO$;i{+b+gD@#mH-8 z?Z)JpFw$3vVqWZ*3#5gORt6k+-gq zx1N#L(a2lh$lJik+tA3%7V$D+l~-Hg1gjJ&Olyiy~tyOFnzk+-dp*Tcx$&dA%|$lJll>uKceXypCD$kX3- zvh3^iGV=5_Jr;Sp78+rQfU5lUU?>bm`hZ=c@8F~GUyu*z=efP1Y z9!D5?M;duY8F{j-HKk*W@+ytIfkxi3M&2MJZ?KVfoRN3Dk#~ZTH^j&rYUG`0O0&myi<(4DkE=%k$0+*cbbtm(#RWSW#eDjJ(&4yuTQEZy0%hHS*px^4>D?<{5c!8+r4MyuTTF?-+US8hP&-dG8x}4MyJI zjl2(xynh&Z3yi!Ejl7SHynh;b3yr*wjl55cyibk1MMmCdM&9Q}-WNt*qmlP7BkxNi z@83q=S4Q5~M&5snyl;eOnV&8eo@L$rt?(@0|Mn9*`F*Bl10BlBd^HFD>m|47VhO+8B9ljl6b7 z-l|5P{+_zUE~^=Ns~dT17f z692jzdD|Fy+ZuU2jJ)lPyzPy=9gMu5M&6D_-XDy-os7I*M&8aw-Y!Pou0~#&k+++X zr@t*@@#j5^yxvA$A0tnH$K9geUPfNIk+-*zw~vvxuaUQ(k+;8*cYu+1ppjQ$jl7eLykSP(a3k+zBkvR=uS$59{i_j1-l<03X-3{i zBX5+Ece;^xhVU%=b)${EGmX5njJ&gryfMPF%s0+4^3FB##u|B9Bkw#T?|k7|{CS-4 zEYAyEAUwB6)4>7Bx}_`zL9-rYvt zJx2ZRHS+E=^6oeCYK^=HjJyYpyoZdu8Ajg2M&6%{yhn_@nMU5DM&4sa-s48zEFT=nrjhrSkvGrCd)vsHZ{+>W$a}}gd)LT&&&Ye< z$ZIh2{%+)bVC4P7$Xj6KeQ4x;WaRzR$XjUSeQe}?B0S4}$*01z%y$b zlkhC<`?Ha!oya1uKzNq^R%qlE8F`krRZa_$XW1{d%CquXOSu;Ntz_h_Y~-zCuKceXypCD z$lJ-t>t*EaY~<}?A>k$0kzcao7e z%*Y#V(% z@5(r@D4ln66R$Z zae%i{ylV`v9A92=Tv2gBp)|U_)0T<&T7v7lWSNL>A-KN7^|wwel0MJ#|5gvn*k&n% z`cS{LJldY*Do5vl@pHW%zaOab;*XdpKYp(Kc<<5A@pH`|ucLmBpR2sJ<&R1E@$*&X zJnqxVkDn_)?xVW4iJxm(%3;zN6F*n^9eGiXnm2x~+_hrYHGlkE`E6p?weInA&A&nH zy5^6cx0UmCW7oBQ@pIL0jo5X~A3s<5?St#_bCn;SuNUL1ed6a@{_3&onm>N7@hTo8 zwEXaVwOD?=UKsN*%^yG4>jlB}__^xSB6eNRTL$N?g7f0oxwcR1*tynM&##c9C6UKI zqWUK#^4K@xHi`4e(|T))`?5!D|5Kl^oVf3+q%JmbO{{FwNBuN7|MXWsQ~mYtXGy<$ zVX*@KSLJFus?Yq^_0=-f2Y>5wrO3QQKPH&gzsL*yo&AmZ!|U3v%aYU{nwBNcvT#Fv zmv?=aMVBOQnm+M4f#wVCOj&8|#CS(u7?+rj*R97ieZ%}|`i8u;cpU1N2{Yn6v{P75 zX4CadJe9^z5 z+CS7ctn2SBE;VP5w0eeq8P+qr&T`U@KKk0@@9))))GPFhw0bWu-0II^dB3!MLpeMT z{eXCQ%!EM7d0HF|_diNg@)J(;$F%yh9htu;KP;!CwY}2(C{6D${$ze-ebe*^?VVPS zU#ec3{eExyg!N0aLz>=Uds_QfSZ;X!YuS(M+_1dn&eQY>^QGA@M2{WdgcS*rR zxHJTCehH3j=d^f29{W#OiagFE=^y1OJeC*QExuQ$S%;+L|E2KqYERWasV&p$MSD>1 zMt;CCoTmqubElW(KKT!6^`Rc5hju0&@{;PLT=GIW;dqpxU>pa?G2{f4<#I~@Y)%;M z$NHq%kMij6VZB)n<%HM6_73fO2nGDg$3uT*`4nFiR+txlrDK}i*oHvC^IF;-)?Ot1kB^JwKY=SP&s;|cumDWS>)hs_PPEk&HJ#4NF6~!^^m%-&FPM3H6Xb09W z{!B%@aPnB6u%6_S$9ko;6L}m*;?IImmLAjW8qU))@l5i$P!y#O!KL5ilzNAS(as@G zyM}mL9cZ_ZAKHc2)8?;f{WNXHj`MJThO{(0FfNeyYaf?&JUaK+ zRtWN|(i(m_m!H-TerYk)LB=$HVfDgz7xv@uI>lS#HT7Y6zm`51Q!yOV$|0{geaNFd znv=&km&T(V*xqS8mdiNU9FK9aIUeI=b39(>F)(Z1vzzg2Vf+dGhV_o;S=#4ijSJ;V z6Sf?$?Y$gjElt!uOS`xnukE`WWi3tAeoMQ!9Ix%a9Azy{)B#JoxE!ygjnm7qh&)lt z+V38a+{@ax^9nScOp<{8Ta;r|CzX~KH#y#fagpN-1%}tHb?#3Azw$9$H~(72>HAYx zq~Fd0ztlhVcRPMhiR*9bl-3`~ORG2Yr(NfKkGya{z`BkikL9H4JBbDT%Eu8@-7v(JL zd`I8^{d-Pn^`$+QwSBGgkAr?|qa1SVsFO#I$_yGd@Z=LRryqCfX+uvrIn%wzR;62Q zA4MxJt}wz1Pgv0%R>XuAfpNv?uwsZ@F;7@ASz0kETro3Vu{>C@Mq05@T(MeSv1PDg z-(2Eq{x|) zg4Y5M<-Y(tl-~fH_Xk&#b1ioP@Re}XdMN%`fK&hf#CZCVa@JIWB(?vX}8r;Amz|*YX&&wbO%oPEVl!2+MoEo0e>>|)c2rk3jJp&_*$MO z>Nz67sppx%^}Vo~2FRb<;R4`o9op3HR{#&&eF|{47u)>?;Cx4FC&<4aIQ!8c;4=gH zZ1*RCQ%|=09N@G=7IIz>_-yxg1OAQR>+iB_qMYgSS?!>|53Y&$gYsE%{!TUZp9Q=a z?ZUV*8+dEr?c`ijz5J=1wSe=vh55iY1 zg!*>`&i+DuIss>UX+EvjmcSXuD8G9kpZLBh_`lI{sSo*WA(-z%X1z879@eW9aK=N* z*&8^_k+bs=0iX3c4LAQNAFXU%|b3CFx zmjQ2sdeN`04e$YSUHj2(0nT=OAi&GPe20nTx)Zy;wr_(ui& z1;CFBaE@!kfzwY8S4T;BtIM&#Io>Es(@DTH?yTuQ`r8P|-xQaKUk!Yd0G|cCYk)5V z&Uq~LENv>%eWIRa0Zu(D0(>O&uMF^WfL8_hc;MLpzZ`gVfL{Z=Cctk7UK`+d0j~@2 zhk(}y_$=TJ0j{w6Z7WQm*1~l)qvGoWXWU?a&j6=Cu)lW(j<6^)yd3>K3{55ekc+E- z2;@-yE&AdLH&E4e(chmj(D+z$*g00eEGA ze+-=KFP8iz@NB^U9(Z+tw{QbNtEeWxR|Q@h;OhXd3-C_B>jS(S@P+{20eEA8?*=^l z!lqv@wTepIb=Fq)!NJc2_%Xms1Dx$!7U1l^6#>rvTN&W0w)*pA_z&NgK)e=sI4-{o zJd8`ju>cCk+4F#h>&NSWZwyng+*!bN+|oq+ec+)!KLBTZBY!;%M3kdPt?vxr?7tj0 z9|ErVHBrtkz{7re0C4S}n%GZ|0nYxY>s~E)bu5gyJ~|EfMgSPk*{`#ZL;EnE3MZk{^^wIUR>Ny-ZnmH<$x+#7OoC&*|W^-5Dn*0O!1j z{HuY7{!j~?dQ#4u6ghtd&V3uoZv-CBOIx4;)sC9T-!KK=5qRiV{eg2_pq!I|hx%Ls zJgo06z&Rhj9`^5!4T(_CI`G-Pw9lV`qj_?E_*TFl;Og8WS`3`?bNbt=XxOmbI{-(v z+&bk00JKA2$nOF^arV1i0{Mf$-wQa`-NS(Q1&%{>I`CrwX#F*1pq?8zixm(3OoZGY6;i#_XSS>Cw?q&whQso zfzzLfPYiG^NA)mvEugur+wHTX91@@*&pWsXTKEe!aouj+YAfU`d?0!}~VJfxluF8MWa9?}rt&${zgQDcD51s>ii`YZ5~A}^Q! zzXv=M;C`R9Rc;@We9n8z0zT)x6#?$`YZX-n__rvxD!}!)d9}=b4`G+ z0y(t--X3^efYT5Eg?3?lCSHIa8>2t7eb)r8JWb@c8SKwPeg-(lW%_wf;2baL=eq%C zf2W`C1)O@)&kqC6I72@_9ytA$em)|Q)5+DLMRZ;uXAtn}0H;6S1f2bmcDNTf$7|Yc zHgNV++TnHJdaj9f_y=&>lXmz9IPFF|M92C3v=8l265zB$1~~0TJ$D4oxWRgD9pKb| z58%{?`tKLu)c+9Rv>Wvw1l)BKsS5Q!4tUs(RRMo}@o(L4Ec0f_?KiT0PX(WT$Z`BB z;I!L($**xNbG#SCc3A+tJ8-t+=fHOcPWc>94*|}03{0?ziLoQ;9g&g5?s$f5jQ0y*qo!vi_&U*`a4`s( z(&h8gmB32^d@Arvfa~ww>wK&{`bFIMHK=59OP66_$$Dx0(>6uY=D0N zygI=BeO%eM4DkPeUmM_&vsbIAF2Gj?ULWA?fj0#B2EZEwybEv{g7eZgz)J$W7w}Ag z?+Ls#z$<{41^58q6#+gNcx8Z}47@79M+46W`1!!A1AHRzngE{yyf(mnKN0%}_+8-F z2lx!&4FUcn@Wue213bKi^g8g8R(Z`5y#qWG;2!}m4RGJz#Qy{QJMb$4yx94N#Ge3f z2fQl4I{?oH_{PAi1H3EnngHJ(cx`}}0j~@2eSp^oct79`0e&>_#sD7z+zn(gQ=baF zLi<6U?2LT3gP&1?q;P+xXsE|2 z=Uwp2z~9nej@n4Os-9KAy8>sq8$piFlQa?E33xcqIXHzs960A8lyh;w@8$Gq5$$(U zQ+fJnPvH9lZ|yHT_jCI&kmKA#u5n&;2XLvrOPufB8}K=wd=R+n=8}W+$v**SxfRf7 zPv}GWdR_H73pnjVeXb1ZMfq0&=X{lV{t-CWiL~1^;GD0r+$U1_Zvdx0gP>=TE?6W{ zKIME4KJCDA7X|XE=T`yF`hFSUwDW&}yWv~Pryafx@V;_Q?HL7nmIMC*eCnzFTlt0H ztKOPeulB%cH|p69IQ^6LDi6w~{`&ye{Fu_y>;{~1iT3OZ zoc>084h7D3p*>FoPP@^bX9B04Y0nA3sXy&G6*%Jn?Q=75`Z?`l zI|exYhjtzfoc7Pz8925(bNf*ffzxiZ^CaLKqg>j#7C7rmJO3H@hTzlAp8%&n)6U-k zXT7+ev(G7B0PSBdr)vKbfv*JlS>P>z(;sF79}Jvvdp_{f0zTVuW#AhLPZQg5OW?H6 zbh)PbbPI6qQ*8~L_F?}T4V?Xj?OqMMoh!9zT)PoC?W6Y4a_) z;Pg-W&lSLFfBN%6)VGbVMnr%93b?k1Ci?Raz!|scSNA|Z{k&fCXuJFwIQuXC?eD;8 z{{`SL22Q(u4t!OJ^R|h@-{1bt<1@4}ddX(ayyqJyH9ErgHhycH9g&<@W{N2RQwi{pbkb+&5-_ z84aBMg8l0<;2e)mhy2@sv!7;xKMZ^;IoHH^{tw{YJe(UhOGbHs_M9%KTCW`f{6XMH z1E;?+o(}^~JsF2D0M2sjA?JZW{(Ru`0-SO9XW$$!7>CzYgGg%c54kwJ6>!FL#^FA| zsSn4~Q-Nn7hw=GJ;F|)^h(oJ=W&$q*&ihA;13A2Z)Zq+Iq z^0~p|fo}^rbD+<)z&XCZ4*X%@^uu?6*9USw0$y~M7tH$V{+;U6893|v9q@yIGtLxC zTvq-l;Ojz9?t5GgobAPZn;F3Ax7@dx51jh9gZ!@pIURtnd$upI3(DOX`0l_dzbo(| zz*h%c7U=e0|DM?is+T z56AayvYyX!DgQm-9sT88JAMb8_F=ivd7dcU&?U-m72vc(y8s^`xzs*u0$&euIDaSw z&T`4WIKUatYtQ!rxQ<{ve>lK7ehme#`f1{LaVK!rt3a-)o&!+s%8uQ%Z#D^dF>u=9 zRN$P)_Jy1&z}1eLXrHrzxAkyto;DbGJK${JD}l3I&X;Zk&UFXpGtUKbIFGsucoF1t z9(6D9Lf|?~s~zqK&VHH&{uprD=SJYK1E;^u0^TvO^K9UqfU_N^1OEha=+EPr~J<${{Y~$^J3r!0WXwuO`I?F1J3zLroh{6LLi6ppGm-J zf6jld08T&Q{O4NWtS{$3w*qH>;e2cyaQZXnGminMf6@;dfKwm(^E}|xXMogM{ox#Dv0{PT`jSIa# zv?ujnA2|Jx`fm)JcBY>1U*P4?->Bzzz{#hc5#&&R+Mx?@+K2kD1U%I9RN(CI)bm{6 zs-Gsx9}B$D!@1|i*BI{s+L`{d7jWuBe?9=X)<+Zl`555rFZAa@z!^8_&nE+C+?y}5 zw0(bop2X?rXM@jp$o{xBaN3jou_tiq&-lM9aBU||jC)rEUaKO732e#?HhCvf%`u50$W#LJ=Ia$PVVIQ@$2h}Ck3FHuG`+g5T`y<=&Q{XI@?X@=K zuw2?d6Ub+KZ3etG^klni4V?DmdT?LhoX>MTI2btnitE8q!0ERaiDA|MF9M!Hxm*w4 z0i5+^oH-5cyAt^9FJpkSU$fs;1E)Q+l26OM9XR_1=M~Qcayah)131^YvmvJd_GkQI zoaqFd<2A?qy@U2*JQ)t0@);*50cX9q{(T1aSqpaHdif#X+|T4X_dVd$lkw*g)TA+tF&UGc{Y5xIEeK?P5gZeU#Er6V!!0A_v&xZr2 ze8%A{aO%VL`y$k9CDgYy_8oaIvf&w+gMPrb|)mwPWwuD<|hz32}Y0;e5@L7$rg zIrN9S136jnX8@-i=qIy)GY+%gJpr6{m<~Bl17{p&e|$FJ)306t&T)kO^nKv;XZF(t zfqeSm2LVn${0KPvHSPaBaO$u1)^_|EIO|J(G)V}OXlL>}0wU7yWQk;It3@ zunTbNNq^fJIO9gS=%9KY44nQ+{}~RP<!XSOb73Hd{xd1yXC;s7 zGbNBu|G5Ep3l%Pj{&NfPmLATnfA_rH1M~;l=V;)JGqnGDz-b@azdP{Io}+-X9cj-i zfYWZY=XJnoH`?=N;Itd{{34Lgc3h>}*NgI5ZhPRA&vMrTPWkl1PQXLI-3)l>hh2cP zTTuxNPMTQX-GQ^d^v??5)Svd>2RQYl zea->SIIQy2Kd-pL6(^s3BL8&YH1dLDRY?5d8x3d(&8c;jAP4$J)-cH8s5OK!m(NkP3_Y##MjGPBZ@i$uUR#}y>w#Cj;^lWo!`}0KO*hXeF;F z$AxVL*M2ty4cim)_XWSA(MP01fNM8V`PB!>2TARKp9s8cf+!~GLEvXo&OToM$ADiB zyb&+Z+yeOR!0We@50dr)uJ6Ioa%{~mbtXy3kk z-|cGRHqNh}^z{{*OPzsNjPm#tiFcZM2wosxrmvdr&-ospy}_^E*-K!YJcjsUk3&o} zjQG0VF-LlF(V4&-Pw*1@pr@et0Y8Z07~Mje)b4{BFL!_e1_uz)PO_`Tz2E7zciVIDoU;0ADZq!)n0m@9=!qcT?bzI;153e-v#mxccEt=uJN? z2ftP~xFl@`I~)SM0WY5D>@P}WiEl74Df~v zd^?^3ya(`#j$T3~aBV)7!!H)n{|^CP|F!S%Ef5d0z{}8qZh@SufLAWax92^;OInCy zNMifGL^%(8{r85Pe*&-SVfwE9(eXbkFy`OlI&Wq+VecV8RWMI zp1})EB)dx+11~+uTb}cct$~;I_Hy%R2FeS!ZCc-dw0 zK@#=(H}DAK{)XVUl4ezVmM!##=kKj=2s|^ww>!FDR0h0y4ey7Pe<1M6A3UGmDE~#@-^(F?G4a3;i={d$hu;h4`<~YX-k<}Sq#Cs2mcUD|^n!PT|L;UO z!MLE)Y?WU%Lllto68Hmv*SzNOh3FVMjZ}WkOCCSM7ZaTYymouvPucDo?v!7#N`5=m z0I$b5dm7|C0X&QO^U1(pru@Ua|CB<{*U10E8=w;W1;A@YdHyNr@81Eh$N0ke#%iLT zv%?ueki_}N(J>LsVzU&^teQjK!=20x<>A?YdL$Af>(dmiApqss~{H@hDC zmz--lA9zDIUs2wVm;$`A#LK5XwZJo&-*)q2qNjmZ4fKAu)<2rA243@}@9*2gPwoa@*U8IaeP;pByzlKpJzt@m+q{K$ zhMZ4{2lI*_DE}VcuM1GGHZpNiyJi06h5cFX7Qk!qg0M$WZg1cXSSQl{ zhXb!#;OpA~@<)&lKkNnkQo(gTSvtc598YfrKhrtiJ`V%0KhH+H*ef zlf0Y^_+JB$&hdWx8Sr+}f7CuD`*?rojr#5Yym4)B$W>s^y?|GK>E*E8qk%_7UeA7z zKMHv15xyM@ApbJpWgWbP$>3iLy#8_Dj=fRt49Ypo0~}BP0=#xwzCQmXAMv04@n_)K zlk)rTda_}wb|_uf`-wgWps5q^#$a9C6L@9ce0|C(=P+;2gk*`~W@wL%gl$ z?}v)DkpV*OQ(5ipuruUr2)rIIy8RdAYyrGx1MmNgKf3_W2IIm(g1h+qsTbT6@{a?* zVvBq~8AJJ(dAt1q1zZihA>6M3Ub~*x|6s^}7I-GuPxw3WJ3Nv4F9Ke2mT#95e~1cY zBSP)dxV2|8?yUj5{>gm**%Wx$)4rwt0=xYIc)8RQ%RJi6EW;pxDK632dT z1@N)JGeI1<9C(#J@FU54T@+2DoELn(7!RKWo_)gGZ5;gMP2e?n@o|ll7DWrmU*y}D z<4%zTD78;L^zo(0x(#^M6tBrB^wVzSZ<#;N?gc!1w3ojP$~_)k6AKwXh$#`GisgP3vJd61T{rn`swZAmH<%x_} z=Yd}XJFuTl176q0_dD_*2VRPO4+$?Wy+%3vczvD){sHmp^7a2W@cNp2hQ_M@Dv_t-Dc zz9$2()d%e)`S;F8(J0`VHohItfc*2x|H;?4H}I=~*G%)krND0oUcbASa~kkRC?7A* z?gjiM;8~21z7|n5A9&sUzJD?PHv+Ff+@L?Sln>fZYl8Ll>cH!(0Q-UiI>i zhJCgJ-Vm%K_5@zi!?#xj^sfY7`nvD$vrvK2z#A{~_NV@r0I%60KR(*-wPoB zUdnmN3#Oczz%zATf2be*6?pdV-f?z@oCUynW5>5n6#biWZuNdkKW~xo_N?pa<(~~X zYXdJG;(

zlK3JS&(Cetk_~A(Xial>{3h^v4lt&N-$QMkbKZ0jDRq$#~r8T zV6IMMrlAUf6%LYf?}QGksTP36Br%V9lExyqhRWiAQ`+U$`Z2Ic|R20w&m6D?I!Zld97;>eI!f@q?3E06YygZVo z2sWZ)((qE-#Cy8u`|10zEy1J2nvgtW2K2puJ%2u^Ia1_75+UA=0g1;HE+rRWu!g+^ zj?|>6o&4s{$809>03u=GJ%2QDTq6s;WP_^G7OUCbJ*J#(gWIok&TKZv=;70~i%C(; z^*VmfljGkpeXrwz%c4UgpB)ce866st?|1+y6EhWeYZ|%Ri!Qgi!`q_6&>h|x9g1#p z^Ih@7!X>Zc-|VzruJE~ze{-c>?Qj8y-_=d-YKzzL_bYYSC0BubHXRk7B9(z@uj6)x zY;8F2?TpvjO|%)TyMHbRjMOev(`J~~h9%$57_D7Tn*q89rh6TK=SIghe5M_L=LTnY zmU$msVuJ&<%Ds*yZe)ld99Men{Q>2atAm`(fjJjNALO2{ZDssH4waTPB*0S1{shUO zdbb~Jn(>Jlv;T5jVIm7o!SrfZD!Fj!)vQ%+F?8u%;jJlZKdUi;uZ2MlS#+(Y7X6+X zpDkJO`L_Sx4A#5twFMU}_Io_#PKlCs+`_b3n`yg+X|p!dc1xs5U}5EeX|oGV+bv9+ zwVAeCm^N!OZMQIOurPXM+P?0ljcb#cwy(Qsvpbo#uar#NSH@18rYp#yY5VO6?-$Nc z;p>4u{1j+k7``f*mc!OAPRsKgGJy-?If?6`kE!3h;4*F!ZxH`yVa7?GYu{7&-sjxL zkr@bPnm_gW)1W_1`qQjGEi;}~3H@hygvE4=Ds89Se>x7M8N7=94cI8fUvlmh?n<|P z8boDdk;`X%anrV&ZhY|Y;QvYeia=5zrT{6?fJ?L0&e>V`msyy=-F;8d!9F^8c*3;& zV5OhCb%J!CuEO~AnhE1u4_@Z&X78F5=f{iAb{*sVl&kFgF=U*HY#q^dsN9>hjyo>7 z*ppsvg07|B@pRjv6xWvF^*bB@CtSzwQd9JK2N)gt*hZZ{pY`wo#3rg%P;cdD zdeiyyi*d&7CeI?M=}!{QFu2QrM&%XreWq}0MzJ^3`huE5pufl^QE1FGa{31Y{Y5o) zcDP^~S+>XZw|%oWjp*coU>b=>ao|&|qB=LQ9@3ntu(qgn+m~x6k9%m=yTPEBb3#;; z8k+Ma0lKhy#wVdsfA(H_f<{d{F5Ren;A#Q|(sj;*ZWyA2Ja;>s;hQp)tI9!b186)1nKfKLiff6for&@nX z2!&CwAa}25nM>mdaxP3Fz2;+6(ra$HBE9BIm!{Wz;#x2k1eN44v8{iCH>nq7yR_}# zCEg_L48xasAV==%DJY^Iy|p}BZi5&otoy7!@ai*FDdsep=q4R#A~l|dbRCpRQ{JjG zbuK?EUFUdFI)le5oq8eapxU>nJWANWA=cQXTHuTl59rBcLuqKmPHTp zb@00(5y1wT`Q+t(vG9){*JozuT$FHi^|P%+_PUD`t}NUGtM(8da^vqC)uQhSP~7Yf ziVxi6=;UzQtDN2Rjprxbd4_+gYY`WBMzf)!sBJKV+Nl94I_GnHwXVsxJJsj>h0r zL*Z^aw?T+POpclE5a7wnN_Z~(_V{3Ba_{xUdylsr5k&X$f326B+~Q5bIjg}<%r%|& zPW9DnX*==J_Dwb0C!z13@OBR9D+toaO@0`w;zWqZWN9SnjAKVSmbFaBz0BnN^!-aG zkGRI;lO;DnTqY|{72+}(TE(5tSdq>+y3VRRUfXF;JnHOIt5WHuS8->=xxJ}T#rk3r zuXN+KKEQwy2B>RRE^g{lm*^oLJ~3wDrA7~!UrFiCZaLCXifejG{XoaOsgA!q!+6Gd zRmY{|3XSD#ddji&GoEc=!b#XV(k8i^LmI;YIQEMkc@iaTo&0%pm8gu5hN@_nUE`b* zh$gr-R{YMvrfeeYWoBL>UA%_iJ{L?O$nW8mGaozu&~0MNDD5U1)(d?xOO42!2hGtM z7+V&Xv__{IaOJJ<(PwO^W^O)Kdgt_0X2o1MJ;uIR9 zI7QxWLnare5TYTl8j6)CuSmCzXvv}HjC|p>e%rZg(_i~1K6dcKrRWAfeYcM){I~&G z-k$pc&-uA;Y~Z~S>1@RP!1iy>^d#iE%uq#AF9Pm(ZhqWuF5=iV5so?e6+DA|T;w7b zAauqfglK!&4a82NGGW^9p=T;0;7auOn?h!@9p|B1#fM?x#J>%QTy%G@^$Yr}jKLE1rciucOK%0l4E+T;u0IaE&|vnrpII^hE}5$7GybN(?}B)-6sfIlI_{ z$R&huzKpprOP;yT8YG-zLXRU9>UCUaId4cG*a4BtogdD^OU+n58bvcK(7ny}EcZr& zu4m68NFn^>c{aM2K_g=FUW-e`;;G|udlpv~{#@*h+)F>Wwq>(-@e}6xC1dlvU8Pr7 zkwG%7GKsJp6K76uY7r%b$<&(q5D! z9HqAj1za2y(yve6u(sQX>lvT{c|U7)%ljz%=U{_8qcRN&r4yV5iYat~3>5rj#MtYw z#1O6*jF%?}GbFY`CQhvdYGE9=;4ZlaFiU1rJ@|gD7We6dF(^CEaEh5k+3ca$F4;y+zI;% z(7Cc5!{VlxzdQ@+q<~1mVo>z*bSwVSqhC}J(e=XrfFWQt5<->8Y3%nJ<6Zn)BA;PG zDm50G{ix$hn2xB(`uZ_tx~N7G-&e*V$Y#-&VdB+LPau*H=qcxdF>Nw z4L|JA!L$qkatdL3$IdIfGWgzL_p!-PzdETS9#lP4+a3KDa)?2$5c`a~1J$(A0^+EO z!*0NDZ1dW=yIcnI^vVtOBpZ?PSaj4Lm)lk(Th)GNwr?rPAn-bFs+H|PaRWis08neO z(Ud;2;6ai}T@(tRCu0e?^=09fGQBe0K9#F+fZ(hlCBQEYfMtUL1^32rd;(`e3Q>f7 zE?A6S-ZGN4)lpaMq&9;@k3}+Ii-y+M2brUy!_xzHWcXRUbXjdlfYf)4uL4NUGAu#& zI-t9kkVcu#tG37x(h4k;KsWwEXRRj~*90$>jU`Cw-GMZELO?3vXTSj|*6+=cX=4lT zUl#-EKVT*uCa+6H=EZ++C8M1940 z#ynir+E`ELQ@!4)U4G3;zh<{zvx{Cl=mWm%uG3tz5AJ$vx&>@POV7~S7hV?Lc3Jqz zE5pxT9sWfsyuU2`n{@c-`xNpG$Tft2gBBp>t>z>rrK*XDw?8_2jk~v!vzYR9ubS_1 z_o`Xp?o|_PQNPtRC%AjnyxiTZ=6l_}YF4>>>u64N_o_MB-K*wR?p`(DkB(3u{^_O6 zYJGUy6|87|_(`F4efZgHyZ=<{Gww6%i~C*1Qy2dt2HL;)*A4*K_!qik|KeXeP^};R z<2UL@`qNecfVpjAyGtgaB|_N{SND++3#q8P({VXI~rInCmL{`HE;rf*OAiu z8oZ7fc5f>$pv}EvN*y!oM#v)K+7uK%uI_`#8UUzNK@lZKw1s|59&Uq#w zX-E!GEEg!~qHbPQcX=VpD)cn&7DbbBP;v~cUhKW&A>Jh?in@ZVB7z`BK!FbjDIRUC z#c2*MI;9hP0tYvBP4YeSO}cn3_k3nV6++HO&hEuFZrJu6~C(c-v}k$mtAYy0Cv zMSqo4b@3H3?&==P#A?xBln{OeHzBEjl#HNkk?~<{@W>-G+c%Xa!e+X&Ra<ZF1=P?6>;jQvB8;Ikxq)}BuCpvv>=2nydNa&CGpEGYL*rA_l>n`-~sH0Ul9b4sP zTxOewsM5^o3&OLXbFtX~h61ywqRn@cszK}(g_b`x)iBvGZ-uvBzc zg-!a{YeAl5x04LDf?k7MQY+myog)`P0e9OGRTO~HaW4R(7${?uES#NmI*>`Kz#D8* zn}rDwi0gvY&Z*^%CK(nKFttj(gi$Xoy0Sn#5t=C$d)^8W?osX$LP#-iz_T8sa1n{S zF~r*d;v%rIwKfjxu#o9~12u)1Da=RQ*QDf5y}2g|8(E>_)g~A)3=9yuR}+i>WSM=6 z;=ZWqlO=#%!6ph4AzYTwLRY*=!A{KOIK^0;VjtNzCT1PxI7SWct1CiYN9TY zS~98t#*jhDADhc4=wNaWOl7)XbDHgQ5|6rHGm1FIPGr<>h-2Nz*XtQ5ZrM=ZA6F&<%s4Z-fJboj9YJ7`O?k>NwLv3r3Z&~OMiZ9Dp0FNzm`roJT0Ug?v17VM5g!X4cp0Yj6WGz?=9ZXtJOD?k}{HK`bSK^ZgV#xy;rM!g7d zpC?KZ;C2;z_zti#%BX=;i36^7!Y^<`juH)SMZySEZDi$?NGr1$WEII#k>4vM{enL$-7Ip@pwpe&xkJ!S0U}Gw zqdWlD02PXsy^uh*r@%V|UNlCP>66%e5O7hR?GfC1LqPW11i2@W?GZSOG6!TsgtWP$ zw#`$Z3blXC-zS|+NeRYd2}vmyFYpP@VLE!1EY%uJ73xtRtH)4Js6C)~Z*6r!xg%60 z2uU-$Uo*SjA82yn$30qhheLZpvMPPQz zUcmG424ov}LlOquP{JE1cpvH$;L5ICwAnwjJEUwD#0S1wC*?&mZ>Yf}4P*WMX^ECDN>li!&e8}gGgQN#UAaqaB&bqmI!9a|=i!o8`42cTaf3Lpd$~^*8v>zz4g~Q}V&VDH zbc#`_$6$`6nyFt#`ocicPX!+_EsGe`4-td;poVTm1B^;3a*)X3R8MJCuOO_KmoUw6 zihwPeTRB3Dr?0Bv4H@Dt1o)FDcAZPU#K(-1k@V!&;fG4cE{q8e)e3}^Q|r_ zUgie{7Ba*L6~vPC6zq;YlB9$yaY+M7{P!Her310Y=rX0_H9d!NF&n*(b>#)!uR+hX1*9=D_F{# z5Kfw}D*LIxfRf!5Sz9X2Xy<1Ovkg)s%8$urAZ*YRMaz~HP!Lz?7bLb?`f)6Udqsdm zb%*3RK^z=GsVJ4j<&}{j-Zcg$O%NxcSo@8fcKhN8eD(r9d$WoweuE>CVx@XRiYfY` zDmf&p!Eq-72VXRFu7ai-e6{TkY&)Xt7S>i_B=9>WY2Thh1X=P`yy`ZjaExxE$BxnpmrPkSYZ^fg!T1Ta0B}W*AeZ|klgteT9HoZb&vxqmxHLdX-`djjq@QBX zL@epbbVkxdY*ETR%%<;T`u=hJ_sWfanoR&|)hNO^r?wB1-ck!>ou6*W8;M1(049zK z{sc(^J57|sGJ|I6^01B zi!LC>dwBh1-;OI;O1&aNm9Ws}GV&q_LzSrya+LrpiI zQ@ggLq@n!kFdLQH<8n0wD$iuOV#f^MG-b1sGat*~QZ`XYhd98IGmzjEJj{35oJyjC zGgOPwrQo!a4*@3r9f?TT>v&IfLY{rMBu1N#4G9PS_2~pzi1;GD_dh!Fx zRnQuQN$~)W`W2SW1D*S_>+t}FF-NBJb!kb; z=^D$Baf=?oNhg)c1EGL=-mTF^8;BJL39+~lRB@gN+sdYUy-cgB0YLstJR6FxpoW$_ zRr+Lne?dh-n{07Hb0Pc40xjJ(XS)ZL{LG-ffUL_=Q`2Q+pfbrh)g7ql(SSDT4=yO> zT1B{rjC6w47Pp0f#y%0KODq~x^W1MY*;2WARpPbgby;KxfRX1T&^Hig&7Rlrqq(2Q zN=ZMOQ=5-d?vNx$G(C7wl>5($u^OGgZy)gy(Kmzpukg((Iz}+*)F(|w^$A4!I;6Vu9Oc0smnXA{v^syuCaspyX9kKC$?A(_@rij}j2(<@8hxlGxkY&e(Tl;F zEewl!Rt`q{b0EY9MZt8{Yc}{&F@z=SEXrjq^QC`4ae%cP$0lZ+6|#4khZPZ~j60;K zdKp-io|KNPd!N+^71hcnw?Smx@qU^>)?V=JX-D*<60VZ@>z)4=ncw!5sVi0SC>(Q~ z#Aq}qU_l?Z4&Ob+6*#9_);n|xY9iT6lGt6ft4+z2g*!qT!w&u+XvYi4B7=rzufgW6 z5=mOtwXy8$mJ2e1)F->{bkZbQHPW7n?Aoij3sFF-kB<|{Wj`BJ27CRQeg2ZXO=S`U zT!F=Iy~?OIcpWe-sWcfJ$+$;R$^yK>44_Xg;c{R0J<^He_@=%xgR}x8*yuPsaMQ~A z_)o_Z>$klO#4nV^ZypojSo}PwKPB~%dFx_mkkZ8f1dTw^267ayD5{i zY~7ISAp|fqr27Un!Fk15uhxTBA9u3@-}ZO|+h3LmEqk2_=K1+qsJgIo&-}*py#>OD zCcbur2&cyMzJdfSon5D+JePWaLH3g*Frc6BJB(%Tq~3a3Z{46fM|J0Eb@z(?;A6VC z4`uECUj7Wepg%9pPY*)x?*Gtt^cF5{BpMLs_x(3~J37(N3G!+N`{$$g?chomoepo- z!v{Gc5NjB08GLSj`eDZOd@uiXyhWYy-0=T#mpV${fAzem!%}i_>&={}rEd zmxlLp8ea4~V$a}SnQ)eYD?vv~xxQ$t=H^v>)vU+B-PdsolT(q^4U?n&pN!|`SwJJgtZo1)m5D-*_& z4Wpb(f)ED&>-z6vIT0Z89B<+vn7JdK|fy z!8(nNfsQ&FD$|4MYLUSr_7XDh+`--5MfGiMKoPNJrg+YQOIz7)HaV1F2h)IKi-FT> zvOR+_HLwTp$@Jn0wfvz%0~!`(xDOi{rgsEI5p-4Ul5mN4JpGeFvpiVR{YIur0kYCJ z?%N~ES*=!|XE86J@4aB5%sJ_ntp>M>jaf`0EChI=xQ#LkGv`ze5j_kug|m89oGB54 zOzWeHo{ZD?)~?MG_`~nAK>P5?tD|Cx1&q^54uzE&NOFJ;FOd8wBPXqLxRiy0;89Wd z(MxdC(h?HLKs}B#I}65kh~OSqs8Zdd$&?zU(Yc0ghsYtXiYHajDk>a`Rjp{39#c%$ ziBPKeG!IKFQc|C4>$a-mQy5k6$J6I3J`obOF-!e=)#q0wG;PEy`;4lU5UC>2CzehH zM7ixC$bdIUNU$*$`<)(y5k%T?`bX^T-7Dbg$Ckt)EF2g_0W!PrZawMLK?mEwGSV0B zJ)wEt^{^@G0bHVduzEl{q6gC~I?XWr0>%>8KXwKBcS12GdCb&LFp%EUZ6hqcNAX1( zVBGzv>mIYksQJz%z{^p9^2!xI{UZ>!fLthj3q&KE0or5MH%v7=rLRM{=3)DY>CwYL zDIs=GI{_6DYE|qlimL(kYuaYF`=W=p-D@wn!kf&=TU%xU2_^S0*XT^vxvE|BKjPxrIUC?cn>cQ6kRm zk#a};F~#Q7Kf=+<1r|Dw2h@-~;6r+;JDZqmREr3zrI5UC(A7ezWbSBE=}3MN+!xj^ z0>g{B$6$ETWCJ0@%!GOkm_0A+IGa4Ys>uMj*`3|ph>1{Du92Ro2Bd_L@z-IwK^>5S zfwZr(j5ur)6~^|kriOZdou9!`0}Ew8Z0GrL)yyRJw2Bb)sRasS4~kNZrSl1$b*>Jj zPQQFH&a17ZCOO~~gP9q`6((R3;+8Uukjw*l$If3`ioIuiD#oF%f*reTH+7k%*n(Xq z@gnj{)TY$UDM_;Vq(q~NQ6e5!nx|Bgx=c}IYsoy0ou$w)g`m@axz$(iL&BFkR+TTP zS!wkyBuOI7ODmB+X(Di|fw^A0Iv_evCUspvD;WzbxoQv$w~7>V5H{0w>uN_EA$x&Od5GzE{BlsLseitexgh!S83BIEA_I@IjP4KlVj8$GW%u*`qgV&o>2=7E!4sc zq0|+x5KhCBC>fOPR4=Ksw!4L5TC=K4G%7IZwAEg2#6%<;+B~W?NALQDBjE-hs^SWa zvF>LCF`zsWiEdS~TE0?@X+>n8uGGaQ?zffQWR!_w)c_1s&x96FcPtXKMC@A?nY`>5bRtr-#g8TtUX$A(*jMUkZOiBPg zp}Jrbk1V$_$v$jGn+VjCT?9rMv3(5p!am${P+t&ZgAE?Ki&Q|hEWFAFsmKJ3j?-@Q z9!*E5Hf9hr&_7W7Ndt5Cr85T|p9hw(q}n`N;Udm7r`kJa%jVd|#&Ijp+uqg!Pl!-| zom4!Qq5vl=*T;gvLy{Nz=x>kY1$>u>xa%yGYa0_~L0L*Pa9E(0!wkw22NdVSbzxGi zpE`b#eQBYdhY%T_^Q#cKMjSp2NB9s3_^+##yijejfm)_aG*I;0xsI$j3Fv_hWvlm$ zV>?PBI9`+#2)&jq=|V|ifRM&9!h&{V&afb^>W;kUhzfk=JEVmbW8$k+u4ffND3TGT zn+aQTL!W|BS_ywQ1GPNr!V6sK?A8O7#ckyTE%|!b*F}kHCNPYEz&)CEocrBoYBv@d z)Z}$?tt8IoB9vmfR&WGy6|&vxhE`pJb-=V4RknST^yFa^l$|`V-0Yt^+eI1`;m;0P zmO41lD(l*)m%DMCK_Nm2SRpeZy?g4tDX0-rOY%okhC-uE8UcPDS>&VQ7L1>ZAdBgx z<~MY*jEkP)8WcN{I|Nwuo&*uT_JyDZ!eBcHF-P17hJY1$_cHMXWCuy<$|cNd6Wc)y zh$Aip1lL+*X_qAw9t2_Su5WDLn0V0x6BYL$HrNgrex^%)MPLenc^=ZUVufUnBerCN zB8f0rW94IxS9z(t?&i?PqOEk?wM!xq2diC-6Vw6WrOyGqL*}2X6wr?1MsfNsyAW&@ zY=mChKCCH#%Pgw)QjyJ$31lTwk2C=F-nKhcD)}P%y@KQbY`{R}a|dK>3kAs?DE&2T zb@g27hCo}h#DQQ6>jf^@Cc(TEprafOiofk-8>n%9hTN4te%>(Aq{}D4<|}~F+Dmwd zf7l*aNd+YmGArSP5Xx50o2cY$;y2bxyPW2K0fc6(K9ump+6Z8Y9m za&7c)JOPyWsvJ6|C{u~5f<4Si&B^4qm{g*!#8MUjy68B{)H#3t%=z(@{tjvkX8XLh zt}^Ox`I&+M52>lzRN$y66;K8=Ba?tuGQ@)yE4a_6?gO{hMYnc}{@d*9ZeuKPo~4lt z=Q>y(F$lMps=W)H2&o@&O!vx|X4-*04hBY9I=uTr%rfVw5HvzR3#r0Yx72y~q+;;Y za&s>lt6~J`9Lp^PU$-^zE<-c83}G$^TRdWSRNIxMwSDf6h{g3pXY=vde)U!vo$cjU zJPS*sQ6?8x1~iGYGE0z;LR?714Arh1%#j*4T8cvHF=U*{WYEvbn*|uC&#pj(Tv_O1IJ&6{0ovE1nl-tcB}D z6Ru}8i*9t7P^F`=V483rq>$dx(gLP&QXAGy@V2k|zE!v@7V&C#lxeuF*=@EM;e$gPd5x=-U$HTK9psoBxk z713?qFT25$Q9aft40*iFR-c@45(3BB1U>B#j$`QrlGzt&bG=r->U^MD?24V*M=`i! za48J@9E04*5S(O$X~?$S7@n>n8LT4i0Mm~<0LB1GIAL6x8O~TNKaa)I1V1FTCI-Xq z3Vzi#=?>;)ZBnb!{H?+G8}Wpj$>m9#B^>}SPuko%yWyLJB*#I0<5C2;lm-nVixM+D zfKY*r1gz0!oTutb71Lpb)pGU(lENOCqKG(VR6<*YoO88>7_c&3CQo=o)&2`pFPEs^ zoJHu8;j0K;0AraHg0-GPLW`1d#{9dTO26O@EA$47feF2+geWPKl6z3J^@BTRvDsqC zO#xBZ1b|iIpKJ<5F)wylC$=OP!!UMiOgp+y+=5ct5}lAew)Jl^nn37-q*{YLAWPrN-PxdCBM!82g+e3L_6G%v*iHp ztNYo#g{yd9BDWKX2I>xfP0MC=w-YPqfn6F7F$?>MT^KxOXVVApob5Zo@#}(`>3RiU zQ^h-OFV~p`_R>c)C)1DqwVB%)YvjOXn)BYYZm;H){=(kNxmV9ce zIPKN!^rjKx4ZW}vn~31^rfp(q_u^)x?iVpGu^*e zU$kGR_UhEW_|(gM58pVrTO(?5-}7iC!*42AXL92$H}?+r;VC%KtvBK^9MnYbBSPVT z9BqTJ&!y&{;>j|v-7ELnTPok-mRcX}ci>>5n5Q;wOn#buJ;bS#kM=t<*^b-GyjzYkMc#U%dsZRqnmbC?4GFZ`cIJr6`RWZYCVGGmaAb6F z4t5)tA8OXjIMhrMnm{?K1m1d{?P7@9EmhO+lGS`SWOIEzuat9$%{M789;Mnk|DMVt z9FkJmiu8Jj8!cC1X8Xa?eHJp9z0HU;k1nea5sq{7D-h#hm1b5nLxYD8rXUSygeV2+ zKNtikE-Fg^R-#^_Q@movIkBGTo0f5|c!XASjI&i;Xzmkfj?(%4s@DSB*;FE-5)-5> zAXE3KwMtTTmMB!JQkI0MGXLld`%o32fLNLo{qX_-CH0kUm1Ul-+2y-DTX;BmTiVwK zxha$cOU)!N!!jIEpa9~7Ju3~6n#gj3Y$PHoAU&1E>~+^=-Nr4Y>*53=XRgd7*98?d z*pgT!zoRbO;lT%8nfdD`$rc-CI~D+gOO5Hy%H1Upy{mR4i>KPbq3KD=Yl+~lRek0Y zI0TRoKh16i{{*J6<&HXAE^N|Zkn?N^5aWx7@>Y+_U+*bI+1o%RB9PWqkcjH&ppxFm zh(Q;6A-X=Iub!?qF0i*CmhSeKY)~pI8UqK7?lJZdO}!FS0AK43)MUso{SYYa)kkr5Bd=M9x(ESdv%R1OCQ_w0 zIkBooa|+nxgPI=c*Y0emt#8org|eXI&j8DL((L}a(x?zrPt2Rg3X&7`7~~My$)1%L zmg~61q&P%2=D9l6#M1`pW@rXCQS%YX5$+<(8r}EsfCw=718AEC8Hc4_!vW%|nU%|& z`a@^fict^HLtMT|(x0anE|OUj_@q;wb1Ywi=?W&8F3k!pYqB2Wg)LF{YneT+vi*m=KXnQ6-FEcOlaul-nB-|9K3+V87~p@#bDK zyh{I+CxkilXlu5c0g1yhu)XFS@7l0;ClLIyYG8{>VphY=YK07Xbv&x$)$EhyLv=`0 z%T^H69YZqOFOa;&?V31`gs6<|oxDQk0GueU)PbPbiJM56kpx<&R=J6w77Zt7-+mo> zgv|MDq*x@jmgjK{TtLPmlTle-C&~ij3~xYbk55OuOd_@Xnpc$CklE^06$Er>0stu# znuHn%EPBN%MQe3Rngp+8;(dmxGdcNOJ`Lvc>jPp(A2+y`LEXA0X2tO8`sXD&7%Y--l=T!#?G z8cApeMXke1T>}O|7Q1)U%+VZSEW};C+siO)WDwp)1Rb5hQhNm8qcSu=FX9KA)DhMP zg36e2Qy*j0Gm|@g&?Qm>=+85Fg77s)@)T5E#a8H`pADKdN1Y-Npxlagq8wA=wlRss z8KD6vx3absIMG3D$|ITewc^%|3J_t6Muljsqypb|*Q-(|@!8-TAPnn33{uQ8ffi^_ z;2WBdgqdcwR;#s^8al8R*|8C7vf4eQBx%@BZ35qR#JiNP$Y$Qsw-CS5j|@ZCLlM`& zio*dE`ff>^+gEYcRR)8~G0TyAyN zb*WwJL1GMVqzapTj>I1JN5|sMUNSYLhTwBF8fpxrPB6q$^aM2{pb92tfDxi=7n?A9 zu}OuK&tdto>@BsjeM&96r8&tY;uA2=UgdA3oX~9WTWRoY<^;rQCt~+8RR)kyeR{yM zAWyf+HhU?tq!Bupg`YqRoXsH`(%gu!$8=r{m8BsD0h&=(G<(4L#N(+=Vew2}>t)b+%lKbUASvJ)z-JSi*%?C4DrlW1t zICAFW`zL8T^C8qrU9U(prmNvLin;x$Au!>bIS}vkht)>K&VmZWfEdI zE$Xm=&=85c%Z!(RL=Ic*2!b9JbaKua3M-IrT`XTl%_fkb&c${!x-Wy$VwcSRKEsdI zNsx#3mvVB?Nx6GO9LwaMDOZFy5a1QdO8XUW`)w%h(q9&!JnuWHZP&y_?w6hNA<%s)8Mu3Mckoi)j?_8dY#BxQGN1jV2fL&TSAU7 zfzdH_5(w^B-wL0izMW*75`muZp9m`68SMYGgPe+PZ>sc3fHq*W227Tjmjdn9a0dGN zBDjo+ZEXzyeyTL=3Q1?G?CHosb!zo_hR1kIB(_CAY-o#iS};8|y;5$ZSIng%FyB=o z5)ovr44Zv`C6;DT2~e*vf8`fgv>BD&&x*oP?qkSA_kze%XClo=(8^5?y`LAQqp5$( zbuXpZxV}+co4iPwqeIT zVLx?PSHwd4gI|oArhpJ**`#y_3q!-z@oMYN5NcG%&CY)i8Fl)Sm&099knAdBLv_$Q zq&3(nUb3{d)sE&M)i6g36e^mcn#!nVJhTxYUjktFihiJ|Fo;2Lm@R0O`bC%2ot-jC z*IVp5NZYFzFAbjo!nRM_jW5DwuH_C>st}yTY0W7M3(bRFS#8)ghgasVbL9HeKBG;T zbIxT#(P*eehpV}!~xKpkq`@t8{i@pqVOtN=VJ3Ra=t@LPN z&{Tg2td<%TXk8eyrlc>(Y|K`@rc4M}A`DV31ig7IBM}P_7l-yZKZw35ktJDRh1!(s z8}e)?CVjMpZ~3J*av>n?FocfTC+N!7T2l-i_J&J^|eAnk*(Q(% zj5^8Tm|=q#IM4x8=ZPD@iqBSS@lJ@XUTPSoPbsD&buQXxhjDyiRhbE2)0(gKT?JE`)4v>%G#gh50*-ZT%BJZGr_-v^) zFv@}-xX{Oda%nnV4f5a?&3LP3c)EahM3lEd+lloBRb8s_NGf_%;L*{}apUkZfc@*3 zK-j+mhfoezImqYXf(|hTiuAzfTi8L^6hNr83Owp(z0zu;-lRfeXDRU^sB87AA(9s_ zT8J8HI{>UR0e}FUmv9`!G!a_(KCk`btoogmn5AW7PO>G|C-!H=*t051U-73+{BPiY zJ^!ouU!JbGEXe&$bHYx%jw@}`j@z2Oj$7U4AGa-_8J%sR8EyS>+oB-%^H$!;DbJqy zW_0AX0QsiYnQLwnkZ(GH@0ZbuqteOOKx)At+@%P&iU$FY5Q$m z4TVn?#7){7?xT%TI_&*<4V zG;=A-rb@XdZfK?H=a$~k$uIVxc*~aAGd@A#d%dp16Q`ZWT{!1YM!0hwtto%v9_g<3K62(E ze075gbm>uAS`Tz>@pkVcg@wOa3UTB7%b)Dl*LZFDl=qR14-w3Qrwb7j5PNJ>I{b`^ zWV0C6VsdqU?k9G0PC38r!-f5StgA>6fXYyzce;*f?nfUlJn;KKb8cl+$`N5~f8j^m zKy;n9HRFccxxvf*z&S755oca4e8YNR3`2#sq`9crq=ZJ{{nqc37WH9i7DI(kTEC~L zi%KawZKBWd1}G(Va&Z%mq*r1_gk^Qxp-mNd_PsQ8($ zC(WZt^W~(uGih#0nolLo)k*U|C(ZwqG{0GFdO0Gw3cp(qmu&^G5|oYL>d(2eZTHzNptkZVrR#b=AoqdV$ysrX?7*e zHA(aPNwYI)emiM?J!w9gG#4h#FC@)-lIHBB=_SoSPMW`$G=D2;UY9g0lIEpJ^Ngre zyOE@kq6B>nac#R1%JS4oV}`OoP9v7#Erm|i*qe(B+@7X?07__*jCD8!Ana<5(wSwnF} z{vk8e>zGn&4s|qKVk7Z96K2_`zRJS#u!TJ=j+KW^mtf?q!~;-`X}yj}UQF!6(;LGE zRMwXoLvI4^+lFw#L_DqyVauhkw}x=hWw5_+Zdtf!l6-pM-1pEGeH6y@5jI^;;we2% z#&ARzR}h#;7gtgMkS@|Bw}oDLxS&F+W$3+EUC`SFU0g-=I;x0;bElBJL?>61+D0eu zBhHpiu0ezfy~=PwmFwjF`WD{E-d2Ov;oR%!vo37<4Sf|4{ieQ*r#>Lvtj>GvczWsG zOsC)0?K$SIDLn~22yzPv8gT64Fto|2l;ik?wy9bGF@IsiLpnkUy>Pab?} zj&b2bZo2O%PB(7)It*(hEDSN-Gu?D&neM%f;T=r({>Jcbru#r+_|RpnL3npr__uDl z?~bNhOE$!k4J+wkdU%JM?(Aeja~r~km~Q6zZ<+2LbkB5e4YTFpU%Bbd+H|{BcU{Qn z7T$3cMv}%bI|XHtF0LjkoGwrUyTiM$!PXJZtPKC0xh|B4Gbz|TP#I>mjaYSf2U9&n z8SjUf>tW{lZ<%ZQyZZxHo`OZqU9kmM^0a+pcM$zYroYg$X~HgykTB@%siM9}Z z4v&W-Qb}WI-&6P_NSU8|$kYC34Wz{ue%ns`56N-b9i?}J8o!}5H`tfP(UKG zL8oqOKUMf86v2;V1&KSYoCmoIFB_%6Y_$U*DQ+}&$Ba7(w5n~<1~~5*BS8;S=)|u8 z2TXL~RpEmM4Ke1GfQ~g1lFK2oDD#5@-qO$y2kLq%fg$>!p{Q@ zg>s^iK%3)5P+&QT8|eveeh)^7#_*BL4H~`(P=JFEI-q#u%5Zi%oK+rv(V)Q%<5)G| zU=YbtPRA*mZGROZHk?Ij=0U~-CLUrS;NcO5bv1)|A01v3-dq`e-arCCW+cOmWB{N% zX0E#M=Jzw)Ya7Bxt_x@VMmYO78^SMsKr=K~6sk!^wgyL{N-ze`YB<{qAN1*k?{m~? z>>SpnegGJ`c z?hI#tGMqIx{NkrXTi!WG!^JszHJtTnH%Fgwb99%Rqq~`-d-(LvhBr5dpZ_yA63x-j z1#|Q{=IHaha$Y#=&%@dCnWMk3bP3H7Iw@MoMdqk3{FY!l{PEujL`BNK_4l+cHeZcl z+qVpkft`-!)&jJ?^=)ebR{!`NYXN6J{*SbXoUar54s?9Z~ITy5{VY9xq0MW z)5CB5qpq~~G=$%O!dhDz!l(W(YcY*KcBYl>4B`K_bKAm>P8#9&|4D};{T=^otpZ&i zD|RhEZ`k%PT)}vY!6W>ZtTGrP>HI%i>n%F}FV;H8tG{Qh^I@ATI^nQv!z&RFt3Mbs}K?>$b;{r`w|MmnZjUpfn0}Aq>QIP4s z20Q-U6a=uJ6;lv5NAE^KgtxUt$AdeUY`89m#{|fH1X!B$-AyPALKT@r49LWWx~O?$KO!DlBRxjbzl=0+-p z3U?xI%GR_@VylE5Xv@d!+>@3$!X|r4p`m* z>#aGNW>*u@(THK)*ASB{xn#_MlmyuRLFvaZE?eB%0L zcFWT1SL-+?bWJmy@%jj(yr}Wowz+jKE$tQ9qCd^HYoPwHCm>$Z8PC$?xM$AuM`CvQ z;1?1K?d8NeF)|~{vri$#n37ElM|i;YF6@gNc{PyXG`|`S)@$ogNiSlAnDEbI!k4i! z-FEu~ZIt-t!pUFUxb3Fj|C_^uzs3Gl@AkgJ%^w*z&fWO4C1=mj*TYx;R3lz;_HF*A zAA5d0i@j^`1GvxHx+b*uz_qkJtJ`1uSl6M6ZHKCJ+41p(c;jvM_iXDg_a^n`vX@xh zJv|g{zTI_beA}Ti_T9^6Q}J^*x(vpW_39pj zIc+oB?xvs-BmVWa&-PUpzRx!K>vjI6iMdEsCGY<)6P%Bd2oE%zG<7?nKC&La3<`+nJ{fvvb@XWR`|%2+8OC@cV!h} z*T)WV*_ut*(9dV_IrJYiIYt0UC5(Y}SMWxXb#jsUwYlQ~C9(=Ho zLc$-MT$`Ol4m}|qI1AX6bwjh)_Etsuv151)BrBFN{Z`L_9m5;m+~1I1gC_Edy;Eq#8YgK5mlNkkDTkU9!K4!uwf1UG z29wx$qd%w_3MLVm|Fl_1l+?EtK$2@c&#xi{B%7&TxsX|zlB4`8tD#aUF6K*P^$@<6 zMoFj3&EV~EQCP2{?EUupq-C|WeYy7fap|R-&QPnA*+=;&{9Z9U4O)531DGjAvFFOG z(=3P90*j{BQZ3ROTj@+M3;7**hHjReJxlZ9Y6}q4;K$kIEjfFRW_sy7B1Z-u;?K1F zz)k$fh=3nSPGaV!{vGl@o2+RjJ9#*KU-6JBl%??ip% zITx`aKSbZd*Cla}wYIKiN9~V3I@jj`Kjp2NRKjfRmSB7_{!&}S4 z`!1?J%Ag@)fYIRA_nJN7<5yujU=)}Y&^vBL^1BDg@8N60k5`8CO?Q-3ljx3vPIvtH z`@=g?9T#60-ufHiJqUjHVYyMP7}L}&`i$$jPkG_^&WJI@9mCYk4e#;7#i)*C&REI~nsQ!&~Qu_eH9s1V5?QgGJ$3uEO?p;jN#x`MLEoZhr1E zJ@y`?zK4AveU$Kz;@Km3vIT(UtDUa96d zR{nDoXt$9O6LbiRO2itqs`aNlogsGGY*$Dz4Uz@5XkwkK`Ax6+*fr@jx1`f+zI0i7 z%_lwpxK0q?XRqzHemv@M`GHH@4#Lg50GG?WNeDw9s^z01|JJd>(VKMep(f@cT_+){ z&Owc~Vb+_p4Rfb{8Am#UysE9385)5o+Q``k!8jXqkhlBvA!}~FD!pdb<>@t#Ad}3N zeel-}tNmEvE)9h;ce1aM0Q9c6oEe|g7RJxka22_1#?wYUk!Q2m=&BX2XwOK> ztBy4Ax8O9?^e=2N4ZA-UaAvl@F{AYe+t&|xy9++jVV>!c&~&+-I@T8N=^WIyx+^!j zD?<`maub&MxyNf8^hSH^CUGs}j*q6iN!`rl27stIzhC>K_@mqaasAuayqudn z6GDY6P5Q{a)$SvGEQ-ZpyYZF`uJeLnCxdG)4le#CDDn7@vBUfCd%K6-S2Ps|`WcWy z?%=}`^h+l3SC8>SC1Yft?+qW|oqpTf)npK*zp}t2kY8sEm%y{&e{~)f8!vF{T!e?! z{V&eLR9h1sk9imY>>~5y{cr9C(fI$5dx<}laIXvE#g@D_iUyoj#5`FTxL`~emQzKR z2_D5NfvQya*Y}H8VVKZZ%~)}&@NLd{xhI?~?u->kriI0Jnp;tZ<#p+`U)Y^~NkMHt zn5B+K``*GE8Qt)-lltkqJf-91QSeQ47h>3JdhuGGmV*W+Mr$_u{lnLCJA6c4G})t1 zx>C_};p`NTyLcN2w7L$U`Stwb=h5STP<)&?nCS6d`(0i;qF;12o@k;O&_j#;l5o#2 zoXooTrM@&8fh;B-IIw#9xQw=VT+ zb*ZUSm+`C5RPl^hc*kXJ{mAhW;Xi+S<+L{k-zWI$IyxaWN;Fo=TXHVNM=uOkr5<|E zw9SJbV9VdeapQ7}`rEtO4yL($26#$;Y{#ndbYoAZCw%ni~A)UoT|gG<4>qr=&aj?Y|iOOk!=ozB40TcZrEXbxS97Y5*pm zmCv+Bb-H{evJoaJB%ukt(PfE66Z)frCYh9oWJ$NZ&E&{@bcNS;<^vD^_P`3>H-DLM z#)KI1xJk%!BFtsKr8ztEf%MlNh(#IOO!Rk6$O~ zdTeug>7O9owD+9qTe>;zcO{{}RF%V&x=}=K>E=as%n~-#bs~c-a{93i{||fb9T3&= z{SDtOz%Fff>77NfAR56EC29mgy{n5Q_E-^6i3OsdF=_-6l@KgZ6B9LR)UPJ?*gIgs z5_?b)yHOXh0n$X|`JB1CTr@`C=l6S`_x;E!!c_5aP2T zfH^3{R|S{eKzvo;6Wjm*;6%ez7q_l$5d4Rl*I?~{YWZMX|r zgZt89tcN)SwS3kuEWxl1a&RZ=yP0hik5cJhgkiI%>c|c!13;OC=syX-Z0Z8niZ)k*rY?_r}QxHDLKJw z%E)$r?f^bEJJ88s{f(_+$X&6gqnDh+)&e*QSZ{zCD7r_4xdHNWmvn20kF%KV^fI!s ztjX2kz_RLl?1vyZU6cZo63C7_BQIlx!@+R6`vS$miXFC$$OhXmM8iZ2PCCPQJvJnm z{T&?mC6kkMl8~$eQuSfDiPaoeOQOK%JkH4@HER!2{EdZK@|@OW)E5i&5xu4Ym&6K2 zpRdpGNQ>wIwLrAV*L!ezVIq~VpYtW(1Kyylfp zX6TOvX6Vb_(7ecA#$YtZ~yQJs>ZN_|E&aAa2(KILS*AD*FY90OX+*SPy{>LFQ7pFT%CP z@VW?hF^1PcxSECc_Vs}kXl$yUqP$udI-z`!x!wWb-o8+GybHjH)cZmO@(uuBpm3-~ z-UVP54oT=80A}G(p1cdd2#@#02FL>d#t_Et6--l8K4-)OaJ;V*A^{kYy?q@K2*5=Y zj$?8U0GNf_BOHKPIP^Ln05HO*`eJwHApn0tLZ~$iEmIw!67LJ`Gsxb?PZ6>y18AoFQWTWuudE-_X;gvYzZCBE_g?eom z-v1AV2^%2sGOQh8xaT41ADURT)*GV;0ycl^^JyK_G%m4?2^0f^8JLT(9IHzUN7*=p zsY~mKOAa+Ft;80Ncz z?MarCVWJacZGdV*p7V5Kcq`Qhz;6RMx;ZhEMXe{~8^Sy=Qv|43UU(o>svETfv8wM; zd!*27U~F3OZiR*)JIag$-mKbKXUh5POxFEmItML*X)jopfms_JaiN+MdYsrz4{Hf@ zn?==TMU~g;QNg^=O57C;BZI)$K-bw+^!adD6F|MM@-Re44%10?d=b_lI#iBM!eYnz z4nA1wVjXuu2P2@8qHxVsv>iqXU`&oaJ=JP`c)Euw99J$-k01+%t+BIUNaiA^lbloS z8iS9EGtVoLSuZJ3?aHGi>06j%2$}OIdV4E+{d#cX@#=7@C>ADMjSl^cc;Btmotk5? zXUn<{2i3*C!tjPY8AI*9f`&i(>QUEp2Mvr1;erBPy1XgtrAz1~cFuio%~~v&DPB(o zwKOowxeKdJ29>fBwzXIQz{hM2PjBp^(?H{ajhhF?L4#$Ky67sQzm;^pc|Gf*JE~pGycPOp56-vd zuyLi+Jg3f2#ofWjsfTfKq$Y>p*BV0X>!G1<3?bN;#MRIhFaz#}%VjZouxaDQsD&JK z3uWhPv>52-0m*fA2bN&;`w^%`z>^U!DTbLp!Sh^47pe$jo!;S+zo3vpqa6h7Tg&tl z785uo3Tvvvh9*VdGLPhU)iTHnnWgKD?KvL{bU5d`h&;=cb zp@5K5u<`f|$92%P06mC{h?RGBv?w3bE1&3Kd=XcJ(=rXEimOaT1$z6jzKtxbDe!BSS)%Ht~pMF5?Jebmvng> z<5y#&N*u~`niJRqh=wF95~8E`^ER z@J~?9_Atzd0%2MU1;YRk4eBF6g%xZFX7C#HVm1N6V8GdbnEPj78M=gO6U|`YWvKF* zPyp-nW2D zkY7MjQ%5})ItCZnFlrf?_&F(AK%MA3wQwsD@MZ(vIvX>FRF?&Uq2nqZ`NC3Hk$3W=9Udu)9Tk707$JnX_i%kq) z>NTg41_K2c2kRxT$q(05(f2_e#r`4V9#rXC{lgYUNg;57mJA3=p4Z?4T942_Fykqr zNY+1FVSo}%5c(&W#u3H^5HGr-+}IVE6Tot?&Y*)d4MyYAqUbg}e1Fy-IeHBnlHJnV z+J|c%8b`-%BMMweZN$g}HGY;Fzf~wAAASgp3C#f4v3CYW%RPny|HM5ECKPxX&CWu7 z#AXY$%^NENt)jrp7#4xyw2~RRriXb73+NTJ8@*)U#rafrCtPv^!w}}dvuoqPd$n=k za{&i}SYbHu48wts2nRAAH=y)T8&=+Jp;}6hjom_OpA9Mp1PwYWo5b;Lt zpc`m-BXa<4C=+kc4HUeQHRuZh{x0Zja0Z<~zuyL#eI5|IsdW-?EuBEVQyu$)dMAik z2mlDa1km*v%X@06;3kOaKVRsGA(2 z07#)S0U(7+5ek453OzIeh)`R0Z#s^d^;77v*yyp?9H}LrdBc9eDDZtS5o5flU_C8& zkSs7!21FW+^#fN(_j2giKq5?~OAArxtRyI;r*1TICW4e(HM22hKA+YR6`Cn*TpC%1{uDqf zvpy{vja%cJ!Q9haNJo+6T{NX({S5Coym)mu5EJf5lfWd*afv>yKW-n~nA;vYVC^C6 z!c~WSb_O-efn$q%U>;5~!U&FO?WaJPoqHM%#4C~y%svmy-ta_g(yb_-R`qMSe{o1QM9br?RAjRvI; zk`(u|U&MY16f@6}6${oyMoa+y3Z}PBodzL@5dNI3S@}I@W2Z(77Uwl#-v6cv&lqva zS>wu}&Sg>+T~Likg$OO|mz>u5{ ztn)}ffZ^7VxL<_5HvCeGp1}Y?Cy;8dziWl zX&v;tASS@xYOMtLPAox=m|&xDF$5q`OxZOi+bN?khkT0%dEk#-%QuBZ z)x6(pQwUw}-J0yQ334Pv)kv0je^OSh9rZHYwVDjO@nnrKM70Zw;I|-wfq62$&wWU| zQn5(mY9J~XixKq(`V3=@RGDe4kpS~N#t!WyrD6M?h8ND*YMzr)E?LtcV-7O-NMU^G(J~qtgX<&yEhU-XZ zxWjiC;t92oUOZu@IQHJbE(r)npMV?euTz$VE3waiz?TWnunAAO=zxRTV0cRNZ<%i} zwGKy=(?~dG> z!f@3!3I0?PNvS49S*)@HPQouLhxk_8;sSWJOy_e%r>unHI$>I6 zE-swV`(!Z2Ya_d+1*Z^nO2}WA`SSFkARp_&-ZOp4iVv}B$_lKdjLwFX7tB5wI1Eu* z+?eUS^SbmN2*icef|5JL%T#{)Bm^FZq>s<6XwPT9#zpCu`IN%=R+Mf&`-sLR72}gF zvG}NS2q=KBWN+YO!y0oS@+ABTPtAu(w>z-0ghc==*L4Yuqu>BudxSofh}{e;p>KBc z1%{eW)1jR_mD!s8gPTgP$ zL&x4?0_hT7S*7#2&Lq>f2`kg7fs=IK0IY5+ajs#ba4iuQ>J!GUKF{7egu9$DGcuU} z78a}U)T0Iktemo$M4_gcgekGIKnP!H4Btw z(AqS-*oedWRMR?tA{dcRE5mr=5*I%lFV$q2-ht98v4Ecg);c?j&A&5-953XU)fDKv=RQ= zy0Ys;q!EV0a)yoCPwOhZ?FcIC*n+xBVJC4758YXWTX`z5FI$Q22&kE| zSOn2cMa7_TG0pK8YWF(Y9=k|bm9Qt^JL4f~8tQkE;K6KK+&x@@l=q5!*q)BdBOh%f zU%~qY9$cVQ00D@wtp&r1eaO;mxSH-SLZGk|_$doyiqtjf@UFAhb}=nkGcT$A?FCyW$0lN zRY9B(U{GI;0vuNG5v0WiVBTMN3gCW31=6yFO3(voe9}?k3*RZBd`rK;g$5*6(j~}G zGE-oDw&Fp#2`9x^H-MaCiykP<{xsDBi1l*@0vFET6T6}`qIova1a{>=_lX$lh$ajM z6BkdpGW33s%4L}lffPihIJiIsbfYc=R(TEo;QP}VZ3W)YGh`{L+@M07~F z1owfFs4zpd>paOq@4y*Yja$$mRl?m2mDqUJYYgmmW$gB1jb(E^@nSW@>2#h-PTU6zAuYr}B_(x+JG zldmJ>wTRLyg&2_Ry-V^L2YngVJ)2nsNvMA;p2z4Hq6f z6+9Q%#o2TzJHFTPw|5P2S*N%NiQ-7fCDZ;tPBGOQgKStbdaH(iHGK|K2C%j?3>y;0 z7)B_7&>4AzMaeXp2_Yr27%T)v9{3FD0T2&-RX2S9Of;B*p-{J%3auUNn*{ zqzF+nilNZRzAEMw8~l1;5OM7jv|nI6+%yIFpbMsMGWN_V9dK>g1)a~Sa3zMpB?tw0 zC9I1=e*!&IM(2sqT}nuyPousSROxKuU(Q2tR)7j)th~lyC9!@wY%ciyWm_1Db!7@Sj|EU*^eE`eoC*=VoJPJj;;(eSS7D4z`_vj^IE6GnVMCtxh5N33fywvhq2iS3% zL!hZkOTZm>;n4cHX@V&9kchPOM9UGap-Y{M=F~s{^!<~%S?7-$ZU8$gXq)SCTQadVisngWD)IKhxFBPDdS^E+T009>a zD`P+dgF8zo(OUml0r=_(8t2)d5YHFB-l7B8b0N#qBl%#cxyn5(vIkeA#N z!XeT&@FHDHIG|9ET?oHI6N(emw@SHBFHdbVa4%inWE_8HBxbh6OlnmQmVY060 zAS9TG>n!82aD_9Yh#4ttA|v!^km(64uwDj*g#M7Rvn5EMHb7m|e!XmnvH3j(L0?~L zd=@VoP)o}9P7&X=TB~HO9SX^*_Xzv2;Q(P@&4z4(r1Cogn3 z#81Lfh(@sl0l`67dX4QQ7?`LJI|*PyL1Zw}y*CJM(DWd|h-3zqS_wo%au>pGh7CYz ze430;>#ETE8QvbMrVm6yG|1PC{9rG2Fk=U6mQ<3aLB?i`p5h`z*Q};=xi)gmC+u zJ{8#a2$`_V`gvKWsM{z=z=A=uT2+aG)1W%xb{mz>FK*|CYtV{cbsNh-@3S-rY zK-Q&=1Lj4Ps1-q&mt>{bsvsU3bQcj_G+wYJF5ugI<2cc!e#6EIxCP<@-pMV{ejd?k zrXPK4QW^%E(V++Z38p^*^hZm7)c6C{`*)TT3 z7XblsrXHc0LD3h-9%`>w^ zIFfe==2JWLNWKlRM~D94x{URIWB;u+nyE`I`9E$yyktJ>PNU`Tl9hr_upeHs6+UJ^ zyd=ZuT2pdfNFgX?W4CEh$!#Ho_*TIRdC7AjM6e%TLLVA&P_8}>WK?569D3QTIKAZQ z|7-TckIhHP|7Jft4r)27+Ok=v+|a1kq+lW^l!g6u^yRaA^a@ z5G^`C7oFWjXPD>=s&SI=)1OtRmi_Ms1{WkS8lJTgozfa7Rp*5twSoz~Zh`GH{N32p z35HzJc~*2D5uJNP=O)qltLXeubbco~lSJo4(K%Xl4ilYyL}!;8CmoA#%j!MGw+CzB zO+#ZA3+Cjh!KcPaEDU{MgRQZZ0kr%h$!q_bRu+p+gXp{=IxmXOY|(i@bZ!%!{}G)_ zMdy6cnIbyB7M-!8GfH$05S`sbXQ=3GEjpWs&N`ygS#(;9PKoF&r9neoa??;CI&X{4 z9MO47bRHI+J4EMiHBOoyOB=|zgNf*T;e4pEloX_atuC?`4v8P1&ORWOPv3MDvKZ41 zu7PFvOmub@ooz*Dpy;eGI^9L5T6CI;&X+VMgtk8uoqvnYT+w+}bRH3%dqn3Z(fO|0v+Hd}SYj zs!ILsN_ru@2ZaZ#)Do3i$8yF|z%Z3M1X*>+D#$)nemHH09|Pcf8b>f$3*TxSL8cZO8HLEe|5k-y4sPHPoLBDyBk`!y-?!24iLA{KiGmY> zqQNOccWdy8HEWFlAJ&x7Us7sLejfeliqFFb)U?Z)kquWb6a^LEcI^kU8yAN!XsGT`2ypU zM)xo}=@yK`VM%u>AuI$QrwstDAzxURFw_md*we_*uBKZ7j~XfHScpYIN1vcD?Ayd$ z1XXR^7@{MGx!C9swu#sgr#u*hLnv*3z@;m@N!d)hO?hTda9A8s7^3X5w2(AO3a0Y@(QH9=1Hq=2*8~W5 zF%Scb7l3N)0>Q(&8Iy_*6;2I8X-UU9H8_prV-~ukDk&l_;1`kG@(9*UbO7@kU#(z;__Z|2Ie83F7oJ4Hl$) zQFhhmR8k?0CZ9~@h14t>bf+#n!ijw{43J5^oOuU!5*!~y(ZmYFDT;=;uU^%#H?*J| z4#J@YKNzbc<5_H~2M9>6q1o;oQcl2Q4bAo&-Er$BgtwYE+`9APr>LyxtXA4^la*7-9aSkjex2kvL4+jOZ9+4c=<>1%@=n1^&GgCPt8OGj(-0u=>C z5vl->hQpqZ4BsG#CU7FU!l?H)nxzudRYiag4BIiSDQN~v3c2T9LomxNj1!hrSl|tF zC}}FK?!=k7F@OS+FaoS5-etHEpcai{HN0zhW=l0(!}JtbB_UjRWXMG*8S5E_g!`l@ zo)z=J;8UxZBExo;7sezgm4a2WjEbq$04BR)gJ7i_VXdT8z!?IpQbP_>nW|i57>QK- zf>|sGn5Tx_EY?Kc>ku3G1Q<4Po0QZK9mW~yocTxwf7m$ERyKp-6Wpo52q0%Fm84+F zRqhFAAX1_aSqrPw(qE>vtQR&Fb*V6UT5b4ol$FIzHuM{6`S46f=nn>=Or8)B1&^@4lby z<-eVGcdK1v4whiCJ1(4cFQzh@>(VTkFa$fX*Q)2Q#8)@<9P8AxgzF|=si^3vzG;r24muv@2uSh!{rzA2(!6;z2><;PjF^x9 z`2Wxz0pwn=M{w~idj!I_nTe{h@$kR-ecrr3??d(oZlL@4bY@WAgx)}G8cLi6+@=-K z27R-;2*Oh7zFCTy4T|)p;XFb>YXQmPFQ{&IZX824UhWG*LpV0hPUo>x!K#^GqAZLK z%rAv5Z8_WiO*{CUz6fpl+~fm~@abKv`9Nq#-sH=$C!5Q3B;hADNhlPSU54c&CEnPV zy$o$jR+YeaWN(~6b*~MoLMZ&7pw40+q3i-JusYxnUD{%f`jDD%nGek3)4vv)a2aYw*stX? zt5G3i6Uwp8Tz18$Oqo473I~pH5`M3oYT;K}U@pi*bZITF@b)dRQPAQq({cC$rdJ6f zgnf($hW<_;?044VbPl^T49B8~xd<5)GMG)a+S3>JiM~beXJA?6XxUD!tfBUazQa-) za2%^EN9PLE-PCUr1}b$YaCF@mM|T@dqImkWm`}6j3vXru7R0rnL=VSzMq6#riAE2a zh#~=b80^8s(%MD%SsaAz!1~f9h__iN*x%QNM|COa06Q4M@;)$JVL@wrhslh2pBj!L zh?d*i=x@rk!{{fSYafVI_84B)0TBhu z0Nn-34+nrA!PdMK+b%r#DM4ht%M+Cr*2>dJZgggd&Yhz3chR{5&X7Yd@wpgXL+gVs zy<4?FQG>?`lLrWNXYy_6KoEmxCNOwaP_|>HhLapBU~ zn}%IJHJ!3SbgmSgi$&+RaO#p@%T=?VgM!3fW&qjR{}h%}VS5|x*ZYFQeW)wDC3JvK zIq|nx{26~s&8KZ;QwLxPG`M=a-3QrnD&i<(YqQ_c2T;Bf*xF^j#wLsWoiX5peNbeO zU`D;ge!W2tCqHgT>iT;$#vczBN=IA37j<;Jx3_O1zo(Azhq%``Ly9;$5W8=V@ki=1 zsW_ShCJd+1Nv{SD83KDlAz*BDW!U0B#qS9-{`mC%P>ZPyPY*BG`BY>+ zlaa|>9Atq)4`Ab%C-(o(g!>%B@j}wSpbFt^JJqTjI$7Z3b!B(RJpUdFdXC2F0?We# zpA&O~&Vw(@0IY1#SxFkDuT%hdrLwZS>)2h8eD zwjP%;&j}9%S&Wq>3e`kv{6T6~NEB`&XGgiI83L>&w0DeQyb>_<%?BZ2;0b-;Rah?! zm;9}7?(3_Ewq533Dd}}x?ULU12__P!54@ree5l)J8XMt0=XLu{gCX4KW;pcA4w$|~ zxX(j6J+a3$D)c@XdSy8uh^pfw^Qjh8yqa&$EDlfgeJ)%m9hgnQw<*}bqh9BU9ze(m z3Yo8O4$IHFz)ZgR7__fB-3A{BD~V7U%Y6DN9|)?FTrOR&i9NM8@N!TGJ) zw~FU)>nrC7zk@sKVTeKd(p-`&t5hkMk=hUle{yR`efm-JfWKrl`_YF#MUav0EM>=z z12YWcsqp0TYE_CBv4$&vjqXY#zAFA~a=Dc%#R=huy$SY1icHA>CCRM;C8_Foo(B(| zxD56ui#|sba8w$%oTrr^$@#R_5E0&9EyaZ+hULgA)TYJ+!u&VtL${9@?o$D*GGzWf zxs5zNFP{wDljvA}i2F>Qn0gDzqL3^lBcU|`l#4V`(o|nLNl>N_Jv{%sj5Dl4GGitz z{m9pt<%4a!E9&30CxH^5dHE3&D1O5}*a7 zmIRj`Yad@9nf`Dg3zmN$28n^2iuPf=b0K?5h^naUE$8y5fzMB>0yx=JN>-avBwzy*1HhN1O~d$ z1un)w7d8YXI;gNU{zet@2(4kD3;V-Y!$22~f{!uKg2Q4 z=JQr9aKR8n9Y_uS8rK`4UlS~ozgEKz*9sIImOgb8mpG*%X6vt1kF>68ecA*q-=?ce zLL{Fq*WvmeSl-&NrASrBt9;PuiMYLjOt7{~=xI^_XK)r7l`dwKxk29aM|56j^h6`&x8N z5hMm-s&3^W*a8T{qTV(e>j+hu9c7CWbfi(6XQ@xYSz%CdhK;!|$q3oZL@EQv$Cps@ zgdjkWLb) z%7LdK8E62`G8z=gLLI6xb*OO-x%efdC8mI$C9O&g+w@l_G~v^N_(*8%rK$NyUSYVT ztEf)REX&2^!C@y-a8^bb8q>Y<2cQ#cRXc^`u{HQPajLHc7w-z_4%DA1jVbX-)m&e^ z3qo-JVcK9;rWR$YQeK0ig|aOqG(bqkfP5<2S~rNqwXW=gI|>#uGz zSe@_@tp|~DsB0gXlnYlFHu3N7C71jOZ}n0n{E#ob-9LI`|Af7>f1D8dcK>`*yU5!8 zBSGR2XgI@~MskH(wIX9g$RUUiaTXnl!>YN|OCfVIb(wdRxU7wkc{rU|f$XgI1zEVe z>cn#rCg8GBm?2Q}G1vO`>C*>V=i1aOezz_>li*2jJKgUkj6|8a5&YN2!D%7#|#RfR-Xsx=%OT@5ynURJ&UY3sLQc4E&kl<;&bx3jrRtOFO;prjOYz7M}#BEky zCJ(ctq&){I%Vew&uhC1S04PZj}aNQC%>SPksQSqc_=t0sXqz-sLr`LV3-q zP|j9`a<(dzzp*Nmzp*Nm*Q^TV##JF3bmVb)0#=2K@&0t+Exkn*>WJ@omaPL2h6(FH zfN>qj#yXJoj&S;H^R!< zponssS5zAu!$C6GP#9(surg@_U^W?AdsI|o9@2dKj;aKHI}BoX!bd>7xduLxrda$0 zprSA?zA2KjeJkV!@=eVp>kh#7gxw73`&d%KTEVCVRR~jC-6r0*ZG03u-h>8GUA9($ zl~c!C9;V>|%vfN?guJLo%E*`1R3};n5?pD`poNN0?}_CAD$N-5pjkt;WHd1OX#ZN| zImnPISUp8n6VZ|m*dcp{5*gA-FXsw23Z^Lw*8Iox8!+HMAAQs`a{T1D_}Hc+V&W!@ zjg3ke6Ww(9xTXF6@VCN~9}OtEM-F|65bPh=`0G9`l|mkBuD{KQeY~ z^!Ul|OO!C?J+X1)W5!0mCw_dyxTx5%NKlL3p?bgX_iyc)Fe+w5{Cmop@a6b_jgE|o z8x=jiX+(6yzjnSciSVKto7Ow3DF%YjH%u5`HE8O8Av1 z5Ak^LMtO)=ARZ6i@GDWC0_6cP^5PA@5`HE8O860vya9OdMtO)w-T*v!!w>kvPl^nv zB&}-90YBbatrXLg!y}c$iwAx!{0K)p9w|lQk#fFxlbsJCA^gaI^Qm&gj=# zg!|&{i*$&`V~4WUc;H7q#G`EZkq$oz{Q(dO9{eQmjb_ z-f{^GphV~y3H6o~`SHMyH}WG+hDVAx86Nm0@FN`g@gS!HfAE3jc+2tTlg zkyU~6U^qpNx10>9DB(xA9B;W2>)cC^~S%kx>fL{T>LPL?%Y4{}6c@i}>01w{O82FJN58fKQ zH3)|v`Q^xu2jSF#_-xdpoWzbAf(LJE6#N`nfKlVE!CQlH_!aOg;8(!UIv$^ub-u)o zIsgye)EV$2KOVd_cxw<2Kk}n&yy2$?;D?3?9Y6uK8w9TwPXOZamINS9iwAEB-V%gU zABY|Fc7qXzd}^fA;H^PEHS($P*5IuP5VGU18s)3eVE~5*Z*(C1h|%IfItkt=AAUS| zqkQ;T(Q1^h#s^WOL*c}OH#!)8#3LWdSEGD2%7-5h-Y6e_RGxmo5cos?g$__C@Wz86 z`aV*`(|3^~9)3Cec;lgALOlnJ!UnBEf_!)sO1$wPo=pbCvq6b?_>oVEHy$dM3b3St z@K~aJnrfCPTZ+dL!HAb4UW#}r;^CLWk2fAmluc?jmMC9}#}Z{r@mQj4DIUa25ido& z6!A!pe0UHKKi(*tHGs8VLe)WY=pR*Gf)R`W_G!?1HR9oyz>jdmA)e#32*JZO#2XK% zMJyh!A>Iv<4&5%ngLpOK;YU6^h=-rL$B1B1whRw-mkbYetqf%#9!feG#wZ){@JrxF zIN}h`Nwvs_M~bp#c%&#>hDQq6GL(UMHR9EXS0f&Nf!S#KVtnrLM;t z@D+ehT|lEu7yxqWRy=qkz9HhNiSSF|$0OGwJs!LPANlLRj|XqShhK~Ic<@F%($|3> z58jA}A4nQ&l7)prVP$1wV{5Bc+uJ)jIyt$zy199HczbKLb?ervSHHfWU!z8i8#iql z7}%^?ix#a~wQk*}O}loVei|Gc8rrdAr%pOumo9pJ_wGG=e)d`K-u?RZ?>}(h;K4(N zL_`c99u+lmzyIJte*U9J zj~_pKR#;e6^x{QXS$TP7WmVPd*YBjqqDD218U-o|{5H{~^!ss8!-&=$M$dWq?2pX) zU5bzYk?b@rxp3|=Gi}yK2VU)LGhtJ#-o4H1BgsicPn+3wpIe=rlE3Wr_yrM7TQoc) zZ;|o%ZrPbTucW`kjkSDwVx5JR>;CbP51;hi{31N)=IRdJJx9H`GHmy?FZNd6JMl-? z-xL=jDt))l*k*a)>&c(+-A`={X!&r{$E*4mdX6_dE54TcpSzRN9^8(z?!Khu$$ry^ z*!SC6?DnKxpXkVx^W)5idY3f!jfk$w$?>{%>FbE2o27pwm0nG-j*Pt5bXvuyOMTBS zU-)Nb^C*XqkMI1p_~RyLlaKAaTG+N-18v{yTYm1c|JVM#%Qp$FuC9J}|HO=po)F(O zioO1gXpN3UH`1T?B$yCEDJBp<@XmswBN30t9!)Un=x@u9@wa(va<^<2_?}EdM@JLk zKOeK_y}y4icIbyW2vl!G^q6R30sak6Y~;U^?Z`bLGGa```1fR=5HmJz%)jy=fG}xX z#0cbngPwn1gTcg&kBytG9T78TjCMps%$VpXE;cSMc6@xoxR?p?F_GGLrFduS#^dV^ z9}_b!DrVfse`^Azi38IrBr#R&U%??cHKt~JWW;>J%4)j+ZGg48qR}jVR+){|%nU0# zfeOaspbGE_P@0?h+sdSFh;X0?{8j^rd)Nmw39vC&4x7bGqGfWa9Pu8ATZuTWeL!IC zI0@pkh+BoY0Q-QD+Hq3E1t9KM#0A?2^sF5xLtHT8-uHW7bBEFgMw?Ci*qwXLAFLfV zHN4I0PftymcW!9ixW(TO`KnWvS;Og*L(XojNG#iSN#*>yYQ~<8?I(8We({guk}V&7 zo9xp3dfBfx55CIGO8UJlWcbRP7WQ>cwLi3~^sv{pDJzCFYTmSEv)7XAa!K~bGh*Fa zoZHiLSHqkG*P=RDe|oZ@@ybgts%)#S?&=bh)a6w0{M40e9(~k*T(ZipX-W8r;=s_z zMyIdm?@n92KIeGzZd03%KVaGE+m3Ub797}iYD)71nqkY#dUf;O(qZ;T+KZzaylnUJ zZ24DRrYs8`vOZoFl$U%x_Vu>)M}FP&i9GpL7ssEPC#P(5exhIBCUxJiSkD!Qx+H8* zoi<=*)Xj?K#qyn6V@I0$qeJX?jGa&>3(&cq_xPP!hwv|U4bYdel(G80HB zwBXFOVbL|-9%CY6#>GSQ;4{0)lB_=i2Zr2!ImPnJj1GspN1V6m|6Q3`<)YL}2Yz?! z(b4~ILbx%iP^%*3SCgPLD$ zb@gRu*G^3f=kJb~7keYH{TER-9YVvyI`--sXnZ#_zMGrczb4>oz4tJuE8Rox>~CJJGQA{AzVDuGjcif5|4tRhlo})@TNQ=hLF*mCyW= z>U0bajXSGSeBm)OV)@+d89#PgwPM-zEo}w`J}-(ta&X*buRr#;h#x%DCklMC1P^>04RE6>ZkY@OHoXR>hX z(&U7%pF3pVUG&M$k$uIC$l+nIm?aEGDXGyo7 zFm$pvKePMW^KCkvcZlk>bl?za$9?0zvE2L1@ZC9I&wg~tckQ$7*Ugs6hjqQVe!gPL z7ejZnzjn-f+-1j`(QC#HUp{aBp;@KM`N3;n)IC<(dX|mHlP;E<*VNDY=#u@2h(|3Y zw)WS)(rz9wbm?znD%@{P>~&&YN#xk#>Z&aXT{n*0*7op_n-ipCFIsPl!uQm69Tz)k zoHk_Kgh|okwY{-&YQs8w)>*3?7XyLX7z|qhC2Q%2^gW`-Plz2CF(&3~CT$bH7VXy& zys*zYbY=rSBuwiWdCRP)u1=>jOONd@92~aU{;O?&Pc8hRdAnh|{QlZMI;`SZ?u%dd z@sENM1~e-RY`nz5Uw2EoYw(xK9(i^1?$=rTp89doqD*Gw|YbI?ruvctfu zSJrk<3o24~=`rxv6VLa5x@ztGX}xogZ~Y;||C^;JSKavPqn!04oDRCQE&Bay|5gh}E4r2CKBXN63^D({xL=(|BLTD7!UUD2l^t$y7>p|_KJ`rCBv z>wDzywd?QZFD^Q|cQ-$+(dJ_rmVdgRf4t}VA?rh*OU;m`&TA8EcV`&KJscLc zp#IO51JzB&t!=z>MM2!=n`7=B-hNx%J7vSwh$~a%g^}ExV>$U|pKaXrc+|u_6Q--i zw|KBWpjn+(yBZ}Lei;}0vGk$O#lXBpk-M+D+Gb^}YwDM&Fy_vZuIzR8Uh#%iT}w9R0>6&a6>;=LIw3x48WN=*77& zHdf`2S>Au#?t(3)Tif5;{qx+W6*tBf>whoW7+2Nm%k%Yjxb^kQw+(G|zTePqtu72Z zG3w#Hv*q8ex;m5J_IJGhDu=}1%Gd91)naOJdi=Vage6DkBn)5v{6wz?t9)-fcFVEO z`SG`u{xe&gbv^z(Y*ozYp}t*Hmwq$puhJr^{pPvb2Dd7hJMzJag9o}_z7t=+VY}aA z>#qOt54G8MQ{yV_z8F|)o>$;DcF-xgi@w|9EW__|8~8;=laI%3 z-}-RhjLNv{2PaHj+pk5xE?^|~d?w?+mw9)Nl-fW8{6X*LB zZN6qR^T#Nw!+X-zo$ltGa^HWy)gNtIUUH9qw7E!jch}82yJzVpzrNyBc754^lHG9` zy*k8hyV#AZ*R{##OV8&w2>p{A@o3T4R(n&ehb-Fj$ydw5XFh1wxb@Vs&}CQmc%1cJ zpdI;jZ|`qrO<$EM>(;pbmw%WCY#-zJ=f-;XTebI{*C=&JyU;}^Ki(Y7ePOe8T-rx* z{qD@^b=f?zQMb>Zd;NZTgSl-3RqmWz$vumLTSx5f1<#o>bih~R>T8eOI`Q|AJs}-? z4V@4jKQvlc8;LA7l6@apa)@ja+99;|!ija1f?1v@VF7)2o?5Fb<>}bB$Iy_DAz?#9 zd-oq21I(r!5j$Q>1q3#0-J~p`EmYSQ?4b~hHJ-#a-BIH*PZLd4d5cUXl^7onj6b~$xY{y zxl}HVTg?5)E$3Eq>$pwac5Wwkn9JmjaoOA@?iP2CyU*ow&$vRa5`t|DiH$@hag?}9 z+$HrS%_XfQL6UZou9BXTfs(*(a#y*#yq>&)yotQMJXGFMu9J6{_mK~lN6KU5)8$F>H2FgL za`|fcZ}M&OgYryyw)~9zoIFQqs=FqPd86CPcdI^zRG;H`6lzd=KIZ$ znV&JgWS(n&%e>IM%)HXP%3Nt-Z{cmxz@n8!M~ki&-7R`r^s(q?5n(abVuHnFi!_UL zi{%z8EOuJ#w>V;P(&CK8Ig3jcc@}pp3M`&jlv$W5R0>ChkD{)kfx=JGT+v<;qUfpU zr5Kt0Oe5SXyup6Ny-#us&bxksdBaQH{~W}wlY_FPg$URrYupG zDXWzBmfn^=mVuT*mhCKcmi;UvEF&#PTE3R@W0h}JVpVBnVQpotv94#`)H={Q#Co9hQ0oZm zvDOo;Cs`+3r&=$tUTnSGdb{;b>%G?dt+TD~S>LxVur9PNv#zw3*vM>DHug5&Ha<4~ zHcf2W*|fLmZqvsm#%8ijl1+-uY@0Njbeq*S8*Fyl9JI-{Icamo=8{d0O`gqtn};^V zHdQv&HcDG(TTfdb+Xl8xZCl#5vF&Qx&vt5)j-uq)o9gp)ne5u z)oRr`)h5+;)lSuZ)dkfhRjw*u^-NW%s#3|+Dz&%TM_o_tuMSeTQ@2<5RL7_%s3)tZ zs8iIl)eF=M)yvhZ)oayT)Z5hi)tTy(>WAt=b+NiiZKko(IBFVbnrMPF9W|Xb12jW5 zk(wAytR_j5tV!1_)vVI2)vVKO&>Ybm(_GM8(LB^V)0Ai`H8yshcHVY%?fmTg?E>vu z*@f73w(Dg#)b2~W33ik1rrFK2`_XQT-FCa3c6;p(+hy9FvAbY*%dX1K!rsQ-)xLp! z6Z=;7q4pi^b@tuu``Hh+A88+BKh}PVeUklb`!xFn_6zNo+pn{=;#pcFu-B7L#)G>4hatF4nH}pa9HKA&0)90L5I^0 zIS%(69y*vgS~+SQogKX$>pA*4`a8CAZ08u_80x5V9O@YDIMQ*n<21+Vj>(Sm92YqL z=(yBzr{jLdOvhu6XB@9MmN{BDDVgd$nsgF~P(^#ii zrv#^kPCq)WaQe+@i_=c0gHA`B&N*Fj%5}G#a+&5b-6h3kp372~$j$uI{dZuFYLLy6Rkex(;-m?3(1d(Dg^xpIleF{^q*Db(`x>*KF5wu6eFc zT&rAVZf0&8H)l5=x4Ldk+?u+zbZhSx?$*;S#%;9Q6t`(^v)xkN7P_r-+u*jzZJXO( zx07z?+;ZHmxZQIrcB^!&b~AIY>t4^jse7P%EB7|;A?}^sySw*sAK)JCKH7bP`*inY z_XY0D-PgGvc0cBR!TpMRuKP3hGIyniy@#tu0}p?XCLYZ_+Ie*J=<3nkqmRb~k0g&Y zk93cpJXU+G_1NjL+vB9i9gkv<3J;~HyQhz5UC)-DL7weBLp-~B_VOI;8R;40`K4!q z=M>Lrp0hnuJr{fa-$=?Vh_mk9l74%=5hCS>jpYDeU#UA=pHkMvIPp5mS2y}pI%`LeZVZ9XgjEcyK>* zO>og9*|el41XNJjfkG`*8Tx@_93;W-Fw=TPl%NwJY7-St z>Mg9^aIg1~-%>D4d1CO=*LTX%UDJq@^^-L+}uW zy!cUC7Dr*ogTEAxhlNvGgc;!xj6@0-!i;H=+*lvVV=O}mqqMA!tXxV+dGIh8VtZI! zDJ|;2V6ikvg?!Lp!(KcTF7N=yNl0Nyj)ZuVgDGoJ0EJ;M9DgN9i#Uc4k%T2?c|;g2 z4FgMXC=LD~AA`YQ!bKhyX38f7Q5`5bMGJMHaF&LFsa3z4`cPe12C5r#vhomCQ-222 zRBvOs1XvCvAIv@n8*awWOx*}QB&hRI9Nd%w57TX8Z-lc?$+QDUPL~IQ&>T7DjQ@{l>gP9xZ}c z9sxFd48AcfxlyJ7Q;2(`JgS?iT%kOnUKB>~h5C@2eu%578(`vxHc*{w+C+I+I*LPD zP7%y;iNP$CBD8`V5y4t6ky7K0N1KQ^4nMppJ&Q|3ID%Lj%9jWadAVTrX0RwtA_DOs zpSC8BU{YEZMsb3h!dN~8;fHwqr8vMO7$}P#f~h4p!i{bgNAM^;(jpwO_-T;_VZn$) zoNDYQ{)}+AOqI{kMJ|9WWf{6(omd)xsgwfd~mZ(Udqd|AdFxU z48S6oEDypsa#I+}qn{8*Y3QM_U_7QcAW7q+hlO!M z9#$8)sT`_@P;dVvIajxvu2*l!I7wrK4!QjIe*bL95zu5BzDnWAUCHsSD;7D)01l4eI&$n}t)HKFc`RX4_$lmJ@ExY1g<#;j@n3e~s?Z z9wzHj=9=%8%k$6t^6BXjbr-enTIfoWaTybGUj}P|4%bv4lCm(M5 z!|3UM;vl(*xgN8?J+SGzyPrP%d&yk0(f7)mxVm^Q8}~XX#7^d*nAgL8_UFg@2Bm-d(S_xWQcgU% z^tjQp-)Enyb12QM)!c2_Ud7r?@#8$(3{P9Pbjg6SklQnQH)`ESS~U1@AHOl5^d8cB z{6x#$A3NXd@7phEUr2fuaQ*N-2&e(~oqzX{NRIonPqu`qTUDMV2>`k4Gs zlM)%XTKa3Ia;V>ozqdai>nmfr*E`HCQ>^9NH)Ru2>+UOuukLGL6%<;xPxX%7 zw$=wn?>IcYnf?5|U1XV;`eteBv}l%iSu@Df=U}VIIXlbhR_g2AdT=H*Vddu*ouk5X zl733zzG-2qgYb6x_4c0UpW5H>>o{moqjvA4>!IHi2gR=@AGaW?p7E)s%Kx8w`*;r0 zTuyApwWy=X>U$}ZlXclU-@e&&?(mM$2d!;)b1lB%QhrLx;liRiTYSDUfeStJ;8q=d zC0Dm>=bXq^2RX?HDwe;0+=zr9s<%6(pW!Jyo zbK8#_{@~-8!wiqP^XgtM^HQ#JK9}}%yJ5HFgYfsv9h^S$)3IFP@a-N?e(A%t|Mu+u z)%i{wzb@LGJi!OcdH`$@Q$Jl+~Y0tIz_h*V++Q<>%;$zFxNRpc{QXI@8{F!YiHG|7FXRsA)qB*g z;ur4u{NiB)Muc$d*5A#W__&H|WbXPr@zc*f2!BH33H5I@ox!OFyZ1`=Sjnw%pW32T z`;WOn<7W=qvET^jyXo>DcXIY~k6$jobEfhJH@#7vZ>}vo!iC*^GXJYeuMfgsHO=SL z{9p9k{s9ZtJ$ApqO-(zQ)jYkL)0Hb1ZCBUlR)!yM)bc_YSGl88<0<>kaH(w*mRgMY zfwSADHT*sD^#|cM2`p){`MbN^xIwWOBHXh%{nSr?j@Uh!>%25IxLLLt_sOT(Ga{$2 z;I5567Tq(#h3i}8v$id&Stbw>Y`@gIb*^l)nG5+mn!s?M+f?zedE_UhCYzb)Ux zd0JPFntd{aOS;yq((KWFuFt4bl`GD+;~oq++`h?c4{lxS*}<|QwjYE)-O#+Q{~x#s z=i=b6?E}KNJ%?JC?fv97=iB{=&0y=(+}f%W&!=^n$c1TN9$7okh3j$Xz?{oT-*ZW= zVf8?E^n>t+sbVJwEZ)PdR>oZP&)>vdo5@!uTf1>He_LDUaI`b`%htgUe`z#{i_JVc za?F9cT+?pb*5`TYxfuJ1T*qJUeh~ilXFFH)@ao5XW)||pEW;-5b^NuLDVtAl_YSr( zbp2)w_gN>EQ_mIETu}7qy1P?%a4%-;>@{Z5uiUVopKfn5w&4fiZwYf#jSGZNg8cak1TFR`>QO9C+7_h?1G0QFZ2 zF8+r<*N*N`!W|f%QdrRN!{fgo>crHa0#|VQA!!#EoH6Gn{I+0(%(c z;PQFP57s~W=I@)j>D;)s_ouH5zjm3M^?1V%em_0r?#&<8w$G7huG7M;-c}JWxh-A3 zwd#GmklS$j(x3Kj$GC5^T-*o#L`=Z@f6o?=pW8S7D^8w%uhMnLEbeEUKI`V2U+0={ zJQViD50|*6_I{5O$NO`|O=MrR`5o5*+5P?P)oItE_;bZt_W zb>7tv!hg=K+jiu)iQIw**-I~O%;y@&M!PlfiQx|QzB4_)P9*pH@WGvqt?0y=wVC7c zBqW`i<9}?#=DFTn&qMVV9(win2jM$yY}^0V&>7q((kW9@tfXADq-(r$+fiI$(Y0UC z~xhnH1%(|r+=>Mrd^bAWxSd{=MyEf$K zdQ<=;!oY-L@J#}k6iTRM!T13Q;j#&Le}4dI&CePI|Is>2h+c_1RWSj#ur4lLZ(#pZ zzun9KHONi^;FfX24qn*>ARSys#O>z=)L_EHox^Vd;sW1`a|~wzPM>rIP%K)2R#EhJ$Hfh>CZ#a6(C00u?lk<+3H09rb4HXZe60B!MoEjM;IU=EU4 z6h#LF;P~ohxBo~1@Rp^a($jDPbna@Iv7ux9&-mRZ%ajgmGy$Y`I($Nk;((`}`T82X z1HcZXmK({y5CHu+zw^|K9?)hDTu)NZ0Eo>AG($fZ1w6Jh*@PI6{!e`{^LOHzA1*+m z9Inwuk|=<5GgAC;H#8@GU%mR=bXg)s+U2gq_TpMVJKWL=@k(>+S@YAyV_Cj5GioVW~<*brAr5 z{Q8LcySacm)11a6AJ6|8f8)WYjW=dBAiD&XS`6t9@GnpZX_w0quwLX5t-Q();IY>F z{Dq7Fuz%-j+puH+urpxZ5?TebJA@8JM1J#SUil#~a$QZ!Z_8XuJ?F5-f!->t8t97Zy0WoEb;DDnj@L5%D&4fZ__j zA@tl5h#>tSethTFQ&ZuEV-s;F)N4j}0L4rUN0{==wQThu<4M)os6k$zksXh)z#Lp- zpmP`c<9;ZNsPwJGk|D~5*g;e+V=OZ@FEG2R8uV><=f6a7nI;b8lxBGOsMeb_49cHa zcQ&dkv~bd&pZYm*&MnsFt&n|jXU+#!4QIBaYiH;;>0wtKWA3wCbgQwRic=Z4wq1wn z-k<=Gp{IW@YZ}Plvz4J7Js3n1COF4Bx9K#Kv+Of~s`hsK!J~(4Sgchfh%M^hp5O%D zR4hn6hkh`LQ~N`+tYa+sp|C0ir~mNs`I%pBf|Nl5`|8ehaJ>d|mHA@CR69CAj`UZX z%E1Yz_Aytw4?d_^1kJzU1Vw_~l--(Hp{WZq;M3#j#xFD0-ph46Ycn_xrgxdry>|S1 z1@bwpilG-FgGFL59njy;5m9OMER!50UXMI7s|Ti^+J4y@5RyWo2w4!sxvw{M%JGi) z9FN5Nvo%cPpz~7;8o%tZ{>g+a6Brc#0YV2tph`sL$Q*7q`}(pAP%n569_-x8n6G#g zwuhM^YXY<~v7;ql*h6=)j%RTgF zcU^_GDi)v0!F95N5Lx@0EuN_XeTG2si1it|>*)*jY>c&ln>uPqVIhiTx9pX){+7AT z8vIZ!s$3?2c^}h2&gyv^OHOjYhUztVI&o+yxF2$N`*R#ZSIN_JgV>sm&$N z4fF+HZl~}-v}X$Qdqh*22kqnD(8@9oW;)Tw3#uGyz}5>Ei;-c8D^ofmG#Zy=iS$ch z>MG!LuE)Zwe^2QfW}}Ut2wNJQJIoqg5+dlY`#y#>TibR0?$AMUn)+LAfAk8YU5AzVu3XqUCHrHYEiomAjHetC z_}dIxDx2iuVBRc=gbLiNihmfQIeBBdNEJA_FVbWV52TJdzXjA|M|;BC<*kl0YwbYg zQAdt8z*cvP_C@;yNBiUGAPMeVR&5S0+IFEc-HEOltrLl-8V@kpA=ZUS40uKZA>sjJ z%Go+eHjsrnpW?hwo5+eMZ5$Gfb1Z$H0*9r2WPz6K(8BWuz*RJ)t+7Jy(|b~g0@U?+ z$<_BW#Z(4D%cf;)nSJ9SM?eeHE2OCjzk zAaG?(&?Lr(-w>e>kwF`SH&r&-tcw8zB?AFT!UzN&(8cR#%QLt zLdVwXml;z!DFaOj+<#7iFM#wpfM{EqKtxRob>jHG%V6}Wu#^Qk6%xRv;W@I(T5)+x z5`cRa?oXLuHl>XUwo=5>m{8#eu!*9hTZsVq2PM4I(#+*S zdoWg>AZvzPh$49s`7n)J_i&y-Qx8XzVA*j78KNYUgIQrPA2b0xie}?Eqs}%4tI$f> zBZ8vNXcG;a3opMLHdE-?5@_8~u-|8H|0)tgbwW?5E3=SGUCKA}d7BU`*=7}+Z|IuKd5!Elgnvahgq3j}BPU?Zj zymJ4piKa=-YMl9A>EcSpd{O(-Rei>9daWJ`S>J5Uc|=7CtMIoIl zHCCGI)H54eB#!yNyPs*?*jaV|zh2(|x#9Q!p8kIf+yB$L{eMsYv5^1&!qrWJ|O7~__*mqDHF$6_511X4I%MHR+rW_8M^ISZQ|qf+rnp&NP1ZsIF6?!RfqYb z4^b`3s}^%ki^%{H;08VwdQ4$)w>%XcF9O?K=j7N=G;&=cC-MM=a8^~d0b_|)C-7|G zs9I7vc_j6aLL>UL@?jrjfJVEpeZ0eJWog)^A;lq8AM~uRHB=LU)#I($o|Iv96$dlm zGFQ=zois)S8V;HQK8_&UaVn8Xe@PW~d3}ZDP;S*ZU&+_+to~F|!&r!m}m6uJF zgP-@tidojFM!C8WO%pQ(YT1#MKuKK^99iMEl`E z&@@?K+;xj9@zxZA*amg|`XaV8J!xL*o=llJ({{L-QpEC$`i}DMzcnTz;|APt!&X;u z8pZO$>}S-DoLO(iLxQ_by`CUXZX}moFxLm9E0r^R8PZsrac6&p*!0%~w6NoX~f$aHBbZQR& zS@?*M_cU>660sF(Z^u}{Mq<%%{VA86Z9g}DDj0|!KKA%<&Y^|lOjlzXZ{21Iu1lp1 zdpD4ye+E#b-WPkjzBb9=N7>DoRne$Lk9dx8Sw{D9cD!LSNmTm5E|_EbzQ;L<@FYA& z)wtmmurM)gB>O~wL^Cs2^Mz8(RuCo)=85N>ok|^cwwvq)NMe=!z)9ELeHkImPV9B0 zDi}7E@QIfNI5ZRMorsSpLh^|SBE@8{XJ5!wT1i8ap()r!+hB837C6MT9A&O42DN<+rjnCuDg9WQOKqK=v(gN^mVZhRgQ@jHBp+t#m;`&O zBUzK&;J-3>FfCBTr$%g1g}}##{8jG=T+m)m_XCmn)ck3=nLp451i1-d-v-o7{{Es} zEftvPlt=Il>&MUS{S5De?CU@@u=HO^(W-bq1&SIs>^sqO@o8AeQCfc)nD#%dUtF~x zha5C4Wk2Y1cLw%V!($auRQdA$arP+m6&=4{4(W5Dx20o29D&cEj6Wp$$Q|eDcv}bt zgSIGAV>&-`9sLH;6=3NMEln!=A(FPBfiY@k;Y8g)JI{8S)6xcy=5;rdJEBo^d3&h9AWm~JlC@iWowY<)0>bI?Zyk}%ePd=oj6f(XPG)*BlNNM^R zkCv3qlX zd{8c{kW5GSBgWZBnGJ#%jxdM}=g@c-F4y%u|3(?rpq;1pL%VMJIY@n?qy|BD?5$Z9 zv{+pImW8++Ul6w#eWjHwj>xss35V=x1th3_wr<;w%yD%}UAjTcr_wO&NUoV72+`n8 zQ=_%=Do7@jmC%z<5;kH<`3(($?`)OMvA}>A62>M*}9alSmTd(GydDH#tZT!`E^&*-R@$ z|11zC7LCi*_j2VhPl>=f;G(2NNn;agOk=FaCT_|%mTeN3$uFGt80DN^c^c;aYEfv8 zBA@Gm0>P$>np&2~>;=P>cWx0V;>={*FkNxL)03b12P+c(t88k{{d#bMMlX8$%DoM% z_sX4Z_8ij``c?ln6rGgLSS;iJbG}ZlcbQgzoj~&ioCfoKef9BA)KfbCEaGvk@Njtc zYj~}9*PUM~?z<-ysQO3E!n&)7QQ6$pj*#P7@OIOh_W%+i9ZJk7Q`m=}HlrFdE5);D zAU-)^mBE1dp9#DQ3Ti0uy_uv}%}j86gsO4P5M&ihz3`ox*%i}$e+(y8;E=`bvZxyQ zJfyM{DxZt29_0IwA>AObkX8L6cYzlQeq~E`P<-J?ap^=-w5fBUBbcTUFa7q?cEGs( zdy6(S!1Fu7Hq;hxvY?YRNrk(R(Q)+6304&bK|TN3XJp4W=OZQs_Fv5$kHoT-u{jH8-gHuT&E+xj57pnr0GY&*Jo$r;KB#}B#n#)1 zInZLw5HnH3o+1F{Xf)rbf2=KFYpx|Vkxs*xNrk(ig@$A;m)zbF!c_TkYxuUj8`Y=O zB5J6|UA!-4VE_Xm{YJH$K11n=LF$MZv2%Dd1|oT`M_R(*Z$l?59zCzE(YxwnW7i)p znn5^75cXd6#)_#d2KAVgpo(tkLBA}&fueQ6e)YVtq_uL9MCf0XQw>`q*3ZA*M6qC1 zAq=cTM~Z4`bi;;3-fIUgVFCUor9-sXo-+F%Ms1=H#2Dtseb6wxxwLIKW~)cs`y{*2 z@c4m#4i6?$X^`P$jIYiBPa2UlG~`Kjk*@m44*Mt>GzhIbyXa7 zM%NKfi7?=+ALv)0YO3p5tw!C^;u4(0N#*=lx^j9c^@9PSpAXHM@GK(_lHYT06Seso zIqFBm6qd|c6umg;27n}wcUSn~Y}q52cLeb_--GOjV_0ZY@35c0x)W$z^?GX(Mjg*) za2A?XN{PNfoj^y~@z#aHT!1us;Yl&qbbLZz{3!J~jKv6UpG%{moqt-ueP$@{o*Q8;B zBlJ%@@Kw35VNBKdt+k)MkOw$buXF<0nVTGpV~n+2)&OesLBsy47T@wavh>m^Jw+03 zgTR2w3zF2mjdpt_GS(?lVX0@LKEVDk=1#bGE|Fvvb*i7NfxV=xy*~)eD{=bTR>? z`Icf3$muVcz6*K7oYXJXW~(g3$!6slB%%&^f>)r1rqL6bHwx)mjQ?xGvzs*Qhvp@1iUrujImT=LD$Ih(? zC(4wieX9_1l)+$ATq6Jc=#;RhX20q3z1_pJ*dp2VHus20nu!tZSxf3_}lIMY|8)Pu(6Gl}a=L zQB##9aW=4+3K6XpnI-di!@07>WdH%I*L=YRS?Xk~;&ud9C6yG2sURxMc~IWPC0p6z zSA^@E>ya1GtGr31$EQe|xIrFv!hN(pa7655Gh~GOHR%<{2Nw zmudSCmcYysVTp9}%*#!Tw~tj=mZcj%6>iajPT>ucAmf(DO{!48Q7qVax|Dq9dzRzU zXSHkny;U2gf^hu4A`dj=CXQpyx-Qt5L&i=S!L37FJ211`V+W&~b4mZSU(s#Iy(*U9 zSv|{Ry!Tv&^~JX982LMZSQaqpWI#Nl%V2V}%2xn$ks)}83orXJh?iZezf1sqds@{V zEKz){S8sw{W->pJMQEH~WD4kGiuGo@V=e?TBosRk?#MtObgB0!d!|ZK;Ab-3&$Sr#Ks0 z$+8GF9z(S?*Y7~6pGWI2vm5K4gi{fe_SX~kQZKi~>~k^SRK#N7NN)>_QEc(Q$M z_seJey-W zalpn}9E$x}-Y%xJo5v9fMZ7JV-3Rz(Q$)RvQSxTq>~Ny|d#L`gq3*k`6iCiyh?CYS z@!4ACq>N^J)%idyT9Erl35=Y@``4K!$iQv^cB z0NiCHci+No&MD!2e>>UPfS%Bm{NH5{Ww1hMu{SWiHNjzI4#!dWRmF__ z)6ein$s3|Iuy*r^=B&c+ss3Q1r|Hn}M=M}3elFS+B+JI{gs)IOJg45=4GRA&$#fgV zo)XH0HiL6^htEcum2~oQHJSKa`=g>26m|R!r1Bey(l|wnCUD^77Lg&Pk9F5&mL{d7 zbI4S1U%MLlXo=b=Qtyv5d8C7dT28(qP?hhQV;=sU70VfW8tIfb-cI3&XFyw?jLm_= zR)!!=V2OLo(j+R*`K-Kf7~^&il4Am1z;0evOD5aj2gG^KTqqg|VaB@7?qu+5tWG(x z77Xdp*nYkusGPxb=I|~B-Nrlc?XWA`$%L&1pCuMy`JU)7; zhid`46Fx@HpNG;wYjU6}3cSyj7Bh4f;Z)^kK<*U!0A`6!$Ukro1>&STxI|N>I)3qG zf0@BgbTyDEkf34oACt-U{D(-}INE0vV8;yIQu3`73uAzDW*F|%^vvlv! zM(TdqPE5rEsoXQ&81>c*ZM1zZOtqm4xU>}De z@(NZXkZ8-Uvi~nfB}mG_LKu^mAV__QBm@TTt?2YspVBNE{in7>Fq3)s%ln4tC()d_ z`g*)KbP!>JK^2$ZGeo?Q?ouWj&bl|W|FGc%*_r%`EJBvti?g;C#2^hG`>3vWk5bTj zZ|MgMT?A06vR7KtAeROQWPo1AdzZC-llH^0Xk+ z7aEU5my&aaIY@%gcIcTz-#37?Pe(~?tB25HORKX!Pq&67w!Qs}&Ma|darHR<%=ZtY z+kajpnz!V={`PKPV`|Wwm~0ef-_5`)!HEjnlcRElSUU+ie*tozLvX0!zeZr}AOTL} z3o6k(zl;$mGFrl?7bV(^T*Q+nzJ1!tA!(QMeyE z#w&bi*?3BY`Qa$unpLqAW+Extfy|u1_mv*&SVJc?dW=8uvGr|9sN3?X{1m~_iDy|4 z!~)rUz{+&}qI1#TSHn!9pqBdV7UcW8%|>-a2AjLco%^X>AP)9z;n-cgg;O-SYAsiU zTikiI)Z)Qigx{c`aZrBpsTG?W$7ors8qezH_6n#yockvI)rZ@q%oRpY_?9q1 zd()aQqSJh~CjBJTs2V8Ma8Vw-4f{0TKJ@qyw*!_Jw~bGhDjcPK0oGVY-J^{@&iW)% zG{`B)DkC|tZ~ovB3btV~dl$mn7%3W95Dm9{zg*4*bzox!^5o&P>Z*JvplZkutzKnl z3Jn^FAiqojQ*8JmyU_kET4ycJ;z5!yI=ouRYsGp3C%%hgJDJ3F~rFWMs=az?12qJZgU9X z?DlRp_?nD!Z0v5^2<2nb^*@~NIAiYQ& zzhq7KBd=J84gXI8%4>Xy6QC>EB`veuYPsLisqIzX@6`WHs0DbD_oskMQWRoN{IVDe z>fL!Xr2*;(F4*PCX%Br(IT*JU@>I zUfga8g2Z&H7xS$2^JQ2hTSA4q!ZkI*+{F2cPSDI+($$_yWGHlE@PvyB0#-)sZGOGW<*)W4`Tli#z=`Rs@+z^Rh%`>~j;>d@t;gocZHY{!%SuKJN z>jrlq9SUHvl62P_)&mBGV1ONBm4k6-TwzEjswU>b%-GusQjEsRk(A)=|) zIwV-5n5xaAw`RJS&+>u>22{EaskG?~H$2r5V7tHSkf4h5bf~CTbif_t4y1VSFKSR8 zcbeHhglFUQHbS)sc{sq?-^yzp5eQ~Nx+qNSs^_bcc=3-!C#wO+vjkSdF>WbmskUcB zxpe98F0z6jZAQ8B^ymPv?EdTHEZtPB#$x7+&@k`}oH8GX2}eBS3?Rc?#n(SqE_`o_opnz8C3=(a z%cK<6R+S|rawi?R%Hfj6uHQb*`y||m*DnFFl4i6kM6+hoX<0-_RXr4@ze|g{#bW!;#9m=?mDl!V9waTBX%|*m7E>-zuHGB*E5#QK!Z9j^(gX8n@V{b55#pEJ0XP20 zcKpLTwT9Y^&@j73zHOq1)%}x`75}ep@d*#RU{_LGa1q>P8Kd@CHwZyY>DBSIbDp;@ z$-J8-NMu;b@DQhZeFFao@I~}Qy`4gz=V!fevjDkSbPD~l`br3vlC9$VL@}D;u&SGI zj7l~^O1k-QtA2{yjxzUElDP8}8zQ=)xNn9(=x(i#Ld&u{Wwa7nuMRzqBiB;3mn8jYFP4DG%K+6 zsLy)mH0kwzd8U-oVCiX2>*}XU{r)jo0UV4sS%D=nno!lsbvR~o6ox{V%D_ittDNLX z*3O4w$)WQVrl0s+l7S#Rzh+n)HenpJ^swwLa#(}j!>BILvCK6pLuO(eur28t2!HmY z9W3k^{O2#SVY#_Pd<}7P{wm;bsrGl^vRLH9tCeS5L5|Cq0PpXKJ(OBkk?NNdiy~6j z{x)h{U&X4^e1oW`B#3tYitkeEO?_?m^?NRrZN!fr8|vR-bYv^5yWW!& z5Bs?SI0O(6>6zjK=uDaT{Mq5cHPu5>Rb;A8%E7Bt#O<&e247!Ts~_IZ@BdbPP&xS3 z>_{uXrbSb?O3lYz2~pRS-9nQ~x+ojNJ%`DJRHG->_~TnW(^9E%KKe3FQ>NIvznm3 zNP`t@opMR3SL8TL6bM58r7Qo3!_4ub;|_>@I(^jgju(nsw={nO3N1rJzTC?d&bU6{ z>t^M-MVfHO72GNI;k6n(%z0(~oo-I^KO!e=8!>%1 z1}_rEj99 ze+xSnQOYYi_=azScf;W2tOMo2Z%nX8qu0Ox{<8M>T^lv+cPI?~EssinbIY$9eQI#J8M9Lr+=^XhvmHv)G z5*%1@@BFZSPh_B+5SuBO;eY0Bk!+L;|DyzhUWqqQNF({j;!J+-iA7GvbsvZ6X>!#> z3zziES;n+Xu)1uJ2Jj2WU(_sAWr8W1F7V(gdn5~{e|wQRjcB&4wx;#RjHlGJ;(3zS zBi~sYN_iKU+LDwx*oW$)WjJjNHnKTIntyv!z;@jv=9RXllQ0vwITVvuUMKKQ*0;B! zte*}3Bza+IzH4CCFQiZVY7`S zIX@rfxE_8P1HtELi+5-H!tHs;kmDEJ7U5wSREh3%82yWhu^XafIEmZMz%BhGQI*Y= zG~=mJ);&jUO2Vz5dKL9IPKw3~CUiu~d+KIln7`ZG2r@Q@moK!o%H_82F9pVAcRphG zJ=bJr3J4}F!kXCd-iIC?=6-{Ziib`@i9|KGq*XX}<=jBGn(iEg7&lk>CSDiI!NPlO zl&tt~4w%h5TJ&ajQ&uDIH4&(5%(-Lt@3cw~ZdZ`}{D%lcY#knbE^W|zrB_64V5Ls) z5<{T{r7uv&ti!@#US(hxlnR-%B_~`cQ(MxrT&`t7%?Qcd%Xc%5IgcL-3)2atb1QJa zK%qWxI2x;<{x^)?76_{q15@y2GT|RWidx~Sqi!DaTOVxguZZw`S=o6|vv9Qu0&aXg z0sttq<1Ifu9<1#fu>r=Ca8yh-xHMaGWsx({y_olu4ut!f#tRmM^qoq>pOS9uUi<@d zYW;UXv>QjuIa!FYSb)pCAM$4x{r>1J)YdAp* zG&6j5jDyq2LsVv*JH_oM=PtnTjcGCVd(qY~D`|_83OU%b-bTK%5X^^)ZFIr5ug9^( zI=n+!_Voz9DJSObN20UN1m|R|$C(D2p5nHtsQZsbh2@`}vW`f8Vc)#(9;M$$N{=3# z$jojBiB{S23Hhtklu$!SkHq%nP|_>>>Zo-4nxYr-OSxw<%%n555-?{G!C~_OzCtH^rL1?eFl4NDf9qa2pqfye}=m8(sW|tUn$Cin&Fw;Y9pxW>IBj z6>N?Ia%5dkL5*lP9(1suwgsRc<^@So^#36|25c0wE3>7_Y97uDu_z zftS^$`eQLPK(d`>!AKW;mAo0iEMY4HAaV3>#M(DH=fB7#WIf7E6jT)_P)#cXkb3g^GDb&QbEW6Cs$bN&yga zx6M#ZQ5}uiNuVNdaq3#hj$!%R`&Cyv#*~Sy@G1Nh%H^C|zlbTU8n|9{r~$*o#rt<^ znNdq^yK&E!!C*}WD(hJwI(nl4v%G~jtaGr9Dhz{F_CUq7XnqnG#MyVZFZ#DqZXtz}Ch&a8z8(UJ%cL*Dq@iW2!vLJn94HR__CVd_@L;er5 z!OZDAg$SBMtoeYr;rvuG&(If=&B^CXe~&=%Kae|X^Rkq>aOqB`-joJd^8eiPis6H3 zg4B$AoZ9J2<{r_EqIT`9j|83ZS^T_+#;%Thf8-r9sxovYnd6V`wL$KfAv+Oea3(jK z*N+wBzjhKp%TuG@7e(C363KrY2}Qw)yBYUGYFcn%+f$l)lT^_y3S0QR^+1?=@Zf}-IKRcxzQI^F#>E_;Hlvb?EU+7C zpk$eRz14$H?%%U+G_2K0OQElCZY(Rgr1QKlqj&O%dZWy%!1F>uh7{#RM}1IIJF#}1 zDJqi1UFY5S2*!p3JVkkZlAcHp1w!c~g4QBLC?!_ex$Ue9Jo7WlL3wqK%G)JOY(M(1 zRs`5HXe2~Q4>^siIgmnyI;Bb}U%OBO`!Qref)+6gyZvWdOcC#<4rjei@T9EvL}h2)J0mGD@qCm~G?wUPQ@P%UQfr}Ua3s(a zd+~w7*S7rH-2 z=r5a+ih5M-P~Hw|2H z;)x?%{+8+?pnvJlM_9a+%`2SY5}_FxcT=I^)mL(LpIXDdi5`xH+3wg5X02z6I;&yJ znS(RW$sD_N1lqVWKi;K!gb<6*>~9{SiMQ$1$?JBzXVh`?0~FcTgwTH9_V_k8%Waj{ zlH9I)=>&+(2}nQU6FfUM_qbG;8**X#+RCi{u)B1ZTkv1!^UxdTg`f-!(VmRrQq<`4 zGNtb(fKVFj#dvgP!>svk)&N;`Ez)jXIrTswX$-R9ndXXMPVz60z68z6TwBcx!9&ty zed-4{WfR%D^O*Z2!FIcnzq6L!$YD@ZtT%x-B5tV&IiqdFgj#r1bnX^M)LltaOxj_~ zdBNL8MiqQoPe}*26#cMN^-SNfzzLm0)!HR_SI3_r;$F2gd%60t9gGvI6v zngp}_KAXwqtY~n8S^jQ(v7kKO_3o@_W+>G#An!T1-W{vYW+{C=1 zPu+daJ!;PP)^${9i?v{~G~LeFY+-CH!jx~y3yV}%o?6~i2z7((R+wJP;%fS9Xegk*z~a~jC01iqhzI?-#j?sx^kXDqH+P4Nq9leBT#?SOUoP~>;Rb@_gI z6s3*^(Oog`=kuue^wW&)KCPy{IK8}#!oY^pobSg%s+#x_FJ)7xw~Bu&tr%6P8T3pC zbrfdji{{qd&EI*9pY9u6RthGoeP?zq$2)aMN@I5X(`ts}^)^~#`wFH|DUSg{4~i&& zS=zkRuW+T7G3yMU9xL{^JQvV`myGySnH;9y<9tJgQW;^rq_=l5Al>ZixVxVr&YD7k z#lef`F9-TVIY>*~Jsux)E4QQ>-iVuK`sKsAEC z9APGui@Mr|)uh_dv~}&(;6A1X^<>er=XbF6;On(VV^eR)m4Fe(mRktrSF8)&R{#}e zlrkU~^XhHgoc?LhVD*1Y@cye;PB=gubx+~^w(@R( zQm+Wymr5ic@kfU9_Mn0_>6j)JI4`2*-|~nI?5GU65)Oy{T*Ja+!hc2O%JQ)JFO67JGXTD4 zn5p-<*j9bN1G_XuMN=K2b!Xzcfn7YwK4|(&Y9pXvzn2a65%elef<6rlYsP**^R=5m z7{#2Xe}@3eiEDb!UN`@5eF4qj?XNiRoE3Vv^j3&ItHuT*{_te!ch#@b2ez8^zOjz) ziw#Ua$?&Ty?VQSDn@P9>W0a%RH=TXm(SsW9v7-F6;zw9e$~#n`Nle}T4?~SA=bK}O zQ?3GWv*{i{{qR82o86vC1ew&G&~@)sh^%O$(Oq^Fw$9#F5Is_u1p>>a6;JD6!m|VF z;Vox{+xKD88zyrV7ut&+#`hp2rW0<$_~2VUU^9O@_C8?qkDgd-U9c~&#A5ks69^^K zqe{kHJy&yjv!$HmFNB|+R7;Wl+coC`j)K!7nid{pbVEupkExh&6)<5b&@EdD1OKuJ zBM?Q<^OHXmrl5ypi>~7aO>e8K_c}_VCc)go?xA`~p(!EUF?x}4{`t&Q)ScaWk0DJz z=`IxgQ=FojYwmz5dzKv-X^BDaaokTb7OxSp)m3q4bK)B*ZZ%W({hn|j3nMtm$xEAK>${nFwHhh&5X8!_jQ9AK6+cI{C$b7J}4)1TvQOW#kzfc~cJwx$3p)gNx;opW^I>%`a>;SmvR7@Yf$zs%&`h zdD8h;liyY*pKt7pWnwS+4?H$b8@wau)0o%J7o2(}6Sr;V88k6)HN`X0*k*B0+D}Gn zz|JvUiVAtG%47Vn-X@efj9MAF1d7Bco)jN`V;Zpumxc?673}O`JoE&2)imd3fgD%z zBm`Y7Ip(a;EVUX6aoPEeURUH*v|wI_!=KzyrR8TvmEy8H$zJ`& z2awfRb^h$05JpNz#1q3G``l{0OC_n*Ht3CB`yy9cPC^NTR(!1kN;G}5Oj+wz55jKo z0pWbE^U2#7VPsGC5G9nVkj&V3FUF5BF}2V4yldSA z|9-U?SL?3)r&2IPE3b*s^&geBe{b?!F$DfG^o+3MI}8s6%Oy8SzW1^y(gfrkjFqfO zgtIFZRtpgEYRN=pf`osSKQYguA|JNp84? z!@^T(usBgVrZdjG68su?6eg$(>jK%9(vI{?-sG0ATn~hu!Prue`i0dLpvi&PbdYkn*fP`ZC`E+OJ-6 zwOTm0BW~aMjX%7|{JB)oAjK3BtVfRXNDW^kQE=;M#>Li&NZr8vN2$U!G*m`3|y z_-4bb{9TZt#ncQzk9DbK)r{JD8eEVf2nJI2wd|(e%oPO1`QWI=;3wQiSCSMKJlxg3 zbYwIVds`;vAs-DdM+8h(_hQd&^OKVJ%k4f4G%{g$bR0K<1@$|xwS}eTxI2DRbIJ() z7fDBqx~U?qaub;sF`pRWzXnkxdxw)oq>nA~i6|Oe%Zu$;fvsIe33c0|?9jd7)33A! z`K}oV|G}zNGqN(C{0^l9?PL+dAh9GMei36*z9#8@UrVYKyf-a4cC_n$lJG&z-Wq)d za7bVo#HIZo?w!8mlO;2gD34X^K$m|VbXU8vXAPFo2d|E*PWl4B(AsEF0IV<^IY9d( z*_tP2I#w*zJVB_xWd`lmmVwHJX1#VQDhKVCEk%g zt%W%j*0?2D*jmc+N_QmY58jy%`DW}4%FNs1Y+jyUyWT?dhz0~vH#&{YTk_YRZG-+g z2y4?d9(+wdkkBd(>{94#_w|@Iq*47Jq@4qDAPNFRV{>BLwr$(CZQHhO+qP}nwv+vL z*i&>@HQwvDig3*%%~*+$40M`OnRxH1{bk=1zPg1$4Q1RbTkg&x!gEmdiC3r3m;E*G zHLFOgl@a!#a$1or0-4j0QOs#kSa;?Yq`;a2lX#g7lKv5K89XYqV?BlRb6(ADH5k&| zJWVNu#bLCIpaxZiX}mM%63#>oV$tX@p~R>qiXEx7oLIc4QT`{ZzVGt+5Qr zjJqpwrgFaR$LtN1MZnN^^G;|YYzILToFS)gqL^xtXXdoeJwppN6|^DXkJb9YMh_hl zUqQWNn{d-~D5?mi zU@1&g7-y$!_k+ctv=f-kf4j7!uY-fHporWFOkn^lXXgCdoP0(G=hGMNh3tYA;LnNw z8Yy$IxEHkNoUzAzZ<3k^iXX(c!@?gBIi=|T=-FGnlhnC2qgg1(fg(VLeSkdTJhKejU(6T^%!zpK>(_T{VIxn4LC4HZSm~~|JS^T^@emT{ zDp5J$RKi_LXDpk{;h5sE2T}5mDSOe~VCvnL?5vjXT|zS(OtS{J%H`|`756`Nb;MHo zaIw?E$$zUUx@ln>)_C@N$3Z#EkXxA0sDjT9;-BBDr%7}$r1a5D@7tDWUpSS>*L_vR zqrJ+5%bHuAsqBH)yFQfJC|r;2(0Fz!si--9a;g-0kFzNZs>pov=`pbA@YYcZi=LDJ zr5H;fb{GuVFn%tjOcPyFf1~4VKI3Tk6wPmE_7UUS!ZIoWIJ7PZ2O0R9ex%lk80QP_ zdrxzA$E+fU(Bx}rLX#gu7RdG)KsHyG38;Nql~}TAY)USev;m1ET=@l})SULF;i|p_ za%{Gi40oA7i?-Zokiy{87-&?Up0)3vV^rh+@~lU5u(az9(}xTSL^k!6gBfgXzp#{k zoDGmW6Tz^_nH#Q|4L_*Q7*S15W~^8cxm`eDh;%S?sE4S`PetXFO}mi z>h~n-#aCA;XL_~%ou$)TI$pf{Ag?j8%+~#(9=7mbKhR~g$+!F{T@-|I8CW5x(s*>n zw1*vh#TP)49nfwDywGkRJ_DstzTX|wn*c`KuEzcFbWHul1&fAmETQgs7UK~A!Rb4A zE<@!jr(vaY4cYIRCdS#KGw;=gZC5f1EJ_}nQ^R)JCS!b0iAB~uwHTUS{faTObwL@l ze9ks#KViU~<_LGd`Jo_hy>qPg8E|V&*Zu*U5eVQc7nclT%M#vH#rY|1V1|VTXu?)h z&@8?=gFnD#MNYeywu}5x5A_h94Q`YGIWoPpIP`VMd|S}@jiej^>bOcTZML$A#!vAr zK>J3kbGj=1b1|Tyt_w(`&|cqM>j)U$c{(-Yr$%E$Ro>bm~9n!~bXAGD;5>&6aG%7zw zU&D3TZ6yKJ*!bIdUVtw5^TAD_4~G4BX0!OdoGY7)JI=uZ%i+}l)4NVqC7IeowFmfa zd^co*8O^)1VC%4u;HbI;rmSb3Es?@^Sgysf`QtEa3%LTvcr}N*V>(Gy;nnM-`88^_ z1R=UVPh+E5aC>A~looeYRPTbj8-zWLoc_W$$b?-#GNH;UP-$0;V_l(O!m#U%-zOSp z{U1ZaHk8ZiCIxw&%+2v^JFrzqkfZSlA=E`yq&>3O(I+H$R%j5Ot#8W#meFhSZQq^k zGxLv6(d%-50RvFbCmM9>J*^|Sp^J@jMvJ@@Pp4SodRt+NIrY$(YuEC@ww<&r83y9$ zD~PaxN4@g~B}sF9hbsPBDmAoedH@_Sh@^Gy^4XmT;zLz}b5F|44aeDE9==omE$V5= z0S6LD%P`X`bpG$Ki_N?>7T~6K|V-J9(oTM9JT(HwyNKtjH z%KH=Q+NRQn!*EhPvscxalre_IKK%>klE%(oLmp2`*(Su^exT4=`1FdDoi-}K1iIu( zV$tO-vA?kyH-7R=6MOwQweDz%Yr1%NbMX+6c~1>!!x-vcd? zV;joCLH{eGY(26e^>t!eWNtN(Y>75 zhz9)MI5So$a~^6LR<~j*!XK3|i+WHSk#b>R+c?z9ii%F+coWSvq3NGsYm}A1*|+%i z(V9hc#wx>n?e-*yf87>0D9*YdAeR3qoRP+NL_=~cwQC)72HZc8;?bYt%t9scjQ9fF z{dJ6h)bq86s&8&K8YEfR5&|YfgYpX_bBTGA?jkUQU6|;**u3xmY7}(>3VwfZET;H9 zdp0K#qLFf(>5RYNFj$vU?c8C8&J0v}gh@2pH!&vacgFBCb$2G^V=zuWWR$@)0^G9$a`uOA+^J6=2gV=8nRByE$hDi(<#H_{9$@c9XJ%4JGH^R zDIId}`c3`|X8C$LdI_~KsphGEEzAPdo3X{Ks;oV%&N$!4M+2LrU3lvj?{a3#OxBIp zOS!`5z=9i~VMrm8c2~VoO1smau9&4Uqbn-g$|#dK!ciL8WL$0?L>WupxqYnMI800# zM==z!!O}FUeuV{Yv0HQYRqbk*D&xtW9`1IvIa}KrlzD)I?|WX(-Evb+TC+_%P6?6b ze({$a%4I1_^Gnv)KsR@*!`F$KOm3F-9~F?2qu~xHR+C}s2@%5P8G{ISfwngkg&OLz zbyp@w>`$n*W;MED|C#n?=sRWdMJMdB@e*eSg%)Yc8Vf&riWxxPchid<0GWIOU@vH~ zW4n!jrLS5ebY-n2`8c=ho>u-do z;zw7S-Y5C~+;GoJhzO-4plvY(N$3qjyT9_e^c%7`+BPx>k`LR0NERwuq}HHgIUorj zA^Yc0hn*8I6i7(TGus>IP2;J}r?Ow{?|RYq)8_(LnVR3D^8260ZD`K^_#yynLrRe6 zXM5~{q-+FIIc-!Zz5^tfa_*Gi5*KGKGv29t6mv?_GjwxKdJ zvhPy}qA{hr(!FVMX?urP%PQV$fk958ZX|LfW6_V^fdd)sUTHRr^H=K+yo% zjSLumBVptY&koQx-7k0lTq>m%B6YkU&9(yVmE`S0Wr|tl(wKlZwW!xb0n5m0QCoBf zKHvxf6z!Q$*t22cJRkZBY{dS_20Xj_TMRHEnH~&GO34V?v1{e-@~e%9$&yKvD$-fU zv{$s2d&8;-cPt=7q7CDHhrp;~tc)s0v2G5$aU-tGhJaJW*)wZ0z1o9?^G&0eu^o!W zQIE-g!iZ!2zyD5Wv6GetZI-s`z|CtM&S9-W^OJS&^J*p|0i7@4hIPC!<{u=`5XwT3rrICazmHxeeI$yX=|0+rApIlyb(w(J zeFiMf$S9p?d3L&!wsQ5%AA`HNQ<R;Q)6m6`RSkIKFs{uM3iUsU9Wz|57*sHb zQsU8vM~{_y0aKXG4|(k@8u6nC&bI0~b~TN`Anj%~LE++CJlU*cg^?}{Kbd(JvTczK zy#%`CG~Wmxg3%0-3c<`n{Bug%WX^0G16UlG?)y0h;OrLa=e2QT(*d$%N})x;T0wS? z@Iye$>^!huLLjX?fd$&>k>5?kz`ei|zI5$OlIC*;Ypl0EeH3|cdw`le>R?DuK!)bD zhTcN?unnN&UY6kSm6?4)vT<==vKJ&agFK&Y6D*MN zhoB40=y0vDYUXm`X%MT`gI}xr(vU<7FM0t5Z2nH!h<8?94NjY#U@y1y!>`+t2zN(b zzsCUNs$fvmnLAg!Actwl#!46f+$CNbPwWB|V_F2V=3RQV6i#9?awj zC<@+Zg^1JsMz^U-nv>WvY>W%cN?l``=Z5nV8UxfH%2pl5Mif zlNa`< z7<Vy3@PXQDIYWdxp2l<3e8gz1Yio$R7&37Alijj zHL=gM!ASy_<}RzL>z=>$IJGSz<7sCNXR1h2?J4tO_6iRtpcmhOtW_d~kG1GtdnL{= zM@Ao`hHzh5m?}&C8~4PzewWcmeMdnzaVPZ1E*lN&*-_29F9fQ6!lsL?Zs9Rvk-P^{gtG5J5c3qd1P-!A)A`MC| z_^S&H64X#Uw#$)vS|4U!Qme>Q^V!1B& z&_!a>3C@wv6hZKJfKbowg{WAm+-ll?dHR@)kAWQ9_{a!5=~HNm#`Yg`_G8QfyVkuS zGhMUK3P(;=J^oWdb{B66#rB%)`^?qR33yf-sBbmG!v@0GV`D~I^xjdELDfynlqEZ! z#9_z9sv8{pzkntzt$VaN$Li`wan@I!QF)^ApGnC#SkL)e z%}#>_r~*P&T*JNh-CTA#!wq)|B!9w{-n#-rjrdJ?7*-zlRE@7>K|$5ToCB>Qpi69G zkQ^;1+1btIQr8jo0)nsT{kBTS5T)=F*~!Y14}EH<^RwFzT!GQsJ)W)Qyp*#}ZiHJI zC3)E5E;rwN+$P*1gHOGDmy56EaSoeZGNmu{T+$0hjqwx%&Ydf+TrQ?pwmwa3PImNx ze5uEoO-+`N@B`z%X?zZW<#pqEJ7X)3J6*xgGCb^`$s!3Qjr5o51F$B^0j;c_>x1RR zqvec2TDSRpxfjEJY`PR_m6cB-ZX^7~K6qR~!FO4gKh+OFi`h&HnIAj;8+h8%S#gBc zEVyt4UrkUPqXD6HvKCN2*8teZm{H0YNxhdWL!7c6(!%IvoRu_{D|Y}~HlJ^4$MXT7 zw?iNY9OybJhI*(vzTN#BjPX;(;FT#QDv-f81g@v6%fO=|R#=7xCY&i~k|?*0AsW2Z zrPmD`+3MN74WU-sm^#`Bmq7v^d1yKResoh;S!YgoK+SfKi4^}np4mhc=S=snixS?g zTG7W>I@1$*y~Tiz3H*g4&VX-y18&u)B$r=pq!OB*E{6RE|7ieVuXep64}%b?VbAVM zAl{RXasaaH$bTzACa!%VJeXZMi3pcJ{Oi_}Ud+fo>#c*ZFLy%wIFlO|&l<7e$LV=s z_R3{(VDHQT_NHq8=~*<}-0`ujK%8FSC@Uw?R63!4eJ`C=I^mYxqO+@=LW@5iaHT>I zLWVh@WSbH;C|H)qo5-rDOjs{q*T*5GTJ2F`?-b+FaLlv82>#}9W72x-j%>o!z`XlhGk0VXI=fQd6CpnputXuGgB-}&U=)CVVO7-PF3pP=(2w@`AsNq zoCHYA;!u8ZTh~(kHvTO5FJU1%8Inua4xBc59`w;NujMH*W|Wjzu&{`aJ~`1Ne4TM~ zD*?B==6l{S{YO;AmAYKZf^Vb*Az3ARrr?sGB0pCDSao4@;v(hP*S_8hroW9=Ui@7d z$SeFGRpckd=iFP!8UvvBkxP;(&^Ia(lqP!G488U@c0&8L9_`@s+-`ME{-zfoAAIh# zJoLmwrh(oEEf^>Um`CR!QR2M^_saA?E4fsbKuH~0-lre2&a-0F8f$l0({!#d@C&`CHo zNt54Kg?Q*kGu#5^QdM&e96+EHyy$f~U-Lk!#&{ck>py0WVLsw=&>SvS>QX;5!DL=v z3;*Hg==RM6^v^`G;L-D)zKi8RW#pQJb1nM}GUG3DTya+5#Zjg z079uj>}qm5A(^v3BUz#=#V6XTSY|T0w3Pdcy91_7-)rM}sD`1lPHj`NT$}Uwdqd(t8PuJV&`yXEq-oJcs>u zF!_DIzWJEi0<#0L_>okTNxvpB52s!w$U~Yp)(rke)PN-bxe2Em^mp(R4a9sOAMb4M zh#Q(YOloj@2?i^7V8SH_g!Y{^dj3$P5MX3pc2PbwG`u?rbPAN-6HKO(X|rLknS~m}cR3sqPaYT#)*$x z4n3j6K|+5sL^K@D$d9f&JC;Bx!M;27CyO)?Z7U!sMgAm>#G{Y7R!MunO~xhy?c^SRUr*i@vML|iX@pi663N_8 z)uD>P2mv2VERSkYz^!7=anp$?vPSoW$y~G8>v?6q93=+`I6Drf^QlASd-{PnuA<t0#d1rWd zlpCpI|27+U92q<|_661=!f5{6zIm|s@_zqy4HDsfRz_5_;6I;A=v00|aUIhstS{}a zt5xsdDA2ZEkGK67r6GyP=`S5L(%?(< z^$g`Ka4yNg0U*TsD@<%uZ1WT1NlB=CR*Oqs1TSke*K^yo%s2R0r9nKAwE89xQ^@r9 zQFsGC}D%hRCmwlFTAwJ?5u>pnSaU)q_z>=%)PQ(fO8M9%|yIeKFtmn$xcp8 z8U!ENrpP^NeZ~lwFnhH+p(F`pK}*nWyj7dm%z0Wo-F4b7dcHSD2|#wZ%gT8c5?Tdi z%Ln#q=x1Tom!9fR5SL60Vq56=EZ_7$AQ)%TW^lYw5G?62UIk*XIu)wGp2J1X#u~1< zIo7GBe`VsA2F&8T@ak>?^iy>eXoCb@KTT$tbbbYPF69Fvg#^S_lnI3QlF4Mf#=juy zl%pocHEVJAr5rtfFp}>?8A(sV4XgbX24ukwVxs=dn^EvVwpo8@dtykL z$LGE={I$yi2}HPKmfUN1I6oaz<0HRaU20?dR9Q1k!#;Jjo?iA5ZMfYtR zMMd(A-I_#nP<7I}!mnT_DxP{`OgwMSkmWChT18zxOQrzNmPWSJ%GA7TBT88tq`XDk z);_RcV3K!wV1p06Ge?P9KR)oMZt_9)r1ugdYkdR{%=4UB_{iVPzy*VodasHi%#gX6 zk%9CkX-fs`J`s=09&t|ndPD1rXfnh;?!jO|_98~#cPE^0$2+N8IwcY$Xbs3;v7WUe zgtxqHw!9CBm$+cX-8y*n^f-cUEz~Hq?!-~%m7PE=Jr1$@X8A6=&BS=mvL_@4Kf1dy z^?b^Z#U$e5yD5azCh0L4c!hg#whnBOf@6A5HHB%Za$`f2ZywymfSD#s@EZ0y^_et& zT`*5%5lg`z(bWq?{34zaKufy+7(oREcxq_WzA6Ggj~?LwoB~v!9xluwq)WJ=t<1g+ zv|xm5y|rRU1{hqZ_ywZ+2?&Uic2y!UU+W-{Y2H80S+r8;ax-)r9PG%@F2omQ9}YiY z0t+UeM}4{1(Hrrx%<&QXM`N6Jt+)2=Ymp$f9HI~EoQ1)@Q_iSz|0%^AFr#o$Ze3~{ z_&eE4Z{-$9K$$Hq#*GJK!Bw{N0UJI`t)V^gDw){ig@@5j4jqrFJD3SjZGXXTUmNQHz#(Q zF{eFft=20;zHNzSMe97c!#(AXrx{EXhh&yMm1oT!8^D_i3c`4l+BQ{!^`RQ4U&q?n zkCF`LWe)7B=5C~?XFiL1E8fj8sd}AdtfdL&`k+o<5;M19TU}zeR&fivzm=UI_MX!1 zQan&KbJ=wP(-(x^OufzotXan+w?39G47HbL(5+0{0rhH#mP3SO8=96oo(YDuXF7!r3=@;3i+KPNBRmOiP(%W zn7dh09!@w)XxBB1GEDlboHp<%64N>a@?RM{rA8&lBSON~P)XAJ^0ZaokBEEeN`PbwhDGmp^xht7$@r=)si?0NX2*e#EDk(2Yu#yccgQRu zvb_lTk9n`t2&g}R(0fjNF)ihxJP3#B&=jw8nC2?4e8^O51G&k zZG9=^WZH4=7=IlV>|YPJ%rMRR;{he!lky^TV`AW42H3|BOG~yeT_+VjfK4+#cipTc zrUN*rIi3d@Yf?Q~Iu`HL2$IVxI(KPiEH5#Cb~t@K!&Yd7CC-WLf3sdi!5k`#jo!1)))ntCh&g+fX*3t(jr!pGW54l|$Hpf0Mp+UXsY zcm1srZ0#HBK%*A{a}oXYaf5XPtqpShx~^NmMya5<9(~43`2VD6Eq({~0A);sIGS*Ze0k~tOa+d1WdaIX9JT(aN*V~}K@ zuUU3Lo9kVyQziuvJPD|L#-qR?1D=S&(53pu{z1T841n&6kvi_)4Q{AZ$l>}A4GPL3 zjtn9WGv-n>xY3}r^{6jE4E@bx@f2rD!OgHWcVso?@4akyNxd!J23`5Bd2gUq3T_*a zoXYA&TU$m|8Bg)pU2kR9Y^4;i{T2P{3 z1Nrj9#!i1ox#Nir zMefpp@s5O02~iU*I6s8Ovy*`&0UjK=)fLac{Uq~tX0-p8!3#UZ0!QG_!ZO5>g4?CASpr=FRTyl;b<4@ zv=&_O2(^V=nUAh;Vq$rcf-J$(c@&cIeGCQbAn)fcb3;h&#hA--Bi4L_lRj*}5xK5G zO~>J*sv#Off?McR%ASIa9P~JV-4lA83MV&5%jN!k z;+$H}Ipg^mNDMQeE8x#0?~fr&gp$~VyyTg{qfmQ2X(UV6QV;DuMpHxB2hL$me_U{G za8~)drek=)h4tV*=DbUOCiiL&pt}kE`GD{;WXqt5AL0U%zKAU8OZ{_2Z`Y5(y(@g$ zw#<%)y(P&ytK))6@q45d2g*&^*cM&%%LX*GNR8HuM(deMPho-$2D1x!A0~V=dQ&Y4 zICa%f$JLD8BN5I@L#`dw6HteSdGFi4iOmIua5n7uM35BlE$FIht*H%Is%p>c@+=Ic zRiNtu52Rk99W^{=;1P=rA)l7@`SH^Lga`T0pYEbmz|6lRVAsOhe zb$4sqygV9lM5|;LUs?r!b3Jo)7}?fsa577S#&CdeYFfUl!d$6!r?^=_0!!gRjyk;L z%eEQg?_ggfXxK;ym}Pj60+)wYS>(nuk2zr~?Eyb{G7dnKifjF~lIUC)&AXMcj)mZP zTNzh%l?+^{0Q#`OW#L#iC#=QCKf{T2cx*;%C0j+f#LclE6cFie@U+-xGbXR%4Sj%x z1`Z#cUOLcvdLy5^1S}V)@&R|6pz^%IMUq)afN?vo7mggshEmg|IGqoz2X*6*i9n>W z;|m`XKIoyboP+YEV8v%bO8k8Xu2{9Nc6D@f+I7m4gpuqo6y=&#rf$J!_uVMGG8Wa_ zIDBqJ1Ry63wBLEuppNw_&%655tUiO`6-DU>XWXL+Q}Xe z)xdu6ys@a$PiQ)vY^b{ErZhHSh69|IDwjj>;*j!0A1G_d%z}i;Bz`)CWLeo`k^poy z3${t^Ccq7%P_7qR^633;K;QW8H5dk@UNtDVu7Q}UmmC>Y>BT63tP#7KP(#G!F~*3G zszm#)sccwn*8#cFEj9{3ItYQ&k^OSHa0g-{AT(ydi#Nc~#P0Vh{wA6n zX8~QWo*}u@z!qj}Lm`2xLPeiR1c2xt{wN2eg#`8mTA0rw4SE`f^(Bk^tmYlG!C+-3 zi89BIKQ~_&`W?sTke*ftg2ip-z7WF8;kSvZSy`U-%B;bb<9fBpA%ewhUM+1vphY^Q z|LiDYFU5vFaEBsVmt*{jq-Gie26g||K%V$ZA=Um>{BhUqv0p!8t=~*>{y(-(;ERB{ zG>3H??A>xnpE+ss6~1Syy2Jt~R{yzMQmQ~pWdM5k)Sln<%oibUFaFNJY~tUO$xvx$ zBjT}I_*_TBgyeIDmoOBtD{J8-KHy;5^QeV-UEDi5bx%0I)QC@li_(>_*X~Y8&!s2n z+dY%vq-GO~`(*ll7FX=dD5E^xdsAa~Q&*BQnSKcKy6NxfIM?`A+DXGEmUf>dpy%1| zpTqh7Pq_FE_SUTtMoBl{A{3QjvY17-*9}-tseFQWd(`wh7 zg`TGY+@uGgTMR>-0h6?xKz&~C747p=sq~@*>%|@=m?+4knET6P)PAkp?qn*SWke41 zge4V3d#5!`>u?nCdVEq>wtbCG|H|tLKtF|8C38%HAo@D;fb$1?;54a$-Gr?nZ9{N| zYCvn#kKZ9r&=t3p^2Rrv-oy;U$9iH87J!p+j~CAy0i-0J&vuENmNIHGBEjO}_8>8g zDV}2>q#HnP0ohq$-vhFQ44bc-CMK7@(A&w>N|IB$_*b9f%9CS$mbPdVNh~iMe@2U< zL$cfnhm*924TOHzDgN4iGlqykh@nSykE^AeyV3>^2>Ndu!ZKE{JzvA7dFvbBAusFM zFIj?kix^PK50@iT5;qTN8+Fb_OxK5!XtwHd6XfquSQCXps$jKcSx+VjBEi!m6DzgV zN`^Kelsb!{->LN9+2XHWvAp=ruofg527#{&LzCaxhdYhSgwj{(Z%|J$`e~jYcxVG+ zqXJb87A-EjhXUejVnL-CWGzZSw+}DbpzZFQ(MA{DZ!hc3Az%v6GEN7egh}pu*j<%v zFn7txm8mJ$W*czz$phRXHa$a~gCEpq%xC8my&Z4^v4H(3Pw z4B9#&9kb0a3LM9ujFA2Ts=LNl!6YxKh}3(BSntOgT>NidJjuKqu_ur;N_)Yw_kEb+ ztEN`rpUe6EfdPsXq=l1nD+81i*HfACdv?{oN< zE~%A|w?;D4m}*YCG!m|Xa|CBM<#&Basxa$2`DrXgB++7K%Blqv-t_o^5srT<@fv$4 zI|ffKgn0z7Xvb0!I3lg%^5B&{_3j;#^)5XTAtK9pKU}T&3AgmTfDgRR#Y9PU3RJl= z3*xnZsh5m6krutM+YZIk{(y^y5(!2TszYvIrXxH-kfcT)kWyhV-8 zbWEQo*Jeiuc}`gs02U+~ihmW@%tHe6hZUry=(jtt>J%ZYqXgEYGzK#Yijy4D?bRgjg+T1aRQu|{LKC)FkYyk(J~^Ka3t&uQ&clp0!RpMpd29~e3jC9=a7cP4 zCUkuAPY>b3wu-J5$G&JiX2AyExK|UUKkDB@YolZ zLgXW*DcmK#kfjrUrfz2KL~BX>mtG(4O)^e+vCY+PUPl00K=z_F#C2!mJjo$Y^QhG* zksToQLS&un+nl#3!c1?^V-1?~hPZKiLYJ*Yt~sC)28^QcoP{mWJ#^6tfRmS(!IG9A(pDRotS-<1M{R%GDYSzb}aJ6eW8AD4U0-$jp~ZW>xr)S!2Q z^S$>8E?^FR=XqnYkA#y>+2dGwlBch@lY@ac?YuPBsS~^pHgS@Dl>J=Ij&W;JO>XspFsyL|uXT$ZDlyiMB~V{|7a12@ zP}`Je9e3HvY4L~*UpfEOTu?v6%pZe4qITL~n)bqu+Pkyw92CkJe+Kwiv)IS@{L=D! zI-jZPY!PF*5#M^utA0secH4~aj~0MFoAyH>hA?wzkomoAHL;!&Sz|z!RgK^nWi;X}Ve=NJ z6<%!^A|Q`<;@~|I8LhjsEDJ}pdovwgiPFCGU*@HJz8VORtI*B*Yr;dY}l!x#M zZP6*H8N&CC=^Pc^w$U;u$&({)Lp1xmL=E#@0UqQ>S)QRwnuIt|{wBKblrUkC7#-S1 z>fem^`xvH^D`b5#(dxBC^v0Wv=l>Z3*v643k%(=qy0k-U$i9wsC)SV{?hxAa40Xf; ztGAAmb$+eZ&j9EQ8zQhFnZx+-GtoqADXh=wc17n}#7(WQL5#kO2}N%K@OD9kAW~!G zG++O0mgDo&-HP}lyZ8KeB`r{=eB?4*E)i3p4!z5o!t!~T4ENu1wAwJQM6QR8+%?)# zbPm*uELu2Yv#N!ktwFpGFjq6C#*#7JO(f^+EpGwZqAprSu zoRBbsjUZuW9*Hgy2hp9e;VUq=e7Hc>UY;M4pKfj^=Cq!5o3846UyFt~iP7cfQfp;c zf0znZ_L21^M{A-s5?4y#85sDTxuPI#0)&%=GaTetVy=dZ?ogH@d`D1|iv;m}lf0Ot zPAa0hQ1O$(SWLFF*?*hCJf6kh8T3D~Lvnm3cEDke?!Ko(|HIT^sPOq7G>}(?098t! zJZ@6Nb84C9E$hBew*N}xjgqNxKHg&Ev2=a-h7dV%+*xzyx8mQ)=Z7|kurw7 z{lkwt5t}8cl-uox+-L5rKWm65=_4z6)*_CC<*jg>p1%JwgH&8a65px5x08YNoB(p< zMlsN-oJ-H_9s99ya~zPd<@?(5tSKb)bgF6a(a>Ml?lHfVOiFpSBrhwYDwzecZE=iV zvHi{Tg&bm_!hnik6PEKZrU*{-9R?OiNA2-=yaOyvs**$8-^HXfE1T=XK9a!Q5~!Z% z)z@sjJU8Vj4djHUhT71r83|R*SyDa^79>VoA$S#_f`~yo>2{~hxg3?XVa{6&_O#$Y zOZ~@F72FoJug7=;d%Z*Nqv8fi>$_?&vN@d`7THi#rxR~8y*jRk@n z$?1XI5G{av!{Gw@SHQh7eDlXA>v@}KXTg2YnY6ACvy*fejT#_y_1^Y znR|kwTM<$qpMz%jPh3xfes5s>;E>mUyvr;1ptR-)VFYB!7DF1}i{5-Pol_x{i`P(MCAYaboBmgge6T{j*kaA)f~<2Bq|nEEnRn$JHw15 z$8Z(Lqx6ZEhr>~cr_0U+|N#}U7 zb5~>4N1VTBw0?y$8<*M_ z;6xe0GT6-1DlT;L2}B--@&N=+xoVmhbA*P-aVOQDf9QshqvwV$cnk_r-Xd#RX z6-9!BeE+Q*{A`aMJy7C}ov0kOWZUohF%K2@*D zOF;T!u$_8{auDF=)1C*rw}>zoks&2Glm1wyQZjS8F!}n)DH4HfILFfBs*9q^cF!Z! zd62N<#d}^)1ow+4KaVyuJ1_kXoXs4Kn8ul}RWL?aWcmamXT2^BuRxS`Yjw>cxV^F{H8A{Ah>pAUen5@%&wLSW0Cc;TuaqB z+6Y9voe=@xc>w>{L41oTpvjz;Mk``E50jFoTz`V`Bg7NCC|3J>fq^ok$Ls4w{g590zAZtOW76ss(IG}p-i z3Xcfm8ZE#Rj`GkTT`9x+XYsAqa>hhP#sHewE%qRqyhpgkOso~|ZS{R>A}4HFZu>B# zDT?Wdz3|Y8BdUq$SYU3QvSTKeF3P!Z^_a*sHbZ(clU*?uKt(~g?WYu*p0HGEF}LnY z6Cz41^f&T%Y6e>2E7y?Lrd`|GrpBni6OWL`Eh!R0%+_sDGqJcXJVjweoV3YaJvHuz zQ^?;U7@Gjda@?0CYcQnhY5)1xrgXIYaC8ilUoU!x97zNA<0Pe4wE|)M!$-C>u^`Y5 z;C^OxcEHZUAa63l7WM0Z$&_V9fVzS06vy5LtrJ*-Vc3SPwLhrp>#ORJ(AN)#FfnWp zY6pI{0n**61>v=7S&^ix0n(9|Nxc1aIY8>t2EB7_wj>Ojvf7`6mcfyN4ojSS0mo`! zD%{arz3mOE&3Hn$;B9)wC7VXjl2(Z4$^)@=7Qp|B(gXH*%9X(ooi~7-MJf@YMzm4k z7$Zt>4K`97G%`h<_FKIWzTlfuSo`pgX}vazhLt3!*_!fBNE;(oa2FP7R9+uW6G(7e z$I=|4%&~%|ycy!8AcLZ%r@REABmRD4)7TtRVliQIV9SiJH_0+q+V%OR)2_BU9}#(R zf7A$NT@q^3&;65}-ak4XTY`86T+c%qu2b!wa@ypqS;BKrK8J_YE47Va-#nkA%8?4m zq42{nn2l|P0bF?4PPw_*$}z+V3cE52if(IzHW0?_arm5d48FScKfz!TV;8DI|o? zG)Sz)!8=aFIA}a7@S#_jhXJ=-bgnZa=(mzPR8BVy+lF#-lAI4Z7My=`&TQc6xw$Ut zdgi|hEqA|Omb63oHlSQBm}g+6bC6q>#8mGhDx+0q{Ap1=E#>OeM#no9!}u>%h%G=V%$@@9}OO)<)!xW@z7W@cf|xokj&ZDkKk!~l_^GDnFc*zwJZo%UB} z<$0lcOfMwFTn20)zJBeSS>-Z-WzEZ}6L1yrfeO5UtPU9)4k&cHdrRTX%HjZVksAf)jrugthb) z1>kD@Vj0dUQvqr+yj_P$%-_H*c&V55M-N-)EM7G!)-gX@etD@MQNDQ>ul00jn;~rN z0va*AhaxV89k+%m(zQ7{OLqnnEWU}0K6sJ++8WOi<1L@sdb z1}%MWLrKd{ffBHplfz{Ri3n5*fAd#K@El_%7Wwjvkn#RLDR_ZzB!ZJ>E`?Heu(qOY zA&jkDO3BN_bsF0(R6=8*WcQW4=6R8=*N` zwdRqOHpUY{qwnGNc*Ubk!eT4-?rXqB!A+g7)wrYlsBI-8_lr04%Mj>HyoFWDK-KG1 zoAB2Y>m0KG=phZf&(c-jl|w=kQk)FkH=NUPfs5rX*9YVB;>C8;RnL z4b`r3BEJxL(;a7?>);ZW6i#;-_fdp;4pq%GYmD{*9G5ds{YO>XwBmTs+Ki!H&8~G^ zCdm*8`zGA9PjtTmh`V_Mbp0A^~FWzwZhWQh3f@P`A9Ps?k%c{ zxKK6Txi}t7GkhkOdi#yeI{Aayg@2wu+X+ohg39%+xR7l-qb2MiePp;}Xn$1^J4V_V zn@0{>K@b}qe@5JjCSA4WZyb!^tHKM_}{{t&P)V~bzqCX0qCM*~tGY#gjM&cQPs~{KsNz>$km$Lw&8nYfFlhSA* z1G|@;cS`^TN66tBKTDm4ObqGow?)jmrlE@SgxkT}{jwFySv%-u(Ldi5Rk{&~9|oz` zpGg3p@4w(5&2ox=vekp)nc>(8-E-= zb{i628yo7+lS`HsQyn-`G`VTs&4>UTAXmq)hMG|#>D{Q#HNBNM1mg{tRfXZf2zFkR zH6^LvXM&5PE;3gN#?-a=PJnlLzu@HTZ@?(44H})a=ae3q1=J|3ZE(`ILdE+S7OA6+ zBFpL=eGp_pP9pKx_0Y50pX<#*ZViT`E5Jr^ADhK;YG(_uY)zQm*8hBsF5b$;`OY?Z z9Aww^yP+<3kM1zCl^d}otmrPOW%tIn7&`n+u+Cu`}3hmyx+->(@0Ewtv!Tk1UU*eX?QQ{FtI zYNt&gFu1Qugin95HynXVop;Q*xK>eHhcsjZm^Q&I@DKOYB6;S%uip6)`!Jijg zSrZj`rC+JDVvlG>P`R*GF#jZ5dypmZgqk&8nJ)Xhn|^7}+K1zoZRpm)(3M=Ll`TAO za%CZZ(yRfHJSK#KCBBd;TixAX#@5EV{?q9~Z)If^3V!hUNd>O_|3W6g{QI8 zhWKtrfrm+rFWa?;EK6M}L<%6ySLj5r##kYJeQ-q2cAblWITO#^euQN@(i{_)N$mlVO||d2*tlP5+U~L(@&bb6@K+A zVyiSP-)J^ZzgZ7YXP$FS^VgeZgZLeLNin#=io`o`22ov-J2D6$2y{Yk6(Y+kNXQye z{O@@*7ZSfQXk3t#bHtBQqRLG?8;>dw(u57{n=QfLWY6zLrFgCDKSS}(b9=)cVjmTT zGdCyJ>}vMy*a548AQon8=ouM-I)mG_nbJ|BBVdV3@Vhz;yY)nxbgpUZHD^2C6Gz2Z z;Ly!XJuE(1^8IHv()~_Bj~nh4Ao|LxQr-V0mc19XF+PluwT&$@$zGIFZ>fc>bG&M1 zpkeb{s)9nS2)__mbxHi~9EsK69MTZJ_-A{yjFBd%|5kh&T{e^6GGzqCH6#MfbS4m9 z{J=u7yPWv^QErk3#jjd!LmeWnyg&c{Yj(KPRsH?KNHO{%G9$_T$5Lzi8RU`>|A}`= zB_)~L);y;y@f=~Hg)Yepf!usl(ybzVC7q8&KkA#Y)+fFnEM%sE1QfOA2krRa(uP7E z+G^FGiVh+HlI2MojBu|u$pZiSODpaV^I&0Wj)exTH)hau(?4f-OwRk>h;c1T)j4Ks zYV}ak$*A1nPqJPQ{8&u#b8GIMubu@5WiyLd4XG)|F0aL6Ti$N7!qcwLa$MRqL<7|s zjD|(we&Lf}V2H8RrFZVcV5)M&U^~*k^}IvBj--iL4{M)Je4vETKV1~wC#w+wgTu^?;4}UyNe-iPyFetZrS!^|4@tkmhTa&? zp=ZVkk0^~tL>Pv+OEy5T?ao5_KzKJBV_MSvX%c;le54*9c9dpf97q=~4E(2Gsy(7^ z;e|*LNs=>Q*v!`g)bwL%FAQ9UYTw`YHe-h>z_mO^DhlorFTdxT;;@L>x@H0(qVU(j zBas7s_$Qc*iZWH4W+5p>@sb0WYZ&uQm1E3S(9`xtS{GRT120&GRS~{U<71`IfLreE zKjG2a0n{L&a_DE)spuAVWm1!7jo`MVjl6X}a2vb14>x0jGt`E$b7%j1@9cQf+8Ek* zR+;UG$Er&fHw2670Z3kX{&OI$F!Xcl<&I4iWU&r>j}X}Ggb0`hQeT$9ZVuVF_eB0N z24uNtTBH0l{gO`4Kuu;#TAV$2wt&A>l#~z(GCKYN=YX;~3K~jQ8jahB1u{L=HWXsR zR%LB&3H5$mMdHAtBfR-Aa)4CsdOH1rt|F$-p_>NR#hH2qI)lj-BZNy|=!+6Br)HWL zgV4=$%*|bW$1gDM7FK|YxFUlPtLKkY3H!}(5>XAS){3jyBx!oZ_F)Liu8?xS_n@SN z_YKL1pM(P)ug?{n$0yGEW5jj#`MX1O!nM&KR@oLvF0*&gJW_@@Nq0 z0y*r*@S<-;Nm8mI|1>RG?zQ< z>Q61aJ_%0wz!if9uQMm|^=d#fAI1jqDhzx%S48o>UDDvXyvi5QjxGjMfxv~l)z}}Ghz_bXxT0XeYY(Dvsk>F zaXwg`#63OT=V(}7Isrgef{hzIo;*hvF(IqAnS7_Bunh8u_`8R+Fl;~)MLk$wcS+hPpk{LV`~<*Uw&!)pl)Qz@zA;mcXOpIsS#gvD3*GbhMHJ; z^I>vOW~wZk^P2A@)9<7&GI%k)C&QF86+N)pDKT;K)q(XVfb>EPF2@(=Hif*+K&lU& zHZ6K(TJ+|0f9k})JFxAIa}5~8s75JQ-r%rX8gF$LsEfHU0`b%{D-jIy#xi32|Ja=p zS#<@!S+qwRC~9_RJNi1k!FM{BDR_Xh2?qsbGNUrGCXBy99qw|H);RhqXfzD>OYJU2`E|X+pC?YV@(roScHfR1unnk;X%ANoXzfkNUdWTY2f(w*-QxB&U z1TdnesUbkR96ta&ly>e;f>2$$JoxPV+n~Vnw3A4IQ~B3T@;;;*1HS5VUGf-I=Z2@&~EL8ko1^>Zm!lP z#)}=m>7pGAD}&L_@bO2)H=`@vl9ZFj41oHMpuQaylS>|S3f}nh41yDV4;eD2)4o6Kbl67X(l{-}IW{*bW;l9js z=4P6>^0mZg{%X@)4k_lr={?#i3Nf~eCyYBX+Y5xF4??gRxehzl;R+y@OQ#*>PS*@6 zbf(Z)R5=i(AVv?9Ofu9btos>FA1$oz?VHNzhCsNQXPX-#-3-M3kZ^q#a9Lyg@%qW~ zAT+d#j50biZDC6O@mEYXWqmrwaOrCol~*S=Q((W&Y@-|e%?W^WeEcTE z{PBx0c(|F>TJd?b=?h0K%0i^1mt@c}2tksx%d6Gkh)AjF*LC91-HGmv&M zr2xlY0)0cDzS7*|Z*GPA7BdtG#hUdBQYRxqj+%I0`Td~9zE&#V=eJ#+72ka?0{4&p z!OF4f?vrQ{MK_EXK!E1lXW5FX=zf`!ygKK34*Jp0WFY)3GiNjzWw72coHOdnJ1W&E zn{meFYMm>{bnfPk^15EoCkZH!ah)vB&Vq>ov)w*54GSqQ+x>UBOa7ky3uKVFTe}D$ z_JVifCel{j{{n>x@JqF^p)87ZR(Fy9g;JwpE5kt1oQ!HzyzL0ET(1+LM;`L%JO?1> zr@XElsTa5^3*lpb;s|A{nz;GhquZx+Fne+-3^NJNARIG(&tJ3`nQKDpT$DpMdFB~C zV_X#?{1|jpNXI*-uy`#V8jg0kQl!=3q#Y=Y1ss=EB#;FYyFq@98pKJ1Ph$ zPfUvIXvZ$oT86f8`x6^80<0&SS(U*=djl*8ys!bIM}7C9S;lA$JW3CyBone2C8_9RaqjWI0-M>HH2x#LsQ%k zL<1Om_Lc+)QG_Jq!F+wY-xfbqp@x#xTU$b@ACf%KJ+p4h%$*+fL%7-9frXwt*MZAl zlT@phUJ7~X2W_isI?oET$4wFL3m5aTdKBc|ub(}RuL_lmic`zmv-)v3@ouy9T|h}% zjR?!>^zj`(vu4vI&6~hQ$pnni~jz(Z0dL$^aw)N78{wN)@hbA)}mR2AEg2!VBz zCLS!Mpsf(>#Vy1)@c9wEzmx|CX235E#L2rbrobMqUzEsw<_u8lV@K2ubDCxi ztHB}Spd|B1hh&puJ7ke!JZ+)cf*DCwyo>j#0B=q>Hhk}U1IJYCA8bf2s}_g>Ccy~of?9-xpsNOLkN7<-tt$ETrcoTq-ks_MprIlt!A;Fca37>_IV z8U=jQQ-zj9`3viqsp+Ab)v%vWgy0jnujW|QKbQoV)@91TaF#9qrEcCLD|0(y*k7p& zWY>ZhHKt>cVV^@#?yT-7{0jmPu`Y9-L9PY+Ly6HSz!@s46aV)d@NqJshlqZ2karM- zF=h!fQDMTAuu9J_gNfFn{P>q!ndo?Dv>{P8tt5Ar2(%H zsY0ua)_dT_LO93@*LFDiS1aqPQ#_~#XNnlxv}F**!D7dq(6al%;*C4fYbFxy-@~?j zveladeUjQkG7$0bvM-r)zJPn6RrshUpC8UAlkNB3n{vmQy`YEZTFD3WlsYE2;o+M0TtF3WXV+|3<;o zvi+sjy*25aTz;^WCFpK6uOL&NHxEj!WxV4ti(n>5d?pfW3~}*Hm2vrI$x#)e3JsIT z&atQ?y@rWd6(5E!MfsfhFRr5M3^Y8I-PkjeE-rOaH70HFhK2d%)D=dx%J-<0zt-@Y zYPSlS#WVL>3A(cibW)(4I3$YRM8wOWZE$0lZ_LjXC2OZar?pAPg_Qvo#BrD2gXT{S zHF)*4&|@SO)-ekS&imoT40>BC%lqvo$*MI>*dR&XAn7LFv?8{k28{FF=dX*^P19TD z=E3bBg;nR429_39IniHmB44ru1C(H>qOf83LvMk}d=7#V63>=Owh9tr7!o`%)sZwj9pHfKNZLW}r5wSePtT4X=QPLR z@p>h_Dlw(>Qz7fkuj86tBLLTgT%B)&OpNr?2m|FUGl>LiroiuJ<%yZo4PiAFtkGbk z?)cxpq9FUT%Y?;9O6Q2QuRu_-CexUKb18v9*QS4T7b+BDqE!V<>R|rGh##~|QB!O} zgMMd4*6k$=MwaZ$*417S+-T0wFQMu{cxlo;yu~pdGp49^n3jO`FGm+*!(fvW)Jg@H zBJ`4rJD~8M*-Q5HM8Owx98g6`Mi{dRkQKhh#dJ(rUTt7D8Zr@ZSS=#Zm^iV7;n4(s zYD`i`pj%}NRYfZv`bVXyz)0}g8I(3MBz#jTHfD$_v0Sl42hE6KWGk9)8&<%;!e*rv zlv$eagAZ8l1sM>%x9fo zvbuuqaBhkI#DC+r<`Ztk^6$!T(lnlx7@I|Forq?u7bQ>K@4eu(XYm2#X7go)m1)4f zJEyB?qgo*hBzp;m6cPrImKZZKj5pC!{^8DZP0L|J3=qOJ<+AmcBLhmh>O|hBF@AfKR$k#@Y(*FK+-QiSu&7FvF1%H@s9>irRpZ_a zt#hs|L<10Fvd%~6|2O%rdwA$YHJCBpqlPtwjEmbw&HBsRA;!CJCRyo1qrK0yM|JjkXNvKGeyN9ffhdE&!pMaQ zSVgbu2j9y@JIMtfjmE4@d&mBwY7mC5rv&_p9Za%Xw4VLLLECgLvea8kBU_4<74qyo zCEB3hPM~gJ;AasVb?D;aN7Z?8Piy^A&4op zLf-CH?sA4gZX=SFvs*xMZ~YcC7}58Ej=fvk`uSqn0$L1S9dINQU>m0$S@q`;HyecB@;!9SZ1Y{(E0(teiU7S4q>Q1 zh)Gu75sJECP2_EQdV+4=aH$#m7hWV3RKA=W0E&uIqY`nz=e$Xs8SHYXVS3=kcD+0>~$z zb9*&L?@xS^ikc)683+vaw&9V$PTsq262yd!<4WB0-{FP%E>GK6Ki=J;M$|V$mNfQv zo`s+n@_Y3Y9gZgj@sB62?sNn11fyE|ozX{LZ~QBmt$*Wv0NeEyH(}9QASj+viFhez z9wm5==^BJlaB?!N94CEK82I%N^tXOnp~#aX_JMCTbi`{hLc&_y+miLK^xLdp;H$=t znvniDjBb?67GdQSX(| zykM~%IaVn~$t2D3Edmt_RqHpaDRc4X^^q&*C z)gOmGn{mhc7j2fLbEQtQ(sK%@(F`|fXR^x0;xr+jX1@jt1?NVP-X69{>HAqGW|vU_ zQ=r8p0rBnB%UH+;Y~AEWCf>j}t&9kPFEiqb)@zV{8%Lujjt#OutX2(6YZKdGMz!RP z{iYEfIuh@hccbe6+eCc9YR-4LKt=DYV6UiiQAvU-963!WyPoI>gB4>)-Mq@}@q_FZ zZve=~U1>KgKB0$t1xoN%wApcch1l24g5 zVj670Tn&pX##cJeL6U!F8~tHvUN4syp!EyK6i3l)sziA@0U&;0E;GasmUQ!fo&>9HZr058YF^sJELU+X|Zm~O6!fFz9rY}U_k zP5DYDO@MyC6m#zaxV-}HGehD{wU5~~Rw&?M1ayOwUN*?G6G2k;-amsZcIv@axkoN; z>`tT)Vr9M**rQOq*t9D~)tYcu8L1Wv92jUSL3kYg)a#7&-@v><1FmN118~npytW&p zB#P>78u7v;Owbw?2UKW#TiSin$zt~J%!oBYmM&@S2a8X|l!XlqO~^dwcok?UQ~y;E zPJ3FJ?6uXvNTXDmC=^wlOTTy5`&gz`p_?5^gc_*VZWsUwOkpr9nbb?d0KFm6nA)Mg z#D2(4Q-8cP+&6UgUrN`ZejT`$!DtB5rhtJ_|FJhc7!rFseG@RV<7|As3=EiPl}&7`kzJJ{V_t8oZJ=m zn^BFp&Sp+0q6K!%p5mY{Ucbb11UhF>d!ev3np`(vvFQ!`M$zV^7S%`Wx zPYxRt>AZ-!`89-n`I@$M1TtdU5CUvRk&z;92Rt-*{6yK?Aa%VPtHJ&(Yic+NW!%1H zitogGU4TGUg>wD<5$%?fINEjyW^^{a)u}cAU9?nu))AE2^`uDA_i8cgyTCt8jk_wb zq2ST$r-xsu3wMq9P9DqYD%@N&GmHa-%mH>1&(06HIU6nkd}yRQ!!@nYkp048mRx6A z@1veV7vPS_k2az&Y8hc?4AU+#TfG;U8PdV0lGn@>SoB&1ERB?lbGP%tMUSD zU_LBted9y+A5wG`lJcYc;@8BpfhPv+Pa!}+~ zaOdB6p0z^2@VrvqmmTPl{7g#9;67}kVMe?Mh5NyzAXY4dp9HGZL`y5^Ko!-+tIk&O z#ufb#XE1Ud+hZ%`TE6jDNi*i>@dj{86fy9K<5zn`mftVCY5Nk2<8#yNcn?D5d@BVe zBDmqba&(!_)aKgs(h0t9;ZrUvxl=Cm4;aRwG%Nzlo5jLLEJFF#1303n6kJdDuNWwc zpb&t+u2nx-HE~#d31-c3>!OfY7|k@{mu;Qt>U_>egxzp! zEYx!X#kfkl-B}(^^E}@Y#si?mwgeT*xrC$R@EAF7AvFMOn7zEx!an{elF`{l^^3zJ z)=Z>T#?e}iD^M8cY&Pe=pzgGU{49<>M9=PA9pLyNWdqqoz>b&>)RNJ|v)=@oRm{#z ztP8QG4kYEu>@}>QrTE)23m5>GY3rqOc~qdhCdvU=cB5MIN2U&);8)Be-7gN8R=IKM zf>ykU0=T?x=$anc=H@vWpNv1qWCdsgRym?F8CBvaoCGU%ljy@(p{C`|0}Eq9mIP~M zE#V!!<6}-$M@#ol1Vy5@8OH~zjpPc`Bu~Tb!N^v1^P^zX00(xzN1Ec~DuN^!8oNyU z@rk2#;v)6MXqh9bv2tWT2ENMbU#AIr9I9B-9VhCXE|e3`?38@sj=B zLM@Ubzf7#Lu4AvFkp_3@=^ff3fZ6w&=j+c3m<-_K>%0k7AJsqi1ZF&Mu= z>3}c2=x>p{uWX?M!IX^P2!mON4;N4WfS0S%;$89qvPHaRWM;fWv-J=luUP&<@$w2l zE)U;JU#Q-{gEXn?zXOxdvG4;H2*;Hhpe~mXx;@F{L+PgTIJB*jzDG7@zvV)Ay8yJ8 zLV|;EYZG5ZgjIl54xOIX$MM|GNUL^kB`SgBsZ$dq>t*1u0tBZA#E*o#+uD*;e~qNo zT&9%bx^$C5)FH$iUpwY}k!E5phtBF!t~W&T1u1fS2)j@BY95Ag2NLS-SP)50WJ?{& zIJV;ub%GpOIA8>~@{D6pWBz)y$p2$rO&jJQ;yOzkmYqUJhP~};(VKn{3}Jf|ClM+& za6%5n&t&HR7kxs@HXa(_-cXuf+%+P0iUut9Q{Oh#2%6sabKt8O;X1UX_b)aQht2U*&OB0Ws=}S4R`G4un6Yv4#hf`kIDv0lVZ3YZKHlg! zMWvAqk*hd$$5_31(pbE` zY^(zx6v5N}`fZIscXo&sW;s(9pfjLvatrJgoIKiAn{1Q)3<>oL#G|fDPvh|^5z^c0 zX*B43ARbC*QOx-sJIEwEDIT;7Y#tLm7Z){ccaW7v02w0r=4~_%nCBvz-So>;HHT4( z@yjR176XC6GB6uulTA&7MmcdOe;|Or%`mjr2rOYL--fhLdK03w_v{Cp?V%awB*e%QKcMOkablI9LIZ;^Pbv=;RR=?WfL|0W;NbEh^yeAZO?@@x8xsq-J7? z8s@zSSb~K*ZFvIe)<3sA+)>dPVv&k=JY+I`t)hi?%{HVWDY6Bf+v8xCqT7DRlw`;2 z(!Af1tniJ05JjL@>rHbi(Zg9ECqf;?!lis@abL@Oc?HH$AIq>#)7IGz?J4WRgGNVN z{^dq|M3=ShR!L`ZAaO%F7F+MdNCNFI`jb#O_A&AblV{1I$`rwucc)^0tS9b(Zc^-u zvREeO=Hc-E$+NI{VPn3KUv1!0cdyS;&h8km?35pFfXeOAWGFO|#+QTR;%$=>DeD%) zLR#RuU}_nXcgNA0b!$fBO`<_bUAL-q(@F3jP%VZ9keJVOdFu|;7M~Tt*v$)uGZ4eh zlpx5O#K*;jVueP#thR-nRzzXM)_fg_@Rv3U8N+>{)ku{w z^~T7nN!MnXk$oVF9Njla5M>!OXfMbRRDLc3l)k7ujFrOLMPZjQTwqi^XaNCrz&|t+ zTUo^?aUFjrfs}msxDeYKTIQ&-eP=~8&fTiaFYHi5Dgn0S^(m5gFD@Ovf5k!%K^FwUZ~$jD0|C(2oSvi&aO zNC>6sBhntPzvnJXKDq5Zszm0BFvWA#6~Jm{dNBu=ml`9^h{#w;Tn*;ILGg2AkYVM0 zJGGUSnd{!VjfFN`o~5!!yNp8U^xU%;17>3Z($m(@fTi2k zy^w4lu*LJY+fv-30^!u&j^^-f>zQ|3co%uMhI3KO!zPZT7i5UpUNkZ9)(7OYkm*Ab6C*uma0-zH!Ogj7aqxJ?!5h~qL!i6ubT&>fDr}Y!| z!IITxmo(4%d+a;QBR(_DvjihRms`pswgFit@9F>2BGkOhC9HSpZ#}e*O8I=S1@}U+s zvM?(S<-Z{f2TS4Yzv0l&_$w4aJ}MlYjpOWhQkml|U7VgI0JX`e zJn#dC2S?KkQu+<{8>}5s^Ufu?IM3N|4&#KH1If>kC?X7*#=?GV3Bo z(D#wEaPgiAN%ScAnaXK;G5u|qq%0nLU;|amS2{?l;#D^s0Q|(Iyd~s@aRz{Hhbnpb$?Y6N02W)_YHX3MtIj`mbTMh60|PKx?lDr2n6Qt5|cuipK3O z62pE?@=j2mzZVf$Dn68#l3f8VkOF7On^94y$T`}jyLKLxl-itT`RN$cxMq#@YD=Uh z)E9IRGWsWA-kqstj>lxVQ%Zxt76mXPVE;IsW&D@O#aLWkwF=+Gi-WS6P?$KvFU9U9<8`P;a@ojA^woqsOEyuLu_|)H@ z;gI&Q7Q{8Z6HJW>xfq_yxD|>K5v)Nd2Jjf8nDz8l^NBBD;J*xd7chQf<9at`6JbYp z2{bB$1<+pmvJFoz1d%)aUSG=iaP7wZPmIi|Ewu|>WaJ+m0LhE>mX!r^5l+1D$Wnx$ znB&r*O8wqRPY^o(TY+C*h$BBl<(I2EL+F{0FZTrI)Z|pL0KNZn;pJ*xv(PPaWRXaq zvRB9+c8FVMJU%iws6Cex-D^Ak+H)Qni#)7+F;wQPmqfF17gD(jV7|EM->{xQF0>CZ zLOIuGYB(s&F+`1xR3#+EU6?}g&!;lJ#FL@*U`^r1anQ)s>w^m`{jsNjI=bjH>|2)8 zI-9dUba`QohO_!&wEg^P(a*1@;GEZ)wA1)ME#&bW+*PvS!^Ui$`vi2PX>T2t=0|(8 zNaf5r>r_bv)PzEHj7PV z!xgU?DVkw}lo0Gdrk>Bt3vOF&$XY=3Y{MAYlK7l)ImtKZ)2?KTA;8iId$8S*m(IG& z8*h%AkznoCgi7oA!HSUwkl63q)eWjaN%+NL{bvf~FS4^Oe-)xz;g_7sD2|W(qPYsao zY_J3To@08xv}UtZ;2$1(qlDh6B|q6**Lbb*p7XWAVo*tswbwQ@R{yE_bZ_TTujncN z829Xd=@k>xG*Sv2FDbF&sJ6i%cQU9t^{2=z3A!SqY?V!HbSO&J1CNr^&}M=c{!xG| zgFM?bo6)r6qHSEv++fU15DG5VT_pV>3u56NtEVH;lQ;{mld>G=Ua^B$xA%)isX`RS zqgq7Q727-#hSnBAtEZ7@VT@U%=A_7S&2QKG<#!N~A*^epPjKfTYWv)Q9W;HuIp}$V z6f%iu+s&FMF&p?B;)nQ(mhl9Khr9thnti}4+2Rz6O zrdeWQhq2DRa~tVSuM+Ti4J!v7Zqy4q&xcP8*k*XVo1`{stfKne@eHviz>ocsbC9 zS0h)og0%BM%c2DYG6;43p$4rdcj4_@d*9KKWBPBX@s%cM+^(fPZ%= ztyyQa4*yigWtc)nMQ?%H^%Le@A&@j~BwCLd~Ya6V~0fWcYRM)IIDiJAm31+!Ux|5k%YxsfH`I)EQ$tJ4) z`ogHOa|ERYB|BBGX%r(fq}JCKeIognJ*_qBwK0cnXxQ$h@6_;cEaioY?jR+;9qnw5GIIB}Tv@yi;{nMoG zZ=k}g;cY=iavnk}PBZZqIQ1j|FOrUtP9ash?`3&$Nf zSQ{el6}cqa7o$7y{hGx8xEEQ*-iJ`o)8u1C%ffjHS($h%jy;o=5c~$GZ=T6fa}D#goZ9>4(g5JHnV3~?lkZL zw(rr;K@-01GbcP;0w$V(Ua^SZP?M&C>E@380);nXHjhU`+zLHmN}41DqjT=IVZX2SC&Z~?=pO+B=EmHUih&+qIOHy;)NO6$=!1*!#xY`WiLUuM zf7?1ok3+faoiW2!I4Fj*I;I;oYOpUC;}dKET7BI3St(Md`*p@Aye*zA!iTbYBEhm~ zqH%Q}_6FjdcLZ^{Ya1QQtqKx2sI1kps;<1?dMOj1`&;Ku!KKGydhvtB0IK#`Hy13H z>p738$%fRS>mFWg0pEJVwhBoHilW;`p`vAxQSR0tY$O#2fzz?kXi&Lefpm-k=doh{ zfb;sX^#dL(%k$l_fA89-k^HDRwd!HD`SS<2-Gij}ef|;RP{lxRKL+v#&8M7)b}2PB z-muz1SLKC2__aN(*z;b}sZIi)fnsk4;%{W7^v=S$vP$DE`d^k^6&?UBr^B0}unrr; z6NOu5H$XQ=#st5%vM)Kt%?NHy!$p?YAMg+1@m9EJHvR#D`%S>mA&^s|?cl4%28#db zlzM`wn!DMsJ1r3X1?=VIAnH!092#Hie(k+{GR8c#rY|88sXEW&ceR@bG&<_lYmC4z z;9xnr<=6Nd6p+KxZSj~J5P;csa>D!4uQ>|F5sXsJQIJ$*fYTpEK#J<`Xihrpm|kMhcKL`QK{*TU>F zw@yl*>^ALd%CWsWlx&iCMe^Y_Mb-wa;`i#Pgo|I@nIzL}li*iQ&<=h*1rnWIFywXs z-AkhIXCJvIr8MeB?40mQn&-!xi)EolQ?Yd~uQhLZ(rY!uQ9zJ+m8@N5I>V#gX(ppe zQHU-)P+dXYQ#Usgq2G8$bSf@hloy6;nKDPAx%C`)xWO?ntCQl77{%q6PQa1eQoi z>OeC}9lkHUOtkdzMO%J#%u05HuV43%)?>Ju&!!X?F38u^Qba-Rci>CDQBEvfKAdQL{CS?P8}H4h%N`P(epd zUo-*8*Loe{0APEeM91&m z*v9}`z!XRenI6@4>67l-{b*wiVMftGVrhulJ&D8T1hPhHI%;M5%!?5e&Be4Ol(n%~ zHvd9E8*r1)gh$G2<>O$D=8qL$-X|G9)%ecOxk?Rl3ZxMOvE7Oa?oQD>r*EBcNm59M zRQ>Qi5~vnq)=4;2`RBAP!*f)4o(&1oE-nWJpPea_iunqnY7F)~)5WrzCv_CMGMWc- zN_WcwGJd@+#OTCJ?PLw@%G3rL55lt|9Tx`_0=U;`GSLLeCe$X;^d$#yHy5dk;>s_9x?$t(}mDNjsLkJ{<|NT!T{ygMy5b_~| zMwOO!L2^E>ED*Vff?fYzmhnA46fH;Cc%XKp$pA5j0wyuqz;B|1P~_k0x}wcXTV5D) zyk>unOVC1Of-GxTOKee8pTX7cep^W_7+|5_sd~*$mD#O?ILGX$1EfKavzy|5v47|w zu&c#nOKHdM#2JLa7(L~aM;z~SMx5r7U1%2CT9_la%y@WvC&5x#r{`{ETRHWm zjgsJf-vCcVq)c@&!U@6CqI&dk$xh6iUFQeI!$k%I$vuj`w`1H(v|VPL;5VYiL1>{3 z)=&}~-w5tyn{VHV@PBzob2vQ#=s#u}Gn~l$LSN}!e*tH8<>+R32SXU!{Q1s-_sMkO z5}Vo`6F4e$1B##JBA9te3N= zB0fO2s9pfXCIp3&mQJRXGG1_2q^4QCsv^8XSzkzFlk8_ZBe@@4F$xwMlLBhLAK2HVskN+ST9|H_r1-I&420AZkYyc?DFoRi3@ zU=?4I;F&&c0MA-CB4d_H*DbpBYPD)ai^cJ@x!{8)DNv*T>Ke36!{Wh*m76~x7mExv z(dq}1Rc!>8fBO}pW-D~RQT|>sPzaO&MqZv*Pn;z$+IA|rhg>u7>u=!XorunZU}OgD z0BLh4;lDKlD!vdwG{rUA(XAlO0=Tzmb#=(*_W*g9Rdw*vtPfAQ=s0!b{R6M_q5k|G zh;`VZ5nk`|;=wMkrnAMS1;)E8JsB+vnltYHUou9B44x#XwkOJG!|@ys1>}9a56PQa z$eS_{q2Z#$bEBz~1Fg3*LbfTbeHO5OSM{=rx0C_%1Qv@lDd?}1stZCxWkKE8`*)h- zWVxjdwc2jS)6hJg!qj9L(N=us+JG<2|K-1^2Xi}&aFMFPyJhPRzbGu`QK7d@qi=yT zwQQ&Zl%ibVIZ-anr6xgVf=n)Wm&t;(oiI|0i z4aInIwt?QWHHtOs4SboG(!o{8Izn^{#oC7rSg%ZTX;`1QvMBo~PKP$RqnSGQ^Cggx zEW5YWse~A5pBZ!mcYY-!zJB8GI0pyeLiEytkk3{>pU((~VF}@BpK-DIgTZ8jp3JWy zYBrTRAnYF$iw137>}u%*PnnAME$*;I5+~@&oU>0qMSMmUA8*%Bg-vry4Ol1enHJ z8{%B&GUz=LGE(Y#OEKGqu4RmTFbM5vMygyE=LR|K)3l34aIuEDo599DE=}zO1Fl9$ z^Ti^UpKPF&c99Akt4tSje{72`ZJiF3m138CpH#uP7}JF~ahC)#MI!z{q^L`SjYe*H zy1%mJAJ`W0ac$dVBNbC_wzXM&jJuMdK_(l<5)1vO@caTu@i88-h*XIO{X&?uQkiXy z*Kq+-tOwb0wT_5N8BI*2qTptJ0lL{gw$l8ri1^6H?|2a!h)UXPZ?~5tY_v-;e;64k z?OkT|OaL@Zb~prA>Zu7w2zVD#q`MvxaS?GvM+R}W$>*_td#wj`4|71g&)U&@t;fdL zj2Ad^rm_Ly3%~LdoUdooRyB1XW~DKBOArd?*?GHJ%2+$6X{C}=#7oKcm{#agdQnx^ zt*)g#WQBwqSSr;F?HY0uuYiRAw7DN$y73b+Oe8Ul`Srf6T`DTPbwlVQGc4V)lvPTr zqZfX8w9fmBlA#%Dh~!1`I_OHLwQ@$)d5LG~`5C+>_n=O{`{+_J(AhwJaJL=x*3aPP z_G8(EFk`QNW>wsr&Fyd1L@q1&w{sLLmQJ=gF8jayarSPHKz+N3N*3HrW6TA;^FFdG zq;$LNjY6{9fD)F4EI_;V17T8ES~Y?7EBbV1lmMufFIGDuplxlTOim@L( z-}rSf>YgQ-W|gY&gre9#eTGn?{IecuohDy*1T}%qtY}Ll+E->Z>J6%$Kz{2Hx1+Wmphk}Ef?O47wn>INpDdFDdXo* ztu}HoX=?TF=Yyg-<;2gl;TY#PCw1;auV^fj_oBT3J#daj0#)^4urH67+~utm$S6vX zp~<9H3`dPquhZ>}JsDrTnicbo5FlS9H!65>KO!Co7y9+U$Pg?0uqQ_aWkBk~0wJfr z!;0TzMOl`uolr9%5SSB+(eXcIiD~d!{MV7a?lsu2>iTL4jR%~ugmLC(Iyfzhg{27 zU$%_-hfYD=3|=9oVB0_xh^A#|!Dp&ct412{lMrOiPCvD;mB1QR1a>a4YiiB7CJRnW z)K!Wmarv34`2Z@K^y z%e<4mtpnO*JHnvEYUtn!pn6~C0TlcmlnY06HT0c%*4SDQ*kuo?xX(<1y??6XfX*8V z(g>BUkuoO+D5*kgw8ZsFv}&mAga(25$qUL0WRXQwU`t&5&F{4m-JWg-iToD%lGoHw z3!UO^5d)hX&|jpaWf#abQUis2wzRaesp2051_J2t4bj2aSb)6zt7M(K4=Qo8xkHHr z?>##d+3t}4b>~c?I;(|1ki2`!)L&rxUB}{Nr8J9Rg*6aL$^SvBC|sU$P>L-T>&Hy| zpcUy|4{eVHtMBQNo1W3BN2}XR6?Ote*ZzzR-u^7ES3?!=r1cr!Fa}Z&HiF}PpLHcy zSigwL1>3f4)L3jC))y&y%OL%cVCUQ z|8{+Pz7^Z&>%FG}1E1JbfS_k&Ga13D4!>5ueuH9XL?p<#LD(RRj=eHZrMTNj1$q)T z0ASApBrb9ohl31jOQhgeJ_sqtQcI)GQM}$Gr#@mUhC4=TnGvk5g@bsEO0I8jL3!C>)^H* z)&U+o&Z8r&GjmpsVL>o!+kO>~{m`Aba(J}@NB1Y;UwvgyYw|8YJu!g5hg0lYNZxKO>fb|6{Z5Wh1;rS$v@1n(Fe|R+G{v?L9JNA5GmO7 z7beZmf=?1~7isT}UN6kd48yokC2)dTSB@I$YK41Ql&i7tFM_*{<0S07C|L+iOOLwj z0t8)))wBS*)O^5tej+K=|BYR5IKMFrP1IpcZ(b8C+=k@u5R~WZVhL!qhyd|J(;KFS zhT`IOV5e$vh`EmuJw|~4YR9|7^(M;{HsJf+j;qw}EziK4SL?_@t~<#UOaRQXqwG3e zuKPx@njR0&H4Jc$Swq>RHlZhgW7=tX5^~(&G;qyJKFnjo@yh3&{i)FYM z4}emCEdv@wl)ri9${ht$;-XaUxTfopR!G#XoQqt(>4u38q`iblv<)w$7H!dpK~14h z0LYH2dit0LVY0GLs&nwFBR+O;kib(PzwAAl)r8{Ne!H1Kb7y3qJni=M#a4aO{S0+2T|ge#CggeWXl+QyA4+R zt7c1vGL9Vp2?JT>Qg6~4l!R47_TwH{S)W!gH#=>m+lfanrt+V+$+dD7xcre0nvZOK z%SQCI?6*0=CH6?T8Dbm(=(@TiFRUopVx{MZ1>z<$hqU2Q@LG4R9PS49dH?!Dt|{8! z=`Ljwq(Q;ZOJ5mpe-a+}G%p8FtHvo3fkZHO6nuMDhNI;18nuEDP%$rx0`e==jHqrO zprpwdSbingl|J?sn^Ck7`i|Yd5UCB|bBXP#|TekB^)+Uu5vFgW z^KVffR+Ia&9{Y4FQdfjWkPK|by|`-xA=A%St$@s;glH`{wyB0S{3m?P==81ax?wc% zLULgmB~~5uzE#Ny(try`u&oBt$^zf+Psd)7%h&Kkx)Bj|Gf>ht%TwQ8b#ay(RcJF3 zw%k;tC7{Txn$~7T^nT~YM(Jym;FYP-MwxNg1Rmw~Na$q~F&=6FGcV=?DBB2PmQJB)=`P2G=Z%;|e^v7mzhuDgj%r_26=h!$UcvZx>hU zXJL5Ufk;_>iTUNhAh^%i`d(|^7*N%dkQcJfR;&v$eXTix4*V?OB2l%fo!ItaMtl(o z`ee)D0WCJ&O`JYXn=opzN$RV&pO^Z@#^Mlt(y_F9-mfFX!ePBw(}tJ$6lUvLbZ>ua zfn7>_4mJr-q%q`7kqN^xpeKyj!fBU}CRbEhMij@)(2&tg&AB9b75PsGU*d0Tu5kR=vY%p`m ze0=LLx3keH-TENYvp4=*i-m(+9VNDt(M-Qm*-{hJAIcn2!26J-S7F9BhPjD2rjU8z zz}|-{X{zM_owN6i?F|97pwCpufE#-#>iD2`xV~l%&2}^~_192IIgPMo4n3yEpGQ-v z?g<(~=b7}8n683m*r!|&xmc?-JKH+qXDL{`!0OCLM6QYTYV~`3W}K1N-1T6w7wnq6 zt;*e>duiq;RVdj632G8A+?uLc#wppoVIWmUVw8&9-% z8q^S$-b<+DWu2fLY6|k$VDLicoPYBDJ1S+Lb3Hp;w!OBWu7B*d++FKhZnp0fCtsOT zT|{Y)UFqH+cH#*}Eo>VW*C~N99AYx6!B`3L2|2K1uk;%Ejz*03&87RFLM#?>lRI@o zBWN$zoF89Ww8|-#+eNagBNkVgnb$uF+XuxmYy+=S_AX9bjsXRD%HxDhTjGuT&q>IV`UBg$X+h|xLoOtam2chjQTpVKT151J zrzL4gi4EycD(B{qV;?KyNM^k$|8mOE_3{g}=l52P(0L9|!X zbeFldTecPSy~u|x@$SOoi8|WzadbSJyOrLQ#S++CA`f6|rFAP^e2`Q%4z`W(#XPAQ zGlTlpJU(>EgBJKfT&;b65Hy_G=fQ9X3BIN|O56_9x6p<)aMU(n`YR^`+IEZ-qzDh{ z2TBW5-N8jEO`d7B>m4JQSlr6s0Dq^){7K&qT0W=0dj*rxOnL&%ev2;}0TjlwG)EC= zd}n939iZn=KPP@(zS)WI2$%>i%O%nWL7vrpqWAI1xejSEA%8J%X+TMmRXhCiZfap`B7kXR_4gD(6}hNA8}@o z3c~`qprv2PGG5) z_{MD~|3)^^x?m{v=kS}7OSF6;$dWCB!Ktoe&h?`GrBsozucFYV9e|ZgM=nT9!V$L6 za+$$V^Qd5Djz%3JWY2qPfOYGU#QTWu(4FiuE^L**(pg(h`Q6-PXxwvUcJ90(BVPT) z2AW>)__U{0_<(ZV7^(Y+#;%KC!m7JM4?r^y@Ux@j=JIAKx-C6*lTetH8uzx$Bc#qB z12d2N<_Ad7jhg^WmD^n9&tp;O#zD^)kIVyHl6wOxJn->+Legf;8Jxr97;JmGBt3#p z3m=dZknb`s9F+L+U_)pw2`DU5|GEw@lWZm9(#|JW`bv6r)0RI_!Gz?)6bjxWnY}pcBuX|SbQk5Ijqx3uiqqJFk4_hn z6W-?l#+NSLb-|%fm~h24P_8ndL6DYf2%>g7Q~k^S=)%_bapn=evHcECHRNgv-^2MlRK>{K}DuHk^kooE+CzkMorK(9Xz`~<)(h7sSMF7UFm zx1pd9UJCJm>^6xbrmQfU4fFy9zdZO&iZLu`#DPY1CY%l!R#%uV2}c-4(0RV#0ljz% zNFJ}b9i?*QS<`K{y07CQIL>03F>@ET<<7;spZ#ytFpJ=~5XLr{##?UBV&a_g&qMRU z6uD?MPA*dAvyu_;WT zz}V!(nQl8d66=S$zLSScm-DZi-xw?flyn0*aR8B%qQk|N3wq;EBX??R$zir3n!*BM z&mI)k@v6g9FS0wHP?eEa6V)OFbXh52?R!%qI0zf?iE`jIZhg)FZrE*%#FQWUoDb`Q zAG^qXxh@;#x8R;JPS-Rp{!&`Dn)f>p!&0M<>;9`+Z2y-9bIJAZkG{VMMv$lG90=A) zqWr`(w;WkBF8&$Om zrb^QivWYI$Q2_PoZ>bauyAlm_?;%cpXSrY?@FK+>bN4N0zIQuc_@@{0eFWSs*;!u2)Hx)LP3Guz zq}sazS)5tX11--726R4`_}N%N4Fo<8qt3%b~7+p`B1A`ukZUC zaegYlEAKyeGC9Y-`SuM&qMzaw((iG5b&`D<6!QKx6caHLWMIA8kRT+KcYm+ zhiRDJ>LwJ%Jcddx?&dami;H3)lm$rM;g)mQIxsNNs>L`++>2ahP>)<6;XppUYb1?m z=hmwM3Ns_SK&oh0lc77-a5$q1wA1GJ z<4+uL4`PnL45ibhp}Y3ruE5Xby?9E!P>jGv+=x(-Q^jeTmdE@nbNNtvokb77s0lG39iWzFG6&4f+4sxgR@@|=# zG(Vy}%L_-eWMA)D#ki7UsV1cl3Uq0}suT>Rz`ds9sX-0&u1K5)A=Q^VC44?Gy%x{G z?fpj@OM}cVt2#I3#$t2-koCo0*iI&J7}RFK*+zN^x`#)xAPl87M%3d`eqI>d*y1sO z;Ip&Y>3N}8<6 znS4#!X~!<8-)zGf-7Q|~Z9b{|7a_tU5qFb2Sfc2nqX_zmU@yKB5e|>-)d@&m33}S2 zNGOF%X-r|` zq!UaOIuwppugNmR#hT)ocTv1=g>)y9dEo_L^&4yj`%-Qep7G=*LfWn-%UrLDa`bQ_ zf0VM(7$IG`ZyhKW>LhO$>G7^N(o$mv(pYBCteUrN(1aOX~H%rXb@{iwWd+l7Z z)xe}#k1)sY!8c{-_%}NyYR)Cj#_QgjnhqB%*C>Zlc>~?NQ~`xm4qHTfGpBN{cCO_ zTi&NeOWVG(x20Z0Zc5XU0aw-L_fMiO4fg!u8F*(cIZ9#ZDO#$2Oy_$)U&v$5{!pto zv&u%P;-akMZz>Xq18{$+1S*IF_i5W#?Rw8$lXseL$dQeFAQs=4neAh%Ny;yl-+iY< zToR*lKr|$VirocP`@{aC-6NnfFmw$3K^sCjhC^P#AR$i&8$8HSu6+9%7sAS_3^%g- zAjoWD*|ILbL|V99?*3Wum}Oha4`P&2Krw!7n2Cac)$Hl)@fJ z9$b?!Ws^;8Aqkb+qREA4Fv`boVCZX7QLfeH3g~v zR)>ddQk?TV@a>B1axpkGz~Jv*2dE$-WCCPjoGQWne-l+(Kjz8QulxrlvTii)QZ|;itS{_^u=;%_ z-5P1Q@;fI)Y_#$~Mb|K8(8BUQ=ja8=>Mqm(iktr;ogkM5(#tO_>J;Ak4|MAo^{%KB z`5(uk&-DMhbo_frV6(OiXciaon)ja0EE^KjvmT%}$n(E@2YFv=9P3cey9A)tGK{1h z_GEn)lch%%AP|#(6lh>}CDD{r_QevBYrM&)aj@@|>LYH&pe=k|-J#UBMg8l_29e~(8L+Sm0iB> zk|dn5Tpg0LZ%shKEg3@7i1{+n+=NVpj(edW)+XKvbbJ%G+-AhuW}-H>*EpIRzrKS8 z%k_Ta6wnX9%gyDWWm)!ZH>xmR>9gy?i2h(8Z|-Jc3;i>o@IgP@+$V^T##Rg@or=F5 zWVhX|T_!*)W@|dX1uIgUj7PEl9c@ONMuZe%X<@3LkKY1G1-1=QzqmXC%6r4;95*3G z4Dzz!sVrF2I|_g z$H)j2rpP~^-p~e*_}_X8&UHKW9KpNQhrIjDdb^+E{jGZ@jzytX!a3k*HnbdF{TFIdqMS@U6M_t(*a5VGL4IwLC8erTvD!FW=NThmxM6`P{|DOWU z(6TEpZK`Z!DqaU0HRmGUdAN>ZY*3m`V%5CdBz~yyu8tu!`rSlFXyrFY_p{o?#m}7d zZ0R09-@%%X3rIVmaRm%Kdpb+iv%W8xyUkr`Ho!GHTS2ni^`KIk?Gr?_S$EaNqA)$! zN9G^gfr|Hj_g4s;N*WV1qty}hlhY~rN~ypa?55faTspk%*V2fSeiFA4SnbhE1E%*g#OqAkK~~`vIxcY`bYOkHPtm5 zS2yuExcU6zSYDs?JpHHcY#7JWp?K-eXt;L-ExCF#i>BjZxTS}bmjY28)L}Zq1_od8 zCX;U`z7!}fJpRTM98xb)bKk6eO-2_)et&n<`SlQev!5nwVUEt_E#`d$IQObkLETSv z5uvM_v~V}NSyxeEIzp=W>j{gJ`$5g2MIu=?iANBkmm26Mqjvbr^uXm%0=T21N6QPv5iS$(Hw=bDA))9|KL!_drr)dEI z4g!_0)JYu+5{}>^SCo~4BGaUJIODeG3Ia%-0&e3_x2ZS#M_Aw)IG(aBfp+-t7dq08 z6Rm^}m9y}GM0;)Ede$%WuBhMkIx|uv>OPIkT3xYqAO#J?TYH!-Hg{24lB z?lzRR$fV~f+bhr5T=~UB5^J#Zm8Yt={MKVJXr>81}xS?V1FamH0Zm9YAtr@+ch4l*Z*jn{r^F?+{VZ%lv zVrOnYO?OUwCCeilEfA~|g`h-OZciKK<^CnHJ}Rbr$<^)j2|nk8II+90A=K zb)spNC>$qhOV-l2qu`u4XYAF9a+i#2??8x}pR}VHG)0=p6pVn?qVNn`DF9q{%u5~n z6hu<-h?+&xk#?{T5e@faGW2)z`K!0!rLAQ3OjKJ=`OvTa6DR!@I-#`mbPOeKeVe&O zPBI{KFMkOLg8Hx6H%poPswvzH8^gnYU^;qHMyEa2RcZdgxZ&7>hC#>`7;bTw9m#!v zNF7vyX_>}pMxaP8P^N%m7Tnv(5o44&pfExe(_Jimp}{721?d= z#HCpMSV~m=!`v;nQ-Pj6P)XFA7j$<5{UkFC64~3xM_sSml=?Jc0fy`J2QQb=y%$*P zynE6vo>%3j1krF%b+3RhK-&AW zskz3LKe;d%lzjkk>~sttmD_G)RTq?k!Xkfool0Mp5skBz2#2?P&M2buJz2aOWb%*nWhP5oc{qmt6P{_7>g>5ELGlhr^Xx4a-HO zEdramJCYb~=;ync=qvBPXJ8@j5EV*3&eeoefsEOZD=PW$clR13SN2W-w7j4GrVKpE zqy#>cDF9WqEI#|I>|;~KlR6(;RUauB25U;i@$7Lf6}LnhsT~XpAD)Rz!KmUgD%^h%ZT)^VqVj6)9*_$%I?XQ9JS0 z7r9%w3aQQE-lI-nRbflW!BPr^PK#H>U$-EYrm^bAvkR&`Pr+c6U?I4QL=Pe~J?5}6 z?&nXdPvxm{1z_}~wdd6|GfBWPNYw_C`-z1*RfA>B^>C`?Nmk-Y33&)oMg$NCMUc!- z98>~rX|U@MhjF>y9~WBnsdV$$zVSH0y*aw!g2l+rz>JUzdqw=>K{$xie;As9Q*t;t zTf&Z&L->{j?NcR}Xl!p`c3cS%R@_Tm$a;|hvz`~^Ux>2Iy?Bd9RmNYLMxN!9$e&8D znc_Un@PE4?i}S6s>023(+l|wQoRVs}Q5v$G$^2E5MH+HUTWKr8s*ZLQnjY;G`H6HK z*JJw-i4k}lql@{pjuM-56Dfd7uSnERApv;PjX_l_;?mnff|=6|Jp1n_IKRhy2d3YT zBlt(lTNd(E)ntWe&o};<`+*9?CHUoUP3`|@Ps~HGGzztNm0-N_`aw|n{HThya~EY( z@L5(n)(YemQ32y;8s!HEdUah8`52gu8!tSVnol2@|lZziO3!Z2;d5C_Y!9VlM3DBJtIyc zbt9Igs5UFHMI;&7lQ{x(|M{zrO06pNd-EZ^E4}zhLkcuq8E8n^ERY@Xw*BStyC*#y zpHC8quv&Tpo}l*zt7gO_!SXS88Hz7gW*Y>@T{YT#D$b4)4TQ^eCbNB?tpK(gZ=eS= zq5gQ3U>~z-A_HBjH|&G;K6M9p>INIBoLz6oJP z5p6r_5kY`dCRnJc9w)Y9W#%O26_#O~t+v-iNmZg>JS+ za58++CTl2P)OUxSnMc?n+P<4IT~fogGpYljS*a-0mU~My(&aJbhBv!M@?mMt)3vTY zJ^2E!g{mM=uBX>Mt=qv(pU4Hxgh%-|`YVT}&THmzWO=u^!i zI2XtxW{fgbzLunYcHw@nMTultGVzI=0LUf%rA3~Mt6?A6>o2c`Qzwdsy!JzRE)?=e zBYB64Bj(0glGqoUor6mD(l&M6`=NHuk3t{*ZLkdimJl4wqoYv4Yr(%8^e~(3*~|IP zj1vIXpj}(1mhVU#uxv(IX(g(hL|5`Rk!^A&IGhArpLuOnmu% zyFI`p#~q*KyNm&4Hw3Oz(PsxXDhvDTx|}4|^x~*!pwRLfyui$!>pG($&D&oQl1`65x`43Hn zfb+WBCu&L0Yj@fKR4_80AYXF!&ds>G3u;3*54vGV0ETu5p+6?iLN(fsxxSJ(m4www z(bS^6q3IH6otv0wGHzd72iajb=B$~iYAiMXLl2TwN>1Jvz;o706y)XV1#WMy7j$M; zz0usR7BpcIH))0eVzXWpsTw*2#d|GvS=@G+5?U8r639RD-~j1$h#3)#_MTR>6QN^c z+Y*pwSA&>VKfUAXEkSltO39^MUURAmDxR(BWs6Wum|8&5pz&?dq2#^VfV$tIGn5)G ztw5CdFB$2Q{+UpgmSmqwr6&tqw%sLR+K|QFd4d-jXx{sosd-dl;XeTdPUz4ZM=fKL z+!4N?2oC&33=7{SKom@{75fAynaLBvUmd13>*77&=`*0T%i6eHT^RVCR78el;)t5| zA7@lzuNU_NhNWK{B-Bg5b9d$or27WxM<{C2Gugp#ES_ldto8IU{klfyu&R>f_H#6< zc8z&785EP-L1xTeQy$Y-cjC$s?!t$*L(ByFp8_s*mLH8Qdd%c<1{J~+uxO3o!2>(< znDXs!f!3*HM1Z0xwfh?-A+lYrFQt`Ewj2&%A+uHf$$x(KC`bU4`>-2=OF0uDsqr-} zIw`i<(nZlB?={{7rjNU`C1SoUCC@TzkNg0__q}NUEmzS9#-TY7(XkCC0rnO&8I4vm zuT=ABmaYZzL?y{LZQdExH&~-nLkP^yPEi`1hPKOQ5FIWk=QFk(SZtG@)?M-W#5r`% zxaXEzibO6*Z)aY+Ymxn1eaf;WKmzqaC0f-t*}~*$SG-4`7-9n|xiNkD7I^P&2=jxQ zSBJHfZS?tHZ09i8A}#FC{{XOIbk!#;{7*LdWq!LLqEcpelze=F$(GiMk6~f+|L=(% za3N4*K{0%e|H$$_P5X|m6QnJbZ5PhpT6>cm)n_U+eTE{*I_nq^n=2-Z@;}7nPccq< zPG)K+W=D3yWu>F7gtj*_o%j_6BWdNTT95 z7Rp0b?(y^rB1>~TFW%g(rmIfUMWm~z;Ldhv_Nq0S1ghn! z1PgwIJ`jqYBhOMp!xMhBVfS!LYfna4~rW7Kuv@~?mo3>V_Qz;zp#^> zcqG6A-85AEd$mF8soap?m@_2en5c@oluC&-$Orazo5{kLz6ZMklfoEhx^`uZr~~KB z?|D52(V({1&ROycVcy7HI*AX?BjRWK6~*YqZLLnGzjSwxa$J&?57LRwgM|rZ2_Aaa zr}C4O+wP)DO)yNCASfFxD0jfx<3b2~EuK50a@pkn7=pwn3&wnrofL#P2*;1i9!4*3 zGz46!P)1?${psthX7<51wKZOYyt;_d6INtC$>GI1&dP`*F6ljWqnse)w!2@*Jh04u zNU_%g54p@Aln}=_DxCW5&Ln3eIBazz11%X?B9JV#}}L{s$+oDY{+!~6h?Ei#Fd52Vh@?h0N$hJI}FMb z(!SaC>5Sis2Zne=MATg4e6ro$ZIW1KN;mDe6@ZXQEsGPldLQ0-Wo(Fg3j)KSnu~~4 zHX;8|j!Xt_v;+&Jj!++LhJ18M8djKMpcn=I<*~a6Hr(us zPX8b$Ko}tH%~gN!g^cr+>~oF7xWkLzpIBROwh|AR-Icxpjx!Dk8ol)xS&?4lIu>PX zr1*x})>vVj`RndDwPu9xcci@bVTZ~A#=D-vNi?r7uEXF#4?FKtH|AY^S8S?LDrjT@ zW)|rlsuldcmoQpI2TQd`CDA|S%v=+5fl4$VcZQ8g_s+Oc3mY`#)N*>y?AIJ+|cZVKVzf<%8H@ zNmNs~?!t_44N?=CU)IxmGxi8u`5bt%eVKy+EWHf|@o&yF>6{;H>W)t#IhhVid~a08 zKXqOtqc&pcB4D9}AEafn+tEXK*cc3)?@TQ~R>gC4Ohj-9fkL1>`~8|;@#JXVw%=Pr zVWmlzJ%V4<8@#D191-epS?j#SyJ@mtMQb)&(-{AdWr+;XxHKcwb zfF&$He$J7U+lylj*Rqz56}7A zK)<1N&>x}YGbh~Mu1WIgXFE!Vb!uKNRkK-l%MoyvC{ z{EnsnED?%I%VfnIc8yWawbAenbhT-P7whTFIdE};GxZ{npW;7U$;WF}x>Sx29r^c) zZGfC8S1PFSuwgq?XV;W113*T`G}uSpwLT|PO-_6FtB5Ig7eL;>X3n>>aZqtGYr3D9 z8ak~cJVAn!t?1yy$bVanhO1xhnrF51Mma0`()qCpwS`vPmxx94%Fu~0$(SCJE@XIL zOjbD20}N;nc?|o6|6KTG2QF=^DyYXYE66peyhe0S z7-Ma!2j*R-11Kh_MjCuIfWEFhF&NVLQ9Q@}KM|5_iG!-3nQ z+1LfZUuB&pfGJdZ1zkUsM#YG2^;Z!-R|%V?t822+|E(gh1FI~9^J(445~N@`P_k5u z>2~c+aeipiXYSOLwE%lamUD-jaPP@=mqE@zIv^Z{Z}&ivkNxV_QqwTfjaQXDZ5gjU zKg@U6vrFnLc#gRPy`@48k|YK|jFqg&{8s!-6F9hDE?0@qOzei>d*quYHNDVJZ1%3Y3^mk#9da|M30_>yW9O|L*V)lES8= z*|@1}{sjrp2|-&dIM!@Nx-*&18{R)91{FiFs*jYL4=L*q_uk}389 zqv(*m@k3)jTY*54G|BJ#W{=(@q=NWYpWEm3)e<@qx*faV8(C#OOSdTvU4Z1 zU2N+~;NKi(?oh)i4^%|Xz^a?AYV4(}wpYBW8+;1G=zJDdEBjNW13I#Je+5qGLE&uK zkmQNOC1rVaej1}CSIG+o{U8#NXT=`Y3yVNJI&N{P>+9(EYt1omw&uR3Y%-@q3<=E~ zg`Yi$IV|xLj~-U!drOdN3rSFWa}WgK3~6CfkN^)inw}{x2`2FHScfGK-2DCXRidBL zyy3tf`^not7-b}G-T5`Vn#HArTBO`KNy_YRIXw_5KYO_f+A>AIrkNR~UK7Ob@@rmN zP^mhT;9EZi?|k#!`umuD>eDI4@35CF3wbK%B`n%B_jup&gn zzwweBkmO0(4&mXCAFBqqCMnx@RnvsRj&3zMoixg+@jEm!J+^SMrqMSjz0;4hWoR*+ zhg1Zj?^wk4pOx-E+y@+X7X zHnP7U^L&?cLI#Cx0VnPV^uvTJZNFL^3e5D}OZmLV~V()EXAz)pt!cOsUN zEjbZi?P|M1d8)P9nde8`lmG~up^G4lSo%tY@)Cs)SLf53dG!M3WUkASluJ?X=j-18 zn8M|l4=^wvHh4C^Vf7aln#-6H^Dp&~)M8bcJr$p)yA2R0*8L{KBii0kKr7c7OA>4Pa9h>evgpW=|?7?cbE7NL~DLH}y@_73y|3>TrCsRejX9SZ)Xt0v4gYURB^A5%5ZDHdA@ zVfvaYEFrArdubK(YoIW}$73wqMFnrKt<8KwxQt!96>zMZH!jsa!eaDCVfDnYB)mqL zLQ2$6ZH3}G(sR7uyfO%k-OgdxLGqbaHI-nUG#UWc+e+?{A9Q_YJes+Z|FJezU%TmzI4exxm^88TeEQ;GldrxfC zMpHPRA7e4^#fH8qdZhy)+L6B@_#=Ck_p!rNvkiCB0DTYIdH&ctZ2XUw$tBf5j9$zt zWB<<`nLtJ;B@t(ge%WLm&G7W9wv0+{A=j7)C5-Txnu0`C&yrp_Bq z#~zfsEV(=+K(){XosWLhxu1ZpDw*P2ME~7zFl~B-`<}J#;)Ne!6Ev!m*?y_5G4d!lwnu7~dBGRu|cF(G_mgB0}z9zL~ zL{>P$yTQzJyhV&h`9Gd`iWpd;u;lBp?ca>oUM=i&8X^97z%`}CMA8wP5O|h$nkl~f zi+u6K`w{ytK~c74KdY32R14}ug7*xS{omNsVFS)ro^dW)+)Xfr@CT6UqN`19j9v+; zD4jpF%`;j9Feu{KT)BlaM|8Ov$kx1rSAYCC^~EXVIFQx)vPojej*m z!Ah~w#MtCO%T=&-=D59QQG1trj*p3BxG%U-R>tff@Q7^`NK{s-bvh=Mj*_t2{304} zgSO9n(>p)g6dh$`Myq2=K`7NA=rm`LQU73KCaoOSZg?iGgk@#3XX)!wV;n^ANSM7PMe zSknWk*$@s3u>eiCQral7u##g0$#n~uqC{tG`S+-D7^GElD@=Snlqi^sM9Af-#yK4%@ z4!A&MOJZH~R;7C-BnL~VAT2&r!=Qgbog(8g`XTAm8&i~0#wn=@g43oaU=@VDm)mP| zpVsp+HiH(L(FTd*8`T3YOrvPn98nHCSXs-cGQs`*YtETtw9Wsj+N?hai=#9eyo+Ux z2dVM+0jLt*Rk&*Tyk`}gHF7oJn1tYq=2?d2Qv=U@fFpg#>4v+a=$IjmatOTEtvp4% zx8jZX!3(^n068G9)2pUOZrHs0?*fGqtQ?VPRF>>Q0#z-30pKZ;cApM~n3rXb2R~!) zQTI$q)Q9_;K_&c44te4IJpW4raz-{k=(Z(>W828mZ>?-2pT=yti^gkOYhs>&;nt)#+DoEVMH%@tgq^*8K1;KT)5PAh*QtxC|oDt zR4(0}8bvjWVFd=Yt&wRY%{F_@ON(0;a`RSU` z|EF3e8hN?H6AS+qi`C8AA^?`&(yCXIT-Dnd<`46us;WEv9*7M_BTJepUNT0&7GzM= z7+eE(9ypP(7kKi%XuGpF`4&;XxW5%ci6+5@rDS}_q8Wt4T;g$K^fiOTu-2ar4({kY zy6{W-A&e|)T^m(Se93fO_K*}#By zC_e+(ad+t3!(4sFZWyo~yvaL&yXaUB_HJ*?l@m>%L}D1$Vmzl)TM7{)UyhNhej9Yk zcu4J0KH%FL*EldnGCZlb1OkN3w7H;ZV5=b*Le{Y>Zu<3+Vb${vt>zuaDH;EWstQ-N zhYn(V>K$Z3JE# z`S3s&d+cxS54Bq6E%X$}84@626#<>Gust??a+$HIyIMuQ0=X`q95!7ti!U2!cP&$fjf*KK>SocePL zZ3@Pz^@}ntnbYlpj4XrD-GIYTzo4QJ)Pm95D5cprbe(;aIrYlvpt0zDm>CZK<<{Mu z1q&Gi-?*%w5&(lTI&f3{JH%*Wc4Hq=K;-}v8NIy4sP%hd%rAl3h5IRAot8i7Sx0FK z;Pi60CI@*^ZfimbvfDd{ynA66T+;1rYmWx=`?CHo&Rsbt}e)8D@`2|HFf)|t$H2*MFbjrruNlfg41Phvd@tS z`(kd^k$qgH4<7H$a@#Yy$LB|~bbR^=ynF#XPzv>s6_Y$ds%v3jPsPd)pEk09(`=hj zVaFp4r_-0lsbZM?)}3EbFEJ9bN=yXYElPv^pk4!Qf_uzjxaLWaI( z0QSJ`)C<>(0h=MretG`P>pFER>|2|q>^aHY^ZD8dt(DL-XuQ_^(xlo^-K&`8ix!PB z3WV7_q9r5X5PZ+C&u)I8D!`=}-@moy=VBxhKg^(uiY==tDrdZ1NZn}DEN@v-mjiN* zJONg@CSc})8VZ37YyuQON)(TU54Cn}I(59H)LdlfA>71x107Q8Ehfcp903Im zjw^ub8B7bioS_@+s_^TzWZNN~FEnuJPB|YGO2ixP3Zav#3;jMD)9$BbP8A(af_!f7 z=VqCK`XlZDJ3z$04U)G7s7mZ))T)pzEk;Bw)p{r2mC;S~p|(c5@o{90kWh&I6VqiL zw0Ef!^#G_d@8OpRA=jy_7i$0fpoLnR?tID~^P_N?<4aJks)mw_u}@tTivmezT@3wZ99Z-l>wJZnX0fNNhT%2ltRk0XBHfKA z2Y|L6OgxaF0u=H{iA8QUqP=Rl6r8j%kTF2u2}_(Z{zISAqkI{c*n>$Y9^G?*k9=`e z-a8uF(fMHmqD?*h&f$GbfzUD&5DsmsqxXKBN*qu1b1vH#XI0ZouKzu+aZYdL2K1t; z$3M<`o^@u4#@MJu&+3$w4o-uSi@oEGAq0$6Q_AG8#)0nUR_NFLIvR;<>lR3*`%3%G#=aOOHgdE--hm)3ZGoT-7S1uo|u(FG^dB(+K@vi z-P3fib~m6=19?Co2Y_HId-t&`g)tT3PmjeVM`Uhx_F~`WS|?HMzR|PqKS&QR$9?2o z-@d|^j@dGKq4*gBCmF%jPANL401|bbask4fN<)ZWYEW;Y)1QsfNX;FcG0l*uwA1u( z!LI8H0FC?)X%ia#IC#}pK*HI%VZ*v;CY_Q+rd+WlV9+dDMnp$$;e$L&G*KSzcy+8A zK`$Q3*7X>qi`G6Niu^WdBvJ}d?dJ-HQ=9PKH3Md2jmdeHY*golNOnL_JXg- zDhtk+*yPc(-(01`f5_M7{u;Pwm1~4G*g3+}uM&*`6>cB_2x2TN#)7z`QzYcz)nWmq zqi{rpDyA23cytvA$5#V_v_HKVtymOqt~nr?p-QwR#q%ASfl@u~R|9x0)YN*%O@7Z< z#82P(n0cDiULbKDwWwu8s#KC>rVj3)ao2mR&+cAJxnjaKb1;W&=V6^ZNY-22(qI%a zRBb&Y%v%}!CRPm6V~f`WSXo3R^N#EnJn12-ejvzu|0F0#W0AO}bn{;?>1ik6(0a-!2kk_9{S#iJF)@ z?fH-~Rx!HkhttzarD?>+*;+X7DJ*0^-hqO!i2DzbhzPzQMkOiLO5IcQVxo70-X|76 zIM)2`6QKH~!*|SdCiXjzUiC<$WshMpp6l{s4QUWgld0c`2od=! zHXH36Nrv<~%FdIK#gB6>eKIurZ0=u|H?WsxrFlTWpj}8WtfA^JHCNv(o@G_NAVidQ z3<-8aE8}x{8d*CQ;ZM7U%J7!K?HWW771>$@N*_Zzv8=D8H?$FK*t`94+sCjl&041I zACp41HL{YN=;o?Rp_4gl4!t|4G0;6}>|kxs9EetN8@b8@OINcUFNPJ?8V0*$g#lYg z1|Aroh)F{ySI5A?)Ed?-1N8YXTJ8TnDUc&#i;c;R4YwB`9s&j;6#!Ac%D}#_`VA9+ zWO41E_1prAwZd&Mzz?zhAZGALQO{Re)#1^25ce(_T8!_l`7v}mOTDj%o(v^q2Xr5P z2keWrjWIE9PMi27xWrHWDr&<>h~1@Sr@AEY|I8jwP)4cC@*JWf_f(}q?w!(=y2LI3 zrGtrrJ-4lk_n{JjIT(DRmx$_lgZ*XDr=@9$yr5#Tk@uSPCs8Y}wy56xye&*t;S=c) zQSTwV6rCecl5*ut>pUFgJIuRBXz*Wo<`I6q9&WUT^d1C&Bf6#zE;M3d1?4Z-)RfXO z{cXI8$-;ONq8H%1iZY3_3Hto8wQ(2FV!SUhzeTWMW6;0^0WIYa+%9F?CuZyeER*k0 z<52FwEjt_D4XHQW#l5#$mOA4x6LO~hs+lQI%e8`J-SEq}#%xD8y9G2C%lhk+>}ezA z=daBb+qX5@q+2c2&7_$e1YnC~TU529y#Y~puYcB^io^0toJ2xIW8A8-xKFJ!8j|VY zf^BH36C+hzY=&J%`Zea>if-;0N+LYGFW^G$rbyTB2+efV3X>1#-%9fT?50k4N)1T! z9Nyvs8qbQn$L-kgoLVVp12aDIeW^ypXkXp>v8?!(t(R4a;@TT$)k)pG^h4btDAoKH z8Wb635>%w6TH;{CzqaX&cp6#}5?yDkY7lirC73?z<1y;gGZWbo3H z^QVc=6g%zV9)wp!dE-g?J7 z1#&5P>N*<1OdFFl=c9>UyOdU+E-q0Qw)lG&^GU;9KL5uEx}+{6T@(@Z7M)L=!+Ena zqY3fMmss+lh{N;%5C>*>8E%5U$nt$7mkRd` zrA=_{Ky!*g{WHo4sk!c>mdcwJGh*3E`>Lib)P~Xol={M;>;{&=vk(6x)zE2(WepY3 z%w>sUhi?lhJ zjGPS1r(9MppO^2Mhpt?jsmuJQIlV zYR~OUicESv!Ra?^VCUa$e27RVyjwb|BT)tSbdI}wCGt;|x!=Q=v5G6iRDl-Hut}v= zk_NTG=SXL*%ge=Y4|sJa$k)l?xPYrpR?XW#;o518&gyBI`?TgqTFV8eg%B?QRq8)& zM9L#hXa#}vhMcaneez-|8@aznjKaFv$+X^JOvC1Vl-QD}eOQ!4S%T(HTZ%s#PT@|G zg#&OXsy-3B$+Q(AxdY09(aH#kI6W48nim+V7@-o$fiP}}P}iQ|$`MB`Ls;It9FZ3qHuWq%cnaG{*7IW`3EakuehKhmyBu*Y%N4_}44dOAK zbcxnJEtBga#D`9N2)s+=@0#8XZU`YkMMF;$|D0=%xegm~A1sNMRJjUx$npib+mZ*O z31i}{CgFqzv&o9=MUr^!5Z&-^AUww#bdDzGeXxx8HRe6BK{?2We?iO?Tt2rWQolDa7(@Fj*CoezwQU}@*X6UjU_kwj zj!3NA0Y?EYNu&xkn$LBt2u)*o1^o=S?-l$1ZBvn@Y!H0Vf_1~P`6UAN+&?L_11sUM zTo*3IWWT7;y2DBK#^Z|X?~ht^!y7VKqvh8yNZ-T@=PPruSWxQelX)Q@Mb}S0-W;d* zyIV|&K2ywwf-u-=*~b-WM8XwV1ud$k z8_a9l^$AB_A)EG1syPoWP_l@jM_H&9yBHy2`t;!a4^qD_IpttTDW49c4}Y~H>rrZZ zN@Re3xigxC{*~|?Z_(vY0`OJrPPJ6mm`ZOWBD?!sy8vhg=~)a5ba$FskDA6xNXfp| z1o$&6X2j+)m6CF^bDUXD4{eob%rRUQpCo#uPAJad4G-8P0k4ag`yGPKM`p3xeHt_7 zV7W{QGp)EDrMw%-ILbU(R&-V-jjT#IkYr212?P2-_Qb>(TvWjoDa&e_kNLEh)v%LyMU|5Wl2v5BZ@Lel3j+258&1g|R&|TlK&cW?^ z7A14#*~YtTrm9_FhSa~uo@|=Cw{rbPiTfm>v44c*y#Lsuy_}VG?uezxWuI3^%UX-$vVfSIJTfxS_gER3uvCskPu5Q`kIYvd97fBGvbvirbL)7sbHmaX~Bl_W)y`88JAl=M3oiP?KfL*LZ`l@LRv%!N}> zKJ`QWedd_msWc2wY#JWcVm*pV#zsq8(nEJ7(8OtkGvxP(J)yHJNm#xC5IVAAOd36= zw3apKK0g?J>VHl}9I&q!Va`8fI5tci=H+EhTf}tlpB4300uE$Ys*~I+7v7D!A z;m1r_4K;uDd8<$}W6F6jN?HG!6t-_7E2dd(0_?9fZY=Ev^hWNRSDKT3H5b}getFT4 z0tCfG%BId-d_INPU(H{mjZkGk>&je7jNfI6VyWR0P^c{r#2nATlp9Cxb^8bk$eZ!b zku~0d^;k)8h)?f2viN5xUz(rlgp+iQ^huD6H&r+rw%C$;^GNAiYrW#OU2<>PO+}2A zydt7EVZRB8yBfyljqyekynpaU91VQvdU{s-deHNJ$YG>}n2jgd=Gug|h*51R=vy!_=lK6aFgjBa>AMn-H z$$HK9X&pe8Sqj6#co>rHP=+Rvk5!Df6Zs1`soJl|>$<>0(`oTk)nR`(3-VvC;|JRK zs1B*9oy2ywA)BIuEC0cPcGB1?td}x4g87NMFA@PTNaPr2zLeMD6K+0yf)s2d@3kgf z_-Hyfv5?%Mz7xAp;pP)ecRilA*)y>E<_|g2s4ouj0rH|^ zB2c;SurlsYQ0iGtsEMa-D0hF@#FCWv&!U*m!b1siIdWI|(7BK~^-Ki1N{I56Bj~7F zub_AW?dDB`61^o~n(pDqak6@Es?J%Gb_>vVqL*!cDuXwq>TV2N9k>Qo55h81aXL2=nsSgcbUc>)!LD>CTD*zxj!VX3>M1h zd&r8&^i|_b?aXvheWQ!zW?7?{T{9PWqK(Y`zsLK7Fer6fglWmy)EVSxfCHog^f{V9 zym#pzuMd=nrrwT^OQ}G{eN++c7tJCb;=})0&S-_==j7hORU4{cW3zmN$d`1+@+(>p zibMMbAdU@C#C|m}5ZiDDT?yG5{d_ye1)5lYC~XahePBfO1Mv=`v6H$Ndsn7wFp-6= zpcJBS_8iG&r45-UY@F2BomRUbjqKU%Gra%q0wqhmX9VqQTFO=+jB;aJ_n{VfX7!{~ zeM$M$5NNfRWJYs|A*PfBblTzgXdD5JlWJ6gV!;~58Ou5!J`Js_ocj1uL+ZD*BV{!e zC4peBVXYQggwd`~f4ID`U-T(Z9cv?B{ISLh2X-vfWZk zl3g26AvwqEH+Q4L-{W~QLv zeMCi&P$6P?Z>j|a&o9EjcO30&rtmNjIoAsx6`%4kg}&bA$BB6@n0{xDat;Sv)gR~v z(|dsmm8|lxFxU{mPUax1TA9#Dn$0P9;Q&4lMrl>uAPiS3O(BL({k$!am{eiU;!XiA zZr3n1=CR^c(bf9w zrr@qxLRRW~zrP3)H!O!|JF3R@Br^F!gWx9DSQZ}!rP@>&v(gOT@ofRX-cUV*KJuf& z7cjlM(t);fz(d12#BBsGA!KodeSUezQsjHpBErFZU!%sg11NJiu=j}-bpUP%D)lv7t8iXpT=OE=wI>{Yay1nE~;rc)rslF!dD5Sok%C zQ7)KUWAW#vV!z=w5`}z(7=%Ovj>V_;wn{ho12;cdML||>m61<|P;F8oNI$$YmZV}5 zfIKpvnrZ|;uBVr(ngfd8J{a0?rVFZ49QSBjEu2LmQU2hYwp$p+~@!WJm8g1`wxI-uRW*FP+a28wASZ@pkj2=nE z_1F7{tFq!N?D!GUom>t+VCTfQjX%S@Q7SpTk(w`XE$K4Bm8YbA8x^q&;|dEJQ6l34 z$h!Vic%Dvaf>1i@xIq5o!Tyisp3mUX{E}7p=(6X)4PU3;PFOX;&lN(zDhXFFC&y10 z>I;+WcX%h~S}L$!%dAXLn;Rtc_Xz&^RHr zNgPtJ5bIW+p#X=zUJH&vinToX)~d?@XI?7V-uolz5q~rvta(YwTUfwrg)J6|<8VBz zuT)~)X||WL;IvJj?3)=ipZ8Hc5_=olj7;f;myL_Fe;JxtvXJ!k|+H z300`RRt>Ri5!yncw^!LnXmTrO-P5ENYpDW-d}Dq+J4Ow2D+9+T6lxRX7%RZNzcP+z zotDqK13aAFqlt~lPt3j}3PO^5TvkoScptRXm4fmR0G*bf8U;PEc7K2Dg{3X29$u6P zZ$d^`eQP#V9YlR3iJs8sNWX7$O+X7#eZ7R|&;y`{aT_uV~{iG_r`uje5rwKL1oJSm zh|!|WCWJUsNoHnCHCKp`_Eaxrn*RcC@GGuglp@Gwoh;H?&TaBao>L*LunvI|pG zqr0=8>S+keckko9V-Z6OMv%OTHJX9s($@n`f~U4ao=>hbhNg&|2eWM<+3o)T;E3Ik zKuEn3pW1-3LFY9Vip!@mrvkosiU1V;FyML{G_$Wi=?vXk=Lpq*QLP8o88XOnN|r#4 z3Y;PjqK$_fHpAi@hO4sbLTAa~*Njs>k%o^&Q>_S&Y##up{}o-o=Ek^E-4zl6q%?w5 zML=6UEuC8bkU@}2w(kG1i+^B9q^zS=DrcZDTxPwDXfRkp;57J$gXZ@0>nhp;NFu=n zT|Rbe{H~~Fk2f%K%H`;BwSc{oBqg@990aRVE>)at69tAFW=>MoEI>`@H(7u4b2WdX zrTpa4eQXcw{IH6wRHbDptae5xZ1wvWAlLV-*=sK@W=A3rh>!e1?>p6nvlMz!(WiEO zr6=RsXM%ymWuVY%!MnjXn;5Dyk}5eTQVW-4>NOQD9GYn%{ioN$oOdA2@;u0ySzs9B z$GE_93q)y~O%9%W*OwHi+=5>piCkS#o(ExL*Jpp4FjJ!up4f)3}tAnXrPsgZ`}+n(#1a0WBAZv?&TD0-pcMWxXJanlh&79%iSw zAnE+mO)wxu@ApS5AKFE(K*j%Ch*E#xbogX632>SBI3N0^&B8Lx#c z?O#RsBqTTMtIn-!`Snw4e9oz&nQa#vm1QJk8wgyvHjOE<=AN1zxLZ(DuyDHaVV-Y4 zQ`Gv3$rgUlYD(+pyOb86j=Zou+0N_Vi;RX-+}zWWrUzj-q7g$EWKNrCeBcQ|w%qeA ze^}%&va=BgG3pwG>O;;99n?f&19+M$fkjM4Fo_jDA2&VF3pw+#^4E68auT+sj2n8N zsVCvW$-ll%zn9rv3{V0_4-6Dt!T&szN{0*MY!@#Oa+DmK33O5cqNsq$DP_#3r*-I@;ySeLLi5m z>rS?)-}aDMf>$7{ddKu3>z4LUuXD1h?v&=&}&|eeM`2fN8P7FB%-l^#2+G7(^1SCefyqUnwr z4^$P=Y;^WB_^9*8%8;r4WpCsmsj%J3#noStRYhTV7Vts6So?26G(>MS1j5@CHk4I> zf18$C{vh4+nxmQMR_R%tOV8Ab9G9^1xR3iUV2DHmqzg1Sl55DmIaMKuw=uS zq>jhuwTd1ErNpYF0+3xuVAbKdRYZh{ic!s)z*cY2k7&x|a(M#Z4fl$qonV??1P>o+ z4kuym&4S&j(-`ldW6A@Gy`yYBHSV{c1AX+XoS?L)j^1Y+0ovM3M50xbNjCsesZk+M zw$gv+%kQ*i_H12gCH^eh&&r_1Wf+0)T>efFJ{}AY)vN^Y5Kv4L2=fe2ymIzplK8_Vf;g0 zgtm#XSF6+Dbt5SAs2v!wXG^0`xKi$!vd|u4b_SWP;f)uYWkA(dd*&V00m3+S#3w8& zTo0r;$Zmx*-rQ`y75pM4iEj*_Ge2M+rZ7Gb!|jxLK7|Y-+WZh#tBhor{W49=GxqsshsO8)ohtMSr(OXIqmuGfJ*y$jvS{Rq zlGBsJBJc#|`8olm)Zrnk%ZkFnct0rPpZRMd_BD(1X&xyKbV4=gEfx&26*^~OzP(Sd zb=(2L7uH)P!n7lURFNudla`ijhm&VwU|8nHBaXskbXml^At5JYDN!tj@F)&`prj!)sda>8#MVV(;h0i zsntSFArm~-#m8+iiAt8zQ5aFm29|ZvHSOm4A0VmNT9P(rMeen?_ZnE4y!(R+QLyf0 zK)iM^62smCjL8vIc*~6=nCJ~B$q1ZNoX_+uZm`ohUbYOUy?f=)4#6(5wZfn^R<_52 zy=NR2&DF=<%rZKzg^4cXDODQLM3lOE8u}+B0_|k!3U{F-EjcI^%`e9iEY4D)Np`@F zq*Fz4Q`DVBkixVW5V2%?6t^;R_PXDn5n%@jNhY`j2>Yw)Qr%fJo>}R_LMMDt?G7sNJv67d&2g~|a9Scaix!~&leEijyeb3A*n*HO)7yp}y7i9YXA2&#Y2g^lnMRr{AiZlI zGY-uT(t%#D4mKNCMI9UvSn8k6QUr(?j(AaKM%0ZTH71v-(1CK}BGA4>T~gXJEh|e2 z*iRG_j%Snc9R|Vlq+6@F^x(_f`n5wt6DNUVaU*c3lO19AEp5L?*Wn?(jGJ;sedj6G z;M9b4AFSJ8>TV8$_o4>cgv8h*TT{wVuoP#Bn|j&nL^h4ww09w~`uT1UoLx;*Wb~W& z3pT5!NuxI7c)M?N9zc78iH1a0H867!U3 zrOD9|{V=wK240M33dS|usr!bXPn3(m4 zu)XHKUm|CnVA#ZeSvx~JI9BMBwr%D_FNW#kQj)dz>@r+tS5bJ|P%k#F*Y7WI!?5oU zT}MDNcKl?7pwb0kc#9~qT6d% zC<~6--2E!YyzU3+zjr0{Z8OscB?;ocM8c?IXXxCI!T_|UqH}iWWs7%H2!MnmKD4?89z^&MzV9JM68;hTdtGROE_ZtbcBwSKfqn8L??_*f z;s|!a!_^_B`a=slgmTJbCi@e1H@Hn5v?*7AYf?K{m`JgQ(bKKFrZTqxmg7huCiDW1 z^GKcy`7(f;cfQ%L)~z8h(qU7&bkYyTHky`IVA z#WWivY88YRE+l09-)CKEFGvPL5x^(z4$fz}T?@z|Q8(LVpv)elJXU%xexNu~PW*4> zRM^fkW+`kvg}8998hxGVS!8G}*}B88Te`>$M!$HRqgs_18I?m?6yxMys28>PZ;-hB z&@=+(BO31L5XJ+j7K9Jq+Z~*R>1JP{*)E4Q%l-{ z2!`AGk!Mo(_RVyAErXr}Gzz)G%z-te46$I7xSnHk8>i&qA2Yg78ToR6lWYBNGLUCw z94Aw5&T>NWL}VamG*~mTqcr!xU}*1%oTc{nfl-B0Sq~>G=8brWDXH(n;)3BhEgS*{B7U#U&tynv(b# zMMQ@=YDd2kW&gGTk$ukz*kp=X%2vLUNq6km6*jZWg_nsCt>f+j{gR-#a8eX7H9c#n zb+!_P#+W@a547uIg~y9a-kd){R39*XWLB#yPy6JhBkaE%EhQ@*4H9?ZyLQ$5G#Yb* zK7B$2j&6hPjsm$We998G_|IyyI>*`5@8yrUvrg*m#%n6RckGTxGcmbC;RbQBX7wNR zGWt$sa*>`!qd&qy1P@5GE}EFZur6`5r<|gb54y`dj6xaK6kH%~h8ASAS9#lzPK&HX z9ceNIPyT{0N3;jP0m!Bl|rHMI_UJ*`P7B7T$OK;y4wGl z;IMn;Qqi#LG%%zn_|B=gqW?Au8U^gRen1yha^`62mSB0D`*%G1`?WoV8l`0DsY^#8 ziyMk=nRX^@C<+pkCN_e6+ogkpNSYqzZ6So815np}h0Q~)2Mq$NS;i9DNUk@Otx{Cx z>%vK7!PogL987%7tL2sMYKR~c3>U7xR*-wUV%EUhP_m`S10x;5G8EWOpLPQu5^1J= zD40`({iVk`0^Q6zl-k-9(XjS@A;W}=B0rOSdPk{Jf(u0bigNZ|UcKaOS=c*VJ}oTr z^?-|!#caE`Kv0b~9HEsap+aG{aOxTBI#{e=HzcbLn7e#2$W$g?RgA!le=ykQAZ0E7 zlZirC^GEUN@ofFl6n&guu***^WYFxR_d#=x@cx6XToGeBpd&wIL$_Myt9XjjoXG7p zv2}dEX!Q+KE_K*Fg2o8rc1m3MH_wXZvQ?Q(g|9NJJ>Nv7lk{Ao^}~)!>n~y&WG9bJ zNxaeTeQ1y`BCM4<)SQ~Ps573JiFfmims&`LSX=iCXmgtrSzq?)JF5a4)XQ zQ3knD>!_-e1-!)Xne-jqiH6ONrDyXZsG05>#dLzMxrNk~oU<@}Mbs2*f$zb*3#tCP z?V?$vdNE&oCqnd2br2x|mh>RpZtZ)a%~P0xB;?-==PVxgm@;`2doaG+crYJ4Hks~r z4#LrGAgVko`P{q9wadSY}i{Z;5HZ4zCr&J)~Niu-!hv z_PCzZPap((a28M3{JquCSOxr6hT@kt-nz~KadRLLE2u{XkmiS9PX$1a)DDi212~0w z)HC*}QnDyYnmo~tWDiCkcJ?klHe=8>n+uauo0r6otaETQmsQPP4h}ekIXwQvYb>(k z-|Ks9Q-MmlSu|-Sx3)U+5i61ua5ubD+hF`!tH?!0qw={RRU-nb2gMK0OqHTi=fdH9 zyD=w>oim^qs|c3!Y(q6Sjb(bQPb-bUb6)S!HGRNy(eM63law-w3ZO9Mu)kjM z{L zu^_&)7dZp(NI5vMU2~EQeSO`)qAC2rXwW`Dm$rpu+&jstv#P%nQm^g}sm2XK6&z$t z0{a87#014#jF*HHcWO$8hXiCd+IK1<#v7Rh5$i`@R|+O#EJGXe6K1c+=~GFo$*l7t zRnb9?B1w}{?^(b)Xhi}|5k!bhRTm(zj~AMy&sBiVNkt&`uhDnSS!V{vJ_?|qDZ+9B z?{N@Eu(rh0YtNeicTq4Rs5mAnzguKM-&q~iz@w+Y{X!9_?qhIFZOVS3?A+O4?T5Gv zRV1w-QI68qx&m>g2xIN*2&Dgu6frCWFpj2*#hMBIK2d`dd_8J<4390kb!*K3RJnK_ zme1N$iLa@oZ)rvL?3kNrv?U-8`9#h>Oz~n2Y3!=&5rpHEjs6OXjS1f!gnnVgeq-NzpJ^YZZJ4{DKSI}XLJ-$bDlE6+n z@f@8#=B9x2Q{)2{!Z#F~G315|3SlYl@^e9Y_g6jerzxk8ej%J}Zf_VqB$bhoc`zNm zu}?h}a4M#faW9P4G(PPzx2Un6e*%Tq=r6Lxck4I2k)hVP@HA^i7Wf64uZfBP3c*5s z`zWv(xc0M2FUjbCWlqQBM`K)(&~uw(n+8J9(<6ybOA$E(AUzJYSI- zONYg21n*rO+QGJScmRVAdR5r`(uL1evGZUAc6@vfV}RvG%PIwjX0CpafGZ&hi5zlG z;ApTs9IQp%u0eUIyA7%h4P1@hZZ1&c+#f>PgrJE{0Ya3>`%A*`Ub+W!@8G>4>nkDJ zg61svOQJ36{Oo}?f62}%C*z77}n#9;w)?6 z&<-Nvz@!ZuUz%xxr^CQ;^#<`j3>Y*GS`S!{b<@`(4idXgbv9Ay%z{^5a4N`|3|Ms{ zOpNLkzn?Yea9%-sxQ(<^6krSxKqAko9WQ0%^~|cDvR7f%D&23rQ0!r1AN%yAQq5~e ztyNAW3o?BK1(O_zKPG`;)q|-V?zoR9M4C=DWJzv054s%A)e?T4=c1g|>!ql!kHn~}PiT4I3K&q*L3fZRir5+5lg;-5d(`18`f>D@oV7x8{l?X92 z4qMx%^};FRbs?c-ek1CT(p&PyBTNb{B*hhZQp~e!O!f3^Ngx?S9$yY-XlfD=k` z2|c_SOq5{-M%USYjmBLX)i|%*r=W&Z^ z$JGh*(0kv#%7EuIEW!a|^j;}U*!Kjh&ZrYZlya0D{!Ge}tmHD~da0+-fRA&DTm68g zh>QsAQJ&61%pNOYD&1eQ{Xm$HIr!%RzgX7PM2KG)`(1&o`>R(K%aDG}-|WAyRc6s6 zN~~N6A1CvGM=$2kr<%imDhsK1A@bvEM+)c<$q;Y zfB5Q#7E~YNa>S2TwU_1Rob&%Gt4?ht2fN!kiK~Tzl7?9#{;nJZDiQcKi%bTk;{xB6 z^Gg87ZZ%^~-p7O6^au(gx2Fk*aIz=LExnq{#7rCw=>AZ3ZpI6WekAvt$JCrQ=eMXV}?nhEfp9wHrGys$0u&sZ$~dE z-0!ah%Gyq#P2(A1yly3ni`Rz-=@X<@P`-3p9R}`#^>3lx#DN#&qR79Q9>}oZEq+uB zX-!XJEoPl@(@GQ_+ezEO@|CFO}fNI>n@$sNW$QDtP86!rRhL zJ&-SGgDpFJ$XU7$HIsgvO~{>&*Cw(KupygYu6ri0l+!!ot`#o6CCrAZ0L6}KefA4a zSO#PHM5;zu6~DsbK$o!o1efWl1tNN4WySl#&~uIK=#31*kL^ApNjo;EgC*l0rm(`v zxois>T*%vy(!=*jtikjim%HDntHQ@+Oii<|gzClO=MY96wMsmf8*M*{#HCx5>DSGp z?iWM`gGo_fE8lCaJhE97!zTA!LBp~mN;TFpHI{-p7%Um9ACONePZlt6{>xwNrfVeP zxBTMb3>q3Dvxs~i#fUA*likO1S^EYNjugT{6c6^G_0)Y-F%OnwvQnGvShJq&!b z)-HaY!o^gv+hU~c&+OI8X=~;!UxN+5~w-9QlkCCaF;mUl>4hMym;Q`v8wGvWen==6HSu(dCG!ECS^N z;^gg}8WD#)3q}ce91fdX$E(S4Qpi!~$sNqcC{C1%2>Lu7`X3-q&LL+$T#)<%OlPyu z+Hft^qz!=>%H_gcncZnzbFze~q+H&FCndRK#NJZKa+n-13EtzvlQpmyFWeKD0Sng| zDIMIVEo*>6MB#Dx2>=7rc9Qg}Gqe7oOTY`qo;z5zAYW;fc)qY5wGz;Y5g3I0Ll*W0 za`FjeC^3lDbV1WVGnheV^_G#>2zxt*QsP-)3~*K)7Z}=v#6FF(R_<6=rVcv+9e1LA zx#`7JOH$wcfL$;o`1D?6% z1xz6Yf-7GQsCIg!Vk_ukFij=9?p4V?;9sB-Hk(qNZuGBy_C21D0TZiLn07IlapPme ztw-9-I20xQ>Xp_bM>U+vwTa~xZeq?zhR}zx$7EY;NO>T#lou}09TAvukLg&8%)|NI z1!KyPu!%tPa{iH4|A2h_@fwt1sxe+Q^G4p!XVo|s&V zLmw_t7W2{>V*d!ORK@B7P7BfpOt>lm;pEiT72(l0s2O{!8a_m}Ma}r$eg=*3+5=u_ z>GQ2)7P*o~4xts#C8RjF<;+X;{jxTe)iL4g1=dh_L5K#FopcSfs!nJLTL-#woMt?X z6_7@{Rg3qDsEeOI-l_&y*M2RtWz~yq)(BsKJLdEywZXi@4IoH=N7yB>Xc>S`sNl>Ax48SxENcucy_TY@*wR1~qk zfcfutX0X9vk*T3T$DxV%fQbR<;7h`G=_pa&b$D zC0x51;{DWoX$XYqDzbNEh6cS~S%`+Hy5ANNF2FqUc6WW)KUU3lzbe?Nn02G#^>D%F z%ZwObhp=W)03v9C+FBLI62ca8I$a(WnOkvfglk|+F3XqsOSN-KW{b@}L;f3@ ziqvN+2`Dif;;A149%pLJN~1##Dlx;p(?{=BIaZS$>T~Lki6o$2vadCuWV1(tOtocF zrT~MrNO3H3FJ^`^AWZDEYuA6b{o_9mr!S%K=*QSW^}9v*s0zVe%4yl;qcY+{w^IO2 zTBP_ltUr3(j~v(_#bH7`0ILqLQ#4EcVlZyghL6;C0{=sycT#L(F7$S<-gJRetj-5y zhN@>G)pF%>QDfKo>o9Y=_Zo()SB8y2$H<|eQkp0r%OQxEtr*PAA|-QqC*Y>>jX&S2 zO*O(7lPoy*iMANn3~1q8>AvjQ{JWkttYWSloMfa%Gr5qh6 z_`Y&E7`>|K$2&qkxbwie^G-e=Z|InOiqc3VT=@q5hB&rXu zn%5z-Tpw;z>f{7mI+3~46BY5+{@h8`lpXzf^?M@jXDmOo?yohUQ%^DRB#mRzBG|mj zNcp;Au#NOiDc(X=vTI-b1ZwNEYT*a~H$ce060Q)zBP2dH__Y;H8Vle{7DQ-qFb!$+ z_9RH+sLyb*kfL*kRP>SYLNW8cp_i&hlF%6Ra7U58NR9#q>Q0IK+w&qZ;TTIN&h~km zzTc`?%H^G;g;8@z5mnb>$225 zK?>Vq(L>U;m>?xIXlB1hyU}8(x=D%F2+gYo>BmX)5f1Qs?S<(~MLU37wVqt7tZl*L zG3sbEuoAy>(mf$0T!(mAaqBo0AuZ}1b1zDc87h12bn58F+dW&c?XsQY15=pztd zW*SHZ|NFb1{CYxV#!~%R`;iVXua#6WKW?vXIXnHXve- z8e?QoCEz0;0C_813SFD7nNv6lc8iWv-4n^t`4vcb^ZICn_FR#TK4xv z@4s9Dm)}uQzoo=twDK5nutChNAuOan1Y1-L)~n%b=~SvA{DA6FPA|ht=#5>QCGbVA zJzg7+!|TU$yM1A<=t`#r#^T9@fKBGW9u*CLre3wfu`jSj&-`k9rdg|&&Lom>vI=99fPh%cM@^ts6cCd8DKH=F#r^n z&F;)01!z}O_7QI+XEQMj?^?_+a64%heqF?TBuTd^$4O2|{SPu2vVHF?QnQn*Sq1cN z<#7-gpAouWBG3*q6_sVZGxsvv9o1>R#C!-y1ZZ|lCax_*aX*kStVh530A{jLI0J3n zY!TBAKqMsn`2Klb1dFL{`bwAm{W@nJ3_g-QFGnSRmzBeU>PDs>W*Xn$%TZJaxsk=p#}giQfns?Vf?SA}k#AX7+Hk%9C`srS zyl>NSCP4~r9`*cEK`e)^VN~aLp0I};L<#>*qt%^x&~dS*h(u0nc9O^O5fY^a+&*06 zOOvhw>Yhdn>1|EQ9GC8RKeV&+y*QIiFg>Q*5$;fWl9S=X`=jQ;VQ$iNKd1QR*7b#>DvMvWeU&SK>z zE&M|c1E4mIU`q?L`xt>zNG$kIV-Z;>&4u7^d?=4KnZPh8e+g_}W?rdaF27xPn>~F% z2ltwQ#lg$Qs&?&@;ttIXkip>EBCvnQ3NcI=449pcJP_4FraO`n0hhUX25D$ z%ky{m^cnF)OfB|buoiT;={EIMMLX86j9JjY$EmVd!_K$T45MF^MtdkTKaq!g)*xGW z_z1l>mSK8I#n*Yh7>rreRN;JW#LHTqh<8{Bi?>@*nov-B3q7F0`ZZvZ@``glee1An zD$c?jhI!n2k5wryZ+2q=Gf~vUVUUp3T7WG5*`YSLvN$)W7+y z7|WX3{r|ybWS+TnX+Of{M!tM;qKnU`by(&r20y$mO_-b@Uq?hs30liQx$TAWN)Ru| ze3I7&XZj`u18jH5$Uu?WpmuML`tal)Su~yMcVbscV8{!`-hDM9P z*JG^+96T`0Mtfd_Oh7bLnfGh+NVUC>8>e%EjFQ8GTh%p$lEf1C2!I1KdGYWZ2TBFn zs3a{+$6RZ~LjiIQ%k%HIzg3aGJKvIhcjq#v z#X~_sdXw}Yry7-&sP=r*yOIo;{{QaJ-eg|AMd?FKq^ZIUkxlif%qBlT%iHz?ll#4k zl6>awsUDR#Ji}p`_fi_xJ9(O1Ip#Q`2`x42VJ*r)X)#uZ!CqV*ebFEr9xQYj9&RrD zBM8|uMoE#C2&pM8}UB5XHtY+zC{Y*%LQ36OTBQ##N8?Naz-ja6?7JOu61w4R$$ z65gmf+nQDi9>nQ5UE)VKFuy1jhmFCt^?c_Dq9gfh%7~m2ou7jOzkeCOyp%CACou4v zo1LYcGmBaUJ0O*24-zA5v?O1CNgtnh837pZs%Vr+oSfBZi;xlSa(Te?td*71i%8H6 zj?Nz8J{WJ-9_)tR>qE{T)@zVmB2Cx6=++0TT(??W{%J4vLOI+BPIIpydfE@H!mASKOS=NY9?t$M`nmibS|FC-j9+KO;A81_O|E6%qGxXGTxA}lP&;%i7jiZ;KX{veb)foZI5rs;0evxmuyGK#?6 zZ((FIIxNjQ3cA}6*qy`!am1u}ODG!H`9WFLOzFkbrF-kXc@PPzFm1p3>{rQH~cf8EwTsQiSG@xeNy#P*@a75}Ljb z)<0{!lE`6Kq{}C7{#Zyj^*eT+wfAuXOJ0szTd4*{J(7Z?1)E*k9!A9e=Fl;B+HqLa zkdrp!qm6AA20%b|=>r6*iGnu6wKvxBa)Wu%OFG5U)t+Y-riVMv{n)(3UQTIhwi9-3 zuH`5E<97UDbndIlm4cf_aN_}$h^0&d-euBm2L{~QYqIzbT5BV*4EgJF3BTQCKr*DP zB6T?3@pk`8bkCQIs3bj({{5OY(eo@&kt@2RQeC%A2&ghREXlDj-rX&s1Ps<6MJ9`(@Akf(`7X>A12^~{_@3^@U23<+J zWIIccx_T6&lhoOg5k*y2n%t!@pAvHLZp-`PW?{h+^fC%Vt}o@R zh|_jw9(@MaQY8AoOB>AxkE({k1HrO|sf_cuOg8^JjDWt(gLUO&Qql`r0MXo=CE9%r zMr*5F`a)J5N{IaApSjz6E490q%qWgQ39ca{p|npY*iN>GTzvpHv0_O)#^E1RfF;`> zn28=#P-`np{h^T(+{#birWZPCzytCZ0Zw4Vve3Ah3S${xBt$GB#;PFPuBcKEQdUmw zvEzGG_;vM2{+M6nsm(KR3IGAc7^%}mOWHvlrfSWmvTHn(SM{{JVElg#E4_|Wr?w{6 zjE$?Ko?2o7HiV>ef(Yek0Y#XFh`mawnX;R_jB%#0`jW>was0oYY#Cdbqf+5H5{_mO z=k(vWyI3WOR%3bb+pB&2i&GNbvs(UHTdw!1H0vNUe&p{_*K*J3R zwxChaV3Bmgho7PyEtM$yOgwbaPRe+s z5XMK{J}_VmIo@~*j1p5mk8t0G9@;C=%z|YbrUP8Z*3s(@{2Y>E2fz?e*dqu{(;v@7 z0L!X6*NW%0qq|u_`#*1j<@d*jA^{o;SVH&eN_jg%U|m6g@I;~Br_CZJ;c_I_S(Zua zNfS9ASMQN2w2E4?^%U|D29KV%FongfN1|n*2lhP<`843-L+f1%U8*ENL^N9aQ-7Zf zYiNvOs8%*stenDWoVG{Ky6Yb!TI`~wo{0j^y*`Cwl&l}x1*&+SP*N;`mXa0~S8-SS z(?lGO+4vzR>*1R@GKXMLz_{3X*%4J*+JI;E#$DBZbM&Xj4FoU^;sY9#^#OCv0y_9G z?G;k*kzd%7K*4`rERT*f2Pa)C{1x}q@8r+wHkunA%ad1hBhwSeev} za+L&3=dS(p^6Ad&rHj^O?$u0bxi$cem@-|6H|fyrQ*FGtz6UdY<7j7Gp9i_C=?@n2 zQPs?rL#AyrM~sL7B}2|{lG&a=I4~*N1jo^xfG4s{ik9{EFgR-$co;sd`5Y`g*?CT%Xcu2>ZMN}GvXM1F_{WS0xgXxRW7q#plq*r3pQ3CU@@b1T%7Wx`2S((s!5HH)9q%T~$Y_sW&$xJV2`_ z<&rT)d;VYWIf(XI+fG-4ZQx5!j~gv1?hHla%!bg+VG@c&s%J@&_p_1CtL>!-8JqAo zMdv~g^&UbJs5CkY?7YtP`kJ$*Oo#msb3)Va0_}49aNCYt*ZDO^>rtwB!dD?5!N2}H zzcuz*#2;YUYqanmI&;e)#3Lxt$)go1JmT}3K0q`av~n!S;9r^paemG6afv(=K003ZELmW)}b0CDxMGo&{eO_2gedPY0n-m6@uF>GG>;(Te!6 zmY|ExkZJ-{!GcGBmC{zPQZxtdRC*M&MO2>nyljC|njtR`J$Ej)Iet+HXxN$-X(3eN zl30acyK&ed*PH*;_O9#XU_N&8K^X|43r8~UQNBek%3pf@E9`R7W-YPMbT5yJQrvL9 z+BhD6;XIg=pB8gn9Wg#a-%1#=Q4kv2u90#<%el&1Vw1{LAn=%psbFY1RDR`3rNs7A zPMwZq?vS0)~uOjt`%+bo^H?_9nUk?#2|UmPd-vyZ2}FI4=4kFSB6;6YLQie@;m23>~Z zLk~#yIN3+v9jJHRa`#^#OmXR`^4N+9o!Cj#MsILk80r~jl45_|$Lj)qyL!P+9Y?B=uM!kb0ZQ@cY*+w;x*ICQF`Vz4eJz=L2 zVG{P$v;KtT3hXH8V2zumUNCS7RE3ELZ2logtOTo^WEA4ui_h)sC1G=~hH@`rwc@!r zaH=N~4tM$>taGyO&|8<^d5idefj&@~8HVy}g+}Z+P#-nbv~I6L{KZlVbUzxqEET&r zE-5sq7yg;+!*si5-SNv$%KYf%&DMkmh`ylbv>Z&x-7lvVy$w--hv6{nfv@qrL_P;$ z3aC&X6t0K9M;KR?4RS+j_ZJkVXw$<7#)p1>^)mBPQuz8h1k$8Z6(Qji%(O~PyOQSK zwxkv~pvZKqwkb+EZ{!*Pghl(6*F=NuTcuT>w|#ChSNz}1O5i+G$pre7Ij=lNQ^@o^ zp_A(dd2i&)m-bOUr})g|3gJ4d(Y!rdiU>tvB_|uF5n}o8VLAG@Yb!x<-|zF+E4Zc` zvndT2X%)n|u;txM0a8W5?z>BSB1>W{aPx@i)57Q#D+K-bq;1SQ?uBfuLMnm)owxG& z9j4B(Em$7jLaWls*I~PFEhg1&GzqUS8kH%Qvo2vJe1N5>FOX#QeA)!AFkw0B4hSh` zbw>yYJ;n72Huls(QaK$6%VQdrcMv%HwESkfDuh`K!bS1|`FyHCJsxXQPBtg8oKF+8 znc5`UUat|*Txp!WuYHUN#|q;Xnx8laG7wj`T2p#J=YLcQ8>?>IPuKY(BTe2gbS?7o zz^SQ>=9VTn8E9CJk@4^G7X(6YST(k_<3U5bKY;me6i)44TYxN|H67%FbWU_NpTZ=v z^X$W#nyyg%k^ZJ(k$n0S#%spRiCXb8#}tbui39CtwBq#Ed=9i$&S{wU`z)T4~ z`PVG&?Wn`x??U}(vcUiIknI{I2v+^4f#|QX0N8q~l~N5cK2~rNKtuf539;V))0Bl8 z(UDyE$hd9KF<8=cF3{h#0;7DKf`&X4X}-^i1oZP6Q-{uc{dS`-)_Tfa3TSR@qR|xqjpUb9cF!vfcUlc@%@U zrF(j5cIS|MeQ0#n5Va6;lLP+$dhRU3C`&%?TCP?73E1qg?`mBt4Ki`+Ojl#u0ij>} zoW&Y$^H&RAIeq)eHm#|T0Nca}Q*hsGk9Q>Pl{b1)Q4tf;TQKeoy4R4LkRlt@Zqt^A zd|0>k#eh2KJgDlp4R1?JvN!&h(hVOiQs}Q({@L4@j5dcgmnWrEl*%T;YtX_|&Q3Th zq1pyUUVVw3cd!!dbFfD~rLFN+SGv0`Mz%Np%JK>RX%{Ze?7tp8C;bQZJUG?CiX{x; z694x#fFMtWAbMh3tL8Y)lpF*mH)7r@7MrE`G}q2^B~qO<7hIdlA=j?VxP%Ak%EXfEc*S} z?f#5!?mqLDucfFz+~qfCz#TfUural3Bd|B{i7B7uGgB&|*{8Mn6A-iSQO@=a4Zih_ zm9#Ef%UO;UHYuJ();8m26uIK6f;OfaK{<+L`!lJ))Wz&laknP$Ns4t0@gFe>%a?zH z^k2kN$HW5r-Tpwx`L=<|80Mq+u$s_sguFd-=iMq6v9>yHBOtACa3*7=vh~`G_^!w`B7NcwS(8pVAnlYr8BvpbxMh{cku_+BeERh$MeQ^FQPZ z|2(scq%yP+>1FqwGAN;AN%!V2zE;&8to);(B>50_Rr$k#==6KxIGL;s?XOR$YZ$ri zS;Hct)V4zP6TTgs$5+%P-;lmV{xgG=SS)8dcMNvP-oYW`jw#6!+Wc6 z=6ma4u5AT-Ib=Fx7pf9a5Hla5lS78Ms|ze1B`Q2@3bs58nyk`}v`(sjY{bHXoEwa>m%1HNp+%Yfgod`_L6A*VJ@W z4Y2pp%Wkr*4J!z$`pKg{8HQvZ>W)?zH?$sXs8@908L7T;s&AQfx(KUpMWt9<~ z71A_)8*B8+B4Fe;Sx^3!nvdN@YEDOwxinOg_Z9C`01^a2LBE&YK@yG6arC}`yJ8UeclggLkV`r_a zNiGX3JlU{4?feDAZa^LHe=wyK-29dZC`Opk%t#ivn|3ky0MH;YWreh!)?&QMO!Req z(XsqVw}OA5G*nglyNCBWEck=sV$jrXu%Hu?p`VB%SG33T++GMP7Ro-|;4#atyrmN_ z<-C6*#+SmnCj)CM%u4kaxy8!iDo?IOc+>|-N8oZ<&XV27{<{@<9YH0%!^#Iq*~DG= zX3Frqy@l3Cm0Y~^UUV}W7&l0l( z2j)kA8g92+&=n+{lnhT^g80@@aw1lqRz3k}WjgEWyZl4)B0nI#jY@Muvy^tdorI~c zM)(qKk15{j$)XU3xfl=KMbs!^#(UyAKo zjmIWd<08hG1Y;+aAOxj4cQkg)H+3HUa3h?fiYuolGRvbZD|%WTHBbGrV(Buf-K<}%hBp=TpFeIgbc2ML&&7Bf726L zG{CBn1cHE(JxnHPJ|Blilg;q-v^?FZzUR}eK4;LSz1X~S1-QX80BlI2U3rsOCFj1Y zhFk85%Uv#0BJ-%=k4*f1a_|p9w%aCWB3PZ9VaF{idTCa|UIFVnOa?AZuU4hbde9>w zg?dPX_xf;@4(qdIRs`y&b-Lu3XEl%4N|E5u$K~b}k^=-Ov52%F#7S2v{0g1~WFLg- zI`LZX1EylOuo=qa+gLP3`d?gxMj~gn5E;MP_&a&x%&PEEw!ug2#U6#*aj8!uJ3f!M zKF$UK{5228u)VELcOh{?1!Fie&aZzqC3a~D&B?Vvb?Tx z1nY?CT1-x#oSCfYR#Ce;b1A@Tx*$BQ+K%I+E7Q}Bn;Ox@3zAH`siTNroTn!N^0+)5 z7H+UoPp0ttY6<_rCLiaCaW4&LGUt)cUPy;S#vyuj+gFZt73G`?DfkI}LV8L#IFB%D zgqbUIu(Yhhsu@^>7YPuQo&#RarxBscmBa}EuzycIZ(ob@k0)$7xLuc*97C?DvDNg(qhjkVS&!-o&-0G|JO@I{7&ZLMAr z89pT6Y|l@uOFlW_99!}!oX`%IECq@SugnViVj%kZjTwR$ruP4L+tMIN&%dCK;!WwLv<$aAgL9Lo~6>;OFPAp)Me_GGmlvQ(iQJkME7JjZvaTc&214w+f_N^!B*6~&1)#DbU;b2qAi>r@dz1ffR9LC1=M`@C}up(!huosqsdWUc$6L$I{-OF-zgg5TQa zIZVBmV+dq%Ps{8ce`w`>55d3x(xJs=SW#rlO!^T*_gE#fz=(=AW-fu(n!=q^TlV%k zFVKUOSI$n8nRp-*QiJKq+z(~BP>L($uF0O5%9$_r)+xwDY7BfTObMd~j|$76n4q(w zPGp1bzHoa~ToL{%XyHH|MyS9+dwRzYo;F<#;{C4Vd1Ig5G9cv^DX%|>Kj>1P^)-!# zD>;^LIf0m=Oy8*j$)*7$+ahSm4~@q0W`}hnK@Dt2`{Ql=5RhFTgn6~L_)7F7`fNm~ zD|MMl?;yE1qF+NWBLrZ(V72GB&swYW){#>~gO^aOvS;eiurKa5@GxSF0B>(K=03gOdd%iKzn!enGaSgvuH0eh<_Wp} z!58K|m1#^ViB{E1aXeWeaT!sDz z@}d7`LAuxdww-zHo>o9H43FXmL5~Eu4M1oiL2)?kbZ)?-R*#=ZbTn~y5?cTq9>c?a z^K&XQ+o0=N-Mv{-##b^;+njKbB9N0fy(K$&n($UPN;ZIi!f7JjD7n-gxbtnUzPpcG8mNl`sbV84_XY=Y6*wRu8F$(L!F8w zEb)9w#&&vRa#8|f7Q4~7B9X`8uCha@A^n*5@UdI~jZN+3R=$c2AAomXH6|lcG|vQk z89%{7{U5XWK|PZXw6gy9Uevl^T|#d%CyCFJjIzys0{&7nPSND51dtn9b1zLn2w;8M zw@wn)UhLEpO)gsJ8yst}K$=k0g7r)}r{TjqI zg1kI8K-EES`yoFt6gTn+1R*vCy6w@@?3%FC%A&TbQd)&)Mtebvs@zwRy8Au>PX{%B z{-VSp8%0B=n_y}{p$o{9X*0S!-c5A{TSH?mA2VPCU3#wn_q(-|DaRB>$+LLqWN2pe&9mseU;QnN-?3N2Vr5kX91 zfV@@3`xwND*PpQ415x&Y*-xH^|cz9x2!pt9Bo=Rl3GYxA?NO`#uGa+v)s@-K6-g^du00H*<~ zhk780S*ZT1s#OQ@Y4|e8%;Olrlu180j$+t$Z0jU2z)-O^+-a=ZQ+Jd@`y-aejY@WC{IdH%v|X8oTMh2T z%)fbP*3*lsl|qRk1;KS{9;HAUwHMf@4t9JpB$q{Z2Z8}(24r#im&3mO)<_S@6Z@UX zAY<}wXme7m*6U98{@e?t#xnfNvYL(vxHP~f-Red?y~$1QrEh9X ziddcbqHLrcFICg4-O&iT-b$)cclY_WW=YbmC=Vj?Z~%#mLP&vB4rdFjjpaxZhs`GrWX3G)<# z?(92!UXLm2+wF=59PF%seDQ(P2wO=ow7gD}8W&n8?rFK%$1X72E_D8!NPHcG<#v)cnTfb)*X@>*)rqISjC{|s6?R`h0 z1Dnq?#?~P>EkInp_U35)>9;O1ui<<_=hBiVB=zSGmvOv8{~n}gTy5O+A6P1gAbXo| zcPxJ)z8!N^HFqJmTg|BQDp}ASS!w6)Sa)Q)OUW=PyZj83eMjIvhV;>IIngR6OyT#M z1ISx;^!5ayTT6o(C1Lpm(M%iGd{oLi)}>uRrF`+Bh@gOicPvpUBT0#t#CodD&L)vc z7keZV3l4sa{KUb8G|~{kDLecfgI9;^_)>HRz!Cy40&J3-d+up(KlIu{@1QLM3FHm< zgWd}8d6#S>fpOaqVjpV42&Zd|Bt!j}vy?X|(UIN$ZwS&U*3wyOiVjndG}S@Tsfk%oI2io)Lhh8EM-3&v z36Lj(v$4}UA{>{vlfWifY-0NNb$Dq9o2%C)2~fznbQ)#x8FQ`PH(xHUz0PxwgQTXEK{ynVchA#*rz$%^g?$DS!gUHGqBgyMcE(I3AZ+jNK@eb$H! znTuFP>Jx)Dgqmc!V6H>eV9v|^)v#I(fkSPykj&-R1o_xGXES^=4Oki+0ziD`Xkrnj z03QmUH#=vI{+t%`p7SEPY{1gtcEn&-GM=?Gp3(Dn4*$tAm2{Ji$)GOkQw`oF%HAu!K*2ThP$y z(Vdbw+hp(dO-8yQs$&Oh;rsZLqIl7<#=oi{)dIHl4|+K{!@Y6Vl=_laPtTZrd|^@{ z5oZlveAK4Jr!l4(n@uN0dSV(;$e9hMr5s`w49iGf&xou0_XzIY_o8ebt2}>(=gtVd zgC{=0DvFNe_w}ig070d`Q0|l*-w=Jqx-q;b zx1n=AB`9uaF!CJGvx^J;RU3P^QFAfu{)5q(pto`kXSW|KAYWtQs56Vmtp(YM`D!8P zGy#pZDIksJ!joF%Z;~AN5kPM#k19s-74l*|>UGl<8GV6$eJj%Nf+(S7}2M_lPdII+T_wUqA? z-ADGyg#bMU@t-Qq9uYHyBPrt29Yk``bDiMuIPp`)k4AUiJ{;m8-1S*RuIibEYWgqR z00r64FgYw}5vCHsrF76VNtOPKR>foRy&6Pp0SZK#cij8dml*OR46JH*;D^nn)7$70 z*K&X3&W%p@CJo0Z`=9|6wkXHo|5QVA(`X?mrriFIb^y!tf9Wl-1Bfsi#iiW>IeZkT zrL=Qt{s#BbHGV}`!q4x*S{q>ihtxs5XSU=*_Bp1@*aHi(%uPOISvS5o0aoChfe`=~vjg|`8s*tv3urdqn z+5OwLcze_QQZcmBi(X-53)T9$&qyGSBE5DCByBjVzP#7kkjQ~%Enbh)2E#v9K2Vom zotxWy@(x>!(kjJ;KAXcwQm>T<87OGoz3VY}R3!9*N++Tx^PTudet4XbHY_>ELm4@E zCTnr@)NiWp4g)q)<$A=73^8=e z&}hS7C}fPG7E-%64c*d!xHt_F1y>D|WqTJ7ru8*q^JhwbAS6np9RIbq--!Kclc3ZQhBqWk;{zcS zhIPCDeog!|9~-&^XCkq|5RXPGeCe!ej1Z=?Hc-%@b*I4mt1>?0JeQGg2EGaYDfC{D z&QW7GsJbQYiFVv6{UY8zDqwQ)HrX!Iek>pOvfCIw0?z19dDR$ZlfQdm_Wrw*j}sq70qByXke z5nXzZX?)ED~3Bl~}+Qv{QRY)MoTUE~MNe2^wRHkdT-=kLq<3{B_Q7!%%PTRa>B>hcRK?gWRbVwsqZUVb4d6}r{gg0b zoT(&X)U@cYXkA0MR-uj!Y(NF_Czxm$a}<8J5)VmvbVl97+XW0ez(SZBm6p6Ad9ynk ziwZ6vD@L<(rB+QPM_p#*cZ4}U()%8cOtEWp5SNI1$s`B&>tBDrJTCdqT z0feLci112ec8EW7a!OCvWh(a~@p^1xrFRvR6QtGnaO>H%)hM#N*XP|@H!=$x42Fy7 zF{;}>7sP1w(E{IDRD=AI6@Hq{5BtFCD+)VD8@T33~`)6$XAa^=|<3Ch}J6@TrIA6ctTIhHuPe~qdMqK?UGzPa;c zRqs?b*99HY>U53Q6U3>}XrOaRZ3q|OVJg$+MgTS1gBSs>Xr%l-YH6S?(8;8^p#p=e z>&N*o3pS)nl*0$Fn4b?{nI?0Yg~p4uap0|gMk`uky;@1+N6omyGab;<{rdTn#we~h zESY(aG$|uuNQ3oZA&zsum&uG?R;MrS6^Y?@S4GIBp(!YDMc}>=%+)J)+E!fIil`mg z=@cR^6?8nZd~yz3m)~X#sc?2({Zss3BCWW!wXV|M`g8wntDU|~Z-Hmk>(@(HYDu!# z4*G$pf&NCqL2#Vg!v#oIkqIb$`*L#hHRq@fRA1dhyuY7cqc3(o87`ohPJMU$4 zmY~O~DUuHu+>YK=n z{{&5!Hh`Vz&!I_d!f}I~+HC?Xw9;nK+ByMj%I@=|Rw#0h`&*Mx*z9?=2(#fa)=a0t zG&F@7td`|p%Oy|p;r1c_IaiR9j})HrC*M=Zzy_{ldd|h^ScB1QC8d(k-h$4YoyWJ6 zZh2X5%qO0^F_LiP;h-s=s)H~Kw?yWJH+32qzxN5Pj%6%A^-a-$m(}4l6TD^{&EO!+ zX~@6eyEh7Fo9({uD1qEl&gG^igM8<73}c#(xYFPRHb^4e6UvXXx*k6YT*&Cwj(@|4 ze3B%syp6Zxp1WfE{YJXZ%Xj3c>r39Q?y!v0H@4n(dFYtL3;Rc5YXnS`vI&+S_ccEf zizM86-pAZkq0MQJRWgbe@!wDw4V4wbx=6?bvRf(075{{ReKx9L_S<_zFpeUY!=9z& zy+cvW5$3h(YddbD2(2rn@YKkh#+IF%f2lfZ=Q&#*Wc+&f&2X~Mt6BtrwG)aTR;MJe@TXlG< zw$t4cre@esRGh(he}SZgkDNgCMmggAkSG})pSeWNvS>kU0eD$M$M7TIx)~1RAc)9P zv9E9X<3$!EoM1kJgu#_va~D&U19Np51C>cT@Tmez3jjtZa9Q|L-=w2&cnq*zPw{k5AUr4YNIC^Ip&hlsSc9ZRHvkzlzVgqRPJJ$>&RiHK}&PjQL zc=1(is$ea74bsKO)&1KT11&Tw2d9mXvx?)5d)&QgH9|8&YGg$YG!EZkX9syCPzSHP5?i33}u^ikYu&(*TyHQr(uCQ*BW1QIaBOhOa_#uK3; z&1scjj?1ZcJvsu4|YR06#@@NV&JRek~Z8*h^t%ecAx3Et0>cp3Pmni{w z9QwI_#p}NLUwFhK$Rq_#q7~E}Mk?%%{ftE?@J<=t`xW6E9T`*qwDi_yNZEAwW697O zvK3IrHPT6}M%Kx-rm1=pgA07eLO5C?X#4=sBnRo?FUZeh50xK8#v8EFB9BCl>>2ks zeY&xKcwhQ6o8MRg8KM2$lnF|0UpcdU#3r~>?p!rbYYLMa^<57TJ!y|-pR6xY^mI&Y zAk~3qR7fsO%hc2%&@EgD%EDAiNvKc=QlzZg@yZ$sNhXuWV*+bZL7d%W%UF_^qLC$c zyGD4~NN_1wKc_n(e9>@g*3{0R=(X#Q!ofHL!7&(-Yx5=nzlq~i4ekc=N?_DTaJhWx zclL;EcrJistl?TW)EvP+)#1;ZMld1d<%2%#42axyI>6G1k@LZ#1e^`7*O>7G`^ z+?f)k35qd^ci1JcvIf$$fs$9~`WU22_V>EitdAv7K1+s{Dcelw+@xPfABk}0qFQQ9 zQ?@IMvN@eg$!qMVG1?%!)@FAh9gq=rhU~S?N@Eakb0}kSXq&<)A$;y6O=#Gkq0{Sf zz&qWI+Z;$PVN%#+8dTTew5!C%#H^L?07h&Is_oJ?6_7`FLxw;pVG!CsH0UL-RPxp( z{f*iApEZb!MtrYE2dB;sbIUP$mw`&p!hmZDrFz3yWHV@(sx+Owrt_QfYE;<8Gn@Wm zYF;}Nw*(AEZwTYm1S3iF8=%{)2@U{cXrfh10pxc*gJ|o_()g14fB;Gjh3o;rJHU^uAr7# zQ^LIYx9PvH2b0o!TW#FIIz2KXaQ`e>J9a(_oS5qky32Y1K|sF08B3pz=NRucY$*`l z93gkw#Da2`=ziKZc%^XC7q$ylx12GY&G3-^Rpj@}{Q>hdbAG!#wLk3SeNLn<9(d4C zI18<_+KMSi)>AL;o)RlbVWJlvM|vzu%jCJO`Q$Aux|eUCH9eQstO|x_Y&59&!ga$$ zw31HrUDy|)pT{xZjX827cviTxy1Vj_=3r}q1dFctQApC{lANnXAjfMH^L(Lnj8RN| zhxrP%PXD{g8L5zsR}{9gUaZ9U7=q*$AXG=i%%e$ze=?5rTLMA0JoH9$>GOpU4^ZE) zE8JBu1}}Da7FVVv89})e*<0m35}`K<&TKI2~a z)RJMeQX{(+;jc8)0r8`Ck%*KMy!s{iGg83KYkyVjf9Kl*sNh+)X@GTmw7qn_kNMsb zUL5XMgiFR)oQC(Qeotu+Hl>fVVDz8BcI7tvw<1W@aBCIg`aAJA(m!eQ-^)^Xc{BMI zwI%f>-`c65d?>AVae4qU6soPs6xmt5%~i zv8yIsoY~CqcYl-}n7=n_g=TKoi*pHW=NUPVBbLL8Z0BaPFsQzQq`;Z9P7D9)xVL3U z`%Aoo&5mz(^P;yb8<*dTxb&oUA+$!MAHMZ{VY$*91I-B4GK;_%wo`r7YaAnaB5G{( zB*bLdlHK0_19S4LwQ+bTap@ga75FlyNRQD~z|-}Q^o37oC3PnhDk8%SHfNwg*wDsj zk_#rOMM7iv2hZ^niN_?K4NZM!}76242G;#SihvK06V@nulk^>_Nxf&Q!0Ws^kv}^8=(PMnjLl2 z4&p4Ur+C%iL7ILB;SK5|P%vLVM=+OtoEDwnI^E6ruFs^p)m#Heq-6_4*IeFY^G9ly z6Wqa9gDdDOdj~3f)#=5wu?#*o{{=GZOnUFBHOfu;5c9@pfB90gx7%3H0t-+(cMRE< zA3PyQF6tE+;O?+jv;R4O^5D%R$+_hFqefcEHVbUqMqZ?@svrNVC>g_b<;sSu4W|MV zXMg;R#c`<;z5J5P;J(kA@5_U=!T7nLJy%fGK@I-=Qb+#JRUzZR?&nD2T2#xQ!w*jM zWq{GREK+Q_%Wx`|JSM3m(Yz`)G~kWpDm*CLAn^y)_WntYqq+S+@gIUJ{juQZt{^Zk z7QIOsCCk*M7fwAKeouqT>nbM&dy`+Xj$oIWed|XaF7zonrMSeIrt3Dfk>GJ0k{{K( zCR=-+;>>`iVLR>hj(UC^AG$+;@8#N!6&M$S>K6I%pIIx4cL8hs1cBEhsc7?0Y1-dJ z`dbozX7}5faZhiv(1`#{=FOMaECe-wsAN2j6R|@klqPnlX2ukjeszpNsFmfOR>6 zC6E~>!obSYzt|oX%E{yj0>+%Cq1m-cbb60}lN5^t>86P#EP8)@5>vC7;$tk!-;5fBy@EI_8kCngcI1V3c!u z@;HiLc|VL414n+TftGtlwHuVRuI!~7lK^}(Z+M+?w#|Jx1n1Hmz}fFFTvZ@HN)IFQ z3VaDAMF4h=+k{7erBnv0$djt^tUDrWXy-B?M16ke#?a-M?ay{Axzrf-YdX$MIHE>|+;Wco3!877_Is{GAKv!|*ph=+Bj zXKXRIZlAHx#qSzN5X-U#xZwB6f-s;bEIz0lCdP)zOvnf4Xv8P$jyr~G1-=*Blqh=}j z@!JBAVwZ?E|2j4ZU#Lus_Hj0wA=MBuNC)L;-J?I%sRF*8yB|hH zI?Wa0a4V5OGE*J!(lVQ|3K$6gmba?JS3HJ#*fJ-Y#J8`U?JAfJV==5=v!A0NK3w07 zjx*cn&1QmO@qjk{axH+F6;5(cZks#txYxm5dpid?A@y!KmX_noe5EPhu`1V%HqKLfq4Ht;F zF8=v*r2q5=>I^eI=)|>w?L&)5{a$%k^Vttg>zxl`N*0uJYOLFPlEwoMo}c%P!bPd! z*Zdx4XejYWqyNz8^nBnrg*k-6)N2`rnkbQ=7$$SEab{p{dG9jDkdWm@PGb+-tHU5;>;@3hVKcExtj~Ha}A?KJr4O{7uxeOXxZR zd~1!Q1h_jKLw5S879QYo)ZML8R2wJZ9u4PSKz*5YqW>Ll{7^L;Ilnx`8Z~Q)L`1k0 z`hNQ-K>06Cmt=iNgx=`T-0z#1NGo8nMU00uM%co;{HSb4yg&D|veCdp^vJgb&>@@? zz(8j%k5R#2*9MGk16H4?Niw&4&n?~OMdCdj-GQg#*6T~$c=e#?EZ+l(0!*y0Ih=@M z7>}e1Y?nBAE~0;QLg-+s+*8OzAC|boK^JV(%Cw9pZrlvFX$ZT zb3i9Bai{#2wfn4ZC%_E%gr>=#fgRwn_sQLVv?)Ltn?(cRjWv@#0b5xdi0soUQ%RFd zS5e+Zd$UEz4u|4pqS!k*UjeM1%Y%6SQ8MZ09&6JHbu9~s$+#pDSN)IY1JwkN4RF?TM6 zRpg79RUhKfQH%V$D+Y7j7FXW$i%#VcJYze)g&Vea4w|OS5eX>=QC1IGrtg(x=O?Q= z4F@xetmNg@ESf84Lnd>P{2ZJ2?@~X(r;wYZTxOWL@3UFjjaoqyF9j`;dUm@&He47-MJ@j)U5)VRN=6W-W$1$KdT0U|=->R6j1_OB%@b}LnWNCIFEkY-NO^EsYi8bCy7S$(YO=iM zQXM_r2!`jOi*|-(2kI)@FiH9v+~*WmSJ@Yc#rJ)`#~*Cz?%B<(M{76ijOF`xq6{j; z0_PLtKM_&Be8lc#7u`A6K6~DL9t6PQ>0DWK%TN-sB`FhyRy7<58vw+W|9n)mh=9FJ z?qiA!o|^YEf7{DPBx@Mdce9%zaMP-S>En~7qQd0C%mz>La|dN;!*U~(g_WmGJE4yZ z1a&hVzl)K{P}*||Z*t;pErMIkuSjus{UD2R{NpHM=(#;`r`c zTv{*Nu$=x?T^=dS^^XP{W_0wVxDKBh^^3v!2?CM zakq+x7F?@EK*w+VeX#Ay0C>M(V=SX`$+@*#DI~gWntYD<=EkFApqK<6DUDH%;(zEY_eKK{Re z1}+_U>F8syO~sh(TZ|uFrF1H0`6}3EZv>C>`{R^H+|;xxr=!>{d|XAJcL|N1(ZjF3 zli1&;)>o8Jr`1(rE|vNI_>BLGn%et(rajFK7Az|EBTVn=kdNcV<}_Merl}cKhBZBk z(~qu-#0MvZ22k3r=eKH;kQ^iL2`o%9dFZzO>@hgW4*P2#hoD`9P1tDr@UiB>9fmot z49VB{lyye1742xn? z=MRV5=xXU_0=_E*yp!>g;UZYXH?lOfh45%WEQ7t0(V!hC_Pyijc6zlDiMaZLs8Y2K z+qC3GQ^^0rr-7ydzN2Xb?C^}7h*9M!=%r~B1D!#t2NwLsw9CPS9VDh%taa|-DTu%F zL%@aMrH*xvqk^BkeAu}_+KU0kk1by3WuCK;R-<%ZQ9Z2XdD>6UN>g7UForrixM*&5 zh0rdGbX>B0)8$xlF|fqK%*7gnHD_s1ojq&GeSN)D7yS_AN1@f-nbVYRDP_E+kG#;b zwf1`_3{YpSUW#3cpx@>tMj=P=oR!@E{ZTT?pC}7M$!kB{o1M?_Z{yw$>R8K%;V(Z6 zkXj(GX6@GWsb7nh-~i`hqc_fGKrM3T2fav_nyJw7qz1r=331rVK+ZMa-qk%RLl^MH zRjVvcqKZTjZ+5i2Utsuj*pwRp7^Ud&Wup)81f8~CVD2SNjk?VhIa+cw5w*DCz(m|Y zXN%}0u*(cj9qvT*zqh8I!%lE3MaNq zH~^J^v^rZ7WXlFo&|+4?Q8YzZm85-FJ=ZftpT8CiS2<(y?5)$P-`4`+cHGg}!|^t# z##C5JcV2tcl0I^_)Y_ny*YFRSe!c>W4&Qhr#$T-f3_UD$bw zjN~+buxqEv2kF(Wo})T6+gK!5udN5*rVjHnGSX@B4d8!c%XgM1GCpk2pdAi;i67m& z)-l-iQKohbBN`d6Vckkzs?Bn8QoVl7tI#$!b;{h>3paezy?FkU%@@KJIl|)R+}cfg zxn=l5P8aLcPT&eiA-k%~krXmx86$v#S`?Z`dsx?EI6Upp+ySGAN}nGup+4`oqD_wE zCb2WF=lD0`l=LzSNYLf0?8`gPM6BhH%wTXZEyjkmqo{mv5yVRTZzW)ffb7IC(l z&(DZ*SY+#ZJ5%Nfe= zKP;L!ufjG8h|lUAr@j3U#+GA*sxql}Iq(YEhJ`p z32KlK$9>xtxKaC$cU1k}2CwYDGiwXCl7(LoJpL46+F_*qH~H6UCQMQ06FlfRS%oR6 zW8-p5<(-~g>n^$a%peXsxxOVD<|SXd|2;hk%o;;pWq)DLWH~*|whUmj>E)q=vT7~o z$DzfC*Hr?)t=>odE=_2VMXVVD=n?P{^KmA241rVcwn~lf7yAD@W(}rY@AKURS)4(kCra|F|K?d!BDi@Tb3Ma$iUnq^m#2XjrZ8;CtJ`g`YK% zasNVi9#Pkj>c#1?23j$;`X+Z=ax0*QXHtX1`M*ug;N84=&;-0P1vokOOs~%oy2kn_gQe^ad2z39XfD;E78MU77jhqjy2ABBTiz@M?Ht2xc<4YD}K2U zp5m_PMlww+&I89zpGD7iz`GmDwCTY>nGW)_6DF}9eFV9SS^Sw`14S#wM3>lQd=^6I z-l;PV0}S2ChG7Bwv6sPT(tmaNI`g_oAiM) z32_hyrDU9Km92q(ieroNVU@$(fLY&M6;yg8Z_<`Z+p+-Bheu9Mcb(EVh6gTgo*HW4 z3SKQfHXKx=&*?r$lXQ)_bbqrvgmy=1w$zbj%DRjSMg*A7QnXc%c0)$eFlgTr|9#kg z8T9wi4M1|VA!U7-N^$M)u9g=g4Di#2Qr+y-wtWtC#&hP3@D(-oI zV{J}^VZJ*kns~hNkp%QM2#7tb({e39<%pwR9I8D>%+({olm&xic3}d!O|90NmA1HT*QBVsjkk7ifgEBiX+c&jNOO3n{P<1Wz ziOieP3EjJNJ+x4x+lt9+bY&+Q9JP$EPB!dvtq_)F#}gn7)c7G$1TdSId+N8DEp5#^ z`{s1bc+LL%&xW2_SRh(Xhh9spbG~%S#AkkR}{KS3Ce@RTEVQ!q21Ilu}R} zi=ZCUeT#;o3!`+(9+?iQ3)i{AV&^OrP6;JBpO-#(9k{27Os@(P{T}-F8~sEfTvDD| zCL084DND9x+qpEBj_rz_SpzaI$Tjn0H9$|Lr`oGHECQ{F@SO_NKf7kI&*e@v@bB7b zkwR?aBsEg_oPZs^RROb4Zxa%yyB`6sCP<;7Yf!ZC@NPb*u6HqulG#oqs$TMHzv4@_ zH$oCm2#p8*?Bkifj%e6jg!T-lxK|~kq+OiFkAPxWSfeW|1F43S^6k|nXttZe9z)xx zrM1Y79y*vh6uTQZt`g3a?lq9w%!X_ie>%$Q21b5mI>z4w%|n2r<(fttCG8cB?3-j> z%E~ZpT^|Pz@}D(3do+f!mkx~1+7JerwO&_d1@q2@v@ zu<8DFm#(&4RG|P;uyX3OqcMGNP`ommy^DA-iRG6nvE(;jyvT93b4msb0Bg{vUv?tD zwG(htY8~)ffLWN^fI^+(rDx+DYj7bYQ}TRloKO+zQ)xa^C$lJrdl?S$n>5`s!AVnun%i0`{UK8 zvuGWKk~)0}h^G@tZ|RDE4hFoFIvR7n?t&WJ8lq+NyF&dA1Mj473&FdWu!qN_dL-I+ z4E8d{jf*}~Bf@IJ`)|*AMKlrr_N4Yu0+>8yC0Mzl8oYi9-Lg6}pf{6~hzB^^pf_<| z^&ArxEO~!ONG4(O&ObI2(Ap{Ss}3E=Ibz~#C!OA5=Z@2A+8#7|YCthNNlLnB^Ghc1 z_nT4*@>ENam6u}RmbR=m@{4V`+RYQ{CG85w@=xcx%Yo|&9s0#Yg+_;r{D>DbYiSK< zdW0snyks6iGx4?H-X_R6rmk!>5VH$t=hoBC)YX?jZ{Q1~5_M7(mI<1riRJxg*zv#qSk4LXk6^K(BDuCv78}%Noq?b(7l#yRE!ig z3H&Pb+j;s&saV(6%t=m-w7`H>y@)KZkN>iB)CcJ`QpfX(7^1}*t53jgSC_n_4+AfK zehcVE$>;!9FmTMtr9iY3u*j)kf^A%=yKql1Xaf<`proM<39Z5I6(n%zaB)ZKVTArQ zy1zIX>A{)-d17Bd{2KE(cBBsuy1ctw#x_VSP6PW676RniTw!w%#pVV)B=JYUj!BF? zd$9?KT0Ze*#SCGd*u$89jLWC{`z-?1Ajxa~)P2agY zwV%6>hEv`5+|R?(2`jY9KXT*zsX?QB^#}I_*>hDDj;yht4+t@(r<;V12z-AOn(c;F z(+4)gNUy6#C}4RG&kQpCAanoGi?Nsoc&Y^{-LC-S!cxs=LPOT0e)3;iU=?lAmWyj} zMN3H#vwQd@J#>zX_2+f~^M_mHwdqyp1~!d6aoot)>p5P@Opj1}sUUvvVvreaGu=f zrf%zZQVeA?V~A_%pE1j0UpODe4+|&Jy&{ARB|*YM=?U>u(Pv$)A;1U?l3=BQO>#z8 zpCXwux?7UC|F<$QLEfQJj8RP4FFbetn=1YEkuf>q&C8*!*3%X~2}1^!c3AUyMHpOS zHqx`Glq`;YLtMbQB5BC;+1MlGNsn1FP7GY?#pE~9ThAm*$31BBaR}P`Y z5REQfQaYdskULzoY|=<{o!-FBu(l?AGvRiboRsBgJ=eY7s&Cn7xA7E)6`pDE#GF^9 z-y+t=lfD<)*37x}1f^kYh9sd)X^lKJAtA=NKmmZIY#bf}Wa*5pMZ&X!D+9X!JGhvb z??=WUqWX%IESSbRjebfJExeH+svq=Uu?5}3RK2%ve8{WwYdB_a>-}Q|EBmysMO#;{uG5YO}bAiU6%v zQ=6Th9nbNlXG_l5*ri7pHj|M2p(Z8LL@r%$ za81$>Z4LBA4A&5AOWAqA7P2A`AP+&_k7dPX$<7^MCw_gr(x~SPBmd#!%)hn&GXQJ< zlryi%GJy%jkl1K=9yaT+#Hy+lE$GwUlu>z@3Wu21h>J!L}VgmB}F6YdPT19f2Ty9H<)}ah$)KPo>2R}0MKOQ zZ{~Sf`NrVAVfqzeN>Cc3{_k1n{hHIPiSxmk3d({LvEsVms^vdK=$?K^5#r zSo=!g2q1FT+d+;LN6}O!lp=GVK`Zw}#p%;9pJqt`RLCR3qEZ6;O=A@9sa^AFc=Yg3 z2VcxOlcSA??sU;!<4;irQRaFs0r7&A>$9$ArKrF>0Z}^*z(+%pUft!eYm}V`-hZ>S zF~|N?2LocD{h6dTp%T0`8d|ty5Pa{1Y(!&MAHOt9ZJ}+YDeX@jqTC6cx_^e`jcov| z*Jk0RqH~8C24L`yqMe2hK#QDN#6t-8GcgUzDDJq)5t$wK3XXIre$D)m?Q-()g<5l? z)SNL-A%#38B^kcuABc9m=#k)<+}NVSTv-0EAaQ#6TXXGFNpgWjvp(GCfmMCwF6Hv{ zzg&CF*oO`ZGL6uH((&`B>YD_|?wfIy3wl=oe_JjyCXsEu(~h*k`vD~DMcEQ8yERqf zikePo1Z1B26ruIG8Hc=1N4HEf+6}lS5kx9TRW+?dukXXr=-AT+6Z3;>tm`Sjm3r5 z6&q|>7Z;1zX0p)mEfHFjL0Olsi1w^3DSYFGb4Xm6)>jR+^FlQIkZPFuq-~9g%4O46 z^2lQMQEAGn{=%#y!*tMryx|fm8YO3s#v9ylioSI& zStkU(<7q2JzeT13ySB)f#`GG&bqJI<&c4UBQf8S1Tu=Q~H+wiMQ?*!Sp>FqX>7t34 z#?eTR?O{4RcbvRBGMhj;Wh;@_;qc)FX5xAkhe~7+)I}ENyvw(EnvdP>2gIsG9?wsf zTcg;~-GP}o2>qTjK1Tv*d5+$_lx&63MTOc*Fj~vFi*xEku7VEXhu`BhielrRTcJHq zV$)PYz7(4vM9ifwyuG~q4t>6R!vtb8U>_`nrB?N0^C3_bP^cU|P@%gJtJvY-Q6e10 zVQH3}65ePJk%6Q}av$=MC137Dw=P$4VqQPfM?7e~^CHP&ZB17Ajmt}>AYtDJU3*nc&IFnDIB3#CnrhSPla za+R>E*Dd{f?+pKWd@Kl#mFJ0OG$leVCV>QSe6WzBZE@ocmAC2<`8Bm69VTfh*KgB6 zwg>~5I8vb!e~9iT09z50E_7fP;vn~b_g_KP_6{`>#QE?ik(QH5rfA7v9r9d0?Q&WHCm~L#{Oj}1x17MxQIN>)Z7Ep(=!SF+0YQj? zvNK;q8yAC<2LVj2F@fVD&ztCnImrd$-;9rpF3D0sKjuButuU!#lyX||fXPF#>tbl> z20P_cIZv_nEF`UU9sbCLhOfuQm0zj>k1x*1!PF{gbR{yrOT=iPq||sc0Jz&c$}Z)` zk9?Wa1ng_E9qP};D~~S7Td>lTNA!PDJ$BHTy$HC$QA9xUb!F5XOJs1;b#pW82Wh>A zBKp0)$W}%xW5le|6URaV)~|X(+80K3T*#m)D$eA4o7OM=Mf{Z~mAnV-AGE@WmF<%!y)rm@Th}5cSXIElk?X zD=PW$dG`LE4}m^Q{(rfY^ROXZ`sE=VX$y6{`<+L3y|4g__xjoogVI+|LsFb1jQ6W; z37AE7A4{{q_>YutzjI6zPDMTNt~AAdthe-0(fHM;4dq(7&epgNI^3|5w4q}t-Lq+X z6?I}gLB&qT#Nx-qU%dC9GQQfK`e5oRT7!qnMRcw87x8*;7O?aegRbUu?9TV&)BF8P zhv2Lhwf&>>fyNnNggvkz7JOXp5(@#vV=LXXXu2N7Xl63a1FT!i3r_cWVk!_^=xVTO zy%(m_{T+E}lydBg2P|kZpxIK2*1uS$#z6o%0uCe)>dj3Q4Y47??z-H#iUo8IU|QYG ziMt`MGZXQlt2*H7CEw3PaXW6Itt`Blt8sneer0aSZ+c9N2$|H|Nj0Fr)dj4>Sn-eF z%R+_L?T4_lwm;Bh@P_sr2O{MWDE}XF*3yiwfBplvf!n+H@zd{g`#fFi%@%ge+YF3= zYE~*_IZxJP05nuYw*qhaCBIH*?Pw(- zA%~93xuWE*1A3~7I`wwL(+u1wij=YWiVaV&Dvn=tpxu@3t3F zx)cj9Hi7C3CL$or7#bcX>X0_pAtRrek|ChB5#tooWbgH%R69%_K-apWyl;b<0U1mD zzmJnLtwun;00rL$)&Q=_IO+(V!@jf zZf}ViVBTCK0_GpSbMu(Kd(kHtN2ptx^vV{Ysu+a|8h*oo1t*p;-$}1&w>^ za(J;o@gS2%Ny-TijNb|AQt}|6(?}9au~)AtTudCTN56feZ+cQkTyimFX13>At}`a44%DZrMY#m;BE z$i{q%E?nd>>)ufuZu>;yle$*nC@vef__?_%ik63>WzHYVyGCiw#p5tPuIITm$oMO` za{ngoyA~qNLj4yYUS^=uvG{PA6CN^2AbBa;ToUEJ!%3x-?s{e#f{9=O$7pF5n2&gN z!}mot%t-tx2-*DI3fD>SYBZek3pX;dS0L_C=0eVM4Ed0&CZXzvGvIp&T9aRo8Of*GxWXnL1eZ7zFDFl|Bn}Ob?x{HO94#*2D|+NZ&1d za4r+NtqlLJMW#B9VBUk+ukDM%@dY2=l)c_AHatN-SreUN(2cKdZFX;SUJB9qjP?;D zslQfrdBKP8`J@TL0ahPc*AQWIun9~z9A&M}wTM^?l}W1Gsc%>S@D4ij6;3AH9rZwA z^e(1ciy!bKmF}a!Iy88xUYD}!b-VP3a}YA~%o{ESu$ozt4|!i|Padsfqw!FhQDTIP z;0EsTWpam6kzih!u9Gy%fNEq&x~gcGvVqp8QjPMfJhAZut&T`z!?nP{$AOitGRb@5 z;mVG1QdCIx4I61ftew2L&EE_^J|lDiRP5i(&gOv;2$f!h4ZYP>lW8D%ip;2Wv%_r< z91+~$QT=PYmHj$Wh-fBi5K3*J0n64a6it`2xvh!Pzj+inhUt|1+Y6@lU=}H&*eNXp z997o5YJcee!wT!20~7lrh3qKi8=xq|p$r2-qi&9p1G&8vLC3H}k)BTfq>2|yntvY& zWN^gtN8};(^rP^RLSTB@xPjg#S$#&lfYvV{p)}PW@`Tv)olb!<9vw7|t2r8mq#R1B z8C&e$oq%SOGEIIj_gRNfZ8$+c`JzwOXWg80zd%?aaApNUNwj$3v2(syEHc(OrBcuSAfqeotg-?yN#HQlYhei( zy5DfVF~dYg98*x_(vU9G1iUR2pAXTX1sEe*?nlL-L@eX9i8(`BhcSUP1`Pd48EcY6 z555SV`z;sc)#(G;@IR<#l=q?O+XFJ0>J`wuhYPD%AFG4>Wb2CDeu3JUm2Kr`I~`{K zoM}^7W0ENkTx1;by6S@6JSCoGK_V((xq^{!pDpYMt}L6)NQ(?|Ouot12yX+t9VP_n7hT=}b$Dt!jLdE;n}%GBu?{5~o{yMXLi zH3(>_MV3Ih1KCdnrkl3#nWVm&G`Kuhiy$2Qv@qqfsymQLQp>t{>4$(0-^@-KBsD_J zOMN95abmg&0lAw!3hChCBNJEM8#|d5u3pufj<S7l2iG$(i_) z7Z+S>sP*oXvk@mxh}eQ4%Il$ zm%NZ6G!f}fA{^~18YG!I_^OrVD>cZvVikYxzn|k5KwP<4_UeWU5*6V2#~p7? z15Di$PuMsx>gqSwJt(5qh0O^je;IcH=K4j$yKdh85>6Wf54dX>q6fmzRo+_N+$4YF zvmg7B(SD^ZV2uqv0(Mrgj}X8hoJDbr7jW=QYX|E z=hzpmER8uUM}`9&m>>9Rax!~?2U&$C>+ z#e&m*Rx}wHF=VWX3sS}ebBY$`s@hQS7T`Ahm1MW+F2ohM6=OIt%XS1Ytv zP7Jn&WovR8o3^ozgqL2r@SNrAnrlvfuIYSVN>n|$JADl9D>c^?fE0^|mfG|vw z3mc_OTPjL{vVbW&?_pc@crQ;uior^BIQWJNJ&>;I5yn+NMJg7&+LU>+?-bhO^5#6; zAd?qhdRwHm_Khz%E@_bZKrP@EUOyPqJ!Gzfc*t}|R8!;ShckKNjqX+Vh4?&MEzp7>785F}=~GUF zZ)8n#Xz80Urd^NfH<1?3@xdgf^AI5kM9QL`DtNW=Mq8e9l;4|N=*$M-o1fFd$E4P9 z4mMyO`mXA})hul*J&eF(&t#Bq&*7tg5c}pt;MK-A>9?QTG|qU+=ycEvAwI!2i%+Ot zqco&t@g4ROL{0bL7&OB+h*7Wj@mggW4iio9&O%oiI#dhFU{xcrY>4GyH^VUPnEoG2 zVrG4rkPyH0a`zC_g-E+V<@DG1rJE4=hjOvsnBHaB&?2L_`@Er1|4A+Z!)sIewzeHq z4Ht6#F+FBU4@*yS7=Q=f+lQYy=Xq+e`1B4z_*QBrd&K@4B$vU5oNbP4KnfeHLd^m` zKY(fM+XScy1Akx8x;yuUJE(sdj;(WY3C6*#XHX7Am%tYPBsI3L4s*`NKY|{$`PaZo zK14DNy(bs)W=+|e#XzKo!xwK8Gi*(OhU?Y1Lr}?cT4xdimvpviX7MrGkAvNPjzQhF z2gTMIFGrJ&h&fH`Ck(zOu6~5LtNYVFwHHsW0V^8+kULow3;J%yU zLeiS*FY74$A-G>#m|fB;9^9AV(urcaFp#)rwN=KkK~J?o{o`S6sktt!IJfjels3v| zg?~V#1Nbdsn1pO|lpg6vr+u zoANv(7~HxoG==EVYdVaH5woCwbU$UR4$b6pqT;;J6!}qDx=Z6eq{LvB8hYu?$f3?> zqvhkPadN4Pm7UEM7Cp9p|MRdQuJz6hD56IJWY58++g2FSgI+x@TIvzSB-(9j%>)$E zROoR=4;+D0R%xlXrjc78&)z^{mfQ)@_52*tA{*7)A&^1#1uBCiG1O+&4vcRhK4e{~ zc~O%@1Q+aI7|bCWnN&G52D2uofdJd=0oc2ns87bQNddXGkwaPr>93>nGuDPD$?X%4 zYOYGc2;{4mIG^4>gM}3b8rXggfJ0yWPqaqk2;SiG@6AjYlyK3mUKV>e`ALdKe0M2f zU1QiSj8oCi4UCI0YI@_@+1Ar%CrmI{H)6KFjPu5eN{62Pw#*toP1#8DA-Y?0sgkho z(QM_=Dkp?8umzm9H*_V!NNEB`@aOF8qRUFaR*FGBr{i!E7z`yh=>wfkvuvp$Wl0l< zeD{!_fBJ)wR+Oy=myArR=klY;!6v%N(#{8U89T|?G?AJI_hJ7qOYWW@vLmt zAHf=25?0*!lsBYAV8Yc2D=*@4Q%AhVSUwMYLb4q|aL@Xi4{ zK9f@c5SfL)f$-MIsKcP?I~YykyVhFVJx-N3gi|m^$Hq)8>}A(I8F;dZJk87|-?)uG zNLrcW+n72r(|uQ|*m8B#3#*iJ2xS(XC45Md*!+R26L!}_l!}C9{)GSt5P*mRv46Zx z{BY>*Yv|K}g7r9zmwYeS{S_6_l0yzfK`&$7yv>Ua zW6S|Yz<)!F1DDlieCpVr=>(;?S#p|Gg+~(IsF>kW1%!N>MGl^juuIVN{LQD0byKo! zs5If1$?AiXmjG-9~&oi+x4+y6iH3-{+mR#P$3Ad(9J%{kPbv0r_ zsARiT0RkV|bz-aWe9@|mXP3j38kJvpd4~wh{7_@DHQh1r*fS@Va57xjjY$fzT0CZ@ z+(E;I!M39+V%XaL=Y9Ka8<3Js=$VMpN_-A0pfEPi(=VzW$j6`MiQh++G0`(;NzH_T zzOpMp(*Q$2yuXv{N%YknQ~o6z8>D_lRvl_Gbb0w2P~IzYe+Gt}=!FcxffV`1Td??L z(HMV1`+iPVn>cBvp z!+>RpDw&+ou3#z^j}BnpNx$HvoCxch*+MOSJtLg@!fQ;GKaFJb)2-pCgTvfNqhwEN z3@r59+b{rc7riQ8A#8o40p(4+WSUDKd=N@m&6Xt73V)~j--vc%ta$s5eUoR(q9t(W z^r+F%vgrMMl2mg?+OzdFS0LG=28QGpxp(2ld`GOBBZH{Yb07OxgNw}eawXx0Papf7 zUNxO=?DN_9mA8r9m_xPkR=y|I?(ILigt9iN?sA_WS72CnstZw;Z zzIFtW9{2i~tsi7SrfJ<-C1NQUS(&%onL*yA+QtL4UR14@+{%*VG-V}=BPbA>K$V5& z4Cr&4#a+;5Obuy(?j4wqdtb>VtX9|*a5MDEO;W7g*&9UlnFL>jJqu)lq5ajVgwHvk zm8!B;u;&C|7~c&FKjSGwYd=D@bS?-FE2;{)-hLrf>dS*QKe$+MT^PJg?uEpXX~sA&ed*^2Se>yGRkO(y0sJXy>ctW z3hyd>QO#-EG%`yM+F3uoo>#Or0t?T_b|h^jyBuu@55t}2HwaIdZf}sg zbwHZY=V8Y*v^ymbuXAo+WG>zu6JHEqK$^IJ1I)O^Kq%2iy9IPxIte|vNMj&V!UAHa zJX*#4S6#nI?>meP$@Yl~mI_)UcB~_-LMv5kJ-y%dVIUJ&B=SBMWq!%pn@-oB^f1C; zlXr+o>U19C9qgu}MYccX&K+13KS+;}Bk#I9(Kpfj-7RfGI&{(w<;_%Qe%a*3Pos(D zjNlTp_3;zRvhb(4Kn17;D3}3v&r5{_>N_L-KV`Vdw6Fq)hkK3+7t5L-CUqv|6bzG) zof-z}tMK07Fq^e~>;M9$p1~a}6V40yqx81mCqD6z-qpBo;jJI=UhcX$&&K4cYCvxl zm^RS{{!FXJP}T2;{?83LegAdGSx=p(QzfuTcZad0nInPW24Kn`_mIwaZY!{+ zV&#x~r(PbdOmuHmOK9>|7D*$KJj$95&KD~o{weQ%43qxx0{?W62ey9JYM4tb+t zFvok^?u6GA2Gwn8(^kEyikc!xSy$F5?3G1FkILNUPpbyO1w(-rKlCJMm&3?5D?d^; zU!>x@lMRxSWL%jmWATu;+OPOjSt%UNzUz5NFIjopJ-f%4>4;x@Y9VJn83DYD2_M<~ zgWIvCDB1S__L1oqgyU5-sevgz5s@n1JFx~x*2&96|5XR9wh^!s#$E&%wM=gcll8(e zEiF>sWiB|c;mTTXmb@otFl1NolW`nfa1vgQh3Gp+FZ1xn-^P}GJzRKQc`?5rN?X^| zStc}l@vM=LH}FI>>Xzl55>n2Oa1}*`_40WhemECs;oeE<($8`^@+v+fQs5eD29zDX zb)End^s6|>G0JQRnZ%nN)(f>ByyEqYN}EcogKw1g#cb;+tN-i#liDZ6$RS9UOfl;8 z6+Eczo#c%KF!OpK&t!TKeqzb%zwt$2-?>yK28)L?3tXu@+)rMPT?4|(H%jG<3-W-e z&4-ZWtr>$O9QHQ&{fypvC~tNJH*YjZ8G=Zn^yC&(xTi_|t?gW=__MhcsIrX}C{~Y^ zkM;pn)wjToAc|-w9+wjQH2=_+w)n}6aUv4pO@bgzD3uJK&l7S$f)(5wbgkmgJOotV zrsEE?5=7XWNBVeXkEWunuNS;Vn&6 z4ntt4y9U6ki89*O(4r7ooR`;KdIOw9*%qPG^U(y&g9(arB=VoT%7e%_TjD5{iKR!S z+i2rQtCwSX+^JC#atJ9h5&=Ry`gA}&xO=hb0Bw&ZUXQ}5fb#W$VD3p4m|?G*uu zC#QAhP?!_K%+CMp`qwA+_t{Tis1`6x_Sj5h?2^P$dz~kc*P>WfQpX>~AMFemFhh^+ zie*0QS=t3Ilwk`ZH{1=QU_H8re=c;<95H-u8?g57|8rzQ#VTn}U;~5Gk$WQH|9SAe z`KlFTKK2>=MDy`w<(~POks;O}W*v$gpUQ5oHh?i?0vvi8yh-v!Q{H zKP#7@WGBu=;XF_G^~5O5@zCO1nDfUC4DQ~;C7#p3t@M3>pl8G&m|;LzTF+sVybeSF z)+$1#DR)w)YqzmC32e&TCLm3Pt1cP}uGtwCUU9J|pv1bFk*)C#d+G)AeU zN%ifk2yHF@PNR8 zDUBlj!x&Q5DZxXv1h_R8#jMe|S;+cm=GK*cX%K8q{dNeCLyp6P^U{L{!|+ARGzqcn z!aN}EMx87JGYUd{y&Ei4Vgfvc%&&at-Bo%}GZbD?E-jw`AjtU&G zpw`;I&B!$GJP`yyIGmCC4@niI`!fBv&s}-;kkMGLi&%pL8}R=+ zKNnLw_ZGS;KpiXmx%rF~5VJ48_ijWE=20z07aqAA0x`$bneI;{M?0PB!NvNvNXkq1 zn(Dh0_4RN%C`^~7RUdWRFGb55B`|JK2J=v5Y3?!ENHvoP<+HF`@38bwnv}S`^N2hq zgNq=EnH}3Od=#q#-_%6?6=m(kurB9yFQFIPY0oxod09Ic3};s9?imt}4F`JnK{Ngg z`6r_b6L6ajj^PSoB%?MsrocucrXe8Iur9_ISQ{miB6dvQyuXKJ9oEeSwTkywh{4GG zQ+kXQbrcqF&QqqJS;juXlEZmRGJ^3;%QRVd_aDIebreRAqSYj>aI(H`A55ns?vj z;qhpwY0tH=k+c+v{^Ka%yKH*vz^cXM{^939QGRKq?MHtfl2o)e0Yy)Rfz6eKUt-&X z<+9D83%+#ZZC>4c{p7AW7ZB)uLs3Fz17fV8a&2ftlhwAI`{PTwb?c$$M2l_=!KIO- zo#TWF1dp?j6wEh*-YP6Z8I=OqqL2}ThiIF+f)OJWePShtZHi^8P_=F)bDYnoss$9u zNQYc56i3nE;O$dSeq(t^I*`Pmv|7_ACunk7Li}O$E$9zzexhW3U*f5h#=Y5xtu*vj8u2Nd&ZS ziV${Y(ov}3xf_7Nkcq#(na~Y}DdVfEs>N6*oYhb&-RTbnb1;qcAC-i7n^J};_#BD+wQ38Hu2bRmAGO}oIkqyTT)=-uxZTB3;^;2yz#qA2(K4e{kVRRH-siR=Q% zgPIt3ZT2I3dLEoX*@F7LSQsW1V$`vT5%f-Zs2Nm)E%T> z;zFH{h}X>^TC!GjUpWtc;sA%P;NR+#0F`N}Qk}3sjej!B*(Eh5f~s zFVs;Op*)V=d!g43K=dveQP)89W?F}=kcq@cdN9Mx7qyH7*9ElJnseoN((6arbAr!%TOZN21FQ2a^IQMFnG z4^#=J(?Uswkj#oZGAJ!C@ERjy!IBBAj75{QJC2BPj_)6gCXBwNjaMfC>;>qO=Znl$ zI2^{VdnPG6{lQqBLjUWylM9T%hS(xgiQ6r*0A9+s*#5&80W;6`0i1#Q#+uYry$?LS zrrK@KqDg>gFm#cD@A9u6n19xQt{5maO=ZK9s45#oP|$%WlL=8S%|w8*hi>4aP^Z@nG0FSwL<|P3`r(9hyG9ytc`nVIx16L{4+h zkmp{z`Py5tG^p_Km7+|i-Od7xH;&6Isu@P4ewfTeGGXOVIjFnZQC}Y3>CLfUC9EtfdiIKbG-h5FkcZVeYyLA(o{{rr9=( z6Q>(vL(r~vE2yL#eSy#EYk>0(mWEZeYupKme71V)=T8x!=d4n2o4m^yc9_lKrA%O2 z{RU4n;k|9j6t9qEGK!QUL;f0UEK9_uEDfjrefSQUXL74|V`(njWDhZ*CV@<7F0@H@ zv7pYwM5GRaktWOc-KbN`ow~d0bmsFjoo3jmcqk2{wi(dXHMs;v9&bR7_*}aY!B<-r zEs>#k{p%Sa`~#S&WOu-x93xLv&|A0ehBDdS$>xrIMX7_3?1x|#S!o1D&DL0o-NqEs zG-i&qGq#*4!yEWVP%y#eccCWY;O!DmZ(0Uo$}BT`NWN#yex$=3?MDxXu^x03i&^Jb zZswU1|IlN~LI<>h?dkxE=Bvc_YkaHQCp(aIAf; z+DmC2+AL^oQ6mtHyNK%>>)YS7G{(g0P42XE%Jm{4NK)o#qeT$17%K%oik|J7^kKQN zEPtDDmH>OfF7AJAdQc)%hYd9yU$spU*Be%^ybChSoES`ud< zSO~~EfT-ghMYpb5$EQN4W}v}@7FSBN6tXT*DaHndTC z(n8qdVr7!16zUHYX3O8%Omp(CO*!kBzQ7UEB?E-J;I5BUGv zU$u2Jw3@9E3@+p#c*=7|8zttT;H+&elMPH;AHe53{dU=zzN9DI^#-^C0!BUCA=N!AGhe6yJ++wW>T1n|Wt zTAt5ToH zk`+eQZamtw0+Y07a1ArZ-5QLgd0+c+)F?n6$MjCbkNWN;>{bH zrFJ`urzi9q8hHoKK}h%#9bX!o}K(b?uM}qVZYU0 zG@qTH%B=QXrh7hyls2e(c-oy)y0wnC+W85?8%WkOAp2SbA*Qb|&h&P*X7KdS0Q#uH zuN_81QLBlVnK+}@o-;%PNg=%PV)!rPR#mWt`G_nY2xl~o1(wa~H^%LDL27;6tfe*y zJ#^tFce8%ta{XpEpn()lCi?ezs`N$PJH4MGK74jZ0Uqt*tLK7w`5|`rGxkMt-0m4V zzc*oC6`STx=}tk;6Rn^cWeyx9)#HBXK$3+ zEx1^t)}d#(Ek3Nss+bq8zUE?##YWx_n1%el*T`vkllG_VHG6|6c~v6}40+(#GpPn$ z^?wJO4t#=u<|ezCcb8L7wVWMv2vb?_Q>;o!^rOrV+J2yiT-*`J0A&5oyg0#f+T|0| zfRlT+5EPH`mU^xZ>^5pReQIQEdY|30HsmV0} z$ptkUeP6P~fCOV8eV^+bP#P-6xW~gJjvrb)7@0rtRnndM7_t4PVt>Mri?O+p!EQPC zGWY1KhUW{BElN`Lpv4OBtukGd_9d6r)Ki;@x)24%b}9oz73=GxkpqOoI@dmoxVJ>J zxNIeQu1nGq%ar3973+Mc=D}OgW^28_2M-C$&T#CBb(4MVLPb?N%irnnK#Sj1-0K>~{7xiP7E+)FN8Wr08(vxx_np1FoK1MA5%~)C(F6EI;xw zRfOR&yTGYyKTHZ>P28PC?-eY0t@^#pN=Sb;qE*fnA6o^dJY@)@bBI$Uhx#t($KkA9 zo+$~sGUKggtFH&Qaov*k{o$J&u~=7GU7MspPi4rHD1{40ls8iJ_CB@@XTblm*q7)Cb$sP6?{lBX4E zX(16^90K+un8?&4MDg#0UJZzr6U}W}yd!0cmpl>t{jAYIXtulPWWlgmgtc-WF!cBA z=s2dP)SAMXhPOsxiL3QcN0knAdA*&+()nbF-XQ@lBZb*Qds!}b7e!OW!?soXxtvi) zB0ev$bJBAcFpRRA?;&?~5Yo&!+)%cX!b}BT z1c+hYMj~d>z=Lc0QcI9V&FPnC@-3(2C6|fKLu-g4|4G=07G*0lMe_oAn@3Os??JviVQAL#8;||d%C^vuf3brnhX>e z53D6Zs%Iec`_TkjDY5q?NU)?4k%APFUcEDt@#8FV8!nGk9eSKYqAD3lmSd)y`fS3Cfut4Q91C-VJX7u12 zwb#jU_Sx1!&8_+utfH|f9&EZ_9w6;AcxnbKMi2QJm)RL%Uke6e^fC0pSI~R3MsKBM zzu`x0%8fMt@w`DkcsQCE2XWe|GhKT2>IyE0nRi-;(J3uWF^9@C*N4VF+z$Gi;4x|; zHuIe|4mH6|cc092NpG22uioo7D0oS=`W^pn#ofe z#erMkTUdv;QV71NuUnF*8BM7D`lNQ$22xmpS)@4*Jg{E2YMV*kKfH2Od7JUlfI4oR zTWhGFfkJHvbvNXr=svqpHfF(J2Qsnz6zg^NG}w9u$;_zzFX`rVBx>qdXN?b){c@e% z2aG@g;e^W}GUBEEOA)y&bWZ8wUyC($4)m4mcLf~Q^K(5>R2A@Mn;X4n%~hSpV~wwP zZs=q2mB7=hG}$?EZMWpUVX_2-X+Gz0X)YZR%U@nQvY&^LRM+2fY)}!w@w{P$(3d&~ za9+QH9Uw!eGJ<(8#R`AaWVLR@%M~Xn4p*Kmb!?4Y{q>&6M*{d1wLaBGYsSM?-iHqX zv}TsI1IEU0z+%oq$xnV@Ona^woH}NA3#>RckpxTbAWh2?Mrt(@zhjFif#7iVt|1Z@ zYs*Sej4kGtc%CX8(>}BUcOOt}hrXaRvdgIXv#L-2A{FGY3(+R1l@yxu0f& zcAYW%0a3Ex{rc5i0Sq7z_w zx6kD^7*eCH8af??r22C)CEd<=Xs5tWZ0^W?W)UjM&%E7QX)he9jzJo6IrmYLy%F1= z*e=?FJWDmCC+y@!=C=(}L2B?Jr7N|0XnzEAN0CO845>qadq{nGaSq)#x`{v$7zDJD0r*9w zdvuss5I!7|k7sY#jpb#}5j9oKzyj1hPCM01!8f2O zKHfK~5?8<$#kPiT|BbUg+B7KWYh&tCECIgwH{D^3BP}W0LV=GzQdADu1!@B}v>xOC zz>^;T&EtdL9fD8~{?b1?v!4GAo8id*rD?T4l+4I=Ei}~BkN~X!pzO*^3kibj5Y!ug zXgSJvot0(x4ZG)=NtT=#g4a1wR6(-nVt?2OVb{KNx9{c9@FM7>5uiT!1czGDdStv0 zg2qraTQR%rYv;E;>^+9ZzZdX2UH<_of@_yKL^`Epss)^%?4j7fFrWX{=<$}K5%7Ia6UN{gTn^IG-rJ4QMaHT z51+*~r0CL>sGMF>kbM;2av+x;(@ig2b;jn7+Hav)Wf{-^CTPZ$IP?sob{Zdh3B!Zn z1lFkz4moBCgOK6>UdXdk_Y0*_0;l%gy_N=Qv1&XUfQwXOhtQ-1_xv|bZ1>;qJqrm~ zk;`d`%jkzg&R&^B2dPB$``HTgl~edF$goev_OMCM%=fJoyxDcI;i2Ew<)eXq!J8yR zmrrI^drh{U}&twI^m6J;Lq@U0>nz63Qo{ng= zzrV-M@e|pm`odv6ntOQ?oC<2}o0l)_d6qQ~otCv=1e*svQqSvfxcU$X0Bil6qjQtm z+%7*cgjR2-`D6`@iTDD1!btelTMH)Ptr+y^-g9Xq(UTSfBrUICnALoWn}_cRq*0S7l#8FsL>L zKu~9F8SizWvd5o~$gF^Eb!zd9%mY{zBoug{CvkMM8Ns`?km2>`2%Lik=5@DE0MKy8slHy%61-ys=`pMyw6%txf~;VVlwjSVwm(AG8upp3E}4)|V|HPjSNlq1%T5xxInJtYd z-Ikria$U~Y+2VIkaU8*<#Ri=|pyYWrQK|xq@(%;TvxXC4KPdaA=z{+H!>jY<1M+<$ zHcdKF!^iGnCwAYzebM*uRUlGCZk5B^NT-k65-{Er%pJdD%b&_RFHXMCoo%JU$klv~^~JQy{gmF1KUB(R}hHlGaLcYT|&?a#g5kFB)en$vL&g z)6Ubv0}`Xz8*k<7$n&4XZV8L(97#hm=8aR-#V|;Xj$Cx*EV4%sZ+3- zD0_O%eg>{#CaON!oOc4qxk-iUg)_xKc^wA57;W%_s0%(r2yn7f-lj`Uo*G$bwr08Q zpih5ib@r2cBS%9UaROS7V3g-C9t6CMJ@;_+5U*ADWOcju)YQ`FJn6HEdeYY$EIM6v zsI~WsAzLM&Xr8iEXZMPJgEO@*tDjeMTCmZDL)Yw~RS>ilkzPb}k~XqVCm{92r*bKZ z=6Lo_GYD+$SFoAzU_nlrw#-tv5&k@K_sAhSg3&Kk@R%|$2Y=sgO2_{BW(ABv(6n0_ z;7R3B*a(ukFgbiHkfN&mL2=;In)c+G*P2uPpFe?=KSieZ!do{;JdMScPR3oWZ!)t~ z<3O^h%C9=9=b@|v2^$@txDgU(m+MT9g(~AoKB(-idyuX!i84%-w7D*}Dzw!buB#s6 zKHh&t;{DjN`6%g zZO=4srpq_Q@M$6Pu9+aTtT<$ z(qKr_x()@>o7-Q%rG;k9;8WX^W$T|Yz%aNM|IBI-^M~CKTveZ|>jNWYaDFJ2Hei&D zHG?k05rg=60sHQ>*^N+AhPo{VH==yyt49E%#j0Ynryh%-(qWo~6pOB7tCiH5F9nB$ z4|F){PM5M%;dG;>G)_M0vfe-KI;jVhcu*8r}6FyBU!%f zp(=0JVsTy4eE<*bwZE<+-JZy@6ka8lwgUrl;Dx&XAXo4ue$mCY>nKrfjkN+3;Z)Zx zB!Dc+;rgpz%Ab*&MIjoj`g)Vnq-Gx+sSKVm6YL}N$4nWJ7NLqd6eX<)p0x>$tw6pC zhEV654c0eIL%+rduv2V+>sAw8L2|X&-guRxoxiw?vyWajj%6Yu%lKL%&TyN6ftrGf z0RViJ(jK^zpE87l>O5bfJ~VtbWmsolW%xK3#XcR-pkb!2AtO;zMs%2%C8_L@rA!Fx zKg%7-ox7<(!nAl*L&X%_uMA;3D%M_Wgg6^FFHr|!f#a|Ww;NZ|1*a`rxmLB9kD#%p zt@u9W`|RDPEHH)51u>L!1yc@PC8;4*O;unjfb;U9FQa31ct_2!#mF_GE!1l2SoD`I zBx~z{a4myI;&D48&HYSu&&Xz*AoP+;opTz@uhHq= zxQe1*r>+Um@y6=4UpEw`dXI2mwIF0c+*D$mNv@uLeuH`>IVpapBn1hKz^-)iRd0G12`0*g_@2iGo%ZdI6Mfu@9|Hg;_q-0~ zMm!J>M=@eCxPn9pA$&;6`fYFTX69m-&I&FKzrr#5R zT>_u&+V~8?5$*t}j@K}C-Q%^?JO%5;LyXlvv1OZM78Sj{Nv*?>c|x{9j{TV)u6}U6 z70(hLx2qZ(Ppv5qT~r56=R;B9-iydKVlkz2&8FR*Qg$JBbDOK&VkcP;# z1t*0qEKesbRS8Z+jlZzbb!C|Az9@E4MuvYl;(I`A{5hscFkTKNHUNg%HC*RL7R+7P zTk{M$Cnjvt&dQ5IXH&Hu&o1JN2A&$1*gXNo33-ak5%d=Z)g6YItXEgNT9Y0PAKry} z<4qN`5dGe@>zp={4#DnSIj5+@?xwivifnL8` z1i80HJQ>3w13G>hS%Y&#-mnQ)q!5GdLGf*I^w#D%puw&#(U=hry0R3kH{>o7Kabr>PTM~i4>&3IXYy_qO{R@-mX1F0bao&N7#Y0VkFGPP z2`&*Hx2|ebb!M5zu>s-nDnoh3-YwpbRqNG1byrg#EjfXT72!IUYp17?nTbmOyKh0y zok|V;{bimK-%XTAp2B-(XoWo4k{Z0?-rrp2;D5f*7kCX*7^Xh7Jap^T(49`3F)9 z(fESPmP()F`OrFf&2ioJR66|9HS~mkcr%V$#RE%oMmVN*`9kmTxlvH}1atqwha7a= zp{y8y{!1;VAn{f#b3O$ z*^%(WS%$+vg)OmNUYSaYS*7#rJEb6%sp_#8OH)=n-~_*<+|!R%~(Scwrr+ zce*Ez|Dk9=49Mg?_7e)35CL`bMjfUhHS>GBWwQ{DA^!?>>emkh7y^MMsk5Yt{i6lu zv^|?&=P9`RQZk26EQis}Lm~ix?-GU@} zQPDc^f_(ww5JA@D6x8}Gjgk~3E6^@jUll9y8-mLl6dFj{^?^@t$Kw)#ga4o9U7X~U z$i7=LG6fODh)qSzQP7|pQ;r{;xNT2FI#$ZoKmIhiirQEeB3yr=@N|@I0Y!ugihavr zP16?{Kt~)9Ih~IC?kv?QCjZJSEMmbjKF|3D8VBh-Ub)naLzERCro8*#-l_zq=C&R{ zN#SVpCoqMa+N<9xG94nC7t6QysgCW;O_R4xc6;0n7ztiLIkEiR!hN*ArYUA#ky@Wl zUd6v2L*Ccj*y6S5l z@l7!Ons6Rg1Q!B!LpGIUOZmt;OCY~!%79jUuTxHRb;jUI2POsfD%tG#&e)Y&bkS^j z`nl%h!zH6VZB#w3I_a7nX;&XJ8ZMpw^O5K^JqD~l2{6ej9QW_w2DM zF{3e<@O|Nd)x_28)-T($q0WzQnF9S!@q&0hrk~>6%EkvZ-1f=PzJj=KE%HVzy7MgJ&9{Jk#DP3q%o#ZDo%)wq+pj11S z-t;)L{k-qx6#x#Vjk`_RBYhXG7p9k@N^+QvRkrU{)Z2JoKx1< z$0|d7rNsjf+J7?eENODymFoxjQVA)j*Uw7B7LM|`7@2*T#19x(`>a_%B`p}g7ex7HOLU33J9gM9~LV*TlP9+ zTz|e1IzX2>Ky@symKzfHY+{tcKA396=N&`$Jx^sQZvOAM6-x))Hf5Hh%{QrD_{9w6)a&odVthHgg=UC+9Xn! zo(*W}0PDkuZp~nI!)uz3sdYHQRMk%;`GDL9bjNBHG)ruO20|r|>gAzWqz6V6`WsaF z``4Cwe!N{r3Ry85g=%E@ZSEDig`NYzKeX2|qMy+O4w@4V5$*3r_yv%tF@oKc~dWF0JndnQ=a6fsY*cQ zIo)W(smd-_&#<{`f+XlW5DvP;qcKK{8Ny(qW{LW%g#X3(ua&GKzHTiEZKSo^wwoM{ zPwrFNVvs@a@0YvKLXdmC_6&o7@P`k^rpRuZ(P2oc0WTn-+Mv_b`&#mJ77?)7Ap086 z)&OnA8)rZOP-zpJ>V+iSusV^fVeg&>?JFN3o_TE-f((V;!f`S;UqO=)Sx;=~2K!ne ze@(?8Rghp&tXH$&@* zip?CYQ2mGKPsIjG~MLj%y1AMlplfYe?+>bbShE&V>i zU2HZd`kihC<1g*vmyvFg=ygS1Dp0EloN*C9As^`MdrT%*#PwA{k{fjN^rcB?d#reU zTg0EDa2@$o^YySqRj@hPF!}DzYw!`_1&sq;(uCVl9n8Arj)MdX;EtY#&ZC_l+HS*F zAVI_Q!r5dKxqzhBe}S`QlF44q{!ttEW%&xL2Zyb(ah zk|BN)nTrzWu*?(T*h!_aI8?~kh*f|m%O$)mGk{j~{Yx5_ywTidWp8jO^q+Tnm|5_c z>As8SZD`E$jL!D5{XCUQJgxXP+65xnCe+bEqJhUh@xZgFVpG=+HiO6@$-h$C;7^KKP#ZuNYj%}3Nc<8e{W;b8JQ-lbMbO*Gm z+Sy!kUTs)^8TFxA%0tBH3s6TSBxT~VHSc(RcGqoh(!~jTKTW5ar*&~zq+ZXB{U`)& zbkU`Jxg1e=5*_C`IW{)*3pEf``7O_a=c-^ibb+%8h-g0Kz(}VCprzNp9|D+|dNvLW zr*@FSw_*SxO1mXN24m;$1C0<$sz}<P3giDl}`)p zD)P^@u+VDVh$XPq+|UuM(Pz1Adw0*qYpjh~8Es6xyiY?E=9oUp7yX?|PL>Gywn6et&EqdahJ$=O zW4yG>I`iNkpA$Xo?5VU#A4=TKY0d?&iuv^x8=ax=;3IF=al1v+{mn+rpLjFMK;X`J zDUO>cXbP@IvT2;E)p&3uJyW{d`?Pz&LN0n-I5lvZhqTXIaDg%l(>;uV;7>qo95#O6 zPGCQrWFdP;{x9V}YQJ5-*;Gp-d>h2s!x1%s=5!NSx3a+&zhfAdYMvekh3AlT@rGTE z`Ae(hZ|Q~83r^QW)5Xf4?n;bpKDqM>!^U$FAoLdVK@ypFq*vtXjuoH<+->gL zSD4Xp7Q`4NQYN!l4Jx5(KTq6-m;zd{(!KenYlhEsivNr)x;jBc? z;fck3>48Jp)A-=Hq{U(po9S8k$qxPZV$zVw6Fw-(RLJ{3vL1{Ki8EBEQ=V-zl>>^U1jgr@&5e*=6lg*<24k$-dmrqD1IE3;3GMAwQE0+Hz~Q&)+@wneOBA9mLI!lWcY24vO`E3 zTmB9}vUy_#yBn5kqNZ^0^~$z6ZjLeyY-n)P$X|)i2HJqh{bREbh)sZS7Jndnha$d_ zQejSr(G8ow!lRem=vrdvhMPn8PFM*4nAqHw5vamh1Z7L9P zM>EW^4|gwA>7ChLQ`bx&#=)2T&IvzA#J1D;v}0NouO-*)ARfR^(v=J!66czfbkpDL zw|DGv+iiWWq*DVsod^EX$Z9SM=VmYkTy79UT5Ft)o8|5G#?w-+$=M2+G%ba=8WRnX5^#ln;H*NZVL%z#K6#Xdr1aO;KIkw_ z|L*x|a_pW3fSn9kx~!1Vxp^K~r0icFYET^~RKAa=&p9NHEGwf<3*B>b!EqMGRG>r@ zf}%I^Q;SX;3U+~>JNfw}Lcpdx9%s)qOL!QRxv9<4?7M+TIIFUG8G|@2JmB)T{#5V! zh=BX2d>PNhmfTH8azX)iad$8ZRnnpz_Y6&#m_}2^swz6TH|cDfjq_T=9r@{*D8I;q zt(YYiY*V$#YH*I2+=%v-blgDvN=y>h3`r(jcNiap>`~@Qul=;cran0hjx&ElGanwc z=Tl%SgZnwv6rN$)0_R5H_U_Hmtek~?0AfVvoVjDS^|ef;NUON#-Cp(5bH<+9@A`~% ze^$}#yoU&D8#qS7^LXLTmqcmHW?~-WC1qX{WPNES-Z5E|)L0ID-}r|TKet%WUaqlC z!=T=T_h`eQk(z}dq0pOXJci7-hz+o1O&>iT!5li1Rj3N*;5h2&uEc$qKJhoLdz8Fq zhSLx(?lvmU2aa>B{CCC8a5TvcM}j97w&C6qJ$Wu?UZOVIhVkI8Y^v7xdfv~mTrPcu!-wK`2lM-7E?mJir231V+jH1piv65*%#Le z`gT`~LeqUY!dCOFJvxp5KaeRONt8YMmz6-IR!YDBrPoYiwAzYvWC`W4Cp26pQG2Pq z$%4{cKmlY$Tr48j_$fB+3f1TqEWokJTVvUE?V`RfRU~f5kY^%h(D7xX@-sXx%=~RW zMnfuLH%Qw$MZ=6MXVqneV9e)-{65~x)_y0iP9te(^YR%BfD2p~L$8|RrfrLfd>$WO z$45q2w~Q$z-bY2%^ZS2aN7NIp}YhNe$sLIv?pj znt%_;V=sUlZ3$sL4Ru#y6rL#R{)w1=76$DJIho+%z{%CdicnVAp!`OIjvG%$V1kiR zCrX-nhb&L6{^rVZ0KIWR8L9@%jo&z^>b_%4O9xu*$j-quS=QFQ1H7u9wCtu8go@t6 zk>0A{HW6vx@37C6G^-=-MXwP(Mt2K{-!h@}23>(%!6S(_q+t#9v(CfXv5)8-DN?U_ zA)y^~c?Ieq_x{q1A=j`)h#ii}nFwsx+AVbibrqPGil(7Y*9+E}`&jm=qepP$5rtpY zhFu?sZCXo0yrj5&`o0=7EbD0y#mN)sIlq-dtBTYLmT~pQBTjJ7`;2~Drm83+eH+Jv zJYFQdvO%E#R2b4Uh`DL({yUbVC(?<_r+wb4dX$;5sc7!o>7E^E!;WbK@CXWrB=2~X zKSltwgqNFoP?H)0RVx(F20V?25zVwfKkSie=WyS`Q*}XJy1yFVQ`ow=CYp>c=jtOjqs~$- zFeu7afo)9%5yXv}6n!zH+TKn5{$hrpD|ubDIu$DIMCr!AYQZ&d^BfldG+4a0wgS4 zbkaLI!!6~vSBBs0$mV$chrrk^VH8vKbTU;Sn@N>jff7oK()oZII(Eq7SjXN?E92YI zX+gs<4IvV*Go`wCQ>k>iRPs2aZafn`Tkjhn8dEW(?AK}bB3>yK6}5jgWKTEBv;Cv$ z{|1DLs4YL=NaSh|q3OsokP4fRg;=d|;zdRy6zvKeBr*s+MlFCF?wDL-qcQ)i9J9#j|j+G#M^FZhpg{Tg3&u84l z{2>ec7*{}uM;6rxx1QwBAHr4HA4=U;)ukerrMh9r;!y9&KCA_mT^ho`KL&h@Gn#9! z!Ffk7IRiJw!)JkG$C=+E46|K%cK&bviAjZ|GcAHEr8-tH-7)a~e`b8uf}gM!@pcQ$ z&JqL1?1~Y|=BWg~Gtmh&8MOR@P1HrJg|mtpql0^4B66VnQXA-4-B4e!|60x=Q?-p9 zbErh))VP;0KGinO|o~bK}J=mFt=3<}zQv?B_p8b!dg4{4khZ(rZTRG#p?zgdIZI4f%i1jv{2>8(tC1T@*JySuod|nv8_uk zAUU1(?5#~3{vAy5rW_mQAJuEU%z3nsFziKu0puirVh-;mqnxtJ!0Y5m7L+beSnbRV z>_F>9m`|h)oJ-9m#u6BZSY+TsQTEOjRSo!=Q^9S{$v_iVAysDB7g3E9O#uf^yhYor zkqfqjIJ-129+K!P(oahC;-M>vjwm^>vVg&{bOEKEhuo7EW~*>(fpi7u$*Y@wLEM0x z@7;k#f<`G(sSSw?9XN1ndzUb6$K4;^EKN7=yG%~+t5NHo1? zN{~iqT>X^u8csb*QePt5rNIKhnqE)*x?4r#&e57nTbMR$llQkVQGzHb~n=VXSH9aJ8aIr210=$Uju)dB>$ zJh=T8GN?L3zeZoTv0Wi!uN5A)n)oN7)LFi&+7{>s3?5WnlC~J8Sq8eQCSWEPGj}po zQg!u}{Gd~>$*`tf_evx&-dE^;IxjPahz*`Ao^Ig@ zNnoH>^bpxnNH1Bbchr7Rc-Cbjdy&h9(U^%$lN?d_kEITC@uP+zu$=<3CYBgbTDQ&u z*`_yR2h*lMP{I`KriDu*ytcu>qk!`%B@S@-Xz9ory7J##|4f zec_Di`vm}5woFtcFOfIIz>Wy_N{% zU(%8Uk!MDYc7j0X$uR4R%&Lcym2^Yt)C2x`jd0W>nNh&d@|@a?RD|dHBD^n9f}wKt z->JR8a4z>Zu?{gR| z1QUXH_O$2ZN;lPrm;cD+TRnn+V_uOf;*ajKRmW@UQ6>@ROk!7N%399a0r7ejXQHMN z^1S`T35J}+K=a+&WlCV_QlI3P)hd3Ikmu-|@fU6~2qkWW+`zjFdH^^-))pSIKVSpT z)$u}f-~jm6tK;Bi(FayXM?l867Jq<(J%~xC*s(Qq;smq zT2gY$tRqB(J?hP;IDD@72f)x?k^yu*Tzar=vu)#FDx6-vMo{T?deynr@*uj7=Q6BR zQlq(XkIE76Sf-f&J~v)4XSP0q0HNjo(lQt25qn2h4*WPJDC^eW#qK#f%&6o==Tz!&#HGd%BwSoiJqD)!2?)1P8N`R^Fyz z2w0mhYA?0cr&!6DltJzes!SettD4=-z9GDL{au!W^#rxEBQvVZ*rmdYzH+RJsz+3y9nM~sS7S9V&UH`(Ob<1}uv=5diD_n`3E2QnPb?FS#Cd^_QlT)bu zQsBT)mYc>S^E1Z372hYKNPVswNQlQOJqLXl`FMCpeSm+K8R;u*k8N%<*kM?9LyA() zOqaNbQP5ZacM(zvVHs-sH-Pgm)N0qGbh--s7wo4c14wp!$eV{qU)M5q!E4S~z^s1i z7Ho-*w00rL?GJSblj%I5i^n}|U0s#R8xa~IBj2&K-=X^6;6x>z7cU%Y3-<;TiCHfC4ugm>!>J{jW zXNY9`c!)xy`&CAW&zW{7K|W13)>~Wpw;Ucs#(?$#XMGB{W**i*X3u!c+@fn{cmLaO zbb$f0Xhw||+t5voDmtqj&{dQr?5yL>#bkx`cCxJ#B^eZVWj`>AU2=U=dyn(x$+q5A z`*8ZPSGHUI06GWQ5A_H7041Qjr#de84Rm#xU5StOYAUW=U?34NLP&=K7;?P<(|hE6 zkvKv<_C%Fy zV;alllpJ?8GJ_msxF$$1ROrsg`;@2vKusAoo1?k30VZL0#iv*3STD~`(w!jmhcp9P zZRWXx-MQ%GG->0(*LNeNoh&!fJLEbJ$CTVrZ%;=A9(Gqu7^7Ga3eDQwnmPq|_4AxI z;*G{JP~OAFpKVJ#cBNBBmt0P&THS~ibUdrKp$h0*gTiIJeE!aGk#L3v6JPmPJ5Uuw z;uMji=@+|9#`llFX35^yO=tfeV{bQ8uaHJ{y@y_;V7yV zM7tYU1e|sa+N|m{-nKx(-tnL-=oaDGRgOb>$6n;i*HZVEoqTwaFRUr?D^q`oEaEm= z$hQa6^SGaMbq17?DBFJ((3MZoLr~>vDbP{=;eDt?kLfXq;{N0b#vFg;k}U^LXFCQB z7DEp0xtOVNM#^e1YjaBH$Cuhq^84`YlZ_WX%ViIwg+kvJ1U4lW;%ddvySmA+!_URf z87l*GRv>i=!{wLcmfA}ev}*|xp-s1-86@N$x+XY4Lt?{^VCD(jX#kH5$y0K|f$3+4 zMQXE>`>v)1M!UD1HcKp~djj_nb@P;i51kNSoX2}~3dW3Ec8b`_XrAy`Yo^73tbP*q zQPflC^~Mfcp>#{cxUz{-r9E%iPmGvYepcf~Y0?9pJPuLn4}q;~rFu~RCykwnVFuuPHIA||vyl!Ov4)dvYs ztNxi#qxSF|6)_APkM{tw>{ko8{lAqKR#!ik<6h~p>BP?B`X-MR#B+IZ>&}C@XKGAatM%-TB5#=a47M!2imvSi4&^q9+f&jH6!0 zR?8n`d`-e9#)kQ*gv7j5}tTb-!U?FDfu(j@7>GieV^Y( zs9h$@z=_BK(l$e{5Ut_-ehO;*_6-q@+$E%Km>WagzN$1BtFFY&{I@xTB(dIvm{}@3 zY4Mha4H-vyv`3Pg6mVG)rP;Yv?q(Hx4cDE1WM0k7_js+8GQiZE7pz$Wt|G#GueuRC z66kokgyN>AprOtrKLwJ5krZMxO3r)9>7F??G~2O$(HiLN?|45)4Lv>f;4jxf{9>!G zfVd#$gM$^5$!iIcY;TE=R}-Q^tNh%@`r=+22jE7P-p>kU2QIL&NwPyjTp0ax%uX~pmy7BEY?QJUfVgP)>WE_EHZDAb-C^%+R(PUU76TeldV?cZ!+ z3wz=|zSS-fP2R^u8H4isgbn84h3tjac<#3yFn$AQZcRJ@&Anw?YMSDcIyUDsY<18G zVLDrxOB1gzT=*x~BX~0%_wB~|w75A0P^!6^b>Ot(1hFo1CP{olm2#L#Ex4&hrmFgydS=fAAzpBl*EKnv z8-XhPd?pEPfC39vJLQ1)8PT5cX<~Z@349{(nf0z*GlhGWyzcL4Ly}t+=DL@}^)zkG zaI?;A)797=`FoA0dBy4~VtTf4eF0@%XFtUkPvppO2~DGhPzn6e2T2p>R-*ji71RBI zoT5+St(kP#1I_?Q5xkE_TkI9mq-;}1UR4CXyckRoHS&i{s#|7 zrMhB;$xJWR^9?C0hMr2tBpOFUHL9W05k(oezDATIP1M|h0NujAEyyaw4}U$%AVshJ zg|Iyz^4dv7fIe-zLR_sGik+7A5f%O0J+V@7V2~?l8x4sOEJZY|gE$?hv;{bLTLn0z zKC&f8cM>E+?YjX8l)<&i1#kSxmW)9UI zA-M9-RGls7JyT~&fOCJ^$i%$9@;1Z;iM%_5Ua%Q5|!?jupB|qOOc}h=G#=O#irAZN=?1R$$>X zc@30)Nz-Xs%WZ}O0nkru@6D4)SC6A0TcN}HkmvLJYmQHPF6!5AhRQm;PwQi*_friB zr5*+%KX^v<=HGxM9%Kqy+Qy61Wr^M{(L4$J&sDUnv`uA+?ycb_n!h|j)RZzeWH%ov z{)2#IS8{m(LBot7(**S;L++r%UXEI0|CpF(%Im6dRz1dDNA>BR08O+1W_g&-3Na>L z8Eg3YsEjH&gj7SG8T=5_P%3m$u-Uo=!U%@LlKu7AKvP z{pv)`vt_bR;u;?1&3zs+may34ri?m{m`Pw#ux#Xwrz!_I*qRBExR$Du9QhX}6E4bs zYjMaABZo4TUT+YmB4sWn3&hFMl)$$_hW@&_A;3cwokMdNUH!gX-le+X|B4<`Ui@RD ztmJ1=iW6!$F&T$D)fbFZ=+!D5__CFY9Ira%p&47Pa>ipt~=MS9SY4AeJjyBTpO? zzDBQaC++jUBO@1n(Q`zbMq-~cc!(ZCG8UvIdRV9rlWbd~Bte0|+qmml^{E&uoU-k9 zS2Io~;!%9a&0Hj}6k;AwTLH5c&Vo1!V8t=J1RlZul)GVRpriNijaz~{CUf7hI5)$- zA4*`Ed~~g7nbbR)G|5!a2C2s!Z%{L=j}BIBl2f~LL^(btzWgX;G;}x|)hHOj{}M|+ z;Y-jwd}fF(`Pr(&&me&$_}neUGL<+gE{R&0pkKH<8?va5~^Y_L!J zA5EMvZbF4;N3qV>$QPSsR8CnYWjx z=jQ$xO-7c+4K|%z65hWjNb9=e)dn*1N89x)QUN9%AT(_+n)r`DQ+Bu)Sfr0P48vDZ zHn~qN#l;tO+>BA?toI`CWO{_Z=7Y4}iTdD@SVai+)C62AI+6TorN_>nlcTXR&Kj}Ee#J!PKuJ>UXBCCRMA?GA(lePk}W^-Vl*L< zctE*ey>Y8-Al_^jV+!4Cyi`r@46?~oFTg6Fs@T#zuq7LNAExjo&I z#c33SR1=twB;O&0S)zzF>?3|yESaF!f%5Ik2Nae#RSJ^^A--F_>kTpqe}R!CwWa^3 zU{MAM*|f;!snYiUk~vSTy}{`^SfQtSK;nGkm~F4%v^c9M*+N6*%9tDq2T-@@@>nC_ zuZGU=C=!zDR=Bt^{AU~r5*aE5S*@<)q@D(}vpk@G;?^=Uh<)7;TaJ_4UHr=|&C{5?u7s6y}3?wIC*0CSQEMXnxXPud3KYEgi=!R|jq5&5)2vf|H`z zvDYH^-;J~cOt63ZLvP{hr_zdIKwu&uwZA{j#I^)cvFtQ#h`|HNPIbUAu*xGX2x~L! zISxANDG5uUxAM2Mrh4vDhL8hpA$g-Wy3C& z%fGu)t2UTxLKeYv8Ssr&o;8S-Tcl?T1oHFo! zEv}?dDnP`MB9c%Dyj#?-H65m8QK&UA{+94KC&1pJbc;sEy4=T4=Mc~6Q)8g?K>s!B zX5Dv-`VCAA8C-teQiYp$Y$d?K35K%zJ#^Ho?vC|jJIQQ&IQWiEJ-@L`CJkloVc*_! z37sEI?F_fS*U9&;9^OF~eo(+3c~Iod$6S8Rw_1=){7 z3uD>G2E|2DbxnQrd#G1r=zy9HzeX0*zN+)iE8RLpok0ht2@#aZfXZvTVjidZ^D)E+ z6O0u!dc-T4yuM0VpE-Ezk*5A_q{~7-HT$Ya@C1AZuVu~c8cBrcW}_(@zw#j*y$;1vHGtEGnX0|^f2SLc8%8L!GBuE z``V_5iIRQqwX&U5S^<9OUsVax4P}(*tPB$Y=?9 z&ecGF@ObImy@uYV9CeR2PkdA*o+|rg{e|YSoENzsZ!>AmLPSs!Cmda|YoHOiTt?rw z&45`kqXgKv_v<_QlEgb{1jSP#?yh(>qI4w9nB0)%Wk2RxgxgeKV;$7goQa%0Bp zB1U4h0{R3zWp23)syV8TY!|14KVzZl9ab|SbKf&XhR~@+ypX^>9V}GfXTe#j@0Q7e zP5kE$=r#A_dD}I7lam*F{oBR(C7waH1bZ?c9(tWksQis7n{S_&YBuSO@!!SA-7Clh zjaYgc{hcxRG*tj-fR*dmwN;AVfy!Hr+J>lJO$#a|0SZ&-p`hwD{BD-n1RK-yd~VKO-|3p7Rr{$*)5n0zR5CLG#+&IXaL7?-#MtG11Xw6WW#FKG1r@XJhe(-PkNf zo;WvO=3si(1o{KP@OZTJL_@<@jma0`*zJ+dF2Nrouy+>#%e)7&@<*-_LZbK}jn9MG z*cvYK9b5l;v;M??&=LJ;;luH;kgii*0~iGC1$p~Wh)6&bcgf?0kBwri?fPd9EK_J^ zP*H|1u%>5fq^hhHLF`jNi^Rx0PE#%v&% z5BpQk(Vo6ntQQOKaYZ)?I2#z*US+a$4qcOps1EqZHkne9Lh0GS<=})KL11VZlT4$o z(}dflGN*HJ8N1c_z}L@fR{qks`hx58HeYu|Sd0Jt%nY)O5W#eVU$$8mns^K|BBZpq ziy-K4>ciu8{&;RE`WMJM1bb#6J~4 zBlx)YFFgjvO!)*eSPt=MMq_90bgu6)e7UJWZEV}RR$^vPV=QnKM}e4H&gKc$8=dB-E^Z`8rKa=R5*5;>_@rYf6|;qk}I4=VS(bN^^Wd!s1E`! z5M!_~E$lL}Fhy#-nONb&8bv><{!?GvtgP9>BY!+Pi{&S4lK8?dpLs&p=Wa%56K0|x z)J-y&W1Ygit8Lt(SJo2Os$XaM6^;ENzLYtEQ*}@MBDc$2AZw%Zi~luI^_^8|uPDAm zFuy^a?OV1$AmubSr1Fc|y4;%}FDgKX9_!iE3 zJ6VMygqJJ6%w!*{wjm^|*}(GXTn694ba8!Q`gmnutF`X0s8l;9DHHz|T@g8)F>`ZGJFC4{37^Z&7LypjJD~hodT%iq<6a`@~c*eFfl$Wdr_~c^7 zdCLa6Q1Hwi$mU>O!)7;74b; z5DRV~{Qm6KU#=ZU{P@4Z*iQ%tmPIn^8lXUcHbCCgfN5k*!@pYAPOG?{#~xG@AGsXh z5>RRV+nNH8>}hp8gM{Lmp@40so=jn-5&89XL_P{=!B4u*O|b_I!ErF5TPPffJkFkZ z>wLz_Cw|~TsSvp-BQfOi3ADXtzU;|*H?jBzkZ@Eu{rZ7fT|wi8pNp#*CmZ9(l))(c zLc6?gs^B|>Y=hgTL+!Ei1ze;7A+))%WKUL(KhxTQh=ZHTK9Q3kPAfvO z5`nyFk}o||$Fk?^z89cB#+UKRN_=**pRU`khyNwXR0@bTxel*=aSlzK_1%P$^^9*Z zlh1(_QuM((hp6m6{_kr0>HHV8!;SmyMu3r}0F)pCtQgaC<&%bT4?qCu?I)QtOM!jp z5Si*%J5A}6Y5PSYwl#|XGz}ns*HbtI;XGvzXdVwod1Ihiy#=g+DGZYX!cst?mnXa? zwfb^vacA+F77b?;(MUcXQUDhKc=oNg0pyRD)Lk6ZlKbpcrG2u;N8i3d$u5vc~p@U-3cdZ7NnVr?- zP{uD*!skFLNqn`dRiE3a6OWXv!(~LUf|g8e6}@O=`eM-IevL6-tSJ|zmHf7z_I=17 zQudJrs7BFasv(wG_qbuGj5IOMTJiN++NKRekuzqGqyLe$tazu-&gOk6t6iXtA$SnpHganLs*62D))02;rDHo5d8r)Eg+YGgGNHPFWs794WLpgm z;yv~2%E8FfwER1b39|%U^G=ZsmDA@v6=d&K=uo&OZ)V}W8LLUuZpz`?aweMSBC`UC zQ+mtVeoJSu|05;!Zm*w?i+F{a+BKzX)FuYKt^*&^WZZM;M~t5de#wpjO;)JQjK-4Q zTzZW@#5^){p*7%meE)#>bz<^9s_i}}|2^)c_!v&F2Q`9NDD!d#waI>#hB2L0*%|Gf zoa5YV-m@xR-zLHlO>V8L6fkm!LqB-=8CQrJ&!9<~zn$8US{e-etdbp9N$k3de^HV~ z{)L`aucS_)6tFXct;OXMFQ)P`g`3z0I?lqF2zvJ~szC?2qLudn{N6AnnZdJ!3%cdj zHp%1?QG||td*KVceV;+D$txxzjQoS8z2d)-$0~$tCuj{s>GaMs6#Iei-t=i-lDkhM z_V#S?SmEc{!#}QeGYfR-!uE+yq1IwaUC4W96%Em7e~N8v&9PSkByyTxVOiKp7P*#i zN~>4q_eYFhejP^l(AQVq;$F^xO$oMsM+F%){T&_)P|;oRLr*!1=0x9@O|qT}8CPeA zzXr;9BJBQeVl)eH``FDk>b#MiN4^E2JT`-@;}Dky!FIZV#)8Hu%Oo2;TUQc>C{pq# zm~Q6idB=yf{;^&_=>rUV=SZ~`FwpS*_iD2^;C8;KKnyWYO0e2Y?8<)hJ|c%=Ad@+Z zRbY;1Mn)dMra%5+UK%C?YlecvN+d5_xJA$3LrZ8cQJSldW(p$5RK}L~kEO5mesGW- z-r(C$mmNYZFT5_Vqs{chB>qmzJ%q2Iu@KFi!B@Cb1U^lX>(R;G>m7GuyU5;qfvUxk zs&|rtu8|{y){XIc%7hxn7V|(CNsO=Vn&~KsDAy!zJ*Rr^Y!xf#!Us@H9g0Bh#aGW? z1a<|sIi7K!zl(;#0X#H)Ej|!_OC`!IqP{WlsW|KAv|{IrPhvi^6Euzm(d3>g`UTi$ zX=9F-*T1-Zo0LeH7lb;}<<|&PrJdsQ9Xl_HA4l#zo)cWjiQre)O<6I9%#D%WJSxcG zOV9l#lv#T&EgQ=+Ndm=!2d-CkojPIa_sRY7Y+vibg65xxxajJ(f4m%7;Ql=&=8zIT z6Q>OT6;=r!>f(bCGmPdGcdaN2z8Hu-QUd&I%}`kLIuV7np^D!y3ty9ctmC&ze4yQ} z%K$G`nL@*oY~Kkf-qAk8W_Rd-T^Yh6z)Ihp*yfp@G)d=WPA+5#LGmB}qW=&kS%DmN z)JGjnW0N|sg-Ls9GkiyfM#>li^Y1~FWwi{c%OvnNNI1J#Xkh_1cOSlm@dtj~d{|j* z0*@W9ao`&nT;-+ArJokRtWMDPJi25!+Xa1%e>Pr`U7l2?ZHJ1qqCgHq0%yl8-O zjO~>1$&h)ZMSxOtNk$r8*T+BgeLh)uo36#a*Jay5<4&wBo71BNB^WUpR_u7?F`6HR8x>(Ww4QL~U2&%^@T=cb7chT@S(4+pcp!~(Seadc&7gH$;X7a! zre{d_99!dXJ+WoTEIzOqXhcB*Au%7U+CgCCe2M~Ztrw7db0|m(>21lY)Kq@AvDRfm z=ZJl!d5*(q<1Of%X4hfViR7nb#h!YB^7Y=J&2?7HPDx#uh35d8N>KwFKZ7R54%W?s zT9D_fgaH?!wJ%^$Dr6(D&4!q00Q=#lkkDw=e<4`{$08Y9=?;;rp@Y7d0z^;5c(n zdC7f>+epw->CPS@xT9{!RzT`5G%I(yr)bOAK_yOKLDO#G+Z5~%ruH(MzL*v{_jcp% z0!(Lv7pkY}Dgr}TmoI~551FJ}+Nkp>7BY_eI-I3>7P}d}E=}B=hAk$u(9g%lM+=;m z&=k(pC}HIjw^E}Y)3!aAxK%wkzqjS+P-ug3A6L8PmPK*L(k)vpAM>3hZNWT|C5ew# zT5qD^ZCkt;u9@`pz7wS1gs$+z>|KNSunMGQ*bC;iem6@QIb>O7X-Wu^C05wH;O!$% zxijQkLs8ahPw?pI_DbQ_Cm2x?$H0|>5DGax7P=l{y{6to$75wlN5pLY0s_1 z6dXxxJQ2(hh(Fzch-Q}s?K0UZ=h?LNZHvRA*s6l*@Z8{wM^ln-@>9xXu7Ch=f2TY| zRuL1}g!xhILTN4OuIb-}_==#?%7!XUrP(FeAn@NgjhIs`K->&NS`&-&3l*ng;EIt9 zn+`M#-q;`WF7UfeuIHeyIbynAD*H!Ri>%As+(#B`$c6L)sKzjC7megt+(hEE`C`Yx=BVcxGZX z<{^#07{&BAZKnmYF=g2zz;i&A;f4D*XQi`cPyXt>f~7*f_ulO9=4%9HfMER7soUrY z$P=&0|B)1AN0@9L_c099B}rF1A|WcQx^nBc=UE8vtPN^+LJ5!|6vO@oNg%@b5WHk0 zX}?~F=gj+?Yce)NDvqev`mDlR93}w}n|6!Ka=7s{BQhwfEleu={DJ2G-D-uwCu#`tKrF`&8i%)djd&xi62rr>9 zoo!-v8V_YTcZ8!K_eUELPZHeJ8DD`tinVUCm9A+OhZy^nh~dq{NSagmd-Lg3rNIbv z1`ZIgy9`+B5ttoY-sN_+4t}_&7ZvdT{S;XgZ|` z)J5(aNc-+4Hh^e6M&r)2X(TVi6;nJ$Vu3e-E=|}OpEOMz#lzPk#aTTTL|B$(uFk8t zR*V_X)mepN8~d?uO7U$@efY1s^3q}!l%;b_BO&5E*Ex*(lW~)m)dD4sPfXVQD+9MwSM$l}O4ULny0bRuq@bF_I+kY(XfR~s^Uis7$ zTGhp^0EL^ah5vkWJ@j*mdsQ4KcEpR}q!-q{vWoqE0aPSrs&FVeu8DiDMdha>Q(sjZ zOnwEvN8*uZO`}gTtu_IMD6YOtM-&n2nKIqJa6&o)G+e{Me>z+}(h>xXXWRC$nrqzr z;w2{8f~hD@%v`RLe$JyuHXJ4DzmW!cGKpoKt~R#@i3MTpZadb%1TQRck4Qbn)o<`z zL5^72tUorFekGGDV)vUL&dPdb#Q)K$&mIN}s-g58&=?rpNs8n^uo_~cIsZcjIrg68 z3}k3mRA|@)>Y2bF{V2`s!?`e#t5ocM(#u2Fwso}SZxky9AAJgtf|`v5aw{g0k|N+` z1K$q2`6T(4LTDiV$XWVaAg8Zh1aJfPmfhDFo@p>&l_aanf`=YBN$HE-Mw@1l@93%~ z^#%sCq)})5Ik*xi?*OR#6k-_`btoE4%GH=dNrOFQ?f?vOd;lQWu%2ncC0LuIVCD{p zglQi~ltyWAnyKC6sBY2sBbrgbvUS!d<5Fo){*=F-ib^S>XSa*;_45k;O)F7_4QjEO zsEd^tr$}|W3`4?|73OQ95E~7%Ot-&Y}d_SY+0ovN8t#D4A z2YMmKd|SZ@7^oT6RLFo1DYFLZx##tz&Jjo#^ksZ_5X0YQRI3&*#e;)dk4!k_uGMKgaK8Lgpovul132^9l76doMcoo2(gDs)vMOig96`_vLarjM9>I%sW8< z&ow-j(-E6}?M4c@&pTpwP%7QrJ16hnZiE2_n;&#aDe1-zQJ%On%_4t`pD_Zbvx7Z@)2D7@GTx8CL& zFhNnk+&G@7Bg*~KWw`EvmH3X#2<{bH6jqP{3Zaj7o8boMLRWX{^3savjgdH$G{bl-!YGYp}>yE z#>?EdBr^bPCA>Qp^U-bD1=#Ie-GZt!@v?q@Pp&!=&0=Dr_533j)$3pYT}^)i zuS~RPfZ9aAvoxJiW-hZ@`7}5v0HAncmxo|(_7Zbq4whmbRUDA!d$Na{AH4k}IECkc zeZs6SQ3<@eT00c1IYK!GL>X*1KuWtc5f$2FlqR-(JBk#yVUg0W?xHSE?b-RJ64DKb zqAc7MsW}m*6F5AOg@+GpZM3H<|6m-DaVX9<5}Xa;D6oUZ(=#svqPlZ+SR12f_OYpl z60ZOB8qq%ej&!mNnyTD`7T<4O81OlQK{<7DoU~`UHp?NyRmAQq&V-9U237%xZ^$@} zgK$B1-BXEKryNfODRhob5aBt=FHezLv%(sioR3TA(_Z5_urC{Uvc2BWqI;Pwk7I=u zna(esZe&ZGe}#Y^fe@l-Dz!s4L{8NPL%5C&V{MJz3ThNWV-+%RA~vdC@+PQ@hldk} zy;yo8HytPtJixX?Io?gRyRRl=UoCIjie651;aKs{nyIo#kCBJ(ppQJMT#NSCO2%DcOn<}Dhz0IM6%2b4^O#Q zr;I}_XLA3&{bNSY5zf)Nt{nH+o$V8trrIBtrgAd$Hx_NZ83F&kco{Y@kx#t-|K33_ zm3p%Rw~0IEnx#YzQTaa<+*dMZ^tw{l1tP#1lGeAxX)wY@tO6DN!;)hzMhGGsqOn(C zV_O>xM)@D*LtJcDQOkvHM(~$48Oiz2O4*c24Cz#peUe8ZGLxg=E9=1x!TKkJ`Wf>t z!r0GYyBvcnyt08|Na=hLIF2YikeEw0Cup%;Wd4I?{&az`WVCqy(CUk^=VYQ=xo zv5Hg?cdrJ{P#3FzgHL=0jpa~L^a6v#E@LA6KpcR-4!$6fWn^;09 z_|}7>Sr17V%b%{=gdcOFpgU;8VA-}kX%Jx)yJK9)1;2;~uQrsi(qMEn-&s_Uv3(lh zl;HMrH-9y@j+1}fVyf6Hc@NOV{CTM?x!icjnK}aN**@quJ-=WTbK)awVXhAyS>%Qg zy%dz17K0>sp`PmSz-yHoIGh{9k-LR^wO8**3#nQRZ>u}6X|dkkg*G=WbFC2O6^^>3nXwOh>yXG7D`p$kgIXf&%XU2O$fE}HZXYVs zBNp*IR_SACWUJNYCR_kqzD$ZcC%fjHr76|iZ?V(_QmU`Sjd>$^CQ4$ktA8+S_HE^b zn3nP@Jc)q<19r~Wq#68?k5!tjquix+cfU|g`m@eJX``FGU|_Es!iacTHxPc32TY@e z8NW8!fayxZ!4S{X6xN-EG*do0?#R#>TU$q*)ltm{9}Ng&CPRz3rqIC2Zz(jwk%q|{ zwtt9}q=O17@|@}nClpau^#Vwu=%z4I!PVn(55J=Ko%!fY~G#c_{7@ruW}&uO+cHweh7_huM_FKJ;x8N%Lj@@dsv>3 ziVX17gxUZTtY$>DNYGqDzu4)JzPX&W4jV&0+ZGm?|Lhu5dJ(GAJKXeH(~_@|DcV2j zlENOFypetB7i_zB=HaZbU)c$D<64EjNB&bbbq;6`C<_>KY{Itg8~yHeHbQN-pYqM5 z*dbVJm#J_qHe5s?2jV_@ba97Sf~?VT>2sfy_c_H6fiNzZ*YjM^DRCTo3*uOZ@?oA< zAk3}*ElgBdFFIYYQ(pg{!SxotHG$QtxMk0CzNLBt86hlUpw@3>KRY*h&v-cvwVeVE zH=z5JH^kqIrk4j|ht~V9j?*x`D>$V;WOQ9vzt1OjW28(@?+-JwW6WkXhjQ<{010@{ z%FZk1Q1?I9CjdbYNgKDo^hR zdIa~N=zsoz2IHXNQh^#hB2wCj*h9}U=Klg;U#W?|>eFg~q`96wUggMnyB910tR2Xi zbQ;b5m|#`8ix)$1hBzF6-=UB|61iua{{WbE$RH*o1Or??%I@57OFW%Rj$|Jg6+A7w zTr@LoH`sysdMWY@n&%LgTS;lI1}9y-dfQbrYZ$x4d<9v2xf@$#;Z9 zJ=Wp>d3eUoaEw>j6kq_Gi)*`hsF|(F1~~f>jsTfwv&uxxH5BO2M6*vXf)(zf>!v?Q zP&9(LNp~z|Ju)p~TcNPNm`X?3&;T4=O%*)kta?5U*@4x6_}wKX8OB5_IhU@u>ocHd zN{4XO! z{y7x}8zcGVGnI>#TJi)Pg~;ehH2Dk|_o{@Lm6d3Trbx2~}EmX9QQalYz_ zu-=0Fn5_lOTsr4gHQJVd~(I>az~6ZUlLq z4S9*Lb_womEe~Z)${q(pnq8Bl{tG)O$Kn0R*YQTE>zsf+0>X;1{zOaeHY zuBT>%@3p4o0Ot_74Uej`>Q)@CrgZLp2c@#QAVy3};t|RX^wCF5E^dkalf92HQ?5np z+Hb=GE?Uh-g@dHJkWM{nV41$1F6LF;=k0+iplU#&r%osN6y0EGhEG9&!m!-WCqwxn z5DP*7dq%BEILtFz@ilV_Y>Tw-V53v9q*VJ9%xNUG(y2;d=}1m>hQys-jvhxhRkS>5 zwl_PC&DSsc2mcAr7G5-Cme{2uYq}7bPB!F!HJ;%gcg8cC!>Ao@(4YM&i%7H;zak$R zRFXp<=wpGaaEc0&j%DQsNwU#Dn}h7OocF}?8;zq%(8IeL4pG^)T(b>3z}{d!c&t_O}zEdx^Ph3F)GUgg;8O<6YGkkjBOr zMDwz&kRu}yXn_ba_d9cJAExN?Qg$tzwyJceyv3F6;|Ejw5b=RY!gE}p$yk)59OJ4R z=VI#YeRo(>*|%sy69i47s9+5aDt2%Xu@jAwXi%)!1r-!UKxuYRK#dW_-n-5?WAAm8 zl7N6BP3cGz6N&**nh0;LeUcCqXXbbBd*8i(JpIneKD(^G*IIj@Lfm{KdAGUdRmIm& zUzK(ZHaYff_b$EpgP)D4h@6}LzI7qH*P)7w=O&$RRUm9NjLSsIW<=uU2V0wOeA{dDVfjmoyLkRXTWGO8$h= zN3TnLhl?+{w!L}xdC8!W_k?cNYuni_uPA)FV%&MlSab7Emh0Toy8H9;d)<5Z?8_eO z=Tjei6N;Z~yK{D5+kSsozaBNd=h(-78~)HfbN=m;z?}NyMoz`%EB&XkXgRlV&8-gxkN%iT`JV|cZr7ifsz#u#n9aOTvL-LFl9>`s1*+ovy-+gXXXW+ zZ5ln6-8daz^;fUj%I&pTx`Lkf#+&rsXK-)pUA-s$r@pv+RWH>&{IWst?Ne<`etSDJ zPH#h1$m)y6diLMTr+ZZqsGI( z0teL%;!K)<f&)GEl($Pe!)wwcKP&P^%i?BNAwQdZOfijJ3ut?UVldI*qvim z#Q!q0_273K5BixE%q|n%K9_LSk{&T*dcpO|W$jxyZgt@6kmEF?$b0W4U3#`(c-!&U z>f$l0lK$N2dG62%@3hl>QqKgOKJ0VZ-h1z_3GZk8b$`gykvsd}sP^lgP`Z@)vRy`~ z?XwP%b2hr>TfPa-`0LV|KE-X1Hul*4VaA7G&CsCN71x$*w2rAV9Jx8E|K7Np-fcS_ z_``qO_Ph22uk^31I==hatA`^VMc&kr%}NZ&-&^0)-}{PT-tG5o_Pn~eLO-u0^TE8^ zDFGKxj)*!1e@ATc$fqgm2DY1f;Nj?!URiN^y7R+!jUDW{Df!6`&htyZbu@H68z0nl zr+oZ+gYA14?$Wg0)x(0bob6N}HfZ;UtwU4i!A2bah>hc1+Ub{f9}jSs-R*u3}A}JGN)WCG68Y zvF(?$twkg4BPZA|e$Na$y0iDFb{};fTfGdMGQ{9z(&!Er@pV09zg9l0Tz2Q?5UH70 z<1TrZAnk!#*G_cLH(5FKT|xP{ElaW|#p(CC!1~ZLdCu13HzzSaGS2lb*uJnzb6Cwz zziYqpp4ytv^xZN-c%py*IUn6N&if)=elF=`8{@+CsDfwmQ-cgrg4cZfm3J@Tf+R)| zq~*Tf<<*|CLmr1Sx9%;V(^~njtZ#SqX-FU4QiD0&7QG!9>-&tud6hJxa=&!J>qG03 zhOe<|^ULZ(;o^1)WB%&=$8)Qa9f7<$%e#9g@6%XQE?FG&=-T@C<)MeR?lg0^ryLf`%@YxFL{{SD&yASqc`r9^-ejo9TI07F=`(%w%%)EN?ds5H#hFvS^=-HF{?e~| z?DrbHl19s)u6%Lt-s!1VICmHKSn{Q3|CJ9Wh83-M?XjU?!1{~cj{Rq9#!XL(OV*FL z^Tv7cI)kVyQ^z|MhxD~to-@%fe}c)tQJ&rZtagZA@#3ie3E5fSj>|-=tHw<^ysp*0 ztROST`8#7GUWdLtyJOn%k-ui#ZTPrjREML7)-8U#`qp&Y?ENOU!cB)3g~@XcSXmdk z|GsGA(U2}ytWGxT<2rQyB)eLBspR-a`BJAOFE_eh(H-vPmpUJd9a{Bo=N5Xnyu*jA zZ4Y7?^#j|T5ZOnaNpqfjr9&v=$(y$iGS)9TKhMvt+@yTjxzgxiFVpni>0BBtU*6vL zc+|(O^L;N0%I-aU!nDd6)ce9Uj!t0wuvRa-2FiAs9TW^Lat??O_vg*Edh+njhS9g! zoJGN7-d)P!YLo!bU%lHa&<;PIO~1N)5-7G+I+E?goW-P_A$cy7$Q={xT)sT^@g zH+n;V%fSom;!i%gzG2|K4WR+g6P`Mmyh^S-V&}a?&r)~(?Tl_C+%E08CF%4_j7~}P zl!k^$U9W{c-0`4uKu+8J$6saj$e5FvksWpXV^QqG!QoGOj-Rw(YuVG9sOW%YwFCap z-a746@P^9F$Tq8tIp#&1N(*9^Gu!l{(qptq`yrpCTll^wofe4N4(k*h)w=(} zycMsf-WRZs?qB|N2`eH;pT!*coBXAhtE6*I?vc8JT9HB9(PLb{F1lNvk|g7;)jT~l zvU|+HfB;RMt-lT(=$BS`*IZP)gHFrRmQL{!S{ycshN4)EBV)9O@* zZF;vPQ!1~Yv^JDGXU=%CXVUnbW7%8cA_gwD`4m`o!DH(M-ErZMPK@*FZC?D^g^@~cRH zd*Y;lIqzoQUS4izb?u0-eeNLpc6(dz5A@4AJJx>X_NQUj3~AEeChH_~9|*@@%Dfc! zs@pWp^S6FKv^r(8@mJ2$QExX)IT=4l!0Q|9K5o}k{~Tc=!-E zcKR@9wjZ$Pmh?vd6V*9um&UFYw&6YboH2Go$Jq~329Et~U=cL1;A;0jX?+TB$e$LB z{t%qn-Sz$AM9LHJq(Rt-F zaid;}on56|CqI4Akoqlo59VrcK5nMPT5Sv4dU2Ld%-D!_Gj{IY*!Qir&YU$JhG*}o z-m`t(+3AbKnzO{38n$DXZ!s8=_2$LVUW2#X?X#cb^M|3p^8PTjkda(I^|OI_M$4L!2rYs!peBQ~6}=o>TqVnx7N{kWRR zeT?c$B^ssCq7AkUyb|Puo#2)Bf37f*_iHn$h>p$MP=<@RF`_H$U++lJYM@SD2^Ld#WCf!tWL+^su_POnQ=UUJ*CvJ9le{`YQ z{G+FKe>JJs9}{%5BV8-TV!}<=%Xen9JJ!=IP-Q-O}1Y9u*0Xnb3dcpUp4B@ceTqa*ztPM!@YW64>*~vSo3?4Ecm*~ z7_DN<7cOu4^RMg}$FVgUQ#jJL-*J<<4;i0Fy_@q=HrKiB-3~4Wdm6emc%GUt``e2v zhTAoBwD;8IZrrp$Q?^3BbkDx-cV^tBFJqSEZ3FXc?X-R3!nQpUE?>RT z)fYbYwxGdh@0_smRp*Xa3Ien=|9X}`=22)&1bor!vLUP2@P;9Fi7vlJ$3E@#+-d>; z_e_@ovtvY-*Cuu`w;Qs>#`CSgl8I;NBfJVKQZBd6HI2ME|rDM;c3}-dj99?tJ$nE31a+^>nvM*?#w(V|cc+W!~6{rLX;`g%|ox z*^&`>Pa`?)9Ix)}&R1*a^qy)SbuLuYXH+-0fUZx=V|#s=F?2!5sVAC6a~rdR^*0P* z%(~bqqVz!PwUV6nJ>R-=9_-YgHP>qXgir0(?)VUUkHzt2n_7J9Hpf4%{nzV0tPH={ zfj%GpY+Njl1pzxj2P zraO6-+g>lT!Gq(^cN*rIb&#{wX4Iqh>#Yt;dmNasU+Xu^oz-KxM>n3kWH^m}C5k0j z{J1gjPL5;Iwm;}mGyfFyeznh%wJ5op_Nu=&Ew&hS#MG8Q-KW*f*m-%*&OJ^zYxTal zcX!_}=Ff-aoW0y-nMu9jv_*9;7oufpBg&^=IvJE1Hgt-HEK?dSjE;PL^~w2jOFs2J zxp|D&^Iv$}hhM%9-Z_$2vufv*o)2uQo;iy~YRq_5^Co3q>GMDTI(NDivqRg9y%#P_ z$hwx^d1^>e`zwRSW{wSDEX(iQ*tJt$dRR;J}uSN z|4vV>iS)bQDsltY*>i-($Ko$H3|i0enLljX{Anpi7CfIjb#tE)`=<_>dR51g;k^08 z)AVUihwn<7T2;Y`~$0dhvQiW+B163y?k?|ZhhwI z5Bp|+i{9$C|2TcP$GBg*oP6XRa%Wlmsy}?Qxa5BCDBmb) z&f5pJLzYZyf53TtpLCvH+0ZL8C%We`-NNjUyF*^;SXXw}S@w3YN103`LZeQn<<@N&vJdYwfmyoZh23@CM>8Q7Uk{HlGMR~OIy z(75n6_{9MO54twvcYMB4N>$7U}>xX%N&>!)J)~D$* zZoJq1HZnEg9@BoFbHj`Pv(d-C>9y~wzx2~Fj|T;JZ){wiHhG=R!>n%a4deIIo*VeM z4Pgv1`?AV>^os>+Qv5nBpCBGO#B)`xF)ew!%=PV{xJ_)c`pl{urY{_R=~tUJct%Ni z(%wfWQv7F4I&NGP{(Jm}OJ%nXirCgJ1}^(Y)a-pW?!<(@==399y`xJ`{?&?Q;CG1I zYLKXPFZ&)d@B10P__(C{_ne@ z^5l&HaUQ*#Uw@kN_-v1Mk!#}?whOFk%V}3oe6ibEb7`8J-}e0Ft;T*mI^7}t$|Zi) zM^^U=?TEFOr{s0Ek0-R>9DStf-H4AjI%I3rIoU2bSoElKRmHLcpET+}FuMJ@ zz1M3-w^{RY&T`@6SL++1JKBdl{F-RLTPo;6-!rwV-{n@)AwGqB`sDL=MK9~uYJxR< ze_h{ue-VG*r{9ity}iO{#bNhHdqOYYinvy8eQH}tkLuSqLTBshn*?6ya7@T6&(YAi zd`a)kvQ4$e+Xi@e9DArg(0Xg1E&I35c-)r1js9iQkdaXnO}4O-k(;tVq`bBzw+w$ z-&(i)ewLHhm?ue2vrd_AKG}E4Q~l>=`WKHFroUSh7T8t$U10glX=fInax3~cN)-9{ zTYa0-f(PBII|j8D?a3(p|K) z9Ns_NlvSj;IPv-xz6+bHJJvNPY!x{9t5zpQ4hg@|f!=y}+3U8k&I9$uh6mRf%ozNa zj^VOT)|P?X<5qpwoF5zdC1}O5?)x(yB{4FJW_G{1(Dl=&-=>)OuJ}t<(EZ544f$P- z+|O$*GTBo&Gs!CU%79*O{VK;9`rZrJVaPj{7n^S5+F&QpW1M3J9NMlu`TjmjhmB^j zBQK?lT{v*NU+;aE_U^$4pYQE0S(B(=(Em64`*Fr&hcmy`?)Gc2IJ9)`j03k>D`#oA zx7&T=@SoNh{v93lB8oC?U(t>2?_YT`Y@Of10lDjC_oKRX-rzIs_*;V;XHFfmFN-X{ zw7A>huyni2?iI`I%*AJa*}i5=$E#gMW6GCrn&|AHPv4yuckRo`S;s5-wSD5pYqfuO z&vW5h*7RTt-G|T~KK0ZxvzWSIfP3k5+t{(2i&u{8SH-$ zSqCQn@@pTHJM)Xyy6^nMJ^OL^)8LPi$t?4pZ42}EgnK`8x>Ql|^tY6x!M;MnUk+Wo zRAjGjuYa}&?QrauSDP2s@77xoypp?n(7-9bEg9A0NX1jxW6AlUL4my^ri`C>ZL(Wg z@$Q1pFJIbzt&w%VUC{O7*r|W*ACh^2dFxE-$|$RQ8N+tv|53!>vr&4oPr-}$Zy^mY zJ#R0&I5M~JfXUGde_U<*b~xioy8$&fhOFOQo%>;5nSEng?(b%GbC`#Vy-UC7_j=ts z+U0Q1%onrlJ{)uKzx4b{y8a#8db?Kg_1@iTryE2rj!Mt}>#|itpvInnwUak567{?A z>kw%>r%lUOnmv!nYB%%=!-=u3&80nqW}lRbyY;{Qunm{~O!zg?qxDFZL+r#PzujG9 z^coko8a`35&C%ZfmhJrM8_hc2Jb!)8%{{LY*h4MPc?G|bB;4gWU0>0)ucuT0><4!) zbn833%Wur9V%_zt4=xUT(`oIc6m8C;oT6T%Go0-A@w=3^IoRIfdhlnfyhA1xxq~`; z-S)Tt-QD=K`<@Njhpg!B2eD!zE_8rDi)i)a-I4wuX?M0tDq|nMc>FnZ;U~Yh20^Qj zPVJhx+sv{kY)Lm;r*kjj7u7`U$)Ds=_jFSwC-|7>WXAae%jX}xEFYP?al^!Adk*|H zcIAL@+mL?7y|s)NAF+D5e0xyGuiX}(T2XOT`Xh9`{_e3uSHE zIK|7)@P;mqI=1nMsA6=NYdZ}xPq$t8Ed9aO)-O9ohZ#*z<9Brp4sE>mIcnw5_*E|7 zE^gQ`Wbz@i=uSBwR%Ha+kFK4PO#ij*j5Uo?-siM&%hCmPdlLs)BnR&IJQ~#RSoW`W zLzg;mCLiwj`}^DzolcBc)HuZIR$!M^r{<5e7*Y0qz1-P*t&{sQkJW5f_hqh2oxGjB*xoCgyy4`` zc6Rq(>*2Yc?djp+#$Ms%#di1bW-oDec8AWc-mXq=t{VU(d%6>JUW>!r*-Jg#ynm$-Q>UB&i+A#TcUZ0O_U3&c7tadQT8 zRRq$ePvP25m^op}%<)rZvOV0{gO@q`4)#${uV9bu;LKj?e&?coVsf6@k2v0dDpmV2>X)`IL*R4h{)?*)A(au<&m zOr0=i!g!=uy_-sXp?L+L$NYN0T)fzM;H&%HJFZ#6tJUBAOa7t$`>IWof4w~>P~7|Z zGEY>y#GMy0yu+6CVdB`rWZFKN4|Ze -H@in~V<#PWaeZdxG`|vY@KdW5 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�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

?be2~n(m|8 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

vT9CQIX`g}cV3O# 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

yfI+Z#J!NuMWaI zzLR8j2l)MRW1HGsY2bkK9>;G(AMW@Tv$W*{eA8uQlhvLQQq6T@#S1*|Q@+U(d6_hF_~NzfK;ZlQJzvE)qduf=wM%aY-=F-u zB)A@P8fzv)UzVaz^xKNFjh#VWwsrfYryrAu~PQ3FvfNeO-?}W|BgV zpOeO(=U^7B_So7tp*&y_hc1ElP36aCp{n(_&{0F-oFU=#-Q|ll{@-@(QVUL zv5ok52A#V5l#w^L?Rat&e%g1-p9MY8TQbTjIo^B(UtF+QStG?DqTeHBLV?cYY6bBt8T!i)4-X@-X^sbd33^6Y;raw96Yo7G`kz}8_#noA|Xd9B!eP6a~k+a zIPqQble6$sDW|1y{fQ+tBB~4c?#suNtcfGY5gRNHSoa+B8ELUqk?4!>&m3G3S&E$J z8ot%Rz`xdqj`@8_f)Cmd<30obV~k(*wGebfW7?6FqxtYnMnY~+L8p?vJCXEf35DpV zZQK@g1$eFN?w!mT^dDzl=Y6Pm0*z*;zaPV#`xfmjtC0KL%a%VSs)+prPWx%tt47#; z)htw?SN!R(R1+(sk^^a`!&i|nThCW!w z8=@MaM=qJJ3G*3)u9x4$JA~Zd+V@-3!%#2Nk6LW2kS9cB(VnFX-7K6bb;(M ze-GS&{~6pdR9{aahu`Th|DX@Q&so9ckUH`c5@$oBb>W*-Gyi^vzxH>h2(=)GNp3HD z`@2GcN;dn@w^e6AZ@ayAn;~$9tiZ&vECrlr%P0Tzp)*G7JkC@`e;i336}BvbuFd)N zba52w{_&pH2tDk5a9X_U5Ab(k$fKBvapb2e_6bx!WDq_V_Am$3mn?;`1~t?Vk>zK5 zYa%IR&@58ab`X9_wiUzFlu9N7Il>izW1pNAxFHT*%jICC#;_`Uo0Qy$YVi4*@Ea)u zdl13ej*MojeG<@F6to9A`H&~qjJ_6zzJBs)e-Za- z8c8jcP)%F|f0BLWY!UF#7mE-5Pf=%fotv>8#ypCz)UvvruTj@`t?-P({Ws9mU`5`d z!A~)J=wu09@LaFuP4KMVrh1{#L7~J`eMfl>kOPS+y8-*3Ve=Y+(zPIz&Eapcd zsgCi%cprN=botF|As5qqDa7^!?!$vqZ0_rr#BsYs!>}Knod2WkG8j)t%fXYBGw9ph zgRJa2=%=b%9IieGPJ7p4xdybK97xCR-L?rzZc!5KD zrQ=%w_f=~=L{@^AiC*lHJdHe4Sz?2rFz~e9zFWJ*koRdX{&`c@cA<3ys=`kXJb`6D9j_EBf}pt=k5VpqqNP22YyMh+B7^^(x@^ccLpd z*(GCcsY8A0I_kLzpDDez7<+<@#Wr+Pk-ME5_*Co+pVW5${dgtlOhL+OD$m76h%+^zUb-c$G^cYKWGt8l*7t_V$e9R*#^>dNxp$m>L9jP*q%BRBPK({Hbp z$es0i{;m)tlF;q z2mEF>YQzCANC>?7Usu@qcqk{(6ncA_mhrtG@bi`}weyF*ac}hxKV|6Q8O?47|KEc* z<5dvFd7DBCr)|C{E@qN81L@Hn{K%Ki?#+mW-l-O{waobd^ljCnH}@+;*YlVCSiuXt zvb|J}qK14-e(PiDSnO*PY&ZO|m`2zR?Yk`teUq>A_5HW#4C#Oa`Kq)rabGl(c)XI(RsX~!dOUhxWv?UeBj;yUq0b_FzWS9b z%VVx-w~gRQ)WvmgTX?kbezy!q-;d$P9x~n4dHkr?MMiBp$V|+g_kf40{HbXooS#^o7dY#7&szI45`R!D77E{$iDP2f%}+=6?D> zpDNC%=lNZOy@;)+d!Hc3yy&%Ob?y($tLg-aJE2b(9|^CyxC%L4_wQAs5y-Dz5tS&s zN+oAbZWA#RM5Dk4LmdWb+MPyCgI=^Gy}|ttc!cckBR8aP0C!0fRs-gY zG*-4=KNiCvD<=ikrq3hK%2sH94gSUX-iD&9n5*ErE1fWmJ|ZX}@GCZjM&=!l&s_h^ zAS&*ma%wuLGpk&VYT)^-X|)fN!2OpxWy@R94E%NSq4Y z+rz7&1GrsbaW*60$6>r(J{tQOGbEzQ!QZBq9ky-VOC!wp95OFIV;;*zzx(|Hbh)Zs z@jJEvFFdQ2%7bpUW5+3t^usLjGH;8`8t}EWz^k=ekAs($Dob4r#{21-U9AipnLH6T zPRD<>=esfnfD1UAU3MGd`Iyc=F8JX~yK@NZIV`aBvo_P7JWIB8$u@WZp5B$EKB<0j^ zd<>HH)%nxVZ_Lv~yz2e+8hc^Rg{d_fa0^St^=zA3A+6`az^qNG?rH+{EirRi{=XK~VeRK7C=-bB8AGvjr zj-+hl*T|~~4))aUib^k_8Lt*w|LVnr)XqZNy zy|r+nhYLA`OK%>%yKI1coNg+1C)fjV%``FxpJTd{kGmk3MS35t78?LAwB2Z4wfQD+$Z*c3PpF&K zKeRvZ`ii`uc7ySfgTT8xPSWq7KDTdL&aVWXs~$8X`X-4&vIQU2)>|V#u_=q=Cvt8g z6vwH%d=yefOJ$isNB!X=`J?{^ooqY5$S=?db-B5(t_kO7_7+>~GS~nNix&%jUqF8z z|6v?@f<;W%@W?(!UTE>+>HtOvjR;G!5wQjI-Q8_*d}kQMu&4D-)L!IZ7}X6`&@C&o zWnUN?GKouN*mQw6_G;_@IUKVMeuyC7-<1dO9{t?cpC3YBzoH(;2flgZTz`P{IE7Rn zGkQA?zg~?)Mz`J_JUXUI{m)H8*cC;mMnV|Gsm8$G34G$}+G|D9&>xy#E95QSiut)m zhf769ux}}ETY4^V*12Q*-!e8rU%6j@q6+x7%&Y5@R~sQpk1SS8If9RG$Xwzii}~IW zr`A0ufm2B88guk@?~wJLqn*f$ROA?(L4P8P>^v@lfA+*+P;mB&h47jAk+RXkCfZ z_#nq52ePwRs?ckDmp$64L`RPPN{8ZQE9_O6&8J5`fuDRV@h@u*K7ZThhW4d&GPfkw zjY6!J8zZM6c$JM8I`Kuv<<90CDP&Lo=G5K=_+~j(FDpE;-@@Kt zM>givBl!+KOhT^Q&u`#+mofJI$o7^i27*6a=Z=f#LEb!wcasxx!=lOU`*S?7uW<0^ z#53?vNg`U){_p?2C2Z4PpOJSu6Y!^s4?0BJ!+oC6OAo!?AKjjgy8D$J8oY-5?)mtt zH7w|Cx0QL#kxS=JU6vkvnnL^;hMgawlb^HN@$fDDiYo7r9sQ`cB`P*gBqo_8Gvj>G zHRMTF9A#=A_J*#zDM2gj4uwQIi}dfu{r%D+5hoRva-o;{tu8?(^H14y&N^T^ZlA z9QfW!{pHSI;EiwmJ>4vz-@Is1()_-PN*?uws_A)PPqEC^iApE$sD% z0=kcTPth}De&}Zx+7(wp$9YoV?rZy;O8#-l4f|zaZ`G!e;9vM}+0M+{?eKluVmOX> z2@$e>>D#6U;Cq!?e%S^=G$LfNA#d|`I$5T6$K@3TxG#$D@tsU68Q8jGJ_>%{{xN+& zF9G=3T28h%Pe8~2kU7rWfjMi|K`A9g@X4o1y9N@Fi@NA|-x9ij<=+lR5#a8@!W$>J z*I|B2%{p}%bZzlH4c}{!A6{g~FU^m-H$riF;0k{I#hA)DC_vnx0|NAkY4eEY)9EiPqbt_WRKFI9`-)bcWn_$G+?!J}H`{Il-wgG&cpS(4S)U-o0KCi4tCqgZ2e^LyvIBL?u@A3gj<(O3 zMHY!C3XiK(NPdl~;;J=-9KSuAuyYX4mtTMT|G)5oo7U*<4MRB~^5+w`A?ybpXXn2F z9O9YgIDY>Z`t*~R+q+jGzxHEb*Eb15?!1yzD#rcqTG}qUwTwcJrr8;*4>3q$VaZ=L zZs@z)_M4(`5~~Su&;9U+z5TW~{{i1n3;%ki-uiYtx{g&rae*ZWP9oqEOr`ROm#KrZh$15?{IMOX$4WHMFL#63p7K2=WXCoXI zMM%svs_ z`1SMO2SMzU`DteN0X(?#ySWk%a=06d7_Q-&(2GR^Q<{NWhGO}2YCWjr({Z(zFThv# z=$r344gX3%Z9%~l^WdFp5-t~9120^ou&*8bAup$7PzJhFW|D}<`C#x;3*E7J+}Eyd zi=Q$R|L@&V`m(+OpVv~UFH6 z%qdgoCj-2nk68mh8Hm2ihmJO0(DF(`n@OsR&-msbx60;xat#ajU?Re>l@Gq>>CTLa zZ9i$4o89FbNWs3N4NU_>hp;y)Opd<(kxMuy}H0E?pa9=rSjXm{4?)BRuux~Cqw%ZebE?nd(eo+s5$Zdyd z?(g6aNU+~|-;dwT^3U2olMcT(tbbd}OU#cQU#in7guSCGvEkLw-&YKOs%h23UfBII zrJX0CyIfK$oy9o~uj}38!-O8|Y2ULSzDf4^dosS48-}sttXu%#bQJ=x=H=D{S_ABJZ{B_v2pp0-Ygi>g4Z(FWMc~*lLC65|TfBVOR0^mzjJXd52Gs*k2e|}Z0 z#h$d-f6V?zG?KCGu~a%6avG<5s^szgPWryD*;>dTC)V`-Q`V&uC&!hiDZp)c-+7ll zfNmhIej~i(H;s&62>5F|ih0-lz7xj4t%n~Lyf}jV%ZY8NJJ`3<3ESncEiB-Di|*v| zo6vpEoxK&2hdhd657p);a6(vd>FuFP-7z z=Y-!Aq02rtgd7)-0<$=ckhWV_S6DF_#N>u1$GkoA@)KXX#}nb}@CAP1y+I>e>dX(U z#CtLd9a0fZ03LK6KArI%y38TgV!(QGT`#b?s~vctz-4q6pR>Aoe7_d*FfnYa54qu< zil&A23#|t)IDD>SI-N>FQ#&-1!7E-IcJY4-UaubSR(DwndA@7i@rpYbWQD;*cR~p9OrG z*~}_k;XosA7X(s5aj!%pt=A`IKp*sLj_8vC@AD4WZB$4|!K_^irhUHDlcp8|9b!k3!Y zluHCbZ#o(8v1b5#m`h)+6+DS~gSro?-q5=>G_)q~p+085KVJO={p-@onvtX~>`PqF z_n7+y@=NZC)uF&c-Dg?~f2%NvSieZ*BJdn)>W{@iyjfq1SIruhEBpw9D@i z*NX<+YvtWzC0j68>~xoFnHungwpFo{29t=rv|61hg!)^4BlOQRyr-zL`g72KemTqE z5J$froynduu|Pgu>Pc%I{J{I2ZKVNtZz*wWxCU`9Rvl#?TY__GJ**S|9XUjSj<1nH z8hGBS(N`_Ga31*7Izk!HvtovVzaOQeF1^gs@5b{vDOofJT*dZnVE19*r0_%!o_+Ak zT93I8{l$ILVb*l);$e}COIO-$w*{WJtQ+j#gF3Ka_*)l$b~>>mUl(}KuDnBIT?+Cy z|13o1N3cI^UUV)+6X$FF@&(R2@JHqxM6?fMKY{Fn*$L=>uXwK>H-g@xu|pbcMu-_v&wFJgC( zz2;kPVBRdNUe)w0_CqBtKelKT`TE=4tVif)_D0c75)lkydi-;_Hv0PUQc8*BECqSI zJ5i0wOtP^*qW#M$=zMv7zZ*|8Nzmro8kbOiy?;L}Z~%^{2t{e^fi5}sBw*Jpl|}j^ z>P7c$1Fuvb-?|?2@Ph5G`}5%s+>D9#nXATms6HJV0$$gUJZDMJ$6DkI&qUorojL!- zrmq-#AKEB6b2-?v&UP%A3O%5A{0O~C7W=9ctTyfRL7l5QRGf`_7_Bz5cLcio_a9}6 z%a9KqJvMyW89CJYe%|IcS@^v&Q)3mQG~_K!LavWOAG&-$si&v~y4WaJy~82sg|~V+ zIqtHE%^vgZ-KZPWgP+^1FS3Zs7WaKzOgg#O_I04v3x3Yo<)YWiF@Ln4Jb!)z_+a-( z#gotpt_7z9E-3**_*UX}k>T}*k8+p+8wqBKw!RPrbB9ki!{JANq@&);E31-9`ucf=9ntW1?bJ6n?rjrr*X%7KGh#{NLsHn zJzTC6VsXZL?rb0UL(Z8XV;jZx4NSsNu_Y3favlAlr#j`Wh4te3AA<2I+;JFD5 zy9Ei%pA}#HvcMHO3jV&C4&!9S0`W8T!4 zhu0LJGo--9CJg-eGFR*1fqU@%man{_c?o+Izg@WfYK%s-oE~ZC09U_vOjq5JfjR%7 zkD6h?-$q(2j$z!Vd%~$ZL-LT5S-~D9j@*#9MrN#l0(`ivyYy?@Da0pOmH#iK&^XRIarnGY#=f}0k@xdBZ%2lh zmi!yx)9Cw+Y*t~B@L8{Qysk7N7SH5NISgM=D@))faBo^pX!AGpH%s9whM}+UeH>a> zdhceCINJ?0>0tDY-7!zs!Y{8;e_80@1szQI%Jk1n_})vGv4a1CM{UUF4R*%dhn$<> zy%+GUB#RDKBJZ{T^3a=`z%ja$iKoKRXYM$Qmz+esxLo$k_#gPz+PEIB%q7^nZ}R89 z00sKyuV!jvEBf`G1LIZjCy!}Po-FRgJ~Hn>NqOX>)nm?weMkat{1yA^bTsBGWR`HR zk%cbtd+PM48t&!X%w7lhB^!$$RGY)sZ}v^@~SZG?W(5-fE#9k`C^b5TuNN7z-7*C)(2#f&;K%+Lk|=d`2m z^}d1M6^A_^X9#LJ_UUH_3-^%A=FnhN7vS? z=);=)*Uv8hkGl7OZsK^`#b;*aZa~Hc8?dRS*#--D!+Tgpd$wNF#-W5PAqC)CBlHvrRI|@B4rE+wKN1bim66=$GjY6-jf#1h}va#!)^1zi39WzD&?+6L{6~!OpJ%}FP{#>>R)+LUm zc&Ef+ec;bc)6Z1^j_38y~Z-JN$ft zyYIZ|*f-HBc;zGbQ;wJZ@#*-b*uT1D;nbSk7c@xp%i zfldxgI@S;G1x@5tYFuDX0s9Kij2*IPVLj|8b({Axcn*H= ziRE-<2#*K z{k}UBi0`D-SmFp+i{HKad9CdN?4RqW->glz2tCpIRjJO9tK}9v-cla>n2O5Y?t88j z-cwEebwcez=&g3^u6_zX&(7oDPyK6)JBc6t&9&GWnD>ZBgW~$YpYy$aM`k*{|LC{z zVP-kZ%hPk?aysHYj4wBJn}>Y`&m+fl>m3cdnr$cC(rKMvN6_C zZ+om+*8#YvPrYXerLkXQT;}=NQzGHW34Ss@9DMVv{?}K^e8)(yzZ)g?#CqiUxMz(k z&Bt?UL|tkZ4tktE_T$=Ij@+KP`2=un?w|^O6W)T(=l^o2-5GpGZ{w{;c{TC75S!bb z`5F4*argZ{Rr(P7VNIXCoDY9xy`X{DU%tTa5&d-RUhF=6N5xTh^7~k)xORK7{sH*- zw`mJJb0*<^%V#sw{q4TMC7x7_3N<{ZLp42E5`2-o;$6$_qwlOFF$#2=jr{Z zKYz@FRU@&E+56B>_m9G_HTlWh&&}8`IbImpVg3{RZrTb-x>&`M_I4&NUr768oX5Pj%$nhkxRO4}SGJi~jxA zWpa<*7@u#}4%;>j-=U6Ner;YP{HQC47%>>%=kM_LZa3^BeEH;v_cg5J-?}v-bo&u} z$LE)QzwY}6epdfwnHyihKR$clN&nAuWT)YS#@@hB3n$GVzP2{}q&H(;)e3{3@qFd_ zm$5%&{r%A|{&WY~Gi(unzd``mJB*RmAriYt2bK8Rvn0Gp~-d8w~j!d4BtM zLBKzgE?$@meA;eCXZJRJ9o$WwyE!h_S?WmwJUukzJx#T^1zjk zC*t=Me(f+~1^m$aP8Bum6zM@mtjarO`2p{lyfV!E(j9sxa#rfIMed~Dyx)T&DBh=A z`AN%L@C(rX4+0Kg{cVnK{z(2l&`*zsF0Twf=&@fW9Da&J{wY%02P;XB+JC zKj%dz&i@?mU-n$k!#5td;dRT9WY}lXHLFbd4(l%NXNGio0zc#8fI(M0E@R#3b)SZ&V96_d;2zHDxv)y*V9+fN46gGXOs@dI?CsVnkQi&NpY>)SHB*O^~JE& z*W=gV`_otURw#fTdz-SL`XL>@Yg2L1v!!@%^slHVKUZMDk1sdR+Xa8Yr+fbhh?FR`xhNu5&57xcyY;4@(jW9%=UP;g@qT!3ZrXua zji0!Y!_S`UuC>5-j=EfVb{qcosRM;a?b-=sQrVCPQ((vKnUxuAo{aB=7DV^BR|9_L zg8Tc6#$$bG!R*c3zQ8`s&4cf-HF%$FZ&&|`@MqujXkKq`MSKUh-c92i?CWU2yu#gE zVV~gP+g$?B;eEw~wT?32(`j=fDlb|OIiFVJ4>R;?r&Daz>W{%U-D=&s)dTOtPQUu? z2k?^^PkwXn0{jwdj{o}NMv{&s<+lI($Jy@WMpCQoA$K7UBdeYJVlVK<-n0unvA(ZA z{na0(&*@0{$z#_%U4-}56Hm{0fpv!KFM1hPe1?5+wpOKvECip`X0Pw#-p%hp*tjFu z=X#>nm5boZ_xfkQ+E)(#Hp|mC5lCO$ahvX^_py()*V4BOfY(U#)DBI+*YBBcoLT(^ z?9b00roZyS{=Tr+9cMs4wSWC%-Otb9ccgY_-9H8Y!N|ie=gyyv^=99Tt5_NQ{?s0Q z+ilPvIW-;QZ@^DF^YqP8&F|xT2ggUPJ`TI*=s$076 z6CL^CY*|b70eC-h@K)2b<9Posu;+nmSg*L%uR-;#hdjuyhi|6!w_~4K&oQrK7h|7W z%$e-n^YHysq2-UQvA?$6@wb~3s^L3u85x(Kuf;lwdD`PPm0*XMJ~3UIgMF0W%?`Wy zh?0b|yKc9ghxMU5m&VT9jrZL{D)_y``uqRX@BjW!{SNQ{)bHW`PyH@!WXCO=rgepX zWB=Dv;_u-*C8nicehK+~^Op)OZtuW)-Ohxos~Tf}fALCTH0+k%qoX}H{DAM5jq6bM zgW>RZ=x%oYEYqEw+gW9!+Y0y_cU$JXe+R!ual_K^W&qw7e>1&RGS*|y1&kiyz`B~} zo@!MCli}|RE1ouiK+oLz$Svar7+U8TNPUm2AnuY4GDsZTI?21itsbd_iklEv$bI_ni{d z1N+U-PYJ5NK}UYHhv#?x4*S=~kag9uZu8sF>&p)}#do60zNvf%`g4?*$H}c#vA-?m z!RXh(1M}Y>6P1L0u%&uDeAp)%>&Sl`U)T8{-g~LgV(JAu_LmL0Jg%q~-g{eLe_(~R zg!BrVb?k8x-cS8;&iMt{w~_Vt@}ZX-;Qhxn-}XI*_hHuDyXY^R$M@1U%$(rA9{8X} z1(O|qn0Bv!_+imPtUr_;Gq*bMywAlM8IwN8cUMnUtZttOobR36IO80C$50nE;aDMl zuXJX$FIq#6mOprDc_j8D?f>lizivbBp8R>ohh8l(&Z+el(`u0GyYywh#Jb5Rn>wCZ z{P;IO8XU3t>dC02%6=b4g3wY2Mx3f%|{#&QMt-W#@w;Z$Q!&)n+9~s~MV)+3bQrp_|Rty~ScZEl51~v4n zd@1Mfh9}P$y80ddFH)U2x%jttZYY~w-xt#Hh=iN<<13hc?ICy;E zwj-@NcWz}^)u9D@aimO?{)0Hr{3VSl|GvFi+aJpNe(SZg=c-e4Hnu#!=kW0>(+jUA zrOw#czl;0LI$yjMYNh+L_q~14dx-AE>E_FyRJDIJXl{k? z>y@>i?Q@AWN!~Q7cyP~*wF3PPlb5{^F7` z_uIC#4-KyR-Q%iDAG8zaKWZI3_UDZ|!%koC`N8PfTWhrXrqr7?JN)V#n>Ej)o`*O- zz#2RAlHc1U*NLHT=R<48tnfT?VgDA>)d`lLZqD8`wc1yMSWc%O3(BoJRyNzq_)H(V zc0#$=-Fh_ZvcI?W-uoxorR4{kE1hao^X50!WrKG9y=taUP?yll?mN1Duq)ug-ajU- zp6vJ4YQwzi4}2Qkd1jC6R@SfWjhGE@iFd6d9fqy&y>{zqaK-Wya%Qz@F#7q=SJxWn zv~Q!^w=8H?!C#l#FRbMG>BwyJppeKuFEzxuTKv!9~o_KiEW^Mht>hBQe3n}&?7v#;}= z%z%#*-K$nQvp+qszusJV;Qn1{@2`Gp{=|RwWqNvA#oqUFNSi+Tn?HKr95rkB(t~dX z9mp7Y3l9z^%wq8>U7PTiHRwFW=%bL=Xlq)GrCOgSf_ICpov>{mnqxk(6sRt zhYo4mVcO>8BW}&YcgNM&&)JuFAa!u>hFcoMo~}Im^suS1!Yg@@^XdSrk)2Y zv<&S%_e_J=XI|aj^jYb~L8TU){VgP;%Dlb%8il9Fzd2pbZ|b8K1C!l{6n(a-)Ud)j zKCNb~`ej>_Wv0Gv*Z7#;%^N>@^Zvj#*FRbuHt~;M8K(VnK4`Ys z7Q1)l;j_sTd-r;MVb8gBLx20Qr*Hf#!`#aeN7{}VTR8c35Nm13?Qo*=#}_JI4Byr? zHRs~74u#7u4S4&g&dK+_ZkF=2*{Hky8$4JtXTdiG?@#c#>7H3(nSaQmmHvNR|FHFd zRS!eAb$WQa)S8h4k1e0HImxlTx#4lSvEw6Oc9^iF%QHu{ub5;G;G?AAKxywE?Tj1_=Ri3f*$)cUpV~s)j^$oHgq!FY5ljO>2Co6S1m~| zesD`Yn*3Fd`~j^Jz1|yFL*MA|hu>M-oO>KF{-w|IyEP{C_{cNm+mx~kCkJg9l~&`2 zFDh@z{ILJ^r$Vo0w>PAZiyqM-W7Knf_n?H@%lanlcs1|Lt}dGfE-Y8tsyp=e)3enY zF1=nl?)RoA2EUxV+%ITer;4}FZf|+E))@aKru_8lpY--Q++cp_mv=&|^sTme#{KK# zk4(M!!B^drSkHno6Cw|`4jlU4t@fqP{Frnxb$;H{sYhF$soUVx>9@DiHti5TefsuB z+=V}WKD>h6U3KNeJL~slzHD@{-J;RwO=UW* z9FU>&c+%=mkIR3y=>Jyvt39yBr=GnAJ=QHb(I_|8w`=c3i~4!gy|(Ij{=}+H|L73B zXy^LxYP9J*zVKq`>n&;JyDz)y2#(A8c8S~j9oHTiNlvG<`sG2BE_Jeht~`|#&5c7vi|w;=(Zh(9Gv)z<#dzYy<>mMiw`J#(%U=S zP$|9P=ld%xeDu98X4WvzMop?O_fOjNo(~&zzUws4TvqpT@OQ=2JAC|6%;|2`)_q&% zoZ4=97XO$2!X{-+dR_{SBTuaH!rW5s0sOEh2Q`J478uM+7|?`>xU`#;MLP>RM)3`R zHOzU>a1V1uOBZmz&gEW*`}Md-{TEUw?bLZd_aU9DTGFfb>^!V0>Q(>flA-7I#>0+g z>8EzpZ==D--&lRQMX~y{@^Sk7MREH6<>U3!7RBpVmru~2T$G?cUp`TP zXHlYF2yCb?ySSmgeqfS5dvTJ!Z(y?id2zD7I50)OU~!6me_*Qq^x{^YEHUaE1)20MmzeZ@g3|R9mZa-f1ex`Fmzecuf-L&4mRR)O?iu>l zQ#14rf-?2O(oB6&g)DuorCIvo(%JfUi?j7%ROhU4QRW<|wE9NQNk z@ncj%#It<~5dqPO5uy7NBjTbPMl{;rFrrm-QpE86Nf9;ulOvMmCr8YRPKhX(pAxY> zIyK_x{?v%e(PbkMxLM`_m&nk1|I* z+i#BO6lIB6v(FNti_XAmWt5>@ag?D7i8dq@M;n@v7(@T!7()?>HOwiFHLN9ZhNH!C zhL1_S;aYLL;WdoTVGKjY~JY&&-A! zQJmWCegtqj8^wK6PoZ*4ddmF>gliC>GxVJTw zncUV;)1%N3Il0iVRM*bXsJNYBfKOD+r0G#H>wThQ4o#1aIpY%(^JaQX%+EftG2ofx zb2FlnfA)<|emx^Pxnil9Wb@3JTI!Yl}2Lb>PBK=mB!+X)s4k4YZK>GYa*_xmM?y^HedX%nq7Rf)-LL*7l^gj6^QxO9pdbD z4)H+srsC)8nu@ooHxpm1YbKVe(OisK-(2iiqlGwUeG73zjh5np^)1EoHCl<^uWu#( zUZb@bxuLa~9NI=~zoCt|I<&2LY8sBvLh>$3k zv4iMStD{(TQ%5nrRwuFJrcUDMTAjs(n>vd-YjqL7+SEm4wY!R$o4bm$Yj+d(Z0;uh zT)Vrd-_l)dP^X93WJ?e6o4P&4zqj@j%ZBw5g`K^`sCvD{mOFckQ|k2*ukGw3*00}J z?6Rw`IIMm@anY`RVj0i=;+9?g#pCq{h>v#-5WOM?iZvGw6hk5hiSfG!iCK|@#n!tA zi#;NTh7Mf3X6;+~K(;*iy2#1mDE#jjTui~FjL72B;DD-NtTP7Gf@ zPOMU6yqL9Vy!aqwf;e*h1d)bL6l-prD2@%CBnGdYBp$6dSsb`=ve>=S6tU&zDdLez zQ$@@2sbZtBX=2LKY2s&w>0>7rlg3~}(%8RFT>GsViQW{S_N%o6*qnyg=-@ZGm{P=0dUco`vF? zdW*zsYZi$`)fS5xYZi;0gO`XmH!czN^_Pk()-4rdt1lB z!KOvwRZMpxs+lTA)G~b>5pJT}!%bTvB1{LiMVMxW)iX`rQO|TEtiI`4xB;KZj523W zjxswuqRkyAN1KOu#F!^fjxo>jh&3;n9Bbb05oi8ja-8|9N4)vQ+Eg7O+C+TR-uS zwSGB2*80Rh&Kk5J&RRPl-Wt0g-r6W2!P;~|f^|qhqIJ!JMC;LjhSn(_6K$JtAlkMvCdPL7K#c87Oswttfmqwam^hnoFwPbn8*hs|7;npr zO|UgTm|*K2n`j$*FwwR)wxR9t!G^Yru}QX{4kp=N$0pkX4kg>_#iiKN52e^_ajCX0 zhf-}tacQg84@x>x1d(Y@+;M-4h!95txGH+s-a zuc#tmp`u-0(M5BLql->@#S~qc8dLPxE4IjgT5M4r@3^AWX>mol-tk3!r^OeI^G+yQ zFfE~It#@M4scDHt*Ss4R-JI62=%IH~5uKh?6y%d!RBw86k=ZAusKxY@qTSx9MeV1h z7O}EXBZC5>isuwZ74K{iU3|1Sy7)wcnBvgAF~z0^vBj76#uiU#5LX<%H?DX{gZN^< zz46718zdCl_a+o~Ymiuc12&24pV6M%pwMc`%`C_&%*nRr7z@&~h|$r!(2}2@mrqPa zb77{Xpis(|XKG|gFDOhmTCGxoa-U@}nk{nH0!xm~YAmo2Q;yAEke{8KS(t4vY?hyg zfcy|*$}O~Jn}{hd&uTH|{xjK;kzvU%EXd0%L}T!v^t{{xOY?%l+`NLq?A+{vY@;>X zZZQ+HB|XnxaMy!-;>u;jXw zmb%KjS-=}ykey>8mgY8emEWR`Qs?cKCJvN(Cn+0^%S7i((OPKAE>I>WBQGDb?M#p-M7vMVGUglcuzb4~^-hT_OLHwL8}lx81FdyNDubgw zI~S8;F&83BCU3SD?Z7m<-V`=9S{)WGN*PWyN1m-9J1-YqG3K^#=8+=pg?XST5MiN4 zh-xYRP(0hU3?F~>QF2SAaW>l1v$G4;zA6cv9;Jch358Z^M03&1Y%?FxLS;z#;9?>( zFsf>z$_H8uXfxZHo|9+J#$@Je$(Tix%dNs<61hrarqpY<*f2c>;868RQg5_Y%T06S zW^-48(JHr3%j+n}NKm4{Oa%%PDdZ%RyCu&~)Cfynx)!#B?Z8$_Gu0gOgyks1z*$v$ zG*M$^DZuGNp#zDnWHI9!qclt<77V=EVzH52Of4v`(1kAfb4tt>kFezCIWn^f&Bg*F z$`nchjq`DOR$g|xMUn+17Zmpo$)gPQKPt^LtKBWk%a9&#CnZL~h3ixy@egj+5_t8l zoUA2)tn3i9xsYIXo+BeWli0H$tspLQEd--tG3M}&@EV+gOc`>CJ~>so+)Jei23#g` zshL^X*n}pL%0K$4RiTMX*LG@=w*2fINa3ay;>eYy9@vUgh&JO&6W$g4j@-t%dChWF z&Qfo4EOxsw(^9C)Y-?s-es)1t4(gNh+p{xsjRlT;OQG=}X`GrIx!P!O_6D_NV8Fna zvfwX~ZgZF*rZlBcB8~SD+Z?&7dN-Ssbd?a#%2i`Vp3Rb52qwmDeqLjQZP`e|z~ypH zDHFG>UNE_mKFKv@=V^=xQSHdF;F<7D7c52!gS&t8yggxIn} zJ#oQd<}}WATFDr@BR#7yBio94IH_}4kz;`@C-xQ)P*A^)T%*YfZoo4@R|TjrFTJs) z0P(7hZHc;FhZg0t^2`_@$X8wt#mo@5))o+ec?2DaDzt(f^E0ERk_|s1R0%1iXm|O>T&T%hC`C@psz8&tqR`&NVa!J&IL&o9Fx03E z0@Xsm1x@*|N$^6|4aCNU3NOW(#6oztayUt1$RMntwd~F~uA%bsjrlFWo%z{(HtfV` zu}d|ARvfm%3?nAcER80>PJRnpffVMCRIpTfLB3Ub9#_8>PDscvMS?EnC;lUu50Vs_ zG`cJP((|?{IUjr5Q#?8YQBV7vM42#?A*$8WGNYT3VKo6Rv`WWYC|> zDaZw2Kqz7$2!tJHNSET<^LMQUx zaF&qjx2r+~bI*xa=H&FeynHi8y8u*BBEcM$U1&+SHFnl2aTXK`v7{Gf=I5ba{sc%D zNwjjdP*Sdg6D8NLj-J&1LL(QT;DPLd7Wg6~dZY?SRHRhl)W{NMm1T}1`s`Nl zNCsyRN3N>YGc77%s$?cT7&&CPAa_vaKIsuo?PpiiyPT!5IYSk(N@FG5Vc`lz?S)#Y z0!~yDR+1eGDv`B>i~I#Sn)7lLg#xQmYA&BRrBj-mlccbQT>u(#pe#V`=(95x<^k+s zNOldha9yazIcb_eofNbvwAmZG+L*bZOQ|5AU>U7(2nm}ORsm0NjVv@PajMM(Na`vE zZALQ~EK`O%Dz%tod%cA8FF9IjP9;`?S!x_wzyW|pdpVgI_*~Z0SAh;Jrim`xl zB}0WP4=8YMra@5S#%8qJn}Ovd#7Gof&T$gwYZ)5@=Rz$=@VKP7!5CW_a}km!%?QLD zhd}@yyvrO>D)tpG4VwQruInotGPdUO7issTzDLH@b1UJ-$%YRnpU> z7*19Yf2wtv&Rd<4oi1q|$a<@TyPq)0>G@U;MwAF?OjHaARPTUjmxcy)Hi(jIbGcU^ ztBjSRn-%*s+YDhK`wXPPP>l?EXw*CIyyMg)jj2+PL}#4W()02;gwke4V;UFR8si7i zr3pe#;QU^;Xk=U99Z99alpG_x1uC|5nNB_)g*K_jP#jXnT?kZiq(J~f31e!tc~Nt6 z>f~+!m>aTVpacRh;R|$mB%A>*Za$SQoTRVDX!Ibf5M{jnnNJpBCFlkNqX-69YU0BM zJ2b;>2 z2++=16@&!?ESK;E8Q*cnkx7(D)(Qq#dWsByVS56Da$`kKbqX#ivvw;9Og<5kZu*xr z1<5*VksZ!jPU-fYT4cvEe+Fz$DNR+ReDL{DK$d0Z!&6)Ugk0Ewz)W>Tsfw1?K#$_P z&4Z(r%Ww$-NgN8G4reK90TWApCv9|)3{k?(3Yi&IajiO16mnF1E&+A9XI3M8eI*~2 z<3LoF5e6`z8XWStD`+O+c~r**nZlyL4tcp~j_gk`S)kD@idm!ZJ#n2QTVWHDXSCR4 z4Z%T!+*Zk7fQopJkVlz$MFS~Nf)B3TURC?2XIWsKD)5Pmj(4lIa|$VuONvoQu!UMw zWp|B}WX4gW)yGN7RiZ@A!!E-~4O6I=ve9aT_eU`UxIe;T%!h>H6hx3_|Bq=l?k$&P zgG6rGaP3R}lnhKpuGyYtY-}OMcXQzZ_AEz%8D2D=C_RS@RhJ?K+^ryyUcLnmB~TBR z2v82WoTw2b%9m6m6=bwRg-Ia@e|SVRV;c@8DOze@KCG{N#i_=Ze@w7U<V{J(?RkWBn#vu#0;k~;(|P+r?_f8l_E=If-KI?&{%;NFHAQnY$@GwCF-;?6>gJK z{?R&2U9JTlblF(3Ma9MuPCZJTlTB2Cri_`|u6H;^Nd;ix4g;7R#-=dAxkrPfTeBf_ zWTKEqPHmSQqAWVf~EX$+c!drrJq5gdr?9 zRA!O=B(l(wI6xT#ZAuh{DrtAwPxp@)Zai>$lF1vMz;t2;X~?o)mM==J8X@s?r*}qS zrV@gUGk<127F;0%IZ30FW()wROm?Fys)?8#vWUS7soEWvI7vAGp<7(yoYSVsN8*%c z(qJiGYKy|sQXIE!cu@#>_*1gLDew%y+>ur={xfO*Gpj2$a<07s6th%d;wTCB~;$iW>%W?LdDi~X@~@=F#;MRDs(Fe z61fm3CP~?8L(Z3^A%US^)d`Z&h#c)A0wtA!hvh>Ya0e}(qZGiGiHw=twW}!;k_o!S z+KXfX0c3DzIR_cewmL;CXBWP70tS$I34jn1mN;|Bn1%ZJp)L6!6`e?`l8fQI^gOKgDju*Bv9d^3lU$pN;eZ!KE2Vf! zT<;~f8D~amHq<)I7QW~W9^tDTlHG(A2sKe1U-ceC2)b36RZ<3OiXFC6iF*HyRkX}d zCyLh99tD>Y9Jw6+^5tQ^*MfT`u;RlPzTg0nNK>-O$h)#uL02x5tHwBaSdHP@&_yq3 zF1&&qV1+CReXCh{lqFq@e! zXWHJ8zU0D`S?IZnrtHMIIEbib9o9<040!GuL#OzcK~@ znaV@!nyNHL(mGmkS$``K0FL%7r}~uqgk}Y#$OYi#bDE)fybeu2HoMK1$2T$=iUxeHay#0UBV~il<+08@Zrip zx|#53PHYnR!4Rtvs?IeLOm;e?NeKf{ii2j!wMz@d7%_PYL3o8+>AK`~p-I^#qgaHf-8IRjghI3`n<*Qeur`9_ zazJ3N(-q4`l|4MpsR7lTe8uA3+){)yt3BP`l#6{CT{p{uDe2NIpc-YfhdjtK#8635 zYq4vhLX7I9NJty{7Tb?dl?09eYVyzxO=YM?8qc8EYv501<6Frkc{M|hQTCL94CNJk zlvQlQ!e&|AzyXBdPGRzIGRZko7)KBu*1qJX5y@O~!ec0SEZalXL-=yD30q&diKUs$ z|FEkFghMp1-lccE&wSa4r!|d+BH%;9k+BP-{Uc4GFpipCi@6lRQ)C+bPwDxVrr48# zfpK}PYk8#?CDWx9Sg;(7r4kAMG>`Zqp=;GnOr@Z%5~=Eb3u5jWT@d|UV}=7NY~;OkmGcut8N$Y zLxbo-&2S;OZ`wei0%JPI$7o$H-^=2f@(z8-dO@<9{>y9}>SJ{p{11l}Hfp$5=`zB| zAd8s)n8A^oXDToP?{YiTwH8hY+Q!p&61Yj>ViNvKs$y}wrf}aH7y?bkj#=4H?3(-^ zAa}_ub}YkT|0U;Th${zoq?c&)J1W7oFo@${QPw+oTx24Ug=?aU%QU)jO;p&JyMi;U zdCf``RHaC|@n54|mEb!Wc&#uwu}4W-kA5fBiC>&j-nC6|j6vfXu^)wRHsXZ~-@yu; zc$8g8u0$gl0X(~l-w93lcUzt_hP3-f_W7!2oXZv<$p)~&-h)`xayK*Pb6Z;G4<(-O z=909t(;k-#@C19~Y@3ZMMW^r4xgP{;??~Z5Uz0n0#X-fRD8~CIGqJSY#zorjOnm1; zwv_`FX_K2vs&i=nE%F@~k4qL+hPgy(76(+83_@KJWdcH*<+T}Ec}V7&8s$1e|487- zTr&>g*w89cpoIn`wc6y(MkOlZ69to9QsVFUj8%(PE$%8`wK(p6;OjcZ4DR~NG^TUw z+7${G2X&RJB7tJNds3=U? zj9fC313xE6G>GmLgyjqbL1s!Fm$$=6TRemQ(rYuwYm!1 zI8|UhT)l-6WR%=E??y<5w;GA(XQd`bc#Xu^7#dmwsa&N>{pUzd8rc%-_^LD52qhx>92Nh7BqG$s zI`F9ErY(>iwAg^Croh{Rbq}n3b48%~nmI_468Mt1X7KZ{y3^eZkG*Q{siP$C@xx9H zZKUKk9=Nknne}&4Bz&nB*JPcRiEk0nVx9X<@ID1hIJKBov)%51hR|BYCz=me$rwrM zyO=rFJfpNdMj9=2fT$4)^nxP*7}$xIu;+}cAwCk4KM!}D5~SjM(U134+GnQ>rT^F#JskEFVZ)1-0!Sd02FWq1Pg}z}TF>g`*L^`ZAWX+ehUGty*;(keZ-v z@5nb}OS2kVf(0c<5fFvCyMoM zqLk!%kvph$N-@(U6IQN?yJKX&(^$v}cloP|+C0f4`LBr(Z7xELd*GFqRy2xL1)RnM zn#j{)WI|RmDzxZ|veYPUZfIt*>&ut_1L1+4JCe@rI~VpF&=YGAIi%{qZtVwj?o^2Q z0i6etEL&qsJwrU{H?U`6_fCb~+7IkTy7%eQR}Lwe@Ch5zq5Z(lg?;+=>DZZcF6u|* zTKLCp-s#gmdWejm8<-E7%tlgQGMqLcgl%H`>0vU89uPhd4hpA)jcgh%MLLo0q%4N9Zf` z6Z#7Sgn_~!VJAT^$!q$Y?jnPQA;M6hNEjvz7e)vpg*S8#r2<}sA$Z+|G$qYQb25|c zqO-^h!UREB#=4RgiQCAc{3INkC3rAT=Ec035A$WESZP*<>6srZ%lugYE62*SKo-O*u!^h_3uYm#GONO> zvTCe4tHDB9O;(H5W_4Iy7RJI^1gppDvq)xO4OkS5W-%<5#j$vnz!F(Qmc)`-3QJ{a zOk_r8V(HAxEG&a%vMiR(8nMRA%5qpP%VRdygyl0kD_{=Rlr>|`Sqs*ZwPLMV8`hTf zV!c@()|VBscC0<6JN7;Mf%Rkk*#I_>4Pt}Y5H^ne$ZoKo*w5@H z`-R8sC4EJQlC8ovVY{$H z*d^>1_6U20p{$4vW5d}9c7VnR(L#=pE940_Ay$YJ;)MhuQD`V63CTi=kSe4JqF@wE zLb_lUEJB8mDP#%RLL;HEU=;MW`xN6Kdi^RS~3!jAvWe4z`o+V!PQMwwLW=``H0@ zkR4)&*%5Y>9b?DY33igb$KGd4=`y;UuAnRFD!Q6h5Go3lgkYf*EltZ%J@unysXq;% zPkPc`)KBmgN(l`~5;;T<(L(n1-*9bb2yK|P6)Okj(J*}`UF zj!WLntu#T>$8|X$FAdC@;g|WgWx|wdFTWL9A zoG@OPAZ(-C=?=P+mKP=plZ45_8n%|LW9!*zp}J5*$Rt@Ln=~Sg3Eng!xg?KFC!f;K z=z01%y+AM0OY}0mLa)*<=r#H!{fd4~zoFmK>-0PNJ)KN{pg+RyJAF)_&_C#(^eKHtkJ01w1U*ULqwmvG^aDDDo~9qtkLVft zF+EE^q37sH@*a7goFX5P)8s?4imWDU$Q&}4%p>#30NWkI7l`2{}hTC7+S=w~ zz9rYmcjSBW1No8MAU~0x$xZSLxkY{@x5*uHm)s-w$pi9`{6-#;-^pY0g#1DNBu~jR z@|=t!ql6daC3!{u!Y^LGCU3}FLg*s0m@FYn$uhE>RDVa`^}doY!;h}ncIT7S|seGGuUi44Kufc&J*4fjteJ*V?ry^hO{Pap#>j7GQ41a zF)ky1hkSU+{+1-gWA>cAVy`86(TnsUy-8p4zA#!S1s%4Q9uoRu#;QOXR3>xSTowX} z98Qu+Dyar3kwWIN`78|*+eSu0W|<(hGDtc&mFwV+_$D{!l~J@hsX;Le5WjoT1424E9LYJ&&GG8tR zhjQuY3HiwN%z7r%`Dx(Bea2#$;&6 z80gC;E*h~Z^kai}G-jHnU!$O3V};t#ZFQjG!i3U-Hzarm$ne>c6yHONA>jfb;l@L< zm4jrP1c_E263v~C64Ie3EYKIS9PpK-eK+9AEzAQNqb0P54SK^4t-*Ck6G>wf2xEc_f&@G_+0c}Q0-v0h8^>kT~s2nbp}T7EX-1LcvGO^2at7k@;x-cN^%4G;vuv|T_Em5(0yZo0AJCU&;?T0*()uU5lPqKXfts_RaT<|^&^Y+&19Wg>=%MM*L0j2<=$Br?U1-04Z6IUfB8XjR3epGv57 z8TpoSB+HR2$F)~A{Q9+oXjRlYj`k6z(e7j{8A$uXVsHm)9t8wF1_*i_aI_oamV^#y zyC0DEP~h%CK(~W|!AB^VbRbY~AE0iIzk2|IcLXYL2VBlEc_-KmBCvmXSQQ-qb6Y|W z^dABXqq1ZJRDn%U0SLc7P=6$Fe={I{ZWqWlhHM?kmPR&gkg}5fPze@B9PA5jA#fYR zAz2TyB_i7pvOSUq+oLpW5pU)J3&&HkPkdn2a65u2(@?oj8mF$bwurS)N81gaD z!FalWIS3VI(R}g*SYbHqwt2K2thx5WXS62pVh^&74W$QYkq{4T)laxg`wD~UCfHg( zDoDR1`VWN__?)f+ZYcTJ6SBP@r27)KSCZ#k2EQ+iCuJZtr_c$6YdS6q2SFOvgXD^Y z?8}D)YyjyO1uMd!NvEcePpSkQ&SYGB2pW-d_GC7Tyny95hOVWPCCZ-!&B&=An1#ty zpDEFOE=g4AJ_nS)j|>3%>kkY#kRAZ4lr>^Yfy;=oz|s&3K#`ltcm&4LX>>N31${A= zOe7c^Xf(SYv(6Srj? zqZGTKlre&eQ^va>m2rZMRVKNhm5Bn!D@BUtRB_7y4Y~YRNcMkKfBttc&~e~-83l1Y z>&6BOhZH?KjB!*%8P~O?p>5yQv?GN7f1JcMv5ov^UCdF&zw6?Wz+oQ&V{yBfqb#nM z>%ulHshNw|U?G8UeJpF^q3ktn!8(%qf{evnwXstRkD{uD>Z*mER%zyc)W2N&zN>M$ zw&j}k|2{4IU+Y*|yZ)PI{l7=Asz{paS2)T9j*kzLzHB0UKqs+9#EGnB9a{!kmg`sn zD45b2u=NK32YUi*wt zBUm5JO6X4hO$V#mSJu4$@9SGx({hVwAnc{}@L#Nf#k3Z_jCJq;tYTsCQ*bTJ{i>?= z?L?f~m+RgGu$!E^_tXEj_8nDH{VLy6m%pk`m5-}48My{Q%IT?8=cQiN#(1fX@lv1Ur8dS(ZH$-N z7%#OiURr%#`~&opUYL{%RjyJqDk=}7ZoECE_{mp^a`RCGzC5~;T3jtpnHnRg0i7D~ zPy?Q7z*h~FQUc7)5#k6b?FcF32+=!2{2U==9U=aXkN`(WRYyn-Y1kG!D06rUopE$> z=)xR2Ok=nsqzZ2jrqj)#^L6M-@n$|7MwK58&Q#X}z-PC5g zc`Jj%s8S2{D(%qKb?EBLl_+%?lsolSy{dEL6^1t8|3ZRvQlF!>Rc;~m(rW=l&>%|9 z!r?msk2_@Y%g=x%be|H&U%@%z06rJbJojT>eb|yo=Kbty1;ms4{ci#cbB`Dqiz$~uGo&Y(uMdZy7We#F6 zgPlPxML2(Y=>_NT3C`gYoWrN7CggPvpWqxm!8v>y--EQA^}0Fhb$7pyY=ZmdXoCyL3uFb;|RgPo#96@;seVUZ<4TDdly_^K{DdbZUJ{KXpn! zbxJ>VN!CcsL+P)F(qENmRH{+Q#zX0shcbU291?-5JjyCpf91+`D39kF zlwSjtYmj{PRNCjIUX^xwDed%9+UcdV(_6{st>p7o@_8%yyp?=DNGXEFsS5cQ0dX25~P7D6k?!09J25O=rlZ>4>bPy!P~^! zA+-Tlp2WvrB2pcl-f&!VuX(km&VLfoiB?cUx>646hW~g)da2D+pNGduBkc`boaG1! zb%ew_LL~K>f)e~UhvW;FJQq?V#c?4;P-0~u#qYT^;#V$;_?62ce&s@lU%9-ykfOA7 zT)dwIAn}7pR0~K*lE+9$k_RN5!~^9xT;zfBY9LSz1gU|#Y9LGvgsXuFM+lex7ZT*w zCrBy}cY+rNNf{?~xYR3E1A-dRsR3^_AZSs7n;NHc=GRhn&Qy0TpNAIWt&k>7S6T~| z(L#P&sH_(9*FphWsGJrmuZF1B3CgrMt$kE$AJy7Nwf0f1ebiGctF@GBV?cehR9`Jr zN(*T{qFRrr)@G`;nL67XsFe-ULKU@8B`p-Jg+jDYWi3=i3)R#@>Qr~4wY9i9TBxoT z3e!U2TBx2Ds;`A2wU9vzHPAv)S}0lz#b}{eEflAP;qShD&wevqbiPSII82Qfg==0 zO&qmw)W%T5FYaMZ(5A4en(1C9nbqHsjxh`|wyBMwJAjszTuI2z(e!jX(4 z1xG55G#nxhj0-X0NXKEuVZo7sBNIm!j%*x_a5TnY#gT&}7e^ir8;&M8@-eI!LyGaE z7(a^fqZm7iv2(-tdhi439vEW}M9vEW*`32+`kY7N4 z{IWYgNiot%isuOeY7zugg*{|E1!7M+OBvjxup7dj2zg@AJ*(rWfdj=nQOa}I2*^6% zR6zyc)V(Wchnt=Oj8l;ug6Zt#&?#zI(YjPYA>|aTSPlkiWt4y-E~g?-s)Bi{LV2nJ zd0JYLxJ(u5Ocm-(73x5v;bV1O!@Gv7dPUY8lu4i(`UZ<#lCD5NQ7V#k1tlVxR{W~Q zE6PT)sCc}hY>2FE1j&%%@!TrmS3V;A%Dcd?l8*pa-T{8k%@BU&hAO{u1B73>^}(;) z^x#)+ckpWfx&nlYlLtQq^HT^vdGV7cKULx5a_^CDq7=(k9z)u))s&nHf5CheD z@RKJ$dGV7sKl$*JFB~t#5mL<&5*Ie!bH=j9(EqSJwV>b(>V$O-+ypFNE7x+$wXSki z(}R@z2<0j$*Ffb8Uyhd}B-jxW5;nf#jAdr|3_u~>0Z_9k}Hd23O5xdR8Rx;r0LbkWT=ygO{b8jPN7bnLYz9))KhI^ z)f#5Xvs62n`6$&3Dsu>|&P8{D#D`53fJkuil0t%X)=6hM##;*eOXmRTTuwTdm(GFG zxr21>D4k1F`9h>iW#uAAR*~Tn#y`hMZPIP79UOLglmoLlN8SoA>Lx|w zs>EX!qru!9Xfx9F2JEH=g^gR=mH(OAcwAk zLs!wEtK`rHJ9HrqU1f)^ibGe`p{wT5Rd?uWICP;7T}_9smP1$Dp{wK2MLKi_hpvG` z7v<1JJ9IG)U93YF2dYur1Cq0q)0VqRQj#x}$4I_V9;m1$X@nT8#?)5>k!rx8u^q@y zWk&Q}3+mv!R9#t`pNDE1KoW?lvhS0DcO)k$4>0ZxF5_rvDMM)~Lun~P zX(7CGpYYE8!aMg5@7z}zB)mk9q!SLruhdDw_U#KFU>nf%+V zJiG$oH8^;9C9Z3g@G4x_DdGM|6LAc}k)edsajgz8z<=YF$JaoZ*TchW@O%;1CAd~l z^6+p)B@Yi*LYO~`hl3I3&*I@Z2=hPQo`Xu5Ulk&Cu5GB!C2iT`-(ASsLWhel*~{q| z*4%HZ^UdiNR$u~CJYHB+u>FU}uK%^hhrw@!Z^T{?Zsgqiapi)`legD?o@c+eK4`$v%T3qhj@@=Y zxO(rz;I?~f|2_G`g_ryf`?NkQJ>|cDGFvT8s!Fd!5+00_&UyJ!Y7M#*wL_P_I=5j^ z-XseFQ6@^_BnmOfg; zOwS)_CLYah}a}1aS{i-U_cN9CK&Jo6P(2m118A^ zKQM`44H#m;JPd@5Va;M#@8aP1eWy;{Tle<8l1TFQz4!a=m1_FdsZ*z_PF0;cb?VQ( zrEuxP@4MoL?|X) z`rt!1Y?*xHSH3>qeBF1Xu2kBc;!4w7sdS1G+Qb)ui=B$sTs>B+mb^~mc%`0`0~f~{Kl7%@gBC7n=QUGJiesK&reb?#1;lW;`r0pYvJs)@=pRO`A4(uYW!M zI?qdAx(OC_2M~Mp(7YvP3~s#)MKAc@&$ogDwX1)O$|2xY6Iu7hdQU$n! za5ummhI=2}C(rjg@1jbX#g= zZ>3sqSKnQ^##FUGr8ui-V1N z?UYxpEEZR5o$kyc<$ARYVsfmRw`z6ca8Lk7-yVENx;u2WQ&J9fbB7%3<`61%p;kQx zlKdW*{p6q?spglKd_CYRcR*W@lvYn>n;(C4tS~Z*yCd*v5}tPCWz)PJ4A=GJ&^|v4 zgIiOsX2JZvzH2?_YjO(Qd94i|2;O#Gi<6uB2}PdH7D^K%nj>5&iBrkLxL``Y8tKjL z?$ftJIL?d9d*{_Vk>90n2j_4O6l^tL*qG#HFvdTdpBWDbADSre+bbGJaV>?|=kZML z`}bTMe!kM%x>`S8Z`@qJqN{@1^@V1!bR697?d#t;uxs~KgM0GBBRD$i_4ay4F6jp6 z(gFlM)*d_PqYLFq3H0|>E4A`9-Zp>kR1+=O{7piy)QO%HQm@>M5NV6%0&r!4d+6Q- zJ5?-!;o(>l?$ow~$7@c2VfC2=f=Ux_v=#(pE7J`RYE*#HiZqd8^(VmK%cCZ{(z+!; zo4CC5Gm!EUG)eIVWx*#_3iyyIF3HEm!og(}F3)W5l6Z3w-@b^?rhq#zgEaBA5qOg7 zX|)p-yT_`H9dM{S-@#Yt!b*iA6n`77Q~t5l#l=d?+fw%0jneT-$1gSNbqKUrJcT0O za--e325RMEwN~-Vm3FCB#n{k_;WHG-i;ZTbzV)r%Terbofotn0$NXjkf)_~^--bgx zt+!!+UyB!J`^{oCPK6*)35(1kKm)FK76CRHj)fZF!g8h7ti=e&VK)oVD`uYb2 zAn$wngLhoY8N3Tl2h1Qoar9kqEF5$yrDFk(eJ756C!M9zN`PbEiDTc1(^w4Y*mvUa zouwf?`7KxMujI8=GWidyqEu}zS6a%_$^r^dDn-Za1dL8=d8HVYHr-grZ@YRjQav%G z(sB|1`+J*>+Nr*sy}QnZ+o`pq!HxRj4%9NMvcnblRBb&umaV47JAPg^E?Y3N9!VFO(yB?J8!03RtQXatXF8uDoO^^9L z9=Y%1TYvum-}yry?qa78Kk)4wlra9lx2vz8Vf+E593XupmlI0(_!A*sxm~=W+F9nS zg8Cd-pI0dXBX=`U3;|q)meYJO9=v09(K4%zy2n6ChDoFbhb2fy35u195|%X;C1gN1 zO4uJzz8!Fpwx+P|Y6ClLjfbz1sKPMYyU4sGB0>1M1IrZ{4JeMo+*V2&m!^Y-PGh08 z+7c91TzqJRtzzp`*c&Lb>&2R95h|?~q(0ELZdtv;YgLNvMqOSdVDFaR!L_|x+IxfE zr11e`Z(TD5Ew_P6$4;k8e-JCzj+@{Yl-vAW{78mk@j)Hd5m z=ozgpE>Qmlt?V<_Pr6Co@z_Jv@h%KOzaW*JowYlT5GV+TSHT6pN0-;PVd z{1V0tL@B{E69!?F-`?j#y=s&pIYKz4PjzXvRqUX(`!bLQWrA#30T6sOlddop3Wkxk zTJoi;LO3K+=;1&b(Bel=u8MjGLoe_2@(=9{0j*-a+*t9!;$tW}rdk!`5Os{J$MI?0 z5RW%ChrWXo;X7~53w^ji&}9_w6AS~#aYbwB8x=9;FRs>0(xsFi?R zDSORgyA2{mu%lLkZUV7fq1Gb03;Ka?+J6Je!eXs)v)i>!Hg_0FOgmh(*CD8Kk~7|7 zZ3)9kXL-ek=H+xtgOJdjHK5d4J9q5nLb9wt{N{qp3!*E8wF(GOVk5D^K`8XEzuRQf=%g;{$4UfyyeGy$@& zfR-8+2&)opzI(kbZNK*tXq$Z5(uQnA4%@wJP&<%C0NS3vb*i!iVR5o@1y1K+7QY7I zUKwa-!lFBcbP50pZjqT`Deqq2o7wC8zIVO+-7kNo$L1WG$Wqu+SL^N7X0y@iRLYmc z7>!u~EJV?UvbI2jbp*D2yu7%Bf1=Rl@yd>6`~j3V2|2XQR3&V&kkC8efQXBgIA>n1 zYj^k1y2|aUj0vMi*Dq8cC##)P+x!X4Z()EbnE@jq(5Ik;a?=mJMwA>;mu5!>M9Bx? zm~Nt&-P*u8wVIjXF{nKKIhaYj=CKN6!<(;{0mzLEk9Y=QR}^8Fg8+%$>y@i5OwTxV zgRnbUEmhk7R*pd!E-BHyktyn@7(=EYv2c*E)L5-|TBpP}=|K)+lp_ znrSsoR>nU`>0C)>5%veYcEH26Qk2E7lIys~rhJk;!`DFD`%rm#;F*80M8Cuu>+^ zHLQZ^RSmO37iN%9(6NL-BT6F_q_H^^c6#MybnX07t5R7(pTgCVh1}T4u$jSNMk5^F zXZ$71bS%g1{7vvj$Lx&9#2+04T~3KGvGZU~%1b3dIVj4E$Us2UKtNR>OjaPANzIP* zOC&pcqMr!#2jL(g;h@0qY4vkPMs*rGuvLip-reXl^OBI}S2C#Zoo;}cp)!QY5Sz(J z#tD#&6T-^d<5gBLV&==`R;7)rnd&f3u9mp0RF;~D7SjQj z%s~X2=2vMEBui2rCTr0gxjIcL1TIC33n;K^76?Ezc8tG5|_Y^~$qh4g#`RAAo4grnYO`;wAa(!R(E0R;?J zmZ3r9Y%9X|VZh)p01O8EYz)g}#vogRDscjKN=Pu>v2|@`Y6-QSJmG3!`ig-+6jV7v zC{ai`$A-0gz=|D$(A#Y5oEe60g(Xm(bxBOnV%id!lng7Q93peYxQNhUT8S_`NExUi z7234|#Au}@O**K2>eL4AO8|{elUjrsF%I$1A4}vd>vG1{;7XB>;$j2D86L*`leIAk-w- z*Ko~3zGmb)#}X%TfI0o64q`Y`ZMRn|tr+%%0R1jxT>Dooji6(~{00TOZ8L*Lg87Ua zP-@ktWd31MaMP`?5ND1hby$TY&}=$l!qhLrimRPvD%q#N35RhSC2vFHj2+%5HFRuI z>IXhbZ1^a!8HUczFmz}5*pcC5=jJDzp*WQKr3(i>?ZS}l1G#}-Y83oo-y7(aged&+ zN;~5IDQ^iJHbZw|3e5sMhY+n|w5=9vZ4c}jt%8e`gXm8)G^K`20IS?ka6*Eql}ydV z%q32mzeogeM7EIlal}TsQZU1@ zH-dNHdSq;e+Sh?H$qbL>IN19RgzJn2Za%?K?r|*l1K$e7VYxC}-h%d3#Tk%SB`q@{x^va?k}`|H9*xshE5*Ua=M(dvV|ue1yM@wMn6X_eIbp~{y1 z5m~GDR@!6xpwkC9Ix+%b9~UkPVp+oAL`s27Pa;&V)H+2-AzOo^^!pS`EHTD4SV-WT z6$6+>Vz7Zo0j+ThvIuHL#hWm;E_kVCRJ_7GvVf~)3!PR2h9Wc)*kZ621CTR>4{${x zHiiQ-TVn{nV(0Fg zY+=4#u9>Ni%!5Dy9A3jn=Zqg-8`DVFFX2!#kljK*{=#t8=W!XsDoE_SCpx)Ov+b#F zaXos0F(8i26f}4hW+u$mx>3YvHDvE7t?=kTX!?@wZqGN9ze(9GovRz6R0^i2=sw9IzPX zef!D~E9b;mX+0B#X|LLDaP1Q&&K!5l;ezgI|A6@YVfE(@76g2-5DA&zliPKbH@|1Q z{KaCMy!s;t{O^{Qi3_MOZNfSWt4M2#g=?=sc;;Yi3O!g~4FZZq=e@QRdP+`&cJqW2 z(5Z$V(9L1NED9j=f&_@ss5-<5SZOciPVS5%VOEus(L!cwxxvA62Jg8lIoR}p)YuyA z#x8YouxV6a-3}=NRz&S{78U`DIlsNk4jO^a73SDRqA+ajh{JT&+65myG*Zw8+?A#Y zYr~S)u0#WiMVoWm_yevZ2(m~_P?N=Dm0FlHgsjwHGA!21;~3Up%87(&4#%OpMc}A0 zv}2uOyUAeQQEaNDlNp*DXv-T;E8I{>u|vh$s`NqAOp!TsV^}pYNAF0+otA_^r8ir_ zt^t|wxa0u9=nJtr)2b{+GT$~jh$~m!h?2Gr(Zq?S8E7J6?~l-BlLc+ls3x2?&T=3O zI@wCK!_nnW4FG(2<#HK32RP#@8T7^G@UBk1>L`>tD7rt9zloQ#&1 z;o)>QF}MU4NxgN)Yz33;6a?t_ROUpN>narqLw6xUa>k3T(lTZ!$rM=0B09QwT|QZA z=kUi#u(p&ND~yic3@d}EA|Z>M5DZPxC`7%vg;n_oI?%d-q#i{ZIZ#NBkAN-`rE;!T zb`ydKmL}E4SdVTUl8yxEC?8}G+O@=Lwi=Da>BZ?*b*Wkp@;xov`NEs+MH18n!;nJ21|jD4_>qah%$%S1e($ELS^Ym?3sf z(c3AumMT~!U-F7Y4h^jatOxC5OU+!hNgL}h6yW0qfMK?QZK{pcHYP=|2N)<9kt;37 zY|?>Rr&?;YiIHurUe-y}#0=J2eE99GO2X$>v5&0gnLzbO0QFr3%PU7$&z2wUp;Vj! zqc9jyNRlUjQL=DY!G18x7GV{@7;h4wn1o|+f|_~87$reT9XC0a^)zb4rYupYv;dHS+@?Xix!i)` zR55KEM+GicTPq612u$A%#cGFQSfMauEfvY6u@X;!l( z!o;LMDFY#Fas1VU&BIt?Va1)>$fT8+gJk#Y%UI}mBnYuY${)Dn(YoQ7A6Po$1{F71i`jNt^ zdZ)OSJJ~0U!X&3;S~`Zt9J;S9yn2yKsRFN9UI@k!vOYiRv+su%Ieeo}2LruO;BLwb);28PZa=7Sa>g*dct-^8w=C&0Om*NwQ<~GWVwQYMM?U` zr%K}p2Aai16Q%;gR~QYSFph{K4tttJr!fvN-vTlIu%62t_g34+yg*B;K{i0BHkjx( zi)b%ctZa8?8;y=3r@Ocu?u|~5dSy)O zC-U6CR;(ApnBJ&eruSBsRyy7Rgf5xIX{a+Wy>sA(9yaEBbm7KsSD`IS=8qo6SM$=Y zuQX5gdxfb3Gx#|Gi>(Jbl@?;QF)EHZ@8y!&&gPX%)3UhajgBCitova-qE^8M6m}z8*;QwxT?}3dcStW9mm!BC^4CtW z>FPQYdzcz>3cA2WP|U`ooedq8DYrf8P)%9Z!=M;nPBODVSX{#pqX#*Zt%Vl5&*lOh zsoubZE6;toHh8MxE;&k&Y}tj3ujXI~+THKvrwS83Oh9-A`(fe1jzO%HQZQf`Koz$! zlIA)$H#7icsg%qx$}vykV9Pf|LGY@S2;FI*{X6$q1imT)UoFC}-9U(MuSLg~b<5EH z4TxE|%fqtEo#0%?DRS4j?k=}*S_>_l#zzb1numpR-NVAUHe%si6cadhvIq3>&V?ci z59sTTcnc5c10K-FdqAJ~N}oH{Eq%UQ`h2(a`EK*icT1n|mcHO?{skZOm!Yvt=w1i3 zU9M$#@+im*M+VPGiIEz#Py^V{p$z&2j^SVyg01f|c5zLwGO<)| zv?@GR<%S4t6*lsYrDcri97DJX3DTytO1Xz_3{AoMAm?etZtWWx?C;04q*#N(4CJYT ziX|hoW-HiPUnwhjYs?=pyPL4(1T)8qm6L8Brk%Y^rd(V$l-XV9lo+_M-BZThgBb2s zF%m(2<75Z&3w2+fp0#^YxIpH$7E8z`CGWAu8rF3%kytFAY*0K`M!}`yQaD{!Z7yTR zCo~OPd3FXz2{{zBg7O;;g4>M)(41M0RdyZX_8G9zGR#=T1Fwva3}41{aSoCisn#o+ z0}LVfKp!`9i^0m~8 z)s;B3xaLA_(L$x8JTW(0F}wM&_))Glf*O@Uq7C~Z*QR>0)edU6(@M;8!gAY_rJw`j z1sqf50>g4Uw_GVQ@9hwRH4gSJ3_i=1wOkWD3#+aC{^My)a|2+-Z%XjW1z zX`Pt$ua+D2Q=;Uz@!3b|ZWVuwS_2j?v6W*koCLw#P=R_&1p=GE#2)G!ZGvzZvoYVX z`^J3H?bygoEb1Q;-3;}H5+)6dQo^s@X&;M*6AM_926-ye_@pWYV&F5g-M~A|bGXKb zX}*IwVWUK$L^+7TpW7J~V|;paqTXEXsF&RmIx?0TmpB7Av<>hiW?Cum7(N#EB%|0d z6yyV&KR`E<$K2d-!G=e}OoAuEaLrZ{VBX23q#7dGd^o9EP>7T-ofs*$${ZpOw7K+3 z#)l<#5QR11f?J9Ju^l2J4X`S~Z?h^0E)@Zgzp+RPio}a$0JhF@G-3bNCa zNCki(mO#4V#FBFw?N~HsG(or7p_kcYU9gi>(7+tjpgGyNAs|Rt`h`OW<_B7vhcI>_)O(2khkp$`PqL17GIs3nA74)2Qr zU}pafhfD6>5{oH4&Cx*uxRf`N7t<*@>{}!=*FpOZ_pBg@^AcGIC7yURb=YrCahl-c z%nSDOp7P^4668oS0zooJ0~Gp|k<)TiVPugu$Q9c2Xyv5IC+ti-)h~v(2xd-{ ztK0-WNuPsbWCe}lv>i+{As~N2lmN{g;E*Id@$cl=f`HiCbco~a*&C+gSk1c+F8wYythx|YLFZ@_v8%p zChmpJVe=1`lNb)4+0e|cnRDj~ZEVkT!hClE3B|fySOLRJ$mV2&OSz$mB?zcVz)Jhz z%#;%hJsuLE4MBj$RL3F!-ei*DSW^02Q%YZGGubz+A;t(|LezR;LezYrabVMd-DJ?E zHt15*5JSy`C^ZwJ)CLXbnL5vk!2Hr@A%hlTaO^no%(teEu5wP4siGM zxv#`kC~+GGVIX|ng;yle-#d7-QZV*ZiDvAn!K+drR4MS)Qn;#LD1g|`-T_N&=Pnv& zC5fH8gCqua_O)<&r&4P6_4PY%6yJdL4_X-B6t=tfxW?GsYeVs-p?mr@6!jCnDIRK9 zVQ5SW+tsf*==AmNG%$G+dYwL-KY3Hw?wy882i0L?;7vpK1TefASpQBN18*7w3{xuo zgF)z^4ISvUp?K36yRPcf78xUNolBn#V^iqh?77rAg+>jp#CllxgV2HLVPB$Z7ln~?`;l4v~ zx_G=+IR!&{|5R?LCwnt?dM@oM9n!An-2gY7$h3OARvOlRJgbhNrfv6(XvD^SQZyU z%Hm>3SzHWF1!5w?GLDV$bX**hkb|QsIXIe>gQIET)1a}m2D{R7aZFkcj;7_{Xj%>q z)8dj!Bq^?|L`oIKKtd4=QjK5`Knz_Y4AxMo6zkDX?H6{yp$33SRl8KJ z&S5@6T?BLWear{e2iaci9!+}D791}tUcAmiCRY)7<`Qc#k@d|c1_ml75uj0CoY<=P zL?P6-q7dHgW6yH%J|g?B+K}soI_G#v%JGs8FW$HrrC!j;5kF$zyj*S7nz$kp$M|S` zfMTm}C@9&qAG+`C&VjzZ+@1k*SCWPF=CC8M&)Yv;nDb}-odeqi$7gE315~v0klHhF z0fd0GQeId>j=IsAS2j$WJLXqfs>zGZp2yhnd}|iF3HOo+!Gn8D_WB3=2CmA%XMnj9 z)NH=upc+m}k`op~ntQXgm}78D8Q4|EnOSLz`+-9yn~Y$Ka2Nl4vu`*=+%phI+cV%G z*=*!Sq*^gU;lU{E#9OB6MJppf;(~BOcu?Vw2-4_;e=FCAf2pMl3t*9ZF9dmZVkCj8X$9zNNjwVz!z8>p`9~NVWQ{Y zMvNdZ(~?GmkWK4u|IZbNF@JS>Bc)aDSU1E$3p!LOF0M?5A@u#Ap;L108L*g?piDsz zvvPPK0?QCZA;dv)GMF@mAj>xTIR}wQ!snqWe7zv5>3KDxIB3R^OsbqVoZ<~!K4g|t zWR62J5PRGQQG?*6Obd;20+rL&ZNL{{kX(j+A2cwzY`OvsxIPQnJ|p zjm>J<1yQz`u=e5bfbRCTr<{X*^)}ZBD!5<)n?%4tFiWs4f#9YnoH)TT4+(>5jfQGH zed*zPWT@BN(KlTxt>QEs*Ci_X8qQ~O7mihN&Gwnl-shF_jxHV^8^sPjJ;uee;;tee z55a+Txfn(bh}>-sTRYZ#O4wZL)F|{bIj`Xw7|Yz%2g_oWt29zyxOE2GGt3E6Y{5a+ zooWf$U^kv(cPS5$$MRHOF~rdRxTk&QhS`bSbz|3gBW&FzDm)A^TJ-*r1A$$aSG$HG zBTfh|V|7BPTVwNwoR3rOJ0Js1+#v&BKnCv)8P(VwGSu2F8NP>P=(A+_9+IIi$W37R zo|_Gd#2aw!p1=_cXHFC@q!lit0S620Jk*_M1Tf9Ii)ZselgpUyEQatfH>l7^Vu8+0 z4F~q`!_}uti+$YfTEK?anL>dp5!g#JgLMvDn)$gxP?|NEkqKvV7S4CVc_T$8+FfixI014PAHdy8|nA>dUvF1dEB6vJie-E;|!;-ZMWCJKuzEMlcSU92>5 z&sI~e;H&E$Eqk^P^ivbY;!w5Dsm%;-+<+Y~;_pQKduS7N!uRw?!eQf#gu@>V-?cj$ zzH4_Rd}n_&efXo{VkHgJ$2=|)j)`1^KKuxuDa?$GOzfM$4ff4KFaa$u7a$92a+4K~ zlaxotWrB|T?Q-qXGIo1|Ur89WcHQ&gAn)hJLH^TlN)3z}nB$)(+flT0lj2DG0&!KSOGHem1EaIP++a$fQQS&>pT*Uu=%oOyxXztO*e?VYUl?$Z3 z>(+v~_rRSLqnNuof&=0GKIUM{l!zTrMRbGIs?CI=2nT&4~si1_r@mB*9{| z>(+RCJ7_@QNGQD$O2Ek2$jtTq$nwCzpf}Gy=<+Bq1qWA=?CZ$b>>S$R2tKCZ&+@|v zxWjL1>;^vxPRo^OHF6IuWtNYt>JKsMbz_H(|KRZC#E5uj!dGmNjbMsDKMNx;zUol$ z#zvx{0^B zjF;aqDr^`LR;M)%r#ga$lvE3*?eMSv=Bxa|#QrH%(`acBkyB_Nhh;fAGYERFLTJ?!W| zj$350Z5Ss8oUFhg^`H~kKa-8#<5=yA6S{3fbi#6 zL*&m`e#(4;2>V_dcvWPdeT`(+g@zg!PDhi?_l&|w^$0OOEFIO9Rl zZ@_1Ph^fEE4>pK@-}LMOkAL!W9yE*=+6?T^$iX!*M&Kl73A5I=zu1DIhqn*3v850f zikmI}v=GD^!?9Cns{CdNK8S*QpG#<5wYBYdb8iTjW&=zT1ZvBqL?5Vk8h#0yjoZxx zpWnc0k}{;*0wygBBC`td46rNX01@!~t@<4+AJ~qB!;RFJc;ncjh&vwjBqfGI=qG*t zR{fI36*!jIJ{}1->lA2|hw_tXfSf@YP%L7hh!1H@;%?Z^@?O7p&FdR*sN!e=3faQ- zZ8&8o!NVg?F!xOcdBPc+_Hnd{5P)r09YYxhLxqsgiF2T{fEyN3e#gS#hf{T5ZlT)> zL(vs`aS!)k`;ZZ(zFgXEuk2=kSv%Z|`@98j5?kARbM*k&bqNrrUdaV+LJnQ0?kJ(?H~*$yd&ho`Byu}mgtOpHK2PBE}u6Kao1j(0=5iN@MwXQ5R& z(ZvuLJlY*(g>HDyF~=9fmxtG6Wr|Xixvj9_4T(MXi$~N zID-z>c^(sc8Zp42tA&`t@NmJHSp#~pcW*ClS?8;_HH?dsm)K_-41PH9yd6!Pf`2uj zAHxy)+-eIJpmM}aASYLllBsaqp~*WGYDjIjdn3Jc#f}|^omxE?Cvh8mHzy-?jH~0( z&SLk*N3M)#skh*>8@xCkeOn)Gqmk;sok3OXS3YH`)?#8Kwm)3K;as+wpg}Q|A^AmG zWf5Z0or;cuoND@(RI@39Z%#;|^4K;8+jeh&3!XPy`OxdkopiWVUmuGt$H*x~NQC2f zP*81KP?yYEb46l&Y??KjX(RG(7!8ug^?e*i$K6_6aIb%V*#}X4?Zp1svi(Yc%cvHA z|ADz=91{+mtl)O)mD+*)U?k=vcLn3iC7K!?m$v`jEGDM!I^cC#`+DeB&hO} zPt=IbO|9|@X${rT-s&iKvU=w5sx&PGNwb839S8P#$Ax-D`gn7gr^8ZC3XS8A#KK)4 zepU9Uhzg>1?id1jry*h_2nC*AG2+I3YugWZgLh+M;7Z59=`fp{rjhdKNv?f9BprOB zg(G2*U;uTqTy4vDTTY><=F$g7=>obj&}}i$;k(M%IznXEZ!R7%-*lmt=EOt6>Wz*O ze^BFi#Q(h5MkFR98(#6etx*V4Xd1LS1XctMw=(&SMIRSfQh~&U4U57j^jjy(Y4BLd zeAvLSfjz8Fwi`^>pgx?l^_a|X znJ^6u`@$PHSIXOb94{~8N_(s#O3ASevxNyKk2m{^HC!+2+#BT<#c!^*uo8$fuugwN zgTiqQ5zrBMOHTMB%b;#o%_7H!g09fkJ2SMRR;q1Wj#^q4gCcJ@IfWT_*|%66y0AuR zc67J=6l|phi9!w1nD|3n(pcr8VZYp{7~bF%Lk&0aMvBW`%Q;xIRhiCd&gF!B01{T+ z$~b?ILoh~X3RO|>90`(~P3RnGnD|$*1RF|{qy$MTPz!>FhvPCR9U2oCMxi3QwfFDC zhKU&;A#jqYH{dbX+~Hf843y1zJcN#gZI-Nr@1uA)C27C56GrwIaXlZ7=yvA^FskgRVl#FGNLCz$166qMkJp7YhI3UoFm)2cx=qCr2nVmC zohXM$5=VHZ(#6M!0;z)GYjV2a;1%mqtLRexOb+WLX4X6-ivr`=P#_Eodh;0XGw_S% zdo5wdotR00>BsimW-Ve}m+D#JvQ|IQrA9!OH;%71mAx8HnH;OVHa;zj;iOVrl#v## zzL1~dXJq8V$nokhnh5K}d{-?=nL4=>x>RDoB28=dOP=;ujH{mPR$X9qc+e#m%*FZg zs+v;*L6!sr`ID%iwsGSf!bM%oPwvO}uESR>{RS0|P6!g19fh#2`QX|D+CV^T4tBQT zgL7jZluh3C!aXZOdv@&5^mSO$5D!|rG4xtr7gyAbVMKYb%foJv;QSw5K9~w=cksX^ z_ZINJms6?0mvq6Qkxx}DtJ?M?^Q^{$_iTL8#p4U2S6UBMUF-*s?i3}OdH2wa6zIU%cNL50Nlj8z!ZqHy0B zKmUpqz_|jhhaX!g%v^^JBd&MC(ucBVzPse1`C>zfRyJ;1i&2M>&I>eNzKJ$#N;87> z1$pb{!x|<};8oC;M2pa-7p9<1OT;d(Dz!`?2TT}m;ZZ1Gon}g573GW6v`qB!2j^kf zgGL4BNzZ{Hqu8bnf&1X(>YG@OPww2&EWzLk>lJcs@Jx3BYjNn z*bi{}x?MwI?8hMT=1XmWIJN^&!8D14@OM--;X)v=RW}X+*q06)aT6C28I=%IFV}k= z)PJ0|md~=v9bRbW5kKv~Q4IF22nuP0AL#>u&@&Rw3dHikUPKu4C$n{VDa}sGuchkC zEj|^^mUv+PGM|nWA50nI6HijBL)CN5&@`)U#$b1iw=HN-cEs9-Wfj)EUVkt@Dc*wxj84;Y6C-0VHSuQ_pRa_84VzLh1wc14#yJ|* zMyvsubrN`tIWD-433z7q00DPG@2bWz{HDC)V{qH?JrdkXh8OOpgc!%xQ+SLlG+tbN z1^J2#X0a(Va>~~P*Bfzd#kBnr(mhvysTOyEn&!^g49RbyFfUUkFLn|%$K*|lX1IW* z`pPzt0}CT;m@S%`Q39ItuY~d6D3Jj(Xnnl0?Vi*RA{(0g3aZzp33Mwz=z9gx$LuVO zIWYL6SW;b>;ne}g4jB5`2w_gN!3BIEq;L>RpbjiixIj%pRiFd&``GwO$t>28|hu4!LKcsH0tonGWBK0X4?DI!0}B5%0FJ^;GimX{;~E3hhxe+IT& zEZf0q!1G|`R`F(RJg~43l#i4p@0NvZ*&Z-Ud=ZXuM{bjsJCL`d@Weij*1$zyY;`z= zUOPpBh@UoYp0hPl#bw4V3?GOsVbsIqCC^JPWLW7M5!lv1hQ{?)WO)vsGPhx@o{$+_ z2fVV)FGevfABkP!35f!-0=a8ihmD)JyD_>+Ts?MRX72E{LT(>FO+Cf2O1yGIA{vr{ zK+K2~ri}J4ivZ{V0R<;jKY0YbTZk#h2tV4{APGG5i?yz{Utzm37KWQYB z>nV7=SZ@IXfs9Ntn&t5wI$XTfg7Rb4N)`TWFc=8TMV9I*PZjiS4H~J{D$CnVbA_o{ zLvdeWsHS3MsaI(WpH&-_BkRlCt1}^)@PGmII^C;5ipk>(#t$$jKQc0goeJ1pHiEDB z&2d&4YT6u87YqiD6UZq98m>i9Md=X7C5WWumF)Ws<#NNa}nakE7NG{JLo}p_UR*y{nq%{QA290PlXz4Ud zETJi2SU$5jV6v~uTcmn173ZB=R#i|$y=1}o^y&r7yaW|H0@S#x$oA$1+$_Q>M^h=ggxp>~aEyS&+VkUvNYe zh1J_(xXzR)5;?mPqaZzY3WX_z-Xmqg)K8Vdw~?U9NfaIqnbAcZZrwH;2P!r6Xpf(C zSvIfX{rmw1?g_w|u$89JNvei6radS)%&E(Xj9Kl_R)~GNW8S{}WMPapkBWELJLMh5 zLNZ9i?0xSb<8rLRi}2h9QIe?|5`nlbH#>dp5DIxoddgeUp2U=c&r42s)B=` zFg!mzGKz^z?3p<*EO)83*&AR9lIz?K_4(r{*c@=r6<#<`_(*Da|9R+}@O1hnob+XX zgp}Y=uP?vMIRf+v!~H|kI9MJjre>od_h*|37ldEH$}2W_@HroUzuE8}lP&KR`nyqo zU#`E2F4Vv-)d)*6GXhFTVI9U+u4W;J3e<6wm(d zjy*?W&rPxC|LyXfjy<*<_BU3X-LdT7q{R<@z%D#5@$B!P%F8Rfe@prOX2Wg5w!ZAI zg`bbU&1c$gJl}CVn~qJ_{#tk(|9`b#E5am;zb}bB&&M8{@BgQMH6w4b^yBKL1}SFSA2#I=>>C;kP2%HW~SK@NB&E;h!(u(ve^0 zg$Z$-U__1|96LC!a7^KN!?A|r5XT^nPaK;l*EwcUj=mD^RdBC{yA=S1$Q+ZP6v3`!hJW~5L_N^7;Xe^6mATTiqw9% zakvS%x5HfrHwkwDZVGN1ZU*jpxLG*rGt{XL!X1LU0d5}dFx)%f-U)XE?nbzG!7acY zg)71xgDb(6;VN*8a7%E@a8)=CM91N3a4T?ixCUGk?gSjQl{Q=lZWZn%+|6)naHrtj z4fh_nTj1Uc_ddAy!<~lv9=H#{-3oUb-1owL5bi^8x5IrO+=t;l0(S@8N8vsO_i?y8 z;XVQP{ct}3cNg4$fcrtXAA-9Z?uX%i1nx)S&cOW`+>gV367C+jpMd*GxSxW%7w)Iw zJ_YwPaQDIeEZon*{XE?LaQ_F~FTnjG+yijG1ovsUUxs@S?lW-z5$;#u9)kN-xLs!-+}vGxX0jr5AI8FUxqsi z_xo^v0QaBa9*6rwxIcpXW4I^a{sit%;l2X*B;23D{W;uUz&!=`mvH|V++V>x4foe@ ze*^coa9@S{JGlP>_cgd@;Qk)&AK?Bg+_P~12>0LM{t50mxPONG7r6fp_dMMHfcu|t z{|fg4+}Gj$4emv_^F8Z;;JS=P$i^ZPhmVEZ-wg&VaztN)AI7;#bYcwC)WX zU$Ws&1PlRwnTFlS-{GE3!#$hxJ^rohKbHM?rrNVvARESd{I@5)Bg$sDqi}qF{T2AL zzvrn<+0VS92bmgz_ZB!l-za?_aUX%>Q)GejJ)8FT+_~x2O!kIs&!#-nnFN@1%I9YO z0Zv$s4`$vkc?T-WG2y)Lv+pQz07rBmZa|s6LIxqhb=k)*>e-Oz%iXUqYaL?A^p5A=V;QpS| zuetRlcU=6@i$1pg4yodEW+SALX`oT=*K#!ld zC1TpoDSrFH(tbx;+N3q49j%&1>u97LGv}gphtj%}`AgzSl-A9e6rRi@`V&g)C)ps9 zXwA6!%3R+wKiqS4qGxcdXD0im4M~LaJu@K1G7qfBA3X2i?|Erw2iB*MyA#n*D=o_I zkXF8DD;ndi+Bk2fFKm=!J-rKEkOSWe2(rLDU8Vp4yeKJKMl?u!7`+&D@cgvO zU=bgotjYHbxos``fy810i*4&prS;EgeIQ!S#}fMhn(F1C^`z1oWadzhqZqt0M??fp zaMYrNW18zBDBi(j85HOLcc;mqQPA21ntWb5$1>UCI_gc(I*9u|=RI?e z>v_@fOxkyuPu;7uUlys8SeyEKl$Ybk#*-TFXOjC;yj^@Eu`huR>tO38_=9J+@`tdi z73S8}jKcB`URhxrtNAeQn!>0n^C9dGg}v2@dym3?RqAZktk^S@a=nPa% z&T814@(Q}(>^g*z{xcf(Z#p&-CX;IX_?jkFx=UZi05h*N^ly?5S5`U$8cvm#595q0 ztd9W6)1t%~MI44NpCg=o{dNuKyd~OxGGDTdfp`xn9@|_DZ^q)04^JpwFYzQlb>zh8 z`_F0E8#L@7LO2iDxRC&3A7Gq!YI!eL_-~nD;pL#hHY(p3e^OyoM;U)o5MELrb6A5!hZ8K*4 ziuSMUqmUY|76N>hV@TuLa*z*m3fql$%nvpd!3XB4rtr@&omg42KMyHkN+YuWZpHmq z%@Y*ZTdAi%vrdLBc#Z6TMDczhlJ`K*kN5Gr&n5deO2uKmc|o)?UrUnxY@>5Z=NIuF zYokA7+bH>di{jlKNiW9t6EVI+zLS>^Y1~@3ynRi^CW8869X+kM`|!?(u;&#vE)Zk4 z+Ncfm)k+iX02Iu8H+wOt2CXggZ`Q-|j%vJjl9u!}9j6b72$(?iOaH1V9@_}WYR@kdZ3y+jvVI2dKHn))h zcs?8Q^i~dFKZVJ(j9zGSlw|{ocO8+XypW9erF;a6H>ctK4Btn+1+sAL^WG4=O%3}H z!(x44zhx@8o~byVAi(tP2bIQ$S;iQR?CG!{5$!3({SKywXAW>zyvO;J33v+iC@|od`n^;e%HNQ`Qoq?h!WfD-t$z*wmoWTq-0(RKe~Xp@WAJM; zPW;X}!pVcXG<+-d+9ZBPYy&qZiJ^Q?)6~sVO6wMoQXZhdR>s^Rwyew{N3^4%!$jgv zCjl{b>}{_m5o05b=4AVg)Gy<2IqpYkcg-LJ4ER&qD}{XGw4-GR1|#NRxSvb~9|c??04&ZTOEc|O@5 z1lxHeoy=#F6FQyE{$`@-YzzbjQG{DGogN)0jm)!krET;-I86SEd-f8yezR{*RHTM`&R%jjxoj{Fi2kSP{6U28j{bKxs{j2|qLP*G zIg9>zHL^M?6KSkb#{1mQgw&kyJE zr@L(Xd!EgN4G(K^_aztZS#$--+nq}9{mFTY>B*ULGPxPi0iIM^H!_1k-eU4~+Nm$d zSJv01Z(;=W>*PGd`Ge6kp~4WKw2pp@Xi<*due8SS&hp55#!0mY`4FtgKkMXi#T%x6 z8A*rt;igc+K5T(Ne%x=8Wg+p9hW2TNgS+oUcU7^Oj>s((~9vRbK|-4-BDUwNfP-w zCi%vq4!nfjrQx4qxREnKAJ3c#y0Y-|5yk!c3#*$yPOBU0BOAYy31YtsX{E@w?8%s( z2!(`k$2IN;NWkT_>a42Gv>b(BDry|)w`trP*2Ur`&yBB5>u;loepYF9@E*xWvJU>P zqwz{3`lNlk(z%LsT0NVn>Yh>9_Y#KKSpU0~jf6aVNW)TORJ?7!?OZ%tPvL^+Q|s}^ ztvkarSAJ)2U*9!l$@icEFi(?8XCk?e#P@W3AW?mT<>n}8-L141liNhBzh$pUEZx`mHIpaLO_AW=0qfdTDL$bd+8z#Rx#P{fyEg zpIDco?^H$2k+$=&hJSRU36I$fM|`?~qdy!Z+`PMx~DuaEY` z+Vj^^cy=0TvyC;C-k)5YLNB^jv@vn64Y|)UJgl@(9r6%%R$;b%N%<3C&nLh(ZZmW? znjf)4_zL@F!cyxZ^AmB#b7(!Hao@+d(yq-uie=Gv@fToe|B5H7o8TP@!tT*9;u#u; zBy0fQhc&FtFysxo7sqd?Ud>R!@&mgA!pu6(a~kh;k@khQO%^{iI923LY zi%49^2-S0qtvmCHC_fO`?irk+Ix;@oGczi?E%QCgNN~KTcNz3y4~$8Hl|>8 zG*Ofd6@`AjXC6&tU(ZnH7sNj-{_&n6Ex)Gqi%3e-3iX~TvY{7h(`e7oz8?RmRfB-R zw$!_wk<2+2{t`B-FkNnxwd8q)m53Cno6I|HLW6Vr*(V12Kw1&MUJXhiqqlI4J-mnbyOaMnwKAjKd2b;ys;!_q@W~cCxWwqIfPnUt#WeGLQfp zSD2a>#XfUHVIw399^9IFx3p~RVv&5^qTy6W_%N?`D$LEpy$P^~5@3%h%q`PX39#oB zCi&8IH|%5%%$Uz#=H)Vl?IQpWVZ91-`8%pGb{jrJaPta#CFMkH+@vCjEvmXK`ajnt z=`B|y+8L$s{dkYGAq*! z=ThLc6!>i^@G~j!2UFmWrNEy~fOCHFg2IPbXz=H#EJl$_W}nMtyBJ{VGb#M)bA(@t zct81bc;~~h`T>Q>zGEX-RhPs1R|ccC zz&6Oa6M5W$YALCb^$ee_?6bS!d)DsziAKt;5i?C%8#oRS6GYoBKC=<$$u}x zkJ#{6!IPN&6|ZvB9|zi<8fTJ&B4~EmG@|pvZHd!;DF4jglS-?MchZvlVQGTvL`>@i z4gbCiORIXWw8r-`5p&L*X&sQc*o36Tx?I+9t4A>XTNL(*wDhBPtUZakH1ti@EV_cE~wv%3cEI?J_DMcrG_T zvd5`cVgE{4H=kqrc;>H@)K}78Q#w|UW*y$4u*!wC2ds7{PJ*R9JfXDiAQR7<&+I@- z+a98fzx*2f!9y`ZT9{ahE$3>5=hE^U?W+%^wBMsF`|V2WOUZMu7+mj#!zI3YZ-g*P}~zqxL7ll=wKds@Q~v65Ene)S)dr$nyGmB0wK7Kf>n$g}L+0@dVfrg}HOZW(>x%+@`QMFb$N& z>R@LSex1TI*e56TpMw8b3jWh6_%Ed3UpmYLyLG&63XkV!GzI@i3VtUA|Be*=dsFZq zPQiaX1^<~8{PiQr<-JVdZh0qxI-u}+79P}BOupili^%@a>>E-9|5J$1Hg=oRv;CHR z^lpWn>&)j(P7j4jhu&+(>c=(iD(J-8_KI!W;|O{|@qUVU-Q|d{ZDc;2B+L;N$$I0X zBx3Gq3H!M$-vpZF&(*FGD{D)OeRxVI4(=K({R)W$y8FHs(1%>p-(NF5kiez(S1&p3G4 zPVQIOMFKIfM-;{}gUYDZj>bW$_~lv-(PN+3w4aeM4`cq4`b2EKHSH1(mi36zs-2^(+2QVSmUVHr#vP*a z(VY*-nCM#Vx4kT>bLN3&>f)O1%Vqu|-fy=8{eF$RcU=%S&?UI1-zo@9`w7LBF%^D}o6oo~l$YZy z^R!+wSP$t!Xhhp&_Fb`hLOiy$A&vXTcxQRSzMc89?a)kiS@Axd)~=#+-5*XIGC)Vh zf2HN>3)Dv+Q}}!E&icHSOJMkA^B)E184dsYEIcvZ%b~}>D2?+{anYH_sYpa4ZwKCv zKX_heeq=5*uCOcE0J_^!eDB0eis+C%DR(KYKTm6y_e96nFQgE=2jwJRo>qEWm|x)w zW)}FJLH(1T>t%p9ci=G`lYJ@EWeWfNOHI74asH8LK7QtVyL}s~e({NiZ(!X0_XH+JIa)qbQtfpY{_XWk3`5fZ* z!ad>AjL4;vHa7A*W#475%f=~0#M8&go#BbQ{u@7EmHqvmr1s7eRz?pwqV#SiQPcJU z9%aU@xCY2i{8~{pC@`|J$(5DEvI)4)Def;TUnvSUXy^L~`RcYgv-hFv9Lx74H~ruo z%e>ONDa?=Cm*V!k&1v>Lw&Q!1Ruk{qj#)Oe<8Y6;jQ@(4)INI=^%)I+e-|AbfXAjE zZ1>6B5cCW)cKWkKHut-dFSyboX!E2wq~RAza{zHV8fWfecmiHyObYhAZob$y3F*E8gF+ohQ=&TsBUB2&fwi_=D&2_4pISgKnCz z4}MekK6q~k(ePz2dHyn?k3nf)=gd!kJKNRCO#iw|X>2s4q<`I~Fm18|dsty)BcDxh zXA@vgC%~Rpn52O@Dfzo`j#PA0sn7NIIxYwyiUY_c5hu@zCxA0gl6jqc(5M$61Z@w;CrL*O8Au zi{|46#cdNenh#?qK|Vve(E#=RPGH!JK7@jisp z&p6Yn1?fZ!l1CWgQhv{C{4e5N`x4p%gp4^lp7~X44np~v-tCItb)JQM3-5D#-8yGt zh^PoPWACFH|DzGU2YnZ#V`MLQc1Mc9J&X85$j{~*@CVNi@{cPEkfNO{DHGlo?Z(Iz zqKv~GQ5yFqk16pn;A3fXKDMj-l-2^?<83fdpTJ@4e3jnEJg^>~(s-khcv=r1$I$4b zS7{8knN9OVGx z!*ZE4x@{OKXZO~>199;Dd+k(Z#2M1Kx8&e)`-#URQP&x#Z%dR-ru{ykw7vqmiTsYrxy)}S zu>n!Z(-)N1o`@di$jsP17uXbz9wyuOA zj%dmFr}W-HqM&Ej#U50+9a}PAFzaHErQkoEg8xDa{-rlEL30N^((P*vrCxiB6l`k1q%Qor-@I-r0{sohLZQAnoiS#d|&R@UX2u zrZ8#0kYrihk_5Rq!?3TWgt1)f--SPTzRvcES?ap%*CgUS@H0=BYxueJZnphN#j|<| z<ymsX}vnog)Op+aH;a$2HzYriq7r@T&^@ ztCzr&)HY#OaOdW~owz~B$nyaigz;U2NWMaO{&O*T&h(cx&PrPPX9pwcU!Rgb%lDwt z;yWMGe^g;|k8M)<9+{8OeQBuWy$jNq3oL-5LT1qr~;tUG&b@V7Hp$(;# z``LjAu?;EZCawFAk`lg;5z$EkLPW zhSqNL;|<|=USWSuSa*H6#52FsB~*<(J!9#!GEKtwFFgpYi&nP_^ zn*tpH{1crvGB;gY7gcJ-HplkXdklZ@yxIH+-BE>oF#}*1T~tb7SIXX>NuWzvf4kBU z*#Um>V9(Wn-=pv!XL>Q(tfYW+=0jbSDZ8H1_z82!57>Dl)89~H0>*y8`hta4=C!`U z?_nUmdl1TFEQhNZcI@+C5}7=yxNPctw!$4%n3!HnJ5c$L*{<_p3Fh?<#r-8lMp>P- ze%7WX{a^7oFW|#;9#xo~%VK;E)4|Xo^4_|RLC=n+1QD(oBK!)cBC2+5v<4=ls|HXY*P8HIa9 zVZTE_x15RZ$NQxu2{DAI8x~0bd|@AU>7XvPpPA_{ceC`uo*^|IG%Fc{CY8q9*dAOO zR?m&DalR@=%@taAE3N;LO{5i{JO5G265!AfqCc&))?boHE7E?ReQ9_58Ar6OOZbCl z$Ay*cwP|HzJ$97VE}>{-&g}|&Nu)1<º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 z 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�DlB{4E3v1fWHVlx>QFr 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 z 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%0D-v3%l_p=Yxd1JC_@%)0gEUt2$M_PcMK z=X!S8GRgC~mvl*-dhT(a>sh8}lBb@5y%MLMqn+n^-f2wo)YEog;?%Q~^IXqWREC^;JKcIPDt|9bN@++Q_n2txt`t^C3)&O^peD>=lPowr~LW1B(CyPPE>D_ zZ^1v9IOQ822|Tyw(i!#Tk9#$7>i_!V#Hs&`IZ6LutZRJ?&Nw{(+$4WE)&~v-XT19T zi}c(nQqCB!rZ2aYm0NAR6#PAK{oVed8#a95T;me*xb`CM1zBdq}dAdFDFcw_&{N0DczomZ!iuKK|%jZP$O%&fhY=zn5#tNy#4C zzXmw%-x{3#y*K!}sD~!-lVze6>!BH(N$A(p3j76d+W$d; z|LR=Jb&LFq_AGTost2xHuIN0MZt9Q+&Dza98{nD6u`=pP7q+H*Si5*WWOE$}-F z{Fws(xWIoY@HR)Ldh3LIqciwR$Xj}V)BX|Q=b~Jvfb+XfSAx^u?gXd&3*eNW3r_hz z!70D=QK`I?Ul*M6oxnNn{{x)&a2^hRCF*T5IP2#gaNc|WC^-AYOz>4Oj?4z9{I}qg zp9ju+O_w-2)erCI+z_1dn>*M3bu0Q~FUZsX_W@`9oD9zUoG%0a4dedw0)GL#Kk8=| zIPZ`B+<9()!!fBIX#YaabNST@^1FjGzug;rHQ0GDIO}I3coX97wcxxT^=|OakbegJ zA@ujR!FiwRipPd}(DLdy;?vuPjllJHQ*<#;es%<>{C)*Ks=!Yw@XHGP&H{hBz~}#G zDwo=Si`&1sbIn)TUgIFoa-9r$_KOR^*mQ~nWf%D)3n`Om;9ztnNbZz;bjIOVqn zr~Izqly3s3{CIH6p9N0&OTj7swR3F~{r94`%O8-}EwwoAuX=ncFXQLt1->6R?HLPB zJx7C6{`3OB$hq2noBWG*PA~8o(8DnX^?-TApbe!?}Gey z1^ER}PVF@v@{2pq+iP{m-wpZo3-Vh-{vOD8FUao;`FkNhpddd1^7ldh$b$SikbeO3 z7Z>Djh5Un%pI(rE67mm0{>6g)yO4hv@*fxE{|os?Apd7Ueu-03`#uW!6`beo+ZOVV zLB2ylzANM(hkTEMe1FJ40r?>X`SFl{67okBy-G>Tg{! zPoEC{6V`=Z0Pluzd=@y@^H(`7)Q{@_9P(|!SHk+qrp|SodPV-le5n`YnQx2*|3n%f z${zk>bM zAC2{gH%?FO!u5@>3Vhcy>dW^p@CgO}Jow#MS9}$m@9WJ5=X;~8o|)|7`sbS9T%X(w zoa>X@f^&Uxw*ud%z=sz2_yRw^z|Sl2D+~N_@aLqHMgN}--WBuuGtWx(#&x_qz_}0g z7C7tqKLx(k*-8Ht_-9jr_dX}duMK}V9sFyo^E?Mm`@aUK{k!}t>8Cy83w+?YNuKsx z22Oh(1*bi47x=FQzU+DFxhtT(`hnB_W^meh2{_yRcJN+^!|#FjKz#TGocjVxpP%fc zo(;g4hW&ejZ;W`1^xo!_H*EDuXYzC``KPwgVUa#;IwBPILmc1 z_`)df)!faHZ`x?80b6;a`aE?>Qg0ns^ z0q6K~b%Ebf;CF*_eg4S;f33iKUX<#A`N{d<%ulWXXMS=kIPJN=z@I7bx!|)AC%Hoa|@*vk^GQyPd$f{(m6&Yw)WH;FLcfyfymcH1Mh5zk<_$R=FhEPk(4z;G2Q7 zz50VwPg8-924`M08GIz{e+0ZW<4J+f0B60u3(j^~d2*7XTCQ8 zocZ2S;5XvASAu_!`NGZMjGr%qcZFYl22Ojv1*biWUz+NH_N)(1dpd&Cp042g!~VSs zd>A@Q0c_*USISNnl8E=?%#i@_PMrh{`Fp9%gU{NY1z z_M`6$e2L5J_xE+3=l#81LB2;pz7II<`A2~dDe!Z_cSjyF3!HKCdvLbzyaNBr74`jL zF>uDoHNok(TYxW#_|p@-4dV6z;M6l3oO+H2r=BapH$YxD4SWdfc^RB>?>q4Op=Y@( zQ~i*)1E-(w2YxZmxg7>he?AMG<+{OnJ{~;|d5%ZVgL8a&9h~FT`vv}4fiHhms)ub6 zKi31l1@+buoX_o2;N8HP4;%tM8_#_Nobm7*@GaqQOI@Apr=9J<7l)th2F`vr1e|tG z0%v)TE$~yospmRyj^k~w3HGZ$aNVqvbB$M5BR=#4zYY21Fz}-we=Io9y<7;+esnc> zO}<^=uN3&F1^!2YFL`ZhN1nUr0?v5Sqrmqr@Bz-Xo?n%Jaoy&q0>2P?*dMO}XT3dM z;BOT4e_!CMT$k!$5#$eBfOCI*dvK2L`+)P@(ShKUp9oI*uoCd z0F>)9aPFu70nT$r%U_@BhkSK#?q7Fwp4+(#`_ z!CC)rfK&cI;FSLnobrp_km`-{%YsvWeQ?Te22Ow2!FgWK`$3-dJP@4o@k!v!e{KM$ zpF9Che|V?Bzbo*CZ%p+=J^Ac)@vIu75+G<@&rJKmX0C-YCBcIQ^j`IQ^j;IM0#p<2<)>T!EhgJ+$W>aJI`e z;PjIR!RaT@fm8lHaLUgGr~LoGDc|arRG*Yz5uEa?fm6N{IOVqkr=RcUJg?`2Ay2=( z2%LU<3pmfyz5q^to?GC*7x;3wruw0t4GMfSaQc4_=XrS#ggpIcXhHs%g8XgZJQsR5 z_|=$4ya3L8<4tg$dtC6gR1ZAIy8^ggH5c>7b-{U#cMEWy;~fP~`zM0GhJBpVz}dep z0H^&=fz$ps!S6-h^(i>*{}r6}Z#*^C5AEL+d=lz^S8&?DH#qG-0i5<<06rS|)%D=C z|2}Zq|1~)6{~3Hk%ySpJJ(ZXCuK-T_yMxpIy}`Rd|4?w+e<(QZe;E7<%x7nSk45{w z?OglgYnbo+x4_rGBbE15tiSaDp8@|r-g&NnGUVCcXMuBH`_qD+`R@$&+qjY)T<^0Gcp0cU+qF7WHYS)cbf z&+F|K$g|#-pPuYt9B2bR2mN#taE|X=InSTl7xH}W{@|?VVc=XZ8Us%GbHVq4ozuX% z-u1Ba+|F5$r=4GbzYc#`=I;9SwlX;Dtt~j~ZBysDJv|{$d-einJ^Vkq?gU(`scjs1 zi4cWK8Jd)ml&L5hWXcdCB|@Y`GD{IfqbZRgbA~2Vl!%lJWfnyel_?cU5kkcO?C-4S zzkcoataDwx*Y*9r+r92}@3q(7&wifsoZE5F_xo`7;c2+*@J-xxxH#b}ao6ES-1EA^ zi^YA*&$n*yY#(#J4HNN4CgM-TJ+D{eM{^vvdMO@9UoTX_y}zxW@Pl!W?-9ZC^F4!j z=i3$c_>RUsPsih~x0$$k-om|J|Bky(%Fl@Xah=q_T_^h|ycO;`X@`5=?-D%Ux2uV_ zZ#Uo`_er?NcMk6B!PU6&Tf7|m(3yR{25$WRcuTIo9dYkZE(o5@cOloip$Q*N9{VsC zZ_GMhg7>HXpK;g2-?-~}o0+i>zOPgXzk+d_;CtY0ar=1zZa)Vnd=%b@`@M;{_0Ptg z@B6s%U*Xx`o+{iA{Dd37DR}-kR-P66=JBc?JRjeRc=Ml>h`%)9Hhd{B`kzxt}};cU~=V=XDY8`W%A0 zJ|Du}PiErAFG~0-+<9%pH|xXf;{N3Oc|h>|_4G)*6R)q&#V2qdH4(R-xw!Q#!nfx2 z(U-V+c7HVChoXjRjd?U{5W?s+M zz~``!H3^re{l2fG&lA^uZf%gK-~N4LviCz!j119JimVW z6Yu&NlZc;{h@Y2;Uzvz+{buZg_wAi@_bt){A4`)YWBkUaxH!%_1}lz%6-mDxbg4f*106%tApp)&o*xt z&nxeB6W%I#{<_~O5#KxEW60B+irdf5!Sns; zO}yhihkLv}z&*Y{;KtW}H`ed|xgTzSTHx+W?Qr**3vr)c^~23`J8qsyxOryd=2?iF zX9I4YZQhH0Fi#EKJcr@tIX-y)ICdl6<9Kl*erO_o6z+9@A^sTW`|?Eoe~7o9s_(}> zcwMNC_vOC2Demj9BXIk6HSY77f%xNG_wU4yV}E-b_j$`S+~+6jap$!W_xZ-wAH+WR z{9!lT=MVL8Uw<{m?N4jm{+x)Lrz38jJ8}E@IPP`lIo!Uz9z4Hp7ZdL~`3|?w4d%tZ z`TXP<+~*HHg6GG*fq2KgBN0C-;eU|FeXr_=u}(ja+6p(mQ}BG9R}gQVLlf~2C*q&N zeZOEvBG2E%dtKY&qd2cc+_zW6-(-KN89bZUr#!Dagm~xGk@)PtIWqe)_@bW+h;PXA zioSR+&g&cSy7=wnx1Pzwd!IG~pU%AI;?8#sUXO7%;hyhX&5!-`bM-spK0mC5yZ%qa z_v3z`8}9F?^vAQW_AlJm4aePo9>QxA|1|D%%jvlL$y>O8*Y88z&#N!OZ)e;u@tg3< z3t~TAw`bxW-@f?E?Ekj}&(>h}@2s#6MC~1B7R9Ce!tJ-xMg@AvdtIK_u;&*oAA>TenG;o#A~w-N8pb8Xu@B@ z@8EbXz(1k>s!K|qSN((^f}6hwZk=NjK51zj*E}!c_F*w@{c93lZduHK0k6yUOn4jI z^S3kZxC?{l*WpjZyAE4_8SB|dJ#BHnH={G&pZCSC#dpSU4xZJM{Tm+ktNVx_NBq=; zFT|&FUT^zVtlx2W30@d?QW&=`@s8Uv;b$cLs)XN>@X5IK_xw86@8^hyeiPk!J%U^R ziwS=};ol^D18$vre;ezu&X)Lk&g;u?>mP($|EPpNo$%KZ{uyrlzXZ>p7v+}6d3jzm z!b`E=_Qbtk9gcfnJs$UZ@gjZ}`OAG5>v7!PxcNuo=6?b=|McKlAHL&yy~T<+uJfu9 zJd0mWe49l4JGk|4!mYo`$~dm|?}b}`d))lvaP!Z`&HoW@{-we5{i(ky*6FyNaL2tI zcie%v<35L*|3BRPyL=z(G5_AU`40}BpVtuL9rpp;^)Myj?uLg@0c3e;4Z9c1>{~ z8Wh=1+|SgK{%1HN;#0PCv!t;(Qwh&+;4J4qwW= zPQ$bRrr|wB|5NnS17BA3e;4{NBzV3L6L9Ne4XIgaWuXe?)lzLBiV*G1-K=ACi zxZWlO&+74dF&lSZ`V_a$mALy-<)338zNMZz!Sj9C5BK<9iM#&$li&N9nZ)18e)uN- zKKsCrxP92-m$(kyubSgt*RI9w+nu<5dmOiK$E=Uzn&&;-{``V}%Y1A88uNIc-wb!Y zXW`E465M)*;Lht_+<8sL&40*mu}<^%$KPU~9FAN66x{r;3mxb?q) zTmKdtORi_vgddRb;}YIA;nyep!GzCD_|k-LN_dUGOP=px2|qXC0~7v4!sjIXyM+Ig z@U8!e^?TfF)DTZ^IV1dymSD*iRVA}<37K70sowS zzK#3*ZGP~4oj(w7o&VxK@7?{s*aycw9(P_Hap!dz?!1QMjkpgPjXSRi!SnNajdp6~Mr;#aXw?jwFH*5@?hT~{9v?{WMMw{NA&mb^}O4W6&F zTkvc>*th<~-^BY7pCsZdZC&!X4TI;$?SPyA+(e#hiMJ1Pg6G%sGU6+;o*Qpd^7`o$ zJb!%e2%fM1Mcn*z5_y&qZ~a$nTXH>j;U1Uqxa;|4-1Yn+?s{GwJU`#9$`#j>pYQg; zvv}9@&cwT(kH+0UhX>CeuY1Yw`hSKz_U#?=*q;Ts{rLj7Kg)6ZQ+~UW*Ylpi^ZjXv zyU%yU-RG}K=R1mc`~N8M_J0CyJ)hzpmulOWybkLI&##kK!Sj7Moje|wuDHkL zBHZJ074C6)BzV4_=Y!|#nT6YjUvQ7hHswn`?lptw^VcKZinX>;F39 zT@Pau@iP=#9a%b;geZlkNKA-S;Jog*@(uR}$~I{S)!SiFe$0gXh=(*TlQdOI3`0 zbA49D{XO5qaN|2A{3_h@_cq+~cUJIx{htzV{VNjj|0d!qR4SftK7ZZd`Tf5U?s zUW?}>hvJ@hZE%m{X}HJzyx{rzuO;642jiaCx8dgh5O-dS@V_}Ot8w#ez@1m4U1Hz- zJ*FYH{kYjtKEy|o9}0};Q9T(9&SGy6g;c{hoXOl`?o69V}Go_dhjg%N8KTqL4S9v~oeqQs4cV3li#QB=Pdcy1Bj@touUL$emH6h_2;nuS_;a}s{vnqJL z52b6y`PzqG!SnHh67jbu;>RZ9pH0NSm55)Ei2ptjzhAB5dFAUrHh6x2>z#>&JSmzf$mgJq?Ms z{zDV-of3X8d3=5S1n&2xzl0k<7x(X0EWrIc3oCHHhxQNL{AKoz>uNRkMOB06*Hum2 z*98aRK99N%_xqaeOZc>e&kmj)uk87D;b$K4^?3fU9QS+U|H7?j>jrV1`29{*alf~= z4(|60H4dKDX+KXO-gR{~?%#tRhr3Q*z&(zy2hWfD1@VsiE$;UW{D^yeH{q_gviroo z>9uj!;l8-_x5n*5+u-?m^(5Z!ix`gkcQYTxo$mzPb^9~!I@z*eoUh-9Rtq=2S;CJD zo?p-HiFZAB!(GqU;f{Md?z(*dcilb}Jm2TH68;r=Tvxy2Q+R#1ZKK#Xzu(|Y+`pH1 z8Gbv@VTR(ykHU?ggd6_~Zv5Z4>#)kcv3`BOgm=U}k1oP}o%LA4*WrFo(Vw`lo2u*= z>-76o4#fT5szY((PsIKHlQZzExgWa__x+T)e2Qy#B>IlfTIUalRhM zV{wmTC*0$8e(-#q1BkcIn{kitm-rm|^DFLpE^}aU{rPdL1<&7y)WeS>f8&H7k?>Oz zes01qOZaWU^Yy<)yq_oeG7~po|alW4K%@W=r z;pYU;>d8LeSopb=c=x4YxZ{q(y`E0N%`*#k|M?(zzCSC7w-2Ybh<)(5oD)2s=NjV8 za}Vz4jvm9!KLvN4%*2gx(V+SJbQiN@wyfFy7m-q z{5uK%BzS)Pd`rB?eIsuEiml>t)a&EsX@a|cjtZXdPuGO^BaiE0BJS~e9rt*Bh9 z5byar9{2aJXXEC73wK^iar?PEcvesLZ+P~lTtz?s5I>6hx_#QjdD)*+aQkyP?s@bu zeh_{87&reO$HZ}+?;*kS{cKOX{TzauXE<)(UctBE_4s#q1?n$%Y^+m12Y1}7g6HcW zPQ3NMjhp8q-1~`;?!NIGd91(p@x}Gz=X+c5 z{62G6B7RaL{-Z?v4~h6vZDW7j|EuAy+v9ORhk07?{JbtF-ag!vh<`j0KRFTqb|QXh zB7Q?6zTOEXAD7m_^T*}5M0~eI{Aj!v>u?e7^XCl-Z*yWiUdH!G_^^bJPxxC2UzzZ- zCzV`Jy@a2Z@IeW`7x(qZ*x>o~Hj{YQ+k3dLcRt0xxc`3w_denI;MsiF7yT>jd-I5QzMtXdY0{y%5BWSN2G3uYPfx^O zk%+%O5r1zY{;@>-j70ng_{qGESe3|As$)Fv_NPYhd>@)7;@jb#*JqOFSB}f|#Cv_b z2{+Guxa(&Y?s5DucvipTu1@%tr<@XLZ{^<=-FUicY6y!*o_+;PX_ zUUz2U=6MHqe^?wm-=ANIcRh6L6#L_Gxh!}-&&|Y}XDsgZXbNur*KpU#`?&E-aMwwh z(_{VD@f>DH-1Sp8cz#|-CwvrnJYG-ZUSHnDjsHI3zXs2*pDoUa^YXawhMWJugr9($ z=XBilb7Am&e}*P}GuH`^7ZVK@S}p~_wx&I>luza?&w7R znF(J=9{ccDBEI68@%S2FJ$Qb;2Pfh$OT^!ti2nh1zO~MZ_1K@IapOA$&)3;I;Ug3N zH2LkrSGdoa|48Jie0Is}q*3tvdbkAldEg-Y3+{{V$M4|tuC=aWo?=J$C;b9^cHGrfXm>#C^D zr6yG^zM}Te`S9R(=lp}<6Uo1l(e?9B;Gm?!GEXDBgtc(y@PnRq+e(4Xo#z@jvjV z@IUdl@W1fo_(r@`k67p5c>Unn`RMhoH}3Hof}h1cb_eyf0kw!q^|zL!IDRf6TK#@mur0`EA5+!?<_hW%0-G zt?}vPcm2GT@MQ`AHR0R#jPo^r4cvY2Xx#psiMt=37d-3Rw#=(H@gA?i#Fry}0=_-I z7%z|ig;&6Ly(sPvJK*hb_s^ce^Y@v3aQBnfaX(l2G4AiX{f!^Vd9g#UcwD-(uIl4A z65k5&Mqe?_Lqz zJip`S+4jnk>ueZ2tJ6Ll&?n~i?@Anw-_H6u1^4^;2jG4V;Q_oqpO+Ym`*#rD!2LT2 z^Kt*)!BV^reO`n6_ci{-{rei#`o=zdPM#+C%lIj{ed~(bw<~b_HU_sp&*1jwE!_Sr z#O=>Fxc&JB_wSOFz9#m;{#3{PI}{CZ$2|nMZLUoZTbh~Mej*dOC}#XZ0F!2NrUXW-7OCvN@2aOXQ3ufu*j zDR_Rq?)<5B2;Ujo%Q~vr`PYsTH_25~5c4M6%OuYTM z1~>m*i98dDH_vL^=a7f=k9GPSvK{X8#vVHRZQtPedEH68^?Zt(|7YCif!hvgZqAWoq=&&;~NFf#?AiC51*@SlJmvEd*^&v@auA3i2niixR)JN@_MKl zJii{A;vV&MEBA?Q!29zXJFD%{vo55&whxoL7Pu*3Y)tAJ;AVDKj+Ib2jJ2&cO@u zJBIjf#1A9BKi(I=C6}ji$nz%gUKbYR;%kQZvcnSVFnE3)PRBiuzQ8^2w!10z!T6nn z7y3{*@2cgza2}nN^TK)8E$4;!FL2MhKN7y<&9P3`Z9Uxc?hxGb?&RRvyd1YD@#eoa z5kHT3_s?B!iFH=xK5ehy`Egql@3@O`kIO%}$FcFPaa`kD2G1YIqjFw2E<5pJI!!tL|8;Q2mJ z%6Xx0YjR%b^RGEC#P_|uemxvbd~5c} zixTmJi8uf2xcluQ-20+Vca+?>2kwmZZ%;j2j*M>pU2*e27(74UX~bLqtBLr#WN73+!)o65crBN8o-R^>Ezp z!F~dF+^N9}^IaY0`x^1yKYWq!)%ctA`ET4jyWU%Je;VKi^19<7yak_+ZIAo9wHt1K zCgJvHX7GF;-Xq@nzf1U^xP91WRLS$Lm++>zeK-QQ59i=F^19=4+&+9ip}3xGzSUW` z8}S-=#pyA=Cf)$Ag?GUBz~7w_`_Pf+6-$C=^_YJ-ZvNG{`FDLK)>)fzH_a~g21WUA z;e7o5)mYEToR7D@SF%4EJfG+E_e;*-FL-tx*(`q|{-h5|&Qo(<$=)n@KL6PXzc`U+ zzYmM^XZ^23-&O?A&v(p6CD$`6c)p&`6aIA~&zSio*K^x~=zCJ<-FRL6QM^9he__e> zclor~^YuTqD2}@~d8Xp~;4kA1@i*}O@J64-{0;C4i=*$0zl}G-FZ(>k*Tb*F_rjMi ziSdrR$Fk_={}H#IoxY6mj=L-FxO;tF9G~@h8rO?`gBSMUI^lI(bK(yr{^W$8pYW>_ zek0zA{L{aQ^V*-j&BhPFJFbZF2jX`H&(C)P?z~<|_&d0D&JUjTtuf>NhBw8xSy^)b zcfqZve!`pK*7I5L{J!zdsyMFu;mzMipIk1!FEeg+bmQ+_Q|#G%n=!A-Yoi~6SHqj* zb@3K>BfJUz2!1GD_2)QlE4(S*68{Q62w#mKjGy{z%uo`JaI-hw;s zm_Lg1Wb4-7yMG(^{QWR^{`_4+yzA=cgm3j{9M|}r6J85<9hTm)Vo~L#N@ex?{@~sT zKMsG8ec(*o_v2nj_y-C9JmG&=EV<5GE0yeHaqB#{a>?=iaO1zmo!9uCV;;RymFV`f z5pMofxba(6jd_gkf;(=HU1Gd>Zp6*gbk~yOJL1OA#vS(y-23^J_=P+#{SQBa_0w{< zSdZhj!9OGZJly!Zar4i_eV^z<+&qhL$6bY+ztQd`*MBf>o=dC8c>6X4H~)Ct`Ww`Y zd5)n!hbR02-2CH$XZzA&?5m$7;(y1jr%bKldh&Uy2ha8ypI2Oi+lM{&i1X6h;?{p5 zZar57&)0Js@zyg3Kals+zr;PiO4W{aI_{qM8rJ{8!Lxc=)8`Y3x1Nr;=iONe@1F3B z6FxL}zMe;kx1OoE^ZFYf!8*LOPFxQ~FDpxR*tzI`ihiyNo~;Kzx6m&aKRm?WOZ<(z zJ{_BjFXVrUct3~mLL&ah`*0kd<(l;U|Fxl17xLJL`|wTdS7Y$cicZ$T=fR%Qc}_J0cfHNQ zYZ3o9?zmg;75n43m2~p#oA6_CfA94y+~<}T;{JZ?W5Kgt+UMtS*Ut>{xPD&C#g7f^ z=NsZ(KR@T<3+v~1;$1&m)i3T_e*KgSp6$2B??k-UqXxvg|Fv<2i zpOyBB^YZ-KC3rS3KfhWt7hgEPni4;S`?^+%_)`+`r|04e_b0s)@mJ>J3)jt|iTL5U z_`>z&?wl9q^&)xpV13TZ#TV-QB@th$;pTlV)VXKytk33el8Z0Yd3qwgYc9U9kM$tl z&+Fcli=Pzs$vcSmxZg{BR%_7~@qa&~6F#0ij$5r!aUZfAzHV)fdtcW9@6En+0q%A7 zYTWo+aN`#Q&-Q`r-}TuqwG{nq$oa*=r|%n&V-`Ot_=1EVd_c+ZeefgLPp%7|_2+%| ztAY4EMgPyjeZu%eo{7ZwCVnbzp5=)=Yl)x8`=O-|jK^^q&r2Hz&wAs$S`mK@_sOT= z<{3<$Bk9iw;;rX#+&rHo@_b3W_56aHr%K~^9FL}+-Gk?k*BlEBPgA;j15WiV}@bBpVCy6{?62Do0aPw4Y68qD}{sjM@{@|}rPn$%Zw#0ANAKW~H z6M04uzgd6qQ`l!dN#yyG_|5u*o2SA-@qD?6^-u$E%JpS$+`pUI9QXUay5Ma&-!H|@ ze=TnQ+i>&09y~j*kKy>vBi?>~gP%t|I~^R?iFv9A&(?|kJODS(Y2-PUdd?)?{j)3n z0ev2p$a5R7zd*bhq|66b54^1<`--2*pI8}it7C6dgz6_9!3Sv)j!X@T_n4e-Hdp&c{;|dAbnqetrdRo)Ng` z<7j*^<35Gk|CzXd&*+!nS^rO<|C@++zB{!j?oZZ-3EbZv9z37tMB<%qSKK_q$m6=b zjd<6?Nc?op$LWbYGl_RSypEga*F>IwiQlY0En|PK=X^Xec-9~1brSKL^#?c40NnF& z1nzox0Czo1#9a@|gJ*Rf#d=svyz?#HD$aK?=VRmG`8=(NcfP0K=IKKo`*t1iu7`p6 za;{V36L}^Q?|PVun`e0<&syR)>(61aKl51+jf3acLo4Dp>kn?8-uMp8_jY_fzt?|1 zehtTKZ1Aj}6FKfPiTAl&rPgs?{$6uK+~0?7f=}l@>MZ<9&flwoXZ4&!J=YNL^NRb3 zZ%6#YiTIhspG^E~iTJOGKZW@367gjYFYZrPe|zG$37+kr)?bDAQ;FX_5x+O_9f;pI z5q}!)^X;o~f8TsC?(w<@@4|KGS^O4!ZNhgtBCelmti$HG^&E#=&$YPEZwDuQc*5Vn zU56jxD|mkU9q!*TEO%s_m-X+8kK($yckujqcO>zickL4KJreO(;*NU*?s<9-zKs3q zVca}paq~>a{r&ejxW{W=!WSjH%2Bb;U0H9Z;g#s~eYnqyKE_?oYw(e*&l8T0<5s6X zr{lL5o!o`zTIb-Wu)n>48$Sy-emTC0b@)5}CHv|>!Snl1#Wu124%B}%zBBpHz+a@# zmj%zS+u;d+D&cRC-*vtKf0lZ-J*K$+Y~0h>_bTEY@!j#R_@4O1_&)e$c(dTyzTJy@ zj!k$w@?1`yZi)Dth`)mPk%{=n6aFN5t|ZS3iTGD=uL~>5b2WL+JvOc%?>BD1y&t<3 z_kLqk@a#BVMgGaeyB_Kv7sqvfZW=txb0&EXC*JGqDY*O3nF;Tn@Bz5>jKUrFsf5oA zp4ERI^}m*gUqE~};uj_2zbC#s@joTv|0e!?;!7PL`|rFe2G8oZo~nuX`o#Ajf1^bF zQHl8D67lB}e*yW=PsH~n{zBrfPsEQP-uz?mv&i#gBF}W<&nA9mBK}?CyAc0jB7Q0H z=Meu*B7Pn5=MrDGZ9MMY*ByX+|8@@U`PB>W!gc4y;Mw}=&A20pugG=nG2Hx5CVYCr zw>u%us|(lnN(rx?@ZR{=-fslY=5+@1nwN;*fV&UZIWg8bl+TZ~!E10`z83d$q4(g% z&%mvJ2|k^9tw{J!3I8p4)(7|b@+ZZ4xzAS#o{w*oh(8Lq&Jz;eA>l)D`|uTR-}Y%2 z>$lHMgXil%iFoJRJrRFhB7S5d{v+b8v);+EPUrO`zBl)!^Kj?&dGP$aekR^|?R-k{ zxcT^o!L$1)<4?k^b2RRGF%|c`_&j(vuIJtIMEqLfU7uUEkA1Vw-SFN#Z)uE|<9s;{ zf1Z7BBJMsmE#Wg0{z343pO+JF{p%9(Wlt@6zU_l&`8%AWdF5-RNH#!kNJK^aM$gK;Q4VE5by7s{EM5X&KV^imsSby6gCAgg=zjrKzMW1Vek0z$U$E2JvH$uW z!LvNxH}0E=KMA*&6WtB5zx@Pyw-9{W5t5kDKZp7+V)ebI8_J>PdbC-%qd^})FNe{0<9b=%-s9~}2Q z;vM%v+;OMlK0ka7cii`b=g0k)c*kvhZk+EooY$8G&+_!)I1VA+JR@-X|116_=liZ* z;p5&W1kliZ=dh%7LV6e+|NH5 zJU`!g#Q(x`gT=V@e2d$Mb@+OY<3`;6?9@Hh>E~Fg2hXporo=nn!*J{Dk9(fJjC(%5 z89YDkQsN!A`uVYb^Pi5JzgzHp{(i)pe==_V6}b6-PUPRZN37HQEphYr#mzq`c)tDz zh&TUS-2BV%PV58UtY{7bx_FWTwC*dOy896alf`)70FH|r06pZ!VX=|%iz{lU#M zCXweE;y3FL{tf%&uZcYW62Do0ddB{k=bYeKfBLa+_c5O1au4y>5&tmpzAl(R{Pn~? zn~0xH`~c$LO2mIk{0+n}OT@1s{zl?|OT_PeQS6(?u`TZU?-o3N-MN!^uR9On?&srh zuRGImuRHJKUSAgBUXQlw73byWLn;T))MFWO2PBvHXz<{o8TVzRtfKo+n?L<8`kmGR>-CsKo@a>PtUtJU*5hB% z{|cAK^XOmBqXr2-BzU%dvVTLiEoyer&#}Z$;Q3*9-268t{673%&Z9}Vd0tQW7r5V( zvjX>fa(>1A-iFdw#Pu+Qb+t?IY(03M*23LS4o&14NW7oh9ED%QbHW$#;T*5|xbs?p zJFj)P@zt)3>tQn2qkZtLd7an__j9&war1Y^?awuMdBz=t8-FWq-^Sw0c%3o{H~;gv zdA`B@-kARqUg4^^PCPHF2hY}t-!sz!H~*Ol@0ajpM{Wxx8-0#&n7q|Zx;{IO4K)f0I%t+ik6L9}t*t7Ul&aXFc*YhX1`Bw(d z?vq_tYl)x7>yE9jj{Uia{cY#q`8?H$H&0#MdYa&_{}#C89)+9dl7!!gyDvS2yD!a3 z_@}u0!%w*T)gQR=)%wJKx?k1DjXwzYx^M(;d^_CFtDlFvPA;72W z_({0OYcB3_{{T1tLfkxm2G7p-p*4<-wL;$HVMBZ;eBxHzcYBg{(FhH z{)xm}|CB`h4BYzPNcfNVD%Ss2*T?ngd9)jD{)V{cQMcgPzCDcVML*(wee^W$=UQjt zo?oBg#%~OsA9tVrab5?r|IftzzQNCM_sO4dzgKYU0WrUQ+a0%W`vlL|c@**XrxWh? z5H7_1yVa#`i1j$H-Er%zgL}RogO}qvcqTrB*L}Tk^W1_Z$B*7>3vs&gddIj`noG_p8g4c6gSTl z{A^yI&ceO#`aO7lJyf_U&dc?1IbMr><3W5O*Q00g>f8^1jvK%2&2ik?{Hea`| zh4`I=XZKN#TQ?W~eTZ+8h(9G4Us(Txh<863O}z7Zk$C(3S|WZ~!Z#%Hl)5#p6Zh3} zxSwl1825Aar{R9CesJ*o`k6(%>tSKS*Cc!+?sc~8ZSnZp&zixr<7+>gpL_=2oBN!%aIecB znU?UmxbG8vjJuw{O8DyF`Mzy=N1T^^tAU@){px)fAs*IQHK9rqIA{k?$Oa6ex+26sJ7#h+k(&cR&|OL0Gs{R8fNf5BZ3 z?e30!v;NMwpPTBByH1|N?_%GWkGoFR;(i{i{5>VF^F4#-*Lg$S&pRE4TmNae>#8em z-+JQq?P=WSpKsuP{^57r>rUBwWB)zARf6Zw_eR9K&YR-ae;984C*juL9ryj6i*cWq z_QuUKD0sg9hlscS*|^u)PZN2{jEa4;pF89B^FZAA4hip*@S(x8d1e1bh4-oNBi`3L z({acB68F6OiTv&}+uc|4d9ioGk4gCX2_KyB8Nsvj&iX&Zx97V2D{g$H`%6Av4RDWF zE8O+aIe30u^-uUO_$^#F&wL=(~lR>B+Nj@vAFe%w=tcib~^`*t;XvRp5O{b~sD zu7}5P>wh)jOA@{@;Z+_fxj!xO4|pAMLh!8i>|bHO?LxfuUx$0X48!g71l;Ej@8aI4 zt-|f|ufg-jtJ3JW{;j`u@NE5C|Dm}3zlc0u7j8}XXXNoYz^a6oc{CmupG()mop1ew zAC&O36W$}?H{yO@(*wBQdov9$&Fi%<6TZV^alYnhjN7*(6W#^4Z+&t5c0l-K_w(WN@CSJPyBPQL;gueb>(h1BAb5U%?u8&r4i|d%h3BEAzVMA>8}kw{btmvIu{Z{p~B<@0Be*CeF*xQIrdw z?^_+>y)HDx=kpxz_~7}^540!V&ku~ludNWjA7B|?p65BMabI`*hWk3A^w>CG`|uoY zpI77FKUWx6@_ODYcz!*fgnL}h#CtK{tMF>&Vjo80zAm1I`}}hr?)zfvaN~CxAN!-% z3ZAV8uP+A@Uyu914!C*xB>dilPsTkiAL905=Lxa?16e1v@D}V>&2XPrx5s^+-xGIU zBNF~d@Iv1T_eIYVZ{HT+=KnR}<)4i6_4qc#&C@pFor4$ZEZqNGOuThIfcw6~EZlJy z;6CSH9y}Y@>%u1D-Dj#i73b@7l>>3dJtN^42G7s8AMwuje%$=i6TS}jeSw-!$NGIg z;t1ULBhJHpKjKE*_ajE&jyo3jeVnPd{al7S-~SR`VPf&T^8Kt8JlhZL=MlL1yC-~D z!p9|iZo(G_FVy*Tc%AYi@z%NRqpvsm7X~l%XKCn9U*hf0-MINDCj3?0JoE9DynnP5cRlu{CU}0GyiL68;UnDFr{ChfU%w%dzs?J> zpT3`a2yUH62hZ2pg?Q`if&2P;a3ar`gfAkG_3Su3*6($&7H)hC-1T!t!mmpBVBGwV z1uv|_!gXgH@vg)7aqC%zn}2P>|4Vqe7h`{Xox2-u{{8XBykFKDzkz+bZSeehIFESO z!)3Vl8@J)Zd46>t?)}Wz;Q4W1OT^E^{r$x65_$e6-ukzCDfZKPYT}-cje_UvJT~DI z$>Vi)Uc#4>CmW-%53eQO>u>oPv3~P6OnBRbcMhJ7nf)v5w-*!dxHsdD`&h!K;{M*> zT-@KM`vf8c?FZ69ixK4dYynXu_H~$VZ zWBvNR32zy^Fz(tgZad-~w-;{yTNC~)Zl1ZguWP=*{XG0i-1x0#l|0`ggJ<))mG{lh zBHr`&QQUdWAWzZuQ)>GuMgLRu^D*(x>pR?awbd&n*SRz9y4o8z{~@^f+u*)VKLt1c znF;TO+yA@qrM&)q4fpp8Rt3-Zztrs52m8Nm@O*sjM0_*c`}s?8ubcgFuWQ4C=f{1N zcGc}l$Z51om3-CmrCA3(h4%V<2yvu9ZU zlM{Jf$;Gz_@gF4Om*(O-g!t8o_`h@U7l-(Auf=}ahi15aZi9PV+6T|Chbt5Q1bNK= z0`BL3=HPxV`U|{s(L>F`_gDXnn`fKX<9t0&cfs8U>gv3IcQkJO=O+A8+`bJ6p6}b} zgwIa+mkIwD&&K#8T&K#v5&PhAuY%i$n!&Ri*}wlno_&coPjh@a@1vcL+qa&${kbmT zHwDl4?RnzO{|0XU4-AUanCA|B zA$})*)%=p<%P)v-{6VK50_zk>Y|0e!CefTKhpX2s(1Mc@xZ2x8KgY_SVA50%k$F097Zv9u_ACc!ld=K7F zAB!9R0&bnJB>WrPKKz~VoxUo$4=r%_$zyQ$$8xyydM4_-UNRLKLURkKN)`n?}CrUFUB9m`{9q{ zH{(y>qwq2KSbQx096k52UFh<9F};?8TE?_=M5UR@Lao98?SC;SN9=gA#{=ljr$c@6-K_yD#mwCiX!;B;ltg{HlcCn()UH{!+r{;_j1+g6EIdPsH2L-xBfVe~NuD zz9sHHc?|A8c{*O5=S3Ie?vn$8=j*?hci`cij5Ru8Z^acvZ!%e{bCSPsLp)XXB20 zC2rqF;I5OWaQibA_xR4i-G4p`o?mY(iFduN#qIM(+~-$ielG53K7X~~+5NEj>*1UA z6W^?#_-6gYJ&q&r&H9ON)=%8^HV5CVpTYC@O z!@1sFfS-V0hp*xF#cjBs8=Q>$Tz5gjH{#B>>iT#-nx}cfd*SApiu=AsjbCGa-iD4p7jZD@^>89_!bFo`%jE_++Q~pd$wp7A5>bUU-;>NecjXwoHmi*`8 z&g&A~JcDrObvthS6S#Fw#*KdiH+~*&{I~dJ%_0EuOZJRx%mCVxOeBgFt10+%J!v@y{mW*Wnep?| zcig)Z@sB0qKgAt)CEktmVk7S7%&Tn~*F!t{zb|h5$++?7;l>ZajUR;@{}OKed${py zaO3~Qjjy#;$@4uFf120bJ@C>+i>2`S#zDCG9}1qWHP4F|iTAu%knlB$JeA7E`sec8 z>_FT)PsXkDO5FItxX+8G;>ORz&Hn>#on^O<^_yo;+&o9&#&^W6b1-iFqqzBB#f_hj zn|}@Nytdk={|I^9=f~vY3;X=!oEP@_xwz|j z3He>mJ8m2M;PZj{xcgE|yd3XCb;Q^6`tBm!=TukYK4%z)-_Q9w9=D#Exb=L3ThBV& zdN$(Lvt7B^AM4o%x1QFx^>oCo=Mvm{uEDM67TkL7!;K#kJiiWS5$}5Vg?QKJCgNS6 zWwtBsPnJK6FRah!v1grZat&O@BXj=_j~Go#(jOd z^^Wm)`FpsvaX%;7IC!?dW&aAVgPIZV>w;79XShG_iT7bY>6`GW_^ssm5I>&#-oJ3~ zPpa$`=j;8O>LoBsve__uNImwpVMzfNsgG1l*KuNb^R(J?uj*TuUM z@AvZ64xZ0{2=V4W95?^*i9B72H_v6k^L6$m-a20+zvtHn#Cv{yoQp4}k%%9Xh##GZ{|NUy{UYHj68?L_D^!l_$NaT$-*>wT_kFj=ao6*k zxa_=i>FKa};i$XW^S2 z7u@*2aQDf&yT&@*pO3@Mb0zM$597wq!X0-lZu}0r#d^%&7`M(&xOuL_%`*-+{w3Tx zm*U2k+P&mD8{o#bOZZi|bv}Zd=Z%D~#Lcr~wOFTl4odhLxOoQS=9z?h-}qj_zfXAC z>akAq?1+0@_6`0&*I(kjZZ5&6@%u7c)rjNjO%mQM;r(&f=L5mBIO_2#JxV?KM_BIUd96*vZ?|`G-}3ou2hYFm-a8S0L?XTe?tNEp+~YeM-=li*LBK{QI=M`rqyl2AuBz$&ZS&jQVq*}u`UteFe z#@#o%;l|&V@Mm%JEX2*TU89og*$+2QC)_-*;C_$vQv7_*mw#~2uO0S{_4xdx2JZ8d zeQ}?kw8DLU(gpYV$pGAXM&j1<7;ZgNaO-&ux1Png^=!Rg?1Rs9Y9_pC!u#PKuhF>2 z_Z{5$?{S}>Z@+)6)A;>y^LNILzaimcaP!Q=&9gq?RSt-Cnx{2xp389GM|dFNvlG4o z_w~phxa)1F17n@;8x8Pn`JRdsaG$3Q!kyQ6+&+95Jip(5PQ3f`k&TP%%*US_JiC7R zd|(J}Jx}7+^D%Dx_qf;V-I~O{8Q%&w|M|Fe-h!KFGH#yFaN~c%t+VDqCD(Z*ZvKmK z>l}eQ?sK?#mg2^*$E|bggJYfg?zn&7p&s6Xef|J^8n2sL;NDN3g!?|@#liFItuOJe z&l~XmJZBz>JMJTi{Ld3_{@J+q;qN5;xK$5{{dC;gxZ^g%9rq;M`-dL5&oPGMK9?Jx@R$TikIs z;Er3NW$c^d?ut9^ez@Z{#T~aT?zr7>$GsGH+#$H*4#yq$G2C%q!X0-G?zo@hj{6Pn zxWD6$TfSAveclCk+S@gLm$Ra(b* zegA~lIXuRj|3ut8-4i|_;a40{a{ke{`Cm%-#|eM)$ddE_h?{@Qqhh>XBjL>welqUs zj@R+mxG(B>bR5^`-WTG=_Ya=GAA6X1?~BGKd`iM!PWb%b`Egef?|s_ZMEo{w;(U$Y z9rrw~k2|je6W$`>Z4!QR!q3LN-|HJZ--i*zJFj~a@oy)5yJL#`ljZmMWYysL=abcQ z@rCD;d*!_FeDYY_=ac7<-})cN{XFwj+~-Rl;O^Vs;qKf2;p@3?ta@x*CtgQtluw(&r`Vdyoy`T7r6DT$E~N_aj_59QvaVlfm_edI!28I3apPwsd?{|8UlRUL@O&TYw2kMf z=h3CO=WoB@`SbV2TzujDy*1~B^LJ#peX2LrM&uaX<=vU&4 zK4SNOKRt3@_}p@T^6bUu7$*_Gm^?4#ypU%Bd3--*E$(sIzI~jR&(G`Q#vg{)D{6FM z+>W^4E7ccwUN;5LU*AU)?|OI&_w~p$+}8`s$p0CA`yuCr`ZtoNCHFapoEq1m>$ZLH z{62O$?)&3|aF5GK@@KtxIIQQ#h_}y^aNm!35pTi!5pUz>S&YBH{r_6rxa;sE+;#XZ?mGM>cwrq*4(qVg>2Y4J!@9VAI~=z^=iOZXGGd0xlO zvnt_b&WQD!r#5b$;}hNkH_uJDd0t5P0^B@58@PFX zPWbj`#yZWj4{n|_5`G14p5eH8#^9b`p9IgJUq2G>`LzM}{3>-;oR{ZUli*qY>^`k< z-`E__{(rN=dDI2Z;!h9vb^Y+AT;GS~yl{PgBzSh6@;>AP;+K$Tan1{Qej$(hK!vm8 zeC=~X+~aaAZu~j8`^MF{$Ll`ac})nOKaR7B_c*?bd%QluJ-(aB{{?;9wo7pzvT-vn z^li7`S^vGiYD|3g_hp_Be_!UvoNqa`=>J*tb85~z1n)|I>mP{wImric|IXAi}b2oVb3>Q!nA2aj#R|6MiK=h2QtNBjHcue*Ws^gnxy*K7UPk znRDYhvCq2&&)-khO~kiK#2<^hZrdk(U?Tqn;$1&);C`R#Cy6|3i1)bf)HNP=zdyEK z@a#PD_saJn-p{u*!CgNCao`|t<2uWL5ouFoC1#ro}Y<=|QU_PGJ^uG_P5SvQ?s}--J@&_Ok4|`(;Q8Y|5cl);wV*aqGVeH~vxF_!sdHsAmqoo_+Xd+&+}MFdlckdGLHcyAW^w z^Aqty6F!-D!z@cevR5O1Abaj!d<;MU(K;m_lq z7q8>)t3TnclRt6SNxh3oUgw7e&#&`NiTJyScfJqeUS~f`v-bL|3xDHw?zEz7sqiuE)8(6gY9wm^Yd}>!fM${B@yyBK{fT?b}S;eSQh*o>NNW$+9p7k^Pcj9(MO)dI)g7|veN6o;^KR@ALoFDRxAl^LVaP!Pc_!8Va>v8jxzB-<# z+1wh2dUgz+osZ_JkN4oXG{#-GN8;w`j9X97;DtW72=!b;ym=<#zHa&m-=FU}`5j+X zG`Yg-g=&4`arbpxbKG$|;>P#ISCfAX?zpeu^Z5M0N4US&_6zQHs#4!rzkR5Sd;K~N z_xd$4c-DVkm(3;K>&RD$_>Bp#d`+y=JbMJskJ~H}e+=$@)F}x+6Zd-8E#a5rzRnti zn`cDueEm-){8RFL%KH2z;bpFkee*b0N_d@wpNqQ=FAH8c?=BDL-2mcU|M%m+v(BHy zjh~jw-#6rcBN4v{H~&i9{J-S#4-5HA^^1KoetX>GSUKShg6EI#;l#V1kHgJ>O2W@c zVO!j~od z&xCJ%eXQTtiM4UZ-5>Y$;}N*=r{F&K8yY-YS4Ef8QfGztNk5;Rp7r1>?%Ur;_*V(vKz`T%rbK*|0kJ>EA09k^+)pIl<9=!`zHr>n&UxXuUr8Q6 zCpn0C`|xPOUm}n7uOZ%b`zP_%|8Fk7Q2#bJ6!)jlheG|ef@k-i2l9Ni3GVuAhr2${ zA;0szhIr>SFcJS?BK`~F?ZZmq?ZcW}e4!5;b6)7ff8_CdiuS)Tt}E{cj=}w2g0peI zFZZJ0S^u+th5g|&;@ux^!TtX8`*6Sid|bjm$Nk=t4YNP^_Wz57|3-f6uQ@pGC+2B~XLT0NuP(u}ea7>s zXTtj@d^qlNr|G!QN!|>e9T)3aPQ2@O%OUZ&yUzE)0U42gu2gfb6Bsn8&z!E+wp*7dBnr+AX1Mto16Thh-2D6iSHJaL#7Q3Nz||iE*S`Z?eQ&t&kA$nA3fF%T z+|OliO7Jpw$A0NkKk)pzaU6Q*-6skC;soE6@Y$|kjK}Md9TU82g6{|S{=nmKKd1je zf-i=9pJz?r`T6?~Jp12D_S16xW53)_>%cwFoC$Y-yczEJKAhk$!AEf)yV^Z59>1UV zNVwlOdj{Ok-Jb_{J-HTcJr9C={vQt4XChpmd2oHc3p`)9f1J@lC&iU|cUnsdA{0<-Y)1PwslKu4e9531L{=&!ic}m^4xxe{%_DS$& zfoJ=s=h6-d{mlvf5I*MlJ-GYwCkehZ!Pmjvm+Rag$Jc%N$iTBaxG%Ry?>gKYZhbxr zS3ebQ{gfFHm%!bxAAq}GKat>5;P&@>xcMplKK}&d|32LHb}`&@$RBXWWygWBU)I$DaPJqL0Qdf6XSng-3AexF z;OgIm+uykf{vF)UsV##y=DFTlxZj&s^kB?``)^ga*QX=l?#pu$d@+$Hl?mj*6e1ES+um3Fx{Sfr#=V`e89h2ZMC-}R8=i~eu zz3ncBn}^j2pRy0fanYwz;Q4lIC-e;x`qLBoE8)(^UU2hvM}ps%;E%u^$MJCerzH5w zz_UDfp4@=m^W@e;H|MiNUvi$@DaT9Blhp&y&Vjx!R1fa=9UTvMJ!}VeJ-h_&dU!S5 z{ND}tJo6A-{ZoPG>*S3DUx1JGw%4#&hn^pfg8ThBrv#pFwdhg?PM{oY`g?rBbAKdfUSp2gw7!#h0O+)W_Y!=*e(R_Gg&P9vh z`uqX+IpYq)WBvI4#;$>v%*T>>cO=~Ww8F>yw1>N%TmpAJ84ov~Z^O;!yuh>0QWvdrT@i#J;r%^Pq;q&2cE_MBhRmo zL2sP*z)$4!Vk69bN>V$NLFa!ry?uivL>ToPoYI?*aY^ z|B&n4t)7YXc?SMf;O}y7EDk(B?zNwdKBZY7u7X#9-wC&_2EcnUe?NpzBA&yai|tOO zU&q0XzjNSO{6CYox$x|Nn;q)#;^*TyE|d|J-S57D`?=I#0?)^@-HTg}bML_OaUPV= zpP0~}4!53*;qG^L!aWZRfxpap{ye-H>)~|x2=sH{`g{vtz`C~*K9G5_KJYA`e>1*S zUW#?-_|}5o#5`&MKbdv%IJj}Pgda>joC8;X4cva+4!2)}1JCzsVuJsIkNe#Qcs26B z!-SY0*QXPFD0SNl?tXe-;8_mr z?+Emc*Z73~d-OMzig{j@(3hVS`_-8GISM|8^{@wA{e$q+@EHRy;#@j4@O*#&M*j@) zmzf;v$NU_Y;LQWi*GUKXdir&3!e>x|znI|f;qQ3OPw1B=^cAPXae0TlRfYdR{59at zyZZ1O@aYbBKkXBEokATRkN#ftK0kT_{u%L%4m>};Z=*LqA0_lZCG@Kj`ZBM@yy?Fu z-1@u}?mBjT;Q9C;Oz<%Y{$7HA8+g7xmn8I?68deY#(A-IA=r|2wMyWbeZV- zDR8eZ+QHS|0bfL&%z?iSFEuTWi+nG**E`q1#}og|1pf~1^W`=0-o&%*>oFedf0qQm z5AJp46M<)SQm`+Y7QT;eB0Re<-8DQ<`4peNoYQuGBaWl%+d+Zn>!d+Ke_BG{2K{=@ z0~e#WPF_Ku^=)z3m*>Nca~VF)yXtRlxnD;Gp6^$gx3;X`JMg@|KKc#x>jd=XxfS}2 z=+95+yQ1HO{)U9UANqgMKa|ivgWh~jMQ=WT4h%e>pJU(Ntk3u<)LZYsv$4(o z+opUW*uuX@;Knl%ALIEkq2G|umzojd&l>*!*Q>y@IIY8r;l}?ke1F!5r|>uaHxhgS zKK5%3`Yfg@S#k>h%D)ry>3X#X`~uED$H84^u7tav-Uxq{b7LR4J|o~|+<)P<8TVJ< zJvp~82|TNXQjAN{yRpCK=jy=!uXfPigx)+n4j;mG!36kAocET&Jy(~R8RPlS`5f;0 zTphj_?G^`~#hm4$oIlyM55x?&EOVodExZI#~ff zqR@EBdh!o^2;;cN`!UasV?DUz*b+V$|4xDD^UwwTnVdHU!i{GX+<2zJjpswS>(4T{ z*QXocwp;3hEstZFz_W3jMf|nk&c~}0d@}yqGVX7qcYXK-z3b0%^sYaDCGwOG4ir?s|SB-1UDfT>blS_mNNF>Q^QBHM3*h9N+#4 zJ{)d+J_~mpo(%Uq_AcCZ*TKD?Q(;bw)A~OQ-k$re$HUcM1V4y6?*?}sJsEhuex{(e z-ado>C;xEA>uF-_PKV?+Uo%yX(A|ht`aHBY1Q8 zY4DFY_nr&a=Tf-iI~4BtjtM-U=b7lu=L+}&=5^60v0ui&J>2;B2t42JQ3>7_ALF?w zp}!%aza8%QPR6GUbv^@qHR}0$_{W@=mc#Ym0Cyd(IzQ%3UJLH}-x%&ZIumaGFN1r& z?HPET!n}T%dbu0~f^W*hgg1?22 zzMtW~Z?+n)zSQS2|Id-n-Qnu%1)d+5M(EAkneaOJcZGjR{ofAvdGx*T^Qngs@bAdm zbhtjBB>1AhvwoGMJ~yDZKDS#C^JYBN;Ks90;Muy=kvI=VKY@B^2-m+Q+~?^R!F`^7 zBYY6`d_oeZ(A(}`@SoWiw*ETiry@S(0?+cJ&%W@h*ca;HQwg8C==C`Pz44!%&|e5Q z{_glxrrloXZFdOV_($MV1)tIA^_cFi0?wdG{+tY5P z!1LpHApB;oJL==JGd_*c8-Hu`JD@)&q3?p;{&r93d&BMT1NfAu-J$4>^F_G*or2Gf z_)JHy&&TMEe_=wu0q*l72;UR` zCHQ#%%{e^V&DafqCN1bie8@@aL4^{xcU}w$E7XY{9Fllo(_k* zj=co`fN`G+cO82_@T|Z4)8FsWyN<1e>)+vrxZfRsPuIY+{m#$1+=RX^`hE%hlklxr z4@cuuAD;>E2JkoWaa=w{e+2sP6Z(JP{W(vT{W0dDAwIhVp3lSK=o_IwHlc5c{z&v~ z;r90eeC%&8xaXz2@iG1f(7XRW1wWMQ$EoldjMogfzoRre@Isf0j-p@l;r8nreW>%F z;K$SMU-;C*e-m8)GK=E+VBTuLou@}6_$h&B{i;p7t>LzN9zM2v3%n)$9f;4N_z#8a z{|r9*kAd5-Y4{wD{|D$@hZmr)gZ>Bfwz~>`8P_ix;MV6hi{rR#^qdxWp~<4dXm>C4 zwtE!(Iqv_oz^5KQXQJ2VTzDtyzcaiWabAVL^Xmrmu9N-Yj?0sQ*D3V373Y(Y=)KSX z5!`*`i@>wIx&E(4@A_Zo~>`L4>jP%e-zyMIT3yy{b~jGKET=VrL4o9 z1JC+p9d?B~FM8nP`1XN6ga1Id^*Iy1ANrpI&*C|VysbpZ|c0lj=_DS&JaPu%4fBW?!di~!-Z@)fE@SpLqU%#TaUp1D*^~7`3 zG4N%albgdmN1YjXHoixb|I5%jkA6Yl82x(m#$Rq}tcT|4cMUwN2le&fHCca-#pg_X zPK39EpM{U}q6hl3(Dy}eJVW8_xZZpX?tRPo_@9mcmvH0!30{o;FZ_*v&tGCbPe)%T z@cjHb4(@zE1Ma%i6@EAS!cBn}nk+hwcKf2Y{zsrc7X2jj_UnE4|2Y4A3HQAE3;xFQ zCwj-R^0Jt>OL=c0cefAjeV z`eV?qPw1;GkL$^vg=Cc6C#fEI!J?=MK8K+<&rRSf7{_zr=Aje*XW-u*z5c!7#`yp~ z*281y^?3z-Q`&tWz4`nKemLj76>#fwJ^sd1W<|`i@ze-B%X2g0IU=Dy5&eniPlH=O z#rW8-o^aQPyYMmo0qC9YPr~oyoIefj_0&6Xuczh&p5@^r`t>Q?el606c9+Awo~rO` zTnAd=Mu6x(RUB_<0-}Ufr^sXDvp+A*+coDsI^#S~J*0Imv zzBjuLu6`rj=hVBbjQR9?qG|`8n<$#3#@Pz)vg#L_#zEeVfWkP=o+~;3+ z;?t6OJpjFR_%hseV-DPP<9qyFH-1I0|5j_ZoaY?_&*yo+g#OTkzG*_=DxtqPp}#tz z@0-vMO6Z?U=qD!h?n$JH}}|g9FdU^Y}keZ@VMm_IEto_}_rHBF=e%=j*5J`ZzAWUvU%M z@p>Tef^|__{2xi^-$3vE$%W{>j`$vK{T#j_=I1=xZ3J%*ZxMLDzpddu7w8Q4xxkHZ zzmKsm-0Ot_aQ&YQJj>e!#5oDQJ~QCP^BLTDzK84cE8KYg4m^ve1MzING1h}Vy9S== zFGRl=-25MckMp7-+;~of+ux3G`+Ei4IIo54e^=mH{N{fsdVNN~jpr4(@w^4sXAazW zz6d;v$Nc|*UZ1t-JCXklaPwbwQyfS0ziZ%GyBFiL7hIo15fa~)k zT%Y~6+WZY5S)BSbgzIw=TzyaY$J}pu0q*CWUx$Cq^Sh7XeolEw;Dw!k z`(wGl^ZI=g`r7ce+~+(TJ^|h=;eQkQ%7vtsJYN_H-v^&z@cq!g1iy%Je+&K@{6o0$ zFHG^!k_GF6P-dE5hw>E4caZ3U_>a!u9DBcs>uq(HrMe=*`26=*`0hxckVi zrDK2HclLw3e_ajNXDD2sr{Vg{f$Q@%T%V#cF;4ZB61*l{pCjQ<^WH@}_=!AUZXbAl zTza5)T>8R|^SK0n6>gj};l{ZDZk*o+o{w`adgI)!Y|N*1xF6hgpgY{}|GWq8_hCK{ z_qo_K_+I3H9^CI8{R=*V=de}E#rXXk=>CD{^KcA$^Uw-Df_OT>Jr~`O@E?p`|3~3| z@8t-%@&5?7e%8UQlj_^YJPc+ZIUVlvwaXKH2z&tdwdTO}`6a(dvm{;3529f&1fL3bUN3+Um{|VlLd9f01 z{!3Sl?V9Hb@S3a-yTkQq1fR?MqD|oyIsaS)e}nh9E`?9zKGHRCeFnhw84UM(y54~s z=Ulk{E8zOCha2a1)nY#NsSektP2k!3b0zCfCwMn_5BOE^KJf1F!SJi$BjDG-CkI|A zouXG5uUYWhn5PTjCsS`r;RnIj!56d6l-Vujtt0JLg%6;vYQbN||48_C)KxLueszJ{ zuU>Hb)emmJhQaOENVxr)0yoZuaQnLyZhzOp?bo)u$9&qao#FPYCft5CfZMMV;r8n+ zxc#~gZom4%?bqXQ-|L$P_c`g#d&K_APuVkaeMZ24;XE)N?)P)ffP3G29=r=azrpvS z&Nsl9Q_to0ig9{hx@v;&1Gm2y!}n$$T@9bl{p$Yk+gRtP!51@+=D_XO7jXB5Kj6k$ zw0G>U`kmnJN5ydSa~0gr-`xT?&jaDc^BUam&zu2QKL_sjF@6qL{}bfg7vfYzA+xZhxu~2-~ZefZu|q`ejoLS1b+i=f4@lZ6>!^a zw_l9kb4z>pDa^Z{;P!VD-2PUp9{p|iOt|e{1h?IOaL4gExZ^SvuK$OD7q;-C9_-_b z(R-b;8g4wB;8(MbRjm>G>%7<>ZoQodSKkWmd?|)opB)0v_p29r`_&t6y*&)K-T%RD z_u0Vn?S6{hI#~|4PIjsp^JYCC0JnZlhr4cH4tL$Y2i}SC8U^2q>$}(B#`786cq;B6 z<98f)gPYGraO?Rjxb=Jm+G<0?+rW7JB=27~Fb332wWm!)>=+;Q4lUt`+0Ao)3Xr&u_uie*srtR6F`xZ@a;* z=Z0|W@NBsA;!?Q&FT*{j&4F8o$aL2dkpcudXt&rfm!p%b?xIV|j?N{@_vvHK4h2C+z74GMbABLOfui)nSC%Emd zf}7_94vzV89XKBDI?x5~JiQn0cs&O9^QzCot8xEfHeCPpaOdfEhs5};he~kAs{#C9 z&W$I*@8-EfXLwDno34X@&2?5^_%i&*9~R^E_eW;I{hgo5fqNhF zVz|HCeh2&#t}E|>`}-On1)l9kHx&Mq+;9I1ej~g>-Ocf5`d;u|;XUCG*Ngg_;MM9! zem(rbzza)ok@>9IAm+{A={qOzf<@8I_%t~p>fL`k1fJ=yLw`Mb_x;{*e^=!Zxc)ET ze=Ytmq4#$~UPEs@pCx$RhOu9Z*r(dTJ?~u!cmDQ*Po&Q8g!}pHq3|cUfASRE`{$G4 zUofdo$|7AEw>&6TCaz=TLnD&*IGfD-OSN_b}Y} z-%9Xr6MVNLWBm4aKe+kq3ZKD!q`MP*IQ(p8gJOY>gf*?#vvd7h8n@6%ofH=Z&_ z#eUiD{((v?X?1$D$)}@Yc=Usoe`bmN3+kFSU?fwkcXC2&js~#QuyA|=* zg1^gilSc6O*r!g0`ySn8a>l(sd>wT@3+{gL6}%qxumbKps@^#E%kS+!7Vh`OX;>fzRp$-~X5x=WEo-G4N|y-|m8|e;lrU*JHQre<)o2-EjS%fUB>2 zT=Z{3{5=BC)}BHdil!C*%l_S%;1lrieTLt2`q`Upipn0px!uga&}`9|@H>W;1JBy@ zJh@v!e+YWdnJp9gV)UMKu0U^pUqkPCX(3#n@8Q<}YPdezo)GgduL{?HAGrQ?;reue zJ1)-zp3nb8^ydGyg#IJ+=6~xZaeT9UmW+EvxZ}Qe;F;F`)=%hGufw>l6B$bNZ5T zd?3f$2A?4bpGR~0W&yKN9+Xa{7`wFW>yX^*lTHR0=#_&((7JX+ghNLSG}NFPTU6a{Q0r(Bg6S{4tmcs=d_4UQn)_X!1Z|#Zalxi^{IQxmfLL(SAPv$|GVLS z4)jg9_xb0;_4yV)ko&i#PK|MH&-LtXfoJ*JFU#T1(?8+HU*U|{Uw!rrJRj#N34I5+?LGl_9bOH$-CbM7c=Txq zSKl6PzpjEiF1Ny4QqOP0_5TuXJWJsA>*Urketm9)``*RNaG$Te3;(9D5thu~)o|lE z^vo@{dqIL<3)iPF-23oP!R^=UaD6_6+u!ft`qXT*<@k?*>)#r_8{;?~?zoh18~v@5 zgW&2;RaP?=v)pvrw$$kED zaP`aJo+tl;JMITvu;n;Ug}a`2gm2>fd?UOy<9-Kx9`$oS{5a0%kHa5_zW}#RrooM; zZim>f|Ku5N-abz7N*$w*&x`B8f24lShWmW8e}a#O`+fMY!apa^f5QFV_^mFCajNeQ zx4#qN>Pue~ef&Pa_VEAlp66BY8qB-<;M-BRqv1X$`US3krA{%PK3tC+2)Es4@VUfu z30(gN;QEh*>pvZ?f2oUOocbRO*Z%~#{_WxV4+=cLUyMQT`u`35R_^~VP4G2v-*?&+ zc)r~|I&bc8p7#hmyZ_+l_wR)dU|#<(!AHY85&t{zr>KWd;r91C_%zn@-{Jng%kzwe{plYMGoLjOB@ z=iOg$-)}sqORS$SsQ)Gj-VSa(oDcW+$gYFye{X^hhwJ||T>mfOw=wU^T^7eZ8{-|a z#1{Tl2|QyX&^LmQV;oz+Z$FR|4_FZG%^nV@h=hr@m-@>_Wec*Kp zaeAICx-$BE-C8a1EYDfrO6p`^^b_!J0QbCiE!;Toha2aF!1HlVLT{WO2cC~}A$sFH zzgz5YRo0Cw;C@bXIQ&`GrLlo$?cP!NQ*z&C0{Xwn&+Bk~mIt2ocO?7fomXv+Gvg;R zUmk^zX5PIKcovWK`B~uk`urNbrPVl*K&p%(n zy)Jm;y4bGgpAQrKbGSY=ua7=nPaO}R&iZ^g+;ijS@Xx5{f8f^DZarhW16ZFMz|H3g zaPxT@TzxTIeJ8m0Ge^RWa|YaXY+2y>b?kTa)?v9`oBNy1Bj;n4z%%B2Yz6nabt1f& zJRf&M%x6EIH+6=apZgO08Mt}-C-D3_Q2EB#uKU-0aNB(zuKz5!`lWF1({6iHY}e0U z>AIxYvoN-V)<+ zJvj^RI&cx(_2jAqzY(s_Ft~BP2sb}-;pX96_$jOpWp9oB(&yj=ZwA-@47m5x&V`%L z%i+c|3~oHHCHQQ(@hpHF&yR59Sq(RyZEs8DC&8P*ji)8tc#7f1(*)yWQ_|Hr5+u*i)Kiv37!qvY5-$Ot?Nj zCwQ4VwjBQ+aN9i;Zhqc_yUu));7j1%hdi-QjK_1@wQxVL*B`F_UATEznc&;p8QZnL zHQ?6Up$UEz-2C*0d;e{Cg1-$npL5`@w_m_rw|`FXRd9VO^^JKj&pqK@&-PF7`Eaij z_ql7ce|BE-{g9f0=g;k@CHRGK{clR}AqhSs!DlDC1NZZ5^pE~4(VqY}4^P9@PlK!9@t!S@OXa}xB}!u1~kx2|4-+u!MM-|JohH~+ieyXE}Xh3kJK-26WXSHA%6IkVJ#v0e4s!;QZ$ z{51B3hv4tSKZQGvOX24K()(jP=4Tk(Iv)kUj{78U!fp2xxa}^1n}^@w)yj_;s^{xS5%^8)%lg`z9DKlu`R^EM6r zo#@|5=;xyEi+({u|0DXl&@W5q*P_20{luiw9b!)JMYeeTescd>K}&tJ%p3seqOkENQ}qNMfQi=ui zh1bFTyztQv#dhB-406f5YnI?0;l3Y!Bm6hclkdRI&);zKxy{2d9zQRz8(g0Q;reuj z`+XO$!1ehUuFqF+rI4(%=74V+iXWsGA zI9`6vr6$~Vo5O9lQ{egj-iY4*-T}A2W8u?@^F6rrFb}RzxyNF^oR2l&j(dH$PhMR{+ z1JCE-W%TA@D*FC~|5M5S^#OW+*Xdih{ap$-{;L0rd64e|w_o)G&&S^qz41Q-ci*23 z_ji9jhWmcZ3rd2qi+=nuH@Z~J77^LFB_ z1owX3q41&XBQ4+?xc+S$cs4HgP$%8cJ1#vF`UeyG;R*fA3H>y<*RwyszvDc%3jP`W z+6Xs46`qRul-Gvq-w?i*c8`M_XN$n|`Me~-`zCzuOX#0N@3_oB-;sTP7J9#DX?{Y# z5WU}Dv?!rpioQ9|sn;a*>(KwpI$Y}M&Et~gZG7Rvsbsw>6L_}28-L}5zAAd--ygmC zIS~C6@>UG@cf>A(yYAfy_xHaBz|}ts_xHShhWop0`;CZo`vvPjL-@(uKRFieeq9W= zU)|uwc^CXY{er810&c(N!99nshcDt>y2~@Mzo(Xq^{{W?S)JU=desQM^P+9w+4G1? zsJBk&2T^agqd$sv?@H(=px6I3^!qYi-z4-uqThjbw|jPT9Q1ou4f z6}%VuDKj#zZ~E7Q>)!ybe@D3S-wMB|kkpd>^g;L$#Pc{@{}WWY zxc*PV^&bP*|3|p_-)eO1m-*Qjei7@{A#nYVh8uquxc>d%`acBM|1G%je+%zIovebJ zpN(++%Z`b8F#coU`nQ7X-yW|2Ah_|r1UEnP;J>pjeGAurIo$ZGj*b1&zY$#j6XE)I zha3L@_yxrI6x{rbh3h{BZv4N(^)DJ1`=$R5aQ&OWjsHTp`MDk5iuHd0T>nSm#y<YBe;ylwDZhp>(>wg*C_#cPs{~}!fX>k2l!;QbwhZT_t79S{4L@7cZBQT6|Vo& zaO0m2H$OkXi>d$L;QFtJ8-J|{F%SB;fa~85u77X1@&6BgGxh%x-2A)_*Z+OE@o$9d zzthCnFa7s`>wgA(f9m9FxW7AmU*L5L*C}4VJc#~i&UItZdwuazLO&b5=ks|9{R;HI z6aT7&zS7GvKaSVoaOAyUqi|Nj&S{VhZ}zjxc*(>`dz#RU^YaZ{|6kz7zvrZw2mKF&>)#lze>eEItV?&m?bqXQ+Z_+L-Pho@`vKg3 zeF8t9^ZeG6V}FfjU%2CV0(>&-!0B+~IS+0;{owkKgzNtbT>tOk#=i;PpE{{HCHB{R z?g`hwHr)8nhwI-RuK&$&{U^YUe;(ZYtb#A%dUF$8|LtFk{WbnZaQ%zn`gexwKM-#G zwf5cE;BfxABNuNG9wcDk?4J{G%=x{ zjNa!;GZXp`(fi!zJGjqHeoOeQL2sPv;XY^C_4PPjz6VsoG&+Y5b8-J-cHrG{FC+f=tUKsKsXya0bhsDVt+j1%{U+1v96u~_w%{e2cG4*aQRy_ z`}M+~!oS<$S+3h=g2KO1`1roT61eN_p>M@_Dih~jfoHb*k41k4&wt;BSD|0u!#8qY zZtnEh?wwq}d<(yZ=d(-UzBju%!MA;TvwwEodM5Fd3q0$SpDQ^T?&tE_!dr2E=mEE1 zk0$tg3BD2TdwP{-#QezjgZuv8!EoPSx)AR7M0JJhKQO_cf!pp>_?hJAN4THISr2!9 z)qW@TSD%yN>$zTN3x9?CLYKkqSHA>*3~s+h!OiE|z_WSbI#A)=7{BX4+rTq@Aw5OY z!u$E{(a)tmFM|(ZzVv{1fZv+%?}PqK@-q;w|5I|}8JX}Oi+&dV@5B8Z%1>~|Wt*8X zZ_c|4a6k8Y7+jxI;ErQ4+|S8&gX_~j!H2{39}PFo&*1w14%cTR+&Fi7Z_D}F1Frv( z34S`de0#}68c`~J%{u`@9z)xLvQ?p6Z&E3jsH3H=4Ui|&pDIeo(C4=bAKV(CC}?O zqIVqkdq0ks-vf3S+|SD&3t!6ma2nimNV^2@6nIt-MVvRfpf{gA68c`~&1av4z8`w) zVQ@k}488U6TtYt@z2h|zz4x~#qqn~^68c%_?eF}Aej$4MyC|Vwir)VInb5CCZ-2{u zu(__X@wLAd0?*EA>i13P_eXC$*CzD0pf^9W;m(&Y;GSoGhWmTUyM7q^HGuhbSm0T| zoL@&K^k*jY9pHW*`BJ#^>k+uW|2r!1EdRcTKOVj3h56+X^&)32Ip2_}j*Nq1gd?MU-r^9V`F5Gq(!EJX%f|vR{*3UTlRVMJP zemsX)PUx$m_ncWhp|6GBb*WxL-w3_)0-nYCYp}zvX_aS@0ZTHTEPk;3K42IjUN8ygwbofB>|0#Sb&owUi zBIe&Xdjy{4-_K$7LhromlhF4=Z=DQI=!cAcjjFq^yZ;yLf-5H~u~eeLwWZKRBTuhTix`B=jTE8~;S~zW+QKz46aT=x3of{`m?0LiEPJD4}19 z-uVAa=+~on9V`EJT*pdtKHM|#Y+jg${m>idG4S&_@0||Uzg@z=GkWuUBV7N!aQz3t zAERGS2cGro!NQ-C^YAqEo^#$uZyr8E|DXKB{r<7tzKQEhcK$i2L*Y;1UyZ=Cb;jS* zIT7yf>9m9Udph^xZ=8>!H=pAZ`Zp8$U*TiPXPIwfzifA>z_WgtpW=kR3wr0vJ@9*2 z&!0^Aj6$!^9JoH;!`1%{SHHt|alUvxzF*+^`EoFN{hPz}zZ&lO^KtxLSD!|&|Emf8 z)P(*M_(sO}n*?72_d31Q_c1^6Y6-q?f}afcdv%7veNW@Hz_a{k|IIGHRpD<@(Q5Sm zj?Y#<#5jK`OvsXTpb~s9>TS=!GjHc_P4xcm#^La0{p5@1Nb#a1k#K-lv@{e&nX~OkX)xfj$#C5EC zLSGBL^P*lt-w3_?TGNES1$x)F+Y|b`(Ca?}UX^iq8*cqCfzPC_PFS?%yqy$ymN(n& z1ouAS9dO%y9&X(>UL5C<_s`o0p4Efncp-Y@=?(XKYB1dU+vDJVKg?{n@vI0uAI~cE z##8a9*e~O$2{)eO;l^`K;MseL@}B6u-#am(pPbOIhR^4|U)i5G$Dg$;-!bs49&C44 zxcg51z)RM>Ys0yvF?#QJwSarSt2p6vK6>x}Tnl%feF@%#>!bN_*QFho#Br4G57*~Z zxcC1%!hL`EI=K2r6MQ_}=Mk^NyD*NQ!2Q15ui);3f5CkpZ~LV&57uoX_+Zwbli|L9 z+dlBDt|qYlT#Vkj>J2x~1L3!_&d-3WUkY~|H^Qy+?SF~&Z=96_&)0uV^!n6E=#L3J zKQEe~_rBsCaL4g6xZ^brZk>Dw_j|66To%XIb*5F|*?7Ih{oZ!y9j{B#>(e!%zYgxY zF&^$ZJRR=5{s``RyVLU6FZFu_p5=c~;ZMo=tpR$^701Bs*C}x0KNGHgw-qrS=X*=I zxbywb1mEG;80SjnX+yZ{%z1FvhpQ9(9=QE_Iq#F>!&2eUR z_z>4k4Fk{Cf8T386|T=YaD95|JZ$P z^jCi~+&qs;@HgScGaIhYvIO4%*JsB+W1R1?kJo^kpVkR}BiwkNOz>CX#5cKY+FTmYT--HiiJy`&E-)ZnqjNg7W zh3j)3T%W7q`rH9GKaare*EqQS`W3GKj_bD^|2}Zrtp#^~KMt<{X$jsPuK%s@-?^T8 z1aAG$gj?rd!972$ft&yG8@8N>^Wo}y!tL+faQig~ZofvtjdMQyKj#Gar<@1=h8xdL z8)LuR-}iv~JI<#h_*d{>IfwrgcsAz-bN#Xs{R_;ab#UkP4x3_}2XMc-Cfs%p4Loai z2<;w)-gcY7ZTC93c^i!XL--Fv@9#;CgX{A)+=-JH)X zKgPdr;MuuR{~quP>{ET=BN_LH;Y&Hsj1N3(cPMerLhtqLeDuT6e}}#j@oa!MqTNzO zI~Q8qy!PAf9)V~5wcR5U`ZE&xYv8u~DBRD#kATnSy{U0C>DPB~>u@>TILnuc_4zV!Rth}JkL%dM=wCr!H=!>M zJiESbz8W`8*rF{kjD1_}&CJ|AXL;`_pjqGY)PZrUjn$*M7}MZ@<2R zo43UYpY`bVDZAa~ammleih*bI-T8QM;Q2VOg=ha;jc`49C;XAZ|4?$j{UNyP;S+&p z?OxBhbQ1c>_)Jge=b?WV{m`ev18x`i=s#I z*(;$x60ZNraQ)9o@N41v+zHobNP>@t>+>dDpScOX46e^VaDB>^-Eux_!u4qY*XP6p z?+DkYJ6xaM3H~TtpV4rACIp_ z5a>jYmEc$SA3=+|=eRj7wQ(2qjD3B7r%zC#=r&%^cLoh?m6d1xaXX^ z;Q9{W2|TWJHaQgu096${>-$%3!(hq^NX%wU-$t1OI$~P3-@<0m&1MU@gMw+ziNe8 zhw{3CXLV@5j!o!`6Z*^HAMjlDCiqU|=YF`~%lZiXU+zD=3imnhZ1_RE5BxdY-=+Nt z?)~9^0?)?9{8Zg(%XzCGc$T*Z7_S!an+pG9$vM9Zd@%dbZSc?F_ru3X&N+v|TXUUq6nq{&P2jIFU(SHpvu+AD7TCf)8fhSOa&R+;fl3@n`p2 zYEy4D1JBk;@3))@cYnDc@O-~|p|@YR!CNy=@50AAydVAn_3#8f*2Cn$^Zj}Yz5Ob; z=jJ@*LkhpANUb?eMX`7o)ddkHTH|M&sjpJ{i61@H=pQKE=oN{0H>< ztVZv8zRg~7UZ~$0?s|A6+<2~rs~-$EpR?i4$EAVi$M;|K*5@&M$M`*`oeXy!z69=l zk~`t*N5WfjpJ6iG^=f+H`S`y?Z~SHUiSfJs>;ZQjXb$)Mb}qaF>)SQ(>zKbc!dn$4 zP09U=yWqC_3|#$-aP@D&jdMQSILq%F^RSlnuu6g-oZ$5n{Ne<^6+Vjb9TIr9F4^Bl z(7P^u8hC!(m!o&wYwowXzj=M*!1L?aVDyDyEUGfM@Tc(a2lOW~zN_HYRn_V-&yH84 z1aAR%9NPt+#s5>`Pf7iBfd34?1RtM+Tm$zx)Xn%T!RL1LK7V-^?(>w-;O?`(!OcUt z8gX1cq220%=f|Z9T%WVx=Iti@KgYi}dau78hkL(t5RJb>ji_=HXempI4fKPbb!a zH_+?zE!=$m3pbxT?H}vvOZvNW;8|Un&jZlULw`_0e=Pd1&^Jx!JD|Uc`>q$Gx4*Z; zoktJB&BLe!e-CbcK7rrF_0cbI?{jW~+isNuHs?8io~#ylmS@-PI`D`{vWvOTe(_s{+gfaaIafWh3j)x;8}m2N9Uopzdhi# zdl%gKH4N_ayO-hSZ93e%Ery%7aaCtZ#@5^pU*n8U7fhTeF`rR{|sI&@N7PM z-Bc63`8ff-@6WeL=sTb{{+k2O=jTrJ=4VjC{{{5=zlPp<^fr3yVGi87{Q@8JuoAuP zZb;}W9~kF_`r3hK_3tPl0D`3S_X)l} z!FM?**0b>+9C-d5*c83_JOyq(Tf@!g`S_d9i_yDYbwh7m-2%6+1_qw5|6%B@|K|eF z>csC|8JEz%kKVj3N$^ehIKEX5j`=sAyTi@resJ@7NZ|Q(<|y>WS)Ab4C-?~Xx77s{ig?B=u*+w^y?D% zH}GrV_V)(-?eCN5zr$xNT%Sn^pSR%l_al6M!2fIb_wc3o80RXu{@WcM*ZD>GY#(^G z&O0tu;ri5uJ1$4#|0Dj#qu2io_{?(g{^TWa_1)k;XS^}+LX-cQzqg^+=Lz(SiE|X( zaeN6M^IWcOtY@#&_kx?Zrf~Ci0elJfwXTA%gWm=BI``qgvpoDrJ|9KzIy?cc&)fJ6 zE-*N5xj*3}dE?|}bk__pxZ z@NwPv2=3>V7UE<4-=H_nKhbYbyIUU-=biDC4LqB7#!=#763`cv6w*P%E5QjKE$s4o+ERzJpHIiatL z-uSC0^tI3%e?9b978);kzT61C@i$HATc9`oHVJ((dgJeu(04&^{QVR90qFIA8tyz= z0r!3H(nrR9%K2LtuFq+KXY+A=;ZI3ETch{f(gFPj^cN@e*P#Cweb0oxFZxaB?@8!~ zq2Gx9@r3?;IqT~83I11tmpLlV3(qHe2cFFf&nNq%w{8zXZ=IZiUjGZx>)#7~5&gOi zz7_l~_}1`2_J3excm6^aQE3e@VDLj;m*@xaQE2}aPu%8Zu}nvp5=2J#&;gv{CtCt zaV|r@9X_kz`fN=2lxrO4OKE&6!u8oR@cjAYVDx41X$CI~KNYV3*$MwU(U-&LUbsF( z6Fy(U{eH9MaL23kF>zj45BtDZ6VG9AeU68p&ilYE;ePI~U*K7t?1KM8=zah58T7lN zAA{cgVk+FvdoF}~{r(5s&wFllY|M|>p*zFvS53J2IU>QEz|DV~z_a|g4quMmb$CcZ zKRTg*Bk=6Go7b%~(R&^GBYHo#xGbUnC-8jy6_1PgH2(bq&-9+p4@B?z z`lJ7T=rf=8!KZePw+*}z{5SlMPxv=SpZQ-Kd`{2tu7RHqUx|O`gnw7`ng4ykr$>(8 z8TcLW)%f3&@P80}=KoCa8J6RZ1^ztz5B$d`{9i?%`A-Wzujly7fzN{fiT}q5{{`qX z|4)O@w>dsL@L%BT@L!eiUxz;PUlDx%&GE&7mpdWW?LYWe3Orw*)zD}D+bk^nDg4_f z$2SE3qw(=`d2Qj&-|m5D>y@83>4o0)Y8u>iejfbeLMKY*_0MqE`IT_jnSTQ>q~<^C zbG0U0Uf*g5o{#@<^u|94?*6hk@T^_W1HZ#}Vt-tZkLRmxo5nc(T<1=KXZ}_3sfyln zU`@C_hv8EZpGN5QX%5%tEPR$zhZmsN=L)z!*W+V6x1!glFZy3;_x^-_INWxh#m9EX zqPN|b(f>}n(-Qjk;kNrJKDPTcdfQ!ueiiL5Pw3adZMRgjxNg|)_JL>XhV52DzlL^q zOXv@P+iqQaZ1*ViwtE8lwX}P3LVp(Ab}z)ob}vJ3yWP?MMZ3Kc`o3`69f*(Z4nuFd zPoV#scArn^$D#Ln^Yw)O1GsU1m*9USc-a%Tye{pP;Pn!`MS`Clcp(Kvl~|X$pG_d@Ue;XVm{KlI)o9-Pn*L+|y`h=hJ5dhh$qK)*HTqFLyT ze||#05WVp)O6ZrOH~uvV{W|or1%b@3%PcEI)fOUMtZ1J;3V|e4CarKfV`N z1#aFBhkGt+5_lHR-o$erddKDZ!1LGdx1#raG7WCKAH$9FFSz5i)#;o2o5guK=ZftD z&(;~|*Pd|CX$|3i-(z>U--Fs8?)W|fcYMdeJvYvPJ6@l{&BL#O=f|b=8FAblm&$?X z^>q^ZBNFr$<@T(@Nc&)03`guW_z_v`BDPhy{~h2HqQfiJKE-f-Zo((KpM22b!k@ywX>ju}6CZzfZ%#tL2))0@_gg~04!!Gh)iYxr zd_Vu_z_UCU|IKjYzY8DZzdxZLf!_GXCG?Zg8-G!oI8TkUG2A#$3Ot*?#@RBV?}Xks zyCw9!&>QCfxbx^Se5|)u&|7a`CG=I=#&K-H_2Y$s=g09excM1{kNJ5ip??>>`T01Z z{{p@FSq^u8`-~#;pX8kxOw;&KA!X89>pj^{OS+x-pyj@;i^gWmH%>2qVhtdj%a_V<{;v-l68{+popeVBIW4@G}&LO%li zSn6aXdgGr3_qyOqxOMd_+`8HXHxHH0+nk@QzlRb3!3lm+;Mu<8IG%~#aXA;g`^6>b z%|o|@egyjch;s_OI(!ja|E2hw=QRoaI`qb0s(s9x{Vfyt|8uTR=&PdFzXAMk_QB)f zzf%9L;f`;|1iv!D?}6(-0aQ!d1AoffD8xs5;xIP=;`jqJq>#7FzTmfDazE9v;z4=~2Ex7*2;IltI&EN;X z+v4N=QzkSD;XZyQL;Q4&+ zi{88)39o~H(}Yh;^ar7Dhu-+R!p%cZxcUKb^^d^SzX(@96|VjhxcYD4>i>YN{}--) zmkZ~iTzs5gm%$Ha9J?ocdZO3oWq20r%i%fE zm-u);c3Fb&-znzJbKoOz-@BfW;6K94^E{>8#nIn*PDt=J3EmIhp7X;L_;{{&79@Dt z&M_W+D#LwFaZKP@jt^(Nn!)SB+u&n8Tm;{^R%UeVAyC(Dv;4jm!R`@i+=X~_;gI&=d ziT;L!z8`w?_F{rBOz_qCo9FGX*qom%57t8^xb;vCZavftJX^P|ho*3!w-)1Lzpg@W zoc+)n=L2x#d>C$=PvdW#ufQvC9{2zs<6Mj0-!a*PIr=<^xp5PhyG92pGN47ziC3>0=@CK zN$88w8-J&Sz6*Neza4!u*1h}C`#W?)(VvL^iG+SS`m1>^FcZD;e+l=T^B3InQkkn_ zJv1Sn@_}dd;Qq2Z`ljgjN$BgrU4NP<_<3;Szd7)1{+>j;gV8%rA4}+8P3YfD=s!>B ze?{M%c>aL5fUk$23@_b1u2-%DI|iQh*Kywky>(bGp>KrVI%%5Fw?MCdcevv+6mDIO zg8QD^)C7MY?)&zi!ELv~)iG~A2dNHM-yCk7m&4u1Z%FWm0?)?fGT!qUj@~@K0{6Mh zbhvSTj{hmt$x8Ird8upS{5_0#whug;zg`zqLa%>AxIV`vd`?2IPe=5|c?0@W=~r*~ zY4E$@E#ZUlcfL$SZ~Rlyn}@g28~-A>cfyCb<255dSvBISg+6&)}o~i*Wtl zh8yP`xcyxLSAX<%G0(n7aV6Yy-BW>Q`9F((jf7iQlku_LnStl;lgvTyI`A3Xb9L40 z%Y(_ge$c z@_#n{>I=7D58-3Ko`UPY0B-#({{QH@ANcy_`VZiTzOh&wOeVvT$!O`sWYutDSgf2F zErt`rFgX~8#fhbr$-yuT2g7JMv6xyq7)_Q=HMO*Kuvl4~AH&M<``+*Sb^CrkuZO$G zL+bf>_4>Te=bn3a|LtC-U%mdmrntK9veKijTh_hyd^<^be7c$9>hq#oDXzZ%ry5?^ zhi@tSu)E@|iZ>`d>O8HA-=RD%J3;ADkGD(7t3BUS{5#6?_LnL>>h0>)N`8GMf3M=| z6<7D+6{SbL9N$n}-T(I#SNH#;=dQiH)cvo77xrJ>=WUg|x<7j;uI}@G zN{_nFhbnos=NQG+eLhL)QTO>wC9m#tpW^C1|3UGMmCNN-#nt)WQoLJvT)f+PYxnK1 ziXROx>|5cspsnyub#nsneX5oe3ck1gVnUYt3kFRsVhtFT9xO%)zimUtM zm+*eY)%RsxtN2aI<#?;&>faAOr1*i#dHAy8>O31=_~FO(#S(sm;_BtqrMNn0pt!4? zKUXNO_S~VkdO7YAtesQMHz}^>k5F9AU!wR+%6?uCFP?8h8?Uqa%rK1mO5`6`d_=iE zKBKt$d+JY$tLNdr6jy&wy{)*~^Sf1$WK z=Mzf5y8qK9@-HfRb^p!Y4?nK0;Cx)WDz5&$!%>Q>pV!e*!mn3cef)J>315Ws{=cW> z)xX19|N9?)T$S*`ajDPC)hK!OJp781SI@)4O5{6BE-7_%$W`W_V#A)H%nM zygKLeCGzi-$d_NT_I5y>bMq2@Pzi4-;YXG5E;wJlKTz`O@BPb^eBrWeFZ>@@|6EHx z0Kc7l68->r;WOz9KaY|Z-kV$a`5k%TIhVrE-^hF6uab|!|3f|xFZ+Rh-p07!zNO-Y z1oF3*$d6FIcpmP z=EBc(iTocaU-(SS!q04p{PUDAUN8QSybkNWU83hb$`{@PSNK`C@566@J_aw0S2))T zpAA&_*{DRmg7U@d>5k;>=&3Eyvm50*k*_b2-<$G<*ER}2jV1C2Qoa}YqsRx~$Cl_h ziSk3pf2TzLEXwyFe_n}vK>6bB*j40{=ou{0b2H_qksmIR{|V(sk&jE{AEf*|@=uX3 z!JjG7^DO08kbka3{sqdAoIm%&3+HCr>gz=Dy!yG4S05ie zuK1YpJm;L^>ig6FtGJr~>J@8`OMRZOUGX8M|GSEROL-lkA6}UMNM-)JOZcSHquvis zOXUAmBEQ*{GC!}oO9|f(UijUpuKP8`)%TTkE3WR_rHZTjd@G#i`Gt~K*L^~9b=@V! z)yIh+ziRE}rTR9CS1He%)tB&t6j$FLa;oC$jpOcjRX;b`Y#gA8d)H%;7 zk?$#yzgh8l<@eMhN{@PZ{aMMY`}}vsFH>GG_}JBJ_w#tgw^F=YIo~YBPgI_tv=vw1 z@4C0*>hmNm@WOr`uk70~N?!eZr!FP09`BEpyn4LXD)|$X{#%v2+8-;feh%2U;_7+z zcg2rYK7aLnIA4#pxMuA>t8;FvxO%x9rg*AcE|)8Q`|3MP#or^hD!z?!yZx}@YJURf zIsaC|-&T6m`8U6I?Qyj!=jV=!+sd4EimUS+1m}4!Q}XIQ-=nzN^9#k*>)jKItC!;} zoY#F_$*afvj^gUNpBt2YDDm~9>Dfv^B{P897T}r<2 zSgm-T^pwb7s^m{q@>i9}->T%lqvY={k$+gptGAzzmdK|{{xqe3wnY9FCGRWw*GuHz zSMtXw`Sq?_dp@g|*XHoTE1qyj>#yWhJlPzO^WM^*lUT$seoqpRV|E zigznsc&uMMA9|I3_5FmuQe6EUuz96NUH4VR)pg%cTwT|=e(gT1>((f)-v7B#@mRS% ze7A(R->|k{&0np!`g`h+imSI9|5jYhe|czazv`DLuJ&9D=i8ZkmArcS&M2@`P+)Cx078;&rZtkmvfc8`n>dwimUU_D6a0?<~M!#an->KbE&6oP52Z&vu3T|-o@=8I z-=D`y_#B)s-^CL7kKFR%$F-s2>V8(1@NMCIejcpk)#LRP|Gsj)zD05M{Q#qitIvB( z!3*z~P`^(qRr2cjxz(*}k5~Pimd_}zeoo77imRW~(yX}pJWqEC?^9fTzGzNy^>`N* zSNqFuTRXq%m5QtV+bgagBbQ;$KtlPwuJskCpcsHYvWf@;Id(&gV&|l2_L~PsyvF$8}MO{LLl&r;4lB zqaWSA_IS@#&i||LSnKNfaJ%B_vw~AAehM^>}+m*3R>)@_6bg#nsP+Snsa2`F|>pJC1`FZhtzI+u@6q{FJiKA1JQ= z-DTz7Yx}QP@_Q<-=1)~zoxfXg_4%dC6jz^TyH0WS`J%@aSNGx1imTVJ|5IF@=i@(F zdt9n-p}2Z}?x?srzoWQ1f3xE1{D&*9_Ftj6dOkm-xO(1xc69Chdn?aN?5VigbEo3! z{rSW1S=;k*`8=Zd z-pcLRWh+}yUYK9KzFhY3+WZd-FWBJc&6%}c`2XBc z_>a{;>plD7zSEyS+;1-7gR>u=A1&eKf6?<3n5Tk#6n+f(H2h`qV$W;j#h&e-)7PCt z&p{>p>=HgqUR-ySytwXf$&2e6fBo=zb}Qj0l<@0H_;d;XpoH%__u=y#OkUi7pS*Zn zx0LW{@?`r!wXH^2`kFZLWwUWNP#hG+jQsQDZSad<(C6=g|B}2o=Nsh3{Ejbvcu!jizoLXc zS;F5h;m^LLuUnk+oO#{*aa>oE7xOogS0R5pc`<(vc`^Sp@?!p%iG%uOpuSlPs#OsKm1Jc z2Ka^K#dUu`UOcYL$!pPb{Tuqa#hw%1)V(;*cgQ=@b3S>o=VJ2WJeQK!qUS2|;_==< z-i-Wh`#aas^NZ-|A}{9ux&GRG;r=J$M!eI9yS4g0eBq}s zPvI{nni^K$iC+CvO>XZgUifU)!cQ@uz-!4{_mX_!v!m7gJIL3OZ-#u~v!vAgUz??; zfqWER_$(bY|1P|d{PM3!PvJ8+)ch9kX7c^vg}>od^Ebd-$Zv)h{w7h)-v%$dr$zN? z%vpG?MD?E_UwAD*_50w3#~`Xd0580TrTRng!fQRM{{r4c{wsJl`Qz{&@?XOP@~7dw zYc9^(pFyuSSR z2ssbO$hSLEe4P9=_yqZ-M@v2-A3}bT{O9l~@|xqNXPSItcuIaGe1^OSK1=?3yY$bI zUygi6-Upv2?}smthw$RRPhS(Cr%TuB!3_IDsl_`7WwCV>8U1v6a6*h z@4#!x--X-cAHeI#kHxz6+$r8e{vtdee;M9O z{x5hR`D^fg@;Bfi`P=XT@^wdK&Ove$K15#3N91M550h^IA0gieK1#kRJSP7bqk*@ug-Y{ypz1R4?g*^$aj&S055!&l-hqXyodZd@PPab zcrW?c@ILbM;Qizmz(ewj-~;5Bzz4~H1Ro;*F+3u_5j z4dmy*9rE+xjpX0M<=aGlG4jpiKY+XBm%>}fFNe31--&e#?-5n^`K4dV^~)n~c|^RO zycOO--Uja^_uxKxJG_g0cX;7%+0;4rg7=W`4-d%ChWC8 z_h*p&VDt=;7uSu*JCPqI?|_ex7xSa!KJqbn7krHThj3^0dyLin@Bhx~H|?(eX(SKe zP2^qhX7ZEaF8Oir7V>YwTgkrxZzJE_mpKdHd0O}>-jCW8-cG&&yn}pQcqjP>r%At0 zz5?$eUxJ6L-z%ujv+X_7Q+RK->IcCG$q$APksk_=$iE36CO;BBLVgT9h&OnxGK zjQkY%IQePt3Gy@H3Hb@|N%HgIQ{)%Ir^zpdr{q6`&yZgVpC!Kt9$l$lUSIm2xdw*G zuYr${-wPile-a*(Z+wyTkC7h+A1C+V6Xd7B6Y}G~Fa49`55T9$AAwJkKLxi3^!<71 z-_l=4ej>b{{9CU}zJdHCxI=y}-202ZZu5bgtbum&hv6OM@mD3^Nj?Vm$y4-nk*{}< z^mLPNj(iXKmhgbQ4&F;%5AP%29qaa!dvL!@K8Lb+d-#!EHeItnUF0FWoBRfN5BVMN zfc*K-N`Ei;smS+{cf{zk`pF{{ucw{^+rCTodH`94DTT|GQm$k~~Cyiu^6)r^(lcr{vCe zrGJL}F8D0@7<`WWSMZFy*gsF+iu?k3@%tne$vxzA@>}6c&Qpo z_2i@Q2J#s0kQdLlM)Gmwo5&~N&EyH(C7*=1kWax|$*19M z8QdqIhj)=Lz`My8;XULzJRo0!_mVHe`^Z<|{p7|4ayt`}uYwPdm%#_g%i%-hm%yzx z_bS&ukB$Fnw3D0iu*C?-Q+Ybgm?V$nX)0rZ9KXJddh``Z?N1p5>`P#yQtAC2?2H%qZUHm-wq8n$3PjUWC@n!N1&VP^Noh5nx`wr_I@j3c? ziuhdddU_wecaeB6d2)$(CB1Jm`hhsVUpMa;=l6g5SBN*!`+wqV#QA+_-u2@Az9#QR z@iKZHIfA#4JHwLa_eD6ji}U*yJUG9;pTH~V^(O01>EYKU?GbT)ea*Z}oL~QP;1kpz zz{^*E7FOY>c>YAA^1m(e^d9kM^7vly5pwH(@r>MlK)jY-56XTf&abao4~g^ZUoMpa^s zJc0L<8&lHHuTN$0Im$avNq(8!hnw~fINjyko$j@`~rFQocId4{a0~wWBGS+o&erN9z8EPpWOJncpte1 zA0qcN$tUD7e1_b7QSuAq!As&R^LOT9mDkbJlMr zE)^dn4=)p+C(nN@Zf~vkTcLOdc@7^VH*b*qGI=y4-nfn4AKoNBKyGK^8F~DIc;&Ww zkNKi_JGu9gcuXG8i_el9{}8XS^nUk0;$7s?yW$DC`JQ-2?!s%g)BBB&6t4M((M=we zi4T&e@JaIEW0E&NrT6>g;?3mV#^QbCIedoP-9++L+w1))+$Og+lYAq&4euw9;SqTb zpCAt^q`$11=Gk1_B@aF+K17~wD{kzd_c+^$*OJHZ9&)Q%@)>!&gLvDg^?qX~ai83T z_mbQ28FJ@~(z8hJ!|Qj{*Y& zxs%=>oh;r)9(Ia%k;m{p@&rCi?tVvla`NPKac5_J9{ViuPVx{wNS?zN$g^{#XNBB2 zSKR!JzHR`oCePtr~eG&oFr!i>_r{{--P%7^e}@(5nOo4!9e z+#+|zW&S$y5Z*){!Q04Vc=2_B;{55)r9Y#*{|oVD@(^y;>GQ|%8uAqGkmvALauZ*G z>XX~>K5`cxk^As*@(`Yq$M6O66mIOUA8!t~$n9UszB%MR+#`?S-Q+1eB)1=t{t{hzq;C4F7<4e@63>@D$5a^r3BfZT*nlgIy&eC3z*b@NppSp)Ut!AHe? za(8|4UUCmUNbbW&$pd&o9>QnHBlrS&0=F9UVJ!eIN2|W!)xn z!xC>Nx8Wgq1fL+cwv(P2avQ!v?!&9UVyyWo+$t3Aucq*N@(kWgp2IzI<5MzE7r6=V zBe&oYxdR_358)|!3|}BOwwHN~ee~nC;FaV)+$Im}m&r3*ykS3mU28Y-4)Pp6L>|;hJ|++0ljIS6mOO!*`|I=gyGy@E zp6n^!MV`WA@_cW}Pm&vs_$;{vHxAI}3E&mvA>1Rk_Lcr2@^C-#Me@`YH=6Wyt#61o zlRJlrd*mU!i#&tJ?1xLw9J$pho|8N9vajlMdhkZ_^jp%?Ngf{|K2Gi*C7zOp@SNN{ zTJrS=>hl=KiZ_#6@Ii9-M9D9Z+xP(KvV-(~4{ni%@J@2?Z0QfkefS7@3ZEd);3;_y zpC>oYk#((ReSV``ypG(2H<4TLHgX@{N1nlB^5k4ucaq#XPdp=c;49=Fyyk2Aae0L= z9bNs?KyKiJx;xk}kbEC`2p=NP;Zx*cAU$*B`S--luj_NV7m0i1;T7V8=FKL|@mrM|v8`19&&Naj)cK za&Jt0mfU?%+&q-l{keDxx&MgxAi4LL_$av#PsjuK40#A&AdlcHL2sSHUBc!UHz|hR{!IF zL%f>YIaJ&scU#0;$US%mxpBDU$H<*;iW_bEJXWi?OYR*l9+5jIijR|f@RZ!{ko*F< z3pb9Uc}|jiCAkB)$<31`?~*(4c5?p|$q$eRr;1OIC-9U!gD;ZDr%6xQ(fV-(r;FFH zpDFH=`)7%_lZWt#+&WwGv*f`!;)~=Vy#5%P^FqmYk~`lMA19Cd#HYyd`nKL5kBYaE=kSO;y+`snxrr}esXLbXAH}-l#$)3BuxC9eMOe$v2Uw@Luu^UyKuzN6$*nBzX)k zKS7@-`IF>b@*H2VGemAZC;0{T=f!JJ)cfrP@osYOpW^-G5qy$7{+Hy<4!z&R7xH-Q z_(GnDJbXiX7Rjx5#OqJe`{Q@Td&$EO#8dLICC}j9^} zCq7G_!pl$5*EK#S`4;kcL-B|_*+hJdJcZ}v-lmebJN0$V&BU9?EqFV*4<8}7Dx_zU z+=Z8)s;`^FYsjt5rKg2FfcKM|pOE}CdAgPOJb4bU{f<75xwYgQ$!&NyxwnnvBlc~@ zXUKE-0=Z#HzV0-Ao?tuiCh`d0OYVP4@-ca`z4!`wUM*hl>+5=-7Wc?g_$ayi8Obk` z=e6QZr|bRBuHu8_(H`RCE+*|Sgz9=w@6hI`}*yo)@AC*+AI^OSe%^BBj9w~{-@i4T(-$BXCW-U;H) zxq82Sns_I94j(6v&yc)vp59}gBVIvn!Q08R%O&4Up2PdejZpHl@&Qu6#M$*=mZo)4ZD56Dw|f!F|f z4j&=6ek(omk} z-`CfT;TE~Mh2-nW1Gr0`!8^#EO6dv6BlsY>v8Ci=at}U59>O#79A0yYe!T7{rQacs z;jQH6R+9J0eRv;v3XjRdD(RUdkKl9UIedxS-dcJZf1n>%zMc30x%X-D3HBYutNZkx zphmon+}cUJmpq5hk;gkre$@}D|1;<(_iM$w$U}HPc>PPxKDZG)~ z+C_Roa`SWI!{iP;C--d0S6!;FYkywcCimby#x>23v>)3Y} zZz9j&1LVdYn1|ekPmufYvdi>&!g}ecBG2G9x&1}ScamFQ5+5XwzAQdUp2HW&vj)jm z{8*pU+e^HLJchTEM|(>?B+ni3VRH8?;$@fX>-zhOHjSB0fa!-6vjirQVa=FV5fNkd2EQSLu0gLcEzg ze?+{4JWIq=^57lussX*<*l7JV&_$kXEIv-|Zz8_xYQ4v=5^pCrwiA!Y?H$A`uF-q! z&mm8q?=C)mt)4d>@l}Jm2m6aRk*5cV_p`g=5xISc_#(OQiPvAJuN!xYH?yBAK1gn# zEj~eRo+Ca-9>I<4^>wXo$=8yH=ZUwG8{ZWlAo*!E)x1-k)41`5N*J-c9b*Z?LAIpFG)9e3IPQTYQ#0zz4ILH|p~Q`$@i6s#To)9;O^>w4)hVUGd`Qo36WhtaVoZW4$lFM0u}#!!?7~+@a5(Zz~4LY2;NMd{6g{}d4wG#Cbt*G`^kOyIC%nJBKQ9-J!ba;-XFt#^1MRwA-S`;cuXF_Gx8L^M4rLRex}cp!|Tb7Psq9* zp^|aXiM=__4&e^ z_$+w>FMn8HH{4G8>&Y{C2YK>o$@h?_@G)|CN6Al-d+@5C>+>Y|pmd+y+X?$X?$?SZ zwQH^BZ4~d0cWE-cN4rA^DU%fZLDg{b9Z22g&mdxg9F5yAJy~e!QzAD?jhp#V|v~?9C`BWTjF!% z;Su6BkLx}0G2;E?Uc2}xc?dTr^`88A^pl$>h)|61P%8(vTDz?;ckxJT~6yU2ZbA9(;DA`js)c?6#%kKwcA34D<} zg%`gMq_{sBykbh851%3r;B(|5 zJSUIftDe&LCx%y&C-7SG6khy(mH+KOyoK^Pyo200Q}(}y+=PeZ7JQi8hL4jw@M&@v zo{@X-C2}8L_8WcQ0(cd92)D^2cq4fXZzWIQo#ZJzAkW|fZxJB;4>&Sh06L|n{BM;#|c?9nzkKu#l34D}1g(u`0e1<%SFOVB& z;r5^0gqzd)zFF{UavNSx?!cSLUARZ?!Mn(Pctjq+$H+tY6nO-nBTwNuxp8*+nhjX> zTYVoKxJ4eqJIK9rq$eWJ;A7-Qx8#?}6L|SE`aCJThCDi7db-KY3&i`$U3l?(mWsEl zK75h#$%WEW^E-W>pjW(wJb`zRXYd|!B@f^Zc?54IPv8N$b-DD9kO%M?ax=u7f6(WQ;I-uT6_W2D&*3BF;gyn~ zCePqGxqX%7%|Gh%gz!4@4Bkp^4@gfBc>oW|L-;Ux1Rp1l;nU;^JR?uxOXL~6Y(_uc z99~6kTrJ0Clbi5Hatq!{Zo@mt9e6igisYseFL zGr4)K^mybJyo=n1_mO+>A#xuclPB;+@?cQrG5(|q z!Y9aGcupR{SN&O^Glo}^C-7SG6z-5`@D}nM-a&3ea$G&+COjm!;KSrLe4N~YPm{aw zjNF4Sk^69KR^PV(-b`-ZBFE*CTktM&7v4wi!H39wcuXF^C&@$js=w&-+qcS`E_ntY zBF}G={2aM;yZ8#Z2X~&+*Nx#Fs~nCAkH! zCAZ-YxeIS0_u(DnA-sn?h7XZv@JVuiOpa@jJcid~`tfEDO1^@&Ly})0&mI=9 zdqMB_e<9vP9>CkkL%2^K!6(=!q<@(_`K5UIi~2mlBjUB>3EU&MekJ)S@*okPBM;$a zFX`*1@H%qqQR(r>1Nb1h^O)pE$$fZE9>eSA^?8g*tV`~~yU0CwOdi1}$*m`(zw96S zy3Uj0&E)xS#JkDer^Pe!@VDaT%X+{2jJQi~{!YA?+=D0N_8%l){)*o3%!s#=yMGcN zCeQyYo|1dB;#CWJe>^ANLY~6|a{q6VpCAvP7hfh%;FbT>*ERnx`8skN?vWdr*?@jSluj@VLlDI=2!+Xfxx3DgG0G}ea-j=+P>+2@) zT5|s#$+wf+%i=@iIedmZ`;X)o$aDA#x%FSkH~pVJXSgChN^ZR`zC><*AYS)|-jl%t z@^sb5*951@{q@DIH}#$zUPo@=i{hKeEqEKb4fn|%_y~CfPsuZQPHuio<}X{)=eOZi z6Q#*5^;)wdCF=($m7esdxu@3?Cp*DC; z)8sLHk=)oudW`?*>)P;oa%)@3yW}psgFJ!{lIQR__U)wK{I5Qb^(pac@&KNZTRTX; z>0P}i-BG-aJcIk>IedgXu92Pz@&sPLqOTj-k{>7c>%~{Sr{~?h#aqcuN4%5Vf(PU_ ze1bgriu9!9DcpHqpC{N?@-ex!pLpd5dOq1-yp}wNJLJ{@lJ6kT;63Cye2P5&n)Fnx zc{h#mzt2N<4;61Fw_C(Lat9uh$E}h#)>&uG0k6CIKMViOI!e5QJUd#vhdhUe|JRwiIur7HDUm-WnlDxg1 zzODstB)8$M6s$8VsT>=eckM* z;;rQ2{o=FA?|!q?+?xqA0fBS7f;E3c-2;VkM~{4`{dyT;)CS=h2jah z9f;@TA>66b*UjNAjv<4^5jP8iOGYT#iz()xV4?$Z`>;R z7IGinNgl$-$fMh&XPVp^7M~|~;mhP6y!=!8oIczow{DkypWM7de2_eaC*;AMl3yeb zN5m_(r+MxYcgWql#XHE&pNJ2T2czN%d3cX_PM*W7tMz%@dnMmO9>e>{&HE%jPVU1O z$y0dM4*I%wEIl3MAv`6w?w5Ssr}duT0nAVCjfwY=XYeU<<3Y(Uko$0JM}1xIA>-k-u9a(`O#UF61Z#fQmLxbYdiKYK><0ePN^r{wXU#H(uc9``Te9pvWo=pnaW z5-Q(%U{Tg>B#+<&_ zDZHIL{y*u7$-yq-LSHaCrcr)?@Zq(`X8}CcrB6r}OH)N4$ePfcKH7@Q6Hv zkC7YeO8+9c2e-bU&trT<@^$1Eyoua_w~>2rpWKJ{lBe)-a%YvylaWVoa}Ry~=%bRi z$uoE>xxJp``^h8t7`d^&b?8irj=R zk=q+c-u|LKXR@JqC%OA^@qY3UK1!a#6LMoC>6sz7;0xpqe1+VFn_trB_u$p!KD?eh zfH#we@NV)5K1yzya$GriyotE^Wqr;Z-bn6jCi!;q03MS&n@fI)JotpT)u6AN!9DVL z3(1G%W~KNvc?@5*r`~UGDftF+;kld`6o+!AoBM;#|dGZ;_50U4!;xW1LS@B776Fy7sz$^CE=gi;^xx0(>`{W)x zBoE<}H^~o? z+jZiz;TI&|O&;$d-cO#uBk~lUkQ?=wliY$Ykvs6J1N8X=coTUD zZzGT3z2x>6WuBNkfiI9-Uy^)9lRl5}WpRhSLA-_Bf%lQSdrE$cJlsosp4{GB-2AFO zPYSOmcOA*MlE?5)@&q1`r|@y|96n3#d9^4)W4tj zAbGyO_&mAYgn63vp5UwEZRAO_xKEzJd&!NjNq&&rgpZP2@Pyok&yc(D1#%z0LLS1+ zuj$7d!>h?tcs+RzZzeatF30PU+wg934?a$w!yq!FQ2joVZ^pBD!@SNN^3iBMI z&uM&He1zPEPm!na1#a#&Oc$N^ZhC$t`$5Zo>!29ry^j z3tu94PLO$=7X5hL4)K2S@MQ6vJUCUn?J&K^IYT@lx6c-zA$Q;l^kJc9R;$M6MmH;{hs2z~zeBJr9db$2ci zA0&_Z#LL?By!S)#e)9BE39msvd3u9*H+gWI_#}DsGjY??`@P?bw~$AfxKAFxB;HGI|3f?_kNzt@Pwu}j zzDyp#E5EJJnZVn~J!8`~&(A01`Nral!EN#!-c25DB0Xc|&ZgqVaeBY8 zxp*_VzlHc9dAg-|N}j`Wa_f_lFK^e^b>TJSKD?dW+)8=^atA&@9#%{F6& zB{#Ph?(vy*AJBwGGq^}#)iZ_raaF;xVx07e^Zt@)7Pi}lx){V$b_!zkb zpCWhRbL1X8C->p2PNsc;+vFj@K*8+9*|pKlywKlZTJYe3!fnO z;3;_kpC=FDE95EM^!4M-;5Fpdmt_71avR=39>9CZBX~$2!-vUJ_&9k6Psyz>%bfG% zHhhKLhnuJC`w+kz$WwSbx!EA=c9UE1h}?sZk^Ar|@(?~p9>H_+1itDF{kT$i6}h>m z%x{xh@FsE(-bU`j`^Xb`L~iUQ>yD9|@M&@vo{@X-CGr4XcBZ}$A-sw_hTG%`youb{ zTjp;gH{o66E<7Ul;Irf@yt+%DKi^l@Z6>!H#k5<}P-FlDLCf-OM z!$Wf87|G9)2k`oH^?t*Xd_W$-N61t7GI@5a^jPQV{pNAvP2>*TC->nKG&`?^MZK7wYS#@H+Aw-b8MEM|#@GEx1o^!~4j6_z-yjA0toT8F>m{BG2JvfquNk zX)=Emxdpe$ZFm#84{sw6;9cYiJR(owv*h0CGH1>A^!bxB!~=4-OFUseOWeFj@5#;< zuP1lU5%wZ9 zir0|a@CI@R?vlIkc5)BiP42_{$pd&q9>QnH{R?FN1@ZvCLLS0vzOU~?1n*}5zVxT$ z_7B7xFVTCvKJfwa=ttr+g$?UiF@S1fcP|dc%69tkMy4Sdhs6e>;~~k^7tn4 zS@HyKUaI%IH%q>j+=q9N$C2cR$c(}S8Zk3*Z+`mmcCbx#goy+td z^FHxD@)SNpZrv~WMRFJ3@MFE-AD6sK9>B-Rt)EN2;&Q#mc?5Hk8v+G+++Vg@p1A9o{^hxNZuIK`vZ6dc?h@3Q+OkJ4sRtl-;{N`$Zhx- zc?_Q?HNH!Tdn>(+5=7mwXp_22aTS zgC)OAZn@&-?bHu%BX_@nb;(2cIC*-Av&C`N)$)j(IC*)R}_zbxX zUnKY8tM1g-jp0q?`BBo}O>Q48-cRnpBXSo$M()9<$bI+{xp|DNYmVsi+weAW-;;bF zx$$lBVR8qale@=CzVa@8-4NbJ9vvt7h}=D1e3AVG@rJwg{-i^^gWNqyyq7$Hr|c(7 zewjRhSN}v`*E>b>UF80$;*;dAFJ3XK_vGh^d*uH4=qC^0edHlLBlml-?mhat_66b& zc?$0(PcD>vO72}GZr!W*$Crxx+=|QNPjbVbeFhCp1=cg=WfYQlSlW6TMy{#+V_d~k^8au1bO;X@yap1$9q7$kvxaD zlRIOQA0xMZDQ^5s?>8SqKe_$5cq_RBA0f}-6XeFE^em9O@Kq1$^MvqPa`Or486}UN z7M~)|;B(|TJSR7%rDxSc`aCAwCAXiEd^@=d?;#K1F?kH1Bv0VxxIRyu%DQdj(I3P| z$+JI-&yoi-;$;u({UO{Zx1N=JFS!jLBzNGW3W!+Zt{5kQ2{cqxn zw2$C zPYZbnA7p<^^7G{0+v3h6dVjPmK0==VSG??3dfr$O_t`%XPswxmJh@?1ta-dyo#_1` z+#@&Fk^BI;3!fqn;mhRSy3*r3s;_H)M7)nYg{S24D#=$pruSGM6>lfE*ApKlPvPd{ zdQVU$`D*eI-bQYGO!B?t4m>4KHjw;0c?!2D^?A$7oda>-Xbq4%V4kKFsX z5R~3%=?}ecb?FN1no)$TN61xxcZj+fN?ABk~YFMjpZE$qiHbm&r|d z?XUIY3gJGvwTbkMljrbha&uG3XXG}#VoG1v+D!5u`xfGZl!(DQB zOUbvBd+_f6r|Vw8-l)p8j}IpeiWm-JzzP8>2CNv6LqHA#R0szpLeZdz0jor*8Wk~M zw>tuAzzT!AU_drTsSpJ*V#TN+k&POpTccDAf*Pc1K$M`B9kk*%ch@~|=lQO+uB&P1 z*QftkN#3OC+xK9+MqgpPL2nz6=&Oyl>0{$v`g-Gidg{mX*K0^$V0=u^8=uk_8xMAJ zw?o-@n!e08p*0^nvjbeQdl&UvIoY&#sxjeIk0%_>{iXcy1MoKdJwnzg{6dZ+&Mszu0(#ewy(%y<>eB*I8qH zOi%q}en0)Jn_ptQv77UT@o;zNZR0iigU0&{-F)_^^XCoraK4}MEWKvD_Hs9Wk?{t- zWjvzaWV}ls8ZYHsfAit|KBGOIXN@6sdVeflcnLwe8nn7+pNls+~dyvp4^>y4-Bsh`i^Zdv*Q z<9T}Cct~GtyhJY>uh5qnuhARE8}yaNBYMYpn|_<|E`4acPhV$zNS_%W)3>^J{&t(v zv&MtGyZ!ewo~9R#XX&RI&(mwhLwehIjhW;Q?;8*4j~SoRgI~<=KRDQRwl|)pA7Z>gUt+vXZx~O%#`RYk&(b@_^Yq({hxE0^ zEA+>VH|U$+H-CNG^o;R7eUb4Yy=;6;UuHZw#9iN2#w+v(jrZwO<74{fzntHHaH#7q zGG3uCG2W+FjSuO|jgRS(@hQD$ymFY^&)E2ozTWtlo*KgLDB(^coW@q9mcm-Engp1#C*NUs_%(U%*q&?DnD`YPiMde3-7Ut_#Y z9~C24g=?&u{eWmddeQ3OPw%gA- z;|==eznj0l*=24%W4uA%&v^JAH(xS7rLQpFsJZ#OjF0If<5T*=hv)YhoZ~uGDL%9(YwYg^t+7L= zKjZe9F{iLc(Bs#Gc=y2 zFEO5_SB>ZC%Z-=lk?{(BmGK(=LF0Y;)cBB|`}6$mkiEiPuS1OI=_TVKypr#FJ0|Cn9g_F zpL1R?KBYH|_pfpDJ>%*BX8(!#esHbxobd{Msqy^h-F##`q^~kwq4$h8=o8~@`Uc~D zdit;P`ybOo% zH~;(m^%~MM#;5c}#?#lk{e;Hz^d-hi^s4b1eYx?79vSb_R~aADd&Z~qHOA97xc!ff z=jrQ>m*}Y{=Wn+fyPmQm9Fb-Fy5yx`p5i!@?UrJW#bXOX*_+4n_q3bMqg)qOi%xF{=DHg zT&HNfK|jrSn_e^Cr(a}zOm7(vR=e{Kj5p}(jgRRIH_Y$9^i9_(8Sl~?#`Cwj`J0SK z^aqUx-*WS*f6bq_LJy5k={4iEp6gs=d`MqoJp8tspBZn{b5GCjC;J^Yzr=Whev$Dh zy=%PmUDp{K@6)&Xw>j@^ZoXu^L0@V-qSuYL=_`zP>22eE`fB4tdMem-iw9?{Fj+w^6|yYz&*-Jfs(mcj>1YAJS{ar}T@Ar|)q49~!UG*BOuK3pSnK|CpXPKBX@<9`xOL z%f{36n(>f+oAK-qxPRk$`hv~o_u2lDn=ctp51coQhxC=kOZ1NM3jH?YHTuwagTBsq zM4uUN({r28U#~8`Xgqy4ub1%(eWmdly<@yVzs-0=9~y7d*BS59XU6;Vt+trIUPF4; z_?W(*@hQD%JovG@9hMs}(Iev(`oMUfJ~iIB$MrMMncx4IzRY;`CvLuHeEL)8Ym5g& z=L?=Y-*2yVo;Tj5FE&1;*Nl(pE#vK9xc<<1aG&#a#?$nf@hp9-)cpSQ^sMoazQlO# zm+rhx+WEkEe;eo9 z?>OJ@Zs$BS-ltcM2iv>()y7LN;(3i%=nopN(Wk~6^z2Ua`;6!%6bWPZM^YP=a~ibo&L_wOUBc?IFF1^=_BL8u5SJ@<5_y}()sg-^t|yd zy<|Mt&Gl=>OZ1D3*XS+d5&b6PZF=8$pT5@kkUlX!rf)DlrRR2@za4_zdA*Ex>3!qv zSGxJN#=G>1@jiWn@gY6E%lv-E^o7Q!^n&qVZ?~TljHl@p<5~JS#`E;1@sNIv@e;jj zyh6Xrc#S?X-k?8bJfa8L`P-*W-`;qao-^L3A7Xq+FBu=xuQ49I%H7Trns^oj9^zQK5#p5ASKKVAAl<9&L;_>g{r@iDz(d`dsZ zcu;WHt7$wU;wZ=>uQEQQ_l%F}Ym86nW8*>5U9a`V)AZEK z=WmBBeSz^jJ#RduFE(DHmyK8G%Z%6P4dV^^O5+i|W4ukj&3KnSG~TDLGd`r3bMv>) z^jLR$t}q@R=e%vaL|<*ZMt{uske=Cd{=C8Qt{)n2&>P0nC%E}F#@nxRp4n@@KR(g< zBI8qfXgnyn`6b5F^s4bJeYx>GJu)8BR~awSd&VpDq464ho$&@e{fhb9A)<%I+w^6| z!#B9wp<%p4UunETUu`^nlIyHBKBjNJXnvo;65e0NL;6zV(J5|zx$!Alkxt$oX?Dp z-{U;D&wPJMKg4+OUN>Jdo~AD~o~74~=jkhqhxE4b5`DGt3Vm$6Mo;ZKf4#c&CC2kL zcfG2{Lwd`2iN4Nw@P60Hzk2?>;}1ArYDC1LpTrxzKe= z#B9Uz(<@v*Z#+*g886Xm#%uHy#@qC^@${$Nc~={6&k`F5_+b%y{iH z?!1MA=dah8eva{ArJHXWPt#W!FVTC(YxFh7Bl>#d!4>Yji(WIo&mnz@@$gFS(|GN( z&hIjwZaJSB?_T9Rd&vBG(^orRX1sf?^Oo`9=baCXhhK0W96H~R=sDwKdewOUi>}i) zUc1iu8sphj&S%CW`c{X{@25-88t>EhGhX?U>o<(|=?@wo-r(kQhtHok>^MKfc!j>q zc$eNWUipga42^f`sc`&7Gc3gc~h+jy7WGd`xTF+Qble#HF# z$6s~(Txk7f=QZP%Z#Z9RJiXfa*!r!`3rEhMxAAS~%Z+Dmciu7{-r;<;@ygxKC&v40 zoo_In{e|=NQD#5%g~t2zg7M+VbxtrI-0!?%d`LgXc=Rhb-!$HT(D^mSv%hhEm+{)z z`OJ7}o%5|0&tKotW6rb2yY&5x_aArjMdRVr`Dw=Ue{)_lKK(!E7a6Z?vctyz_v{+) zZ{hqd>(6z*@U`>TtFfo^i;M>+IA3i%{DAY|==sk0I_IJBVEKzT?z3(@`=8EN8qd=+ z8~>F1Sn|!{U+;gmgRJ<*kBsNnInNnSzAk!bJo&olMdQiWMX!qEyr1WJBXOKJ`Fh}e zbX z*Tr?dA&&VP=iB1=W%BiTI^vlBDCY;_IzJT0{HHn3PXqn`ZXbU7(MHGo)toQ8H_wf} zMeM`dvKQ3`#yx{oJeHd@0&#uI?+x`FkyyrhVm*Oum|I6n+>uK>z}jKIj_f%cP)Z{B`X2jlYRLFn%U|XnYxcWc*zE*m&|h zH8FlM=cmR$O`jS69DU;r8UG&cZrtxT((T_z-=wGcc9G2AMb8-j2|a84KDz$BhV%Y` zo;UOB=>_AP;t$0uG@hmxjc4g4<9pGY#y8>Pxo>6}9^@_HnGA-!SzN_x-ub##5+!$^;ww8i78IBx%>lYTCC`RqO~U_T?S{k%9vXY7{5(N8)R~ksi*%8M++uwDauJzlT z4~+M3cRn=U_@48T@jiVjj{RK4{mjI%pJCs1f-U2Nc){=^`+esb;|+S&czCCq&l#`L zL*vtzzW}ETO2)f6=N039dewM4@8+AvONTpe8Bh8h<4M13Jn0XO=R?;Y8}A?Cd}@41 zpBZl)<>oVd&79o+Nk3;i=@*PA{m^*QuNcoB3 zCC&%NL;BEox9sMp#*_UA{5vbT-ID#Mj3@g~8&CFMFrMtcXgt|}*?6-5it%Ls4dcPv z-1Ul#SLkiyHG0Q*pFS|2^hd^%{=|527H?+RX+C3g7N$upjGlBcs|pGjw8`onWve`-AVkn@cD>6v~+&l(@o`SkS6 zd~mKCQ|EB}qtj~0k^VZCKa^AY}yWIrY2$$qNFlk+x=S9sp0@#MUb@#MTMnD#*^EjYdqP{z<8JY85&Ra zGcum+XKXy#&&+so-r$AL-oJP~lj7f_DdXGH)5eq6D;eW^b3SYQ5PD7={}dkc{boh+ z3%F|9q}8a(-lYO zUe5Q7|B5~kzg0RzadaNy{K)u(J`sP3bf)6yJkI%<@h9o2bUYL<{Jl_?PFftDe{nuz zd~?43$cbMroxC_Y&*yx>`1bUoxZYnSadckF`Lgks(W~OxsfnYL=X~AxLG-4$b|P_f zUd#E8xW3(X#W8;h=X=KAN*{>pd57ZYe1P*K;~$|<#P#iVDvr+OoSzxLhMw9c9*P&< zPW0_IEsoA=&S#9@LC=Zn+ihMPo#cJx1>?VCrzoy(wA55PaKZzb}8{dfW!hM3<^S$(x@#J+|+IXAu8RK82XN`Y{ zo-=+oJ#RdDeO56325~rjCT)o9vbh{i^hlalJTJ6I%VTodc}B1 zuNrUA8^$AgWV}sp8_yr)_R}@qr_YRM4|el``>?8KZs*`N&QsP8ah^6F(lf?Ohr0Q! z@#rw;Ipg`mo#%}Y>HM_SXZBeN-F(r^cj+bLeR|FKklrvpr8kX-N4WDw#?wbS=ZE<| zv(J#;HuFPz*ZBA-*XbKizt;J{`1EM!L*x0P^NI1svCad2_!^!g@niaW=PBd;6P>4x z4@=H7#`AA*o;4nv~Tikrvc%NP|KBPB{ zkLfMr!!upKZG24c8K2Vo#)G%J&cJw@J~E!AkB#T)6XPL$DvsB~pXKX}neqRoXEO0n zyzm&p{0;Q1@tf&+alAh#KaDTq6^f(tL(UhC-$O5pqjLZ|RdIBZ*Hty+kFnDbN9Ry> zB5`z**I_N=>)Gjuqw`vJdgACLuiN^@H?T7lN9T3yjK$Fj__|@@@tHU}r?8XS5r6pE z`)g}<(#Ch7XT{Muot?Zm_VWtP7mUA}UKB^?EOyG`=p?T%E5?_wQxiw0#!f>Vop*7* zY5YUgW zxs;ujI66;ozHR((^sYEMm$TCsM`v@sUK|*IE`219&PsMB;^^$m`Kj^U=)p_kp?Kkb zMCY^Yq{Y$MgYy}W=fu(Z96JSZbQZA_db}i#&UNfm#L+pBovO#{;^^GOPE#D6mSU zeh`cYc;g=l^X2z2*W0`tsJQT0warzWH8F6&} z#{FcCZ=i?9x8T1|ipIC5m&LLFr+MD0IL`ZG&ex15|Ne}O@5%X=@qOt%(vm)_2Q?+2TkMrH141!j?ND3bi~m~{+--4&QC)OhQ@o`=g9aE=o4|A z_a!{32;)8f4&tv>FyC5x&&hG4F#nJg4J2~Tjq8E*?rfYKE_V4YkUx|P2wNu ze24QX<9E?B;^;Kl$%&)$Fz55e|3VMN(TUh8iKDX#|NUP!{sMa4_>T03@jd8mttjUL2kOW+xO! z=TgoWjbBMGi=%TrJ5_OXzQFmK@h{UG;^^GSP9%=bcRAlOehbb3Z!`adgh&eAD=O^p-d}zhkE(j?PNXca496-WNyb zPwWiE(YclLBjb0`C*tU=XJ;mk&I6ne7RCqhO76!$(bMAS{EMBeI69l}h(8^_UNF8j zy&#UxbN;$u_e7O^uDN9SVBkB$E~eJYO5tJn$lh!5hGJnp{D`IPY?JtL0JzU<`0v7hAqUwPyI z$4)4Y&i?F_#L;=0^JU{(@clA%<6F@i#llKp{jDLikjyO8UveOes=R(f+Jw6mi=LB|Ax%ePn$=mq~cGAYbNY9F+ zb0Rx=aqQ>&oG%z(LobS>a}qmcaddvk`HIJD;^@4IorX9%>)2^}yd{p#o7w4zqw^>` zU61$0(RnL7LveJTWM^bN;QQSs;^rp?bH z%lVS=L+CZ*N7L&bZ;Io3y^GhYC64QL8ar*{@1S?Z(fI&7eQ|W&&-sDz^XU`g7t*K3 zFQo^2#nE^r&p+q!ylHWq_iD~(j9*L7iDUmCWv3vH&P|*Tjo(TyiKFvzcADbo^f@0H z{|UV`yr^5N6$H(I6T+hx_ z9G!QtGxK!$R*qMo=vpeU5z2k#;CHLbi>1lCvc4Q|jj?QAv=Zv3BFNmYFfSsZ^I&bHE z$@tmyia0vEuu~I9=cAmj8^4U+6h~(vJ1uc^Zs2^|__yd?adh@(r!S7qPdGm?{vdrM zj!uD{i8wm{;{4S3^Rw}9V!g`!lsvB<$xd1vokdwUmoa`QJtvO+oWM>&9Gz1+9~yrb zy(Es#8`-IdqjM4Gs~)e5qf=q0DUQyk*oi#e7Dwl7cDmx|e4d@2#|Pr*oXgHg9Gx53 z8GC#xj?Tx}3G(qlypqS`&Do8ILCWJ9adcL&lM}~&dhFyq9*U#$S$0a|=nU8?d%P-+ z&KKFKi=*=kb{Za!#L>BtowhhSV|F?o?}?+cnw^0-I#YIr9v_RN^F4N^;^-v*pEUD$ zY99Pt&vFIPV6YH!qIP7dT%q-lZ4C(b-~sd=am*I66Pze8u=$dQBXit=Vaaqw@&o zo5r7{x5UwTF*_Y`bhg?pzKB=X_>1U$adfim48_sehw~%j1^PrBoxRwZiKBBI=Yv|Gyk~d?b#}iR?_o(fMzlcWV3wdaz$S6ffM5=)8%Y zv^YAqa6V)Fd-R+*I&WjAAdb#GoDYrvlwL7@FTHB~xAeOBrg8tQ_3=f#n&LR`KT6_eISm`+3bwO(RmT)$HsS}PsP!xu@mecAH*wp+`WwR zDUWBw(K(l$oH+LL3U=}y55>{>C_5!_boODVZ2UlaRUDm9uu~UD=P=GUJRXUoa~V5r zadeJnr{nRSI67CcGZ07TP3#OkJ{CvkI(DYw=)9esna5KH#6$5)9*4~Fr z13P_>55>_LvojV)r^n93<1=w|{=`n|!1y3u$>a2HcG4ctilg%+J9%;J=hy5MJYEz> zXOq9j7x5~KqqBjXipOi>=xoJKLmZu#@c+@99&d@G^I~>7;^-XAPS@joaddWLXDE)& zsqBnAJ`qRfmF&#K(RmL$K_NbfS8_ilo)$-^z)n^ioeS8>dAuNw&Qa_X#nHK%os!2Z z;^@4dotij0H?vdscvBpmQ`u>WqjM)aZI5@w(OJq)UmTrZu`}@aNF1H_u`>}z=Sg;^ z9uE$RhvJnyub$6NS{$A2`0)f8kLSd(pO3Rs5JzWkc0!Mr#L3Mu0j?UNF8HuBF1v_JpPsP!>jh*1&_#j@%Qz6L#9- z=`cYcNj~0X=JC{P;-PpYkJBxmbjKNSbk5~| zvL4TiV?W!o6N;mAIXgvB!*eQ#nvy`2R$7|x~EMuo3j?RVbG(FxDN9V)rbi~oQmYuH0`{L+az|K${ojceW zd3+*{&ZpU#iKFu%JHesxLA;XtG4ZrGIxTjx;^_Q~ot(!D;^-0*vW(&`I-Cu zNp`Zv|3S}-V?XDx6N+O$PjkNL@v=BN%h{=lqw~DI;){6I!i_&Yv(LmE;^)9!bqq8qN6_3}%(fKMn4RLf1VyEfxmN+`A+3AR*lYD$+ z*W-P0biT{ZP#m3OxSx^7C*tVb$<9n1o!7Gy92pz`*{O-6^J#YK9&d`H^AI~Nadf`OPTS*MadaMGr!S7q&Fl<3 zJ`zXg33evp=zN=y$LSgDWW>?AgPp9$^WxagyVwcE(fKhuMUR)o(Rn{RRdIA4V5jEshB!Lsu@i}- z^8`CBk9Wk;`4~Grade)`k2CIjd?=32#q5m5(b<-riSb?OGjVh-XD4-Zd=RhXak?+( z)5Z^@XT{OEik-YT_H#Vv3&u~O7sb)}0y|}KbSj*$7=H)7CXUXR*=dNQ^KQ;JJ>C*W z=j-fr#L@XEJ6(_W#nJgTJ411Fu3%^6@rgJ(-)Cngj?Rtj1job&@k;K;#M9#F+|5o_ z9GyGa$$7jWj?T~6DT<>rVyEQsia0v=vr`jC=Mi@59&d`H^AI~NadiI8PTS*MadaMG zr!S7qj{G?CfyYPU=sdyBL>!&{*qM4fD8@taN}gArVka$*&T;HyJf0KBel~du)%fpo zadeW;69_$C5=UoCb}HiNoWuQ8Jzf__XB&2!;^(C(eQXAj?VGyw8hccfgj)B@pw-hoh9rH#L;;*J426;#nE{y zJ5zCVlF!qac|3JoJQT0war#bnGUDjGo%_jpJTH#@ypNqw9G&FzI*J}Ii=$I#rz(!l zr?{V*#~b44e2kq)9G&FzMp_>4h@*2cJ3Vo9ZsdOY9v_OMb2&R>adiHNor%Y1;^|+#o$s?V6h~)&c19kbh@*2iJ2P=~itGd@#0T+8?#IN_ z;^_R0ovb)Ir?ZpuctISU``Iaqqw_&_N*=F>qw^3uHF0!4$xhwlO>uM{VW%aI&ga-^ zd%P=-&J*nP#nDMVUufX*kvKX}u`>}z=ML^?>ha)p@ld>y=haRA;f~Yd==?7`8IR}0 zv7as3DTt%|$zogLX}ilegyKYu3jcv~EuUD@f1qq8GB zJ&zB>(bc81Zi=&f# zo?*uLXW7Y#V?U{Xq8h*7MjV}+I3IevB#zED>{P_jxrLpo$Lr$g?8Ht}9G!2m6B++L zy)BN;?(B5M(OJX!p2r8`=qzGqB#zE~?2J7=6-Ot}PH=L35U=F%_%J&u6xgYYqq7_58^&KwkHpbAn4Pvb zI*T~pF@6BOCyvgc>aYEs2NXl{`*g%T7id zop*CSYy1QByg2rAEIXk%I_Gn~X#7HYSsb0$u~QXCX9eeL#{Y}n5J%??>_p<|T+R8G z$2;QaoWf2|9G%az(>H!2eJGC3sqBo!(fJnVC&rV{vz>{fb2>YzQ{sboC6Cj)*-0B; zL(ht%a~3;!aqQau~QRAX9YWTk2l59xsIKdI69ZJ(>8t`y(^B+_3ZS;(Yc-T z1LHrXkHpdWGCLD-bROpX)c9ZM!JFctcqPw=H?dO?N9P6mZyXCk;~9EM9Q*kiI~8$s zcISN6<8^U#R_O8qw`&My5i^*+39(FAdb$R?2N?Gc@sNhk59$XxtpD! z93R9hc^sX|PRipMaddvhPEH*Ac@H~zkB8#u+|N!)9GyBlWsg_I(RqlSx;Q!)veWQ* zB#zD_?6k$vxs;ub$9v-FJi*RD9G$D!8G3vyj?Po;OvTYz#m>y*sZ-;jcqNaoO*XjW zj5s>0*~uEejh+|Bep2j&;^_R8^F`wi(97cJY{O1f9GyRMzGnPy^oBS(JFydqqw{ah zw~RmkfcQ7#)e%Q$cXoQ>=)9QoedD{+hvMigVrMLl&Z{^-G5#9*OdOs4*-5=QK8RQH zI6a2*Y2zo;v*PF+#!g-w`*|DZ3&zi;7sb&zhMlrFIv?hI#rTEvnm9Tob{gX7T*mpP z@z2p);^>^pPDdP_8#v!J{tbFx9Gx@S8H%HG2j@q|@1ak`(K(x)nK(MX}18!d7Se(YU1b|#reAN zx6+&9=zNl$mN+`+bG~gnqIbp7xs;v0I6BGK3mABOB#zD%>`cVb`6|yl^>}bvJQT0w zdG$(m(&FfRot=!wbK=;~RqPbR(fKAjp~p+&=(O3Xh@+E#J(RrAip2r8`=zNErkvKZ**%^C$Dvr+ouoJvBK8RQHcnk{eIOXw-I67X?F4+55>{BkDZb@I(xBG_IOnsoiRIgadZw~r{VEP9GyqmX^W$CBs(3C_r%dz z&(1&`o#WUUdVDO7&eQBn#nCyLotei|r^iF_N*<@Ff4Sp~I67r^vL4TiV?W!n6N;mA z7CS|cm&MUpz)n>hoe#59^LRrXojurz#L@W}J1viQ#L>yK(-TMM3U>M)ABv-MFgs&$ zbiTyS#N#t@bQZIddRu%DujFz19d^S*v}ev3LY@>vDd4!#&@jugB;^-`6rz4Kedd_z}-WNybTy}=y=xljVd=ama@vZ3-adaB& z%*4@I!1=eb($+J`PctsqYYuTxZ zqw^Ye>K<>3qtjuhC63M!?6f`J6-Vb5cKYJz9M8_c<0El&ZewR6j!uc4smFse;-PpY z&#OOVCoPUnnVpQsbK=;~kez}!I%l&Jdb}i#&ac?1h@*2JJ5`U@#nD;EPE#D6i`j`h z-WEsaFYI*1(P^>M^Y}mN9UL5;5kDY?Yi{j|C*eQ#na~V4o zkJrS}`64?FadcL()AV>t9G#ok>4>9~e7&l!$NS>w+{(^S9G(B=enuXjh@;bIXC{u$ zuhncCzB=JkCze;{|ba*0NI+M`r^&C68Cc(fJKKHF0#F`T~|>j??1kl-bF6JSUF*q}eHmqqCHq(Bma>barB=B96|x*{OQGE{@JZcADboEN3V3 zcv~Euz1iuCqjNbsJ>yr?2jb}L!_G(?o$EM1_V`pBodehj&WaD>l{_B5$xh1S8F6$D zVJ9b!{rrHPyvIXvbdF@FB#zF5?36uT6-Vb-cIx8j{GFYK$0KocO6;`7(b@8l_#$2% zkN3pUIhmcQI6B+0Gc&#uJype7o_&11k)4b^kPU>CpLA;X3SMqi1(jL!>qw{Wd^5WRf_qd;e$BW|VyqBG_I6D8!PQ~Lj zadbYwPD31>2iR$Pyd{p#x$Jbr(Mi7UUf1J&adggSXDE)&6Wq_p;}daoKFZEa9G$1x z3Emwa#4EWU6Hkkya{)V9adfsj6n{GY{?r~Xh@Bxot!xK zv*}@|#;>D29*U#$9d=6M=xonU+2d7lbiT(JIQH`-I|Yvy#nJf-J7sZnQisPE z@v3;dCXUWu*=dNQvw)qZ$6Mm)JjqT+9G!jG>3X~`j?O>W8H%HGG&>`YPsGuAnw^H7$>SAqbe_jfO&p!i zu~YYWQyiVG*=dQR^L2LG9`A~yvn@M)addvf&cNd%addWIXCjWy1MEya9@OHYcqPxP zJF$}%N9WJ%WIUb|$9{HZry!2b)9i#EFNveG8#@(obkbpb5wEJp>*DC_!A?^gorPh1 z5wFPOZEgo1Kw3I>(0bMZCrypNgZiFFV2eH~z7WN9epY zbjK-=XT;GtfSsH;I`3sC@9|I^orBpaiKFwM?36uT6-VbVcIx8jT+U9zQzN3zov zM`sl~9gp|K(K(u(fjBz1vNQDfSR9?>*qMr>b2mFPkEcEm55+5aoW7o&j5s*w0DqgyQJ@J&Z5nRrGjS9Gy3^Qx!*N%Og;U{~yWY4RLhd%uXbZ&d%(#Jl+vU z=X7>@;^^$nPT%80adggPXDp7+;p|L2J`+dho$RDO7$3xIllTWZC$f|Fcvc*pce9fh zN9Rm-3LYB$ovz3G;^>^u z&QKhko7fq7d?Jp{N76adbYxPEj14 zKd@8sctsqYOW3K2qw^1T>K<>3qjM=cEpc?VIWoS8SKH%VadbYzPG20I96JM#kHpcr zlAVb-I)|_`^?2~1cqm@DAJMs*owPVQuVW|U@tin1*RoR(N9S$qgdQ)6qw_^}D&puQ zU!S__@wzxV*R#_UN9SVhC-Qh(9G$PQ(-lYOOYHPKJ`hLeW_Cv6=zNczvGJeKr{d_` z!cP1IvT@;lMCT#Sr;I;N&xoUQD?2%Hbe?-ud=am_$3t;+zQayQ9Gwh1Wsg_I(fJ-b zb#Zj|V5i~nNF1Fz*=dWTvmZMh3E;^_R4oq;$yZ{+;Y<707je$38P9G!QvGxK=r z!|_nOlE>*!*vW{aa~?ZckLSg)pP#c6ilcK0J4KI|#nHKsovJuG*RWIbctaeWU$GO3 zqjL*8EsuA^(fJKKJ#lpIVyEx%p*T9fV`nUm&b{nRJU$ag=MU_p>hVFmlE>*fcG4ct zilg%=J9%;J=U?m;JYEz>=P&G(#nE}u;`kz76_3}%(fKPo4RLgmuan;NcuO3eC)w$U zqjNC#)Ae{?9G!o#GZaVX6m~`)pNOOLG&?hKbk1ZaI4?ekS8_jofSwjdXVXnE5d>Lr zbS~q3&f^7fbe_XbQ5>Bwuv0SLrB}q!c^*48adhtDeBI+sadft3rzMWgFW6~&yep2* zcI@=U(RrAifyYPU=w#TLh@=eY& z*_oZt<0Wx)Ud~QM9G&Fr)K@)T7e{9iJ56zPj^chI<8Pw3#nIV^ovt`KXLG)1{5<+V z9GwH%8HuCwDbA0LUrV2gqjM-b!AIhQcqNa=F6UFm@1$qM(K(8poH+J#Kj-tt|3nYP z(K(i#k~lh>9UWi9tL*WrI65b?Qx`{P2X-1BkHpbAnVq&cIxlCZ`cYcIgy>2$5YGWp?D>a)3>pc5l82AcCsGNi(@};XD1X#=Y#ANJzf?^ z=PY)r;^ObOWypqS=ee|^PztXef*yn$6pLucYbL(SJjX!_c_%8IKI65C?r!0<6@_hm-#t&ns zCXP;%orX9%XK=o0{Jr#!@sH5E#*^<8Ff@Jz=SRlBNS_)18a;kT&Bm47{&fSU1talUT+IYqa>mhl(T+r~5WzVTh@1LLovPmCW*pBg`&p8n7I z+wD|(#(4651#;qeJNXRXP7309J9#fVp~p+&=v={0MI4>;*r|HFE{;x%ou)WC4R#{q zm(ttf=zN}?t~fe3alU8#4*EbGog3I0iKDZI^JC+`p-;up`5HSxBR+^%@^=0x=TnW1 z{EYvDo)JgqTkPb-v7c>^jW6PrZ*2VOna<1Tp*T9#0T-(B>sWU&g`T;o)t$Y%}!n%ojuqoc)Tc%&UWmS#nCyEor=e6;^@4D zorX9%$FbA&cuO3eh3s_1(K(5ouE+c0=)97hp*T8kW@qH_i8wk3urm`!=N;?>7sdzi zO76$R)8gnH#!gloo#gv@)EM^qw@)N>K<>3qw_{~ zTH@$j&Q9CoU2$|yXQwZY&Nb`|JU$Xf=bh|K#L>BdovFuzi{hbp;eJHtz3imL(Yb}4 zjK_20=$y+=K^&di*$F*f5=ZBw>{P_j8L(6JcwHQwPq5PzN9SI4B9FJl(YchJt~ffs zVW;QufjBx>vNIA#=Mi?s9-oS%b1gf;$K!)|C6CAT?4&%N5l82Gc5>p_&%fEpdps0J z=Vo?F;^;i@`1m4TWsg_I(YckKx;Q#7VyEHpNF1H-vC|euC(BO9<2`Y7e#p*19GzFN zGxYda9G#!AGZjbY0Cr{`PkkaDidXVDy^o!YI65IaS&!$%v7ZOn3B}Plj-8^%%i`#a z*{O=7vxJ?R#~b44{GOdi9G%nIX?eUOj?Sa(^u*DrveWnYP#m4d*%^zY^8t1y9-oP$ zv!0#QC*y;7C6CkP?4&)O6-VbOcJkub&nMU^c)Tc%&eQCa#nFk_sd&65j?QMA;hMz% zjuc1dYId3)Z;7LmVy7dH&MJ1g9`B2z^8$8;;^^GW&dB2vadft2XC{tLkDZ_yAH*xU z9}`cDqw`{Rvf}96$xhDW1#xs1uu~LAXAL_gk5|Oe*_EA|I6C*SQ}=jN9GyMbX^EpV zW~c4(t~ffcV5cvR&ZF!MJU$XfC(q7A9G&&-Og$c491q1Sd0yS0owPVQPqUNpcupMq zIhdV-I6A2l;){5N9xsWbb2vK{adft2r|R*#I68~jX^Nw>fSt(WZEyKGxqpY9G#Qdi9c{_<4PWn2eXs%ct#wZGCMhO>}N4Md5?$U=)9Gk zk~liAXQ%A(syI4lvQrmFr_4^nQzXR*^3N9Rm-Iv($dqqB^ifjBzL*cp0!ERN3m z*_n!?b0Ir3kEcEr55+5aoSw^0MjV~1*~xl5FOL0ugq=_vov*V~^mthuod!EqadeXJ zKUed3LmZutvlEG<^IPtx9ErgM<@AydtKw7Wv4HW&Q0tL#nHK$^CRPT&?n;Pe2tx%I6C)pKKOKe z5U=F<_K)#y8N5#y5Mt>z0gfPp^n$pSN(IHF50oWt^`YKY-p8N9T5STH@#& z!}+%H@pI@CadeJjXC{u$e{eqj1dxp@dEWRWJuQyTN$h0B(Yc)SIpbfV7sSzd zGdo3bbb6dG8UG=@B96}6*{O-6^IOi>J>C>YXBj&!adiI5PTTmu>0NPj&S9r7j?N2C ziZ9|d@c2j^o#pII#L-E<58~A0!GGZ_&p!WrlAW|TI^jth$AXN@>yEc@I00$J^rQe3hN9I64=x)ARU19G%tdjKtBo zik-2?r{d^*mz`i`d=RhX@pvOUDUWBw(fJ>Ca^l#}?d;?|9*U!L4?87sbbiWC+2d7l zbna!RE{@Ja>@++ciKFuXJ8f}v{>)Ct<2`Y79%g4Cj?M;lh8`b_qw^$+DBWGCqh` z@;E(ywI66;pzG8f{CGl^@t0s=lKI}Ba z(b_~azB2Mo)$;vSa!1F=zNUxIgb~Oui$*i_!abuIL><_&s!76d2ir+-FWhSNt@#6 zoWf2^9Gx}nw2hDHU2$~Y!cJctoxgK_VEnnK#J?G@kvKYMurm=yXD7~2Jsz}Bd-iqC zS?r|6(K(!*jK_20*w1^}DTt%|$zo#pH_#nHKzoyg;D zada+Zrz?)mciHKAd?1d_CG3pE(HXNd_V`pBoy*w?u8I%hl|1gYc%wT`c|0SIPK%wK zIQFv_J9&?X;^=&yosu{@C$dxacvT#o>)EM`qqCfyhQ}lE|5w_*K)Y4dX#fv>(6prz z5g|O(h$wN8t{{)OFd#u*K}912V-S%PXbl1-v<0HPf-o3f5(kkCFfzUJv@QyfgZf8zc963K>PA|d-;>fw1IU{l8{Ej)}2#;Ukid@6_Mb7=qNs1$9(@(jD zYpDp&h$H7A=48c@vm0}A5nd2SPLDYyapZiKIpqkiiX-Q7=G4WJa}IMF5#AC<&Qr|k zh$H7l<^&Pm6GzSq%o&Iy=cmjWM)+79Ij=A$ex+M+EqtB+l{twBPl+SvHRfc*F`g|8 zNOk`{Cc<;#$a#Y~1##r;&75L{m&K8@!G<^z_xCh$bbT8r?8ICA35X^A7}5{{=G z;ej}EHfByw965I}ryt=%apY{qoUu4^o?}kzD!1ZVcpgJfh$H76%t?tO=TFQ@NBERD za<*koP8>P&4s#3F@)2GXN6z-lDT^a#YvxoUye5vE4>G4Aj+`Bt(=@&>y)BNM-Ix=I zBWE$|yT+H&`{Kyin>j;qA)iSVpAa?W5*UK}~wF{cpWC2{0bnNtx*PWU~q)d;VPBj+6EG{up#KgZLG@Qyfg z&SOqj965(Drx)P^apauOoRK(kPGrtF!s9Dlk!#`W@gn9V#gTIsb5aqW5yyBgVNO;Y zITtb~7vTkQh_db7I%H71zS^7ZfjQX-&x<4HVdfOYk@FYk zlp?$$j+{rBQxiwdf+O6*wR(g%#gX$UbK2s_c^7j!5#AL?&ST8!izDX)%o#-ZNE|tj zGbeVfTX7BN5jlG>Cm!KRapXL~oU}M{^32IZcvc)azhX{a9684@rx4*KapVk`QxQkb z@yw}4cwHPh&oQSdj-1n((=vWGy=(kDde8XR=mT-|`zre#iO+N%ey{e}_|43TuX07M zg|ElgnUfSp&VR8!72z3ij3+h+iSF;x;>h_Cb8^O?q!+}IGnY9fapb(j`m*sq(W~Of z*@QWDapY|9S+{Vl5#cRyQO8k3c6aod3`h;>bCaIVo}EJk6Z6@z>~6 z;>am7Cnt`ac}Kd1YkA`v(~IKBIfgl9apY{u`ik*)(QD$!Ie|G1apb(8^-bfu&;#Rp z)4RqGq7RK9MjshpLQh=h2H{$GUY667#?Plu8DB}y8oz^HH2yHXWc(R=&G_r|y73vs z$*^Nham@26oaeSU=6NI5cZ_dE?}{VmEavpZk+Uu92N6CJN6vZ7iM8B{YvDZaT%4@N z;t`${N6sb8NsD7V`!XjJ;aPFyG?NoiQh2U?akNetVMo3 zVSHnHN*p<};|c(!EyRD|cmk+Xm~1##r;!JJ}*m&K8@8FQ-Q$SE?X7U2zX zg*DISp~-EM-nJ z!rS7=IgmMlIC3s$PB+4b#{ZM`qX$TgK}+Pd@en9liwcBXM!F# zo}{OZznh*hzCAr}d{=tG_=o5f;|I{I#t))5jUPg98UGBuYkV=i7vUr0$FqJM;qjZN z=W~X8dMK}xr1(td%b1gj@QgTe3e3rhBj;4+472f}<_yF&C;n}}FYK^c(>ZBz%vIbZ^if=3RO>xw}!1|W>cjirxClJT6rEc}}KM=?C zC%8T`-sXC&?K6>qey?V~De)mTuuX~UdC80aQs%iN{-Ru0Rq?grHSu%g`l*Xw{+4hw z?sKE~-SeltDZYv1w8XEH`EQGFICnayBYv9X1mai7dFhHjAmizYua)`ii~nw;>3#>| z-;;3;#b2B=T_3;2KgW4oBI8Mj|3dmrif<#=c}n~*GM=>fHzg+{{uLR|lz2<#p&)*f z)ECA7UHUDFcckC4`0J8W5&sA2w<ee{&^HS~<}@cYHH#vf;W-uTn>qVebGW#g~WtH%FIuN(gx zy=i>@=l$`wjc-B^jBicv8UFx%V0=gV$oMYw*lp|1|HT|v&Mf*&l~?ey=eRmdfE7lIhjbBF}8NZP} zHvVn8`y#MO3*RrkvD~l6jeq=f?+N4K_ZKFOKg67r@t5dn<8NKz^E1YGqE8wB7kbwC z3VP1?1@ye})%1e#>*z(}kI_rUpQo3NZ*sCfu8Q%!=vCuO=r!XP)9c2sq&JM;MsFGq zzh|yxe9kF;oNeO^=^f(-(gWj1(7VR3q4$h$cdGBVZ~OrI!1$5$q4CS;BjY#G$Ht$e z$G+qH53m0@6~7)gzAHUp{BU~Gc!i!azJ{JQzTy<$Z^rn2^eN*jnUgjC66CrtyEK zw~U`nZyR4l?-&p7hk@~XSl>1N9KC0J?rDCUedF8G2gVPi4~?Hh9~r-#J~n=J&<5 zejtwehghGy%dNPEQD}Wi9QBWd;}_TZia6@S@42ap?;`)5*c3h2YIVIyK)63#|ymfKpoX+}& zxE^m?9OKDzy(f;GCCnKczndPr+ZDNndC12@- zNBv(|pB7(de#B8f>r9`O7uWi-IO;cMeMS6N^83JsIO@asZ;I>ucf@gQiD1*ofcoM% zFLln#(0GgMV{!C*G3O!q-AUYJ-r$>a{3-Ew%j-8Qj{5L?<;3-TmBdlM74ysD=gR%0 zCXVCH@_1X~INli7JH{(q?~0?}E6>1A?tUPS{LBM>K1arz4|-4DGuiFU`Pny|A91}u zWW~|%M_Hc}|HR|~d~Qh`^@p&&EUv#NuZd4$xZV;+&U?@F`Ca3mruW44dK-!(zs>dd zy*>|fhWwqGlQw=gJtMC3lNU$M{j4vD-+>KmWpRur!S%X0%1>ub+j#i>TOIM3{QkTr zj{FAKN8-r8i1~@Yt+*D>!;k36V8Rn$Aiqz}h$DZ@+`KsQuVzkB9DM{o^w(j@c=ciL z72^YX)p+U=U*8tTcnVw(#4(;*IG&;L^jU7BYolQDFgad*y(jLQcH}H%eNtRs?-_9% zZ~hm4oOyAKvlqC9YenNJu9wBp?+o_aFdlxNSyNo!j{bx{D|Ky z_s_)ruE@0w+z;wM7tW8k{+%l$j(uWJaDK!wKUMZuG@jymSseZD7S50HW%Q=_?(%*b zh$H7T)_2AAdKikM{v6hi#PxcJf6o=UhGU%^7weMZGu*Z|KX0eSk$(X5bH=|;&x`9g z%i_qniuDz7y${#LG0qIv+u}2wU(B4o@qj)M*XtzqeYdk~;dSyL>*L~S`COM0$9Mwf zX2mg{Ynf9r{wTdHewUp0x;SzkXMICl=d&Y@`e#@li0gUpi(~wGu8+l$b1QR_54aWA z!uk0lJteN6)3V~o`5)Hj#I?RCJ{uizy(*5JmzmQtzOag&+;u9h_nDqJa(1nv+WlQ! zTq-e<-}2c2wDrl4?}UxMRVZa zU*cW2;u;LcTV!3*c%PmYN55~ax`k^wzm@c z$op>~j{4QC?~3bvekhLm`&mB{*ZGe>OJ74jobG>0%7DraF z)}NP(@#6n@?}#Hm{9egGT#suYj{05Cb_>^r;(x{lw)hYI6O0ACC+id9dcR7Gnq}V9&6&L-{l;)aIJ1UOK%!KfZj5GFuh~^FnVCTNbeb6Lhl1E@W(ksTVq1TMxOs^YXP49^7^)M3G>tQUe*F)mR)ANt(A>esR zisRf2w(<9wl<^TgFOHl6*UREFop154ZsA&0{3*Ggcg4|f>^;8Up7Az)EUx*n9(MNk z@|Wdxkrqe&6&z1STt8Rj#ZiAP>kHy5H$+dqmBld+39i@0k+TDHI>v9N2jV)OfjDxe zSU(g;zqy~d1=^$j0dom&vMwdAIXUBxF+VSU;(VWpWmz0KPqDrte&yWh`novAli_+> z961Ltr*Hg4`aoRsV?6Hge)1aY%wU-^=>G_|Xg82DY&{>esM7_ETSgdCj-1VT z9tYwl%yJvpQjhy5m$8b6I*GJXNQVm$m_)vEDt zvc7KoHhRPOgY=g1C+KbCFVF+yBYM~P9Gz%N2gV|n)qJx+y=ImIO^YEeOp}rzR(j#{k)5OP+$Byd3}w= zQNIQ2W54qIVcvB7DRI>A!uqth{(dzlj{3b>pBLBbvm}o5JK}k*i6iHH&O^(1p80KY z{k+!|M}D2_LviGPo%v(&b>`tISL7Pz2S2fo^7DrAD!nMKIW=+3sT&V-y5gEM64#uu z@h~UzGzRU*t~mv9%_$lWa~k5B6Nqb0*Lau{8%%~XnM=({i)&8Cc$iZX*PObz<}{3l zIoW4olZIMcC*5cLdQlwL$pyUL%HsRSeJz$PabzVv=C6~s@#aC^`{J6DVE@R_oTTwE zry!1THaX6sxW4YH;;6rl^)+#Q9W})bCbIRoS2_vQ}8KQHgUWASxr2MV^s@LRGXE9vpUw0cSXRZ)l1M%1kenN1%j}VWGzbNyZ5Wi8zlN8@la#G?rzu|S57TWh9`Q5=`gf{VSE#f#E!TO7yMJIuenI>zgVdmoA;|DDVqiR=9;!EqrQ_3vSQQe5u? zQ{t%Kp7mLAtuKhrcJ)1uqau!+wY(oTjPJz!rua<@+zxDkICA!5eOFxT`{J|ZI#0di z12GTy$t?EsnH66p=cO!;`a0`t#+&q(_@C$azOWpLBd5*!vGMv6Kc4i^?~7U-?=4^P z>ltx<|H_M_K45)8TtAnV#c{q8T(65G=K|(*j6X;Z#Pxa@h$H7I)(^!umh&6?wJUNB z$BXeaS(g$=&gIO>ichXLt{25o{~Okq#ZQv^LrWZemzVnaZyRsZhvLXz%lwhJ&O_oi zuE@3UJihG`zn&D=`iwY^EBCUm&x@nqE0|Lh-(!}q#j+uezVl^&TutM#lf3uEk$(g8 z2jY6Y#W=3;xW3E!xVYA*#Bp2!bF<>;_rmbFjEBct5EOIN8N9?fU!X3@( zu5Yd%y?n)vSVPF-(veG+EjnQ_R~dsX$1Xi~#gU7aEnD;jZd>AH9Y8TsT(_}>M=f6- zTX^(|C!DZ&sTs#OQQiCOCBEM^8)NHqGu_AD z=Qgdc|JdwpCp#r~^82EHTz|HIY(@_sbU)fYw$hLA)vv1hT1Ysm5A(U*KfB`=lN}!o z3ny#tKFr6E59a=x(8Gt+PJaKGT+`SV?jJrbcIL9ekGtXSvDAnB{;mDjo!RjC!@{C_ zvcCCCPWkyOALvJl`NO{9{^9vs;S3d+TW!5_ab>vXPrrZemf^TVIMF>>U;nkU-#aN8 zV54j3f1dlX{h#IRE$-*<`aj?IAJ)5)NekD*$1gfvU;m}^eE;EbqJO-tg!_eFceb(n zvHkb|kNsch_FZ59)%Em`<7|ENKVbj;mtBE0JO5X?ZR_j5!Twt(O`m`4Yx}>M zW{*EOdFx59!I6`PHy5`5+uRoPka@GhKMD6g+8Nk{2oc}-#Nzbv64n|@e*tZRki`H1 diff --git a/src/crypto/internal/boring/syso/goboringcrypto_linux_arm64.syso b/src/crypto/internal/boring/syso/goboringcrypto_linux_arm64.syso index 9659aa1a5e4a48329a41738a452c92021a34469c..143a47a0aa53c797ebff77643f603cc06772cb8c 100644 GIT binary patch literal 2105896 zcmeFa3wTx4o%g@?IRwrn2?>N-L_@$!a)MYD1zMe)fZA}vMQN(7@BD|TooPZ4rPGTy zngr}j$O(3WbnIZK0krSroEWPubc!=Apq;+q1Zh)R-?_Z=5YV~5#pMCaTYp=c5@BaI(-&(uo<|VhdEXyQ+mib3Bbd|hoOu_US=PrWw zzo40FrkuO?;hzs7@F4^~gusUo_z(ggLf}IPd z^<8fScdO1(?*EP3Y|*)ke&kdB9@n%*e;3kzNko0w>t6ZF`;Fz+4;af|yw6zf%l^&B z5*{%YjV*O7fic6!((&7kB_O;M8`s)x#*{a^#;mQd&+fJPE>k{bXpDi;@OAI&HoitJ zTQ$LzBY4g*wG)!~6-)=+?#{ChkByw&U^Sh&Z(QV^&w3*LE4`7^claWwmiujbDK=x) z&d4<7#m2q1>oT2PYqu{l<)v2biZ9*`UAgn3m2a5co=bxfUv_D%D0^`%v?+aaHAkuC ziB(zNm@nJMeSfSpzcf~rzc}W(cF?_q|1jS~-r5^~9bX>y2$XyYNuxh}qosOSAbW{IBN!N&Yu_Gh!aEFLu1h9f^6z z#|pjvSl0&AbZnL@a`LLQNbeP6B46k?Te`1U7>O4xiX5AFbEI&f=8%Wy3y-)rs~wN! zjfS|_^Rb&EA?`JDFJ$?nt=y|t9V|1 z2XBAt;O&dx&2wqVAC+$AJ9INubaS^A5zTl9htrIIFhMh!<9;`q>3%ywGmp4(!p$ys z-|s>@q8ZVSXvn4=cW}XIv?F?{v?klMBbpKIB@)5GITQ}0!aB866NL%}#tLxJUqhWLN% zikl-v6_ z>OODmiF@3UzaAW%QV;#V@}HuA({vqrMzn9t-W$8d)!x{B#UGCbL-0T$G}r(Sc%i}G zE38P@xV<-4j9q_&#}gdzB0~$2oxmgJ&GyC$keQN~UQ7Qyu|niyA@VVRT=XIr7jxeS z9=jKrrqJ1nLp?<%(l9nSP;|EBP&G1e_Sr>;B#R`^mU6E!%^z#y{v71rL1bUGH$ApI zEd%+x=+Ntqe9Zb4a?P6=J8`W$(uQ0-=FN(|?e;`_u5v|QFG@rHjfq_C(DuK&CWY0u zXxo;DwtP#-#AEYriVVrcn{Bx$nW+9qE{dil8(-$XaM{Lx;W=V?qZx0moS%92rbC{k zIiC=Y4_QbJh4?)M(9e) z3VF7T=L&hoZu1BCABs_@?Z#U-FD~)MS}ad2z`c&Tj>kjXYur~F6FeJA;G2EuvAXnF zXkU7){&Evp4bEy^dv9#4^T+D<`D48^O{Burd_x!aDqPUe<>)`)8?s?ua;TBBKMno@ zuJ;00!A5##P8w}`JuzGVpmz!>mktsvj?Z$VUtG2h3VXe=lUJa7t{M}0<#a-h?776) zG9(FS!B_f6ddG${|9d`mb42<`FmB_%t%JBP`05>kwP5@V_cD+n8-aBudZsZDjM#8S zUc~<-7|BG>v>;1>b8HUftAX!9%6jW!kI$iOfA-RtX9tgJ zJ2juUuw8X2cJOF+RrKuOl)~48yFIn0DKNt{6{eY{vgd0eocsLNCH?7^8CbfzCX!Ki zN&oX{WwFdOGw`#tC9&oEY9d#^VK%SexYCsoTjt7)Ri|ag8q+4k##?#)Sza>`{7OwE zRAQR4$1IOsGv?M z&!=tXIJ0x*7}JL@QC^Vc3g=lS?oBu4o^)5(Q)im;EGxdzZ_2x|JACP$a8Z^gyx4d; zN-0~FKLi(z>E7(J*kjpCVr|I3gB-2U#{p>U-s}wSXU1Cd%VG!e={xeUk>g%u>0_4e zBh!$J2lCTn2RXM{{?I`yJ=BJbJjiiBa`Go!SC?eO8nGYStgKjLNoMRgGI%vII72x3 zis|3}?qIq1Bk=L;l1RqUlqc&E)dLBGfxT9p7v#5&*B>kGLY90(V6CDebS>?1lEs zUyWPdi`*`G&AKm+-?#pk=Dt@s#{6pBeSf~`@RENR^T>T6uj%_K=U-31Y)#fBm#_Kt z^cl;tE}5~ckLzET-?Ti9dt-0EY57OSK5*X^mt3*te@?%A&9}xpa97!U%Mu2Y{h-wn*I;edv4if);DjsJgx4Al6MBn z^DI|6)?$DqHE4Es9i5R++9T%jN&ro9wd6OU!`iTm4w* z^y4MY^|_P6Z{zc?LbrOY;K1oS7Gjgp2m0ep3l0>*gRAD0M5^eI*Q;yF=#MueS++1z zMSr~6P8t32PD++7id4}b?=+{3{&+4HocuBM=hX5=$nPK7{(W#vux(*_Nn6*rAGUR0 z5sVxiZ?*MaRf4UtFfu2tH1>MgqR4&l*+F({5<&t;oyl znB=E)@lU*^@Y&*+bgcL+YpgG}!kQ5C;pcTDI|>~>%S0wF_brXdCQ{wrD@1oc5R%YmC>xxV6xp?ZbA8~x;;+$n0ra!gpY4~r$^jT{jg%>_E z{n9n}z-#yD43F8@@RnT;&pxVp@KB=uP0Ll!ZEA1aZ_G|#9rS^GMdx&yplSLKcx8~7 zOHxmsPKn)2o@#}$i=(CRO&2mvahv_T95FY!A`@y&qi^X`=lqj$7$N0W$A9;2>m; zkL|Utj;-bV6VA3h4IaakRfG)vpBTMwrWI+ivSX_*cSWjax+8ye%4}J^aA9N@{FZEg zZD>&>!{v=(|HOi{uXc;jk1Mi$R5aiz!Jpxz4VTuu8c zsI!eatKmKA_Eec*o~?HJ>VhR|KcB;Z6+G&G=nqIM@4k7C zRytpCS)Hl$QU^_BrqImG^u5%fn}g8Ja#wyV9hw=U7wbHF`NfIBU4H{!PZQe|y@*a8 z1797;F40FA98}Y0HS`e%uGQE$)zCv2o+5@6s|LqmcnaS*CcHJkPm9GT;9?{EBz{fE z)`jO{r>=Cf^X$X_6gl(RM7*|tr3*XSjjkMn?L47Ve101K@4}8g;&w;hc8@^@xUs!m z(Pd``pOB9OjW_)x$JepLyWC^iy1%LzZd#kiyZ6rK38v4NX0rWWlRYiNWPk0NuW$8o zKg3bVQRLryXCemdBIY|O+VfSjySLfw?*6vf9p7ViujUBi zA5Cv_6pS<3du;hSfw=Wez;+Qn3i0dDDt`Shwtia~G<_S86=xrQ0ly`Ihj%{fqMn=j zW57jPWbmczAzVD=a&VCrcoTe_0v~stx#>{vnZYM2z(>~=wKq<2o4H+A@PCojv~TRb z8;&e;H7UkEWBQCWDxVBo>lACJt)tZ0#kJ0g^DEXq3%G9MxjV<1KGolTcCdV#>+lWo zXYa)BJwx3$$C-h5vE3hEWIEsGIWPAM+|$E%x~ImI<5w)lSch*=8#BD7eC0&bS5Nz& zy0(6+`Zn$4BZrQ-Co|75E&4=;YfBfgip2HQ=yAp~)JN0wY5H`O@-F5D> zs3rHJ@Zg)Fc=}!V9@Ot0*POe_@`v|W>G4+?f9&kIc^-TbKlf@ZPka&g)OLXTfq|OM zabQtk1;2C5?Ta3F`NNO7{oyw1SJ#=QM*8yNrr?ro95;c3KcAkz=IKpl$-egn%Zn{v z+@jCV(+Agnj0|0^QF%RH(12+p()@tFwqR8(o}bAK~}LbeYfL>ik~&dFvY6d+66wu z>ql)~9}~R>y!11+Zg}EL#Qd;r2FL)-N${<)`St;yYfE=taDg9u_goZQ&^sl#;Mm0A z0_?faamG`aUlt0Ll!ab?XnueAuCmZn>UHOt1%s}s@t%te_059#M6)0WzSoZN$)Diu--RVcKYqDSc2qAmo=lbGv`Vzw53xzTs zzP`WVu22YD+v&?>yDxG2((Cla^Y9n#zWk8B>>bgUJ@n<5^yPYJKz%v=M$LBzpv}o6 z`gFC^rv>m*5;h)dawrab3iEFVF1LpSi^{uh4+$1Mz)O7+OuFfZ_peRA;No!y2LzWV z>5Dl#94_CWFTbWQ-D9VO)tAZ8`e=R0{5|*Ofl>PMpwpKjxO{n3xWv5)n)!Xf<&&fI z<@O|8d_!;i$dTu7qJw0~lIm2^w>Ii7y5=W%i6NlMSouP!*|Bal{`~C&4$lQ#)i-L2hn#k&21y^+j6mDbh)TG zFIz4y8j_2tHjn%p**x-j*3U4VUwSmykG)~b!_)NjZDijG`t%BNa6d4NzgKan`@PCT z2fplmvgf_~5B0wHz@h)`Go4?bW;&mF=u7<}Yig)4|5MCQekxRb*QY|g@VR)r+mUz2 z;OBp!y%~&uNY3R%_x4y@qz76an%6(iGP}kPlPNjTcG0X;KE*OSdy&1+Z>Q)N+1lBS z%#(aMj7(_vO%Cr`Xga4%GM)X%cK?XBb~$b7`4;4}p3g&8K}Y41=}DeYdmd{_=o#d5 zVg4P+tveXg9k%RBmEjuG=NQv)*_{&&J7XI8o+D?NTRQ#aL+aaC=hsBp(gENA%W>9G(IH${tsIO}4r0a$CM&mwu4#B>5m&(p^*Wot_O9-)S+P@JeF_ zWP`ml&Xl)I#~yH}MW^jtcZDfz zN6#yEbObxXGE{Iuv()ZOChpT`_aK(P5U>~6uz za}I}zcfUK%wZ((ZQCR|p!}XYSTT+(^R{hALvkwo~X`kg?(n-iaTc_ovndi4bm$t6q z-Kn}p`fVNcx4DM&+cEg${q)W05Oxovo((|^p?KU@F(ceSsVX-r8PCa9-b{aJ($(VQJd*mW@UJm zwekO}*PG6}t-UvP@PEvsN7iiM|F<}nSe_2oqeqwh1^=JLetB-yee*Xw`s%WSR!+y$ zk9Ms&N%>yR(N(MFm+)Mf`HOE>5ZBFT?qkQQ>VNLwnQH2qmab)C%ioaCx$&c>a}&>1 z)4w(=v*9u7n1bz@&#YQKKcBPOKEeGq%4bXsW^VtL>#BqNZ?vxTWxD40LROK_OwXTF z^0enFeBMk`ke@l;Tz<)MD>Kk)r3Z)?1y)*SZK2h?wb$*963b{14SOv!@BMK4DddKD z|3Ww)d}+wWI&+^3|J99*9fLocMoeQY^Dtwvv(oICQa}FYfMa_p-gGy3ddL;rtr){f zw^`ebFJA1%KIcr_#kUvwC?&>GA9`s1$FNuSPY%u}<{Vl~yyc@A=5sBR&HM`DImOs9 z1MZ8W^0Q?_)lYf<|{^DZ*6J2SYuW|8Te4!yWNrhKB=v0@x$1;j5Nc6&N@ zxjf-lIBJSbAF+q>%E5|5Rf9JjV$QQqbXj0MzE$z6jc$+sRb;O8#B0!MpssoAnGG9r zr&+!Z#X#;vp4Sr-BbK!L2Kc{w4)#|7fBJH4FZr@F@vAS9-&pEDo*P_nVsdan_Z+hz zl)u=2azb#y>zS%=7F6el{5?KBXBIT(m-*u}(UoI^3)=FR_>Wy;794X07aYuAN*mas z`OEw#CYuGmnWg^j35K>q{@zTrv6wc@f_gnamU=F;;79P;f8?8;(jm$LRZL0a(O8V+zvDu5Nd3V3pewj)2P! zjz*4lmoMDLQB2IIfphm2&AByJMm)}0u^XS|_vv0U_j)+@y39Oi(bvLxRs7-2RTG1o zOWi(yoVd_2+9w{=_p&QJ{20eG9CvOo+1t{BZ7*g7+k(V~?jkl+n`YX!L$ivV)VO`| z?Zk9`2)*fAee8jznZFG%htnsz=s=z{av(E8t*Zj_71R38ADMRNA$R|~)9$jG#Lx9n!fig^Oql>Yx>>e&gq%~bd7xc|1iPb(lx(A$NUHS#FcG!)`uRR z|EJ8`CiO`b`s8DdKG_QoDxc-3d%CSpT#VxkI!n5t8Qm}unRj=VDSsqmB#p_=PRK{& zE`Eg=%71J5*zCwhc%ifAJo$K0pyBr@9~+R58=gG&1KR`Y7h$))KaI&B9Eoe$yk9{dmSO{ZBgF=2#s=s)Iapqg4Y1L%0X*0X1r~E2 z*aB59k6*TcYykOSvH?UNx!3@2VhbE~=SFQh!7r2!o%r9-4tUA-<$i!Imzb|oZ11$& z&3x3*I+DJzt}XcWYfFGr&?Uchl5I0+jl%1%Sz8ph(_E+4as10WzOB{e<~vuofGMOcyq7%O5YD~K8{aBZe?4DdAv4kx4Sph zv}sQ7oUQhi;-U~&)!=cwPpms32yA09#$*l~XGk>B9iD z-s8#*i@s|)D^^8pDq6%fc!?2*7${8BoP$H}W6Z!dSMe)V@Jlzg?}A09^G^Q13w(=_ zw=K-YZlRq#cW%5MTCT(IIK})z4dc{1^}ga+rf(+qh3A0V+Y$Z^Xj^TU60bLzDE{_*>FzvD+K(>W81kt$U*ax)r?^zBxp%jUPa-dVc#`gXP~l zN3YZHnWkNkUc2zgtIX7S3*5f2^mT&or@{Br&hh;w-noFe^9%94>@aWDgY!48S}>ov z!=~az30hD3q@pF!N-en%nmZRgzso$C;uOhw^yD1+`iqGrZWxMFjHGGi%KFHc?d*O+ zzMd6-+oAD&%68SFK zsa&~@{BI}bqIovuS8n9I1zakxuAMnIt=X#LEIOYw#_ak&uv7c9Y`&UEEL#4!_3E-kp4x-cyPn`3|;6YWv-^E#67WfL|E1>zfY$B=3E4qS=``o_;s+ zWX2@DA>L9hH@sW29>;&>3o{MY=}sfQQI`1P4i- z<4NcoD|j}kbMnzYw%$Sa*f?-`;`!uG|2@1+zRYI9xtimc^dGvX5m;9^x<|IFc)1c@ z-h~_$FAI0i@L%`~6W8#e!&h^bZX!3hqk{JpqVM!h>90I+DqgN%^@aJBBlK2kOi_6+ z!{^2SDKg;bpy6}3Y3Lly(I)&m`F6YU@m$P_3}9QTD%!y0Y zbM~P#y!c%O=lrf|=lNX=-pB9C!{@34W|!IHpN79R^#lE_+!150X3T~FoQ?YKvA6{_c4=-ezx$83(dw6Jm$f3_WKY%``L2rw&ONRQ8 z&@C&^!813o^1lF2>C#2;^~iPwC)r$r6FB=oIC=)5_ffIin zPUpFS!0(aH1JHTl?+|}2cIbS9P3MZcPWwPQ*Svu8T!bUnn}g7%Cpz%9Xfs#ysk>A2 zK;KEp15KS@9QWqgEYV8~H1e&#G)*meX7^a;XIt`uyVXYO{NjaZPO|T9;$9=^j(L=| zl8xQtnsb@Ev*%P~vk(WHTR+~+WsHF$=rD$yd=NUUUsW~VXZdVd*|4f`J_&Bamy+?&l2c+jLnE z|F&?{!@K((J{Awx%YJhBxE)(ZGUEl0+4aA`mnSlD{21qA z=0XnezZ?6h#>$NUgnP2FimmbSEbK4cZ|1)4)o{Y%3zu(819ybyf6 z_`jg9_A-y6xfJ1QrNhggV%$B%*raoMFEED^W)4O3C>D0gk`y?-_<90PFoaAc=PJ-8k;Is)l>>!8cn?}>?J2HmDX&*e9 zX^(qaK=Jy~;1y=R=|IYyQ=&p zZLOtlov(KH4$e<;Zt_`CPmBGi=~#B-N<+Okz4QgF80d^Oyqruwh}op z^JzezSpJCGbo3AyvQV z9=7i8%E7^THS{gDY~;Hy0&jo3cb^~2E$}4hX)$MflcrA0V-4l~9IWweecdh_ z-HjI7t;OfldWK5zJn>Ig-?~G0fm_WV zoTa>i|2>@5-WSlBpU*s>=Vo0x)USmZwJXNVu3gb_fquO-bEvNJuzp0{y%(xW{&r0k z^8(0N#Re3+D1@H$|7z!~djWX;o-ET@#+f)xYaw`MJw@Vd%s{~yVx=6VmZue(q|DnI zQk^lBd6+lg!0u_KEy|qdS(90i9vsML4S0z2Le9zO@rPSWd0u_()y5V!7(yAAbBdYs~cRnSS!Ny1-vLag6}7bSZoy z{%E!QQN=d=6X(-0mMBcj}=@Xf{y!?%=sT?|=^^SJdZO^f_UJ zCH7uR>VbQ?KZ&)&d(dyu7n^g@e>;mLXOQF7*2Gqgvk3lN$orM2^ZOVdxb7%qd;!Ks z9HOtx8DIFV!JYMtPx_^MN^@>KV;c>|9(3(?WUj_@hFra%;xOnX;fnUMuSIsK-}T7g z(Vo8$?%qT;j8F5D`zrNDlf#SN9jcp@caL76ZmNyITrhlVqOxToX$k#X44xDd zOX5lEb2Q#mJ0k$E`hP24^`6J8v!P|*D7;!tpH`jY)rnEz;WcPg@L>;yVfGF*7Y(!S zWCpw|-BRGe)^p^J;@`KPP9I@&v3Jc*-hG|sz*eFc1%pE4>(JP} z*a{UR-tDK}D(cN7cH*PlzbV-7M+RuUW`IMs$sdxgJJ4IB!34b(5X@5X1snn%`lG(3 zo7&ClUpjq8R%NT-%x^Mw%O0zr`>n4J?kY$#w;^MzOYpG-gH_OaYMUcJ{EOzO*;dcL0Wbrom@3*zp-(qa@7+XE>(|^%~=2icceApoP z9BH3uPqAd3Pf*7U4xabUYG~*Ed=2dCoVR#~OIBHp8>Emj6{)9UtD!qJ=XJq@1)XU1d9I2Nz z-{67YeCRFBIVJU092(y6^UJd;7^A(`4SRFU#kDIEvFV9X;RpF?`vv>I9DKZi{$7t? z(8~ERe!+|IF}8LJ3abs)>t2-9pP#`HcSaN%pT%H zx_98M!Cj(B_C44wIU|}(g`IT154pG>dXnB>NuPH(w3XB)g7FgBdk%forO?-L-Y@!U zy8wNyq;DhXi#@Nfi>&kPqEy}glw;?sFOrc(&Z)7d(|uAJggiW-!8|#x62)SU$%Z~y&n5L z8*^pv`y6{;IF_wnh@Bte(7bCIeN%h*gdJ*6w!U}B*0uLJ!=h%`;6As)xTj|S2%5*TJGfX0WaB*8hbu%1ofdJpIc*68@A1ljdhB;(k)f+v3!D4%au2m zSik&K%lWW8d4@beU^%j`V3dT}+tkr@H!xFO!EI!H_3`)x+LC=bGniJ_Yn6YYeN{GE)31&5KVn^cZ902jF19YYw%)FjcP(rG`euA>qwP0|Z^g55 z^sHjPHL{__x4>jI{_fHYe>jfZZXon+4I{tC!y7>Zj=lT296Zb=Q>K&2= zYU|Xy@FTLoW941*HRQnK%dA4hPnu`C3S~DWV?QJNDgU9Kere;N$F`O2k+f|${*JbX@^U@Qe|WK-@TdBU zoS2N@5Jsom^W~v2D4zQ06}2n={sLo|`Fa8ml9!S#->2RV2RDg$X-@Qc?g=*|eE|j9qfvul9uOk}g{?OytvZ`)MzdvczVsC04o}162Io{kh>V zxb)iE6(4nAkg5*^U(G|L-n)r8M%ho@z@W#SA8p1?b3YBk)GjNQYUbM`>>scac@gzORK^K))E_2tcFL2}PHGB{4)#~9YN=5r+DpYpX_ z>>v2(*J|3_(`PLcEG}h@>Sfa}Teg1sj%81=AK?yi(b~9wm*!TjG4Z|Nekm|-Aco;L z8R69&OF5o}PQU8VY9{Mcud>EBuwFH~20K3=J72U@N6u8$bYwL7SUuNn+*)`s`xCPN zvFy*ns~ff!(;wxfR8ps#y`zvtP1-+MIbK%#Xhng%a8-dUbFec zy7O7Z4S>dfc?m}`R{T-`~3)h7{SpM)m>7I^o ziRrwnj$FKKdq1bn{GheQ5DU)t%vfePg5>8ZcdzHY!CiV*c=KvcTl&$+yYDr=@ScmY zo9W-Cs#X2!Pc^*Tma+HWuLKSjaFCB*ZG5dk#(A9QPjD=$ymx*Z{S@6D_|FHvD_`j@ z>J~u*v+)5dGc-1g#d-y@ihwm+(5h~)GR_(rl#`z(E7 ztl8PZ9u2Zr1oJ8MNBaxZ4-7uB7k=yha>b!9Ira$gvYjpLMcoUIy78Yw;3*w_UB+{Y zZ`9yRRbSn>ReUUbMyNX+-|67Hacd)aht1%2F*($Q;FG*U=A?Y#Mk^;=$QT9FW_+QA z%m-`!;TB*gd-V(NSX(4Fx`@BaUOi2pYgm_xZ8q@Mz~C;~O{=K;J#5-`$A;WXzy5;f zblt)nIC7MDSbZs<#L^%=+NS<_koS*e6;8Dq0tM$bF?)) z(i58RI||;Dbh{HA*E@7ORdh?PxajuZ`=MKWl?q!gB;sYF-@FIr_n#g};4z8wwBQX zK4fWT@GE&|>Ufs;Vcb9m+V3sZH%j#l0x7o9Z_Izpd&=kM^+#_#ycO=-Iw-c6jRv{%fD!rT7fVdndV9 zgU_%UpCMcq-YR`tgU@h3K7)UKcx#`o@flur{Gj9b3~TTiHsLdLQ2$ETCD-EL^ex3_ zh<`LTVAMbBk$etGWa4dW}i*wdh2HPYb+eA7pF=y*P7rRTp zAw4sLeJ`G2&xdo+7LkN$pbef`$2;kSstwXUwW z-`cXCJwFA*3Urp}{MXzY&0bF0#ihUk9ynAA9E#vQXs^7+fdTT6oHWaZ!D?V|B|In? zG&nv3F-q*U^ym&?aFAz!!w14ZIyV`=%m4PTq-3R`}`-ZrnXde9AaazONl`XS8!}HKS zs9kJNyItlx?RGu1E1D=Ui8vtf-)QQ!=uPh_Hg49KFsJpA4O_iqL}&7IJodK*mS98Q z%K@JH9>XqZv-qX~$G73@gH}fLxOHWNzKNiHU>Z53pHH}FGf#14^q>{oOc{GCkM}|U z4Ykf6Qep!%fpS@1*+Ynyg3uc113JM)}#siS$>()0wM zmN+!(!B){;7cTrLY?MAvojGsLMzSJFlOD&9QXfLJRpyMb((>4Tl$Y@pSOpCp#?<33 zz&n~xyN$baw5e0k0B=(@_yxU$Sxl_XQcI`$@lx5_cK=fYIoT0 zyq|cx{r*zk@38{I-d|{$3CTXB>LzUWo#Zg?oQQ8+z)?d^V;%e;+8Ql??@{KGiC3;Q zV`}eAmAS+q`?}F9d7O>aJgiLhH4kgj>WAG=%9mHsr$^ym?cvII5S}oPIY*m-`&DZ5-glICkQCnwpn8W>CdHn6wtm3JlN&y49F{6BlmQj>he zk?>8GIaU(B%*V-BPUe#EUK_p|YcgMAaKq4kkw?a1gClDdXDEQ5;Kd1vbwG*zAH_eZ z*MhOydKI`?$k?N^ly~BZk{kNOuzIvt>Bu(moM2K(`}Vwr1Cx*y{8qAU{*rwa{?ykb{{GN?#GjI!viWhlgReZrg{CCpLc&uL&XTpQj;uu{ z?j|TbL1oG3lk!`66O!R8ow)D&<&3$&1##c&z2LPf1+U1B+a&wh^Lwr2bvJEFF0F>< zkKr3(&ol|vvNcQpt*T#g2Ai`t*>A<53OTq}?c@0(+PV^(VGs21B4dz^bqx9vP3XU9 z;#ufn6>%of#sSN7P9B|fXWH`UB+rf}k2KdgQXW-jq~o)tcSz=AyY)pKdBi?M)x=5c zJh}|@xB4TTYfgHSLzn7@=<)zMTJIKJuEGbDY!q$&w*5#Sr5}Qe=lPAf!YQ)Do_ozB zmq&0)^e2&jCs?F^A<>_EdB5xzn@^m+B>CiNVomt7P3x!6T=UfQS!ZC+7RqZ?mnA>3!3dl%Mzf{IdHipl8{6^8H^UMtlqPrKgj1x`_Lw>V$pIT$HtN z#vto?5_3A0)URNT#$x-qp*g*qPbd7Nk+!pETW~=ObbVg@mG2{}&73S~++yDV^o%#n zqwg&B74p3?-1kP|&aYz_CfOlacQ(m_d%n3iIH|`x)-%7x*=6{+6sqxPW{PSAYAm<8RF7ly>NqwGg9Zcc6*=6E&;9ov@KhG1Vu>Enx zuF#ppdvl_B+t}xrHZrJhcvk=K;&~s}m7J4v81@+Xc0%gAh0oOMmtMN;Ty9)4=F`r5 zUwvu#cz!ggb_MISa%QF6SN*4RYFGR-^`*DfcIA%YV|{Ah`RzPMea&Sg=Qe)eTzlA; zkMR#&s4d0vzw85?C&^v!HoluD`-b`Hf(I-6nLoGf-@%t$?Ax5izVZ70>sZz_ zj$`e-hrA0f`1M6f(M5^99uoWZX`ctle62IEH!amyXM($QS>ogYQkNf<= z-7BeI3NM!NjQq-G$q}B*;JIg!eVcgh7&`SJ&&^?uua)NtsS`%l&8E)APgnIvpx-Lz zo}YVF-1Bm;g|#DIu2+td54`9fFZ)Q6hmXR)kLK2{xE`GSA@dW8pwG%3!3EphdHpSE z=DNzuOCq9W@ohe`{6c(-4`B0cyL*UlZv?kNwU@%T+4O(Ib3@~r$+#}PsCGpjb){QR zEf0aa#o(|MTz;JWvu}I|z;j;I-9gXMRw3*~{`MX~1sCU4#{*UFq))4AH@xmwG z<^L1#s;&pgofJL%ftkV) zb)nb)Yje7q2hEveCSV(^a9KHJUG9spv!_No*jK0PYUCVa6d$CnxhaFDt2M?E`Jc%( zH zeAD#gDQnBm=~E>zT19`p;qsLsBi2SYT+)9RygtZxD+HgA7kiGl9N%Ub@L;cPWUc0c ziNW2yk_^2 zDQ4hy>X}PbZ)N|$c(Z%=!Fl0dx~BvRya_*H!7S4$y;z)WcJCK>Z70QyS*es;#_t3N2Ub-QZxf=MKC#jxDQ9PU^E0 z(Ag`=cT`TY<`49}&BPl22~o|T>Ryp^PA!`aTtnn7ZdzxaY+SeZ$yUqX+Q=FazhwrB z$W^?T`_(QGUXH_OV>zHv`|Mypiz^602*Zj>?W<*M_Xea-qAv zXMo3ga`So^>oNKi<{ZS)iXJ}4 zS-3q4?a6NuE_>V)fC1m!k-rQa67%arWye`Jn(0orVbKUIY&Zzl)_5C_T3`0?edXa7TY$SY~CmsvY%BI5`|V!V3Sj^42WENLBs<`% zBUcIZ2M%BkhdY&@;_Mao)T9A3Eut>sz_{IhG z3TtX@{T1OXIP9SvjYlz-8S<6*=B>u1|1oE7AT@{l?zH}S1)kvU+aDSG3C$76Pa~&1 zApfD={{KVz;pIo=@anZ@GRcrdQEAQ){aQT6)Su;DfUhSF? z&91zv|GBC;{Vnj%9Psq&{X;gE@`E(@`{Or~HrDXGWW850B;c|3Rs1jQrMDCxJe@vd zrYm~UFZU*bJ4e(vH=Nbl~UzxB{P-yrhi zw`YqEYp^A%dA7&x33UHMeXiY>yn4{} z(CcpbgQ>aMDgzEztISUhcnv%%Joxs$!SZMO#?AXFFxCAm`1FkMVJq9-H!#mNK7Ir_df1u}-)>pHy2tGJ8KAKbGiME%`K8K3KE)Hrk&+ALkH*H{b7C zGoF3$Kf*p+w{g6I{Ng(}fxD>d8hiMLnUAb{Jl|t(Tj66*hM;TBYgI>YSaeg@nuRwV zS#wX&y+-%+Ezp@`n{RlvYR3(CL6>`MTF8v%_YB(mk?w$(SCT8l*^cGUgl-knFL2I< z#Ag;N?|hy6$-;FnJ*oAd_S#Z|ydl@z$9)g?nHy>)kM0G0kby$wn2)S4pV7%JANh>l z?{#v@rK4w}x0F+!Y$L=wwRUu&vu-pWI!&${9c_O9Zf`%iy;d}zcwAC8fafP_y=Lwc z$b#>GdF&^?2z}~%VjKC+9D6!VsOK7)G`E)=fHL;>+E1>CMU02Vfq#%}0p`$&OFw`5s`n4cbxuoCQpD|9PHI z$`RL_>khSNP6->!)ggJ(N}1#d-=Q3)JNO=@tw-aGtr}ch$S;wMNXU-!`=+ug>DPA> zdk>737co5Mr2S_Nd$j8Nbr$|7PdECHxZaw|1S4@g?BJWY(LrLUf_bhoY ztGD-TmUQ4EVrR-tuP}M9s2{2EpdYcmrx_Z55jbI^1iIPRNpq&Xyn8k<9C>dwJjWh0 zomZkqA1f&eKWk-n?7`NPT&c!($5t3v4e!mtZqhdgnV;=AO!-o5Bh^_A|Eb;_?4@Dl z*hO|Zd}xA-7v7XUdX~PaJ-$IqOm$N( zy0>qMV?Qkn7IkRM-R_x;)fIJv*9P)OikJgNf5fZMaf$h0%gzyzUReSSg_#HT8DiNS zo3PWC0fTDVWgpargM4d(u|}6Vw5)FoD=wuR#Uk?W(mAxwO1!6UZ`@7nTDG{>>MZ2D z8Ol$*M`yl)tZ$7c`73pwJmn?^nd|&dY>(0LX26?!1l|(&miz{ITk<}5Tk-*TTQUM~ zTBGyZ;BDz|fVcc}c+0nGG>JEI4M*V3eIDLcfiu4O8{XvLY#I1V#oMNHc(cyo%@592 zkAk<6IFlbS5^r~tQ!4z{q1RIJ_Afc?P3-72=n8&IV=U|!3$LYKmpS;F&G}w@p-u2n zGjqM7|B%&~dnJ5U2EMN3SdE{B9||A(1Ie@*gP5x82yp}Emb^ew@Y8Te_9HlGzad`7G^ps^lBwj6_pj&t-dUdfg? zawfo-N4qb+lCOFnV~2lR+t9C#)_D88nsF~dwya^?^1W%3vP2zXZv#t^D{C0@0m@F; zWf`ppd44tHUV==KyttP!ORglJe~jm!p^o}j3_q@6yu#g!$dxMOifH9N#+!W4WAr6i zUpDF*XS|XV*qt5nc{J`<(X~x4tN5?_nsbXHBf`+x??*dDZwE$ScXJG{&laD^?;qOFnB7U!qUlyVg0UmWf7%uce|{;I4QG>mu!QDfp5t zCfPzBgzXb2>y&~o{G|cOmU_yd1)fX9SxUiI(k3edU!u?C^Xa^!l6R;N!q*Z<4k;+uZZ_ZLd>>FSNSPJ44!^528a;ePkh zb8&ckt;K@c6@Pg$X{X$RA2Is(9t87lY`#ij{My^@UH6#4Y4k=i2eb!U13kBPy+bP+ z?;m>oq2Gz`GdFL?_8)L!`xdl3GPeI|>@U|B3iNd4lZgIE~{S)+p=)7uwf;%n8dkQK zWl^u2dIi)grp`ssk=m;wzFW9%>?brg?%lUBcQN*zV$dHWW^gxf)$^sqo-J(FvnOc7 z{jq=xxO&JbQ7rvqmZvBUTeQ9D1UAi7;&qET|nHGJEdqM8mHmhPby@{BO zWEVEX3;0F5S`x&P1UHD}w_D470RF&MqW{!SdHZ=Y7!uv-#d#XO)zlc71F8e=Q z$&1*`UOrLqKJataqkFmE>z)xHCuMU1^+NgoXDj|ww4U|@Rdf6Q&zZrUuK|NIyhr04 z!#4q%ofxOyC3%^!Pfb*@rjhrGu4WDpIdt#YnnOin{H?6de&I3xhtkqpue`b>B0W%4 zXd-IoU|L2i`DKTsTf#b1=Pv%suAFn76_LJM&saSJgF6$sz22zi^_@?E$ww*$|3P{*x0Mddr{KUtZsocncYm_};vUt~~}mz<1K7*FFcb>tBPee@;%f zp-i@Y%c!>f!ie|8*(_h<*(|LG8?x_TO0n;U?=>~r`UuTy8FB>l&2{a2p#8r;1wGZm z|H>Co%qp=Dx4u!A_*O(Rhd|$BU~YO#CHT&NCO2zG-g{YGua)0>YFu;f-LxZqUc_1a zR$`xX0;8=LnDx_3@2|iok^hyTIZB+DjhJm|(sXP#2BOgyLZ_mf%Mp=H5JJ{j|}TLkmO zJ?(EkQF~- zv%3Pky$PR*F2z5J;U(8n>Ynl~9_5`uV%(LyGr9h5{fPB<+jzIy`eUrWdj{HbfA7*; zD;z%2TF6UTe|IN+&>Dcz#$v;9lrfIPSE^jPQ+n4={k`^|L(G5aT^BdmvWv(}@tQgy_?(T?Qj3!Fv2-?z`B%X@e8`8wiB>i<`Dgmj+1 z?UK|HT5narIx6*JJ-FMJZgxs8YmJrSuwBS8?fESo-BUo`f?u}U@EGAr<`&}Q4t6l! z(c*)eYgVqz7aegS&peI%{a}66qw8#Q%tUy$*l( zC!r_FRq#42<}7+@MTb>ifSxLu&k}5<_fqribx(2T(f7C=zGt!a9h3hnyHq?d!GS}| zD1FhqS?l}srGtNBF>Q6eY^;YNag)3g9 zuYsXB_+)-N@Qu<%E%cc7ALh9gMB|+n14RgC9Het`6px z)aQiVE#8}Af1~Xt?d1iHC{L2_as;%$^bGJZTHOWI^^i}r_r1aE^4vMqZ~kL*?$^j? z>%=EfKUq7xv&G59+y*}HjAKJ_?I9PFz6@Mw9OCii)V)yoXg-E;Bzs)AldKgUi`kO~ zdM`g>+s2clg}vxK@E~7V_ML24*>`(6-^}~Ep~W6>)ear)hlXT#e+e5>xTyv=!(lMV zhF3qjQnE_$B0uQ@@JiG@PTg*Dn*^^xS59>o@JixX{z`JKwD@YY`;u#;-PgQLa{bEB z?fpc~*RO(y!3Rr)(c8V`GDC|=A8e3#M$+%v#(0x(`;Q)MRALaL!A)(9gqvjVOP@Jk zkM5`L`{~hn_=AEqd7q=g`tN}s`23Avy?F$zPXTM?Yw7*MtM(4xz92ViX4~1U3h@6^ z`c{Fyc%CzK7yY(<9^FQeU7MPVA($rCPbc;P&^N6r;F)%t?sB60p(#uGGtg8$u$*DX zbBOIhXVO9SPCeDBRk?Crpha>3*7~7e`TX_t(bo6G1c)oHU7D62Z6KDAK^#E2`Ugz^ z_crp3*4a>=?X&o%0qrOBtLEy4{Qg%?{RZ~+8tm)zvsubZxRBqUnzN8PpC}(px-JQa z#Q4~s-hqRBr&}0j7r3ma&(bS`L!}LeiBZAfPgD+HX-tBH=0gPs*?3`&)fa%nY^(nt z6Z|u@m(9Ev!%8~d@@{V+v_IfB3tqhA@$bK0ub}>2nI`gOMbIIko zSug(GaJ%$chvsq|nw#LzoOD(yZ0`x3&r7F!hInaYeZ?$B`<@PK!*&WU9uF|b&n>X` zs3PB)wGX|l3GigsZDo(A+zi%g$F154d$@m$SYHeKRjtZy&h@iaTYFYjviDSDovv>> zq&=(drH<~kaxdfT!b94#ihU>ibM!3t3$1kjLCW%oTNPM-f6o)zt1r`^V|mL2Pw|`f zdWJ>=Kb8#!U3>`~4YFo01AADpw_P)TzV!j%IKaNh#4&FZymOJ=%Ke;N{SY~-lcWC& zm~8)d^CaK5>(n>wP4!3Z9HcC0%aAXc8dpgDhKzXRLS=fl`q6`a?EVh>SV4=jb63%q z3$2e8JxkW;d7N5pH5t*MC zt-X_PKQV5;FBiq2?c6h#wWG)b(S+8gr`kuB4TJOVtL@S1kFIA;ly8~rOy-sBLspfN zAE`Ll6!s(*Ota|7zitZ$)&&%g){r+9#m%~xX?VtAsHswCVWe_Wq^C_ zU+3qnKIr~i?+(w!NbQT_DmB<rs0`0Mz*wfJI^n+2Q|gZg97;b0f- ztYqx+Y3rSRLncE9zp%d)xJz5oDd4hoEK4m-WEZsPIJU=lvq3>8%I+5ah)>{ zIPs04wLDq;SNuxvn0&F>`Sx_akE(nyWRk_&4EcRN_+Z9#_Iu@8zK2E3Tr#8!TE86p zdsqYFWj#hWw9*3~C?_p7hBMlFr#py$48l`Ayr-LWiYr)T>rqxhzh&U|81!4i|5e!yTaWX<4EmnU zelf{=%5hx@eV0MstLhrIihfr@-^-!zUas|h(Us8lGwc^5T0a1-FNL;OL+eq>)7dX( zB{Vr3I{&+`k<%p_2bV4Mg}K88;DkLeCr9(4_bzZ%>oV7Uf&L$+-v-zu@Hjd8^mfY0gU9{gQNG64ee6NQ`j-ykaPw(jvS2EHbDn!z^$hNbJ{13xPCsxN zYoaty;oxZGny9#Nbb&Qdq8+u3ezfBtgS&EjSMy0!b= zan}#|v{SGrc>gTk@AxO8k&*B3c%S!c%*s_qChle~)6VVxG1rG(IdN#Qe4lOK=R`ja z4ELfh+PM}l?4wQbLM`WefMGjhm(Mf%b0f;zC_w+sIx*|q+@qZX|MA)tX^d6hdt}`be*K+1^J$*_6m8tWTEp9!EBYjB z4aeGR4He(e_rW!PDjB7@#sb>zCO^a=OGKY90>77l=|9^sCVNj;=t{ny;>nZkc*Pye z#aEmev}3CMl-1*7DW0|ey)#*{Z=4~H#TsBczMA92u_oJbEY;oi&R`-I?eI=J@3VQw zYvx73S+OlshVMOlA(>K-Oi|9o;&J`gs}6eY|JwS*hgqL^5%eh9C>WcVzx|REJKql7 zUMP0Hkut^3v479a-#+y#Vk)wUQex+mY?{@+o3$(UL;K`|1h6-zB=TsdI=*89KfknX z@e9+!SFMB`o-!h?otnQQJEEFA?}Scb?`ZzpbasUqm^Yj6`bt+7CE`B9eb-CtZ|K@! z+Pd7eH+q1B;y_*4T?u}j68#^)B>odPpI@cBzQlONuaZ4#s~cX$*0=YJll=M8%Vta7 z7~}|i#J)c8uF57y*E;vZS4jRT-+0 zXmrM9)Q1l$(c6Xa#2?!hZY9U1rpCASIAeVUT+8qLDCcJ2&&D%~L1Otbk{@a(!6c(8u5kU9nV?YTX(tfr~x z?FIR&KQVgjB({dz3~a*=$+y=>nkIdN`8CQutLHB=bJ0J2tkJY{Mx~>!r!CQ=XmlP& z9(1}b*UXhZuOv_CUEU$xHGPt~O?yUvgM0SaE;3iwP9vvzin;nyXr=}EQ$|iv4QnlT zFiz>4q6e${S6vn(|HjPwH0vf4)_iMW*dRYJci_&)IWY5TB`cq`8~(`LTk*x$rm zz`Os|W9E(a>@_?aoMh(yJ3i28?|P=&@8AVhec4p zsd7M5P_;f{*}C4LOmDQfrBC!{WSe&IzcUViju#6sy4?6rDO% zJ0*Zl6T%`^B?0YuKi}Vya|pquFb$cJYx*vnG|DjIdi|SXHs~kEtO{m8;c9TV_(no=b0VUj4ewi zzdo`>U(bBJ8`~c>j>|@n=Lop=_00P`Q-ds$TWt=Gy)Ssqf2*SFi0&sMOL(scbb&{o zIWj?T^raaSg}Z+y9_Ty3yKb;CFcxPnzHVTx6K#lhlu`e7A@6)Mjl6z?jfvRFO6yYk zeh)lb@3C*Q-s>FtQ{sM*33>kpZ(T-UR4abP#wC|?ygwN@(T~OyW1_)tUBaigIb(n^ zSM8}kYHtkfRaxx?Gxigsx#Jk^B|w+_)*)y0HMZD3Du<}r3z``-Zt&Kh+1^n4cZBu^ z&_90bkfjt4EZWYsVo2nBW{+2Uq%dt|($;jVt-6f7QM;%Cp|P&Ykbj$Csdc6pp4OfY zzchWwodw;4-$9SgIqNYpnXx8?^LSw2mwcn=D*l=>rRA>!E{ibF+b`xla(TC5d?POq6Ozqn%US&-pI{h#Q4OTHD_Nf(yydn?mAk{JSt}|`e`yy06AE`ZCVpYb9@px!=fR4WFH=F zZ2gFP1^oVybzAoaFmB}#kS-ejVENEly8nxet?dKYGcS#|*6KIuOCrx^{>EO*pW$3< zdFGexwR|1tTFW!PV=S)VIODgC8ExK?&N?nzt1at2z&El+p+9BKVXki52`zgI~`6M{9T>hRtyW0*1NBlyD-Y#V(&Lrto+ z>(kNc@XZ2i-+gvF#Ja4l8EUsvO}`D~g}&Mv#dDH5^u222fgQ*LeLXjv=a^0QbI1hX zrO)S5cy0%>h1DK%K>>0>U+ob$v9^Y~>(+CQY|z(p@a(k($RWaQ2e@{hap}Of)Et~c zjgJ$0F4>rTJ8;J5KTyrub=sQ{Xl9-71m0nE5o3Tu0{C-rq_r;=N0Je&caagsf~Wel z`ix_IS8dJUoH;*mi8q+BJ9{@Va>gZl%=(Nn^qI$Ke?52@1N=Tq`!})fyX`LV-gjnu zNp^eKPD{rC=g-pKee_N3p);DHzMj=4@et}Gx}eekI8mFivP3R&Eqcnc*8fi0oKBmW zR-1Jh=u0gbpvqij!F1%|0hhUW5gw+3hej{HU$noRHBq?w>jCy$vN>?x!uqQGC(@A^ z{AL`&=77FXe*d+szdrnRMGyJjkyQqLZTC(MOl54t&EW~eo2T3BW_oxYv?JN0{kMJl z-{%pN65W%EPr-|z5BbuaM*pV0$kk38EjuHVkJEN<+m-xU4B~}lAKHJ=&ijo|t>t4N z-XwcaxyRg6?lHDpG?KZ&T&>6{*fxK@XjC?>Az^dg@N55rds)cyw{cIlgRSJn&otAj zI-tEu_))w$q*ZH{hw&;_B^w&F+aD5sT(FD!)ONN(6AO7K*5=Sk-|~3Ju5V`7v{>up zOs*j2$Zo#)ko#j*ePxL{3)?7W8Z|!aD8}*Frc(Mz)zD};s zhshYurPG$&Rcpl$d8}ITE%4t3WuqpPLmRTaNKU(FQq9~2RzKuhaussbG~}uxbmUPV z?K`sUyk+upkng@^xJ-CL5MHLef2KLCDx2eW=NS7Xyi5DLVd0s=1+f*`PU2X z!{s-QKeptE{lxgJXO2o2Q2|`r`6Ui%(xL03xV2>8qMEtM4ortzbg6a5_QNmDg3luh zOE%8ULLW&!Kz%2IPi`Bz@RQDX-qy+9cs_edcz_F2*}k7+epo)P%uB%~_r1R7^toU; zYEG06Rxn@hnNl-%nKhr!_KEuoc$dvlxR-52bKJ#)t0(I#&cT&Si8Hd~(%cxi^o;}H z9XoQYT&i`Xybrlf@OcXO80gic)5FfjxWRpKONgnK6afv>^cE*YmULL zQ-W;4dV2ypY@pJqDVC3IXAHKT%H^x9T4?#$cE(`a(YaMm4BL)xU}8XaAJq=?B_#z^ zJIv>g59G6_@byawjQB}yhV*N*ppB>CCqKgu)=iwC=HPtzjcx0YACw(q#2DASKj-fl z^Hq#}8hgni;32=E7n{0yr@G8oTuD2%{O2LVOIMdpoSfSI8GDAd1txm6;o&L37TQ|e z&Avi1s#h}JH1wRh&%gVU5-0=?@o^~MfROC_J6Bb8=LMTA0@V(VrmveZ97rl zYRQ>@K)yx)ca8gA1$%%Gpv{lG!veKuwPooyE}M$1E1jQvKNoxXY3Cj7BS!)Ak<3BK zHLG|o;KUW?POQx+^Tu~}V7m_AwXkbCIXA9Et|!LNg6)@}g(mj6D}lG<6zLc*PnC=x z>ziuh3m&+33AU-e?!CdiYUKKIcz$2^_vt=sR=FjopWXH@-Ird^lF!e+|D5h4S0cCc z+5R@}_x0Uhp5yu!uKTLZYyIH=Fm$1JJ$a!9trIT2Jjyd)b>I>UFCTJ|=tVFVY(wDP zg)O=!OZP^7pMc&80MC-NI{67Kp3bq)lEqhL#E*K}(!mWweHMkX-2p^f=QEUI*w4|{zHjouMe&;1!&KX5efCwCI}KWT1@kAB5^#*048 zk3P(^=G2Yx@PGt(K_dJwDU=WIt3aRf5VB8RSM_Tr(ND<_tHqK-&CV=y+NlMsYtoZQ z9#T!1ww2y3Z7V(eoBZ4MlqSZ|=9SGu{_o_8Kqu428g;pGkI zn_esDaJ!@Xt0qSiJgxK)FnAkzQ2i2I-eH{gZ^vf=``f?st=pV_I;M3u@-x$usx!Uu@Z?sV%|0_uV0W|NPl@X>T+a z@rU2&4}J!Ow4N8kA1kc&+?MIIp3BB5KTPSm{>@`-T>;GI0n@fo)KF8un2UZtdEQxP zJ6PkIz+WS@Th6caG95e@&)yW?vStkacUs%4&_#L7(o7({L9_60mY?a7*3rr25%lZmX_+&Nr$Ofn9X;*y%&|Piq?k|}rs?7H@prd$oygP~qkzYi#7K`a zx)(tsyLk2rp4IxL^AP962oKSEIg55zaW0+kxpclw$d#X0=c`&vq2y1~`JNjdkv~P! zWruWizE2=)2#)yg!-q2i;%noeohcU^PcFr-TEVmaevKKT$Lm;2hN5#RUXqCq$Iz+{ zasd0Ddnm(arX>tseBQMc9+R4^1rI*;CuCx3@A=-o>w(iFjBTgU{gzZ0JeXm!9+NNk zaHi4y8u*wG&$so$nStN%&f!e_K{~1byLWQ%FXX}v;E(f6^VHBO?+AP)3O-)Hz}RQ& zM$^OFtFFx3UiFo{5P5mmd(Z!9{mRUbm^W+J=NgmN@6>bB@rsuWgSVxJlfdJS(Z-}- zuKaeF-A+aTKi`1(#UpypdMCp=AH`UI%C*yTrsau779<&^dS?UAY~-8w-A)bG18*Xw{q z`-p<>*YWk-j~`k&GG5R3>4*FMKj{0}#Ph8zd%6W1?~~rfr;qWy?VgM({J=_^$iLg{ zNp7u1pR)q`l)q;O^%rD^I1KMmEfvw`Dl^%t4I$l3JTNc94k2Gp<=JuT9w-(fYvlUb z$`|C?A>4W)&CsM<0~Y>tBH+}9_<(QWpRje>p6D3e8n7=xcP-138$!TrD!!`EKo7Pq zADo~gxf~dLa5A!0e$5*ghwfd%wP$#*ZIp5r+cYbBT@G%4HJtb;#&z3`8P^K0P3!~w zNv~y0*)Vv-6mQpMyND0+Y24hax+C*icSJh<&0l3-Vwu%Yi`2^ zAD8Cf6`XF2!7DkMewu~O`Z{a|dGx1=e1fjel>9GjpQ+!k!(L#?q_Q!HPh;1%>7-YC zvuSTVcJb{zQ^nd6pv?+w(~>1s`{;RSBS5>;@3iH~p-#KNHek_RulBB>y>jg1+nF0Z z?P0S%S9?CEJ=t+r!8@w4P4Dvf1A;}~otf8;H2r}c$b@};E0b^SAaCM!-s$-kw(QUR zE#{%sKJ%fk_6Mka_CDKruBUzWgrB*6?ATWO&`)3OAEyrR4&yo{-p(jbc#ZEZ@eZD09F36Q2)|iqUiwXItz_N^ z=1(%_*O`}Fi79NSJ*{=hXZyAPfNvu|e3jn-I_nMK-IgQ8N7KV|cu%^qlgPkJML{v$e0e2(;dE&6KtmTON%-JDkGoq=a}CvZwhtL1Pm-)rjGy_SG)dx=RNY5vDzLly5jLXEPS_^mG&zvH3OIB3D?%otuD z`s8Bp>HX&@pLEv(!C5+L>8JPp(H!E(hf?s&y}RJS52&$|Z<lb1)mkaZ)Ja@dOTYSjWw#rv(c%+vxUC)=J$=j(B=0@ZtX0=jrs^~ zZL~$?Ox(a2XCYr5`gwE=F0YRr!_OH*<=y6p(%pH%4e)%+R~wp>9Qo`Y&9!N?G0)nk zky4GZi~qah{}2lm{y zu(+vU$A8&$I9KhpXajU;$|-(w`3vzIfDwe6p?>-`N$3A;5D`s zvJQzBx5Lx3@JSxX*i`c%6*=O)%Eet-{Ll3?t}CORLB^o)C6yDcTt}}%lcM!seu9m_ z&Z*{Mk7}&xMuzDsi(_xmkNr=7>i$TF8O_@xKU(RNE7(6oB1R~ZVsy(dJc0QsIL0$y z$0$C9xRNSz*i#d2YaKlJVQ_Dl$lu@qp1IY|^_3aU;XEtONRb{ef;{;pZ18Of#>WS& zy^r+F;*HvS+k2mpynwYq1KA7#TV9NgR%E6BY;bW#kXy^q=jEs3?OTfU=j5TmH(pP zmKNUQ#0c8&YfrD(OB=3VR()-F)Ikg8wjR&DH-&pz7v5)G5Z^wJHAt{<_3L(Q^5Af~ zbKUZ(0%n^Xn7R0A;+*v+aN5F;y?5;@`#bifSFxW1M_zjm`$@LZhb^4o3nf~D$Jy(P zy*GC4qgM^VR%FSWXWRc|Be3-U(CIz2rSqm3n?VaU1IdwU_io*fu@~IooXcLom@IpN zhiAXfbv=J8zvr??%4Trd$=%Z1W{_{N{y+;0v>$iY(bLey3i?=VSb3l>n|6CnYB_Vb zXFr}|=j^D!j?LOKxfVMOa@b_qnnWw*$b0e)n}WX(~xMcdFm`vuy##Ok|j zm}lzqPg`r!i%sIemVL*uAAT0QmGX00{!~tWF8Nc9;XCEv?6cUdyudU!i?!LY@%6`# z+Vw~Ba%}UB!C`}Aw?@#%ZzD^LckEoL#>v6|3*?_$u`L)47*N?2q3I-?jX{GTG<@xfN~`C@@t+-6eaiy= z3t4AZu-GHt$1Ne;%ECVii#Net9S()NNXnQ8>c&+K2|xb_Y_a%vckpaqIPK)UbKz8WW8qZ4!f6CK z+s0{ncnCP%AwMhTj=uf>5>6!t^@UTxp#hwA@|*jYhy{$lf~SLertF* zQTSyKCR(d_D>7O4u005Duu0nQ%Fd7;e)dh;N4AjfMms(nZQ$$xxYHW7lHWz@6MC3f z-vH@)Cqa)jj4um598Z6|g*mCxHTJA!)MbpzteM;5F}D5q4XvZLpLcC*-+mciw|uSA zp!f9f7VRI|o4yYW&)S4AZUmI`{kFFG*F@`#R6PUM*v9ua~aEQ4v6L~cs-Pb|n z__56KGLFe7Xyqha&0N;LaUA=AJtnp7ng4s3>wBN84%O3+j#K*YeeiK7r-*8slvGxA zl`!`Mm1DXxne+9)O*|lhd9V3@6LUfHf6O^(MewSCPJF^W$5k9RIWf?&d)3%u>HB6C zvNz`cIJ{&%dsfw6HQ;UHf1BWc+5?K;iT5qw-(5>~u$R^Tb{;%WI>0t;DbEAf$TSm~ z7GH;H#+t4&53;P6JwY6~QoYErc1#_z)>g@;(lPraj}UJt-KRlrjIrQU_X_ZH$TfDn z`aU#Kz03$Pwr)KuS~8$*6S_VKUJik$H}Oj;r%sP(@dMWGHf$^Q`mcB=*LPNOZCZFS zvP~AWsHZc z+8zgeS-YM->D|8W--^zjb!hTGB0~{xZ^^JVwD}r+(76x41<9U`9;5pq_6|w3qw^o~ ze2eq^4xWFB=XG9z{JNiKC2MIv@Eq4A!^ZkOS#_+Z+50BxiJs;ewfPWpPJR!cW?zzA zTa50*$GE=b*q3f#UdqSuPR^Cz?{>~5uiCW@B}X8aA-75&bv<-oU>};66~&1qw^H}? z9;?5SThDC^k?i^r`4HZO=OIrlULicte{B4goK<{s*#ni(wd5?t>q^ebLC(r!9#B{A zEIBLF%;=G`{H~luF8PWSpH;_Qa#kg|lqF{&18*(EPE^G=E4<(x{6wUmu>_{!GSGQgPpENcPpbVty~LPM`6ptB%8$BI2zfjpK+JEG+> zZ+cY)zF0S0`bb8t&#?08-s$EB=bhg158opGp<21Yv1L^#H#qsz%JCzchrFH-e6wQw z%$5-Ukjpm&tG?nJauV8s+XCPH?O`qN4d@9AjU?1~E9?X&s+$9k=V48jrgEj&*E5bI^L`JnQ;? zjytS&G6O%m&e*zyf9y3~xz_LBceR&tPEExo>$j|{Lcc4&)0NAwpZ|RPmqXt3x(w-s z;DOqgyz)9c?b@?rfag1 z)##JG_W6gLXK}7?X&wDC>*)G9I#+#BWC_l*IM@3+pRD_{_5R;m=M#0G^Bb`Ft;cqA z02zHO*J@_j-_Ut3=Z4N1tJ=6g_h;(9eV(QJoELjXCOorpWS8%I8P{eG&!}oor}ijw zWRnraz4VMPoL@6{t_N9?7%pEieE!2_4@53wFNN-@37xl(wXYrh(M`ZYa1#Gu-dQ=% znKP1Y$#Y)tz!k{a=tMyP9IxW8UlTfL8T>yJ|-; z$4xV%?it25jc**l=9%GFJJ_+XYf5g@b+vVXnwpQ&zd_dhvaU9s)jfUh0Ch9<%t35= zcR26c?M1Ka-NoE1;vJ3Y)F^7uajgFTM12P*XY?H$f3CjM-%hI?`i9;1jK0%9eg6>m z)h~_hKOMK+(%xI}EC%j*{1l~H;k`KA2;cW2V;x3Unm~<@G9#h$d1|SaaGYtxch2Wn`$pLd4to+>XSg+J zuov7+-^J6n@ZCMMt=d70knytN@7a7u_&5&Cveh5@(!to(2hDGd|J(FKb~m>#?0>Aj zbkdhZ!?one^)*^;)F^==3DE)=P%OZei8Kp)b)oM$x{^a{40rwfX{VOuj4J zc=$EpBTZFHL&BTxyYyX1pWa6$q5Z9J4&cxe2+jR(yw!CAB+ z96SgPiunBn*A~ASQCw?xJ~Tpo8uFm$GRMBtmB6#Pz+HQko7i`h0sEqK_A7>udNu4< zhGK7kf5;Xz)|1q_1-hv+lY+C1B`2WC38aWo&{-A*m9_%r6?O7?~E)aRMO{}JMO4fHnR^d1$x4;ZQ_A59e(EztZ=bcOs>k|4nVT(RL1P z&jjX+fH|>d-Kxn}$iMWU(%}i0k2<*2p0+n!Vqt!S_w6~77;dDF=5zlUDMd$j&h`c8 z-rwlm{zhtt>AQ*pRr~U-QQPa=Bc)%W?PB_V6Ma7#({~Sj_wi0|y!LK8w(sq{e*}Jz zN!wW4O0S@8$!&-KgMG23`%4RNfQK%Gmtdo@a^XqOV#&|H%I@(!a`zUGj;@(I`S(#h zi|?Vn^(Kpgmmy>$vuEh3xU< z)3gFR{~_c)*&=p6k=7iH@1p>q~gYkoqeS0vTR{&JJ9`9#N_qy04wb? zd)H;rJ}dYqaN)#_Wg2N#ywV27C|%CIj9<8J;=F~iZeaYby=4>MX=3al_RK!^MY6Z( zJ5RC?*Sm$lq+7Joqt_IU<@aLybiads<45FwVGb>B!_Fyu#@e91N59HXM`+F%;_4{d z=|il(BsTW1@3^PFl}NS~R2zE1piBlB8xtK0|gps#ZK>c)^s2NjtnKkNaakMTkH=oTOL zZa;nj@#s<$(4{7ZDtxLzZic7xtC$GwkET9Xn{hY1OZ-!H?4&EJWlmN&HQ(GC6$j88 z^w#URb&_^*PxBF-Qcs?(U9aIE&YXyykILV$9lewIMk9Qq5x#+4sn5KH(ig_gi$>NV zSEup_$F4p0XB^x5mCV59!|<)<|8%;o?`UH$;p#dbc$N81ZUNb@!|;V{YpzR2k`}JuJ8k3-(EG~AnuYCAd%GOuZQ10N zkM$nDH-dNUdP8ZJFIL!0vwX4Ykp+(7yW`3)k}+J}`#koOS(fi@Qm5(U0CDZOJ~JLW zZhTK{^i0Q&yE)N#aw=mgra$gDrhno%l%FFlJcV(nHj3VJ$5GO29CQB%$8i&D#kUzp zMa(!VKXDw=QKg0B7)LpJUA?DqVB;xW*lQeFjAP>e5I&ADr@a3VmABmbPj9{&m9?PH zbL3r|2``udPbh&mOegN87=M_rh2R^O&(ht%NAo~7SYmAw0_e)hhWn}xvL{?{oklkg@N{(O(YbA)hIZCJ&jZ1HFrE%jgyc;{Q-pKG`UJ z8hKOtp3#iY?=5)Xh*9vsLG(t4yos%X74w?-hqUm2B0sB^Xcsz;FVV&a$b=`o@qxqa zQQ!5R&wa}m1OMgkbafPr4UYHp5Bh26E8hOWtN73K4(R+d{oG|5)V{qpV;6Gg!!>{3 zHJZKZ0Pld-OyKiUKcm}v20t1-^RQ8N#{DkduQwmgc*$>c-&<4GwTr!51lWIxHUxt| z8^c=b$$LRA)Dtfy8QnYS|MgY>(DfqldkLN5hxmrR0iGX%r@pw-Sn~(?$zQGhYY(3u zILSDlM1Qb~8moKw&&SX6rNXg6;U&);K-;S`h(9>tzt^sZD7bZa69c;cUBgp179Hsx zb5LM~8CQ3N8r(PIV`t@z2VT$;a+BaRB3zK@o2`2E&(~LPQQzEs(|6bQT`PNjeg2jO zJg0rrA=;6Qw;mq+55xgJ=JB>}GWrKE0^Tpt=O2R4J?!`YOn+YYB-Xv;84$kl9$Wt= zysFQ_EBFdXj#C}nE^vDUyviQZ*Y)w}5Ei5w`vyQGuNPhv{LmQM8i9U=s~3%XGadq` zs*64poW5kz56^(s{m}ls4n9>AUC#{#uV>r`k7{E)^^2|h;By#wku53qIl=cuV|7L~ zHGJ;{uUZF)2Pj>D%_I5Vg09i%QudnzIzKG9D5&=Km_u9D-hw#e#A@^@2Y{Q#T@Osu zRtI+JJ*F8DehxynLmm9s`^TChc?&9aFbKs{4{1iF(IT(YVX%>DwtvOzA zaFoXz{4V(Us)L_;Ac?aN6?jU zM7?VZM@N9|F=q~0x(()$JBM6d)eGm)RXvaHVGn)Q9MW8L=g^DvcQf%okHyTP*Xgr# zfPV%*uX{Y!9D2#o%T>Z3k1$_yz|A4%QwK1c5%Xsu-s{ zc)%X!-;4h%>SOVraW6i25q+1uq<7VZa3XjM)>j#E@tO-hGj2vb@E_~IT=Jaeh3s@k z==U*)Z_N|TrB9;I8i#aB_nZUfu{s&yPB72f9VwM>NC;h}*2?j$pD!?fe`M3iiF=r% zFB)EJUfkorycAvHcKB|HI9t)X^y-QmqYij5--~`5dv3rR&pI66S;Vnox@K^nx*)9q zFTQ8!+;8F=vz%{GAKi*)5KKbofn=wbe3WY%+kU;5{qD1N4jJ1&tf2eN-(lBfPCbH* zFIoRh@*4(NXPXO<1z3kw3!ogly1GHlC3mj4I5hc|;)-hULDw2|E+3KJ`UET9`*Zk_ z`tiS!A8Ct|hem#+KcoKzF?nc|m(K%k%g>SjX;HpNps;`C!(2BfRb-;Dc|F z_6RM=k{$3S#h*0qEPGn9DA)*I#g8)FjI5u?9BBk!Ip9n2B^i7(b|3T|zN0)e;#IPd zD~3e=1kJ>dNbWBn2Vh{Hv8D)kN*^sg?84QR{}n^x%KvWcT^_zj)LU;=4nXO?7do+b z_z|9HPjAc+F6A>IyMJ$eM6CbDr|BbNpZ)K`XCAy>_-yZI??;8t3&AIHe9wOL)9~p9 z&NcFBVNX|qJl(`^E;^x=gQIe=VrwoSm(c0GQQ7;8f=w*W+vLNDPNvyiFtK^{)^oUdl0w65x~do!rK=xntjNX{j^0sp)kK@=)N#3F^DN?dr57-hMg*mMTuNWAqK%QnIj(@_b!{5wL40^h(u_fs z=7>&z3OokCvZLNBS<~WYY%xa$wN7aro(BI(rLE+ok?cK^t$5Dll$79J{0Q}o_FSV_ zD;|gEq_VdZy&g%Rv6S-H&dcECDv2-r4m?K(`d&h@UlahnS=wDJwQZOZl z__*Izha?Xj&n5=vqL~#?39mjzuru0O~P+8ne}-uJoE|py5u3*LQ_2nbt#^du>3Z&S<~)i zK8bH91G|($JMK^Lo2UJaBPS^SPjbTB=a3T)BAXqDze_gTj(xU(T*`l{(2M9(d_LFKVV_|miOsL~WL9(2-=mCAX`UZV|q%7pd~fh&Ka7vES<=PKxWdZPSfjm|udRUu+oYE~57(D=lOnG6Pwunm$Yi=kXku(YFrnNmiOk`&CAKYdkh%*KRx;oXZCx z*8gCZgLA=ZA^M6L$UlkvOa3vyx3y;i=dK*|S!KgA^0pjcKX({d`k|$G+Em-na<~Aw zO0vE7AVtW_(~y@X3-l!~m$NU?wX+4NTz%cQ%j4wcwE!hOxxVEpQ&K~ zTg={fmJgoDJ?0np5}UX1eg%8qV)nfn%gn@rZtWl4_nDK;wLGJKGH*{TV$Z8_Jr9g3 z8Oto@W*-VAz>9IQR0yMK0V&%JH88)NLk z)n;5L{^_Ov0p8-s<++M^l}o>NFt-E?&8_&vIOx}F<@s93UJ|*^nrE)uFMo_mXKt04 zaXoXZBxY`nb>@~kuPT{W9oP#FqqlKsMf1uJ&Nc5UnOCv*d&6^A3_JzfzXhJ^ONn8| z=Y1R>_R}BH;};FvdC<^*0$c5062O=6=I&o)W7j;J&pcbeJQL0JHP75Vjpmv5G;P#c z+DMxl@o6uE*7&u2hBdD=pC&uM@nZ`@Md*?8fN3%FVeC?G12}soZ|Tkk&5P-#{}~@} z&Sfqoa?i*0Iy0f!$6VlEbNqzDkdFOv=rfs9V|YgIBHuUXab0cd*XN@R=2UhKxq_T_ z@C)l{M{TH|{zRkO;F%&|vVwV)$DE3%Z)(?Si?-E2V&a>N>01%Bn1J5mImS(`udwh_ zgdDE64uSJr-qrZ5wy7iLTiVj#&oV+9kH6>K4CT`I=(#84_BDFV8!`-Y%?joLYqZ@y zFwIT$;Lqjje4e@NOZ5bmuWCNW@<+4hx+m=BJ-=ybLPOQk)`rA!%bT=UQeS58{+OZ z8YV8=*Ko+Z@#m?_e%Fv?-1zhP{2O=gX!s|7A75_lD~KC*v&VDe&$Id8#PL=97U~-J zui|(8ea6f!RK<&|GKrA-Q=r{Ymv?J~MV|VMw&vO#gpD|BvvE zBD{vmivn5(XCcD@6Hi%X=&hd}xy9v#+fQ9Zq0c=9R==*%P%K7g2 zXA45{v@z?dLg0|lJeOm^p^k6QNF~OYZ)^gmM|;LNsQGC2ebyMql7HqFgYPWc18h>7 zw@kLL-vmtd@O{Cj3OKme)hG4GpK5gL+MF*Hh4Lm8gyxPd4DF;}yXfBp`f-dgFErwt zk1%fGM(qfW3ur4O9Mb+AV5vT(0u#aef+0nr#GL!qsr?zy-Xi*SHFTHfz(&_wm&P?D zF}^)ZUpV7>=hA)+uh4$%vz<$S+Ymp*hU3Le^pp2z@lC<;YWnyu(8h(pDGZ&A+guoW z0T@lEZ+n1O3E!Agtap-|@1Y;b%UT-}mLI>+zjkht&k}Q~wTlNaD zWV{YOJK-;q0gl06V)1Ba^-Mz12@!bO(-ep|V zfNKdbjsqw4=Ah>Lv+f5sNzI~#qrkJCaUBQN$y0QFpf!hrw7Gk-=1hF^T;RJ9culx! znnn9T3kJ{?@9zfZ8qXeRKyyeqp9!9YH(ifj+t=V9Y0tZht#Kwc&wARPcN2!-3+l{) z-QY{O(syS)D||wyd}9J*o7kkeVAEU`V-$@Y1K)?i^>N0D&t!8-&X29J&D>fPx|(#>z58}sG^;T@D%%AV)N{g1>J(Fp5IJ+VcI=vy_eX$o9D%2taU`Ki25p#TaKj zt?}8iiRdsecAE9=$7x4v%PY`=)|r=~2f;&hqPZhDT5|;2ba}8~+UfA%-O#OnLT~z* z=FmqH>&z=Q-?8|;=1L-bbq{kf^O^Wb)EMWR0lw74#W zl?eK?281LZ{Qv8&&3A0NXH8?xwef7r6Iu%;GneoiJDZEAH36~Fi z3Z7ZVEIjiq3(x$1I-b2};5oqhoX7md_qBUWZb9fKXk#I?x{7hmpiiP1(TKIaBU?!( z%6p<9G)^*=^X}tX*P-3!o^?H?`6lb#4?%ng?2Q;*q1Y7L1=%7z#`+ z2we?ND1om19zW~Ro`#v$bE($%#hZ_a7to$$GJCGrGTCER|By+X^<%Sjo@n9Dx<>mK zBae)C`uj3{y`OJs-q!QI68O`791E6Xkd5>W@lfG!T+V9xoC*(4u;x~$wT2=G!pF6q zFXBBtCt9%NBI}&7fm3^IMQ4qzuW`9Dk2NmFelff{3Asn`zm+!C2Up$_90Wu0Md78{ zSyOtinY*p`fP>^6U^DK5!q8Y`0v8TXfH%Qna}VC4a1cG&cmoDk6@*&h8|p*7HNM2= zvB)WEbNsTDhKrZ&r60-7?^^ee9k{OZ$7ugJ*X;JeyK`Nz7R=mpx6OFTF=}(tw6kD# z;&af$1bF*+c)R)_II2y-aiVo?Aas;u$r?wsK5+eU`eV_h^PFUoEnJgK5-Wq86TZkL z`o_3NfiLUb=Z5bKeZUuDqbNJ3)=0lkIw!3G(rS$Nf*!gD9 zwUnN@7LOdD_QvH-3&pP8HqMfp{jB%X`L@=3i%&9lwGN1%&4Qo%*jJXo(?gt}YrX$} zaUJNvhxW~y+vtwQvv&WN@d0nQ@ln_}KH#?&K3I=GJ3j1n`IGWpp)<1b&NNF8#QLjz z06uafw3Cxy)TpeUxDb!*xcD=oM;lTrzkciQYE1{0ll!*=dXANA36_+%^cCzv=Jns}9T8iH}!)-b!N9TBsABJJhx>K8IiB z?R;~6TGYPy!{n$RLRzmlblGvP!(UZ)QXS9bc*hW9t72qS8wY=E$8I__Jo_bVHP{$? z`!nzGkf)Y!x^~kR?56kzS}_i{lZ$z~CpI@#T6ik$tjAxu*71v8&inGKmi_g5+Ns6P zwhEXwIri7n`HwzEh`nc&TYq^L^+}sQbR+>+xcz@xqCj~ zoe$9+7Gs|)!zLG^?G@lux@+l-mCGs~-Rzh`JIBHiY%B7KnD5wC`mTfM>+yj|aB?gp zn)trp11(#DY1I9}LL<<0Sci50gi?%p}(l_w2fR|GusyqFU|B7h}c# z1mcK^rLNYbZ{T0n0t{;L8E>KA(4XZ;A|0>KU+_Tjl8UE?EFCgJ@gxpM*cFrePsgpXtdHd*H=Py)_(MoxwZx!zrK%t zdW&HgTcUmuXXbBJyho;Cc9vs@7q7}Do=x+3!Hf7m;Cs@0j+Ha^YTDNvt6+ZJHXnPK zg&T6<6Ps4S{3+#K;jWhR7T~u$IXXXY)w{&3t)d=7MUJtpEA7p(6Z{mCOppYf%#;3;^Cw;Ah~le*H_(!0&##IDQI@tu%g z%ZDE0647|7;6Yr1VEHici+FrhozO{#$2Y?uze*mwOMU`5*~Xdx-)e^kuLQ3498r!c z)w)Rw`>QIt9s=gftAFuV<#ts<*UAO^5aUwYzqjg;46RxP&t1iL;)(l!cb$;mop{!G z#=5CJ^VV|c)A}B?@;2*C`-|i&=lkb^f$gJ{7XH(3@h8ETOy6?j66*L)Y@Em`+EQGC zT|>`~6Zwe~CsGBk{M%~ir9t~?J#iv493DyjVWM1u#$Bj$a>Wt?HCn8(3f1Q@P zaeQ~G==P6XFYjN_{TqHoOTV^$`^NiZU?f-%{%hpPJFWS3=Dcy|$^qaZny97y{8T#+ zkNBI`39S)%*mB~XHKG$cxz-5RPp%5w^!Ae@Cvwjk;rhvqF{qWBKg6!v3u$8&JVmzLO6Xa?o8F9m zYX!9WUGn36`5fN@<^lDw0v^(iZ%w{(5t5HgxsQ~K3?G})W^i<_e176Z@`bA8w^+Hz zXeY$;TH91FDS_{6J)4Qo_fgtx_a@3;=L9*c>sFibFN2f1rjHAMS<-KIP&WN6-l_Wm4CXkJ{`Wj>$s{h9&!kWR7cxD2ft%N+ha>%KepA}=^R71$xS zRV6SU&GDDvA`5B30+h4jE~v|)2V?99!~_Q7uPj_oRS<* zr#4(C#{p`_4f|fkrS7#OTvNTc0QKUgyY=Cy7dMW2aUsr+{gnIEi@U=dacMip51S(| z9rJO~YuB6SU8;I=e=yI#G#`8pGczys{q*6CZl1}Y&-0jDf}Lum#F1y}Th-$2Y2n-P znN#kcpMe+r{H?g%l5}Ixv-F+3Q&nTYPo>v4qox;sKTM3zFMdnC5PbS8@Do$p!pWPS zj2X(Q^%Qtp1)oQk9$p2H55l|kJzK_$#%Gr)?-6sz?;V~1jRvMrpW&p}7Z7c*=Jol` zT;6G?w!{v6q;mPL&rF{|-mj{*ry4UP^Vs;0=9WHn<22&6v<4UUF<{O8b9QNAJ`c2zEUyR9}qIajdu zSX%q1Q!6P%JGoB2w<+D#=*suM=PGVOR;{)VZGPX3+bEUHSO5Tp-$}O(Epa$%Ol8*oBsFNYwFYVS?i%_aUOEr zTRWk@4N0`BzVO~FD&`zACU)#;%B>`Sb;l{ z1K%WG;4OI7U+^8R;J)x|*HsuwowMN$r6(gltyrkKTUbU^xCsEO0I%8NUl=+h1%8g^06GleonGCdL#=+l6&MQuf3sstmLoLd)<%q zk9YTmz2jqDxu+UF*p}Xyq3>1DpJ)uXFZ{^c#4PMou6DbI-CwRXx>bX%1wJA^T|wQt zOk|8g&Z~3qBZ6kD@%x;|uWGxgCf#4IMMmA}QS27`iZidh)g4JEwv9X$s$DlYJk4vY zb?e3b!wcqGJ@3A+{#A0V$?)RGYIbhWx3Y{A&jGjX{4VF$ZYM6h=wu|_KK9}(9%scc zK1B^DcVF`j+G)4=Or{k#6%Wp|uhst;)@1pNb>c&tXeQJpd{p?$`%M4K*hlKx@R`Z$ zH_KX+)t^sW&x(Coi@jm|mbNJ_o#asXh#TRB=v5}0zN#s|sLdGhi&Ys5KSQj?4d_@@ zgR_$QFvY|MDBN3Xyq5{#|46WeXaq06^EJ>2~~ z^N_q&cD~&7@CTe{aemS}B77w=Y9sllzI)($e%V6=4siW_)}VvbBwB0DwPE2Gwis&_ z=g$2ZHeXWxsS)5|Xy7;8BYu8y)7O7;L%cb3OdD|yqWKc^BJJMct$B8?#>Jc9TZ-jL zB#x)iLw;Fs9rTdbinyN~j`hw+=1J@x{Uyd!Lw$h@xvsp6^+otQ;h!u&C)ZC^zKOm4 z61Omadiy5E#xM~xYsI)J?-{aAYl1g1Sno*;-UqEfC%?EET}!OL?0xtcsve!@a69XA zx*uMKo}lHNG0mU6Mt&NNO@+2ZQ_sQ!wO9QX=ijpOA=tIFE1)%K-O6$4=A?g)wd7ne z0v*&&QtU}nax_NZM>~myN{-T(Vg#g%(HPx5@GG2`vmfeBZ;hUzoi)tOlk7ViiGA3> zv3T;gz?XE42C)Y%$l8a!BLdPP{S2DC9(rgTh0JaGN^-r!W^}M7D1So>`BB@G(TNta zH-bjm=N4SMMymmm>Wwq5;zqTrJH9QY}5pDRWEt@y+ zk#$$nMi*_X-RJn-=zOz19{nG+BqE+6od=-XyLqmV@hQgTe9bLtQK?VL<*N5o(|8lV zr+6=jzCrJ`QFG1C;V>jTkaudRH>L5_5+k9pX^b`ej$>Ty?0JNf4&Ycz8>@huMSF?H zP;+!OqC?G>&WToVlM@n*~r4Eymb_#g6S1TKP4&41ijs~EI) zU}DiLaH)0R;v+|h?iK&wylX`_YV&E@EJqgBx83jjl50DV(PF>zy_oOx=R1ctQ!|wL zE}RQ*^WJmzZU2S2zw_Hs+~lxEy#Q|Re_pb%9iQMs_Ll$rC&{VGJ0+b$nGx5y5gPn} z^-!?_2a%yCd&#W|A4BFk;Q`)?1);7FI_V+!%cogByy7YCoFC*p=_%%;!%!`v=g}z( zzpfoYd&by0*RmzlJ#P+Cn`3}+@3wE|yXdv|?ZsBM2Y-a4*wN&JG|Qx>B);{JbA1cf z$-`&)jm^fd{$~8@&w3u8`bGHEOAhM&j^wJ@_|ePXeg*!f#JO%2zrGlI`grWi$N8pg zywa7=apD}x@b_JG*W|7p$ernh=p&)c%H*`5@?Q@#J*}71R=a0ta0&nAqa?csHfdom zd(YpHgXaqG&|qc)x)`e-BXwvO{;;c@b;x~gtMc?9TNaQvf<0I1DYvZ!(PySXM`51J zr7dH5W|!)9majC{Ok=O(wzHA@!v?cQubR^J`U+!BW{Pp55TEAWHXY%|wd=&@ewQ4Y z3r&kQkk__WGG{WeO*{{cC_lM$9T$N&&6)R|dSsG$bdHR-tr|Lyz3#pT}rEhv0u)0KZXQPLi6u9-^00l0TMll&F|`*<8kARP_ievxs!YU z$obgI&5+{G%fMw0vUmx7l^#H`z2ojqY#4j@Zma#ZJS(|voP)=I<2jQUbkXR}9oRCu zBaG1 z^GP?WwYu2JTckMAhUds5#@H+3$$#75=#GsO?QL&!`zE^4dhV_d?)ByPW~~&yIk%j59W+x4?OcoAYc6__t3w|J*&D6wXXUO@ zJJwnaPk;AQc>2Z>vOz?1&`JJ_CpJKPnj6@YO^1h-!8bCQ3mbr^YiBIx8(#%3(jnwC zpH#PQKKG?p$l|(w-MFX6@PFEZ@6&GlWn@=RgfGv8FRzwgl>8jwotnEz@a0+X<+GlL zFVA#hoqE5cZzsW*mE%!-IS+c3&GKgaG8W;ZvxjePrtLiDbFwp^se5^%9=_~_=4;`{ z=(hGfj81q&wz1|7Wc^WAO#d+UF{cg@C!Z6W>9z5`w2iO1-Z^s?sxvs_@RTvol?8aufl z+q&@OZ)S~H^8y!aa1 zu_xC7AFF-nVi$03#OCiIhH=%vwBUY^zjGt|Px9YbdMMRYoC%zyyS@)!mwNnM#!a+i zPip%cs=ae!1?@=hEjxzvR_<}#B?X}yi1)5y4Cp587#@7vkhi;Y8G9vTP<#+@#b4Fm zylT8+ATpn!-EQ$VU87C;vRdyl7rQGM*AEyM_D${U#n8enkVymCX?i#L=V@TT`@bP{SyE;4iq_Y?!<3)dnwdGm5n-aAIt- z?|#mTvAN%gvB^4Ql6hn8&V371VZPSnP{BV7*r{qVWo-9>JX z+x}WeJS_EzktLU$s(x*_*B8Y8fF3^$*>gDaa9DUXG9q@ZeUJ0|yTZKSyJl)@#7yoy zK3chNew=YNJZUvN=?VV#n*Ja$%B`8?AesYD(le{!OM31J$&Io1;Z4?k_>*;?U+Dpa zuh{35D0a|h53||>RHiQpIZn5h;W`w73?O~qNTA~~T?)3>= zuZGtibaHxXttqbq&dIgy6 zhM$X;Z)UzWnhBk&&E(c2&_zzAJ%~S1JJHfAXim~Uj3yDKwjK>+PVxc4-)q}&C;7@YP zQO2j3D)&_2>rru4Vsf`v+y-ZLlub`BD}fI6t)-=Y&r|SIX0oM68 z&J%V1mHyWG8=U)ezObKl-p#q}`TJjuTRdjIQ97L3yk+D+ZXeK?(M0}51HYcBf&=_g zwi-*9lvOj=_3P2NCp-6japX=(fCr=)-I;gfb&;=9_USdoCL<(Xlhy)1q8{j*)NtAK z%K5j(!cqP;skEcq-v_y$%Qt-28h7fw0lc^Vo5t4LGBQ)8({I5xdnNsTpE@ery_rw9 zk1@7AOOD8GJI{OikLZ1Tn+h%uk-uy@d0bk~qn_62!q5=%CCbM$d&JrLVK-N99E1l9`3itfP0idpIc_X67L(t1-SyOk$ee0?e@DDg+DL7v1b*9@d*snx zQ^IrG?pk<<*3_}syzj%7e~j;K$F8+`VEww|95-UizYkmf=H>P4-bF9jh|cmpbe1|l zs&jOf5j9Aj^=dATug3;qN*joQ6# zENddVqkZ-MH`bAR<$=9^;~HdvefxPQW!A;PO`@T7F#>D<} z6DD5tO2(MShL1SmO${vma_Xf)#TVk2Fwv7RqpIIE2~`)ql2P^C@DWvoKOTHP@22wZ zVl#C{YX55zQh7Ilci;7<1a7t7O|{-7M+@&>ZNK}Q;Uk*h_0?ZCzR%n$g~zQaGe>ql zM{bNqu!D)-M<3iP&1st$+gjeR&$RAS=FT{@;L@XPnYX?XsUdSo|R9ibaPtgM`Di}7JhN!LE2eC!C_pbaky5(WUlis$Ip1G0c%#9(@xpA51 z20qNOb3?pEb7u&)Id}g15{z!~puVna+$rjNSLDf2^e1-S`?=o6eA6@iIkw?4EbQgj z7-ei-PTpVX&^^zh&&a`Fit{|Le37W{$ZrBLHyD#}OxvZ2$ak|?8}iMh&YZ!j8w-t- zKdB7dZ5(9l3S#R#&Nh>SpSR9qJaeUWQYbN^NBu& zhxh&l-Z>mT1n+tuIv9ejYdLx!>5sNT2Rnw@erAH3k9i`Wicf;uiolt0^KdTt;ctPP z`V(6t(}Ep*H5PX7LrXpIW3PTL_+173Vrl0td`WkZGif!~Mfa)&A^62ZD+Tzs%bp}& zJe6y*xrsMVf*%VHj|?!@G*ai;NHt0~+;#UIdjA+c5x%L$Ao(+Qk0!@4_-sK|cjweb z@>zcGnaEGoUO9TM#kBK9*5cf8BvSfK_PK(GI~L*jb#PdK@A-9n?=1RpXds_{)nHR= zB+fwlidqZ*>0$Z)OOGrYX#UWYg_{H3k%1q9A8Q?jm$v~UU0d#4%kG7z)7#)5 zvUvpy@Z&JTCpp)5MIYrKM<#n1yN)GCv|!uzZ$jV2ycHkIy|bdrhum>_8nrf&?JAIm znTLT5-m<5q8<3xU!4Pz-ob%4WCghVQWRdp%#uVGunGt>+d^`)iY}@&rr`rbEHqYq} z-#Ywh^Dm*-{Nwy@oqxUO-jQB&Z>Gbyn%UR(HSdbySISAY{!-P_OAl{kJgV{H<}bwF zw6Vb?Jg~TA~I<`IycqC>;2A`_0G;S-@!gx+Vogt(hok0SU8l98lD+& zak&0;Wby?1^hM6$^7kX94>5;DS3cJMg&cpO?f)LTH~J^Rq>%X`S^AS`c=?PWsh;g8 zQw?aZ?AO$UVBQq)tM&FP)~{;tl&}w(&VHnreaYAGbNniMp})h=(PQcMt-3dir-^wZ ze?5HF7ULUNI_i$-KItH}8{eMDd?L^6{x^-q#q1L*sSAAh^4bh{udyH5O#6-Hk3>r6 zKN6WV>W62(|J_UQYq07O8SIs8KihXK|0i$Y5Oyi*as)J&MFY>_YvtlwKA8q|62Zo3 z@9)lzgGlogY>So8WjFjs=wUlD`V@H3EyUPZyak?j{jbhX{Ra1jEV&)tWBK0&ZglR~ zFm816YZT9Avd@g*iy*r+Hs-)}*zzlx+uLJg&}RHRnjIN5hvy`N%4RQq(r1hXGU*p3 zn>L?AHf@KeX)g5j{R(H#)5gA|uls%Zyb6|WmfcW3p=Nlk{5a9|DMo3H?GtPruhua- zJY5fRd^@lzM_>1ie%No}vAg)yKDrVegWwa2Gq%?9zjeN`=Ba1QwdQY5rv8v$9Urv5 zsr}fH@Viqc=Idwm{qUOVH+;a#=OT5(NY zj30L=Fh<{J4*BEI;mq7(ec#T#NNrIn4e}{wm|y`|ZLXMf*MZaR(hg?q>FYW7+%7 zz<*^G_d6Xw?gaLK6+a1P+zwn7BO(9(X6QIK&bTIo-X`~(taoPDQ?{HVKT-Ks4-Nkv z`6SolW1^Z>x|gjrwTqZ9-f04ciusbPL=C-Gt!Xn@|2u&rvZb}>ng+dF@_072%8|pR zznTxvn#u7vt|@OOdVtcg&?0t=o?4j1xc9_&s2=-F83`-UCpsQ$>9 z6W|%u(1x{Nhu)-177a)ys(R-xYJ1i^-~$Fp$VHDWEq`q<<347NuiNu+^@GZv`mQ%Q zjE_cL>WW#^WK0e3F-Ht~_sdtmHV}R=!84&Q^{>?rp72fxzvoR2PxPeJ%_*A0a|6Sv zo{@u2oLBrBeguI_c=j64#JY(*`yO>V50Jb4J#$dq#aViG5bvEg=)I(?UfW|13>5P0 zCB`Lnb9wfF_Y&|pD13l?hjUW(tQnr`Ie*ZBenmVxD3C)P)j}h?F8ibE2UYLr5IGl% zd~@QDo8I_2MoM54V>xaXzLsrd4tkg4MaDRCs9s#Byz9r2{qFzxzL)oyDS;GEAbz}= zoKW)dmhdZPN_-x+oAss%KpL9ai%glk9 z(8$fEuXR6r)D@hIjubc3+XwWkd_Rla;wRZ7>lv*Rd!gY~#IZ;(cN80gbQXDqqUDru z4*sB`<2-1$x2|HpnbM=HaBG;~Y$mnVCnW{%gI<-#m-u>1S5a;Hsu0dfk1&UmrL%VQ zB}d_bY4kzgRzLLZqu5;Z?JV>qtB6}sUp{X?lF!i(!7K3>!Hh=DIq=y@e;V=WkxgIv z8}!QIVNQQm-)8scaSIm7R(~p;z6c(Ii*omBUauILbMvN=qi%L#B-?iub(o}^cl9}f zk@ijKv|IO}L)d~|0GoGEdiTfqM^A&MK568Xi) z)5eeK?=|2%pFTWKzoqwn7ktYPM90GGCD>e#I(WSryP;sah5olOXE%aZ_N6Db(08}b z`lk9UdzIVgBu58z4R*!jNvXki>E}fJ1(G~T7GC$@4@jJ}gQq7a4!5t%=j~4CH#^%rS-UMo@NU9_EUl>!0dPY z%Z`Hm_2r}3+yv`d@S4xs+>zdx@iJ>2_Vp4U@N7cAm&tYIIhxP-!I3b|&lsnXR+4zYQ~AJGTz$b?rwL*f@# zSBQ3W?DB+QFP=~ZY&0+DJ3OHZ81<%|Sf1d!P>%%@|oXcCWf^ZG(t1O1~7IzhEZbPz;Xo-?8{XZ45ui zG{1CM{%S4o3)KdMu^)T){_Nog zu$T8?Q}l;Uc~vJXE};FH@y}{Ob69Y_dD}e+U{@+?Qe} zHz2FmLKo5{dkkvB<8!MV!bh+S%rlKobm39Szmj%}xSu=c5$frkH~?^O^3S_@v<$(x{9j_VaO!2U=248?u;3T&I> z9h}SFIF(u#(q*vMEk%y*e*NO}Q*YqjAMUyfeTL;L61dcPM*0l=#L$IjSo(|)r6=-^ z>?{Ir?cQMl;i|&xdpU>>(uKDNU7YZB4dXxff4O@T_^7J8|Nq{Z05eGl0|`mk%tkc{ zxS$}Ug)$^mLr_$t+C2eWCIk`Gic66pxCDZ2qbQd4Cn4x#GKgJ-*7WI90@yZ)+9Ivi z_UU6-Yy)w_1ri14|Nh*CnS_9~&(gmB^LpLay>rh!=X}pO-}61+?R*dVBOK! ze0+i%q2cw&49_4l2(N^bcQAjm1;_sZj``kJL#rd)v?(O=FIiGS@F= z&R>MS?hEMarZzzjEd7_CxEoiae}lefs9i&_)2Th^AL<&>za-Iy9lslKl5M_#wtom- zOUIX=jbHFg+2#jFvhgLh&wdr|4311k=Po;)z8%sRTP8AA+uWG{|Kg93W57|;BOl>g zEqlpPbo;R2}jILYXk8Yl_J~gmC?P#C{9PLj( zwa~9`ZIK=oKQQiV=`)r02zTMJbUpEV_W!SSJy|Pk-;u@iT^2B9nYQo98vYN{{~P)( zI-5EEGyZ4rU--2Y{Q8CSEL?Bacav{PsvgK`}O~Y1k1-H1D}#U`u}Q7 z_d9-D%}|4PQLol1`+WIhH+sR@1aP+xINXNxJ6?@x?fJnL6rr96 z{QZa4%FbHu9kNkA?w`B;_D^bhe&kIEa*(b zUzmU3$udvIuHT`{{+RdDUlx$&fd(J)q}7&IR(2jjU*a=|t^5ezjnc}3&T*{K-{LCs z4yi?UIy{Fll&&Bjcx5*f->7>gbeR1C*0a(@ceO4aWE~X!3b8h7ja+r~t_SpeE^DLY z=1*E1B`3Gg*N5&vX9zukPvBf6e`FbaQ9JODhJLRw3sx%L4reVtSB4)3F+bTy=X(xW zX{8U{Sf@9id1v|3Fn`k{f5cv^y#A%Z#6t4Fg>H4aId~;9S7Z}@@t3f_F`M=wgAZiS zNOL>7W#XFb+EsZcKJNWj;`7!_`H}hP2U(+6wpM4I2K5HW=-fu=zJ5(vYWf#%zB8`HdVwe|8^zC|&3a=q}gff$Pw-cKkv# z2Yv*<)^@hBSu|Yd8MXoMddu!RB=Y3b%#E{8-Y1d`4z>ax>xOkExAutSLtjOYWt-04 z0-eQAU;mRQeO*7F^DW}lkgFXmZ&*$J+Hm|=AN z{7lwx?2#esUf!9n`|@vewtogbm#d9=WycapjrxHW2OD& zlKr(WUHZft?4sXn!xoamx$@XK?fvRQBbRBPX0|a_yj3adR};9?Lx9xjK=>__c)T*P(oq&&6J;DxI%{jlI)w z`dMvOKR=J&zuapqvdTsVY5XucZU!)`o)Bm0`T1UUiGPKdbca5OZh1klK`TO>b>@do z{L8@hc63YUfMD|x_;(Zjs1=?@bXMmVibrB^`&b`1kmb#&;=3-*4b6r1e~VgpvJP7O zRkaPgJP1BbM)vDqZ4eDlV%{G_$5_SsTngRp$9K)x!^D@0HkJN4I!^18D4G|gToG9%9r=gxxh#opsK-XPxqc)d-G!y2bO?Z1tV zdtSU5JfGhG%z2;B`(NulJf7aa;~Qu6g1I zLuO~9-F5w)iW&#E?+{yI8NF>sV$-~E6*_5446=fA_>*?W-UZCF9<)bOr_r9R_| ztbxXucKR)EVQkG;T%Bu(^B_Ggd)f<^`s}^R(#^=<+k`*O?_4*tJ^I6&qhS0R1THv03+tTCgYQ}by{ZO*Q>@&O*jb5+i( zYsF(G-d@ltI+KKMvJC!K|L2?K>@S$|llf*==Q_%foS>Ki1*H2;!=iWUm)lO$FYbN; zPk6+_*O5Whm+n4*Z&^6;%cl1nyC!gMUJidgk3Fn8&<5z6byi<0{PlnZL5oG;V@l;<)EQBGuUh$*1LjGw&Ci(&M>&v7a zWFG@^GbyyrRx@aOgE`c?SGE{&SX%z{LT*tFc(y?xM>W6u=_iv-uM>w-mj1E(B&^1<>6?9(lKVP3Fk&hXrGp4w18;kgCD zqFOVl?8&FgCp3DqCLlvjU>{;x?m+X{&YOZo+dM6kHa?g&Vb`s}BI03|J+((=_{*NZ zBUrR)L)L_*{pAxPPiIZ|?Onm5=O|~>dz7;yYl1O6XFb;Ln zYuIum`XeAD-HW$=7|$j~04 zabqdpXJF?%+gP+0KThRWJUchP^o#ZMr3tTR`)Ots-bLQ*WMUY2|7#*V{REwHsyr4v z)FpVN<14?0I*?BU^J|5s><}G)c);kYXB}9~{FNWZ!5^8c7ilg-r&=3~u2SZD`r}5| zYyW0+vA!bL!4vRJYvGjUtmBgxwL?E!9}vwL+#&j3PTp5YS6tQj`VWI2Un1>yr0Kn2 z^3d)NfT@kRmXZerQ|rqEo7NQv59b^8Gaov?X6**rs&DtQW{MX{pxxJ8Ypf0;LkWg8 zp1~dPxC2|s8)UxR>=|4;j=WLIP~P{?e`swizv3HbMP?~K!|n+du=;ax!-om zO~^mF+(my^x!q&Ox^aT8B4+Gs9&d+i6c#_0W(;b?=bgP)y9>?qj-BwWieLMN_reJK z2B)tw(`vPscO5h{4nT>jt9x!aG&oxSbh>}~lk%w{~- zQGOdZ{v`1--}0UvIXAg~?F+y*pSs^-{rc^;rA_SHI{YHfZ-1tBZ6J5oTAgYA9em?* zpw|VrRd(j{K6FPRDhng68eVH3v_X8F;@D~(bmQC3`jMGd<4NBoSsmVDa}I6Rcb9?( zTRrBY2HM>-_U(4c3#Fu4=Xm!lFGzXS@a(1VJT2fi{O{rYlu^LhpOZP~b|>%r)_KyV zb%w9>k?wiYiH6RTHfsw^Pi+-#JKcHG1^=BSkj8oN8ZzQ|MXt+HR&GLG}% zT`uJ;aK-h#0lsAg^I!DC@00$+XZgdqesOx&h-|EM#R_)QHK*h^w;q`M=nwK8nC8je z30@a4FB5?+3E29}7m+%ea(1qrUpcQ+I@rp}LeAax6}mQA@pXmx6ZnA*{b{6ZS$St6 zu(9@^5;hkG3pU`4hwqbkyi#D+`g_b-e+5SecHf=Q5b0(P^)W8gyoFbPNjj1Jv`c)J z=HeXiN4&keUr(__#p7&*H&gu3AU55?*_?yRd{cZZ#YODN^Tfvyb>oK<6Z6E`0jro# zivNtAY*rz2Wd*t=&Hx!(1D`Y*--9{um-6+L-%TZRsu7vhg}n@Wv|#S|KY$rM_z9R9 z;~31y#9jmXNk3_R7sEFtB!y>=|DhGb9(i~$bN}?b(+AA^D`|TTy0d&_YPB8yx634s zsPbP6oo>PJKZW)i`17A{m5r`6V6eZj<)y868BMa4S^3!$rFB91t|lM6>$t6+)DHGp z%xX+0#*pC~U(eWQQ-=PRjxok>^%f-)BWBMQD7heo-(tS+H7h+5`wx!_43UDJ{ceybq zHeYkku;;6XGQEEpez}X2iu zYaKG)Z0Lq;)^pLXR}8oHT+&5lq5IyyiTT9dPFpUL?kdxg6Aw`T>&%_z&TaBaWCba=|N$YAXFZRm7e zSmyxKXMr)uyI&xO+B*5}@W|#NxQl?xfHt;yhjr_-8Nd}}558-|aAM_J^;IhtCHv%* zruIJw-nDV&ksa5Jy=2rW8CkF`=3C=LnqpwdHejbMBrTggbatN&i4-t~#?k1ORkZU= zp4scUxvRryl8+1WL6_hyznYjy%oXv~)qJy;{UCzfm1k1$Q3zxASPX7gfY;j@*Dib& zc38aakjT^6x9ZK#@vYds4*u5%0lVGGZ^=!ILf`rzkZ;ylXYK@vX{vIRpZdp!w0=0T zqr~fI4YAI@K-ZAy(73fw3q z|BC;T7D<2I(t(cYpiiU=-NrgBzn}8y=Hd11tG|H0lpOazwa%Vu%__$aaxeZY8p{`f zv+X&1jR-&2eT`VN$zCITzqQYGdXWFqrQ1$0##BJF+t3;3wZ?E?Yv0IhM?d0$N(BD>cy(=8Q578m{eGm_?>pbeS=ZgApc;Suck=u?( zoqiQAbe}5=75f66sQUdF_yde%y*pyC2*#;-;hBGt?2A6e)|F>OcI^SbKZ>$HHr$+# zoOuvjgoj>K4XiHzA^iEDIAiNnanuFRbm;$HZ?GwzW{4(zmUd+m-@Y9`0UtKF8s_vt zo&_U%)UI4)Di_Yl7VQyTRZK&hc5R~Hvax-&Q-_tGxqOgkH~;@-J2$d7z75z#kIn)A zkg>{_H7crO!d$@^~YZ7)>>mg(>RA~tlo>x?W4a$2cc7uvC!%IL(#Fkv-U2# zbnqO}?}K)pYeb*?#<=gX{%kOUS z5C6$X2If8!!`>C6~+U|Shf0y?a`|S2=UC}!?y@Rxt zqtS6mv}Y@N2liYxYc7WxqvPbKRPsb@-dXG7x$qs#=Pvr+T}Rdc|55tA{@Li3F49gH zhd4g~e+&<`{IOWM4bq8@3(x%Oljds4a>%;ac5HoiKKc_M{%4A(y5gTOpGRSPlO0R+ z+ur#g zkj7ol^5xXH(DrWroJp)ND`~eS2gCdJJl{s^O*Z)Ij@>)_-|)Ry-->Tcn1Ecvd&QHz z)!~iTOPA2c#~BLjdpbU4Pa?WDmp490nt0=5n@Q=h7`K0&;&qEu^ z<&zG5x&%4zZ0t#g9Gy&!bh6M5>Bx6+S6r6Y_}*@_XfnQ2oVim$OpJE$9Gqj%urDIr zkIEFy>ky73b55u1o_mJdow5}VLuE&;vgPxXM%l!RdXhB&odUirhsCqX&lg|o!uFY+ zvVGNwONiW{JqB&;F?fylh7l~1Ud%{v?mp+9Y~Q5|@l0o*{YH~BQ%*jkN%YPjUAiav zn=0P*v50j3c0TF7lW220bOD{nX85t9$+8_lUqmNmW3hb>kXz7S$XBKU`B-V=WEdZ}V96>JEb-sYy&?9k z3-{VneA@;*@o)-8pTYid^v=HiT8r&?Dyl=zZar%vW}3ZcIM&Aad@4un=m}eVUHSBb zzRRL7)-zYtN9vD8#`N#$lf3IrZfC_Q+L`aO+tTCQo@-v4ZFQ--zXty!06P z&ZM2286%rlB3>Uf>muIC1}$DEL_fN7{`j3G>^(3oKj+9h=dD(M&51q--uxTX)OyN;_;H@KN|UGv4r#n+yAJW(>5{ zdu6On4}E`tI`@Ms8#jId-ruG(Po5=y9bS$8l#BrV>gw2NHobwbLbm+$kR8>Rr>ZyV z72aVVFA?6k=hVgU?KS#N_|ZroWtn{~{Ae}$@$BHor7;+V9|tnRGaseBJ@Mn0ywhGE z^~0@JKe*@Gab_O&RL$pP+8;T$q^V{gG=P4vbzG_N^=Xkq=Nc#Q!*0*X`F+7@MOngO z#xHML46X*@`_S;rKhbwb4EEZymgpOAY3v)#iD&s{H{a|8|6gNXguxBXgK6Afz%IL0 z?I&N!MX`Kp^RpxDdADi^=U!TJvUGC^z}*M^RbS>|I`h#V`5XL!+7V`4TA;CN$Eo@v zuOwE7hjs9pGw}PR53l+l8aMCKBO%_&ULM^M^Jmw2neS1zOY z_Hc2AblBKr7~x4atXtWCiQNLP5-c1$N9xjv1*i_*OPl|`V4ZQp`W&hGCTWjIz%HG@aCtIzA|ddvg#?DmahzMnoaxWt~53+t1jVxG5@{%_iU1_K)6~1&ut9k zJS6b*+mx%ALP5m};=PCWbKo(T@$Dm|>7Dm^_IUN-`*CN%rV)cBQvAc}& z{$9Kg58TcXKW0s^$t$RC#Ua(#0>=tKZ10ajOT9RFC8<;;T1@h8oSj ztI^|leB*UK#jR%qEjW&HcEkksXe}Qa8?$2i^)a1;%y*rv%lNjQR8EcQyU>>f?Vuet z&nMbs`7~Mlqx8wyw7Ug4OmO%zkh^@r@xH;tfgDV{GV~b!L?f`$Fan$zJfX~=R2ww2 zUS2xSXimef=)r$}J35w%m+bwI(kILvd@>GP!@8bI+VZp*{Gy#xOKn+TM{4YSu4JNV z*m0gPS9^IMk56-yMw@?0nvJI?pVNM-_k#KN&=;A_blH=i?_wbYt4bB*Wp{dK)%H%!&6jr&e;Y(*N@g(cbLbT zSMA(I%QX(*#VnUbmL$dc!y4y{@%wh#?0%D%82iTU%iDT<dI%pwq!AmFAFb;#kvl27bZfo7k4$mCpwEGg$#hdTIUS-SJ z((eqm=7WLFi*>b7<%RHhpTf5~Ulkl|{=A-P_eAc~q!TvN=Nah!weMARehHuM+qpgh zw*;r)6P((oJ5F$Feo=4rAozr)_Q;~6*$zkN9d^RZ?-i3j z1FeJa^=I!KI`2B-3YdxWq%Zd6q+F5J-&llQf7YV4=$_~kcaBRZ;p#Ygd)H1Mdfyy& zVvQ}<8apaH^E<#7Pov_?(VUTwKov0HhjIe8vYeemr}1Qzw%$;_ti)_C?8KKbNS~|Dxxm`U7_z5o z>{e)H5jI-ks``{MOv+@Om+z1Dm*(wM>=q>_`YX0?qs!`hdvAwu*b8pQ>d&xn2%XuY zgWl}I_NT)`vzKIDsreAU_anXxcaEPj9sIH7QORm{+mt{4d+jy(1$Gp*NxpLR^pX09 zwoO;vO|&`W2{&&emdzO2RMZ(AXX8`v?Giua@|zmNa^jYV&(yvFjnPgsFuszpS>eeX z?_+G`o3a7gT1g)luqNld8tcnB=uM^;+27RbaN>ef6qt1=gy^AIrf~0{jUVy4s!0FANn^BdRn$^ zN>MpFXy3rHJJ21>%6lmWpXA?b(AEBtHHmnPh4VSXXBFSCBktC0`b0Fe3Z3;7Y;cB| zIGy!&QEg{*R#vvLNO9AB$d0~kW}VKaZektIH;md!#!q{BbNMg5PokNMe#HkI_>v=I zPahndfbHY(sKLer`Oy7{x|hGu9j1|=3(u7OBrA+R9WbjL`KS6qcRo<*@zfRKyD8tv zY|fd|{`0D3`0){sQ9gaMDHEN0N075#vl5oP3$H;uEMLU8aLEIez*30sXaTU`$Ga>0 zp5QV3M}Hi=$2cZflrMZZI%|)$Mt9dCTCxgrMs!|d$Nxg%(?RfQ591zBcUpm2^k^FN zr#HGN`ZJ2Lgf}XTm&JU;;Ul3Foy5ca6LZ4-e+$oLz+`~WCwL3!oSqHxoOlO5TkkTR zJGx8#HxndVl)pTgxt*8|ey}#Xa&VzJ_=3b7!^(Gp*CIb-TD2ZH<-;l8QkQ>%j*iv5 z@?8PHZJsxN!`9f?Z3o|^)wS8l zr*D4DvpaTu7`s1ndAVNY(wx^==(2UYc8rUo!=$UU^}9!rvvkgwXqNOC@;z&L3|qrZ zBd%186xqdV!KD}gIc zCy*Gn(XW~i9Z1c8EYU>xC)Xw=RzWyzLD&T5A%WP`vXUp7=3KsN&@NpI_ zZ?9nAMA?`?!Np?&=Q2-S_&(SG|5iLUFbnyi#$$9n-PeZm{r?7>Vc-k_=f~?m8O~cA zI9sf}DQS^k0cXt@#sm&d855A4C^!$)n5#qCV*)$R7!#P+Ftw;McVJW5kgP%T8WM`K zZ$8h0eGRa?{G8%*97V2mb=TqLV*{s36My);${#`b!|d{n>ahWpuXI?+X+~rq-}d|P~fjl+Q)Hef^+tfL4nttw0Jm=s=m%a zfj>HFN8N;Z=})G9!L#X`p#r>{wJF3w;aU19-Ma0%yP$kfK%5hr>>N^ zx{_4a@?|giX+v*y)%5RPS3dt$S7S==b$v)3YS$vCuIPqXA0OkL@9t$UH6`?3S3Z3e z->z1_T~{gn&|ABnb?Umxsf)2YG1e`r%M*U7a$0JjX8DGb`mnWc_qu#n*mdQ9wfDMy z+*%{xu<8=yJ2kd zAzzj9-VcwtVkPN@xk+=rmG=7{J9)0ZL;0G2bxu8RH^k<|8@y9J1uxt6_{{a)>hWD? z*E8+DSUok@cCRP8JOR69f9#gtx??vRU7h6v(8C0f2?sX0`fKeklI~3FXn7c)BV?J^ zia7%opU6vS>-tfH0+qm`XRUL~xtq@o3S7fGJ*y9_y#&j>o7$FpxJ)j?+6Q}Rjre-; zV7C90bXA{YZ?l0sZ@;&7p_7PdP=VZ_cMWs(eQE^T6TTZpq3@CCnmvqH?!(bFI!8l$ z9K5{K{_S>rdK%%UWP=M?b|3gKt>wtoR|B75Lx)rsF80)!oK@J?3yhcWUAWp#pQh*S z_VYzNd#FqGNH#fkvt;!v=)cR+V_gQ_z7(5%f@PC6eE!6wNSQlsTFmC-Sq=Y($z3%L4Y z`J{;_|5F$KPn=B^LI(4EeON#|kiL;ESTef$;#SgHr9blo*gM4D40H>wzN+<;WHWH# z*@vQQREA`h5H^T(ud%t6y+`dv@IvX;!uT?~X?kCi5U2a+{IC_7z3cwBrv#gGy{_Ir zt1t==D;?r@4hf1 zbw=650V#I}63(eQ6bk(-&*qR)UqY3QmcMSUp?h1n)ee=QN>K-_?h5`@Z=+C1^js7QEV=*e$BF< zm)JfOyD4)JWwvpj%@w$-E_Kk72T~W|WA@^baB9IB(-QN~C{0u!+*Iu;dVp^h-s>s) z5%;no{jPj_$+A@SNfmi2zu_rb1*~f4f|ZQhw}Jfu#_eI?TI(qaJ?bgaxmioM8_n{q z7&a_``o=KgX+wM*9M^|Qy6?5LV+C`sW_z&tLi8E(nhH|Q*Z8nXtV{2^jWYoHJLg~`sOoL8jLnl6s z4re=b^tXH}MAJ|B$<&*x1>=MCi|D)T z2sc{zG8jLLm>xAAUyk3|eXqQ9KJjre1~WG2QpO)78&hA1{>S&HYA^6XBkI0L%!e;g zm)0*1w_0-(&)8>c{rHLbw}B&kkB)L+gU8=duRNs52gLZ5r>+@zL)D(T!T7>&WnGw~ zHlqV9q6}h0a)$HZ+D+E^zG)pg--bBg9h<;~`LtQ*9B;*+g)R7pHl-o4#&Ijgsymhtg%TJzS)NvMgB#3@-6S_s|6|31Zyo!5pc=m$X z#M`Jq--zC^PUk|%7pR^w-P#v@BYIEeZMtd60~^sdCYt?gtAK5lr++PHbnmJ_=QxFH z6MDz&;o0Ye(LG9MsWQT>J%!{U<_G#xPhBngTWmDDEkq;r^N4K`rHFPz0O)F{$oG)D_LibKWOVMd+zmjWjSL= zc;+1Ykjv7&l=r*c)kc#2z2@Dyp0KT(F>SD)Z1(jt3! z*XZyRa|R9z5ZCi0o}%I;n|^l~^71m#U(23eU_&l~tvE41Qy?_JPSCeB(O&{Gm}A z*JtokY3Ir!2IXw#aXs^IePXzIANT#-M-$sfwn5IG9<5!*`RGWS z|H${mPPF2B*fBFRB9}jk-3MK(4`2RPzBiEp6o;dYZ|4KQkA0+m?bl8;nssKUeCGw@ zvw}}+kJ%l*W!T?)!j}*SUk&>XY?!hvn6_WYzA)OogZga0eEUoi?ehx~e@t^lZTC@^ z@@cK{nP*seL-_xfvWHCTr21L^X+y930k-`n5GelK`+*ATnL@iN@TJe?uD;K-|m3xAw#9J;+vGWGq|vFI~Sq7t9Fun&$nFo_-$ur<3mcgn94_;^(z-#=60Nv*r6v zo(Dgp9E}fnXzizWasDatRh(hRi_$nmRL%%vb0awM4CB)X?rSaxj`dUC4}71yo^NAr z2DyfSm%acokC_+CpmRQOS9tA#F1lw!T>Ed)HItpWfdavb$y&<(a6jL=<2aqz8A;gH z@n_k+mADwJDcy(X;^1TbP|(a@j~V?x2E#`c48zn&j~hlg8#2_#m9-wVGbA$ zEVEYIV=F$7&VrHsu?pX*B>Jm^wr>Py)OPrl=W3H#xMr?gtG+N2D`U8&jYI%vC$@a4T_Gt+}1pWHr=_yuv3A!yGh(ctyp4+L@t*fhB9|JgKn8+Xn9t=3&MxVvwYB{#TxIcWbh zKl7b=Sj8NZ?fz=UdID=Q-bPpK#TM^D=9JG;+gB<(e?*z+A|mYf-JR8sc?>^YiO(!N z@N+)SA1qBUwrm9MR`8&meat&4-=ztn?K)@CrR~+!Cp`E9{nf;G`M@E1FbbZWH9s;Q zIGE3MKHw;(4jYD0=XZbsS?mN1KJnJ1=NrVH?-P6}bU3=%$NzhQLv-MO8^03&8r^dK z|506KuSK^U!!8}~M{K0hhxCc~F2mu$;HT=AmdR%~&UWnZ+{t_^ybV1p-Xq3i%f>yo zWoV$DG?(YnezoCz-}Ae8znu!|wCcXxQ|HsS;CsdS!LECW32+PJn#O#o5f4plpfLZ3 z@Qwbnc8y<$JbDZ3(pc6y`HaN#=dxF(@U7B&mZ5r726NIbgL(OT=6Nz@D4(Hxyz80o z!yoj>2fd5W_b%zT@UCaRH=KO!PJI=h4|e@c-(F;WyCub`cOUPR))q_a*7iR+<(z;U z{x`n`fhoDJ@~G4uqV1v~A^cVVY(r9977J7^zeIqf)k z52}1b^Noy1J9uf!bhfj~w7*Tdw29-apL$Kk)s-%!i(Rc_HboPQLiQJdgJeU1)UOOumPhf8&_r>O0M0^<_Tk z`p;Tu^`)ONP~W*SS$rF%`yS5sN`J7g`uXI3(3+xj^Mr3x?=iSVXD(-M&t8%ec;ox# z>PlcKWZjU@oMMWVvTu8x))07>QLG>L!+$P-cYA|)axW4K?;K*`HKNB7&P4ijUZ`(; z_{~-R6VGfe*mpNE2mMv@(VM$EMt`^C?{^?GJo6W{6PZp_fmio0{w3D^A<#2SY^w_svWj0xT&Y4zEQRZUieFiYv@f-$6 z^6~Mmcqck`>YYQ+(_G%iC7s6<@+J`rA^f)D6ye8?ZlVz##R1Bgoy$2V$QBiR`vm%p zinpR;@l(7)bK8x#b$&Z~4`loKeDCTPuVvnw6)6Gf5RLE4c6_ovNwiOR&Dl4Wy>Sq2 z%?936>5`I2Zz0`x8W~!0>5kCJcz4nIzMuDJG!<)^jDJa zFTq#13Auh{AN@M< z?0@{CnOwL5{$DXW-a?ku*q%;jm2-X|(D3+smd;eBsABY#2 z_b<8DqvtsMAcmc(glijjW>n!V4L#kqu+j}#Wzd`V^uIkLVp1S{EvA-aU+^qU!3wVCLeV)xm%C_l4M&uUWW%Ero>5@0S zC9(b%-*(_kdmKuNWA8N%&vLfmDC*WY2rnAn>-}7zHP*V_-6m$sW42HGP0*+HIVph@ z%Ch4d*>T5(gRcF`XXz$RmWAv&s(2poG?X(tDOu*pS<=TqP{e1?Z@xJ+Sg>uA@2URcs%(}%3@qCUAe8Vwf9eIZDfDI z8p9eZt(j?&>#^Hd@*8~%?v0b}MD?6*9ol<*Kw!=ydmVZgxHJd$a92BaTld~!JRLp! zIr}nv#0W3)7z$kqBC3uySloI%g)!&NQC7wDXa`kb=q8d_V zvX*bKXsmmNq3mdO3}1|+lF15%2co$;%MSi{)>!5tds@3ZR-b1Tn)I<~(bt?YJ)JJr zaQ4;MV{Gpwh_^L~uhL!9Qi9=l{{U_;^FZ z`Ofk^Y=@82vm1LxF`DFO7JH9x9Gk){%}#X~vJDB71*7;wvkR=@TCBmSo1 zq1vIg-ph$8g3k08YZx>7()F|GsS}f&`U2lb_fdflhGf~L$f+UZRHglzG|`_HCv6>R zHBQ=A(!?7HC*oyb>5QKtP52WgO}N#5N;^ z8NY{)|2FV@|FIz_$+>lWCz#fA7ffMdI&App-S3X`H3Un$a-GIGj?2C2S4aJ|`z&Q)$X8(>{?0uJ_ zV_M4dcH)A+2@d}ddFf5g_?Tf1sC`@fzv-(*{;7NCSN0hndOol3?;iXeXM4yuXcgaA zan?i?@h+!x#>8awS@Yo&MxoCtLk?JlEG`>O68ykuWQj|yvls1iCu-1VG2T{;!&>f& zL%7cJD;OM+On(EuyJ2g+a?h`^eUJ9QGq%8^XnpJHAEcP_@%=a2>AyyFHB0F)>8#NS zZjs!lHESg4tI@61IDH;SYQyo;t5M{+|C&-J2<1|#bria4*!d1Exl|mmwT2(8@^$0 zlV+dM(!Zmgy{O-X<`{;vztO$>od5aGojGIR-_mV9gHQV&W<7@%YECIVHm{vI&o{50 z@|)N`R?DV>e)t8xwe&d-eO1gL(N~o(x>14d&-IhCVd-9m&j>b&X8&Au!e=y}ro5hI z1>wu$ZA~srji)I?_z+*t|9jZ>-8xlS4}FTVRyt+5`X%rCLr$zC#i9l50bfXY;&t7A z$4+7GTebV9yPqWIFkri~`O<73XDiTN^)+@xtB=E^i#~_n}gHk>pbXj^9g$@U+L^-;CtNY0Wxi#+P1 zp5HD%82eVV^%`Pc4L`-Vnu}pz_>2R8KD1eTv6<&qA4)C|KOkJ)@z?Iu{O%BhmHz=H1Gb*|68uo+N^Q2<4bAGGzPBxBzWikrF&nAH~M$- zy5kl9ZBHLYwbk{D6zwsoU$Fc~4_Kc0J7Mv@dNM4JoDvqBzNtT4o>J{|=VAP~>Kl8% zG_gV*UQ_se3%Da*a|OJn`b>0d74>O6?XpfjbL`WUbvtFL+}pT+5>1WAp&)P>z^w66 zeFiX|crJ*0cJ}!TR;9aiO1OX@O<*#2^~Y-unQ2+s-ajxt26V!peB*0e?)R_oU4Aqg z@Q-GX*x7>uSw5rLU{6Eq$Gpoon@pZ-NK+OpvB!M@1OL%&mj9?*#!kwh{6MZ#=Zn;d zY}#vmzj5n3pZYF1MSY~5uD)iczP?U<;8dWq>zI*-$ z>Ras8_Y8G#n3r>A^IQ31XzU?SuvwNv;lH0yZXy1(9>nr`@>Fe`3 z^?k#suOIcX&%qeU73BH_m)oC)Q=fmb-9 zHhdqvhUhfwIl9XPbPwK0DR5OFw}qkE|3>}WzB(vy0q^wOt~G>pL$R^sJG~eAqlC0J zY;rx<@XxB8XmqUBVdc@jlJj}j!rqh+|FtIL2QXH#*+TFsW6_1^y=YdA$M%DW=O47s z1wXIN4~aK|Mze3kTI1?jSI(l`Z1Ri$serEL^8cIgDvgxqu5n|L;Z=4|I7^-wa$XDX zr32WfIDhzeL$OY*bMY|jc(h>g7(5N| zkq6lO@)xI$p0xEunTl_Bnlkh1yO)^&Kh@f!%xH;+J+OV7j-wkna&7ShW|m-aC2IH1t+2#GPv7%yj!bzH`pn+UUK@k^$0L zx1OPX;RR>$IeU(D9%*`HBk$#h_&)oMbyoWi`L7txHEJLISMM$Fbmb1!R|X6$iernv zp5pBL%qslWO`N03zP9%-D}@KW7#{SZCfaB1LEW*YdtXdNuD^#mq(?hd9^sqz%BVc> z1lwd*#4R_0wy5kS51MHzLoipnFvE+!3=YisQVM%cvkI@ei5S_v^mF_;x_xZVQ8Ti? z=Hxzp=NPgyzWtxn$K}A$TOWUs_ii75Ncnf?sX?LL-mAn!DNykS+3J|>Ry zXv#lbA1mz@2bS|4SX$A?w9$Y2E=dWf&c5_tZ*lNGfOaXins8J8N$R_YC`)Y@?)t%9 zze6`(mJZ*E2XF7Uw&T@_PT0E0w8*5WrAse-nlff#$4Y{ZYVUMDGL-v`9h=O~i+oVn z$hYsKcNY%zrq>sq2zTr~S6Pw652!zk!nNchR@2zxi(~lv{308Fdn;$hvhIC*H)m!4 zfwF2;zk|cQ<@;!AxUP~Ec*~@pTzEF(i z5aph#FTbe#^hxfd7{1+inm)<9y?dV=$O_N=E`3t+34J2oSC?<+FW$TUul{+Td*Zpf z?|JI_e;?Jk`s174TQKqPg(J#8`@v<8@2>vqrlm89PdNYcqgI9be81{HrhK&V)#X{Y z=iHS#qM{`aai=VW_oUwA=mvWWYXqdheBdmuJ)+aK0-+=08fktm$Jn+=p-aO~!7&zx6?4 zM;`X!_pvfy1R9rnch@3DTvAy%p~|0JTVZCsyz@vjPYhv*1 zlb!?~;4gLN>hIDIIybn9J?)8aMgvt`A5ea_+R5`2?uqY219Q0N364I-rXccJf6DY9 zj0Wa$?c#Ft9OPMf3g0?8kEg%6Y3tGpo9ew;$Ns=PZRD(@CeAoILOZs4Jcpa|E^I16 zztHgU#e3ZLZM={5V`%V!Qt)Rddu>0!7v@6ZlsL)nXsVPnRODdM^) z#yh{x7|uSozvc6_ybkG&b-5hL>pA1JVjusx8u*{h|4?zbxuV$Q z8?#O}`m5-J3ie)D@8@{xmT~F*<-D)woZArPiteu9Zsr(uxm+d5h8?4Y7=7`u#_Kxv zF)ll}v>v*;Mt43655>Q=4q)A3uJ>%yhAU!oXO8rn%fmA#0FSK;inV?2<+1PFId)Dj z-`VFm_hB!ac+I}>n*EymL5+bO8&$MPwg;VEnUC#ZspCt#@{CiT^CcgmN^B0&2P!tU zzLihyw11*ct^C~5vHR+r_$Kga?!|Ha!`!}RO?c*Czw7p+eSY%sJHJ5eGn-ef0nbDi z?eWnW5Lpp-?G3X&Dt-TnbooH0MtoCj8mlq1&x1I*T&-89TTg5rwIAoln04=!7+p2! zdk%7m*2#9ikMYso7ZdtX1C7n)-sT0)9rsLZ^Ag*}Yi`<`WNd1`k$uRl+k8tKQX@B7 zYq(J-TK5d?K7QxL)_&XfN{Ef;@aI~OKWRPuH1PSL%cq0y!-X;UE{=omyQhKgzq{VE zL|f~0v_x@-QjocbJ9PB`=0Tu|eOG}MT!*;S*U_a3oK?~?sh$5?XSBw6o&Rn9I3EHU zzi$AsgsP0=d!f~$W775JA6v4g;GHFVCL5l^2lEmvdR+~@);LKPpL{PoqeHKCUeEi` z>v7O)WPB^#rq^ka+4RHvdklD2dkhy_d_Q9dy}sDOUHRW!-gNA0#rm0noMp%Q(Kx!- zf0w^fe+9Yznf>+NJ%3++4errjqvHDOqwi?0_ugNYj2*Y;jr`t}JL1>7Czrdir(}i06|XMn2>}x7v^;+nQBoEC1!ow!t|0+aHp))Uq$7M)1u8PWz0p_&UPW z8^2DeEorP#X{=T8cHB*rrT_Wv-Xqq(S?G=I{eEKfL*7+WQ`LET&yQ<1XL1V&0Yd!p)_` zf^zB1G~Q)#J})sLPMpn~N!|NXhAa$%kHQ_v1$U!ospS3t=J~g^#2Z+jXTn#fM#A8m zL7au{^p#+4#Gk^2wHm(7Jx6%Z|1wM+jQRQ!j|J0LfvEzY%@E_hcSAy5gY(|^MQ6>% z*L^Q*f#A2}`=mwKpS*hR&~S78T<`8{hLVr;edLXDR-xXv?dVgd_iDG^ck#ZG^7rQ& zb@>If9bDU+r+9JR-3RzqWlILbK9RP=jEzw>WAqsI(Cy#0`4R8{*~j)xJXWsx^{i#r z$ur{eKohPR9Gl9-nxt%}RI1$MqU(-L(m9dsDFnFN3Sw$Ov%JTy5!SIjcaipN>Q?6fHTaKcE3#aJa(Adbu~=-bZY3o3}TSt;E;cXPchj z>#1YD{E2#;-@5{zBI(}p@$n=cQ{e|*e__)ZMqR=2l07%lC}FcIXA}ySI2(e%#BqrF-TrTe-G_ z*iYq?jKh~5pStG||KHL7{)(S8?1F^b9ta{RGIn^_mE zcxcto-r#G52Kkl*AKdwI$sW$C-L3r@g=1>hmNVAKW5jSu>bQh6;zsdq9r4Om@U9AZ z?|Dzst}5a>tuj5eRmgbShp~=tg;UzwaR}Oub5I)R!Pc!}Om65Cd|+vx;Jf#m_pg1+ zTNtS_`|tX#$5T5W+4BYBNj;a6wCk-Y#_ny)h)>0S82pfS=LF3K26&a@%bvlWju~Nm zkc5A4ejMF0-}LXgAtk9ciTxupvW?xNSp$AsIj__51EWr2{2zXs7~em{cPs}yO$C++ zv`+Xg-?QnV`PyevSI*v)jeoiAY3(5qKF>?>*BQw1^%?T2D*I^-`G)oLy@Ncm_m%yDY0ydz93#W%Nze zym_6Kf^%MBr{-e<{b0*|)*O!9@dI?fmz^xM{r9WG6iJrmgn_+2~OhUene z3FzR|TzrWb>n{S^7Wka2ux}wJTWh3zh1|1i@hMzg!FsWM4tPo26T81%-|N)KcG7$6 z^Ss~0>Qg@@%eghnP+*RDOR|Io-6pplB5_a-!Q!SUif_d_Fh@%`D* zNa+0GOQDgGhwdL*hEAjmorqwY@=ywm{#tr>$ztsZbGXZx|!H92RfrZ5zUe%8)SPTchZG;=*PvkIEI=`=L61DYvXb3;mE?Kx)R zuFIgAZ!rJXjo|!vV0#C@TG8+q>5D*0%b$K!IjU21-DHkSKfRRx2=bli*V|l|h89fV z+q!kojyIv7+P^6J>ET<^*Gp(?fi5$7*L>(m0cGd1KHN{a;txW=A$m%Tsak`27J-AJ zi6*!t8lts*KXWFPczqSDuLr=9lIGYP7Y{Vq#@lZCPka53>HJP74MRwQ&@sBiw+y1lF=o<%Em``R+ll zrE^~o*UFzV&Pq)ojqJo6>q`@ebD z1Ba+fJZjk#@RPgru*LAFWy_eG%*USmseDmg{xlK(6rO(88#F#S1RBp#xUis-efvZFFQB-YI>b(%851Ebk>-2xql7Msc05!_Q!@@R)C| zg;(9nUAof8kS}(9Kf0!#JF%i>K1zFC*~89{Kj;;9AI}z#OCGB(?wSu@?*W5b?grkw z{hdV2Z}oRI^UUpU@jq7I0mpy0?>Z=hSVp@l>AO+%9k_m&J;zqx6~bdJ{V2LdI)xz5 zi@|}-@G(bDoUxZ4xnd=A8r#{=;Pu7Vhe=l--$-AqNi>?}mwzkyo<=tQy_HXVL|UYT zeD%m<$OB`m$ycF#z%rYBw~}uu`KE&-`KsYlr&oS!7(8Bf+OXzzhwSsqdi^&BoeE1_vFw8;}i|4do32d)b<<^z^IP|6tY_lip7h|2+KXqgN2Uphm$JMNDpF5?w z3>XBPVhI;f&t$L7GpKFCedH0&yF@oa8y}-g<;gTtlT>yNb!M5KMQxhz-M$}Ueg6pG z+wIDTO=-toA$DY zQSDmpv`g!KC$JpkjK6m3PBi_sNwfjEw=QdkxoG+nv&c)|PCjlf65Tz-HyzlFOKHy> zXo%V)K44J~7$;M|;;d;+&Dv%jR$jF&ku|JZBFF!n5)-sz$YCUS_ono>SR^Ii%8`LAc$D72;38BNN;yKJ- znN_SW$fk-fFheq_8!uUMP`T;v$Ogs^@)nqhyXKK^IBq4_`UWr@7RgWrx3eaEf;o~NH+7ViD%jE zvz8<@&EYOv{|edW5{ylrWOGwC_8{?SMx}Aw)?|GtJkC&XRfrP%80UNV}$zZ6>mz6F{mb1XZRY|?`x5AnW{xZO8n zs~T*k?%HF`6IVV=jWko{gXEX4Qtdu+HD_&Eej2vEa#t1cAX(QB&{hw!o^U}jF=xs} z7QGUagD(Tem*G!x8|6uUow3r66LZw@qd9W52O8{cD&@PHFEdB}kh$<@lqG%^nTxZW ziBXwmu`Bd%t2LB)D3Q<NcpWiDKtYZg@&8eJjc1YAn~_6vaJ zZOHTlp30e?4CKRI@KBA#CyI!j1Nu{w$Vf`KbLQlc$TGinN9F8mj6cRe3NtC(M_X|SDo+2`FP}& z#rWo2Xz63<432STnQOm_|8_@d?Av1T(a8IUPx0;Ci(}vB@@>LM?Eie*vwr<;(fdPKKZWLaY)q9I;*BP`AYjqPbXhh5`#qF{IlgN`A%fb_AS~E9oaA` z)^FR<*^eA;^D|FF3&e*i#sPk_mY=40o~r^F`<$J{vJRy>3RJ0{6(gRot( zu1sP5>=~2f%jSx;#2@Y`AZBnrd`vt0Oe^4*bBIZ@O69}1gji=}JG~uWc&!ym&+HLH zMEdIunVAbKz(1|S8h6DI4^al^Sx3G|dVI`>@(1jgTf%{_@vLtiVSXq!h~^3UHt2_9 zBuNgE&va_!S-uM@);IBGL-6l4?Acv0`fy<7bMN32ooVUZm8X<8$^TUHWs8OPDogx^ z;w{-_{g|@ap!xZ6Wfc@24ivVktRYTWL%NkkUyQwx_Us+w4dipzGkOhRXFWw1R|?PG z<{e61X%=te#vJzfZ8Z+&TKf_&eNS<{c%6yLb?ZwArbN5!1@ZIdu-oP>Z)wEHQsI=@7`yo9aj0IUDYG4gS4pEi=5!cf69aZR3htAQj_4M%yAZt z#b(I7isO z?nTd`y(Yv-CLV<^`krkuY}Yh(es zb=hdK4nQmVCju9>Q+5ikO|F@goVLgA5I|V;od+SB!(Dl%sh%pIGE}|7S(6 zL041(FBfKw7>ADU)-wD#s8crLWsE@uzKOH(`)r_|4Z!{r;qP^Gw-P zlgn92ef59&#PyWZc&5?SK$$fcF{ahOnYgU_R}-tNe?76W%;;J_G(4$+m>%KkXD8OD zhbL96EZY>?PCtA@`BzSCppHghTQ6R3rrxcX_%Lv1GoM^q9^Y>7@r)DpD6Od@uOhB1 z->aYGbJSZN@qi)vYPRM@o^#%D)M$zhFuESW?>HMAY9B^CQRYtGpE545aMo5RcO2e_{JBInOZM@D_$Qht1XPc@eE z`8|>vw(tbGcGf}4|5xxO*s(j-7u(S%NgwkcwCS4--a6J9$Dcqk;Iay@rj4#Y!Cv6k zntVC$#?hBnza1HH;b!tim-l52OM{O^*LCAyc-nMi>I~MOOxCj@+Iv=bIdfR+Sv&dH zKNt-R+(@w3L4Sno_XBfa7Y5y$xaOYhS^+}i1epBq-mw6|8&>pehZObrb z-Ojrr>Jgv#20nfd-*J1VVD8}gry0f;1AcMmDRP!{XEY}$jLbY0wD>L zk}zlzoDiJaq?{yZAz0Cf+G=kJ!PYRT;DmMHBtgx9&?ssJE0gvnM^8t%m0Bx@BP5;}ln6 zvd#1S57&_9{C8~io`UCkUvr&3x01Y$qr?Dk+cIeDcG8^x@P4%Q3(Ct5LG*GHd5;|7 z-hf*^O!@0cbN*wiNO|=6n{|HK41VX5M~v}JqSeX#7Tq%MHb3<3^EwWJj}P(;=7@6! zbsqV`(Nu8c=le0Q#^DqBc5ETIr%cSR&DWTRUu8aC!Mwb@>Bx1L!4u9Tj%Po6&l$sd z(2Tx8^If)A%f1jUoy7N|gYVIw4ruRw-tqjjc@%bY-)fC1K`;7w z&)nnUd~B)i{ZG{4jBvoyh8HQH>5@4M3MvoE)gy6>p8 za>~W`{ge7#bew)mAFRHs-+D{G9^l-u$?bP;cfSLX(VRQxq8IM#+;Nr}J9kWW`~4(! z$Tw~s{M&`@xnr%FZ1-C{m52Wp@Gm%YW-mCr-(PTHsjqU*K;_R}V^HqK>sj6h&mIql z;`JEtkjpuL4* z>lm9+V}pybd50d#yk2xS>XhK3ETx|jwC_A-J(PKd(xJU9+><2Qh z*Irx6ScYUbvMTco?X`Ef|0`EzUa$YRy8jE^{F^lPoC9b-HO#fcJzbRA%OXAge=|Cf z`2S_S^5bpVw)z~szvR;b+7N7EbQLwOd>UroKY?`ZchdV4QySfW82x@FPZdu!&oZ97 zc<$zr-e3BEodf7RK<5I>xp&r6hwob+<54_0ENHjy+(C)g;cu*qmGxvvgR;Hr6pW)P zj7}q*7&XEPJU$-o`i4y&&c%&zf$&uZ{l|}q`fNz|fv-c=>EW)U%DJy{yz+nURsJov zd^~9uFS0LAG9A+~f<%~;JRdJN{p|f)M)`D_m`U>QGY-tL@8Cwg=knO`&FXh)< zOMca_DZ9%arwYb(Hse&zc!jH8B&{|-ehk!h&;Q(E2A|nRVKgTTpDqbo3rxd|`m@lr zCxi>K!oSMTnL?k#FXWF7Kc8=e@5=X2F*?ogJ^5Dn?)E}px2?%}E7spYBT5l)up&t~8IkM~%gk)?b$A3J_m2?oks zZqo(lg#7Q%ez5VzSXqzO+*|vuHD%zctpur@pIJAo*WOOC({T<>A(e}#zC;}>(CX$kSmAVa;3)F zmie>~(O$-7Uv64wAumaGL=KdWUH@&FD*iumnCu)|-L$QgscAtU!QNdBZ`MruUGQq2 zEGBvK{)VoHdgM_?btrGSn{^UBYp$<=O^zhIde$_AdHv?mD+AoizeaXlU?O%yp@7UkSE~jgU zqnog8FzK7-{@)`%e-``IX|DW+EL11C&66GNyM%Fa+utiYE5siP5|6$hEIYm9^#?@uv z(qD$z--siiJ74iWKi4xqs@yrU5!+8s57WC`S9RPS_uGulLsz6SX9n4GMrTet;guw- zIP)|n!(<31=D?1EUNDtA@g;om={n1tjs724n{EE)5@_RMbXFHN9k~tKsCMq8*U;Z* zksI`>e;`{5tY< zSM$&KBMG6ulkC&u8`@Ew$9|I*`3>I?d&iZ1`i8k{hsm1b*wcP6(XjnlwIb(fy^%~N zxZ>+}WU;i!Q`9ZnR>o!j2NM}*WM=BJ<@7b^=0e8S0_IUcA^g?UtWakW{8cvmRZf-x zuZ3MF{MA(Wt3vpzBKWH;_^TZFt8DnI(ePIx_^T}VE6bQ3^>4)&$;_<MS8eC}J}(rkAe?R!M5>0LW|(on~&RK|A@ zbTrteBhN0@UL&!AIlz+{r_+@ZD0+Qo=)d7%GcUcz}lnVj?WE8H`dJB zxRJGS1M6My@)IcEs5+nveJ45kZ`iACg>HR0v3^;j>hJ2zGV>*1fHkJ!bgY4i{{*3ZpwmhdQ_S z+ghNqoM(2be3&wlm*UUoBs0y1@2t3hGVq`lbvg5-6g*ynjx=tr>~Q9a6aT@XJNq6P zvU4Ij*f;2>^by|q?R%Up+cwnI4sCT+Cql1-@oACJaAb|<`w+${o%0-Lj_dA+#!GwT z3GW~eq4(K%VhmT}=f*DJOa>Tl?q_VejAuP#qd6p9?e&~TbH+JoPqDM7YVOS^Z5{S6 zdwkCQ;#N0rF*Yd8_MPgG__Na4@Z)V`#M4&gxA?Xe>>0Qf9v9ySUuJ$(zW|>a22a)b zd#az$Z>fGRUvf=r^{+_tMax%MQMeg!TMKTdM{Blo_IbJf!?(lFO1>$F$2~CPGH^PR zwWqY{$QrFZiT0eU&W!a@Jok8zS>G^eUlq)g z=fVqD!V6cz3s=GmSHcTd!VBZ)N-!P|5ApW{4zr$l_XEUBibg~iqwIS@z3vDz2m7)$ zspU*Q30i67EMB%?)3D>n#TM)&(&Pgu_n&+xI2Sv%v$*djxaMM?Q;S{=8``rjH=O$~ zS8#{C3OF6xfy~Gcv1!=KeJo!vGqu@0W7)u&>sV|$|8%EEFP>k^^P3K{wtM#%+PJe3 zz%S}vM0}HCx;<%S*!Rzyh#Myv0ev=h*g@StKQ+oX+)?|~*m#Qh z=H2&6AvRurV&gqY3_RxYOzh})y=ZafK%6;rZ9iUa2JF~)#P5qN=cw& z_x3MvW7%!6{Ow_2&>pC>sZHQZdvOc@wSLGprWH86^G@#`h}N%oJSKyuh!vvTX zvea9wJ7HqqabM4leHU_L-^q5cjJw4D!G0?LAB{d|UDv+adri+}U)BDqz12u|=V&(T zIs2;i(_D9N)jZX{syS*fM@{Cd=4r0GuWFCg9QF2A&BxCom#(&BV)gV((ih+L)LXV4 z#98aXn{c*?|Kb&AyZ?X0fANaG{Tbb7fVO_=`f%yQZu;yg%WDk8Uv1!-!(;P9oRy2u z(z@K+pTMW_uPa@cDs7n3BK0mzbKdF+(;JJ3Q5FYNJpWq3x9fq$<6-6BGajD!vd5Dt z7t*fu5gXfjwmbHQaOrz@cyl#&S5iLS#BaB-&Mm~(n$!1Kel~Vd%KO$p>G&mU#`e(< zuNlHVozC8p!G48V7rX7VrSn2 zc6-m`yn53fdyLW}qiJg^{_7qlP5LMN*KF3kR|ETspHXKS`@CpbcCNO*bRBlw#16Qe z^+Nl)$G^#T6dQq6S+e`0?$wN;b1otKli?BX{-nz5e;PItA+V~(qQCFNVY;o^+TrRP)V)0iz8$Jjgk zgf(K$A7c2dlDz|WE~Tg2_*&2OH36ZyV&7M+u%GVl z+EjUON~&ePms&>OuCvD@)Oj&)(d$LLmjOdxadTrf=Z@d84K7dT(6-}0rX$XO%*oVM zfxR~ON_xbFEQDTr+hBWfA*bQbQ$?aD**<&s28Y^q)Qc%o#u&HBK9G6c$l2qx?eC_Rl)alO`w8(S`o^)N9_q-6 zwk?BbP5fzQq@4cSvM}>d{cJnjcbr4rSJ7RSc--VK!o}(_9{VcewP0+mBtNinqtgc{KV=ALaU{ zg+%zb1p9usczoSKPz*SWHQ2mAkhtyvO`09D@&gzlzC?{Z0*ae#?~`w<0(C zo{7O(M1QWXLjHH*^yJ3)bz3;|!#CG}KdmoX7q#9C*BZOzg;{}!u5eVS5_J=CZ5>8#`T>32FO=z|u< z{Iq8~Z!D*+K45MAajcx(rxoGSFZ59^fLvIYVN8O*d{s6KveVh?8y%U2jYBK^+(IK* ze;UuToJFtX{q{p^hrf=$1NqnKBJGDJE^Y0!g!XrM&+r-NM9l$#{=6?dc;|f!u^(8$ zb2`s^*g_ciW69>(fK5ge+YtFW7uD`qD`a9q4Z#z2W`dLC7Ulgy-Dm*Ovc5>GnMzug_` zc!=lC1Y`eemQ{Dy3e+94G9owMZPugzNiezNcJ6qGi;d#1rBfWhS*hJ~q_( zJkR5XRrkCRsQZ(R5g3OmI6btAp~CMzSL zv{9s~odf*d{9)2LH&{agH}HNF-(VkbpXUJU)IsS^RxFKfW)E6bh3Wx*-KJ;ez z*fpwr#pLJ>l+zmZCf_c_hH=~Bu9+_Z*W=LD^E`rY2=Cv!FgDxprMKT@Ik3KNB(|p+ zX#u6LwbE@E|H|+C4=0^t7>R)pZ}GQ(rT%{49%2Xji9JVSu+BcvHIsYxnV!skIH|ZpYh_ol?xY3K`&tbLuhRXClqTJ| z7N6>!pUAJj^n1o$cyatbJ%HU`V?X><28>BhaF!B4uQL~aNqZ;Ou10U>`uPjA=T4|w zJ(=}i`>tqJHsyJ}d^jza-@7r=W#vYuvEKiXbD5V4jfQK@f%WtIC+|W(Rqy$7lFp0$ z;~4*UA^hLT$IV;#a(aupbgs7o8h(lLWUiWij4O4I!cSNr1wMQNJ_fkMF|Qx-!7XD;4l;gn4)^N7W8hr$q{wpf zussy+lBd}B?e+(*Cq0Ao(Z-f_!a*4^T^fbmvP4OJ9u;Hs+LfujJ8AkuiFEy#hZhJ1L_(7d7^`&V5jLuSpt{c-x7MU(LAQ)9;REUg%En9O~#@?on_k zy`^l?r`m8hcT2Bv%jzAo=ZVRCz51Fbd~D@BM19Rd2BKeiqdu_Z-A>@+e=qnh?FnB3 zF{8fN2YmVt9mc1^&;W+iNjI15|=6NZhvpxVi?-fnk4)zaq+X2vmwqPeYzz94ZM2tm18D|n;Q`Rz0OP2}pm)7WTW9yjv3Km9--|vX z25W)V>aEa%@OUvGli5%+=A@qXLcMhoy7TcU zbsevKpLTh`83snJH`^GOO2#J$tfD91mwLkbT(+ZMD=vsj=g#U_(raiJ|2N!IEyC`{ zpXd3P)Eal=icp6~Z@0bY(A&LEpCc)Z@geZ@d&+F4&+BM^v0WxTvWzmbMK922`$5gM zj0n1*{bk^y&Bn#CZT0SB2K~$6ywBbzIrow6#&y)YRcC;#Pv|HkqfRkwo2F^3cRK%+ zoud)1=BeTd=VvXi%-@OaylEKR*W?T_!{ENFnfo;RF7t3w7+U%ob!t5B4`{FMsjuHL zu@}Bh4439R{kQQIkE=On#>#3Pn?hWm3CAhxn-D9j*mhHh({z$uHZ5}2alTRfx%hoY z>&GC<3U*J=cMgTXSOi5uJg^mhb&r6kk{O;qXCE`Ku{QeUqwB?paoL zXKzw=PEHIbvJ;qclB*LwIhL+<eE)s)>YTZ2 z9QuMsc36=O|2><(CtQ2PxwDbokzYAa?Dm7V??Bh)>Jwu)YSCT(an4=+F(YHRt`be6 zXI~EPd?&<}=WO-4lf$J?z{?hojHQpJo~v`hrP8@~`DA-z;%C8VIGCn+;8YcMU%QSRg~CFU|`AnV+@{R}ibdtY+u z*X=R&$~pFR!`p2Ce(c#pB2Tflr88$!7t$u<mmce975moMJa>H@(lh<)Q;0`bgLKS&#s zV)UprQg_wmGhgRu;xAfsW#&nMTpq%oq4=)M zh{+wI;lP(A_!5qV?|U|0MnzJ=f13-3$vPB+BQxf|q8kpKF$fOF$J@QYA$fi_a|VCU zoxcMAvblJOy0>Yr+w!Y}-@}*6F2%vG&M+L?MES3^?Gy6^_d9RMP6J->mL3+2WV$(c6Kk`VIFJ67iy8KV|?;>Bkjr7C! zP7F@@CV2xm2RLKFo_Xwfn*o0{lzh?WR^8KwziNX<*Pdo{mawlmcQ$l>syiHE{EAiP z3x}-jot$@UsXfWey@jznth@ZIS&7tDMm-0qFMiGX>rKv@b%=H9XM8Ik9J(L!dHrup zqMZubd#K!Kc|IFK3lQJT|Ay0d}e1G(X!#OQ6oNH|p|Mz3Q5ngUN z+_ibf>**JJa;|9SYW!g|kuO{6*8hs-dF$c^@`B{~;_|9gFMIeJ^43xBgEnmGkw*S& zP5Hk47GHGi826U+m%_ZJrO3zbQ^O zxY34VNaSwn5gwPha6Egb6Kh8@mnY{P3y0$mTeR{x@T|W{jE>JneBy{8d> zBdW_7wDwA`K4YuVaPdvVCE{JoTYGIAbqVfKM}1AB#u=TX_8416eGghYPM)(r$9!Jd z^7$j7&Mo)DYg`oCvh+~{zS@6|{MCE~c$B92g^l=1(A^kdqkrx_T)VH^8wHDG%MV=p zbJgj;(D9j|dcOD>>zQEJb1d)R!Pxtpc{wm^KIklW8L<`1fSvW3JxAxeJ2mp#h*X}6E>8QS&eFuu(3{Pumw{_=rs zm!r6>vY~KnW2deRJ>}U!2I68M?uGufR-f7{R!W`gAH9t=S!Foax@7!6(a%3|Qx^Gi z3%`wRE;fOo^LFARr}%}~TCpA8V+zmryYbq$zqWW=k~V>kZ_iv!2R-KkLRG z@GaZ#EY{iwXiK`>)t1>X)yMrP_FKg-@hg5qiLqreJ_v%;l}Fj>=yB0w@7{}#f%*8D z8jpVwWQjqJotVu>MQVzSEfdittV6C)EKsd?;(1Ra%^>YTE3u)DHfJAxCv_Tc{l*^3 z=H;}`kEPsJ*7;Gs^!BaT*sRCjl=gtB^uZuqzO#0+-mQ20U;x+E)X^9SZE3;|#ve4c zB&Xq1ls?7VrYUA7`4#ns?6p+;%&4@JwC|OEHfiy9Pr-#nJ=mvx@z$L1G# zAfi}7(*Mh6UrklbYUp7z7h#9!`~MBL%#*NX?hRuje5P!A$3WM$*!0db{Pnp;GB&({ z_7-R^m(U}VvG=Iuw{#Nq*z?+Uyrx+{mvXY_?QP3j<=OHwRyyn0b_049c&B(>Zt|i# z?yIxRI6Gb6aqV=&oME-V=f{tiXG4Wf&(^0dV;$H0uhxA#-c|6;k3$R2KGC;sJtY*2 zZS{#UTiE+PPt2BO$mX?-dp+N2E&u;xwm5OF{x8LBNr2|1*Rx}`KnJ4DR_4R^zYTxG zdU5r5eBCaO?Wq0$P%iTGxv(jvPU6&6^?NR8ws)rCm@O7>6k!h?m z(v9lg<`<4Gz5gTM7ntMD{Y}B)-QR5LhQaauGx~G-AbP^RzbP2zxq3_PIM_ajZYi=F zp3^$BV*uw>;!86lIlv|VJHvpf7XQ0XQDz5gkX>$Lf6B?<@6bpUc}j1tPO# zhaJB2BCGJDG}7y1YrnWYW=1mH^z|N2i0jcpnN+Xu8}ZGlzAGJEsqZ&=xcBmSE3T*V z(iuzPr7wJF{s|v?cjJTa{$6}^--D)(PkV+Ffhq;x8&tH@B;{Zn8OaAM*1| z=ROnk!8&lGiM_sQ3`u0|u<5kg=im@Ls$Z{rG)1~iqr4UC=y~pqJGAS}85{4UZ}rlP z9a`H1-KhM}-Sl;Htlf4!F77rdo%x}3;d?!A+c#UWxqFz4?;d&7E4T)KLSE3ztM=J- z>h9?V>eY7%ZhzL1Cpgyg))?OB!9523jpia_E;w{&--gev%PvnD)wQ44EXT{+N8V2Q z^DaEQe;7PIYg;+E*IJgTIe|S_1ei1*o+!eug}Y2;1F_-aDUyw$Yg2i(Yg0MD@>qMN zB5W#U6C>Lx`Ha{Kk2fCv^hxTCSV4QO#iv;P0@LPC_kV@;Zn-(4E@}?1!{(;jo>H(W zwgY#oUY*C?ty$*4_PIlVmAhY)iQks2-@q;Vmne1b!{%i^am}=r%XUXT)Cjm}ujf&7 zXx%I3usY&eM!w?OFZS7Y@M-tG-28|1z1izK_0HptnqVuz2Jf@>e~#P#eSDM4GvCHT zu)PRdIpJX*>xAN*Y#$JZ3)-rutlHWKp67$}zZW0-Si5X|u)qByXu-qBTh!Z)5B9vz zjSs%bkVDWQhzUB&Z=56MS!Cc99=ZofneDBF#?vv(B6?0}eWo6^1Ig`~+98Y8qyA78n z=Zhw1oByyj!tZs>ywPpL8)x|se5=y>hqcjsuxsX8TZZa8ZunvNMqA(4ti79foN30S zgN)%E)~Ksl@8n;^k*C@JxjTOddhgDg<0DTx>x{@$@|14Jw&pv?gM$Izyn?)-t5_~P=0x_R0s1iR`|TjH_j zxqTL1mA4)|c{mApb-K9HcMg8jBR=vTh#MEXUzF3GxxL)y7p_!KtUcXtN{?Jbdk<*L z$hYwboDMurtkw%Wcz~lD9)7FL-;@W8b{unXX2VL}%W98w50}n8zx2opE*vV~yRKK= zc0?CHWuLR_1zvlMT%P)8e1Gs5`VyS!ksrBjdi3SN5+VIi99~3c9!+j^;c2dR>C5ex zXzzz^-;`&=z*}_kV6SgPTi*D5g#OH?Nz!aw>Km6<4)m2rzVNupYYTelrb*zu&F$0d zB8MiM$rsJsl5-$Bd^EYaL3D`=OK}$Y7?AjOwG|I3?RN{^z7{+^g81&<{(E%~!1JjfU&g|FiW%HBJtbH# zzDD=anp_=%?j!}#2aD&G{(^YGd2g}b=FzVA`y${j8D#9f4!-=ig{RiPXQuAz;_jL5 zqeab?!@px1ofly3)QPzO=m5D~D%3OrqoyuL$*>aEkWH%q1T{|D& zNs=3i!bU@UIo$z^nk$Bbqx~!U8=c~Z%8B>UB6)5MxC?7kBN^@aeQpe13%bA?B9p)C-IK+XnQt35FJ{!u>W#=;B<0!&@n3s zU6vm`Su%ED@-t*%3*y{+p5-?dl`$5?R$a6QomdlcdT(2c@w6LZ?>wHZh3s2iM6aiK z2C65=w{~?7F#xcMYDnv6Y`&8G;`Slk_9iWypN$PTv9MGx@c&coFch0cw~P)oQIvSE&F548^Ju0FOgg^o?4>MjJ2 zDrfqJ)$d@B_sV)@YB*~e;MS%5J^26d%5VnM?Juj5J12hRIRE}x=lZc5^_xS26_#yPH+)q}#Nza~Ax`jx?)n8o?E*4Sw} zzn0#gx%UM0*wEon_n*B_`}J;H%>ObaYnoTtKxkNXSx2X z6o*1^qW`~S-XG_7(2xDokCwgq7Id_f-}465t$v%|(~n;K>M7qGKG92ihqPHoeUzR0 z>b%Oj)$QEjomF7$pK)}`tNZw`JL}js?0?c6F>x=ye{GJO_?4qYuP!i8m>3~H#X4~! z{K5WH%uy3-A6PzI{-1JnW;$%tV8sp7+Vv4}rz(=mlLNZ_y_Me<|~!x2>|1g{P41n(RNlI5euGEzvlu=A^==hu!#w>zSLq zeQR7vEWlaBH=L$9EZ-Ul#^x|%RfxUBOzIC~?_PtwL>POC)dP&q{=lU6G=`(*8u%uX zA0m8Ui z;yc|}mmXdHy_h#~3G*gX|2h2Tyt-ipb7?_h=)R?iq4$4nE?*rjFm^BC&ffGwqv0Ly zh2AzWW!L)3rBPzM?e6QYp%>fu9qt;g0FEI2`bz(l`d6s?6zUl`iZgNO;=Q@Ib=)?_ z*iHIwc);DdXDD9;r*(C07QcBFW#IWD@9->e?-nlg^>6<*cMAoFco~aw>W^Z9$WDcN zJ2znGmqnj-w!Uw^x#|nS(3ULlShzHF{|4sGMr4)c*m7jSk8J$cUbL7QE`5q`gd2^i zvrlWiAEv!JPcfB&&5q4-kohE<+=&mVS~s4fXhHEDYl!D~%WGYm)_*OKI{M|eQ=8cv zeoMX0(9VzbmTb*Cf-exqJ~xTj=qB-^{H(3Xtg$gW=$J371lDX{p6sYJFB1L}yD;oq zs@KQ*V6WTQYl`1eT(%tiv9;lstqmC00fTI0TEIaoIG8RRSRLn7uZ?|Qu6^c&aOo{B z4xDvAW;gxeHPcx4ry@gqxyie0IhV4!BPAOT#hFOEi8%DYC!PUcqnn5aw5S3+?FC8JF2CiUN$F?tTd}b8`%Hds&2a3cxOB8hv10c86#Z7U_V~<5k9ZN>M`%_aw6gMg zY>3j0O;7jrO?n^`kRMvba}Ay6p$Zj!%l+lHwQ{sj5r)UR}fNGJhsNYoOPT zVs4G39VhPvVvvXMy|oCu$_C17L$D}btIAyl9CrQv`>x|T)t?fdH=?`#XUGe2f7-F- zRoj|(+}V2?e1gjWbJ>6+)F%|`a7$<(2Hb9=E##sA%W_>`F}0+Xi6Zi%*#_ZH!!sM{y9?m=(7 zE3RJF&8w-mF|J}j%%Yprl>)P#Ta!^78j_QH64od`@`-?e_t?IRxTq-NHyiL77$`gUrV zwPPLq(%x6eTRO3&ytzY?S$#(g2UXx-_q?u&!@*AC&9|`+3b(@RY;fr4tL!@fjPKA$ z(>{k6)|#sE$ibi5pZI3ux8v%Ttu*(VE{?04xD#jXrktl^sUxqFSmy=2rRS)fC!1Zz z*V5gjH9q=r>fZGqqfarKrba$aZ7O&4FHa@lB?Q6<;U|?#~ zpZJ}_y8b-xu}Mu+U-&rn#n)7azsY}wk(zt9bTxsdoKoIjmEEwTU-8M15vc&W{JBPWv~01JlkegHoH`&~M_jcMeLeeU|dTRPjrF zm(r0RcT;-$eGQ<8>Pufz`&sQK`Cc+W$v;^J_-ENo-T+{$*$9H z+gM&m-Z6S(#x0R@z5PwkycK?K4E8x zn$Y-~&H$;sHx!_%!}uVii8U%^}YslAj7us%xe96xtnhh%%%7+dD$ zACAX|${6^8n0>dSr+Nb&<6q&=PPhlY96RqrS6pD*dV6->t7y0Pnx*x$9rztSo;d5S zKHghbrK^@*TFHNNJ+l%0t%{kdC`!9i3(X&-D|HPLsV?N6Msuemu zx!Vs+%r4Z?k;VS&tiwkgWt??HhP48~IHon!IEP+?lxr)xUWX~k~j8BVo zlj+&{QAck(zbnj4n^)W}oiX_y{DNKoy>ou)EWQ57-ckKgzq~#z>!Uv{?6=x$MH`CW zddsJh&aCEDIrg{SnU#mvPdl^n z>;)GL2ok#_xJ$ml>Ro%Bd2S4$Hv9mMXCCggk|P)LJ}{${IFh+_wVWR+4gufQDc+>w z5#*Xisp3s4hKFG$2kbZ=JKWd=J7O_04$SC>A2Wxyk#5piI}BtZXFiT5&BL{9;vAZH z=k^X~->~N>eg}pBzvqk;nQP{BH$Kr^`rUh;<}pt-M>J2*MxSlqe?c)X{j6=$$7o&C z{Js5}7!P+~Mo$>~f?GUW?{Y_P`vlwWq|olJ;xl%upXj$6iV_N=50?9w$IcnnL)-f` zG*|bJewBK$F^&$yuT67xFxp%luw#TYS10q^A8jrsK1fO^x@|z1*k3E{xM1O`d-Gcd z;v($#Ks7U5^C7$0L(r|3@V;AkQ7*jfe-indKOJByZ2iEgV(j83iK zOkhPqbmu&yGr$=6y9(iLb@r1Pu`U_5<_-K$3`IY77+6PD<4*;AcYK_5c5AtBw^vSU zObK^dgua}4tH%D zq3_xO#-O}A`dz9sR|_3OJLhflZk^XLZQP5i^UTnFwE<($c=DH$zY$%9)}-2g#-LM3 zTT7acZ=|=Zy|dq?@CNO3_%B`OUibeF{!8zf1#DWw;_KT03~$k1{jKvm=F;AHwHH@+ z5&3VE|KzO;I%>&3Mfq;ME%@|TUem2}J95YUZuP0;d2Lpa*G8V7JpZ^qtR6s~=2Ihk zKo{|inydRUM-q7wcziq-4}4-UTu_59spRe3U)6e4(mxn^qI2o17bd4f0tfL0immM1 zjPWksZ~0C^pBw7Lua@m+@s-)WhA7YEN@yS3(9_M}OX4-&Wet6oSiSFYZ{S_u84+WE z|DrwkXDnxZf1fra*X`%*=6!Ti&G;;|mM>MD%7zK9zuYMgI(`a!`~54zM`3A|WApny z-)sEDV};4WCh;jh{vfo&hK3`?HPIx*}s>U7^9P}eeZT7%IA#lusXgH+bK$5%ACuAA#Tj2ww5%Uze9}YWyFGhgVYDn@M6>&wtdZz) z@!QUMU}w%4ew#*g4rOw(@pY0EiWUcn`$IbMaH3O@M*`G&IdfR_xRkZDjJ36_DuKtx zWAT_gj&HlJq)-EU!Ex{B*tRd&hqS`uS=mOzJlh}lC+saj_Ld#a-g2ba*;^i-<7@bk zb5!jwx=R~oUaZ;CuOZCbn8|t-W`3lz$Ap<9Q?od0VxEMnjcC~C>@V2^*Kq z`^@N-3DKPS&OTG~vGy6=Qymep7NxH#IoS2kD(L7o;9h%yv(Fr0pP4g9`;1dgy4D}P z-?NPX zn@yXqw-F6-c2?voj8^`px}f^i>VjFEvsL|}x?t*$>HnXq3qqXv7IEggx8C1bNPMDw z?6<|7`xcpjXsCWlw6K42H2gtzL1Fdz(be1Y8>$Xh7gT;!T@dc7E(kLJ8sqxwza(Rg zHT%4V{`7gX+vjK9KL7rhJ`a!FK%e8wsn2aA@OOw$ihaC?JXl?N5FA`iUmL9<^_ldy zFgX+zK8CY)bxj{g%%OYp!?W%wDC}Pt4PSLnLHG)uOYbQ#D_7=+XOLd`Tz+^uX`tvopN6TM5FF855lXI8Jz7g|H>E)@vh59wWS~=%=!#5(Yl(WNT=-P|J z)izo8_Sr+LcjWIGP-w4*S|ck5uttuCue3tZ8rH~-0p^ZnMA!8TMRx?uXd`)B`x(SZ zGdd-UJ9Aj_ep+M(V=EZ8eb_e)6M&%=*y6wW$$sL)xoIu%0D=`BsPm*g%Kj^5?fG%I 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
6o==Tz!&#HGd%BwSoiJqD)!2?)1P8N` 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 z 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 Yt$qGg9QTip`_||#Plk8oNBjQ&2fzV~_W%F@ literal 2555664 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%0DMm$Ws%Kj2whI&cLvl|DSihQ>XZ4M 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≠?%KwRPG#r zeqP;>1XP%=r*d47vjI1J6bkGJ;53*89w)NiZfj%)*O2T8gJPl zTebveIDZ)#%f4ey=SG&PrrO`#OE8#SSw{U+?iVE8h3e zJzu&h_Nn$Rwqr|D$o7~??uHsRlH)s>`8B6kGr3{E{T1V zmQ6arI5+&e-aA-t1#Q~AQ?)%Y$=A=uWRsuY4&>V^@NtZ1a|cSWw|)$LSF~mOYJI6> z%MAPQRo5$A6e+L08r3cMFQ%SqyJ`>@MtjWz!v9WS+yackzhJDyrMVl@*jm+|V05-t z%QvF+ghYz@gDqS3(>9(Hj4^zp!Z&y|zN2@YwzT8U97*1}GjL;@g%2BZO0Xv8TVJmc zctFm`hB?@%b*|IiohX^%?68`Hj;9wH<4J96zy1t-lX+2{wga194QYQvnw{HC1FP$a zuSEZ`Qy?oe-}#o!Z~R@prO-`_z_g#Aa3nePtE~6$gXU~rOFxnsyZ9~`ojQicp?^*6PjLKg?*FFGzs(U;BgyDEU!}aAdf^ihNrgeaY z)85DI@ag<;O`qw9^i0#|xYxA{{_fhA4MpEs=M7TVzyj!M5}xrhUOSfGn2#C*Xyd!2 zJrt34oUyxWJiqaa5ouc~x9DtsW0x5_1E1l;#3LI$0Iv%AWME@$HxLuu!xuD8f;VgK zqX_os#gCvf*LRbSoN>HcXECb#w19QttNwPw53z+b-S^tW;BEYbca6D=wOkl6c7=-h z5H9Oz_e0cCy%(n#?BW5(j88FVhyz>~@V~M0$i)6gJ9#2m;+ekN7+K-HHQ9f)F2%Nr zf3o$lE+VsRJ@$LJp5ZC#5ibkNK*3a9FLtzc$)MgC@qo?zWv}qfi9zl}0zbhVVLsS9 zODfOo+qx=ctm+vdMzxjemHET_%UU-ucDr8zXZ#x(pt0acQP=0@=eLv3L7xC@W1pjZ%4E6{Ylo0&@p@1zVaI#rHG!b=LGVd zHRN>}=JpNf9J3;5ceUa!Hf$#@pIJkf>cGZg>bMu1J7+D1-hiJ<7P>a_v@rsV_oI8u z_EbG5wo>oIbGC034`_q0J%Nt+2*q?J4P@e4BWIaE)*jaLG4>z9 zR{{FV{hIMzJqS#Dd+_zjZe&ev>2hz+M&8lSi@c-fl+L$1zy6+^jefCv>kcyq@Nu&` zirVS}G zNu?_-x4;{JkX9@At+(?mzO>qaVwRV;A1t!*|yAdv^J| zp3?i~;C;Y<^eMG__x0ZRqw6!{`u-^2lt=mRZs$96^DJ#Et(5=g`3`;QdsmviFNpUm z{hkkbr>eq3eehwv59Tzo6g`2A{IHoM$QnW0~qMg8bk z$Jcm!zQG>w(>Hi8{<}4b1Jy8~bNIK%*u#XckFaiA$5}wtDcoqims>4;RXT``3!pl) ztSOXtgqXKe)%$nkXU)hMoBK0>*Und!OAzDinI&Ic+|T}x#z`>+xOt73MH~&0yOdga7MW7^Xb-oE&q}eRH_czJc}*p_k5wv`69cunA&zfV~ph5LfFh`Xgg68F;wJ+8@y8R!W?fCq@4XRt`aVK7=;jH`R#0ui9 z`{pa~hnUSAxDsD&Z=ms;`61~{h7Z&K`?qGsmq7#2?X99q#djG%x8N+e;hCC`(z$hB zSNPI<*{-Q|D&tH)is&hA*v4g-Q~#X3FF(&)`pL`T(+i*j?992g(1&vH9B21a{c0yg+uk&9*|&hP4;$Dz_CNY!t5ziZL`N=w z$Kl+;R7^q}{|{#){N)|J?0vX8!*CBb*gUx_?L5!1SAJxAbl%KtZ`otCKN7$fhAlr^ zdYjd=;e&(j+1VjI#+fxlyYP|&=H5^r;kC&Gb|}FYu2bt%(U+5n8k4MW3y)O&;&m}_ zYUrDJF51h2FNX(>SHb9$Hm~wYC!Y!3CqnIq@xh#0CR@-Qz;pyUt{&$UXTxvcJBzU7 zR%ogS-`Wzxr@zj^kvcuGH1{{0OKW28WBtnt;L*ArcpiWz z&)lYdSz9ssJABMOhiwn`yYpKp+ac7i)9fjsZzZ+98rcx&ZnP;pOlABLRIn+H!Mj7@Mwm zeRcjxFtaW@0#2jysz2&W41VS1V|%t7i0z4UuB(RqRN)m~e_esK@i6>c>+My6Z9GUj zaVNH1ou~dJ_}2ck_?vjD()Y;^gmX|%7VBH$Rryi1m_5<(p7;F$ulBH0=nPbj`rQ6Z z&u8%mK%S}p>bv@@JBl)1%S+OgvdkyxOHNl>`+d8vskARw;#Bikeq6aT78c=Mb5U)X zxqEtI*+Jk)P`{t_IFCS#vXouFM&0Mup0s!rZHO-1{9%mEzMtO1`+j}bsz0)~$#!D( z0Qdzq^U64#^8Hf3dt%ZvC*P&~CB82=_PF5gEJF{I^Qn%g@*d;QxFp>_wwD3-?9~M8 z_W8Eo-Y4w4*Jten)oUa9uxpHmp*5`oq}Mv1d9~r5Mbm1-u4gKJF!fz>GZXLxo#hFi zU!B+)NA4zw(-b4dOf7zob@)BjGk0eqe=qA7pPu&_;dc7K@8DN?ntz=^dNW>QY^rDJ zpKP~+Gy5TLP<~5qjK=yE18#!YGl$|=k4>!ch7Nu2BmF}=uNhASHVQSZEg0d!2kq`By9jdm?%*QW*PlJK^XH$TuWn}m360$!uGl>hZ>h)aSzT8xZe z{~P{o>;1V`b|LGL)#+w`?#3J5+V!aF7me#*^3b(|+(BkKzFuxG>y5SdNtfUp%N_CN z>s=nfSYVzH;=`i4`gpEIW~}s+qkE_CC`sVD+u5Q<_JpALB!HKnXil3-W zwY6c!HP<7nl6|C`xgSrp7XsPoA=|Z%Fm3WJ%)=I_O}@RWHsjY^udxyggP;3q{{VhD zM}OSZK5~6#Xx*Gt$KqF5Z+WSXoHw`q-wU?n6&<3DXV%PrF7@He_?yJK9c%H1MlMH} z1wX0TI{VZzAYa&_ou3`M7hbD;N`ps?E+B@G-W@*V^XSHHoz?{KBWuI7dv-Q6AAT4p1s;7Q^Q4j&nCEIq1k&1as=i9Q>VH`on670-Mw764cwbbN<-K_=Nnx&G#+HmhIpf|J1?4&d(VCyCQphYpC1hX{Bs0 zc~mwrHZeHQ>^B8tP2840foFTcI>O_gj6=$2a7BH55BG0~wBy9m(f9p9d!na2`+e$f zmh&8}7tOnT_4LioN!uQB(cD}3>j6*bfhWjc^GCoi244@u#<@6Cm*`9LJzVDb6P5?K zHo|!J!L!4K@GKfy$G+Zc+<`SlyvR4fqiCv@`%Rt!|4gE!@UQQK@z0Ja4cRrQyh?w@ zZ);C59x8tX9$QO(m!@yeFgI7imkNK4->F}h?(*kd-{a5iTEct%Ur#L6^D)hb_%DwY zprt6j^@{id`;q%u7rT9d)Jqdfja{03$giR2^zFn(&GWDRV4_pLY9sJm(a`JskHzcL zeLH`7>^tz{5qRBEmdzCr*P%W_!M)0TU zjoCSK_A2s2i`k&e=D0WRc)+^4w)Vcy!Z*QBVuj9=)~5Svv+zc%|E5@z$ZyAvTcvDX zopAi$@=omyD(-R{uqf`b<>i)E?3}Z_)zVO~USZ$GuCeEty|_OapZGd=B`qy|%jP%! zG2c>r%OXEosatd?o%?IVIn1Klm%eF_3*TS$P36ODzGTVQ!?s&A{NKW3`M-lLNJri{ z{;%_TIp(g;*5<&k>J|*Qfk*K+;j?98diTj&ez9NYl}>NE37NbB*}R^!0Ut+KTi1`= zHv05&!;dD%o(t;|9{ZH4U-%PjvWcn99&B!6m%Y+m_~U>Dk}w6JcG#ou1_x${!0 z2YijUT!9{^y`Z@nbC*LdO<$misI^8|eXQbJ&-4C@uuhYqkKz6c-v66;q~U&f;MwX+lh5_6Vjd>g zW0Bspn17Y;@Dl@@yi|Knoj2YTo7;hHVCd_yL`NGu>kMaJxAET3`lI(+a|U+VJnFaW zgUNm*Q+>xaJCvKn8S~Yv&t+G~&Rt0z`ldSjpq~dho4bwYk0bZ7?GE*F-a>md!_5D$ zD~F7?f4BcPY0CtAZsp1 zkLYO2bcXmlZ#Q*R=R1R5whBD|kap!)+snB1GQRM}gN!RY+0ry;t(WS1FZzJs*V-AJ z9lQ`N~HRq;Qdqa#>#}nzy_$O)ejN0TG z{0-)>XRg!sV&GHylkd-rzXWaDbpx@m9FIco%_)7ie5=5oim_QxE)&q`{dY|3KjS4j zRBs-d`HtG+xeY%Q&0~Fk0(;(})!qqcxRW@9C!np)40&bmfCl##>7#4{S@ODiAGm#b zfA90FR)|h=hPEfukk%h<=Si>L*AV=oV`D>Oz7EresCf!swR;uJSLtxh_LBl;yT&iu zUn<~-2Aq9JxKO!ptP8EXM33rI!hh&nqBX5M!+Xq16Q8L5?qr8ub5)iBhNOPgYjpMX zIDNEhM|&r@^Z)R`xp1fYEPgB3vdfH5nO#e&j|F5;_1Fv6`!`NAcKWbwp&AZn+t{43 zG_VgE@S%ZYz@YV=)A_Qzn>IppVB45Jsg3i&9_G`@fOqxAGT%xh7*G0gAN(uKE5rGP zGtaYpFB8zX8~+i~;Q1#0R}TFkTu1FpVsXxV=qJh}m>2v0K$Q{AJ zZk$zCbrlSKPTu==`2=%y9j>g>B+skU!{g>~-U=+jmuy~tfQ&AHZ`z>la;&lY!~?0b z`n#X8G~z9?G!*5pXvf0PlX-cqcL0`s>JIX^1-U;>yI^Yd8WwDO}4_^gYOM}2%#J$&Cw3#Irw z1;*0(ETAKH|0S|7fey;r$n0Bti`q<_p9JsN0&h)FPvG;KoY)yF*`rS0Qri#U20wZF z@rHaE!I9b%e)LWFLH{qsBJ#kGz8_+ki9Z@KYL-D&-#!sWy8WtnR$xr=kEScWyVcHJU=5{6TBsX608 zH_|~10pHKjSH|DOGE{!?mbZTW`9AOp8R2(Kx_BS!L*?OGWE}nu0M?L65eclT7!?p z;6u0)UTQz?4GCYCPX#_rS<5?>?&h@W5$=Uo^GrWg#ykU4>3OQ};h1;8Qpz91zuThm zKzC{LE)YKxTaL=+tH+4%Zj3ZO&_t(OkBDya)SnM*QW!-e$Hk+Mk#&d0f6BT=hm6bP zu_@}NZ>n2uNPZ;N8M_KJYH?bvLs}UoUvX<^m!9Z&z502IIq-dc*`QB3+P|NEdDAQ$ zde`_Rr&*aC)>q4Wc7dG&x|iGz=Lyr0nRmdi{uPncxw?RM7}Lc+{>o#E{onXjZEfZJ zs_u`4-^A-kJDofQ{L+bt)nVGVHl50N9fHf#*$U`Y`&GiB?k^k1rmOo?$3k~6d#vB) zf={)D4u)Q5_bHt3L;^iPzU1(N6Y~!5dunC8aWrduR;@3H`ls=5drX{T*;B+`sPj&X zWUmXx_%LTvT0DRBkYZSUg~ND z53+gp#2QBj%skP$Cs@0i{s(kH-)V1>&evf2G5LE&yc8VRF)G`R3XC&wq_^OMY-ou# zglqJ#wD8CPn;36S|06A_XZSIGkd`+MQ@7JYf;qF-@uuqjmuW4QRy#%EgWo~MPjd&J z+{>&E>{0d7w;X$?l2KEQ zdlX$3Ij7OUoYlAx|A-hEF~&>#^Ok3{cuifRyAfhdv1c{Z^oL(>KExaw!=FWP6o6xb zJ;}TAjT(tJnKObv#IJP(nv}nmt7i`M@yx`*zh~~~yZe^mo9^3)8mltzvvW#uL(f3} zV~m+-T{3nUIu~!nX98Mn;;ghiJE89vKldiX9`5%7{OO;**7Z5sZ=#xS+qR`6)IeWx zXsryhbOq5ovJaS(z+A~w>08A-3%4&FLj4Wf9i>B@{hW^vM5PV^@1P)ldBCM}=XMU-zS!6!Pm+r2TH`rew$?G>b8_LjqG(3z8p#^h=acl+#W@qrq@WA&8O!6E=xd{R z9DTL%53KyL`*)fz7c(c0PuT~{Q#4*t^@P`DMXOhs`|HDcg_|d`0UBEyvA}ZhJf~ks zKdHuPm?vBOm2FYgbc#%6p2WdX3_a7V3)9%052D<|lP259df+*V9r1>rZO{Mf%$RU$ zWrnq@TYOp>Czy*S-h8Fa`$@y|t&A6K?KWnjX3*5qWv)4 zTYgvhEhD`R{%-X)y9U&J+rqCJPdhjt_$vHNeNbPW4(8T`dM7PepiX_usqXES>+6cN z{gr9?0G5pT*Pc>D{QqDbO4@*6jh5V`u$o=E^E*!&_ zVfl*AjRw9p-=-(Ee{S;mzT=#CT*Nujsp7Le zO_~SJ>#F#i;RiY^$xrDHE_-$_8n!UL+}(!MQ|hKidE+2pFw1%`!$0fIA+_;D%p1Cmxtpb3)fry5 z&tWa3^cyB74vt5x2ZRI3Ano6&E@+E2PsbGrkj= z2)D=hk&ZnRUh4N|`s3tr_IRcJ9kT65q{~*QJT(dOU;|Q~?fgHIwe~CJz1V!NPK|@= zto>T1zb0t+829lB53W9!#}DOk>8_qg*r3Np0^6Fa>tgb`I$gU{!FE2J+5JS$UDCHO zE-!uO9=N#A9#4#WEwv94$EU~Y*P?ClwYc}##{KejTjT9n=oP*wUZAuTJPtp%G0B(X z*Z?JmbS6t_nkO!X9b=tzGEe;ctzTcw{cXP4ue0BsUYRuVC!9X*PZ>BTvM9-?5NwoAX`h+_i)?dvthi@p7GyM z-_>t-1`ofp4xK||k0o7}_dN4Wa0a*_&Bn_%ayEd&?x~h=0Y9pYD-yQ*>OL~{%j!P~ z6Awi7=V^aGcnG&ozEa#8V5-==q3?pT;@c&9xI_=({k=={aETr+(ZeNqq4oSFd2va9 z2=jtV^l*tDF44oK^@UqsRj(zY_`_uTmDx`+HY~e_@dkBA40{;HCM2JVAIUC({lNF~ zChm&X@bWn!KmG`nwk+8eUSnS*IGMi-TzOSeo0@xq%Vhg;w5^xL=RzlsOEpN zmC3elcpvsQ*>z-7(*BXY75Jt+*4EQdvh^rNaoN^meHYmODcO4J;EnQ45P!r@pAOsm z^ekNcU} z$-{R0f9^ele=ZySRD0UUi^x6j$$Qyfd8f0-^eo7@&%Lsusb8AJ>sbQ4z)+Gv|yi}Hm(0CG70$?UFN6l_d6~BPV-O3 zbJ^EA$$qN#uJXjM7`DCxZmjm^8@=(A<_YT_;h6M6?fvK1%TK86?<9D_{;Kkq`0fXs zzeMF8wtRdhpBF2`Bb}nOmmQo<$WO7CU2~mnqk1n}d)V5`2Ik#6t#1Q+h!$SHC3PPF zu62k9;c>&qe-Qg6(*)pLj%d2j^t) zhfBMdFMrLMOtsBVz8-tS`SP6055HIEb7L#LN_&Z}{yhG#D)$|o>7z}Z*VEqOU+}Go z`w&um`%d6*gzxO=apJltzjQHIhn+jxkF>ru!^9UXa^8BFapmwAvDGcl^EiX>8vYiH zg_$?%gJ?+lpPn=LBh96KH#dwgAoVCMOZ;sY+eUSVW54VmPKLfk#kNt*73V{p;T(Z{ zLLOxPju10JaoXCTJ8w>}iFarHBFcBE>mK#-g*tC(&+k?H%vk@U%Gj$KTc=wpc8cb< z{DtKc8TR>j(DQ27FW zcP%ry8v}nc#ev+8kN60&RC`v(#)wtHFE*BI_lA0ik=yfjynjCU&WYae70BQ}C0r9H z?!->YSIzo1nPr}*{pszKd12hCct`v zJ@!t)!o7gwN5DsQ`&((hCWv!w$7*tH0>L7h+Pc6ueqip74*4Y>xYzoIt;*&%mcGM_ z-~)r(h~ZS1P>f6O`pv{O%3bdb>5c*U`?L{vOTHWWRO^Q$Z*%oRB*h;nxk%J zW=M7I(iv3$>gyNl&Q9v6o1Yn~_vc@~nV31b!@bRmfAC0iJ@HtGpV6J$-rKD2_fTeK zt=GLqzVno+<$iOecbU4by54-l|K;Pzr8H-K5`MF-kGwwz+>7CHYP*g5O*GyG%JFSQ z+tqV#U~H1adL{1AZhUHL>y$2j?dUcFk{JxA& z*j<-(Z`b$`uPxyxuP2`NkmJ<_&OW?+w{Py{eEIrVcZ&F1FW1fNE)ql0=5Gq}Hw@H? z_Yuod_b61;{A&9ADn9#bNSoLx-xa_Atu@}Bv!9C*mnV)~sX?wxGqGw#`;v3|&k&2No^pp3_tIOFH!L6P=|rPK7^NDqI9 zLr)pkY3rEI1y#mt6wJfK+jMe4?=3TDcBd34#EhjKn?c$VzcP0T@mV zzAZbgpAY^h@O>K>>D`=J77g4P_;dbjeLjP8wa#yvd13Af_@Fn`GT)5NdG7`It}6#k zIawroO?Vxkb&m%x$*6A820C-;nXxQABQM;u_>Nm&QO3kZdZ#$3)DtnrogF~qx`BJIp9Gdu_{g0G&fzLJhpXTmu7K078TSDvYgR)u z6Zrl87O_iG+&6ui^O(}zRj2Pa9X0(#=IL9^ZyGHitB#On_;j!al76auS@?B1HXiFy z&Zz0Tbp9Ra{8o>({9Ssv(%_*+C%5NuY;3$H&d6yl4$}|ik#6PE<h4EVF^?*)zmI^k6H z3umJBm!a<`!MEnxXq61ErinR>zi6SajyP8!ZQz09~RMCTCgix!1D z@t8PmzA8I;u+|h!b}_!d3>;c(2C+oZi}X$94c-HKR(bIw)zKHM3k_Yf&X|l#JFhfm z+&Me61h|Gd!=ZYUtT!G97ms{3`#qg2$2ojZ=gPJJnGJAd)&l;VUBdlrfb- zfrs1d*iQvR>C8KH5SHCj%WbXUYdDwZ6PtJ%XY{5+OEaLU1o~EOztN9~50wpg)XVV1 z;Q;PbljWHi{xx>)`)Sr}nJcYc#$NG&U^>G%DBZ1{MFTp|*TT7dM+087+b7X@TboI0 zo;TPD4S0+XKQrdTbG6pyE<*SK-}bTw99P`ZPxH&pu;(I78S2vbiq;2TxaPSf=xT2;?#M*Wb2bo*dH%qC@!=Iq z*`Imxn#^NrH^DqeJoLbqdi`8GeB?#NM>S_-S&w{^xjx5?`I-&6wM`DfjIzQVI)OqG_GyNmL@;>U(KeU$Ae*BqO zAYwz`zcjyeyeeukSL2r4xU?TRw?7eYsMKj+8M=$W#0(;v-xi5`)xsLob-j(|9 z^5)6Q-Pp+-Wr=4vyN;O6kMfPXFW7S*UhxL;6-Krdu&LwR1qzlWiZa6G%6#Kw1X!6Us98j!B9 z{=S4=$?^ru*9+WvQox^Gb6++HH~-Zy-80|dHE=$;sUlvU__1(y+w`#xU`c-uS+D$s zc*_`a_MmXQOuUirALN;~)9>eBb5FdzHK4}@d~-e#;X1(M;4t&W^+9?CG-2+3Iaq?< z@(u_8{xym}JEsEvVQ{TF!ttFK0=r<-exK7D1m9%7V0kILi9N%QGq2Y%zkh*w{xRa5 zeiXm`wZu6s#ceWu6E9TX#1FwoGOXu^bzrZ~@*?StMdY7!?CcKz*=!K!RJhbRs^O4s z((4RGBwBm7X2aAF|kL^6)F-L=LUvjF8}PI1)dqZoddj;eHuC7<*bK z;CWg2c? za2{|G=LJ=Ny=ag&^;|8po+sa0&K@gG=R)kjYcp{7=;}VzJba_U%sFr1UNh(1S&W8(Cm2`N`N@zT{W#x5A5mvaH81wx z>GU&;?|j96y@jzDxBnWiJot3)1?a3AKf>dy4HiGtFFsN_*HTThQ7{32NiOyRdqVRt z^v%_werbKLw8vTF@Ne)L^6?6E*66-h`!|?50`FHGkyG&+Q#Q*!gXU*&4mC|1<{n~= zSuN-4!m*30*J*k1)GK+4zLfC1@nd>t4kpl*+ITn5*#DT%L(s0to8!Cc77y{rtAE*q zDck8{*R)Zm7o6$STHfW?I8cvpkkq(3UdOw`r{RSG-6h{?eyt6{b%puM4ZtKDHuy5O z>too1$*Xvn<@le(*K~YD{mR03lqb*l3YPHNQ}*hb;JmWtQMjD?8-9PM{n!GorRQi2 zw(1!?GX@6N=SzF1?fmbazk0l*_>rA6@UUrPgfTABnOQr*V@3sNIjh0V|kNBh)krBcCFuZ-Ly4+m!vKCI!q_eAq?S|@;@N)5Y z!`k`lUd2c&AG1zmSI>R*T_Se+!RzpYrKsz{l0Qo8YsCLC8T}&WwnkMGYpki%| zsz0~eIHfKXm#~z4h>0)$8%@(lhA(S{pEyN#)t4JyzBNf~m-wH81=@CxTaNVS@wa zobch`{sHNxEOSfsXSw6!7x`h?mYaResO-j+RkhD0yN*$Z@Xt~btLhmQ{epj{Ici= zO4s}|@e>2ttatH+WUXwIm3Cc+Yw;JAwYp+up0Ioc7Xu!9h9)oie-7P8byw>kVY!$^ zwymQ~!t=(r=ovZJ#rNzM(iq$m_J~Rope*F_Xh)Pz(Mf-xm{` z_EFEfV#&7L^7Xa#yE1+Yu{-mRu{PSHxXrp3BFCO=&)d`bd)}_YECl~P9y2sEmv-DU z-?{hK&=Pac>aJPQu=2k@_$QvZdFS3*^WPr)|9tSjI{3fC{tM=czK6c|AQQrA8W;7w z0FA3|^s6aj$-as%t31^@NCA9muRWtZLF$`L|MXvbweG(34%W89BcToP)39EneehRH zaYHKgn#6n9J7+&Es?5`ri-JRW?}V;NyC|J6$`1lvZBX|X;8&Fvt^YA&aoX+=I=#{O zQWb6|MlN|}qs|BWhr`ml`DXnjCdbn{2oCzFFUP-hR>=kRL*F!JEy3KlP<$abKf?Kb zCVfE%E%gPv#zpt#vWUK1X6JbrM)gs1Km0AKFNscjH(&xB`NA3WRm<8ywvb~yE3T*f z5*D*o$noy6hR{5wE)&0~R35nAP5ElxXL+6Fd*VGA1wGq1dZ zf?4Zgy*u3I;m;a-H{XZp!~f6T+s9W`oq6ATpA+CDK?@`SIEZb1X@?U;Cp6BCRN9W(=OLiZBypJDZAokTG6ZydsLpiiZEL5W zxn~S7YLK=L>#vrKc8nlPyaZdefHjKuXU~Ky4Ll!uCMg>;dlQjFiKXF`_K;~_x&&q|IdIiFH1!e@x77VlC}Jo&XHXso5tnU)Pqy@9vmQ} z!ZLY4J<$EE^$Z(WkL*u3pPgl#hU+zOA=fkFC&^xLA-crDD7rWqN?8*FdgtEnwCP+l z>5XVkgJOcJ-^K*3T_K%!=N#attsj?}{DXe^qUS#@Egxm&v|Xi zMX9(Vw`}oy{8OnGzfJih%3p9iBRvA+?=k@Q|#<^I% zw423mQQPU@THac0@>lfSmcNKKX2IE%BRC(zJh$_HxiftobAjO%_I@Ltzg%`UxfH}L zKK%`yGk+&M;p~(z5wmmssNtJ1ujsksY1vs0Un~E+&HZWR{5-)3?vVr5r_;UWC|Y<2 z@|N#sp3c!^53zPvM`KWj$_vk3n&TR7>DyxLTgzj}sooz`M;LycN2c$Fg4I12PQv4I z19S`cwV#&4gU)md&qJO5l=eS)&g`@3VE3_czo9wD(4IBNCNeg~BiLU1sar4^T@TMm zhs$?jyc&B69GSS2$beQSdJIc%R@$o}iO)uwN|mv9Yj) z=^y@|k$fjVQhXy?%Vtnabw6`3_z#`)eShsv#$E~?b(nply|Th)$78yh??(pq26d%c zI7=1$miy&*q>{?9Y8L^zR#||**}i| zAsM+H*(e#Q{CB7CB_kyt-M!}hj?E0`iYV7@;Ip`RnvoIEF<4h(`XqZ-^j7X=3pfqq zaFt>rJac>?Uz$1pBRY>&eHC9AJJ-rxov$=o@eR#)p1iS^{O=6s5Lg__1{msH9IS@t z7;`6Cf1ooE+&+hrlag(pUgouJ7~^%4CvVogh(6-Y?TqgpX$8O&>hjAG7`MM-OkdLZg<9sW;-86<=TITheXkRpmi!VA_xjDYqHfL@xU=Dv6vUxcE z@(6NuQYKdi8ZgGi>vsQa$!GSDZ`U01d}OHFmJPf+G477z;~rt(__24K;W~eWw{9hT zFIs&f;gwd7@J8=WjKAaLYQJrwziq<2VsG6y$%{~4%mjRm6UZ~pS}?K^UHjs0&fPhI ze))yTC0G8A<#+aW7?a@V@~r!FoImF6+Gp(MKbWi7>3-TSL^jMv|7i`v2g){^wJM5_ zVq2~|LhLA2Htc$xaaW&ADJOGHcu#jR^@j@e{5wwidtWri0!V`tn5-Rp}DWrDg0@SNY?vSb|>q>M(DX z`c_453^_8kZ+j}~+x4eE#JY*p2+luAdPi@%kG<1{W8>rGbK)FsMOW9yN_?anI19ds zaV|U`NB$SmMm6$ubE2@AH5%8g*i&_65p68rvw6ZK)+7}H+hTKO?zk%!1DC$L6M6hs z%p=sFzHE+Q{$Hp2X4^7juUI@H@w9_YaNUXz@)+y0zqFPg#>MFWgQvb3tw$Mh@GRU_@yG z{ME8XOZrJ=+cx1G;W3I=SD@V(d6OtEC^1{Y=RvbC!GDOaRY zUN62naN7K%7Hn~Jqw(Ekx6z+Y@yRX94+ zsqs@d+RB4)`ClT3#GC5lhD7-(bZ_srMCwSEG5c2=|LD{)eBv++|G=D7HnHN=og2Lu zThJlOi>znNshxe$GThc1)GatS0mmRX`L43hei#16!jk82=_m62l=Iq2p5EwF^nY72 zwYK?SA97u}WL9?ll>ZxwtX%%r(3nO)jM2FM5${dxLuY|ZX8qMgcJ71soK4Ey$FKVa z%zb!#_YB`0XRM_-FQjQ~s(IHcZ_7A;#i?&2qjKP>g{$DTKB7B!P;%Dt5Vq57l@o8D z29Fv~DlcC(T_zc9%XJYC`wsa}>Z9b&)#Uv`l!v~>w;z=JLEozmy?+@!Pu}C`4d9>% z`SKFF8`-m~YiyvWp~)#|srZ-LLeBJdjaFMWPLk!n%8n1@6mt4VE#pzoT+Xs+S?-q@ zn^!VA!}wy%n!f6PKIUZMN7l@?&utqXvS*#(rB5r8sUtb~_AB(|+vs#`jM8tD&-J#k z?I#+U(2boWzUyX8wiV?%Q~0Q*;Mw2`99!RPV!zDObJ@L|8;^XLIKT(8cAu>`ZTze9 z_F2g3hfO}M>ac!|)jg7l7G|T9m^*I*4n30`aqyP%O^4deYj^pE6!8l1RtIrKub+yP_D=3%$`Jdjh++qK;d z-d)?!#H{IUt zi=5tBjp+A1$Z@;hv*iU3zY3o2ZDeff9d$e;-&S=A7aq1vH@Y)!UR>{w@s0Q@?!B|o z^?il$7o2?_U%u~|{My7bw@)Ds z+x#Ry#V^WbmP}H7yU6ga@=NuBsc|c5BO=KAEnS0n{C&&a{NiN zF1WOP0eQf(@zrj27<*+Kng+2v#;L&r@HLftV1#75$@H91` zNd{O{$IX0W_?ujK^#1bW*M1bde+2w5f({EALvC+vUwkpBe&xwMQD*D9j`xh?ewbEL z-}TIML}6M5OaXCE=zllQOiY9SIsR)6gtgx+jk_6lP2j2w zo=YW>tI#jnpIZ7eeSB`2_)PpK_$0TY4yly8~B-7m)9m1(+ z^ZXG}<1EXm}{fPhG`iuHLO&jXB`~D&b?mF~*p^IfXzEJ$5i+MOlpA7R{k~0_a!=~$>JF7vy+{91*k!Y%T zk9^n*3Xq{mZ}$7lbFBln^2hjB$d-N?qVrD}lkOgVoF%zx?f)`t?uqQr82H5C+v-&t z8xm~cwRX?oi==5Uiww$Q3pu;N!}j?Ze5>ckDxO<;)`frSV4ez(qf@r>-Ryxl&BtLi zwuj>Dn`b({W?c{M3^hM>wmDnTz@1$NZMTXBE#TeJKz89A*26hExcN)bKxG_`HD@dT z*WnaC3vg=AngXX2`f=KQ!P#-T5WDj>aGIe{-65Rjz|+2jjep_aE$>3dwgB7qklb#0 zr_ac3y;Fa(c3yUCnyZ14XBox-`oQQI`MxR_rg0Z`om*p-UjsRzUF(Web_2HYG-G>N zn*Jz8J{h?))zarm`r>q^(~lN+c3ev5S=?EE?ZQt<)AyXwX;vm?%~?v~QQ=dunTz`I z$-6;38jf8*4v#X1;$>s74$tY^I9}UdMA0V@4|I^g|_bF*IwUt=Eh~%zSnVn$S`C3 zrZpa>d0P@`+ehrXU8+aVR8N2V!@b#W()YMJhH5v%o;|W_^gi03EH=`=@~(>ZD`j_M z>y$4*w_~p;zptXyLoIs`Jx)CRiQ$==T3~syC{xo7Tz`FGrp9;h#=x4xE_jx@r&71d zpRFwCP0o_v5ZAB1X&)j{kb=W#f+Z|o-pMUdjFZ?aO9rIg!JNCEucEWG*?UZx>R=gSI z_1v3%vu6c-8#kVEzwDcR3GbtMUy=bD|2_B&#N$|d$Qe__XQZ#b5Xnzfy&9vN8Mp5L z#L$0qS^x7~@L#e^--zc9uFfr!|E6cMD;AEj=lICBNyDSz`5#w*L#R%Dr+Qo+`XBf0 zX4(jk&m4U-x>Fuy>dCadWKirn}?5 z(OFK&U+j&9>B9l$M*{fqX$J3W_GxlAexJDAXVDMBv21(c*`Cd-IszMqxdXk|z21wb zvoX)Sm}f2Qoe}*u6Z4FC#h`LIo<(t&z*m1_vBjP0%`nCVlZ)5dxq6)gJa8UATF+G3 zNguWK4E4=4>Q)T)8LskO7jl(-kt7bOSnfgYm8W_iSLmfZ3ajN~$p<`y?e}UjzivYG zQceN5gBIUyV}jr0Wu97*AfCWkY1bCCJ&Rv?Drwg?l0U#60PgHrv!>I;1tmjslw*DP zI&z?leC^?U*dc5zazZZ z;`z9PwXeq$>#+6NxP)l-5X|D0&01iFJuNvGJ^4e~mpFdMI7s`9v!Mi7}vUC_Yb}S$4 zN_ridkBQ=ED)F0}>xTZ$%`LgU3id&Dupay7jIHBN;_FV9%V*aAUgHzz&&GD=Vu#~6 zl3~%jur%|WDcKvu=k^o(mdZ|-@8~Fd~M#jxc!&l7roDL zRr#_4uNPaV)9UiEid$T#_sabpgiDRh4_I6(hExU2Q5f{CYd@_q#(g*Z6xWt{cSiHe z1N%m-W6s}V-wkS?@pAL~^X(g%h%65Cnsi)20Hcf9nRWu1gO06^qtifo=X3S>*6amU z0j+nio|5}5J62m=q<1SNFGA0>#yp&>IMiA2`c`&=zU60PDqYAZ;X?Om_`t;jgzL{t z9T+!P?y}2aN~72Gor~8gRyWn`@08!?FdsJ`2jAP61aT9-%g4>T;6q!ljX6Mv*|FnN zI1cth0LDS%b`@)*HU;aWrj~HdEPWL%nLm2yy^J^M&DH#vlitz=|Es?$BOcT{iw`?K zhdOIs^{EcZnpmU!Q~l=`8(ZyrCVvj6VymU^xAQkm(618y)EL$LR?{kc0_Nh5W5X`*JtuH4j6ya&et4=Pc?rd+fef%;qx$uqP?{bt?rOs?GDl1gYK4ZMLSD} zR@S^p*Ia~;{)qG#Fi%+EZONGVRI8WLW)4I=VeebWi~R(+z6oCa8SR@Xj>NZexqXU=xNn|V9Y?;zs8(a9PJ%` zolHI(&7-hP57x{nHZqibBiYk!@*W`Q>O^@fFo8_~ereRqvdjPnF5iW}p3?)Q_r3`F@D5(pLwu6J?ji z)kFK_`sL>t!*;3sciALwB@5b5VV6pmik5xkB?vZ+oeaENPTmo9>!UcBiu`&ah`kC28Tuj|C^ty^9tr=l3Hz8|a`iCAcI{{EJ6)PGXW5VKKd1L3 za^TCz5|x+!?qXi7hcRmXI^m)WT$Hwd85^nz+e+o6r|o#R^mTM+p0p!Qwr&LOg6Vmg znTOlbOLb|U%gynq4Oi!9%-oHYDYA{j^e}R3pt&wx=Vts3wv%=c zau4%Y&c;(6Ic(^U#?W#v zGG`HTKyy7&*mv;m*+53*<%?Z^9=6k3$^Tny<}~bjDw8AT&wp9`gDmJ!9=oG^0Lv~1 zTN;_%`d-o5eTxj{TlGcXt3TbynSs9b_;xoZc7w^WGjmkc_;4C8?SBv5wj<}o;}yon zcXVTKj9`y}F#OSePen!-U@uwvmlzvRe6Dh`b;RqdgYkYS&@&GAU93?W3f8ZIht^A3 zD+k>UPcUnmcO54GXUWOI_Tnn^z;yhW?fQlsYlA=VBDrubeOLvr9}4Ek`KG@Q4u0{z z`u7FHd-1-l@Gsea!sf*rTU_4^l>K%uiNUhp`X}+Szifc)&yd48Q1;t8<7B^Li-Mse zko|3gWPiS0EBhtyB|pR)76wBJk@ zyxap1cO&bqd|JSbAC|#!KBsKd{n#&djfb@#Gw2w>rZ&5fLnrBrjV)SPr00nTGvHbJ z%<7mHwHH{Ovy zyXvtSk`*?GrT>19wdJEW`v%WD+JpW*1}_{;Ha+TeGrG2#oU>hbVgu{!dS_2M8K(E$ zJeSOKGFRh3{5Q~Ew|i-$huXdI)B}7e&TVMrnk0rJ__UW#)+>KGi5v~vqN|X#Ph9Tg zZGJCpw;xbkoeAvuRY9GZA?kF#tj3AkM`(}Wf~OPY5$b!vs_&Ic(f^Lz>FB!@FcX8= zlG>DLQ(3>sYfC=lx8e7gHGq<o$J z(*D^Z;%V4tHT;yH;o?$Zp4p2n7v?qPW?23mj||k*jcw)ZRPndZ<=LA>bp5Z3x!%|*L4y6g>k*8O4Cx6^^$qOslrXdwO9A=)xCu+ zLykA+aA^O_YUR{^mA+~WMfpZDVLCR7>exnp_blL39pPNh1Ji|%yl-dhCB>62_By_W zjqvhxwX3mg^W^2%J6&Ee+1XKn&wsh{8jQR!ezNv|Rol{&9=YzyAJu(!GIEc-OP8>w zjGVak)35txO~3Lj_YvD;ZRdm@a{g7`wOfj8_UW_W(^zx3=`L|G_RwC4rS@41@T;ua z^xp5yW}emL|FiaV-OBglM{!<_i&wM&yY>#Htn=}=wj|lVbSlpSJ3)D&$fDld6-FNQ zmrGaBpX)cYiB8@y$?bq|h~rtCR{UdS_qd=R!jtWXjSY9j%^$=(%U$Npz7pO%9a%%? zfm7v|U{CgD;X8w8^3$cGO#k_>Sf=*&HSdt+%6YKyO-nx?*dz<|UV9NE+juV;*#6{r zrt;zS7D;5VlZASxJ~=sfksaIY4}cD3uVK~qSzy!rLz+HxMf%V^*4ricOOe|>tV2-Q zrs3iPiz6#HtnXy{Q0C3rMT|kQDTi~Dk9NFoc_sBrwiY4>55s$klecm`jlNZX9NoL% zkzVwq#%eamk%kt%+eK^Pp~Uj7_Ttt3Hgazk9_d?tC4FdtpIltK3;d$%!QaI8aM^>0 z`%I4JKH8}d)lXe{{uyQIBv{;BLGC@|@;m#KdOi41?RNv42TUEbZRunADvuj`pJjc~ zT41ze*T&wv$n6jKp}%bpoNIjI4+6X9GOZ5o`uDyL*;tY@jQ3v2n0RX;e@xqsuk1LvsNbi#m3Ps4SK)^}5#Vb_ zBsTQdL&SzY9#hW&`8McU*;tOJqHRg8F1o_XRR`ng*B7+8@hn~vU%GK{aZEd^O1KT*GGM$cY0oH-dTIl*`n{ZXL7WEd+FbF_DOsY-5Py2m3N!S zCB8rIooGW|uI-bR8!yF_t5qGuXyW3G2Z&)6q;tzIjKRBU8y_Q%e+Bcie5bb0l?R`U zfo&swc$R#(yJOx7?t=H(HqMpq_!fisM{V3Zg)^#R+SrS4ee<;3vXwFKYI#=>@U7#g z+k$f9H~MbIt$0BH`8iorDjpGk=(%Y6U%7mA-w^odp*iR+^-=4f)ld0x*mcAOtPb9T ze0TnX%ISZAkFChqPGrtQMf^1Hy_DZp?AdaE(j6+h$lv^^%IX{I6I(gIM>+^S=bp>& zaJkcFy?sz#&sC4`uJ@`-_;=^TzuS5Y*1S z$4?tyM0vT^hD)F9Gj^b0aL=5rqq@TN>%5O}KLtZQct{=Z+hzI^;4Q8{Ut!Fj&w7Qh z&-d=UrW_HUScDxn8b6r}#p9M=TF40(&!IO>PQLT^v^S^icivvq+<2?WZIBOR^_%#o z1>RMEWrw$5r&~KWnC~+8mQR)6eTFg`Uk>MKY%_<`9QJCC*zUvv;_mPdK1}BVXuH7J z(zZRdk)s~xzqL@_)@gNWnmCJi;?Ze#-BJbmTlH_kx9l?W^8?rC?SL=B@XGJ7>yhP? zUex|`pK-w&q-&I;&N`ww!I-Ep@*{}#24~rX^}N;w*tSdCkI;6Ge4aFO^_r`*$%dA_v#HwZwfxwa)Gr^y?Ylbi zF(nI^c=qfz$l2G|s9vq-(p7Z{r^1=|L^gzC6lZR?YiOc-&&9&-$dIx_j#QElVlxT0eL<7bA0Jne@;et{~XBEWGG+1Nk zbg2A5#Uv&iQv6mn#klr=hnA8XmmoJ(SxAgWR`5Z0Gy;**m&_719G0)O5&(MLh zyWu(Im0gXjV$X-!qv^wTd?xinXExec>$vuR)PG|ujBEb^|6}Dwjg=b~p1e(!_dW7w z^q&6IBF3=J_^M@{gk2*Xt<&U~%(Hc#Yo3Aj5RB%G6H8_;!v{a|)f4TFp)vag{U#n| za=eOJ^C;K_M+IX*<3K#2F{<&!{MNaZn{aOBc3?Bc$qEMER^}?ttu1V%ee_3mWg7o7 zJkMhKMJ(?U_JJ_4^Zy^=saCpUiBL{W9 zkZ>Vb!}w4cD<{jVHvmKQeOw;%4cHH|fy5W~yl)pT9NX^Z5_7<$_XBjeU8lwTgPn(V zIl79;ZwC(X)p2+#jc$@nulao0yY zl#$Km+R?L?U=B$zO5V6UQshsy)f?8P)B7I-$14fqTYPsTa>L2R?oce;FVGpWmVVmf zV=;51gWy&SCxDy2M&K^(hudRrDh^N4`leFXbo^eyHPknX^9qkW?4?3E=ksc=uva#@ z=4iwlW%NZhBJ-#H>+HicBEGD>A!Fa2&Hgw}{jxy>W0pQQiKZH#*j9f6eVh-PV;v&# z0ArI7^D{a|Hk{xmFT~87xHW>Z=d7(~Y4lab3S`pMkq&vR?xUN{TBH}+OG=2<%CSvUM1{kA3Mnd~pwTORKek9!;YTCpGZ zd`#%S=2F~q#j4$Z#RT1d*=_DW{L=rQd81C*jZ>ku`krBo8lTGWaDLr0a^}di6Mf4y zC&RcZ6`cl-ulyQZ_?_{bKc7-_OJUn7DhDgQOpRoRk%P>2>|xHU(ZtAYOitsz1=*)q zzn%NH^o3{m&gPUXFtSrVj~kzyZ-UO2>{84?^2CipQy+OcapPtaGDLWgoKg8`9RvHE zmnm^&!#?D>{CD%C;G$7{wgr8fxF4^|ZGv1co zX*$z2Z_{b7SmBxajn3&oW(fz9k*krB%Kv<>fCFt|9)vq$Y%)V7d#vNpx*ZygC zjD^>E>3fYkeJ9*WzUrCk)-%;@ZMLz-KG;e-jutue+n{j`41>q?I0KK{pIP5KT3g%R z<&233tZ$$);XGj3_Q$Wy+g93lrFWY43$}KZ_GLYOt@W1}FAp6G^x1R3FMH^dDT|u} z*hvSI!wtWxzZRBq)3>gE9hb+4-d6j$QCy7H{xd*^nDjH#?5tR_->$#7$_GGA{Q(l+Lmf{9_SxRZ+~0H9yy8pA%iFrY2`Oq87ICD<4LkbeL9Zq zE%~yYYmWY`4EmH~?L_$79DQ5K&piXi()np{shr*dPxBC+YGWn!q`-G2_qu8=dOc-4 z`l%LL&@NG)+(erxu2KTBb1^yTFOyzWM;mY%pXkqOp_SC~>B4@_fIf51X z>>>}KvlcsDbeCKZd`&#ta7*PpD<|@}&yVB$GmWdLoH^8gu47(C3oh;F9#?OerU?VD zm77^)pWt+I(~kd=e%THD;AmhQQFu1upE|oZ4u03?=y!^dA0lsA_=x+i?-}Ko4P);T zf6Ln+@On>wY6LMz_A|b*5Id}>O?JACQ``9!)zeL^UU5d{b)E!n#TL~!<)QQj^KF`U zvbjNaFCFt8V^w9`9F5}AwI)uN*IV7xrLrb3iTJesr@RTpsWNZ$M6>SI`h&tLvWNM> ziR8c;enlVHwPSjw?<)9S&)j`Fs86sepY+NRo~geNze@Yf)2CAP=OuD=^}XQKe5Cpm zi`O8ZUGdfruz%S_jE{l(C!gz}GKyEc{Q-^JrQml7cwS7*SGxBjZO~zhc+2Ylp<}{s zJUSeTuQIG%cf6HjpCU(_FkKu@-TX%jG!*{DH_le~c&1#hm8?%X@{GLVElcp@ zl{zJPiU;N!kc9je#PMOk}2 zO`JMS8P}$xkIIQQ2YdUL&w&ncG*}euDW^3uaqpE6qIxus6n%d{xfj8E{GUPZ&DaU{ zpNq?tH0y|iyb)yXLmA{&1$KbrH`gD%6JO|EEk8F_^W!n^4-FM-UVR?+h5C6u<(gHgJFLH#$J_-sv)p zfhe6shed%bt{9Yyq)v(DO!Ib%fj3qGSc2kl65Wcz%-_{b{! zfqK8NdE`3_URr$jt*0)a{tLVd))wFk+=k5Gj1E(|gV^H88FSWl2KQ@##ijLb? z!&8hqJG^hY5_K;d>z#W)X8ej{3-O~DS~(&e7598lKLVOF{?Mua_4}l~_%(km z+Q^prP3iOJ5&DR?bKt!@L?7LYK1L4(^y!8^dan5=M;~amOZ#m%8s4|IiRJml$o`M@ z?>igi##Hy2G%JX#+|WgY{p^U_hH@>ofeGXTpvRxuUhB|)iaJ%PUFbYDa*W$@NaQCm`>Oa z1L$;|anvQ+2C+x%kX;)$W_C6vx~@v(yq&(6yDB%lc4rfQKW8O$ZoIJTDz6~1GxdH? zzWx=7k-4i%(qydDW)!DUy4GTkO%L=|99^U3jUGBn`7q5SN22;B3qJ}jZ1e$p0f;`v z=6Gh{T6Ez;<#X^>6TYx$pTurAdC}NR3uWgJ^Vkp11HUPo#s0Bz-UZk)p0Q=tjA0y5 zMrBnl4Ucx?3#raGum@CMig%UJb_M52c+gLN%}R8F+6ND%^{mqqZ%1*mk-XjMlU*D@ zYl5R|XX4l2vEEbbw%WU}nPl6tk7V_6=#I_;#xnTLTbJ6t?WXbUvmzMEz41pjo7@WJ zM%jD?&4YV^+${ITu5B@K@3H}FB<`axnln(HswV?K%3f9;3vo^JJe*gxmoa8@Hf$TR z&BARoQr}Nm_xToaRjvK}EBq~Niqfw@i-*CN%XiQ6T>s-+%TIXXH!+mpXO1WXC)e0f-UZj@)IUzS^@xV-u_)VI)X0Ipi#P2ub5 zlYMhJ_odpxZ+S|6aQ6fOO#i;D(h2dn?z=B9CuDb=%UOJ3 zoAKRzo4}_T6nBvPX$ko_%7t@ze0P!Oa#K=r$oikc$s}ZzWT1Qv+1#4@*8G~@A=85S zZ=0uuY%=}t(EKPM~Q9XNqtx$zt=Yq@6Qjn%6KkEzfS&9L12F}feV`xCZ!mLMLEk`0{PXY{-SB=5vi~%8gcr#dUE#6n z+=s0`)c79PHK*C_fh7LR0;9@}_r~&^HMJXl`dA<5KAdFFaXs(bn?902R!7Hhc&%)f zdR3M@x+4dX9jOiD9xL}39lZ-$_k3mBgnfxrH8#VXv(>?QBKND|v-RI~1O4?DBTU(fi(Q`M~C;1@TM)Fg-u!DM9fGI3n z!Z;f|=b+pN*&cSjr5jzKd;{Vr=8T~m=&$hX+S^T>-~e;hdgfsB`MwFgj+`QgsBo=x zsEI$0@H&*^yKlJH@e1dx&`)q(+CG>3stkR8g>yGw9=mNq`S+OrB|p59vG@vSzwD77 z;N0J6oYV147dl5UO26w_7&hXvL0-0%-9y1vN$g3m^J8&`)p+UU{2a7wCVi(Equ_D#)D_6z zO7Q?^)@9(SKK2;gUt;s^rY18r(?-~R zO{W*zeNHcaPp0O*C7GHT<1#gs6FDoY96iD~Jd7WsdbZM^%B1$76>Jj*>`!W+SzS;$ z;vC8ppF^4VoI{zCb0{#>9d46TA zqaHi-T%6`-TCo2GGW+kt=fh4h_pGbdd&NlHGuDsJ zk{;9htn44k>%WOH1plqwXmydPXS}Va0=cjI=fKOk!ld@~O_$bSxc}Hm?thBhr}9q5 z`WTNhgY5q629}^Ke)Ewf$bq@wdK0szA)IweT+AYHQ@79e`8Sp ze(HS;_}!diJvqItW}Zy)!TQs=;!|_+lY{4yaY4Rl(W$u`r{+5Ar)D}=c&W9&VDD4u zq>r5kJ_Mg=R2%F?n#1PRGlyF*xZlq?_UaRSQr!Zd>?20lvmRW1pR*qErA$4MGOgs> zxiSmTd8SM<- z)k2fE-eu}~FL;UOH>fYsXKC!-=(APyWhL>4oMI5PlVfgq3iUZyTI8=r;PQh$$H8@< zc!++g|1HUFABvV)nebj{3HU}=@rkj+f;rSEe4=~wnd)|Q6l~kMN1tx(p{(-sJ>JIzoSyYjx9r9=<2^3l*4i_J^OeJMusvpPFPjf7dqw_9-e!?+V%wK} zJ=3(Wab{r_uDY@LkB8>$ZJYTyW8gHtyy6g1`_<*~OLoV%ZS(ZEW3M(!76mp_Uf$>T zrWkAVBx^IswRLMTT)h?jHdrY4Uox5ceCFAOOKT(9wLq=BliaL_CR*Qkamb!4!1jr& zPj;i|5T4r)`&{9Dk?a{DUj7{Y)_Tw!=Q%3ovX7W!J#(4i zGMbOQgK}B3UT$EX?Lp!|g&OO|zO-!$?y&v&41W49=3$uh?Wf;KY|YeNQ^u5kvS^*p znSLjk6BYf#esu!>eN%aE*|m}SwO1=LrbBVV=r;%O!=GjCwdfhQ59UVYGffzJjrpNq zpQm%pbrLLD_)_g@KdWxyweDW~9Cg#rOz>Vb9XRiu&%2VpInXF=GFuF?fw}%cxU>M8ob8g0CCBineV2Pr8(+z zxp`f*0UmY@)jvB1f|w)i4OK4M|EcigBKGxMOnY5p>^!D{O>5RnU%mErXjq6n=^=}% z{Gw)Jw1x((yD?>Uh{nUbUX|aA{iZns`S&TlNi%Pt`r0OvXT3_&dlAl89Zt4#Uk2On-yi=mQ2vD$}6W$_|W?* ze{69fYcW>*plV*6&Wge&UM?W7M{RG6D>m);;wWAd^ggD6e~!(|xq;v&=(jEz0@8{Fc#gia!k2*IC+7UFz2c z_%N;vbGX$-;931x;ujVR*ACD6b|`*4z?fI=lJ+8V{iggmh%v8+SSU;V~Sy_jZQ3xXYhXU0JQSG;4RQoaw?wzs&Gb zexL6wvOx6?(22y$>KRj&!@LghPfyG_13LoVR6E3l28~(qWbF`)762v6C$+dHN z+B=M`7RrC)oow+P*fOd|Hb*#b`#$1VvN?qJ6Mv{&vTMj8SV|5-(#*LIwdb^KU)3jD ztVMoHz%woQR^l1iR^k=QCzj@dSFy-S%C}fJnYXYxTg<7ow}f=a)09#C4ZfjnYcJtP zDo3w<{LLOX3VZ?D4e!%&AN+zNG>FFHftv#w&*HswUtA8A#%b8LlFpIb(>_$^^-VC( zu_GdfhuQ~9`}~}9{q$u~kaOYYV&dj!gIuFnz6;AT(fIVIY`$)IzGFZ7k-a!sKWxu< zI1cWUW?Wm`w-`BW|L2G^GyiM)ARIbfBl>G!XvcfH@?Ee;SKcRa^vtj}@MZjDCwDHQ zF2#BsKPd;XhM!`*itFyj{<3w;*K%uwN(S)64s#Z^-Ybr)J*wS40g8`U-gNtYZe%Z$ z`{qI1D+)#zH&OWml$#d#JL;$UELcVWm*xAU@;rn8cD%TLmZ#Wn9p7HQ znEE;!eJp=WVzad{x~(b`mZ`j3ZrgCUi@ZlB zgy&UGe@Z^;KeSrEbg21ys~hE~o&sNP|7#C@BEE5BSayceQE5_DA?sJHn0l%(W?= z(6`!iBTPS+dqKI`UOLp?~ymvm0WeN zSeV1%xxl1)&==L%6Qxbn_s#dnSoFVXlh|7mw19mn<4QM6m|EA5Bc zKPIY&l80wozieYn31Z;|$T^?3hpd>_1qAQ^})P09$vF;k1z2?JDPOiXK8GY z<(bCyzYrIYEStzrXAZe}DvJXvyX>AkcHg7}$??c4OLN7Pn#~?mcJ4}g(AnWG7lAST zkZ_k$?kIe4Akp-w%L_2yn;56vw+Y^YPwc#H)|`vt+SELklRbmm5}&GW@#<7~K)6wx zJA=JFYJxo~=WCBj;u*7{pZY90u6`?DN&S`#*BqVgyOqc4yXuSUo7%8_dXzp{T&Yi* z$JTSr>4p20qfcR2?fl)){jzmT>|Zmj_AUrwc;URN`-tPD={LLx@5=`{`|rdr{k7h?cM*Ab z_WT6(Kkm77*@+U?3Sp;X513ew#)|GG&-PD4rY*EO68g+KT+CXci`id}d`}Ntw~}Wy z|6=d*Rc|vl%{TtVcFsfRxOyf(%I=*MhDCb9?u!(!mrA-5tn<}av3ANS`lkP7f4T6K za65Z$hCOENyA<=V^>e(rdM+N^I5lDTlk?{c9k9V?xv`za9^bJ#;9v5?U70R3XOErB zd{`54_Cn%XRsQF`QAnOn3vx=|Dc^H`VZpi#yjw|~YLBr|no_LKzxx|0%DQ&Q7wE9h z?=jEg+RRa=m6(OWBQ#B6ugW$8XJ1tOSKkXyuI}7e)o*#L5?TsIawgl=Zh!sD@_lN7 zmd18xuDae&gRfHd*U%Wq8Qs91Bjm%Ew(ki&%drnhxIZn>6B-+ykbUIf%|ds+vIaN)pZ1r}q1Pq%oz2SlDotUtZ+@@E za}(bS|6#v{@x0v1Agf2zZec;D;ncdA^u(2e}ewTBf~$nz+~b(kb$y|4mo$uCX;xujcnZ2-7L2 zyrU4V98UJrFUR}c*u&y`_;B4?;TBq?phFnv*$B?nhH|wzAE>vf+GDJI{u`U8Sp2#+ z7KG@XyA<5vKR6l=1=j-NqzM|`UgtjAN&)X{ z@T1BX{`rEZtNe?K6qhsa*gFnhGQ722`hi%1V9TBEGjoBum(8kYh6g$0yPH1id3X-+ z8GIk*plL0k-`m%rbG+5(-4ksL(%2N(|x9_TZh` zb-G*s%WuA5U1LAa?=<}2WG=Z^=n>0XD(f*npminnj8mO^+LJ6|y-(^0e%$gR*841F zox%(E+(I5x@!IL+@io8QH){zoW|c{DZ^z|lO&j+AT|s++USmI)D#pI^3DT46i=sK% zcK*%oF>-90$px(T3a}HVd+QDY2R_b2JxQ-K3!SdUyfFLEded7Ulg}yLr7N^xeUw*SA-ljg^e^qZ zPiJdcxK9B0@oR^%-q_kbm4Y8T2fi{k+rtUvrGErpc46BI!E~R6sf>EDw>n$sOD@zm z-ADVD3;I@G`!;jBj;!Fu0R+i~_( z=}it}uGOnPoh)FUEQx<*&c~`w1@!3wmarXKf*neJa5Xk~srZg>4d2NQ5sbolHikAW z*p!;PaW-X|{`QdfBAYS+t@MqvDHXR=Ovi)YRA&ZV{z1lwo=;49jCZ@=_hHngM5x`;Q#9#JU8Yuf8BCqo? z;6(VsH-pa~$R%VaD*hD2)$qyFz%^7{ds8rndk?gCFyC$dTOaA(P`pmEEXuDYHlAPi zf}gP%+I5}@f*KSp}sF*pKjq${gzME!}>_YGetx3=uYq)*Y3?z2Yy$1 zX2hJ<)9)FC&mZwUGCg)(Wq6(>N54fsd>Gl@bHi)LT4U%WyWf=o{sC)G#dq=_WgE%Y zt>u>u#*4<7Tt^8c97aeF}tbcpNob&yr^7Q$C({t+lziEBz{J*I`dH&y2 zo;d$+dXAm{H?6-q_iv(f^{|_z<2=qtHdkb_x#BD8>U2gxXV&R>v*fqSc3y*gm;Wx? z;jmfbSZHjAnZX*zYwlkA^hnk>%69lU^1UA0f&6u2J7~N*JtH~e{!8ba2+mU19v&6Q zN4K9_nz5KcPp-Tac^c@;F6!;#EFILIZ3`Ds_`~u=vPJmU_x1P#8dqzu z`P;lv_{7LMv&L<&(cg!YmDNS5P0QGu=8f&>H{mw?zHoHG_2qu%SKZ0Y6T;7aXz|#_gONVoG3b?j?PxD_s47O=MO|b80Z+;Emo<9A+A2qi%k(yIazv>gC=6d*w zQJknR(Pt^&ezVV;H@7?Hn{&l&_Da?OhwvDO|D5oDAX9@(Csvai6E2^vJ)iICU-bK> z@BV!Y?PuZraJ%%cUzgbNnqT+q_@-NMgZox+FT3xz`X0aPxB8yF2G95VY(L%=Bg=g; z{C$@51;h81ljIYRnp2ftP_r3++K3%e&v>cw7St3bM$HM2k1p)A@OTjZnu4^Um4<$C=U;mUF^|GeGX>n4Oge;(ZVpJ zQwQk__+)Mm_*A}lxSjBrTQgNLs`BdjC+_-H1$%^H2hDp#7=D{CNUD*xr9#0T^`ZT|c-(b#y zOKm5_Zs`&&}kC zlmV;kuvU1%w6`bUZas4c(eDy`vxxkaxIXG#0Wl82;rK;9-cbGRdnV5(vLgrN4FS*o zX`-36O+>RCwCN#dS2Rui5pY zmS3$6N{p5HUg(RRV(WXRRWWY$L-Xm=&`Z(xKJVktye%MC!sOTxBk?&~2iqE6P=5qR zMso?w5y=MDGsRiEcvg?^*A(RSW{DZ3dG-o>=P3u^Cq=9Y4}8OH5I=Bvkl{16l}~o# zJAJdi1kM!`(%hu>;WD_S|5048BCb^s>}R664Z-v;Iy=QTbK8b9zm%x&4rR_)NKmE~iOyv?cHhh%p-eOB0iiqnq0+#pNUd z^H$+4yuQW08~AK6ovcq){yEkQqDze&35_e^!i{0!*4ff!BlEIe<0Q>H#zakd2kWZQ zeZr665gr^*uOzN1S?J&jk6+?S-;|*W-s2?LZ_p~fCZ`-%Lb?e78J!oXnZ=Sk}(^+pnbgFIk_Ldv;zpuZPBxFJkr3 zEx+#j3gegZL>ea*##Xaq zqN~uYDY1D&>Tf#cS&lU(`c`f0dzFJH2R+NgJZtGcr#SR&%(G0)vzGofFZpl1m}ltH zL9lee+fh6w#G_S~CssxBfBzWyufDD3H+UV!z}Q(2Yq~_YCNpm}@SUD-i+LWFF&f`K zbP>N9Tq4`CGu!no_7%2EKCZkm0_WM+i{!tv^KaGbe<-jS6%W)HXn#lYlDRN)&s3lCwNm7& z{9x+73FWiBbyfbjqUn!h?%6~B-27s19rn_4_L5q+hgf0x*OgaB?!;kl9s4RTXOESd zPV~snF0j7EaoQ-uCaWyZe6jVO`ny_()z5ikN@m_8eSNb(32gel5&7u8t6`si;d(;w z&Ek9O@2XGK&*==lxsGo>5y1FU^m6pOXnTtb^6mW|-#R=ncXl-MR^RfrglG1fsXDr1 z-jaLQ+_j|dcE#_S@oP*!zD^s`Pl8F`pwE|Y4t>*hkNu`8_~sG%-V5&wmkv(N-<)q9 zos5+{oyz;|Vn?H^pqc3OW$OMGZHg}VGt0ls*cPngz~8V2~@EFGZ;Q)^g_v#bt zz0S(FadUd=OTp~iGP5o`;CV;4aC@6$+WQRcS)3~$GLQ2EXZpV4Y$)lw(L>;3(VV;< z6AdJbHUFh=B(pRJrsvq;=-q*NkH$v}=F`J-@+WUBz}_6zR$1UTOCCuUX?Y!ca>rVpAqxUbs|Vo8$Fpd9#M`Be`WZUv%L7mS`ZG%=!DJtV2*e(lKr? zycXFiP+Uv20E9*#$qUFMRS@~d!6QH}u;jp?{Y_^smJs=LTNHW;8JkGd6@jWN>@S zYH!Pp{LeBkWXJlzK07$O@wudTl{cwp;dNyRc+lc6&^?~b-IC5#?v>j3Fl}h=DXtBz z7axqnfi$aN?Xkn7`Y8CZ(fWNv!PZS&VO$J+QzP(cTzbfU)lt4Lu}*t?wK5l3$UOi2 zi`dIda1);s+@mN%Ud(K}Zf@YoUTs#~;k zJgM<|75>xUv6Ihhb?@TFRFqae_)z%}%%!wh+DML0CFcMZ*4NLQ&t5!*e&eH+tPx^8 z*mClbYgV*j&mg0V3iz+Rdid|9ye)@`6}7>mZ@`;B=Qneh_oBwn3V-Aga@)v@R9;`v z5!s{{)Za3%6*>NQ$o29y-nv%gb63^Ud%UWf?$JCqbN|)5U-i~KNSnJmuw&76yJ>3= z_j;!~*YJOZUwmXL*K4R-`z`K1%pP^DlidAze_f8NXr=P(TR31|Ep874c$D!~fDY3d z2FXjU^&(fE=YwL1@Tg*S@XMH!H`cbjW#s0wW`11!r?|{P&Xs!=*`ab;OSA}{4wnW0 z!JL5gG0xncATKFNeo_Ix>@aK#%?}h*lUJrS6=vO;_RrkL+K^X?XP|SJZ(~nB@)wq; zprdjNQ{+li@!Op!zvE}*P|x$59{mnE6k5}yJ@&&qCjP>=>}X9)9J40jEvqbBT)nu+ zo9p)CS5DYO`e)ZRPhfmbG_o{Zcxo4_)k9TGlutEd|Gt2PK2FABbJoBRlf|bVQ#Ty{&d! zUDqhS7n#>k-O*<@C)b|cablwUb!=(+YxRNO?(E|nH1u8@ahYVdcGuz)7b7#soh-k=TQ`#boK3hc%RAj~R~h!O zyoU8-v!Nqn@*(=RrGmB|XMXC5)xzerA#(dS16uFq( zkL13cww`Cd_7&Ve$k=>}edn&`euLg~p9Am2C~DRW_iAn_@@m#z=+!8HS!X7nn3&He z7VM3T@$Mx1r!!WviQH9j<&L9AcPC2MR*l3BT3BT+GYs*+4LiNc1YvtOFTu*Q|32~JzYZ7HI_OCb`E23U!r^k zJcg$X-SBCE*~k&mU%VZH*F5LhEWsJ&Bc~gkogRH3=ChMGCXuNHZTqzs810z01HZ+^ z0Mx#Cj{bueZ_B5N9ViaWI7Fs;HTot4eg!YQv!!cqx>?Vxy=m{R8r1knI=ujB#rE zraeoB`Y*e;!rH#%)92@F6)UXb`BHw}(_{~NTi%$#9$fx>@)6mW|2}AoJPg{*vXNxxEM;$;Vt(_zkxz9&?=@>~o!4W|HSyQAfTxeIsh>9zTWGh>`~vtQesy#^ zyJ{~%TYfXP6m6&4KTcb_{i?Ms z)ORU1)Mbs{=pRn@#=L?}^>^GKzI^k9uklRxRXqR2<$pe5zW=_p+ktB&>rMpggV6g2 z*!&v1t}Wr){a1f|WXXQu)N|p*fe#o4oS*_E+F6@C%mT=Yn!5+_wXup`YSI~Af z|LZSrnlLlCPXWssU@I5wieu2W>OI>UX18wnRG=3(u+P9Vz|}-NsvKTi$^Y_X$&m#Y za0W*JE4VGyS~U4@fHnZLHY~ z{odrHBCX9K&T%x2%!ok5|ce7a?opvlreyVN4OWa20r(556*0OYUKA zY5BjBZ@znscT{_sNH@ujly1`er^b+YB!zu9(SK}$*2DEMmnB^Ez&D+5^>wUCP99U` zPpDqPp40WoRFQH*_MhxqF1YW#w|q=5^}Wn@np>3I*SGsQH@TJiHzZTHH1Z#tX|($I zkCdBuV#M5glT)tv0sooHJ}Ulv5BPB9{o{ShR}k-f;aK1D&SQPM_9ezQA5PY^&rXhg zfjpn)LcgqezF%?#8`aR<#idTIScvUA@Z9C!2RA=RT=c>l;PeRcM6yRd#9DsHsIS+8 z!)uT|oNYhrHm=+J3k=`=1vvc6faf&^et!9b{bS(4U<_Y$tjUP zBwl_BII2eIoXpf(*-DBvAV-%6{#QHuWK?%0=D)0SElTiprqg%DIke7Rdm(5HbrqbN zi$17UT&7&HdThac#BR}L)z!$^VtmyNjEg1cx0(3Ck5hlYAI$%e_`z=g_cqEj>Yee0 zi`ysB)_f0t0va6$PvLl57Fo%D0o9x_H{^Z}3=PtXS%VkB zuK35Blu`R_@RXjZUhVCoXGf4xzur2-qRiU;;QeJSFJDpO5lsXLSH3s_0H7E{|)%$dl{3rQMY{YR}NcW{FT5Lmz=l= zds4I!{_&3o&4I0i1TQe5^W*>nrcuRcV!gU}0*IsY+)TeQOWLR!Y)oqim zzr`;qMkim#-fz|W;jyC9%sh>4jq8K-^Xg%Y@r%55tHALK!^tnFo~xm~iKn9%UMR|q z`6bV)3cGHq`uwQt3w`fy17G3L@YRp?I_oFcz5S3Yqw87o8pVBiI{A~h-;QzYtqRUp zc*&#p0n^vxXd;v;X3^ z{#&N)uA4J$_uRUm?W=cX+FoVvkLP}!ed%?^eh=5fjIpA=>`O=R=P%*#1mmab0> zU%E9hVrfSrwe<4ZEhXz~A1>KiyS1dF_Ddx@{n5og^h=80^h=9JCCZAc{0o*Y^)Fny z)_>2^2mMh?tFGHzvh=zyl&rn3x#Yp?9xQp+`d3l^D(YWF{j1KQ{!dc>C#nCF)c;A< zUj+Qcz&{fB3yV8||8n485Byt!UoeOJ@TOk|+@p(k(uW_?ho!*17PudzA64`t47>XB zuJr@+<)J>jYyBbEtLV$2V|^V@dSi>9%iYlYx;L&k)p%obl|R0CY2zO>uk|k~ez5Tq z%{%=G#XoGksrgNRV)3Yrf7pC^Vp8$?jsLBAYhp@q$HqTuKFD}^GB>>W^<1j?z3EI_ zRbx@}+QyO1)$d=>wzKiV<~JKhHD8*kZM%G9N%Pi?Wz8R0zOb#r^S3gQNe^}f0?bQq0I@d00`|f(JIegB-qQ{Cjm8%ik>j zex1g1ZTWZVG^RhwRpWXY*ZkNnFk{=>w7pK_Z_}nH>omqkJ@EB9jq}x$(hVBxuTPrZ zV8;8D_cv(FuTEtfH11#Ls~_NHvLVV zfuC_ZH2gCH_-6$0&j{e35x_qqfS>n_;o3~1K{DyN%`0d)i2RU z{StlDFVRQ+k{l9UBJL(bsD;)q03b0l7%i==(1{b!_BW*S?q0kx=!+V6IaRP zQ4c&_C%Ig^={t3j&ChX_d|vjzcj_dgS8w`mos-kAZ~9)Hlhx}V_zvGf zlK+z1mp{;1r}GJ%EIc3CJuCgnHF5IWn=}jBk9xjh(rkFA=T}df+n{fZ zOvmPvOqZ;ZT>mOp$@cGam3;To+pbAdb`y0yNj=X|$LoAw!1Ga4(hZkSsc2X>WopCv zDbpH8@vP@x-d!KmdIeinU~@eF&wam9f8+W(NLK~@3hSyYJ`+0VMbkF6yKo>J2|vP( z@M8Ll4(%_8&!uv4{qLp@mHUrr-Zk>qySWm(FC};98f@#*I9>ODN_RqWNwGv zBa{6bFS%XtU(8kTFX1Ykej8W8zlE#d@8Bx_zlJ|%;NPsw26Q!@B2 zqtlCudyP&nF1`nR%65Mne9C_R9Qc&(cn5q+cO*wx-7$l!bjQ_PrTcE@D&6<6-b06P z>pgTx-dG8|WyLeNO7~sORl4tXuF`!EbCvG+HdpBm;a|E#_?PYw{-yhbf8kyDm+lk( zrTZ-Yivs)?2lyXZZ1G=MEc^?8;a~9kBW4)gcQIGNzl5vsd>dEMVT;~FhYr1m4*rcZ z4Ez^!75q!M3jW);3jQrz1%C%u13x;>z>khI@GmGbw#W|`TsXiMdAWA1)qR0YvUX*0 z!<#GLV{DVRR*mboPpT>k8+KM)VCUjBbIUIJTjZ3W|{g7JdQ z_|{a$OJFxvtz^8cWV~QMcC0FEIP{Ody+8k(*n{U}AK}Y8e^mCL^G9VbIe*mo_~#l+ zl5SNT$@(U#KeJZn4v6<7iFW9Nr%$d*D z?o@0>F&o8Z6thumCUyVQCN}dRSH)%&!%-Z4D_6y56w6UOU9lX+XqMjp9sIsY#Xsb# zIE`XEim$)SRk51&5A3d!UVe+K;_Qm~C|;v@kBMR5|NT0}+~2(a@9PwIU;n^&>vj@* zf9rwo)xFs`s#)Y6`yalqzCD)x?5knpjZxjTP5! zopMP-$CURqygcR7hPS3%)=*0Md;hGZ?yLO1&+p&)P5sk8;wY)FcaQk+?L9LV6I)n9 zY+)&}g{yBnwZYqYYJ<-&u~Yd*nmgnB2EK3L`v%Uh-BSCJzU4LLH4QhFU)gYP`3D=m zTK=Ji@0VZI@bBdxZkX5GH_pxjB;R#@;+=at%p6?L3?CR0z>oxng4>Q=Ka9D!;mpO2 zU@k7jTwGz>{_DNo%ISMt(VN&bL*ua+H>m%es53f>_6DkIybwgwWfYg>j(d2 zPb<0L?Qbv_dxZTmkC0!Qxj%D?`RJoLVn+*t|7pdMg8%B{!r(vi=F1la|2_VHB>3OL z+~G%q{~7*&jQ?qJx%OYr`o`&vz|;s#jlk3hOpUnO-J}% z>tw?Bha&gN+YP^eEpq>QkKF$va{tT7{hN{d z|A^cljokk#a(^sxe>`%3B65E+a{pH3{#4|?H*$YEa{qSZ{!HZloyh&KBlmrg`<~?2 z2GIX-XvqhI^}J*_Ff_^B#? z0||0@3f&`*75 zDgT%Hg^yC^sXD*>(e`1i4?ppzU;L-Se|lJTzwl1&OF!_7A5Br0ZKwRvO&RY+txr5e z4(nE8lk$1D-c#DJw*KaMcTV=}xIg*@a>|-NoT_{9!{do1|Gy7ocpN)?Di2LLCQ~G zA6Lx($)3KCZzf*f&h_tz*MF@i`|&riWnLm?|76a4@uTFJ2nLV2!-`FRT~|wdb@is! zx=owf>fXfO7{wgY<;)>1V-9Kkl<5s7KCby@e#`hNPQFwz*!%xS-Gldky>93I->CcH z{oky6a#A(+%S`MS;>DBS*HA^=dso3Fx9?hh$?gBZ^&hyt#`QI>BZl$&{Y!4IfAo50Gs&E>gl1!zDxy$&Xdo)HCdv?sG?1~7%tDGJG87ex zl#Gp1h7i$U&QvM$xgKTz+V6SyfA6!;KIc8dUVT=}v(|dnx}SU9_jP^0-|JfUO~!S* zv|}Z1D{-5O+f>~8Va(Ex5vN3*m4S^Jv0=dSNML!^VR>w@e2hBUigC69#A94oM{>XF zh*2-U*At_Tg0Wt*7_kDZCwr_XMjic6d486UQAf2{C$)c4H)*&(4fij^I$HR*I{N*2 zUH$X2V4V#7R!@vN`m?eyuwVt&O(#A#CXpprU&|fRu`bfFE+|-6ls~B}f2<>aMjcuG zsw33gDzJa0eV*RVXk$UxK3&<#bd`YHbRK1IIs>|J*+x_e%O+AVr`+q64q}HgcQ4+%?=QMHL(^j90f`GI(aVKX>2@L+bWYKmbWP!8dWY~e zdXPvaT~;)QZY_L;P7_I^XNqLew}|G_eS}l!GU(r*i)7Oei(+mEa*8WlTIm+ZZ&)!` zNzsYn&&3`7%J#(Lgue~>&Sl}N^z|aw={+Jh=#25M=HokI3_Em3RLLP4eSQaOT#UTl zGJN-gM)Z2s3B;$DfYuvuGa#-H-)FG_T97Z$p3d;335yw?#IR?<$dhbGQRs)ws&6~dzisR?a?l|;XsSS{4>eT*MoiaEnqrU#iGWM>;KDzd=;lq6-&ZnPg8o8{zkh7G)Hny3-KDJ*X zFz$@RnYil`XXEU#YzO~Pwlqmd|D!fKJAX1mZ(f4_z(a&gXXL&Sa3$jEhdkIHS4RHY zb>zZ~{IyJ6Ymf`CKs|pD{WOCQ|Bi)!=fJ;ny5D)`?_BpEaopcI?cZJVH*WU(HGk)< z|A?D1@{}vYsWUmU8!?~AUX#@!Sd(ogUx>?^YbMv>|24k_b9*Z+@wZ?e_TT*$%;n&k zkG}=;u^HS_2H)po;1>pGWAHQvk7IB*247?FIR=Mo4Y)hQ>loV^K8Kvo5INfxkoF zh3H2(ux>u!`;?4W4(k%w{;zOMhK@9=Dg7D#)t=CP?JEN{41CrB=)qi!bf2Mo=bh}|8@TPpW>bCfK+3N zJb;2c;5zaE1LOe=F1bW)mP`Jb9!IG0Lawk7xxy3V3XaGX7~cs}nf=b6@l`@i8uHZl zYvDG-HZso7TE>W<6Ni@J`=kSG5sF+^!9|>_5YL42_d{kO5&Z+MRp zk7LB&7=3~fUt`46X5&K=h#6;&VLXR%ED~c1v;Kj>2^d^}!2$m5a{PuF|Lt-ho}VcP z;&+CBI*4OwGujk`@BUToD(<&7HOn1ldBbcwnthi4sQobXBpgg@rkya_$Sl@pvyPEV+@f= zPg441DTEPFxJ@EmQg5Sqtxh7n!|lV>3p6Z6=aU7@3AhE^TEgB$OW zO2U;fRxC4)+th~Rr_P=uj{6C?&dgL#c{bG^zPNWyb4t;}~6k z`z^o9TgNCr|IE1UGj%mnZbn&fAC9dyDnt1Bo7(XE?f89s7C)cK%-o7U#|QpnJ7~u? z&_?oF-HvU5@ofKjI}p1bfa4O+jIE08it)_h*Ak6e%%OyHzt$+m{+*1)+}!-I(K8N37+7Z(T$;{U%b%*^AA!pF5x*@s@A%9zbASBnA8m1r zx0z-3dS1Ui|M7Z^A~2SJcHW$yr~U0bjbEStcs*>ZGt2DtG=6>l<9V{b_RpT@_3QI& zd1il?+#k-H{VnR$MbA|?*3c7{G;>s z{EO!u_``V`zdp~_$Lu!Y*Z$e^&u(%2|Cwd>ysTg6&HmnhRKDzgaJ|{<%x(jIU1;`t zv-kbub4&Vl!tC+c?H|kc>$ZR0MnXeS&r}dZ)g_mztE&U9f4|79tNkwvNB(tmwu1h6 z@@&QYv#t2AFaD$R{-=e_oH$$mv$vfs#;?aeW1418)cAE>ub*4-UmrDoZM}YN|91J= z`~UGmN^8~|Q(>-{kffLx4tA@4M^6x7E=Yg?VFf6|j9n_ki#>P*LJ};vELyI(1xKD? zEZqDvmlyf@=|B6wvi|A9$=E9Zi)K!gRpM8JRcrp_#9yZ^ zWGr)e1*8^=01porp8yXo^8lD07k$~+!EC2??TN2n_P)X;KO(0Ne{oPBS}9_o`pw{K z&FPM;Q(HN8h!A@oY8kNLMWMXA!rE#zkNX!)ABr{QoEL2VoW>yj~ zu@Tv61TqVSg~&vvQ3(`IR%Q+o8#~C#$tx%-tz4z7Vr6Y(yJs)sVKLg)|7yi~g#Pq6 z!xzlOl?PW|T={UFy$&`Wz`4l)s}yj2)|ve{9~pqxpDzo&mMSogsLmYL)MW?yDWlys zr|g{F!P?r^+S=aQ`ml!=J1aAlOaxYD8U;6v?xSUbEq6Z4bWeJ0y!_^3#mQAZOO9+i zXRU7=s2wz(%pYg^E#Q{HT&wkmLYTcz$lnju==IO{WF3r>n7`YeetLWTo`@Hgxxy~S z4|%Qy5547fdm^S*{IO=;>RQ<=>UmO*4>+1O9H8xx9u|o&iqsy%8v#j6J%Za0wS0W2zd%@T7Bj9=y8BGVHyn-6@X-ydVZOE0LMGNO3SRlNgae9wY^dxfOqJk(N_j! z*nj<40EHU|)2)jziSi)B<$dw8d)X<_|EZXLSuGJN2G8X24^g4PSv_I`147!lc~hFz zL^vXJf<@Sb27~gOw=LtR!K;8Vn}_EqkXCnlo#j;mY^zD+eRhTb{kD&)hyW4J?M1wuACQ`a^GPq~g4OSHt(ZFEy zz}KBCD8Lmm8ml2kf%`^oCSe&wIP>Nu``QR9M6J^=^w%Oou%Wfwp{FFMNIqP!--ZbB zONQ)DCsW`O^TfHkTS&k`xt8)ElnV1=E=K9$tPzum8-zYZkibM#o~zr73J(PKQ&=dt zl{XT5wwMYF#~we^^d^E&hx1pf%|zI#UHMhPg9yyiN6NZ!a-wycmdD!P0Qls7Zwohq z(ZJ*VpR;j-&TUE~PhXDGK%wv|lXeji)@{Gs((4YeKvRi3XPOAh{J(|tyOBWLfv0*m z&Qf=;UMHm#Cx99rSoz6z5fQfGkkO~Z39$Q|d*aY2P7t57rt{i%0{ER?>^;;>f|!`K z_xQ)qf+#24P8gv=h~F*to!I^hZ$)=xsFFd>nfGXKKN&P>L%f3G1TaoG*p#rB0EZNt z(NT;SNy>qy(Sv%)1? zdWiev$#6&3a+TtKbYrEX+>`+T--TO-(}w`+2h+pOu@d0H6?){$-9)h2EL7lPOoQ5o zH4E<=5`af@QKRx&0zCE!Pc6oQ({m)`ug5K=!RGI-+DG>h!OttV`=%|xV`;T-^g$BH zeR@^*xt;*Yw+aYVhe#l69#MO(4d4X(vlscT1X$W4PEX&4FHm2u$Qe(kLFk$m@?KLK ztPG-XY?+_}`?K5-wtXa6q446u8=T4P#XRZ}^Dux$#qckm&2X?sb+L?<=$MMa z0<5aPJU6->piO-4Mq)Y%gu;>^H-00)kBPBJk2y3b4|)G2?F|tE*qC#3HqxN1?@>7o zC$kbsSYgA_LWahx^QCHD5TR+Ej#YOE0c!6wJ2D3C?T5J9RV`F7-*R1VyA264%yeG5 zx08T7CW%`I6OFUJa{51dO9Z*qgY`$)Nl^KbD#5Q!hQMW?Z)`z;vD4sl{DdM7Ccd>= zW#=0T*miL{A7CQ@rOL$TGPcjic3mcIM=~t=mgbzVLk5x82juS^C4raWw|k?A>{~60 zPe_-MAY8xphSC)ZtZ}=b!B>Lq@S`IHkZIspU;M<%oCxH-CeLKBT<yKyF<`mFApJR0wlWwZvzeD zI&p%c3joJPZ9VjTDX@CiXgfcuSLJKdUM$ijKtZ1~eFZBG)NLou@yO8N$gT^dHEsa= z_GRQ+JfJ{>()yxO3xG#aEit~HB@LmrA$J;lEg5h%!HGLg5d}34oF&5MxAy6)mQX+`bzil_LV%CvD~^iq zBg6c9(=QL@sj&6^l_ku%MDUWDb9|vS73z;)TJ44;DRS#Y7S?_mNI%i<9rq@|MVmFM zV!kx6&@PqjIYNcgb33oW7*6QYygGUrPOKL~W9!W+M za;GhV@zCQYH^*_X`5LMGfP#5s$PU|k+!RL+E#th9XNZ2sb$-mc93nT{w7tP2xj|-!KI%B0&b$dI_O7Ebu|ULEG0qryqMQnJQ$GS zSm9%clhBIcv9;AC;*0i7X>x02x1sH-`pp9piAzI^^~-?!*cjY@FacAnHs5 zKK5No$)|CmraZr{>bC$rJ+=3y+=(DPsOT{gPKH_;Bkz~3G~nJVw8aYhr8aM?;qo2| zG}rYet(ZpjTO}e`3?~^=;){@=_##g7m)$tzN`>>f>46FN(GPd8c)6L23I0=L>`Xl zZ+1uElJhMTsbBj9%i+u=F)?BJ{Ktu470={*b3I~u(!L+J&yZm({sC@Sm1-_>p?<2O7U?99#br}~CHmI`I%@3vm{fu8k+H%AlUyL3k zTF~HWbV{KGPMo-WM}lauH3c%}cQNI}VtZP-C_B`Q0y3WIHC2cc-27z@3fTeFR_{8? z6-UPUJ#j9Wp9*dyXBWjm0>oNww9-?hLF$9I{u?bRkY~$(ytW40_i{TqCiGkD4Ii&> zzC{E!*${678v?k#ztnYxnF!1Kdi;W<$?)R6=N?n^&rSg*2Ws$n%d$#Qa=Q`NI&ntb zm8HR{XUkM4kJ3P1k9#~lk^+OgPrS~d?r}iAPrZhR2K%18tXZQ0u(g~XptOtxi|!7E zkiQUMK|H@&1CW6A#FbB;9aJFs$ZmJNPl3fAoxBo=V+&;O7T(=K1}S;LATz{S#&1Sa3~>pu4p;N~Oat!p0=f&QX;E3F@(dz{a^#gYoW)0}hnp?Jcl z#hVKKSPu}PDRDmyC-D?g;7-{rLWAV8j!p^teC=b>MT7_^nwKD>4J8#M*%p4jwW62p+ZKv{=kYM#Kp(U#7(^@ury}WSqE{X z#=}eR?jw%#&J73nPJrICJ#UX}B!Wie!*{v!DWKc#r6|}%gS(nqmmAlTph*1eKAS2M zXr0}XOY5KjPj&QFVZ_%I9#I4?|AvONEA3aKfb#{3Gf8sDUkFuvZA3dvJ<`<0)eUu||eY)d0R6}xNC5El*JsTEZ0n?r*AT${G8 zQ%1WoC42Gp2^ze-tSO;|d}`sN0{T=SK+vG3jTSfJ6{%%HAN0`A=A@oFhT_uOlSjj| zy{WL}?T_*Y^NDaig#XIot?0+k&;yz^DWEXVcid|k6=KGu2OUr;>{5tMRKHAvfltf} ziXF(HtY>v#+X{dHN^;gG^!vn7`%6{x(Ee5l+PY#;L2IiaXQu^D=D-tGC9X#VbNxuG zJ}kf3L;kj{(lj{Mo!pW?A947O<`F^U55cT#(WzLkdhS!4|jez44|8@WmXi%j-Z;{Ym1^_}%}Lpyrk%i`;5 ztk2ZwOTla1sqj3}{hA`GFk5roo%7fchjT1#x`OuewUh9}_2+3|%C(T!6aBzc^|l53 zpVQ#W*UbHv&nfWC_1Hul4U=VUS@*(!^Y~HBv^LrTXw;GfUJexN2ysvIJUlF zpC&UIPTN_YeJX-}T<&P`7-0KXm{Yp#84bMInWpws(;#UcVQ*tO2}UYLnl%vTS6#Xo zjPM46?LD^pHBn$8L^%}~kbpTgb=jFZoOE=fAk*q1Y&Y$fWZ9LG@AMZeRc|0e-otxY zrwgc1tl!d-;XnexOnGbR6cRi=soi`SasR1n`IPb>B;Z;4u zWJ5bL=IeBJsTL9Tr>CiZ_awtU8L1;-=wDuNc^SOxqChKO&vAalTa$P0tdDCXK;H#P zgMAAqFjq=IYU~F!^=tPXj-UVEZEk>(URWygs1-cXWg!mVAE9n8eZg&8nHjJ7c8bh!hs80i?^bNykPFY zCv5Nc#ws|X@pl|C%#IkDgM9o+-bu7)qFWpK z7jGuR$7_#X?ZI+r^eAuLgSGg3#((gbevu~u+av!TUi8apS&~hGhY0X)@!t8=ShVLm1&ewK6d0#= z3%@ZW!&=vD;pjKmU+1{y@3fApo?4EKB75#PF=1ZSzDHYMmUCE_`39@-NjSI8W}D8y2=b0)ix+J`yj7nZA{*<1dXS_Oi#`YP>ITm%H=6MNXV$#6N1WNw z)c1B8@jz+#_Q*$vu^-l&YsrM5o+WcZ(140|OzT@Q=YGUVA$2}2*YUir-eacN?uuof z*RQWcKjHq)=qTdhE2kn9_8%pHk$^Ve77Yp%QG)gSP`|RVdBC|9d9+=V>w|9O&j;p+ zGxbna8at=J-CdG-rx1IG;;0ppU)3!v~Iifw~gTuPRIM8u*dyOdST4Gn6 z%9bCbfgfARb>+v%>zqA4+oC@|WG+yWQ;g4*)AIcG&jiqk=3Og|_~jw%HKPWcsff8_ zcc5w_8R~b=3-sGV0CR)a``r*XS-d@Yq2w$H=7_ePJw8Ez&Mp_D&CEo2rT48+{RsuM zG|T(M@%iWZWgY&6{X;Eh%QgNxRCwl<4fC7J96rKr)l1u`!(liBnG-CzcT* zsZEXRwka7}7B5@7DUJfY=L)M7vAr>GG%Z$FAwsME>7%hzs3Wnlm$tn^z0G;={+Mqh zxS*1E(gbHy6|4xqQ~3eywl?KpSS}UR!tSxuD3YML+WXFP#EC0IRgKy{P#||&lza>I zADE_nA(f)tS>MQRLc;#EC;Y_s5Hj@W-TH6|e_#6z7QZt+0Cr9pTXGOb`vvFn*Q+6a z*?FRKc_$TGH}g*)PA33og^P_1P9mF;>mE9<9^mH6lJ0>9fI1f2Gr}1Jh!OjmecFNo z?4S9+>^MM%lhUp?lEVlv&auHjYY7!5UXMMjKzz!n?-{Y*hYGs_xEB3*jQx_**4()Y z^(h|p@=a(zA2k-5ao~&QF}t%9#;d5%l;6I4H};2TcMLzay+@vLo3QUQ>H$)ae5(C5 z8Mdtp4x9+1LCIO#g?sp1dFR9*7!yLfX{e?ntWE@7k@q6|@MV>*BpstMDH1f^uz0kY z1NnVu<+vP9I46>~O(h=j)!k?6GGC1-&}k_+zOMy!#i<)fG#$i$OA?mzNT41m@IzOi z62M=5!JEcSWRNwPI=7<>Ct}oeI<$*S2Hum3U+T-q;3OCtJAry#`<^Rn_(xD@Tc17J zv>u<6b+gSXtFfvC@En#>bye+@Y&6bjHjMkx;*nnMAdlh>Oj zBM9Ia(6vhaF%iam%4LMKNZ|1%s7Vj~hj7U;jkMdyp9gy{jHgneV!_9}JBXv|TZY~l ziemeAqst#zO@niqQQLI`DPX?zYx*SWUA;z3#)Zg(bhGB3RTMWqjZ{ zd(?~1$ZZTef;_Y4KIKZzJ2EU1^QKJSBEj-Tbs6i=RA}GYr^RcAdT=q9k^th6Q^#br z2+l;v_!4wG^bHA)g_h8J^@w1xXxeNJ-j7@>rhQx)_1R@v=E{3%V9rbpG7to?Ry#f7 zj`o|$<@FhV0u`tQ{4bm@Q{l(in1Gs6^iM}lSGC`u!Tzi&?_m+-*^(*usd~s?hOSG^ z<0s+Epl5U6d$Iy>SPd4b#OX~ z?LzXdqv>_*HxV)VRc46y6CY{FcAX$YCv8t|E8^@pows8hwPBUuI}D@ z4nwHyk-U{?SE7WIR4q`SKj8bJA=Z-uzFE&4TTnkUIX@BYx1Ru)tVp$X*bWB{A5Akw zoRw1SV&#DGq8)Zi*M7(T;H!9i!odmo#L7Mu_gKWKr>djG5SJ8vEIQ|wjkvBUKg*O% zgTl)eviA*;7bdwqi)A5$f*Z^H_F&W{O4_-ONl?M|L5){t6b)`IxgDn0On}2$7j{`< ze>I8Q?fgNG3ZaLq2dcXfN59aO;hUlWQ|@uIWq#QIKkY8YFgyCQ4;$VmQQ&;tG^JmN z0!>F(lJ##BK`1)1-2io$r`_o)+3iRHN2TsmX;DC=d!Lsc`c?kNj@lR9$#5>8PRj^D z`~D%=T4rL#Igm{(W5ET|_hd5kh?&Eus z1Tb47-ufN={NDHw$)l*J3!YUPj&u!uvcj;q{ z8|=FLXw4?X1zUL42a_*S!86rr1HUQ}l!wnG7olBuj8VOBw2BJ(nL{xG$g2uyp7~3$ zJ%2lJbTyMN>aZ`C>ByjNxAnNomQ_cvy)o4+UV}U+V`Wyw+qp!jzh9^EJ{57y)Q<^+ zN2q%h=?Xu41CTCw+u=2l3|lYr1dqI+flAGzT?;XuVJ9G0+ll%wU)HrZ%h+fz_vGh- z6Va%HZe8)ReouX99 z8;EBAC)5)zJeS?52&g;HU%7nUK_U#^q1aKs0Hk`6L$%+NA!@L> z?YTDcrwfbaayOyAx%f9sx?k3yUrb6e*Fm=y*zVl*0sZAWQET}muv#R3*^R?A*hLT0_OC@dA`sGIg7KFib;Es^dg`j>T6*vzh z&)=#;fm;Rs7u_*l`1Zi~{nBp)SWB~-xEz9bQk8B0kQc`7YA4jqt`OlzOXYKv{XjC) z-7BykdAYsZrtA1pkX^-+Pcmi%IQeu7NtA;G!D2bCD_BTCYHeWSzDR-`&50bljv7t?ga;Ir^3|Dk&w!BB$#h^r8rxi0CpDiPZhlsDBxIqo-9KG z_T1#=6{t%lb?l~4K4QJfUsc*jq`<}DrtRlP2v8Svj9moF{WLMx>@ez&evXuQHjJyj znI3yEC5$}l+ve`VjbxCJ`_NE`e(%Bp*>7&>A9qO7eR4297g*?CDws_L?z%>E&-LgB zDXZPt@xCOX{OO5oGKli?l2@*zz#exRvw|EEif$-sX>TDym+>mU(wju^U%WW~De~25 z?kPikj2p3+4$N)AcuoH&uhNQ#1W2}FWPsXOE29JFD(lRvdl%lptEF`@E(lAOLIBdEbvD?yh89%eHq5v zO#G);4+2y_OrL&*^<+nXEwSSr+6lH}M^=0xW4yPrC!>x4AKS_8-NIyeTe7_vXZL~o zRgag5?j%Cbs+(V`$f*AwOn2OYadF3h4}o@Q7ppDrzF3e=fQ=XA1p~~8;J|9ER)3cY zhij{NWZn_sa|+A*VvNW1xpVt}4#Bwn<41XEyGZcBPcG*h<3JX=eyu9gsAH55l=iQo zz~pjb_oXo$G~0Xb(n{1pe~8@|bwmDIt)r)AgK=gSE^a*?jL+|Q`SAPm8x;5);y$kv z`A#64TBy?i1tM;#7b~~|tOKhs_gFFh3Kv$P}gLcG;nS+Revxnu<8@rL}@~4(bO9TZOw( zH>f`RpdwZu{o|X`$UVB4KRDKKWo|YN_TD(Bsq936V`2_@mHA|dZ5;4RD#qtv#N}Kx zhWgypO7~0S1V~-xw&Ck(%!|;M7k`cIv?A7h&KVvGuxefo-;DU8XfQ$zqN#E3tp8vi@*t zrh$80)tZe@sc=HYJF5%z7+Xi-`zGZySiK?owInabkA)Jo?M+bc{Jin}$sr<~Qy1}n z)lP$ZH!knqi1C0LN6p3akdN&+D937tcH`~5hQzCg_eJ}}goyfxXHPk7k&Yrkz1B4r zng$Jg=CnMuwI_g9ue|4`wM4k3boy$BAmaS2w-2IF2TX`F6IzDlTCvWLRXh&;a*Olz z2SzyHrn^PYQ5>9P+3Cb&k3BRPR=mA+?j6*lq=a93$`c@|%2KUC5#xVak!ekBn3t2B zyJ^c()Q=ZG)H`{O3VB_Qicverut6#GpzIldk-!!9m);<+X?wg`8S^97=M4ol)uEnt z$S%De<6E0o^c(1vV*J-WC?OWFqstpD&df)E=bPhK@)-l@IA;21^pPPK8vLMw1U(b% z?Q4*CIEd;stit%__3EZY2l$Y;jL6xaM*ZT%#sm9|F#l!#r=0I!DKv;RE?U@*`6tDm zBSIVE$q=o&)R`Ca71-HK2KL1v|EhKxP~J>|_s1Pxo*tsXd^d@6hc{uoh%hhaJRZMd zlRm70c$CQEpQC?#<=ymH2X&AII~yCamq7e+VZ-BK>}O*e-(-Jh zK|OkuJ@zR#`iVvTZ$dDi&1^^T$UD?Q^#(>>nPI$T?(4A9dzdftY1arZ0o(E8%_}9A zN}`>yOtsyWPX)h+M1nd_jCnuXUQP((KtUy68skux?u}DW=0iWAmS(y~&4~is^_0z* zFi&79^+~JVO&Ux%6}&r%`lC$F(fa-a6x82tzFoykf_Xje2_)1(Ri#D0h9GbD(biTv zhPvbh&sX`AR#f;XQ7>`?`QI5UqO7_+4Gb3*JzLF8g-s-1%VNY)o*^vX3Dp?q+gGt& z=r;NrqrwZDP)E?oi)9n|fc(j+&Cf561XDIroyYkw&uLwAAJ1wk6gZ8(l|Z|B?6mJ? z(GwV_xha#>nTLMS%x#WaF5(VK#3Nrn^c$LvO`aH+^=xdp&~1b9=j=`I-=aPKK#t}fXN z^(+tb#g$W-N3iVl;@T||WayHs&+ENI0IH5@j==x{zOu_UZBYd{ENr~w&OS1n|HMTM zuS1=IL!6wv+7uoLFYjjy3S7}$I8WMVGH$(o8xQkT#`Xzm!ZFzSd2Y-`uI z3Sm6V-G$cw4)wd*Yv23kP+`RO{=t(r7>6sDIM{y^?W5V?B>QgEMRck!8Y2!WjCGaX zy&Ll)O3fMrk?#&dn!zykV}JV?*>5+nU;94P-HCjzZQaV~-e?*~<&_!svr<9B=in5@ ziwMzj*M!EmA%CL!^o`M|uzl;AD)TOkQ~6TP8(%`*Xd*nkR+|EW{#z9<-9x>2*=^2b zUm{F7IyElcgYnCbmMqUnD)4=gU8J)dOYhN~qe+6ur(f2I z3KM}k1%sVfJ_9E2m|$@VypnvIwBHtSu0}bF`vcUCw>7*tiF{Pm-b`wu zApXhDzu=EL(PR6F+y#r#es|biy^rltqfL|&$qBG6<_4`W0`2ZtZC_p|`qgnuUQhH_ z`4-O<_btNnS{6>8@xkP-cpX@vqOk;ThCs^bb8sEL%$nVEWKrLc;~d8LK{B-nW6X;JDn)Ek@>$TVq;3j~asoMR=zGibJ|T1A5X zmu@>=;`M|+&5zW;Jk*8DUKHE=q5mMQxaOrmfO}uAd2y}5Txf+8OGT~GE)O=}jOM4p zw|e=673wr7KDn*t+;u8^RTg+0jy#yi_2kSajF*M@n4W%SiRVY{`tln4%Yt;RNA8xW zv(A%@kZ&b|>irl?{JF3xeH~Mj2o3n(RDPOck8uElr^P|Y3(bUCHc?73f1||b=xW42 zl`vHC%(A6Efe`| z*WjLRQ%TIHWafQsi+bT3(XQdETZzElwbxK865y&;NEl}-@&wK=-#2LkP}M)DvzKAs zobP?760{q}FY6u}KBvMxk4`&F)X$Py?C0O-L|sx$Wt-?;kT&NNCXUXp=&s+8QqVU1z**L1nW)>4emrA(w;6(z#tM}N4moB&(& zc+@s6!TxR+ee}$JjbC7KzHlP~=-~ z0YyWmXgAq3IWCY9S7lGVY(QQ!DF4!Ds*42bH3MBC`j|%|(Lp_q_RNmwROl)n{N1mz zUu@Mv-OoDij3vecB9omccX>%Lv@o5i9d$3}$J@9^1`r=OE#tuOFqDnOP4l@1G#D!OAfw9U3Y$i zlQy=S>~sOA)qa=WRm8{L*@g#NO}A#ejBmkb(rZiB z2a*48Kd`!t1?|sOQ{zVc&qRCy*zFcO+Be1UrISU^i16qQX{90R%7HoTV$XZ2;5z5T zre5SPyA9s$x2mJT*&0WFj|TuOBL@8Yp5pUqXH^-+ez|(d$%HNE0KA#5zA8mKw_4$x zw&pyHo1Agk^e%@6!QXz+1m;uWQ;@26IO3_pMj@rKO{m*$*lyG)3b0(sOfuG=3X;jW zx7vmgF9kVCVAcM3o%YlV7#Md5!-Ky762duEt4sSvG`^GSP zClz0U{#2Iuc_HQz?YE@9!uY^`PZg&nF_>>Z`r1V0G7av~Yl;FQh_HiQ{M|x~Gy7?E z>yI`NA-~V51W;cdeDj4w!T89FA=`6;$V)yyDSxYo{9OF_-b?2zF zLG2dvzNGHQNbN#B#$BkfEf@3EhM#e>TtFR5O04~nCVo%h>e!2S0IGW7c8M!#V7otd z?)X~tLvz0uEJ1x~AZFP8a{?I#MD|KM9YB1!z1fGljsP!rJ}YrV-SFbxu(~RIPeS2f z+GdX%1b8iZ=uLMU#w|qnZu?++imACMDS99CK8?i%p0Z-Toot|U4(bCPF$cUSqcLu5 z_@LMZae~1TY9cqrk0!ZyX-a)UeKA~m^0E~f@~=9LWCanxu+F-72=U0);BO~BU>uR7 z!e8Y}5#}fL?Di?Z_byVL&y}=Z0Jyv)^`7HZ0+_6Rw1IGKeo}P|;sb0h0uemAa_+ zdA$rWvl~a=V8W#L;Vi~^Z+OORjv~QZO;^*Nxn$UN?rp$ZRtns0zqNA%>O(p*ebQ4u z(7zZAHh0wHbCI7n5lkY1r;X}kFGtkx+uu3(U>t>gsizXL81>HDDwF=VR0y{cF_FjT zJ-JXv+qebw)2e$+&_RQ(0>_niuO>p8!nYx_MAUl*%ZElgFz-cm#4zOw2~KcZEBrv* z@HOZ34HfJk87GF9%Lih;Bqb}aLOb_eaDLeO4%EvwsJxLwdpHEik*_=fDqP<~@gB6} zEAxiB5O2n*sx(#!kRbN8NXDW>DrDMM-tt4e#Z-5ARW;^=j82_4+vhNkkuDa;fQ zoSI%tG9v@M^_yOx_h@Ilj_rLL`X?q`>enV^RQ(N78IQ& zK`W`G&?}h+Q)UNNrp02O;MuL3H(ny2l9me4#JqTosJyvdh&Kw=g&)~sygtqKd9z*{ z<};%apXf@UKfwBel zVze8Xmsww%;G{&^cY4B+&%dJIv==6mAfj&nzJ;jU8+fiW^+i3BK(jfbjCT7|52e;! z7yA*@TcMT&jBm6XH;$rRn=09p)p3goW{LTSnely}8)o_oLRO;=rQuy)NG5>I(5ZS0 zjIS?Idf5|;?_0#(NU?bA1K=n{m}nkDUGpYq@-UeQ`#ultmzzXAVxxN}JM!?O4UU?f>z?sNyAn}BFyF6JkMNgvPQ z+<`nnvVhen9dYLZA(ml`UbjZ275LGY#g)p z$q+|A*Z5pV3+vOy*CHzx?few$)1aX#e2yjKYpymTPrY-$g|7tP)5y45c)JGu#I~!t zXJ3)w0xNmfIrR5oXRL-(u90EW;#D`okcY);Pszw~Abznkc;YEV1g+e4kNO2^z_DgN zk4-wpe=Kq=hyoY~nR52A4?!H(_+3{U^>eRv?o)fwugkSOFEgBn@$2anCT(ee7RBc5 z)0pRDru^b@HO4VTccok?l%YaV$J>uZ$U7ZbFP1r2p-$6b?Q1rQdZuYu{2Gksj&8o} zmJ*M+j@P(|Ki25PyfB$ejvXWJ6j-H_pfIdWg{23h z@^u`j@X|#(jkTHiy50Cb(A~F+*{JJY%H$O~aGVTm8fFe{Xm@hf{AiqChVjfj zk*n4tUv+407)qs5F^+6i_Hc*{Z$6E`%|V_eJ=c?^A`{EMJ&Y+1d8OdSLY~@Ye2&dS zdQ8aA2A}LrDPKf__+EqUlBjRQ69&Y$jR3fOe^u%##^57NAqB`2wrEnS-8-Ra_sV^3 zs5=ej{J6y|6G?%DM?a3r$53G3RJqzH7eH?29&f#V8Z2i?V3NdmiVL~3%7TXRyagf| zzH5+oM2&oAEkWH&g0%Lo3g*Wp%?bN}`D4dcgmG}6$99sPY5Vml0d`pJ=yutLdAYl) zBEDk0Z?5JM-&bXrpO8s?Fg1l2)I5D`9Ce#Llbt%}ZWCZkWOF$nzTUqx-qge!-;b)( zEOMJfJ870KHql6gIrlh*rJFF1Lr`}4UCev=v3o<1H|k9V%+n(0*OB14PlcJO820me z3)daTFuzDDgS*fO`=?9r&Pvq(Efv?*dE{ZdRUNh0e;@K5p(ctTHsi=Ongrn=2p2!EOb4U$F<&X|Kl*-@v$b z$O~dmDC))rea9x1_S5QHq%wvOF6WTYfVmW<2jN1&vF3A+b_x{3<-VoY}e8;EE*B^NX z+iCY>64jXJ(D|xU(h%z_t!3a2<`Y%Cmd~rbgmJMS+bxAOX>i*uM_~0Q%+uc}zWp%9 zbIZ$;>KYL5aGH%QepHF?51L5g@)s$PnLgi~mPrL?g*oEktR!%VR!(g^ zh5BTH!H$(BG>A7$hT0S=2*((6d1zwXiRR#6XN2*i%^hEs$YOl{`0lfBvPiH&R>ib7 z7Tdx3)laAJI`uzR_Y^c@yoGm5G{<=o*l7sOO+p?t{8lN?X$JwEqrUq*PsDu8Q>?-p znlZ0M(K~&eD)OzWXP3hDkdK~^;v2e*@0BU$G#FsN$okAA{0#l-T(PVl_g(P4r~6O2 zNYG%HVSHyKy2j%<1KBF#lh2*xao(gq=Do0*RQQ?KjN=ILei)z&?>S;wF558`$ zom`80lVj&ur5Af78; z-D~Yegicoe+YMnvXis~$?@0~juf+~qd8HBIgtc=bT^9436W-dr;=%sum^AMI#t||d z24w_LH=dXtqBkX{T4b7BliN?^8y)eduRYljdzci}|9XtY;OE01Rm7JiXhE@$KRqv$}Z1 z4|3mi=e-b(m)DUJ_)9?-&ooIQ7wYNfM_J->#?Lo8~Y= z-8DT{!wz-&RbOt=xsb2&1Q!i!VO~h3OF-65)H&n#7w+!Agztd|@bBJ>x?x1QJ^dIT z8TvzC{Mdu-c1LWv5EtUciAz@t)f(}A-nFY@+&u~KIiGEn0^%r;9yua|c?$stMV`OF zFsa)S*EvFiG&t{_bd_BR^FbEA&ksU>_N?C9zdsE1Cy$=nH}U*+Ov;?|iI`{Iw(i~$ zte=i|?<*Yn@jXqBqk3oFqn_=_6PSqQmmRQi5H%-(jJQ<&BlziSfSCgy%Q&HE2MO9F7uP zPlE0A>_|<_%Zv&9JjsH1*xB%e6}KY3CmyZD`MM7I=3%{!y2yKvpXj;ta)JnpUnSae zM-w5JvY6nUM1}=Mn=8YcQ72kw`Q!{Mz85>VerGZA*lXE+LANlTRyeHLykU|ADlhI7 z1|nXp9ZVEib^>v{j6jUu|3=)K$5Yw0?c-~+&D1u;MrkV~DcelOj72Fl3Q18a6j2%s znTIkJ5|XhZ6;VkUN-9F6k_IJ0gM`wg?{RV8&-=W;&*%5|yK7n3n%6b0bq>dQUXZU9 zHN4vv1G=^6qV?)3(4{fGn^b9dPW=w9I~oZ&=?+699wy}36LLZ(gNq?g{yQ2=upY{! zbnQvB=Om7I^}mVDfu3i+-spAEL1nq0RR@$!bKiMt8prPuBI4}W;aMP^E@j~j*D;XK!gV`|_l((lX)JA&to zXYQ=%l#jr7Ec*I)%LoV2EqSY3h!uywxxZ z@?JiM`>xB_PwqCdmghje67gM^*%H>k5ltODo4 zKE=LF%0vNj7kM40uW>xYVOhq)vdv`rRP`A6?((;cz;NizeZldbFpx2{ zAdwLNDpQR>=ye*M^D9QNZ#3)q-njIEhb-e_aqWPq~m~c9?m~2Akh6D_zXve!J6gP1?8XxRz;k(k`2 z{zrbW3n`qJ$@3d>`1%MzvsgNb(0h=Pgmqcv_40RLA-^asI4Gbz1?(6P*?(;W~gDyNu*ZTRJkkGOl>U+Q^_^-`7Yhn%gKzRB}uR%IF zv%mlII&a{M~t5uIxVZ4Q=m#ed&|4H4p?>ywpmxm(Pb|^#7 zyII9K-V8VcPK(S$$jRqPUFfdU!2Z+KX(~wvzWn^I9MgR?vi1ItwTW?b(wZ)Fblwp3 zLN^PK^$NmYUhsUe7OP{OQ{SD({sBGTg=smX#VbKq8eh-(4!zmP`a*?z7UW$`CSNu{ z->LA@e_7pSoQLaWNB3ErWL^F4cWWbHx9gJM-C{>4Rb9`r#&MlSjvYN7uLu0*gSqXs z5wOSiQaJY*{Jp6C<~zkopab^p-bUq!1t`GlIba|_wqY+Z5QNEYo{e_ zJgUw~?4|4vtHF-qv~T<;yhnQ|osoW$W!!nttJ_ZOFcl-0)ikh6Gu zUOV{xp+D0i@4`+)eki8-8up1-ZnFG?KETVi8V&`7a1)v0iJI$gp+DUsEinHx-}I{EcmrF2gl)?w8k)lDm47x$oZ z+v;AFk431u;e{Pu*!M9C^yZ#rVOpM`GcyBM->E906Gp{q->jqHGiyBs{D9xMUrdvU za;1@c+N=>z&_}bqY2I`lGUk zA*Wh&_H)MXX*6P;tD+wf4SMa_*)s(r*nhmmy=}4HN!?rLIkp9M?m8AabAbC?#eZ>l zwmSS1c-e8n&lwR2HgM8~yyEw(TL!G_9Ar)I+P*m8%aoZ_?ixm*=X={;O&0>b*7DkR znN;Yotlwl{h=12*B0Q5%kh(*aq;KXNYhOOF6CuQm)U!_*ih(JbJwB#$;ReF2B z@KAs}%qXr@1GuS^H5?|g=b(?szFtxzNl4Pu6CO1=@S`wu-Q`B`&85LVwRrw=lYGbM zwruPx)wHIpierQv9a)%o5Aw)qU+ZFn1|iqG_&~fDxIe|$I>xbBFY{cT^s7_}k>OoF zeWH_xD1Y51)&V^g-y<2pras7L`=5WBwFUOPZ4ZX|EueRGYt2l&0vtmv^RNfx33)j; z67B(y@xX*Dxf^)8aDkCOYtBIb8Tq*P?p+#jcwsI2#v1xQZ?)YUjDeq!^NmSb2E9ow z_n$H7*Z!Ewa9l3pCfUMIe^#k+5bYqker-PFZP|+YHlQ;WNqyc@sD|g+`Q~41$QhF? zD+@HSKlW!1%yKS=TwCa)XGJ2`{jJYik6FR*gBPFqZ_wYRQCE^be*%80%2ukjjEgXL z3&ifk`ckMi*kFM5Lq^oMt1g~Kde+6ycI$yY<=iH&wQD)Z=WxNJ>Y!t9`bwRYg^`bhza(Q?p3ADrI2s=+#AzIVi}5B4a* z^Mvb7A7NcLpAnFV_kV@S5}x?eoY1GNEAw)OTySrf^C|FqM=Hbj+YSLwsj`v%tD2j< z6nR=Ig6sJ9-OALxkl*I^q#PK>_0KL7n7=&$IKz_laW>FX-Hp=V4fNw7u~qMt?$V&Q z0}y35lW@Y7J|6I{*c_SA5>*KJ>_g`q_e4SH|=?fmh zOf{V6i1S_tv~KN8QeD>V}LW7WcEA-~Lki|ITZ<>rp};nEI%|M}cx zm!VukUkIJ-`)#qiCzX(<_1kDZ*ta`-c+S;BeyXRlGwwddz@?iVPhV(f)ZmF=( zz5Qcu+IQe6BgeLXnGL(BhtiV#HL(BAVr6*axx00~X_L%;Jf}6P^ix*cq+hf=R~PHM zJ41SGZYu0aJLxT>CXn-<%68y`{ojiH2HM@=BP8b^-gxE-r%5Lvx{69#ZwOhPqWSC)4(7=?998h>nRBLIr95uB*2%=KJ;9{6L_ZU=?&7e zKu>SCJ#Eec-lyH5#^ahd^vIopA9t+*uF&=>XZi=wOO1&yA3<+o8FM9g9q?iM?6w=J zmq2gMSD~IN3B8${!l4=9=N}9wj~iQZldx~Uc=Mn)7y5opM+Wqy+&zg+n&7uKhG^LL z1GfS!;}b#DIIb3hl}=F(tYe!xQxi)UIMfm|ymAZ?M!A=rUV+_TsKyvn`> ziHph>W8dyRoxS1;t zf>x?lO5puar(V{>^)yBnf=!=&Jk^karqHExzu(2J&q^*Hdn`Quf%*ED9r4#Vi zCf#oHjgOP?Z?Mf?1od+3sy1w-q6O*MW5gxRy%jJF`m)MhSC(FZtQa-TpR8We5aF%lXjX0SO;}KI~+cI zij#cQP)WB<;wJlBY}&{l}^Yjsd?KJzK6cj)VAY)0bHdd_oTY z9-drT(21dY8w`Q3ZT#8c!}Xn;g#4XjGvW-Kh_Kko~>v(>m%Rl5i5uHf8Gu^@v279U)$b3`FkDDPvK%l9pw33S?f6!0-%50kd)T7l!Ndt zyr564)W&Rg4{#gGdj5o{BKRZb6YC-z2fyQjDttHh{tDv zw(*DXPeXINx||<={SF;cSKAIdrGm`bk5?hL{CTL*7W-Ve(1YEh&~tXC@p=hVK(5*M z_a)s4etD`l-~9wSNyx*|Lth(wNsEx(J>Z9~AKz=dt@O^^zhN?;M&zLWlcmw>~u&{$$>ncvd{aSEA^LyB1?Y8cGJps8~wRx(M4(Ns3 zcjlEqZf0b(V@aL^4{0vZ*(?u!EjK*w&f=}$%dTn8i;Kklc{Vy%6Le(e=h#nl#1_Av z<#&TF5Nh1L)CSjQotx+7rD!*jqPcG~^!$sR=51O5`?M9dLLpU7`o8BGnmJ#XT%_=$ z_q*Pou%|iJ(l!1Feqlmd4ONrj2S*~oJs0}*zz2ECk%I7dkVTFM55s?@s?`-?0zFG1 z{|*n}h#r_+SjP`K=>8w>tLebEJgoM5%qt50qvFDtGz0h@*mc)vS2pzjmX)=Y!0R95 z^sCnde=nL*zvm|8KAQdFolA@HJkPy((H?RK4wqJ$8?$kq7xOGjAWy67)DSqNj`c{Z z)b4^2?73U!+-bcB{MDWf^RBqSzU0EpsuRySiNEj0zqZ5B+b1+SYJv|Gmw8uzcNsSc zKHv9w8#nZwZx%2!A>R)02wd9gKtyiEIsZpc}UllxvXx`g>EX2)!L^(hx8R4eus6l z_M63f^N+v_S~S>CTMv5IXdC?u*5`IDQArK(xyBJAv!7(p$T{gNcka3XKcQ79_#HSm z8QQMlvrHPf&Y8or4sz6QK?>hqoum`}eY_#zURakKU)Dds^D}yyzf~A&04}G86Mr5; z{`~2ieT+K~St~ELs1kS~KEB#8t|(42OM#!TCa~`=ZA)SLa1op5t!ENf0SCiX+fWU; z<*jpz9@^M&lijyszg`X`gwy)BL$W^fA=1o05^HcDL;RKZ^kR}KEW7IuK03MD`1dJ71k`5__eXINueuc;Uf?I<6cfsoAb)6lq*lVW z81{2l9Inaq!{1VgeqJ%?ti4<8o^q)`zH;HNdo}3W>j$5`JJ?2u#ucZz^LBwBUsy2B zYZ2^w`@LG1Zv&k|a^xMcuLnjc2MlxoFH%*s!Uy{k;oZLf5cuzxeHt%cUxeLSiDv9- z$jdZ(o}979J}bcPDO7+Sr~cRPk{Z|*g}Q~#KJ%G_ghd{nmlF;=$+feMxwc#+;@R5; zCKd3b6`iu=4V#;+IakP|2YGFm@D)=HI&k#SkJXQCf?tKvi}d)L&?j$6|HJbGdj2-; zhW6=n@?+YG{jP32B(o)AFxMA+dd9D!x82<2v-+Tp5^x;MiIMqo0s zw%Zl$hrhy}@1Jjj4^<$u>)QWPeoOej9()hHlTX<1Y9{0mxn;Hike6W*|Igo9f3<1$q~+r^rVqcE}M?GkdyD-WK{MP`iknnD5FG!ej;zOX?X7=&KHiTR8&~`6hJ2*{ z{nO^1b0Fu7{+g{;(@Uh|S4eiyS|eY#QvT%DxU>FNlqKLO*;M|mN?yYgFs@{f7DXW5&| zaQKZJ$fG@}g8#y40i3@E;YXyzZ@P0Z_yGQh4NchBhXgKN?FC)r7eC~e(g~d0>g5_e zR`B~oU#eXTy=9G>iQke|I^pq%U|*31{gv^{_!#tE%GrK*i?I%THqF0rJsN&x?G+bo zDB>iGpFJ!(vI2U{9-rD{4WJKxT$Qz32))ID?~4^4!|!-W^qiMQ9OUEm!0%h}94Q;? zgtmd-n4_zcKYu0kUdgS@jQMo3EM`gQl0>|>C9(}nCD^y79;vjw41HdM^{XN1F~**j z%D({r@mZR;K+6~B+Z!3B3i-jCjZ(`zPeTrLtHEt9=taXaUKMU#PEy*ku5aW9>?SvO zjeS1=9P*Q_peJ4MD{$3u4NCxiAZ7QM^Zdqpvtz-jwrtQhy)T>gZ-xEYOKGkZ;Ja)N z-k}Qzfv#5;UQ;g$e|T4aaN64Q5MJ5zS)Yt)qQ@_nUsb@DKb+K=J_SkbvA>pDv7JpT5~_*f|IIwQt?#U*rfm)1shJf%pH} z^!C|{uhWQY?sj|QUM`Yedi9Ti2;{r^c5AV4l1-mw1MHw54h%7D{0)A?;OIx6SHV2Q zXWl3o83c}Oxn`8DIq)cr238MVK!5R}x>c+l{*V^5@AwTlXx004Uh{Ac;#iwK5Z?n_ zjrQAa3l{uppXFaW(+BnwlG~~kKY%_tVLK!Rec6Zdo31Kfp+98XUE7`t|MGu+-8-%h zyT7B=w6<+@a_;?swKqp$2X|E>`JMyxBGG?XdN4E*_fX^gN`T|Y-RO`3IoE}iLwnO9 zm#MZB+x!^v@FBiI`bVV02FSd|M&NTQ$L^TUgn!GuSwFvdLJqyQ<=u%4(20C^^|s!E zU1NWzQZ4knn*?Ho6Y-Lb?3ei+F8-yAjbWi1Pqn(`n$WvK#zN{cfxDnUHt<-hVz{3w~4&p4L-2 zNh7%z?_8qSKu%G4Ni9khc8`aKPg~>qHMn%MgCMVJy(hFfER>6sWZZdS3VqXpYopx7 z7VtaeoArzUrz#TTGgC&Blk})0dz==){_|*NtI-wE)zkb9*PDR<6<1qVYk>7}&(l9k z!H;vk5sle24*lWZC#5Xdy_(ghT39$6U$?+ZRtes?rJC^z7Ioi&>7ga67)+y3Jy z`HvV=d$--Qw@JxPX3IG5f_u$k9GsZfcRU z;3l;dKEXx6t@3+sljp&E@cEccD-(K8&yM`h`rkQWH)|doPJ_Rrg%7%WH^6UHEL-v_ zaM$H((n40=Tx6kEaMfq5_jixl@IR`?bl^> z?VvX~x9|Ld#zmlO6)P@k0f%E;dYq+y5qK@lp!wn8=X;(6uU*&#KV)lpIz%CVGgvTV zvt0o2Uiv>PyPy~7h?1{Yy#Ri3`_?6kH{rUZq$i#R-SAvhO-c*v?=_kY3A5uSF0%&o z?AOA+_$=8)E8!+wGewoEUUCw#8!7X0aDDv@&3?IzaKryG%jX^Bg-pTW{I9@&utJZP z1%1YM80wvye}FFASho3X_#Q5DZuhj+tKV{x@g7d&kaFmKYOGYZ<31nTVYZ|Z`h-17 ze-%6wfp;oPd8>+rAlc&Hy4*16C93YLbI;-?uYG@yS1H0z+KIp1udZ;CeBsJ@dHld> zcs{RI#dzC-U)L=z6aikP%=Jw^y*Je^65a>AGZP6 zyV?bRwg=tnPd5_7Sjp;kysrb(ECoEnKw>B?z7kT^sy4)QPiJvZ2k^9 zA@)JA(jj5kgYh|4xJzNZEOrqKsf1oaL3M{QFvCBHpX4Mu^^R*KaGzGj^y7=b8T+ za+wW0d?4$|ajWpgXYHT|F7F-~#d+2?ezG$I9wwQ8?gl@+r?YcoU(HkoU*NF!@z*>K z5|i`TBolnaLxOfv(chqZj+1oj2F|$y`Qq2){4$i*iOjVd7Def8us5iGlM@Je_mU-ML+7zR7QEhCdlUQDVTro_jA!tdsLZSsc?kTHe|l{U z=%G%ZrqZ9fT!i&XCY~334oCcmT=6F0c8XFrJ3fWHUL~*28u}yikSmOb4S26LmkwUl zfnBlJS%$Cy=nIQY6<$lY39EV2+=7`{e{Yov zC3oFpb1@!rXu8C9LpRX#&hAZyhY8nQfV*<@>1iwv%HdM zB)eH+FvbS-dX>?*X#*i^R#)HQYy{3DF!5Y$4D7l#Kcmh12^`n)*N+I~r_%Fo(qt>) zFZj;&sOWW|OHPkQSL1!p9ys=>*$DSFZNuT?kW(f|<|$2BKrbK}5WHL*u)E5GznV_M z-mLJh-dbPyhsqG$!aD$beRe0$73^moE0Z3`9pfTvx4yq&fqi}JHQH5$Q5x`gXAJZk8<#kSI6$o zw$%q;srhNKGVI}{+xOUAgnr;ua#GNbT09T6o+qNf*EMARa3q+DLz}2>zkj={-4Lh-JeC>JP=5mOK?AGzOWpLBU`L>VUcMd|I<10G*_zl<}DUli1;x_f-;8vUa;zXHX`uQHhf#hv7%@%Yp2cK~7@kb;Y6xboJ|9d3r|q zu=DSIYZ43kd!-qVU?1M6^RseHqe_62nIVuU3*1oPl7bUbYS6HH%_^bh*f@N>1cM%G!e3lZ|Lb3P z-Zu7fJ4>oSPh%a@udT~Nj*cFjFTRJ9uu{2&vK*inG%J+)4!SqDD5miX_BZEQ(KazH z7-wgzMBq{`lH#_IQz;Vr#?s^(Md-`xjGIe$9)uihR`l2J1<-p>7v_ol13qfuIq^tu z*nP15q|ZNu-b$f-{Vm|V?2hz4IR!dq*--k9qu6K8c*|bhhV|me_1pG;!EY(1JZBV4 zgWvttzb{D9Am1EsCQkJp?e4CtYpg8n0MsIHP>l_5`C_&};M##O45^tRl%YdHlmz12% zdFb~85{=q$9q;sC@A`@TbE)9O0z1%)=NyJY`948jSRUy=w~df7E_J199pIzgp2<03 zU7B!_yfbDYA4)%5f7A;&h?Tb_ZUJ9mtuh{$1U;azH^0l8MZo8O7|IC5zA-a(SCKjJ zr~~h}cq!U*lM8cWu5M<)?}d4J@k#JU?w@#eCqj?;GROXAk>fA$=ix{88QM~M5qVXeb#!7d$E!RS`}@i;Z|zFx zjaK(w$$1DoiShXK+yy2$f765R?`=WJ5wm0>A5fxb|>?zj2vvKWFzB z4)BM0UogFPxHNWz#Zi6o?cC@j<{$9F7V^q5da^8~W`@^7b zKRR3}o{9B!-L5^YaoC4VB#--wVqZ@g_W5p+3%RsfgQElVlfqVV9odlkh(<2ic1av` z<)<}qhe7Xf>M$~b@4^mZ$Md%$w$Mvd8t@xvK|e5B5PM$|bi7wCC*`N{(9pN*!jL-+ z4KA`BDW(w*B@f*+%$J8NR3pa&az0LO!K7H=CbrJZ9D+RM#4X3*i`(fh?Ax8I$U-qKtKInYgCy~^FN3yOI2-4F7{ss+*arRBkYH2pnQWWzxu zbVOf``f-z4WzY3GzXA95xH`Xh1ol9wGiTaCfA;Xlyyjr6hwaKy0_M|!r#d3BlM}eY z`Vjw1Cl&%v%9ZqEW&*x<^3mCAdjkB0iSK@W(g5#AO|R^2XME?vcvQP*G4R|AjY5tQ z;7SCKsmwEm9~kG}0nZw&XC9t^jX@9o4ASO{l7>8J`6EYH*zG@(SR{W@9D1?#_v0y$ zN4&jbnET`a{B*Vpzo?ghpOm?2YsAjryH{_|tZD}T(^WTdMyCb)gyT;kH>|5Ojt`#| z2aajK$b0YmLa3Hz2yPWuDMc`n>|8U5=lH_;C4?9hzEeODgZtK|iG&P)4Z zOH=rN6wd!-IRp1)?EaAzTVRLrq+ojza0TC0g0_3AgYW26uvrQD{gTzk4e(f!_J|FC zbO#`3I7PFR#XeS=(fZ!~4)#CJwi6qF!aqumM(!%m8Osi?_Av*&x=(aw$a+WUB_*1) z@3zxPkH+D>Yy;5Cg+D8k(!tNQc$9y7!b7r^U*sRhI#z_g_4$ zT=1Eb*vw1r6Kw!atjz0xG}e9NQKp}$w7i8Di)ny4tc=tSsN1|Z+|qn zx9#3eJ;)2|-8#Ez=|y7DzsClxrM@$DMBhZ|;1$rJcMkMEg}gR0ew%|e^r-K7 zvU6NP_joP*rZWwAjU$##@lh%e<_~p zWpAW!0}pG`_#+we%7skdt{>z09?_f1LCsS5QCTxTvKo4dj`yjIk9dzi#~kNf5dnM4 zZ%0kF+rTI8p6wEjdiGEIDyy8J$5PM`uE4l4!Jau!!7qQkb)l{d{o4h7%sK=;rf0>Q z57!~riu{`R&b~SHyXxl>r71sz2$#@ZO9?uq2@%dS@8k#iQ3vez6PA%XZOe*7jb<$&jg&0fgfs> zQyobvkfUZ0V`V@1=Xd=(upKzUA78KWcR-Kd+j~&1=oEr^t)|wym(}{@W183$zPTHgKQ$Y!G#wM9XkAM%!{SY`lG7S7e#f)CRIDGd> zhR4nWxK8fXDJGuaCr+PEfspth0^iM=fb0X+dmpJQldrX1HV$Hm4F$4BW zWg5w=7QzmAcZo6sdP?(A=?)?EFPnBz#T|6d&&UN1^F`?7?qKrU&32$a-A?%_Y=xcR z4&f3v4&a@8E9rAV7hX8==$e2(?8l!3jzygUzCD*NSq=J2d8N(6Ww5*Mp^A0l#HaHT-rJ`0>#s72V{Au)o}Se21Vm=!QQIv-H8AsmsrfdI7x)cfJ4CuaGmQ zitTOVc?7-DAFrEtz%QNIBK$M}=e48k_ovQr_%+t8e$n3tx_cx>V`VD%!i-@XpFVsq zN3?1vKbTHt&uKP!w;cKyarwgFXyCWpuL+I&z)zpu^V#ay7w;wdKUM{PbPvmwCh#79 zU(Sq|ZyARF4KXApP@N&?*Z)D4QTHn!$adBJEY;(||=RWWM=8pS1u`MDT{Pxl1eYY0^ z&o_PX<7{WhW4|{&JuDgm{YLuLN=o0hqafN$Rtf&`7N}>ad;{KQlirhP=nGSfJ_h`N zT>I>GpBeohFb|K-PC?R`|CU_ZPwYplb|lA5TL3-E!;1BKz>x$iyl;ON2>qhc=`QVT z_@8dOEV&x{*k6O=b1LZYYa_My+ez4s{!;t;R+0nskz3bq zPCySTmULq2d&o)W9nl%I$M-Vswa6Vh!$tT=a9`5}Y2&piv2wV*OcSPLz z;+`b%&zdoY0~)~9+~@eih=o2{=2~$b_}c)z=CnBAw2D`)n2-Ptr%-m-e+>GF1wOwo z{eWKKo}$pHe!-H8Nu$h#e?98^T{yef96*@gYQ0K9q(yO zqOwd%F4lRYxg%!SSGU%1WSzc?_h!37Z|@G+!^XBhuZ5gs$<5BeX2>P7Z}g3K>(Pmx z&F0^)ziI;M_Fomt9PP|5Hwf*N(u~y4?6%s3QwMa26JizMp{}#Vlsn zNg8~J$vuO&uU zUo7z88tBz{FUhhb^daw43XTaQ*k^k0a9MO?z1x;5-3tA2td7a)DDaKXEaXcZ=D|Ot zX~Z%P&`S#xb~E09&wl9eYjp|mcID?6w>|>@?U>1tRvrU6UbM@fdS&?gKXu%3l>+pi z2Lz*-JAgNDiek>mqm$S63+&up0KXnYa^^s9^Lby_sjF+@CrV^OrXTy~VLqOl=UBkE zX?zU)19~92I!H|qI9Q<_pFVl1LytUiBgd^Ab}y0}qMPl3FY|wNWWNIJ-f|cDN}eHP zm(sDyVLjNVzD{U54&27l->3FHQic6v_H*w_*u!KGwuo{z!CzY5(J;|m&#LT-bh7O;1KR<0k#wes6P!=YiJWUUpunaP?FZow?J|_Dqjuu4TM^ON*Iw)aOTw zIHNDtY+jh9`C%Go_tjtdRc5yYqxq*l*8>w8q~^60UR?`aF`P;@WvN`D+{9+%~eaTsLrxUz@JRsMX@NOS6*sQY7pAN?hH3|6+O_#3TXp7y{u4fpRzsH@sNAdBvQSZFh6Vv%hWB45AZWdZNW;X0Ne#GX* z{sTp~*Ck$b^V&0PR{hCz)s<~aha4CdAy)+NE&X)zfO&q>ZI35UV_4E3;!FR2^z^5X z*R4PGm1TctZ=&SOg(CJ1UacIq`UQuB{dUfJJ-);4M#wnZe8@Ij>(;Rrfpm+0qmzHW zcN&KE_Gq`H1$}UKu-`Y6^&<502XnnzoO|E6^jwzpeFc2EZIwdS(3ChcM7Z+hYjqGg}%ebyWAu0;_bC1V$GLF zB2GsNKRwM(>iQ^P)&I?2YrBZBbGJs`U&60&%{3rHu%mZurj&TtiepZyf#2V@pIMTy z*@<47&dgf<>(S;D(!382Ei>CYOXb0x18-tgZlrvcjB)y9c;x+zuK8l0@2^PzbvovT zgtoMo;;tWm%gbXkqgcF*rw`VDd!v@bE5* zXXLHbK6uM`eN9N{oPN;&X4hhARUz=Hu710prEEB97O04Yt}ZuAy1vX* zVh_Vi#<#4*sQUDn**($tN3^;aDbK+b#L0`%^P0cs@Ua6Y%P00;vG8FS+>Xhi$aM^&oJ{_K_}WY9!8(2`O^N{i(%DsusO(h zUc-VScg_u04mLD=(M?y^tZq^nS+qUV-Z9FqXJ5h@_|MoIGg45h zbq&0ZMc?edvCTQoJ$8$tjLqKgvlpj}I90@iO6~J^c8w|2zs9w0!9}e_jD%9%D~5ia zi_fZR*2%=z1w?C#D?DltpwFK5BZI48XSt+Yw_b?+Y5ISu=%>H+-IDF+1sU zsnr5g?TNY>!qGz;eD%5g_cs;@1#D6j*cg}f?!0ZfiMQ}71KJbWnv>2_{UP$fA3iy0 zTe5d&+X$FS+^VpAujHEPR8X((nz>dkb5^Nnm4v(LqwO7f5*`u-@W6NNP{&0>S!vY| z0(ogOzwU58bjm!wRD`=DZdPgGx=ku8yX;OLT2I^bHUFD!gsjTOqdQ7MH9Xf_4^342 zI(6MiRSF;3Wnog5P`fU5mFDHls}1_$p1b}uU%H>O@AK`Qg4#dXiI0@8IR}Moiu}Xm zaA4cGR=M46mTFmWey!n(mP*%6>8(D0hZJw#dbZABY~A63J*pqm5{`GSt_~CE;kJ}a z7o9bfDLT@1+tDZMlic~OpWX{)AM&j{6;Y_Srf5BTct%L5$`9ADH1}_7WS@PN-@34<&_bCTa|jL ztNq}0Oqj3`V$A9cl^C(?PoEu zc5}V)S6qhI^`Gvr^Vz7&ck9SphSk;EFP1yq9~KM!A#iG7ZrF}Hyavw=L{3C9^9~!$ zef3!8tmW-JU1OZP*1gX&J)(Zl)#C7Xh6ht;Ub?qV@z13C688e%6EmhQr&s(QYmi-h zvTK^wm$g-XKO#>FGn2MTy>BRTXix|eO*64G?YieFa8)%~?n%GgY;W1ZxDQ>S*P?rB zpL*zV>|8xPOr_jWV&ARa%|i9B^;!&*SB^zrcc`DQT2uG8*QlVF^TF8PZms5#w^uVb z2C~|!B2^61XT{h1T+5+7-hMeuobheMPQLTS@|V+}ShcvM1U8vW- zM?j46P|k~T1jI=5VLV=phmO$}G17cU^C8WLG|JJIjer>Ap&V`52#AqJ|5HDJSa86C zl40rqX=JcikUjy&gHN#2kwie6g*5U}j)0F9PgdX{a){;7eySqUXds7rC`aI+qZ|Qg zw4);*

xLrwbR;=$3&Xf+zu1QCqSKoG&$32Q;MdpN^OgX%_Sy2-Jzf;tMf8 z2abR=VmfUygQ|opL!+)1#04lsKH4L2po|lN17(~DNYju;KH4LoB`^Nq2GbGK5feV7 zaf9iI>3nDkAf`?VX~IB01F>i%%1wE&u{z>S7>`_6UfD5ep+9X|%`Kh>@mF06(0_)CHh2{`-WGWFfFo zj+n+q84Ce14KWS*)HV2@3-tdzVU(dA1NDRv3!@za?HGuK5eu`Yn&U46<1=u<&>aF| zTtK8z!a_hj8e)u(Gy-CbkM!iw42;jf4PoGd;t&BbE-=z4M>~wq!1xS|k2C^ejE^)X zPyMh$;1BhG>H_fcB1S+Kb$>WePTdy{lp{??8ZiR(m{3;^E6U_U%S%H$1YSPG2q>R? z8Bjj?P@)`ZwBtjJKn+U`z)uZ?z>o2%SB)QIb0F{|8|54*=Ri3J%8{lcjTnI+V{;(z zV|)$-evHk5z>l#x5Kzv6at@Sppd9tl4guvzBgWX1Cop;TG-^6H9qJ!7bsC;vWK7-~ zoIL~ONYju;KFUx|2n#s~L=iCpVWAWOUu8iW^>Eo~2qOl$BLfR8`f~G&Hoeb#(Of3=9knjg3uB&CM+= zmMycgTE2YcN?ThyyVa}Lty{l-<3=YZXXnkEU0t_s-L`G}_MJODJ-xhk@Amce^Yix) z2sm)y(4nB9;NZ~E@bHL;=;)Z3xVZTE#KfeeJ9YWVLw@ID1IjHwDF zc=Am*#$RJbFqJ08lX*DCB1+{?=HZyCYmD5fJgO9RsXAyw^+(l2`DDAPGAa*k@R!O* zm~2DUMczOCQGEnc`BQoS)J64w=0mmlXN;*ls_x_*CKQf&|>`}m*pnVc(C7ju~G zYqAb%q1_~VujK)rRWx-*fu6&14PqL3R7j6=czAyevY)>PdKUj3OMPjD;fv zj4`MBoGSZY<56?_cigG* zrshTEQTKFyaED}uB zMvTA;Mj62mF;#!EEExI7nyf>$3r2!U6648uvM;JmFftL)j`g21s!yu!WFA#Ebxh?= zwnG+vD92x_41H34U@R(7eX^)yLAY;WoQ#TRW_MN^%XqX z2?y$duAt+h&`l7~fS4dm{r(}@kT9OCLzU4ckI{~fb~q+f8>;PO6Xa2SQGFnv>T|LU z@~AqKc^HrSO_fn~s6gczBm7%7mG^IZ6ik&(&U5N`a=ghoQ1dWB-~aUS&s?ZHYA*ko z-#_!3n!ho1v4UBI9AO3jGbjefaWGm0Bc}2ve=O8NE(gM7OywhwYWr^JHIFH(i|Xayc2mbxpGR0zeNy$P zc9Zi%O{&dg9+_%0ITsvL<52UMnm3j4_n+T9-?qEkFr%UorM?3u5sq^{MRqoLW$G-wQKWP^Xm@FT?8|dunUmpI>yw29sQ}fMAZLv*X zJ^2@~rA-$l_`TtE*48@uMN^>He^IvI-d(K4~{WlxXXj|QUJpA2Q=BBKjZUHPp zOWW7PSaNmEI@6kxMT-qL|57@?Xj3noP^7W_{1 z1ZAW31e18x7_1aEhO)Ri!#qWuv0hw*;S;aHC=%3U>`c*QoDkPyoK4YUG>B_6x>K|n zW8yjt(NrDA90^^9VX7`;gT!LS_SD6UFbO@z=~O*Ny@WpFd$2y^iG%@TFx7y;$24Rx z(+n9ZOe2O#ni0cW(3r6%&6wfKT*8P*Tf)d@nlLV7x<_t}43r2dh1;a$rlCj~WCBsW{DdW(|rHotCmN6<)mob9Htr&KKYGN*NYGU4k z>S7^r>SEW4hS>LD4Y35G#=IA=#=K6{nXls2nO~=CFpkHEoKZu zo0*-U&Ah_UVctp5Vb<{LG9M@CGJi4_Gg*m?nGXc@nBIwc%n)IHW?Z5^Geg*bc_Gn& zc}v)k*_vp`{2^?_6iG5-Dv1~~g(8iarou~@(-N037Yds&uf~}$2NdE*s5nu!&3R?6-ywr)z~wF)!4I%I$I}LoxP4|u=fOOu=f*9c0#Zw z`wY=yUk}z|-zD1Yj$m!}ccR0lhv={+Xu52*5M8z?4A}iNLpJS*AzPTkh%I--h^@|H%r-h=%wEm0guV61681q36L!=Q6ZR<% zQ}+2IrtE4CGj{h8Gxi9FIh#AwoIRVw z?wosWJNMkv?w#SeK6drFzLPyWeCw~?flmO&d_7mkd`VBAuW)sr?~te8ck|W#zK1+< z-wRjAeP8k5iWz%+?bq({ZJ)8%m%MhbZ)nDOzKLtk^W8b)eBWc& zp6~nkj0=3b)h{HE*fkT79qI8d%zDU2t!!Rax3*z3tvM z>*1yC*1PX*w?4eI!}{#K9oBc2Znl1N?`G@oOFOLv_jOw3`CBaSeOs*7Q@2{F`?gy7 zQ_r?0?mOE$z`Cs4j&xaHIdz-$)BCnre>ru#)q4MSt8dvk*2MkiST`)QtOxJ6tgkN% zSiikLV9i|~w7d@lt+wSMYu^JQ>+tfh_1clJb<6UIb?kwN^|9sM*7qLhwtl_5$2#S~ z9_xnFdadw7z1I0FqSnMiQR}7^=UPuabguQ06+5h7Jha1V@W!kq$6{8ex6e9otk1f} z+i%@|tl!#jdfa;C;kb3e%7nG%k%YBpS0vYvRly>!BxxtWTdg zY|Vdi*xG&8h&B1-i1pN21?y{17OX#=^(O0-cfQGbc-?;MV^8h3zOio9`rfmn*20Zr z*4ghGvkDuF*30iITJtxRte)pe)_I%8twYa^TYWPRSZ{sqfOY?-vh{`M%GQrJRjf*!gRTc3XTa_if^H(PTad$Tp;w6|Daf9Ne% z*Xc*BjSn8NE?Ien_3dL}u;%tFN(s_V_hc zbj`Ka_a461x_9Gs*4gj4&ic@)*IO%}yxy9(?5);)_r29Ras3U}(R*&No@u$!TK(LO z*4J0xWPRqIo2+#!Znmlq-fW%cy~W!6=q*;qS+`nE@3__a$(grVr#^n0_2+eOvwn5Y z+pP1K-EMvPUAJ2=Z8~cG?%|`>uG8+Y)<1oRb=MhpTH9W@)4F2g+pYA&Z?~+KcUkW| zc9-?OWp`UozvFJ}R~zrKa*y6){cYvF)^qpVYdwG3ebzT0ywAGbcfVymbiZ}N=?_@H zKlXqXTmGPR!^00+<&4TLSsy)i%=+xw-v%yP_ou+lwSNyZKJ)iLd-Fd6 z-(PD68`sSYhMt-kY+u_Hy!@%A;7x011xMdGEBMUX*}*kW%?|Eto)bL#={dolub&%S z^UU1fo((4kPi|fky!V+U!S`=i7Cf|JMetM2rw9MC;f&xD&Fh1odU}2Et<4*Pmp#29 zm|ou;9C@}m_~iPH!LM%c1!cmT+WCHZ=!jjuXmjkw zJ2uCTE$WOtb4O?Fvx~OGet*Z7*!;y?V`tsDHP$}k>{#H=vt!A{U9o+4cEv7Tye)S7 zP1|BWTD(1W!=2k>vralEcIMG@V#gL+vG*OdVqaSvh@F2&Aoj7v!PuimgR#Ty{>1e! z`4dOmTN97I)S7sIdt2fwFSRAU*WRA^^GofCIUOB|l`nTB&hFTp=zn>0VyL4tap>jF z#7!Mr631TNlK61P*2Gs{-kSJ%$Jq(?%Grr!o4XRNuXH71o3|zQy|OJ)+Ppn+%`4jz zcWpi=@$Re6Nj$aLO1$?KEAgexfy8%T2_*iuIha`bYA~^`GnCl+YACV0Gn^<~9Zu}; zj3nOrY9w)gXLsVoSGyA*>+DH<{nehtKRSC8b6@LCc(+6o?XN`>JGPvgIRCYC6PIq; zk+|ix9f=pV#1h|nEtZ(GwJ)*uy?u%B*8arB@9j^Nx5g81eQ!K*_tr#W?RAO7(_42Y zqOa~u{A$ZU;`#ahJ>~iS5!f{&|30U6IN zYjXdMU6WVN-ZpvHjoT)FHf#IjLpN-nv`+M2R$Syia@!IAkz4$&M_xP9dgK9r+mVJB z+m5XAw;y@o#r7k4f5(wUFLoT+?caRl*Dq{7GU@L;()MEKk*I&m5whuj0pErG1(N+O zgRw||PpWsYFPiKNq(Z$cklr&G85oEUuwWoO*b_+&3bc6e+(;-j7z)H`7p#^oTx+!6zd-(RrW=YyL($ZfIY5mvBNgZood+R6(sYQr-yMy_!Zcq=bP-Pj7;S&L zPmnDZ80d*GIVlnV>a%Dp7U>DZ27}R*nwakR0A}0CkP~7*hk6480W>y{v_W+xdLw)6 ztSIJP3U|9_qFYPGg$g4}-e`v2?@+DROFzcp?>z_hTr5{=E*4 z044|H;3zQRpv{Q76g7&r-DQaWx+&RHLFYg+6paq*v8oK>M?qN17>o&u_M@B8Fi~_+ zk(7vwiR=bdr)DMs;jkFC&eBW7Mh4qPouZnxbX9%va1`@CV54KggRV!l8U<&&+et5r#-dI!USQ~+fLh3o_6P%a(~MTFR3{b0^1LQ0W(N~Q6z9`0bgTQr|!HB@jdP%TfU zEPOkIs&_AXI|Ce;giP*-uuBp~ceIBkdm-2$S^FalREY%oXdqOBBl8r=1uGK+yPid9 z27=4=AiCKb#ru4MRi=#7uELhA?ta?9#6YwU0()14rTe9T#0n%1v1eR$ps2}?x$z-4>GN{FStS3GYP4)JnK8c@<_Vfo*>4C^#U`ifwQ@Y=#21x>NOE(CH zB`kGBO@1OBghaFTM@=4$5O0i(O&6M{b77wIRFF_=z9*bXp1L=xytXv7(=dcfel@not$ z0HK$JawAz1CblPySPMy}L%oCD(HQC>?kDll7l9^V$-NM7P~PeOKrn^{f;PZvDO4B_ z?TDlR*Bbgf)a|A=%J;^@pc$kyl|!*Ggmr8$#AlpgApXG^R_H)atDuZ6#E47-=xkyj z4zq&=F~M5R5eo}}>#`MKFkm`&gDD0hyCiMXv2+p!!7iHQ^CAOrQo&>xKt?1}ffS}# zRVu_lv_FxSw#GmtoDN|WT4;(K`)MH14<*|Vl}h}rWt>>{!W<3wu~mLNGprD)wm7!9kBxD+IV{D#g;Ixy02@qxg=UM$#wD9uKa1tLjN zBX}j980-#U0>gruFqH=OCQ>3zO)5()lp2VM_DFe0h>?IVfZ$8n;*@M6k^uIlW2q>L zk)R94F#Wn#d&r{8iisVv+SxABVvZ^BZ4=kkM@@Z*beLW>Pqk(2E;CHEkWa!40@1-d zy|5@j72@`A6zoLA6o7a-Me~hC6G(!3a*jz1IyE>cH$UqxyJ2#WVkB-bjb;i^jAtsC znijZHQb0P9$>t`nP{N@=Kk-SB7!S6SR;{5}Jc+d^*l#ch>y6f=&V>1jx=2D286+y< zkZ`VB&Ha(xppKvt)9eM~8p|e0gcB5@)o17R28eN$EhSxse&QgP%>khZLNEwBT97XK zqMTk1(lpS*9F_J8mfh*9SnQF+`)y9JWs_rqxIm;Kp(bfGv?N6RNi9S$_r$z%C5Phi z0a#~Pl&~S)8DW2PFcM1aaB3AR3p$2HLW4a6anwsKK)MLgO3RKiMUH>ka@c=1zowq(|6qUw zDAqtUwHJTy0wdA_5*4W`93?HxSSfRq=u5`1M!IQ%r2Dm|?}=!})NCdi28OgC9AYXa`ux4rQoFE#Z>CV8?L0Pbn1mq@uet zacWSuoD)*mHfLZo^g&sG+c9Pb3XcKaG$gxi$B-`6Fo&lZ)JbaZU?RE0?V4oh9qn%*gS%$BugWGaj4uFnYB)|fpP=3 z5TmLIvInvSB+z|TlTR8b(j9>ER8}krV-(TqsV^Mz>-nRsemI!qaY}Xvz?pxg(40w> z8m&fk+ngXON%g|OKx2Z4vLafN=&V~SYp$&~W8IVKnAb{!I$BZ>IF6o6^WI)u7>p3; zK`7gfHV}ehFai<*=L+A2lm`?zd2SHYct`}2$=z6T!eV4fmy?}D>ss2zuydgngn3*m zZb0M64iX`8F(VLnWCp?Tpdph*sa!mSnop<4W(iFVHB!>oKWQ-_4pbr*mIu5PbJrD(@ zU^J5$6)oAeA*}s0M7|&y+G_F3R$R}zJBo%%XDe4W8itUN;RQh??R-d*=_d*a5|;^D zt9k_g(HacJ2gtOtXUtwqE;k%>g-EjnBr!fcOHW7o2z3%nn=gF<1QxW->6&Ju(_li3 z7z#xU+{L)UJA+^b#W3aed}&PLT8bDDMMZ3?#xk#oFuIyV+`tt))XT+L5*lLjiBv6$ zUQ_X;Xsh8T5Jm|MH!fFKsk8j*N~aYidgjbk{vQ?uWZOHhqLVl#7EH zNJq&i-5uQn4pz}cw_^ce3nK_ljl+nfB^>d@q#Y}w1Ip3ywM+-}Q;fJ?Dk+l}97gA4 z1_difM@b0t5SFjxL>Tk5guz&F%=#H+NV|^~lw?sRyciHzv?2{-_@uB+$%&Dy?x=Oo+;fx| z+{xmBNJ453GDT!xMH~SY(TISfW?pF~WnvI|%WoFWn!fP^9rV#rG#H!ndk zcqtnMyG5~KAmS|Dn2i2#vNy0J!UFYJXdu~}PK6P0qfF5b2~}5-6onfE>kUK@Xae_O z;{oM>RDfVYq*O2gNeY<3h*1qBlQ9uO6Vpx|lc6sRd0;O*P*`@PkYH0vsc0)x zm_KU6j46>P)=@BykQV76T7YEdtALuqf#}1uV5K4IOjHR42E*8AtJ~I-P$A05eGh@< zL8J)eB*YBy7;{-9q7}E+(;QiY1X&#IwwD4G9}ET6vJ_9GL>=!_tu~P}rFWRR{s@BY z(uqm<+dCL>kAgYNL<=-UGu^Mcm7;QCuuvcYu1H`PTyu(auuu$UR7x_1q@3=TDXGi(c2+vN56K9^2k?o+&d2fjbSkRbP;v&~!rLuoP^>s;DX~~pGfCwlYf*w_jC?6jB7N{6 z5lfB;6GQ7*+GCdfhF*yFGz$(Gl>31$N=h)uVXsQX#6qgbT;eRD`E2^rt~bOnl&zjE zVVX#=OCAdSfl&`YHc%87?Wh9yICP+g;=i_LVLf1C?AZu62^I%M)XCy-h~~&yT06Am zg4G}w7OX>vTjpR$1BQYeI2q8JNC+J#G8OgR2B9tl#?06`S-DVX-tAR@4t+U)?0j&^+u}i5~i~Csw-e}p1snT_X zBedy`)kOOw!o$KIhR&p(Di*FOL~ym7g`21G^WKNC@`hx?Jgs@g^)5C+_cS2XGSPKg1sl&l|v{-@W1c^S-o^u_MEG~8sbO|4I%yO z(nNMJG1Uj_q*vJc8kInikPRf?L~L%sj#UAU0l6I{!h8r4r_wIdRWk}o3ByXWIk5$8 z?g%bIrqI6qu*yjD)@P=I&hmgDfZ!U4>V0b&T!bibTU|C6lBW-iX@>x`JtRT^P6jrv zX`)nUzy((kASoo0gN}luip8!678(kxk_u9@`KJVoj6_p0gb~5T(=djx+ugdnrXES& z+HFMT&)49QR@Z*Ga0FaCVeVlfX6ahQ=orabY~5&EkjlcIC4d})3t$u7@n==+BMGyP zEC2*qXk(LXv`}h~^PqaHXciA86OJ_#hicb$uc8{sHG9t7`EaAKw=Hhiap3M z*&#@i8kbbSpuYN(V#^v7liSk5A(E05dMM091dk3bNR5>swgHg50j-JcdC_7L-l04< zRl|6Lq}g4#E}oP@AmxLic6XMmgkoB~%+!G`?9yQ49!57A4$7C(vWH-fP}i8WcT$fn z01j$0l-%W54!e8dyt=vtJ4&5IkwlhujAli<$L>tUjCxXpZ4af6V^pY0SYS|9aSX#& z8QLu*1mz)OeX0X|wTA;VLSI0}=D>#XECI?YZ**{XFS%5(Qz$&mrjtnyr9ek89(Lhm z*O+k79D^KI1P&0uo`CQrM-At4$f>iP^eLVkgK%i2>RqFwF$d`C=~^OAhW?O~zD*jJ7M?RXc{8 zGVN+|_4bav{AzM(RXZB0Cd+jONSiY5R*xgNs0tF&Bu`0Z=-m?nEAAC2({|ckTo9g` z4Q(TwYS3JWd>gKe94Dl&13g#|Evg9N-y z$XgqGcVK|rdbw~EoDQ4`we5rkWC6-Z?uaH5q%EB=sB>fm#{-Z<9)K;7X!AoGswhU| zldD^t2y%%bLV}kVjK;`<5$Et+xejTk1J*^GTqs(&xj?on0$nDpQ&*;BAoN*o6G^Qi z{5B18&(M?%GTCkK6EPOMB4u;f7N%XBJP%b<5ls{V212{ng|D^Ctc$w^uMMN%2W>G0 zx+x0T69|!S?>33T(WErI-OO9pbNeu-W4Dt?(e{Tt=jtvG?v6rEArdUklen|=lBG`R zL;s}vh5IjdSX5XJBUk4-rcha(0+Hmh$>=&8q6)e+MGU77V;H&&s;Yd&5R$I-F@G@) z3g}X45~9sBb%eSWNEV^9BKEZVw!pa$GLb+*=~a>thnt8)N*FveK%d-I$AXTAiRncY zP`^u|)xEaoh%2yVuOHzZ1w;_39w0n&4MaQfZo5p1jy>n^7(bbKg0eM74Rl;O03{;BpDJ)5 zM1-d& z|0fm?&$g&V=KXpdc{pBDpH%Sq$3!Mwk7#NsdPXLl&<W^hIkEinXzvuAlo13hN03(>@t_P1g?bh+ zM=eTpEEg9@yfy`;8z3u9n2>^RZ4BU|GYF>Z@U=WODf{UH+MxmmhCYi9(2#AJ?y5){ zDY7Q*q)5xeuETy^h~5stK8QFAX`fq(WA_yPt7nWy1?1Bk7 zK-WFt7=ETQ{8P(ZRhAmndA5hD)zD-Ash__B~q*XAS2==LH`c#lh`P7sW z@f|rpdr->x5`MC*iDEu-71|350W{dV5aW6i$Yx_mEmC$cl8h`buxO=s&ujGdcYxNzyx3r6I-tpDGCdlNe% z%?DdpWh7J1=jath^`uS8JF=n>=M2c zA5(gV@oxSKyPUtr{3r7z^TX!j#tnQf%drBR$L6yI><;4ub|QNd+t1E7FEB4O?=&tl z2hEGkjJeOunmIFX4w=K|h*>b-WbQXd%`vlRmdtVUfLS&xX4QO_Wm%s6jsJnai%pmZ z%|qs-dDy(fywtqR{5!vma}%%TFuZ=lcCp=T54)MYi{HX-Vuop&_Zq`&FZ+pc9(x;q zGuvza)VQ4=r4L^k_yVxeV9YR{Fy74H!jJGP_?7%Bel?%uH}Zw-Vm8QrY}{ft8Z(V1 zW0o=7m}AT}<{9&i1;z=+iN-=>k+Ik~$yj2XY@A{&HBL2_8Ox2+j1`90INexjtTI*` zYm76DGmW#1wZ=MQy|KY)HZ~fY44=_r_>ESh&1g3|jLk-;vBlVGoNaU&+l=kTIfi8f zjGz%R!bZgCHhPR+BWj#$>@Z?RpV4o`jfAn&7%-AX%19f#jNQf_W3O?ZalUbZaiMXM zF=~t%MWbX48W$TGW1o>Vaz@@5GKP&2qhP$r*l%2B95JpiE;rt6yv0~!o?*Vq?&R0- zKk^Z_oULHZ>@;?m}P(ZyVn+{?qub@jc`F#t)1i8b31r%UEqTm}i=2nQP5;=6Z93*=%kyeP)a4 zH}Mxd*<0A3_@DV9_D=ID^J()L^Ihh1=JVzY<{@L!IBZ;ETxz_Bx0$VGpV@E5&4k%* zc9@&ZPIHU7)jZqmGPjxA&2vo4446SPWQNU%*=_ciy=K%r*W6*o@M-Ah`1AY)US$W^ z+xcDmZhnj}F;6z{HVyt9Gx-sGP_Kc{;Enk9Z4;lxXY)Dy?Z)%$FZ{233;VV4cjI@) zZ;XE!zc+qsF!K+_OMIr;WX?8cnJF`E4wy-Er@6~~FFTdJk1b-G7(QjoJ#4x8C_Bwu zVS3He%{BNe*9JDpt}>o9o-v*^-eo*zJa4>UylA}Jc#rXt@v`xX@v8Bf@m}M7#`}#A z7#}n~WZc8=<@fRX`2+kx{t!RKTxytQkuT(n_+ow%U&2r3r|_lx zRKASAz?SpV_zLdjr}LG36<^J7=C|;>jK|pHYz@BxUsAh@UCqwmXW~1(*Rc1nwR|04 z&o}U9zL9U@KHkFpyp^}{cHY4^^GHrCEM*k;zro?%b0 z_p|%i1MHo~Q^wQA!+ei8SXA2c5_kC_jfkC=~|kC~5~?=YVph zlP@-}G_NwRHlN~8^Jn<8{3P=l^IG#d^O*6l@rd!L@ey;SxytNey)4SkWjh$&d}949 z&TeF%=AYr8<^RGz$N!aop1;n&z`w}9#J|kH!oSMD#=p+L!N1A>jsH8pj{gV$7XLQ? z4*yU7UH(1(ef|UfL;fTFU;M}XC;X@UXZ+{<7yOs}SNzxfH~hE!cl`JKz5IRr{rm&` zgZxAM!~CE4_536Jqx@t1}hr_yN+GY-pX!Z*Bfs&eqsF5_?2;^d6Rjw`7!o!_Rs7S?33(M?9=Qs?6d4& z*yq^4vd^>E*%#Os*@@;t^Goc@>?`c6>}%}n>>KQx?BCeGv;SbHiv61XhW(cPj{TnffnClnH~+}~#Qx0w!v4zs z#{SO!!5Du#yNlh;?qT<```Ai0in+PNe4O84+>Aft{s`vjZRQjFPV=4oM&lOat(dDP zF*|QJpXE0hw;DHKuAbqyn;$gaXTINjuX#SZkX^tog5LWDWWgVezZfJHehG>2C*!X| zHvG!?gYjqMZ$d(hvLYK}CH5in&E{Nat%v!`W(jk&0_*=YcAN1wV>x8-de+6Zv(q6L zwz1odqsBRq(Ft}Lq*M@cs+)zdHc9Jd@i*6KbzII@vQ=y~+sIyGudr*3YmEl;1Lmvd zYvwEFe747wQl||4cB^?c+oVW!VW=)1fV@0GUQ6U3u}_( z;Y>(G(kzb}lCwWzz8~u?2TS2ra57_LN6dz8F^9bhsed{956Gw$kWXH$v=8$A(9n1C zTg)FDWx>I}gDg9bmCfC3j4yw~wfA#=fk|?dH+h+{N3yX z^L_ko_BafQy{uw(u)AOzkYw~jQryFaVQW;OLD!hS#fta^f019yZ(^64``NJhZu3QR z8GF{&QBRs$Yu# zGmuPgW>uawKgai)AIF-#A6C&OXv!os=q+(1E8wd!J{X4-HN_=K|=S3!&W`xWVT_W6p!le7kWsbk04-Y-k~qlSbSE zxqlAi{x-<{v!UmLkp9g05M%)*sB$Iw8WYljVJO2nNN)qq$kbeIHx%WEc;AbIENk;umNUXoJ4=|FK zBqvE;egcy7Bami)VviaB!hdSyVU_32Ta?z`1^f4>kZwu#?~wfuux~>{{0w?wEo|(U zq3zxRoA1y3PmuoCLpomz+59vlG|A`h@Mqb*#sS#Lz0fh|vaQfD_!I@S?ha_48=-aH zY5W8lWz_sH=(}CfMUY zfgeELz|#iV{yy{Vyw;Yvf~VL)^Dg7>{N1osJ_WrqWZuTd%nw7$&48Xij1QdtC%=!a zf(5ghKLqcBEK{;TKL-0$TcMv8cIdtA8=P!cvQ^2F{i1ELeoff0+D^Ta7tI@ZfnC8W z`~ZA}8L*Qtht2#J*vwbLa&9olcksZz9*3=c2$psg_Ur_#?n{*wT7jKggq=+m_nTmI zXJLn53`?A>@Ep7Z3)cQg@FU3LC+}ea?EU5NDNYks{|a~kr@*G)2s?ihEdAZE@yQdA zUWN1rq;C<0*Kwlo7*2&x(E*Qwd;;<+(!yVmzK8T0qz4j*w=oai$1I}}KFv(wk<5l4 zL!J$JAq(Nr48S+JNO%+%z^Ay-Xk-5jd*CX5hmpn~Z@GmJuwTPExCEZs?fhc+ZyED5 zd<`tbH?gOTL;O8_(%cMdYTSICm&^(N4tQ7JQnr1qy}ufM-yiscuoU(~nvX-C-)+1g zBsfXk51Ci7`H+*>^Q#%@Hj;i-$iHUDs!fn~1CV(wkavD~3O-vN?Se$oGVc;Y+O97{ z2hv);&bWpB5#HTf_{01~{WRc%Qq4wz!#*Cb3-VKlJHJ8r&Ane|Y46;g&xa^X*nA$SA%4M5eX-ezlT9KDO0ym|$PVHLY1etsul2h1 zQuDvJj7aw;*zvV5*%i}k-^*ZmeGFC=`MzXVktSXX|F2dTPZ|?uCnF6k_3t6$Z+x$j zWgAUteYy3oqjxXo+6#5-UB~n6Ij+VfeOs?%NxzbA{ohZozOh!7`gA&7`oE7R)wVNf z)I7_ZWD&o_O2#$DPx-aR+nHlaORYK|dX==Q3A>l`o8ZrvVfoI4b$v10Z=MHT(F!|T z>RHmO?=&ujz5Nr|+N3|9fCims9^_-f>K+$%_Z_gd$@abz9u)bjZ=_w1r(4~6wO*?p zM9fU<)8kw6L*{4s1T1*1Zx=GDamj}N|6Au?Y7}k1puncnx?0~#UHgB&hLyUNe4q+E zq(>2>I0hf-VZei@#t z55yb#L-F!%dQ>)72%IYngsfCngU)I&(`irIW2QYb(w@e&XJ*R)oAz7Gzfko{mhp&m;!UA zs;)`jb!VD%XPR_NO}aBpx-(6>GfjFdO?G`v^wIol{}@y^uI{26>Vy28H&B1(($5^# ze#2~?m_y)Gb#Yyu8yaHjghwYDbz-JY%+ZOtDq%FFm#3G{OD~_FUcMl`{Dk!K6VuBV zrk5{DFZZUGuM%XtE6t7cOf!!wm-ehndoYdb)5}*-e=wa5Y0sRrXD)T~_m?*YXXylu z;B%cGlhBsSG+)0OQBwSvno&%fKKNT*>E&zCU_(Qr{592$tGl7@8tzfgGjaFuD>oZ_ zv7I_erDlO0WbQ1J$`RfyQ&Y&p)5}jyFJGKqe)9S}@~G>7n2Ug|lhU(3hwEvdWApYL zt|xvD*E2t7mQ#3^9wi6VE{?yjrrVk2R4~h~p=puIZd$ApC+Yq)ouvEIv_!)i1nJT3 zhItYnEH9`CO3S-lMsYfC&^>6--ENqrh+}Y73vZg2_N+~NHp)s=T|V`sAN5_&P18E` z0snulQ~c<5?7qq#@}>oLLJ1mxG*Z(7yTc1K)tVOQs+tyPqBkwjy>G&wX>uxbN;9W8 zbILQP0_Lj0Ub6Vhb#`U;WTJacz4l}R>eOpbCZJBe+^Ls4^%_op4X0ki>966`YdHNi zoO%tXUc*(dEw>gJVkLqvKu;}1kko<&NzFJ&+LOLOi$f~r%#v|}O%mfoC%Mo`+FZN9 zu=#d@agu|u#7Um)Bu{aYS_-1!Qyu6sCrMI-)@RcK(;=Vfkk53;XR9XQI^;7Q@|h0# z>~#;;a_Vhx>Yd?0XSkqFYcrh5n&GrIL$zioLB-T^ls5%zkWVw@O|4v#Xb^)<@#`qsHk`CD|cpFsANcD)AQle^WoF;;nVZs)AQle^WoF%=+pe@(+uh3ief%Kn@kqEV4bdCPlU$* zbWxwEAEFPqQx?%*FsX;%xb@0CO}C%%)}z1PkmIN5lxJ?5H{k!xN_y#T>h{o_p!6)* z#l7j}tJBLjr)MG@?6+BD#|tqB{v8x|6*7 z+&0zID>t7Y3`qP@CvGQ%B}ourNm4@CNt9Sj<{~9d(upNHak5UV)roaFv0f)Oq?eQQ z|6Hf+eWy@)cru$nBt<7pE`8@ZVd{iOCuZq{X@krL4f8nocCN?ConhlO+9~RVm^9Bk zJ2l@QKW_Jr+x_Eq|G3>hKGQC1_mtZ-;Ir-A zId*EUow7&7?GbUi&)n`aclx}+IBeJJoEbHrlC8cFJd`TI`hHPPN*pHapdBr#kG^W;@lH_B7MlrbQ2*QT)>4 zM_Pf5v}Z%w6Bu4Myp9d8l%mG%>)D>1{gDNA%l5vA(zd-1r$a&O}J*^ znvH7?uDQ78;aY&}1Y9TLT8L{AuEn@c!nFj~$+%9zwG`K>xR&8sj_WjBD{y&nosMfI zu2r~J<64933|wd8It$lYT-5XRxHjNw#j)Qg$pl>5x$ZrIV8-ddZoJQa@g2s)&YXn{+Xxs=IH-g3{@J-;G zz&C+!(j;MqH4{Xixf0hZTqrgZrDneC zQph^ksiro-`HW%k4!NF-4B{f0g6rIr_9!*1v@Tax$YNzHE{2188cIMBFV>bP*Ty{8 zraae%JfEi|uAzmxp@q7kg*vR!^;dX?*AK7PdPQmuZV00q`UV?XLRTQ6l#1}KphTF= zFoj=5&q~<{kBXj^vSCu$n8J}FIC&*>CyLOWhCp`_Bfy;oK+oic(48Drx|0J!ck({y zPOb;t$?u^1A`Ar zGjLBM{mi7FCiFJE`n(wpuL%U>82;t2+Yyw6Z~X|N$|C-`!v zbc-qSBe;+fieo*>)bu$n5qI2EE<#ykQ#5EZ;S`-{7SrpI+~$!?=uzzHQQYZK%<0jt zp7xEkH*Bc3v>$BDR@Iw&ahS$g|2o5Do7Y`q!Xm*>lSrB3*CT!(G2$VOK*h;l1t$Xlbhd1X1TEZ~&| zyt05-7C2qjdAdY7U81a#LyVZNt8vRg(e(mq+T@f1_8!h z!7&R0j#&_Q;UAEIJHbdVSFxj+5OoM9%};w4q&+95Jqy#GMQP9CwCAL>XGz*~a@uoB z+Ost6IW_HBmi8=9drnJxR-`@NwCD7+XJy*6D(zXF_N+;J&PaRCOnc5sdp4y#zO<($ z?eV8Qt!YnN+S8u)bbxDAct8YOiMM8GmJ+d0f{0isC6?+en-Q03$VQ#mq!T`S*@6A^ zV#L_(qzA!E9m=xfJlxg*LLhFJu}=eQM+8ABVNf)b5~fagbfQ5gX6QttPR!JaCY_k2 z6SH+L^5Wum8;KStJa(uqJL}G-es_AdbQaXUkQt5{b z`8Q$-em~O3a8ddJ+#goy2XTKyr4Jy_!d1o9t^c z6b_}ADjZ6miZr!F>19Y$Ta>;HY5GU~c}b<|t{BbPpU?p!d+TEQFmR)eKe^(;O-^vv z4x#A)niJYps@_mhE2GJC<(Ef(x8?UUPkDIap}SvN@VnU$tp84~&p3GU34h%5#nv?| zHoW@#Up;vAn#1pY<%&mtu4!I6_+bB{%aV)U|K_#3Z(njp@eAL2yyevXSN?kRyTwH- z;){Os{hrLS4dpezJU6ncdH2zIFQ#AJy(V_rH~+S0e967q^ zt3dlIyW|piXA7TLxp8YG!IsQl;`+Cq(#>q)@-x|-h2n24|F`Y_-;01Hh?8K`{985q z4EJAu#&WIsmrzd&zWDl=UVr^{#+nu^S>3)Zd_FU0G|f5nv~}B8GJNH#j}47AFm}R8 zr?Rt}*_!9l&lMoAmajOSc|4xQ`0s!CZ&eT4OX5o7+Kp>3t~cX)8wPL}I(ILwpWyl_ zt~dGzZq5{Q-d2C}zQfhLcR!8a{Vz0tl2Q#A+dA6qFUE|MrX+&G?pEVoT0i0V?Vcwp; z6q_DNBCKM*7JqA7d&lO^ErDPNujjD~cCYbu?qL_CK`PwX1*jMI3)s1tBJ0lYV||%2 z3yha>Kg`aZDB>Drfr(+3%#X8pw#xcT2U$2j&17N>#X=5)5bx*GSEr_qlg0*&mM!?( z(o=IMs#!IQQ)iHdKXn$tV1uKDeW;TDn3n$2g6iF1`kP2z^`@%$DzknNGooHGmN#!W zk_-*t6AJhvBJ?&Meg2ugo`nzVf2NY1HBsDOEFCJYoiag{;^25D zyC2k^!dA`9=VKSlnwlY?b&I14!7!N1XHijiAwQbi#x{6UhsUv;|oOm^l5 zTx;>g_*ld{UV;`tlbQ8+tEIdi$KT2>-p=gH=JG@I@oMjQrchrkfl#eO0~!-7)nauB zU^#-iTnQW;$&Zfb>&g}f^OMzbX4AgnAnDWEighMNelTAqZG(mAu6tr=6Nm@6eA~&42G*YpUby4XZK}U1`jR%&f0VpBUkWzcAuRd&W_pX(vX60@jGQHt;-^9mqpqx zi?l9_Phi?*MOu}mv@T0&U6#^RmIgq57Xv~6)PNjVF3-wY*{^c8%|(!GVSFTCRwT_2 zVvy+X$XKRUxJ<=D4=RO&HN>w&%8q34zuz}r8a>?7>T7=^-0EnhHoH_D+Jrfzi7M~I zMCI6Mp_uowU{{OHEpE!NeG`Szs<%{>PvfJRDvZT3`Gi;U`%wZ* zTRs;{Rd42CrZAe>H=1{mA~&MQFrF!A#%eoc=OHnL>vDx*_+hHB`vJZ03%9YcTpRA~ zxVPgAh5_*|c?+fd{x*8AoNn}lubR^nZg^_#6nS*RQ+tb_^5`a?niV!6B8mE&k<&tr zGy@ZV2qGCE2+LJ6y9?D3N-9u`3)aH&Szt6D0*b5v-}h=(y`^$^j1-0aS|}A6Wr}8~ ziQ{HF<2pWyJ=o)-I21T8ibIyED2}+n_%`9H;V=c8I+-Ac<^v~LQ&bR4uNWfUbd}io zZ=9LS!(k_x>-09CRb|O-AFP%JvlC^3qRbF4?7MQNe3(8pL3}+Z1amPn$}~d0T!v@| z+F5HR*0ORwQz;ciQe?nz?ws7Zrh>n6URxe85{Z;W|HHzr%wqU(4=WU5eHU`NVeeVK zwXAZuQq7NP5Zi~C!o--jT$-q2omPlXoQH5>XsD2H?#+*mj%A7tTm~uVlL`*3M!`8? z={$G~IrudNR91Gf5|KXV0UYi;?AeGfUwO0811OS3Sj5SKD&N@Rg$-58L7q5pk~xLp ziE^e2ZubgpX^#mKXAD5lRl0LdDGUtiw2<|RsdC_$9p{0Rqg@yMQIXBHkDbmVeW=R2 ztJMLN;UJgBydd#D3?0s09zDby<3ro{E42Y%i$8ehdQ6okDphZaB2O-8x`K|wMgVu@T;Q?H=x8bH z9fCAQK#J*Byp@sC#Awb-qIx8AFz?-$M{QXk=W}d4Q>mbm49GD$3VQ>>I!~sFUI$*u z|0NgzL!+fb?xl5bd{h1)In0^SVQ7--$Qb;>sR+}oSy^&0TP3gb4N8v>PA?Epetb|^ z_^y?%fYUbz^qjxFy=6x3P~jMf1?UV+KuH6$~1v4n^!dUxO(COoEH(0wX@h*DK{}XQQ4}Zm66HuQW5KWE0gWiqxWfa z2N4ZWxU&W@mTy6gWjNOUtrRI0bpoW5fM!d1NTe(URJT&Nz&8tKqKF$*AOO+Bif?kw z=p?$hrm_ZMg|qte!;lCE^K0=M3LNiA0JjQlnsA2h8l-CgsDXw&p@vKy7USLOWr?j` zub1rmxYZJxF#Q1orT+QcZ)e#!@JOWI$j50Y$5#bux$o|~WCi{s6$CQ!nf%~*c|X}3_~OkVK;?XujaT*$7IK3kmRu+fm1Ig~(pPczWh(i> zVyT$LyFruVjJ})W>ZNpF9NvdO--HWI;@d(LhnXlU>A=9Jxk^E(kT6EzP39q13)RCL zyixePYX&IUy(Cv*Yx!XY`E8qPAk+ry7gr@yXUZtdsm8+_8bOI*1QwFN88H$z zzAsOu@faxP0B8;cLrfyH*CMpL5Fp@vELSMQWg~YEvhiRco3D7!B9#U0N(z95`pL+J z%ISxI!@GCc(nPUZJ}jPM3}O>Xxhfy=AwO&cRP*t2qFg#yz#IsyI728jQ!HE})R_dO zYhantbg@tsIT$igNYHn){FS>6MDWecv}=&h5zSRz9v;>xJViH5B4MDBX)>i{TvLN! zTUQOOEH?rn5g0D#^J7?@_ISs z+J2_=RHjp%7Y(^RI0bKYXGmX_a;O=?re;LP2_QO75SqL#EI$SX8_4C#`3k;RR77NQ zB1=0!IWhAvda58c#hMUcs8lk;d8zdo%_r=m6ojc{zkJ!=J!0_gppT2g`2-a5p;9?l zQ?qUj&Uzk8I~Q`yut2q1F6^7A<}0i}U#(;_Xjdn^A+Y>Jk<2x+Ht<*;-^hv;Dju0c zv{e=Gy6W>H1Cf97Pl^@dFEJ7uQ^*McvI(q62A{uKa}oXs3kd9FfWRQ1E}@A`C5Wu{ zl(;flMUL$q>A9Bf-ZZm4y?<7MuL~2x5me0tA&EjYHxpxZv}v(JAgngcorxe!G3-ey zCry+@UDUQHOf^YT)>4RQDFTkj4ML2k%cBmV3E(A2u`-Z92&qF8Q-k4v6<#RgfNC&9 z0k4x|SBiioz^9Ls27q~gn;apUua=`$5^m?2WVx*93Mybk#*yex`i`u@55a$P5y-Arz zHj~$t3+0)nHK)-iTLP4M1Aur=z*#KiG@7zEL~SD5tMXMB0;5u{lP+;J4sgDV{a;u! zk|KplWg=g$!;T7|cM39;d?6dc!bAiP_I5>g2229?$DNTakM;|9MWf)utzHGmIusRi zSb!u@-E=Q&J1;X)9U*i5Feu?7oGKE~x%Gq%c8eL>HzeiEMfaeEn&#^w&pe;Srl}mwb$ko4UzCik^*r({cIQ%ma04154Hf! zAw&z%wuQ`Sg@HWb0;ouG5bG&H;Z=tSAeB28oG!A-D(O$uMQ32Ml~JW4ZM9HEPz(A% zM0iOghVUm`+C~4enM$=?bWg&F91=zpQFtJO!UH8Fj7TG4LZfJlhYXq!RY@j~mN_+{ zrKv$F8i5c+BAlfoNL0F3=rQa)Mf$=m9iVezJU^DB6cwHZ?#zoEW;rVdIS^`BI=Wry zXyjukA|HdJd>R@()4EP%dXx`@i z<1{A_MZ}r(iGAgwp^-|hN`f#bA^M2+yvxrO+ykF z($a-1WM?@G{+oh}aihB~Tp1XMf$QzQk5!UA_~XrX(@IkJz?98-Lt@jMja4Guu<30a zr5S5r~3vqMB@(K3zq*{Ae`;DWqpGOwTw;5ECPYUPC|yPXi)erjaOHLc{=d zEDW*;W<{PwWoQhKUh$mVgD&8^r^#x$gt!uz1fd)3&j937;cc|RP^ZHI2^Om4s?;Dt z!YCI*>H0QbJz6VtQ5{k%`OYbi+!UU}jjDrJczU#KW+J&{u+yRuK2{DBYxMDN>oCJX8zWs4!24*-#mtdu~*^KEe+| z4WRHOG@VO-unOEr_p``{nSt&m{rE+ktA){Chc=LC@gAr)XU8i{*%mvo3S_)7lt`-V z2}GsftxZJ{F|K}@No4D2v(*BUq!yBW*sg941yEOV6Q#YO%y?#B0gfE$K%yf#ma?!W zqx3Barst95YCR4~V>gbN>#0+%*#WC+vO17I;9gkTiUz~O%BfUI_7Ms&rFm^<2wj#d z+SDP+z=+3hCdV>bA4d@;2xQ^c;!6%1hP6gJGs1}Us!WPnLcvIz0|CZ>S0^b)%Q+F- z)DO{QoE0i1+7CrUw3!aKF~Gci;@KNi&&}zi0H>2RIeWG=w{K>9wrmu?*uxV^Z>Z0E zj^Ipur3r2mHfv~#)J)OfDq|3y%?MjL57=|HGcp-hdUV)%$hrzt#t*nMss-l(^)_Qy ztrkGUvl}3cQo&Uj0mdrB%?Dd+k>DgX3vD6J`89WTzG3#3&C_SgHE`V0D%)K;TWv;6 zBadLXQzKx+5#)u{07dk_GC~Wq2A)c$h(~H+IM-1RQ(o&7cz9PRsTg=ln=-G0m|!Je zo0-Yzo@?f}sg5kjA`ya$W%lJqot`0QY!t!AOflCBwT4hmO`hsuFKo9OIA#odtXyn& zGw?ey<4V#A56zva$LqKi?p#Q*UE+w88;E6$_$Ykzs_3|jlhAWj-#{KG353H_Q&MdC zL98aq*w=UGRHO~!ma8?{v_zDOCY;(fZA(OK57g94EQ`7&Q$<}oj;>N3Y_hRJl{~j8 zlu<>oDH2oe>2x(Cn*tA0vP!VW%9xK@MzmX%p%Dy9p0st3mD+XD0hFvAE#*7z?zGui zkVwqi)RJY}***>eYH%>bnI-T?I*s znz^{OE;~RcUa_{1+kp`FeT6@uPat3*M`BL&8g}CF(@Alr0J3 zQ$?k0#cqujh%S*G8~6JV>Bo5|Y*CgAS)r_g`bpSA>_8SP7<=ht-Lgy;$}(4|M&Kb< z57T2cQy$J^Q+=3aGNc;HB}5M@`-aDx3*!`H4Z;A%UJU`DW=qA=SZSgHrwH)?38g*f zeAyK?slu#NR%&4!nk`byDJLqLz+Q_N&)TaJ`Kbw* zHj@CMpbSVz5={Uj$wF!cN5V+92vPwI1vCv5PB@ek!qmybV`BlyoT6Ufroot1c&^e? zAm{`zizM_^Q?C88cr>hALUhcIjkr`jb*&~x8VRbZ{j$emXO1jlIhI)lL!C6ux)N$ktS3c42%Bcaso*Z6K6)sYpoOK{(V*N2F-$Z0X!1~#LIr%hBnS>! z)r>`1ov7%+5Tu}tBpIxx+8k&VHVq`W27-$at;S}EkamPdE_)>dd0Q$s`KFy#K5F$tTqEZqi;>8CcN=3w-d|$f?8EY5runm(eC}1)fDvx5N3IK($kj}_?!kI^13U0X# z^VZZ?VZ~BtBoD=+s`SbyWi*DMXoiMlo)Q>d1*5o)cXwTY_8`u)?*;$q8w%D7U z6BQMPKRHF);Vc{vvmD&|Xn>BpWr`W6Bn#_pdNwvZR>f-|MTlk6)^yAPp?6Bc4vV-S z)W(fI_(HKP;Xg9ySDC03$HouhFlT>X0=GUyY#Hjwmr=3;tr&5ob6I)%jped&vAM*; zA@mke-Xg-U@_dVWW?=zFd!vX3=fU8%B~umJHmNea_8zR*_rrd~XdXvdXcZpVw8B&%C#g2L2vis2QHu==m0GSav7pAqwjPvX{dSV{ z0uga_a-<#Ps#!;9aab*7+epO{9IgNz?$z1-CHI!2$P(v%A>#|p2n2Qb8UAd1)Qb=h zk{~}KJUC#8ol+7EPy?9a3N&eR^-xJ=U@ZBpRHLNxM46T?eux4)scIr~)St%1!Wa9NPW&4Xxp5ajWS0)A(>6}VbvRwaDO#xE6nxZh+VjwG+V{|K z+8fbu+7uIT98S0ER|nWN+^!#RyMCnY`jNKlN7}BR@KybEfL+&5Y1)XQ`YEmJr?jr0 z(z-q)0>c7B8{UfkgqUx*zc$fAvSTA5OyTNZb00E#3>epdHf=+`epmmrboPdzA z%4upwo(g2vcV!??ufk0&qTpnb;Jg)1YGm;@d}+0WO>l6?!)fbvFS`1oMrY9mp@teJ(zr&!o@>87mKE(M^)P`%078 z*MTE3lsQ-;@thBXO8X(BN@HqUb$kRKpQuxkmENbpyN;v^%J%rB1wp5iZBR;X$0~B| zqT@3lqb8q>irbGuKT`e(+{F|mHCip^RS%#-a14*meT#sV?l&g6+J{5TXf-FC2sa=I z4-$b0I+|0!6O{4=5!ioBu07WwP z86#~2%JGktu*ETDMB_xf`eD|wgQ(tph%Ga!tcEwyzM7^2O(;bwWh7HNFXEjLGH*p4 zxnw}>R>1D705+PB<#Bw?22Je43#a)$Y|oEPjMYOklWwRUnqze2qN#zrJk5vAk6fW- z&!|um6~q^5Z_0N={)t?vcvu+u6&&sq%PsGXkkx>V zOC04$IZhD54SATiWI*5$n23jZr8Plt1he7q=yPLUVcQXt%Ti>2h~iS!%bMUcP?0R| z`e1%tF}&b_EooFw#x(vEC<#RSNqW2XW4t(uITfgI^Ie!xU8ELDC}}8vI?kvtdgI|} zaeShx9%)&^M#fg-FnQpzZV5aHPwP1FI(%&GiH_pLklha){y@DoeQZtzlRCdPPd0eK z$yeQ)4zS17NztlI}*s@<@j1mH@v1xGzU@1B@Pw(@__?Wp#%BhZW!5^2?uj(pA@7XrKV8~Bw9RB zL%#^ULF5!lM8k-olE8zK2}U%(M)fjsU^dfgB%5ic0yKRIMKP^LayWDvh+VFRY3utS zCsr4Cv*@(2pc<6sTa9Et>sAE-G_OIZZA_pjP)#x7Ay-Mwq;^#{z%C^qQ_9pe=VIDO zZOPgO-E4s7AFvO5b8-lt0Dvsd%&(8HAJ98bw#+7dLOa@iJskiv+lDc z8dIz^mknaW#dvG_A{Qm8eT^i29q_kvW(8T~mxzr}!V?dwb;NHDlbhhh+cP-Nd)Qmw zBY|AgjDVmSw1ER2bTV~HAwgz1-l-9sFQq1N=p-j226hKToz0QHU3HM4FF_u@4V5i5 zhj#VVgHmGdUEOJh{IijI6c-L7n6E6Xd>tpsvH9VAAhM%Ey$?A$%7PL=qsAiZRibL87U2bBYzJ6U|k2ZXDkQX~yB6W(j>0orP`2 z;U8=#Q9hpJfo58o&2C?z!lLdxuiJryVO>d%f#6wmGghLlTqne0XN-!Bu}V78@5+W9 z4+&6#AOJHJu?c{ba57wxlood=rNxe=AO@mxWDrE=sOW{vQQ-?!2Jsz~>2%lD>8?%X z$l7F%s!iso+BzlWsdai+1mPFFAWkO(scr?4IQl&Zi73B{ps{tHETZ!|@$M0vCkP{P z(@yrda0o@z1wPC8I6@f|IV6oiQ9Q&(@l^8~hda0@i!^77@a&7j6J&=&ID1F+gUT-y z;anA}fl=&F$|Sn8`As2p_*pI^w}Xu zTU^bDVElt7(?mXL8=}HWMcRC*uA~&OgFB`NZ=N39 zIX!sG^xziXap1=p5Wdm@!KF+RC3{GEDTuTd`|!~^5#dn?GSh2=A=(OfPa5TFD}tOO zxYt!-JhOi^e;9#ue}8i;6K6A8nH$(9fo(Wj+ZTz&q5-jSKmqnFL?XUkkP!fivO5?Q zvai7)CF8~b$JSyHpaw&4Pt>#`UpCSGK&A3M6x|O1YA~qM8Vmx|U{EWxxlq#z?J(4i zr3Qn>;>HkTabt+FxG_{K5EC^dBi&fvjvGfd0Y9(IlFQ+@tQ%%&0q>+2^+0EvMD?i>02Z zceQJItnN{7Yq}L%J)_QgL4aYsAV3ghN0Vp<0R{vZ5Fo&S0RaLG2oPXEECvJ!Fd#sH z0Rv{U-*@V(d+XM#_nwk0zaLOiy}I{1r%s(Z_4n4TdoQj4&_=>bL3W4W(eDXA*|hoFt>&GmS|0b_+gCn|+N)MhLy<@Q7o$auxTZ zOK(#tvDq%Bxj9am#;;)U_$rqFF%NsswkF%dm-!ily6x=Tx}fKsbo+!e09;gEzxv*L z~GDycWrhK z@9M;3e7G_GAttsuLPlw(*D?3K^!b4oUp)QtfP1x)NBU1=N8pQ<*DsEZXP2_i54>PJ z8B@ywP;4zky*zLNL16mE^yRNZqk4Ag%8Kc=qrO&Coi1Lz3S-B5OT~J@{S-oY@MWjo zOM@>CeCagK9C-RFrrA8igKBtEl9uosR^8{Wy?dJEYcgP69&4AZF1`*P8rdm=Ey8v7 z%iO-}Sp6lfS&&eK?Dd=HV4i98t9?C340;WL0)EEMlee|Y-NGahKGR>|hlG<2T*A?g0 zxTK`|X=f?Euq#8K6=a#?kPXBY?t_>`$ICvgSd=r=p0>UY{9PI`d_iKd{~MdtunS_^b7E}|4-aU!_p~;I=lklt)^EOp7c5|t z2rLL=8MhaZzjF#toZu#h(Xh0}g=#&0S;4!JF}>!FzKd6{euSstcwge3GqZR;le=*I z6xVH^DQ4f5t7n3_c=6aMcJS#jE9$2>*!)Q9s-R4+p$335`*jyTvDCTGO zyhgadIL%#sSXq3JcWJD=@YWe@&u~wWVhavb4~nHQgWq_H-KBhhJkn|U8%`MNANRD^ ze*Mz<({G%6qjHwD`zj|qq_|o1>u2B0*LC?u*Mf33pj<6cIJd^;4|_gNv+rCCX5xVu zoaJJ09Ej13JrKiLyBEXbLJZHm7#(faVF<+9uwyqLGmj;z88eo6Q_CA=Oy6+(s9@oAPUZ}w*=2N zT@pd67lv&6_OD;yc$bUcsB|r)TEuWqu#%9W5`vFz^y*!nir~ z-Uqz2so{+qSjQ`!&zH_$=9*|gfBB^n9ami?I?l`VFMP2~|H2nb^v}OkP9NuGx~-BH z>Ek-CM8}0(Nj}a&uZ`8tojw2BdAz=UZY;k5ot_y(UodNLvclse)59ZnfsQxjoxXl` z2D`msuM`LJ)S3tDx~=3u_m(`+zY)*X4>4-s8o!0wWws`|M~sa#P-bkBi!x)J6`K4s zG6ySTEyCr+&L`}>l$CSCE`o_7p-T7Ouj-Eejr?uh`8)QqIc7Em(7J>0ehq21Jvt{Z?Rx60b zyBhKSozKDJMZ@p%?eu|$HuVZsu8d!LYYg9pC}Fw!vEs3Mkv``x*k@kQRNus9-`UY~ zXD->%#S5cvS6)3ce0u!t+Bx1wyn33uDqhJ3`tW|vx=%3-pL^ppM}E9=voClfrOy>! z_=8OG@eS+<|KRIbdb9l{e=8o~IP`Yy$hBG`k@OH_7xxyv1uBd{di*g(r z#96MWDJ9!Csx3kJ+90o`-8N)FX4s;i%lFFGaWmX);k{~vAFiNuzg_0WUUU;;R`Z9XRpab zGR~|?>g5GAH9E>`6nOVGyc76H$h1V{IrYm^8pbGaPU{4a>SMtusm~UEG zxl$~$m(@T@U$~6d34QaWk`m}C^~!M`>Gk$_ZU)avplALVFIl>XyW@P59yayAk5|%S z=P(``2voC2wD7KSyz}{UbKm%y9WXy{zG@qBu44{{ZPWIsRQA;uvk`2K8gEJ+Yf8l% zR+ExnYAV@L8%cK5vkfv8WDxnX=g=%?U+s5qx@L|VMExd~hxx+YB2xC%i&(-e*+iOu zXisXKjCBlGo%l3SQNpZT__~yP&1$KDMd3D}6mHwu*g|4i{!%AF;)jN?@d=dqD_{R| z<;>XG^XDu4UQA^Kdl2y!g8S|h_VQHV&%J&Q9~Qy~fWq$yVf%JP zUvBZ=h(TEYb)Rz=>?=R`xDB2!96yH_#^BRIuQO2`DIoAx^vxKa;}O3v&?}C8;l`eP zsl57Tjb4QECunq5LDMXKqbNV;*NTEK7LA`9#R%&^ScJ`D?_A@93w-v5*`b>H_>m8l ztp9=xZYlj5{5U?oRHMh(ejbK{itz3PS^sr>=ZKsN-8sx)=dWG7^k#)WXT~d-I9>a4 zg&TCB!I!bXf~QNl8S#4d?lml4@r?@Cu}u>1RCkXtaMdHK3}5>gHH)8O!G~Y)R_v?z ziooo`3pfhjpKcWmoD>MwYc3_8LHhiM*;UNe!hXZ}`QfoSN`4L>E9Mye%ay*Y@+(;- z`*K!+)){;5%eX?jY_pTGSTlB7cv=bqvR-{vECY8im%)p?pR2Hm;)RxaY!t&hw)DK1 z_2RA5SMbopXYdT>_4iA3cT)zn^{Zz_Q8RhD=%6U#*cE(wWE3yLou7Fn>tCq6I1ot1 za}>z^HN2}1j}#jD)w2Pan?!S+@IcY^_fc620DH{lon$-(Yl2KpY=Qa9c%3BjA1tS2 z#kxdhuiWd!s@P{4I!vZz|?^ zE;+skJ4`gHtn-(zz4IG&2CZijznAP$Z;%7F) zgxOwv>3V?XMG3`8dg}u|e2NX67)sFw3r;h5ad(`mf&EJVEB$ymJr66rMO-{)icPio zFpsCZUqBVl@J{-Va`_RD$>+XetOufSY)!--(?LqE!12ORzA$1IseLhgk-xRkc|YR_ zO7-_`$x<0tU~jx?-&eoVJNB91Pvc`GeA7N!wVY~asUYxbr1!8b`(szAo)i1cvsd52 zGsvtjc~v5nlr!&g@fj4)9u#o|1qJk%rGQ-)GWQ@DijB2m@Vegu5yBI0$0FLBd-Wc^ zLLle4?P+=T9~8oG7UmgMt-_ShJyI_w#>d`Zw`aK2)1kZl^k=Wz1O;^i?{Yzd1yEr> zjEeKw>u9_o6^$04ds?*=!LgPIj`s|<7~w+*{8XdG#R46c->La^)BP2u<36l_S{$`z z*1*fC?P$>4*!kro9q-x!{d0J7>2vr7C_gV|AHwxOL9ubKeEI^e1uOiN4(I%r@u8^V zgdaakrZ@W$lB>Jcyl^pN$zA5dlgVfw+BXkU8FW2Xih}zcNGnCblk}kAt`c69@E*Tr z#Ywt*f2$aHKUpnoZ`;aySLhwo;1ttO{{c#Xun zW+ycAK;=ewl(P&gbJ$j26ep_%t{^eaH?2MHawNkWjG+59OhLk=gJUNjV<`tyOsqrF zH8%;V_)k}1?^8g|;SX?+uuRH&S#H4aY{2`NEMNbOy@Vv=hYqks2hYE1Q#s1|D)xw> zuyJ<@8`=4)lGa>-60U+_xB7?QdS|*X!$a>^@S=URb<4SZ(HNZ=<~-TEvv}!k@HVS3 zE7{yf*KmIlPv!>g4HXIxk>IT<&@RNU*?R{7Lb|_~S9+K!ZwlA-CJz{c&UA8;_m^Nqq1jPTb4)@YPNdZOb4ZjmPbF=IkoI z+ET%@oBnG;Mda*VyfhFG4plC_b~gL`m%j9JhM@tkM8L~?Sf^0lte@y0=B`j2`Yun$ znh&MfOc?xZXC7B{|L=T$Pb<_xZ2;V9gz9!8_@0GYdepG4- zQFMDSy~JRawk|x2d9S)b zl@F{`(WJ84Y23YWm$x;$RWX8X4rZ{tHJ{^K7P2euD>6mHJzq;;`eI;Mt*u+v1_Bni z?I1W`H;q7F{^9!{&B?r?vrmpn?>at$i{a#*EAQG!i&{T+<^n%%W8Z3yi^I)CSSIe{ zaH+}EH$UHCmi5hdxj3eUf;_bK-iqy^z0BgMVA^@vz0ThbHFHX&bhY7xj(J2<43e|l zYYk&w$GiIw(RaRIDww+R ztu;`=$-Z>%s~6wE%^6DwEyS%?`?I?Fs@5o6_n+@q@moE3agS~yzuHj~s=%_)2AeP4 z9`0gZQz_;y6+hZz6@(G=RHSLbkC)^1P8TmYHS^OkpB+CkRM1rMh52({g?jyU`^&^~ zet#M3keA+ea`W@^co%=c!Ie(?bb1c?WL;{PhA)g&E}%f_Q&UxltIuVw^!u{Goj%_G ztLORXYmUpxU7y#x49Ka5+l@h4;Vi$6paGpR$eph+B&vwJT*0s17R<{jGC%Grxr&At zs_`SaxWzd>hWFo}yF6BV13O~E)AK%A%p2W@r7Eb^*fFCzfY-@I(y=gC$tTY|vWctPEZ_%672|V3(I? z-kQK-9wuj~w$`AqgmL9Mrz3dbUAZW~`T5VyUB$X9)~cYd<8bWB$o_@jqS3W&~OL>eAeka+G2CuJF@M-~VQ{#&X^K@THryIec z77@vG!iO0zjJ-mwaOBj&IzyoczHD3Q_zIMKE+iI8CT%*)D{*VPU#?t&?&oWKQ=nPL zvSCNG;g@}ng~`^(_|hc?aXd80$w4_`*~@1y@;<;BbP;2CPQ$J;aFKzhZjz<> zHBJ_hwuHP=>0>GgOqqDe1QiE008fcsr@oEi1d9b4w}_0nD}Gc8G!XysgSw>y&cQJt zu(@C=iM?{usLmE=+ATuh!Sd^~$c+Ea#ToYzIv~LU1f<|vi-Pbwtm*Vv-h*p`T>#i} zj}_rLykp7DD{=i6p1y%=2s}t`AE>q0lcAcI&bjJa=3v_@u~0_w{XqyQPRa(ciA2O+FNHv?ewiN3|AM&&!0V4 zals{gnG=h8*l&aD2s9(N9LW0vXZ><9%OpQ>3xN5XroiVeLD04RhF-&sHw?_#F}`#6 z0zS2Z7p~!e8%5E9V^=LstSPZS$0^?Gg`O4f&c%My@Zo-uKlm^nn_S($igcT`m-nuG z0n(&hu+Nj9d7&;BoG$)KYMjYCh1@`a)#=Y(2XnBdiFMO!TwsRMT)zJ-7W>^?G&cv= zJ3o6pd<{Vm-O1(WVk_6V@Y>7I8-Ioo&iTtZYT;uHI-^d=Edl!nZ@`1$bIegZPCu;Q{xyH|CbC!>h zeTeIYcdTU;XIM@NXlKs^Cugve8sndP7bC9Lzs}W(0>h0GJ`%RLI$T(7_{&e##&(w~E2vSH6X96&@>~ zGo`$o3G+g;ypS8q&Po>Jmg70Ty@IwK#!2+`w-50qGuAykWl?&yQU6-$mK;9q?rAKZ!WeFWo*w~YS{V|1u3{p_ zpbC0lS37*%Gk&j0y@;W6Z`Q`&{)#n)*Z8UK3mmcR)LsFJiX;faT*pF{&;sn{1DZfC zAxIVa=&hO%g++{f4=3g<`SJhvYvU!Xz`{PS@%B8+`%=qtRPq zXI_tQSGaBz9nSl_(b1@ST^t|b1rBa@oEtum+wp)b&i^$ykMN4#bC~ zb-Bexat0sT!<)sfVG86Yml^_CVK5xHH+AY{`ofrw7BDaMbIa)$Ty@2&wWxR@V=-C9 z`0~MfTvorN<*cB`pMK%JS|O%*f&#NUZQP*5^eBT-1jadY_Ut+APQY%tv-mvWI4?Gf z`8LPZ%Z>xjOW0!;Tm!ddv6B4kbe8Ovb=j%$JT*UXI~cv0$KHB%{L(oL;Jic)Cz)Tv z`f^39YuIXFD{IB7-I!anyPmJr9XOKVn)txg0gB{YIoZrFs}FodCpE?E57XO9oL(VIo!I4{)rWi;LJ_@+ zUe4TA=Fw%b$f3K_;4+{|T&aL@G0xY9`RRff^&Sa#rngJr3d~r!2MsejyiG#P{^b(x z)W3`(S>AIku1H+gFTZ)FR^w)@^68i^kKFrYmAI~@OIWgOzHw!)+1$?RNj`S)=Jxeh zKCKZ3p~jfHZ4aNlK7<|v_h9VphhHJz5T}#sUrE~mH(*dzcrG#FU(EKDu(O0{6WUCHj9s(UV7_X<+U@TW9eb! zqj|0;V%6iF%G;HXD{tc>98lM zvVANchD0u}qcAFljGg}>kP%Bdgu(I4yl@t^p~ zuAlnppXvV8&r&{RGhL=heW(ldq>j{|x-(zQ6Z6Zw(hju2Dfl0O|55lKgYSg@armEr z|4H~R_@9FRY51Rk?}q;rJQMyo_zeD!!2dk_FTnS}e;WQ5;eQFf7ydKwpN0Qr_&)g4 z@GroB4!$4$MfjKCKMy|u{{{Fj!hZ>V5dLNOSKxmIeh41h3M(vgmUk8Y4E(F`Ebn3X zbMUXhzYaeFe;)o<;opECg?|(N0{lhz8vL)pUxFWlABTSn{;Tl64nG0^HvAuh|KsqJ z@P7jSPr_e@pMt*v|26ol@YC?`z`qOsb@&!vA&fe-{20 z{GWsW>*4+e;@u|h5y&!|8@9X_GFZTNo&{@;av0RQj7|NHR&0sKDve+d5< z;Qu4|hw%R~{C@)fpTZx&|7Y<3IsAVCe+d6y!v9zB|26z0`2Pm}zlHzr;E&+{d-(qW z{(po&hX0@7|7ZCB1^zMo{|f)V!T;~@PvHL#`2Q3B|AK!C|9`{(Mfl%?e+HiJ`&^L! zej-0A4v3x7=_h{kQsomje)bbT)A4iGrn`hsGOTrcs{gm1S!w(2_U}FS-Hu8IXplJE z9Dl|={gZ2s!}SXm7vx4VZZIxfGa2i~;p%OyM;~b0qVKiiV5;L&Q>N!9|9tzmpIhzt z&hx)>>UV#1t@C?7@m=Pp8=m&1yTzXH9?kSTsC!Se`&sQsqcT?Cg3oX|Pc`$3cK667n#*2K`a@m&8wNu~w(eHL5 zI&Jbmyo1zjrnyaez|y8X95DT7st(>o~q;@r^SNlSx%<47w}6drU9Tg?c^^?QTS4UXMi^U^tQ1 zgEs6^1DgFLPFmC}@{fpro?#3A3@i)c-@QiB}UXXUgXZcR1?OFhN zt&SnwVjS>B_2_qeJ!1OZEGxJ**{aOzI4N^jd_ze-v_aKPmd%`a2PrrxH_BNO?G8hf zO*y?n4%_ivFNgIcZ!@mNu+8p^PF^~ueI)D#fgo+t+Mgxp#?z421FT21b*9yz9GK3i z__`YCG%NZe@X}GwMPZ|cxISt{STF6F$lI3a%R!v`!rBsPGk=dnw{{xjoqD&ij>B2s z5~Y^`?-6~aq)*X5F&`u1S;a9Ou}NV^hB$04!FN;Gp!lfosxY(5NXMs6eeap?viK-> zOSF!F|9;3Hn#9{Y@JqWNpVcs^3dnl|u;CmuWO~U%{4lzuSFRBO3L!aoi z2J}(UhZA*>dd!N>V>;SlQCO7#()8ub^wvB-Jc_g0J3};G3}~o zcS(aIHZE+N035LyVV0(_8^V^z1V_GQVMjq;ZVMYFQ(z(^7!Z!@h#{p$WfMs)KMhJEn;!X_CvIo1~Q&5SJKpW=9%mw&nMyeXb-u+Y&) ztHS!(=QgO1%)_?$Y~Gc~!-42`Wl!4paRO`a00GX%dW7Wb7S^V?mVaS3k86>C>Nh3+ zB^(#|cV&Yc^in>Hwt3sjpdNMe0yn#0TD#)2c9`3`DDNXLhiOH0+Pve3NWeU# zNje$m1LA9@^MrW1lXD`cGwbi7_-^1hZl`MvXw2(f(QY$dA}{-*Te+9)TJ&cb<37(H zlsEHS;w!FMdOVMDx;}MK*i?gf8F(kfQ||kUy3c$pif5OyqxzcxS{HpA$3;F18NGma z#AD@NS3k=0#$)lWmgE)n@zf8Kfa}91`5F+9U2NyJFLYwtnGlbSCpc&QniZC{ks+Sn zx;nwQE8^?NFsV&%DuP@FT)@2%sIgv8JdKOlMX+wG)=fn)rK}hp26^%h@6d8OCo= z-^kbYqxgZdd0U;WT)m`C`@}awc}Y9D>rCo4AzquCM!Hefg6LD6ha%1Tb(=!gZShVd z>_Gi@ME8AdvF=jTFWUb|d{#kTY1fh#$@Se_Z!064RP4AupVL5HA6ZG3;eIWiSWx!tkdX+MdMVq88 z8?>7Yq^_UB58M%LTH-6_#Y5t$sr^%a&11aAZZPIDPYdGPV1Lr0zL0-I{0+-ExX-~X z?u);Qmbjx{jT_jd94jSgYkOJm6}^$eJs8Su*L0(dUyT|2@t`bsJ&%?21K`h zKkrkEK9hN!5YK%a(^>w7tvJZAMPaMLSUxMl_BwEKg7VoB{|4vA$#z=wrN`n8+gzI! zmfIUZHK=P>0_#g)Rbf<>E`uKz_K-lL?XcVz#B-ZG!5oIP7164s!M^@FfV54~`bmr8 z?TWS*(K4Jr^6^;Dpi?|QCr`(x@B?S_+fw~;wI>6uUp)64$YC<$o(IQH|6)yYr>WZ1bL;5yP_#uZu}EAK>lFvMOlwTn;5=2$wPhfA#&O9w| zpG966w<>xpm+f&G zzP6vk4;}Sv(ta|K`^9U0exhzO-Er{@;h2uLm=U%|JJ$7~#TwSK_=@{9WqWUmK2O0x zIWpZ{(RfV9@F0Ob78cs2J!1^FABZ92c4s^)_Y3`*L6y+X!@@#&6A5fKfh`JCVD)%K zCvz3JpdM4FP0_-%b`scr0y|1zwppoC&Ufb@0T5xm!mMq9MqP%44U!p-SS^7~3nQJ5 z;exO>Lmal0z}AI@`Q3{6GRU|uto|C<^<8YsN8)+FG_9SN>sH6llixm*CgIjlXx4VSyrNQ*l8m3K(tY2C5rd7NxZIKba{{CG5rD2W5pQCW zYCoKB7X2d2w@37D<~L8)|0Ruu>9ISLl7dGlpoXW6W_jZ zI~}UR<`}n0nbJ;p0My(tf1`So0a_Bher>|pfmzrT&qLa(NqW@xp?KSIOvk()3$yF( zQkyL5D&uy2mNDFZScbG)pD-))pfAZl8xidm?U3iKT=ui#@%k{G#RRsJz%~-tJz;(> zN*(uvF|T1clXldE*8at=rI@o%iig>tqx?BxVL99kv0&WHz`rh9wLv5y@yMg z@fug!L1M#*O&~G}>@kv_r;Aq_rvfEa`9={En~{ z*8fDmM13BKXBo#~{-}T3AVGIM%aD3>2{U^q^cWOox{6U z%&|Y9%itG;*F2{q?-#vBro60+_Ei(z+mQC3PGAed+9(H(d`rTttc9%$v$h0`;g&EP->g0s z>ydk+jeyV9RY%KkdL-H|X(bytJF$FDRY^ouYcW@*zC%@Vx_*Ztv09Z!?!6%lnV0D* zkF>ueuR}%qx>+@HWs~I`wJ*lME&4Fo67(I>Q`b{{h;k^pJ*$=)gM#@p>s{v={J`CO z7C+^BSGtBB65pzEyRxYX8zcr@ec#7&n+^GcF@tuyC0f`ouL(Q;1ckZv`%Ph8?EmAr z$9LQvqzt5e@!ezG+~!4pL%Tc`&t2xTgT{4^(iTKppumW> z(j?wylX$yL;yr2-uk9?Az*-i60$o@xnP|(T!7(ob!Wz|AeCE(xs=iX@yy#{ZoYNk+ zqBvo_x!r`eEn1B!2K9~UJQVGiG&o|%!a5CceQ}#9>fVi#sw>p9S3C!d7qvmk9TDBv z-yUF-!q%SQN%}r9W#1HEH|wfhD-~;2tarCXAN?dwrc=*~6#I~=%LDQAn2s_Y3EO1d zZ6TuvEM4dD1846Ah;>&xqui?a?tec{TF52;ocJHpCN0_=>&3eG?R^I$&)co(-^Sp= zyxkLR5XW@H_Jr*k;_`kdZ0QF9w$PDz?|e;>Q{|?-Gp!-5; z#GuXbd_}ZQ)`wF6>&7Y8nY-e-jpNifye~S(G&<^dB&?r6kS67|zfMqXAR5=L{)@gv zro2Bb#{Ch|J4lCPoJnDm1fn)W`VGu&jyV5bvrm#5z37LDMKP4S{=6e~Q z9qFLVW6`}`GGJ{Z_<VdrH{S zvp5-lzUHEpU(dsQ-4b6Ty*EVf1utC&e@|F5y${6GOz*bylvvDrnMRkew&!p%@%&Uu zZ@yNDZF<=A(ta)4G-c0={|=7p`o&-$2zl4VJNmuzjvk3lxpWzS zew9C%Bk?DXQ_K@shCSl3{<+j1i@7uTMm-;O1z)+ai@C|X_>LOXH`;VnJT?z)VN>$o z7k`y$pMd{~_z%=i)!VfgQz*ap4gA2Jgg*n{g!u0=Qr@-;yOQTd3m&$Mb@8m>I362W zj@zQ!wQJotRbI0_5^p&6yG>8=nopr8b?6yo;#h-K{mz2@QS4KOMQ<}M*Vj%6t1^y_ z>BV)(yl6JBoe7`QD6T_R#j~q4>&vHjreR0C?MgpGxG(GhG1Tj7-hhiSktga) zIbL+XNrLNl!|{T&LD5FYU~!9UuyN7)Nejjq#+wtZFQR2QUlMJdw1m!#zu6!@%V}4% zdB%_OL;8{EH%ZUix*NmTemgFZfH?yTvfR$|>mKSbAU?{B^H&p%d?Agzv!eB@PPoM@ zmwpENlIS+>C-P4jo8ozl<5V8^MBgCY>RmCHWL-TLy@PZ(=DY2p9ah$;S2^GLIs@bO ziO=$e^9;T!>=BMr?VLJKi^tkeR4%=s-xS@(F|^@Eb=~qW-YM!D$)a9+qA%b$v_I?H zk!X)j&_`0Q?iz)_=1i-;Z^`#7Quc^=GuE9G^uG(@f69453x4KnL;Mx$60|9%y(5}k zAGDBl3jB}7-;QHC+O_@H?9k1D^8VV@O{U)~I(ftNc|I(f?H^2($#jFb)MZh$J<5e6 zwj#{yM{Fa3-AiD53G6U|JxO34m#9H84`RAm0viyMk74m|F;ath59`pZ z_;?)FA#kWsBIAROJe0^cKB&G9O?>uFlqPAD_l9_HB-1YTFSAZ=h}XvEq}*b@N`3cF zsIR@)82mQRPRe!jEXwTrDt_P=*e)8>3)by%@!7NUL0`>0&xtn2JlEBkBF`DfYvR3C zm!6x$F|BR!SUn2TVjX)ZS|^U_nEtV_r)@ZCl3&K}{&oDowY$LTZNIRN02_|@n9hW- zCoS?xyWSM9J=@TrZjtYf`0UxhI@`Ir%DVDEd^P6r1mj`b1o+^5J}IM1*bEKPLPiFb z5%CYPU&-5U(Lb}SX2nDKVgJV@Zi(h~AhsqfwDo3!ZztmGLfm~}H>i(|$!>m5xsM|m zjeodEUxggqO(i)UG(_R7j1yFAU_#SAB#3fV~6cH*oV>e$3TO7%yglj&DFJgk@b5}^c$3cc2vIBFRnY8 z*J<(Ysx1`PV$bE*6)cw}@v+*{S^kCHB@mP&Y4;k?C~IFdKfVw<5=NcqGXDH={-7^r zK0{jsdn|gy({G$^{2CNSThLMdsIWmp95y9vNEr2=7q&V@m` z$g?G$E|pDTPsd~V7Y~bv&hjrT)X%+~8|CTP%;uew?u5FAb%!$gMe}8p0UH+9NN2{I ziQ*BvAi0Xr5}X(GS#Pk<3F%ww;xha~v+@Y}_G z@C@*%c$&$ci)42r-c4ci)G6;fi+Rs&(Y>A6f8G^lc52Z-lmC(U7f&#!Wx03#N&LWB z{f_#N0nr}NK#4ZP_!Hu>zB`ED1KPZ&u|H_ACd~3%6Q9lbaZYSg*dA>KM{Fm-x9`(1 zE_aQ0B&^1`)|V7(1GG`cWyd`K0|;B#l<5wM-^u{zlu;A5Z~__RUlf1G3HWK(P4SQ7 zIBc64PIpC{YEZXn`(yD`xCT(_Uy6CGmH!mzaB(`M4NQ@OGUiWEwxrdj2-e4AJ(`^& z1;a&)IT7WoPLUJh?WY(!*`4KO}ztF8%s-yW*ORd6^Y|_a|@?<%RN=L?0!+Mf%LkJ@N10ILr&v+81q? zv?wjceIoh+>46;>w{w~x?8u))+yT)$sAmwD8c6cH>(mUq55(JOeneY85zk59W6V7CzJnjQFkeH$dK}5}T8sEH(58hQkq>Po zb?@|6Le^SB*5(OhJrIx8eRXC=?sh`fgM_R{Cy>?gbtdHO;KNKl4@KOn4`UK0sf zvym*ewZ#yN=6+0TU37n)7}p)Pi;5hD|4@7&!wpw?cR;(Gc&oDCD&NKK)wy$zu zHYol{MvD3f)`4Xt0kTMaaCaif((hPN4gJ@tq~ja-fiwN0K8^G~(O20Pqw=OsqoUjQnwscD zJ1vNJhdTMXf#p(`!-{BDHl=Z|xJJvscTap%IA%Gx`d40aJrIwr%~+m_^~0y4QTK4% z$Z*>A0YUWv3E3>OA@NjC&|X;QX2s7cPe*JqfvqI4jRbZtf$b%*!vyvufpvUnYE?r0 zvII7ez(x|-WCEK@U^f%kY682Hz_t_Eg9P>{fjv!Nr{?Ny(38Lh6WC}1n@V8w3G7w^ zTT5V@32Y~U?I*CK1ZE%GM3%!c@BEE=8}ufyp#)Y-VABa~A%QI=u=NDCmB8*Nu!jlk zIDxfYtIuy&0_#g))dV)4z-AKIjRdxwz-}k7y9sPJfgL2U#|fEZZ6~k? z!a7`b-1Tn)dz!#bedHpAaeETjU;-OWU{eWfK7rjzU~36%GlA_Su>Ayfl)&u6!pL%% z-_CE=+n_gr4JEKz0-H`?3khr~fvqR7tps*IfjvxM#|fNo3c(38Lh z6WC}1n@V8w3G7w^TT5V@32Y~U?I*CK1ZE#mN0!6--1(>LZP1&*h7wpUflVi{g#@;g zz}6GkRsy@9z#b;B;{?`rqdvb~39K)HRTJ2F0-H%-Hxk%#0=u2S?k2F^1a^?X9w)H& zKT~gm?gZAKz=jjpL;{;lV2cTCC4p^3SSQrI7h%l7DVL2(_&s-GUBbiboIYXO3dvX1 z@sz?IgyT9M=UPRB^$4yZ$gCAxXTkbWv?i197pKe($+Ua%4P;WEJ@JhwWWEn|tS;Qn z$V(UIJHxrpx5dfVY>G9KZtx7j)7gDDTeB+m1*GIMj+c9j5u-R6ph4nryZp)1b$dDp zrQ}kkmwS&)Cb!tPMkvf*$ZyZ82kSeOKfnlZzHg)6-j1szM0zpK3~@Lghh=rc5Ugji z{7dVC?mi63sr-a?+9OlGj#TWcA0!TUlRuIEgu?tX4R4<|65)96>+vjsKt`C~3Ecw- z*Jv}a`}}s1p2!>JFTvB@VEzO7q-~G@x67Z1wnGdq74N_(_3^0lQ_)T_y{K-H-c1}X zMW>C1L~l1PXCrH8IJa^L^d$dm#7}H7!ZKhh!VYmL@2=wA#j&$d z(Y{DOYC@+>x<>V&!;!5H^y&D<3DzUok4%bxRw08_dKqw*HC;b-&D%{m??c8>C+_JFqHWvGsp`&D-jkNVvc-#Eiyp9X3BqFGu&`7`~;q75(v&F`1s zY04hNyght7Bh4t!Tg6~*Zhr&*T;eJBFE$!mtGi_hbL#!%6A?EGkF_!s^ z_%;{@Ws~9bCNVhEIWO~aA7k;rLz~iN@b`ECH>tiU-Ve+=aX<#RdHz_sMIW3IQ=KXI zZ_Vc`w1sbfy_5kL+Go%~_IzDc$FmHh^r_zzakviZ0eU!2Q|2N(-JA=O%!uyeWH`SetWkZZ4(sB%%P?r4lt~x%W5m4PciEod zSWo-x2=!GMPgC((7kvC-+OI)B$hcK_x~DEMdA^={8RYZ%UJxH`mFJt7*|w-d)M1S{ z+-O}rEZR8b>=+m33dS6~qXOsD;ZStbE9e(ZKVMJD6SN=7_4A@3(ZV{!xPD$VNqSH> zGMrjj5|-{RZn^E(<@#*x1iU`ay*RGH)7dlPD5v^8t!|$sZG6Kxu?Opf`Mx9mDdr1vfJXD!2jVkb zf_BP09gAjr$bh@AVGLZG?Pqhb)UG<(5j1n7300g}@P`jp#zGYDi%N@{J2) z(saaT?5G^q*OyS;bH2brdG>BFV4*zQQx(OveVY-sozTzrtVZ%4CGz$(ft}*@AY7&%YpVq0ZjuVSerVY~Ty?+pCi>?oa}= zXN)8J*&f+Q-a;boQUY5~U|R|7egb=#z>X7G8?O!E!n}1Qu)YLld)=bA;|ac*1ZL|} zQC!<=8ez8+aqlLu-2`@!z#b>CcJ51#((O)Q{SnrQIKvS}Iqb*i!ts}wA6Gn`VILXc zD2t9*l?QMGE--9d$2JDyn0zzBstPIJk1IwC#@7tARq-7#%;(9)Jc#4-J<{MT%z27y zz=w{U=Ox4Wv9K+MmS%A+M2Nc5HL{1QrSW-t?5TeW?J*Nz&E$<(YR=wXo`u2n6Xklo zF#Soz_2tov^EqKRId0U=)r#u?%3KrgL-j%3INuaD%P?WnJ<*vK9pxO_QBf~Qdm?O* zdbF6=*nApn_h~cip{GoXhtQ|fgX2++g^zJupEozJC*QpI>>97m29A$u(1qp9{Ig!t zZSp6oAEXZwhnwL~M5oLN;&8r9D9>z(kn!X7!dt}Pruh@eBmV|*xD=hT?;BOu<`%!$ zCw$n1=GTpO$P>iNaO&q%N2KL-pxpMVvhhB7BE6}XT`M4*Bt59hq}@>5(FAQ(v^mls z*Uz6BZ%Z_9i;(8$Q>paqIuP+=8q2FaYNy1yg>~SVj+njU17U~_C;04sRm5lOxe>Og zxb48{n8r#1+Ym-N9m9LVd>td^`=Agz6kn+GlZ3pE#2h3OmO(Zh?Qd)F2vg-&6aN(G zae2=+q51h#D&B3yOO@NUXrcWcBrv-khDzPk3y!vWD!$Mz_RS{HYGi^Ve@~kox^?Hg z9Telsu;`RYM;lED+a(aRt6rSWi)QzHTdbw{`BYe*em>>%%=G+xYCKAh`r9=nLMyMR zjZ$YnpORW;8$X}&d1C12Qz7Q(Qz7Q(Qz7Q(Qz7Q(Qz7Q(Q$BB``T10c`T10c`T10c z`T10c`T10c`T10cA?b$W!UltC#s#P=vDXFxo=3=?v!U5F=DPyKjp_6phz zq*AW194IrVr+3ehg<`d^@o^66J+D8IG_6o{q9kQf?WU1N$?rbz*QU z{E6xh>D$ENQuH3+2PDEh;Sc)qqFt2lnfUc8n~x{*)GM2IQVtx`9uhW0;P=@cIvF=g zhcX8#3(jm9(P`TWqn2$uD=cFe*pGIc}JtPK~@h760 zof9*W3t{$V#-mYeYz^=5<#3%3rx5=NVJ}|Ct4^uha&9fPIMR9jIw~A~_ z`j+U!QCyyS{la$A51eVzty5-;wnn~`oL=Bwj_F@_EmXc9H2nfulsN%U=jBsgqk55n z=Ie#k`v&919q`c&(=G`frnN@~xHj32=^h#ab1)3b&+;g~xNN=Np?xz%w>SuEj0d~q z?N`sVr{WRw@q8b|^6i7CtJzQa9ysZv#NihClc*oF#Nlr8CqZ8#4%bax6ZAVq)mlto z7s9E0WWaqs<|wnl{f{A#=%)D-wF%0dBo5c+0+TtX<0?bM@%?*B4`N;qZ=(!YA3WU? z{)AwpID`Ts72)BZP%Q)?rU{dz!K6MZeN3&Hc#Dg7zi>%UJKkevnZ zSkC|r5{EnBPedowO0MNIikBf?F1OU@6!SagYZ9LBq4JfwZ%13-G%oCa;(B9?zJ|8n z68{a#ZL+pQ`y7bZ>S$DlGSVmmZj_ZM(HBsLUmqGa#^On>J~)iqC3|_S6Y=^YjG`!$u2KKH zL!#NJ^*Su=T6X`|zzUWpi3A$fLY(($U8rv~s#rdZE z{Jt!07|CazCK79TejPCbosRW-QG7$xw{A_XxF@jT<&m${j*I${fwU*SOy!@?3pMv3 z&tvgeznJ$yMVV2rt~UI@Z8g!0^{pyCTO&@6y~TUHXT`fi!KFIh{CN)All=!>y9=z% z_UYJ%URK7*Y5($ zhwqP!A2|7Ze-!fh{%AOe+pjh}5Mb8V<2;OO;|Va!FG8j+IhEkgM4JE~9r^uz4XcxZeCEa9*O;NKysf+Og7mqtFNpF=`m*RZ za2(r$^i9!^6Li{RPxKn;aKsLU%^Bj#{fV$n+9TJqD0jxA3+G|IIA{Lp?lXUN{b#X0 zKt5j|t*r$0hO{Yox*7gNG|M~SRDD||Kb-G_Xp=jJXuSqDb#pjpbEdT`y2SzA*FDl6 ziDqd%Gn^AC*ZOOOQ{;IjXmmJD*@qZq(mkYo;3&uIIzk|*`#fzWXGirllw(+6vqp0I zLGb$6JSRC`6z}_MBqz*Q2btiA`FwdS16GBnE7$*Wy)s*ar_DIsJ^KY6-)vE@dcb#E zyp~3Tv6;H2#}$~ViVsvi)K5&pKA65V%GD1WkomT zG~aLd_DUOUh&FWso3UK>JwMAO>TfCUiRh0Rrfd{^GrAWny=vEk$$IMMj}-NXu_xnJ zDFm*=1txD?$00V8z-}b4HfS7No(rRnby$Sq?T#i$ZJ)?fN#5ck)7!z2xefb_fgOe6@oB4SFPq#pRIAV|NsJJ#i zX}+09>OeQhpD2%{j}nLL@R2gVHtV*&M=_{?SN&p zOFEq8Gb$r*U)vMhqKuf&F13s46ZU^2;x`?mxe?{r7>aO#e95)hVt&9puZHp(PG7WmVN&WbGKPT;w7@X-9(9C`+#}zU}^_k_GiQfAI zIBC(2X-iu#MA!yT*8@K-8EXt1v@OQ<`zqRTOh;^8alJfZ{yuVu-B0lOYn2WPgJWE~ zc1IXuZNa!ez6`!gSif|R*UxDiTWdqONkvXz8*r7bJ6SgLbTj-3>H>A83$Ig&dHznL zx;#-Ax)7@xQpN~1k{8;enY_^ER-Yg3o=fwm+19K%xkE$&}{ zUAq=M9n!=06(@L@M{92g?b(_Wp8i(3ACc zQZk?5SZzpO7j$!y8=`mqAm}a9WO?2Z|M4&2q`^Ff>DoF4LaWFA-RJ5wSpVq4ewMO* zdpEl`kWHQ{Je{@wVEm_yNu!`opq{Y|t@_Z`H^q0KWfb#$r}(xZ*;4uv^ZMRan;=Hn zbh9q7`BzoPZRCsk4vt4tqIW-!1AP~QHe3+io`}b^S4AIU7|eATcT2Q~lo@_|pu>$Z zeq16fY{{mm`(_wUq&WkYA>6Uicd)TkII*-j!`Ql8nEJhGAhjsxS~ zA`Z8g(~5G)fNzipXKf5=$MZt!ylWigIp%>dbrY7~#|g~Z18{E-ABN?{Jb1g9zCpbu zJ|MZv3?o`iH0Cv)i+Q_*IxdPo#8wj6MgqH+!1jb$`Z#9(tj;0q4QNkvyvQ)Ob5WoC zoW|G3xE%TrZAk5R@dV>2^|3aC@DY4mZ!$njl4td{&53UaY_x&Dj$|LS zBwGC(s+jLkZ$E!n#Bto#X@>`r!!nA~I2LWBg`Qn(+i;uw39cz9e?YW253Fl7(b^dg zj+m`EA@o>=;|1|;<2bGhgcy&mQM16Njtv$Ksah^Tgq{ z`ICshLY$7aOVGEBsCDiH{ekF>#(>A78($)Rr|PSXc?r7j!yD;0uJ}t#CmKU&pLx;e zNKeRLX%T;`Mf?XX;y-Q?zf*O$k^Tdsr}R(NC$@3cXS!vk9k<)yPG2g1hA2M1t-<6r zE#?EHTRTDc5I$^6wD|-vxHbMnHfNu(Kpd`@`i0jD-!A$Drm+rBXZ$9|^?gj^o>A~a z8M%(GuV=m8Dgysj|pG?-zX=$8mf@DSI-%%nP0E!D^6SmRprf za8sY;Phzc8_b4-vXW{9NOZhL#i1}GI4pe~>kFyc=+7x}AVFSIW`#$M#Hz_A5hYY8_ zeedD8D2K8he%!r5p2+SQpuy0td0CcaSRTN82R@d;yxx$E)HMb3x+c1%1s&qCpJG$x zmjU}Fuh!-q952*+)N?m9q9Nj!${s!(YhPRGaNjb_$bf!3#*J1$YXv+iNSTa!16jJ zY?xRyW;4#B=qy?~rs2ma9*6xc`8UPy>kqM=C|$V45qldoT6)Bxp|+DGvXJ*MIBH}RN`Y1!UQgc*F8FP`6$+*6c`exaIQzq)qEdVNPc z)(^I52drlg#c$=}`x>oek^WTleH_PSLw&n7$J@#2ZcNH>?$@78-@Gms{TTD@*PndZ z5}T9E5WAVcRuhQ@;;xU1e5Y8z}a!^?=tu-#=bg4n;kn zZ3d-8KlzYjR5vTDTOm=8K)({@zM$B8Wn3;C83eCxuz z4LfnZ6=6K3Ou9z-m>@A|S7APk7W56I`F!v=jK_3liNUc>(lK1*0o*PAMEwTo>%`&i z@h75F<~DISFO%2W1btfc zKGh*NPP_h`cDgD02!%wpwz>>>hBT8M%oi1}kzNl)PwB;UpEgO?-}g(U>*w!{(j8ZS z((hxQv% zpEQi)xZEZh(5UmgXudxn=HGilxpc(V#1~?If3VLl`F6zD#)xpl_7m7q0`oWY!nn=e zBNwL2v>Nssw0+QDW;pfv-6Ac~hcllO@N^^gQ>?p?Hct#L?u$uVHcEZG9^iLG+h)4u zv3%8yx~{MA{l-)i{hmnH9K)ckW;pF+Jh+GaDW&65VcqoC1=eThHgJ6b=@XK%LK&ck zd+IVk3!<;%IAuf1SQF1-iN~dp0lRks83!$7RMdvnOKBA2G4<#XPf8EgQM$1H5Mx== z`FfV&xQ_sw#hjFKriB?TsEgEXQM4n5Q6E8h>%`%_9+bCb2>MNiLD`eG zC)!McW@!LlOwih8=TtmD?xf;X6>lmbb5gWaJYRoO@m89|+ia5FZj*SA8pLB6`1`>& z4n<`^oBH~b%12doE6xYyPKst@c|z`u25~dQU2PH z;B3ASwSC5)G^*-*P`@(Z3!-(?o(<%$i6;|J*mtl_-xJ-}X=1+Kc8EsI+ABie?lK%d zfu~#LPlNPLH;|Xe6WP5J(2(kaPoHc|k1n()Z9z{rYCpxiyBp^N#NfXPD>1^^HA%mPLQSu+)ba*9Fx1uK0QtQm|=I} z^2Ic5{)muyq+{s&fhqy$>+e&LpDwg3^XKCZGA-1>;`+15A9bz5)7g4vR98u#A`xzm zKT%#XK#TBn$Nb6ZgX`C=KerW7KjVyf4i15wsDWKNhW@VMO!u`Yb{7cI_iA zsxKodlaZWO+>4-&Gf|x;Mi<(hn76yH`?R5@hj0tN7|V<6f>GjdR$l_WC~L+jx~2;9 zno6H(`Sh)h<>gV#I|e212}981zGFi4szS<~)v@(AQTdU+B)W}bkxbI>h;HSah`%fP zJ%*9a%+HbNR*wQ3kk+npnI}&`qka6i>dS(dwFiVAqkf~3(Tn4-Uhp(!XQoR}XXyrI zMtK89QU99A&$#F#45PSnqOCHF;`RVq7JZ&NH|V#RkGtZVCSQCXh2inZHuiLzKiSo@dxJ4Oo-tNTK64<7&cH?&Cx0As3 z6WCEgo}d4Q>2_-F5MsRvY$$=%64-PCTZk~GwIs~y7wU~414!EtZH4)U{hF;`(cWJ7 zr{qtx$wA_9MmKpyf5`X~Ms2(nvLJdR`Kuv4lFzceD|%RtzMlxOgNUya=Z_62wi_k3R4-4xO!EC;P_Y`3mYYV%(Z9q5RAJquX~v zmQ;F7%cr+Nra(X9*6tCeXf^V~#WbcfYn0-enb=|iv%Uj(hiK$8c@bvi9$|Zm6UO!9 zN{Bs)_OK@ z_9K+x%dNW&CoOdA2g?XN-9tE9#{*X{zlf4HjS38vqm?lA7Q_}Ubv@{@t)^K+Mc30sgpL>k-ze}cB( zkJAZaaNE?UMg1aQN)KX8hpxi~cJAxTB(Y!)Olpb4)Pcr!2qj)=wJRtDmP*_LgKlC9OprC%^UA2oK;} z@w5Kg{%C}jpZJU8CO5=)iuJHbdY~rz zDYg$wAK@eB%kuL~=~nBHl^0Bj#yC*dsEW zAiaI@@6Z-VZz|vaf%P}q{C8a)qPRAtv#$D2tV`H;UTrm!l3puO_k_ftK5Mr<~fk0#GB!|*o(oL(Z5>;BIA$GqAgs{6JTH5kh|?}xt&x`7yr>twqIW7T^%)Yj5@0o9 z3&NNuf4yLR1#A+ouPllmRod+3X&Fw}L^FMJor*aqWp9h;7LG%E(+&?sv+}pHDC|J` zQ_;5=H<$17OxfM)Hwrrj`?^FsVBAFgqx?znRLK*RB~NKTy0HCbIA^+aX0u$UBF|=b z$CB4WVl`nM3W-ez$2_Es7lhe*ZIk|!dfXQ89K%3=%Go9cXLG>%e*bs;6*+m2jI%W_ zZRY!D(>*FP>STH&9H-2neKD@@(`QLDeaq!NukwDHpi}mW=#&+X(WGrQpk<)#ie~xD z`_!V$$a5^7I}8&%Ow+G_-X~8&f4klWX&Bz+y~rQSdtCLcjdVC-ejXXt3qOw}osOa3 zH`H#3!){An$agn^?Ft(R;vNVKe83%lLhU zVEk2jJZ%-fM{&sKTt9p&B>E#zMnmg3(^@ZWF3f0*EZ z(uBWLb<*oY9eqFFqjem>;${k-R+Jr$_;(We?h6a`I7;wU zR2M=%-`>LXd&QU1cUZKLf1(Nhe8kT-eoNRq?VI=S#r(|ADN}UX^SKX z-;*Z%{<_WcTluT)^-w;XmA|l%&p-bb@=Zs4R{p|L_FPHuZ#3a=wofnAquD;akT2e+ zM}2#h$&|jsqA9SxXQB!Je8g|%FRW4dZit>LU%Tdkj$*O&_nYuP7R~dsEZcd#0oUUK zE8lKmAzy!jZ#d$ky(WaE>@}a@w|6!nUW(s;pUmq)d-?B^rR>H0>?ia*iqa)th0jmH zh57Cj=F_wC7nah`fA2NqpJ>8AAIZ1!7naHo)87z1S^kkc^6xj{e;n~!`STfOxX=#W z!hF8S*Pq}Uj`*zng{AB@pWwH5mq31s|8~T08AAMsO`AK)R<;O?BifBKnKL(Y;Ms)NAjiY!F0SmEFIImn44#y55m(u4EcTYst~W`Cv$4H}&g9=RZd~86KWM?9f#p#AL!3L5^l)9O~Gfx@UKfm|M@3!+CE)|b)e7qqt1^tAT z4>7omI;Cu&`%RQF1y2{tA)%ljXNmkqpTTWDO=r4@UJ%D?*yK=NAWQD|8qXNkw0G^){gV_IX6$pKp%vs>tlP( z>Baa>`%IDn&dXw%%^9M##kk+nD4BuBm&ZNwhxJt7$w}Ft@$$5!SA36yc^iVKnJshl_sdS;IJ8BE(^VvGZ9AHSi3=J;|cOy^fiT!8R)m+>1O$pmct_g6n<^vCdnwn(1us9vt2)HGaa(e&Oilk{ zj-G+OBl;riMxKZASn^0bRE;i!e=5w|%smHR#G~ypwZVQI$L-qs1Hje~mddYqzIICS zhZ#TW=a@Is8KLDZqO;DeE55IDjI-55W)J8OM4w>(>dLHWb5F&$4>p&#!mh0A{=U(` z39fUQ?x@z9_b9JHn`7Dg=gsZ9u1>$=J*bqqE}0$FwSi2l|Kb|}TX?TA!|9=D_N;oM zevqfV4L@*J-lcSkeSdx8@nylhRE60%)Fdw~OS-V1p^d3Koz16{?V#w_SoR~vjgVy< zwFT-kBYHdONqNPdFhAdTO8X>v%W3aOb`NDI>MF@${+MTWyh|aVtln>|AW}Hr84@rp1k9M)K z5+Ql(@~^n)bQ%ybank}$6eY3m6-z@_>_J$!i$lNjlo0U9I@H^iTaPRQ#K z*2@gImpe)(S9bZnJwmB?jN{|6ESa9)UqgOhf6RV3CuZe?Ftpnw>4*V0?2r4*6~- zu+;>1M_6dz?F9B9fjtuD)9u9hQ(;~|o~GX6+Ja7_8Jttg{kJf?GG7t;MY?j~hKbmnhP@mCnu&5PU|^e?gZKJa}{ z*Z=sdl2lX?O-D?}dsc)6F&RNv&`l6qMomU%L68v^6q&_@m1Pt`ky%+#6I&5mM`oR6 z6hTKeWwCV@TQ@P?KG}3zXT|TF*L|M%`*lz6D>=2YeILKxN8Wk8UeEiy=bU@)xqn`N z-miCDfAFTV97-%(;-;AaB|Afq#LWojQ~h%1O}Vw2obQ)0hZ4(`^ZjlHlw9_EydI_P ztZaU+t*bGXu^diZ$M_xxZL7Ero*lWloa@LbEncUxT(4}d4!Ru6Vmmn%x=lPDN*(hP zST**OJc-vNuL-=#iLz~hvYo(^Wfugnz5uo~fDH$*RRJts#}b~@I}I_DteeEEU>r~J zc^Pd5WAUN(V4sR#GfYa%IgD2@Mk#K4l~?Dof_cqjV*p*-$mdVXun>$Hs|=M$2i}|w#IXB?wSbaw<15}^9<#8 zAwR91nX`Bt4(k~nLl3uAglii8yr0rm%qsZq5b4I z$~qRI>=5Ur^c9w|9K0FKqwz)7(-}HkEqNR(o(wl{a{2hX&9n`bm+y_m?MJbw*FG64 zH!Gk1QHtl30H=uZ+QFF|GwHe!ZRY`-kz!jJar%VA&r~&z@jWHVX8s8HMO^Q3`Wo{~ z@T^|^Ea*6VZqFLlb3`ix^Q%j*I^9`BSq_M1F^IGOf2aeFOA z867j6H-fwwOjfaw&(|d>rTLr7mkNi8iSld7?&uCak%zem3_{K{XQ5obLXhZc4R%H$gkmT zJg&JpdpaG;I-qQ=xXsPWtV6C3Nn0fE>18Ni=8t&okZt?ie90WSKGe0AF4uqAp81?d zDPH@nRc|*BF>eWYl{{9a@YwE^;Dy?N^W$sFw5_I(9`jj`%paMxZ1(*l=L6#7WE-%a z*%;FoLQgWE+j}1J3xoCX@3r)U8{bz8_Ve6z-j(1s@|Y9k`qz2ox_@23POe84#^5;K z<`h zw)KYJdS#oZBHq{TW4U+5vwy08vrMc)nJUec%DikRw*3>1<&i)7ZL|cn3S?k%1~A{eK>XUzicdsh2zU# zz~xfLAdZh}&ZpGOwx{qof4q2(%X@t){dxiS9jSlZ4^+J}lwV07P7BdCp=&9epX^^O zQ{>ihX51&;e8P3DV2o0JA^lscuDSI#a~tTxDU(nC*5+pCxC~{_r4Oh0{38%YY*TN{ zz&3HN&VF5ryku++0~_G2@()9y_FzovFS6LzWn6&LEdHm)DdyKQPN|0fC49ztO^i`m z$o~>~EOQQHlqU09DA+f0<2TEa@kQ%ly9epRX|mhI^;>~`ZURosTOIG^c%^ha8U1bq zG2GytANubKs023yIdT1g#qmLPly!Yv|CBtog;O&A7~?XWq#haCXJ2tz%CfR;nH$eD z4AY0xSe)68;;zY4oasKny1T$x#oI)CO{K#{$P?T6FjS8W;Zl!SUMwd!m!_5DdP=z! z+-T#(M20AFEYP-%J|W+P>Laa=j(yLiJ6Kmo3a!?ZGlC8K)GVkF8}}ZjCmc z{8kpC#sYR zlN?XDUBwUi982E(nk&oYLVheyl#kC5C@$6>8*^iHnjE%4?BI4xuE{cVSiu;j`TQ^I zBY%9W=R8Vt_+Nm-zHZ|@O11Gn|2q$yAIl#je=(P%ROXGduC2HomdClc50%mm%!}95 zw4F9adoeH8L))S;cp1u<^UpTg57nJzwXzIK)nmwFUN?CCOiro8G|G~7Ysi-@C!Q;5 zyNKnbtUtNUi+HS~6t}-xx5)WtvcFV=KaUG#+d0=?8jv5di;INfnCm0)*Uuz1K5>2} z%Um(ApaZ0`XFOc8LIHk1wE|(q5XPf(wFLD@L3M}cL;UtgzlSzE9hwBlceOq{6 z<+IET@5@GiSg1q|CQ_Kqu}Uu4%=IbIEsBn$BfBykMS5q$DCIOUc`D;yYu+kg8bFIU8^7D z=1rCr&-=8E?NYJL`EvbyChcooY#*oO_|9#|A5OFRUu>UiJC;|$7^Ox0Pw5NEV@%{p zJ2FKO5{*lxvZQoN~j+@>%-{BPOAdbK@_b+S>El679-pe)9|>I24OVsc(% z8OxBDlra*()&#J4P9Qv4cDm{>tV7O6gvU13f)}!>DIg<0?^L=v!7C)36YG-e9Z9S& zz*`!?q~9jX%JmMx*!K7uA#F4C(f*X@7=$0!AN?a$}&xb?i^dX1z_!qm;xXjs#=5oiPh?6Z0SEEks_dTjdRmk+&ixkLwwaQ?wc8 zeN|7kJA<~V<$OwPhm8Mm`Gg%A%9HVb747H7klfmg%g=_)S>VXE{tO*U9L4eMtv7Pl z#TTJ`yw&F(xWdS`EeEeJt0(tPLbhWK@@H^_kw1g$LjH2s(kEu;HEd$n z{6pJ0T+UnPJ3li=u7B5$!Kvo+1WIvCx4G&lu2ll;xzfS6qL{65nwfbpz9} z#{9*K&)8r9TM@wI{;BBVvhv=|Bo<$fqr4$0c>Fa z>knYd0+`%CP1>?1z$?Oi#w0I(m!zs&Wq?;3z#0OWyuT%>qa(nZAHaG8*pdJ?1We{R zZeMwSOA?E4UsN!Tv#G!;XrISKxmLo5EQeEaz9^?-j#WIgIn> z0gLkjdKQh5&w7?2U+T%*kpQ+vVXQlz-)Y;&$!XopZf>#0M2Qg>qjYYkv?fyM1l zvRFnpu%yqVy`^oLH&%NKk7&XEogrM>JGMVCU$Xux`fwWJf7x}0yQabAXE9DG<|XU?fme&`0UQc{imi;E} z%{n>pR{Hl022?$&(H?`mP2{nxS;#Boa+DZr31IQshVq2RI;DR%(!Q1}?VYqy+PeaL znG2@U@e1f1uie=`k;#7J#2BaKc)%Rt#apVk=*v)EYy)lQ(89X zW5?&TaUP`w{4c;^+qyZA64#Rx$HSs{kKD%FxJ`2RXgGh_82K5>TZR0%-6@{*brzOU z0-w%iZq~Nk^}I^tk0nFmBV;GnO~!v|3-)y<XTDY|mQPlXCZny1|>pas$545WEDOIIaU6uJ;Hy zTpdo_W^3X-YA&`xjT4+d4ZezFGai%txT!*ZT=zh}wC60=qhf-6Anh5SXN=*41<+H$ z+pL^i-{7{A{$54$zu{*p?3P;;}kwud{{odywy6!^qh> zfc&Y%%YiLrz#A8G_XN3~`GNDWk^oi)Y% z+KIANw4ZEK*0oT{WxwfRS$$5kA=MSga z_+RdK0@&6H#whjjzc`k2wsN_dj8kH}ld+zm!xqLU4RPFgZJE37GcRUftk1?!Zk%MB z`@lhH#PwLJFt&9VSO;&jvU2elVf<`Q$K%u#l~6i_9Ck%`=oI_n%5xM%ItHHeva-7>Da< zU;B#d(;OJ5+ZD!g|UY=TTxEodIlt!r0C}U=>_2v0mi5EK_`@ zuxw6g{XF({V(wvnESt7mPfon8iT5b3d8_Kn`Av*dYT$n=pY4wOA#E!;KcSEF7BEIB z)~9^mALsbjpq2%&kpQ+PfEA%HBz-?UfXRA4$&2SMl9|M$pU1XS9{W%Fd6K95IrF8T z&!m0rGnTU$b`^3yB`z}vEUnC_D#LQ}(I0r96K_ib{iY09CzG;$JvU}bKduy< z$WF!?+sp0CX%_!eGI?x_$_Gv<(?m4`z9lf`e{E+FZ(-Q+tPM6^Hkep z2$~5w!?Yi=i`%>voMc~PdNK}6=$Jp8YT|#n>l-Yif-y>Q4A7Rbn5Qs0^yD&6}`8hwZjLC?_SgfQ zdY2+EP4CJv^vdrLrRkOLC5P%eBafYsyWXq)9AEFE{7`+{Q8rC)H}XSz<$6e3eV3zb zNUz*iPt#kHA6Ln(Q&s!Qef2cGGf_6ASMIB)>FpdtuiRHp)4OyGy>eeYO>ZHt8-)BU z_thKNCD}1HcYZVjWiy;lsfa%H0jxQIwJU5Im5uLB(>AT1i%=%y-$CT1)pHd2p?Xfn zb&oW?WylZdtwCOz-X`RS^v*%vBC50Y?=*rIAV1BnCCCriHH^G8yCS|$L@8vK{4PqG z-YS$0>8(dzn%>qi^v*-xTsAB)ZZAsF%VYXrirgZWMJYMYGbZ!dYWBmd^C;9#p`0)#Ama~>ExpOM^lRV!ievIpn z@)eZN^_P3Ld?>zsui{VaV!d%2(l&{8vQd=8F4-pSW1sSeQ`{F5KIQtx^`vb*6B6q? zJ`BlYOynhPDdPf^l2~<&_*iU%;>F`CVWN+>W7RjQV_o~3=-|2!(}z16>>4q6X)W*R>cVWWB~cq*fO>p`-RwY9~;Gf zDQ`)Rj71^8GWKru%Vc}D!KNhE8NkNsmtsHraw*Do@HP<(d?>tR{Jfj>WP3PqOiMil zWBk3gC+TCcCy8~kQIrH@yS3jre|_7{dSejFc(IhFHdeOARBis@v(osRKX`Z?>YR9J?K0h4Q+ z`uQs6w15-O71?npx1M6z^T3g@fw6dPMB8M27lYSHxSrRzY&_4v*U8kU(A_HA5Li;wzW5Aff%w_fE=84r~p@;MW@FCH%#C@!UjPoyWGwx?X(G7^kFvWBCqt?~fq+pYx&h#oEuVxp&vFoCa{4d7F^KdfSkfw51amk0YFzr~4(#?c+>Ju`Q|}F`ibR z2F^_QD?^7;pKA7Lwk>jP&oRQ-%&_F-9q_muFM%nV0sMf%}L74%;H}mJcrL@5BBg z-ezOO^;foQ2>Ed=jT4U<;&K^IBmB>M&db@#c2sd5CE>C^>SBcEg-NtySf96ppY-cI zg|Yk|VC!msd>#~-U)WZ$zk;tLk7MgpqBO$>v6T74C%=bE_zloDckP3v4O`!sb_rsV~p{TxlJsG(n6l^#^7csdmeo_6>=cve4PEx zUotM^XF{{~xwyIsjvZP(OtgKH~tYw!!esrm_p?2anl6I=4{p5JaKCfVmQao0zWv74Lry*wM;)V6i z4qzP$n@Y#?6~>1ld%4}j-dJ`#j^)lH+2%?vOeyx$I5smc*+1C7BEOIQw^sSwwSsEO z<}?6aZY`N>2bL#s+s1M0#e>i5WMP!TzIJ+(aofV=G2%8}FO&T_yIkC|O%k^&SVoFX z?0;ETOIz@^5^*IM+a&Ai7TR}nORi1WpUo&Ulk?TOz9S`%)^y#+%B|DVoQ}x z%o`41tAI&=VxC-wNn&yxCZF;-F;A|;Br(oQ#t+Az#LqBijxkP^QT7bxP#P|zf8&hv zY=fmgF>gM7I3?@U>mUzX62OK6*vbGF&tHTmbxaNTw={rN1+dWix-r0O4PfzDt8D2G z@D>HIxc{oMa$c6K+o&p=p)&Hk+92)c`eJU5DgQ& zGpA(yu|A2vJ}xtkKIYfZhf_S)1miXLJ}TDP8nbiuF*Y}VbqBCT0c;?EEe~L$0W4p& z3ENT_?TK zp?rzIcu~k$IHb0F`e?{`H^@`A=~S`cTKu^Gef*`Jd-h(WyR-xxjBlEV1LRGF8wJUdyVDT zM^bJM?dv%)Lr^8-l*+k%v+b4}JJ>(7m_RA%vla(=Sgb?wx)hJck%bE5L)OD7IgT(U z_9u0h#Z2Fx>Hsz~fHeiMwgA={z!n6sz5uo~fDH$*RROFp(0``|u(-Xbe9|v70=#-) z;$MylSqGJJo{A;TmwBv?_H{nXSqPcjmYf*t2UZ#*QIw(WGGO(LrNq{1aH^R@N$gC< z0ox>T(90xcbB3Tw#wji0e=47$kX*J^a2(9NmwW~bq7+|~4RZZCYPO?$ZPXFK z<_EC2o`fgccS(RZ6u?#nun2w@d0cNtXhljxTO&9ba55(`@Et?aIxAT-SW~WToMH7}vD|{L*|UGn06yBil9; z`Tex-pZ~fw5yK(BvuyEuGn2;XH>{e|RQlA$d$d-;mNy~!8Nx;WD3b#IU``e1QR?Ki zOyC?pLvRCqI89|k0_#4uYYr1ANt^S2$S%gjF5xm(#sw%PvFaG{v6%tvoyHs6y+Fz1 z!;sx%0W zPAQ(x*RmydO|T(m<#e(>Z3kl=0Ukri`JH_r{wYH&`RnJL57@>TEPzsfkn3#Zm}rh! zIBy;2d?G{K`QXpuZ6M~kKK-0WNqimhbB6MzKJl25^>c1K;d)5_spe-kQ+&;G8tKES zjsKBdGPkkrcE%`)tZB4AFGjEy%IePD>sW;Ra^5D+V={C&$QY&h{4d}GZmU(CN2!VZ z9~|@Dnu+bpV2l%g@K(mfTG~(c1-88o{P^51Fs`*AzmUsPVjXe6p=}cD3h-pzDm=C& zj&s_!&?o5&wq?1<;BD3yIX}kpD`mxH6MdS?#^7(;nP%e}gpHoti%0RiEG0MsLZ%F3w80FTa+|%1-YY6-8 zyj9}>=dWg*(i;A!`X=X>pzpSGexQ6M@@2i3T$^R6NW8|T?K1l0zYw+&dU&2uD`|C2eL8Z+cO#cG0mQMZY5ccsZR_``jJ6Z=xepC$&#m&y3! z{2|C4WnX36+s!?kzgp={md{YWe1B^t?dQtp>|#z895%|FYlzbW?lIBPzZ zFYmLN!2)OvCiYCH!ugJU6Oea3Au2fTQFq1uw|db;qZB+2d{DLDV7St9N95Jcj@W};-ZC+4QlvlRJ#7|B9lkrZo)};-TW!EKkljZoa!FQ6@ zC6<%&WiC!)mi=N2DZt_B>Yb#m-bo=Uv+X-9xAi+Lmlj9kiF^Negp_<UM;V($x-<5)YJw?v9Q}~yr@Ox7D-%Y``f2XH1o{EZSJ;_;5_RLsM_LLP)TTlL3KXRrkR;f1}K%3h#P(%`=t!;7;1b@AuFt@*K;1s4`Z?df5*LZ1lh3haZeHZoFIm zVZ9$drNxQ=FWHc++dI8ZmXz^M_E|5*!{z_nY{G;IeDVLkoEH6;+Jg0d_>{9;?f*+Q zBwasVJn(onRvK@7$)IrBb}ZSPrrn%p#Ak4{;wJFY$de3y-f?S$G*E?}Nm%q#cOFeRI6@q45aFpKj#sNIXk>>|~U; zvyoS7-Hdv7*9B9K_aNNT9_7Td^p8D_ypI@pdl`8Z zM&3t_yuFRQeT=+HBX3{gS=J@{5zo?Y`x|*x#IvLWEF|I_Xykp&$g3uvrC%OIJWHG& zY?OD1kvGGr_v1$1CyaUzHOi|o@(wfd4ma|SF!E}Ryd#agPa1ijGVKDglI09b@wb*wy@hs~X>;0Z{NuH(M_d4DwWUNQ1UjJ#KkygwOvuNiqOjl4e_d4DnT{?Eu8 zHS+#y%eW#s+c$oq$p_fI2lwUPHPBkv6(@83q=8YAybBkwIE?`3r6G4kGTBkxcnug1tb%*Z?3$UDNwt2OeDH1a-a zt26RGZR8zg(GxF%P)|5VPl-FS7 zooM8pWaOP}Bkw#T?|dWg0wb@Lc=?7A;Y-A`+$X+}cpDkyeVKUlH*RV(%Daeomiygb zA)cka7aMu)M&2bx-lay~SB<j+W@htVdig=dw_|-<2EhDd+c$W6Kjd+%Rbi0vvhmp6y$h*_X`?isHmyy?F zmeK$h+Uj`yTP=Z`|~KB3bIO$f)-R#IuYq z4-n7Nj~+Dg`i#6E8hH;9&ob}-$jDo4zxybWU+4}BQMX$%Qx~0 zjJ%0P-p0hUTwg0R@-{K@CK-8~8hMkAyv>Zf&5gV*jJzTvZ%ZR@ijh}ro4ik+*}9_aP&1x{@o&ml=A%Q5JpQd{i@c8;d7m)y4mI*> zjJ(5)yu*#WBaFOSBkxEf?~_K}r;NNhBk$8j-cd&0(MH}(Bkvd^?=wc;u|{6Kk@s06 z?>Hmxcq4C?k@qyfclwvy8ki8hI_mvs}MA+sHe|$UE1_n{DKsXXKr4yU zxo>b2@httL%gFnNk#{rkEcN}SQQmywS^DoSM&7MP-nWdrZX@qDBky)2?+znx0r4#3 z(4EAywA;6dM}Om{yNvRBh-Zn@yNPFsgYOu5-!<|U8tuEs$h+6byU)n$HS+E^^1f%} zec#AiWaRz8$a}!Zd(g=1GxC0Djit$Qv~Bes1Lb!pM8h$XjOQ zJ#XZ_VC4PM$Qv^9UNrK4W#s+Z$XjmY{l>_9$;kVykvDAQy=>(D&dB?{k+;Ig`-749 zM+p?+qjG-$vdVBkxTk?=9k4+V^cEk2{e?-UQ-V`rAfE zUY?O>X0^3x3f`isgbvfk+-Xn_hBQi%*fl#$lINGmb8aa zUb&ICr;+y&BX2L_S;m(NBk!X|-rh#uK1N=pk+-jrx1W)>zmZpEqOR6WHWxerP;#ouSPs z7o+V!98hKY4c~=w9a)0I;;#uOa z)5yD)c$RdXk$1h3H_yns!N|MO$h(Pn7XNh-&vG9B4Wqo9jl6FfdGn3DTa3J0jl6Fe zdEG|dZARYhM&2Dp-U1`laXyn~PJWGGO*C_8k zBd^!UyWhzB9`P*c`$pa(;#sIaF!CO-2%`!-Xyo-7c|SDr9y0QNWaKS2@_uaOJ#6It z#K`L>o`w2TBkvL7h5FGA)TX;$UUT_BH=8hd!o>7%OmrrB6ViFtC3$)2yxVfTg3W@K z5#c{bmTM&}z9>b=XbWg*GW`LjLY$VYKLVmv*-|e#6Dey+fO*0$7{Xh zG3O`m`>~wlqa@5v9y34LTX;Wt%;l4H%W1 zW7fqSNj#P$k6HdS$)qipO&&9Mt3*DRPaZRWaw4DWo;>FA+a>b3eDZiRI(~m5pX--A zX8Vd0`CLAE%<`wI{Nypq*T>r?`0StLG3%d_$mjCOV;-N9V*=~f$6F@KbN)t&2;=g} zW6qzT@{`AGPeCG|k0+|*jn#2};+Wf~FmcTF<>PBm?YSGC&h=eSiwz-8njOhGpUY{#imbGD zk?~A;dfbt6l5gFn*{jQ^*{gYJy^$~g6|Jq(%*Z-AqNcVdIxf=c{h#7#?KYm=ciOI6u5NdoFUJ|#8E0FXlCQ5{l&A0n zPK&>^dP}=W`AXUO54YC#NsE^>d-XVz`48=s;%WA#*`fWMRu7SH-TtrJq3e-W?=-*Z z_OtdQtydqfZ@zahe^vT$k6;0c4WIlZJ1Uc@q^eqDm&Qf^|s2+9$uB*b31AE z5j%vg{VTZUh3dpy;b}Q~p2>({Y>%U@<|xW~Ih42@Pnh^m>XYU_ktcDk>n(ajj?UNZ zt^In82zZybpLv(%i}*ZUVaZs}+cbYmJBd2o9>+??ySx?q##5ttX>ph)N0%3#_JiPQ z&6CzQ)5fFZJq?k~TYa7`d1=?24i&zL{ z|4!BD{*u;i5_fuh(*0KFo9%*v@%;Wy?T~Wg*`s;?Eq~~Cey{D&?J9m-AUkTCX5XEP zCx>Z#$(QYTyz$~iL7m8eC-#>Pg{4U^~<~Tc+l~%nJ%u-(9m13Pr`an!8Q0QyQh#aRG@i(lac?}HjDzFx zWLzANC;75fZuOplOy=qFM#qWNJ6UF|{dFA&YQ_?_9`g=ckFv%Rb@*7B>oM<$^(bpB zQMF@buE)G1*Q2blM169s%=MU;HZQM76`rVd?RWQ6>2>Yfosl`Y-sP=6AAYyg@q0!$q<7x~?=&v?cP;*xlAMQ&O=oz@P*)8n(Qj?R~I>sse` z%MNYdc=liWPAjmE6_$QEUNPZ`S!sR}IqSNP;rC$wFQ>Hnia*x1eXZ+@quwj09COln zXU#q@b8_>EXPuTg|CDpi{lXW|%IsOOd-?8rN707N4Nlk)2^+e@hB0Boz_?*{*f2$I zSSM^)ENxg6Zde&_I6c^Kj6NF^S95lR1p{@>0INnCHFWF;^xp<*iY9-WvoR z-`%fEzRA$x&Jwwsmy^x!b>wdcjP97jc+cJMn-G=n`%ch5;qh(@0E`E}rr zD%^elc|uh8FQ4z+G9hYE_(_n{uka?|g9<+jc=;Q?{Mo>(6@DS`ZiTl4?^XEaz>EIv z%XiObO^7lI=lA<^{In~)3wWo(Zv{T8@CCr5HNM{O0B=xuFYp$HKLC7C;fsL}EBq1Q zb@~1c`T^jX0v~?{cu}E`F9SYJ;lBc2y{XS12Hv3XKLQ_C_)6f>WM9tTfVV4rHSht2 zzXiN^Gha@A?Dh%KYK2b%-noO%F9JTK@U4J%@8t8R0UuHL4#3Nse10kLN`>zZyn4jv zR{*b5_{D177~TFMkAhtHS>RylB|xuL54Ja5ucue7%W!A}0>l2~puBAD;-ke{&yq z!^nhaNa0h!Z{Nb_mjLfl_;$dnr}+Ho!0Q#hEATbj`uuX>mD7BDZ{VE@uL9nq@PmOz zAMoYW054JaCxN#pd?xS?g&z-mP~j&5A5r)hfLCwl+tUKPUf~x2?^XC$fDb7AGT@o* zefe{NS1SB^;Oz=`&*@HxIu(8!`1KiIeh=^_h2ICfU*Qh`A5{2{fw%AH%U=S#Q{hho zA3o6M{{r}^!e0blRPFPJfoBx{3h?TKeEwg6*D3t(z`GT`26(^1-Ft2(L`4Vt@+ZaJ zpVsFJ-x7Gc!b^Y;D13Y1nHj$Poq#tfd^h0zANTnczzaX&QAJT4za?)Rt2PKERDFU5NI@cI1vL;f4(`IvsoA;u@W zgT#L~O>dq++^+lmmE!0FDyJWMyC0Qr`Z>ZAz!(44$DaXSH0Bw7u>6yie6jytg^T??De^~84a>h#$r1TaD_rE)wEG$2 zpBYVI`R+VBS4QNI8^Jb zMwvNbIrEepiO*R|j>Kn6ikz8qe0yB~&GUZ4ge`FXFNn5R@}2*S*81HG@&A_;U;N*b zVo%$=kUa&_D@u;DhuU4?&Ymez^%UQ4V$Y3=FZPUH=JTb!O1r}LOo-QIxiS);9XTl8 zbMa6deP8Ky_7p~iU-Juy-l@0vdZm5c`DLz*v~Q_WEOKUj%aA!zgc1k?= zrO2OomoMMNZE-Y7$#?b_MlJG%8dO2-EL!Nxadx`gTy1l4I7`VFKkuw?@pEsA-X-4; z>CKDWx*(_dDC(yZ=z9KzkT0c<2Y#u-8-ZT|+|?(F&IEn~@Xes&eBieOml^tE;CBI+ zRShq9*`9lWOSoSPydU@`kbg7qCzX6&rm~!8fQy~?0C(p-x!;(25cuyE|EIv+`Av@h zH1O5n%X?s+2hQ&i;w1QQflmf5_P+}JeZc83POk&s2Dq$T-vquhaG5zaCdYDp_W>?? zw*-C=aQ+=APTK-^=NUOWcLaVM_!1Ai{AT$lDZTpwKL@zjc?j@!g&zt0YK0#QoPU>< zlho@(;0u9Ez0LqGzuPFdjOXX0U7WPsI&g-m^w@>(3f>Vj%vU_L?tW>^wEa&ib2j zvUyMB)Q^Vcd^JT*Pl}wbH+?zM-?vlsb$*@_waWwuv)npRM!TG?u6>K6Ze@?G1FOH0 zA!ob@gzGQ-Wir(vu8+tUUZF; zFaGD>g-s@jhd(L4`2Um29*NJQZzrYX>YKk$$ex0zQ2A5pdxnxP^)0_38=NtMq`7{Jf|~wTt-ekres8De^04 zgya`QGnD-@{_}b~nVeoakGngG=GuMq<6-$HD*3Km@}drfOaEG<^h*C4NYUH-*|6SA zm3;BrHfo%dcx(D@xL$pq^W}?w_EvJlKRpY>a@tPt<;XlTKgG_Ym3*;tI7NO{qc30V zY*BK=&W?M+b{1al%aQr_#uPiRQu4*llJAA(kKXLd7dyYB$h0FMPi}H_*pDUC-GJbZY*t7U9 z-yW&g1T_vwy@pfdti0Qon`b!rF~(4cHbA)TkQc&^uCm$w?0kpLt(wukA(F$O!oN_=jSQ;66Y;H^7)QN z_c51*vtMTaW?xb`ZFGI9X}k|a*VBM6 z8SjYRInRXjQvXu&rCv*weDPb&!(sWODe{Mve2K$JzByPA6i2Try;84UrPp0PRf7PT zc3#~7Cqx~;_7yn$i=&CEh>V~0KMmKb^^d+B7v2TYEa-Zeritp?x zjD}M5{zdUc@209>h~5UJ*R{)(s85}rO1#zjW=3+}F(eoE;0|f8Ql(egtMoD7Z(>i= z8ef64XXB{Tr)T4&L5-85_v0ygyC3%jiQcw*{Ru|&4*GQHotV9jDcQ~sdC}0<1aVte z-{R;bWsl6Kolp6Eu_yCD$ez5YUR`gI{&=yHFa5Fl>9G76FNNi|cKdu8Kcg*uT-Fb_ z`puQSk2zo2BlYcF>dTS(u6{XWPeG)n$L#eeJ^#wMTK==J{Dmt*^7Ep~+kC#%wBCt+ z7peM+pId(smOr?qFG%Ds@Zqfd-BRQaxCha*O2qz#VqcKRf82+&_qz{Q@}*xCKA#mG z?}+@mZGAx^|5YE(jz4`WexzMaQ+lOc>R$-!ZQsLJAbKaN^_Yu?yyz!NuZ#n8lwPTC z$xvAD+&#m3cTCayjM6Lhy-n$r`qriBEj`fJdm*hi_&(H!aU*L-m^%k}9q!aIAenfWGDF1997cYuBl$^t3yf}JT z42h4U=&o1}JumSh0Bk12+q|e(*(vJ*wH(V{ubWrz`*W9API0ta>6LX$%Wr(W68{yS z_2syuf~Z{_jA9aR@AHST?DeS1m%{R^n!@sLOOgMP6!|T`3(L=_0aWaNC`JCKQsnop z2+J?IEM$LC)HT)TySOTdew(7VIYn>NE500QmqIl_J1gip78j`5LZbH#rC0jt*OgxB zr+p(?5%G@bUCZ+D8`Ez~+t;^f;(uZ&AYe+uhuzA>z~d@G+X_1z^!@1rStJ6`kU zNPVli!g_mB^d6%0il2v-Uh#9`%CO#f-wNr?i$3zI&v*4LiYmAEan~GlA79zy^cF{N zDtlx-*79dxj`*SH-jF?X9Y*OD|F852WZVeAX`@dXG`-Rf&i1`t)qOwEx|=N8&Jg z!7m{5+JFyZJxR|?q{vzGOTU0SDu|j>?EHgI&)PZokFcHde(e_!`T9Pu_+cZpevt97 z`=4R?b6yI`FN%6pJ4(N}QPsRYAc zOMM5|gyr{s)Gr|Y;oZD@TYpZ{w@IVJV|B&R^}adT^=HdQZpA59 zNx!Q<+Akn}>)zVuOZ)cv^lX3WRu43b{JLZP0^*;o8pRT~75P8&=~?;1De^l{@e7Fj z2UFz#$){)Kmu%tJSL`o4(=Q6pYSBm_M>MtTcb7M$8-Cr*8>nr2ZFO^;ymwur1%D6O=qPOgu zA-x6B|0(&>?!Qp-rQN%gol>vnyTkIQG-X{J@3?x=eUn}vmwNr5(ku09+Sd1v=$-dq zNH47$@Au`4KX+C3$ozP-s+ZGS98FgDUu1slaW4eODiM2@z7(>jAZk;3W&D3t>6P)n z@_Sj)@s8NDONu>39}N3v!H92<^ovg@Inpmil^iFvI67JJ1#efl_+iOk!g_B}e9_yk zzMvxVA5wggzw~uqz8i<9L^bMsT)j=8o#JRqb>8jt z7DgRPzR2lPa-98io~7Dd?B89<7yJ8_e6jxs#TUJ0fA{TodN+=S{cy`(N0sYrk}c!F z;EulEM1K2fU%uFXnX*UhFWSkMBlh2}_#(gZU%q^qe{WL#%gHZ}exl@v{q;(($ZyW~ z2Ow$RD&I&EiT$eyBTSoL?Y=iV=5MZ`N|&&2nK?OBpy zPq%xqOjelqr>Z?$M8HrLG+liN6uRZRh-Culfm!%?R$89SR9?B?3eo{ z11a`5s|B$e-zKefzh3&+bUlWi&q+~(uNL!+KXO3F$3}wmj2UEdA(7C12vaNPW>)`sv)qLh|#XCxdZ9&-p05 zQm;QMz1e!D=w10#NH2|_5BT+x_B}X7Z=Sl&BYJyN^saa=q_-eC`Yd0s^ILJ0QSxQ} z>aGsASK}|k@*BSxmVZEs{OF*t{Gyk_@_*10mVaD|{LVD_E5q{dJSQywf)x2(2Z!yS zs!j-H-LliUzI=)2c}l*-^H7TXiqWwBA5rq9eeYNDrF}DpgzaDQ@38!%Qsh6ABES3N zVfk}6@lRA_z51Gx}Z!Yo&Qsl2u@c+o3581Q5?;jawey#M%`1X0FSH_va zPy2dhT&>#Cm+$J87yT?{TrHmM`%Uz=rRXhjFZ#y<&;< zet?s@IgL=yO?9;vMJDNl~v4XV(>nDtnwii=zjWJu)w^J|=9>%DsJi?!j{- zXI|tK?+pFohb2m{e82t);2#8EzF$8Ad^_Os{rZXLIbc`d^8Na9;5z`9@7Es%{6oOy z`}OAm7y0u2`s;zq?P~dc{oTMn06Fsg`p1F454e24{@1`|eJ9_qe;v3iyC0-}!q4sG zo$mzf4mtAu`aOZ~23)>he*$pvvwXk)GKI_c>lXr-R+I17KLlLtl<(L70=VdX6L!9> zyHG!E$o-?*Ea#53S7Ql-v)eZ;PUw$|s^8NaL;2H4c`}M=X zcLFZoubA zHQ-XOZGlg|&?yxAcLcs4@Q=bCc|Prnz-73R=hH3)F7Y7Gr`-r#`l&phwg|WzH=}3| z=zRtFH0a$Ic;1&CAaQsI@a=$$oFjpM8o1Q=Sm5UXm-?Ovyc@WTGiLyQ6!`mL4}TAY z{rnr?(q0z>->A(IcLM+Gz)OK|3;cTEhX5Bjw*YSfUJCwQz&n-v`++|IT$VdO0zLp- z`r~83e+yjN>sjEh19$6^DE_`H*LND`g$(TZJ@{3?_XO_due@lPny+2^6i3fV;D9gd zkkMl&0C5`9%N z6pi}gv(JHVCJu(7GB1yO)-NFSU2$f}o+(ku=cJ}?>+C6th92~BXHP-&tg=(q3A?7) zlW7Rs({^FVo`UEtC12J>hbsB5-DzFa7?$7im9YGhulV(n_-Rz~C4O2?4a+aRA}qgB z$rt-CQS!z9)lFgfJt^{!N|AqSiu}4SgyolC6|%o5Du2lLkHlxQ(ktuXA1S>D#>ESx z!4$pS*M#&IM7JyX(k??vzO>6~_u}iUu@dJM3q$gYqLLqFsqv1~>xW9O)a&m`uheV! zoUlL3?g{JdPSN|E((C%ylqjS6qtja)O>u;5C8WQ%pBuJk`h#J6Iv>u8@cf|PTPXhD zL+KU&NA5-9Sz+S;wxHgE=)sG#)ObhwMXi!A{h~WXeraF0UfnpJM>6MZ$WfGyRTR3b-9u+^(t2{!V|wuUJ{aD6zT8%NxhCydY!r{QGH7M+@b8r z#!rep-A{z=i5~ImEB4F{+LITJsOJjA|NY7y@qfpK;dt&E2;0;1XxN^ADtn||exvkC zyR>{ctT%cxthangSnp<+__*kOBSml27S`L4qPOWWU%vSNm=wKRZ{_o)zI`crJA-=j zqC)jNhSOUVjVgOwH4CD%l|6EwqEp4Ei^JlmLfPr=Qxry-i^Bey_w#VObPV|Q75@}m z>f_E2#nGpgUK!u&FAnSNe?FvlN;IVECGyWok>A%ImLL5pB)=dkOR@jT6!{&Ogyr}B z+Ltfa3H5XME^cXkb!k}6z;a)X#Q9^&9*MW16gg!th2{J%MNa8g!}iR4*_R{N_sUh= zO1r$Rsu4lOW*5M{*-Z`^(o&EG7j`8dt7~sqt7UNWIpOov1c&ff3U-~FFnum zw69nEzvUbs7yqBD^oswRz83bwf{9_h-AjG>qW6>(y`3p~OFF`OI|@U33!>dF59y`v ztvu`FQr~-0^tPtx9Vrg!rFDpsFZI1h*&}+NO3~YQMYz7pJ{Z;;J?Ga;^nRwp$3^ce zDS9if3hS+@2*T<#4A5?lJ zp8HeuF5Ej*-@NGPlz!dwD_^hl>*dNG>DLD;d!%2tUmNzrz`h}SilV;X_ zvW?G|IA5KjcWOgeZ-0v3e<-~YhdU{~5{I4NNU3j%-oX*yeyQ(gI(=N~dx+92^{u%% ztasK)DfNBTmoIw%nWDELMeksW-r>fOUOErD*4HcXbCHrS@zeCpaJ{;lL-O;Y#$Z1x zh@Mt@T|c7hy(jqgxbw0}QRPNHF6U)8D?8=9ta5(X&Ia`$vaHjJUi0OP|Ce0n@yzC-} z&xGFVfDc~j^fm&&19-#dd_OM+KJ#}@PNj2q^bGKk1&&XLae5i}yhB}uS}{)i4Y<57 zUFy3LnZfq2I>!;^_7A@{neonlIyrM8KLfmNAE$R7aDJ^T^W{3E%Z(y_?+oMeJ}Z$k z3;6uYodEaye^GQQ@Krat8i}7ffG@kr#YqeFb^)JuEbUO50ek`Qg@1AJKOcCX$iaKL zD}fII@BEze!w~#70=)Z1=YNsIuSes0jlARp)F6H~rS@Tb;6;a*0?z;+InCK4^*WGn z?k^39GqLA0;P=11SuCg(cJli&SpL*q$pA|7{Kc zhju7Qocs&;qR6$Q^rOjC5!O5W5ob>(E)_-7fXj2>Qr|s+ul%EH5y20l9gf3ZR8-=S zzy8efmtW=t_d`CvACvJGTvsdu-UhsJKi6KJz`KDDea8ie#M>g^t#`P3HG%&K@c#Rq zomIe}1HR%?C&&FxY83q%c>6LZX94*9wK%qO=o7v_Cy{xK7hdQ1;^%FF%X{OcT|Nwa z_BUNSc0m5efG^+G$!Q0EH1J0Jum_nDrv~7y3thh(27V>*kvkpG54;=r3OtuP2l#`) z3!ioEF7lrTKI>YCi=BT1-c#q81L&u30v|le@oUlk6RA4vpB}tF8E`ZOcq881Tnl^n zaZu)W;eMZt5B#_z-$xBfKeXO|mA-v(ZV_bZk{FMqF+`K!-xevtWyZ>w>?7<|SN#ZC@0=J!`S z`7%!aQShf-oQU2xfG@%KbH&anL}NLXnD?i{9$w}#-oDhA!K;M3K*@vFeQHYLL-i9I~MviwHemzQ?@4)8?>xqdVq?f5Y8HF(aa72`9T z&2su5bCP>u&o6;5|38O|-dBOIKs$=x$n~+D%oUC)Ab_}%k0;1>YzKEOFZ z#uo5agHB^gB}3hG3bcWzn%hKgXh@Ao)y3cRsUTLy#F6g z{tW2dgdVhG|17`8DHQoT0gu$Uv>))5+q*dFfSgYPFUPnf_M8D+zK>Q1ejD&vke?5{ z6L`~&t{qDd&$koKeqN39GV$Ae;8$Jk+C|nUOMp+?&k1NlyZ;vW=%?H`P>VQ!9r!9- zua@}CFLwUv;)$4&)N3o?Q}=R$b@?=jR%EUD|T514Pbi z;8*SA_un^xci=@!<&d+*ROh!^jKkuG9e^*wiwLX1KLGf0Jcm|}dVL1?!n2*j&WZ6AUw4Si3x@(9RrBU7;Il7q?IrEf3S8b()Cj+| ziyU=+eFN~3hkZNm1YU+8Fl#`4`MDXka}d{6WPBI|J{{}lTJZl2y!ixIFTppV``;|5 zWR;6^xxBR#@acHYp$2mH0WRO)m+|=^;I);`4-3Gb1$-Fuj@a1@yju0gOMuVE^C!;Q zD7pstbiCg(AM)=5-oB^vTNC>4Pk>Lud&!2ue-?PhDXyhN{s{1;ySj0s1pGC?8`L_d zh}Mzpw33bhV-f^hCftuMHGiQj$$ewXr3L<2JWrv~Gy zw9D4O`!Qb0xV;lJJ*aQD}1MkJ}3oHlz5b%ago&9Z)^HboNBOE>#_%pz#;W;0f zr(OnLI?EAT!T%fZ8D}^-3xMZ+!1;OjMb}SdeAo(jA?88p*E<29i{C4k@xKaqKgNye zkbe~LUUlAm0&w}h@I1^%Ex>2o=`_~EKbHWXtk%ib0k1pJwU>-n3xO~B3&vI0^JCyc zc=40O!!Ll#dm*~Oe;N3)qg*?RA65dF-!~UOY_gs6XZPbSPQ;%jz}NiHRY>IQ3_NqO zi$hr_?+d)T)-k1hj{sh=w=-~=YtHCI;1TXWiv06|FXtN~l%|4zCGeHF9$xFjMP0ya zFn%@zzZ-b9lD`D_pqh7n4!pF}>6P=iKLBre%+0@YU+M3_dvA3L+n{$1@b)fe_+rGv z*4sNjm;BfP%fR0qcvY*DUk?0m;H7H)c@ps1I1i<65~mA*_u)QZ8SoC^i)&ne8H7K- z3A_jE2l4-RflqtL*(ve1m~b8sqwhJvG9Eq$zI?B09`ud?FCB0aCv z_|P`a9_jD*0$@Wtx-#_7PDvEC5*Uk2WbabD`x z34A5yBWd4m!g-u8S?m;6LT@kl^1d=zA3hDdO0Bnl1HAA~r%~GRZ@~N1{i8`cI=?MC z+bQga-uD3?QS;ADkbZFh@Tn&`$+h6m1m1d;lOz4^WZ?2%BdOQ9z!zWX46lcrOMs7l z!}*80Nt~_~9M2Ku1OKkzxZdJQMbS@0{{7CuZQ%bF_~6eRAlLm?1Ml3z*)R2-RO+r*+qrfYGuiV%5BZ;d+fX`Of;Xf;Kp1}DI+VNE2%W$1XX>V?&8LW zA=F34hYaC7FAU@PJ!!{XfG=L`?38up!N6;;au(J={!zfICvFlWE;ou!1Kxg>vs12@ zUI4uDY1h8O?*J~pWA3y^(G9={@&182)MFv={>wLs^@=?Y0$=%IKmMNvK8gXg8}|PW z_#({9V$c5pZ@}|!bHV?Y;FmcIMNZzX&Y$w$;9>AffS3Oa<0tSk;C;_HJ4=990bh&< zuT}#;9(Zku@3(V-PgT#W+yZNkSk$4yeUV?eE$~9;78t@rd zZwUV_;N6ffdbjv6;_YDPw+_^6d*J=euD{d(-v@Z+O$W?FyB`g__E|Tci2Rd)Pk+-9 z1wRk?qO%=R1UXj$uT*|p0K5U?r^MkR;H?wf_#^S~IPg04ywfj%cW>hCTnW9e0ip}|z#DL0ApN2V_|T5d5Az}aV&J{%dh%T0YcM`f2EPmVv_y_+}z!$6gv!?-{f1YpWdB6uh?b==JX$L-}t}|Q%yc*YyrCsh6 z`Ix`N&p!aZvcSaynmu|HxcvUhT-g5t@WoSn{wu&M)%>^yc+YvxZ+(!n#U6-TbzVFT zcn{w1Eq3k)ykhd^v4jldd@HxwD}6IpFi)m`>osz~%k(9l-w$ym519&oJ;w zdpiF#T;9CK2Q`a+h1-|4hS0m|P9|b;FjoXI+Z&u@f9q=wZ_b&c9S#XSR(_zn< zz?Xl?*;xhrD&UKL?EJO>_(I_I=R05l+T}su-9Otn&Zx#X`6%$E>VCvCz^C2sh_#4^ zmw@-GaqJ(!m*D>UQrI)`BhJqiINy|dy&rg|nrHU_KKmRuuFC!E8sN3V&Yn52{}|xY zUUQyAcZ?c=FILx8z9jhBuK$*yzzx9VcVy(bk$Zq=7Pa=%|M{(lAhDs_GD-@xlncYdoxJ8oIw z{8NPYTIaj$Xh*_%zHWHZDQtq?a`0PfUAr^`uL9nM=Tx0nqv)3ZkFN89%XG>f_`}46 z5Zcw!?yubqA+~0knZ|}@re+#4^P1kFA>NwaW{Rd>^)?zZ8wMdZD?jaQ2!q(r+SrzM zH)GfkVh1fDgoY3s8{3cHeV+3@&2)F>{d}1EcAj(3J@?#m|2+43-YVkIeK5p)H1C~( ze3aEs3*dd$xVb^~pDTLeJ#CJ24ZN3gu$}PV!82L^YCAp%55|c7tr*Y}1=?aX@- z;d$hF?MGk2w^;W_4wxhLZM;MhKnC_40gvWfL;?I4hP!^&@3*airz4+{D-ELl^ucRh z7C|3>=oyxB(`Sf(I?!_g`Ws&oPy(+)Pt(cL-?d$ChR0j?*B*i=oGkTHe?9^4W1XdO z*bk55KB>m@yYO~v-S-td__^q>Cl2>B_eb6FG@a*3Te1It;JsF!ISHO%JwLSwo@1T6 zSOxFPoE}#f!?#%L@lEiOhs5#PUbn#W4wSgkIJp--;XbftKHKPbPr%!(^Ns(6N3ovD z@UC*4kKj4h_~^_N|Aef19RlzEttim-%hB-InKEzDymS&gg8T2=*G|3ef#+M}_#feQtY5_2j`KRaDM11x2|b^~Ygo4?!}m!O|0G-c zoJYWGACh_LDDua`w_E28QsIqF(!MRoXT$TjU#WgO2Ocvh@vQb=2p_ZNKeg}<%g&qN z(bl+gKRn}Xu}AyYR`_U>WH7boW%&4B66e`smh%BTW`*!=)ay(5rWYk{MVsS%3-@(N zjq;I?oG*SJSt62Z&tb}+6Fz|aQSeP;;{Q6C9yuBC=yuVciJd-pFW)gT;cmnr>YFU?` z3y->54Aae&3$EY$ zAf-FbI(W{rLNc-cQg{zH{CnWPfe%>q`W-ym+UI{5UehiLG~TwsBdq6`{sC{fQQ}1H zd=EafLn^9vPQZQpNV`lhenqE?KijPP&d0z@c;ATXUkndV3eo+seE1OSyC8m81J5fJ z|0m-AdU*P{fE?t12j6Dx2i_0w_+N?7TI8RBXCEtE?R*&?$3BL}!g37yD9e=cnr^>Xu0VszgQeRio9RBwGUGWAG4lgS`YVI@pCOa-Wp$ShsTf~ zw7!3Y53Lm9$NzsUoLY_fG6<&TaC|?;rYa&+OrJa`UCM#3wjFRgYQYZZ-=ip z+*|K3zcm-dss}@Bw%a=U6hy zZ(qQ}K8d#=_I?j9xL!P??fAnC@pA;<2c3=nG`OEU6AxbmPsh)CE-M$F_cv)5wZ8}+ z+B!X7Rlt)t|4eu}b#VQj!EKIw8sHA=!FnmiX@iHX`-9!^;h;p0#>4CI%rnGcWsZD4 zg~#12eyfGgSRnohGH*|Y9|`X|TI9Rov*DfJ3CMw;1g}{vK>OnYc-(Q)AA6BM8@}aU z(cc0uh5M~Me+4|^3aP1|cxZ$V+%7y8JrBS;IbWR*?}o>*k*4x*!t;6FS?8tyf+upG zBmq4KE)>5-z9#V;0gr>1S@(A`;62tn^Bj04=R>qzE`~eSdF*T9<2)DHL%Ge$)5Oo3 zCp+L{r%Rk@9(x9!%y}O9tK+-_4_eO){|i3CbH{CzJE=TT+EH4;aSmA|{;7LU?1{#p zM0h&)<+a=tc=Fc0JyX_@WhfCo(3O!K7l76DgM!Xvae|fcmHH!Q0(m7OD;GP95Z_KOqXt!t%Rs^Mh8<0GWK;wX0|JcE5R)n5TGvECc=8+e1wYL2I96PKWp*^=)ZKhkquJAEjXbsKNGIsOIt=9u7=0mM82ZnFuY_){IB+01s}8aGdIIy&yl#Q z$IkmyzqQZ#I6Qrkl&j;yi}18Zr2nR(=RNpvkr+OT-~J7cw&uf8OT=$E8${5Lo}=I; zZ;PHDDaM%tZ{$9*+H*pZQhz_$IMm+kF_` z!gCfG*gp=}@2^q69b`JP8@GL>(!RP+ax}dAduf+;^qc~Bcs^?gex~8B|A!tIp#CpF zzQOY62Kd-HqMzZ!`3=17d+~n~?S40Wpo4r)Ts;aO{Wj7oI1ziEHr%zRai8h-yoP)l z_qBVFe-|G4x#Stu^BFv6tK>ah@9(=*{1#{JS04f2)Dh`v?n3`@@NIt-uKt+^kH$aR z?ml=Y>%F^$Swlyz(1@2UepEds9f=A2~fBLX<1fKXGQ5;17H}L!?q+YsSo_V_XIfC&e9{J

#^8>{hnl`cJ$KxV=Mgsrox+T)vt6$tY7n-c)Zom#+-~hIe%9Kvk0p#xAaB(Oq(P3 zL2`T&yDq%hR{w*)IdmG*wGYE){qGw7B*!QHe>|Ao?p-&j@g=eUBtC>px1^oCUKw;- z{WtE5{U`lc|8{#xj!XR3V0MN0{wM#({+r?0ZS_CDjs9((zW=*|ZL9vNOXK|Ox(|l1 z>6RRyv~Le@w$*=E{dX>1I{&ujlH-&4Z<6`>*U#E_+C}zb)0ek*$?*wv!yD@%pMYMI z<5wQI{DU}}rR(qE@Nr^{ys;Mhr`dZSYi)n+SX@)bmp&Vhu)EooaH5m(C-b-4i=Vq4 mKlp{MnDGBKeQo;k_RjZjSLwEnpFJo$J?5#mkBo2p@&5}+T#kwW literal 1980296 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%0ASk{_BzICLxbF96Vk)gU1!_*OxJbf{C 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

?8*8?A8KRG6g_^~){;1hcLz+jBY8vKT}17v&^ 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

_c8#6THrq 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 $%lo~26aF;JyApY{-PmzOQ(gtLR))Ne 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

-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

&U3&+iWx=k8`~eP>+%ZMm@?*2 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

mB0AI4mpQxej~`+d1VMhuIx_F>F_r_L%LIH_zkr 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%0D@8TcPyK5%d8KhUtehbf27uQJrZr0DE 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ྨQv8RxmTzbE57FP($4-79dmTkOqzUV?ES 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≤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

c$F~cK*C^*$aEc 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

p{!#d);VZu$`hO?t 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 Date: Thu, 14 Dec 2023 22:13:29 +0100 Subject: [PATCH 269/313] crypto/tls: align FIPS-only mode with BoringSSL policy This enables TLS 1.3, disables P-521, and disables non-ECDHE suites. Fixes #64717 Updates #62372 Change-Id: I3a65b239ef0198bbdbe5e55e0810e7128f90a091 Reviewed-on: https://go-review.googlesource.com/c/go/+/549975 Reviewed-by: Roland Shoemaker LUCI-TryBot-Result: Go LUCI Reviewed-by: Than McIntosh --- src/crypto/internal/boring/aes.go | 29 +++++++--- src/crypto/internal/boring/notboring.go | 1 + src/crypto/tls/boring.go | 26 +++++---- src/crypto/tls/boring_test.go | 69 +++++++++++++++++------- src/crypto/tls/cipher_suites.go | 8 ++- src/crypto/tls/handshake_client.go | 4 +- src/crypto/tls/handshake_client_tls13.go | 4 -- src/crypto/tls/handshake_server_test.go | 28 ++++++---- src/crypto/tls/handshake_server_tls13.go | 7 ++- src/crypto/tls/notboring.go | 2 + src/crypto/x509/boring.go | 4 +- 11 files changed, 125 insertions(+), 57 deletions(-) diff --git a/src/crypto/internal/boring/aes.go b/src/crypto/internal/boring/aes.go index 8819f576f4..d18ed5cdc5 100644 --- a/src/crypto/internal/boring/aes.go +++ b/src/crypto/internal/boring/aes.go @@ -228,26 +228,41 @@ func (c *aesCipher) NewGCM(nonceSize, tagSize int) (cipher.AEAD, error) { if tagSize != gcmTagSize { return cipher.NewGCMWithTagSize(&noGCM{c}, tagSize) } - return c.newGCM(false) + return c.newGCM(0) } +const ( + VersionTLS12 = 0x0303 + VersionTLS13 = 0x0304 +) + func NewGCMTLS(c cipher.Block) (cipher.AEAD, error) { - return c.(*aesCipher).newGCM(true) + return c.(*aesCipher).newGCM(VersionTLS12) } -func (c *aesCipher) newGCM(tls bool) (cipher.AEAD, error) { +func NewGCMTLS13(c cipher.Block) (cipher.AEAD, error) { + return c.(*aesCipher).newGCM(VersionTLS13) +} + +func (c *aesCipher) newGCM(tlsVersion uint16) (cipher.AEAD, error) { var aead *C.GO_EVP_AEAD switch len(c.key) * 8 { case 128: - if tls { + switch tlsVersion { + case VersionTLS12: aead = C._goboringcrypto_EVP_aead_aes_128_gcm_tls12() - } else { + case VersionTLS13: + aead = C._goboringcrypto_EVP_aead_aes_128_gcm_tls13() + default: aead = C._goboringcrypto_EVP_aead_aes_128_gcm() } case 256: - if tls { + switch tlsVersion { + case VersionTLS12: aead = C._goboringcrypto_EVP_aead_aes_256_gcm_tls12() - } else { + case VersionTLS13: + aead = C._goboringcrypto_EVP_aead_aes_256_gcm_tls13() + default: aead = C._goboringcrypto_EVP_aead_aes_256_gcm() } default: diff --git a/src/crypto/internal/boring/notboring.go b/src/crypto/internal/boring/notboring.go index 361dec9672..02bc468a0d 100644 --- a/src/crypto/internal/boring/notboring.go +++ b/src/crypto/internal/boring/notboring.go @@ -50,6 +50,7 @@ func NewHMAC(h func() hash.Hash, key []byte) hash.Hash { panic("boringcrypto: no func NewAESCipher(key []byte) (cipher.Block, error) { panic("boringcrypto: not available") } func NewGCMTLS(cipher.Block) (cipher.AEAD, error) { panic("boringcrypto: not available") } +func NewGCMTLS13(cipher.Block) (cipher.AEAD, error) { panic("boringcrypto: not available") } type PublicKeyECDSA struct{ _ int } type PrivateKeyECDSA struct{ _ int } diff --git a/src/crypto/tls/boring.go b/src/crypto/tls/boring.go index 1827f76458..aad96b1c74 100644 --- a/src/crypto/tls/boring.go +++ b/src/crypto/tls/boring.go @@ -6,9 +6,10 @@ package tls -import ( - "crypto/internal/boring/fipstls" -) +import "crypto/internal/boring/fipstls" + +// The FIPS-only policies enforced here currently match BoringSSL's +// ssl_policy_fips_202205. // needFIPS returns fipstls.Required(); it avoids a new import in common.go. func needFIPS() bool { @@ -17,19 +18,19 @@ func needFIPS() bool { // fipsMinVersion replaces c.minVersion in FIPS-only mode. func fipsMinVersion(c *Config) uint16 { - // FIPS requires TLS 1.2. + // FIPS requires TLS 1.2 or TLS 1.3. return VersionTLS12 } // fipsMaxVersion replaces c.maxVersion in FIPS-only mode. func fipsMaxVersion(c *Config) uint16 { - // FIPS requires TLS 1.2. - return VersionTLS12 + // FIPS requires TLS 1.2 or TLS 1.3. + return VersionTLS13 } // default defaultFIPSCurvePreferences is the FIPS-allowed curves, // in preference order (most preferable first). -var defaultFIPSCurvePreferences = []CurveID{CurveP256, CurveP384, CurveP521} +var defaultFIPSCurvePreferences = []CurveID{CurveP256, CurveP384} // fipsCurvePreferences replaces c.curvePreferences in FIPS-only mode. func fipsCurvePreferences(c *Config) []CurveID { @@ -54,8 +55,6 @@ var defaultCipherSuitesFIPS = []uint16{ TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, - TLS_RSA_WITH_AES_128_GCM_SHA256, - TLS_RSA_WITH_AES_256_GCM_SHA384, } // fipsCipherSuites replaces c.cipherSuites in FIPS-only mode. @@ -75,8 +74,14 @@ func fipsCipherSuites(c *Config) []uint16 { return list } +// defaultCipherSuitesTLS13FIPS are the FIPS-allowed cipher suites for TLS 1.3. +var defaultCipherSuitesTLS13FIPS = []uint16{ + TLS_AES_128_GCM_SHA256, + TLS_AES_256_GCM_SHA384, +} + // fipsSupportedSignatureAlgorithms currently are a subset of -// defaultSupportedSignatureAlgorithms without Ed25519 and SHA-1. +// defaultSupportedSignatureAlgorithms without Ed25519, SHA-1, and P-521. var fipsSupportedSignatureAlgorithms = []SignatureScheme{ PSSWithSHA256, PSSWithSHA384, @@ -86,7 +91,6 @@ var fipsSupportedSignatureAlgorithms = []SignatureScheme{ PKCS1WithSHA384, ECDSAWithP384AndSHA384, PKCS1WithSHA512, - ECDSAWithP521AndSHA512, } // supportedSignatureAlgorithms returns the supported signature algorithms. diff --git a/src/crypto/tls/boring_test.go b/src/crypto/tls/boring_test.go index 085ff5713e..a192a657b4 100644 --- a/src/crypto/tls/boring_test.go +++ b/src/crypto/tls/boring_test.go @@ -25,6 +25,31 @@ import ( "time" ) +func allCipherSuitesIncludingTLS13() []uint16 { + s := allCipherSuites() + for _, suite := range cipherSuitesTLS13 { + s = append(s, suite.id) + } + return s +} + +func isTLS13CipherSuite(id uint16) bool { + for _, suite := range cipherSuitesTLS13 { + if id == suite.id { + return true + } + } + return false +} + +func generateKeyShare(group CurveID) keyShare { + key, err := generateECDHEKey(rand.Reader, group) + if err != nil { + panic(err) + } + return keyShare{group: group, data: key.PublicKey().Bytes()} +} + func TestBoringServerProtocolVersion(t *testing.T) { test := func(name string, v uint16, msg string) { t.Run(name, func(t *testing.T) { @@ -33,8 +58,11 @@ func TestBoringServerProtocolVersion(t *testing.T) { clientHello := &clientHelloMsg{ vers: v, random: make([]byte, 32), - cipherSuites: allCipherSuites(), + cipherSuites: allCipherSuitesIncludingTLS13(), compressionMethods: []uint8{compressionNone}, + supportedCurves: defaultCurvePreferences, + keyShares: []keyShare{generateKeyShare(CurveP256)}, + supportedPoints: []uint8{pointFormatUncompressed}, supportedVersions: []uint16{v}, } testClientHelloFailure(t, serverConfig, clientHello, msg) @@ -48,25 +76,25 @@ func TestBoringServerProtocolVersion(t *testing.T) { fipstls.Force() defer fipstls.Abandon() - test("VersionSSL30", VersionSSL30, "client offered only unsupported versions") - test("VersionTLS10", VersionTLS10, "client offered only unsupported versions") - test("VersionTLS11", VersionTLS11, "client offered only unsupported versions") - test("VersionTLS12", VersionTLS12, "") - test("VersionTLS13", VersionTLS13, "client offered only unsupported versions") + test("VersionSSL30/fipstls", VersionSSL30, "client offered only unsupported versions") + test("VersionTLS10/fipstls", VersionTLS10, "client offered only unsupported versions") + test("VersionTLS11/fipstls", VersionTLS11, "client offered only unsupported versions") + test("VersionTLS12/fipstls", VersionTLS12, "") + test("VersionTLS13/fipstls", VersionTLS13, "") } func isBoringVersion(v uint16) bool { - return v == VersionTLS12 + return v == VersionTLS12 || v == VersionTLS13 } func isBoringCipherSuite(id uint16) bool { switch id { - case TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, + case TLS_AES_128_GCM_SHA256, + TLS_AES_256_GCM_SHA384, + TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, - TLS_RSA_WITH_AES_128_GCM_SHA256, - TLS_RSA_WITH_AES_256_GCM_SHA384: + TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: return true } return false @@ -74,7 +102,7 @@ func isBoringCipherSuite(id uint16) bool { func isBoringCurve(id CurveID) bool { switch id { - case CurveP256, CurveP384, CurveP521: + case CurveP256, CurveP384: return true } return false @@ -86,7 +114,7 @@ func isECDSA(id uint16) bool { return suite.flags&suiteECSign == suiteECSign } } - panic(fmt.Sprintf("unknown cipher suite %#x", id)) + return false // TLS 1.3 cipher suites are not tied to the signature algorithm. } func isBoringSignatureScheme(alg SignatureScheme) bool { @@ -98,7 +126,6 @@ func isBoringSignatureScheme(alg SignatureScheme) bool { PKCS1WithSHA384, ECDSAWithP384AndSHA384, PKCS1WithSHA512, - ECDSAWithP521AndSHA512, PSSWithSHA256, PSSWithSHA384, PSSWithSHA512: @@ -109,10 +136,9 @@ func isBoringSignatureScheme(alg SignatureScheme) bool { func TestBoringServerCipherSuites(t *testing.T) { serverConfig := testConfig.Clone() - serverConfig.CipherSuites = allCipherSuites() serverConfig.Certificates = make([]Certificate, 1) - for _, id := range allCipherSuites() { + for _, id := range allCipherSuitesIncludingTLS13() { if isECDSA(id) { serverConfig.Certificates[0].Certificate = [][]byte{testECDSACertificate} serverConfig.Certificates[0].PrivateKey = testECDSAPrivateKey @@ -121,14 +147,19 @@ func TestBoringServerCipherSuites(t *testing.T) { serverConfig.Certificates[0].PrivateKey = testRSAPrivateKey } serverConfig.BuildNameToCertificate() - t.Run(fmt.Sprintf("suite=%#x", id), func(t *testing.T) { + t.Run(fmt.Sprintf("suite=%s", CipherSuiteName(id)), func(t *testing.T) { clientHello := &clientHelloMsg{ vers: VersionTLS12, random: make([]byte, 32), cipherSuites: []uint16{id}, compressionMethods: []uint8{compressionNone}, supportedCurves: defaultCurvePreferences, + keyShares: []keyShare{generateKeyShare(CurveP256)}, supportedPoints: []uint8{pointFormatUncompressed}, + supportedVersions: []uint16{VersionTLS12}, + } + if isTLS13CipherSuite(id) { + clientHello.supportedVersions = []uint16{VersionTLS13} } testClientHello(t, serverConfig, clientHello) @@ -160,7 +191,9 @@ func TestBoringServerCurves(t *testing.T) { cipherSuites: []uint16{TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256}, compressionMethods: []uint8{compressionNone}, supportedCurves: []CurveID{curveid}, + keyShares: []keyShare{generateKeyShare(curveid)}, supportedPoints: []uint8{pointFormatUncompressed}, + supportedVersions: []uint16{VersionTLS12}, } testClientHello(t, serverConfig, clientHello) @@ -279,7 +312,7 @@ func TestBoringClientHello(t *testing.T) { } if !isBoringVersion(hello.vers) { - t.Errorf("client vers=%#x, want %#x (TLS 1.2)", hello.vers, VersionTLS12) + t.Errorf("client vers=%#x", hello.vers) } for _, v := range hello.supportedVersions { if !isBoringVersion(v) { diff --git a/src/crypto/tls/cipher_suites.go b/src/crypto/tls/cipher_suites.go index 6f5bc37197..636689beb4 100644 --- a/src/crypto/tls/cipher_suites.go +++ b/src/crypto/tls/cipher_suites.go @@ -556,7 +556,13 @@ func aeadAESGCMTLS13(key, nonceMask []byte) aead { if err != nil { panic(err) } - aead, err := cipher.NewGCM(aes) + var aead cipher.AEAD + if boring.Enabled { + aead, err = boring.NewGCMTLS13(aes) + } else { + boring.Unreachable() + aead, err = cipher.NewGCM(aes) + } if err != nil { panic(err) } diff --git a/src/crypto/tls/handshake_client.go b/src/crypto/tls/handshake_client.go index f016e01b4b..89004c2898 100644 --- a/src/crypto/tls/handshake_client.go +++ b/src/crypto/tls/handshake_client.go @@ -139,7 +139,9 @@ func (c *Conn) makeClientHello() (*clientHelloMsg, *ecdh.PrivateKey, error) { if len(hello.supportedVersions) == 1 { hello.cipherSuites = nil } - if hasAESGCMHardwareSupport { + if needFIPS() { + hello.cipherSuites = append(hello.cipherSuites, defaultCipherSuitesTLS13FIPS...) + } else if hasAESGCMHardwareSupport { hello.cipherSuites = append(hello.cipherSuites, defaultCipherSuitesTLS13...) } else { hello.cipherSuites = append(hello.cipherSuites, defaultCipherSuitesTLS13NoAES...) diff --git a/src/crypto/tls/handshake_client_tls13.go b/src/crypto/tls/handshake_client_tls13.go index 2f59f6888c..a84cede1b0 100644 --- a/src/crypto/tls/handshake_client_tls13.go +++ b/src/crypto/tls/handshake_client_tls13.go @@ -41,10 +41,6 @@ type clientHandshakeStateTLS13 struct { func (hs *clientHandshakeStateTLS13) handshake() error { c := hs.c - if needFIPS() { - return errors.New("tls: internal error: TLS 1.3 reached in FIPS mode") - } - // The server must not select TLS 1.3 in a renegotiation. See RFC 8446, // sections 4.1.2 and 4.1.3. if c.handshakes > 0 { diff --git a/src/crypto/tls/handshake_server_test.go b/src/crypto/tls/handshake_server_test.go index 15db760716..c0a86a4984 100644 --- a/src/crypto/tls/handshake_server_test.go +++ b/src/crypto/tls/handshake_server_test.go @@ -27,6 +27,7 @@ import ( ) func testClientHello(t *testing.T, serverConfig *Config, m handshakeMessage) { + t.Helper() testClientHelloFailure(t, serverConfig, m, "") } @@ -52,23 +53,32 @@ func testClientHelloFailure(t *testing.T, serverConfig *Config, m handshakeMessa ctx := context.Background() conn := Server(s, serverConfig) ch, err := conn.readClientHello(ctx) - hs := serverHandshakeState{ - c: conn, - ctx: ctx, - clientHello: ch, - } - if err == nil { + if err == nil && conn.vers == VersionTLS13 { + hs := serverHandshakeStateTLS13{ + c: conn, + ctx: ctx, + clientHello: ch, + } err = hs.processClientHello() - } - if err == nil { - err = hs.pickCipherSuite() + } else if err == nil { + hs := serverHandshakeState{ + c: conn, + ctx: ctx, + clientHello: ch, + } + err = hs.processClientHello() + if err == nil { + err = hs.pickCipherSuite() + } } s.Close() if len(expectedSubStr) == 0 { if err != nil && err != io.EOF { + t.Helper() t.Errorf("Got error: %s; expected to succeed", err) } } else if err == nil || !strings.Contains(err.Error(), expectedSubStr) { + t.Helper() t.Errorf("Got error: %v; expected to match substring '%s'", err, expectedSubStr) } } diff --git a/src/crypto/tls/handshake_server_tls13.go b/src/crypto/tls/handshake_server_tls13.go index 21d798de37..b68ff9db4c 100644 --- a/src/crypto/tls/handshake_server_tls13.go +++ b/src/crypto/tls/handshake_server_tls13.go @@ -45,10 +45,6 @@ type serverHandshakeStateTLS13 struct { func (hs *serverHandshakeStateTLS13) handshake() error { c := hs.c - if needFIPS() { - return errors.New("tls: internal error: TLS 1.3 reached in FIPS mode") - } - // For an overview of the TLS 1.3 handshake, see RFC 8446, Section 2. if err := hs.processClientHello(); err != nil { return err @@ -163,6 +159,9 @@ func (hs *serverHandshakeStateTLS13) processClientHello() error { if !hasAESGCMHardwareSupport || !aesgcmPreferred(hs.clientHello.cipherSuites) { preferenceList = defaultCipherSuitesTLS13NoAES } + if needFIPS() { + preferenceList = defaultCipherSuitesTLS13FIPS + } for _, suiteID := range preferenceList { hs.suite = mutualCipherSuiteTLS13(hs.clientHello.cipherSuites, suiteID) if hs.suite != nil { diff --git a/src/crypto/tls/notboring.go b/src/crypto/tls/notboring.go index 7d85b39c59..edccb44d87 100644 --- a/src/crypto/tls/notboring.go +++ b/src/crypto/tls/notboring.go @@ -18,3 +18,5 @@ func fipsCurvePreferences(c *Config) []CurveID { panic("fipsCurvePreferences") } func fipsCipherSuites(c *Config) []uint16 { panic("fipsCipherSuites") } var fipsSupportedSignatureAlgorithms []SignatureScheme + +var defaultCipherSuitesTLS13FIPS []uint16 diff --git a/src/crypto/x509/boring.go b/src/crypto/x509/boring.go index 095b58c315..e6237e96bb 100644 --- a/src/crypto/x509/boring.go +++ b/src/crypto/x509/boring.go @@ -22,7 +22,7 @@ func boringAllowCert(c *Certificate) bool { } // The key must be RSA 2048, RSA 3072, RSA 4096, - // or ECDSA P-256, P-384, P-521. + // or ECDSA P-256 or P-384. switch k := c.PublicKey.(type) { default: return false @@ -31,7 +31,7 @@ func boringAllowCert(c *Certificate) bool { return false } case *ecdsa.PublicKey: - if k.Curve != elliptic.P256() && k.Curve != elliptic.P384() && k.Curve != elliptic.P521() { + if k.Curve != elliptic.P256() && k.Curve != elliptic.P384() { return false } } From 5b84d50038ae852e638631b0a7e71c719e41d240 Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Mon, 18 Dec 2023 16:00:06 -0500 Subject: [PATCH 270/313] test: skip rangegen.go on 32-bit platforms Add a skip for this test that effectively disables it for 32-bit platforms, so as to not run into timeouts or OOMs on smaller machines. Fixes #64789. Change-Id: I2d428e1dccae62b8bb1a69c5f95699692a282bbb Reviewed-on: https://go-review.googlesource.com/c/go/+/550975 LUCI-TryBot-Result: Go LUCI Reviewed-by: Carlos Amedee --- test/rangegen.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/test/rangegen.go b/test/rangegen.go index bdcf099862..8231c64db7 100644 --- a/test/rangegen.go +++ b/test/rangegen.go @@ -25,6 +25,7 @@ import ( "bytes" "fmt" "log" + "math/bits" "os" "os/exec" "strings" @@ -37,6 +38,13 @@ func main() { log.SetFlags(0) log.SetPrefix("rangegen: ") + if !long && bits.UintSize == 32 { + // Skip this test on 32-bit platforms, where it seems to + // cause timeouts and build problems. + skip() + return + } + b := new(bytes.Buffer) tests := "" flush := func(force bool) { @@ -331,3 +339,12 @@ func run(f func(*output, int)int, i int) *output { } ` + +func skip() { + const code = ` +package main +func main() { +} +` + fmt.Printf("%s\n", code) +} From 90daaa0576aafd66b3b0fb9e5c4814fbdcc4b5ce Mon Sep 17 00:00:00 2001 From: Guoqi Chen Date: Fri, 15 Dec 2023 17:35:40 +0800 Subject: [PATCH 271/313] doc/go1.22: announcing support address sanitizer on Loong64 Change-Id: Ide5eddc6c04347ada468bc8dd4c27d9b492cf0ff Reviewed-on: https://go-review.googlesource.com/c/go/+/550176 LUCI-TryBot-Result: Go LUCI Reviewed-by: Bryan Mills Auto-Submit: Dmitri Shuralyov Reviewed-by: Mauri de Souza Meneguzzo Reviewed-by: David Chase --- doc/go1.22.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 3d63e99eeb..458e17954d 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -965,7 +965,7 @@ We plan to include an API migration tool in a future release, likely Go 1.23. The loong64 port now supports passing function arguments and results using registers.

- The linux/loong64 port now supports the memory sanitizer, new-style linker relocations, and the plugin build mode. + The linux/loong64 port now supports the address sanitizer, memory sanitizer, new-style linker relocations, and the plugin build mode.

OpenBSD

From 6fe0d3758b35afcc342832e376d8d985a5a29070 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Mon, 18 Dec 2023 18:13:30 -0800 Subject: [PATCH 272/313] cmd/compile: remove interfacecycles debug flag Per the discussion on the issue, since no problems related to this appeared since Go 1.20, remove the ability to disable the check for anonymous interface cycles permanently. Adjust various tests accordingly. For #56103. Change-Id: Ica2b28752dca08934bbbc163a9b062ae1eb2a834 Reviewed-on: https://go-review.googlesource.com/c/go/+/550896 Run-TryBot: Robert Griesemer Auto-Submit: Robert Griesemer Reviewed-by: Robert Griesemer TryBot-Result: Gopher Robot Reviewed-by: Matthew Dempsky --- src/cmd/compile/internal/base/debug.go | 1 - src/cmd/compile/internal/noder/irgen.go | 27 +++++++++---------- .../compile/internal/types2/stdlib_test.go | 1 + src/go/types/stdlib_test.go | 1 + test/fixedbugs/bug398.go | 10 +++---- test/fixedbugs/issue16369.go | 4 +-- 6 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/cmd/compile/internal/base/debug.go b/src/cmd/compile/internal/base/debug.go index a85f0139fc..aadd950a0a 100644 --- a/src/cmd/compile/internal/base/debug.go +++ b/src/cmd/compile/internal/base/debug.go @@ -36,7 +36,6 @@ type DebugFlags struct { Gossahash string `help:"hash value for use in debugging the compiler"` InlFuncsWithClosures int `help:"allow functions with closures to be inlined" concurrent:"ok"` InlStaticInit int `help:"allow static initialization of inlined calls" concurrent:"ok"` - InterfaceCycles int `help:"allow anonymous interface cycles"` Libfuzzer int `help:"enable coverage instrumentation for libfuzzer"` LoopVar int `help:"shared (0, default), 1 (private loop variables), 2, private + log"` LoopVarHash string `help:"for debugging changes in loop behavior. Overrides experiment and loopvar flag."` diff --git a/src/cmd/compile/internal/noder/irgen.go b/src/cmd/compile/internal/noder/irgen.go index 46511d1f97..d909f3467b 100644 --- a/src/cmd/compile/internal/noder/irgen.go +++ b/src/cmd/compile/internal/noder/irgen.go @@ -92,23 +92,22 @@ func checkFiles(m posMap, noders []*noder) (*types2.Package, *types2.Info) { } // Check for anonymous interface cycles (#56103). - if base.Debug.InterfaceCycles == 0 { - var f cycleFinder - for _, file := range files { - syntax.Inspect(file, func(n syntax.Node) bool { - if n, ok := n.(*syntax.InterfaceType); ok { - if f.hasCycle(n.GetTypeInfo().Type.(*types2.Interface)) { - base.ErrorfAt(m.makeXPos(n.Pos()), errors.InvalidTypeCycle, "invalid recursive type: anonymous interface refers to itself (see https://go.dev/issue/56103)") + // TODO(gri) move this code into the type checkers (types2 and go/types) + var f cycleFinder + for _, file := range files { + syntax.Inspect(file, func(n syntax.Node) bool { + if n, ok := n.(*syntax.InterfaceType); ok { + if f.hasCycle(n.GetTypeInfo().Type.(*types2.Interface)) { + base.ErrorfAt(m.makeXPos(n.Pos()), errors.InvalidTypeCycle, "invalid recursive type: anonymous interface refers to itself (see https://go.dev/issue/56103)") - for typ := range f.cyclic { - f.cyclic[typ] = false // suppress duplicate errors - } + for typ := range f.cyclic { + f.cyclic[typ] = false // suppress duplicate errors } - return false } - return true - }) - } + return false + } + return true + }) } base.ExitIfErrors() diff --git a/src/cmd/compile/internal/types2/stdlib_test.go b/src/cmd/compile/internal/types2/stdlib_test.go index 7c14e3476e..405af78572 100644 --- a/src/cmd/compile/internal/types2/stdlib_test.go +++ b/src/cmd/compile/internal/types2/stdlib_test.go @@ -311,6 +311,7 @@ func TestStdFixed(t *testing.T) { testTestDir(t, filepath.Join(testenv.GOROOT(t), "test", "fixedbugs"), "bug248.go", "bug302.go", "bug369.go", // complex test instructions - ignore + "bug398.go", // types2 doesn't check for anonymous interface cycles (go.dev/issue/56103) "issue6889.go", // gc-specific test "issue11362.go", // canonical import path check "issue16369.go", // types2 handles this correctly - not an issue diff --git a/src/go/types/stdlib_test.go b/src/go/types/stdlib_test.go index f90f9388c2..a89cd858db 100644 --- a/src/go/types/stdlib_test.go +++ b/src/go/types/stdlib_test.go @@ -312,6 +312,7 @@ func TestStdFixed(t *testing.T) { testTestDir(t, filepath.Join(testenv.GOROOT(t), "test", "fixedbugs"), "bug248.go", "bug302.go", "bug369.go", // complex test instructions - ignore + "bug398.go", // go/types doesn't check for anonymous interface cycles (go.dev/issue/56103) "issue6889.go", // gc-specific test "issue11362.go", // canonical import path check "issue16369.go", // go/types handles this correctly - not an issue diff --git a/test/fixedbugs/bug398.go b/test/fixedbugs/bug398.go index db3e43c7f9..2b00f6074d 100644 --- a/test/fixedbugs/bug398.go +++ b/test/fixedbugs/bug398.go @@ -1,4 +1,4 @@ -// compile -d=interfacecycles +// errorcheck // Copyright 2012 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style @@ -11,11 +11,11 @@ package p // exported interfaces -type I1 interface { +type I1 interface { // ERROR "invalid recursive type: anonymous interface refers to itself" F() interface{I1} } -type I2 interface { +type I2 interface { // ERROR "invalid recursive type: anonymous interface refers to itself" F() interface{I2} } @@ -28,11 +28,11 @@ func F() bool { // non-exported interfaces -type i1 interface { +type i1 interface { // ERROR "invalid recursive type: anonymous interface refers to itself" F() interface{i1} } -type i2 interface { +type i2 interface { // ERROR "invalid recursive type: anonymous interface refers to itself" F() interface{i2} } diff --git a/test/fixedbugs/issue16369.go b/test/fixedbugs/issue16369.go index 3a7bb7eaed..86d0ce645d 100644 --- a/test/fixedbugs/issue16369.go +++ b/test/fixedbugs/issue16369.go @@ -1,4 +1,4 @@ -// compile -d=interfacecycles +// errorcheck // Copyright 2016 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style @@ -6,7 +6,7 @@ package p -type T interface { +type T interface { // ERROR "invalid recursive type: anonymous interface refers to itself" M(interface { T }) From 1d4b0b6236febe0646d8d7b0103da5d169f185cc Mon Sep 17 00:00:00 2001 From: Jonathan Amsterdam Date: Mon, 18 Dec 2023 13:07:07 -0500 Subject: [PATCH 273/313] doc/go1.22.html: release notes for slog, testing/slogtest and net/http.ServeMux Updates #61422. Change-Id: I8f2dfe92405f409c46465bbb5714eff662ce9b49 Reviewed-on: https://go-review.googlesource.com/c/go/+/550776 Run-TryBot: Jonathan Amsterdam Reviewed-by: Damien Neil TryBot-Result: Gopher Robot --- doc/go1.22.html | 61 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 46 insertions(+), 15 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 458e17954d..c2bcef3053 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -359,6 +359,45 @@ and the Go runtime also use ChaCha8 for randomness. We plan to include an API migration tool in a future release, likely Go 1.23.

+

Minor changes to the library

@@ -633,14 +672,13 @@ We plan to include an API migration tool in a future release, likely Go 1.23.

log/slog

- TODO: https://go.dev/issue/62418: enable setting level on default log.Logger -

- -

- TODO: https://go.dev/cl/525096: log/slog: add LogLoggerLevel to enable setting level on the default logger; modified api/next/62418.txt + The new SetLogLoggerLevel function + controls the level for the bridge between the `slog` and `log` packages. It sets the minimum level + for calls to the top-level `slog` logging functions, and it sets the level for calls to `log.Logger` + that go through `slog`.

-
+
math/big
@@ -682,10 +720,6 @@ We plan to include an API migration tool in a future release, likely Go 1.23. operating on an fs.FS.

-

- TODO: https://go.dev/issue/61410: enhanced ServeMux routing -

-

The HTTP server and client now reject requests and responses containing an invalid empty Content-Length header. @@ -925,11 +959,8 @@ We plan to include an API migration tool in a future release, likely Go 1.23.

testing/slogtest

- TODO: https://go.dev/issue/61758: support sub-tests -

- -

- TODO: https://go.dev/cl/516076: testing/slogtest: add Run to run cases as subtests; modified api/next/61758.txt + The new Run function uses sub-tests to run test cases, + providing finer-grained control.

From 52dbffeac86863e1e0c9455b5b216ec50c828946 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Tue, 19 Dec 2023 09:21:45 -0500 Subject: [PATCH 274/313] cmd/go/internal/toolchain: revert "make a best effort to parse 'go run' and 'go install' flags" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This caused other problems, and for the purposes of the Go 1.22 release, we can just roll back to the Go 1.21 behavior and then decide in January what the correct path forward is. Revert of CL 546635. Unfixes #64282. Fixes #64738. For #57001. This reverts commit e44b8b15b19058b7a22a859ab4159f924856f688. Change-Id: I78753c76dcd0bc6dbc90caa17f73248c42e5f64a Reviewed-on: https://go-review.googlesource.com/c/go/+/551215 LUCI-TryBot-Result: Go LUCI Auto-Submit: Russ Cox Reviewed-by: Daniel Martí Reviewed-by: Than McIntosh --- src/cmd/go/internal/base/goflags.go | 10 ++-- src/cmd/go/internal/modfetch/fetch.go | 20 +++---- src/cmd/go/internal/test/testflag.go | 2 +- src/cmd/go/internal/toolchain/exec.go | 6 +- src/cmd/go/internal/toolchain/select.go | 56 +++++++------------ src/cmd/go/internal/vet/vetflag.go | 2 +- src/cmd/go/main.go | 2 +- .../script/install_modcacherw_issue64282.txt | 32 ----------- .../script/malformed_gosum_issue62345.txt | 2 +- .../go/testdata/script/work_sum_mismatch.txt | 4 +- 10 files changed, 45 insertions(+), 91 deletions(-) delete mode 100644 src/cmd/go/testdata/script/install_modcacherw_issue64282.txt diff --git a/src/cmd/go/internal/base/goflags.go b/src/cmd/go/internal/base/goflags.go index 3d5a76d54b..eced2c5d58 100644 --- a/src/cmd/go/internal/base/goflags.go +++ b/src/cmd/go/internal/base/goflags.go @@ -88,7 +88,7 @@ type boolFlag interface { } // SetFromGOFLAGS sets the flags in the given flag set using settings in $GOFLAGS. -func SetFromGOFLAGS(flags *flag.FlagSet, ignoreErrors bool) { +func SetFromGOFLAGS(flags *flag.FlagSet) { InitGOFLAGS() // This loop is similar to flag.Parse except that it ignores @@ -121,22 +121,22 @@ func SetFromGOFLAGS(flags *flag.FlagSet, ignoreErrors bool) { if fb, ok := f.Value.(boolFlag); ok && fb.IsBoolFlag() { if hasValue { - if err := flags.Set(f.Name, value); err != nil && !ignoreErrors { + if err := flags.Set(f.Name, value); err != nil { fmt.Fprintf(flags.Output(), "go: invalid boolean value %q for flag %s (from %s): %v\n", value, name, where, err) flags.Usage() } } else { - if err := flags.Set(f.Name, "true"); err != nil && !ignoreErrors { + if err := flags.Set(f.Name, "true"); err != nil { fmt.Fprintf(flags.Output(), "go: invalid boolean flag %s (from %s): %v\n", name, where, err) flags.Usage() } } } else { - if !hasValue && !ignoreErrors { + if !hasValue { fmt.Fprintf(flags.Output(), "go: flag needs an argument: %s (from %s)\n", name, where) flags.Usage() } - if err := flags.Set(f.Name, value); err != nil && !ignoreErrors { + if err := flags.Set(f.Name, value); err != nil { fmt.Fprintf(flags.Output(), "go: invalid value %q for flag %s (from %s): %v\n", value, name, where, err) flags.Usage() } diff --git a/src/cmd/go/internal/modfetch/fetch.go b/src/cmd/go/internal/modfetch/fetch.go index b3c77dfbc2..eeab6da62a 100644 --- a/src/cmd/go/internal/modfetch/fetch.go +++ b/src/cmd/go/internal/modfetch/fetch.go @@ -525,7 +525,7 @@ func readGoSum(dst map[module.Version][]string, file string, data []byte) { // ignore malformed line so that go mod tidy can fix go.sum continue } else { - base.Fatalf("go: malformed go.sum:\n%s:%d: wrong number of fields %v\n", file, lineno, len(f)) + base.Fatalf("malformed go.sum:\n%s:%d: wrong number of fields %v\n", file, lineno, len(f)) } } if f[2] == emptyGoModHash { @@ -574,32 +574,32 @@ func checkMod(ctx context.Context, mod module.Version) { // Do the file I/O before acquiring the go.sum lock. ziphash, err := CachePath(ctx, mod, "ziphash") if err != nil { - base.Fatalf("go: verifying %v", module.VersionError(mod, err)) + base.Fatalf("verifying %v", module.VersionError(mod, err)) } data, err := lockedfile.Read(ziphash) if err != nil { - base.Fatalf("go: verifying %v", module.VersionError(mod, err)) + base.Fatalf("verifying %v", module.VersionError(mod, err)) } data = bytes.TrimSpace(data) if !isValidSum(data) { // Recreate ziphash file from zip file and use that to check the mod sum. zip, err := CachePath(ctx, mod, "zip") if err != nil { - base.Fatalf("go: verifying %v", module.VersionError(mod, err)) + base.Fatalf("verifying %v", module.VersionError(mod, err)) } err = hashZip(mod, zip, ziphash) if err != nil { - base.Fatalf("go: verifying %v", module.VersionError(mod, err)) + base.Fatalf("verifying %v", module.VersionError(mod, err)) } return } h := string(data) if !strings.HasPrefix(h, "h1:") { - base.Fatalf("go: verifying %v", module.VersionError(mod, fmt.Errorf("unexpected ziphash: %q", h))) + base.Fatalf("verifying %v", module.VersionError(mod, fmt.Errorf("unexpected ziphash: %q", h))) } if err := checkModSum(mod, h); err != nil { - base.Fatal(err) + base.Fatalf("%s", err) } } @@ -684,7 +684,7 @@ func haveModSumLocked(mod module.Version, h string) bool { return true } if strings.HasPrefix(vh, "h1:") { - base.Fatalf("go: verifying %s@%s: checksum mismatch\n\tdownloaded: %v\n\t%s: %v"+goSumMismatch, mod.Path, mod.Version, h, sumFileName, vh) + base.Fatalf("verifying %s@%s: checksum mismatch\n\tdownloaded: %v\n\t%s: %v"+goSumMismatch, mod.Path, mod.Version, h, sumFileName, vh) } } // Also check workspace sums. @@ -696,7 +696,7 @@ func haveModSumLocked(mod module.Version, h string) bool { if h == vh { foundMatch = true } else if strings.HasPrefix(vh, "h1:") { - base.Fatalf("go: verifying %s@%s: checksum mismatch\n\tdownloaded: %v\n\t%s: %v"+goSumMismatch, mod.Path, mod.Version, h, goSumFile, vh) + base.Fatalf("verifying %s@%s: checksum mismatch\n\tdownloaded: %v\n\t%s: %v"+goSumMismatch, mod.Path, mod.Version, h, goSumFile, vh) } } } @@ -895,7 +895,7 @@ func TrimGoSum(keep map[module.Version]bool) { defer goSum.mu.Unlock() inited, err := initGoSum() if err != nil { - base.Fatal(err) + base.Fatalf("%s", err) } if !inited { return diff --git a/src/cmd/go/internal/test/testflag.go b/src/cmd/go/internal/test/testflag.go index 22c3ab1302..425378889d 100644 --- a/src/cmd/go/internal/test/testflag.go +++ b/src/cmd/go/internal/test/testflag.go @@ -222,7 +222,7 @@ func (f *shuffleFlag) Set(value string) error { // go test fmt -custom-flag-for-fmt-test // go test -x math func testFlags(args []string) (packageNames, passToTest []string) { - base.SetFromGOFLAGS(&CmdTest.Flag, false) + base.SetFromGOFLAGS(&CmdTest.Flag) addFromGOFLAGS := map[string]bool{} CmdTest.Flag.Visit(func(f *flag.Flag) { if short := strings.TrimPrefix(f.Name, "test."); passFlagToTest[short] { diff --git a/src/cmd/go/internal/toolchain/exec.go b/src/cmd/go/internal/toolchain/exec.go index acfb9e943c..820fe93e87 100644 --- a/src/cmd/go/internal/toolchain/exec.go +++ b/src/cmd/go/internal/toolchain/exec.go @@ -44,12 +44,12 @@ func execGoToolchain(gotoolchain, dir, exe string) { if e.ProcessState.Exited() { os.Exit(e.ProcessState.ExitCode()) } - base.Fatalf("go: exec %s: %s", gotoolchain, e.ProcessState) + base.Fatalf("exec %s: %s", gotoolchain, e.ProcessState) } - base.Fatalf("go: exec %s: %s", exe, err) + base.Fatalf("exec %s: %s", exe, err) } os.Exit(0) } err := syscall.Exec(exe, os.Args, os.Environ()) - base.Fatalf("go: exec %s: %v", gotoolchain, err) + base.Fatalf("exec %s: %v", gotoolchain, err) } diff --git a/src/cmd/go/internal/toolchain/select.go b/src/cmd/go/internal/toolchain/select.go index 84fa7f685c..9fd1549a61 100644 --- a/src/cmd/go/internal/toolchain/select.go +++ b/src/cmd/go/internal/toolchain/select.go @@ -8,10 +8,10 @@ package toolchain import ( "context" "errors" - "flag" "fmt" "go/build" "io/fs" + "log" "os" "path/filepath" "runtime" @@ -20,12 +20,10 @@ import ( "cmd/go/internal/base" "cmd/go/internal/cfg" - "cmd/go/internal/cmdflag" "cmd/go/internal/gover" "cmd/go/internal/modfetch" "cmd/go/internal/modload" "cmd/go/internal/run" - "cmd/go/internal/work" "golang.org/x/mod/module" ) @@ -87,6 +85,9 @@ func FilterEnv(env []string) []string { // It must be called early in startup. // See https://go.dev/doc/toolchain#select. func Select() { + log.SetPrefix("go: ") + defer log.SetPrefix("") + if !modload.WillBeEnabled() { return } @@ -132,15 +133,15 @@ func Select() { v := gover.FromToolchain(min) if v == "" { if plus { - base.Fatalf("go: invalid GOTOOLCHAIN %q: invalid minimum toolchain %q", gotoolchain, min) + base.Fatalf("invalid GOTOOLCHAIN %q: invalid minimum toolchain %q", gotoolchain, min) } - base.Fatalf("go: invalid GOTOOLCHAIN %q", gotoolchain) + base.Fatalf("invalid GOTOOLCHAIN %q", gotoolchain) } minToolchain = min minVers = v } if plus && suffix != "auto" && suffix != "path" { - base.Fatalf("go: invalid GOTOOLCHAIN %q: only version suffixes are +auto and +path", gotoolchain) + base.Fatalf("invalid GOTOOLCHAIN %q: only version suffixes are +auto and +path", gotoolchain) } mode = suffix } @@ -171,7 +172,7 @@ func Select() { // has a suffix like "go1.21.1-foo" and toolchain is "go1.21.1".) toolVers := gover.FromToolchain(toolchain) if toolVers == "" || (!strings.HasPrefix(toolchain, "go") && !strings.Contains(toolchain, "-go")) { - base.Fatalf("go: invalid toolchain %q in %s", toolchain, base.ShortPath(file)) + base.Fatalf("invalid toolchain %q in %s", toolchain, base.ShortPath(file)) } if gover.Compare(toolVers, minVers) > 0 { gotoolchain = toolchain @@ -193,7 +194,7 @@ func Select() { // so that we have initialized gover.Startup for use in error messages. if target := os.Getenv(targetEnv); target != "" && TestVersionSwitch != "loop" { if gover.LocalToolchain() != target { - base.Fatalf("go: toolchain %v invoked to provide %v", gover.LocalToolchain(), target) + base.Fatalf("toolchain %v invoked to provide %v", gover.LocalToolchain(), target) } os.Unsetenv(targetEnv) @@ -224,7 +225,7 @@ func Select() { // We want to disallow mistakes / bad ideas like GOTOOLCHAIN=bash, // since we will find that in the path lookup. if !strings.HasPrefix(gotoolchain, "go1") && !strings.Contains(gotoolchain, "-go1") { - base.Fatalf("go: invalid GOTOOLCHAIN %q", gotoolchain) + base.Fatalf("invalid GOTOOLCHAIN %q", gotoolchain) } Exec(gotoolchain) @@ -243,6 +244,8 @@ var TestVersionSwitch string // as a source of Go toolchains. Otherwise Exec tries the PATH but then downloads // a toolchain if necessary. func Exec(gotoolchain string) { + log.SetPrefix("go: ") + writeBits = sysWriteBits() count, _ := strconv.Atoi(os.Getenv(countEnv)) @@ -250,7 +253,7 @@ func Exec(gotoolchain string) { fmt.Fprintf(os.Stderr, "go: switching from go%v to %v [depth %d]\n", gover.Local(), gotoolchain, count) } if count >= maxSwitch { - base.Fatalf("go: too many toolchain switches") + base.Fatalf("too many toolchain switches") } os.Setenv(countEnv, fmt.Sprint(count+1)) @@ -273,7 +276,7 @@ func Exec(gotoolchain string) { case "loop", "mismatch": exe, err := os.Executable() if err != nil { - base.Fatal(err) + base.Fatalf("%v", err) } execGoToolchain(gotoolchain, os.Getenv("GOROOT"), exe) } @@ -288,7 +291,7 @@ func Exec(gotoolchain string) { // GOTOOLCHAIN=auto looks in PATH and then falls back to download. // GOTOOLCHAIN=path only looks in PATH. if pathOnly { - base.Fatalf("go: cannot find %q in PATH", gotoolchain) + base.Fatalf("cannot find %q in PATH", gotoolchain) } // Set up modules without an explicit go.mod, to download distribution. @@ -307,9 +310,9 @@ func Exec(gotoolchain string) { dir, err := modfetch.Download(context.Background(), m) if err != nil { if errors.Is(err, fs.ErrNotExist) { - base.Fatalf("go: download %s for %s/%s: toolchain not available", gotoolchain, runtime.GOOS, runtime.GOARCH) + base.Fatalf("download %s for %s/%s: toolchain not available", gotoolchain, runtime.GOOS, runtime.GOARCH) } - base.Fatalf("go: download %s: %v", gotoolchain, err) + base.Fatalf("download %s: %v", gotoolchain, err) } // On first use after download, set the execute bits on the commands @@ -318,7 +321,7 @@ func Exec(gotoolchain string) { if runtime.GOOS != "windows" { info, err := os.Stat(filepath.Join(dir, "bin/go")) if err != nil { - base.Fatalf("go: download %s: %v", gotoolchain, err) + base.Fatalf("download %s: %v", gotoolchain, err) } if info.Mode()&0111 == 0 { // allowExec sets the exec permission bits on all files found in dir. @@ -339,7 +342,7 @@ func Exec(gotoolchain string) { return nil }) if err != nil { - base.Fatalf("go: download %s: %v", gotoolchain, err) + base.Fatalf("download %s: %v", gotoolchain, err) } } @@ -381,7 +384,7 @@ func Exec(gotoolchain string) { err = raceSafeCopy(srcUGoMod, srcGoMod) } if err != nil { - base.Fatalf("go: download %s: %v", gotoolchain, err) + base.Fatalf("download %s: %v", gotoolchain, err) } } @@ -472,7 +475,7 @@ func modGoToolchain() (file, goVers, toolchain string) { data, err := os.ReadFile(file) if err != nil { - base.Fatal(err) + base.Fatalf("%v", err) } return file, gover.GoModLookup(data, "go"), gover.GoModLookup(data, "toolchain") } @@ -489,7 +492,6 @@ func goInstallVersion() bool { // Check for pkg@version. var arg string - var cmdFlags *flag.FlagSet switch os.Args[1] { default: return false @@ -498,7 +500,6 @@ func goInstallVersion() bool { // across a toolchain switch. To make that work, assume the pkg@version // is the last argument and skip the flag parsing. arg = os.Args[len(os.Args)-1] - cmdFlags = &work.CmdInstall.Flag case "run": // For run, the pkg@version can be anywhere on the command line, // because it is preceded by run flags and followed by arguments to the @@ -506,7 +507,6 @@ func goInstallVersion() bool { // flags a little bit, to know whether each flag takes an optional argument. // We can still allow unknown flags as long as they have an explicit =value. args := os.Args[2:] - cmdFlags = &run.CmdRun.Flag for i := 0; i < len(args); i++ { a := args[i] if !strings.HasPrefix(a, "-") { @@ -554,20 +554,6 @@ func goInstallVersion() bool { return false } - // Make a best effort to parse flags so that module flags like -modcacherw - // will take effect (see https://go.dev/issue/64282). - args := os.Args[2:] - for len(args) > 0 { - var err error - _, args, err = cmdflag.ParseOne(cmdFlags, args) - if errors.Is(err, cmdflag.ErrFlagTerminator) { - break - } - // Ignore all other errors: they may be new flags — or updated syntax for - // existing flags — intended for a newer Go toolchain. - } - base.SetFromGOFLAGS(cmdFlags, true) - // It would be correct to simply return true here, bypassing use // of the current go.mod or go.work, and let "go run" or "go install" // do the rest, including a toolchain switch. diff --git a/src/cmd/go/internal/vet/vetflag.go b/src/cmd/go/internal/vet/vetflag.go index 601ae9aa64..eb7af6508d 100644 --- a/src/cmd/go/internal/vet/vetflag.go +++ b/src/cmd/go/internal/vet/vetflag.go @@ -116,7 +116,7 @@ func vetFlags(args []string) (passToVet, packageNames []string) { // Record the set of vet tool flags set by GOFLAGS. We want to pass them to // the vet tool, but only if they aren't overridden by an explicit argument. - base.SetFromGOFLAGS(&CmdVet.Flag, false) + base.SetFromGOFLAGS(&CmdVet.Flag) addFromGOFLAGS := map[string]bool{} CmdVet.Flag.Visit(func(f *flag.Flag) { if isVetFlag[f.Name] { diff --git a/src/cmd/go/main.go b/src/cmd/go/main.go index b309cb867a..d380aae489 100644 --- a/src/cmd/go/main.go +++ b/src/cmd/go/main.go @@ -234,7 +234,7 @@ func invoke(cmd *base.Command, args []string) { if cmd.CustomFlags { args = args[1:] } else { - base.SetFromGOFLAGS(&cmd.Flag, false) + base.SetFromGOFLAGS(&cmd.Flag) cmd.Flag.Parse(args[1:]) args = cmd.Flag.Args() } diff --git a/src/cmd/go/testdata/script/install_modcacherw_issue64282.txt b/src/cmd/go/testdata/script/install_modcacherw_issue64282.txt deleted file mode 100644 index ea644f789e..0000000000 --- a/src/cmd/go/testdata/script/install_modcacherw_issue64282.txt +++ /dev/null @@ -1,32 +0,0 @@ -# Regression test for https://go.dev/issue/64282: -# 'go install' and 'go run' with pkg@version arguments should make -# a best effort to parse flags before they download modules to -# identify which toolchain version to use, because those flags -# may affect the downloaded contents. - -# However, the best-effort flag parsing should not interfere with -# actual flag parsing if we don't switch toolchains. In particular, -# unrecognized flags should still be diagnosed after the module for -# the requested package has been downloaded and checked for toolchain -# upgrades. - -! go install -cake=delicious -modcacherw example.com/printversion@v0.1.0 -stderr '^flag provided but not defined: -cake$' - -[!short] go install -modcacherw example.com/printversion@v0.1.0 - # Because the -modcacherw flag was set, we should be able to modify the contents - # of a directory within the module cache. -cp $WORK/extraneous.txt $GOPATH/pkg/mod/example.com/printversion@v0.1.0/extraneous_file.go - - -# We should also apply flags from GOFLAGS at this step. - -go clean -modcache -env GOFLAGS=-modcacherw -! go install -cake=delicious example.com/printversion@v0.1.0 -stderr '^flag provided but not defined: -cake$' -cp $WORK/extraneous.txt $GOPATH/pkg/mod/example.com/printversion@v0.1.0/extraneous_file.go - - --- $WORK/extraneous.txt -- -This is not a Go source file. diff --git a/src/cmd/go/testdata/script/malformed_gosum_issue62345.txt b/src/cmd/go/testdata/script/malformed_gosum_issue62345.txt index 35fad29193..23c41beae9 100644 --- a/src/cmd/go/testdata/script/malformed_gosum_issue62345.txt +++ b/src/cmd/go/testdata/script/malformed_gosum_issue62345.txt @@ -1,5 +1,5 @@ ! go mod download -stderr '^go: malformed go.sum:\n.*go.sum:3: wrong number of fields 5\n$' +stderr '^malformed go.sum:\n.*go.sum:3: wrong number of fields 5\n$' go mod tidy cmp go.sum go.sum.after-tidy diff --git a/src/cmd/go/testdata/script/work_sum_mismatch.txt b/src/cmd/go/testdata/script/work_sum_mismatch.txt index d4997aa372..ca5d71dc5e 100644 --- a/src/cmd/go/testdata/script/work_sum_mismatch.txt +++ b/src/cmd/go/testdata/script/work_sum_mismatch.txt @@ -4,7 +4,7 @@ cmpenv stderr want-error -- want-error -- -go: verifying rsc.io/sampler@v1.3.0/go.mod: checksum mismatch +verifying rsc.io/sampler@v1.3.0/go.mod: checksum mismatch downloaded: h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= $WORK${/}gopath${/}src${/}a${/}go.sum: h1:U1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= @@ -58,4 +58,4 @@ import ( func main() { fmt.Println(quote.Hello()) -} +} \ No newline at end of file From 339177aa3119c5de653aff7773fd05553e68719c Mon Sep 17 00:00:00 2001 From: Carlos Amedee Date: Tue, 19 Dec 2023 09:44:43 -0500 Subject: [PATCH 275/313] doc: typo fix for net/http.ServeMux Updates #61422 Change-Id: I2d86863db70792122b5168935e76d9ca38f761b7 Reviewed-on: https://go-review.googlesource.com/c/go/+/551256 LUCI-TryBot-Result: Go LUCI Reviewed-by: Than McIntosh Auto-Submit: Carlos Amedee --- doc/go1.22.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index c2bcef3053..3722dfbcc0 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -359,7 +359,7 @@ and the Go runtime also use ChaCha8 for randomness. We plan to include an API migration tool in a future release, likely Go 1.23.

-

+

Enhanced routing patterns

HTTP routing in the standard library is now more expressive. From 22284c34f2936d996a182daae3118dcff18a4d25 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Mon, 11 Dec 2023 12:29:32 -0500 Subject: [PATCH 276/313] doc/go1.22: document removal of 'go get' support in GOPATH mode For #61422. Updates #60915. Change-Id: Ia8ca12c163a02223b26c5e4cd4c1b6093978aba4 Reviewed-on: https://go-review.googlesource.com/c/go/+/548875 Reviewed-by: Carlos Amedee Reviewed-by: Than McIntosh LUCI-TryBot-Result: Go LUCI --- doc/go1.22.html | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 3722dfbcc0..437e86e6b6 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -83,14 +83,13 @@ func main() { but not both.

- +

- -

- - -

- + go get is no longer supported outside of a module in the + legacy GOPATH mode (that is, with GO111MODULE=off). + Other build commands, such as go build and + go test, will continue to work indefinitely + for legacy GOPATH programs.

From 9dd1cde9ac0f1e935ed44d33f6b4668be538c1ed Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Mon, 11 Dec 2023 12:42:16 -0500 Subject: [PATCH 277/313] doc/go1.22,cmd/go: document that 'go mod init' no longer imports from other vendoring tools This support was removed in CL 518776. For #61422. Fixes #53327. Change-Id: I8ad0f76aed5f03e32c4c2c5c0001c3f06beb3c7d Reviewed-on: https://go-review.googlesource.com/c/go/+/548877 Reviewed-by: Carlos Amedee Reviewed-by: Than McIntosh LUCI-TryBot-Result: Go LUCI --- doc/go1.22.html | 4 +++- src/cmd/go/alldocs.go | 3 --- src/cmd/go/internal/modcmd/init.go | 3 --- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 437e86e6b6..3bc0c092ed 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -94,7 +94,9 @@ func main() {

- + go mod init no longer attempts to import + module requirements from configuration files for other vendoring tools + (such as Gopkg.lock).

diff --git a/src/cmd/go/alldocs.go b/src/cmd/go/alldocs.go index a40d0556ff..e61e865c84 100644 --- a/src/cmd/go/alldocs.go +++ b/src/cmd/go/alldocs.go @@ -1324,9 +1324,6 @@ // using import comments in .go files, vendoring tool configuration files (like // Gopkg.lock), and the current directory (if in GOPATH). // -// If a configuration file for a vendoring tool is present, init will attempt to -// import module requirements from it. -// // See https://golang.org/ref/mod#go-mod-init for more about 'go mod init'. // // # Add missing and remove unused modules diff --git a/src/cmd/go/internal/modcmd/init.go b/src/cmd/go/internal/modcmd/init.go index e4be73fab0..facdaa9911 100644 --- a/src/cmd/go/internal/modcmd/init.go +++ b/src/cmd/go/internal/modcmd/init.go @@ -25,9 +25,6 @@ module path argument is omitted, init will attempt to infer the module path using import comments in .go files, vendoring tool configuration files (like Gopkg.lock), and the current directory (if in GOPATH). -If a configuration file for a vendoring tool is present, init will attempt to -import module requirements from it. - See https://golang.org/ref/mod#go-mod-init for more about 'go mod init'. `, Run: runInit, From 03242506def60494d1b7231e2be57ea2f07f27a8 Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Tue, 19 Dec 2023 10:32:52 -0500 Subject: [PATCH 278/313] doc: comment out remaining TODOs in Go 1.22 relnotes (for now) This patch comments out the remaining "TODO" items in the Go 1.22 release notes temporarily, so as to have RC1 go out with the notes in a clean (TODO-less) state. Change-Id: I88f5fef75860fc78b8077dce704ae71c6194a6a9 Reviewed-on: https://go-review.googlesource.com/c/go/+/551257 Reviewed-by: Carlos Amedee LUCI-TryBot-Result: Go LUCI Auto-Submit: Than McIntosh --- doc/go1.22.html | 72 ++++++++++++++++++++++++------------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 3bc0c092ed..d265541a59 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -136,9 +136,9 @@ packages that do not have their own test files. Prior to Go 1.22 a

Vet

-

- TODO: https://go.dev/cl/539016: go/analysis/passes/loopclosure: disable checker after go1.22.; loopclosure was modified to only not report in files with GoVersion after 1.22. -

+ + +

New warnings for missing values after append

@@ -408,9 +408,9 @@ We plan to include an API migration tool in a future release, likely Go 1.23. There are also various performance improvements, not enumerated here.

-

- TODO: complete this section -

+ + +
archive/tar
@@ -650,17 +650,17 @@ We plan to include an API migration tool in a future release, likely Go 1.23.
-
html/template
-
-

- TODO: https://go.dev/issue/61619: allow actions in JS template literals -

+ + + + + -

- TODO: https://go.dev/cl/507995: html/template: support parsing complex JS template literals; modified api/next/61619.txt -

-
-
+ + + + +
io
@@ -728,31 +728,31 @@ We plan to include an API migration tool in a future release, likely Go 1.23. GODEBUG field httplaxcontentlength=1.

-

- TODO: https://go.dev/cl/528355: net/http: implement path value methods on Request; modified api/next/61410.txt -

+ + +
-
net/http/cgi
-
-

- TODO: https://go.dev/cl/539615: net/http/cgi: the PATH_INFO should be empty or start with a slash -

-
-
+ + + + + + + -
net/netip
-
-

- TODO: https://go.dev/issue/61642: add Prefix.Compare and AddrPort.Compare -

+ + + + + -

- TODO: https://go.dev/cl/524616: net/netip: add AddrPort.Compare and Prefix.Compare; modified api/next/61642.txt -

-
-
+ + + + +
os
From 35222eeb78ddb84f5787729c5f149cfd73d63ef8 Mon Sep 17 00:00:00 2001 From: Roland Shoemaker Date: Tue, 19 Dec 2023 08:14:50 -0800 Subject: [PATCH 279/313] doc: add html/template release note Updates #61422 Change-Id: Ie86e8545d55cfd0898d21387d8b48d9392f85bf0 Reviewed-on: https://go-review.googlesource.com/c/go/+/551335 Reviewed-by: Carlos Amedee LUCI-TryBot-Result: Go LUCI --- doc/go1.22.html | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index d265541a59..951a8e3160 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -650,17 +650,15 @@ We plan to include an API migration tool in a future release, likely Go 1.23.
- - - - - - - - - - - +
html/template
+
+

+ Javascript template literals may now contain Go template actions, and parsing a template containing one will + no longer return ErrJSTemplate. Similarly the GODEBUG setting jstmpllitinterp no + longer has any effect. +

+
+
io
From a2a2c5b947263ee9328674d229892841197a0a94 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Tue, 19 Dec 2023 13:32:07 -0800 Subject: [PATCH 280/313] doc: update unsafe.Pointer rule in spec The valid conversions consider the core types of operands, not just their underlying type. This also explains the valid arguments for unsafe.Slice which are explained in terms of unsafe.Pointer conversions. unsafe.SliceData simply refers to "slice argument" and we use similar terminology elsewhere in the spec to denote values that have a core type of slice (or any other type for that matter). Leaving alone for now. Fixes #64452. Change-Id: I0eed3abbc0606f22358835e5d434f026fe0909c8 Reviewed-on: https://go-review.googlesource.com/c/go/+/551379 Auto-Submit: Robert Griesemer Reviewed-by: Robert Griesemer Reviewed-by: Matthew Dempsky TryBot-Bypass: Robert Griesemer --- doc/go_spec.html | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/doc/go_spec.html b/doc/go_spec.html index f68441e664..89ab2d35d1 100644 --- a/doc/go_spec.html +++ b/doc/go_spec.html @@ -1,6 +1,6 @@ @@ -8232,8 +8232,8 @@ of if the general conversion rules take care of this.

A Pointer is a pointer type but a Pointer value may not be dereferenced. -Any pointer or value of underlying type uintptr can be -converted to a type of underlying type Pointer and vice versa. +Any pointer or value of core type uintptr can be +converted to a type of core type Pointer and vice versa. The effect of converting between Pointer and uintptr is implementation-defined.

@@ -8244,6 +8244,10 @@ bits = *(*uint64)(unsafe.Pointer(&f)) type ptr unsafe.Pointer bits = *(*uint64)(ptr(&f)) +func f[P ~*B, B any](p P) uintptr { + return uintptr(unsafe.Pointer(p)) +} + var p ptr = nil From adec22b9f7c9d9cfb95ff6af1c63ec489d6e9bb8 Mon Sep 17 00:00:00 2001 From: Tim King Date: Tue, 19 Dec 2023 10:08:00 -0800 Subject: [PATCH 281/313] doc/go1.22: document changes to vet loopclosure analyzer cmd/vet no longer reports loopclosure bugs within files built at GoVersion>=1.22. For #61422. Change-Id: I6f29373bb236822ece4e7ae35914859538b8d57b Reviewed-on: https://go-review.googlesource.com/c/go/+/551376 LUCI-TryBot-Result: Go LUCI Reviewed-by: Alan Donovan Run-TryBot: Tim King TryBot-Result: Gopher Robot --- doc/go1.22.html | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 951a8e3160..5aa0a3f54d 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -136,9 +136,20 @@ packages that do not have their own test files. Prior to Go 1.22 a

Vet

- - - +

References to loop variables

+ +

+ The behavior of the vet tool has changed to match + the new semantics (see above) of loop variables in Go 1.22. + When analyzing a file that requires Go 1.22 or newer + (due to its go.mod file or a per-file build constraint), + vetcode> no longer reports references to + loop variables from within a function literal that + might outlive the iteration of the loop. + In Go 1.22, loop variables are created anew for each iteration, + so such references are no longer at risk of using a variable + after it has been updated by the loop. +

New warnings for missing values after append

From f6509cf5cdbb5787061b784973782933c47f1782 Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Wed, 20 Dec 2023 15:38:50 -0800 Subject: [PATCH 282/313] cmd/compile: handle constant-folding of an out-of-range jump table index The input index to a jump table can be out of range for unreachable code. Dynamically the compiler ensures that an out-of-range index can never reach a jump table, but that guarantee doesn't extend to the static realm. Fixes #64826 Change-Id: I5829f3933ae5124ffad8337dfd7dd75e67a8ec33 Reviewed-on: https://go-review.googlesource.com/c/go/+/552055 Reviewed-by: Keith Randall LUCI-TryBot-Result: Go LUCI Reviewed-by: David Chase --- src/cmd/compile/internal/ssa/sccp.go | 7 +++++ test/fixedbugs/issue64826.go | 38 ++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 test/fixedbugs/issue64826.go diff --git a/src/cmd/compile/internal/ssa/sccp.go b/src/cmd/compile/internal/ssa/sccp.go index 86c6117d87..77a6f50961 100644 --- a/src/cmd/compile/internal/ssa/sccp.go +++ b/src/cmd/compile/internal/ssa/sccp.go @@ -535,6 +535,13 @@ func rewireSuccessor(block *Block, constVal *Value) bool { case BlockJumpTable: // Remove everything but the known taken branch. idx := int(constVal.AuxInt) + if idx < 0 || idx >= len(block.Succs) { + // This can only happen in unreachable code, + // as an invariant of jump tables is that their + // input index is in range. + // See issue 64826. + return false + } block.swapSuccessorsByIdx(0, idx) for len(block.Succs) > 1 { block.removeEdge(1) diff --git a/test/fixedbugs/issue64826.go b/test/fixedbugs/issue64826.go new file mode 100644 index 0000000000..864c474a64 --- /dev/null +++ b/test/fixedbugs/issue64826.go @@ -0,0 +1,38 @@ +// build + +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +func main() { + f(g(false)) +} +func g(b bool) string { + if b { + return "z" + } + return "q" +} +func f(x string) int { + switch len(x) { + case 4: + return 4 + case 5: + return 5 + case 6: + return 6 + case 7: + return 7 + case 8: + return 8 + case 9: + return 9 + case 10: + return 10 + case 11: + return 11 + } + return 0 +} From 0b56804084eb75495e704921f71e4f215fced6b7 Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Wed, 20 Dec 2023 14:33:46 -0500 Subject: [PATCH 283/313] runtime: use racereleasemerge for godebugInc CL 549796 adds race annotations to godebugInc. It uses racerelease to model a CompareAndSwap. However, a CompareAndSwap is essentially a load and a store. Modeling it as just racerelease makes it not synchronized with other racerelease, i.e. other CAS. For the following execution thread A B load, got nil load, got nil set *inc set *inc racerelease CAS success racerelease CAS fail load raceacquire use *inc (from A) On thread B, the raceacquire synchronizes with the previous racerelease, which is not synchronized with racerelease on thread A, so it doesn't know that the use of *inc on thread B is after the set on thread A, and will report a race. Change it to use racereleasemerge, which synchronizes with previous racerelease and racereleasemerge. So in the case above it knows thread B's CAS is after thread A's. Also remove stale comment that was more relevant when the code used atomic store, where CL 549796 changed to CAS. Updates #64649. Change-Id: I17671090a19c0699fcb4e6481e2abd98ef2e5542 Reviewed-on: https://go-review.googlesource.com/c/go/+/551856 Reviewed-by: Mauri de Souza Meneguzzo LUCI-TryBot-Result: Go LUCI Reviewed-by: David Chase --- src/runtime/runtime.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/runtime/runtime.go b/src/runtime/runtime.go index 92cdfc310e..c70a76e409 100644 --- a/src/runtime/runtime.go +++ b/src/runtime/runtime.go @@ -167,13 +167,10 @@ func (g *godebugInc) IncNonDefault() { if newInc == nil { return } - // If other goroutines are racing here, no big deal. One will win, - // and all the inc functions will be using the same underlying - // *godebug.Setting. inc = new(func()) *inc = (*newInc)(g.name) if raceenabled { - racerelease(unsafe.Pointer(&g.inc)) + racereleasemerge(unsafe.Pointer(&g.inc)) } if !g.inc.CompareAndSwap(nil, inc) { inc = g.inc.Load() From 9c01ecce48187d7109e9d9bc8be2921c5122ae18 Mon Sep 17 00:00:00 2001 From: Manlio Perillo Date: Wed, 20 Dec 2023 21:02:10 +0100 Subject: [PATCH 284/313] doc: fix misspelling in go1.22 release notes Found by codespell. Change-Id: I38254f75a8d342a48bbaf6421c681bef7a262dec Reviewed-on: https://go-review.googlesource.com/c/go/+/551955 Reviewed-by: Jonathan Amsterdam Reviewed-by: Cherry Mui Run-TryBot: Jes Cok TryBot-Result: Gopher Robot --- doc/go1.22.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 5aa0a3f54d..96c092f853 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -404,7 +404,7 @@ We plan to include an API migration tool in a future release, likely Go 1.23.

- This change breaks backwards compatiblity in small ways, some obvious—patterns with "{" and "}" behave differently— + This change breaks backwards compatibility in small ways, some obvious—patterns with "{" and "}" behave differently— and some less so—treatment of escaped paths has been improved. The change is controlled by a GODEBUG field named httpmuxgo121. Set httpmuxgo121=1 to restore the old behavior. @@ -952,7 +952,7 @@ We plan to include an API migration tool in a future release, likely Go 1.23.

The syscall package has been frozen since Go 1.4 and was marked as deprecated in Go 1.11, causing many editors to warn about any use of the package. However, some non-deprecated functionality requires use of the syscall package, such as the os/exec.Cmd.SysProcAttr field. - To avoid unnecesary complaints on such code, the syscall package is no longer marked as deprecated. + To avoid unnecessary complaints on such code, the syscall package is no longer marked as deprecated. The package remains frozen to most new functionality, and new code remains encouraged to use golang.org/x/sys/unix or golang.org/x/sys/windows where possible.

From 2184a394777ccc9ce9625932b2ad773e6e626be0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Mengu=C3=A9?= Date: Thu, 14 Dec 2023 18:25:21 +0100 Subject: [PATCH 285/313] runtime/metrics: godoc link fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix rendering of link to runtime/debug.ReadGCStats in package overview: as the package is not imported we must specify the absolute package name. Change-Id: I123db49eee05e6812427e19873e628b4e4feb203 Reviewed-on: https://go-review.googlesource.com/c/go/+/549735 Reviewed-by: Than McIntosh Reviewed-by: Daniel Martí Auto-Submit: Michael Knyszek TryBot-Result: Gopher Robot Reviewed-by: Michael Knyszek Run-TryBot: qiulaidongfeng <2645477756@qq.com> Reviewed-by: qiulaidongfeng <2645477756@qq.com> --- src/runtime/metrics/doc.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/runtime/metrics/doc.go b/src/runtime/metrics/doc.go index e5a1fbc8d2..fb2f44da29 100644 --- a/src/runtime/metrics/doc.go +++ b/src/runtime/metrics/doc.go @@ -8,7 +8,7 @@ /* Package metrics provides a stable interface to access implementation-defined metrics exported by the Go runtime. This package is similar to existing functions -like [runtime.ReadMemStats] and [debug.ReadGCStats], but significantly more general. +like [runtime.ReadMemStats] and [runtime/debug.ReadGCStats], but significantly more general. The set of metrics defined by this package may evolve as the runtime itself evolves, and also enables variation across Go implementations, whose relevant @@ -28,7 +28,8 @@ encouraged to use build tags, and although metrics may be deprecated and removed users should consider this to be an exceptional and rare event, coinciding with a very large change in a particular Go implementation. -Each metric key also has a "kind" that describes the format of the metric's value. +Each metric key also has a "kind" (see [ValueKind]) that describes the format of the +metric's value. In the interest of not breaking users of this package, the "kind" for a given metric is guaranteed not to change. If it must change, then a new metric will be introduced with a new key and a new "kind." From 36a2463e7c01151b05fff9a1f1c6fb08d764c82e Mon Sep 17 00:00:00 2001 From: Dmitri Shuralyov Date: Fri, 22 Dec 2023 14:03:14 -0500 Subject: [PATCH 286/313] lib/time: update to 2023d/2023d Commit generated by update.bash. For #22487. Change-Id: I4c8a275bb607981c21a0ad5e49b3cae968fc8e64 Reviewed-on: https://go-review.googlesource.com/c/go/+/552575 Reviewed-by: Dmitri Shuralyov Auto-Submit: Dmitri Shuralyov Reviewed-by: David Chase Reviewed-by: Tobias Klauser LUCI-TryBot-Result: Go LUCI --- lib/time/update.bash | 4 ++-- lib/time/zoneinfo.zip | Bin 400280 -> 401728 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/time/update.bash b/lib/time/update.bash index 605afa76d3..e72850079f 100755 --- a/lib/time/update.bash +++ b/lib/time/update.bash @@ -24,8 +24,8 @@ # in the CL match the update.bash in the CL. # Versions to use. -CODE=2023c -DATA=2023c +CODE=2023d +DATA=2023d set -e diff --git a/lib/time/zoneinfo.zip b/lib/time/zoneinfo.zip index 417ee2b194a7591dc9909dee6c299f51073e0ac3..7cf689f83078a18deddbb262428bdfb87bd379c9 100644 GIT binary patch delta 7508 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 delta 6640 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 From 1dddd83c494849dd71b72a4415c5238b0716dd30 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Wed, 13 Dec 2023 12:29:32 -0800 Subject: [PATCH 287/313] doc: document version at which new language features were introduced in spec Add a new section to the Appendix describing what features were changed or added in which language version. Add short links with references to the required language version where relevant. Fixes #63857. Change-Id: I5250f856d8688a71602076fcc662aa678d96a5d2 Reviewed-on: https://go-review.googlesource.com/c/go/+/549518 Reviewed-by: Robert Griesemer Reviewed-by: Rob Pike Auto-Submit: Robert Griesemer Reviewed-by: Russ Cox TryBot-Bypass: Robert Griesemer Reviewed-by: Alan Donovan --- doc/go_spec.html | 216 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 192 insertions(+), 24 deletions(-) diff --git a/doc/go_spec.html b/doc/go_spec.html index 89ab2d35d1..3c065f57cb 100644 --- a/doc/go_spec.html +++ b/doc/go_spec.html @@ -1,6 +1,6 @@ @@ -70,6 +70,14 @@ enumerations or code snippets that are not further specified. The character +

+A link of the form [Go 1.xx] indicates that a described +language feature (or some aspect of it) was changed or added with language version 1.xx and +thus requires at minimum that language version to build. +For details, see the linked section +in the appendix. +

+

Source code representation

@@ -263,7 +271,8 @@ continue for import return var

The following character sequences represent operators -(including assignment operators) and punctuation: +(including assignment operators) and punctuation +[Go 1.18]:

 +    &     +=    &=     &&    ==    !=    (    )
@@ -281,7 +290,8 @@ An integer literal is a sequence of digits representing an
 integer constant.
 An optional prefix sets a non-decimal base: 0b or 0B
 for binary, 0, 0o, or 0O for octal,
-and 0x or 0X for hexadecimal.
+and 0x or 0X for hexadecimal
+[Go 1.13].
 A single 0 is considered a decimal zero.
 In hexadecimal literals, letters a through f
 and A through F represent values 10 through 15.
@@ -347,7 +357,8 @@ prefix, an integer part (hexadecimal digits), a radix point, a fractional part (
 and an exponent part (p or P followed by an optional sign and decimal digits).
 One of the integer part or the fractional part may be elided; the radix point may be elided as well,
 but the exponent part is required. (This syntax matches the one given in IEEE 754-2008 §5.12.3.)
-An exponent value exp scales the mantissa (integer and fractional part) by 2exp.
+An exponent value exp scales the mantissa (integer and fractional part) by 2exp
+[Go 1.13].
 

@@ -411,7 +422,8 @@ It consists of an integer or floating-point literal followed by the lowercase letter i. The value of an imaginary literal is the value of the respective -integer or floating-point literal multiplied by the imaginary unit i. +integer or floating-point literal multiplied by the imaginary unit i +[Go 1.13]

@@ -1340,6 +1352,7 @@ interface{}
 
 

For convenience, the predeclared type any is an alias for the empty interface. +[Go 1.18]

@@ -1375,13 +1388,15 @@ as the File interface. In a slightly more general form an interface T may use a (possibly qualified) interface type name E as an interface element. This is called -embedding interface E in T. +embedding interface E in T +[Go 1.14]. The type set of T is the intersection of the type sets defined by T's explicitly declared methods and the type sets of T’s embedded interfaces. In other words, the type set of T is the set of all types that implement all the explicitly declared methods of T and also all the methods of -E. +E +[Go 1.18].

@@ -1420,7 +1435,8 @@ type ReadCloser interface {
 

In their most general form, an interface element may also be an arbitrary type term T, or a term of the form ~T specifying the underlying type T, -or a union of terms t1|t2|…|tn. +or a union of terms t1|t2|…|tn +[Go 1.18]. Together with method specifications, these elements enable the precise definition of an interface's type set as follows:

@@ -2303,7 +2319,9 @@ as an operand, and in a

The following identifiers are implicitly declared in the -universe block: +universe block +[Go 1.18] +[Go 1.21]:

 Types:
@@ -2487,7 +2505,8 @@ TypeSpec = AliasDecl | TypeDef .
 

Alias declarations

-An alias declaration binds an identifier to the given type. +An alias declaration binds an identifier to the given type +[Go 1.9].

@@ -2636,7 +2655,8 @@ func (l *List[T]) Len() int  { … }
 A type parameter list declares the type parameters of a generic function or type declaration.
 The type parameter list looks like an ordinary function parameter list
 except that the type parameter names must all be present and the list is enclosed
-in square brackets rather than parentheses.
+in square brackets rather than parentheses
+[Go 1.18].
 

@@ -2719,7 +2739,8 @@ type T6[P int] struct{ f *T6[P] }     // ok: reference to T6 is not in type para
 

A type constraint is an interface that defines the set of permissible type arguments for the respective type parameter and controls the -operations supported by values of that type parameter. +operations supported by values of that type parameter +[Go 1.18].

@@ -2749,7 +2770,8 @@ other interfaces based on their type sets. But this should get us going for now.
 The predeclared
 interface type comparable
 denotes the set of all non-interface types that are
-strictly comparable.
+strictly comparable
+[Go 1.18].
 

@@ -2782,7 +2804,8 @@ if T is an element of the type set defined by C; i.e., if T implements C. As an exception, a strictly comparable type constraint may also be satisfied by a comparable -(not necessarily strictly comparable) type argument. +(not necessarily strictly comparable) type argument +[Go 1.20]. More precisely:

@@ -4306,7 +4329,7 @@ with the same underlying array.

A generic function or type is instantiated by substituting type arguments -for the type parameters. +for the type parameters [Go 1.18]. Instantiation proceeds in two steps:

@@ -4759,6 +4782,7 @@ to the type of the other operand.

The right operand in a shift expression must have integer type +[Go 1.13] or be an untyped constant representable by a value of type uint. If the left operand of a non-constant shift expression is an untyped constant, @@ -5426,7 +5450,8 @@ in any of these cases: x is a string and T is a slice of bytes or runes.

  • - x is a slice, T is an array or a pointer to an array, + x is a slice, T is an array [Go 1.20] + or a pointer to an array [Go 1.17], and the slice and array types have identical element types.
  • @@ -6553,7 +6578,7 @@ for { S() } is the same as for true { S() }

    A "for" statement with a "range" clause iterates through all entries of an array, slice, string or map, values received on -a channel, or integer values from zero to an upper limit. +a channel, or integer values from zero to an upper limit [Go 1.22]. For each entry it assigns iteration values to corresponding iteration variables if present and then executes the block.

    @@ -7249,7 +7274,8 @@ n3 := copy(b, "Hello, World!") // n3 == 5, b is []byte("Hello")

    The built-in function clear takes an argument of map, slice, or type parameter type, -and deletes or zeroes out all elements. +and deletes or zeroes out all elements +[Go 1.21].

    @@ -7516,7 +7542,8 @@ The precise behavior is implementation-dependent.
     The built-in functions min and max compute the
     smallest—or largest, respectively—value of a fixed number of
     arguments of ordered types.
    -There must be at least one argument.
    +There must be at least one argument
    +[Go 1.21].
     

    @@ -8296,7 +8323,8 @@ of constant size.

    The function Add adds len to ptr -and returns the updated pointer unsafe.Pointer(uintptr(ptr) + uintptr(len)). +and returns the updated pointer unsafe.Pointer(uintptr(ptr) + uintptr(len)) +[Go 1.17]. The len argument must be of integer type or an untyped constant. A constant len argument must be representable by a value of type int; if it is an untyped constant it is given type int. @@ -8316,7 +8344,8 @@ and whose length and capacity are len.

    except that, as a special case, if ptr is nil and len is zero, -Slice returns nil. +Slice returns nil +[Go 1.17].

    @@ -8325,14 +8354,16 @@ A constant len argument must be non-negative and run-time panic occurs. +a run-time panic occurs +[Go 1.17].

    The function SliceData returns a pointer to the underlying array of the slice argument. If the slice's capacity cap(slice) is not zero, that pointer is &slice[:1][0]. If slice is nil, the result is nil. -Otherwise it is a non-nil pointer to an unspecified memory address. +Otherwise it is a non-nil pointer to an unspecified memory address +[Go 1.20].

    @@ -8341,12 +8372,14 @@ The function String returns a string value whose under The same requirements apply to the ptr and len argument as in the function Slice. If len is zero, the result is the empty string "". Since Go strings are immutable, the bytes passed to String must not be modified afterwards. +[Go 1.20]

    The function StringData returns a pointer to the underlying bytes of the str argument. For an empty string the return value is unspecified, and may be nil. -Since Go strings are immutable, the bytes returned by StringData must not be modified. +Since Go strings are immutable, the bytes returned by StringData must not be modified +[Go 1.20].

    Size and alignment guarantees

    @@ -8387,6 +8420,141 @@ A struct or array type has size zero if it contains no fields (or elements, resp

    Appendix

    +

    Language versions

    + +

    +The Go 1 compatibility guarantee ensures that +programs written to the Go 1 specification will continue to compile and run +correctly, unchanged, over the lifetime of that specification. +More generally, as adjustements are made and features added to the language, +the compatibility guarantee ensures that a Go program that works with a +specific Go language version will continue to work with any subsequent version. +

    + +

    +For instance, the ability to use the prefix 0b for binary +integer literals was introduced with Go 1.13, indicated +by [Go 1.13] in the section on +integer literals. +Source code containing an integer literal such as 0b1011 +will be rejected if the implied or required language version used by +the compiler is older than Go 1.13. +

    + +

    +The following table describes the minimum language version required for +features introduced after Go 1. +

    + +

    Go 1.9

    + + +

    Go 1.13

    +
      +
    • +Integer literals may use the prefixes 0b, 0B, 0o, +and 0O for binary, and octal literals, respectively. +
    • +
    • +Hexadecimal floating-point literals may be written using the prefixes +0x and 0X. +
    • +
    • +The imaginary suffix i may be used with any (binary, decimal, hexadecimal) +integer or floating-point literal, not just decimal literals. +
    • +
    • +The digits of any number literal may be separated (grouped) +using underscores _. +
    • +
    • +The shift count in a shift operation may be a signed integer type. +
    • +
    + +

    Go 1.14

    +
      +
    • +Emdedding a method more than once through different embedded interfaces +is not an error. +
    • +
    + +

    Go 1.17

    +
      +
    • +A slice may be converted to an array pointer if the slice and array element +types match, and the array is not longer than the slice. +
    • +
    • +The built-in package unsafe includes the new functions +Add and Slice. +
    • +
    + +

    Go 1.18

    +

    +The 1.18 release adds polymorphic functions and types ("generics") to the language. +Specifically: +

    + + +

    Go 1.20

    +
      +
    • +A slice may be converted to an array if the slice and array element +types match and the array is not longer than the slice. +
    • +
    • +The built-in package unsafe includes the new functions +SliceData, String, and StringData. +
    • +
    • +Comparable types (such as ordinary interfaces) may satisfy +comparable constraints, even if the type arguments are not strictly comparable. +
    • +
    + +

    Go 1.21

    +
      +
    • +The set of predeclared functions includes the new functions +min, max, and clear. +
    • +
    • +Type inference uses the types of interface methods for inference. +It also infers type arguments for generic functions assigned to variables or +passed as arguments to other (possibly generic) functions. +
    • +
    + +

    Go 1.22

    + +

    Type unification rules

    From 26ba75fe5927a078695288da0efefba37b4a4d6e Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Mon, 18 Dec 2023 17:09:18 -0800 Subject: [PATCH 288/313] doc: document new iteration variable semantics in spec For #56010. Change-Id: Icca987a03d80587dd0e901f596ff7788584893ed Reviewed-on: https://go-review.googlesource.com/c/go/+/551095 Reviewed-by: Matthew Dempsky TryBot-Bypass: Robert Griesemer Reviewed-by: Rob Pike Reviewed-by: Robert Griesemer Auto-Submit: Robert Griesemer --- doc/go_spec.html | 56 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 51 insertions(+), 5 deletions(-) diff --git a/doc/go_spec.html b/doc/go_spec.html index 3c065f57cb..529fdeff24 100644 --- a/doc/go_spec.html +++ b/doc/go_spec.html @@ -6541,7 +6541,6 @@ additionally it may specify an init and a post statement, such as an assignment, an increment or decrement statement. The init statement may be a short variable declaration, but the post statement must not. -Variables declared by the init statement are re-used in each iteration.

    @@ -6573,6 +6572,48 @@ for cond { S() }    is the same as    for ; cond ; { S() }
     for      { S() }    is the same as    for true     { S() }
     
    +

    +Each iteration has its own separate declared variable (or variables) +[Go 1.22]. +The variable used by the first iteration is declared by the init statement. +The variable used by each subsequent iteration is declared implicitly before +executing the post statement and initialized to the value of the previous +iteration's variable at that moment. +

    + +
    +var prints []func()
    +for i := 0; i < 5; i++ {
    +	prints = append(prints, func() { println(i) })
    +	i++
    +}
    +for _, p := range prints {
    +	p()
    +}
    +
    + +

    +prints +

    + +
    +0
    +3
    +5
    +
    + +

    +Prior to [Go 1.22], iterations share one set of variables +instead of having their own separate variables. +In that case, the example above prints +

    + +
    +6
    +6
    +6
    +
    +

    For statements with range clause

    @@ -6677,9 +6718,10 @@ The iteration variables may be declared by the "range" clause using a form of short variable declaration (:=). In this case their types are set to the types of the respective iteration values -and their scope is the block of the "for" -statement; they are re-used in each iteration. -If the iteration variables are declared outside the "for" statement, +and their scope is the block of the "for" statement; +each iteration has its own separate variables [Go 1.22] +(see also "for" statements with a ForClause). +If the iteration variables are declared outside the “for” statement, after execution their values will be those of the last iteration.

    @@ -8550,7 +8592,11 @@ passed as arguments to other (possibly generic) functions.

    Go 1.22

    From 988b718f4130ab5b3ce5a5774e1a58e83c92a163 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Tue, 26 Dec 2023 21:17:04 -0800 Subject: [PATCH 289/313] doc: fix typo in example in spec Follow-up on CL 551095. For #56010. Change-Id: I8913d6ca96c419c81683e88c6286b05ae1323416 Reviewed-on: https://go-review.googlesource.com/c/go/+/552915 TryBot-Bypass: Robert Griesemer Reviewed-by: Cherry Mui Reviewed-by: Robert Griesemer Auto-Submit: Robert Griesemer --- doc/go_spec.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/go_spec.html b/doc/go_spec.html index 529fdeff24..2dd7191500 100644 --- a/doc/go_spec.html +++ b/doc/go_spec.html @@ -1,6 +1,6 @@ @@ -6597,7 +6597,7 @@ prints

    -0
    +1
     3
     5
     
    From 3233542e8514f641883119e6afa3ae1256b7642b Mon Sep 17 00:00:00 2001 From: RenJiangdu <38402095+renjiangdu@users.noreply.github.com> Date: Thu, 28 Dec 2023 09:49:45 +0000 Subject: [PATCH 290/313] reflect: fix typo in type.go There is no 'of' relationships between float and string. This points to those interfaces with internal type float or string. Change-Id: I14449f00c192e0d3f8270b433ff508978b7fdf17 GitHub-Last-Rev: f301a8aa5294e7669361627c82b2978652cfc14b GitHub-Pull-Request: golang/go#64885 Reviewed-on: https://go-review.googlesource.com/c/go/+/552957 Reviewed-by: Austin Clements Reviewed-by: David Chase TryBot-Result: Gopher Robot Reviewed-by: Jorropo Run-TryBot: qiulaidongfeng <2645477756@qq.com> Run-TryBot: Jorropo --- src/reflect/type.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/reflect/type.go b/src/reflect/type.go index a35898547a..89c5015530 100644 --- a/src/reflect/type.go +++ b/src/reflect/type.go @@ -1914,7 +1914,7 @@ func needKeyUpdate(t *abi.Type) bool { case Float32, Float64, Complex64, Complex128, Interface, String: // Float keys can be updated from +0 to -0. // String keys can be updated to use a smaller backing store. - // Interfaces might have floats of strings in them. + // Interfaces might have floats or strings in them. return true case Array: tt := (*arrayType)(unsafe.Pointer(t)) From b25f5558c69140deb652337afaab5c1186cd0ff1 Mon Sep 17 00:00:00 2001 From: cui fliter Date: Thu, 14 Dec 2023 16:40:35 +0800 Subject: [PATCH 291/313] all: replace outdated links Change-Id: I7156e7858e8f06459818e03729c644d64e04d43c Reviewed-on: https://go-review.googlesource.com/c/go/+/549356 Reviewed-by: Cherry Mui Run-TryBot: shuang cui TryBot-Result: Gopher Robot Reviewed-by: Michael Pratt LUCI-TryBot-Result: Go LUCI --- src/debug/elf/elf.go | 2 +- src/runtime/pprof/pprof.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/debug/elf/elf.go b/src/debug/elf/elf.go index 534cfa9127..e78367750f 100644 --- a/src/debug/elf/elf.go +++ b/src/debug/elf/elf.go @@ -13,7 +13,7 @@ * $FreeBSD: src/sys/sparc64/include/elf.h,v 1.12 2003/09/25 01:10:26 peter Exp $ * "System V ABI" (http://www.sco.com/developers/gabi/latest/ch4.eheader.html) * "ELF for the ARM® 64-bit Architecture (AArch64)" (ARM IHI 0056B) - * "RISC-V ELF psABI specification" (https://github.com/riscv/riscv-elf-psabi-doc/blob/master/riscv-elf.adoc) + * "RISC-V ELF psABI specification" (https://github.com/riscv-non-isa/riscv-elf-psabi-doc/blob/master/riscv-elf.adoc) * llvm/BinaryFormat/ELF.h - ELF constants and structures * * Copyright (c) 1996-1998 John D. Polstra. All rights reserved. diff --git a/src/runtime/pprof/pprof.go b/src/runtime/pprof/pprof.go index 1e698425d7..a4dcf33508 100644 --- a/src/runtime/pprof/pprof.go +++ b/src/runtime/pprof/pprof.go @@ -69,7 +69,7 @@ // all pprof commands. // // For more information about pprof, see -// https://github.com/google/pprof/blob/master/doc/README.md. +// https://github.com/google/pprof/blob/main/doc/README.md. package pprof import ( From c95fe91d0715dc0a8d55ac80a80f383c3635548b Mon Sep 17 00:00:00 2001 From: Joel Sing Date: Fri, 29 Dec 2023 22:56:58 +1100 Subject: [PATCH 292/313] runtime: correct scavengeIndex.sysGrow min index handling The backing store for the scavengeIndex chunks slice is allocated on demand as page allocation occurs. When pageAlloc.grow is called, a range is allocated from a reserved region, before scavengeIndex.grow is called to ensure that the chunks needed to manage this new range have a valid backing store. The valid region for chunks is recorded as the index min and index max. Any changes need to take the existing valid range into consideration and ensure that a contiguous valid range is maintained. However, a bug in the min index handling can currently lead to an existing part of the chunk slice backing store being zeroed via remapping. Initially, there is no backing store allocated and both min and max are zero. As soon as an allocation occurs max will be non-zero, however it is still valid for min to be zero depending on the base addresses of the page allocations. A sequence like the following will trigger the bug: 1. A page allocation occurs requiring chunks [0, 512) (after rounding) - a sysMap occurs for the backing store, min is set to 0 and max is set to 512. 2. A page allocation occurs requiring chunks [512, 1024) - another sysMap occurs for this part of the backing store, max is set to 1024, however min is incorrectly set to 512, since haveMin == 0 (validly). 3. Another page allocation occurs requiring chunks [0, 512) - since min is currently 512 a sysMap occurs for the already mapped and inuse part of the backing store from [0, 512), zeroing the chunk data. Correct this by only updating min when either haveMax == 0 (the uninitialised case) or when needMin < haveMin (the case where the new backing store range is actually below the current allocation). Remove the unnecessary haveMax == 0 check for updating max, as the existing needMax > haveMax case already covers this. Fixes #63385 Change-Id: I9deed74c4ffa187c98286fe7110e5d735e81f35f Reviewed-on: https://go-review.googlesource.com/c/go/+/553135 Reviewed-by: Michael Knyszek TryBot-Result: Gopher Robot Reviewed-by: Michael Pratt Run-TryBot: Joel Sing --- src/runtime/mpagealloc_64bit.go | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/runtime/mpagealloc_64bit.go b/src/runtime/mpagealloc_64bit.go index 1418831a50..36cd222360 100644 --- a/src/runtime/mpagealloc_64bit.go +++ b/src/runtime/mpagealloc_64bit.go @@ -209,23 +209,20 @@ func (s *scavengeIndex) sysGrow(base, limit uintptr, sysStat *sysMemStat) uintpt haveMax := s.max.Load() needMin := alignDown(uintptr(chunkIndex(base)), physPageSize/scSize) needMax := alignUp(uintptr(chunkIndex(limit)), physPageSize/scSize) - // Extend the range down to what we have, if there's no overlap. + + // We need a contiguous range, so extend the range if there's no overlap. if needMax < haveMin { needMax = haveMin } if haveMax != 0 && needMin > haveMax { needMin = haveMax } - have := makeAddrRange( - // Avoid a panic from indexing one past the last element. - uintptr(unsafe.Pointer(&s.chunks[0]))+haveMin*scSize, - uintptr(unsafe.Pointer(&s.chunks[0]))+haveMax*scSize, - ) - need := makeAddrRange( - // Avoid a panic from indexing one past the last element. - uintptr(unsafe.Pointer(&s.chunks[0]))+needMin*scSize, - uintptr(unsafe.Pointer(&s.chunks[0]))+needMax*scSize, - ) + + // Avoid a panic from indexing one past the last element. + chunksBase := uintptr(unsafe.Pointer(&s.chunks[0])) + have := makeAddrRange(chunksBase+haveMin*scSize, chunksBase+haveMax*scSize) + need := makeAddrRange(chunksBase+needMin*scSize, chunksBase+needMax*scSize) + // Subtract any overlap from rounding. We can't re-map memory because // it'll be zeroed. need = need.subtract(have) @@ -235,10 +232,10 @@ func (s *scavengeIndex) sysGrow(base, limit uintptr, sysStat *sysMemStat) uintpt sysMap(unsafe.Pointer(need.base.addr()), need.size(), sysStat) sysUsed(unsafe.Pointer(need.base.addr()), need.size(), need.size()) // Update the indices only after the new memory is valid. - if haveMin == 0 || needMin < haveMin { + if haveMax == 0 || needMin < haveMin { s.min.Store(needMin) } - if haveMax == 0 || needMax > haveMax { + if needMax > haveMax { s.max.Store(needMax) } } From aa0a6ad1db9ea2e338e755720c91e1b10376c4de Mon Sep 17 00:00:00 2001 From: Alan Donovan Date: Wed, 3 Jan 2024 11:21:49 -0500 Subject: [PATCH 293/313] doc/go1.22: add links to go/types symbols Also, join three paragraphs that should have been one. Change-Id: Ib1c252f88a1e98afe157d477caa5323c0c8365e7 Reviewed-on: https://go-review.googlesource.com/c/go/+/553715 LUCI-TryBot-Result: Go LUCI Reviewed-by: Eli Bendersky --- doc/go1.22.html | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/doc/go1.22.html b/doc/go1.22.html index 96c092f853..44d783e1bd 100644 --- a/doc/go1.22.html +++ b/doc/go1.22.html @@ -577,18 +577,17 @@ We plan to include an API migration tool in a future release, likely Go 1.23. Importer, Package, NewPackage. -

    -

    - Identifiers cannot be accurately resolved without type information. + + In general, identifiers cannot be accurately resolved without type information. Consider, for example, the identifier K in T{K: ""}: it could be the name of a local variable if T is a map type, or the name of a field if T is a struct type. -

    -

    + New programs should use the go/types - package to resolve identifiers; - see Object, Info.Uses, - and Info.Defs for details. + package to resolve identifiers; see + Object, + Info.Uses, and + Info.Defs for details.

    From 7d1b82dbf108d6cf80f959bb1558f365cee0ec0e Mon Sep 17 00:00:00 2001 From: Jes Cok Date: Wed, 3 Jan 2024 04:18:15 +0000 Subject: [PATCH 294/313] net/http: make Request.Clone create fresh copies for matches and otherValues This change fixes Request.Clone to correctly work with SetPathValue by creating fresh copies for matches and otherValues so that SetPathValue for cloned requests doesn't pollute the original request. While here, also added a doc for Request.SetPathValue. Fixes #64911 Change-Id: I2831b38e135935dfaea2b939bb9db554c75b65ef GitHub-Last-Rev: 1981db16475a49fe8d4b874a6bceec64d28a1332 GitHub-Pull-Request: golang/go#64913 Reviewed-on: https://go-review.googlesource.com/c/go/+/553375 Reviewed-by: Emmanuel Odeke Run-TryBot: Jes Cok Auto-Submit: Dmitri Shuralyov Reviewed-by: Jonathan Amsterdam TryBot-Result: Gopher Robot Reviewed-by: Dmitri Shuralyov --- src/net/http/request.go | 16 ++++++++++++++++ src/net/http/request_test.go | 27 +++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/src/net/http/request.go b/src/net/http/request.go index ed2cdac136..fce2d16f95 100644 --- a/src/net/http/request.go +++ b/src/net/http/request.go @@ -397,6 +397,20 @@ func (r *Request) Clone(ctx context.Context) *Request { r2.Form = cloneURLValues(r.Form) r2.PostForm = cloneURLValues(r.PostForm) r2.MultipartForm = cloneMultipartForm(r.MultipartForm) + + // Copy matches and otherValues. See issue 61410. + if s := r.matches; s != nil { + s2 := make([]string, len(s)) + copy(s2, s) + r2.matches = s2 + } + if s := r.otherValues; s != nil { + s2 := make(map[string]string, len(s)) + for k, v := range s { + s2[k] = v + } + r2.otherValues = s2 + } return r2 } @@ -1427,6 +1441,8 @@ func (r *Request) PathValue(name string) string { return r.otherValues[name] } +// SetPathValue sets name to value, so that subsequent calls to r.PathValue(name) +// return value. func (r *Request) SetPathValue(name, value string) { if i := r.patIndex(name); i >= 0 { r.matches[i] = value diff --git a/src/net/http/request_test.go b/src/net/http/request_test.go index 1531da3d8c..6ce32332e7 100644 --- a/src/net/http/request_test.go +++ b/src/net/http/request_test.go @@ -1053,6 +1053,33 @@ func TestRequestCloneTransferEncoding(t *testing.T) { } } +// Ensure that Request.Clone works correctly with PathValue. +// See issue 64911. +func TestRequestClonePathValue(t *testing.T) { + req, _ := http.NewRequest("GET", "https://example.org/", nil) + req.SetPathValue("p1", "orig") + + clonedReq := req.Clone(context.Background()) + clonedReq.SetPathValue("p2", "copy") + + // Ensure that any modifications to the cloned + // request do not pollute the original request. + if g, w := req.PathValue("p2"), ""; g != w { + t.Fatalf("p2 mismatch got %q, want %q", g, w) + } + if g, w := req.PathValue("p1"), "orig"; g != w { + t.Fatalf("p1 mismatch got %q, want %q", g, w) + } + + // Assert on the changes to the cloned request. + if g, w := clonedReq.PathValue("p1"), "orig"; g != w { + t.Fatalf("p1 mismatch got %q, want %q", g, w) + } + if g, w := clonedReq.PathValue("p2"), "copy"; g != w { + t.Fatalf("p2 mismatch got %q, want %q", g, w) + } +} + // Issue 34878: verify we don't panic when including basic auth (Go 1.13 regression) func TestNoPanicOnRoundTripWithBasicAuth(t *testing.T) { run(t, testNoPanicWithBasicAuth) } func testNoPanicWithBasicAuth(t *testing.T, mode testMode) { From 6db1102605f227093ea95538f0fe9e46022ad7ea Mon Sep 17 00:00:00 2001 From: John Howard Date: Tue, 19 Dec 2023 09:35:32 -0800 Subject: [PATCH 295/313] pagetrace: fix build when experiment is on due to a recent change, this experiment does not compile at all. This simply fixes to pass in the new required parameter. Change-Id: Idce0e72fa436a7acf4923717913deb3a37847fe2 Reviewed-on: https://go-review.googlesource.com/c/go/+/551415 Auto-Submit: Michael Knyszek Reviewed-by: Michael Knyszek LUCI-TryBot-Result: Go LUCI --- src/runtime/pagetrace_on.go | 2 +- src/runtime/runtime2.go | 2 ++ src/runtime/trace2status.go | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/runtime/pagetrace_on.go b/src/runtime/pagetrace_on.go index 0e621cb6ca..f82521caad 100644 --- a/src/runtime/pagetrace_on.go +++ b/src/runtime/pagetrace_on.go @@ -317,7 +317,7 @@ func finishPageTrace() { pageTrace.enabled = false // Execute a ragged barrier, flushing each trace buffer. - forEachP(func(pp *p) { + forEachP(waitReasonPageTraceFlush, func(pp *p) { if pp.pageTraceBuf.buf != nil { pp.pageTraceBuf = pp.pageTraceBuf.flush(pp.id, nanotime()) } diff --git a/src/runtime/runtime2.go b/src/runtime/runtime2.go index 2d3fd30e63..63320d4a8a 100644 --- a/src/runtime/runtime2.go +++ b/src/runtime/runtime2.go @@ -1127,6 +1127,7 @@ const ( waitReasonFlushProcCaches // "flushing proc caches" waitReasonTraceGoroutineStatus // "trace goroutine status" waitReasonTraceProcStatus // "trace proc status" + waitReasonPageTraceFlush // "page trace flush" waitReasonCoroutine // "coroutine" ) @@ -1166,6 +1167,7 @@ var waitReasonStrings = [...]string{ waitReasonFlushProcCaches: "flushing proc caches", waitReasonTraceGoroutineStatus: "trace goroutine status", waitReasonTraceProcStatus: "trace proc status", + waitReasonPageTraceFlush: "page trace flush", waitReasonCoroutine: "coroutine", } diff --git a/src/runtime/trace2status.go b/src/runtime/trace2status.go index a4a8905196..5016e08656 100644 --- a/src/runtime/trace2status.go +++ b/src/runtime/trace2status.go @@ -147,6 +147,7 @@ func goStatusToTraceGoStatus(status uint32, wr waitReason) traceGoStatus { wr == waitReasonGCMarkTermination || wr == waitReasonGarbageCollection || wr == waitReasonTraceProcStatus || + wr == waitReasonPageTraceFlush || wr == waitReasonGCWorkerActive { tgs = traceGoRunning } From 15dcdeb5aacb4503e3d053f198bd4669d5cec2aa Mon Sep 17 00:00:00 2001 From: "Devon H. O'Dell" Date: Thu, 4 Jan 2024 11:49:17 -0500 Subject: [PATCH 296/313] cmd/api: fix panic on exported basic type aliases The order of emitting named type and type aliases in the `Walker`'s `emitType` function is inverted. When the type alias references a basic type, this causes a panic as the type assertion on `*types.Named` fails. This change reorders the logic such that type aliases are emitted prior to this type assertion. Fixes #64958 Change-Id: I52dbe13999978912ded788d9cf4948103869bcfa Reviewed-on: https://go-review.googlesource.com/c/go/+/554076 Reviewed-by: Bryan Mills LUCI-TryBot-Result: Go LUCI Auto-Submit: Bryan Mills --- src/cmd/api/api_test.go | 19 +++++++++++++++++++ src/cmd/api/main_test.go | 10 +++++----- src/cmd/api/testdata/src/issue64958/p/p.go | 3 +++ 3 files changed, 27 insertions(+), 5 deletions(-) create mode 100644 src/cmd/api/testdata/src/issue64958/p/p.go diff --git a/src/cmd/api/api_test.go b/src/cmd/api/api_test.go index 910e046f12..ba358d364d 100644 --- a/src/cmd/api/api_test.go +++ b/src/cmd/api/api_test.go @@ -285,6 +285,25 @@ func TestIssue41358(t *testing.T) { } } +func TestIssue64958(t *testing.T) { + defer func() { + if x := recover(); x != nil { + t.Errorf("expected no panic; recovered %v", x) + } + }() + + testenv.MustHaveGoBuild(t) + + for _, context := range contexts { + w := NewWalker(context, "testdata/src/issue64958") + pkg, err := w.importFrom("p", "", 0) + if err != nil { + t.Errorf("expected no error importing; got %T", err) + } + w.export(pkg) + } +} + func TestCheck(t *testing.T) { if !*flagCheck { t.Skip("-check not specified") diff --git a/src/cmd/api/main_test.go b/src/cmd/api/main_test.go index 94e159e7d8..7985055b5c 100644 --- a/src/cmd/api/main_test.go +++ b/src/cmd/api/main_test.go @@ -957,17 +957,17 @@ func (w *Walker) emitType(obj *types.TypeName) { if w.isDeprecated(obj) { w.emitf("type %s //deprecated", name) } + typ := obj.Type() + if obj.IsAlias() { + w.emitf("type %s = %s", name, w.typeString(typ)) + return + } if tparams := obj.Type().(*types.Named).TypeParams(); tparams != nil { var buf bytes.Buffer buf.WriteString(name) w.writeTypeParams(&buf, tparams, true) name = buf.String() } - typ := obj.Type() - if obj.IsAlias() { - w.emitf("type %s = %s", name, w.typeString(typ)) - return - } switch typ := typ.Underlying().(type) { case *types.Struct: w.emitStructType(name, typ) diff --git a/src/cmd/api/testdata/src/issue64958/p/p.go b/src/cmd/api/testdata/src/issue64958/p/p.go new file mode 100644 index 0000000000..feba86797f --- /dev/null +++ b/src/cmd/api/testdata/src/issue64958/p/p.go @@ -0,0 +1,3 @@ +package p + +type BasicAlias = uint8 From 1e07c144c3e43d95b0c21fdc73c520fe809d7f51 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Thu, 4 Jan 2024 11:41:54 -0500 Subject: [PATCH 297/313] net/http/cgi: in TestCopyError, check for a Handler.ServeHTTP goroutine instead of a running PID Previously, the test could fail spuriously if the CGI process's PID happened to be reused in between checks. That sort of reuse is highly unlikely on platforms that cycle through the PID space sequentially (such as Linux), but plausible on platforms that use randomized PIDs (such as OpenBSD). Also unskip the test on Windows, since it no longer relies on being able to send signal 0 to an arbitrary PID. Also change the expected failure mode of the test to a timeout instead of a call to t.Fatalf, so that on failure we get a useful goroutine dump for debugging instead of a non-actionable failure message. Fixes #57369 (maybe). Change-Id: Ib7e3fff556450b48cb5e6ea120fdf4d53547479b Reviewed-on: https://go-review.googlesource.com/c/go/+/554075 LUCI-TryBot-Result: Go LUCI Auto-Submit: Bryan Mills Reviewed-by: Damien Neil --- src/net/http/cgi/host_test.go | 56 +++++++++++++++++++--------------- src/net/http/cgi/plan9_test.go | 17 ----------- src/net/http/cgi/posix_test.go | 20 ------------ 3 files changed, 31 insertions(+), 62 deletions(-) delete mode 100644 src/net/http/cgi/plan9_test.go delete mode 100644 src/net/http/cgi/posix_test.go diff --git a/src/net/http/cgi/host_test.go b/src/net/http/cgi/host_test.go index 78e05d592a..f29395fe84 100644 --- a/src/net/http/cgi/host_test.go +++ b/src/net/http/cgi/host_test.go @@ -17,8 +17,8 @@ import ( "os" "path/filepath" "reflect" + "regexp" "runtime" - "strconv" "strings" "testing" "time" @@ -363,11 +363,12 @@ func TestInternalRedirect(t *testing.T) { // TestCopyError tests that we kill the process if there's an error copying // its output. (for example, from the client having gone away) +// +// If we fail to do so, the test will time out (and dump its goroutines) with a +// call to [Handler.ServeHTTP] blocked on a deferred call to [exec.Cmd.Wait]. func TestCopyError(t *testing.T) { testenv.MustHaveExec(t) - if runtime.GOOS == "windows" { - t.Skipf("skipping test on %q", runtime.GOOS) - } + h := &Handler{ Path: os.Args[0], Root: "/test.cgi", @@ -390,37 +391,42 @@ func TestCopyError(t *testing.T) { t.Fatalf("ReadResponse: %v", err) } - pidstr := res.Header.Get("X-CGI-Pid") - if pidstr == "" { - t.Fatalf("expected an X-CGI-Pid header in response") - } - pid, err := strconv.Atoi(pidstr) - if err != nil { - t.Fatalf("invalid X-CGI-Pid value") - } - var buf [5000]byte n, err := io.ReadFull(res.Body, buf[:]) if err != nil { t.Fatalf("ReadFull: %d bytes, %v", n, err) } - childRunning := func() bool { - return isProcessRunning(pid) - } - - if !childRunning() { - t.Fatalf("pre-conn.Close, expected child to be running") + if !handlerRunning() { + t.Fatalf("pre-conn.Close, expected handler to still be running") } conn.Close() + closed := time.Now() - tries := 0 - for tries < 25 && childRunning() { - time.Sleep(50 * time.Millisecond * time.Duration(tries)) - tries++ + nextSleep := 1 * time.Millisecond + for { + time.Sleep(nextSleep) + nextSleep *= 2 + if !handlerRunning() { + break + } + t.Logf("handler still running %v after conn.Close", time.Since(closed)) } - if childRunning() { - t.Fatalf("post-conn.Close, expected child to be gone") +} + +// handlerRunning reports whether any goroutine is currently running +// [Handler.ServeHTTP]. +func handlerRunning() bool { + r := regexp.MustCompile(`net/http/cgi\.\(\*Handler\)\.ServeHTTP`) + buf := make([]byte, 64<<10) + for { + n := runtime.Stack(buf, true) + if n < len(buf) { + return r.Match(buf[:n]) + } + // Buffer wasn't large enough for a full goroutine dump. + // Resize it and try again. + buf = make([]byte, 2*len(buf)) } } diff --git a/src/net/http/cgi/plan9_test.go b/src/net/http/cgi/plan9_test.go deleted file mode 100644 index b7ace3f81c..0000000000 --- a/src/net/http/cgi/plan9_test.go +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build plan9 - -package cgi - -import ( - "os" - "strconv" -) - -func isProcessRunning(pid int) bool { - _, err := os.Stat("/proc/" + strconv.Itoa(pid)) - return err == nil -} diff --git a/src/net/http/cgi/posix_test.go b/src/net/http/cgi/posix_test.go deleted file mode 100644 index 49b9470d4a..0000000000 --- a/src/net/http/cgi/posix_test.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !plan9 - -package cgi - -import ( - "os" - "syscall" -) - -func isProcessRunning(pid int) bool { - p, err := os.FindProcess(pid) - if err != nil { - return false - } - return p.Signal(syscall.Signal(0)) == nil -} From ead47b0ab39c5819aee207cda536531a8e44ddc7 Mon Sep 17 00:00:00 2001 From: Andy Pan Date: Thu, 4 Jan 2024 15:28:14 +0800 Subject: [PATCH 298/313] net/http: respond with 400 Bad Request for empty hex number of chunk length Fixes #64517 Change-Id: I78b8a6a83301deee05c3ff052a6adcd1f965aef2 Reviewed-on: https://go-review.googlesource.com/c/go/+/553835 Auto-Submit: Damien Neil Commit-Queue: Damien Neil LUCI-TryBot-Result: Go LUCI Reviewed-by: Damien Neil Reviewed-by: Bryan Mills --- src/net/http/internal/chunked.go | 3 +++ src/net/http/internal/chunked_test.go | 1 + 2 files changed, 4 insertions(+) diff --git a/src/net/http/internal/chunked.go b/src/net/http/internal/chunked.go index aad8e5aa09..c0fa4ccac7 100644 --- a/src/net/http/internal/chunked.go +++ b/src/net/http/internal/chunked.go @@ -263,6 +263,9 @@ type FlushAfterChunkWriter struct { } func parseHexUint(v []byte) (n uint64, err error) { + if len(v) == 0 { + return 0, errors.New("empty hex number for chunk length") + } for i, b := range v { switch { case '0' <= b && b <= '9': diff --git a/src/net/http/internal/chunked_test.go b/src/net/http/internal/chunked_test.go index b99090c1f8..af79711781 100644 --- a/src/net/http/internal/chunked_test.go +++ b/src/net/http/internal/chunked_test.go @@ -153,6 +153,7 @@ func TestParseHexUint(t *testing.T) { {"00000000000000000", 0, "http chunk length too large"}, // could accept if we wanted {"10000000000000000", 0, "http chunk length too large"}, {"00000000000000001", 0, "http chunk length too large"}, // could accept if we wanted + {"", 0, "empty hex number for chunk length"}, } for i := uint64(0); i <= 1234; i++ { tests = append(tests, testCase{in: fmt.Sprintf("%x", i), want: i}) From 8db131082d08e497fd8e9383d0ff7715e1bef478 Mon Sep 17 00:00:00 2001 From: Sean Liao Date: Fri, 29 Dec 2023 19:09:16 +0000 Subject: [PATCH 299/313] github: switch seen/expected order in issue forms Also fixup wording across other templates. Fixes #64890 Change-Id: I6f9ade440b6702ddfafc21ccb7fbc6cabc2b856e Reviewed-on: https://go-review.googlesource.com/c/go/+/553155 Auto-Submit: Dmitri Shuralyov Reviewed-by: Joseph Tsai LUCI-TryBot-Result: Go LUCI Reviewed-by: Dmitri Shuralyov Reviewed-by: Bryan Mills Reviewed-by: Dmitri Shuralyov --- .github/ISSUE_TEMPLATE/00-bug.yml | 15 ++++++++------- .github/ISSUE_TEMPLATE/01-pkgsite.yml | 12 ++++++------ .github/ISSUE_TEMPLATE/02-pkgsite-removal.yml | 19 ++++++++++++++++--- .github/ISSUE_TEMPLATE/03-gopls.yml | 14 +++++++------- .github/ISSUE_TEMPLATE/04-vuln.yml | 18 +++++++++--------- 5 files changed, 46 insertions(+), 32 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/00-bug.yml b/.github/ISSUE_TEMPLATE/00-bug.yml index f3997ec3c1..5b0fda4950 100644 --- a/.github/ISSUE_TEMPLATE/00-bug.yml +++ b/.github/ISSUE_TEMPLATE/00-bug.yml @@ -23,9 +23,9 @@ body: required: true - type: textarea - id: os-and-processor + id: go-env attributes: - label: "What operating system and processor architecture are you using (`go env`)?" + label: "Output of `go env` in your module/workspace:" placeholder: | GO111MODULE="" GOARCH="arm64" @@ -78,16 +78,17 @@ body: required: true - type: textarea - id: expected-behavior + id: actual-behavior attributes: - label: "What did you expect to see?" + label: "What did you see happen?" + description: Command invocations and their associated output, functions with their arguments and return results, full stacktraces for panics (upload a file if it is very long), etc. Prefer copying text output over using screenshots. validations: required: true - type: textarea - id: actual-behavior + id: expected-behavior attributes: - label: "What did you see instead?" + label: "What did you expect to see?" + description: Why is the current output incorrect, and any additional context we may need to understand the issue. validations: required: true - diff --git a/.github/ISSUE_TEMPLATE/01-pkgsite.yml b/.github/ISSUE_TEMPLATE/01-pkgsite.yml index fb695857c7..aaf39b2928 100644 --- a/.github/ISSUE_TEMPLATE/01-pkgsite.yml +++ b/.github/ISSUE_TEMPLATE/01-pkgsite.yml @@ -33,15 +33,15 @@ body: description: "If possible, provide a recipe for reproducing the error. Starting with a Private/Incognito tab/window may help rule out problematic browser extensions." validations: required: true + - type: textarea + id: actual-behavior + attributes: + label: "What did you see happen?" + validations: + required: true - type: textarea id: expected-behavior attributes: label: "What did you expect to see?" validations: required: true - - type: textarea - id: actual-behavior - attributes: - label: "What did you see instead?" - validations: - required: true diff --git a/.github/ISSUE_TEMPLATE/02-pkgsite-removal.yml b/.github/ISSUE_TEMPLATE/02-pkgsite-removal.yml index 71d0a19d71..693f4999dc 100644 --- a/.github/ISSUE_TEMPLATE/02-pkgsite-removal.yml +++ b/.github/ISSUE_TEMPLATE/02-pkgsite-removal.yml @@ -10,20 +10,33 @@ body: id: package-path attributes: label: "What is the path of the package that you would like to have removed?" - description: "We can remove packages with a shared path prefix. For example, a request for 'github.com/author' would remove all pkg.go.dev pages with that package path prefix." + description: | + We can remove packages with a shared path prefix. + For example, a request for 'github.com/author' would remove all pkg.go.dev pages with that package path prefix. validations: required: true - type: textarea id: package-owner attributes: label: "Are you the owner of this package?" - description: "Only the package owners can request to have their packages removed from pkg.go.dev." + description: | + Only the package owners can request to have their packages removed from pkg.go.dev. + If the package path doesn't include your github username, please provide some other form of proof of ownership. validations: required: true - type: textarea id: retraction-reason attributes: label: "What is the reason that you could not retract this package instead?" - description: "If you would like to have your module removed from pkg.go.dev, we recommend that you retract them, so that they can be removed from the go command and proxy.golang.org as well. Retracting a module version involves adding a retract directive to your go.mod file and publishing a new version. For example: https://github.com/jba/retract-demo/blob/main/go.mod#L5-L8. See https://pkg.go.dev/about#removing-a-package for additional tips on retractions." + description: | + Requesting we remove a module here only hides the generated documentation on pkg.go.dev. + It does not affect the behaviour of proxy.golang.org or the go command. + Instead we recommend using the retract directive which will be processed by all 3 of the above. + + If you have deleted your repo, please recreate it and publish a retraction. + + Retracting a module version involves adding a retract directive to your go.mod file and publishing a new version. + For example: https://github.com/jba/retract-demo/blob/main/go.mod#L5-L8. + See https://pkg.go.dev/about#removing-a-package for additional tips on retractions. validations: required: true diff --git a/.github/ISSUE_TEMPLATE/03-gopls.yml b/.github/ISSUE_TEMPLATE/03-gopls.yml index 83759d65d8..5db1315f27 100644 --- a/.github/ISSUE_TEMPLATE/03-gopls.yml +++ b/.github/ISSUE_TEMPLATE/03-gopls.yml @@ -25,7 +25,13 @@ body: id: what-did-you-do attributes: label: "What did you do?" - description: "If possible, provide a recipe for reproducing the error. A complete runnable program is good. A link on go.dev/play is better. A failing unit test is the best." + description: "If possible, provide a recipe for reproducing the error. A complete runnable program is good. A link on [go.dev/play](https://go.dev/play) is better. A failing unit test is the best." + validations: + required: true + - type: textarea + id: actual-behavior + attributes: + label: "What did you see happen?" validations: required: true - type: textarea @@ -34,12 +40,6 @@ body: label: "What did you expect to see?" validations: required: true - - type: textarea - id: actual-behavior - attributes: - label: "What did you see instead?" - validations: - required: true - type: textarea id: editor-and-settings attributes: diff --git a/.github/ISSUE_TEMPLATE/04-vuln.yml b/.github/ISSUE_TEMPLATE/04-vuln.yml index ae1356886c..dd40af99c6 100644 --- a/.github/ISSUE_TEMPLATE/04-vuln.yml +++ b/.github/ISSUE_TEMPLATE/04-vuln.yml @@ -6,7 +6,7 @@ body: - type: markdown attributes: value: "Please answer these questions before submitting your issue. Thanks! To add a new vulnerability to the Go vulnerability database (https://vuln.go.dev), see https://go.dev/s/vulndb-report-new. To report an issue about a report, see https://go.dev/s/vulndb-report-feedback." - - type: input + - type: textarea id: govulncheck-version attributes: label: govulncheck version @@ -25,9 +25,9 @@ body: validations: required: true - type: textarea - id: os-and-processor + id: go-env attributes: - label: "What operating system and processor architecture are you using (`go env`)?" + label: "Output of `go env` in your module/workspace:" render: shell validations: required: true @@ -38,15 +38,15 @@ body: description: "If possible, provide a recipe for reproducing the error. A complete runnable program is good. A link on [go.dev/play](https://go.dev/play) is best." validations: required: true + - type: textarea + id: actual-behavior + attributes: + label: "What did you see happen?" + validations: + required: true - type: textarea id: expected-behavior attributes: label: "What did you expect to see?" validations: required: true - - type: textarea - id: actual-behavior - attributes: - label: "What did you see instead?" - validations: - required: true From c0693f648a2fd98aae126ef4f68cd7b6ebff40cd Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Thu, 21 Dec 2023 08:21:59 -0500 Subject: [PATCH 300/313] cmd/go: run cover tool before swig When building a package, run the cover tool on the collected go/cgo source files before invoking swig (if swig files are present), as opposed to running swig and then cover. Running swig adds new Go files to the "cgo" list, and we want to avoid running those newly generated files through the cover tool. Fixes #64661. Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest Change-Id: I32b6dad5c39fcf5e656c40fb3b44220c69320889 Reviewed-on: https://go-review.googlesource.com/c/go/+/552095 Auto-Submit: Than McIntosh Reviewed-by: Bryan Mills LUCI-TryBot-Result: Go LUCI --- src/cmd/go/internal/work/exec.go | 29 +++++---- src/cmd/go/testdata/script/cover_swig.txt | 72 +++++++++++++++++++++++ 2 files changed, 88 insertions(+), 13 deletions(-) create mode 100644 src/cmd/go/testdata/script/cover_swig.txt diff --git a/src/cmd/go/internal/work/exec.go b/src/cmd/go/internal/work/exec.go index ecad324886..e05471b06c 100644 --- a/src/cmd/go/internal/work/exec.go +++ b/src/cmd/go/internal/work/exec.go @@ -629,19 +629,6 @@ OverlayLoop: } } - // Run SWIG on each .swig and .swigcxx file. - // Each run will generate two files, a .go file and a .c or .cxx file. - // The .go file will use import "C" and is to be processed by cgo. - if p.UsesSwig() { - outGo, outC, outCXX, err := b.swig(a, objdir, pcCFLAGS) - if err != nil { - return err - } - cgofiles = append(cgofiles, outGo...) - cfiles = append(cfiles, outC...) - cxxfiles = append(cxxfiles, outCXX...) - } - // If we're doing coverage, preprocess the .go files and put them in the work directory if p.Internal.Cover.Mode != "" { outfiles := []string{} @@ -722,6 +709,22 @@ OverlayLoop: } } + // Run SWIG on each .swig and .swigcxx file. + // Each run will generate two files, a .go file and a .c or .cxx file. + // The .go file will use import "C" and is to be processed by cgo. + // For -cover test or build runs, this needs to happen after the cover + // tool is run; we don't want to instrument swig-generated Go files, + // see issue #64661. + if p.UsesSwig() { + outGo, outC, outCXX, err := b.swig(a, objdir, pcCFLAGS) + if err != nil { + return err + } + cgofiles = append(cgofiles, outGo...) + cfiles = append(cfiles, outC...) + cxxfiles = append(cxxfiles, outCXX...) + } + // Run cgo. if p.UsesCgo() || p.UsesSwig() { // In a package using cgo, cgo compiles the C, C++ and assembly files with gcc. diff --git a/src/cmd/go/testdata/script/cover_swig.txt b/src/cmd/go/testdata/script/cover_swig.txt new file mode 100644 index 0000000000..decb29aaec --- /dev/null +++ b/src/cmd/go/testdata/script/cover_swig.txt @@ -0,0 +1,72 @@ + +# Testcase for issue 64661. This testcase is intended to verify that +# we don't try to send swig-generated Go files through the cover tool +# for "go test -cover" runs on packages that have *.swig source files. + +[!exec:swig] skip +[!cgo] skip + +go test -v -count=1 -coverprofile=foo.p +stdout 'coverage: 100.0% of statements' + +-- go.mod -- +module simple + +go 1.21 +-- main.c -- +/* A global variable */ +double Foo = 3.0; + +/* Compute the greatest common divisor of positive integers */ +int gcd(int x, int y) { + int g; + g = y; + while (x > 0) { + g = x; + x = y % x; + y = g; + } + return g; +} + + +-- main.go -- +package main + +import ( + "fmt" +) + +func main() { + // Call our gcd() function + x := 42 + y := 105 + g := Gcd(x, y) + fmt.Println("The gcd of", x, "and", y, "is", g) + + // Manipulate the Foo global variable + + // Output its current value + fmt.Println("Foo =", GetFoo()) + + // Change its value + SetFoo(3.1415926) + + // See if the change took effect + fmt.Println("Foo =", GetFoo()) +} +-- main.swig -- +%module main + +%inline %{ +extern int gcd(int x, int y); +extern double Foo; +%} +-- main_test.go -- +package main + +import "testing" + +func TestSwigFuncs(t *testing.T) { + main() +} From 8088b6db2341e6efdb9e0b0f43953ccd17fd9705 Mon Sep 17 00:00:00 2001 From: Alan Donovan Date: Fri, 5 Jan 2024 15:54:03 -0500 Subject: [PATCH 301/313] slices: explicitly discard results of some functions This will otherwise trigger an "unusedresult" vet check. Fixes #64978 Change-Id: Ie19aded0f808d394f389452c3ff7f3edc1ed710d Reviewed-on: https://go-review.googlesource.com/c/go/+/554196 LUCI-TryBot-Result: Go LUCI Reviewed-by: Bryan Mills --- src/slices/slices_test.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/slices/slices_test.go b/src/slices/slices_test.go index ab25bd8dfd..31d59abe17 100644 --- a/src/slices/slices_test.go +++ b/src/slices/slices_test.go @@ -557,7 +557,7 @@ func TestInsertPanics(t *testing.T) { {"with out-of-bounds index and = cap", a[:1:2], 2, b[:]}, {"with out-of-bounds index and < cap", a[:1:3], 2, b[:]}, } { - if !panics(func() { Insert(test.s, test.i, test.v...) }) { + if !panics(func() { _ = Insert(test.s, test.i, test.v...) }) { t.Errorf("Insert %s: got no panic, want panic", test.name) } } @@ -684,7 +684,7 @@ func TestDeletePanics(t *testing.T) { {"s[i:j] is valid and j > len(s)", s, 0, 4}, {"s[i:j] is valid and i == j > len(s)", s, 3, 3}, } { - if !panics(func() { Delete(test.s, test.i, test.j) }) { + if !panics(func() { _ = Delete(test.s, test.i, test.j) }) { t.Errorf("Delete %s: got no panic, want panic", test.name) } } @@ -906,10 +906,10 @@ func TestGrow(t *testing.T) { } // Test number of allocations. - if n := testing.AllocsPerRun(100, func() { Grow(s2, cap(s2)-len(s2)) }); n != 0 { + if n := testing.AllocsPerRun(100, func() { _ = Grow(s2, cap(s2)-len(s2)) }); n != 0 { t.Errorf("Grow should not allocate when given sufficient capacity; allocated %v times", n) } - if n := testing.AllocsPerRun(100, func() { Grow(s2, cap(s2)-len(s2)+1) }); n != 1 { + if n := testing.AllocsPerRun(100, func() { _ = Grow(s2, cap(s2)-len(s2)+1) }); n != 1 { errorf := t.Errorf if race.Enabled || testenv.OptimizationOff() { errorf = t.Logf // this allocates multiple times in race detector mode @@ -921,7 +921,7 @@ func TestGrow(t *testing.T) { var gotPanic bool func() { defer func() { gotPanic = recover() != nil }() - Grow(s1, -1) + _ = Grow(s1, -1) }() if !gotPanic { t.Errorf("Grow(-1) did not panic; expected a panic") @@ -1037,7 +1037,7 @@ func TestReplacePanics(t *testing.T) { {"s[i:j] is valid and j > len(s)", s, nil, 0, 4}, } { ss, vv := Clone(test.s), Clone(test.v) - if !panics(func() { Replace(ss, test.i, test.j, vv...) }) { + if !panics(func() { _ = Replace(ss, test.i, test.j, vv...) }) { t.Errorf("Replace %s: should have panicked", test.name) } } From 1ae729e6d34040a84da8ef2fc0b9781efe9b0d95 Mon Sep 17 00:00:00 2001 From: Jes Cok Date: Fri, 5 Jan 2024 10:20:03 +0000 Subject: [PATCH 302/313] doc: s/adjustements/adjustments Change-Id: I904b1adee13c63bc7d47d4325b794c1a650eb18d GitHub-Last-Rev: 8eced8db566c4dea433260f87456902542095970 GitHub-Pull-Request: golang/go#64969 Reviewed-on: https://go-review.googlesource.com/c/go/+/554255 Reviewed-by: Dmitri Shuralyov Auto-Submit: Dmitri Shuralyov TryBot-Result: Gopher Robot Reviewed-by: Dmitri Shuralyov Reviewed-by: Bryan Mills Run-TryBot: Jes Cok --- doc/go_spec.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/go_spec.html b/doc/go_spec.html index 2dd7191500..bd974b3c48 100644 --- a/doc/go_spec.html +++ b/doc/go_spec.html @@ -8468,7 +8468,7 @@ A struct or array type has size zero if it contains no fields (or elements, resp The Go 1 compatibility guarantee ensures that programs written to the Go 1 specification will continue to compile and run correctly, unchanged, over the lifetime of that specification. -More generally, as adjustements are made and features added to the language, +More generally, as adjustments are made and features added to the language, the compatibility guarantee ensures that a Go program that works with a specific Go language version will continue to work with any subsequent version.

    From 881869dde0ddddf37151137421cd53d0c537671e Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Tue, 2 Jan 2024 22:28:49 +0700 Subject: [PATCH 303/313] cmd/compile: handle defined iter func type correctly Fixed #64930 Change-Id: I916de7f97116fb20cb2f3f0b425ac34409afd494 Reviewed-on: https://go-review.googlesource.com/c/go/+/553436 LUCI-TryBot-Result: Go LUCI Reviewed-by: Dmitri Shuralyov Reviewed-by: Matthew Dempsky Auto-Submit: Cuong Manh Le --- src/cmd/compile/internal/rangefunc/rewrite.go | 2 +- test/range4.go | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/cmd/compile/internal/rangefunc/rewrite.go b/src/cmd/compile/internal/rangefunc/rewrite.go index 7475c570aa..d439412ea8 100644 --- a/src/cmd/compile/internal/rangefunc/rewrite.go +++ b/src/cmd/compile/internal/rangefunc/rewrite.go @@ -934,7 +934,7 @@ func (r *rewriter) endLoop(loop *forLoop) { if rfunc.Params().Len() != 1 { base.Fatalf("invalid typecheck of range func") } - ftyp := rfunc.Params().At(0).Type().(*types2.Signature) // func(...) bool + ftyp := types2.CoreType(rfunc.Params().At(0).Type()).(*types2.Signature) // func(...) bool if ftyp.Results().Len() != 1 { base.Fatalf("invalid typecheck of range func") } diff --git a/test/range4.go b/test/range4.go index 696b205ab7..0b051f6d3c 100644 --- a/test/range4.go +++ b/test/range4.go @@ -311,6 +311,30 @@ func testcalls() { } } +type iter3YieldFunc func(int, int) bool + +func iter3(list ...int) func(iter3YieldFunc) { + return func(yield iter3YieldFunc) { + for k, v := range list { + if !yield(k, v) { + return + } + } + } +} + +func testcalls1() { + ncalls := 0 + for k, v := range iter3(1, 2, 3) { + _, _ = k, v + ncalls++ + } + if ncalls != 3 { + println("wrong number of calls:", ncalls, "!= 3") + panic("fail") + } +} + func main() { testfunc0() testfunc1() @@ -323,4 +347,5 @@ func main() { testfunc8() testfunc9() testcalls() + testcalls1() } From 10a66d681672a8600705a7540e3b0477d4c43c4a Mon Sep 17 00:00:00 2001 From: sivchari Date: Thu, 28 Sep 2023 07:08:51 +0900 Subject: [PATCH 304/313] sync: use map[any]any instead of map[interface{}]interface{} in the godoc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It's shorter and clearer. Change-Id: Ibfbe5a7f8d70fa884691ba9858a2c9b2122d9c50 Reviewed-on: https://go-review.googlesource.com/c/go/+/531475 Reviewed-by: Bryan Mills Reviewed-by: Dmitri Shuralyov Reviewed-by: Daniel Martí LUCI-TryBot-Result: Go LUCI Auto-Submit: Dmitri Shuralyov --- src/sync/map.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sync/map.go b/src/sync/map.go index 00b2446153..7a9eebdce3 100644 --- a/src/sync/map.go +++ b/src/sync/map.go @@ -8,7 +8,7 @@ import ( "sync/atomic" ) -// Map is like a Go map[interface{}]interface{} but is safe for concurrent use +// Map is like a Go map[any]any but is safe for concurrent use // by multiple goroutines without additional locking or coordination. // Loads, stores, and deletes run in amortized constant time. // From 759849187f51e40e36a507656485e34170f77497 Mon Sep 17 00:00:00 2001 From: Jonathan Amsterdam Date: Mon, 25 Sep 2023 08:41:31 -0400 Subject: [PATCH 305/313] log/slog: clarify SetDefault behavior Change-Id: I53250ca9e6d1ba69cc667949bebb5be2651a020d Reviewed-on: https://go-review.googlesource.com/c/go/+/530477 TryBot-Result: Gopher Robot Reviewed-by: Alan Donovan Run-TryBot: Jonathan Amsterdam --- src/log/slog/logger.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/log/slog/logger.go b/src/log/slog/logger.go index 4d21ee7990..10aa6a2b31 100644 --- a/src/log/slog/logger.go +++ b/src/log/slog/logger.go @@ -53,7 +53,8 @@ func init() { // Default returns the default [Logger]. func Default() *Logger { return defaultLogger.Load() } -// SetDefault makes l the default [Logger]. +// SetDefault makes l the default [Logger], which is used by +// the top-level functions [Info], [Debug] and so on. // After this call, output from the log package's default Logger // (as with [log.Print], etc.) will be logged using l's Handler, // at a level controlled by [SetLogLoggerLevel]. From 8eaa7935db8c8b901f4dbb7d224a347bb3c33d7f Mon Sep 17 00:00:00 2001 From: Mauri de Souza Meneguzzo Date: Sat, 2 Dec 2023 15:11:36 +0000 Subject: [PATCH 306/313] net: clarify maxListenerBacklog windows implementation The previous TODO comments were somewhat ambiguous. This aims to provide a clearer understanding of the behavior on Windows. Windows does not offer a way to peek at the current backlog length, this is explicitly stated in the winapi for `listen`. When set to `syscall.SOMAXCONN`, the OS dynamically adjusts the backlog to a maximum reasonable value. It goes as far as the dotnet runtime itself introducing a new version of `listen` that does not accept a backlog parameter to help eliminate the confusion when comparing the behavior with UNIXes. The docs also mention that `SOMAXCONN_HINT(N)` can be used, and that it clips the final computed value between (200, 65535), which suggests windows might use a `uint16` to back this number. Either way it does not matter since windows will adjust this value anyway, so I removed the wrapping TODO as well. See https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-listen Change-Id: I7b2e7cb547467c4bfc572ef0477a58de8c772521 GitHub-Last-Rev: 34e74abffe8792c8709c73db4d7a5fa05f64b1d0 GitHub-Pull-Request: golang/go#63549 Reviewed-on: https://go-review.googlesource.com/c/go/+/535475 Reviewed-by: Damien Neil Reviewed-by: Dmitri Shuralyov LUCI-TryBot-Result: Go LUCI --- src/net/sock_windows.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/net/sock_windows.go b/src/net/sock_windows.go index 5540135a2c..a519909bb0 100644 --- a/src/net/sock_windows.go +++ b/src/net/sock_windows.go @@ -11,8 +11,9 @@ import ( ) func maxListenerBacklog() int { - // TODO: Implement this - // NOTE: Never return a number bigger than 1<<16 - 1. See issue 5030. + // When the socket backlog is SOMAXCONN, Windows will set the backlog to + // "a reasonable maximum value". + // See: https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-listen return syscall.SOMAXCONN } From b702e0438ae9577dcc642ba7696a89799c86c8b7 Mon Sep 17 00:00:00 2001 From: Mehdi Mostafavi Date: Mon, 8 Jan 2024 16:58:39 +0000 Subject: [PATCH 307/313] cmd/doc: fix inconsistent receiver name The ToText method of Package is the only one with a receiver declared 'p'; all the rest have 'pkg'. Fix it to be consistent. Change-Id: I2b47c719f4f6f8d87336316b7f80deb1b49e17dc GitHub-Last-Rev: 7d273b4ef0780b7ed8b651c117a28b25bab5bcb1 GitHub-Pull-Request: golang/go#64912 Reviewed-on: https://go-review.googlesource.com/c/go/+/553335 Run-TryBot: Rob Pike Reviewed-by: Dmitri Shuralyov Auto-Submit: Dmitri Shuralyov Reviewed-by: qiulaidongfeng <2645477756@qq.com> Reviewed-by: Matthew Dempsky TryBot-Result: Gopher Robot Reviewed-by: Rob Pike --- src/cmd/doc/pkg.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cmd/doc/pkg.go b/src/cmd/doc/pkg.go index dfdc5674e9..a21d8a4688 100644 --- a/src/cmd/doc/pkg.go +++ b/src/cmd/doc/pkg.go @@ -43,9 +43,9 @@ type Package struct { buf pkgBuffer } -func (p *Package) ToText(w io.Writer, text, prefix, codePrefix string) { - d := p.doc.Parser().Parse(text) - pr := p.doc.Printer() +func (pkg *Package) ToText(w io.Writer, text, prefix, codePrefix string) { + d := pkg.doc.Parser().Parse(text) + pr := pkg.doc.Printer() pr.TextPrefix = prefix pr.TextCodePrefix = codePrefix w.Write(pr.Text(d)) From b7c630dc3ac3f43b2294f803f26f512d75a54fc6 Mon Sep 17 00:00:00 2001 From: Mauri de Souza Meneguzzo Date: Wed, 13 Dec 2023 21:18:07 +0000 Subject: [PATCH 308/313] runtime: fix tests when running with -msan Currently go test -msan runtime always fails on loong64, arm64 and amd64. Changed the variable name to sz to match the function prototypes. For #64256 Change-Id: Ida71197307016520deb39293927850d47845140a GitHub-Last-Rev: 0ee1e3bb093e682ef325d9860a8fed67570ca345 GitHub-Pull-Request: golang/go#64572 Reviewed-on: https://go-review.googlesource.com/c/go/+/547696 Reviewed-by: Keith Randall Reviewed-by: Keith Randall LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek Auto-Submit: Keith Randall --- src/runtime/msan_amd64.s | 10 +++++----- src/runtime/msan_arm64.s | 10 +++++----- src/runtime/msan_loong64.s | 10 +++++----- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/runtime/msan_amd64.s b/src/runtime/msan_amd64.s index 89ed3048d0..a1dc388063 100644 --- a/src/runtime/msan_amd64.s +++ b/src/runtime/msan_amd64.s @@ -28,7 +28,7 @@ // Called from msanread. TEXT runtime·domsanread(SB), NOSPLIT, $0-16 MOVQ addr+0(FP), RARG0 - MOVQ size+8(FP), RARG1 + MOVQ sz+8(FP), RARG1 // void __msan_read_go(void *addr, uintptr_t sz); MOVQ $__msan_read_go(SB), AX JMP msancall<>(SB) @@ -37,7 +37,7 @@ TEXT runtime·domsanread(SB), NOSPLIT, $0-16 // Called from instrumented code. TEXT runtime·msanwrite(SB), NOSPLIT, $0-16 MOVQ addr+0(FP), RARG0 - MOVQ size+8(FP), RARG1 + MOVQ sz+8(FP), RARG1 // void __msan_write_go(void *addr, uintptr_t sz); MOVQ $__msan_write_go(SB), AX JMP msancall<>(SB) @@ -45,7 +45,7 @@ TEXT runtime·msanwrite(SB), NOSPLIT, $0-16 // func runtime·msanmalloc(addr unsafe.Pointer, sz uintptr) TEXT runtime·msanmalloc(SB), NOSPLIT, $0-16 MOVQ addr+0(FP), RARG0 - MOVQ size+8(FP), RARG1 + MOVQ sz+8(FP), RARG1 // void __msan_malloc_go(void *addr, uintptr_t sz); MOVQ $__msan_malloc_go(SB), AX JMP msancall<>(SB) @@ -53,7 +53,7 @@ TEXT runtime·msanmalloc(SB), NOSPLIT, $0-16 // func runtime·msanfree(addr unsafe.Pointer, sz uintptr) TEXT runtime·msanfree(SB), NOSPLIT, $0-16 MOVQ addr+0(FP), RARG0 - MOVQ size+8(FP), RARG1 + MOVQ sz+8(FP), RARG1 // void __msan_free_go(void *addr, uintptr_t sz); MOVQ $__msan_free_go(SB), AX JMP msancall<>(SB) @@ -62,7 +62,7 @@ TEXT runtime·msanfree(SB), NOSPLIT, $0-16 TEXT runtime·msanmove(SB), NOSPLIT, $0-24 MOVQ dst+0(FP), RARG0 MOVQ src+8(FP), RARG1 - MOVQ size+16(FP), RARG2 + MOVQ sz+16(FP), RARG2 // void __msan_memmove(void *dst, void *src, uintptr_t sz); MOVQ $__msan_memmove(SB), AX JMP msancall<>(SB) diff --git a/src/runtime/msan_arm64.s b/src/runtime/msan_arm64.s index b9eff34ab6..ce475cf44a 100644 --- a/src/runtime/msan_arm64.s +++ b/src/runtime/msan_arm64.s @@ -16,7 +16,7 @@ // Called from msanread. TEXT runtime·domsanread(SB), NOSPLIT, $0-16 MOVD addr+0(FP), RARG0 - MOVD size+8(FP), RARG1 + MOVD sz+8(FP), RARG1 // void __msan_read_go(void *addr, uintptr_t sz); MOVD $__msan_read_go(SB), FARG JMP msancall<>(SB) @@ -25,7 +25,7 @@ TEXT runtime·domsanread(SB), NOSPLIT, $0-16 // Called from instrumented code. TEXT runtime·msanwrite(SB), NOSPLIT, $0-16 MOVD addr+0(FP), RARG0 - MOVD size+8(FP), RARG1 + MOVD sz+8(FP), RARG1 // void __msan_write_go(void *addr, uintptr_t sz); MOVD $__msan_write_go(SB), FARG JMP msancall<>(SB) @@ -33,7 +33,7 @@ TEXT runtime·msanwrite(SB), NOSPLIT, $0-16 // func runtime·msanmalloc(addr unsafe.Pointer, sz uintptr) TEXT runtime·msanmalloc(SB), NOSPLIT, $0-16 MOVD addr+0(FP), RARG0 - MOVD size+8(FP), RARG1 + MOVD sz+8(FP), RARG1 // void __msan_malloc_go(void *addr, uintptr_t sz); MOVD $__msan_malloc_go(SB), FARG JMP msancall<>(SB) @@ -41,7 +41,7 @@ TEXT runtime·msanmalloc(SB), NOSPLIT, $0-16 // func runtime·msanfree(addr unsafe.Pointer, sz uintptr) TEXT runtime·msanfree(SB), NOSPLIT, $0-16 MOVD addr+0(FP), RARG0 - MOVD size+8(FP), RARG1 + MOVD sz+8(FP), RARG1 // void __msan_free_go(void *addr, uintptr_t sz); MOVD $__msan_free_go(SB), FARG JMP msancall<>(SB) @@ -50,7 +50,7 @@ TEXT runtime·msanfree(SB), NOSPLIT, $0-16 TEXT runtime·msanmove(SB), NOSPLIT, $0-24 MOVD dst+0(FP), RARG0 MOVD src+8(FP), RARG1 - MOVD size+16(FP), RARG2 + MOVD sz+16(FP), RARG2 // void __msan_memmove(void *dst, void *src, uintptr_t sz); MOVD $__msan_memmove(SB), FARG JMP msancall<>(SB) diff --git a/src/runtime/msan_loong64.s b/src/runtime/msan_loong64.s index f69fb45454..b9fa5fd120 100644 --- a/src/runtime/msan_loong64.s +++ b/src/runtime/msan_loong64.s @@ -16,7 +16,7 @@ // Called from msanread. TEXT runtime·domsanread(SB), NOSPLIT, $0-16 MOVV addr+0(FP), RARG0 - MOVV size+8(FP), RARG1 + MOVV sz+8(FP), RARG1 // void __msan_read_go(void *addr, uintptr_t sz); MOVV $__msan_read_go(SB), FARG JMP msancall<>(SB) @@ -25,7 +25,7 @@ TEXT runtime·domsanread(SB), NOSPLIT, $0-16 // Called from instrumented code. TEXT runtime·msanwrite(SB), NOSPLIT, $0-16 MOVV addr+0(FP), RARG0 - MOVV size+8(FP), RARG1 + MOVV sz+8(FP), RARG1 // void __msan_write_go(void *addr, uintptr_t sz); MOVV $__msan_write_go(SB), FARG JMP msancall<>(SB) @@ -33,7 +33,7 @@ TEXT runtime·msanwrite(SB), NOSPLIT, $0-16 // func runtime·msanmalloc(addr unsafe.Pointer, sz uintptr) TEXT runtime·msanmalloc(SB), NOSPLIT, $0-16 MOVV addr+0(FP), RARG0 - MOVV size+8(FP), RARG1 + MOVV sz+8(FP), RARG1 // void __msan_malloc_go(void *addr, uintptr_t sz); MOVV $__msan_malloc_go(SB), FARG JMP msancall<>(SB) @@ -41,7 +41,7 @@ TEXT runtime·msanmalloc(SB), NOSPLIT, $0-16 // func runtime·msanfree(addr unsafe.Pointer, sz uintptr) TEXT runtime·msanfree(SB), NOSPLIT, $0-16 MOVV addr+0(FP), RARG0 - MOVV size+8(FP), RARG1 + MOVV sz+8(FP), RARG1 // void __msan_free_go(void *addr, uintptr_t sz); MOVV $__msan_free_go(SB), FARG JMP msancall<>(SB) @@ -50,7 +50,7 @@ TEXT runtime·msanfree(SB), NOSPLIT, $0-16 TEXT runtime·msanmove(SB), NOSPLIT, $0-24 MOVV dst+0(FP), RARG0 MOVV src+8(FP), RARG1 - MOVV size+16(FP), RARG2 + MOVV sz+16(FP), RARG2 // void __msan_memmove(void *dst, void *src, uintptr_t sz); MOVV $__msan_memmove(SB), FARG JMP msancall<>(SB) From 821f94103b2980758cdb21ac6ae834ef0a07235a Mon Sep 17 00:00:00 2001 From: Roger Peppe Date: Fri, 5 Jan 2024 12:47:56 +0000 Subject: [PATCH 309/313] io/fs,path/filepath: fix typo in SkipAll/SkipDir doc Also make the reference into a doc link. Change-Id: Ib112307a65b65c8f963abf60aa92cb1942de940c Reviewed-on: https://go-review.googlesource.com/c/go/+/554295 Reviewed-by: Dmitri Shuralyov Reviewed-by: Matthew Dempsky Reviewed-by: Dmitri Shuralyov LUCI-TryBot-Result: Go LUCI --- src/io/fs/walk.go | 4 ++-- src/path/filepath/path.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/io/fs/walk.go b/src/io/fs/walk.go index 48145d4cfc..2e8a8db111 100644 --- a/src/io/fs/walk.go +++ b/src/io/fs/walk.go @@ -9,12 +9,12 @@ import ( "path" ) -// SkipDir is used as a return value from WalkDirFuncs to indicate that +// SkipDir is used as a return value from [WalkDirFunc] to indicate that // the directory named in the call is to be skipped. It is not returned // as an error by any function. var SkipDir = errors.New("skip this directory") -// SkipAll is used as a return value from WalkDirFuncs to indicate that +// SkipAll is used as a return value from [WalkDirFunc] to indicate that // all remaining files and directories are to be skipped. It is not returned // as an error by any function. var SkipAll = errors.New("skip everything and stop the walk") diff --git a/src/path/filepath/path.go b/src/path/filepath/path.go index 075cea848e..2af0f5b04c 100644 --- a/src/path/filepath/path.go +++ b/src/path/filepath/path.go @@ -386,12 +386,12 @@ func Rel(basepath, targpath string) (string, error) { return targ[t0:], nil } -// SkipDir is used as a return value from WalkFuncs to indicate that +// SkipDir is used as a return value from [WalkFunc] to indicate that // the directory named in the call is to be skipped. It is not returned // as an error by any function. var SkipDir error = fs.SkipDir -// SkipAll is used as a return value from WalkFuncs to indicate that +// SkipAll is used as a return value from [WalkFunc] to indicate that // all remaining files and directories are to be skipped. It is not returned // as an error by any function. var SkipAll error = fs.SkipAll From aba18d5b6785d501996b475d58a05cc26707d370 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Mon, 8 Jan 2024 13:28:59 -0800 Subject: [PATCH 310/313] math/big: fix uint64 overflow in nat.mulRange Compute median as a + (b-a)/2 instead of (a + b)/2. Add additional test cases. Fixes #65025. Change-Id: Ib716a1036c17f8f33f51e33cedab13512eb7e0be Reviewed-on: https://go-review.googlesource.com/c/go/+/554617 Reviewed-by: Robert Griesemer Auto-Submit: Robert Griesemer TryBot-Result: Gopher Robot Run-TryBot: Robert Griesemer Reviewed-by: Rob Pike Reviewed-by: Dmitri Shuralyov --- src/math/big/int_test.go | 10 ++++++++++ src/math/big/nat.go | 2 +- src/math/big/nat_test.go | 5 +++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/math/big/int_test.go b/src/math/big/int_test.go index cb964a43cd..088bce09f9 100644 --- a/src/math/big/int_test.go +++ b/src/math/big/int_test.go @@ -200,12 +200,22 @@ var mulRangesZ = []struct { "638952175999932299156089414639761565182862536979208272237582" + "511852109168640000000000000000000000", // -99! }, + + // overflow situations + {math.MaxInt64 - 0, math.MaxInt64, "9223372036854775807"}, + {math.MaxInt64 - 1, math.MaxInt64, "85070591730234615838173535747377725442"}, + {math.MaxInt64 - 2, math.MaxInt64, "784637716923335094969050127519550606919189611815754530810"}, + {math.MaxInt64 - 3, math.MaxInt64, "7237005577332262206126809393809643289012107973151163787181513908099760521240"}, } func TestMulRangeZ(t *testing.T) { var tmp Int // test entirely positive ranges for i, r := range mulRangesN { + // skip mulRangesN entries that overflow int64 + if int64(r.a) < 0 || int64(r.b) < 0 { + continue + } prod := tmp.MulRange(int64(r.a), int64(r.b)).String() if prod != r.prod { t.Errorf("#%da: got %s; want %s", i, prod, r.prod) diff --git a/src/math/big/nat.go b/src/math/big/nat.go index b9f4026a04..ecb7d363d4 100644 --- a/src/math/big/nat.go +++ b/src/math/big/nat.go @@ -624,7 +624,7 @@ func (z nat) mulRange(a, b uint64) nat { case a+1 == b: return z.mul(nat(nil).setUint64(a), nat(nil).setUint64(b)) } - m := (a + b) / 2 + m := a + (b-a)/2 // avoid overflow return z.mul(nat(nil).mulRange(a, m), nat(nil).mulRange(m+1, b)) } diff --git a/src/math/big/nat_test.go b/src/math/big/nat_test.go index b84a7be5bc..4722548fa9 100644 --- a/src/math/big/nat_test.go +++ b/src/math/big/nat_test.go @@ -6,6 +6,7 @@ package big import ( "fmt" + "math" "runtime" "strings" "testing" @@ -155,6 +156,10 @@ var mulRangesN = []struct { "638952175999932299156089414639761565182862536979208272237582" + "51185210916864000000000000000000000000", // 100! }, + {math.MaxUint64 - 0, math.MaxUint64, "18446744073709551615"}, + {math.MaxUint64 - 1, math.MaxUint64, "340282366920938463408034375210639556610"}, + {math.MaxUint64 - 2, math.MaxUint64, "6277101735386680761794095221682035635525021984684230311930"}, + {math.MaxUint64 - 3, math.MaxUint64, "115792089237316195360799967654821100226821973275796746098729803619699194331160"}, } func TestMulRangeN(t *testing.T) { From 59ecebf47f70d018cffd650ade91f44e25d128ea Mon Sep 17 00:00:00 2001 From: Jes Cok Date: Tue, 9 Jan 2024 05:33:53 +0000 Subject: [PATCH 311/313] net/http: clarify the precedence order for Request.FormValue Fixes #64575 Change-Id: I0eaec642a9dc8ae3b273a6d41131cc7cb8332947 GitHub-Last-Rev: 17aa5170cbfe42cb86d56f1804266850d33c3eb5 GitHub-Pull-Request: golang/go#64578 Reviewed-on: https://go-review.googlesource.com/c/go/+/547855 Reviewed-by: Damien Neil Reviewed-by: Dmitri Shuralyov Auto-Submit: Damien Neil LUCI-TryBot-Result: Go LUCI --- src/net/http/request.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/net/http/request.go b/src/net/http/request.go index fce2d16f95..730f51287a 100644 --- a/src/net/http/request.go +++ b/src/net/http/request.go @@ -1378,7 +1378,11 @@ func (r *Request) ParseMultipartForm(maxMemory int64) error { } // FormValue returns the first value for the named component of the query. -// POST, PUT, and PATCH body parameters take precedence over URL query string values. +// The precedence order: +// 1. application/x-www-form-urlencoded form body (POST, PUT, PATCH only) +// 2. query parameters (always) +// 3. multipart/form-data form body (always) +// // FormValue calls ParseMultipartForm and ParseForm if necessary and ignores // any errors returned by these functions. // If key is not present, FormValue returns the empty string. From dcbe77246922fe7ef41f07df228f47a37803f360 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Tue, 9 Jan 2024 13:13:45 -0500 Subject: [PATCH 312/313] runtime: replace rwmutexR/W with per-rwmutex lock rank CL 549536 intended to decouple the internal implementation of rwmutex from the semantic meaning of an rwmutex read/write lock in the static lock ranking. Unfortunately, it was not thought through well enough. The internals were represented with the rwmutexR and rwmutexW lock ranks. The idea was that the internal lock ranks need not model the higher-level ordering, since those have separate rankings. That is incorrect; rwmutexW is held for the duration of a write lock, so it must be ranked before any lock taken while any write lock is held, which is precisely what we were trying to avoid. This is visible in violations like: 0 : execW 11 0x0 1 : rwmutexW 51 0x111d9c8 2 : fin 30 0x111d3a0 fatal error: lock ordering problem execW < fin is modeled, but rwmutexW < fin is missing. Fix this by eliminating the rwmutexR/W lock ranks shared across different types of rwmutex. Instead require users to define an additional "internal" lock rank to represent the implementation details of rwmutex.rLock. We can avoid an additional "internal" lock rank for rwmutex.wLock because the existing writeRank has the same semantics for semantic and internal locking. i.e., writeRank is held for the duration of a write lock, which is exactly how rwmutex.wLock is used, so we can use writeRank directly on wLock. For #64722. Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-staticlockranking Change-Id: Ia572de188a46ba8fe054ae28537648beaa16b12c Reviewed-on: https://go-review.googlesource.com/c/go/+/555055 LUCI-TryBot-Result: Go LUCI Reviewed-by: Michael Knyszek --- src/runtime/export_test.go | 2 +- src/runtime/lockrank.go | 219 +++++++++++++++++++------------------ src/runtime/mklockrank.go | 22 ++-- src/runtime/proc.go | 4 +- src/runtime/rwmutex.go | 30 ++--- 5 files changed, 143 insertions(+), 134 deletions(-) diff --git a/src/runtime/export_test.go b/src/runtime/export_test.go index 11e4bd26c5..e25f748ed4 100644 --- a/src/runtime/export_test.go +++ b/src/runtime/export_test.go @@ -587,7 +587,7 @@ type RWMutex struct { } func (rw *RWMutex) Init() { - rw.rw.init(lockRankTestR, lockRankTestW) + rw.rw.init(lockRankTestR, lockRankTestRInternal, lockRankTestW) } func (rw *RWMutex) RLock() { diff --git a/src/runtime/lockrank.go b/src/runtime/lockrank.go index 43b3239f1e..b27e6c5606 100644 --- a/src/runtime/lockrank.go +++ b/src/runtime/lockrank.go @@ -69,8 +69,9 @@ const ( lockRankPanic lockRankDeadlock lockRankRaceFini - lockRankRwmutexW - lockRankRwmutexR + lockRankAllocmRInternal + lockRankExecRInternal + lockRankTestRInternal ) // lockRankLeafRank is the rank of lock that does not have a declared rank, @@ -79,59 +80,60 @@ const lockRankLeafRank lockRank = 1000 // lockNames gives the names associated with each of the above ranks. var lockNames = []string{ - lockRankSysmon: "sysmon", - lockRankScavenge: "scavenge", - lockRankForcegc: "forcegc", - lockRankDefer: "defer", - lockRankSweepWaiters: "sweepWaiters", - lockRankAssistQueue: "assistQueue", - lockRankSweep: "sweep", - lockRankTestR: "testR", - lockRankTestW: "testW", - lockRankAllocmW: "allocmW", - lockRankExecW: "execW", - lockRankCpuprof: "cpuprof", - lockRankPollDesc: "pollDesc", - lockRankWakeableSleep: "wakeableSleep", - lockRankAllocmR: "allocmR", - lockRankExecR: "execR", - lockRankSched: "sched", - lockRankAllg: "allg", - lockRankAllp: "allp", - lockRankTimers: "timers", - lockRankNetpollInit: "netpollInit", - lockRankHchan: "hchan", - lockRankNotifyList: "notifyList", - lockRankSudog: "sudog", - lockRankRoot: "root", - lockRankItab: "itab", - lockRankReflectOffs: "reflectOffs", - lockRankUserArenaState: "userArenaState", - lockRankTraceBuf: "traceBuf", - lockRankTraceStrings: "traceStrings", - lockRankFin: "fin", - lockRankSpanSetSpine: "spanSetSpine", - lockRankMspanSpecial: "mspanSpecial", - lockRankGcBitsArenas: "gcBitsArenas", - lockRankProfInsert: "profInsert", - lockRankProfBlock: "profBlock", - lockRankProfMemActive: "profMemActive", - lockRankProfMemFuture: "profMemFuture", - lockRankGscan: "gscan", - lockRankStackpool: "stackpool", - lockRankStackLarge: "stackLarge", - lockRankHchanLeaf: "hchanLeaf", - lockRankWbufSpans: "wbufSpans", - lockRankMheap: "mheap", - lockRankMheapSpecial: "mheapSpecial", - lockRankGlobalAlloc: "globalAlloc", - lockRankTrace: "trace", - lockRankTraceStackTab: "traceStackTab", - lockRankPanic: "panic", - lockRankDeadlock: "deadlock", - lockRankRaceFini: "raceFini", - lockRankRwmutexW: "rwmutexW", - lockRankRwmutexR: "rwmutexR", + lockRankSysmon: "sysmon", + lockRankScavenge: "scavenge", + lockRankForcegc: "forcegc", + lockRankDefer: "defer", + lockRankSweepWaiters: "sweepWaiters", + lockRankAssistQueue: "assistQueue", + lockRankSweep: "sweep", + lockRankTestR: "testR", + lockRankTestW: "testW", + lockRankAllocmW: "allocmW", + lockRankExecW: "execW", + lockRankCpuprof: "cpuprof", + lockRankPollDesc: "pollDesc", + lockRankWakeableSleep: "wakeableSleep", + lockRankAllocmR: "allocmR", + lockRankExecR: "execR", + lockRankSched: "sched", + lockRankAllg: "allg", + lockRankAllp: "allp", + lockRankTimers: "timers", + lockRankNetpollInit: "netpollInit", + lockRankHchan: "hchan", + lockRankNotifyList: "notifyList", + lockRankSudog: "sudog", + lockRankRoot: "root", + lockRankItab: "itab", + lockRankReflectOffs: "reflectOffs", + lockRankUserArenaState: "userArenaState", + lockRankTraceBuf: "traceBuf", + lockRankTraceStrings: "traceStrings", + lockRankFin: "fin", + lockRankSpanSetSpine: "spanSetSpine", + lockRankMspanSpecial: "mspanSpecial", + lockRankGcBitsArenas: "gcBitsArenas", + lockRankProfInsert: "profInsert", + lockRankProfBlock: "profBlock", + lockRankProfMemActive: "profMemActive", + lockRankProfMemFuture: "profMemFuture", + lockRankGscan: "gscan", + lockRankStackpool: "stackpool", + lockRankStackLarge: "stackLarge", + lockRankHchanLeaf: "hchanLeaf", + lockRankWbufSpans: "wbufSpans", + lockRankMheap: "mheap", + lockRankMheapSpecial: "mheapSpecial", + lockRankGlobalAlloc: "globalAlloc", + lockRankTrace: "trace", + lockRankTraceStackTab: "traceStackTab", + lockRankPanic: "panic", + lockRankDeadlock: "deadlock", + lockRankRaceFini: "raceFini", + lockRankAllocmRInternal: "allocmRInternal", + lockRankExecRInternal: "execRInternal", + lockRankTestRInternal: "testRInternal", } func (rank lockRank) String() string { @@ -153,57 +155,58 @@ func (rank lockRank) String() string { // // Lock ranks that allow self-cycles list themselves. var lockPartialOrder [][]lockRank = [][]lockRank{ - lockRankSysmon: {}, - lockRankScavenge: {lockRankSysmon}, - lockRankForcegc: {lockRankSysmon}, - lockRankDefer: {}, - lockRankSweepWaiters: {}, - lockRankAssistQueue: {}, - lockRankSweep: {}, - lockRankTestR: {}, - lockRankTestW: {}, - lockRankAllocmW: {}, - lockRankExecW: {}, - lockRankCpuprof: {}, - lockRankPollDesc: {}, - lockRankWakeableSleep: {}, - lockRankAllocmR: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep}, - lockRankExecR: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep}, - lockRankSched: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR}, - lockRankAllg: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched}, - lockRankAllp: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched}, - lockRankTimers: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllp, lockRankTimers}, - lockRankNetpollInit: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllp, lockRankTimers}, - lockRankHchan: {lockRankSysmon, lockRankScavenge, lockRankSweep, lockRankTestR, lockRankWakeableSleep, lockRankHchan}, - lockRankNotifyList: {}, - lockRankSudog: {lockRankSysmon, lockRankScavenge, lockRankSweep, lockRankTestR, lockRankWakeableSleep, lockRankHchan, lockRankNotifyList}, - lockRankRoot: {}, - lockRankItab: {}, - lockRankReflectOffs: {lockRankItab}, - lockRankUserArenaState: {}, - lockRankTraceBuf: {lockRankSysmon, lockRankScavenge}, - lockRankTraceStrings: {lockRankSysmon, lockRankScavenge, lockRankTraceBuf}, - lockRankFin: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, - lockRankSpanSetSpine: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, - lockRankMspanSpecial: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, - lockRankGcBitsArenas: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankMspanSpecial}, - lockRankProfInsert: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, - lockRankProfBlock: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, - lockRankProfMemActive: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, - lockRankProfMemFuture: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankProfMemActive}, - lockRankGscan: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture}, - lockRankStackpool: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan}, - lockRankStackLarge: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan}, - lockRankHchanLeaf: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankHchanLeaf}, - lockRankWbufSpans: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan}, - lockRankMheap: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans}, - lockRankMheapSpecial: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap}, - lockRankGlobalAlloc: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap, lockRankMheapSpecial}, - lockRankTrace: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap}, - lockRankTraceStackTab: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap, lockRankTrace}, - lockRankPanic: {}, - lockRankDeadlock: {lockRankPanic, lockRankDeadlock}, - lockRankRaceFini: {lockRankPanic}, - lockRankRwmutexW: {lockRankTestW, lockRankAllocmW, lockRankExecW}, - lockRankRwmutexR: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankTestW, lockRankAllocmW, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankRwmutexW}, + lockRankSysmon: {}, + lockRankScavenge: {lockRankSysmon}, + lockRankForcegc: {lockRankSysmon}, + lockRankDefer: {}, + lockRankSweepWaiters: {}, + lockRankAssistQueue: {}, + lockRankSweep: {}, + lockRankTestR: {}, + lockRankTestW: {}, + lockRankAllocmW: {}, + lockRankExecW: {}, + lockRankCpuprof: {}, + lockRankPollDesc: {}, + lockRankWakeableSleep: {}, + lockRankAllocmR: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep}, + lockRankExecR: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep}, + lockRankSched: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR}, + lockRankAllg: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched}, + lockRankAllp: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched}, + lockRankTimers: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllp, lockRankTimers}, + lockRankNetpollInit: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllp, lockRankTimers}, + lockRankHchan: {lockRankSysmon, lockRankScavenge, lockRankSweep, lockRankTestR, lockRankWakeableSleep, lockRankHchan}, + lockRankNotifyList: {}, + lockRankSudog: {lockRankSysmon, lockRankScavenge, lockRankSweep, lockRankTestR, lockRankWakeableSleep, lockRankHchan, lockRankNotifyList}, + lockRankRoot: {}, + lockRankItab: {}, + lockRankReflectOffs: {lockRankItab}, + lockRankUserArenaState: {}, + lockRankTraceBuf: {lockRankSysmon, lockRankScavenge}, + lockRankTraceStrings: {lockRankSysmon, lockRankScavenge, lockRankTraceBuf}, + lockRankFin: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, + lockRankSpanSetSpine: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, + lockRankMspanSpecial: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, + lockRankGcBitsArenas: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankMspanSpecial}, + lockRankProfInsert: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, + lockRankProfBlock: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, + lockRankProfMemActive: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings}, + lockRankProfMemFuture: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankHchan, lockRankNotifyList, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankProfMemActive}, + lockRankGscan: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture}, + lockRankStackpool: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan}, + lockRankStackLarge: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan}, + lockRankHchanLeaf: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankHchanLeaf}, + lockRankWbufSpans: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan}, + lockRankMheap: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans}, + lockRankMheapSpecial: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap}, + lockRankGlobalAlloc: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap, lockRankMheapSpecial}, + lockRankTrace: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap}, + lockRankTraceStackTab: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankDefer, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR, lockRankExecR, lockRankSched, lockRankAllg, lockRankAllp, lockRankTimers, lockRankNetpollInit, lockRankHchan, lockRankNotifyList, lockRankSudog, lockRankRoot, lockRankItab, lockRankReflectOffs, lockRankUserArenaState, lockRankTraceBuf, lockRankTraceStrings, lockRankFin, lockRankSpanSetSpine, lockRankMspanSpecial, lockRankGcBitsArenas, lockRankProfInsert, lockRankProfBlock, lockRankProfMemActive, lockRankProfMemFuture, lockRankGscan, lockRankStackpool, lockRankStackLarge, lockRankWbufSpans, lockRankMheap, lockRankTrace}, + lockRankPanic: {}, + lockRankDeadlock: {lockRankPanic, lockRankDeadlock}, + lockRankRaceFini: {lockRankPanic}, + lockRankAllocmRInternal: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankAllocmW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankAllocmR}, + lockRankExecRInternal: {lockRankSysmon, lockRankScavenge, lockRankForcegc, lockRankSweepWaiters, lockRankAssistQueue, lockRankSweep, lockRankTestR, lockRankExecW, lockRankCpuprof, lockRankPollDesc, lockRankWakeableSleep, lockRankExecR}, + lockRankTestRInternal: {lockRankTestR, lockRankTestW}, } diff --git a/src/runtime/mklockrank.go b/src/runtime/mklockrank.go index d9ffcbef8d..c8e34d8f00 100644 --- a/src/runtime/mklockrank.go +++ b/src/runtime/mklockrank.go @@ -203,17 +203,19 @@ panic < deadlock; # raceFini is only held while exiting. panic < raceFini; -# RWMutex -allocmW, - execW, - testW -< rwmutexW; +# RWMutex internal read lock -rwmutexW, - allocmR, - execR, - testR -< rwmutexR; +allocmR, + allocmW +< allocmRInternal; + +execR, + execW +< execRInternal; + +testR, + testW +< testRInternal; ` // cyclicRanks lists lock ranks that allow multiple locks of the same diff --git a/src/runtime/proc.go b/src/runtime/proc.go index b9715f267e..c487da652e 100644 --- a/src/runtime/proc.go +++ b/src/runtime/proc.go @@ -759,8 +759,8 @@ func schedinit() { lockInit(&reflectOffs.lock, lockRankReflectOffs) lockInit(&finlock, lockRankFin) lockInit(&cpuprof.lock, lockRankCpuprof) - allocmLock.init(lockRankAllocmR, lockRankAllocmW) - execLock.init(lockRankExecR, lockRankExecW) + allocmLock.init(lockRankAllocmR, lockRankAllocmRInternal, lockRankAllocmW) + execLock.init(lockRankExecR, lockRankExecRInternal, lockRankExecW) traceLockInit() // Enforce that this lock is always a leaf lock. // All of this lock's critical sections should be diff --git a/src/runtime/rwmutex.go b/src/runtime/rwmutex.go index 89fe16c10d..34d8f675c1 100644 --- a/src/runtime/rwmutex.go +++ b/src/runtime/rwmutex.go @@ -27,7 +27,6 @@ type rwmutex struct { readerWait atomic.Int32 // number of departing readers readRank lockRank // semantic lock rank for read locking - writeRank lockRank // semantic lock rank for write locking } // Lock ranking an rwmutex has two aspects: @@ -41,21 +40,28 @@ type rwmutex struct { // rLock and wLock. These have lock order requirements: wLock must be locked // before rLock. This also needs to be represented in the lock rank. // -// Internal ranking is represented by assigning ranks rwmutexR and rwmutexW to -// rLock and wLock, respectively. -// // Semantic ranking is represented by acquiring readRank during read lock and // writeRank during write lock. // -// readRank is always taken before rwmutexR and writeRank is always taken -// before rwmutexW, so each unique rwmutex must record this order in the lock -// ranking. -func (rw *rwmutex) init(readRank, writeRank lockRank) { +// wLock is held for the duration of a write lock, so it uses writeRank +// directly, both for semantic and internal ranking. rLock is only held +// temporarily inside the rlock/lock methods, so it uses readRankInternal to +// represent internal ranking. Semantic ranking is represented by a separate +// acquire of readRank for the duration of a read lock. +// +// The lock ranking must document this ordering: +// - readRankInternal is a leaf lock. +// - readRank is taken before readRankInternal. +// - writeRank is taken before readRankInternal. +// - readRank is placed in the lock order wherever a read lock of this rwmutex +// belongs. +// - writeRank is placed in the lock order wherever a write lock of this +// rwmutex belongs. +func (rw *rwmutex) init(readRank, readRankInternal, writeRank lockRank) { rw.readRank = readRank - rw.writeRank = writeRank - lockInit(&rw.rLock, lockRankRwmutexR) - lockInit(&rw.wLock, lockRankRwmutexW) + lockInit(&rw.rLock, readRankInternal) + lockInit(&rw.wLock, writeRank) } const rwmutexMaxReaders = 1 << 30 @@ -117,7 +123,6 @@ func (rw *rwmutex) runlock() { // lock locks rw for writing. func (rw *rwmutex) lock() { // Resolve competition with other writers and stick to our P. - acquireLockRank(rw.writeRank) lock(&rw.wLock) m := getg().m // Announce that there is a pending writer. @@ -159,5 +164,4 @@ func (rw *rwmutex) unlock() { unlock(&rw.rLock) // Allow other writers to proceed. unlock(&rw.wLock) - releaseLockRank(rw.writeRank) } From 1d45a7ef560a76318ed59dfdb178cecd58caf948 Mon Sep 17 00:00:00 2001 From: cui fliter Date: Mon, 6 Nov 2023 22:58:32 +0800 Subject: [PATCH 313/313] net: add available godoc link Change-Id: Ib7c4baf0247c421954aedabfbb6a6af8a08a8936 Reviewed-on: https://go-review.googlesource.com/c/go/+/540021 Reviewed-by: Damien Neil Run-TryBot: shuang cui TryBot-Result: Gopher Robot Auto-Submit: Dmitri Shuralyov Reviewed-by: Dmitri Shuralyov --- src/net/dial.go | 28 +++--- src/net/http/cgi/child.go | 6 +- src/net/http/client.go | 84 ++++++++--------- src/net/http/cookie.go | 4 +- src/net/http/cookiejar/jar.go | 6 +- src/net/http/doc.go | 16 ++-- src/net/http/fcgi/child.go | 2 +- src/net/http/filetransport.go | 10 +- src/net/http/fs.go | 44 ++++----- src/net/http/header.go | 14 +-- src/net/http/http.go | 6 +- src/net/http/httptest/httptest.go | 2 +- src/net/http/httptest/recorder.go | 18 ++-- src/net/http/httptest/server.go | 8 +- src/net/http/httptrace/trace.go | 4 +- src/net/http/httputil/dump.go | 10 +- src/net/http/httputil/httputil.go | 2 +- src/net/http/httputil/persist.go | 32 +++---- src/net/http/httputil/reverseproxy.go | 10 +- src/net/http/internal/ascii/print.go | 2 +- src/net/http/internal/chunked.go | 8 +- src/net/http/pprof/pprof.go | 4 +- src/net/http/request.go | 76 +++++++-------- src/net/http/response.go | 10 +- src/net/http/responsecontroller.go | 12 +-- src/net/http/roundtrip.go | 4 +- src/net/http/roundtrip_js.go | 2 +- src/net/http/server.go | 114 +++++++++++------------ src/net/http/transfer.go | 6 +- src/net/http/transport.go | 34 +++---- src/net/http/triv.go | 2 +- src/net/interface.go | 4 +- src/net/internal/socktest/switch.go | 2 +- src/net/internal/socktest/sys_unix.go | 2 +- src/net/internal/socktest/sys_windows.go | 12 +-- src/net/ip.go | 14 +-- src/net/iprawsock.go | 16 ++-- src/net/lookup.go | 38 ++++---- src/net/net.go | 20 ++-- src/net/netip/netip.go | 112 +++++++++++----------- src/net/pipe.go | 2 +- src/net/rawconn.go | 2 +- src/net/rpc/client.go | 16 ++-- src/net/rpc/jsonrpc/client.go | 4 +- src/net/rpc/jsonrpc/server.go | 2 +- src/net/rpc/server.go | 62 ++++++------ src/net/smtp/auth.go | 4 +- src/net/smtp/smtp.go | 14 +-- src/net/tcpsock.go | 28 +++--- src/net/textproto/header.go | 4 +- src/net/textproto/reader.go | 20 ++-- src/net/textproto/textproto.go | 20 ++-- src/net/textproto/writer.go | 4 +- src/net/unixsock.go | 30 +++--- src/net/url/url.go | 44 ++++----- 55 files changed, 528 insertions(+), 528 deletions(-) diff --git a/src/net/dial.go b/src/net/dial.go index 7ca9b4a468..a6565c3ce5 100644 --- a/src/net/dial.go +++ b/src/net/dial.go @@ -65,7 +65,7 @@ func (m *mptcpStatus) set(use bool) { // // The zero value for each field is equivalent to dialing // without that option. Dialing with the zero value of Dialer -// is therefore equivalent to just calling the Dial function. +// is therefore equivalent to just calling the [Dial] function. // // It is safe to call Dialer's methods concurrently. type Dialer struct { @@ -338,7 +338,7 @@ func (d *Dialer) MultipathTCP() bool { return d.mptcpStatus.get() } -// SetMultipathTCP directs the Dial methods to use, or not use, MPTCP, +// SetMultipathTCP directs the [Dial] methods to use, or not use, MPTCP, // if supported by the operating system. This method overrides the // system default and the GODEBUG=multipathtcp=... setting if any. // @@ -363,7 +363,7 @@ func (d *Dialer) SetMultipathTCP(use bool) { // brackets, as in "[2001:db8::1]:80" or "[fe80::1%zone]:80". // The zone specifies the scope of the literal IPv6 address as defined // in RFC 4007. -// The functions JoinHostPort and SplitHostPort manipulate a pair of +// The functions [JoinHostPort] and [SplitHostPort] manipulate a pair of // host and port in this form. // When using TCP, and the host resolves to multiple IP addresses, // Dial will try each IP address in order until one succeeds. @@ -401,7 +401,7 @@ func Dial(network, address string) (Conn, error) { return d.Dial(network, address) } -// DialTimeout acts like Dial but takes a timeout. +// DialTimeout acts like [Dial] but takes a timeout. // // The timeout includes name resolution, if required. // When using TCP, and the host in the address parameter resolves to @@ -428,8 +428,8 @@ type sysDialer struct { // See func Dial for a description of the network and address // parameters. // -// Dial uses context.Background internally; to specify the context, use -// DialContext. +// Dial uses [context.Background] internally; to specify the context, use +// [Dialer.DialContext]. func (d *Dialer) Dial(network, address string) (Conn, error) { return d.DialContext(context.Background(), network, address) } @@ -450,7 +450,7 @@ func (d *Dialer) Dial(network, address string) (Conn, error) { // the connect to each single address will be given 15 seconds to complete // before trying the next one. // -// See func Dial for a description of the network and address +// See func [Dial] for a description of the network and address // parameters. func (d *Dialer) DialContext(ctx context.Context, network, address string) (Conn, error) { if ctx == nil { @@ -700,7 +700,7 @@ func (lc *ListenConfig) MultipathTCP() bool { return lc.mptcpStatus.get() } -// SetMultipathTCP directs the Listen method to use, or not use, MPTCP, +// SetMultipathTCP directs the [Listen] method to use, or not use, MPTCP, // if supported by the operating system. This method overrides the // system default and the GODEBUG=multipathtcp=... setting if any. // @@ -795,14 +795,14 @@ type sysListener struct { // addresses. // If the port in the address parameter is empty or "0", as in // "127.0.0.1:" or "[::1]:0", a port number is automatically chosen. -// The Addr method of Listener can be used to discover the chosen +// The [Addr] method of [Listener] can be used to discover the chosen // port. // -// See func Dial for a description of the network and address +// See func [Dial] for a description of the network and address // parameters. // // Listen uses context.Background internally; to specify the context, use -// ListenConfig.Listen. +// [ListenConfig.Listen]. func Listen(network, address string) (Listener, error) { var lc ListenConfig return lc.Listen(context.Background(), network, address) @@ -825,14 +825,14 @@ func Listen(network, address string) (Listener, error) { // addresses. // If the port in the address parameter is empty or "0", as in // "127.0.0.1:" or "[::1]:0", a port number is automatically chosen. -// The LocalAddr method of PacketConn can be used to discover the +// The LocalAddr method of [PacketConn] can be used to discover the // chosen port. // -// See func Dial for a description of the network and address +// See func [Dial] for a description of the network and address // parameters. // // ListenPacket uses context.Background internally; to specify the context, use -// ListenConfig.ListenPacket. +// [ListenConfig.ListenPacket]. func ListenPacket(network, address string) (PacketConn, error) { var lc ListenConfig return lc.ListenPacket(context.Background(), network, address) diff --git a/src/net/http/cgi/child.go b/src/net/http/cgi/child.go index 1411f0b8e8..e29fe20d7d 100644 --- a/src/net/http/cgi/child.go +++ b/src/net/http/cgi/child.go @@ -46,7 +46,7 @@ func envMap(env []string) map[string]string { return m } -// RequestFromMap creates an http.Request from CGI variables. +// RequestFromMap creates an [http.Request] from CGI variables. // The returned Request's Body field is not populated. func RequestFromMap(params map[string]string) (*http.Request, error) { r := new(http.Request) @@ -138,10 +138,10 @@ func RequestFromMap(params map[string]string) (*http.Request, error) { return r, nil } -// Serve executes the provided Handler on the currently active CGI +// Serve executes the provided [Handler] on the currently active CGI // request, if any. If there's no current CGI environment // an error is returned. The provided handler may be nil to use -// http.DefaultServeMux. +// [http.DefaultServeMux]. func Serve(handler http.Handler) error { req, err := Request() if err != nil { diff --git a/src/net/http/client.go b/src/net/http/client.go index 5fd86a1ec8..ee6de24fc1 100644 --- a/src/net/http/client.go +++ b/src/net/http/client.go @@ -27,19 +27,19 @@ import ( "time" ) -// A Client is an HTTP client. Its zero value (DefaultClient) is a -// usable client that uses DefaultTransport. +// A Client is an HTTP client. Its zero value ([DefaultClient]) is a +// usable client that uses [DefaultTransport]. // -// The Client's Transport typically has internal state (cached TCP +// The [Client.Transport] typically has internal state (cached TCP // connections), so Clients should be reused instead of created as // needed. Clients are safe for concurrent use by multiple goroutines. // -// A Client is higher-level than a RoundTripper (such as Transport) +// A Client is higher-level than a [RoundTripper] (such as [Transport]) // and additionally handles HTTP details such as cookies and // redirects. // // When following redirects, the Client will forward all headers set on the -// initial Request except: +// initial [Request] except: // // - when forwarding sensitive headers like "Authorization", // "WWW-Authenticate", and "Cookie" to untrusted targets. @@ -105,11 +105,11 @@ type Client struct { Timeout time.Duration } -// DefaultClient is the default Client and is used by Get, Head, and Post. +// DefaultClient is the default [Client] and is used by [Get], [Head], and [Post]. var DefaultClient = &Client{} // RoundTripper is an interface representing the ability to execute a -// single HTTP transaction, obtaining the Response for a given Request. +// single HTTP transaction, obtaining the [Response] for a given [Request]. // // A RoundTripper must be safe for concurrent use by multiple // goroutines. @@ -439,7 +439,7 @@ func basicAuth(username, password string) string { // // An error is returned if there were too many redirects or if there // was an HTTP protocol error. A non-2xx response doesn't cause an -// error. Any returned error will be of type *url.Error. The url.Error +// error. Any returned error will be of type [*url.Error]. The url.Error // value's Timeout method will report true if the request timed out. // // When err is nil, resp always contains a non-nil resp.Body. @@ -447,10 +447,10 @@ func basicAuth(username, password string) string { // // Get is a wrapper around DefaultClient.Get. // -// To make a request with custom headers, use NewRequest and +// To make a request with custom headers, use [NewRequest] and // DefaultClient.Do. // -// To make a request with a specified context.Context, use NewRequestWithContext +// To make a request with a specified context.Context, use [NewRequestWithContext] // and DefaultClient.Do. func Get(url string) (resp *Response, err error) { return DefaultClient.Get(url) @@ -458,7 +458,7 @@ func Get(url string) (resp *Response, err error) { // Get issues a GET to the specified URL. If the response is one of the // following redirect codes, Get follows the redirect after calling the -// Client's CheckRedirect function: +// [Client.CheckRedirect] function: // // 301 (Moved Permanently) // 302 (Found) @@ -466,18 +466,18 @@ func Get(url string) (resp *Response, err error) { // 307 (Temporary Redirect) // 308 (Permanent Redirect) // -// An error is returned if the Client's CheckRedirect function fails +// An error is returned if the [Client.CheckRedirect] function fails // or if there was an HTTP protocol error. A non-2xx response doesn't -// cause an error. Any returned error will be of type *url.Error. The +// cause an error. Any returned error will be of type [*url.Error]. The // url.Error value's Timeout method will report true if the request // timed out. // // When err is nil, resp always contains a non-nil resp.Body. // Caller should close resp.Body when done reading from it. // -// To make a request with custom headers, use NewRequest and Client.Do. +// To make a request with custom headers, use [NewRequest] and [Client.Do]. // -// To make a request with a specified context.Context, use NewRequestWithContext +// To make a request with a specified context.Context, use [NewRequestWithContext] // and Client.Do. func (c *Client) Get(url string) (resp *Response, err error) { req, err := NewRequest("GET", url, nil) @@ -558,10 +558,10 @@ func urlErrorOp(method string) string { // connectivity problem). A non-2xx status code doesn't cause an // error. // -// If the returned error is nil, the Response will contain a non-nil +// If the returned error is nil, the [Response] will contain a non-nil // Body which the user is expected to close. If the Body is not both -// read to EOF and closed, the Client's underlying RoundTripper -// (typically Transport) may not be able to re-use a persistent TCP +// read to EOF and closed, the [Client]'s underlying [RoundTripper] +// (typically [Transport]) may not be able to re-use a persistent TCP // connection to the server for a subsequent "keep-alive" request. // // The request Body, if non-nil, will be closed by the underlying @@ -570,9 +570,9 @@ func urlErrorOp(method string) string { // // On error, any Response can be ignored. A non-nil Response with a // non-nil error only occurs when CheckRedirect fails, and even then -// the returned Response.Body is already closed. +// the returned [Response.Body] is already closed. // -// Generally Get, Post, or PostForm will be used instead of Do. +// Generally [Get], [Post], or [PostForm] will be used instead of Do. // // If the server replies with a redirect, the Client first uses the // CheckRedirect function to determine whether the redirect should be @@ -580,11 +580,11 @@ func urlErrorOp(method string) string { // subsequent requests to use HTTP method GET // (or HEAD if the original request was HEAD), with no body. // A 307 or 308 redirect preserves the original HTTP method and body, -// provided that the Request.GetBody function is defined. -// The NewRequest function automatically sets GetBody for common +// provided that the [Request.GetBody] function is defined. +// The [NewRequest] function automatically sets GetBody for common // standard library body types. // -// Any returned error will be of type *url.Error. The url.Error +// Any returned error will be of type [*url.Error]. The url.Error // value's Timeout method will report true if the request timed out. func (c *Client) Do(req *Request) (*Response, error) { return c.do(req) @@ -818,17 +818,17 @@ func defaultCheckRedirect(req *Request, via []*Request) error { // // Caller should close resp.Body when done reading from it. // -// If the provided body is an io.Closer, it is closed after the +// If the provided body is an [io.Closer], it is closed after the // request. // // Post is a wrapper around DefaultClient.Post. // -// To set custom headers, use NewRequest and DefaultClient.Do. +// To set custom headers, use [NewRequest] and DefaultClient.Do. // -// See the Client.Do method documentation for details on how redirects +// See the [Client.Do] method documentation for details on how redirects // are handled. // -// To make a request with a specified context.Context, use NewRequestWithContext +// To make a request with a specified context.Context, use [NewRequestWithContext] // and DefaultClient.Do. func Post(url, contentType string, body io.Reader) (resp *Response, err error) { return DefaultClient.Post(url, contentType, body) @@ -838,13 +838,13 @@ func Post(url, contentType string, body io.Reader) (resp *Response, err error) { // // Caller should close resp.Body when done reading from it. // -// If the provided body is an io.Closer, it is closed after the +// If the provided body is an [io.Closer], it is closed after the // request. // -// To set custom headers, use NewRequest and Client.Do. +// To set custom headers, use [NewRequest] and [Client.Do]. // -// To make a request with a specified context.Context, use NewRequestWithContext -// and Client.Do. +// To make a request with a specified context.Context, use [NewRequestWithContext] +// and [Client.Do]. // // See the Client.Do method documentation for details on how redirects // are handled. @@ -861,17 +861,17 @@ func (c *Client) Post(url, contentType string, body io.Reader) (resp *Response, // values URL-encoded as the request body. // // The Content-Type header is set to application/x-www-form-urlencoded. -// To set other headers, use NewRequest and DefaultClient.Do. +// To set other headers, use [NewRequest] and DefaultClient.Do. // // When err is nil, resp always contains a non-nil resp.Body. // Caller should close resp.Body when done reading from it. // // PostForm is a wrapper around DefaultClient.PostForm. // -// See the Client.Do method documentation for details on how redirects +// See the [Client.Do] method documentation for details on how redirects // are handled. // -// To make a request with a specified context.Context, use NewRequestWithContext +// To make a request with a specified [context.Context], use [NewRequestWithContext] // and DefaultClient.Do. func PostForm(url string, data url.Values) (resp *Response, err error) { return DefaultClient.PostForm(url, data) @@ -881,7 +881,7 @@ func PostForm(url string, data url.Values) (resp *Response, err error) { // with data's keys and values URL-encoded as the request body. // // The Content-Type header is set to application/x-www-form-urlencoded. -// To set other headers, use NewRequest and Client.Do. +// To set other headers, use [NewRequest] and [Client.Do]. // // When err is nil, resp always contains a non-nil resp.Body. // Caller should close resp.Body when done reading from it. @@ -889,7 +889,7 @@ func PostForm(url string, data url.Values) (resp *Response, err error) { // See the Client.Do method documentation for details on how redirects // are handled. // -// To make a request with a specified context.Context, use NewRequestWithContext +// To make a request with a specified context.Context, use [NewRequestWithContext] // and Client.Do. func (c *Client) PostForm(url string, data url.Values) (resp *Response, err error) { return c.Post(url, "application/x-www-form-urlencoded", strings.NewReader(data.Encode())) @@ -907,7 +907,7 @@ func (c *Client) PostForm(url string, data url.Values) (resp *Response, err erro // // Head is a wrapper around DefaultClient.Head. // -// To make a request with a specified context.Context, use NewRequestWithContext +// To make a request with a specified [context.Context], use [NewRequestWithContext] // and DefaultClient.Do. func Head(url string) (resp *Response, err error) { return DefaultClient.Head(url) @@ -915,7 +915,7 @@ func Head(url string) (resp *Response, err error) { // Head issues a HEAD to the specified URL. If the response is one of the // following redirect codes, Head follows the redirect after calling the -// Client's CheckRedirect function: +// [Client.CheckRedirect] function: // // 301 (Moved Permanently) // 302 (Found) @@ -923,8 +923,8 @@ func Head(url string) (resp *Response, err error) { // 307 (Temporary Redirect) // 308 (Permanent Redirect) // -// To make a request with a specified context.Context, use NewRequestWithContext -// and Client.Do. +// To make a request with a specified [context.Context], use [NewRequestWithContext] +// and [Client.Do]. func (c *Client) Head(url string) (resp *Response, err error) { req, err := NewRequest("HEAD", url, nil) if err != nil { @@ -933,12 +933,12 @@ func (c *Client) Head(url string) (resp *Response, err error) { return c.Do(req) } -// CloseIdleConnections closes any connections on its Transport which +// CloseIdleConnections closes any connections on its [Transport] which // were previously connected from previous requests but are now // sitting idle in a "keep-alive" state. It does not interrupt any // connections currently in use. // -// If the Client's Transport does not have a CloseIdleConnections method +// If [Client.Transport] does not have a [Client.CloseIdleConnections] method // then this method does nothing. func (c *Client) CloseIdleConnections() { type closeIdler interface { diff --git a/src/net/http/cookie.go b/src/net/http/cookie.go index 912fde6b95..c22897f3f9 100644 --- a/src/net/http/cookie.go +++ b/src/net/http/cookie.go @@ -163,7 +163,7 @@ func readSetCookies(h Header) []*Cookie { return cookies } -// SetCookie adds a Set-Cookie header to the provided ResponseWriter's headers. +// SetCookie adds a Set-Cookie header to the provided [ResponseWriter]'s headers. // The provided cookie must have a valid Name. Invalid cookies may be // silently dropped. func SetCookie(w ResponseWriter, cookie *Cookie) { @@ -172,7 +172,7 @@ func SetCookie(w ResponseWriter, cookie *Cookie) { } } -// String returns the serialization of the cookie for use in a Cookie +// String returns the serialization of the cookie for use in a [Cookie] // header (if only Name and Value are set) or a Set-Cookie response // header (if other fields are set). // If c is nil or c.Name is invalid, the empty string is returned. diff --git a/src/net/http/cookiejar/jar.go b/src/net/http/cookiejar/jar.go index 46d1193951..59cde82cb3 100644 --- a/src/net/http/cookiejar/jar.go +++ b/src/net/http/cookiejar/jar.go @@ -73,7 +73,7 @@ type Jar struct { nextSeqNum uint64 } -// New returns a new cookie jar. A nil *Options is equivalent to a zero +// New returns a new cookie jar. A nil [*Options] is equivalent to a zero // Options. func New(o *Options) (*Jar, error) { jar := &Jar{ @@ -151,7 +151,7 @@ func hasDotSuffix(s, suffix string) bool { return len(s) > len(suffix) && s[len(s)-len(suffix)-1] == '.' && s[len(s)-len(suffix):] == suffix } -// Cookies implements the Cookies method of the http.CookieJar interface. +// Cookies implements the Cookies method of the [http.CookieJar] interface. // // It returns an empty slice if the URL's scheme is not HTTP or HTTPS. func (j *Jar) Cookies(u *url.URL) (cookies []*http.Cookie) { @@ -226,7 +226,7 @@ func (j *Jar) cookies(u *url.URL, now time.Time) (cookies []*http.Cookie) { return cookies } -// SetCookies implements the SetCookies method of the http.CookieJar interface. +// SetCookies implements the SetCookies method of the [http.CookieJar] interface. // // It does nothing if the URL's scheme is not HTTP or HTTPS. func (j *Jar) SetCookies(u *url.URL, cookies []*http.Cookie) { diff --git a/src/net/http/doc.go b/src/net/http/doc.go index d9e6aafb4e..f7ad3ae762 100644 --- a/src/net/http/doc.go +++ b/src/net/http/doc.go @@ -5,7 +5,7 @@ /* Package http provides HTTP client and server implementations. -Get, Head, Post, and PostForm make HTTP (or HTTPS) requests: +[Get], [Head], [Post], and [PostForm] make HTTP (or HTTPS) requests: resp, err := http.Get("http://example.com/") ... @@ -27,7 +27,7 @@ The caller must close the response body when finished with it: # Clients and Transports For control over HTTP client headers, redirect policy, and other -settings, create a Client: +settings, create a [Client]: client := &http.Client{ CheckRedirect: redirectPolicyFunc, @@ -43,7 +43,7 @@ settings, create a Client: // ... For control over proxies, TLS configuration, keep-alives, -compression, and other settings, create a Transport: +compression, and other settings, create a [Transport]: tr := &http.Transport{ MaxIdleConns: 10, @@ -59,8 +59,8 @@ goroutines and for efficiency should only be created once and re-used. # Servers ListenAndServe starts an HTTP server with a given address and handler. -The handler is usually nil, which means to use DefaultServeMux. -Handle and HandleFunc add handlers to DefaultServeMux: +The handler is usually nil, which means to use [DefaultServeMux]. +[Handle] and [HandleFunc] add handlers to [DefaultServeMux]: http.Handle("/foo", fooHandler) @@ -86,8 +86,8 @@ custom Server: Starting with Go 1.6, the http package has transparent support for the HTTP/2 protocol when using HTTPS. Programs that must disable HTTP/2 -can do so by setting Transport.TLSNextProto (for clients) or -Server.TLSNextProto (for servers) to a non-nil, empty +can do so by setting [Transport.TLSNextProto] (for clients) or +[Server.TLSNextProto] (for servers) to a non-nil, empty map. Alternatively, the following GODEBUG settings are currently supported: @@ -98,7 +98,7 @@ currently supported: Please report any issues before disabling HTTP/2 support: https://golang.org/s/http2bug -The http package's Transport and Server both automatically enable +The http package's [Transport] and [Server] both automatically enable HTTP/2 support for simple configurations. To enable HTTP/2 for more complex configurations, to use lower-level HTTP/2 features, or to use a newer version of Go's http2 package, import "golang.org/x/net/http2" diff --git a/src/net/http/fcgi/child.go b/src/net/http/fcgi/child.go index dc82bf7c3a..7665e7d252 100644 --- a/src/net/http/fcgi/child.go +++ b/src/net/http/fcgi/child.go @@ -335,7 +335,7 @@ func (c *child) cleanUp() { // goroutine for each. The goroutine reads requests and then calls handler // to reply to them. // If l is nil, Serve accepts connections from os.Stdin. -// If handler is nil, http.DefaultServeMux is used. +// If handler is nil, [http.DefaultServeMux] is used. func Serve(l net.Listener, handler http.Handler) error { if l == nil { var err error diff --git a/src/net/http/filetransport.go b/src/net/http/filetransport.go index 2a9e9b02ba..7384b22fbe 100644 --- a/src/net/http/filetransport.go +++ b/src/net/http/filetransport.go @@ -15,13 +15,13 @@ type fileTransport struct { fh fileHandler } -// NewFileTransport returns a new RoundTripper, serving the provided -// FileSystem. The returned RoundTripper ignores the URL host in its +// NewFileTransport returns a new [RoundTripper], serving the provided +// [FileSystem]. The returned RoundTripper ignores the URL host in its // incoming requests, as well as most other properties of the // request. // // The typical use case for NewFileTransport is to register the "file" -// protocol with a Transport, as in: +// protocol with a [Transport], as in: // // t := &http.Transport{} // t.RegisterProtocol("file", http.NewFileTransport(http.Dir("/"))) @@ -32,13 +32,13 @@ func NewFileTransport(fs FileSystem) RoundTripper { return fileTransport{fileHandler{fs}} } -// NewFileTransportFS returns a new RoundTripper, serving the provided +// NewFileTransportFS returns a new [RoundTripper], serving the provided // file system fsys. The returned RoundTripper ignores the URL host in its // incoming requests, as well as most other properties of the // request. // // The typical use case for NewFileTransportFS is to register the "file" -// protocol with a Transport, as in: +// protocol with a [Transport], as in: // // fsys := os.DirFS("/") // t := &http.Transport{} diff --git a/src/net/http/fs.go b/src/net/http/fs.go index ace74a7b80..af7511a7a4 100644 --- a/src/net/http/fs.go +++ b/src/net/http/fs.go @@ -25,12 +25,12 @@ import ( "time" ) -// A Dir implements FileSystem using the native file system restricted to a +// A Dir implements [FileSystem] using the native file system restricted to a // specific directory tree. // -// While the FileSystem.Open method takes '/'-separated paths, a Dir's string +// While the [FileSystem.Open] method takes '/'-separated paths, a Dir's string // value is a filename on the native file system, not a URL, so it is separated -// by filepath.Separator, which isn't necessarily '/'. +// by [filepath.Separator], which isn't necessarily '/'. // // Note that Dir could expose sensitive files and directories. Dir will follow // symlinks pointing out of the directory tree, which can be especially dangerous @@ -67,7 +67,7 @@ func mapOpenError(originalErr error, name string, sep rune, stat func(string) (f return originalErr } -// Open implements FileSystem using os.Open, opening files for reading rooted +// Open implements [FileSystem] using [os.Open], opening files for reading rooted // and relative to the directory d. func (d Dir) Open(name string) (File, error) { path, err := safefilepath.FromFS(path.Clean("/" + name)) @@ -89,18 +89,18 @@ func (d Dir) Open(name string) (File, error) { // A FileSystem implements access to a collection of named files. // The elements in a file path are separated by slash ('/', U+002F) // characters, regardless of host operating system convention. -// See the FileServer function to convert a FileSystem to a Handler. +// See the [FileServer] function to convert a FileSystem to a [Handler]. // -// This interface predates the fs.FS interface, which can be used instead: -// the FS adapter function converts an fs.FS to a FileSystem. +// This interface predates the [fs.FS] interface, which can be used instead: +// the [FS] adapter function converts an fs.FS to a FileSystem. type FileSystem interface { Open(name string) (File, error) } -// A File is returned by a FileSystem's Open method and can be -// served by the FileServer implementation. +// A File is returned by a [FileSystem]'s Open method and can be +// served by the [FileServer] implementation. // -// The methods should behave the same as those on an *os.File. +// The methods should behave the same as those on an [*os.File]. type File interface { io.Closer io.Reader @@ -167,7 +167,7 @@ func dirList(w ResponseWriter, r *Request, f File) { } // ServeContent replies to the request using the content in the -// provided ReadSeeker. The main benefit of ServeContent over io.Copy +// provided ReadSeeker. The main benefit of ServeContent over [io.Copy] // is that it handles Range requests properly, sets the MIME type, and // handles If-Match, If-Unmodified-Since, If-None-Match, If-Modified-Since, // and If-Range requests. @@ -175,7 +175,7 @@ func dirList(w ResponseWriter, r *Request, f File) { // If the response's Content-Type header is not set, ServeContent // first tries to deduce the type from name's file extension and, // if that fails, falls back to reading the first block of the content -// and passing it to DetectContentType. +// and passing it to [DetectContentType]. // The name is otherwise unused; in particular it can be empty and is // never sent in the response. // @@ -190,7 +190,7 @@ func dirList(w ResponseWriter, r *Request, f File) { // If the caller has set w's ETag header formatted per RFC 7232, section 2.3, // ServeContent uses it to handle requests using If-Match, If-None-Match, or If-Range. // -// Note that *os.File implements the io.ReadSeeker interface. +// Note that [*os.File] implements the [io.ReadSeeker] interface. func ServeContent(w ResponseWriter, req *Request, name string, modtime time.Time, content io.ReadSeeker) { sizeFunc := func() (int64, error) { size, err := content.Seek(0, io.SeekEnd) @@ -741,13 +741,13 @@ func localRedirect(w ResponseWriter, r *Request, newPath string) { // // As a precaution, ServeFile will reject requests where r.URL.Path // contains a ".." path element; this protects against callers who -// might unsafely use filepath.Join on r.URL.Path without sanitizing +// might unsafely use [filepath.Join] on r.URL.Path without sanitizing // it and then use that filepath.Join result as the name argument. // // As another special case, ServeFile redirects any request where r.URL.Path // ends in "/index.html" to the same path, without the final // "index.html". To avoid such redirects either modify the path or -// use ServeContent. +// use [ServeContent]. // // Outside of those two special cases, ServeFile does not use // r.URL.Path for selecting the file or directory to serve; only the @@ -772,11 +772,11 @@ func ServeFile(w ResponseWriter, r *Request, name string) { // If the provided file or directory name is a relative path, it is // interpreted relative to the current directory and may ascend to // parent directories. If the provided name is constructed from user -// input, it should be sanitized before calling ServeFile. +// input, it should be sanitized before calling [ServeFile]. // // As a precaution, ServeFile will reject requests where r.URL.Path // contains a ".." path element; this protects against callers who -// might unsafely use filepath.Join on r.URL.Path without sanitizing +// might unsafely use [filepath.Join] on r.URL.Path without sanitizing // it and then use that filepath.Join result as the name argument. // // As another special case, ServeFile redirects any request where r.URL.Path @@ -890,9 +890,9 @@ func (f ioFile) Readdir(count int) ([]fs.FileInfo, error) { return list, nil } -// FS converts fsys to a FileSystem implementation, -// for use with FileServer and NewFileTransport. -// The files provided by fsys must implement io.Seeker. +// FS converts fsys to a [FileSystem] implementation, +// for use with [FileServer] and [NewFileTransport]. +// The files provided by fsys must implement [io.Seeker]. func FS(fsys fs.FS) FileSystem { return ioFS{fsys} } @@ -905,11 +905,11 @@ func FS(fsys fs.FS) FileSystem { // "index.html". // // To use the operating system's file system implementation, -// use http.Dir: +// use [http.Dir]: // // http.Handle("/", http.FileServer(http.Dir("/tmp"))) // -// To use an fs.FS implementation, use http.FileServerFS instead. +// To use an [fs.FS] implementation, use [http.FileServerFS] instead. func FileServer(root FileSystem) Handler { return &fileHandler{root} } diff --git a/src/net/http/header.go b/src/net/http/header.go index e0b342c63c..9d0f3a125d 100644 --- a/src/net/http/header.go +++ b/src/net/http/header.go @@ -20,13 +20,13 @@ import ( // A Header represents the key-value pairs in an HTTP header. // // The keys should be in canonical form, as returned by -// CanonicalHeaderKey. +// [CanonicalHeaderKey]. type Header map[string][]string // Add adds the key, value pair to the header. // It appends to any existing values associated with key. // The key is case insensitive; it is canonicalized by -// CanonicalHeaderKey. +// [CanonicalHeaderKey]. func (h Header) Add(key, value string) { textproto.MIMEHeader(h).Add(key, value) } @@ -34,7 +34,7 @@ func (h Header) Add(key, value string) { // Set sets the header entries associated with key to the // single element value. It replaces any existing values // associated with key. The key is case insensitive; it is -// canonicalized by textproto.CanonicalMIMEHeaderKey. +// canonicalized by [textproto.CanonicalMIMEHeaderKey]. // To use non-canonical keys, assign to the map directly. func (h Header) Set(key, value string) { textproto.MIMEHeader(h).Set(key, value) @@ -42,7 +42,7 @@ func (h Header) Set(key, value string) { // Get gets the first value associated with the given key. If // there are no values associated with the key, Get returns "". -// It is case insensitive; textproto.CanonicalMIMEHeaderKey is +// It is case insensitive; [textproto.CanonicalMIMEHeaderKey] is // used to canonicalize the provided key. Get assumes that all // keys are stored in canonical form. To use non-canonical keys, // access the map directly. @@ -51,7 +51,7 @@ func (h Header) Get(key string) string { } // Values returns all values associated with the given key. -// It is case insensitive; textproto.CanonicalMIMEHeaderKey is +// It is case insensitive; [textproto.CanonicalMIMEHeaderKey] is // used to canonicalize the provided key. To use non-canonical // keys, access the map directly. // The returned slice is not a copy. @@ -76,7 +76,7 @@ func (h Header) has(key string) bool { // Del deletes the values associated with key. // The key is case insensitive; it is canonicalized by -// CanonicalHeaderKey. +// [CanonicalHeaderKey]. func (h Header) Del(key string) { textproto.MIMEHeader(h).Del(key) } @@ -125,7 +125,7 @@ var timeFormats = []string{ // ParseTime parses a time header (such as the Date: header), // trying each of the three formats allowed by HTTP/1.1: -// TimeFormat, time.RFC850, and time.ANSIC. +// [TimeFormat], [time.RFC850], and [time.ANSIC]. func ParseTime(text string) (t time.Time, err error) { for _, layout := range timeFormats { t, err = time.Parse(layout, text) diff --git a/src/net/http/http.go b/src/net/http/http.go index 9b81654fcc..6e2259adbf 100644 --- a/src/net/http/http.go +++ b/src/net/http/http.go @@ -103,10 +103,10 @@ func hexEscapeNonASCII(s string) string { return string(b) } -// NoBody is an io.ReadCloser with no bytes. Read always returns EOF +// NoBody is an [io.ReadCloser] with no bytes. Read always returns EOF // and Close always returns nil. It can be used in an outgoing client // request to explicitly signal that a request has zero bytes. -// An alternative, however, is to simply set Request.Body to nil. +// An alternative, however, is to simply set [Request.Body] to nil. var NoBody = noBody{} type noBody struct{} @@ -121,7 +121,7 @@ var ( _ io.ReadCloser = NoBody ) -// PushOptions describes options for Pusher.Push. +// PushOptions describes options for [Pusher.Push]. type PushOptions struct { // Method specifies the HTTP method for the promised request. // If set, it must be "GET" or "HEAD". Empty means "GET". diff --git a/src/net/http/httptest/httptest.go b/src/net/http/httptest/httptest.go index 9bedefd2bc..f0ca64362d 100644 --- a/src/net/http/httptest/httptest.go +++ b/src/net/http/httptest/httptest.go @@ -15,7 +15,7 @@ import ( ) // NewRequest returns a new incoming server Request, suitable -// for passing to an http.Handler for testing. +// for passing to an [http.Handler] for testing. // // The target is the RFC 7230 "request-target": it may be either a // path or an absolute URL. If target is an absolute URL, the host name diff --git a/src/net/http/httptest/recorder.go b/src/net/http/httptest/recorder.go index 1c1d880155..dd51901b0d 100644 --- a/src/net/http/httptest/recorder.go +++ b/src/net/http/httptest/recorder.go @@ -16,7 +16,7 @@ import ( "golang.org/x/net/http/httpguts" ) -// ResponseRecorder is an implementation of http.ResponseWriter that +// ResponseRecorder is an implementation of [http.ResponseWriter] that // records its mutations for later inspection in tests. type ResponseRecorder struct { // Code is the HTTP response code set by WriteHeader. @@ -47,7 +47,7 @@ type ResponseRecorder struct { wroteHeader bool } -// NewRecorder returns an initialized ResponseRecorder. +// NewRecorder returns an initialized [ResponseRecorder]. func NewRecorder() *ResponseRecorder { return &ResponseRecorder{ HeaderMap: make(http.Header), @@ -57,12 +57,12 @@ func NewRecorder() *ResponseRecorder { } // DefaultRemoteAddr is the default remote address to return in RemoteAddr if -// an explicit DefaultRemoteAddr isn't set on ResponseRecorder. +// an explicit DefaultRemoteAddr isn't set on [ResponseRecorder]. const DefaultRemoteAddr = "1.2.3.4" -// Header implements http.ResponseWriter. It returns the response +// Header implements [http.ResponseWriter]. It returns the response // headers to mutate within a handler. To test the headers that were -// written after a handler completes, use the Result method and see +// written after a handler completes, use the [ResponseRecorder.Result] method and see // the returned Response value's Header. func (rw *ResponseRecorder) Header() http.Header { m := rw.HeaderMap @@ -112,7 +112,7 @@ func (rw *ResponseRecorder) Write(buf []byte) (int, error) { return len(buf), nil } -// WriteString implements io.StringWriter. The data in str is written +// WriteString implements [io.StringWriter]. The data in str is written // to rw.Body, if not nil. func (rw *ResponseRecorder) WriteString(str string) (int, error) { rw.writeHeader(nil, str) @@ -139,7 +139,7 @@ func checkWriteHeaderCode(code int) { } } -// WriteHeader implements http.ResponseWriter. +// WriteHeader implements [http.ResponseWriter]. func (rw *ResponseRecorder) WriteHeader(code int) { if rw.wroteHeader { return @@ -154,7 +154,7 @@ func (rw *ResponseRecorder) WriteHeader(code int) { rw.snapHeader = rw.HeaderMap.Clone() } -// Flush implements http.Flusher. To test whether Flush was +// Flush implements [http.Flusher]. To test whether Flush was // called, see rw.Flushed. func (rw *ResponseRecorder) Flush() { if !rw.wroteHeader { @@ -175,7 +175,7 @@ func (rw *ResponseRecorder) Flush() { // did a write. // // The Response.Body is guaranteed to be non-nil and Body.Read call is -// guaranteed to not return any error other than io.EOF. +// guaranteed to not return any error other than [io.EOF]. // // Result must only be called after the handler has finished running. func (rw *ResponseRecorder) Result() *http.Response { diff --git a/src/net/http/httptest/server.go b/src/net/http/httptest/server.go index c962749e85..5095b438ec 100644 --- a/src/net/http/httptest/server.go +++ b/src/net/http/httptest/server.go @@ -100,7 +100,7 @@ func strSliceContainsPrefix(v []string, pre string) bool { return false } -// NewServer starts and returns a new Server. +// NewServer starts and returns a new [Server]. // The caller should call Close when finished, to shut it down. func NewServer(handler http.Handler) *Server { ts := NewUnstartedServer(handler) @@ -108,7 +108,7 @@ func NewServer(handler http.Handler) *Server { return ts } -// NewUnstartedServer returns a new Server but doesn't start it. +// NewUnstartedServer returns a new [Server] but doesn't start it. // // After changing its configuration, the caller should call Start or // StartTLS. @@ -185,7 +185,7 @@ func (s *Server) StartTLS() { s.goServe() } -// NewTLSServer starts and returns a new Server using TLS. +// NewTLSServer starts and returns a new [Server] using TLS. // The caller should call Close when finished, to shut it down. func NewTLSServer(handler http.Handler) *Server { ts := NewUnstartedServer(handler) @@ -298,7 +298,7 @@ func (s *Server) Certificate() *x509.Certificate { // Client returns an HTTP client configured for making requests to the server. // It is configured to trust the server's TLS test certificate and will -// close its idle connections on Server.Close. +// close its idle connections on [Server.Close]. func (s *Server) Client() *http.Client { return s.client } diff --git a/src/net/http/httptrace/trace.go b/src/net/http/httptrace/trace.go index 6af30f78d1..706a432957 100644 --- a/src/net/http/httptrace/trace.go +++ b/src/net/http/httptrace/trace.go @@ -19,7 +19,7 @@ import ( // unique type to prevent assignment. type clientEventContextKey struct{} -// ContextClientTrace returns the ClientTrace associated with the +// ContextClientTrace returns the [ClientTrace] associated with the // provided context. If none, it returns nil. func ContextClientTrace(ctx context.Context) *ClientTrace { trace, _ := ctx.Value(clientEventContextKey{}).(*ClientTrace) @@ -233,7 +233,7 @@ func (t *ClientTrace) hasNetHooks() bool { return t.DNSStart != nil || t.DNSDone != nil || t.ConnectStart != nil || t.ConnectDone != nil } -// GotConnInfo is the argument to the ClientTrace.GotConn function and +// GotConnInfo is the argument to the [ClientTrace.GotConn] function and // contains information about the obtained connection. type GotConnInfo struct { // Conn is the connection that was obtained. It is owned by diff --git a/src/net/http/httputil/dump.go b/src/net/http/httputil/dump.go index 7affe5e61a..2edb9bc98d 100644 --- a/src/net/http/httputil/dump.go +++ b/src/net/http/httputil/dump.go @@ -71,8 +71,8 @@ func outgoingLength(req *http.Request) int64 { return -1 } -// DumpRequestOut is like DumpRequest but for outgoing client requests. It -// includes any headers that the standard http.Transport adds, such as +// DumpRequestOut is like [DumpRequest] but for outgoing client requests. It +// includes any headers that the standard [http.Transport] adds, such as // User-Agent. func DumpRequestOut(req *http.Request, body bool) ([]byte, error) { save := req.Body @@ -203,17 +203,17 @@ var reqWriteExcludeHeaderDump = map[string]bool{ // representation. It should only be used by servers to debug client // requests. The returned representation is an approximation only; // some details of the initial request are lost while parsing it into -// an http.Request. In particular, the order and case of header field +// an [http.Request]. In particular, the order and case of header field // names are lost. The order of values in multi-valued headers is kept // intact. HTTP/2 requests are dumped in HTTP/1.x form, not in their // original binary representations. // // If body is true, DumpRequest also returns the body. To do so, it -// consumes req.Body and then replaces it with a new io.ReadCloser +// consumes req.Body and then replaces it with a new [io.ReadCloser] // that yields the same bytes. If DumpRequest returns an error, // the state of req is undefined. // -// The documentation for http.Request.Write details which fields +// The documentation for [http.Request.Write] details which fields // of req are included in the dump. func DumpRequest(req *http.Request, body bool) ([]byte, error) { var err error diff --git a/src/net/http/httputil/httputil.go b/src/net/http/httputil/httputil.go index 09ea74d6d1..431930ea65 100644 --- a/src/net/http/httputil/httputil.go +++ b/src/net/http/httputil/httputil.go @@ -13,7 +13,7 @@ import ( // NewChunkedReader returns a new chunkedReader that translates the data read from r // out of HTTP "chunked" format before returning it. -// The chunkedReader returns io.EOF when the final 0-length chunk is read. +// The chunkedReader returns [io.EOF] when the final 0-length chunk is read. // // NewChunkedReader is not needed by normal applications. The http package // automatically decodes chunking when reading response bodies. diff --git a/src/net/http/httputil/persist.go b/src/net/http/httputil/persist.go index 84b116df8c..0cbe3ebf10 100644 --- a/src/net/http/httputil/persist.go +++ b/src/net/http/httputil/persist.go @@ -33,7 +33,7 @@ var errClosed = errors.New("i/o operation on closed connection") // It is low-level, old, and unused by Go's current HTTP stack. // We should have deleted it before Go 1. // -// Deprecated: Use the Server in package net/http instead. +// Deprecated: Use the Server in package [net/http] instead. type ServerConn struct { mu sync.Mutex // read-write protects the following fields c net.Conn @@ -50,7 +50,7 @@ type ServerConn struct { // It is low-level, old, and unused by Go's current HTTP stack. // We should have deleted it before Go 1. // -// Deprecated: Use the Server in package net/http instead. +// Deprecated: Use the Server in package [net/http] instead. func NewServerConn(c net.Conn, r *bufio.Reader) *ServerConn { if r == nil { r = bufio.NewReader(c) @@ -58,10 +58,10 @@ func NewServerConn(c net.Conn, r *bufio.Reader) *ServerConn { return &ServerConn{c: c, r: r, pipereq: make(map[*http.Request]uint)} } -// Hijack detaches the ServerConn and returns the underlying connection as well +// Hijack detaches the [ServerConn] and returns the underlying connection as well // as the read-side bufio which may have some left over data. Hijack may be // called before Read has signaled the end of the keep-alive logic. The user -// should not call Hijack while Read or Write is in progress. +// should not call Hijack while [ServerConn.Read] or [ServerConn.Write] is in progress. func (sc *ServerConn) Hijack() (net.Conn, *bufio.Reader) { sc.mu.Lock() defer sc.mu.Unlock() @@ -72,7 +72,7 @@ func (sc *ServerConn) Hijack() (net.Conn, *bufio.Reader) { return c, r } -// Close calls Hijack and then also closes the underlying connection. +// Close calls [ServerConn.Hijack] and then also closes the underlying connection. func (sc *ServerConn) Close() error { c, _ := sc.Hijack() if c != nil { @@ -81,7 +81,7 @@ func (sc *ServerConn) Close() error { return nil } -// Read returns the next request on the wire. An ErrPersistEOF is returned if +// Read returns the next request on the wire. An [ErrPersistEOF] is returned if // it is gracefully determined that there are no more requests (e.g. after the // first request on an HTTP/1.0 connection, or after a Connection:close on a // HTTP/1.1 connection). @@ -171,7 +171,7 @@ func (sc *ServerConn) Pending() int { // Write writes resp in response to req. To close the connection gracefully, set the // Response.Close field to true. Write should be considered operational until -// it returns an error, regardless of any errors returned on the Read side. +// it returns an error, regardless of any errors returned on the [ServerConn.Read] side. func (sc *ServerConn) Write(req *http.Request, resp *http.Response) error { // Retrieve the pipeline ID of this request/response pair @@ -226,7 +226,7 @@ func (sc *ServerConn) Write(req *http.Request, resp *http.Response) error { // It is low-level, old, and unused by Go's current HTTP stack. // We should have deleted it before Go 1. // -// Deprecated: Use Client or Transport in package net/http instead. +// Deprecated: Use Client or Transport in package [net/http] instead. type ClientConn struct { mu sync.Mutex // read-write protects the following fields c net.Conn @@ -244,7 +244,7 @@ type ClientConn struct { // It is low-level, old, and unused by Go's current HTTP stack. // We should have deleted it before Go 1. // -// Deprecated: Use the Client or Transport in package net/http instead. +// Deprecated: Use the Client or Transport in package [net/http] instead. func NewClientConn(c net.Conn, r *bufio.Reader) *ClientConn { if r == nil { r = bufio.NewReader(c) @@ -261,17 +261,17 @@ func NewClientConn(c net.Conn, r *bufio.Reader) *ClientConn { // It is low-level, old, and unused by Go's current HTTP stack. // We should have deleted it before Go 1. // -// Deprecated: Use the Client or Transport in package net/http instead. +// Deprecated: Use the Client or Transport in package [net/http] instead. func NewProxyClientConn(c net.Conn, r *bufio.Reader) *ClientConn { cc := NewClientConn(c, r) cc.writeReq = (*http.Request).WriteProxy return cc } -// Hijack detaches the ClientConn and returns the underlying connection as well +// Hijack detaches the [ClientConn] and returns the underlying connection as well // as the read-side bufio which may have some left over data. Hijack may be // called before the user or Read have signaled the end of the keep-alive -// logic. The user should not call Hijack while Read or Write is in progress. +// logic. The user should not call Hijack while [ClientConn.Read] or ClientConn.Write is in progress. func (cc *ClientConn) Hijack() (c net.Conn, r *bufio.Reader) { cc.mu.Lock() defer cc.mu.Unlock() @@ -282,7 +282,7 @@ func (cc *ClientConn) Hijack() (c net.Conn, r *bufio.Reader) { return } -// Close calls Hijack and then also closes the underlying connection. +// Close calls [ClientConn.Hijack] and then also closes the underlying connection. func (cc *ClientConn) Close() error { c, _ := cc.Hijack() if c != nil { @@ -291,7 +291,7 @@ func (cc *ClientConn) Close() error { return nil } -// Write writes a request. An ErrPersistEOF error is returned if the connection +// Write writes a request. An [ErrPersistEOF] error is returned if the connection // has been closed in an HTTP keep-alive sense. If req.Close equals true, the // keep-alive connection is logically closed after this request and the opposing // server is informed. An ErrUnexpectedEOF indicates the remote closed the @@ -357,9 +357,9 @@ func (cc *ClientConn) Pending() int { } // Read reads the next response from the wire. A valid response might be -// returned together with an ErrPersistEOF, which means that the remote +// returned together with an [ErrPersistEOF], which means that the remote // requested that this be the last request serviced. Read can be called -// concurrently with Write, but not with another Read. +// concurrently with [ClientConn.Write], but not with another Read. func (cc *ClientConn) Read(req *http.Request) (resp *http.Response, err error) { // Retrieve the pipeline ID of this request/response pair cc.mu.Lock() diff --git a/src/net/http/httputil/reverseproxy.go b/src/net/http/httputil/reverseproxy.go index 719ab62d1a..5c70f0d27b 100644 --- a/src/net/http/httputil/reverseproxy.go +++ b/src/net/http/httputil/reverseproxy.go @@ -26,7 +26,7 @@ import ( "golang.org/x/net/http/httpguts" ) -// A ProxyRequest contains a request to be rewritten by a ReverseProxy. +// A ProxyRequest contains a request to be rewritten by a [ReverseProxy]. type ProxyRequest struct { // In is the request received by the proxy. // The Rewrite function must not modify In. @@ -45,7 +45,7 @@ type ProxyRequest struct { // // SetURL rewrites the outbound Host header to match the target's host. // To preserve the inbound request's Host header (the default behavior -// of NewSingleHostReverseProxy): +// of [NewSingleHostReverseProxy]): // // rewriteFunc := func(r *httputil.ProxyRequest) { // r.SetURL(url) @@ -68,7 +68,7 @@ func (r *ProxyRequest) SetURL(target *url.URL) { // If the outbound request contains an existing X-Forwarded-For header, // SetXForwarded appends the client IP address to it. To append to the // inbound request's X-Forwarded-For header (the default behavior of -// ReverseProxy when using a Director function), copy the header +// [ReverseProxy] when using a Director function), copy the header // from the inbound request before calling SetXForwarded: // // rewriteFunc := func(r *httputil.ProxyRequest) { @@ -200,7 +200,7 @@ type ReverseProxy struct { } // A BufferPool is an interface for getting and returning temporary -// byte slices for use by io.CopyBuffer. +// byte slices for use by [io.CopyBuffer]. type BufferPool interface { Get() []byte Put([]byte) @@ -239,7 +239,7 @@ func joinURLPath(a, b *url.URL) (path, rawpath string) { return a.Path + b.Path, apath + bpath } -// NewSingleHostReverseProxy returns a new ReverseProxy that routes +// NewSingleHostReverseProxy returns a new [ReverseProxy] that routes // URLs to the scheme, host, and base path provided in target. If the // target's path is "/base" and the incoming request was for "/dir", // the target request will be for /base/dir. diff --git a/src/net/http/internal/ascii/print.go b/src/net/http/internal/ascii/print.go index 585e5baba4..98dbf4e3d2 100644 --- a/src/net/http/internal/ascii/print.go +++ b/src/net/http/internal/ascii/print.go @@ -9,7 +9,7 @@ import ( "unicode" ) -// EqualFold is strings.EqualFold, ASCII only. It reports whether s and t +// EqualFold is [strings.EqualFold], ASCII only. It reports whether s and t // are equal, ASCII-case-insensitively. func EqualFold(s, t string) bool { if len(s) != len(t) { diff --git a/src/net/http/internal/chunked.go b/src/net/http/internal/chunked.go index c0fa4ccac7..196b5d8925 100644 --- a/src/net/http/internal/chunked.go +++ b/src/net/http/internal/chunked.go @@ -22,7 +22,7 @@ var ErrLineTooLong = errors.New("header line too long") // NewChunkedReader returns a new chunkedReader that translates the data read from r // out of HTTP "chunked" format before returning it. -// The chunkedReader returns io.EOF when the final 0-length chunk is read. +// The chunkedReader returns [io.EOF] when the final 0-length chunk is read. // // NewChunkedReader is not needed by normal applications. The http package // automatically decodes chunking when reading response bodies. @@ -221,7 +221,7 @@ type chunkedWriter struct { // Write the contents of data as one chunk to Wire. // NOTE: Note that the corresponding chunk-writing procedure in Conn.Write has -// a bug since it does not check for success of io.WriteString +// a bug since it does not check for success of [io.WriteString] func (cw *chunkedWriter) Write(data []byte) (n int, err error) { // Don't send 0-length data. It looks like EOF for chunked encoding. @@ -253,9 +253,9 @@ func (cw *chunkedWriter) Close() error { return err } -// FlushAfterChunkWriter signals from the caller of NewChunkedWriter +// FlushAfterChunkWriter signals from the caller of [NewChunkedWriter] // that each chunk should be followed by a flush. It is used by the -// http.Transport code to keep the buffering behavior for headers and +// [net/http.Transport] code to keep the buffering behavior for headers and // trailers, but flush out chunks aggressively in the middle for // request bodies which may be generated slowly. See Issue 6574. type FlushAfterChunkWriter struct { diff --git a/src/net/http/pprof/pprof.go b/src/net/http/pprof/pprof.go index bc3225daca..bc48f11834 100644 --- a/src/net/http/pprof/pprof.go +++ b/src/net/http/pprof/pprof.go @@ -47,12 +47,12 @@ // go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30 // // Or to look at the goroutine blocking profile, after calling -// runtime.SetBlockProfileRate in your program: +// [runtime.SetBlockProfileRate] in your program: // // go tool pprof http://localhost:6060/debug/pprof/block // // Or to look at the holders of contended mutexes, after calling -// runtime.SetMutexProfileFraction in your program: +// [runtime.SetMutexProfileFraction] in your program: // // go tool pprof http://localhost:6060/debug/pprof/mutex // diff --git a/src/net/http/request.go b/src/net/http/request.go index 730f51287a..99fdebcf9b 100644 --- a/src/net/http/request.go +++ b/src/net/http/request.go @@ -107,7 +107,7 @@ var reqWriteExcludeHeader = map[string]bool{ // // The field semantics differ slightly between client and server // usage. In addition to the notes on the fields below, see the -// documentation for Request.Write and RoundTripper. +// documentation for [Request.Write] and [RoundTripper]. type Request struct { // Method specifies the HTTP method (GET, POST, PUT, etc.). // For client requests, an empty string means GET. @@ -333,7 +333,7 @@ type Request struct { } // Context returns the request's context. To change the context, use -// Clone or WithContext. +// [Request.Clone] or [Request.WithContext]. // // The returned context is always non-nil; it defaults to the // background context. @@ -357,8 +357,8 @@ func (r *Request) Context() context.Context { // lifetime of a request and its response: obtaining a connection, // sending the request, and reading the response headers and body. // -// To create a new request with a context, use NewRequestWithContext. -// To make a deep copy of a request with a new context, use Request.Clone. +// To create a new request with a context, use [NewRequestWithContext]. +// To make a deep copy of a request with a new context, use [Request.Clone]. func (r *Request) WithContext(ctx context.Context) *Request { if ctx == nil { panic("nil context") @@ -435,7 +435,7 @@ func (r *Request) Cookies() []*Cookie { var ErrNoCookie = errors.New("http: named cookie not present") // Cookie returns the named cookie provided in the request or -// ErrNoCookie if not found. +// [ErrNoCookie] if not found. // If multiple cookies match the given name, only one cookie will // be returned. func (r *Request) Cookie(name string) (*Cookie, error) { @@ -449,7 +449,7 @@ func (r *Request) Cookie(name string) (*Cookie, error) { } // AddCookie adds a cookie to the request. Per RFC 6265 section 5.4, -// AddCookie does not attach more than one Cookie header field. That +// AddCookie does not attach more than one [Cookie] header field. That // means all cookies, if any, are written into the same line, // separated by semicolon. // AddCookie only sanitizes c's name and value, and does not sanitize @@ -467,7 +467,7 @@ func (r *Request) AddCookie(c *Cookie) { // // Referer is misspelled as in the request itself, a mistake from the // earliest days of HTTP. This value can also be fetched from the -// Header map as Header["Referer"]; the benefit of making it available +// [Header] map as Header["Referer"]; the benefit of making it available // as a method is that the compiler can diagnose programs that use the // alternate (correct English) spelling req.Referrer() but cannot // diagnose programs that use Header["Referrer"]. @@ -485,7 +485,7 @@ var multipartByReader = &multipart.Form{ // MultipartReader returns a MIME multipart reader if this is a // multipart/form-data or a multipart/mixed POST request, else returns nil and an error. -// Use this function instead of ParseMultipartForm to +// Use this function instead of [Request.ParseMultipartForm] to // process the request body as a stream. func (r *Request) MultipartReader() (*multipart.Reader, error) { if r.MultipartForm == multipartByReader { @@ -548,15 +548,15 @@ const defaultUserAgent = "Go-http-client/1.1" // TransferEncoding // Body // -// If Body is present, Content-Length is <= 0 and TransferEncoding +// If Body is present, Content-Length is <= 0 and [Request.TransferEncoding] // hasn't been set to "identity", Write adds "Transfer-Encoding: // chunked" to the header. Body is closed after it is sent. func (r *Request) Write(w io.Writer) error { return r.write(w, false, nil, nil) } -// WriteProxy is like Write but writes the request in the form -// expected by an HTTP proxy. In particular, WriteProxy writes the +// WriteProxy is like [Request.Write] but writes the request in the form +// expected by an HTTP proxy. In particular, [Request.WriteProxy] writes the // initial Request-URI line of the request with an absolute URI, per // section 5.3 of RFC 7230, including the scheme and host. // In either case, WriteProxy also writes a Host header, using @@ -851,33 +851,33 @@ func validMethod(method string) bool { return len(method) > 0 && strings.IndexFunc(method, isNotToken) == -1 } -// NewRequest wraps NewRequestWithContext using context.Background. +// NewRequest wraps [NewRequestWithContext] using [context.Background]. func NewRequest(method, url string, body io.Reader) (*Request, error) { return NewRequestWithContext(context.Background(), method, url, body) } -// NewRequestWithContext returns a new Request given a method, URL, and +// NewRequestWithContext returns a new [Request] given a method, URL, and // optional body. // -// If the provided body is also an io.Closer, the returned -// Request.Body is set to body and will be closed (possibly +// If the provided body is also an [io.Closer], the returned +// [Request.Body] is set to body and will be closed (possibly // asynchronously) by the Client methods Do, Post, and PostForm, -// and Transport.RoundTrip. +// and [Transport.RoundTrip]. // // NewRequestWithContext returns a Request suitable for use with -// Client.Do or Transport.RoundTrip. To create a request for use with -// testing a Server Handler, either use the NewRequest function in the -// net/http/httptest package, use ReadRequest, or manually update the +// [Client.Do] or [Transport.RoundTrip]. To create a request for use with +// testing a Server Handler, either use the [NewRequest] function in the +// net/http/httptest package, use [ReadRequest], or manually update the // Request fields. For an outgoing client request, the context // controls the entire lifetime of a request and its response: // obtaining a connection, sending the request, and reading the // response headers and body. See the Request type's documentation for // the difference between inbound and outbound request fields. // -// If body is of type *bytes.Buffer, *bytes.Reader, or -// *strings.Reader, the returned request's ContentLength is set to its +// If body is of type [*bytes.Buffer], [*bytes.Reader], or +// [*strings.Reader], the returned request's ContentLength is set to its // exact value (instead of -1), GetBody is populated (so 307 and 308 -// redirects can replay the body), and Body is set to NoBody if the +// redirects can replay the body), and Body is set to [NoBody] if the // ContentLength is 0. func NewRequestWithContext(ctx context.Context, method, url string, body io.Reader) (*Request, error) { if method == "" { @@ -1001,7 +1001,7 @@ func parseBasicAuth(auth string) (username, password string, ok bool) { // The username may not contain a colon. Some protocols may impose // additional requirements on pre-escaping the username and // password. For instance, when used with OAuth2, both arguments must -// be URL encoded first with url.QueryEscape. +// be URL encoded first with [url.QueryEscape]. func (r *Request) SetBasicAuth(username, password string) { r.Header.Set("Authorization", "Basic "+basicAuth(username, password)) } @@ -1035,8 +1035,8 @@ func putTextprotoReader(r *textproto.Reader) { // ReadRequest reads and parses an incoming request from b. // // ReadRequest is a low-level function and should only be used for -// specialized applications; most code should use the Server to read -// requests and handle them via the Handler interface. ReadRequest +// specialized applications; most code should use the [Server] to read +// requests and handle them via the [Handler] interface. ReadRequest // only supports HTTP/1.x requests. For HTTP/2, use golang.org/x/net/http2. func ReadRequest(b *bufio.Reader) (*Request, error) { req, err := readRequest(b) @@ -1145,15 +1145,15 @@ func readRequest(b *bufio.Reader) (req *Request, err error) { return req, nil } -// MaxBytesReader is similar to io.LimitReader but is intended for +// MaxBytesReader is similar to [io.LimitReader] but is intended for // limiting the size of incoming request bodies. In contrast to // io.LimitReader, MaxBytesReader's result is a ReadCloser, returns a -// non-nil error of type *MaxBytesError for a Read beyond the limit, +// non-nil error of type [*MaxBytesError] for a Read beyond the limit, // and closes the underlying reader when its Close method is called. // // MaxBytesReader prevents clients from accidentally or maliciously // sending a large request and wasting server resources. If possible, -// it tells the ResponseWriter to close the connection after the limit +// it tells the [ResponseWriter] to close the connection after the limit // has been reached. func MaxBytesReader(w ResponseWriter, r io.ReadCloser, n int64) io.ReadCloser { if n < 0 { // Treat negative limits as equivalent to 0. @@ -1162,7 +1162,7 @@ func MaxBytesReader(w ResponseWriter, r io.ReadCloser, n int64) io.ReadCloser { return &maxBytesReader{w: w, r: r, i: n, n: n} } -// MaxBytesError is returned by MaxBytesReader when its read limit is exceeded. +// MaxBytesError is returned by [MaxBytesReader] when its read limit is exceeded. type MaxBytesError struct { Limit int64 } @@ -1287,14 +1287,14 @@ func parsePostForm(r *Request) (vs url.Values, err error) { // as a form and puts the results into both r.PostForm and r.Form. Request body // parameters take precedence over URL query string values in r.Form. // -// If the request Body's size has not already been limited by MaxBytesReader, +// If the request Body's size has not already been limited by [MaxBytesReader], // the size is capped at 10MB. // // For other HTTP methods, or when the Content-Type is not // application/x-www-form-urlencoded, the request Body is not read, and // r.PostForm is initialized to a non-nil, empty value. // -// ParseMultipartForm calls ParseForm automatically. +// [Request.ParseMultipartForm] calls ParseForm automatically. // ParseForm is idempotent. func (r *Request) ParseForm() error { var err error @@ -1335,7 +1335,7 @@ func (r *Request) ParseForm() error { // The whole request body is parsed and up to a total of maxMemory bytes of // its file parts are stored in memory, with the remainder stored on // disk in temporary files. -// ParseMultipartForm calls ParseForm if necessary. +// ParseMultipartForm calls [Request.ParseForm] if necessary. // If ParseForm returns an error, ParseMultipartForm returns it but also // continues parsing the request body. // After one call to ParseMultipartForm, subsequent calls have no effect. @@ -1383,11 +1383,11 @@ func (r *Request) ParseMultipartForm(maxMemory int64) error { // 2. query parameters (always) // 3. multipart/form-data form body (always) // -// FormValue calls ParseMultipartForm and ParseForm if necessary and ignores -// any errors returned by these functions. +// FormValue calls [Request.ParseMultipartForm] and [Request.ParseForm] +// if necessary and ignores any errors returned by these functions. // If key is not present, FormValue returns the empty string. // To access multiple values of the same key, call ParseForm and -// then inspect Request.Form directly. +// then inspect [Request.Form] directly. func (r *Request) FormValue(key string) string { if r.Form == nil { r.ParseMultipartForm(defaultMaxMemory) @@ -1400,7 +1400,7 @@ func (r *Request) FormValue(key string) string { // PostFormValue returns the first value for the named component of the POST, // PUT, or PATCH request body. URL query parameters are ignored. -// PostFormValue calls ParseMultipartForm and ParseForm if necessary and ignores +// PostFormValue calls [Request.ParseMultipartForm] and [Request.ParseForm] if necessary and ignores // any errors returned by these functions. // If key is not present, PostFormValue returns the empty string. func (r *Request) PostFormValue(key string) string { @@ -1414,7 +1414,7 @@ func (r *Request) PostFormValue(key string) string { } // FormFile returns the first file for the provided form key. -// FormFile calls ParseMultipartForm and ParseForm if necessary. +// FormFile calls [Request.ParseMultipartForm] and [Request.ParseForm] if necessary. func (r *Request) FormFile(key string) (multipart.File, *multipart.FileHeader, error) { if r.MultipartForm == multipartByReader { return nil, nil, errors.New("http: multipart handled by MultipartReader") @@ -1434,7 +1434,7 @@ func (r *Request) FormFile(key string) (multipart.File, *multipart.FileHeader, e return nil, nil, ErrMissingFile } -// PathValue returns the value for the named path wildcard in the ServeMux pattern +// PathValue returns the value for the named path wildcard in the [ServeMux] pattern // that matched the request. // It returns the empty string if the request was not matched against a pattern // or there is no such wildcard in the pattern. diff --git a/src/net/http/response.go b/src/net/http/response.go index 755c696557..0c3d7f6d85 100644 --- a/src/net/http/response.go +++ b/src/net/http/response.go @@ -29,7 +29,7 @@ var respExcludeHeader = map[string]bool{ // Response represents the response from an HTTP request. // -// The Client and Transport return Responses from servers once +// The [Client] and [Transport] return Responses from servers once // the response headers have been received. The response body // is streamed on demand as the Body field is read. type Response struct { @@ -126,13 +126,13 @@ func (r *Response) Cookies() []*Cookie { return readSetCookies(r.Header) } -// ErrNoLocation is returned by Response's Location method +// ErrNoLocation is returned by the [Response.Location] method // when no Location header is present. var ErrNoLocation = errors.New("http: no Location header in response") // Location returns the URL of the response's "Location" header, // if present. Relative redirects are resolved relative to -// the Response's Request. ErrNoLocation is returned if no +// [Response.Request]. [ErrNoLocation] is returned if no // Location header is present. func (r *Response) Location() (*url.URL, error) { lv := r.Header.Get("Location") @@ -146,8 +146,8 @@ func (r *Response) Location() (*url.URL, error) { } // ReadResponse reads and returns an HTTP response from r. -// The req parameter optionally specifies the Request that corresponds -// to this Response. If nil, a GET request is assumed. +// The req parameter optionally specifies the [Request] that corresponds +// to this [Response]. If nil, a GET request is assumed. // Clients must call resp.Body.Close when finished reading resp.Body. // After that call, clients can inspect resp.Trailer to find key/value // pairs included in the response trailer. diff --git a/src/net/http/responsecontroller.go b/src/net/http/responsecontroller.go index 92276ffaf2..f3f24c1273 100644 --- a/src/net/http/responsecontroller.go +++ b/src/net/http/responsecontroller.go @@ -13,14 +13,14 @@ import ( // A ResponseController is used by an HTTP handler to control the response. // -// A ResponseController may not be used after the Handler.ServeHTTP method has returned. +// A ResponseController may not be used after the [Handler.ServeHTTP] method has returned. type ResponseController struct { rw ResponseWriter } -// NewResponseController creates a ResponseController for a request. +// NewResponseController creates a [ResponseController] for a request. // -// The ResponseWriter should be the original value passed to the Handler.ServeHTTP method, +// The ResponseWriter should be the original value passed to the [Handler.ServeHTTP] method, // or have an Unwrap method returning the original ResponseWriter. // // If the ResponseWriter implements any of the following methods, the ResponseController @@ -34,7 +34,7 @@ type ResponseController struct { // EnableFullDuplex() error // // If the ResponseWriter does not support a method, ResponseController returns -// an error matching ErrNotSupported. +// an error matching [ErrNotSupported]. func NewResponseController(rw ResponseWriter) *ResponseController { return &ResponseController{rw} } @@ -116,8 +116,8 @@ func (c *ResponseController) SetWriteDeadline(deadline time.Time) error { } } -// EnableFullDuplex indicates that the request handler will interleave reads from Request.Body -// with writes to the ResponseWriter. +// EnableFullDuplex indicates that the request handler will interleave reads from [Request.Body] +// with writes to the [ResponseWriter]. // // For HTTP/1 requests, the Go HTTP server by default consumes any unread portion of // the request body before beginning to write the response, preventing handlers from diff --git a/src/net/http/roundtrip.go b/src/net/http/roundtrip.go index 49ea1a71ed..08c270179a 100644 --- a/src/net/http/roundtrip.go +++ b/src/net/http/roundtrip.go @@ -6,10 +6,10 @@ package http -// RoundTrip implements the RoundTripper interface. +// RoundTrip implements the [RoundTripper] interface. // // For higher-level HTTP client support (such as handling of cookies -// and redirects), see Get, Post, and the Client type. +// and redirects), see [Get], [Post], and the [Client] type. // // Like the RoundTripper interface, the error types returned // by RoundTrip are unspecified. diff --git a/src/net/http/roundtrip_js.go b/src/net/http/roundtrip_js.go index cbf978af18..04c241eb4c 100644 --- a/src/net/http/roundtrip_js.go +++ b/src/net/http/roundtrip_js.go @@ -56,7 +56,7 @@ var jsFetchMissing = js.Global().Get("fetch").IsUndefined() var jsFetchDisabled = js.Global().Get("process").Type() == js.TypeObject && strings.HasPrefix(js.Global().Get("process").Get("argv0").String(), "node") -// RoundTrip implements the RoundTripper interface using the WHATWG Fetch API. +// RoundTrip implements the [RoundTripper] interface using the WHATWG Fetch API. func (t *Transport) RoundTrip(req *Request) (*Response, error) { // The Transport has a documented contract that states that if the DialContext or // DialTLSContext functions are set, they will be used to set up the connections. diff --git a/src/net/http/server.go b/src/net/http/server.go index 9245778590..acac78bcd0 100644 --- a/src/net/http/server.go +++ b/src/net/http/server.go @@ -61,7 +61,7 @@ var ( // A Handler responds to an HTTP request. // -// ServeHTTP should write reply headers and data to the [ResponseWriter] +// [Handler.ServeHTTP] should write reply headers and data to the [ResponseWriter] // and then return. Returning signals that the request is finished; it // is not valid to use the [ResponseWriter] or read from the // [Request.Body] after or concurrently with the completion of the @@ -161,8 +161,8 @@ type ResponseWriter interface { // The Flusher interface is implemented by ResponseWriters that allow // an HTTP handler to flush buffered data to the client. // -// The default HTTP/1.x and HTTP/2 ResponseWriter implementations -// support Flusher, but ResponseWriter wrappers may not. Handlers +// The default HTTP/1.x and HTTP/2 [ResponseWriter] implementations +// support [Flusher], but ResponseWriter wrappers may not. Handlers // should always test for this ability at runtime. // // Note that even for ResponseWriters that support Flush, @@ -177,7 +177,7 @@ type Flusher interface { // The Hijacker interface is implemented by ResponseWriters that allow // an HTTP handler to take over the connection. // -// The default ResponseWriter for HTTP/1.x connections supports +// The default [ResponseWriter] for HTTP/1.x connections supports // Hijacker, but HTTP/2 connections intentionally do not. // ResponseWriter wrappers may also not support Hijacker. Handlers // should always test for this ability at runtime. @@ -211,7 +211,7 @@ type Hijacker interface { // if the client has disconnected before the response is ready. // // Deprecated: the CloseNotifier interface predates Go's context package. -// New code should use Request.Context instead. +// New code should use [Request.Context] instead. type CloseNotifier interface { // CloseNotify returns a channel that receives at most a // single value (true) when the client connection has gone @@ -505,7 +505,7 @@ func (c *response) EnableFullDuplex() error { return nil } -// TrailerPrefix is a magic prefix for ResponseWriter.Header map keys +// TrailerPrefix is a magic prefix for [ResponseWriter.Header] map keys // that, if present, signals that the map entry is actually for // the response trailers, and not the response headers. The prefix // is stripped after the ServeHTTP call finishes and the values are @@ -571,8 +571,8 @@ type writerOnly struct { io.Writer } -// ReadFrom is here to optimize copying from an *os.File regular file -// to a *net.TCPConn with sendfile, or from a supported src type such +// ReadFrom is here to optimize copying from an [*os.File] regular file +// to a [*net.TCPConn] with sendfile, or from a supported src type such // as a *net.TCPConn on Linux with splice. func (w *response) ReadFrom(src io.Reader) (n int64, err error) { buf := getCopyBuf() @@ -867,7 +867,7 @@ func putBufioWriter(bw *bufio.Writer) { // DefaultMaxHeaderBytes is the maximum permitted size of the headers // in an HTTP request. -// This can be overridden by setting Server.MaxHeaderBytes. +// This can be overridden by setting [Server.MaxHeaderBytes]. const DefaultMaxHeaderBytes = 1 << 20 // 1 MB func (srv *Server) maxHeaderBytes() int { @@ -940,11 +940,11 @@ func (ecr *expectContinueReader) Close() error { } // TimeFormat is the time format to use when generating times in HTTP -// headers. It is like time.RFC1123 but hard-codes GMT as the time +// headers. It is like [time.RFC1123] but hard-codes GMT as the time // zone. The time being formatted must be in UTC for Format to // generate the correct format. // -// For parsing this time format, see ParseTime. +// For parsing this time format, see [ParseTime]. const TimeFormat = "Mon, 02 Jan 2006 15:04:05 GMT" // appendTime is a non-allocating version of []byte(t.UTC().Format(TimeFormat)) @@ -1590,13 +1590,13 @@ func (w *response) bodyAllowed() bool { // The Writers are wired together like: // // 1. *response (the ResponseWriter) -> -// 2. (*response).w, a *bufio.Writer of bufferBeforeChunkingSize bytes -> +// 2. (*response).w, a [*bufio.Writer] of bufferBeforeChunkingSize bytes -> // 3. chunkWriter.Writer (whose writeHeader finalizes Content-Length/Type) // and which writes the chunk headers, if needed -> // 4. conn.bufw, a *bufio.Writer of default (4kB) bytes, writing to -> // 5. checkConnErrorWriter{c}, which notes any non-nil error on Write // and populates c.werr with it if so, but otherwise writes to -> -// 6. the rwc, the net.Conn. +// 6. the rwc, the [net.Conn]. // // TODO(bradfitz): short-circuit some of the buffering when the // initial header contains both a Content-Type and Content-Length. @@ -2097,8 +2097,8 @@ func (w *response) sendExpectationFailed() { w.finishRequest() } -// Hijack implements the Hijacker.Hijack method. Our response is both a ResponseWriter -// and a Hijacker. +// Hijack implements the [Hijacker.Hijack] method. Our response is both a [ResponseWriter] +// and a [Hijacker]. func (w *response) Hijack() (rwc net.Conn, buf *bufio.ReadWriter, err error) { if w.handlerDone.Load() { panic("net/http: Hijack called after ServeHTTP finished") @@ -2158,7 +2158,7 @@ func requestBodyRemains(rc io.ReadCloser) bool { // The HandlerFunc type is an adapter to allow the use of // ordinary functions as HTTP handlers. If f is a function // with the appropriate signature, HandlerFunc(f) is a -// Handler that calls f. +// [Handler] that calls f. type HandlerFunc func(ResponseWriter, *Request) // ServeHTTP calls f(w, r). @@ -2217,9 +2217,9 @@ func StripPrefix(prefix string, h Handler) Handler { // which may be a path relative to the request path. // // The provided code should be in the 3xx range and is usually -// StatusMovedPermanently, StatusFound or StatusSeeOther. +// [StatusMovedPermanently], [StatusFound] or [StatusSeeOther]. // -// If the Content-Type header has not been set, Redirect sets it +// If the Content-Type header has not been set, [Redirect] sets it // to "text/html; charset=utf-8" and writes a small HTML body. // Setting the Content-Type header to any value, including nil, // disables that behavior. @@ -2307,7 +2307,7 @@ func (rh *redirectHandler) ServeHTTP(w ResponseWriter, r *Request) { // status code. // // The provided code should be in the 3xx range and is usually -// StatusMovedPermanently, StatusFound or StatusSeeOther. +// [StatusMovedPermanently], [StatusFound] or [StatusSeeOther]. func RedirectHandler(url string, code int) Handler { return &redirectHandler{url, code} } @@ -2394,7 +2394,7 @@ func RedirectHandler(url string, code int) Handler { // // # Trailing-slash redirection // -// Consider a ServeMux with a handler for a subtree, registered using a trailing slash or "..." wildcard. +// Consider a [ServeMux] with a handler for a subtree, registered using a trailing slash or "..." wildcard. // If the ServeMux receives a request for the subtree root without a trailing slash, // it redirects the request by adding the trailing slash. // This behavior can be overridden with a separate registration for the path without @@ -2437,12 +2437,12 @@ type ServeMux struct { mux121 serveMux121 // used only when GODEBUG=httpmuxgo121=1 } -// NewServeMux allocates and returns a new ServeMux. +// NewServeMux allocates and returns a new [ServeMux]. func NewServeMux() *ServeMux { return &ServeMux{} } -// DefaultServeMux is the default ServeMux used by Serve. +// DefaultServeMux is the default [ServeMux] used by [Serve]. var DefaultServeMux = &defaultServeMux var defaultServeMux ServeMux @@ -2784,7 +2784,7 @@ func (mux *ServeMux) registerErr(patstr string, handler Handler) error { // // The handler is typically nil, in which case [DefaultServeMux] is used. // -// HTTP/2 support is only enabled if the Listener returns *tls.Conn +// HTTP/2 support is only enabled if the Listener returns [*tls.Conn] // connections and they were configured with "h2" in the TLS // Config.NextProtos. // @@ -2924,13 +2924,13 @@ type Server struct { } // Close immediately closes all active net.Listeners and any -// connections in state StateNew, StateActive, or StateIdle. For a -// graceful shutdown, use Shutdown. +// connections in state [StateNew], [StateActive], or [StateIdle]. For a +// graceful shutdown, use [Server.Shutdown]. // // Close does not attempt to close (and does not even know about) // any hijacked connections, such as WebSockets. // -// Close returns any error returned from closing the Server's +// Close returns any error returned from closing the [Server]'s // underlying Listener(s). func (srv *Server) Close() error { srv.inShutdown.Store(true) @@ -2968,16 +2968,16 @@ const shutdownPollIntervalMax = 500 * time.Millisecond // indefinitely for connections to return to idle and then shut down. // If the provided context expires before the shutdown is complete, // Shutdown returns the context's error, otherwise it returns any -// error returned from closing the Server's underlying Listener(s). +// error returned from closing the [Server]'s underlying Listener(s). // -// When Shutdown is called, Serve, ListenAndServe, and -// ListenAndServeTLS immediately return ErrServerClosed. Make sure the +// When Shutdown is called, [Serve], [ListenAndServe], and +// [ListenAndServeTLS] immediately return [ErrServerClosed]. Make sure the // program doesn't exit and waits instead for Shutdown to return. // // Shutdown does not attempt to close nor wait for hijacked // connections such as WebSockets. The caller of Shutdown should // separately notify such long-lived connections of shutdown and wait -// for them to close, if desired. See RegisterOnShutdown for a way to +// for them to close, if desired. See [Server.RegisterOnShutdown] for a way to // register shutdown notification functions. // // Once Shutdown has been called on a server, it may not be reused; @@ -3020,7 +3020,7 @@ func (srv *Server) Shutdown(ctx context.Context) error { } } -// RegisterOnShutdown registers a function to call on Shutdown. +// RegisterOnShutdown registers a function to call on [Server.Shutdown]. // This can be used to gracefully shutdown connections that have // undergone ALPN protocol upgrade or that have been hijacked. // This function should start protocol-specific graceful shutdown, @@ -3068,7 +3068,7 @@ func (s *Server) closeListenersLocked() error { } // A ConnState represents the state of a client connection to a server. -// It's used by the optional Server.ConnState hook. +// It's used by the optional [Server.ConnState] hook. type ConnState int const ( @@ -3145,7 +3145,7 @@ func (sh serverHandler) ServeHTTP(rw ResponseWriter, req *Request) { // behavior doesn't match that of many proxies, and the mismatch can lead to // security issues. // -// AllowQuerySemicolons should be invoked before Request.ParseForm is called. +// AllowQuerySemicolons should be invoked before [Request.ParseForm] is called. func AllowQuerySemicolons(h Handler) Handler { return HandlerFunc(func(w ResponseWriter, r *Request) { if strings.Contains(r.URL.RawQuery, ";") { @@ -3162,13 +3162,13 @@ func AllowQuerySemicolons(h Handler) Handler { } // ListenAndServe listens on the TCP network address srv.Addr and then -// calls Serve to handle requests on incoming connections. +// calls [Serve] to handle requests on incoming connections. // Accepted connections are configured to enable TCP keep-alives. // // If srv.Addr is blank, ":http" is used. // -// ListenAndServe always returns a non-nil error. After Shutdown or Close, -// the returned error is ErrServerClosed. +// ListenAndServe always returns a non-nil error. After [Server.Shutdown] or [Server.Close], +// the returned error is [ErrServerClosed]. func (srv *Server) ListenAndServe() error { if srv.shuttingDown() { return ErrServerClosed @@ -3208,20 +3208,20 @@ func (srv *Server) shouldConfigureHTTP2ForServe() bool { return strSliceContains(srv.TLSConfig.NextProtos, http2NextProtoTLS) } -// ErrServerClosed is returned by the Server's Serve, ServeTLS, ListenAndServe, -// and ListenAndServeTLS methods after a call to Shutdown or Close. +// ErrServerClosed is returned by the [Server.Serve], [ServeTLS], [ListenAndServe], +// and [ListenAndServeTLS] methods after a call to [Server.Shutdown] or [Server.Close]. var ErrServerClosed = errors.New("http: Server closed") // Serve accepts incoming connections on the Listener l, creating a // new service goroutine for each. The service goroutines read requests and // then call srv.Handler to reply to them. // -// HTTP/2 support is only enabled if the Listener returns *tls.Conn +// HTTP/2 support is only enabled if the Listener returns [*tls.Conn] // connections and they were configured with "h2" in the TLS // Config.NextProtos. // // Serve always returns a non-nil error and closes l. -// After Shutdown or Close, the returned error is ErrServerClosed. +// After [Server.Shutdown] or [Server.Close], the returned error is [ErrServerClosed]. func (srv *Server) Serve(l net.Listener) error { if fn := testHookServerServe; fn != nil { fn(srv, l) // call hook with unwrapped listener @@ -3291,14 +3291,14 @@ func (srv *Server) Serve(l net.Listener) error { // setup and then read requests, calling srv.Handler to reply to them. // // Files containing a certificate and matching private key for the -// server must be provided if neither the Server's +// server must be provided if neither the [Server]'s // TLSConfig.Certificates nor TLSConfig.GetCertificate are populated. // If the certificate is signed by a certificate authority, the // certFile should be the concatenation of the server's certificate, // any intermediates, and the CA's certificate. // -// ServeTLS always returns a non-nil error. After Shutdown or Close, the -// returned error is ErrServerClosed. +// ServeTLS always returns a non-nil error. After [Server.Shutdown] or [Server.Close], the +// returned error is [ErrServerClosed]. func (srv *Server) ServeTLS(l net.Listener, certFile, keyFile string) error { // Setup HTTP/2 before srv.Serve, to initialize srv.TLSConfig // before we clone it and create the TLS Listener. @@ -3427,7 +3427,7 @@ func logf(r *Request, format string, args ...any) { } // ListenAndServe listens on the TCP network address addr and then calls -// Serve with handler to handle requests on incoming connections. +// [Serve] with handler to handle requests on incoming connections. // Accepted connections are configured to enable TCP keep-alives. // // The handler is typically nil, in which case [DefaultServeMux] is used. @@ -3449,11 +3449,11 @@ func ListenAndServeTLS(addr, certFile, keyFile string, handler Handler) error { } // ListenAndServeTLS listens on the TCP network address srv.Addr and -// then calls ServeTLS to handle requests on incoming TLS connections. +// then calls [ServeTLS] to handle requests on incoming TLS connections. // Accepted connections are configured to enable TCP keep-alives. // // Filenames containing a certificate and matching private key for the -// server must be provided if neither the Server's TLSConfig.Certificates +// server must be provided if neither the [Server]'s TLSConfig.Certificates // nor TLSConfig.GetCertificate are populated. If the certificate is // signed by a certificate authority, the certFile should be the // concatenation of the server's certificate, any intermediates, and @@ -3461,8 +3461,8 @@ func ListenAndServeTLS(addr, certFile, keyFile string, handler Handler) error { // // If srv.Addr is blank, ":https" is used. // -// ListenAndServeTLS always returns a non-nil error. After Shutdown or -// Close, the returned error is ErrServerClosed. +// ListenAndServeTLS always returns a non-nil error. After [Server.Shutdown] or +// [Server.Close], the returned error is [ErrServerClosed]. func (srv *Server) ListenAndServeTLS(certFile, keyFile string) error { if srv.shuttingDown() { return ErrServerClosed @@ -3532,17 +3532,17 @@ func (srv *Server) onceSetNextProtoDefaults() { } } -// TimeoutHandler returns a Handler that runs h with the given time limit. +// TimeoutHandler returns a [Handler] that runs h with the given time limit. // // The new Handler calls h.ServeHTTP to handle each request, but if a // call runs for longer than its time limit, the handler responds with // a 503 Service Unavailable error and the given message in its body. // (If msg is empty, a suitable default message will be sent.) -// After such a timeout, writes by h to its ResponseWriter will return -// ErrHandlerTimeout. +// After such a timeout, writes by h to its [ResponseWriter] will return +// [ErrHandlerTimeout]. // -// TimeoutHandler supports the Pusher interface but does not support -// the Hijacker or Flusher interfaces. +// TimeoutHandler supports the [Pusher] interface but does not support +// the [Hijacker] or [Flusher] interfaces. func TimeoutHandler(h Handler, dt time.Duration, msg string) Handler { return &timeoutHandler{ handler: h, @@ -3551,7 +3551,7 @@ func TimeoutHandler(h Handler, dt time.Duration, msg string) Handler { } } -// ErrHandlerTimeout is returned on ResponseWriter Write calls +// ErrHandlerTimeout is returned on [ResponseWriter] Write calls // in handlers which have timed out. var ErrHandlerTimeout = errors.New("http: Handler timeout") @@ -3640,7 +3640,7 @@ type timeoutWriter struct { var _ Pusher = (*timeoutWriter)(nil) -// Push implements the Pusher interface. +// Push implements the [Pusher] interface. func (tw *timeoutWriter) Push(target string, opts *PushOptions) error { if pusher, ok := tw.w.(Pusher); ok { return pusher.Push(target, opts) @@ -3725,7 +3725,7 @@ type initALPNRequest struct { h serverHandler } -// BaseContext is an exported but unadvertised http.Handler method +// BaseContext is an exported but unadvertised [http.Handler] method // recognized by x/net/http2 to pass down a context; the TLSNextProto // API predates context support so we shoehorn through the only // interface we have available. @@ -3833,7 +3833,7 @@ func tlsRecordHeaderLooksLikeHTTP(hdr [5]byte) bool { return false } -// MaxBytesHandler returns a Handler that runs h with its ResponseWriter and Request.Body wrapped by a MaxBytesReader. +// MaxBytesHandler returns a [Handler] that runs h with its [ResponseWriter] and [Request.Body] wrapped by a MaxBytesReader. func MaxBytesHandler(h Handler, n int64) Handler { return HandlerFunc(func(w ResponseWriter, r *Request) { r2 := *r diff --git a/src/net/http/transfer.go b/src/net/http/transfer.go index d787258487..315c6e2723 100644 --- a/src/net/http/transfer.go +++ b/src/net/http/transfer.go @@ -817,10 +817,10 @@ type body struct { onHitEOF func() // if non-nil, func to call when EOF is Read } -// ErrBodyReadAfterClose is returned when reading a Request or Response +// ErrBodyReadAfterClose is returned when reading a [Request] or [Response] // Body after the body has been closed. This typically happens when the body is -// read after an HTTP Handler calls WriteHeader or Write on its -// ResponseWriter. +// read after an HTTP [Handler] calls WriteHeader or Write on its +// [ResponseWriter]. var ErrBodyReadAfterClose = errors.New("http: invalid Read on closed Body") func (b *body) Read(p []byte) (n int, err error) { diff --git a/src/net/http/transport.go b/src/net/http/transport.go index 170ba86cc4..57c70e72f9 100644 --- a/src/net/http/transport.go +++ b/src/net/http/transport.go @@ -35,8 +35,8 @@ import ( "golang.org/x/net/http/httpproxy" ) -// DefaultTransport is the default implementation of Transport and is -// used by DefaultClient. It establishes network connections as needed +// DefaultTransport is the default implementation of [Transport] and is +// used by [DefaultClient]. It establishes network connections as needed // and caches them for reuse by subsequent calls. It uses HTTP proxies // as directed by the environment variables HTTP_PROXY, HTTPS_PROXY // and NO_PROXY (or the lowercase versions thereof). @@ -53,42 +53,42 @@ var DefaultTransport RoundTripper = &Transport{ ExpectContinueTimeout: 1 * time.Second, } -// DefaultMaxIdleConnsPerHost is the default value of Transport's +// DefaultMaxIdleConnsPerHost is the default value of [Transport]'s // MaxIdleConnsPerHost. const DefaultMaxIdleConnsPerHost = 2 -// Transport is an implementation of RoundTripper that supports HTTP, +// Transport is an implementation of [RoundTripper] that supports HTTP, // HTTPS, and HTTP proxies (for either HTTP or HTTPS with CONNECT). // // By default, Transport caches connections for future re-use. // This may leave many open connections when accessing many hosts. -// This behavior can be managed using Transport's CloseIdleConnections method -// and the MaxIdleConnsPerHost and DisableKeepAlives fields. +// This behavior can be managed using [Transport.CloseIdleConnections] method +// and the [Transport.MaxIdleConnsPerHost] and [Transport.DisableKeepAlives] fields. // // Transports should be reused instead of created as needed. // Transports are safe for concurrent use by multiple goroutines. // // A Transport is a low-level primitive for making HTTP and HTTPS requests. -// For high-level functionality, such as cookies and redirects, see Client. +// For high-level functionality, such as cookies and redirects, see [Client]. // // Transport uses HTTP/1.1 for HTTP URLs and either HTTP/1.1 or HTTP/2 // for HTTPS URLs, depending on whether the server supports HTTP/2, -// and how the Transport is configured. The DefaultTransport supports HTTP/2. +// and how the Transport is configured. The [DefaultTransport] supports HTTP/2. // To explicitly enable HTTP/2 on a transport, use golang.org/x/net/http2 // and call ConfigureTransport. See the package docs for more about HTTP/2. // // Responses with status codes in the 1xx range are either handled // automatically (100 expect-continue) or ignored. The one // exception is HTTP status code 101 (Switching Protocols), which is -// considered a terminal status and returned by RoundTrip. To see the +// considered a terminal status and returned by [Transport.RoundTrip]. To see the // ignored 1xx responses, use the httptrace trace package's // ClientTrace.Got1xxResponse. // // Transport only retries a request upon encountering a network error // if the connection has been already been used successfully and if the -// request is idempotent and either has no body or has its Request.GetBody +// request is idempotent and either has no body or has its [Request.GetBody] // defined. HTTP requests are considered idempotent if they have HTTP methods -// GET, HEAD, OPTIONS, or TRACE; or if their Header map contains an +// GET, HEAD, OPTIONS, or TRACE; or if their [Header] map contains an // "Idempotency-Key" or "X-Idempotency-Key" entry. If the idempotency key // value is a zero-length slice, the request is treated as idempotent but the // header is not sent on the wire. @@ -453,7 +453,7 @@ func ProxyFromEnvironment(req *Request) (*url.URL, error) { return envProxyFunc()(req.URL) } -// ProxyURL returns a proxy function (for use in a Transport) +// ProxyURL returns a proxy function (for use in a [Transport]) // that always returns the same URL. func ProxyURL(fixedURL *url.URL) func(*Request) (*url.URL, error) { return func(*Request) (*url.URL, error) { @@ -752,14 +752,14 @@ func (pc *persistConn) shouldRetryRequest(req *Request, err error) bool { var ErrSkipAltProtocol = errors.New("net/http: skip alternate protocol") // RegisterProtocol registers a new protocol with scheme. -// The Transport will pass requests using the given scheme to rt. +// The [Transport] will pass requests using the given scheme to rt. // It is rt's responsibility to simulate HTTP request semantics. // // RegisterProtocol can be used by other packages to provide // implementations of protocol schemes like "ftp" or "file". // -// If rt.RoundTrip returns ErrSkipAltProtocol, the Transport will -// handle the RoundTrip itself for that one request, as if the +// If rt.RoundTrip returns [ErrSkipAltProtocol], the Transport will +// handle the [Transport.RoundTrip] itself for that one request, as if the // protocol were not registered. func (t *Transport) RegisterProtocol(scheme string, rt RoundTripper) { t.altMu.Lock() @@ -799,9 +799,9 @@ func (t *Transport) CloseIdleConnections() { } // CancelRequest cancels an in-flight request by closing its connection. -// CancelRequest should only be called after RoundTrip has returned. +// CancelRequest should only be called after [Transport.RoundTrip] has returned. // -// Deprecated: Use Request.WithContext to create a request with a +// Deprecated: Use [Request.WithContext] to create a request with a // cancelable context instead. CancelRequest cannot cancel HTTP/2 // requests. func (t *Transport) CancelRequest(req *Request) { diff --git a/src/net/http/triv.go b/src/net/http/triv.go index f614922c24..c1696425cd 100644 --- a/src/net/http/triv.go +++ b/src/net/http/triv.go @@ -34,7 +34,7 @@ type Counter struct { n int } -// This makes Counter satisfy the expvar.Var interface, so we can export +// This makes Counter satisfy the [expvar.Var] interface, so we can export // it directly. func (ctr *Counter) String() string { ctr.mu.Lock() diff --git a/src/net/interface.go b/src/net/interface.go index e1c9a2e2ff..20ac07d31a 100644 --- a/src/net/interface.go +++ b/src/net/interface.go @@ -114,7 +114,7 @@ func Interfaces() ([]Interface, error) { // addresses. // // The returned list does not identify the associated interface; use -// Interfaces and Interface.Addrs for more detail. +// Interfaces and [Interface.Addrs] for more detail. func InterfaceAddrs() ([]Addr, error) { ifat, err := interfaceAddrTable(nil) if err != nil { @@ -127,7 +127,7 @@ func InterfaceAddrs() ([]Addr, error) { // // On Solaris, it returns one of the logical network interfaces // sharing the logical data link; for more precision use -// InterfaceByName. +// [InterfaceByName]. func InterfaceByIndex(index int) (*Interface, error) { if index <= 0 { return nil, &OpError{Op: "route", Net: "ip+net", Source: nil, Addr: nil, Err: errInvalidInterfaceIndex} diff --git a/src/net/internal/socktest/switch.go b/src/net/internal/socktest/switch.go index 3c37b6ff80..dea6d9288c 100644 --- a/src/net/internal/socktest/switch.go +++ b/src/net/internal/socktest/switch.go @@ -133,7 +133,7 @@ const ( // If the filter returns a non-nil error, the execution of system call // will be canceled and the system call function returns the non-nil // error. -// It can return a non-nil AfterFilter for filtering after the +// It can return a non-nil [AfterFilter] for filtering after the // execution of the system call. type Filter func(*Status) (AfterFilter, error) diff --git a/src/net/internal/socktest/sys_unix.go b/src/net/internal/socktest/sys_unix.go index 712462abf4..3eef26c70b 100644 --- a/src/net/internal/socktest/sys_unix.go +++ b/src/net/internal/socktest/sys_unix.go @@ -8,7 +8,7 @@ package socktest import "syscall" -// Socket wraps syscall.Socket. +// Socket wraps [syscall.Socket]. func (sw *Switch) Socket(family, sotype, proto int) (s int, err error) { sw.once.Do(sw.init) diff --git a/src/net/internal/socktest/sys_windows.go b/src/net/internal/socktest/sys_windows.go index 1c42e5c7f3..2f02446075 100644 --- a/src/net/internal/socktest/sys_windows.go +++ b/src/net/internal/socktest/sys_windows.go @@ -9,7 +9,7 @@ import ( "syscall" ) -// WSASocket wraps syscall.WSASocket. +// WSASocket wraps [syscall.WSASocket]. func (sw *Switch) WSASocket(family, sotype, proto int32, protinfo *syscall.WSAProtocolInfo, group uint32, flags uint32) (s syscall.Handle, err error) { sw.once.Do(sw.init) @@ -41,7 +41,7 @@ func (sw *Switch) WSASocket(family, sotype, proto int32, protinfo *syscall.WSAPr return s, nil } -// Closesocket wraps syscall.Closesocket. +// Closesocket wraps [syscall.Closesocket]. func (sw *Switch) Closesocket(s syscall.Handle) (err error) { so := sw.sockso(s) if so == nil { @@ -71,7 +71,7 @@ func (sw *Switch) Closesocket(s syscall.Handle) (err error) { return nil } -// Connect wraps syscall.Connect. +// Connect wraps [syscall.Connect]. func (sw *Switch) Connect(s syscall.Handle, sa syscall.Sockaddr) (err error) { so := sw.sockso(s) if so == nil { @@ -100,7 +100,7 @@ func (sw *Switch) Connect(s syscall.Handle, sa syscall.Sockaddr) (err error) { return nil } -// ConnectEx wraps syscall.ConnectEx. +// ConnectEx wraps [syscall.ConnectEx]. func (sw *Switch) ConnectEx(s syscall.Handle, sa syscall.Sockaddr, b *byte, n uint32, nwr *uint32, o *syscall.Overlapped) (err error) { so := sw.sockso(s) if so == nil { @@ -129,7 +129,7 @@ func (sw *Switch) ConnectEx(s syscall.Handle, sa syscall.Sockaddr, b *byte, n ui return nil } -// Listen wraps syscall.Listen. +// Listen wraps [syscall.Listen]. func (sw *Switch) Listen(s syscall.Handle, backlog int) (err error) { so := sw.sockso(s) if so == nil { @@ -158,7 +158,7 @@ func (sw *Switch) Listen(s syscall.Handle, backlog int) (err error) { return nil } -// AcceptEx wraps syscall.AcceptEx. +// AcceptEx wraps [syscall.AcceptEx]. func (sw *Switch) AcceptEx(ls syscall.Handle, as syscall.Handle, b *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, rcvd *uint32, overlapped *syscall.Overlapped) error { so := sw.sockso(ls) if so == nil { diff --git a/src/net/ip.go b/src/net/ip.go index d51ba10eec..6083dd8bf9 100644 --- a/src/net/ip.go +++ b/src/net/ip.go @@ -38,7 +38,7 @@ type IP []byte // An IPMask is a bitmask that can be used to manipulate // IP addresses for IP addressing and routing. // -// See type IPNet and func ParseCIDR for details. +// See type [IPNet] and func [ParseCIDR] for details. type IPMask []byte // An IPNet represents an IP network. @@ -72,9 +72,9 @@ func IPv4Mask(a, b, c, d byte) IPMask { return p } -// CIDRMask returns an IPMask consisting of 'ones' 1 bits +// CIDRMask returns an [IPMask] consisting of 'ones' 1 bits // followed by 0s up to a total length of 'bits' bits. -// For a mask of this form, CIDRMask is the inverse of IPMask.Size. +// For a mask of this form, CIDRMask is the inverse of [IPMask.Size]. func CIDRMask(ones, bits int) IPMask { if bits != 8*IPv4len && bits != 8*IPv6len { return nil @@ -324,8 +324,8 @@ func ipEmptyString(ip IP) string { return ip.String() } -// MarshalText implements the encoding.TextMarshaler interface. -// The encoding is the same as returned by String, with one exception: +// MarshalText implements the [encoding.TextMarshaler] interface. +// The encoding is the same as returned by [IP.String], with one exception: // When len(ip) is zero, it returns an empty slice. func (ip IP) MarshalText() ([]byte, error) { if len(ip) == 0 { @@ -337,8 +337,8 @@ func (ip IP) MarshalText() ([]byte, error) { return []byte(ip.String()), nil } -// UnmarshalText implements the encoding.TextUnmarshaler interface. -// The IP address is expected in a form accepted by ParseIP. +// UnmarshalText implements the [encoding.TextUnmarshaler] interface. +// The IP address is expected in a form accepted by [ParseIP]. func (ip *IP) UnmarshalText(text []byte) error { if len(text) == 0 { *ip = nil diff --git a/src/net/iprawsock.go b/src/net/iprawsock.go index c3fd6deac5..4c06b1b5ac 100644 --- a/src/net/iprawsock.go +++ b/src/net/iprawsock.go @@ -72,7 +72,7 @@ func (a *IPAddr) opAddr() Addr { // recommended, because it will return at most one of the host name's // IP addresses. // -// See func Dial for a description of the network and address +// See func [Dial] for a description of the network and address // parameters. func ResolveIPAddr(network, address string) (*IPAddr, error) { if network == "" { // a hint wildcard for Go 1.0 undocumented behavior @@ -94,14 +94,14 @@ func ResolveIPAddr(network, address string) (*IPAddr, error) { return addrs.forResolve(network, address).(*IPAddr), nil } -// IPConn is the implementation of the Conn and PacketConn interfaces +// IPConn is the implementation of the [Conn] and [PacketConn] interfaces // for IP network connections. type IPConn struct { conn } // SyscallConn returns a raw network connection. -// This implements the syscall.Conn interface. +// This implements the [syscall.Conn] interface. func (c *IPConn) SyscallConn() (syscall.RawConn, error) { if !c.ok() { return nil, syscall.EINVAL @@ -121,7 +121,7 @@ func (c *IPConn) ReadFromIP(b []byte) (int, *IPAddr, error) { return n, addr, err } -// ReadFrom implements the PacketConn ReadFrom method. +// ReadFrom implements the [PacketConn] ReadFrom method. func (c *IPConn) ReadFrom(b []byte) (int, Addr, error) { if !c.ok() { return 0, nil, syscall.EINVAL @@ -154,7 +154,7 @@ func (c *IPConn) ReadMsgIP(b, oob []byte) (n, oobn, flags int, addr *IPAddr, err return } -// WriteToIP acts like WriteTo but takes an IPAddr. +// WriteToIP acts like [IPConn.WriteTo] but takes an [IPAddr]. func (c *IPConn) WriteToIP(b []byte, addr *IPAddr) (int, error) { if !c.ok() { return 0, syscall.EINVAL @@ -166,7 +166,7 @@ func (c *IPConn) WriteToIP(b []byte, addr *IPAddr) (int, error) { return n, err } -// WriteTo implements the PacketConn WriteTo method. +// WriteTo implements the [PacketConn] WriteTo method. func (c *IPConn) WriteTo(b []byte, addr Addr) (int, error) { if !c.ok() { return 0, syscall.EINVAL @@ -201,7 +201,7 @@ func (c *IPConn) WriteMsgIP(b, oob []byte, addr *IPAddr) (n, oobn int, err error func newIPConn(fd *netFD) *IPConn { return &IPConn{conn{fd}} } -// DialIP acts like Dial for IP networks. +// DialIP acts like [Dial] for IP networks. // // The network must be an IP network name; see func Dial for details. // @@ -220,7 +220,7 @@ func DialIP(network string, laddr, raddr *IPAddr) (*IPConn, error) { return c, nil } -// ListenIP acts like ListenPacket for IP networks. +// ListenIP acts like [ListenPacket] for IP networks. // // The network must be an IP network name; see func Dial for details. // diff --git a/src/net/lookup.go b/src/net/lookup.go index 15165970b6..3ec2660786 100644 --- a/src/net/lookup.go +++ b/src/net/lookup.go @@ -181,8 +181,8 @@ func (r *Resolver) getLookupGroup() *singleflight.Group { // LookupHost looks up the given host using the local resolver. // It returns a slice of that host's addresses. // -// LookupHost uses context.Background internally; to specify the context, use -// Resolver.LookupHost. +// LookupHost uses [context.Background] internally; to specify the context, use +// [Resolver.LookupHost]. func LookupHost(host string) (addrs []string, err error) { return DefaultResolver.LookupHost(context.Background(), host) } @@ -417,8 +417,8 @@ func ipAddrsEface(addrs []IPAddr) []any { // LookupPort looks up the port for the given network and service. // -// LookupPort uses context.Background internally; to specify the context, use -// Resolver.LookupPort. +// LookupPort uses [context.Background] internally; to specify the context, use +// [Resolver.LookupPort]. func LookupPort(network, service string) (port int, err error) { return DefaultResolver.LookupPort(context.Background(), network, service) } @@ -449,7 +449,7 @@ func (r *Resolver) LookupPort(ctx context.Context, network, service string) (por // LookupCNAME returns the canonical name for the given host. // Callers that do not care about the canonical name can call -// LookupHost or LookupIP directly; both take care of resolving +// [LookupHost] or [LookupIP] directly; both take care of resolving // the canonical name as part of the lookup. // // A canonical name is the final name after following zero @@ -461,15 +461,15 @@ func (r *Resolver) LookupPort(ctx context.Context, network, service string) (por // The returned canonical name is validated to be a properly // formatted presentation-format domain name. // -// LookupCNAME uses context.Background internally; to specify the context, use -// Resolver.LookupCNAME. +// LookupCNAME uses [context.Background] internally; to specify the context, use +// [Resolver.LookupCNAME]. func LookupCNAME(host string) (cname string, err error) { return DefaultResolver.LookupCNAME(context.Background(), host) } // LookupCNAME returns the canonical name for the given host. // Callers that do not care about the canonical name can call -// LookupHost or LookupIP directly; both take care of resolving +// [LookupHost] or [LookupIP] directly; both take care of resolving // the canonical name as part of the lookup. // // A canonical name is the final name after following zero @@ -491,7 +491,7 @@ func (r *Resolver) LookupCNAME(ctx context.Context, host string) (string, error) return cname, nil } -// LookupSRV tries to resolve an SRV query of the given service, +// LookupSRV tries to resolve an [SRV] query of the given service, // protocol, and domain name. The proto is "tcp" or "udp". // The returned records are sorted by priority and randomized // by weight within a priority. @@ -509,7 +509,7 @@ func LookupSRV(service, proto, name string) (cname string, addrs []*SRV, err err return DefaultResolver.LookupSRV(context.Background(), service, proto, name) } -// LookupSRV tries to resolve an SRV query of the given service, +// LookupSRV tries to resolve an [SRV] query of the given service, // protocol, and domain name. The proto is "tcp" or "udp". // The returned records are sorted by priority and randomized // by weight within a priority. @@ -554,8 +554,8 @@ func (r *Resolver) LookupSRV(ctx context.Context, service, proto, name string) ( // invalid names, those records are filtered out and an error // will be returned alongside the remaining results, if any. // -// LookupMX uses context.Background internally; to specify the context, use -// Resolver.LookupMX. +// LookupMX uses [context.Background] internally; to specify the context, use +// [Resolver.LookupMX]. func LookupMX(name string) ([]*MX, error) { return DefaultResolver.LookupMX(context.Background(), name) } @@ -594,8 +594,8 @@ func (r *Resolver) LookupMX(ctx context.Context, name string) ([]*MX, error) { // invalid names, those records are filtered out and an error // will be returned alongside the remaining results, if any. // -// LookupNS uses context.Background internally; to specify the context, use -// Resolver.LookupNS. +// LookupNS uses [context.Background] internally; to specify the context, use +// [Resolver.LookupNS]. func LookupNS(name string) ([]*NS, error) { return DefaultResolver.LookupNS(context.Background(), name) } @@ -629,8 +629,8 @@ func (r *Resolver) LookupNS(ctx context.Context, name string) ([]*NS, error) { // LookupTXT returns the DNS TXT records for the given domain name. // -// LookupTXT uses context.Background internally; to specify the context, use -// Resolver.LookupTXT. +// LookupTXT uses [context.Background] internally; to specify the context, use +// [Resolver.LookupTXT]. func LookupTXT(name string) ([]string, error) { return DefaultResolver.lookupTXT(context.Background(), name) } @@ -648,10 +648,10 @@ func (r *Resolver) LookupTXT(ctx context.Context, name string) ([]string, error) // out and an error will be returned alongside the remaining results, if any. // // When using the host C library resolver, at most one result will be -// returned. To bypass the host resolver, use a custom Resolver. +// returned. To bypass the host resolver, use a custom [Resolver]. // -// LookupAddr uses context.Background internally; to specify the context, use -// Resolver.LookupAddr. +// LookupAddr uses [context.Background] internally; to specify the context, use +// [Resolver.LookupAddr]. func LookupAddr(addr string) (names []string, err error) { return DefaultResolver.LookupAddr(context.Background(), addr) } diff --git a/src/net/net.go b/src/net/net.go index 02c2ceda32..c434c96bf8 100644 --- a/src/net/net.go +++ b/src/net/net.go @@ -8,8 +8,8 @@ TCP/IP, UDP, domain name resolution, and Unix domain sockets. Although the package provides access to low-level networking primitives, most clients will need only the basic interface provided -by the Dial, Listen, and Accept functions and the associated -Conn and Listener interfaces. The crypto/tls package uses +by the [Dial], [Listen], and Accept functions and the associated +[Conn] and [Listener] interfaces. The crypto/tls package uses the same interfaces and similar Dial and Listen functions. The Dial function connects to a server: @@ -39,7 +39,7 @@ The Listen function creates servers: # Name Resolution The method for resolving domain names, whether indirectly with functions like Dial -or directly with functions like LookupHost and LookupAddr, varies by operating system. +or directly with functions like [LookupHost] and [LookupAddr], varies by operating system. On Unix systems, the resolver has two options for resolving names. It can use a pure Go resolver that sends DNS requests directly to the servers @@ -95,8 +95,8 @@ import ( // Addr represents a network end point address. // -// The two methods Network and String conventionally return strings -// that can be passed as the arguments to Dial, but the exact form +// The two methods [Addr.Network] and [Addr.String] conventionally return strings +// that can be passed as the arguments to [Dial], but the exact form // and meaning of the strings is up to the implementation. type Addr interface { Network() string // name of the network (for example, "tcp", "udp") @@ -284,7 +284,7 @@ func (c *conn) SetWriteBuffer(bytes int) error { return nil } -// File returns a copy of the underlying os.File. +// File returns a copy of the underlying [os.File]. // It is the caller's responsibility to close f when finished. // Closing c does not affect f, and closing f does not affect c. // @@ -645,12 +645,12 @@ func (e *DNSError) Error() string { // Timeout reports whether the DNS lookup is known to have timed out. // This is not always known; a DNS lookup may fail due to a timeout -// and return a DNSError for which Timeout returns false. +// and return a [DNSError] for which Timeout returns false. func (e *DNSError) Timeout() bool { return e.IsTimeout } // Temporary reports whether the DNS error is known to be temporary. // This is not always known; a DNS lookup may fail due to a temporary -// error and return a DNSError for which Temporary returns false. +// error and return a [DNSError] for which Temporary returns false. func (e *DNSError) Temporary() bool { return e.IsTimeout || e.IsTemporary } // errClosed exists just so that the docs for ErrClosed don't mention @@ -756,7 +756,7 @@ var ( // WriteTo writes contents of the buffers to w. // -// WriteTo implements io.WriterTo for Buffers. +// WriteTo implements [io.WriterTo] for [Buffers]. // // WriteTo modifies the slice v as well as v[i] for 0 <= i < len(v), // but does not modify v[i][j] for any i, j. @@ -778,7 +778,7 @@ func (v *Buffers) WriteTo(w io.Writer) (n int64, err error) { // Read from the buffers. // -// Read implements io.Reader for Buffers. +// Read implements [io.Reader] for [Buffers]. // // Read modifies the slice v as well as v[i] for 0 <= i < len(v), // but does not modify v[i][j] for any i, j. diff --git a/src/net/netip/netip.go b/src/net/netip/netip.go index 9acc48a6e0..7a189e8e16 100644 --- a/src/net/netip/netip.go +++ b/src/net/netip/netip.go @@ -128,7 +128,7 @@ func ParseAddr(s string) (Addr, error) { return Addr{}, parseAddrError{in: s, msg: "unable to parse IP"} } -// MustParseAddr calls ParseAddr(s) and panics on error. +// MustParseAddr calls [ParseAddr](s) and panics on error. // It is intended for use in tests with hard-coded strings. func MustParseAddr(s string) Addr { ip, err := ParseAddr(s) @@ -335,8 +335,8 @@ func parseIPv6(in string) (Addr, error) { } // AddrFromSlice parses the 4- or 16-byte byte slice as an IPv4 or IPv6 address. -// Note that a net.IP can be passed directly as the []byte argument. -// If slice's length is not 4 or 16, AddrFromSlice returns Addr{}, false. +// Note that a [net.IP] can be passed directly as the []byte argument. +// If slice's length is not 4 or 16, AddrFromSlice returns [Addr]{}, false. func AddrFromSlice(slice []byte) (ip Addr, ok bool) { switch len(slice) { case 4: @@ -376,13 +376,13 @@ func (ip Addr) isZero() bool { return ip.z == z0 } -// IsValid reports whether the Addr is an initialized address (not the zero Addr). +// IsValid reports whether the [Addr] is an initialized address (not the zero Addr). // // Note that "0.0.0.0" and "::" are both valid values. func (ip Addr) IsValid() bool { return ip.z != z0 } // BitLen returns the number of bits in the IP address: -// 128 for IPv6, 32 for IPv4, and 0 for the zero Addr. +// 128 for IPv6, 32 for IPv4, and 0 for the zero [Addr]. // // Note that IPv4-mapped IPv6 addresses are considered IPv6 addresses // and therefore have bit length 128. @@ -407,7 +407,7 @@ func (ip Addr) Zone() string { // Compare returns an integer comparing two IPs. // The result will be 0 if ip == ip2, -1 if ip < ip2, and +1 if ip > ip2. -// The definition of "less than" is the same as the Less method. +// The definition of "less than" is the same as the [Addr.Less] method. func (ip Addr) Compare(ip2 Addr) int { f1, f2 := ip.BitLen(), ip2.BitLen() if f1 < f2 { @@ -449,7 +449,7 @@ func (ip Addr) Less(ip2 Addr) bool { return ip.Compare(ip2) == -1 } // Is4 reports whether ip is an IPv4 address. // -// It returns false for IPv4-mapped IPv6 addresses. See Addr.Unmap. +// It returns false for IPv4-mapped IPv6 addresses. See [Addr.Unmap]. func (ip Addr) Is4() bool { return ip.z == z4 } @@ -583,7 +583,7 @@ func (ip Addr) IsLinkLocalMulticast() bool { // IANA-allocated 2000::/3 global unicast space, with the exception of the // link-local address space. It also returns true even if ip is in the IPv4 // private address space or IPv6 unique local address space. -// It returns false for the zero Addr. +// It returns false for the zero [Addr]. // // For reference, see RFC 1122, RFC 4291, and RFC 4632. func (ip Addr) IsGlobalUnicast() bool { @@ -607,7 +607,7 @@ func (ip Addr) IsGlobalUnicast() bool { // IsPrivate reports whether ip is a private address, according to RFC 1918 // (IPv4 addresses) and RFC 4193 (IPv6 addresses). That is, it reports whether // ip is in 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, or fc00::/7. This is the -// same as net.IP.IsPrivate. +// same as [net.IP.IsPrivate]. func (ip Addr) IsPrivate() bool { // Match the stdlib's IsPrivate logic. if ip.Is4() { @@ -630,14 +630,14 @@ func (ip Addr) IsPrivate() bool { // IsUnspecified reports whether ip is an unspecified address, either the IPv4 // address "0.0.0.0" or the IPv6 address "::". // -// Note that the zero Addr is not an unspecified address. +// Note that the zero [Addr] is not an unspecified address. func (ip Addr) IsUnspecified() bool { return ip == IPv4Unspecified() || ip == IPv6Unspecified() } // Prefix keeps only the top b bits of IP, producing a Prefix // of the specified length. -// If ip is a zero Addr, Prefix always returns a zero Prefix and a nil error. +// If ip is a zero [Addr], Prefix always returns a zero Prefix and a nil error. // Otherwise, if bits is less than zero or greater than ip.BitLen(), // Prefix returns an error. func (ip Addr) Prefix(b int) (Prefix, error) { @@ -665,7 +665,7 @@ func (ip Addr) Prefix(b int) (Prefix, error) { // As16 returns the IP address in its 16-byte representation. // IPv4 addresses are returned as IPv4-mapped IPv6 addresses. // IPv6 addresses with zones are returned without their zone (use the -// Zone method to get it). +// [Addr.Zone] method to get it). // The ip zero value returns all zeroes. func (ip Addr) As16() (a16 [16]byte) { bePutUint64(a16[:8], ip.addr.hi) @@ -674,7 +674,7 @@ func (ip Addr) As16() (a16 [16]byte) { } // As4 returns an IPv4 or IPv4-in-IPv6 address in its 4-byte representation. -// If ip is the zero Addr or an IPv6 address, As4 panics. +// If ip is the zero [Addr] or an IPv6 address, As4 panics. // Note that 0.0.0.0 is not the zero Addr. func (ip Addr) As4() (a4 [4]byte) { if ip.z == z4 || ip.Is4In6() { @@ -705,7 +705,7 @@ func (ip Addr) AsSlice() []byte { } // Next returns the address following ip. -// If there is none, it returns the zero Addr. +// If there is none, it returns the zero [Addr]. func (ip Addr) Next() Addr { ip.addr = ip.addr.addOne() if ip.Is4() { @@ -739,10 +739,10 @@ func (ip Addr) Prev() Addr { // String returns the string form of the IP address ip. // It returns one of 5 forms: // -// - "invalid IP", if ip is the zero Addr +// - "invalid IP", if ip is the zero [Addr] // - IPv4 dotted decimal ("192.0.2.1") // - IPv6 ("2001:db8::1") -// - "::ffff:1.2.3.4" (if Is4In6) +// - "::ffff:1.2.3.4" (if [Addr.Is4In6]) // - IPv6 with zone ("fe80:db8::1%eth0") // // Note that unlike package net's IP.String method, @@ -767,7 +767,7 @@ func (ip Addr) String() string { } // AppendTo appends a text encoding of ip, -// as generated by MarshalText, +// as generated by [Addr.MarshalText], // to b and returns the extended buffer. func (ip Addr) AppendTo(b []byte) []byte { switch ip.z { @@ -899,7 +899,7 @@ func (ip Addr) appendTo6(ret []byte) []byte { return ret } -// StringExpanded is like String but IPv6 addresses are expanded with leading +// StringExpanded is like [Addr.String] but IPv6 addresses are expanded with leading // zeroes and no "::" compression. For example, "2001:db8::1" becomes // "2001:0db8:0000:0000:0000:0000:0000:0001". func (ip Addr) StringExpanded() string { @@ -927,9 +927,9 @@ func (ip Addr) StringExpanded() string { return string(ret) } -// MarshalText implements the encoding.TextMarshaler interface, -// The encoding is the same as returned by String, with one exception: -// If ip is the zero Addr, the encoding is the empty string. +// MarshalText implements the [encoding.TextMarshaler] interface, +// The encoding is the same as returned by [Addr.String], with one exception: +// If ip is the zero [Addr], the encoding is the empty string. func (ip Addr) MarshalText() ([]byte, error) { switch ip.z { case z0: @@ -956,9 +956,9 @@ func (ip Addr) MarshalText() ([]byte, error) { } // UnmarshalText implements the encoding.TextUnmarshaler interface. -// The IP address is expected in a form accepted by ParseAddr. +// The IP address is expected in a form accepted by [ParseAddr]. // -// If text is empty, UnmarshalText sets *ip to the zero Addr and +// If text is empty, UnmarshalText sets *ip to the zero [Addr] and // returns no error. func (ip *Addr) UnmarshalText(text []byte) error { if len(text) == 0 { @@ -988,15 +988,15 @@ func (ip Addr) marshalBinaryWithTrailingBytes(trailingBytes int) []byte { return b } -// MarshalBinary implements the encoding.BinaryMarshaler interface. -// It returns a zero-length slice for the zero Addr, +// MarshalBinary implements the [encoding.BinaryMarshaler] interface. +// It returns a zero-length slice for the zero [Addr], // the 4-byte form for an IPv4 address, // and the 16-byte form with zone appended for an IPv6 address. func (ip Addr) MarshalBinary() ([]byte, error) { return ip.marshalBinaryWithTrailingBytes(0), nil } -// UnmarshalBinary implements the encoding.BinaryUnmarshaler interface. +// UnmarshalBinary implements the [encoding.BinaryUnmarshaler] interface. // It expects data in the form generated by MarshalBinary. func (ip *Addr) UnmarshalBinary(b []byte) error { n := len(b) @@ -1023,7 +1023,7 @@ type AddrPort struct { port uint16 } -// AddrPortFrom returns an AddrPort with the provided IP and port. +// AddrPortFrom returns an [AddrPort] with the provided IP and port. // It does not allocate. func AddrPortFrom(ip Addr, port uint16) AddrPort { return AddrPort{ip: ip, port: port} } @@ -1062,7 +1062,7 @@ func splitAddrPort(s string) (ip, port string, v6 bool, err error) { return ip, port, v6, nil } -// ParseAddrPort parses s as an AddrPort. +// ParseAddrPort parses s as an [AddrPort]. // // It doesn't do any name resolution: both the address and the port // must be numeric. @@ -1089,7 +1089,7 @@ func ParseAddrPort(s string) (AddrPort, error) { return ipp, nil } -// MustParseAddrPort calls ParseAddrPort(s) and panics on error. +// MustParseAddrPort calls [ParseAddrPort](s) and panics on error. // It is intended for use in tests with hard-coded strings. func MustParseAddrPort(s string) AddrPort { ip, err := ParseAddrPort(s) @@ -1131,7 +1131,7 @@ func (p AddrPort) String() string { } // AppendTo appends a text encoding of p, -// as generated by MarshalText, +// as generated by [AddrPort.MarshalText], // to b and returns the extended buffer. func (p AddrPort) AppendTo(b []byte) []byte { switch p.ip.z { @@ -1158,9 +1158,9 @@ func (p AddrPort) AppendTo(b []byte) []byte { return b } -// MarshalText implements the encoding.TextMarshaler interface. The -// encoding is the same as returned by String, with one exception: if -// p.Addr() is the zero Addr, the encoding is the empty string. +// MarshalText implements the [encoding.TextMarshaler] interface. The +// encoding is the same as returned by [AddrPort.String], with one exception: if +// p.Addr() is the zero [Addr], the encoding is the empty string. func (p AddrPort) MarshalText() ([]byte, error) { var max int switch p.ip.z { @@ -1176,8 +1176,8 @@ func (p AddrPort) MarshalText() ([]byte, error) { } // UnmarshalText implements the encoding.TextUnmarshaler -// interface. The AddrPort is expected in a form -// generated by MarshalText or accepted by ParseAddrPort. +// interface. The [AddrPort] is expected in a form +// generated by [AddrPort.MarshalText] or accepted by [ParseAddrPort]. func (p *AddrPort) UnmarshalText(text []byte) error { if len(text) == 0 { *p = AddrPort{} @@ -1188,8 +1188,8 @@ func (p *AddrPort) UnmarshalText(text []byte) error { return err } -// MarshalBinary implements the encoding.BinaryMarshaler interface. -// It returns Addr.MarshalBinary with an additional two bytes appended +// MarshalBinary implements the [encoding.BinaryMarshaler] interface. +// It returns [Addr.MarshalBinary] with an additional two bytes appended // containing the port in little-endian. func (p AddrPort) MarshalBinary() ([]byte, error) { b := p.Addr().marshalBinaryWithTrailingBytes(2) @@ -1197,8 +1197,8 @@ func (p AddrPort) MarshalBinary() ([]byte, error) { return b, nil } -// UnmarshalBinary implements the encoding.BinaryUnmarshaler interface. -// It expects data in the form generated by MarshalBinary. +// UnmarshalBinary implements the [encoding.BinaryUnmarshaler] interface. +// It expects data in the form generated by [AddrPort.MarshalBinary]. func (p *AddrPort) UnmarshalBinary(b []byte) error { if len(b) < 2 { return errors.New("unexpected slice size") @@ -1214,7 +1214,7 @@ func (p *AddrPort) UnmarshalBinary(b []byte) error { // Prefix is an IP address prefix (CIDR) representing an IP network. // -// The first Bits() of Addr() are specified. The remaining bits match any address. +// The first [Prefix.Bits]() of [Addr]() are specified. The remaining bits match any address. // The range of Bits() is [0,32] for IPv4 or [0,128] for IPv6. type Prefix struct { ip Addr @@ -1224,13 +1224,13 @@ type Prefix struct { bitsPlusOne uint8 } -// PrefixFrom returns a Prefix with the provided IP address and bit +// PrefixFrom returns a [Prefix] with the provided IP address and bit // prefix length. // -// It does not allocate. Unlike Addr.Prefix, PrefixFrom does not mask +// It does not allocate. Unlike [Addr.Prefix], [PrefixFrom] does not mask // off the host bits of ip. // -// If bits is less than zero or greater than ip.BitLen, Prefix.Bits +// If bits is less than zero or greater than ip.BitLen, [Prefix.Bits] // will return an invalid value -1. func PrefixFrom(ip Addr, bits int) Prefix { var bitsPlusOne uint8 @@ -1252,8 +1252,8 @@ func (p Prefix) Addr() Addr { return p.ip } func (p Prefix) Bits() int { return int(p.bitsPlusOne) - 1 } // IsValid reports whether p.Bits() has a valid range for p.Addr(). -// If p.Addr() is the zero Addr, IsValid returns false. -// Note that if p is the zero Prefix, then p.IsValid() == false. +// If p.Addr() is the zero [Addr], IsValid returns false. +// Note that if p is the zero [Prefix], then p.IsValid() == false. func (p Prefix) IsValid() bool { return p.bitsPlusOne > 0 } func (p Prefix) isZero() bool { return p == Prefix{} } @@ -1321,7 +1321,7 @@ func ParsePrefix(s string) (Prefix, error) { return PrefixFrom(ip, bits), nil } -// MustParsePrefix calls ParsePrefix(s) and panics on error. +// MustParsePrefix calls [ParsePrefix](s) and panics on error. // It is intended for use in tests with hard-coded strings. func MustParsePrefix(s string) Prefix { ip, err := ParsePrefix(s) @@ -1334,7 +1334,7 @@ func MustParsePrefix(s string) Prefix { // Masked returns p in its canonical form, with all but the high // p.Bits() bits of p.Addr() masked off. // -// If p is zero or otherwise invalid, Masked returns the zero Prefix. +// If p is zero or otherwise invalid, Masked returns the zero [Prefix]. func (p Prefix) Masked() Prefix { m, _ := p.ip.Prefix(p.Bits()) return m @@ -1411,7 +1411,7 @@ func (p Prefix) Overlaps(o Prefix) bool { } // AppendTo appends a text encoding of p, -// as generated by MarshalText, +// as generated by [Prefix.MarshalText], // to b and returns the extended buffer. func (p Prefix) AppendTo(b []byte) []byte { if p.isZero() { @@ -1438,8 +1438,8 @@ func (p Prefix) AppendTo(b []byte) []byte { return b } -// MarshalText implements the encoding.TextMarshaler interface, -// The encoding is the same as returned by String, with one exception: +// MarshalText implements the [encoding.TextMarshaler] interface, +// The encoding is the same as returned by [Prefix.String], with one exception: // If p is the zero value, the encoding is the empty string. func (p Prefix) MarshalText() ([]byte, error) { var max int @@ -1456,8 +1456,8 @@ func (p Prefix) MarshalText() ([]byte, error) { } // UnmarshalText implements the encoding.TextUnmarshaler interface. -// The IP address is expected in a form accepted by ParsePrefix -// or generated by MarshalText. +// The IP address is expected in a form accepted by [ParsePrefix] +// or generated by [Prefix.MarshalText]. func (p *Prefix) UnmarshalText(text []byte) error { if len(text) == 0 { *p = Prefix{} @@ -1468,8 +1468,8 @@ func (p *Prefix) UnmarshalText(text []byte) error { return err } -// MarshalBinary implements the encoding.BinaryMarshaler interface. -// It returns Addr.MarshalBinary with an additional byte appended +// MarshalBinary implements the [encoding.BinaryMarshaler] interface. +// It returns [Addr.MarshalBinary] with an additional byte appended // containing the prefix bits. func (p Prefix) MarshalBinary() ([]byte, error) { b := p.Addr().withoutZone().marshalBinaryWithTrailingBytes(1) @@ -1477,8 +1477,8 @@ func (p Prefix) MarshalBinary() ([]byte, error) { return b, nil } -// UnmarshalBinary implements the encoding.BinaryUnmarshaler interface. -// It expects data in the form generated by MarshalBinary. +// UnmarshalBinary implements the [encoding.BinaryUnmarshaler] interface. +// It expects data in the form generated by [Prefix.MarshalBinary]. func (p *Prefix) UnmarshalBinary(b []byte) error { if len(b) < 1 { return errors.New("unexpected slice size") diff --git a/src/net/pipe.go b/src/net/pipe.go index f1741938b0..69955e4617 100644 --- a/src/net/pipe.go +++ b/src/net/pipe.go @@ -106,7 +106,7 @@ type pipe struct { } // Pipe creates a synchronous, in-memory, full duplex -// network connection; both ends implement the Conn interface. +// network connection; both ends implement the [Conn] interface. // Reads on one end are matched with writes on the other, // copying data directly between the two; there is no internal // buffering. diff --git a/src/net/rawconn.go b/src/net/rawconn.go index 7a69fe5c25..19228e94ed 100644 --- a/src/net/rawconn.go +++ b/src/net/rawconn.go @@ -63,7 +63,7 @@ func (c *rawConn) Write(f func(uintptr) bool) error { // PollFD returns the poll.FD of the underlying connection. // -// Other packages in std that also import internal/poll (such as os) +// Other packages in std that also import [internal/poll] (such as os) // can use a type assertion to access this extension method so that // they can pass the *poll.FD to functions like poll.Splice. // diff --git a/src/net/rpc/client.go b/src/net/rpc/client.go index 42d13519b1..ffdc435965 100644 --- a/src/net/rpc/client.go +++ b/src/net/rpc/client.go @@ -53,13 +53,13 @@ type Client struct { // A ClientCodec implements writing of RPC requests and // reading of RPC responses for the client side of an RPC session. -// The client calls WriteRequest to write a request to the connection -// and calls ReadResponseHeader and ReadResponseBody in pairs -// to read responses. The client calls Close when finished with the +// The client calls [ClientCodec.WriteRequest] to write a request to the connection +// and calls [ClientCodec.ReadResponseHeader] and [ClientCodec.ReadResponseBody] in pairs +// to read responses. The client calls [ClientCodec.Close] when finished with the // connection. ReadResponseBody may be called with a nil // argument to force the body of the response to be read and then // discarded. -// See NewClient's comment for information about concurrent access. +// See [NewClient]'s comment for information about concurrent access. type ClientCodec interface { WriteRequest(*Request, any) error ReadResponseHeader(*Response) error @@ -181,7 +181,7 @@ func (call *Call) done() { } } -// NewClient returns a new Client to handle requests to the +// NewClient returns a new [Client] to handle requests to the // set of services at the other end of the connection. // It adds a buffer to the write side of the connection so // the header and payload are sent as a unit. @@ -196,7 +196,7 @@ func NewClient(conn io.ReadWriteCloser) *Client { return NewClientWithCodec(client) } -// NewClientWithCodec is like NewClient but uses the specified +// NewClientWithCodec is like [NewClient] but uses the specified // codec to encode requests and decode responses. func NewClientWithCodec(codec ClientCodec) *Client { client := &Client{ @@ -279,7 +279,7 @@ func Dial(network, address string) (*Client, error) { } // Close calls the underlying codec's Close method. If the connection is already -// shutting down, ErrShutdown is returned. +// shutting down, [ErrShutdown] is returned. func (client *Client) Close() error { client.mutex.Lock() if client.closing { @@ -291,7 +291,7 @@ func (client *Client) Close() error { return client.codec.Close() } -// Go invokes the function asynchronously. It returns the Call structure representing +// Go invokes the function asynchronously. It returns the [Call] structure representing // the invocation. The done channel will signal when the call is complete by returning // the same Call object. If done is nil, Go will allocate a new channel. // If non-nil, done must be buffered or Go will deliberately crash. diff --git a/src/net/rpc/jsonrpc/client.go b/src/net/rpc/jsonrpc/client.go index c473017d26..1beba0f364 100644 --- a/src/net/rpc/jsonrpc/client.go +++ b/src/net/rpc/jsonrpc/client.go @@ -33,7 +33,7 @@ type clientCodec struct { pending map[uint64]string // map request id to method name } -// NewClientCodec returns a new rpc.ClientCodec using JSON-RPC on conn. +// NewClientCodec returns a new [rpc.ClientCodec] using JSON-RPC on conn. func NewClientCodec(conn io.ReadWriteCloser) rpc.ClientCodec { return &clientCodec{ dec: json.NewDecoder(conn), @@ -108,7 +108,7 @@ func (c *clientCodec) Close() error { return c.c.Close() } -// NewClient returns a new rpc.Client to handle requests to the +// NewClient returns a new [rpc.Client] to handle requests to the // set of services at the other end of the connection. func NewClient(conn io.ReadWriteCloser) *rpc.Client { return rpc.NewClientWithCodec(NewClientCodec(conn)) diff --git a/src/net/rpc/jsonrpc/server.go b/src/net/rpc/jsonrpc/server.go index 3ee4ddfef2..57a4de1d0f 100644 --- a/src/net/rpc/jsonrpc/server.go +++ b/src/net/rpc/jsonrpc/server.go @@ -33,7 +33,7 @@ type serverCodec struct { pending map[uint64]*json.RawMessage } -// NewServerCodec returns a new rpc.ServerCodec using JSON-RPC on conn. +// NewServerCodec returns a new [rpc.ServerCodec] using JSON-RPC on conn. func NewServerCodec(conn io.ReadWriteCloser) rpc.ServerCodec { return &serverCodec{ dec: json.NewDecoder(conn), diff --git a/src/net/rpc/server.go b/src/net/rpc/server.go index fc3ec484ad..1771726a93 100644 --- a/src/net/rpc/server.go +++ b/src/net/rpc/server.go @@ -30,17 +30,17 @@ These requirements apply even if a different codec is used. The method's first argument represents the arguments provided by the caller; the second argument represents the result parameters to be returned to the caller. The method's return value, if non-nil, is passed back as a string that the client -sees as if created by errors.New. If an error is returned, the reply parameter +sees as if created by [errors.New]. If an error is returned, the reply parameter will not be sent back to the client. -The server may handle requests on a single connection by calling ServeConn. More -typically it will create a network listener and call Accept or, for an HTTP -listener, HandleHTTP and http.Serve. +The server may handle requests on a single connection by calling [ServeConn]. More +typically it will create a network listener and call [Accept] or, for an HTTP +listener, [HandleHTTP] and [http.Serve]. A client wishing to use the service establishes a connection and then invokes -NewClient on the connection. The convenience function Dial (DialHTTP) performs +[NewClient] on the connection. The convenience function [Dial] ([DialHTTP]) performs both steps for a raw network connection (an HTTP connection). The resulting -Client object has two methods, Call and Go, that specify the service and method to +[Client] object has two methods, [Call] and Go, that specify the service and method to call, a pointer containing the arguments, and a pointer to receive the result parameters. @@ -48,7 +48,7 @@ The Call method waits for the remote call to complete while the Go method launches the call asynchronously and signals completion using the Call structure's Done channel. -Unless an explicit codec is set up, package encoding/gob is used to +Unless an explicit codec is set up, package [encoding/gob] is used to transport the data. Here is a simple example. A server wishes to export an object of type Arith: @@ -192,12 +192,12 @@ type Server struct { freeResp *Response } -// NewServer returns a new Server. +// NewServer returns a new [Server]. func NewServer() *Server { return &Server{} } -// DefaultServer is the default instance of *Server. +// DefaultServer is the default instance of [*Server]. var DefaultServer = NewServer() // Is this type exported or a builtin? @@ -225,7 +225,7 @@ func (server *Server) Register(rcvr any) error { return server.register(rcvr, "", false) } -// RegisterName is like Register but uses the provided name for the type +// RegisterName is like [Register] but uses the provided name for the type // instead of the receiver's concrete type. func (server *Server) RegisterName(name string, rcvr any) error { return server.register(rcvr, name, true) @@ -440,8 +440,8 @@ func (c *gobServerCodec) Close() error { // ServeConn blocks, serving the connection until the client hangs up. // The caller typically invokes ServeConn in a go statement. // ServeConn uses the gob wire format (see package gob) on the -// connection. To use an alternate codec, use ServeCodec. -// See NewClient's comment for information about concurrent access. +// connection. To use an alternate codec, use [ServeCodec]. +// See [NewClient]'s comment for information about concurrent access. func (server *Server) ServeConn(conn io.ReadWriteCloser) { buf := bufio.NewWriter(conn) srv := &gobServerCodec{ @@ -453,7 +453,7 @@ func (server *Server) ServeConn(conn io.ReadWriteCloser) { server.ServeCodec(srv) } -// ServeCodec is like ServeConn but uses the specified codec to +// ServeCodec is like [ServeConn] but uses the specified codec to // decode requests and encode responses. func (server *Server) ServeCodec(codec ServerCodec) { sending := new(sync.Mutex) @@ -483,7 +483,7 @@ func (server *Server) ServeCodec(codec ServerCodec) { codec.Close() } -// ServeRequest is like ServeCodec but synchronously serves a single request. +// ServeRequest is like [ServeCodec] but synchronously serves a single request. // It does not close the codec upon completion. func (server *Server) ServeRequest(codec ServerCodec) error { sending := new(sync.Mutex) @@ -635,10 +635,10 @@ func (server *Server) Accept(lis net.Listener) { } } -// Register publishes the receiver's methods in the DefaultServer. +// Register publishes the receiver's methods in the [DefaultServer]. func Register(rcvr any) error { return DefaultServer.Register(rcvr) } -// RegisterName is like Register but uses the provided name for the type +// RegisterName is like [Register] but uses the provided name for the type // instead of the receiver's concrete type. func RegisterName(name string, rcvr any) error { return DefaultServer.RegisterName(name, rcvr) @@ -646,12 +646,12 @@ func RegisterName(name string, rcvr any) error { // A ServerCodec implements reading of RPC requests and writing of // RPC responses for the server side of an RPC session. -// The server calls ReadRequestHeader and ReadRequestBody in pairs -// to read requests from the connection, and it calls WriteResponse to -// write a response back. The server calls Close when finished with the +// The server calls [ServerCodec.ReadRequestHeader] and [ServerCodec.ReadRequestBody] in pairs +// to read requests from the connection, and it calls [ServerCodec.WriteResponse] to +// write a response back. The server calls [ServerCodec.Close] when finished with the // connection. ReadRequestBody may be called with a nil // argument to force the body of the request to be read and discarded. -// See NewClient's comment for information about concurrent access. +// See [NewClient]'s comment for information about concurrent access. type ServerCodec interface { ReadRequestHeader(*Request) error ReadRequestBody(any) error @@ -661,37 +661,37 @@ type ServerCodec interface { Close() error } -// ServeConn runs the DefaultServer on a single connection. +// ServeConn runs the [DefaultServer] on a single connection. // ServeConn blocks, serving the connection until the client hangs up. // The caller typically invokes ServeConn in a go statement. // ServeConn uses the gob wire format (see package gob) on the -// connection. To use an alternate codec, use ServeCodec. -// See NewClient's comment for information about concurrent access. +// connection. To use an alternate codec, use [ServeCodec]. +// See [NewClient]'s comment for information about concurrent access. func ServeConn(conn io.ReadWriteCloser) { DefaultServer.ServeConn(conn) } -// ServeCodec is like ServeConn but uses the specified codec to +// ServeCodec is like [ServeConn] but uses the specified codec to // decode requests and encode responses. func ServeCodec(codec ServerCodec) { DefaultServer.ServeCodec(codec) } -// ServeRequest is like ServeCodec but synchronously serves a single request. +// ServeRequest is like [ServeCodec] but synchronously serves a single request. // It does not close the codec upon completion. func ServeRequest(codec ServerCodec) error { return DefaultServer.ServeRequest(codec) } // Accept accepts connections on the listener and serves requests -// to DefaultServer for each incoming connection. +// to [DefaultServer] for each incoming connection. // Accept blocks; the caller typically invokes it in a go statement. func Accept(lis net.Listener) { DefaultServer.Accept(lis) } // Can connect to RPC service using HTTP CONNECT to rpcPath. var connected = "200 Connected to Go RPC" -// ServeHTTP implements an http.Handler that answers RPC requests. +// ServeHTTP implements an [http.Handler] that answers RPC requests. func (server *Server) ServeHTTP(w http.ResponseWriter, req *http.Request) { if req.Method != "CONNECT" { w.Header().Set("Content-Type", "text/plain; charset=utf-8") @@ -710,15 +710,15 @@ func (server *Server) ServeHTTP(w http.ResponseWriter, req *http.Request) { // HandleHTTP registers an HTTP handler for RPC messages on rpcPath, // and a debugging handler on debugPath. -// It is still necessary to invoke http.Serve(), typically in a go statement. +// It is still necessary to invoke [http.Serve](), typically in a go statement. func (server *Server) HandleHTTP(rpcPath, debugPath string) { http.Handle(rpcPath, server) http.Handle(debugPath, debugHTTP{server}) } -// HandleHTTP registers an HTTP handler for RPC messages to DefaultServer -// on DefaultRPCPath and a debugging handler on DefaultDebugPath. -// It is still necessary to invoke http.Serve(), typically in a go statement. +// HandleHTTP registers an HTTP handler for RPC messages to [DefaultServer] +// on [DefaultRPCPath] and a debugging handler on [DefaultDebugPath]. +// It is still necessary to invoke [http.Serve](), typically in a go statement. func HandleHTTP() { DefaultServer.HandleHTTP(DefaultRPCPath, DefaultDebugPath) } diff --git a/src/net/smtp/auth.go b/src/net/smtp/auth.go index 72eb16671f..6d461acc48 100644 --- a/src/net/smtp/auth.go +++ b/src/net/smtp/auth.go @@ -42,7 +42,7 @@ type plainAuth struct { host string } -// PlainAuth returns an Auth that implements the PLAIN authentication +// PlainAuth returns an [Auth] that implements the PLAIN authentication // mechanism as defined in RFC 4616. The returned Auth uses the given // username and password to authenticate to host and act as identity. // Usually identity should be the empty string, to act as username. @@ -86,7 +86,7 @@ type cramMD5Auth struct { username, secret string } -// CRAMMD5Auth returns an Auth that implements the CRAM-MD5 authentication +// CRAMMD5Auth returns an [Auth] that implements the CRAM-MD5 authentication // mechanism as defined in RFC 2195. // The returned Auth uses the given username and secret to authenticate // to the server using the challenge-response mechanism. diff --git a/src/net/smtp/smtp.go b/src/net/smtp/smtp.go index b5a025ef2a..b7877936da 100644 --- a/src/net/smtp/smtp.go +++ b/src/net/smtp/smtp.go @@ -48,7 +48,7 @@ type Client struct { helloError error // the error from the hello } -// Dial returns a new Client connected to an SMTP server at addr. +// Dial returns a new [Client] connected to an SMTP server at addr. // The addr must include a port, as in "mail.example.com:smtp". func Dial(addr string) (*Client, error) { conn, err := net.Dial("tcp", addr) @@ -59,7 +59,7 @@ func Dial(addr string) (*Client, error) { return NewClient(conn, host) } -// NewClient returns a new Client using an existing connection and host as a +// NewClient returns a new [Client] using an existing connection and host as a // server name to be used when authenticating. func NewClient(conn net.Conn, host string) (*Client, error) { text := textproto.NewConn(conn) @@ -166,7 +166,7 @@ func (c *Client) StartTLS(config *tls.Config) error { } // TLSConnectionState returns the client's TLS connection state. -// The return values are their zero values if StartTLS did +// The return values are their zero values if [Client.StartTLS] did // not succeed. func (c *Client) TLSConnectionState() (state tls.ConnectionState, ok bool) { tc, ok := c.conn.(*tls.Conn) @@ -241,7 +241,7 @@ func (c *Client) Auth(a Auth) error { // If the server supports the 8BITMIME extension, Mail adds the BODY=8BITMIME // parameter. If the server supports the SMTPUTF8 extension, Mail adds the // SMTPUTF8 parameter. -// This initiates a mail transaction and is followed by one or more Rcpt calls. +// This initiates a mail transaction and is followed by one or more [Client.Rcpt] calls. func (c *Client) Mail(from string) error { if err := validateLine(from); err != nil { return err @@ -263,8 +263,8 @@ func (c *Client) Mail(from string) error { } // Rcpt issues a RCPT command to the server using the provided email address. -// A call to Rcpt must be preceded by a call to Mail and may be followed by -// a Data call or another Rcpt call. +// A call to Rcpt must be preceded by a call to [Client.Mail] and may be followed by +// a [Client.Data] call or another Rcpt call. func (c *Client) Rcpt(to string) error { if err := validateLine(to); err != nil { return err @@ -287,7 +287,7 @@ func (d *dataCloser) Close() error { // Data issues a DATA command to the server and returns a writer that // can be used to write the mail headers and body. The caller should // close the writer before calling any more methods on c. A call to -// Data must be preceded by one or more calls to Rcpt. +// Data must be preceded by one or more calls to [Client.Rcpt]. func (c *Client) Data() (io.WriteCloser, error) { _, _, err := c.cmd(354, "DATA") if err != nil { diff --git a/src/net/tcpsock.go b/src/net/tcpsock.go index 6257f2515b..590516bff1 100644 --- a/src/net/tcpsock.go +++ b/src/net/tcpsock.go @@ -24,7 +24,7 @@ type TCPAddr struct { Zone string // IPv6 scoped addressing zone } -// AddrPort returns the TCPAddr a as a netip.AddrPort. +// AddrPort returns the [TCPAddr] a as a [netip.AddrPort]. // // If a.Port does not fit in a uint16, it's silently truncated. // @@ -79,7 +79,7 @@ func (a *TCPAddr) opAddr() Addr { // recommended, because it will return at most one of the host name's // IP addresses. // -// See func Dial for a description of the network and address +// See func [Dial] for a description of the network and address // parameters. func ResolveTCPAddr(network, address string) (*TCPAddr, error) { switch network { @@ -96,7 +96,7 @@ func ResolveTCPAddr(network, address string) (*TCPAddr, error) { return addrs.forResolve(network, address).(*TCPAddr), nil } -// TCPAddrFromAddrPort returns addr as a TCPAddr. If addr.IsValid() is false, +// TCPAddrFromAddrPort returns addr as a [TCPAddr]. If addr.IsValid() is false, // then the returned TCPAddr will contain a nil IP field, indicating an // address family-agnostic unspecified address. func TCPAddrFromAddrPort(addr netip.AddrPort) *TCPAddr { @@ -107,14 +107,14 @@ func TCPAddrFromAddrPort(addr netip.AddrPort) *TCPAddr { } } -// TCPConn is an implementation of the Conn interface for TCP network +// TCPConn is an implementation of the [Conn] interface for TCP network // connections. type TCPConn struct { conn } // SyscallConn returns a raw network connection. -// This implements the syscall.Conn interface. +// This implements the [syscall.Conn] interface. func (c *TCPConn) SyscallConn() (syscall.RawConn, error) { if !c.ok() { return nil, syscall.EINVAL @@ -122,7 +122,7 @@ func (c *TCPConn) SyscallConn() (syscall.RawConn, error) { return newRawConn(c.fd), nil } -// ReadFrom implements the io.ReaderFrom ReadFrom method. +// ReadFrom implements the [io.ReaderFrom] ReadFrom method. func (c *TCPConn) ReadFrom(r io.Reader) (int64, error) { if !c.ok() { return 0, syscall.EINVAL @@ -262,7 +262,7 @@ func newTCPConn(fd *netFD, keepAlive time.Duration, keepAliveHook func(time.Dura return &TCPConn{conn{fd}} } -// DialTCP acts like Dial for TCP networks. +// DialTCP acts like [Dial] for TCP networks. // // The network must be a TCP network name; see func Dial for details. // @@ -287,14 +287,14 @@ func DialTCP(network string, laddr, raddr *TCPAddr) (*TCPConn, error) { } // TCPListener is a TCP network listener. Clients should typically -// use variables of type Listener instead of assuming TCP. +// use variables of type [Listener] instead of assuming TCP. type TCPListener struct { fd *netFD lc ListenConfig } // SyscallConn returns a raw network connection. -// This implements the syscall.Conn interface. +// This implements the [syscall.Conn] interface. // // The returned RawConn only supports calling Control. Read and // Write return an error. @@ -318,8 +318,8 @@ func (l *TCPListener) AcceptTCP() (*TCPConn, error) { return c, nil } -// Accept implements the Accept method in the Listener interface; it -// waits for the next call and returns a generic Conn. +// Accept implements the Accept method in the [Listener] interface; it +// waits for the next call and returns a generic [Conn]. func (l *TCPListener) Accept() (Conn, error) { if !l.ok() { return nil, syscall.EINVAL @@ -343,7 +343,7 @@ func (l *TCPListener) Close() error { return nil } -// Addr returns the listener's network address, a *TCPAddr. +// Addr returns the listener's network address, a [*TCPAddr]. // The Addr returned is shared by all invocations of Addr, so // do not modify it. func (l *TCPListener) Addr() Addr { return l.fd.laddr } @@ -357,7 +357,7 @@ func (l *TCPListener) SetDeadline(t time.Time) error { return l.fd.SetDeadline(t) } -// File returns a copy of the underlying os.File. +// File returns a copy of the underlying [os.File]. // It is the caller's responsibility to close f when finished. // Closing l does not affect f, and closing f does not affect l. // @@ -375,7 +375,7 @@ func (l *TCPListener) File() (f *os.File, err error) { return } -// ListenTCP acts like Listen for TCP networks. +// ListenTCP acts like [Listen] for TCP networks. // // The network must be a TCP network name; see func Dial for details. // diff --git a/src/net/textproto/header.go b/src/net/textproto/header.go index a58df7aebc..689a6827b9 100644 --- a/src/net/textproto/header.go +++ b/src/net/textproto/header.go @@ -23,7 +23,7 @@ func (h MIMEHeader) Set(key, value string) { } // Get gets the first value associated with the given key. -// It is case insensitive; CanonicalMIMEHeaderKey is used +// It is case insensitive; [CanonicalMIMEHeaderKey] is used // to canonicalize the provided key. // If there are no values associated with the key, Get returns "". // To use non-canonical keys, access the map directly. @@ -39,7 +39,7 @@ func (h MIMEHeader) Get(key string) string { } // Values returns all values associated with the given key. -// It is case insensitive; CanonicalMIMEHeaderKey is +// It is case insensitive; [CanonicalMIMEHeaderKey] is // used to canonicalize the provided key. To use non-canonical // keys, access the map directly. // The returned slice is not a copy. diff --git a/src/net/textproto/reader.go b/src/net/textproto/reader.go index fc2590b1cd..a603564fb8 100644 --- a/src/net/textproto/reader.go +++ b/src/net/textproto/reader.go @@ -24,10 +24,10 @@ type Reader struct { buf []byte // a re-usable buffer for readContinuedLineSlice } -// NewReader returns a new Reader reading from r. +// NewReader returns a new [Reader] reading from r. // -// To avoid denial of service attacks, the provided bufio.Reader -// should be reading from an io.LimitReader or similar Reader to bound +// To avoid denial of service attacks, the provided [bufio.Reader] +// should be reading from an [io.LimitReader] or similar Reader to bound // the size of responses. func NewReader(r *bufio.Reader) *Reader { return &Reader{R: r} @@ -40,7 +40,7 @@ func (r *Reader) ReadLine() (string, error) { return string(line), err } -// ReadLineBytes is like ReadLine but returns a []byte instead of a string. +// ReadLineBytes is like [Reader.ReadLine] but returns a []byte instead of a string. func (r *Reader) ReadLineBytes() ([]byte, error) { line, err := r.readLineSlice() if line != nil { @@ -106,7 +106,7 @@ func trim(s []byte) []byte { return s[i:n] } -// ReadContinuedLineBytes is like ReadContinuedLine but +// ReadContinuedLineBytes is like [Reader.ReadContinuedLine] but // returns a []byte instead of a string. func (r *Reader) ReadContinuedLineBytes() ([]byte, error) { line, err := r.readContinuedLineSlice(noValidation) @@ -289,7 +289,7 @@ func (r *Reader) ReadResponse(expectCode int) (code int, message string, err err return } -// DotReader returns a new Reader that satisfies Reads using the +// DotReader returns a new [Reader] that satisfies Reads using the // decoded text of a dot-encoded block read from r. // The returned Reader is only valid until the next call // to a method on r. @@ -303,7 +303,7 @@ func (r *Reader) ReadResponse(expectCode int) (code int, message string, err err // // The decoded form returned by the Reader's Read method // rewrites the "\r\n" line endings into the simpler "\n", -// removes leading dot escapes if present, and stops with error io.EOF +// removes leading dot escapes if present, and stops with error [io.EOF] // after consuming (and discarding) the end-of-sequence line. func (r *Reader) DotReader() io.Reader { r.closeDot() @@ -420,7 +420,7 @@ func (r *Reader) closeDot() { // ReadDotBytes reads a dot-encoding and returns the decoded data. // -// See the documentation for the DotReader method for details about dot-encoding. +// See the documentation for the [Reader.DotReader] method for details about dot-encoding. func (r *Reader) ReadDotBytes() ([]byte, error) { return io.ReadAll(r.DotReader()) } @@ -428,7 +428,7 @@ func (r *Reader) ReadDotBytes() ([]byte, error) { // ReadDotLines reads a dot-encoding and returns a slice // containing the decoded lines, with the final \r\n or \n elided from each. // -// See the documentation for the DotReader method for details about dot-encoding. +// See the documentation for the [Reader.DotReader] method for details about dot-encoding. func (r *Reader) ReadDotLines() ([]string, error) { // We could use ReadDotBytes and then Split it, // but reading a line at a time avoids needing a @@ -462,7 +462,7 @@ var colon = []byte(":") // ReadMIMEHeader reads a MIME-style header from r. // The header is a sequence of possibly continued Key: Value lines // ending in a blank line. -// The returned map m maps CanonicalMIMEHeaderKey(key) to a +// The returned map m maps [CanonicalMIMEHeaderKey](key) to a // sequence of values in the same order encountered in the input. // // For example, consider this input: diff --git a/src/net/textproto/textproto.go b/src/net/textproto/textproto.go index 70038d5888..4ae3ecff74 100644 --- a/src/net/textproto/textproto.go +++ b/src/net/textproto/textproto.go @@ -7,20 +7,20 @@ // // The package provides: // -// Error, which represents a numeric error response from +// [Error], which represents a numeric error response from // a server. // -// Pipeline, to manage pipelined requests and responses +// [Pipeline], to manage pipelined requests and responses // in a client. // -// Reader, to read numeric response code lines, +// [Reader], to read numeric response code lines, // key: value headers, lines wrapped with leading spaces // on continuation lines, and whole text blocks ending // with a dot on a line by itself. // -// Writer, to write dot-encoded text blocks. +// [Writer], to write dot-encoded text blocks. // -// Conn, a convenient packaging of Reader, Writer, and Pipeline for use +// [Conn], a convenient packaging of [Reader], [Writer], and [Pipeline] for use // with a single network connection. package textproto @@ -50,8 +50,8 @@ func (p ProtocolError) Error() string { } // A Conn represents a textual network protocol connection. -// It consists of a Reader and Writer to manage I/O -// and a Pipeline to sequence concurrent requests on the connection. +// It consists of a [Reader] and [Writer] to manage I/O +// and a [Pipeline] to sequence concurrent requests on the connection. // These embedded types carry methods with them; // see the documentation of those types for details. type Conn struct { @@ -61,7 +61,7 @@ type Conn struct { conn io.ReadWriteCloser } -// NewConn returns a new Conn using conn for I/O. +// NewConn returns a new [Conn] using conn for I/O. func NewConn(conn io.ReadWriteCloser) *Conn { return &Conn{ Reader: Reader{R: bufio.NewReader(conn)}, @@ -75,8 +75,8 @@ func (c *Conn) Close() error { return c.conn.Close() } -// Dial connects to the given address on the given network using net.Dial -// and then returns a new Conn for the connection. +// Dial connects to the given address on the given network using [net.Dial] +// and then returns a new [Conn] for the connection. func Dial(network, addr string) (*Conn, error) { c, err := net.Dial(network, addr) if err != nil { diff --git a/src/net/textproto/writer.go b/src/net/textproto/writer.go index 2ece3f511b..662515fb2c 100644 --- a/src/net/textproto/writer.go +++ b/src/net/textproto/writer.go @@ -17,7 +17,7 @@ type Writer struct { dot *dotWriter } -// NewWriter returns a new Writer writing to w. +// NewWriter returns a new [Writer] writing to w. func NewWriter(w *bufio.Writer) *Writer { return &Writer{W: w} } @@ -39,7 +39,7 @@ func (w *Writer) PrintfLine(format string, args ...any) error { // when the DotWriter is closed. The caller should close the // DotWriter before the next call to a method on w. // -// See the documentation for Reader's DotReader method for details about dot-encoding. +// See the documentation for the [Reader.DotReader] method for details about dot-encoding. func (w *Writer) DotWriter() io.WriteCloser { w.closeDot() w.dot = &dotWriter{w: w} diff --git a/src/net/unixsock.go b/src/net/unixsock.go index 7e5ffa036a..821be7bf74 100644 --- a/src/net/unixsock.go +++ b/src/net/unixsock.go @@ -52,7 +52,7 @@ func (a *UnixAddr) opAddr() Addr { // // The network must be a Unix network name. // -// See func Dial for a description of the network and address +// See func [Dial] for a description of the network and address // parameters. func ResolveUnixAddr(network, address string) (*UnixAddr, error) { switch network { @@ -63,14 +63,14 @@ func ResolveUnixAddr(network, address string) (*UnixAddr, error) { } } -// UnixConn is an implementation of the Conn interface for connections +// UnixConn is an implementation of the [Conn] interface for connections // to Unix domain sockets. type UnixConn struct { conn } // SyscallConn returns a raw network connection. -// This implements the syscall.Conn interface. +// This implements the [syscall.Conn] interface. func (c *UnixConn) SyscallConn() (syscall.RawConn, error) { if !c.ok() { return nil, syscall.EINVAL @@ -102,7 +102,7 @@ func (c *UnixConn) CloseWrite() error { return nil } -// ReadFromUnix acts like ReadFrom but returns a UnixAddr. +// ReadFromUnix acts like [UnixConn.ReadFrom] but returns a [UnixAddr]. func (c *UnixConn) ReadFromUnix(b []byte) (int, *UnixAddr, error) { if !c.ok() { return 0, nil, syscall.EINVAL @@ -114,7 +114,7 @@ func (c *UnixConn) ReadFromUnix(b []byte) (int, *UnixAddr, error) { return n, addr, err } -// ReadFrom implements the PacketConn ReadFrom method. +// ReadFrom implements the [PacketConn] ReadFrom method. func (c *UnixConn) ReadFrom(b []byte) (int, Addr, error) { if !c.ok() { return 0, nil, syscall.EINVAL @@ -147,7 +147,7 @@ func (c *UnixConn) ReadMsgUnix(b, oob []byte) (n, oobn, flags int, addr *UnixAdd return } -// WriteToUnix acts like WriteTo but takes a UnixAddr. +// WriteToUnix acts like [UnixConn.WriteTo] but takes a [UnixAddr]. func (c *UnixConn) WriteToUnix(b []byte, addr *UnixAddr) (int, error) { if !c.ok() { return 0, syscall.EINVAL @@ -159,7 +159,7 @@ func (c *UnixConn) WriteToUnix(b []byte, addr *UnixAddr) (int, error) { return n, err } -// WriteTo implements the PacketConn WriteTo method. +// WriteTo implements the [PacketConn] WriteTo method. func (c *UnixConn) WriteTo(b []byte, addr Addr) (int, error) { if !c.ok() { return 0, syscall.EINVAL @@ -194,7 +194,7 @@ func (c *UnixConn) WriteMsgUnix(b, oob []byte, addr *UnixAddr) (n, oobn int, err func newUnixConn(fd *netFD) *UnixConn { return &UnixConn{conn{fd}} } -// DialUnix acts like Dial for Unix networks. +// DialUnix acts like [Dial] for Unix networks. // // The network must be a Unix network name; see func Dial for details. // @@ -215,7 +215,7 @@ func DialUnix(network string, laddr, raddr *UnixAddr) (*UnixConn, error) { } // UnixListener is a Unix domain socket listener. Clients should -// typically use variables of type Listener instead of assuming Unix +// typically use variables of type [Listener] instead of assuming Unix // domain sockets. type UnixListener struct { fd *netFD @@ -227,7 +227,7 @@ type UnixListener struct { func (ln *UnixListener) ok() bool { return ln != nil && ln.fd != nil } // SyscallConn returns a raw network connection. -// This implements the syscall.Conn interface. +// This implements the [syscall.Conn] interface. // // The returned RawConn only supports calling Control. Read and // Write return an error. @@ -251,8 +251,8 @@ func (l *UnixListener) AcceptUnix() (*UnixConn, error) { return c, nil } -// Accept implements the Accept method in the Listener interface. -// Returned connections will be of type *UnixConn. +// Accept implements the Accept method in the [Listener] interface. +// Returned connections will be of type [*UnixConn]. func (l *UnixListener) Accept() (Conn, error) { if !l.ok() { return nil, syscall.EINVAL @@ -290,7 +290,7 @@ func (l *UnixListener) SetDeadline(t time.Time) error { return l.fd.SetDeadline(t) } -// File returns a copy of the underlying os.File. +// File returns a copy of the underlying [os.File]. // It is the caller's responsibility to close f when finished. // Closing l does not affect f, and closing f does not affect l. // @@ -308,7 +308,7 @@ func (l *UnixListener) File() (f *os.File, err error) { return } -// ListenUnix acts like Listen for Unix networks. +// ListenUnix acts like [Listen] for Unix networks. // // The network must be "unix" or "unixpacket". func ListenUnix(network string, laddr *UnixAddr) (*UnixListener, error) { @@ -328,7 +328,7 @@ func ListenUnix(network string, laddr *UnixAddr) (*UnixListener, error) { return ln, nil } -// ListenUnixgram acts like ListenPacket for Unix networks. +// ListenUnixgram acts like [ListenPacket] for Unix networks. // // The network must be "unixgram". func ListenUnixgram(network string, laddr *UnixAddr) (*UnixConn, error) { diff --git a/src/net/url/url.go b/src/net/url/url.go index 902310c244..f362958edd 100644 --- a/src/net/url/url.go +++ b/src/net/url/url.go @@ -175,7 +175,7 @@ func shouldEscape(c byte, mode encoding) bool { return true } -// QueryUnescape does the inverse transformation of QueryEscape, +// QueryUnescape does the inverse transformation of [QueryEscape], // converting each 3-byte encoded substring of the form "%AB" into the // hex-decoded byte 0xAB. // It returns an error if any % is not followed by two hexadecimal @@ -184,12 +184,12 @@ func QueryUnescape(s string) (string, error) { return unescape(s, encodeQueryComponent) } -// PathUnescape does the inverse transformation of PathEscape, +// PathUnescape does the inverse transformation of [PathEscape], // converting each 3-byte encoded substring of the form "%AB" into the // hex-decoded byte 0xAB. It returns an error if any % is not followed // by two hexadecimal digits. // -// PathUnescape is identical to QueryUnescape except that it does not +// PathUnescape is identical to [QueryUnescape] except that it does not // unescape '+' to ' ' (space). func PathUnescape(s string) (string, error) { return unescape(s, encodePathSegment) @@ -271,12 +271,12 @@ func unescape(s string, mode encoding) (string, error) { } // QueryEscape escapes the string so it can be safely placed -// inside a URL query. +// inside a [URL] query. func QueryEscape(s string) string { return escape(s, encodeQueryComponent) } -// PathEscape escapes the string so it can be safely placed inside a URL path segment, +// PathEscape escapes the string so it can be safely placed inside a [URL] path segment, // replacing special characters (including /) with %XX sequences as needed. func PathEscape(s string) string { return escape(s, encodePathSegment) @@ -358,7 +358,7 @@ func escape(s string, mode encoding) string { // Note that the Path field is stored in decoded form: /%47%6f%2f becomes /Go/. // A consequence is that it is impossible to tell which slashes in the Path were // slashes in the raw URL and which were %2f. This distinction is rarely important, -// but when it is, the code should use the EscapedPath method, which preserves +// but when it is, the code should use the [URL.EscapedPath] method, which preserves // the original encoding of Path. // // The RawPath field is an optional field which is only set when the default @@ -380,13 +380,13 @@ type URL struct { RawFragment string // encoded fragment hint (see EscapedFragment method) } -// User returns a Userinfo containing the provided username +// User returns a [Userinfo] containing the provided username // and no password set. func User(username string) *Userinfo { return &Userinfo{username, "", false} } -// UserPassword returns a Userinfo containing the provided username +// UserPassword returns a [Userinfo] containing the provided username // and password. // // This functionality should only be used with legacy web sites. @@ -399,7 +399,7 @@ func UserPassword(username, password string) *Userinfo { } // The Userinfo type is an immutable encapsulation of username and -// password details for a URL. An existing Userinfo value is guaranteed +// password details for a [URL]. An existing Userinfo value is guaranteed // to have a username set (potentially empty, as allowed by RFC 2396), // and optionally a password. type Userinfo struct { @@ -464,7 +464,7 @@ func getScheme(rawURL string) (scheme, path string, err error) { return "", rawURL, nil } -// Parse parses a raw url into a URL structure. +// Parse parses a raw url into a [URL] structure. // // The url may be relative (a path, without a host) or absolute // (starting with a scheme). Trying to parse a hostname and path @@ -486,7 +486,7 @@ func Parse(rawURL string) (*URL, error) { return url, nil } -// ParseRequestURI parses a raw url into a URL structure. It assumes that +// ParseRequestURI parses a raw url into a [URL] structure. It assumes that // url was received in an HTTP request, so the url is interpreted // only as an absolute URI or an absolute path. // The string url is assumed not to have a #fragment suffix. @@ -697,7 +697,7 @@ func (u *URL) setPath(p string) error { // EscapedPath returns u.RawPath when it is a valid escaping of u.Path. // Otherwise EscapedPath ignores u.RawPath and computes an escaped // form on its own. -// The String and RequestURI methods use EscapedPath to construct +// The [URL.String] and [URL.RequestURI] methods use EscapedPath to construct // their results. // In general, code should call EscapedPath instead of // reading u.RawPath directly. @@ -761,7 +761,7 @@ func (u *URL) setFragment(f string) error { // EscapedFragment returns u.RawFragment when it is a valid escaping of u.Fragment. // Otherwise EscapedFragment ignores u.RawFragment and computes an escaped // form on its own. -// The String method uses EscapedFragment to construct its result. +// The [URL.String] method uses EscapedFragment to construct its result. // In general, code should call EscapedFragment instead of // reading u.RawFragment directly. func (u *URL) EscapedFragment() string { @@ -791,7 +791,7 @@ func validOptionalPort(port string) bool { return true } -// String reassembles the URL into a valid URL string. +// String reassembles the [URL] into a valid URL string. // The general form of the result is one of: // // scheme:opaque?query#fragment @@ -865,7 +865,7 @@ func (u *URL) String() string { return buf.String() } -// Redacted is like String but replaces any password with "xxxxx". +// Redacted is like [URL.String] but replaces any password with "xxxxx". // Only the password in u.User is redacted. func (u *URL) Redacted() string { if u == nil { @@ -1060,15 +1060,15 @@ func resolvePath(base, ref string) string { return r } -// IsAbs reports whether the URL is absolute. +// IsAbs reports whether the [URL] is absolute. // Absolute means that it has a non-empty scheme. func (u *URL) IsAbs() bool { return u.Scheme != "" } -// Parse parses a URL in the context of the receiver. The provided URL +// Parse parses a [URL] in the context of the receiver. The provided URL // may be relative or absolute. Parse returns nil, err on parse -// failure, otherwise its return value is the same as ResolveReference. +// failure, otherwise its return value is the same as [URL.ResolveReference]. func (u *URL) Parse(ref string) (*URL, error) { refURL, err := Parse(ref) if err != nil { @@ -1080,7 +1080,7 @@ func (u *URL) Parse(ref string) (*URL, error) { // ResolveReference resolves a URI reference to an absolute URI from // an absolute base URI u, per RFC 3986 Section 5.2. The URI reference // may be relative or absolute. ResolveReference always returns a new -// URL instance, even if the returned URL is identical to either the +// [URL] instance, even if the returned URL is identical to either the // base or reference. If ref is an absolute URL, then ResolveReference // ignores base and returns a copy of ref. func (u *URL) ResolveReference(ref *URL) *URL { @@ -1117,7 +1117,7 @@ func (u *URL) ResolveReference(ref *URL) *URL { // Query parses RawQuery and returns the corresponding values. // It silently discards malformed value pairs. -// To check errors use ParseQuery. +// To check errors use [ParseQuery]. func (u *URL) Query() Values { v, _ := ParseQuery(u.RawQuery) return v @@ -1194,7 +1194,7 @@ func (u *URL) UnmarshalBinary(text []byte) error { return nil } -// JoinPath returns a new URL with the provided path elements joined to +// JoinPath returns a new [URL] with the provided path elements joined to // any existing path and the resulting path cleaned of any ./ or ../ elements. // Any sequences of multiple / characters will be reduced to a single /. func (u *URL) JoinPath(elem ...string) *URL { @@ -1260,7 +1260,7 @@ func stringContainsCTLByte(s string) bool { return false } -// JoinPath returns a URL string with the provided path elements joined to +// JoinPath returns a [URL] string with the provided path elements joined to // the existing path of base and the resulting path cleaned of any ./ or ../ elements. func JoinPath(base string, elem ...string) (result string, err error) { url, err := Parse(base)

    + +

    + HTTP routing in the standard library is now more expressive. + The patterns used by net/http.ServeMux have been enhanced to accept methods and wildcards. +

    + +

    + Registering a handler with a method, like "POST /items/create", restricts + invocations of the handler to requests with the given method. A pattern with a method takes precedence over a matching pattern without one. + As a special case, registering a handler with "GET" also registers it with "HEAD". +

    + +

    + Wildcards in patterns, like /items/{id}, match segments of the URL path. + The actual segment value may be accessed by calling the Request.PathValue method. + A wildcard ending in "...", like /files/{path...}, must occur at the end of a pattern and matches all the remaining segments. +

    + +

    + A pattern that ends in "/" matches all paths that have it as a prefix, as always. + To match the exact pattern including the trailing slash, end it with {$}, + as in /exact/match/{$}. +

    + +

    + If two patterns overlap in the requests that they match, then the more specific pattern takes precedence. + If neither is more specific, the patterns conflict. + This rule generalizes the original precedence rules and maintains the property that the order in which + patterns are registered does not matter. +

    + +

    + This change breaks backwards compatiblity in small ways, some obvious—patterns with "{" and "}" behave differently— + and some less so—treatment of escaped paths has been improved. + The change is controlled by a GODEBUG field named httpmuxgo121. + Set httpmuxgo121=1 to restore the old behavior. +

    +

    WhenElapsedGoroutineEvents
    {{$el.WhenString}}{{$el.Duration}} + Task {{$el.ID}} + (goroutine view) + ({{if .Complete}}complete{{else}}incomplete{{end}}) +
    {{.WhenString}}{{elapsed .Elapsed}}{{.Goroutine}}{{.What}}