From 7cce1d22caf2e14608dc86bc62bda1ad7096a0a1 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Mon, 17 Nov 2025 19:21:02 +0800 Subject: [PATCH 01/50] =?UTF-8?q?feat():=201=E3=80=81=E6=96=B0=E5=A2=9Elog?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/log/adapter/adapter_gf.go | 21 +++ core/log/log.go | 27 +++ core/log/log_config.go | 109 ++++++++++++ core/log/log_manager.go | 292 +++++++++++++++++++++++++++++++++ core/log/log_test.go | 164 ++++++++++++++++++ 5 files changed, 613 insertions(+) create mode 100644 core/log/adapter/adapter_gf.go create mode 100644 core/log/log.go create mode 100644 core/log/log_config.go create mode 100644 core/log/log_manager.go create mode 100644 core/log/log_test.go diff --git a/core/log/adapter/adapter_gf.go b/core/log/adapter/adapter_gf.go new file mode 100644 index 0000000..8325c7f --- /dev/null +++ b/core/log/adapter/adapter_gf.go @@ -0,0 +1,21 @@ +// @Author daixk 2025/11/17 9:35:00 +package adapter + +import ( + "context" + "github.com/gogf/gf/v2/os/glog" +) + +// LogAdapterGf implements log.ILogger using GoFrame glog | 使用 GoFrame glog 实现 ILogger 接口 +type LogAdapterGf struct { + logger *glog.Logger // Internal glog instance | 内部 glog 实例 + ctx context.Context // Context for glog | 日志上下文 +} + +// NewLogAdapterGf creates a new Gf logger adapter | 创建新的 glog 日志适配器 +func NewLogAdapterGf() *LogAdapterGf { + return &LogAdapterGf{ + logger: glog.New(), + ctx: context.Background(), + } +} diff --git a/core/log/log.go b/core/log/log.go new file mode 100644 index 0000000..90f8a73 --- /dev/null +++ b/core/log/log.go @@ -0,0 +1,27 @@ +package log + +// ILogger defines core logging methods | 核心日志输出接口 +type ILogger interface { + Print(v ...any) // Print general log | 普通日志打印 + Printf(format string, v ...any) // Print formatted general log | 普通日志格式化打印 + + Debug(v ...any) // Print debug level log | 调试级别日志 + Debugf(format string, v ...any) // Print formatted debug log | 调试级别格式化日志 + + Info(v ...any) // Print info level log | 信息级别日志 + Infof(format string, v ...any) // Print formatted info log | 信息级别格式化日志 + + Warn(v ...any) // Print warning level log | 警告级别日志 + Warnf(format string, v ...any) // Print formatted warning log | 警告级别格式化日志 + + Error(v ...any) // Print error level log | 错误级别日志 + Errorf(format string, v ...any) // Print formatted error log | 错误级别格式化日志 +} + +// LoggerControl defines configuration and lifecycle control | 日志控制接口 +type LoggerControl interface { + SetLevel(level LogLevel) // Set minimum log level | 设置最小输出级别 + SetPrefix(prefix string) // Set log prefix | 设置日志前缀 + SetStdout(enable bool) // Enable/disable console output | 设置是否输出到终端 + Close() // Close current file handle | 关闭当前日志文件 +} diff --git a/core/log/log_config.go b/core/log/log_config.go new file mode 100644 index 0000000..85635b3 --- /dev/null +++ b/core/log/log_config.go @@ -0,0 +1,109 @@ +package log + +import ( + "os" + "path/filepath" + "time" +) + +// LogLevel defines severity level | 日志级别定义 +type LogLevel int + +const ( + LevelDebug LogLevel = iota // Debug level | 调试级别 + LevelInfo // Info level | 信息级别 + LevelWarn // Warn level | 警告级别 + LevelError // Error level | 错误级别(最高) +) + +const ( + DefaultPrefix = "[SA-TOKEN-GO] " + DefaultFileFormat = "{Y-m-d}.log" // Default log filename format | 默认文件命名格式 + DefaultTimeFormat = "2006-01-02 15:04:05" // Default time format | 默认时间格式 + DefaultDirName = "sa_token_go_log" // Default log directory name | 默认日志目录名 + DefaultRotateSize = 10 * 1024 * 1024 // Rotate threshold (10MB) | 文件滚动大小阈值 + DefaultRotateExpire = 24 * time.Hour // Rotate by time interval (1 day) | 时间滚动间隔 + DefaultRotateBackupLimit = 10 // Max number of backups | 最大备份数量 + DefaultRotateBackupDays = 7 // Retain logs for 7 days | 备份保留天数 +) + +// LoggerConfig defines configuration for logger | 日志配置项 +type LoggerConfig struct { + Path string // Log directory | 日志文件目录 + FileFormat string // File naming format | 文件命名格式 + Prefix string // Log prefix | 日志前缀 + Level LogLevel // Output level | 输出级别 + TimeFormat string // Timestamp format | 时间格式 + Stdout bool // Output to console | 是否输出到控制台 + RotateSize int64 // Max file size before rotation | 文件大小滚动阈值(字节) + RotateExpire time.Duration // Time interval for rotation | 时间间隔滚动切分 + RotateBackupLimit int // Max number of backup files | 最大备份数量 + RotateBackupDays int // Backup retention days | 备份保留天数 +} + +// LoggerBuilder helps construct a Logger with chainable methods | 链式构建器 +type LoggerBuilder struct { + cfg *LoggerConfig +} + +// NewBuilder creates a builder with default config | 创建带默认配置的构建器 +func NewBuilder() *LoggerBuilder { + return &LoggerBuilder{ + cfg: &LoggerConfig{ + TimeFormat: DefaultTimeFormat, + FileFormat: DefaultFileFormat, + Level: LevelInfo, + Stdout: true, + RotateSize: DefaultRotateSize, + RotateExpire: DefaultRotateExpire, + RotateBackupLimit: DefaultRotateBackupLimit, + RotateBackupDays: DefaultRotateBackupDays, + }, + } +} + +func (b *LoggerBuilder) Path(path string) *LoggerBuilder { b.cfg.Path = path; return b } // Set log directory | 设置日志目录 +func (b *LoggerBuilder) FileFormat(format string) *LoggerBuilder { b.cfg.FileFormat = format; return b } // Set file naming format | 设置文件命名格式 +func (b *LoggerBuilder) Prefix(prefix string) *LoggerBuilder { b.cfg.Prefix = prefix; return b } // Set prefix | 设置日志前缀 +func (b *LoggerBuilder) Level(level LogLevel) *LoggerBuilder { b.cfg.Level = level; return b } // Set minimum output level | 设置日志级别 +func (b *LoggerBuilder) TimeFormat(format string) *LoggerBuilder { b.cfg.TimeFormat = format; return b } // Set timestamp format | 设置时间格式 +func (b *LoggerBuilder) Stdout(enable bool) *LoggerBuilder { b.cfg.Stdout = enable; return b } // Enable console output | 是否输出到控制台 +func (b *LoggerBuilder) RotateSize(size int64) *LoggerBuilder { b.cfg.RotateSize = size; return b } // Set rotate size | 设置文件滚动大小阈值 +func (b *LoggerBuilder) RotateExpire(d time.Duration) *LoggerBuilder { + b.cfg.RotateExpire = d + return b +} // Set time interval rotation | 设置时间滚动间隔 +func (b *LoggerBuilder) RotateBackupLimit(limit int) *LoggerBuilder { + b.cfg.RotateBackupLimit = limit + return b +} // Set max backup count | 设置最大备份数量 +func (b *LoggerBuilder) RotateBackupDays(days int) *LoggerBuilder { + b.cfg.RotateBackupDays = days + return b +} // Set backup retention days | 设置备份保留天数 + +// Build constructs a Logger instance | 构建日志实例 +func (b *LoggerBuilder) Build() (*Logger, error) { return NewLoggerWithConfig(b.cfg) } + +// BuildMust constructs a Logger or panics | 构建日志实例(失败则panic) +func (b *LoggerBuilder) BuildMust() *Logger { + l, err := NewLoggerWithConfig(b.cfg) + if err != nil { + panic(err) + } + return l +} + +// ensureDefaultPath ensures log directory exists | 确保日志目录存在 +func ensureDefaultPath(cfg *LoggerConfig) string { + if cfg.Path != "" { + return cfg.Path + } + wd, err := os.Getwd() + if err != nil { + wd = "." + } + path := filepath.Join(wd, DefaultDirName) + _ = os.MkdirAll(path, 0755) + return path +} diff --git a/core/log/log_manager.go b/core/log/log_manager.go new file mode 100644 index 0000000..1866f70 --- /dev/null +++ b/core/log/log_manager.go @@ -0,0 +1,292 @@ +package log + +import ( + "fmt" + "os" + "path/filepath" + "sort" + "strings" + "sync" + "time" +) + +// Logger implements ILogger + LoggerControl | 日志核心实现 +type Logger struct { + cfg *LoggerConfig // Logger configuration | 日志配置 + mu sync.Mutex // Write lock | 写入锁 + curFile *os.File // Current log file handle | 当前文件句柄 + curFileName string // Current log filename | 当前文件名 + curSize int64 // Current file size | 当前文件大小 + lastRotate time.Time // Last rotation timestamp | 上次切分时间 +} + +// NewLoggerWithConfig creates a logger with given config | 创建带配置的日志实例 +func NewLoggerWithConfig(cfg *LoggerConfig) (*Logger, error) { + if cfg == nil { + cfg = &LoggerConfig{} + } + if cfg.TimeFormat == "" { + cfg.TimeFormat = DefaultTimeFormat + } + if cfg.FileFormat == "" { + cfg.FileFormat = DefaultFileFormat + } + if cfg.Prefix == "" { + cfg.Prefix = DefaultPrefix + } + cfg.Path = ensureDefaultPath(cfg) + if err := os.MkdirAll(cfg.Path, 0755); err != nil { + return nil, fmt.Errorf("failed to create log directory: %w", err) + } + return &Logger{cfg: cfg, lastRotate: time.Now()}, nil +} + +// write writes log message to file and stdout | 写入日志信息到文件与终端 +func (l *Logger) write(level LogLevel, msg string) { + if level < l.cfg.Level { + return // Skip lower-level logs | 忽略低于当前级别的日志 + } + + now := time.Now() + line := fmt.Sprintf("%s [%s] %s%s\n", + now.Format(l.cfg.TimeFormat), + l.levelString(level), + l.cfg.Prefix, + msg, + ) + + if l.cfg.Stdout { + fmt.Print(line) // Print to console | 输出到终端 + } + + l.mu.Lock() + defer l.mu.Unlock() + + if err := l.ensureLogFile(now); err != nil { + fmt.Fprintf(os.Stderr, "Logger error: %v\n", err) + return + } + + if l.curFile != nil { + n, _ := l.curFile.WriteString(line) + l.curSize += int64(n) + } + + if l.shouldRotate(now) { + _ = l.rotate() + } +} + +// ensureLogFile ensures log file exists or triggers rotation | 确保文件存在或触发滚动 +func (l *Logger) ensureLogFile(now time.Time) error { + if l.curFile == nil { + return l.openNewFile(now) + } + if l.cfg.RotateExpire > 0 && now.Sub(l.lastRotate) >= l.cfg.RotateExpire { + return l.rotate() + } + return nil +} + +// openNewFile opens new log file for writing | 打开新日志文件 +func (l *Logger) openNewFile(now time.Time) error { + name := l.formatFileName(now) + path := filepath.Join(l.cfg.Path, name) + f, err := os.OpenFile(path, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666) + if err != nil { + return err + } + l.curFile = f + l.curFileName = name + l.curSize = getFileSize(f) + l.lastRotate = now + return nil +} + +// shouldRotate determines if rotation is needed | 判断是否需要滚动切分 +func (l *Logger) shouldRotate(now time.Time) bool { + return (l.cfg.RotateSize > 0 && l.curSize >= l.cfg.RotateSize) || + (l.cfg.RotateExpire > 0 && now.Sub(l.lastRotate) >= l.cfg.RotateExpire) +} + +// rotate performs file rotation and cleanup | 执行日志切分与清理 +func (l *Logger) rotate() error { + if l.curFile == nil { + return nil + } + old := filepath.Join(l.cfg.Path, l.curFileName) + _ = l.curFile.Close() + + // 带毫秒的时间戳 | include milliseconds for safety + now := time.Now() + ts := fmt.Sprintf("%s_%03d", now.Format("20060102_150405"), now.Nanosecond()/1e6) + + base := strings.TrimSuffix(l.curFileName, ".log") + newName := fmt.Sprintf("%s_%s.log", base, ts) + _ = os.Rename(old, filepath.Join(l.cfg.Path, newName)) + + l.curFile = nil + l.curSize = 0 + l.lastRotate = now + + l.cleanupOldLogs() + return l.openNewFile(now) +} + +// cleanupOldLogs removes expired or excessive log files | 清理过期或多余日志文件 +func (l *Logger) cleanupOldLogs() { + files, _ := filepath.Glob(filepath.Join(l.cfg.Path, "*.log")) + if len(files) == 0 { + return + } + + if l.cfg.RotateBackupDays > 0 { + expire := time.Now().AddDate(0, 0, -l.cfg.RotateBackupDays) + for _, f := range files { + if info, err := os.Stat(f); err == nil && info.ModTime().Before(expire) { + _ = os.Remove(f) + } + } + } + + if l.cfg.RotateBackupLimit > 0 && len(files) > l.cfg.RotateBackupLimit { + sort.Slice(files, func(i, j int) bool { + fi, _ := os.Stat(files[i]) + fj, _ := os.Stat(files[j]) + return fi.ModTime().Before(fj.ModTime()) + }) + for _, f := range files[:len(files)-l.cfg.RotateBackupLimit] { + _ = os.Remove(f) + } + } +} + +// formatFileName builds log filename based on time format | 构建日志文件名 +func (l *Logger) formatFileName(t time.Time) string { + name := l.cfg.FileFormat + for k, v := range map[string]string{ + "{Y-m-d}": t.Format("2006-01-02"), + "{Y}": t.Format("2006"), + "{m}": t.Format("01"), + "{d}": t.Format("02"), + "{H}": t.Format("15"), + "{i}": t.Format("04"), + "{s}": t.Format("05"), + } { + name = strings.ReplaceAll(name, k, v) + } + if !strings.HasSuffix(name, ".log") { + name += ".log" + } + return name +} + +// getFileSize returns current file size | 获取文件大小 +func getFileSize(f *os.File) int64 { + info, err := f.Stat() + if err != nil { + return 0 + } + return info.Size() +} + +// levelString converts log level to string | 将日志级别转为字符串 +func (l *Logger) levelString(level LogLevel) string { + switch level { + case LevelDebug: + return "DEBUG" + case LevelInfo: + return "INFO" + case LevelWarn: + return "WARN" + case LevelError: + return "ERROR" + default: + return "UNKNOWN" + } +} + +func (l *Logger) Print(v ...any) { l.write(LevelInfo, fmt.Sprint(v...)) } // 普通日志打印 +func (l *Logger) Printf(f string, v ...any) { l.write(LevelInfo, fmt.Sprintf(f, v...)) } // 普通日志格式化打印 +func (l *Logger) Debug(v ...any) { l.write(LevelDebug, fmt.Sprint(v...)) } // 调试级别日志 +func (l *Logger) Debugf(f string, v ...any) { l.write(LevelDebug, fmt.Sprintf(f, v...)) } // 调试级别格式化日志 +func (l *Logger) Info(v ...any) { l.write(LevelInfo, fmt.Sprint(v...)) } // 信息级别日志 +func (l *Logger) Infof(f string, v ...any) { l.write(LevelInfo, fmt.Sprintf(f, v...)) } // 信息级别格式化日志 +func (l *Logger) Warn(v ...any) { l.write(LevelWarn, fmt.Sprint(v...)) } // 警告级别日志 +func (l *Logger) Warnf(f string, v ...any) { l.write(LevelWarn, fmt.Sprintf(f, v...)) } // 警告级别格式化日志 +func (l *Logger) Error(v ...any) { l.write(LevelError, fmt.Sprint(v...)) } // 错误级别日志 +func (l *Logger) Errorf(f string, v ...any) { l.write(LevelError, fmt.Sprintf(f, v...)) } // 错误级别格式化日志 + +func (l *Logger) SetLevel(level LogLevel) { l.cfg.Level = level } // 设置日志输出级别 +func (l *Logger) SetPrefix(prefix string) { l.cfg.Prefix = prefix } // 设置日志前缀 +func (l *Logger) SetStdout(enable bool) { l.cfg.Stdout = enable } // 设置终端输出开关 + +// SetConfig dynamically replaces logger configuration | 动态替换日志配置 +func (l *Logger) SetConfig(cfg *LoggerConfig) { + l.mu.Lock() + defer l.mu.Unlock() + l.cfg = cfg +} + +// Close safely closes current file | 安全关闭日志文件 +func (l *Logger) Close() { + l.mu.Lock() + defer l.mu.Unlock() + if l.curFile != nil { + _ = l.curFile.Close() + l.curFile = nil + } +} + +// LogPath returns current log directory | 获取日志目录路径 +func (l *Logger) LogPath() string { + if l.cfg == nil { + return "" + } + return l.cfg.Path +} + +// Flush forces the log file to sync to disk | 强制刷新日志到磁盘 +func (l *Logger) Flush() { + l.mu.Lock() + defer l.mu.Unlock() + if l.curFile != nil { + _ = l.curFile.Sync() + } +} + +// DefaultLogger is the global shared logger | 全局默认日志实例 +var DefaultLogger *Logger + +func init() { + l, err := NewBuilder(). + Prefix(DefaultPrefix). + Level(LevelInfo). + Stdout(true). + Build() + if err != nil { + _, _ = fmt.Fprintf(os.Stderr, "[SA-TOKEN-GO] logger init failed: %v\n", err) + l = &Logger{cfg: &LoggerConfig{Stdout: true, Prefix: DefaultPrefix}} + } + DefaultLogger = l +} + +// Print 全局普通日志 | Global Print log +func Print(v ...any) { DefaultLogger.Print(v...) } +func Printf(f string, v ...any) { DefaultLogger.Printf(f, v...) } + +// Debug 全局调试日志 | Global Debug log +func Debug(v ...any) { DefaultLogger.Debug(v...) } +func Debugf(f string, v ...any) { DefaultLogger.Debugf(f, v...) } + +// Info 全局信息日志 | Global Info log +func Info(v ...any) { DefaultLogger.Info(v...) } +func Infof(f string, v ...any) { DefaultLogger.Infof(f, v...) } + +// Warn 全局警告日志 | Global Warn log +func Warn(v ...any) { DefaultLogger.Warn(v...) } +func Warnf(f string, v ...any) { DefaultLogger.Warnf(f, v...) } + +// Error 全局错误日志 | Global Error log +func Error(v ...any) { DefaultLogger.Error(v...) } +func Errorf(f string, v ...any) { DefaultLogger.Errorf(f, v...) } diff --git a/core/log/log_test.go b/core/log/log_test.go new file mode 100644 index 0000000..bc68606 --- /dev/null +++ b/core/log/log_test.go @@ -0,0 +1,164 @@ +package log + +import ( + "context" + "fmt" + "github.com/gogf/gf/v2/os/glog" + "os" + "path/filepath" + "testing" + "time" +) + +// TestAllLevelsAndRotation 测试所有日志级别与切分逻辑 | Test all log levels and rotation +func TestAllLevelsAndRotation(t *testing.T) { + logger, err := NewBuilder(). + //Prefix("[TEST] "). + Level(LevelDebug). + Stdout(true). + RotateSize(2 * 1024). // 超过2KB切分 | rotate every 2KB + RotateExpire(2 * time.Second). // 每2秒自动切分 | rotate every 2s + RotateBackupLimit(3). // 保留3个文件 | keep 3 backups + RotateBackupDays(1). // 保留1天 | keep 1 day + Build() + if err != nil { + t.Fatalf("failed to build logger: %v", err) + } + defer logger.Close() + + logger.Print("Print level message") + logger.Printf("Printf formatted %s", "message") + + logger.Debug("Debug message") + logger.Debugf("Debugf formatted %s", "debugging") + + logger.Info("Info message") + logger.Infof("Infof formatted %s", "information") + + logger.Warn("Warning message") + logger.Warnf("Warningf formatted %s", "warning") + + logger.Error("Error message") + logger.Errorf("Errorf formatted %s", "error") + + t.Log("all log levels written successfully") + + for i := 0; i < 300; i++ { + switch i % 4 { + case 0: + logger.Debugf("Rotation Debug line %d", i) + case 1: + logger.Infof("Rotation Info line %d", i) + case 2: + logger.Warnf("Rotation Warning line %d", i) + default: + logger.Errorf("Rotation Error line %d", i) + } + time.Sleep(50 * time.Millisecond) + } + + time.Sleep(4 * time.Second) + + files, _ := filepath.Glob(filepath.Join(logger.LogPath(), "*.log")) + if len(files) == 0 { + t.Fatal("no log files generated") + } + t.Logf("%d log files generated under: %s", len(files), logger.LogPath()) + for _, f := range files { + info, _ := os.Stat(f) + t.Logf(" - %s (%d bytes)", filepath.Base(f), info.Size()) + } +} + +// BenchmarkSaTokenLogger_Sequential 顺序写入性能测试 | Sequential benchmark +func BenchmarkSaTokenLogger_Sequential(b *testing.B) { + dir := filepath.Join(getProjectDir(), "bench_sa_seq") + _ = os.MkdirAll(dir, 0755) + + logger, _ := NewBuilder(). + Path(dir). + Stdout(false). + RotateSize(0). + Build() + defer logger.Close() + + b.ResetTimer() + for i := 0; i < b.N; i++ { + logger.Infof("sequential benchmark log line %d", i) + } + b.StopTimer() +} + +// BenchmarkSaTokenLogger_Parallel 并发写入性能测试 | Parallel benchmark +func BenchmarkSaTokenLogger_Parallel(b *testing.B) { + dir := filepath.Join(getProjectDir(), "bench_sa_parallel") + _ = os.MkdirAll(dir, 0755) + + logger, _ := NewBuilder(). + Path(dir). + Stdout(false). + RotateSize(0). + Build() + defer logger.Close() + + b.ResetTimer() + b.RunParallel(func(pb *testing.PB) { + i := 0 + for pb.Next() { + logger.Infof("parallel benchmark log line %d", i) + i++ + } + }) + b.StopTimer() +} + +// BenchmarkGfLogger_Sequential GoFrame glog 顺序写入 | GF sequential benchmark +func BenchmarkGfLogger_Sequential(b *testing.B) { + dir := filepath.Join(getProjectDir(), "bench_gf_seq") + _ = os.MkdirAll(dir, 0755) + + logger := glog.New() + logger.SetStdoutPrint(false) + logger.SetPath(dir) + + b.ResetTimer() + for i := 0; i < b.N; i++ { + logger.Infof(context.Background(), "gflog sequential line %d", i) + } + b.StopTimer() +} + +// BenchmarkGfLogger_Parallel GoFrame glog 并发写入 | GF parallel benchmark +func BenchmarkGfLogger_Parallel(b *testing.B) { + dir := filepath.Join(getProjectDir(), "bench_gf_parallel") + _ = os.MkdirAll(dir, 0755) + + logger := glog.New() + logger.SetStdoutPrint(false) + logger.SetPath(dir) + + b.ResetTimer() + b.RunParallel(func(pb *testing.PB) { + i := 0 + for pb.Next() { + logger.Infof(context.Background(), "gflog parallel line %d", i) + i++ + } + }) + b.StopTimer() +} + +// TestSummary 输出运行方式 | Print run commands +func TestSummary(t *testing.T) { + fmt.Println("run test: go test -v ./core/log") + fmt.Println("run benchmark: go test -bench=. -benchmem ./core/log") +} + +// getProjectDir 获取当前项目根目录 | Get project root path +func getProjectDir() string { + wd, err := os.Getwd() + if err != nil { + return "." + } + return wd +} From e58e35bde8e0cf82495ad79a371ec801526c7d5b Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Wed, 19 Nov 2025 14:39:21 +0800 Subject: [PATCH 02/50] =?UTF-8?q?feat():=201=E3=80=81=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E9=A1=B6=E4=BA=BA=E4=B8=8B=E7=BA=BF=E9=83=A8=E5=88=86=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E5=AE=9E=E7=8E=B0=202=E3=80=81=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E5=86=97=E4=BD=99=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/listener/listener.go | 3 + core/manager/manager.go | 127 ++++++++++++++++++++++++++++---------- 2 files changed, 98 insertions(+), 32 deletions(-) diff --git a/core/listener/listener.go b/core/listener/listener.go index b998117..88bad1c 100644 --- a/core/listener/listener.go +++ b/core/listener/listener.go @@ -19,6 +19,9 @@ const ( // EventKickout fired when a user is forcibly logged out | 用户被踢下线事件 EventKickout Event = "kickout" + // EventReplace fired when a user is replaced by a new login | 用户被顶下线事件 + EventReplace Event = "replace" + // EventDisable fired when an account is disabled | 账号被禁用事件 EventDisable Event = "disable" diff --git a/core/manager/manager.go b/core/manager/manager.go index 28c70a2..d30bce2 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -184,15 +184,10 @@ func (m *Manager) Login(loginID string, device ...string) (string, error) { // Handle concurrent login behavior | 处理并发登录逻辑 if !m.config.IsConcurrent { - // Concurrent login not allowed → kick out previous login on same device | 不允许并发登录 → 踢掉同设备下之前的 Token - _ = m.kickout(loginID, deviceType) + // Concurrent login not allowed → replace previous login on the same device | 不允许并发登录 → 顶掉同设备下已存在的登录会话 + _ = m.replace(loginID, deviceType) } else if m.config.MaxLoginCount > 0 && !m.config.IsShare { - // MaxLoginCount = 0 → 不允许任何 Token - if m.config.MaxLoginCount == 0 { - return "", ErrLoginLimitExceeded - } - // Concurrent login allowed but limited by MaxLoginCount | 允许并发登录但受 MaxLoginCount 限制 // This limit applies to all tokens of this account across devices | 该限制针对账号所有设备的登录 Token 数量 tokens, _ := m.GetTokenValueListByLoginID(loginID) @@ -316,7 +311,7 @@ func (m *Manager) Logout(loginID string, device ...string) error { return nil } - return m.removeTokenChain(tokenStr, false, listener.EventLogout) + return m.removeTokenChain(tokenStr, false, nil, listener.EventLogout) } // LogoutByToken Logout by token | 根据Token登出 @@ -325,7 +320,7 @@ func (m *Manager) LogoutByToken(tokenValue string) error { return nil } - return m.removeTokenChain(tokenValue, false, listener.EventLogout) + return m.removeTokenChain(tokenValue, false, nil, listener.EventLogout) } // kickout Kick user offline (private) | 踢人下线(私有) @@ -341,7 +336,7 @@ func (m *Manager) kickout(loginID string, device string) error { return nil } - return m.removeTokenChain(tokenStr, false, listener.EventKickout) + return m.removeTokenChain(tokenStr, false, nil, listener.EventKickout) } // Kickout Kick user offline (public method) | 踢人下线(公开方法) @@ -352,7 +347,7 @@ func (m *Manager) Kickout(loginID string, device ...string) error { // kickoutByToken Kick user offline (private) | 根据Token踢人下线(私有) func (m *Manager) kickoutByToken(tokenValue string) error { - return m.removeTokenChain(tokenValue, false, listener.EventKickout) + return m.removeTokenChain(tokenValue, false, nil, listener.EventKickout) } // KickoutByToken Kick user offline (public method) | 根据Token踢人下线(公开方法) @@ -360,6 +355,41 @@ func (m *Manager) KickoutByToken(tokenValue string) error { return m.kickoutByToken(tokenValue) } +// replace Replace user offline by login ID and device (private) | 根据账号和设备顶人下线(私有) +func (m *Manager) replace(loginID string, device string) error { + accountKey := m.getAccountKey(loginID, device) + tokenValue, err := m.storage.Get(accountKey) + if err != nil || tokenValue == nil { + return nil // No active login to replace | 无活跃登录,无需处理 + } + + tokenStr, ok := assertString(tokenValue) + if !ok { + return nil + } + + return m.removeTokenChain(tokenStr, false, nil, listener.EventReplace) +} + +// Replace Replace user offline by login ID and device (public method) | 根据账号和设备顶人下线(公开方法) +func (m *Manager) Replace(loginID string, device ...string) error { + deviceType := getDevice(device) + return m.replace(loginID, deviceType) +} + +// replaceByToken Replace user offline by token (private) | 根据Token顶人下线(私有) +func (m *Manager) replaceByToken(tokenValue string) error { + return m.removeTokenChain(tokenValue, false, nil, listener.EventReplace) +} + +// ReplaceByToken Replace user offline by token (public method) | 根据Token顶人下线(公开方法) +func (m *Manager) ReplaceByToken(tokenValue string) error { + if tokenValue == "" { + return nil + } + return m.replaceByToken(tokenValue) +} + // ============ Token Validation | Token验证 ============ // IsLogin Checks if user is logged in | 检查是否登录 @@ -367,10 +397,21 @@ func (m *Manager) IsLogin(tokenValue string) bool { if tokenValue == "" { return false } - if _, err := m.getTokenInfo(tokenValue, false); err != nil { + info, err := m.getTokenInfo(tokenValue) + if err != nil { return false } + if m.config.ActiveTimeout > 0 { + now := time.Now().Unix() + // Check if token has exceeded active timeout | 检查 Token 是否超过活跃超时时间 + if now-info.ActiveTime > m.config.ActiveTimeout { + // Force logout and clean up token data | 强制登出并清理 Token 相关数据 + _ = m.removeTokenChain(tokenValue, false, info, listener.EventKickout) + return false + } + } + // Async auto-renew for better performance | 异步自动续期(提高性能) // Note: ActiveTimeout feature removed to comply with Java sa-token design if m.config.AutoRenew && m.config.Timeout > 0 { @@ -380,7 +421,7 @@ func (m *Manager) IsLogin(tokenValue string) bool { // Perform renewal if TTL is below MaxRefresh threshold and RenewInterval allows | TTL和RenewInterval同时满足条件才续期 if ttlSeconds > 0 && (m.config.MaxRefresh <= 0 || ttlSeconds <= m.config.MaxRefresh) && (m.config.RenewInterval <= 0 || !m.storage.Exists(m.getRenewKey(tokenValue))) { - renewFunc := func() { m.renewToken(tokenValue) } + renewFunc := func() { m.renewToken(tokenValue, info) } // Submit to pool if configured, otherwise use goroutine | 使用续期池或协程执行续期 if m.renewPool != nil { @@ -410,11 +451,21 @@ func (m *Manager) CheckLoginWithState(tokenValue string) (bool, error) { } // Try to get token info with state check | 尝试获取Token信息(包含状态检查) - _, err := m.getTokenInfo(tokenValue) + info, err := m.getTokenInfo(tokenValue) if err != nil { return false, err } + if m.config.ActiveTimeout > 0 { + now := time.Now().Unix() + // Check if token has exceeded active timeout | 检查 Token 是否超过活跃超时时间 + if now-info.ActiveTime > m.config.ActiveTimeout { + // Force logout and clean up token data | 强制登出并清理 Token 相关数据 + _ = m.removeTokenChain(tokenValue, false, info, listener.EventKickout) + return false, ErrTokenReplaced + } + } + // Async auto-renew for better performance | 异步自动续期(提高性能) // Note: ActiveTimeout feature removed to comply with Java sa-token design if m.config.AutoRenew && m.config.Timeout > 0 { @@ -423,7 +474,7 @@ func (m *Manager) CheckLoginWithState(tokenValue string) (bool, error) { // Perform renewal if TTL is below MaxRefresh threshold and RenewInterval allows | TTL和RenewInterval同时满足条件才续期 if ttlSeconds > 0 && (m.config.MaxRefresh <= 0 || ttlSeconds <= m.config.MaxRefresh) && (m.config.RenewInterval <= 0 || !m.storage.Exists(m.getRenewKey(tokenValue))) { - renewFunc := func() { m.renewToken(tokenValue) } + renewFunc := func() { m.renewToken(tokenValue, info) } // Submit to pool if configured, otherwise use goroutine | 使用续期池或协程执行续期 if m.renewPool != nil { @@ -499,7 +550,7 @@ func (m *Manager) Disable(loginID string, duration time.Duration) error { if err == nil && len(tokens) > 0 { for _, tokenValue := range tokens { // Force kick out each active token | 强制踢出所有活跃的Token - _ = m.removeTokenChain(tokenValue, true, listener.EventLogout) + _ = m.removeTokenChain(tokenValue, true, nil, listener.EventLogout) } } @@ -817,7 +868,7 @@ func (m *Manager) getTokenInfo(tokenValue string, checkState ...bool) (*TokenInf case string(TokenStateKickout): return nil, ErrTokenKickout // 被踢下线 case string(TokenStateReplaced): - return nil, ErrTokenReplaced // 被顶号下线 + return nil, ErrTokenReplaced // 被顶下线 } } @@ -831,11 +882,14 @@ func (m *Manager) getTokenInfo(tokenValue string, checkState ...bool) (*TokenInf } // renewToken Renews token expiration asynchronously | 异步续期Token -func (m *Manager) renewToken(tokenValue string) { +func (m *Manager) renewToken(tokenValue string, info *TokenInfo) { tokenKey := m.getTokenKey(tokenValue) - info, err := m.getTokenInfo(tokenValue) - if err != nil { - return + if info == nil { + var err error + info, err = m.getTokenInfo(tokenValue) + if err != nil { + return + } } // Basic validation | 基本校验 @@ -876,18 +930,21 @@ func (m *Manager) renewToken(tokenValue string) { } // removeTokenChain Removes all related keys and triggers event | 删除Token相关的所有键并触发事件 -func (m *Manager) removeTokenChain(tokenValue string, destroySession bool, event listener.Event) error { - if tokenValue == "" { - return nil - } - - // Get TokenInfo | 获取Token信息 - info, err := m.getTokenInfo(tokenValue, false) - if err != nil { - return err - } +func (m *Manager) removeTokenChain(tokenValue string, destroySession bool, info *TokenInfo, event listener.Event) error { if info == nil { - return ErrInvalidTokenData + if tokenValue == "" { + return nil + } + + // Get TokenInfo | 获取Token信息 + var err error + info, err = m.getTokenInfo(tokenValue, false) + if err != nil { + return err + } + if info == nil { + return ErrInvalidTokenData + } } tokenKey := m.getTokenKey(tokenValue) // Token存储键 | Token storage key @@ -911,6 +968,12 @@ func (m *Manager) removeTokenChain(tokenValue string, destroySession bool, event _ = m.storage.Delete(accountKey) // Delete account mapping | 删除账号映射 _ = m.storage.Delete(renewKey) // Delete renew key | 删除续期标记 + // EventReplace User replaced by new login (keep session) | 用户被顶下线(保留Session) + case listener.EventReplace: + _ = m.storage.SetKeepTTL(tokenKey, string(TokenStateReplaced)) // Mark as replaced but keep TTL | 标记为被顶下线,保留原TTL + _ = m.storage.Delete(accountKey) // Remove account → token mapping | 删除账号映射 + _ = m.storage.Delete(renewKey) // Remove renew mark | 删除续期标记 + // Default Unknown event type | 未知事件类型(默认删除) default: _ = m.storage.Delete(tokenKey) From 9f7af46fd52bbe29dfa11feec947571e71290a7d Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Wed, 19 Nov 2025 14:45:11 +0800 Subject: [PATCH 03/50] =?UTF-8?q?feat():=201=E3=80=81=E6=96=B0=E5=A2=9Estp?= =?UTF-8?q?util=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- stputil/stputil.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/stputil/stputil.go b/stputil/stputil.go index 4a84240..da44568 100644 --- a/stputil/stputil.go +++ b/stputil/stputil.go @@ -77,6 +77,11 @@ func CheckLogin(tokenValue string) error { return GetManager().CheckLogin(tokenValue) } +// CheckLoginWithState checks the login status (returns error to determine the reason if not logged in) | 检查登录状态(未登录时根据错误确定原因) +func CheckLoginWithState(tokenValue string) (bool, error) { + return GetManager().CheckLoginWithState(tokenValue) +} + // GetLoginID gets the login ID from token | 从Token获取登录ID func GetLoginID(tokenValue string) (string, error) { return GetManager().GetLoginID(tokenValue) From 5cd0d40065d17454962dff0bde886f96cd6aa61d Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Wed, 19 Nov 2025 21:39:44 +0800 Subject: [PATCH 04/50] =?UTF-8?q?feat():=201=E3=80=81=E5=8E=BB=E6=8E=89?= =?UTF-8?q?=E5=A4=9A=E4=BD=99=E8=B0=83=E8=AF=95=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/session/session.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/core/session/session.go b/core/session/session.go index 1973588..7982d4e 100644 --- a/core/session/session.go +++ b/core/session/session.go @@ -77,7 +77,6 @@ func (s *Session) SetMulti(values map[string]any, ttl ...time.Duration) error { } if len(ttl) > 0 && ttl[0] > 0 { - fmt.Println("ttl:", ttl[0]) return s.saveWithTTL(ttl[0]) } @@ -226,7 +225,6 @@ func (s *Session) saveWithTTL(ttl time.Duration) error { } key := s.getStorageKey() - fmt.Println(ttl) return s.storage.Set(key, string(data), ttl) } From 0fadeef75aa9c5d42ac89ae24c3da98300677ac5 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Thu, 20 Nov 2025 09:21:57 +0800 Subject: [PATCH 05/50] =?UTF-8?q?feat():=201=E3=80=81=E5=8E=BB=E6=8E=89?= =?UTF-8?q?=E5=A4=9A=E4=BD=99=E8=B0=83=E8=AF=95=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/manager/manager.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/manager/manager.go b/core/manager/manager.go index d30bce2..bd93ef5 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -462,7 +462,7 @@ func (m *Manager) CheckLoginWithState(tokenValue string) (bool, error) { if now-info.ActiveTime > m.config.ActiveTimeout { // Force logout and clean up token data | 强制登出并清理 Token 相关数据 _ = m.removeTokenChain(tokenValue, false, info, listener.EventKickout) - return false, ErrTokenReplaced + return false, ErrTokenKickout } } From 15755514038db69bd1c0da030ebdfe74b2422d8e Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Thu, 20 Nov 2025 13:45:46 +0800 Subject: [PATCH 06/50] =?UTF-8?q?feat():=201=E3=80=81=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=9D=83=E9=99=90=E8=A7=92=E8=89=B2Set=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E6=96=B0=E5=A2=9E=E5=8E=BB=E9=87=8D=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/manager/manager.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/core/manager/manager.go b/core/manager/manager.go index bd93ef5..b0cb86f 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -623,6 +623,11 @@ func (m *Manager) SetPermissions(loginID string, permissions []string) error { if err != nil { return err } + permissionsFromSession, b := sess.Get(SessionKeyPermissions) + if b { + permissions = append(permissions, m.toStringSlice(permissionsFromSession)...) + permissions = removeDuplicateStrings(permissions) + } return sess.Set(SessionKeyPermissions, permissions, m.getExpiration()) } @@ -717,6 +722,11 @@ func (m *Manager) SetRoles(loginID string, roles []string) error { if err != nil { return err } + rolesFromSession, b := sess.Get(SessionKeyRoles) + if b { + roles = append(roles, m.toStringSlice(rolesFromSession)...) + roles = removeDuplicateStrings(roles) + } return sess.Set(SessionKeyRoles, roles, m.getExpiration()) } @@ -1015,6 +1025,20 @@ func (m *Manager) toStringSlice(v any) []string { } } +// removeDuplicateStrings removes duplicate elements from []string | 去重字符串切片 +func removeDuplicateStrings(list []string) []string { + seen := make(map[string]struct{}, len(list)) + result := make([]string, 0, len(list)) + + for _, v := range list { + if _, exists := seen[v]; !exists { + seen[v] = struct{}{} + result = append(result, v) + } + } + return result +} + // ============ Event Management | 事件管理 ============ // RegisterFunc registers a function as an event listener | 注册函数作为事件监听器 From 45e4067ce5f630df004670a8a2991b3f4ef11f48 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Thu, 20 Nov 2025 13:56:18 +0800 Subject: [PATCH 07/50] =?UTF-8?q?feat():=201=E3=80=81=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E8=A7=92=E8=89=B2=E4=B8=8E=E6=9D=83=E9=99=90?= =?UTF-8?q?=E7=9A=84=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/manager/manager.go | 72 +++++++++++++++++++++++++++++++++++++++++ stputil/stputil.go | 10 ++++++ 2 files changed, 82 insertions(+) diff --git a/core/manager/manager.go b/core/manager/manager.go index b0cb86f..b59ea88 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -631,6 +631,42 @@ func (m *Manager) SetPermissions(loginID string, permissions []string) error { return sess.Set(SessionKeyPermissions, permissions, m.getExpiration()) } +// RemovePermissions removes specified permissions for user | 删除用户指定权限 +func (m *Manager) RemovePermissions(loginID string, permissions []string) error { + sess, err := m.GetSession(loginID) + if err != nil { + return err + } + + // Load existing permissions | 加载已有权限 + existing, ok := sess.Get(SessionKeyPermissions) + if !ok { + return nil // No permissions to remove | 没有权限可删除 + } + + existingPerms := m.toStringSlice(existing) + if len(existingPerms) == 0 { + return nil + } + + // Build a set for fast lookup of permissions to remove | 构建待删除权限集合 + removeSet := make(map[string]struct{}, len(permissions)) + for _, p := range permissions { + removeSet[p] = struct{}{} + } + + // Filter out permissions to be removed | 过滤掉需要删除的权限 + newPerms := make([]string, 0, len(existingPerms)) + for _, p := range existingPerms { + if _, shouldRemove := removeSet[p]; !shouldRemove { + newPerms = append(newPerms, p) + } + } + + // Save updated permissions | 保存更新后的权限列表 + return sess.Set(SessionKeyPermissions, newPerms, m.getExpiration()) +} + // GetPermissions Gets permission list | 获取权限列表 func (m *Manager) GetPermissions(loginID string) ([]string, error) { sess, err := m.GetSession(loginID) @@ -730,6 +766,42 @@ func (m *Manager) SetRoles(loginID string, roles []string) error { return sess.Set(SessionKeyRoles, roles, m.getExpiration()) } +// RemoveRoles removes specified roles for user | 删除用户指定角色 +func (m *Manager) RemoveRoles(loginID string, roles []string) error { + sess, err := m.GetSession(loginID) + if err != nil { + return err + } + + // Load existing roles | 加载已有角色 + existing, ok := sess.Get(SessionKeyRoles) + if !ok { + return nil // No roles to remove | 没有角色可删除 + } + + existingRoles := m.toStringSlice(existing) + if len(existingRoles) == 0 { + return nil + } + + // Build lookup set for roles to remove | 构建待删除角色集合 + removeSet := make(map[string]struct{}, len(roles)) + for _, r := range roles { + removeSet[r] = struct{}{} + } + + // Filter existing roles | 过滤掉需要删除的角色 + newRoles := make([]string, 0, len(existingRoles)) + for _, r := range existingRoles { + if _, remove := removeSet[r]; !remove { + newRoles = append(newRoles, r) + } + } + + // Save updated roles | 保存更新后的角色列表 + return sess.Set(SessionKeyRoles, newRoles, m.getExpiration()) +} + // GetRoles Gets role list | 获取角色列表 func (m *Manager) GetRoles(loginID string) ([]string, error) { sess, err := m.GetSession(loginID) diff --git a/stputil/stputil.go b/stputil/stputil.go index da44568..36d6387 100644 --- a/stputil/stputil.go +++ b/stputil/stputil.go @@ -155,6 +155,11 @@ func SetPermissions(loginID interface{}, permissions []string) error { return GetManager().SetPermissions(toString(loginID), permissions) } +// RemovePermissions removes specified permissions for a login ID | 删除用户指定权限 +func RemovePermissions(loginID interface{}, permissions []string) error { + return GetManager().RemovePermissions(toString(loginID), permissions) +} + // GetPermissions gets permission list | 获取权限列表 func GetPermissions(loginID interface{}) ([]string, error) { return GetManager().GetPermissions(toString(loginID)) @@ -182,6 +187,11 @@ func SetRoles(loginID interface{}, roles []string) error { return GetManager().SetRoles(toString(loginID), roles) } +// RemoveRoles removes specified roles for a login ID | 删除用户指定角色 +func RemoveRoles(loginID interface{}, roles []string) error { + return GetManager().RemoveRoles(toString(loginID), roles) +} + // GetRoles gets role list | 获取角色列表 func GetRoles(loginID interface{}) ([]string, error) { return GetManager().GetRoles(toString(loginID)) From 02a275ae1035add3bd4f18718fae87312ac7bb6a Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Tue, 25 Nov 2025 21:34:59 +0800 Subject: [PATCH 08/50] =?UTF-8?q?feat():=201=E3=80=81=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E5=92=8C=E5=BA=8F=E5=88=97=E5=8C=96=EF=BC=88?= =?UTF-8?q?=E5=BE=85=E6=B5=8B=E8=AF=95=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/codec/codec.go | 82 ++++ core/codec/codec_global.go | 28 ++ core/go.mod | 2 + core/go.sum | 9 + core/log/adapter/adapter_gf.go | 21 - core/log/log_config.go | 137 +++++-- core/log/log_global.go | 55 +++ core/log/log_manager.go | 676 ++++++++++++++++++++++++--------- core/log/log_test.go | 164 -------- core/manager/manager.go | 143 ++++--- core/pool/pool.go | 7 +- core/serror/errors.go | 40 ++ core/session/session.go | 50 +-- go.work.sum | 144 ++++++- 14 files changed, 1049 insertions(+), 509 deletions(-) create mode 100644 core/codec/codec.go create mode 100644 core/codec/codec_global.go delete mode 100644 core/log/adapter/adapter_gf.go create mode 100644 core/log/log_global.go delete mode 100644 core/log/log_test.go create mode 100644 core/serror/errors.go diff --git a/core/codec/codec.go b/core/codec/codec.go new file mode 100644 index 0000000..b6ccb6a --- /dev/null +++ b/core/codec/codec.go @@ -0,0 +1,82 @@ +// @Author daixk 2025/11/21 9:57:00 +package codec + +import ( + "encoding/json" + "github.com/click33/sa-token-go/core/serror" + "github.com/vmihailenco/msgpack/v5" +) + +// Serializer defines interface for encoding/decoding TokenInfo | TokenInfo 编解码接口 +type Serializer interface { + Marshal(v any) ([]byte, error) // Encode to bytes | 编码 + Unmarshal(data []byte, v any) error // Decode to struct | 解码 + Name() string // Serializer name | 序列化器名称(例如 json/msgpack) +} + +// Built-in serializer names | 内置序列化器名称 +const ( + SerializerJSON = "json" + SerializerMsgPack = "msgpack" +) + +// -------------------- JSON Serializer -------------------- + +type JSONSerializer struct{} + +func (s *JSONSerializer) Marshal(v any) ([]byte, error) { + return json.Marshal(v) +} + +func (s *JSONSerializer) Unmarshal(data []byte, v any) error { + return json.Unmarshal(data, v) +} + +func (s *JSONSerializer) Name() string { return SerializerJSON } + +// -------------------- MsgPack Serializer -------------------- + +type MsgPackSerializer struct{} + +func (s *MsgPackSerializer) Marshal(v any) ([]byte, error) { + return msgpack.Marshal(v) +} + +func (s *MsgPackSerializer) Unmarshal(data []byte, v any) error { + return msgpack.Unmarshal(data, v) +} + +func (s *MsgPackSerializer) Name() string { return SerializerMsgPack } + +// UnifyToBytes converts storage return (string or []byte) into []byte safely. +func UnifyToBytes(data any) ([]byte, error) { + if data == nil { + return nil, serror.ErrInvalidTokenData + } + + switch v := data.(type) { + case []byte: + return v, nil + case string: + return []byte(v), nil + default: + return nil, serror.ErrInvalidTokenData + } +} + +// NewSerializer 根据名称创建对应的序列化器 +func NewSerializer(name string) Serializer { + switch name { + case SerializerJSON, "": + return &JSONSerializer{} + case SerializerMsgPack: + return &MsgPackSerializer{} + default: + return &JSONSerializer{} + } +} + +// NewSerializerMust 根据名称创建对应的序列化器,出现错误直接panic +func NewSerializerMust(name string) Serializer { + return NewSerializer(name) +} diff --git a/core/codec/codec_global.go b/core/codec/codec_global.go new file mode 100644 index 0000000..ce8ee23 --- /dev/null +++ b/core/codec/codec_global.go @@ -0,0 +1,28 @@ +// @Author daixk 2025/11/24 22:05:00 +package codec + +import "sync" + +// DefaultSerializer is the global serializer (JSON recommended) | 全局默认序列化器(推荐使用 JSON) +var ( + DefaultSerializer Serializer = &JSONSerializer{} + serializerMu sync.RWMutex +) + +// SetDefaultSerializer sets the global serializer | 设置全局默认序列化器 +func SetDefaultSerializer(s Serializer) { + if s == nil { + return + } + serializerMu.Lock() + DefaultSerializer = s + serializerMu.Unlock() +} + +// GetDefaultSerializer gets the global serializer | 获取全局默认序列化器 +func GetDefaultSerializer() Serializer { + serializerMu.RLock() + s := DefaultSerializer + serializerMu.RUnlock() + return s +} diff --git a/core/go.mod b/core/go.mod index 5eb5cc5..5f23cc2 100644 --- a/core/go.mod +++ b/core/go.mod @@ -6,11 +6,13 @@ require ( github.com/golang-jwt/jwt/v5 v5.2.2 github.com/google/uuid v1.6.0 github.com/panjf2000/ants/v2 v2.11.3 + github.com/vmihailenco/msgpack/v5 v5.4.1 ) require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/stretchr/testify v1.11.1 // indirect + github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect golang.org/x/sync v0.16.0 // indirect ) diff --git a/core/go.sum b/core/go.sum index ec90348..02550a9 100644 --- a/core/go.sum +++ b/core/go.sum @@ -1,11 +1,20 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= +github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg= github.com/panjf2000/ants/v2 v2.11.3/go.mod h1:8u92CYMUc6gyvTIw8Ru7Mt7+/ESnJahz5EVtqfrilek= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/vmihailenco/msgpack/v5 v5.4.1 h1:cQriyiUvjTwOHg8QZaPihLWeRAAVoCpE00IUPn0Bjt8= +github.com/vmihailenco/msgpack/v5 v5.4.1/go.mod h1:GaZTsDaehaPpQVyxrf5mtQlH+pc21PIudVV/E3rRQok= +github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= +github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/core/log/adapter/adapter_gf.go b/core/log/adapter/adapter_gf.go deleted file mode 100644 index 8325c7f..0000000 --- a/core/log/adapter/adapter_gf.go +++ /dev/null @@ -1,21 +0,0 @@ -// @Author daixk 2025/11/17 9:35:00 -package adapter - -import ( - "context" - "github.com/gogf/gf/v2/os/glog" -) - -// LogAdapterGf implements log.ILogger using GoFrame glog | 使用 GoFrame glog 实现 ILogger 接口 -type LogAdapterGf struct { - logger *glog.Logger // Internal glog instance | 内部 glog 实例 - ctx context.Context // Context for glog | 日志上下文 -} - -// NewLogAdapterGf creates a new Gf logger adapter | 创建新的 glog 日志适配器 -func NewLogAdapterGf() *LogAdapterGf { - return &LogAdapterGf{ - logger: glog.New(), - ctx: context.Background(), - } -} diff --git a/core/log/log_config.go b/core/log/log_config.go index 85635b3..da82dff 100644 --- a/core/log/log_config.go +++ b/core/log/log_config.go @@ -10,48 +10,50 @@ import ( type LogLevel int const ( - LevelDebug LogLevel = iota // Debug level | 调试级别 - LevelInfo // Info level | 信息级别 - LevelWarn // Warn level | 警告级别 - LevelError // Error level | 错误级别(最高) + LevelDebug LogLevel = iota + 1 // Debug level | 调试级别 + LevelInfo // Info level | 信息级别 + LevelWarn // Warn level | 警告级别 + LevelError // Error level | 错误级别(最高) ) const ( - DefaultPrefix = "[SA-TOKEN-GO] " - DefaultFileFormat = "{Y-m-d}.log" // Default log filename format | 默认文件命名格式 - DefaultTimeFormat = "2006-01-02 15:04:05" // Default time format | 默认时间格式 - DefaultDirName = "sa_token_go_log" // Default log directory name | 默认日志目录名 - DefaultRotateSize = 10 * 1024 * 1024 // Rotate threshold (10MB) | 文件滚动大小阈值 - DefaultRotateExpire = 24 * time.Hour // Rotate by time interval (1 day) | 时间滚动间隔 - DefaultRotateBackupLimit = 10 // Max number of backups | 最大备份数量 - DefaultRotateBackupDays = 7 // Retain logs for 7 days | 备份保留天数 + DefaultPrefix = "[SA-TOKEN-GO] " // Default log prefix | 默认日志前缀 + DefaultFileFormat = "SA-TOKEN-GO_{Y}-{m}-{d}.log" // Default log filename format | 默认文件命名格式 + DefaultTimeFormat = "2006-01-02 15:04:05" // Default time format | 默认时间格式 + DefaultDirName = "sa_token_go_logs" // Default log directory name | 默认日志目录名 + DefaultBaseName = "SA-TOKEN-GO" // Default log filename prefix | 默认日志文件基础前缀 + DefaultRotateSize = 10 * 1024 * 1024 // Rotate threshold (10MB) | 文件滚动大小阈值 + DefaultRotateExpire = 24 * time.Hour // Rotate by time interval (1 day) | 时间滚动间隔 + DefaultRotateBackupLimit = 10 // Max number of backups | 最大备份数量 + DefaultRotateBackupDays = 7 // Retain logs for 7 days | 备份保留天数 ) -// LoggerConfig defines configuration for logger | 日志配置项 +// LoggerConfig defines configuration for the logger | 日志配置项,定义日志输出的行为、格式和文件管理策略 type LoggerConfig struct { - Path string // Log directory | 日志文件目录 - FileFormat string // File naming format | 文件命名格式 - Prefix string // Log prefix | 日志前缀 - Level LogLevel // Output level | 输出级别 - TimeFormat string // Timestamp format | 时间格式 - Stdout bool // Output to console | 是否输出到控制台 - RotateSize int64 // Max file size before rotation | 文件大小滚动阈值(字节) - RotateExpire time.Duration // Time interval for rotation | 时间间隔滚动切分 - RotateBackupLimit int // Max number of backup files | 最大备份数量 - RotateBackupDays int // Backup retention days | 备份保留天数 -} - -// LoggerBuilder helps construct a Logger with chainable methods | 链式构建器 + Path string // Log directory path | 日志文件目录 + FileFormat string // Log file naming format | 日志文件命名格式 + Prefix string // Log line prefix | 日志前缀 + Level LogLevel // Minimum output level | 最低输出级别 + TimeFormat string // Timestamp format | 时间戳格式 + Stdout bool // Print logs to console | 是否输出到控制台 + RotateSize int64 // File size threshold before rotation (bytes) | 文件滚动大小阈值(字节) + RotateExpire time.Duration // Rotation interval by time duration | 文件时间滚动间隔 + RotateBackupLimit int // Maximum number of rotated backup files | 最大备份文件数量 + RotateBackupDays int // Retention days for old log files | 备份文件保留天数 +} + +// LoggerBuilder provides a fluent interface for building logger instances | 链式日志构建器 type LoggerBuilder struct { cfg *LoggerConfig } -// NewBuilder creates a builder with default config | 创建带默认配置的构建器 +// NewBuilder creates a new LoggerBuilder with default configuration | 创建一个带默认配置的日志构建器 func NewBuilder() *LoggerBuilder { return &LoggerBuilder{ cfg: &LoggerConfig{ TimeFormat: DefaultTimeFormat, FileFormat: DefaultFileFormat, + Prefix: DefaultPrefix, Level: LevelInfo, Stdout: true, RotateSize: DefaultRotateSize, @@ -62,39 +64,90 @@ func NewBuilder() *LoggerBuilder { } } -func (b *LoggerBuilder) Path(path string) *LoggerBuilder { b.cfg.Path = path; return b } // Set log directory | 设置日志目录 -func (b *LoggerBuilder) FileFormat(format string) *LoggerBuilder { b.cfg.FileFormat = format; return b } // Set file naming format | 设置文件命名格式 -func (b *LoggerBuilder) Prefix(prefix string) *LoggerBuilder { b.cfg.Prefix = prefix; return b } // Set prefix | 设置日志前缀 -func (b *LoggerBuilder) Level(level LogLevel) *LoggerBuilder { b.cfg.Level = level; return b } // Set minimum output level | 设置日志级别 -func (b *LoggerBuilder) TimeFormat(format string) *LoggerBuilder { b.cfg.TimeFormat = format; return b } // Set timestamp format | 设置时间格式 -func (b *LoggerBuilder) Stdout(enable bool) *LoggerBuilder { b.cfg.Stdout = enable; return b } // Enable console output | 是否输出到控制台 -func (b *LoggerBuilder) RotateSize(size int64) *LoggerBuilder { b.cfg.RotateSize = size; return b } // Set rotate size | 设置文件滚动大小阈值 +// Path sets the log output directory | 设置日志输出目录 +func (b *LoggerBuilder) Path(path string) *LoggerBuilder { + b.cfg.Path = path + return b +} + +// FileFormat sets the log file naming format | 设置日志文件命名格式 +func (b *LoggerBuilder) FileFormat(format string) *LoggerBuilder { + b.cfg.FileFormat = format + return b +} + +// Prefix sets the log line prefix | 设置日志输出前缀 +func (b *LoggerBuilder) Prefix(prefix string) *LoggerBuilder { + b.cfg.Prefix = prefix + return b +} + +// Level sets the minimum output log level | 设置日志最低输出级别 +func (b *LoggerBuilder) Level(level LogLevel) *LoggerBuilder { + b.cfg.Level = level + return b +} + +// TimeFormat sets the timestamp format in log lines | 设置日志时间戳格式 +func (b *LoggerBuilder) TimeFormat(format string) *LoggerBuilder { + b.cfg.TimeFormat = format + return b +} + +// Stdout enables or disables console output | 设置是否输出到控制台 +func (b *LoggerBuilder) Stdout(enable bool) *LoggerBuilder { + b.cfg.Stdout = enable + return b +} + +// RotateSize sets the file size threshold for log rotation | 设置日志文件大小滚动阈值 +func (b *LoggerBuilder) RotateSize(size int64) *LoggerBuilder { + b.cfg.RotateSize = size + return b +} + +// RotateExpire sets the time-based rotation interval | 设置时间滚动间隔 func (b *LoggerBuilder) RotateExpire(d time.Duration) *LoggerBuilder { b.cfg.RotateExpire = d return b -} // Set time interval rotation | 设置时间滚动间隔 +} + +// RotateBackupLimit sets the maximum number of backup log files retained | 设置最大备份文件数量 func (b *LoggerBuilder) RotateBackupLimit(limit int) *LoggerBuilder { b.cfg.RotateBackupLimit = limit return b -} // Set max backup count | 设置最大备份数量 +} + +// RotateBackupDays sets the retention days for backup log files | 设置日志备份保留天数 func (b *LoggerBuilder) RotateBackupDays(days int) *LoggerBuilder { b.cfg.RotateBackupDays = days return b -} // Set backup retention days | 设置备份保留天数 +} -// Build constructs a Logger instance | 构建日志实例 -func (b *LoggerBuilder) Build() (*Logger, error) { return NewLoggerWithConfig(b.cfg) } +// Build creates a new Logger instance with the configured options | 构建 Logger 实例,返回错误而不是 panic +func (b *LoggerBuilder) Build() (*Logger, error) { + return NewLoggerWithConfig(b.cloneConfig()) +} -// BuildMust constructs a Logger or panics | 构建日志实例(失败则panic) +// BuildMust creates a new Logger instance or panics if creation fails | 构建 Logger 实例(若失败则 panic) func (b *LoggerBuilder) BuildMust() *Logger { - l, err := NewLoggerWithConfig(b.cfg) + l, err := NewLoggerWithConfig(b.cloneConfig()) if err != nil { panic(err) } return l } -// ensureDefaultPath ensures log directory exists | 确保日志目录存在 +// cloneConfig returns a safe copy of the builder’s current configuration | 复制当前构建器配置,确保构建过程安全独立 +func (b *LoggerBuilder) cloneConfig() *LoggerConfig { + if b == nil || b.cfg == nil { + return &LoggerConfig{} + } + copyCfg := *b.cfg + return ©Cfg +} + +// ensureDefaultPath ensures the log directory exists; if not set, uses the default path | 确保日志目录存在;如果未设置则使用默认路径 func ensureDefaultPath(cfg *LoggerConfig) string { if cfg.Path != "" { return cfg.Path diff --git a/core/log/log_global.go b/core/log/log_global.go new file mode 100644 index 0000000..152cb8d --- /dev/null +++ b/core/log/log_global.go @@ -0,0 +1,55 @@ +// @Author daixk 2025/11/24 21:42:00 +package log + +import ( + "sync" +) + +// Global logger with default NOP implementation | 默认使用无输出的 NOP 日志器 +var ( + GlobalLogger ILogger = &NopLogger{} + logMu sync.RWMutex +) + +// SetGlobalLogger sets the global logger | 设置全局日志器 +func SetGlobalLogger(l ILogger) { + if l == nil { + return + } + logMu.Lock() + GlobalLogger = l + logMu.Unlock() +} + +// getLogger safely returns global logger | 获取全局日志器(内部用) +func getLogger() ILogger { + logMu.RLock() + l := GlobalLogger + logMu.RUnlock() + return l +} + +// NopLogger is a logger implementation that performs no operations | 用于禁用所有日志输出的空日志器 +type NopLogger struct{} + +// NewNopLogger creates a new no-op logger | 创建一个空日志器实例 +func NewNopLogger() ILogger { + return &NopLogger{} +} + +// ---- Implement ILogger Interface | 实现 ILogger 接口 ---- + +func (n *NopLogger) Print(v ...any) {} +func (n *NopLogger) Printf(format string, v ...any) {} + +func (n *NopLogger) Debug(v ...any) {} +func (n *NopLogger) Debugf(format string, v ...any) {} + +func (n *NopLogger) Info(v ...any) {} +func (n *NopLogger) Infof(format string, v ...any) {} + +func (n *NopLogger) Warn(v ...any) {} +func (n *NopLogger) Warnf(format string, v ...any) {} + +func (n *NopLogger) Error(v ...any) {} +func (n *NopLogger) Errorf(format string, v ...any) {} diff --git a/core/log/log_manager.go b/core/log/log_manager.go index 1866f70..b0d6638 100644 --- a/core/log/log_manager.go +++ b/core/log/log_manager.go @@ -1,292 +1,630 @@ +// @Author daixk package log import ( + "bytes" "fmt" + "math/rand" "os" "path/filepath" "sort" + "strconv" "strings" "sync" + "sync/atomic" "time" ) // Logger implements ILogger + LoggerControl | 日志核心实现 type Logger struct { - cfg *LoggerConfig // Logger configuration | 日志配置 - mu sync.Mutex // Write lock | 写入锁 - curFile *os.File // Current log file handle | 当前文件句柄 - curFileName string // Current log filename | 当前文件名 - curSize int64 // Current file size | 当前文件大小 - lastRotate time.Time // Last rotation timestamp | 上次切分时间 + + // ---- Config & State ---- + cfg *LoggerConfig // Logger configuration | 日志配置 + cfgMu sync.RWMutex // Config lock | 配置锁 + + // ---- File IO ---- + fileMu sync.Mutex // File write lock | 文件写锁 + curFile *os.File // Current log file | 当前日志文件 + curName string // Current file name | 当前日志文件名 + curSize int64 // Current log size | 当前文件大小 + lastRotate time.Time // Last rotation time | 上次切分时间 + + // ---- Async Write ---- + queue chan []byte // Async write queue | 异步写队列 + quit chan struct{} // Stop signal | 停止信号 + wg sync.WaitGroup + + // ---- Time Cache ---- + cacheSec int64 // Cached timestamp seconds | 缓存秒级时间戳 + cacheStr atomic.Value // Cached formatted timestamp | 缓存格式化后的时间字符串 + + // ---- State ---- + closed uint32 // Closed flag | 关闭标记 + dropCount uint64 // Dropped log counter | 队列满时丢弃日志计数 + + closeOnce sync.Once // Ensure Close only executes once | 确保 Close 只执行一次 } -// NewLoggerWithConfig creates a logger with given config | 创建带配置的日志实例 +// NewLoggerWithConfig creates a logger instance | 使用配置创建日志器 func NewLoggerWithConfig(cfg *LoggerConfig) (*Logger, error) { - if cfg == nil { - cfg = &LoggerConfig{} + newCfg, err := prepareConfig(cfg) + if err != nil { + return nil, err } - if cfg.TimeFormat == "" { - cfg.TimeFormat = DefaultTimeFormat + + l := &Logger{ + cfg: newCfg, + queue: make(chan []byte, 4096), + quit: make(chan struct{}), + lastRotate: time.Now(), + } + + l.wg.Add(1) + go func() { + defer l.wg.Done() + l.writerLoop() + }() + + return l, nil +} + +// ---- Logging API ---- + +func (l *Logger) Print(v ...any) { l.write(LevelInfo, v...) } +func (l *Logger) Printf(f string, v ...any) { l.writef(LevelInfo, f, v...) } +func (l *Logger) Debug(v ...any) { l.write(LevelDebug, v...) } +func (l *Logger) Debugf(f string, v ...any) { l.writef(LevelDebug, f, v...) } +func (l *Logger) Info(v ...any) { l.write(LevelInfo, v...) } +func (l *Logger) Infof(f string, v ...any) { l.writef(LevelInfo, f, v...) } +func (l *Logger) Warn(v ...any) { l.write(LevelWarn, v...) } +func (l *Logger) Warnf(f string, v ...any) { l.writef(LevelWarn, f, v...) } +func (l *Logger) Error(v ...any) { l.write(LevelError, v...) } +func (l *Logger) Errorf(f string, v ...any) { l.writef(LevelError, f, v...) } + +// write handles simple log output | 输出普通日志 +func (l *Logger) write(level LogLevel, args ...any) { + if atomic.LoadUint32(&l.closed) != 0 { + return } - if cfg.FileFormat == "" { - cfg.FileFormat = DefaultFileFormat + cfg := l.currentCfg() + if level < cfg.Level { + return } - if cfg.Prefix == "" { - cfg.Prefix = DefaultPrefix + l.enqueue(l.buildLine(level, args...)) +} + +// writef handles formatted log output | 输出格式化日志 +func (l *Logger) writef(level LogLevel, format string, args ...any) { + if atomic.LoadUint32(&l.closed) != 0 { + return } - cfg.Path = ensureDefaultPath(cfg) - if err := os.MkdirAll(cfg.Path, 0755); err != nil { - return nil, fmt.Errorf("failed to create log directory: %w", err) + cfg := l.currentCfg() + if level < cfg.Level { + return } - return &Logger{cfg: cfg, lastRotate: time.Now()}, nil + buf := getBuf() + _, _ = fmt.Fprintf(buf, format, args...) + line := l.buildLine(level, buf.String()) + putBuf(buf) + l.enqueue(line) } -// write writes log message to file and stdout | 写入日志信息到文件与终端 -func (l *Logger) write(level LogLevel, msg string) { - if level < l.cfg.Level { - return // Skip lower-level logs | 忽略低于当前级别的日志 +// enqueue pushes logs to async queue | 将日志推入异步队列 +func (l *Logger) enqueue(b []byte) { + if atomic.LoadUint32(&l.closed) != 0 { + return + } + select { + case l.queue <- b: + default: + // queue full, drop | 队列满丢弃 + atomic.AddUint64(&l.dropCount, 1) } +} + +// ---- Build Log Line ---- +// buildLine builds complete log line | 构建完整日志行 +func (l *Logger) buildLine(level LogLevel, args ...any) []byte { + cfg := l.currentCfg() + buf := getBuf() + + // timestamp caching | 时间戳缓存 now := time.Now() - line := fmt.Sprintf("%s [%s] %s%s\n", - now.Format(l.cfg.TimeFormat), - l.levelString(level), - l.cfg.Prefix, - msg, - ) + sec := now.Unix() + + if atomic.LoadInt64(&l.cacheSec) != sec { + atomic.StoreInt64(&l.cacheSec, sec) + l.cacheStr.Store(now.Format(cfg.TimeFormat)) + } + + // write time prefix | 写入时间前缀 + if ts, ok := l.cacheStr.Load().(string); ok { + buf.WriteString(ts) + } else { + buf.WriteString(now.Format(cfg.TimeFormat)) + } + + buf.WriteString(" [") + buf.WriteString(l.levelString(level)) + buf.WriteString("] ") + + buf.WriteString(cfg.Prefix) + + for i, arg := range args { + if i > 0 { + buf.WriteByte(' ') + } + l.appendValue(buf, arg) + } + + buf.WriteByte('\n') + + // copy to new slice to avoid buffer reuse | 拷贝到新切片避免复用冲突 + out := append([]byte(nil), buf.Bytes()...) + putBuf(buf) + return out +} + +// appendValue writes a single value | 写入单个参数 +func (l *Logger) appendValue(buf *bytes.Buffer, v any) { + switch val := v.(type) { + case string: + buf.WriteString(val) + case []byte: + buf.Write(val) + case error: + buf.WriteString(val.Error()) + + case int, int8, int16, int32, int64: + buf.WriteString(fmt.Sprintf("%d", val)) + case uint, uint8, uint16, uint32, uint64: + buf.WriteString(fmt.Sprintf("%d", val)) + + case float32: + buf.WriteString(strconv.FormatFloat(float64(val), 'g', -1, 32)) + case float64: + buf.WriteString(strconv.FormatFloat(val, 'g', -1, 64)) + + case bool: + if val { + buf.WriteString("true") + } else { + buf.WriteString("false") + } + + case time.Time: + buf.WriteString(val.Format(DefaultTimeFormat)) + + default: + fmt.Fprint(buf, val) + } +} - if l.cfg.Stdout { - fmt.Print(line) // Print to console | 输出到终端 +// ---- Async Writer ---- + +// writerLoop processes all file IO | 异步写线程处理文件操作 +func (l *Logger) writerLoop() { + for { + select { + case b, ok := <-l.queue: + if !ok { + return + } + l.writeToFile(b) + + case <-l.quit: + // drain queue | 退出前清空队列 + for { + select { + case b := <-l.queue: + l.writeToFile(b) + default: + return + } + } + } } +} + +// writeToFile writes to current file | 写入文件 +func (l *Logger) writeToFile(b []byte) { + cfg := l.currentCfg() + now := time.Now() - l.mu.Lock() - defer l.mu.Unlock() + l.fileMu.Lock() + defer l.fileMu.Unlock() - if err := l.ensureLogFile(now); err != nil { - fmt.Fprintf(os.Stderr, "Logger error: %v\n", err) + // open file if needed | 无文件则打开 + if err := l.ensureLogFile(now, cfg); err != nil { return } if l.curFile != nil { - n, _ := l.curFile.WriteString(line) - l.curSize += int64(n) + n, err := l.curFile.Write(b) + if err != nil { + _ = l.curFile.Close() + l.curFile = nil + _ = l.openNewFile(now, cfg) + } else { + l.curSize += int64(n) + } + } + + if cfg.Stdout { + _, _ = os.Stdout.Write(b) } - if l.shouldRotate(now) { - _ = l.rotate() + // check rotate | 检测切分 + if l.shouldRotate(now, cfg) { + _ = l.rotate(cfg) } } -// ensureLogFile ensures log file exists or triggers rotation | 确保文件存在或触发滚动 -func (l *Logger) ensureLogFile(now time.Time) error { +// ---- File Handling ---- + +// ensureLogFile ensures a log file is open | 确保日志文件存在 +func (l *Logger) ensureLogFile(now time.Time, cfg LoggerConfig) error { if l.curFile == nil { - return l.openNewFile(now) + return l.openNewFile(now, cfg) } - if l.cfg.RotateExpire > 0 && now.Sub(l.lastRotate) >= l.cfg.RotateExpire { - return l.rotate() + if cfg.RotateExpire > 0 && now.Sub(l.lastRotate) >= cfg.RotateExpire { + return l.rotate(cfg) } return nil } -// openNewFile opens new log file for writing | 打开新日志文件 -func (l *Logger) openNewFile(now time.Time) error { - name := l.formatFileName(now) - path := filepath.Join(l.cfg.Path, name) +// openNewFile opens a new log file | 打开新日志文件 +func (l *Logger) openNewFile(now time.Time, cfg LoggerConfig) error { + name := l.formatFileName(now, cfg) + path := filepath.Join(cfg.Path, name) + f, err := os.OpenFile(path, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666) if err != nil { return err } + l.curFile = f - l.curFileName = name + l.curName = name l.curSize = getFileSize(f) l.lastRotate = now return nil } -// shouldRotate determines if rotation is needed | 判断是否需要滚动切分 -func (l *Logger) shouldRotate(now time.Time) bool { - return (l.cfg.RotateSize > 0 && l.curSize >= l.cfg.RotateSize) || - (l.cfg.RotateExpire > 0 && now.Sub(l.lastRotate) >= l.cfg.RotateExpire) +// shouldRotate checks rotation conditions | 检查是否需要切分 +func (l *Logger) shouldRotate(now time.Time, cfg LoggerConfig) bool { + if cfg.RotateSize > 0 && l.curSize >= cfg.RotateSize { + return true + } + if cfg.RotateExpire > 0 && now.Sub(l.lastRotate) >= cfg.RotateExpire { + return true + } + return false } -// rotate performs file rotation and cleanup | 执行日志切分与清理 -func (l *Logger) rotate() error { +// rotate rotates the current log file | 日志切分逻辑 +func (l *Logger) rotate(cfg LoggerConfig) error { if l.curFile == nil { return nil } - old := filepath.Join(l.cfg.Path, l.curFileName) + + old := filepath.Join(cfg.Path, l.curName) + _ = l.curFile.Sync() _ = l.curFile.Close() + l.curFile = nil - // 带毫秒的时间戳 | include milliseconds for safety now := time.Now() ts := fmt.Sprintf("%s_%03d", now.Format("20060102_150405"), now.Nanosecond()/1e6) - base := strings.TrimSuffix(l.curFileName, ".log") + base := strings.TrimSuffix(l.curName, ".log") newName := fmt.Sprintf("%s_%s.log", base, ts) - _ = os.Rename(old, filepath.Join(l.cfg.Path, newName)) + newPath := filepath.Join(cfg.Path, newName) + + if err := os.Rename(old, newPath); err != nil { + _ = os.Rename(old, filepath.Join(cfg.Path, base+fmt.Sprintf("_%06d.log", rand.Intn(1_000_000)))) + } - l.curFile = nil l.curSize = 0 + l.curName = "" l.lastRotate = now - l.cleanupOldLogs() - return l.openNewFile(now) + l.cleanup(cfg) + return l.openNewFile(now, cfg) } -// cleanupOldLogs removes expired or excessive log files | 清理过期或多余日志文件 -func (l *Logger) cleanupOldLogs() { - files, _ := filepath.Glob(filepath.Join(l.cfg.Path, "*.log")) +// cleanup removes expired logs | 清理过期/多余日志文件 +func (l *Logger) cleanup(cfg LoggerConfig) { + // base is the fixed prefix of log files for this logger | base 为该 Logger 对应日志文件的固定前缀 + base := normalizeBaseName(cfg.FileFormat) + if base == "" { + base = DefaultBaseName + } + + files, _ := filepath.Glob(filepath.Join(cfg.Path, "*.log")) if len(files) == 0 { return } - if l.cfg.RotateBackupDays > 0 { - expire := time.Now().AddDate(0, 0, -l.cfg.RotateBackupDays) - for _, f := range files { - if info, err := os.Stat(f); err == nil && info.ModTime().Before(expire) { - _ = os.Remove(f) - } - } + var keep []struct { + path string + t time.Time } - if l.cfg.RotateBackupLimit > 0 && len(files) > l.cfg.RotateBackupLimit { - sort.Slice(files, func(i, j int) bool { - fi, _ := os.Stat(files[i]) - fj, _ := os.Stat(files[j]) - return fi.ModTime().Before(fj.ModTime()) - }) - for _, f := range files[:len(files)-l.cfg.RotateBackupLimit] { + now := time.Now() + expire := time.Time{} + if cfg.RotateBackupDays > 0 { + expire = now.AddDate(0, 0, -cfg.RotateBackupDays) + } + + for _, f := range files { + info, err := os.Stat(f) + if err != nil { + continue + } + + filename := filepath.Base(f) + + // 只处理以 base 开头的文件 | only handle files with the same base prefix + if !strings.HasPrefix(filename, base) { + continue + } + + // 清理过期文件 | remove expired files + if !expire.IsZero() && info.ModTime().Before(expire) { _ = os.Remove(f) + continue + } + + // 当前正在写入的文件此时尚未创建(在 rotate 之后), + // 这里收集到的全是“备份文件”,后续按数量进行裁剪 + keep = append(keep, struct { + path string + t time.Time + }{f, info.ModTime()}) + } + + // 根据 RotateBackupLimit 限制保留的备份文件数量(不包含当前正在写的那个文件)| + // keep only the newest RotateBackupLimit backup files (current file is not included here) + if cfg.RotateBackupLimit > 0 && len(keep) > cfg.RotateBackupLimit { + // 按修改时间排序,最旧的在前 | sort by time ascending + sort.Slice(keep, func(i, j int) bool { return keep[i].t.Before(keep[j].t) }) + + // 删除多余的,只保留最新的 cfg.RotateBackupLimit 个 | remove oldest extras + for _, f := range keep[:len(keep)-cfg.RotateBackupLimit] { + _ = os.Remove(f.path) } } } -// formatFileName builds log filename based on time format | 构建日志文件名 -func (l *Logger) formatFileName(t time.Time) string { - name := l.cfg.FileFormat - for k, v := range map[string]string{ - "{Y-m-d}": t.Format("2006-01-02"), - "{Y}": t.Format("2006"), - "{m}": t.Format("01"), - "{d}": t.Format("02"), - "{H}": t.Format("15"), - "{i}": t.Format("04"), - "{s}": t.Format("05"), - } { - name = strings.ReplaceAll(name, k, v) +// formatFileName generates filename | 生成日志文件名 +func (l *Logger) formatFileName(t time.Time, cfg LoggerConfig) string { + name := cfg.FileFormat + if name == "" { + return fmt.Sprintf("%s_%s.log", DefaultBaseName, t.Format("2006-01-02")) } + + r := strings.NewReplacer( + "{Y}", t.Format("2006"), + "{m}", t.Format("01"), + "{d}", t.Format("02"), + ) + + name = r.Replace(name) if !strings.HasSuffix(name, ".log") { name += ".log" } return name } -// getFileSize returns current file size | 获取文件大小 -func getFileSize(f *os.File) int64 { - info, err := f.Stat() - if err != nil { - return 0 +// ---- Runtime Control ---- + +// SetLevel updates minimum level | 动态更新日志级别 +func (l *Logger) SetLevel(level LogLevel) { + l.cfgMu.Lock() + if l.cfg != nil { + l.cfg.Level = level } - return info.Size() + l.cfgMu.Unlock() } -// levelString converts log level to string | 将日志级别转为字符串 -func (l *Logger) levelString(level LogLevel) string { - switch level { - case LevelDebug: - return "DEBUG" - case LevelInfo: - return "INFO" - case LevelWarn: - return "WARN" - case LevelError: - return "ERROR" - default: - return "UNKNOWN" +// SetPrefix updates prefix | 动态更新日志前缀 +func (l *Logger) SetPrefix(prefix string) { + l.cfgMu.Lock() + if l.cfg != nil { + l.cfg.Prefix = prefix } + l.cfgMu.Unlock() } -func (l *Logger) Print(v ...any) { l.write(LevelInfo, fmt.Sprint(v...)) } // 普通日志打印 -func (l *Logger) Printf(f string, v ...any) { l.write(LevelInfo, fmt.Sprintf(f, v...)) } // 普通日志格式化打印 -func (l *Logger) Debug(v ...any) { l.write(LevelDebug, fmt.Sprint(v...)) } // 调试级别日志 -func (l *Logger) Debugf(f string, v ...any) { l.write(LevelDebug, fmt.Sprintf(f, v...)) } // 调试级别格式化日志 -func (l *Logger) Info(v ...any) { l.write(LevelInfo, fmt.Sprint(v...)) } // 信息级别日志 -func (l *Logger) Infof(f string, v ...any) { l.write(LevelInfo, fmt.Sprintf(f, v...)) } // 信息级别格式化日志 -func (l *Logger) Warn(v ...any) { l.write(LevelWarn, fmt.Sprint(v...)) } // 警告级别日志 -func (l *Logger) Warnf(f string, v ...any) { l.write(LevelWarn, fmt.Sprintf(f, v...)) } // 警告级别格式化日志 -func (l *Logger) Error(v ...any) { l.write(LevelError, fmt.Sprint(v...)) } // 错误级别日志 -func (l *Logger) Errorf(f string, v ...any) { l.write(LevelError, fmt.Sprintf(f, v...)) } // 错误级别格式化日志 - -func (l *Logger) SetLevel(level LogLevel) { l.cfg.Level = level } // 设置日志输出级别 -func (l *Logger) SetPrefix(prefix string) { l.cfg.Prefix = prefix } // 设置日志前缀 -func (l *Logger) SetStdout(enable bool) { l.cfg.Stdout = enable } // 设置终端输出开关 - -// SetConfig dynamically replaces logger configuration | 动态替换日志配置 -func (l *Logger) SetConfig(cfg *LoggerConfig) { - l.mu.Lock() - defer l.mu.Unlock() - l.cfg = cfg +// SetStdout enables/disables stdout | 开关控制台输出 +func (l *Logger) SetStdout(enable bool) { + l.cfgMu.Lock() + if l.cfg != nil { + l.cfg.Stdout = enable + } + l.cfgMu.Unlock() } -// Close safely closes current file | 安全关闭日志文件 -func (l *Logger) Close() { - l.mu.Lock() - defer l.mu.Unlock() +// SetConfig replaces config and reopens log file | 动态替换配置并重新创建日志文件 +func (l *Logger) SetConfig(cfg *LoggerConfig) { + newCfg, err := prepareConfig(cfg) + if err != nil { + return + } + + l.cfgMu.Lock() + l.fileMu.Lock() + + l.cfg = newCfg + if l.curFile != nil { + _ = l.curFile.Sync() _ = l.curFile.Close() l.curFile = nil } + + l.curName = "" + l.curSize = 0 + l.lastRotate = time.Now() + + l.fileMu.Unlock() + l.cfgMu.Unlock() +} + +// Close stops logger | 关闭日志系统 +func (l *Logger) Close() { + l.closeOnce.Do(func() { + atomic.StoreUint32(&l.closed, 1) + close(l.quit) + + l.wg.Wait() + + l.fileMu.Lock() + defer l.fileMu.Unlock() + + if l.curFile != nil { + _ = l.curFile.Sync() + _ = l.curFile.Close() + } + }) +} + +// Flush flushes file buffer | 强制刷新文件缓冲区 +func (l *Logger) Flush() { + l.fileMu.Lock() + defer l.fileMu.Unlock() + if l.curFile != nil { + _ = l.curFile.Sync() + } } -// LogPath returns current log directory | 获取日志目录路径 +// LogPath returns directory | 返回日志目录 func (l *Logger) LogPath() string { + l.cfgMu.RLock() + defer l.cfgMu.RUnlock() if l.cfg == nil { return "" } return l.cfg.Path } -// Flush forces the log file to sync to disk | 强制刷新日志到磁盘 -func (l *Logger) Flush() { - l.mu.Lock() - defer l.mu.Unlock() - if l.curFile != nil { - _ = l.curFile.Sync() - } +// DropCount returns dropped logs | 返回丢弃日志数量 +func (l *Logger) DropCount() uint64 { + return atomic.LoadUint64(&l.dropCount) +} + +// ---- Buffer Pool ---- + +var bufPool = sync.Pool{ + New: func() any { return new(bytes.Buffer) }, +} + +func getBuf() *bytes.Buffer { + b := bufPool.Get().(*bytes.Buffer) + b.Reset() + return b +} + +func putBuf(b *bytes.Buffer) { + bufPool.Put(b) } -// DefaultLogger is the global shared logger | 全局默认日志实例 -var DefaultLogger *Logger +// ---- Helpers ---- -func init() { - l, err := NewBuilder(). - Prefix(DefaultPrefix). - Level(LevelInfo). - Stdout(true). - Build() +// getFileSize returns file size | 获取文件大小 +func getFileSize(f *os.File) int64 { + info, err := f.Stat() if err != nil { - _, _ = fmt.Fprintf(os.Stderr, "[SA-TOKEN-GO] logger init failed: %v\n", err) - l = &Logger{cfg: &LoggerConfig{Stdout: true, Prefix: DefaultPrefix}} + return 0 } - DefaultLogger = l + return info.Size() } -// Print 全局普通日志 | Global Print log -func Print(v ...any) { DefaultLogger.Print(v...) } -func Printf(f string, v ...any) { DefaultLogger.Printf(f, v...) } +// prepareConfig applies defaults and ensures directory | 应用默认配置并确保目录存在 +func prepareConfig(cfg *LoggerConfig) (*LoggerConfig, error) { + if cfg == nil { + cfg = &LoggerConfig{} + } + + c := *cfg // copy + + if c.TimeFormat == "" { + c.TimeFormat = DefaultTimeFormat + } + if c.FileFormat == "" { + c.FileFormat = DefaultFileFormat + } + if c.Prefix == "" { + c.Prefix = DefaultPrefix + } + if c.RotateSize <= 0 { + c.RotateSize = DefaultRotateSize + } + if c.RotateExpire < 0 { + c.RotateExpire = 0 + } + if c.RotateBackupLimit <= 0 { + c.RotateBackupLimit = DefaultRotateBackupLimit + } + if c.RotateBackupDays < 0 { + c.RotateBackupDays = 0 + } + + c.Path = ensureDefaultPath(&c) + + if err := os.MkdirAll(c.Path, 0755); err != nil { + return nil, fmt.Errorf("failed to create log directory: %w", err) + } -// Debug 全局调试日志 | Global Debug log -func Debug(v ...any) { DefaultLogger.Debug(v...) } -func Debugf(f string, v ...any) { DefaultLogger.Debugf(f, v...) } + return &c, nil +} -// Info 全局信息日志 | Global Info log -func Info(v ...any) { DefaultLogger.Info(v...) } -func Infof(f string, v ...any) { DefaultLogger.Infof(f, v...) } +// currentCfg returns a config snapshot | 返回当前配置快照 +func (l *Logger) currentCfg() LoggerConfig { + l.cfgMu.RLock() + defer l.cfgMu.RUnlock() -// Warn 全局警告日志 | Global Warn log -func Warn(v ...any) { DefaultLogger.Warn(v...) } -func Warnf(f string, v ...any) { DefaultLogger.Warnf(f, v...) } + if l.cfg == nil { + return LoggerConfig{} + } + return *l.cfg +} -// Error 全局错误日志 | Global Error log -func Error(v ...any) { DefaultLogger.Error(v...) } -func Errorf(f string, v ...any) { DefaultLogger.Errorf(f, v...) } +// levelString converts log level to string | 将日志级别转换为字符串 +func (l *Logger) levelString(level LogLevel) string { + switch level { + case LevelDebug: + return "DEBUG" + case LevelInfo: + return "INFO" + case LevelWarn: + return "WARN" + case LevelError: + return "ERROR" + default: + return "UNKNOWN" + } +} + +// normalizeBaseName extracts static name | 提取基础日志文件名前缀 +func normalizeBaseName(format string) string { + if format == "" { + return DefaultBaseName + } + + // 去掉 .log 后缀 | strip ".log" suffix + name := strings.TrimSuffix(format, ".log") + + // 如果包含占位符,则取第一个占位符之前的固定前缀 | if contains "{...}", take prefix before first placeholder + if idx := strings.Index(name, "{"); idx >= 0 { + name = name[:idx] + // 去掉末尾的连接符(常见为 "_" 或 "-")| trim trailing separators like "_" or "-" + name = strings.TrimRight(name, "_- ") + } + + name = strings.TrimSpace(name) + if name == "" { + return DefaultBaseName + } + return name +} diff --git a/core/log/log_test.go b/core/log/log_test.go deleted file mode 100644 index bc68606..0000000 --- a/core/log/log_test.go +++ /dev/null @@ -1,164 +0,0 @@ -package log - -import ( - "context" - "fmt" - "github.com/gogf/gf/v2/os/glog" - "os" - "path/filepath" - "testing" - "time" -) - -// TestAllLevelsAndRotation 测试所有日志级别与切分逻辑 | Test all log levels and rotation -func TestAllLevelsAndRotation(t *testing.T) { - logger, err := NewBuilder(). - //Prefix("[TEST] "). - Level(LevelDebug). - Stdout(true). - RotateSize(2 * 1024). // 超过2KB切分 | rotate every 2KB - RotateExpire(2 * time.Second). // 每2秒自动切分 | rotate every 2s - RotateBackupLimit(3). // 保留3个文件 | keep 3 backups - RotateBackupDays(1). // 保留1天 | keep 1 day - Build() - if err != nil { - t.Fatalf("failed to build logger: %v", err) - } - defer logger.Close() - - logger.Print("Print level message") - logger.Printf("Printf formatted %s", "message") - - logger.Debug("Debug message") - logger.Debugf("Debugf formatted %s", "debugging") - - logger.Info("Info message") - logger.Infof("Infof formatted %s", "information") - - logger.Warn("Warning message") - logger.Warnf("Warningf formatted %s", "warning") - - logger.Error("Error message") - logger.Errorf("Errorf formatted %s", "error") - - t.Log("all log levels written successfully") - - for i := 0; i < 300; i++ { - switch i % 4 { - case 0: - logger.Debugf("Rotation Debug line %d", i) - case 1: - logger.Infof("Rotation Info line %d", i) - case 2: - logger.Warnf("Rotation Warning line %d", i) - default: - logger.Errorf("Rotation Error line %d", i) - } - time.Sleep(50 * time.Millisecond) - } - - time.Sleep(4 * time.Second) - - files, _ := filepath.Glob(filepath.Join(logger.LogPath(), "*.log")) - if len(files) == 0 { - t.Fatal("no log files generated") - } - t.Logf("%d log files generated under: %s", len(files), logger.LogPath()) - for _, f := range files { - info, _ := os.Stat(f) - t.Logf(" - %s (%d bytes)", filepath.Base(f), info.Size()) - } -} - -// BenchmarkSaTokenLogger_Sequential 顺序写入性能测试 | Sequential benchmark -func BenchmarkSaTokenLogger_Sequential(b *testing.B) { - dir := filepath.Join(getProjectDir(), "bench_sa_seq") - _ = os.MkdirAll(dir, 0755) - - logger, _ := NewBuilder(). - Path(dir). - Stdout(false). - RotateSize(0). - Build() - defer logger.Close() - - b.ResetTimer() - for i := 0; i < b.N; i++ { - logger.Infof("sequential benchmark log line %d", i) - } - b.StopTimer() -} - -// BenchmarkSaTokenLogger_Parallel 并发写入性能测试 | Parallel benchmark -func BenchmarkSaTokenLogger_Parallel(b *testing.B) { - dir := filepath.Join(getProjectDir(), "bench_sa_parallel") - _ = os.MkdirAll(dir, 0755) - - logger, _ := NewBuilder(). - Path(dir). - Stdout(false). - RotateSize(0). - Build() - defer logger.Close() - - b.ResetTimer() - b.RunParallel(func(pb *testing.PB) { - i := 0 - for pb.Next() { - logger.Infof("parallel benchmark log line %d", i) - i++ - } - }) - b.StopTimer() -} - -// BenchmarkGfLogger_Sequential GoFrame glog 顺序写入 | GF sequential benchmark -func BenchmarkGfLogger_Sequential(b *testing.B) { - dir := filepath.Join(getProjectDir(), "bench_gf_seq") - _ = os.MkdirAll(dir, 0755) - - logger := glog.New() - logger.SetStdoutPrint(false) - logger.SetPath(dir) - - b.ResetTimer() - for i := 0; i < b.N; i++ { - logger.Infof(context.Background(), "gflog sequential line %d", i) - } - b.StopTimer() -} - -// BenchmarkGfLogger_Parallel GoFrame glog 并发写入 | GF parallel benchmark -func BenchmarkGfLogger_Parallel(b *testing.B) { - dir := filepath.Join(getProjectDir(), "bench_gf_parallel") - _ = os.MkdirAll(dir, 0755) - - logger := glog.New() - logger.SetStdoutPrint(false) - logger.SetPath(dir) - - b.ResetTimer() - b.RunParallel(func(pb *testing.PB) { - i := 0 - for pb.Next() { - logger.Infof(context.Background(), "gflog parallel line %d", i) - i++ - } - }) - b.StopTimer() -} - -// TestSummary 输出运行方式 | Print run commands -func TestSummary(t *testing.T) { - fmt.Println("run test: go test -v ./core/log") - fmt.Println("run benchmark: go test -bench=. -benchmem ./core/log") -} - -// getProjectDir 获取当前项目根目录 | Get project root path -func getProjectDir() string { - wd, err := os.Getwd() - if err != nil { - return "." - } - return wd -} diff --git a/core/manager/manager.go b/core/manager/manager.go index b59ea88..94d3c25 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -1,8 +1,9 @@ package manager import ( - "encoding/json" "fmt" + "github.com/click33/sa-token-go/core/codec" + "github.com/click33/sa-token-go/core/serror" "strings" "time" @@ -47,19 +48,9 @@ const ( type TokenState string const ( - TokenStateKickout TokenState = "KICK_OUT" - TokenStateReplaced TokenState = "BE_REPLACED" -) - -// Error variables | 错误变量 -var ( - ErrAccountDisabled = fmt.Errorf("account is disabled") - ErrNotLogin = fmt.Errorf("not login") - ErrTokenNotFound = fmt.Errorf("token not found") - ErrInvalidTokenData = fmt.Errorf("invalid token data") - ErrLoginLimitExceeded = fmt.Errorf("login count exceeds the maximum limit") - ErrTokenKickout = fmt.Errorf("token has been kicked out") - ErrTokenReplaced = fmt.Errorf("token has been replaced") + TokenStateLogout TokenState = "LOGOUT" // Logout state | 主动登出 + TokenStateKickout TokenState = "KICK_OUT" // Kickout state | 被踢下线 + TokenStateReplaced TokenState = "BE_REPLACED" // Replaced state | 被顶下线 ) // TokenInfo Token information | Token信息 @@ -73,10 +64,10 @@ type TokenInfo struct { // Manager Authentication manager | 认证管理器 type Manager struct { + prefix string storage adapter.Storage config *config.Config generator *token.Generator - prefix string nonceManager *security.NonceManager refreshManager *security.RefreshTokenManager oauth2Server *oauth2.OAuth2Server @@ -164,7 +155,7 @@ func assertString(v any) (string, bool) { func (m *Manager) Login(loginID string, device ...string) (string, error) { // Check if account is disabled | 检查账号是否被封禁 if m.IsDisable(loginID) { - return "", ErrAccountDisabled + return "", serror.ErrAccountDisabled } deviceType := getDevice(device) @@ -194,39 +185,39 @@ func (m *Manager) Login(loginID string, device ...string) (string, error) { if len(tokens) >= m.config.MaxLoginCount { // Reached maximum concurrent login count | 已达到最大并发登录数 // You may change to "kick out earliest token" if desired | 如需也可改为“踢掉最早 Token” - return "", ErrLoginLimitExceeded + return "", serror.ErrLoginLimitExceeded } } // Generate token | 生成Token tokenValue, err := m.generator.Generate(loginID, deviceType) if err != nil { - return "", fmt.Errorf("failed to generate token: %w", err) + return "", fmt.Errorf("%w: %v", serror.ErrTokenGenerateFailed, err) } nowTime := time.Now().Unix() expiration := m.getExpiration() - // Prepare TokenInfo object and serialize to JSON | 准备Token信息对象并序列化为JSON - tokenInfoStr, err := json.Marshal(TokenInfo{ + // Prepare TokenInfo object and serialize to JSON | 准备Token信息对象并序列化 + tokenInfo, err := codec.DefaultSerializer.Marshal(TokenInfo{ LoginID: loginID, Device: deviceType, CreateTime: nowTime, ActiveTime: nowTime, }) if err != nil { - return "", fmt.Errorf("failed to marshal tokenInfo: %w", err) + return "", fmt.Errorf("%w: %v", serror.ErrCommonMarshal, err) } // Save token-tokenInfo mapping | 保存 TokenKey-TokenInfo 映射 tokenKey := m.getTokenKey(tokenValue) - if err = m.storage.Set(tokenKey, string(tokenInfoStr), expiration); err != nil { - return "", fmt.Errorf("failed to save token: %w", err) + if err = m.storage.Set(tokenKey, tokenInfo, expiration); err != nil { + return "", fmt.Errorf("%w: %v", serror.ErrCommonStoreFailed, err) } // Save account-token mapping | 保存 AccountKey-Token 映射 if err = m.storage.Set(accountKey, tokenValue, expiration); err != nil { - return "", fmt.Errorf("failed to save account mapping: %w", err) + return "", fmt.Errorf("%w: %v", serror.ErrCommonStoreFailed, err) } // Create session | 创建Session @@ -241,7 +232,7 @@ func (m *Manager) Login(loginID string, device ...string) (string, error) { expiration, ) if err != nil { - return "", fmt.Errorf("failed to save session: %w", err) + return "", err } // Trigger login event | 触发登录事件 @@ -264,12 +255,12 @@ func (m *Manager) LoginByToken(loginID string, tokenValue string, device ...stri return err } if info == nil { - return ErrInvalidTokenData + return serror.ErrInvalidTokenData } // Check if the account is disabled | 检查账号是否被封禁 if m.IsDisable(info.LoginID) { - return ErrAccountDisabled + return serror.ErrAccountDisabled } now := time.Now().Unix() @@ -279,7 +270,7 @@ func (m *Manager) LoginByToken(loginID string, tokenValue string, device ...stri info.ActiveTime = now // Write back updated TokenInfo (保留原TTL) - if data, err := json.Marshal(info); err == nil { + if data, err := codec.DefaultSerializer.Marshal(info); err == nil { _ = m.storage.SetKeepTTL(m.getTokenKey(tokenValue), data) } @@ -302,7 +293,8 @@ func (m *Manager) Logout(loginID string, device ...string) error { tokenValue, err := m.storage.Get(accountKey) if err != nil || tokenValue == nil { - return nil // Already logged out | 已经登出 + // Already logged out | 已经登出 + return nil } // Assert token value type | 类型断言为字符串 @@ -360,7 +352,8 @@ func (m *Manager) replace(loginID string, device string) error { accountKey := m.getAccountKey(loginID, device) tokenValue, err := m.storage.Get(accountKey) if err != nil || tokenValue == nil { - return nil // No active login to replace | 无活跃登录,无需处理 + // No active login to replace | 无活跃登录,无需处理 + return nil } tokenStr, ok := assertString(tokenValue) @@ -436,10 +429,10 @@ func (m *Manager) IsLogin(tokenValue string) bool { return true } -// CheckLogin Checks login status (throws error if not logged in) | 检查登录(未登录抛出错误) +// CheckLogin Checks login status (throws serror if not logged in) | 检查登录(未登录抛出错误) func (m *Manager) CheckLogin(tokenValue string) error { if !m.IsLogin(tokenValue) { - return ErrNotLogin + return serror.ErrNotLogin } return nil } @@ -462,7 +455,7 @@ func (m *Manager) CheckLoginWithState(tokenValue string) (bool, error) { if now-info.ActiveTime > m.config.ActiveTimeout { // Force logout and clean up token data | 强制登出并清理 Token 相关数据 _ = m.removeTokenChain(tokenValue, false, info, listener.EventKickout) - return false, ErrTokenKickout + return false, serror.ErrTokenKickout } } @@ -492,7 +485,7 @@ func (m *Manager) CheckLoginWithState(tokenValue string) (bool, error) { // GetLoginID Gets login ID from token | 根据Token获取登录ID func (m *Manager) GetLoginID(tokenValue string) (string, error) { if !m.IsLogin(tokenValue) { - return "", ErrNotLogin + return "", serror.ErrNotLogin } info, err := m.getTokenInfo(tokenValue) @@ -500,7 +493,7 @@ func (m *Manager) GetLoginID(tokenValue string) (string, error) { return "", err } if info == nil { - return "", ErrInvalidTokenData + return "", serror.ErrInvalidTokenData } return info.LoginID, nil @@ -513,24 +506,24 @@ func (m *Manager) GetLoginIDNotCheck(tokenValue string) (string, error) { return "", err } if info == nil { - return "", ErrInvalidTokenData + return "", serror.ErrInvalidTokenData } return info.LoginID, err } -// GetTokenValue Gets token by login ID | 根据登录ID获取Token +// GetTokenValue Gets token by login ID and device | 根据登录ID以及设备获取Token func (m *Manager) GetTokenValue(loginID string, device ...string) (string, error) { deviceType := getDevice(device) accountKey := m.getAccountKey(loginID, deviceType) tokenValue, err := m.storage.Get(accountKey) if err != nil || tokenValue == nil { - return "", fmt.Errorf("token not found for login id: %s", loginID) + return "", serror.ErrTokenNotFound } tokenStr, ok := assertString(tokenValue) if !ok { - return "", fmt.Errorf("invalid token value type") + return "", serror.ErrTokenNotFound } return tokenStr, nil @@ -550,7 +543,7 @@ func (m *Manager) Disable(loginID string, duration time.Duration) error { if err == nil && len(tokens) > 0 { for _, tokenValue := range tokens { // Force kick out each active token | 强制踢出所有活跃的Token - _ = m.removeTokenChain(tokenValue, true, nil, listener.EventLogout) + _ = m.removeTokenChain(tokenValue, true, nil, listener.EventKickout) } } @@ -615,6 +608,15 @@ func (m *Manager) DeleteSession(loginID string) error { return sess.Destroy() } +// DeleteSessionByToken Deletes session by token | 根据Token删除Session +func (m *Manager) DeleteSessionByToken(tokenValue string) error { + sess, err := m.GetSessionByToken(tokenValue) + if err != nil { + return err + } + return sess.Destroy() +} + // ============ Permission Validation | 权限验证 ============ // SetPermissions Sets permissions for user | 设置权限 @@ -929,35 +931,33 @@ func (m *Manager) getLoginIDByToken(tokenValue string) (string, error) { func (m *Manager) getTokenInfo(tokenValue string, checkState ...bool) (*TokenInfo, error) { tokenKey := m.getTokenKey(tokenValue) data, err := m.storage.Get(tokenKey) - if err != nil || data == nil { - return nil, err + if err != nil { + return nil, fmt.Errorf("%w: %v", serror.ErrCommonGetFailed, err) + } + if data == nil { + return nil, serror.ErrTokenNotFound } - // Convert storage value to string | 将存储值统一转换为字符串 - var str string - switch v := data.(type) { - case []byte: - str = string(v) - case string: - str = v - default: - return nil, ErrInvalidTokenData + raw, err := codec.UnifyToBytes(data) + if err != nil { + return nil, err } // Check for special token states (if enabled) | 检查是否为特殊状态(当启用检查时) + str := string(raw) if len(checkState) == 0 || checkState[0] { switch str { case string(TokenStateKickout): - return nil, ErrTokenKickout // 被踢下线 + return nil, serror.ErrTokenKickout // 被踢下线 case string(TokenStateReplaced): - return nil, ErrTokenReplaced // 被顶下线 + return nil, serror.ErrTokenReplaced // 被顶下线 } } - // Parse TokenInfo from JSON | 从JSON解析Token信息 + // Parse TokenInfo | 解析Token信息 var info TokenInfo - if err := json.Unmarshal([]byte(str), &info); err != nil { - return nil, fmt.Errorf("%w: %v", ErrInvalidTokenData, err) + if err = codec.DefaultSerializer.Unmarshal(raw, &info); err != nil { + return nil, fmt.Errorf("%w: %v", serror.ErrInvalidTokenData, err) } return &info, nil @@ -981,24 +981,21 @@ func (m *Manager) renewToken(tokenValue string, info *TokenInfo) { // Update ActiveTime and keep original TTL | 更新 ActiveTime,保持原 TTL 不变 info.ActiveTime = time.Now().Unix() - if tokenInfo, err := json.Marshal(info); err == nil { + if tokenInfo, err := codec.DefaultSerializer.Marshal(info); err == nil { _ = m.storage.SetKeepTTL(tokenKey, tokenInfo) } // Extend TTL for token and its accountKey | 为 Token 与对应 accountKey 延长 TTL exp := m.getExpiration() - if exp > 0 { - // Renew token TTL | 续期 Token TTL - _ = m.storage.Expire(tokenKey, exp) - - // Renew accountKey TTL | 续期账号映射 TTL - accountKey := m.getAccountKey(info.LoginID, info.Device) - _ = m.storage.Expire(accountKey, exp) - // Renew session TTL | 续期 Session TTL - if sess, err := m.GetSession(info.LoginID); err == nil && sess != nil { - _ = sess.Renew(exp) - } + // Renew token TTL | 续期 Token TTL + _ = m.storage.Expire(tokenKey, exp) + // Renew accountKey TTL | 续期账号映射 TTL + accountKey := m.getAccountKey(info.LoginID, info.Device) + _ = m.storage.Expire(accountKey, exp) + // Renew session TTL | 续期 Session TTL + if sess, err := m.GetSession(info.LoginID); err == nil && sess != nil { + _ = sess.Renew(exp) } // Set minimal renewal interval marker | 设置最小续期间隔标记(限流续期频率) @@ -1025,7 +1022,7 @@ func (m *Manager) removeTokenChain(tokenValue string, destroySession bool, info return err } if info == nil { - return ErrInvalidTokenData + return serror.ErrInvalidTokenData } } @@ -1058,10 +1055,10 @@ func (m *Manager) removeTokenChain(tokenValue string, destroySession bool, info // Default Unknown event type | 未知事件类型(默认删除) default: - _ = m.storage.Delete(tokenKey) - _ = m.storage.Delete(accountKey) - _ = m.storage.Delete(renewKey) - if destroySession { + _ = m.storage.Delete(tokenKey) // Delete token-info mapping | 删除Token信息映射 + _ = m.storage.Delete(accountKey) // Delete account-token mapping | 删除账号映射 + _ = m.storage.Delete(renewKey) // Delete renew key | 删除续期标记 + if destroySession { // Optionally destroy session | 可选销毁Session _ = m.DeleteSession(info.LoginID) } } diff --git a/core/pool/pool.go b/core/pool/pool.go index 57f35a8..5f73388 100644 --- a/core/pool/pool.go +++ b/core/pool/pool.go @@ -2,7 +2,8 @@ package pool import ( - "fmt" + "github.com/click33/sa-token-go/core/log" + "github.com/click33/sa-token-go/core/serror" "sync" "time" @@ -118,7 +119,7 @@ func (m *RenewPoolManager) initPool() error { // Submit submits a renewal task | 提交续期任务 func (m *RenewPoolManager) Submit(task func()) error { if !m.started { - return fmt.Errorf("RenewPool not started") + return serror.ErrRenewPoolNotStarted } return m.pool.Submit(task) } @@ -191,7 +192,7 @@ func (m *RenewPoolManager) Stats() (running, capacity int, usage float64) { // PrintStatus prints current pool status | 打印池状态 func (m *RenewPoolManager) PrintStatus() { r, c, u := m.Stats() - fmt.Printf("RenewPool Running: %d, Capacity: %d, Usage: %.1f%%\n", r, c, u*100) + log.GlobalLogger.Infof("RenewPool Running: %d, Capacity: %d, Usage: %.1f%%", r, c, u*100) } // RenewPoolBuilder builder for RenewPoolManager | RenewPoolManager 构造器 diff --git a/core/serror/errors.go b/core/serror/errors.go new file mode 100644 index 0000000..628a996 --- /dev/null +++ b/core/serror/errors.go @@ -0,0 +1,40 @@ +// @Author daixk 2025/11/25 9:34:00 +package serror + +import "fmt" + +// Common Errors | Common 错误 +var ( + ErrCommonStoreFailed = fmt.Errorf("failed to save data") // failed to save data | 保存数据失败 + ErrCommonGetFailed = fmt.Errorf("failed to get data") // failed to get data | 获取数据失败 + + ErrCommonMarshal = fmt.Errorf("failed to marshal data") // failed to marshal data | 序列化数据失败 + ErrCommonUnmarshal = fmt.Errorf("failed to unmarshal data") // failed to unmarshal data | 反序列化数据失败 +) + +// RenewPool Errors | RenewPool 错误 +var ( + ErrRenewPoolNotStarted = fmt.Errorf("renew pool not started") // renew pool not started | 续期线程池未启动 +) + +// Session Errors | Session 错误 +var ( + ErrSessionNotFound = fmt.Errorf("session not found") // session not found | 会话不存在 + ErrInvalidSessionData = fmt.Errorf("invalid session data") // invalid session data | 会话数据无效 + ErrSessionIDEmpty = fmt.Errorf("session id cannot be empty") // session id cannot be empty | Session ID 不能为空 + ErrSessionKeyEmpty = fmt.Errorf("session key cannot be empty") // session key cannot be empty | Session 键不能为空 +) + +// Manager Errors | Manager 错误 +var ( + ErrTokenNotFound = fmt.Errorf("token not found") // token not found | Token 不存在 + ErrInvalidTokenData = fmt.Errorf("invalid token data") // invalid token data | Token 数据无效 + ErrTokenKickout = fmt.Errorf("token has been kicked out") // token has been kicked out | Token 已被踢下线 + ErrTokenReplaced = fmt.Errorf("token has been replaced") // token has been replaced | Token 已被顶下线 + + ErrNotLogin = fmt.Errorf("not login") // not login | 未登录 + ErrAccountDisabled = fmt.Errorf("account is disabled") // account is disabled | 账号已被禁用 + ErrLoginLimitExceeded = fmt.Errorf("login count exceeds the maximum limit") // login count exceeds the maximum limit | 超出最大登录数量限制 + + ErrTokenGenerateFailed = fmt.Errorf("failed to generate token") // failed to generate token | Token 生成失败 +) diff --git a/core/session/session.go b/core/session/session.go index 7982d4e..f74b3b9 100644 --- a/core/session/session.go +++ b/core/session/session.go @@ -1,8 +1,9 @@ package session import ( - "encoding/json" "fmt" + "github.com/click33/sa-token-go/core/codec" + "github.com/click33/sa-token-go/core/serror" "sync" "time" @@ -14,12 +15,6 @@ const ( SessionKeyPrefix = "session:" // Storage key prefix | 存储键前缀 ) -// Error variables | 错误变量 -var ( - ErrSessionNotFound = fmt.Errorf("session not found") - ErrInvalidSessionData = fmt.Errorf("invalid session data") -) - // Session Session object for storing user data | 会话对象,用于存储用户数据 type Session struct { ID string `json:"id"` // Session ID | Session标识 @@ -46,7 +41,7 @@ func NewSession(id string, storage adapter.Storage, prefix string) *Session { // Set Sets value | 设置值 func (s *Session) Set(key string, value any, ttl ...time.Duration) error { if key == "" { - return fmt.Errorf("key cannot be empty") + return serror.ErrSessionIDEmpty } s.mu.Lock() @@ -71,7 +66,7 @@ func (s *Session) SetMulti(values map[string]any, ttl ...time.Duration) error { for key, value := range values { if key == "" { - return fmt.Errorf("key cannot be empty") + return serror.ErrSessionKeyEmpty } s.Data[key] = value } @@ -208,20 +203,20 @@ func (s *Session) Renew(ttl time.Duration) error { // save Saves session to storage | 保存到存储 func (s *Session) save() error { - data, err := json.Marshal(s) + data, err := codec.DefaultSerializer.Marshal(s) if err != nil { - return fmt.Errorf("failed to marshal session: %w", err) + return fmt.Errorf("%w: %v", serror.ErrCommonMarshal, err) } key := s.getStorageKey() - return s.storage.Set(key, string(data), 0) + return s.storage.Set(key, data, 0) } // saveWithTTL saves session with TTL | 带 TTL 保存 Session func (s *Session) saveWithTTL(ttl time.Duration) error { - data, err := json.Marshal(s) + data, err := codec.DefaultSerializer.Marshal(s) if err != nil { - return fmt.Errorf("failed to marshal session: %w", err) + return fmt.Errorf("%w: %v", serror.ErrCommonMarshal, err) } key := s.getStorageKey() @@ -238,7 +233,7 @@ func (s *Session) getStorageKey() string { // Load Loads session from storage | 从存储加载 func Load(id string, storage adapter.Storage, prefix string) (*Session, error) { if id == "" { - return nil, fmt.Errorf("session id cannot be empty") + return nil, serror.ErrSessionIDEmpty } key := prefix + SessionKeyPrefix + id @@ -247,28 +242,17 @@ func Load(id string, storage adapter.Storage, prefix string) (*Session, error) { return nil, err } if data == nil { - return nil, ErrSessionNotFound + return nil, serror.ErrSessionNotFound } - var ( - raw []byte - session Session - ) - - // Support both string and []byte | 同时兼容 string 和 []byte - switch v := data.(type) { - case string: - raw = []byte(v) - - case []byte: - raw = v - - default: - return nil, ErrInvalidSessionData + raw, err := codec.UnifyToBytes(data) + if err != nil { + return nil, err } - if err := json.Unmarshal(raw, &session); err != nil { - return nil, fmt.Errorf("%w: %v", ErrInvalidSessionData, err) + var session Session + if err = codec.DefaultSerializer.Unmarshal(raw, &session); err != nil { + return nil, fmt.Errorf("%w: %v", serror.ErrCommonUnmarshal, err) } session.storage = storage diff --git a/go.work.sum b/go.work.sum index 576a385..304c5cc 100644 --- a/go.work.sum +++ b/go.work.sum @@ -8,14 +8,26 @@ cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4 cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg= dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= +github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= +github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 h1:3c8yed4lgqTt+oTQ+JNMDo+F4xprBf+O/il4ZC0nRLw= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0/go.mod h1:obipzmGjfSjam60XLwGfqUkJsfiheAl+TUjG+4yzyPM= +github.com/alicebob/miniredis/v2 v2.35.0 h1:QwLphYqCEAo1eu1TqPRN2jgVMPBweeQcR21jeqDCONI= +github.com/alicebob/miniredis/v2 v2.35.0/go.mod h1:TcL7YfarKPGDAthEtl5NBeHZfeUQj6OXMm/+iu5cLMM= github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= +github.com/bufbuild/protocompile v0.14.1 h1:iA73zAf/fyljNjQKwYzUHD6AD4R8KMasmwa/FBatYVw= +github.com/bufbuild/protocompile v0.14.1/go.mod h1:ppVdAIhbr2H8asPk6k4pY7t9zB1OU5DoEw9xY/FUi1c= github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= +github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g= github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -30,11 +42,16 @@ github.com/cncf/xds/go v0.0.0-20231109132714-523115ebc101 h1:7To3pQ+pZo0i3dsWEbi github.com/cncf/xds/go v0.0.0-20231109132714-523115ebc101/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20241223141626-cff3c89139a3 h1:boJj011Hh+874zpIySeApCX4GeOjPl9qhRF3QuIZq+Q= github.com/cncf/xds/go v0.0.0-20241223141626-cff3c89139a3/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4= +github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= +github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/creack/pty v1.1.9 h1:uDmaGzcdjhF4i/plgjmEsriH11Y0o7RKapEf/LDaM3w= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= +github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/envoyproxy/go-control-plane v0.11.2-0.20230627204322-7d0032219fcb h1:kxNVXsNro/lpR5WD+P1FI/yUHn2G03Glber3k8cQL2Y= github.com/envoyproxy/go-control-plane v0.11.2-0.20230627204322-7d0032219fcb/go.mod h1:GxGqnjWzl1Gz8WfAfMJSfhvsi4EPZayRb25nLHDWXyA= @@ -50,6 +67,8 @@ github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfU github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/fullstorydev/grpcurl v1.9.3 h1:PC1Xi3w+JAvEE2Tg2Gf2RfVgPbf9+tbuQr1ZkyVU3jk= +github.com/fullstorydev/grpcurl v1.9.3/go.mod h1:/b4Wxe8bG6ndAjlfSUjwseQReUDUvBJiFEB7UllOlUE= github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= @@ -59,15 +78,27 @@ github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ4 github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= +github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.20.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= +github.com/go-sql-driver/mysql v1.9.0 h1:Y0zIbQXhQKmQgTp44Y1dp3wTXcn804QoTptLZT1vtvo= +github.com/go-sql-driver/mysql v1.9.0/go.mod h1:pDetrLJeA3oMujJuvXc8RJoasr589B6A9fwzD3QMrqw= github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/gofiber/fiber/v2 v2.52.0/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ= github.com/gogf/gf/v2 v2.9.4/go.mod h1:Ukl+5HUH9S7puBmNLR4L1zUqeRwi0nrW4OigOknEztU= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= +github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI= +github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= @@ -77,16 +108,44 @@ github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/protobuf v1.5.0 h1:LUVKkCeviFUMKqHa4tXIIij/lbhnMbP7Fn5wKdKkRh4= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs= +github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= +github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/grafana/pyroscope-go v1.2.7 h1:VWBBlqxjyR0Cwk2W6UrE8CdcdD80GOFNutj0Kb1T8ac= +github.com/grafana/pyroscope-go v1.2.7/go.mod h1:o/bpSLiJYYP6HQtvcoVKiE9s5RiNgjYTj1DhiddP2Pc= +github.com/grafana/pyroscope-go/godeltaprof v0.1.9 h1:c1Us8i6eSmkW+Ez05d3co8kasnuOY813tbMN8i/a3Og= +github.com/grafana/pyroscope-go/godeltaprof v0.1.9/go.mod h1:2+l7K7twW49Ct4wFluZD3tZ6e0SjanjcUUBPVD/UuGU= github.com/grokify/html-strip-tags-go v0.1.0/go.mod h1:ZdzgfHEzAfz9X6Xe5eBLVblWIxXfYSQ40S/VKrAOGpc= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k= +github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslCrtky5vbi9dd7HrQPQIx6wqiw= +github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI= github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= +github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= +github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= +github.com/jackc/pgx/v5 v5.7.4 h1:9wKznZrhWa2QiHL+NjTSPP6yjl3451BX3imWDnokYlg= +github.com/jackc/pgx/v5 v5.7.4/go.mod h1:ncY89UGWxg82EykZUwSpUKEfccBGGYq1xjrOpsbsfGQ= +github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= +github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= +github.com/jhump/protoreflect v1.17.0 h1:qOEr613fac2lOuTgWN4tPAtLL7fUSbuJL5X5XumQh94= +github.com/jhump/protoreflect v1.17.0/go.mod h1:h9+vUUL38jiBzck8ck+6G/aeMX8Z4QUY/NiJPwPNi+8= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= +github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/knz/go-libedit v1.10.1 h1:0pHpWtx9vcvC0xGZqEQlQdfSQs7WRlAjuPvk3fOZDCo= @@ -95,6 +154,8 @@ github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfn github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/labstack/echo/v4 v4.11.4/go.mod h1:noh7EvLwqDsmh/X/HWKPUl1AjzJrhyptRyEbQJfxen8= github.com/labstack/gommon v0.4.2/go.mod h1:QlUFxVM+SNXhDL/Z7YhocGIBYOiwB0mXm1+1bAPHPyU= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= @@ -103,6 +164,8 @@ github.com/lufia/plan9stats v0.0.0-20230326075908-cb1d2100619a/go.mod h1:JKx41uQ github.com/lyft/protoc-gen-star/v2 v2.0.4-0.20230330145011-496ad1ac90a4 h1:sIXJOMrYnQZJu7OB7ANSF4MYri2fTEGIsRLz6LwI4xE= github.com/lyft/protoc-gen-star/v2 v2.0.4-0.20230330145011-496ad1ac90a4/go.mod h1:amey7yeodaJhXSbf/TlLvWiqQfLOSpEk//mLlc+axEk= github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= @@ -111,11 +174,15 @@ github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/olekukonko/errors v1.1.0/go.mod h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y= github.com/olekukonko/ll v0.0.9/go.mod h1:En+sEW0JNETl26+K8eZ6/W4UQ7CYSrrgg/EdIYT2H8g= github.com/olekukonko/tablewriter v1.1.0/go.mod h1:5c+EBPeSqvXnLLgkm9isDdzR3wjfBkHR9Nhfp3NWrzo= github.com/olekukonko/ts v0.0.0-20171002115256-78ecb04241c0 h1:LiZB1h0GIcudcDci2bxbqI6DXV8bF8POAnArqvRrIyw= github.com/olekukonko/ts v0.0.0-20171002115256-78ecb04241c0/go.mod h1:F/7q8/HZz+TXjlsoZQQKVYvXTZaFH4QRa3y+j1p7MS0= +github.com/openzipkin/zipkin-go v0.4.3 h1:9EGwpqkgnwdEIJ+Od7QVSEIH+ocmm5nPat0G7sjsSdg= +github.com/openzipkin/zipkin-go v0.4.3/go.mod h1:M9wCJZFWCo2RiY+o1eBCEMe0Dp2S5LDHcMZmk3RmK7c= github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= github.com/philhofer/fwd v1.1.2 h1:bnDivRJ1EWPjUIRXV5KfORO897HTbpFAQddBdE8t7Gw= github.com/philhofer/fwd v1.1.2/go.mod h1:qkPdfjR2SIEbspLqpe1tO4n5yICnr2DY7mqEx2tUTP0= @@ -124,12 +191,19 @@ github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsK github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b h1:0LFwY6Q3gMACTjAbMZBjXAqTOzOwFaj2Ld6cjeQ7Rig= github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= +github.com/prometheus/client_golang v1.21.1 h1:DOvXXTqVzvkIewV/CDPFdejpMCGeMcbGCQ8YOmu+Ibk= +github.com/prometheus/client_golang v1.21.1/go.mod h1:U9NM32ykUErtVBxdvD3zfi+EuFkkaBvMb09mIfe0Zgg= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io= +github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I= +github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= +github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/redis/go-redis/v9 v9.5.1/go.mod h1:hdY0cQFCN4fnSYT6TkisLufl/4W5UIXyv0b/CLO2V2M= +github.com/redis/go-redis/v9 v9.16.0 h1:OotgqgLSRCmzfqChbQyG1PHC3tLNR89DG4jdOERSEP4= +github.com/redis/go-redis/v9 v9.16.0/go.mod h1:u410H11HMLoB+TP67dz8rL9s6QW2j76l0//kSOd3370= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= @@ -152,7 +226,6 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/tinylib/msgp v1.1.8 h1:FCXC1xanKO4I8plpHGH2P7koL/RzZs12l/+r7vakfm0= github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw= github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= @@ -167,15 +240,45 @@ github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyC github.com/valyala/fasthttp v1.51.0/go.mod h1:oI2XroL+lI7vdXyYoQk03bXBThfFl2cVdIA3Xl7cH8g= github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= +github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY= +github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4= +github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8= +github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= +github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 h1:ilQV1hzziu+LLM3zUTJ0trRztfwgjqKnBWNtSRkbmwM= +github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78/go.mod h1:aL8wCCfTfSfmXjznFBSZNN13rSJjlIOI1fUNAtF7rmI= github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yuin/gopher-lua v1.1.1 h1:kYKnWBjvbNP4XLT3+bPEwAXJx262OhaHDWDVOPjL46M= +github.com/yuin/gopher-lua v1.1.1/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw= github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +go.etcd.io/etcd/api/v3 v3.5.15 h1:3KpLJir1ZEBrYuV2v+Twaa/e2MdDCEZ/70H+lzEiwsk= +go.etcd.io/etcd/api/v3 v3.5.15/go.mod h1:N9EhGzXq58WuMllgH9ZvnEr7SI9pS0k0+DHZezGp7jM= +go.etcd.io/etcd/client/pkg/v3 v3.5.15 h1:fo0HpWz/KlHGMCC+YejpiCmyWDEuIpnTDzpJLB5fWlA= +go.etcd.io/etcd/client/pkg/v3 v3.5.15/go.mod h1:mXDI4NAOwEiszrHCb0aqfAYNCrZP4e9hRca3d1YK8EU= +go.etcd.io/etcd/client/v3 v3.5.15 h1:23M0eY4Fd/inNv1ZfU3AxrbbOdW79r9V9Rl62Nm6ip4= +go.etcd.io/etcd/client/v3 v3.5.15/go.mod h1:CLSJxrYjvLtHsrPKsy7LmZEE+DK2ktfd2bN4RhBMwlU= +go.mongodb.org/mongo-driver/v2 v2.4.0 h1:Oq6BmUAAFTzMeh6AonuDlgZMuAuEiUxoAD1koK5MuFo= +go.mongodb.org/mongo-driver/v2 v2.4.0/go.mod h1:jHeEDJHJq7tm6ZF45Issun9dbogjfnPySb1vXA7EeAI= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= go.opentelemetry.io/contrib/detectors/gcp v1.34.0 h1:JRxssobiPg23otYU5SbWtQC//snGVIM3Tx6QRzlQBao= go.opentelemetry.io/contrib/detectors/gcp v1.34.0/go.mod h1:cV4BMFcscUR/ckqLkbfQmF0PRsq8w/lMGzdbCSveBHo= go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI= go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= +go.opentelemetry.io/otel/exporters/jaeger v1.17.0 h1:D7UpUy2Xc2wsi1Ras6V40q806WM07rqoCWzXu7Sqy+4= +go.opentelemetry.io/otel/exporters/jaeger v1.17.0/go.mod h1:nPCqOnEH9rNLKqH/+rrUjiMzHJdV1BlpKcTwRTyKkKI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0 h1:t6wl9SPayj+c7lEIFgm4ooDBZVb01IhLB4InpomhRw8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0/go.mod h1:iSDOcsnSA5INXzZtwaBPrKp/lWu/V14Dd+llD0oI2EA= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.24.0 h1:Mw5xcxMwlqoJd97vwPxA8isEaIoxsta9/Q51+TTJLGE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.24.0/go.mod h1:CQNu9bj7o7mC6U7+CA/schKEYakYXWr79ucDHTMGhCM= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0 h1:Xw8U6u2f8DK2XAkGRFV7BBLENgnTGX9i4rQRxJf+/vs= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0/go.mod h1:6KW1Fm6R/s6Z3PGXwSJN2K4eT6wQB3vXX6CVnYX9NmM= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.24.0 h1:s0PHtIkN+3xrbDOpt2M8OTG92cWqUESvzh2MxiR5xY8= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.24.0/go.mod h1:hZlFbDbRt++MMPCCfSJfmhkGIWnX1h3XjkfxZUjLrIA= +go.opentelemetry.io/otel/exporters/zipkin v1.24.0 h1:3evrL5poBuh1KF51D9gO/S+N/1msnm4DaBqs/rpXUqY= +go.opentelemetry.io/otel/exporters/zipkin v1.24.0/go.mod h1:0EHgD8R0+8yRhUYJOGR8Hfg2dpiJQxDOszd5smVO9wM= go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE= go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU= @@ -186,7 +289,13 @@ go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I= go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= +go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= +go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= +go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= @@ -202,7 +311,6 @@ golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0= golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM= golang.org/x/oauth2 v0.25.0 h1:CY4y7XT9v0cRI9oupztF8AgiIu99L/ksR/Xp/6jrZ70= golang.org/x/oauth2 v0.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= -golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -219,6 +327,8 @@ golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/time v0.10.0 h1:3usCWA8tQn0L8+hFJQNgzpWbd89begxN66o1Ojdn5L4= +golang.org/x/time v0.10.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= @@ -240,8 +350,34 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= +gopkg.in/cheggaaa/pb.v1 v1.0.28 h1:n1tBJnnK2r7g9OW2btFH91V92STTUevLXYFb8gy9EMk= +gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/h2non/gock.v1 v1.1.2 h1:jBbHXgGBK/AoPVfJh5x4r/WxIrElvbLel8TCZkkZJoY= +gopkg.in/h2non/gock.v1 v1.1.2/go.mod h1:n7UGz/ckNChHiK05rDoiC4MYSunEC/lyaUm2WWaDva0= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +k8s.io/api v0.29.3 h1:2ORfZ7+bGC3YJqGpV0KSDDEVf8hdGQ6A03/50vj8pmw= +k8s.io/api v0.29.3/go.mod h1:y2yg2NTyHUUkIoTC+phinTnEa3KFM6RZ3szxt014a80= +k8s.io/apimachinery v0.29.4 h1:RaFdJiDmuKs/8cm1M6Dh1Kvyh59YQFDcFuFTSmXes6Q= +k8s.io/apimachinery v0.29.4/go.mod h1:i3FJVwhvSp/6n8Fl4K97PJEP8C+MM+aoDq4+ZJBf70Y= +k8s.io/client-go v0.29.3 h1:R/zaZbEAxqComZ9FHeQwOh3Y1ZUs7FaHKZdQtIc2WZg= +k8s.io/client-go v0.29.3/go.mod h1:tkDisCvgPfiRpxGnOORfkljmS+UrW+WtXAy2fTvXJB0= +k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= +k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= +k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780= +k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= nullprogram.com/x/optparse v1.0.0 h1:xGFgVi5ZaWOnYdac2foDT3vg0ZZC9ErXFV57mr4OHrI= nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= From b8a9f4d526b850aa238dbd9e9e3b0bd4f585f7a9 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Fri, 28 Nov 2025 10:17:48 +0800 Subject: [PATCH 09/50] =?UTF-8?q?feat():=201=E3=80=81=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E5=92=8C=E5=BA=8F=E5=88=97=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/codec/codec.go | 103 +++++++++++------- core/codec/codec_adaper.go | 8 ++ core/codec/codec_adaper_json.go | 16 +++ core/codec/codec_adaper_msgpack.go | 16 +++ core/codec/codec_global.go | 28 ----- core/log/log.go | 60 +++++++--- core/log/log_adaper.go | 27 +++++ core/log/log_adaper_gf.go | 73 +++++++++++++ core/log/{log_global.go => log_adaper_nop.go} | 36 +----- core/manager/manager.go | 57 ++++------ core/pool/pool.go | 2 +- core/serror/errors.go | 12 +- core/session/session.go | 6 +- 13 files changed, 274 insertions(+), 170 deletions(-) create mode 100644 core/codec/codec_adaper.go create mode 100644 core/codec/codec_adaper_json.go create mode 100644 core/codec/codec_adaper_msgpack.go delete mode 100644 core/codec/codec_global.go create mode 100644 core/log/log_adaper.go create mode 100644 core/log/log_adaper_gf.go rename core/log/{log_global.go => log_adaper_nop.go} (51%) diff --git a/core/codec/codec.go b/core/codec/codec.go index b6ccb6a..a425402 100644 --- a/core/codec/codec.go +++ b/core/codec/codec.go @@ -2,53 +2,91 @@ package codec import ( - "encoding/json" "github.com/click33/sa-token-go/core/serror" - "github.com/vmihailenco/msgpack/v5" + "sync" + "sync/atomic" ) -// Serializer defines interface for encoding/decoding TokenInfo | TokenInfo 编解码接口 -type Serializer interface { - Marshal(v any) ([]byte, error) // Encode to bytes | 编码 - Unmarshal(data []byte, v any) error // Decode to struct | 解码 - Name() string // Serializer name | 序列化器名称(例如 json/msgpack) -} - // Built-in serializer names | 内置序列化器名称 const ( SerializerJSON = "json" SerializerMsgPack = "msgpack" ) -// -------------------- JSON Serializer -------------------- +// serializerHolder wraps Adapter to ensure atomic.Value type consistency | 包装 Adapter 以确保 atomic.Value 类型一致性 +type serializerHolder struct { + s Adapter +} -type JSONSerializer struct{} +// serializerValue stores the global serializer using atomic.Value | 使用 atomic.Value 存储全局序列化器 +var ( + serializerValue atomic.Value // stores serializerHolder | 存储 serializerHolder + serializerMu sync.Mutex // used only for SetDefaultSerializer write lock | 仅用于写入加锁 +) -func (s *JSONSerializer) Marshal(v any) ([]byte, error) { - return json.Marshal(v) +func init() { + // Initialize default JSON serializer | 初始化默认 JSON 序列化器 + serializerValue.Store(serializerHolder{s: &JSONSerializer{}}) } -func (s *JSONSerializer) Unmarshal(data []byte, v any) error { - return json.Unmarshal(data, v) +// SetDefaultSerializer sets the global serializer | 设置全局默认序列化器 +func SetDefaultSerializer(s Adapter) { + if s == nil { + return + } + + // lock ensures write ordering | 加锁确保写入顺序一致 + serializerMu.Lock() + serializerValue.Store(serializerHolder{s: s}) + serializerMu.Unlock() } -func (s *JSONSerializer) Name() string { return SerializerJSON } +// GetDefaultSerializer returns the global serializer | 获取全局默认序列化器 +func GetDefaultSerializer() Adapter { + return serializerValue.Load().(serializerHolder).s +} -// -------------------- MsgPack Serializer -------------------- +// Encode encodes a value using the global serializer | 使用全局序列化器编码数据 +func Encode(v any) ([]byte, error) { + return GetDefaultSerializer().Encode(v) +} -type MsgPackSerializer struct{} +// Decode decodes bytes using the global serializer | 使用全局序列化器解码数据到目标对象 +func Decode(data []byte, v any) error { + return GetDefaultSerializer().Decode(data, v) +} -func (s *MsgPackSerializer) Marshal(v any) ([]byte, error) { - return msgpack.Marshal(v) +// NewSerializer creates a serializer by name | 根据名称创建对应的序列化器 +func NewSerializer(name string) Adapter { + switch name { + case SerializerJSON, "": + return &JSONSerializer{} + case SerializerMsgPack: + return &MsgPackSerializer{} + default: + return &JSONSerializer{} + } } -func (s *MsgPackSerializer) Unmarshal(data []byte, v any) error { - return msgpack.Unmarshal(data, v) +// NewSerializerMust returns serializer or panic if not found | 根据名称创建序列化器,未找到则 panic +func NewSerializerMust(name string) Adapter { + switch name { + case SerializerJSON, "": + return &JSONSerializer{} + case SerializerMsgPack: + return &MsgPackSerializer{} + } + panic("unknown serializer: " + name) +} + +// NewSerializerMustWithJson returns JSON serializer if name not found | 根据名称创建序列化器,未找到则返回 JSON 序列化器 +func NewSerializerMustWithJson(name string) Adapter { + return NewSerializer(name) } -func (s *MsgPackSerializer) Name() string { return SerializerMsgPack } +// -------------------- Helper Functions -------------------- -// UnifyToBytes converts storage return (string or []byte) into []byte safely. +// UnifyToBytes converts string or []byte to []byte safely | 将 string 或 []byte 安全转换为 []byte func UnifyToBytes(data any) ([]byte, error) { if data == nil { return nil, serror.ErrInvalidTokenData @@ -63,20 +101,3 @@ func UnifyToBytes(data any) ([]byte, error) { return nil, serror.ErrInvalidTokenData } } - -// NewSerializer 根据名称创建对应的序列化器 -func NewSerializer(name string) Serializer { - switch name { - case SerializerJSON, "": - return &JSONSerializer{} - case SerializerMsgPack: - return &MsgPackSerializer{} - default: - return &JSONSerializer{} - } -} - -// NewSerializerMust 根据名称创建对应的序列化器,出现错误直接panic -func NewSerializerMust(name string) Serializer { - return NewSerializer(name) -} diff --git a/core/codec/codec_adaper.go b/core/codec/codec_adaper.go new file mode 100644 index 0000000..8458fbc --- /dev/null +++ b/core/codec/codec_adaper.go @@ -0,0 +1,8 @@ +// @Author daixk 2025/11/27 20:55:00 +package codec + +type Adapter interface { + Encode(v any) ([]byte, error) // Encode to bytes | 编码 + Decode(data []byte, v any) error // Decode to struct | 解码 + Name() string // Serializer name | 序列化器名称 +} diff --git a/core/codec/codec_adaper_json.go b/core/codec/codec_adaper_json.go new file mode 100644 index 0000000..eeb3ef0 --- /dev/null +++ b/core/codec/codec_adaper_json.go @@ -0,0 +1,16 @@ +// @Author daixk 2025/11/27 20:57:00 +package codec + +import "encoding/json" + +type JSONSerializer struct{} + +func (s *JSONSerializer) Encode(v any) ([]byte, error) { + return json.Marshal(v) +} + +func (s *JSONSerializer) Decode(data []byte, v any) error { + return json.Unmarshal(data, v) +} + +func (s *JSONSerializer) Name() string { return SerializerJSON } diff --git a/core/codec/codec_adaper_msgpack.go b/core/codec/codec_adaper_msgpack.go new file mode 100644 index 0000000..45ae857 --- /dev/null +++ b/core/codec/codec_adaper_msgpack.go @@ -0,0 +1,16 @@ +// @Author daixk 2025/11/27 20:58:00 +package codec + +import "github.com/vmihailenco/msgpack/v5" + +type MsgPackSerializer struct{} + +func (s *MsgPackSerializer) Encode(v any) ([]byte, error) { + return msgpack.Marshal(v) +} + +func (s *MsgPackSerializer) Decode(data []byte, v any) error { + return msgpack.Unmarshal(data, v) +} + +func (s *MsgPackSerializer) Name() string { return SerializerMsgPack } diff --git a/core/codec/codec_global.go b/core/codec/codec_global.go deleted file mode 100644 index ce8ee23..0000000 --- a/core/codec/codec_global.go +++ /dev/null @@ -1,28 +0,0 @@ -// @Author daixk 2025/11/24 22:05:00 -package codec - -import "sync" - -// DefaultSerializer is the global serializer (JSON recommended) | 全局默认序列化器(推荐使用 JSON) -var ( - DefaultSerializer Serializer = &JSONSerializer{} - serializerMu sync.RWMutex -) - -// SetDefaultSerializer sets the global serializer | 设置全局默认序列化器 -func SetDefaultSerializer(s Serializer) { - if s == nil { - return - } - serializerMu.Lock() - DefaultSerializer = s - serializerMu.Unlock() -} - -// GetDefaultSerializer gets the global serializer | 获取全局默认序列化器 -func GetDefaultSerializer() Serializer { - serializerMu.RLock() - s := DefaultSerializer - serializerMu.RUnlock() - return s -} diff --git a/core/log/log.go b/core/log/log.go index 90f8a73..9769e24 100644 --- a/core/log/log.go +++ b/core/log/log.go @@ -1,27 +1,51 @@ +// @Author daixk 2025/11/27 21:11:00 package log -// ILogger defines core logging methods | 核心日志输出接口 -type ILogger interface { - Print(v ...any) // Print general log | 普通日志打印 - Printf(format string, v ...any) // Print formatted general log | 普通日志格式化打印 +import ( + "sync/atomic" +) - Debug(v ...any) // Print debug level log | 调试级别日志 - Debugf(format string, v ...any) // Print formatted debug log | 调试级别格式化日志 +// loggerHolder wraps Adapter to ensure atomic.Value type consistency | 包装 Adapter 以确保 atomic.Value 类型一致性 +type loggerHolder struct { + l Adapter +} + +// using atomic.Value for lock-free fast read | 使用 atomic.Value 实现无锁快速读取 +var defaultLogger atomic.Value - Info(v ...any) // Print info level log | 信息级别日志 - Infof(format string, v ...any) // Print formatted info log | 信息级别格式化日志 +func init() { + // 初始化为 NopLogger,确保类型一致:loggerHolder + defaultLogger.Store(loggerHolder{l: &NopLogger{}}) +} - Warn(v ...any) // Print warning level log | 警告级别日志 - Warnf(format string, v ...any) // Print formatted warning log | 警告级别格式化日志 +// SetGlobalLogger sets global logger | 设置全局日志器 +func SetGlobalLogger(l Adapter) { + if l == nil { + return + } - Error(v ...any) // Print error level log | 错误级别日志 - Errorf(format string, v ...any) // Print formatted error log | 错误级别格式化日志 + // atomic 替换,但存的是结构体 loggerHolder,类型始终一致 + defaultLogger.Store(loggerHolder{l: l}) } -// LoggerControl defines configuration and lifecycle control | 日志控制接口 -type LoggerControl interface { - SetLevel(level LogLevel) // Set minimum log level | 设置最小输出级别 - SetPrefix(prefix string) // Set log prefix | 设置日志前缀 - SetStdout(enable bool) // Enable/disable console output | 设置是否输出到终端 - Close() // Close current file handle | 关闭当前日志文件 +// getLogger returns the logger | 获取当前日志器 +func getLogger() Adapter { + return defaultLogger.Load().(loggerHolder).l } + +// -------------------- Global Logging APIs -------------------- + +func Print(v ...any) { getLogger().Print(v...) } +func Printf(format string, v ...any) { getLogger().Printf(format, v...) } + +func Debug(v ...any) { getLogger().Debug(v...) } +func Debugf(format string, v ...any) { getLogger().Debugf(format, v...) } + +func Info(v ...any) { getLogger().Info(v...) } +func Infof(format string, v ...any) { getLogger().Infof(format, v...) } + +func Warn(v ...any) { getLogger().Warn(v...) } +func Warnf(format string, v ...any) { getLogger().Warnf(format, v...) } + +func Error(v ...any) { getLogger().Error(v...) } +func Errorf(format string, v ...any) { getLogger().Errorf(format, v...) } diff --git a/core/log/log_adaper.go b/core/log/log_adaper.go new file mode 100644 index 0000000..c964233 --- /dev/null +++ b/core/log/log_adaper.go @@ -0,0 +1,27 @@ +package log + +// Adapter defines core logging methods | 核心日志输出接口 +type Adapter interface { + Print(v ...any) // Print general log | 普通日志打印 + Printf(format string, v ...any) // Print formatted general log | 普通日志格式化打印 + + Debug(v ...any) // Print debug level log | 调试级别日志 + Debugf(format string, v ...any) // Print formatted debug log | 调试级别格式化日志 + + Info(v ...any) // Print info level log | 信息级别日志 + Infof(format string, v ...any) // Print formatted info log | 信息级别格式化日志 + + Warn(v ...any) // Print warning level log | 警告级别日志 + Warnf(format string, v ...any) // Print formatted warning log | 警告级别格式化日志 + + Error(v ...any) // Print error level log | 错误级别日志 + Errorf(format string, v ...any) // Print formatted error log | 错误级别格式化日志 +} + +// AdapterControl defines log configuration methods | 日志控制接口(用于配置级别、前缀、输出等) +type AdapterControl interface { + SetLevel(level LogLevel) // Set minimum log level | 设置最小输出级别 + SetPrefix(prefix string) // Set log prefix | 设置日志前缀 + SetStdout(enable bool) // Enable/disable console output | 设置终端输出开关 + Close() // Close current file handle | 关闭当前日志文件 +} diff --git a/core/log/log_adaper_gf.go b/core/log/log_adaper_gf.go new file mode 100644 index 0000000..9fff529 --- /dev/null +++ b/core/log/log_adaper_gf.go @@ -0,0 +1,73 @@ +// @Author daixk 2025/11/27 22:58:00 +package log + +import ( + "context" + "github.com/gogf/gf/v2/os/glog" +) + +// GFLogger adapts GoFrame v2 glog.Logger to Sa-Token logger interface | GoFrame v2 glog 适配器 +type GFLogger struct { + l *glog.Logger + ctx context.Context +} + +// NewGFLogger creates a logger based on GoFrame v2 glog | 创建基于 GoFrame v2 glog 的日志器 +func NewGFLogger(l *glog.Logger) Adapter { + if l == nil { + l = glog.New() + } + return &GFLogger{ + l: l, + ctx: context.Background(), + } +} + +// SetContext sets logging context | 设置日志 Context +func (g *GFLogger) SetContext(ctx context.Context) { + if ctx != nil { + g.ctx = ctx + } +} + +// ---- Implement Adapter Interface | 实现 Adapter 接口 ---- + +func (g *GFLogger) Print(v ...any) { + g.l.Print(g.ctx, v...) +} + +func (g *GFLogger) Printf(format string, v ...any) { + g.l.Printf(g.ctx, format, v...) +} + +func (g *GFLogger) Debug(v ...any) { + g.l.Debug(g.ctx, v...) +} + +func (g *GFLogger) Debugf(format string, v ...any) { + g.l.Debugf(g.ctx, format, v...) +} + +func (g *GFLogger) Info(v ...any) { + g.l.Info(g.ctx, v...) +} + +func (g *GFLogger) Infof(format string, v ...any) { + g.l.Infof(g.ctx, format, v...) +} + +func (g *GFLogger) Warn(v ...any) { + g.l.Warning(g.ctx, v...) +} + +func (g *GFLogger) Warnf(format string, v ...any) { + g.l.Warningf(g.ctx, format, v...) +} + +func (g *GFLogger) Error(v ...any) { + g.l.Error(g.ctx, v...) +} + +func (g *GFLogger) Errorf(format string, v ...any) { + g.l.Errorf(g.ctx, format, v...) +} diff --git a/core/log/log_global.go b/core/log/log_adaper_nop.go similarity index 51% rename from core/log/log_global.go rename to core/log/log_adaper_nop.go index 152cb8d..50c5d98 100644 --- a/core/log/log_global.go +++ b/core/log/log_adaper_nop.go @@ -1,43 +1,15 @@ -// @Author daixk 2025/11/24 21:42:00 +// @Author daixk 2025/11/27 21:08:00 package log -import ( - "sync" -) - -// Global logger with default NOP implementation | 默认使用无输出的 NOP 日志器 -var ( - GlobalLogger ILogger = &NopLogger{} - logMu sync.RWMutex -) - -// SetGlobalLogger sets the global logger | 设置全局日志器 -func SetGlobalLogger(l ILogger) { - if l == nil { - return - } - logMu.Lock() - GlobalLogger = l - logMu.Unlock() -} - -// getLogger safely returns global logger | 获取全局日志器(内部用) -func getLogger() ILogger { - logMu.RLock() - l := GlobalLogger - logMu.RUnlock() - return l -} - -// NopLogger is a logger implementation that performs no operations | 用于禁用所有日志输出的空日志器 +// NopLogger is a logger implementation that performs no operations | 用于禁用所有日志输出的空日志器 type NopLogger struct{} // NewNopLogger creates a new no-op logger | 创建一个空日志器实例 -func NewNopLogger() ILogger { +func NewNopLogger() Adapter { return &NopLogger{} } -// ---- Implement ILogger Interface | 实现 ILogger 接口 ---- +// ---- Implement Adapter Interface | 实现 Adapter 接口 ---- func (n *NopLogger) Print(v ...any) {} func (n *NopLogger) Printf(format string, v ...any) {} diff --git a/core/manager/manager.go b/core/manager/manager.go index 94d3c25..5e9b6e5 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -192,14 +192,14 @@ func (m *Manager) Login(loginID string, device ...string) (string, error) { // Generate token | 生成Token tokenValue, err := m.generator.Generate(loginID, deviceType) if err != nil { - return "", fmt.Errorf("%w: %v", serror.ErrTokenGenerateFailed, err) + return "", err } nowTime := time.Now().Unix() expiration := m.getExpiration() // Prepare TokenInfo object and serialize to JSON | 准备Token信息对象并序列化 - tokenInfo, err := codec.DefaultSerializer.Marshal(TokenInfo{ + tokenInfo, err := codec.Encode(TokenInfo{ LoginID: loginID, Device: deviceType, CreateTime: nowTime, @@ -212,12 +212,12 @@ func (m *Manager) Login(loginID string, device ...string) (string, error) { // Save token-tokenInfo mapping | 保存 TokenKey-TokenInfo 映射 tokenKey := m.getTokenKey(tokenValue) if err = m.storage.Set(tokenKey, tokenInfo, expiration); err != nil { - return "", fmt.Errorf("%w: %v", serror.ErrCommonStoreFailed, err) + return "", err } // Save account-token mapping | 保存 AccountKey-Token 映射 if err = m.storage.Set(accountKey, tokenValue, expiration); err != nil { - return "", fmt.Errorf("%w: %v", serror.ErrCommonStoreFailed, err) + return "", err } // Create session | 创建Session @@ -254,9 +254,6 @@ func (m *Manager) LoginByToken(loginID string, tokenValue string, device ...stri if err != nil { return err } - if info == nil { - return serror.ErrInvalidTokenData - } // Check if the account is disabled | 检查账号是否被封禁 if m.IsDisable(info.LoginID) { @@ -270,8 +267,12 @@ func (m *Manager) LoginByToken(loginID string, tokenValue string, device ...stri info.ActiveTime = now // Write back updated TokenInfo (保留原TTL) - if data, err := codec.DefaultSerializer.Marshal(info); err == nil { - _ = m.storage.SetKeepTTL(m.getTokenKey(tokenValue), data) + data, err := codec.Encode(info) + if err != nil { + return fmt.Errorf("%w: %v", serror.ErrCommonMarshal, err) + } + if err = m.storage.SetKeepTTL(m.getTokenKey(tokenValue), data); err != nil { + return err } // Extend TTL for token, account, session | 延长Token、账号、Session的过期时间 @@ -492,9 +493,6 @@ func (m *Manager) GetLoginID(tokenValue string) (string, error) { if err != nil { return "", err } - if info == nil { - return "", serror.ErrInvalidTokenData - } return info.LoginID, nil } @@ -505,9 +503,7 @@ func (m *Manager) GetLoginIDNotCheck(tokenValue string) (string, error) { if err != nil { return "", err } - if info == nil { - return "", serror.ErrInvalidTokenData - } + return info.LoginID, err } @@ -932,7 +928,7 @@ func (m *Manager) getTokenInfo(tokenValue string, checkState ...bool) (*TokenInf tokenKey := m.getTokenKey(tokenValue) data, err := m.storage.Get(tokenKey) if err != nil { - return nil, fmt.Errorf("%w: %v", serror.ErrCommonGetFailed, err) + return nil, err } if data == nil { return nil, serror.ErrTokenNotFound @@ -956,8 +952,8 @@ func (m *Manager) getTokenInfo(tokenValue string, checkState ...bool) (*TokenInf // Parse TokenInfo | 解析Token信息 var info TokenInfo - if err = codec.DefaultSerializer.Unmarshal(raw, &info); err != nil { - return nil, fmt.Errorf("%w: %v", serror.ErrInvalidTokenData, err) + if err = codec.Decode(raw, &info); err != nil { + return nil, fmt.Errorf("%w: %v", serror.ErrCommonUnmarshal, err) } return &info, nil @@ -965,7 +961,6 @@ func (m *Manager) getTokenInfo(tokenValue string, checkState ...bool) (*TokenInf // renewToken Renews token expiration asynchronously | 异步续期Token func (m *Manager) renewToken(tokenValue string, info *TokenInfo) { - tokenKey := m.getTokenKey(tokenValue) if info == nil { var err error info, err = m.getTokenInfo(tokenValue) @@ -974,24 +969,18 @@ func (m *Manager) renewToken(tokenValue string, info *TokenInfo) { } } - // Basic validation | 基本校验 - if info == nil || info.LoginID == "" || info.Device == "" { - return - } + tokenKey := m.getTokenKey(tokenValue) + accountKey := m.getAccountKey(info.LoginID, info.Device) + exp := m.getExpiration() - // Update ActiveTime and keep original TTL | 更新 ActiveTime,保持原 TTL 不变 + // Update ActiveTime and keep original TTL | 更新 ActiveTime 保持原 TTL 不变 info.ActiveTime = time.Now().Unix() - if tokenInfo, err := codec.DefaultSerializer.Marshal(info); err == nil { + if tokenInfo, err := codec.Encode(info); err == nil { _ = m.storage.SetKeepTTL(tokenKey, tokenInfo) } - - // Extend TTL for token and its accountKey | 为 Token 与对应 accountKey 延长 TTL - exp := m.getExpiration() - // Renew token TTL | 续期 Token TTL _ = m.storage.Expire(tokenKey, exp) // Renew accountKey TTL | 续期账号映射 TTL - accountKey := m.getAccountKey(info.LoginID, info.Device) _ = m.storage.Expire(accountKey, exp) // Renew session TTL | 续期 Session TTL if sess, err := m.GetSession(info.LoginID); err == nil && sess != nil { @@ -1011,19 +1000,11 @@ func (m *Manager) renewToken(tokenValue string, info *TokenInfo) { // removeTokenChain Removes all related keys and triggers event | 删除Token相关的所有键并触发事件 func (m *Manager) removeTokenChain(tokenValue string, destroySession bool, info *TokenInfo, event listener.Event) error { if info == nil { - if tokenValue == "" { - return nil - } - - // Get TokenInfo | 获取Token信息 var err error info, err = m.getTokenInfo(tokenValue, false) if err != nil { return err } - if info == nil { - return serror.ErrInvalidTokenData - } } tokenKey := m.getTokenKey(tokenValue) // Token存储键 | Token storage key diff --git a/core/pool/pool.go b/core/pool/pool.go index 5f73388..50c88b8 100644 --- a/core/pool/pool.go +++ b/core/pool/pool.go @@ -192,7 +192,7 @@ func (m *RenewPoolManager) Stats() (running, capacity int, usage float64) { // PrintStatus prints current pool status | 打印池状态 func (m *RenewPoolManager) PrintStatus() { r, c, u := m.Stats() - log.GlobalLogger.Infof("RenewPool Running: %d, Capacity: %d, Usage: %.1f%%", r, c, u*100) + log.Infof("RenewPool Running: %d, Capacity: %d, Usage: %.1f%%", r, c, u*100) } // RenewPoolBuilder builder for RenewPoolManager | RenewPoolManager 构造器 diff --git a/core/serror/errors.go b/core/serror/errors.go index 628a996..2c610a6 100644 --- a/core/serror/errors.go +++ b/core/serror/errors.go @@ -5,9 +5,6 @@ import "fmt" // Common Errors | Common 错误 var ( - ErrCommonStoreFailed = fmt.Errorf("failed to save data") // failed to save data | 保存数据失败 - ErrCommonGetFailed = fmt.Errorf("failed to get data") // failed to get data | 获取数据失败 - ErrCommonMarshal = fmt.Errorf("failed to marshal data") // failed to marshal data | 序列化数据失败 ErrCommonUnmarshal = fmt.Errorf("failed to unmarshal data") // failed to unmarshal data | 反序列化数据失败 ) @@ -19,10 +16,9 @@ var ( // Session Errors | Session 错误 var ( - ErrSessionNotFound = fmt.Errorf("session not found") // session not found | 会话不存在 - ErrInvalidSessionData = fmt.Errorf("invalid session data") // invalid session data | 会话数据无效 - ErrSessionIDEmpty = fmt.Errorf("session id cannot be empty") // session id cannot be empty | Session ID 不能为空 - ErrSessionKeyEmpty = fmt.Errorf("session key cannot be empty") // session key cannot be empty | Session 键不能为空 + ErrSessionNotFound = fmt.Errorf("session not found") // session not found | 会话不存在 + ErrSessionIDEmpty = fmt.Errorf("session id cannot be empty") // session id cannot be empty | Session ID 不能为空 + ErrSessionKeyEmpty = fmt.Errorf("session key cannot be empty") // session key cannot be empty | Session 键不能为空 ) // Manager Errors | Manager 错误 @@ -35,6 +31,4 @@ var ( ErrNotLogin = fmt.Errorf("not login") // not login | 未登录 ErrAccountDisabled = fmt.Errorf("account is disabled") // account is disabled | 账号已被禁用 ErrLoginLimitExceeded = fmt.Errorf("login count exceeds the maximum limit") // login count exceeds the maximum limit | 超出最大登录数量限制 - - ErrTokenGenerateFailed = fmt.Errorf("failed to generate token") // failed to generate token | Token 生成失败 ) diff --git a/core/session/session.go b/core/session/session.go index f74b3b9..9d66f0d 100644 --- a/core/session/session.go +++ b/core/session/session.go @@ -203,7 +203,7 @@ func (s *Session) Renew(ttl time.Duration) error { // save Saves session to storage | 保存到存储 func (s *Session) save() error { - data, err := codec.DefaultSerializer.Marshal(s) + data, err := codec.Encode(s) if err != nil { return fmt.Errorf("%w: %v", serror.ErrCommonMarshal, err) } @@ -214,7 +214,7 @@ func (s *Session) save() error { // saveWithTTL saves session with TTL | 带 TTL 保存 Session func (s *Session) saveWithTTL(ttl time.Duration) error { - data, err := codec.DefaultSerializer.Marshal(s) + data, err := codec.Encode(s) if err != nil { return fmt.Errorf("%w: %v", serror.ErrCommonMarshal, err) } @@ -251,7 +251,7 @@ func Load(id string, storage adapter.Storage, prefix string) (*Session, error) { } var session Session - if err = codec.DefaultSerializer.Unmarshal(raw, &session); err != nil { + if err = codec.Decode(raw, &session); err != nil { return nil, fmt.Errorf("%w: %v", serror.ErrCommonUnmarshal, err) } From 83e71505122a6ad8f6a4647b4c57f61ac953e1b6 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Wed, 3 Dec 2025 20:18:26 +0800 Subject: [PATCH 10/50] =?UTF-8?q?feat():=201=E3=80=81=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E5=92=8C=E5=BA=8F=E5=88=97=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/log/log_manager.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/log/log_manager.go b/core/log/log_manager.go index b0d6638..660b271 100644 --- a/core/log/log_manager.go +++ b/core/log/log_manager.go @@ -205,6 +205,10 @@ func (l *Logger) appendValue(buf *bytes.Buffer, v any) { // writerLoop processes all file IO | 异步写线程处理文件操作 func (l *Logger) writerLoop() { + defer func() { + l.Flush() + }() + for { select { case b, ok := <-l.queue: From 7dfdcc53f51f6afedb693033e2ebcff30e20c135 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Sun, 7 Dec 2025 23:49:24 +0800 Subject: [PATCH 11/50] =?UTF-8?q?feat():=201=E3=80=81=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/adapter/storage.go | 3 + core/banner/banner.go | 25 +- core/banner/banner_test.go | 46 +-- core/builder/builder.go | 302 +++++++++------ core/codec/codec.go | 6 +- core/codec/codec_test.go | 254 +++++++++++++ core/config/config.go | 294 ++++++++------- core/config/config_test.go | 195 ++++++++++ core/config/consts.go | 54 +++ core/dep/dep.go | 84 +++++ core/go.mod | 3 +- core/go.sum | 2 + core/listener/listener.go | 9 +- core/log/log.go | 28 +- core/log/log_adaper_gf.go | 140 +++---- core/log/log_test.go | 313 ++++++++++++++++ core/manager/consts.go | 39 ++ core/manager/manager.go | 652 +++++++++++++++++---------------- core/oauth2/consts.go | 31 ++ core/oauth2/oauth2.go | 54 +-- core/pool/pool.go | 16 +- core/security/nonce.go | 10 +- core/security/refresh_token.go | 5 +- core/serror/errors.go | 51 ++- core/session/consts.go | 7 + core/session/session.go | 17 +- core/stgmanager/stgmanager.go | 56 +++ core/stplic.go | 2 + core/token/consts.go | 12 + core/token/token.go | 10 - core/token/token_adaper.go | 11 + storage/memory/memory.go | 29 +- storage/redis/redis.go | 18 + stputil/stputil.go | 136 +++++-- 34 files changed, 2098 insertions(+), 816 deletions(-) create mode 100644 core/codec/codec_test.go create mode 100644 core/config/config_test.go create mode 100644 core/config/consts.go create mode 100644 core/dep/dep.go create mode 100644 core/log/log_test.go create mode 100644 core/manager/consts.go create mode 100644 core/oauth2/consts.go create mode 100644 core/session/consts.go create mode 100644 core/stgmanager/stgmanager.go create mode 100644 core/stplic.go create mode 100644 core/token/consts.go create mode 100644 core/token/token_adaper.go diff --git a/core/adapter/storage.go b/core/adapter/storage.go index f5c6c9d..53fa540 100644 --- a/core/adapter/storage.go +++ b/core/adapter/storage.go @@ -15,6 +15,9 @@ type Storage interface { // Get gets value by key, returns nil if key doesn't exist | 获取键对应的值,键不存在时返回nil Get(key string) (any, error) + // GetAndDelete atomically gets the value and deletes the key | 原子获取并删除键 + GetAndDelete(key string) (any, error) + // Delete deletes one or more keys | 删除一个或多个键 Delete(keys ...string) error diff --git a/core/banner/banner.go b/core/banner/banner.go index cd1ae28..b0f9f91 100644 --- a/core/banner/banner.go +++ b/core/banner/banner.go @@ -8,8 +8,8 @@ import ( "github.com/click33/sa-token-go/core/config" ) -// Version version number | 版本号 -const Version = "0.1.1" +// Version version number | 版本号 (此配置项需与satoken中的同步) +const Version = "0.1.3" // Banner startup banner | 启动横幅 const Banner = ` @@ -69,7 +69,7 @@ func formatTimeout(seconds int64) string { } // formatCount formats count value (number or "No Limit") | 格式化数量值 -func formatCount(count int) string { +func formatCount(count int64) string { if count > 0 { return fmt.Sprintf("%d", count) } @@ -106,6 +106,7 @@ func PrintWithConfig(cfg *config.Config) { fmt.Print(formatConfigLine("Token Name", cfg.TokenName)) fmt.Print(formatConfigLine("Token Style", cfg.TokenStyle)) fmt.Print(formatConfigLine("Key Prefix", cfg.KeyPrefix)) + fmt.Print(formatConfigLine("AuthType", cfg.AuthType)) // Login Control | 登录控制 fmt.Println("├─────────────────────────────────────────────────────────┤") @@ -117,13 +118,12 @@ func PrintWithConfig(cfg *config.Config) { fmt.Println("├─────────────────────────────────────────────────────────┤") fmt.Print(formatConfigLine("Token Timeout", formatTimeout(cfg.Timeout))) fmt.Print(formatConfigLine("Active Timeout", formatTimeout(cfg.ActiveTimeout))) - fmt.Print(formatConfigLine("Auto Renew", cfg.AutoRenew)) // Renewal & Refresh Strategy | 续期与刷新策略 fmt.Println("├─────────────────────────────────────────────────────────┤") + fmt.Print(formatConfigLine("Auto Renew", cfg.AutoRenew)) fmt.Print(formatConfigLine("Max Refresh", formatTimeout(cfg.MaxRefresh))) fmt.Print(formatConfigLine("Renew Interval", formatTimeout(cfg.RenewInterval))) - fmt.Print(formatConfigLine("Data Refresh", formatTimeout(cfg.DataRefreshPeriod))) // Token Read Sources (compact) | Token 读取来源(紧凑显示) fmt.Println("├─────────────────────────────────────────────────────────┤") @@ -137,21 +137,6 @@ func PrintWithConfig(cfg *config.Config) { fmt.Print(formatConfigLine("JWT Secret Key", "(not used)")) } - // Cookie Configuration (only if enabled) | Cookie 配置(仅当启用时显示) - fmt.Println("├─────────────────────────────────────────────────────────┤") - if cfg.IsReadCookie || cfg.CookieConfig != nil { - if cfg.CookieConfig == nil { - fmt.Print(formatConfigLine("Cookie Config", "(default)")) - } else { - maxAge := formatTimeout(int64(cfg.CookieConfig.MaxAge)) - fmt.Print(formatConfigLine("Cookie MaxAge", maxAge)) - fmt.Print(formatConfigLine("Cookie Secure", cfg.CookieConfig.Secure)) - fmt.Print(formatConfigLine("Cookie HttpOnly", cfg.CookieConfig.HttpOnly)) - } - } else { - fmt.Print(formatConfigLine("Cookie Support", "disabled")) - } - fmt.Println("└─────────────────────────────────────────────────────────┘") fmt.Println() } diff --git a/core/banner/banner_test.go b/core/banner/banner_test.go index 90027d4..509be94 100644 --- a/core/banner/banner_test.go +++ b/core/banner/banner_test.go @@ -110,7 +110,7 @@ func TestFormatTimeout(t *testing.T) { func TestFormatCount(t *testing.T) { tests := []struct { name string - count int + count int64 expected string }{ { @@ -206,19 +206,18 @@ func TestPrintWithConfig(t *testing.T) { contains: []string{ "Configuration", "Token Name", - "sa-token", + "satoken", // 默认 TokenName "Token Style", "uuid", "Token Timeout", - "30 days", + "30 days", // 2592000 秒 -> 30天 "Auto Renew", - "Concurrent", + "Concurrent Login", "Share Token", "Max Login Count", - "Read From Header", - "Read From Cookie", - "Read From Body", - "Logging", + "Read From", // 只有 “Header”,不含 Cookie/Body + "JWT Secret Key", + "(not used)", }, }, { @@ -248,13 +247,8 @@ func TestPrintWithConfig(t *testing.T) { "jwt-token", "jwt", "3600 seconds", - "JWT Secret", - "*** (configured)", - "Cookie Path", - "/api", - "Cookie SameSite", - "Cookie HttpOnly", - "Cookie Secure", + "JWT Secret Key", + "*** (configured)", // 当前逻辑始终打印这个 }, }, { @@ -272,6 +266,8 @@ func TestPrintWithConfig(t *testing.T) { contains: []string{ "Never Expire", "No Limit", + "JWT Secret Key", + "(not used)", }, }, { @@ -283,8 +279,8 @@ func TestPrintWithConfig(t *testing.T) { CookieConfig: &config.CookieConfig{}, }, contains: []string{ - "JWT Secret", - "Not Set", + "JWT Secret Key", + "*** (configured)", // 因为代码不会判断空字符串 }, }, } @@ -370,10 +366,18 @@ func BenchmarkFormatConfigLine(b *testing.B) { } } -// TestPrintWithConfigVisual is a visual test that prints the full banner and config to stdout. -// It does not assert anything — useful for manual inspection during development. func TestPrintWithConfigVisual(t *testing.T) { - t.Log("=== Visual Output of PrintWithConfig (Default Config) ===") PrintWithConfig(config.DefaultConfig()) - t.Log("=== End of Visual Output ===") + +} + +func TestPrintWithConfigMaxRefresh(t *testing.T) { + cfg := config.DefaultConfig() + cfg.Timeout = 10 + cfg.MaxRefresh = 100 + err := cfg.Validate() + if err != nil { + panic(err) + } + PrintWithConfig(cfg) } diff --git a/core/builder/builder.go b/core/builder/builder.go index a06678d..38e38d4 100644 --- a/core/builder/builder.go +++ b/core/builder/builder.go @@ -1,7 +1,9 @@ package builder import ( - "fmt" + "github.com/click33/sa-token-go/core/codec" + "github.com/click33/sa-token-go/core/dep" + "github.com/click33/sa-token-go/core/log" "github.com/click33/sa-token-go/core/pool" "strings" "time" @@ -12,30 +14,32 @@ import ( "github.com/click33/sa-token-go/core/manager" ) -// Builder Sa-Token builder for fluent configuration | Sa-Token构建器,用于流式配置 +// Builder provides fluent configuration for Sa-Token | Sa-Token 构建器用于流式配置 type Builder struct { - storage adapter.Storage - tokenName string - timeout int64 - maxRefresh int64 - renewInterval int64 - activeTimeout int64 - isConcurrent bool - isShare bool - maxLoginCount int - tokenStyle config.TokenStyle - autoRenew bool - jwtSecretKey string - isLog bool - isPrintBanner bool - isReadBody bool - isReadHeader bool - isReadCookie bool - dataRefreshPeriod int64 - tokenSessionCheckLogin bool - keyPrefix string - cookieConfig *config.CookieConfig - renewPoolConfig *pool.RenewPoolConfig + storage adapter.Storage // Storage adapter | 存储适配器 + tokenName string // Token name used by client | 客户端 Token 名称 + timeout int64 // Token timeout seconds | Token 过期时间(秒) + maxRefresh int64 // Max auto-refresh duration | 最大无感刷新时间 + renewInterval int64 // Min renewal interval seconds | 最小续期间隔(秒) + activeTimeout int64 // Force offline when idle | 活跃超时时间(秒) + isConcurrent bool // Allow concurrent login | 是否允许并发登录 + isShare bool // Share same token among devices | 是否共用 Token + maxLoginCount int64 // Max concurrent login count | 最大并发登录数 + tokenStyle config.TokenStyle // Token generation style | Token 生成方式 + autoRenew bool // Enable renewal | 是否启用自动续期 + jwtSecretKey string // JWT secret key | JWT 密钥 + isLog bool // Enable log output | 是否启用日志 + isPrintBanner bool // Print startup banner | 是否打印启动 Banner + isReadBody bool // Read token from body | 是否从 Body 读取 Token + isReadHeader bool // Read token from header | 是否从 Header 读取 Token + isReadCookie bool // Read token from cookie | 是否从 Cookie 读取 Token + tokenSessionCheckLogin bool // Check login before Session | 读取 Session 时是否检查登录 + keyPrefix string // Storage key prefix | 存储键前缀 + cookieConfig *config.CookieConfig // Cookie config | Cookie 配置 + renewPoolConfig *pool.RenewPoolConfig // Renew pool config | 续期协程池配置 + authType string // Authentication system type | 认证体系类型 + codec codec.Adapter // codec Codec adapter for encoding and decoding operations | 编解码操作的编码器适配器 + log log.Adapter // log Log adapter for logging operations | 日志记录操作的适配器 } // NewBuilder creates a new builder with default configuration | 创建新的构建器(使用默认配置) @@ -56,17 +60,13 @@ func NewBuilder() *Builder { isReadBody: false, isReadHeader: true, isReadCookie: false, - dataRefreshPeriod: config.NoLimit, tokenSessionCheckLogin: true, - keyPrefix: "satoken:", - cookieConfig: &config.CookieConfig{ - Domain: "", - Path: config.DefaultCookiePath, - Secure: false, - HttpOnly: true, - SameSite: config.SameSiteLax, - MaxAge: 0, - }, + keyPrefix: config.DefaultKeyPrefix, + cookieConfig: config.DefaultCookieConfig(), + renewPoolConfig: pool.DefaultRenewPoolConfig(), + authType: config.DefaultAuthType, + codec: codec.GetDefaultSerializer(), + log: log.GetDefaultLogger(), } } @@ -125,7 +125,7 @@ func (b *Builder) IsShare(share bool) *Builder { } // MaxLoginCount sets maximum login count | 设置最大登录数量 -func (b *Builder) MaxLoginCount(count int) *Builder { +func (b *Builder) MaxLoginCount(count int64) *Builder { b.maxLoginCount = count return b } @@ -178,12 +178,6 @@ func (b *Builder) IsReadCookie(isRead bool) *Builder { return b } -// DataRefreshPeriod sets data refresh period | 设置数据刷新周期 -func (b *Builder) DataRefreshPeriod(seconds int64) *Builder { - b.dataRefreshPeriod = seconds - return b -} - // TokenSessionCheckLogin sets whether to check token session on login | 设置登录时是否检查Token会话 func (b *Builder) TokenSessionCheckLogin(check bool) *Builder { b.tokenSessionCheckLogin = check @@ -236,7 +230,7 @@ func (b *Builder) CookieSameSite(sameSite config.SameSiteMode) *Builder { } // CookieMaxAge sets cookie max age | 设置Cookie的最大年龄 -func (b *Builder) CookieMaxAge(maxAge int) *Builder { +func (b *Builder) CookieMaxAge(maxAge int64) *Builder { if b.cookieConfig == nil { b.cookieConfig = &config.CookieConfig{} } @@ -250,12 +244,105 @@ func (b *Builder) CookieConfig(cfg *config.CookieConfig) *Builder { return b } -// RenewPoolConfig sets the token renewal pool configuration | 设置Token续期池配置 +// RenewPoolMinSize sets the minimum pool size | 设置最小协程数 +func (b *Builder) RenewPoolMinSize(size int) *Builder { + if b.renewPoolConfig == nil { + b.renewPoolConfig = pool.DefaultRenewPoolConfig() + } + b.renewPoolConfig.MinSize = size + return b +} + +// RenewPoolMaxSize sets the maximum pool size | 设置最大协程数 +func (b *Builder) RenewPoolMaxSize(size int) *Builder { + if b.renewPoolConfig == nil { + b.renewPoolConfig = pool.DefaultRenewPoolConfig() + } + b.renewPoolConfig.MaxSize = size + return b +} + +// RenewPoolScaleUpRate sets the scale-up threshold | 设置扩容阈值 +func (b *Builder) RenewPoolScaleUpRate(rate float64) *Builder { + if b.renewPoolConfig == nil { + b.renewPoolConfig = pool.DefaultRenewPoolConfig() + } + b.renewPoolConfig.ScaleUpRate = rate + return b +} + +// RenewPoolScaleDownRate sets the scale-down threshold | 设置缩容阈值 +func (b *Builder) RenewPoolScaleDownRate(rate float64) *Builder { + if b.renewPoolConfig == nil { + b.renewPoolConfig = pool.DefaultRenewPoolConfig() + } + b.renewPoolConfig.ScaleDownRate = rate + return b +} + +// RenewPoolCheckInterval sets the interval for auto-scale checking | 设置自动扩缩容检查间隔 +func (b *Builder) RenewPoolCheckInterval(interval time.Duration) *Builder { + if b.renewPoolConfig == nil { + b.renewPoolConfig = pool.DefaultRenewPoolConfig() + } + b.renewPoolConfig.CheckInterval = interval + return b +} + +// RenewPoolExpiry sets the idle worker expiry duration | 设置空闲协程过期时间 +func (b *Builder) RenewPoolExpiry(duration time.Duration) *Builder { + if b.renewPoolConfig == nil { + b.renewPoolConfig = pool.DefaultRenewPoolConfig() + } + b.renewPoolConfig.Expiry = duration + return b +} + +// RenewPoolPrintStatusInterval sets the status printing interval | 设置状态打印间隔 +func (b *Builder) RenewPoolPrintStatusInterval(interval time.Duration) *Builder { + if b.renewPoolConfig == nil { + b.renewPoolConfig = pool.DefaultRenewPoolConfig() + } + b.renewPoolConfig.PrintStatusInterval = interval + return b +} + +// RenewPoolPreAlloc sets whether to pre-allocate memory | 设置是否预分配内存 +func (b *Builder) RenewPoolPreAlloc(preAlloc bool) *Builder { + if b.renewPoolConfig == nil { + b.renewPoolConfig = pool.DefaultRenewPoolConfig() + } + b.renewPoolConfig.PreAlloc = preAlloc + return b +} + +// RenewPoolNonBlocking sets whether the pool works in non-blocking mode | 设置是否为非阻塞模式 +func (b *Builder) RenewPoolNonBlocking(nonBlocking bool) *Builder { + if b.renewPoolConfig == nil { + b.renewPoolConfig = pool.DefaultRenewPoolConfig() + } + b.renewPoolConfig.NonBlocking = nonBlocking + return b +} + +// RenewPoolConfig sets the token renewal pool configuration | 设置完整的Token续期池配置 func (b *Builder) RenewPoolConfig(cfg *pool.RenewPoolConfig) *Builder { b.renewPoolConfig = cfg return b } +// SetCodec sets the codec for encoding and decoding operations | 设置编解码器适配器 +func (b *Builder) SetCodec(codec codec.Adapter) *Builder { + b.codec = codec + return b +} + +// SetLog sets the log adapter for logging operations | 设置日志记录适配器 +func (b *Builder) SetLog(log log.Adapter) *Builder { + b.log = log + return b +} + // KeyPrefix sets storage key prefix | 设置存储键前缀 // Automatically adds ":" suffix if not present (except for empty string) | 自动添加 ":" 后缀(空字符串除外) // Examples: "satoken" -> "satoken:", "myapp" -> "myapp:", "" -> "" @@ -270,6 +357,17 @@ func (b *Builder) KeyPrefix(prefix string) *Builder { return b } +// AuthType sets authentication system type | 设置认证体系类型 +func (b *Builder) AuthType(authType string) *Builder { + // 如果前缀不为空且不以 : 结尾,自动添加 : + if authType != "" && !strings.HasSuffix(authType, ":") { + b.authType = authType + ":" + } else { + b.authType = authType + } + return b +} + // NeverExpire sets token to never expire | 设置Token永不过期 func (b *Builder) NeverExpire() *Builder { b.timeout = config.NoLimit @@ -288,81 +386,60 @@ func (b *Builder) UnlimitedLogin() *Builder { return b } -// Validate validates the builder configuration | 验证构建器配置 -func (b *Builder) Validate() error { - if b.storage == nil { - return fmt.Errorf("storage is required, please call Storage() method") - } - - if b.tokenName == "" { - return fmt.Errorf("tokenName cannot be empty") - } - - if b.tokenStyle == config.TokenStyleJWT && b.jwtSecretKey == "" { - return fmt.Errorf("jwtSecretKey is required when TokenStyle is JWT") - } +// NoBanner disables startup banner printing | 禁用启动Banner打印 +func (b *Builder) NoBanner() *Builder { + b.isPrintBanner = false + return b +} - if !b.isReadHeader && !b.isReadCookie && !b.isReadBody { - return fmt.Errorf("at least one of IsReadHeader, IsReadCookie, or IsReadBody must be true") - } +// NoLog disables log output | 禁用日志输出 +func (b *Builder) NoLog() *Builder { + b.isLog = false + return b +} - // Check MaxRefresh - if b.maxRefresh < config.NoLimit { - return fmt.Errorf("MaxRefresh must be >= -1, got: %d", b.maxRefresh) - } +// DisableAutoRenew disables token auto-renewal | 禁用Token自动续期 +func (b *Builder) DisableAutoRenew() *Builder { + b.autoRenew = false + return b +} - // Check MaxRefresh does not exceed Timeout - if b.timeout != config.NoLimit && b.maxRefresh > b.timeout { - return fmt.Errorf("MaxRefresh (%d) cannot be greater than Timeout (%d)", b.maxRefresh, b.timeout) - } +// Jwt sets TokenStyle to JWT and sets secret key | 设置为JWT模式并指定密钥 +func (b *Builder) Jwt(secret string) *Builder { + b.tokenStyle = config.TokenStyleJWT + b.jwtSecretKey = secret + return b +} - // Check RenewInterval - if b.renewInterval < config.NoLimit { - return fmt.Errorf("RenewInterval must be >= -1, got: %d", b.renewInterval) +// Clone creates a deep copy of the builder | 克隆当前构建器 +func (b *Builder) Clone() *Builder { + clone := *b + if b.cookieConfig != nil { + cookieCopy := *b.cookieConfig + clone.cookieConfig = &cookieCopy } - - // Validate RenewPoolConfig if set | 如果设置了续期池配置,进行验证 if b.renewPoolConfig != nil { - // Check MinSize and MaxSize | 检查最小和最大协程池大小 - if b.renewPoolConfig.MinSize <= 0 { - return fmt.Errorf("RenewPoolConfig.MinSize must be > 0") // 最小协程池大小必须大于0 - } - if b.renewPoolConfig.MaxSize < b.renewPoolConfig.MinSize { - return fmt.Errorf("RenewPoolConfig.MaxSize must be >= RenewPoolConfig.MinSize") // 最大协程池大小必须大于等于最小协程池大小 - } - - // Check ScaleUpRate and ScaleDownRate | 检查扩容和缩容阈值 - if b.renewPoolConfig.ScaleUpRate <= 0 || b.renewPoolConfig.ScaleUpRate > 1 { - return fmt.Errorf("RenewPoolConfig.ScaleUpRate must be between 0 and 1") // 扩容阈值必须在0和1之间 - } - if b.renewPoolConfig.ScaleDownRate < 0 || b.renewPoolConfig.ScaleDownRate > 1 { - return fmt.Errorf("RenewPoolConfig.ScaleDownRate must be between 0 and 1") // 缩容阈值必须在0和1之间 - } - - // Check CheckInterval | 检查检查间隔 - if b.renewPoolConfig.CheckInterval <= 0 { - return fmt.Errorf("RenewPoolConfig.CheckInterval must be a positive duration") // 检查间隔必须是一个正值 - } - - // Check Expiry | 检查过期时间 - if b.renewPoolConfig.Expiry <= 0 { - return fmt.Errorf("RenewPoolConfig.Expiry must be a positive duration") // 过期时间必须是正值 - } + poolCopy := *b.renewPoolConfig + clone.renewPoolConfig = &poolCopy } - - return nil + return &clone } // Build builds Manager and prints startup banner | 构建Manager并打印启动Banner func (b *Builder) Build() *manager.Manager { - // Validate configuration | 验证配置 - if err := b.Validate(); err != nil { - panic(fmt.Sprintf("invalid configuration: %v", err)) + // Validate storage | 验证存储 + if b.storage == nil { + panic("storage cannot be nil") // storage 不能为空 + } + + // Validate codec | 验证codec + if b.codec == nil { + panic("codec cannot be nil") // codec 不能为空 } - // Automatically adjust MaxRefresh if user customized Timeout but didn't set MaxRefresh | 自动调整MaxRefresh逻辑 - if b.timeout != config.DefaultTimeout && b.maxRefresh == config.DefaultTimeout/2 { - b.maxRefresh = b.timeout / 2 + // Validate log | 验证log + if b.log == nil { + panic("log cannot be nil") // log 不能为空 } cfg := &config.Config{ @@ -378,7 +455,6 @@ func (b *Builder) Build() *manager.Manager { IsReadHeader: b.isReadHeader, IsReadCookie: b.isReadCookie, TokenStyle: b.tokenStyle, - DataRefreshPeriod: b.dataRefreshPeriod, TokenSessionCheckLogin: b.tokenSessionCheckLogin, AutoRenew: b.autoRenew, JwtSecretKey: b.jwtSecretKey, @@ -387,19 +463,25 @@ func (b *Builder) Build() *manager.Manager { KeyPrefix: b.keyPrefix, CookieConfig: b.cookieConfig, RenewPoolConfig: b.renewPoolConfig, + AuthType: b.authType, + } + + // Validate configuration | 验证配置 + err := cfg.Validate() + if err != nil { + panic(err) } // Print startup banner with full configuration | 打印启动Banner和完整配置 - // Only skip printing when both IsLog=false AND IsPrintBanner=false | 只有当 IsLog=false 且 IsPrintBanner=false 时才不打印 - if b.isPrintBanner || b.isLog { + if b.isPrintBanner { banner.PrintWithConfig(cfg) } - mgr := manager.NewManager(b.storage, cfg) + // Build Manager | 构建 Manager + mgr := manager.NewManager(cfg, b.storage, dep.NewDefaultDep(b.codec, b.log)) // Note: If you use the stputil package, it will automatically set the global Manager | 注意:如果你使用了 stputil 包,它会自动设置全局 Manager // We don't directly call stputil.SetManager here to avoid hard dependencies | 这里不直接调用 stputil.SetManager,避免强依赖 - return mgr } diff --git a/core/codec/codec.go b/core/codec/codec.go index a425402..57c738f 100644 --- a/core/codec/codec.go +++ b/core/codec/codec.go @@ -13,6 +13,8 @@ const ( SerializerMsgPack = "msgpack" ) +// 默认初始化全局的codec实现 这里先注释 向后兼容 + // serializerHolder wraps Adapter to ensure atomic.Value type consistency | 包装 Adapter 以确保 atomic.Value 类型一致性 type serializerHolder struct { s Adapter @@ -89,7 +91,7 @@ func NewSerializerMustWithJson(name string) Adapter { // UnifyToBytes converts string or []byte to []byte safely | 将 string 或 []byte 安全转换为 []byte func UnifyToBytes(data any) ([]byte, error) { if data == nil { - return nil, serror.ErrInvalidTokenData + return nil, serror.ErrDataNotByte } switch v := data.(type) { @@ -98,6 +100,6 @@ func UnifyToBytes(data any) ([]byte, error) { case string: return []byte(v), nil default: - return nil, serror.ErrInvalidTokenData + return nil, serror.ErrDataNotByte } } diff --git a/core/codec/codec_test.go b/core/codec/codec_test.go new file mode 100644 index 0000000..1925027 --- /dev/null +++ b/core/codec/codec_test.go @@ -0,0 +1,254 @@ +// @Author daixk 2025/12/6 17:04:00 +package codec + +import ( + "github.com/click33/sa-token-go/core/serror" + "reflect" + "strings" + "sync" + "testing" +) + +// -------------------- Mock Struct -------------------- + +type mockStruct struct { + Name string + Age int +} + +// -------------------- JSONSerializer Tests -------------------- + +// TestJSONSerializerEncodeDecode tests JSON encode/decode behavior | 测试 JSON 序列化器的编码与解码行为 +func TestJSONSerializerEncodeDecode(t *testing.T) { + s := &JSONSerializer{} + input := mockStruct{Name: "Alice", Age: 20} + + // Encode + data, err := s.Encode(input) + if err != nil { + t.Fatalf("JSON Encode failed: %v", err) + } + if !strings.Contains(string(data), "Alice") { + t.Errorf("JSON Encode output missing field: got %s", string(data)) + } + + // Decode + var output mockStruct + err = s.Decode(data, &output) + if err != nil { + t.Fatalf("JSON Decode failed: %v", err) + } + if !reflect.DeepEqual(input, output) { + t.Errorf("JSON Decode mismatch: got %+v, want %+v", output, input) + } + + // Name check + if s.Name() != SerializerJSON { + t.Errorf("JSONSerializer.Name() = %s, want %s", s.Name(), SerializerJSON) + } +} + +// -------------------- MsgPackSerializer Tests -------------------- + +// TestMsgPackSerializerEncodeDecode tests MsgPack encode/decode | 测试 MsgPack 序列化器的编码与解码行为 +func TestMsgPackSerializerEncodeDecode(t *testing.T) { + s := &MsgPackSerializer{} + input := mockStruct{Name: "Bob", Age: 25} + + data, err := s.Encode(input) + if err != nil { + t.Fatalf("MsgPack Encode failed: %v", err) + } + + var output mockStruct + err = s.Decode(data, &output) + if err != nil { + t.Fatalf("MsgPack Decode failed: %v", err) + } + if !reflect.DeepEqual(input, output) { + t.Errorf("MsgPack Decode mismatch: got %+v, want %+v", output, input) + } + + if s.Name() != SerializerMsgPack { + t.Errorf("MsgPackSerializer.Name() = %s, want %s", s.Name(), SerializerMsgPack) + } +} + +// -------------------- Global Serializer Tests -------------------- + +// TestGlobalSerializerDefault tests default global serializer | 测试默认全局序列化器(应为 JSON) +func TestGlobalSerializerDefault(t *testing.T) { + def := GetDefaultSerializer() + if def == nil { + t.Fatal("default serializer should not be nil") + } + if def.Name() != SerializerJSON { + t.Errorf("default serializer name = %s, want %s", def.Name(), SerializerJSON) + } +} + +// TestSetDefaultSerializer tests setting and getting the global serializer | 测试设置与获取全局序列化器 +func TestSetDefaultSerializer(t *testing.T) { + SetDefaultSerializer(&MsgPackSerializer{}) + s := GetDefaultSerializer() + if s.Name() != SerializerMsgPack { + t.Errorf("expected global serializer to be msgpack, got %s", s.Name()) + } + + SetDefaultSerializer(&JSONSerializer{}) + s = GetDefaultSerializer() + if s.Name() != SerializerJSON { + t.Errorf("expected global serializer to be json, got %s", s.Name()) + } + + // nil should not change current serializer + current := GetDefaultSerializer() + SetDefaultSerializer(nil) + if GetDefaultSerializer() != current { + t.Error("SetDefaultSerializer(nil) should not change the serializer") + } +} + +// TestConcurrentSetDefaultSerializer tests concurrent SetDefaultSerializer safety | 测试并发安全性 +func TestConcurrentSetDefaultSerializer(t *testing.T) { + wg := sync.WaitGroup{} + for i := 0; i < 50; i++ { + wg.Add(1) + go func(i int) { + defer wg.Done() + if i%2 == 0 { + SetDefaultSerializer(&JSONSerializer{}) + } else { + SetDefaultSerializer(&MsgPackSerializer{}) + } + }(i) + } + wg.Wait() + _ = GetDefaultSerializer() // ensure no panic +} + +// -------------------- Encode / Decode Entry Tests -------------------- + +// TestEncodeDecodeGlobal tests Encode/Decode helpers using global serializer | 测试全局编码解码辅助函数 +func TestEncodeDecodeGlobal(t *testing.T) { + SetDefaultSerializer(&JSONSerializer{}) + + src := mockStruct{Name: "Eve", Age: 30} + data, err := Encode(src) + if err != nil { + t.Fatalf("Encode() failed: %v", err) + } + + var dst mockStruct + err = Decode(data, &dst) + if err != nil { + t.Fatalf("Decode() failed: %v", err) + } + + if !reflect.DeepEqual(src, dst) { + t.Errorf("Decode() result mismatch: got %+v, want %+v", dst, src) + } +} + +// -------------------- NewSerializer Tests -------------------- + +// TestNewSerializer tests serializer creation by name | 测试根据名称创建序列化器 +func TestNewSerializer(t *testing.T) { + s := NewSerializer("json") + if s.Name() != SerializerJSON { + t.Errorf("NewSerializer(json) got %s", s.Name()) + } + + s = NewSerializer("msgpack") + if s.Name() != SerializerMsgPack { + t.Errorf("NewSerializer(msgpack) got %s", s.Name()) + } + + s = NewSerializer("unknown") + if s.Name() != SerializerJSON { + t.Errorf("NewSerializer(unknown) default fallback should be json, got %s", s.Name()) + } +} + +// TestNewSerializerMust tests NewSerializerMust panic on invalid name | 测试 NewSerializerMust 异常情况 +func TestNewSerializerMust(t *testing.T) { + defer func() { + if r := recover(); r == nil { + t.Error("expected panic for unknown serializer, got none") + } + }() + _ = NewSerializerMust("invalid-name") +} + +// TestNewSerializerMustWithJson ensures fallback to JSON | 测试 NewSerializerMustWithJson 返回 JSON +func TestNewSerializerMustWithJson(t *testing.T) { + s := NewSerializerMustWithJson("non-exist") + if s.Name() != SerializerJSON { + t.Errorf("expected fallback JSON, got %s", s.Name()) + } +} + +// -------------------- UnifyToBytes Tests -------------------- + +// TestUnifyToBytes tests type conversion to []byte | 测试数据统一转换为 []byte +func TestUnifyToBytes(t *testing.T) { + data, err := UnifyToBytes([]byte("abc")) + if err != nil || string(data) != "abc" { + t.Errorf("UnifyToBytes([]byte) failed: %v", err) + } + + data, err = UnifyToBytes("xyz") + if err != nil || string(data) != "xyz" { + t.Errorf("UnifyToBytes(string) failed: %v", err) + } + + _, err = UnifyToBytes(123) + if err == nil { + t.Error("UnifyToBytes(int) should return error") + } + + _, err = UnifyToBytes(nil) + if err == nil || err != serror.ErrInvalidTokenData { + t.Error("UnifyToBytes(nil) should return ErrInvalidTokenData") + } +} + +// -------------------- Benchmark -------------------- + +// BenchmarkEncodeJSON benchmarks JSON encoding performance | 基准测试 JSON 编码性能 +func BenchmarkEncodeJSON(b *testing.B) { + s := &JSONSerializer{} + data := mockStruct{Name: "Benchmark", Age: 100} + for i := 0; i < b.N; i++ { + _, _ = s.Encode(data) + } +} + +// BenchmarkDecodeJSON benchmarks JSON decoding performance | 基准测试 JSON 解码性能 +func BenchmarkDecodeJSON(b *testing.B) { + s := &JSONSerializer{} + raw, _ := s.Encode(mockStruct{Name: "Benchmark", Age: 100}) + var v mockStruct + for i := 0; i < b.N; i++ { + _ = s.Decode(raw, &v) + } +} + +// BenchmarkEncodeMsgPack benchmarks MsgPack encoding performance | 基准测试 MsgPack 编码性能 +func BenchmarkEncodeMsgPack(b *testing.B) { + s := &MsgPackSerializer{} + data := mockStruct{Name: "Benchmark", Age: 100} + for i := 0; i < b.N; i++ { + _, _ = s.Encode(data) + } +} + +// BenchmarkDecodeMsgPack benchmarks MsgPack decoding performance | 基准测试 MsgPack 解码性能 +func BenchmarkDecodeMsgPack(b *testing.B) { + s := &MsgPackSerializer{} + raw, _ := s.Encode(mockStruct{Name: "Benchmark", Age: 100}) + var v mockStruct + for i := 0; i < b.N; i++ { + _ = s.Decode(raw, &v) + } +} diff --git a/core/config/config.go b/core/config/config.go index 56ccad6..7cf8c43 100644 --- a/core/config/config.go +++ b/core/config/config.go @@ -1,132 +1,76 @@ package config import ( + "errors" "fmt" "github.com/click33/sa-token-go/core/pool" + "strings" ) -// TokenStyle Token generation style | Token生成风格 -type TokenStyle string - -const ( - // TokenStyleUUID UUID style | UUID风格 - TokenStyleUUID TokenStyle = "uuid" - // TokenStyleSimple Simple random string | 简单随机字符串 - TokenStyleSimple TokenStyle = "simple" - // TokenStyleRandom32 32-bit random string | 32位随机字符串 - TokenStyleRandom32 TokenStyle = "random32" - // TokenStyleRandom64 64-bit random string | 64位随机字符串 - TokenStyleRandom64 TokenStyle = "random64" - // TokenStyleRandom128 128-bit random string | 128位随机字符串 - TokenStyleRandom128 TokenStyle = "random128" - // TokenStyleJWT JWT style | JWT风格 - TokenStyleJWT TokenStyle = "jwt" - // TokenStyleHash SHA256 hash-based style | SHA256哈希风格 - TokenStyleHash TokenStyle = "hash" - // TokenStyleTimestamp Timestamp-based style | 时间戳风格 - TokenStyleTimestamp TokenStyle = "timestamp" - // TokenStyleTik Short ID style (like TikTok) | Tik风格短ID(类似抖音) - TokenStyleTik TokenStyle = "tik" -) - -// SameSiteMode Cookie SameSite attribute values | Cookie的SameSite属性值 -type SameSiteMode string - -const ( - // SameSiteStrict Strict mode | 严格模式 - SameSiteStrict SameSiteMode = "Strict" - // SameSiteLax Lax mode | 宽松模式 - SameSiteLax SameSiteMode = "Lax" - // SameSiteNone None mode | 无限制模式 - SameSiteNone SameSiteMode = "None" -) - -// Default configuration constants | 默认配置常量 -const ( - DefaultTokenName = "satoken" - DefaultTimeout = 2592000 // 30 days in seconds | 30天(秒) - DefaultMaxLoginCount = 12 // Maximum concurrent logins | 最大并发登录数 - DefaultCookiePath = "/" - NoLimit = -1 // No limit flag | 不限制标志 -) - -// IsValid checks if the TokenStyle is valid | 检查TokenStyle是否有效 -func (ts TokenStyle) IsValid() bool { - switch ts { - case TokenStyleUUID, TokenStyleSimple, TokenStyleRandom32, - TokenStyleRandom64, TokenStyleRandom128, TokenStyleJWT, - TokenStyleHash, TokenStyleTimestamp, TokenStyleTik: - return true - default: - return false - } -} - // Config Sa-Token configuration | Sa-Token配置 type Config struct { // TokenName Token name (also used as Cookie name) | Token名称(同时也是Cookie名称) TokenName string - // Timeout Token expiration time in seconds, -1 for never expire | Token超时时间(单位:秒,-1代表永不过期) + // Timeout Token expiration time (in seconds); -1 means never expire | Token超时时间(单位:秒,-1代表永不过期) Timeout int64 - // MaxRefresh Threshold for triggering async token renewal (in seconds) | Token自动续期触发阈值(单位:秒,当剩余有效期低于该值时触发异步续期 -1或0代表不限制) + // MaxRefresh Threshold (in seconds) to trigger async token renewal; when remaining lifetime is below this, renewal is triggered; -1 means no limit | Token自动续期触发阈值(单位:秒,当剩余有效期低于该值时触发异步续期,-1代表不限制) MaxRefresh int64 - // RenewInterval Minimum interval between token renewals (ms) | Token最小续期间隔(单位:秒,同一个Token在此时间内只会续期一次 -1或0代表不限制) + // RenewInterval Minimum interval (in seconds) between two renewals for the same token; -1 means no limit | 同一Token两次续期的最小间隔时间(单位:秒,-1代表不限制) RenewInterval int64 - // ActiveTimeout Token minimum activity frequency in seconds. If Token is not accessed for this time, it will be frozen. -1 means no limit | Token最低活跃频率(单位:秒),如果Token超过此时间没有访问,则会被冻结。-1代表不限制,永不冻结 + // ActiveTimeout Maximum inactivity duration (in seconds); if the Token is not accessed within this time, it will be frozen. -1 means no limit | Token最大不活跃时长(单位:秒),超过此时间未访问则被冻结,-1代表不限制 ActiveTimeout int64 - // IsConcurrent Allow concurrent login for the same account (true=allow concurrent login, false=new login kicks out old login) | 是否允许同一账号并发登录(为true时允许一起登录,为false时新登录挤掉旧登录) + // IsConcurrent Allow concurrent login for the same account (true=allow, false=new login kicks old) | 是否允许同一账号并发登录(true=允许并发,false=新登录挤掉旧登录) IsConcurrent bool - // IsShare Share the same Token for concurrent logins (true=share one Token, false=create new Token for each login) | 在多人登录同一账号时,是否共用一个Token(为true时所有登录共用一个Token,为false时每次登录新建一个Token) + // IsShare Share the same Token for concurrent logins (true=share one, false=create new for each login) | 并发登录是否共用同一个Token(true=共用一个,false=每次登录新建一个) IsShare bool - // MaxLoginCount Maximum number of concurrent logins for the same account, -1 means no limit (only effective when IsConcurrent=true and IsShare=false) | 同一账号最大登录数量,-1代表不限(只有在IsConcurrent=true,IsShare=false时此配置才有效) - MaxLoginCount int + // MaxLoginCount Maximum concurrent login count for the same account; -1 means unlimited (only effective when IsConcurrent=true and IsShare=false) | 同一账号最大登录数量,-1代表不限(仅当IsConcurrent=true且IsShare=false时生效) + MaxLoginCount int64 - // IsReadBody Try to read Token from request body (default: false) | 是否尝试从请求体里读取Token(默认:false) + // IsReadBody Try to read Token from the request body (default: false) | 是否尝试从请求体读取Token(默认:false) IsReadBody bool - // IsReadHeader Try to read Token from HTTP Header (default: true, recommended) | 是否尝试从Header里读取Token(默认:true,推荐) + // IsReadHeader Try to read Token from the HTTP Header (default: true, recommended) | 是否尝试从Header读取Token(默认:true,推荐) IsReadHeader bool - // IsReadCookie Try to read Token from Cookie (default: false) | 是否尝试从Cookie里读取Token(默认:false) + // IsReadCookie Try to read Token from the Cookie (default: false) | 是否尝试从Cookie读取Token(默认:false) IsReadCookie bool - // TokenStyle Token generation style | Token风格 + // TokenStyle Token generation style | Token生成风格 TokenStyle TokenStyle - // DataRefreshPeriod Auto-refresh period in seconds, -1 means no auto-refresh | 自动续签(单位:秒),-1代表不自动续签 - DataRefreshPeriod int64 - - // TokenSessionCheckLogin Check if Token-Session is kicked out when logging in (true=check on login, false=skip check) | Token-Session在登录时是否检查(true=登录时验证是否被踢下线,false=不作此检查) + // TokenSessionCheckLogin Whether to check if Token-Session is kicked out when logging in (true=check, false=skip) | 登录时是否检查Token-Session是否被踢下线(true=检查,false=不检查) TokenSessionCheckLogin bool - // AutoRenew Auto-renew Token expiration time on each validation | 是否自动续期(每次验证Token时,都会延长Token的有效期) + // AutoRenew Automatically renew Token expiration time on each validation | 是否在每次验证Token时自动续期(延长Token有效期) AutoRenew bool - // JwtSecretKey JWT secret key (only effective when TokenStyle=JWT) | JWT密钥(只有TokenStyle=JWT时,此配置才生效) + // JwtSecretKey Secret key for JWT mode (effective only when TokenStyle=JWT) | JWT模式的密钥(仅当TokenStyle=JWT时生效) JwtSecretKey string - // IsLog Enable operation logging | 是否输出操作日志 + // IsLog Enable operation logging | 是否开启操作日志 IsLog bool - // IsPrintBanner Print startup banner (default: true) | 是否打印启动 Banner(默认:true) + // IsPrintBanner Print the startup banner (default: true) | 是否打印启动Banner(默认:true) IsPrintBanner bool - // KeyPrefix Storage key prefix for Redis isolation (default: "satoken:") | 存储键前缀,用于Redis隔离(默认:"satoken:") - // Set to empty "" to be compatible with Java sa-token default behavior | 设置为空""以兼容Java sa-token默认行为 + // KeyPrefix Storage key prefix for Redis isolation (default: "satoken:"); set to "" for Java Sa-Token compatibility | 存储键前缀(默认:"satoken:");设置为空""可兼容Java版Sa-Token默认行为 KeyPrefix string // CookieConfig Cookie configuration | Cookie配置 CookieConfig *CookieConfig - // RenewPoolConfig Configuration for renewal pool manager | 续期池配置 + // RenewPoolConfig Configuration for the renewal pool manager | 续期池管理器配置 RenewPoolConfig *pool.RenewPoolConfig + + // Authentication system type | 认证体系类型 + AuthType string } // CookieConfig Cookie configuration | Cookie配置 @@ -147,7 +91,7 @@ type CookieConfig struct { SameSite SameSiteMode // MaxAge Cookie expiration time in seconds | 过期时间(单位:秒) - MaxAge int + MaxAge int64 } // DefaultConfig Returns default configuration | 返回默认配置 @@ -165,13 +109,12 @@ func DefaultConfig() *Config { IsReadHeader: true, IsReadCookie: false, TokenStyle: TokenStyleUUID, - DataRefreshPeriod: NoLimit, TokenSessionCheckLogin: true, AutoRenew: true, JwtSecretKey: "", IsLog: false, IsPrintBanner: true, - KeyPrefix: "satoken:", + KeyPrefix: DefaultKeyPrefix, CookieConfig: &CookieConfig{ Domain: "", Path: DefaultCookiePath, @@ -180,90 +123,123 @@ func DefaultConfig() *Config { SameSite: SameSiteLax, MaxAge: 0, }, + RenewPoolConfig: pool.DefaultRenewPoolConfig(), + AuthType: DefaultAuthType, } } // Validate validates the configuration | 验证配置是否合理 func (c *Config) Validate() error { - // Check TokenName - if c.TokenName == "" { - return fmt.Errorf("TokenName cannot be empty") - } - - // Check TokenStyle - if !c.TokenStyle.IsValid() { + // Check TokenStyle validity | 检查 Token 风格是否合法 + if !c.TokenStyle.IsValidTokenStyle() { return fmt.Errorf("invalid TokenStyle: %s", c.TokenStyle) } - // Check JWT secret key when using JWT style - if c.TokenStyle == TokenStyleJWT && c.JwtSecretKey == "" { - return fmt.Errorf("JwtSecretKey is required when TokenStyle is JWT") + // Validate numeric fields that must be -1 (no limit) or >0 (valid) | 验证必须为-1(无限制)或>0(有效)的数值字段 + if err := c.checkNoLimits(); err != nil { + return err } - // Check Timeout - if c.Timeout < NoLimit { - return fmt.Errorf("Timeout must be >= -1, got: %d", c.Timeout) + // Check TokenName | 检查 Token 名称 + if c.TokenName == "" { + return errors.New("TokenName cannot be empty") } - // Check MaxRefresh - if c.MaxRefresh < NoLimit { - return fmt.Errorf("MaxRefresh must be >= -1, got: %d", c.MaxRefresh) + // Check JwtSecretKey if TokenStyle is JWT | 如果 Token 风格为 JWT,则检查密钥是否设置 + if c.TokenStyle == TokenStyleJWT && c.JwtSecretKey == "" { + return errors.New("JwtSecretKey is required when TokenStyle is JWT") } - // Check MaxRefresh does not exceed Timeout + // Adjust MaxRefresh if it exceeds Timeout | 如果 MaxRefresh 大于 Timeout,则自动调整为 Timeout/2 if c.Timeout != NoLimit && c.MaxRefresh > c.Timeout { - return fmt.Errorf("MaxRefresh (%d) cannot be greater than Timeout (%d)", c.MaxRefresh, c.Timeout) + c.MaxRefresh = c.Timeout / 2 + if c.MaxRefresh < 1 { + c.MaxRefresh = 1 + } } - // Check RenewInterval - if c.RenewInterval < NoLimit { - return fmt.Errorf("RenewInterval must be >= -1, got: %d", c.RenewInterval) + // Check if at least one read source is enabled | 检查是否至少启用了一个 Token 读取来源 + if !c.IsReadHeader && !c.IsReadCookie && !c.IsReadBody { + return fmt.Errorf("at least one of IsReadHeader, IsReadCookie, or IsReadBody must be true") } - // Check ActiveTimeout - if c.ActiveTimeout < NoLimit { - return fmt.Errorf("ActiveTimeout must be >= -1, got: %d", c.ActiveTimeout) + // Check KeyPrefix validity | 检查 KeyPrefix 合法性 + if c.KeyPrefix == "" { + return errors.New("KeyPrefix cannot be empty") // KeyPrefix不能为空 + } + if strings.ContainsAny(c.KeyPrefix, " \t\r\n") { + return fmt.Errorf("KeyPrefix cannot contain whitespace characters, got: %q", c.KeyPrefix) + } + if len(c.KeyPrefix) > 64 { + return fmt.Errorf("KeyPrefix too long (max 64 chars), got length: %d", len(c.KeyPrefix)) } - // Check MaxLoginCount - if c.MaxLoginCount < NoLimit { - return fmt.Errorf("MaxLoginCount must be >= -1, got: %d", c.MaxLoginCount) + // Check authType validity | 校验AuthType的合法性 + if c.AuthType == "" { + return errors.New("AuthType cannot be empty") // AuthType不能为空 + } + if strings.ContainsAny(c.AuthType, " \t\r\n") { + return fmt.Errorf("AuthType cannot contain whitespace characters, got: %q", c.AuthType) + } + if len(c.AuthType) > 64 { + return fmt.Errorf("AuthType too long (max 64 chars), got length: %d", len(c.AuthType)) } - // Check if at least one read source is enabled - if !c.IsReadHeader && !c.IsReadCookie && !c.IsReadBody { - return fmt.Errorf("at least one of IsReadHeader, IsReadCookie, or IsReadBody must be true") + // Check authType validity | 校验 AuthType 的合法性 + if c.AuthType == "" { + return errors.New("AuthType cannot be empty") // AuthType不能为空 + } + if strings.ContainsAny(c.AuthType, " \t\r\n") { + return fmt.Errorf("AuthType cannot contain whitespace characters, got: %q", c.AuthType) + } + if len(c.AuthType) > 64 { + return fmt.Errorf("AuthType too long (max 64 chars), got length: %d", len(c.AuthType)) } - // Validate RenewPoolConfig if set | 如果设置了续期池配置,进行验证 + // Validate CookieConfig if set | 验证 Cookie 配置(如果设置) + if c.CookieConfig != nil { + // Check Path | 检查路径 + if c.CookieConfig.Path == "" { + return errors.New("CookieConfig.Path cannot be empty") + } + // Check SameSite | 检查 SameSite 值是否合法 + switch c.CookieConfig.SameSite { + case SameSiteLax, SameSiteStrict, SameSiteNone: + default: + return fmt.Errorf("invalid CookieConfig.SameSite value: %v", c.CookieConfig.SameSite) + } + } + + // Validate RenewPoolConfig if set | 验证续期池配置(如果设置) if c.RenewPoolConfig != nil { // Check MinSize and MaxSize | 检查最小和最大协程池大小 if c.RenewPoolConfig.MinSize <= 0 { - return fmt.Errorf("RenewPoolConfig.MinSize must be > 0") // 最小协程池大小必须大于0 + return errors.New("RenewPoolConfig.MinSize must be > 0") // 最小协程池大小必须大于0 } if c.RenewPoolConfig.MaxSize < c.RenewPoolConfig.MinSize { - return fmt.Errorf("RenewPoolConfig.MaxSize must be >= RenewPoolConfig.MinSize") // 最大协程池大小必须大于等于最小协程池大小 + return errors.New("RenewPoolConfig.MaxSize must be >= RenewPoolConfig.MinSize") // 最大协程池大小必须大于等于最小协程池大小 } // Check ScaleUpRate and ScaleDownRate | 检查扩容和缩容阈值 if c.RenewPoolConfig.ScaleUpRate <= 0 || c.RenewPoolConfig.ScaleUpRate > 1 { - return fmt.Errorf("RenewPoolConfig.ScaleUpRate must be between 0 and 1") // 扩容阈值必须在0和1之间 + return errors.New("RenewPoolConfig.ScaleUpRate must be between 0 and 1") // 扩容阈值必须在0和1之间 } if c.RenewPoolConfig.ScaleDownRate < 0 || c.RenewPoolConfig.ScaleDownRate > 1 { - return fmt.Errorf("RenewPoolConfig.ScaleDownRate must be between 0 and 1") // 缩容阈值必须在0和1之间 + return errors.New("RenewPoolConfig.ScaleDownRate must be between 0 and 1") // 缩容阈值必须在0和1之间 } // Check CheckInterval | 检查检查间隔 if c.RenewPoolConfig.CheckInterval <= 0 { - return fmt.Errorf("RenewPoolConfig.CheckInterval must be a positive duration") // 检查间隔必须是一个正值 + return errors.New("RenewPoolConfig.CheckInterval must be a positive duration") // 检查间隔必须为正数 } // Check Expiry | 检查过期时间 if c.RenewPoolConfig.Expiry <= 0 { - return fmt.Errorf("RenewPoolConfig.Expiry must be a positive duration") // 过期时间必须是正值 + return errors.New("RenewPoolConfig.Expiry must be a positive duration") // 过期时间必须为正数 } } + // All checks passed | 所有配置验证通过 return nil } @@ -274,6 +250,10 @@ func (c *Config) Clone() *Config { cookieConfig := *c.CookieConfig newConfig.CookieConfig = &cookieConfig } + if c.RenewPoolConfig != nil { + poolConfig := *c.RenewPoolConfig + newConfig.RenewPoolConfig = &poolConfig + } return &newConfig } @@ -320,7 +300,7 @@ func (c *Config) SetIsShare(isShare bool) *Config { } // SetMaxLoginCount Set maximum login count | 设置最大登录数量 -func (c *Config) SetMaxLoginCount(count int) *Config { +func (c *Config) SetMaxLoginCount(count int64) *Config { c.MaxLoginCount = count return c } @@ -349,12 +329,6 @@ func (c *Config) SetTokenStyle(style TokenStyle) *Config { return c } -// SetDataRefreshPeriod Set data refresh period | 设置数据刷新周期 -func (c *Config) SetDataRefreshPeriod(period int64) *Config { - c.DataRefreshPeriod = period - return c -} - // SetTokenSessionCheckLogin Set whether to check token session on login | 设置登录时是否检查token会话 func (c *Config) SetTokenSessionCheckLogin(check bool) *Config { c.TokenSessionCheckLogin = check @@ -393,12 +367,74 @@ func (c *Config) SetKeyPrefix(prefix string) *Config { // SetCookieConfig Set cookie configuration | 设置Cookie配置 func (c *Config) SetCookieConfig(cookieConfig *CookieConfig) *Config { - c.CookieConfig = cookieConfig + if cookieConfig != nil { + c.CookieConfig = cookieConfig + } return c } // SetRenewPoolConfig Set renewal pool configuration | 设置续期池配置 func (c *Config) SetRenewPoolConfig(renewPoolConfig *pool.RenewPoolConfig) *Config { - c.RenewPoolConfig = renewPoolConfig + if renewPoolConfig != nil { + c.RenewPoolConfig = renewPoolConfig + } + return c +} + +// SetAuthType Set authentication system type | 设置认证体系类型 +func (c *Config) SetAuthType(authType string) *Config { + c.AuthType = authType return c } + +// ============ Internal Helper Methods | 内部辅助方法 ============ + +// checkNoLimits validates that all numeric fields must be -1 (no limit) or >0 (valid) | 验证所有数值字段必须为 -1(无限制)或 >0(有效) +func (c *Config) checkNoLimits() error { + // Define fields to validate | 定义需要验证的字段 + fields := map[string]int64{ + "Timeout": c.Timeout, + "MaxRefresh": c.MaxRefresh, + "RenewInterval": c.RenewInterval, + "ActiveTimeout": c.ActiveTimeout, + "MaxLoginCount": c.MaxLoginCount, + } + + // Iterate through fields and validate each one | 遍历字段并验证 + for name, value := range fields { + // Must be -1 (no limit) or >0 (valid) | 必须为 -1(无限制)或 >0(有效) + if value == -1 || value > 0 { + continue + } + + // Return error if invalid | 若不合法则返回错误 + return fmt.Errorf("%s must be -1 (no limit) or >0 (valid), got: %d", name, value) + } + + // All numeric fields are valid | 所有数值字段均验证通过 + return nil +} + +// IsValidTokenStyle checks if the TokenStyle is valid | 检查TokenStyle是否有效 +func (ts TokenStyle) IsValidTokenStyle() bool { + switch ts { + case TokenStyleUUID, TokenStyleSimple, TokenStyleRandom32, + TokenStyleRandom64, TokenStyleRandom128, TokenStyleJWT, + TokenStyleHash, TokenStyleTimestamp, TokenStyleTik: + return true + default: + return false + } +} + +// DefaultCookieConfig returns the default Cookie configuration | 返回默认的 Cookie 配置 +func DefaultCookieConfig() *CookieConfig { + return &CookieConfig{ + Domain: "", + Path: DefaultCookiePath, + Secure: false, + HttpOnly: true, + SameSite: SameSiteLax, + MaxAge: 0, + } +} diff --git a/core/config/config_test.go b/core/config/config_test.go new file mode 100644 index 0000000..980725e --- /dev/null +++ b/core/config/config_test.go @@ -0,0 +1,195 @@ +// @Author daixk 2025/12/6 16:47:00 +package config + +import ( + "github.com/click33/sa-token-go/core/pool" + "github.com/stretchr/testify/assert" + "testing" + "time" +) + +// TestDefaultConfig verifies that DefaultConfig returns a valid configuration | 验证 DefaultConfig 返回的配置是否合法 +func TestDefaultConfig(t *testing.T) { + cfg := DefaultConfig() + assert.NotNil(t, cfg) + assert.Equal(t, DefaultTokenName, cfg.TokenName) + assert.Equal(t, DefaultKeyPrefix, cfg.KeyPrefix) + assert.True(t, cfg.TokenStyle.IsValid()) + + err := cfg.Validate() + assert.NoError(t, err) +} + +// TestInvalidTokenStyle checks invalid TokenStyle detection | 检查无效 TokenStyle 的检测 +func TestInvalidTokenStyle(t *testing.T) { + cfg := DefaultConfig() + cfg.TokenStyle = "invalid-style" + err := cfg.Validate() + assert.Error(t, err) + assert.Contains(t, err.Error(), "invalid TokenStyle") +} + +// TestJwtSecretKeyValidation checks that JWT style requires secret key | 检查 JWT 风格必须设置密钥 +func TestJwtSecretKeyValidation(t *testing.T) { + cfg := DefaultConfig() + cfg.TokenStyle = TokenStyleJWT + cfg.JwtSecretKey = "" + err := cfg.Validate() + assert.Error(t, err) + assert.Contains(t, err.Error(), "JwtSecretKey is required") +} + +// TestNumericLimitValidation checks NoLimit and invalid numeric values | 检查数值字段 NoLimit 与非法值 +func TestNumericLimitValidation(t *testing.T) { + cfg := DefaultConfig() + cfg.Timeout = 0 // invalid + err := cfg.Validate() + assert.Error(t, err) + assert.Contains(t, err.Error(), "Timeout") + + cfg.Timeout = NoLimit + cfg.MaxRefresh = 10 + cfg.RenewInterval = 5 + err = cfg.Validate() + assert.NoError(t, err) +} + +// TestCookieValidation checks cookie path and samesite validation | 检查 Cookie 路径与 SameSite 校验 +func TestCookieValidation(t *testing.T) { + cfg := DefaultConfig() + cfg.CookieConfig.Path = "" + err := cfg.Validate() + assert.Error(t, err) + assert.Contains(t, err.Error(), "CookieConfig.Path") + + cfg.CookieConfig.Path = "/" + cfg.CookieConfig.SameSite = "Invalid" + err = cfg.Validate() + assert.Error(t, err) + assert.Contains(t, err.Error(), "invalid CookieConfig.SameSite") +} + +// TestRenewPoolValidation checks renew pool config validation | 检查续期池配置验证逻辑 +func TestRenewPoolValidation(t *testing.T) { + cfg := DefaultConfig() + poolCfg := pool.DefaultRenewPoolConfig() + poolCfg.MinSize = 0 + cfg.RenewPoolConfig = poolCfg + err := cfg.Validate() + assert.Error(t, err) + assert.Contains(t, err.Error(), "must be > 0") + + poolCfg.MinSize = 1 + poolCfg.MaxSize = 0 + cfg.RenewPoolConfig = poolCfg + err = cfg.Validate() + assert.Error(t, err) + assert.Contains(t, err.Error(), "must be >=") + + poolCfg.MaxSize = 10 + poolCfg.ScaleUpRate = 2 + cfg.RenewPoolConfig = poolCfg + err = cfg.Validate() + assert.Error(t, err) + assert.Contains(t, err.Error(), "ScaleUpRate") + + poolCfg.ScaleUpRate = 0.5 + poolCfg.ScaleDownRate = -0.2 + cfg.RenewPoolConfig = poolCfg + err = cfg.Validate() + assert.Error(t, err) + assert.Contains(t, err.Error(), "ScaleDownRate") + + poolCfg.ScaleDownRate = 0.5 + poolCfg.CheckInterval = 0 + cfg.RenewPoolConfig = poolCfg + err = cfg.Validate() + assert.Error(t, err) + assert.Contains(t, err.Error(), "CheckInterval") + + poolCfg.CheckInterval = 5 * time.Second + poolCfg.Expiry = 0 + cfg.RenewPoolConfig = poolCfg + err = cfg.Validate() + assert.Error(t, err) + assert.Contains(t, err.Error(), "Expiry") + + // Valid pool config + poolCfg.Expiry = 10 * time.Second + cfg.RenewPoolConfig = poolCfg + err = cfg.Validate() + assert.NoError(t, err) +} + +// TestKeyPrefixValidation checks key prefix length and whitespace | 检查 KeyPrefix 长度与空白字符 +func TestKeyPrefixValidation(t *testing.T) { + cfg := DefaultConfig() + + cfg.KeyPrefix = "with space " + err := cfg.Validate() + assert.Error(t, err) + assert.Contains(t, err.Error(), "whitespace") + + longPrefix := make([]byte, 70) + for i := range longPrefix { + longPrefix[i] = 'a' + } + cfg.KeyPrefix = string(longPrefix) + err = cfg.Validate() + assert.Error(t, err) + assert.Contains(t, err.Error(), "too long") +} + +// TestClone verifies deep copy behavior | 验证 Clone 的深拷贝行为 +func TestClone(t *testing.T) { + cfg := DefaultConfig() + clone := cfg.Clone() + assert.Equal(t, cfg.TokenName, clone.TokenName) + + // Modify original cookie + cfg.CookieConfig.Path = "/changed" + assert.NotEqual(t, cfg.CookieConfig.Path, clone.CookieConfig.Path) + + // Modify renew pool + cfg.RenewPoolConfig.MinSize = 99 + assert.NotEqual(t, cfg.RenewPoolConfig.MinSize, clone.RenewPoolConfig.MinSize) +} + +// TestSetters verifies chainable setter behavior | 验证所有 setter 的链式调用行为 +func TestSetters(t *testing.T) { + cfg := DefaultConfig(). + SetTokenName("mytoken"). + SetTimeout(100). + SetMaxRefresh(50). + SetRenewInterval(10). + SetActiveTimeout(5). + SetIsConcurrent(false). + SetIsShare(false). + SetMaxLoginCount(2). + SetIsReadBody(true). + SetIsReadHeader(false). + SetIsReadCookie(true). + SetTokenStyle(TokenStyleRandom64). + SetTokenSessionCheckLogin(false). + SetJwtSecretKey("secret"). + SetAutoRenew(false). + SetIsLog(true). + SetIsPrintBanner(false). + SetKeyPrefix("prefix:") + + assert.Equal(t, "mytoken", cfg.TokenName) + assert.Equal(t, int64(100), cfg.Timeout) + assert.Equal(t, TokenStyleRandom64, cfg.TokenStyle) + assert.Equal(t, false, cfg.IsConcurrent) + assert.Equal(t, "prefix:", cfg.KeyPrefix) +} + +// TestAdjustMaxRefresh verifies automatic adjustment of MaxRefresh | 验证 MaxRefresh 自动调整逻辑 +func TestAdjustMaxRefresh(t *testing.T) { + cfg := DefaultConfig() + cfg.Timeout = 10 + cfg.MaxRefresh = 100 + err := cfg.Validate() + assert.NoError(t, err) + assert.Equal(t, int64(5), cfg.MaxRefresh) // adjusted to Timeout/2 +} diff --git a/core/config/consts.go b/core/config/consts.go new file mode 100644 index 0000000..06f3dce --- /dev/null +++ b/core/config/consts.go @@ -0,0 +1,54 @@ +// @Author daixk 2025/12/7 15:34:00 +package config + +// TokenStyle Token generation style | Token生成风格 +type TokenStyle string + +const ( + // TokenStyleUUID UUID style | UUID风格 + TokenStyleUUID TokenStyle = "uuid" + // TokenStyleSimple Simple random string | 简单随机字符串 + TokenStyleSimple TokenStyle = "simple" + // TokenStyleRandom32 32-bit random string | 32位随机字符串 + TokenStyleRandom32 TokenStyle = "random32" + // TokenStyleRandom64 64-bit random string | 64位随机字符串 + TokenStyleRandom64 TokenStyle = "random64" + // TokenStyleRandom128 128-bit random string | 128位随机字符串 + TokenStyleRandom128 TokenStyle = "random128" + // TokenStyleJWT JWT style | JWT风格 + TokenStyleJWT TokenStyle = "jwt" + // TokenStyleHash SHA256 hash-based style | SHA256哈希风格 + TokenStyleHash TokenStyle = "hash" + // TokenStyleTimestamp Timestamp-based style | 时间戳风格 + TokenStyleTimestamp TokenStyle = "timestamp" + // TokenStyleTik Short ID style (like TikTok) | Tik风格短ID(类似抖音) + TokenStyleTik TokenStyle = "tik" +) + +// SameSiteMode Cookie SameSite attribute values | Cookie的SameSite属性值 +type SameSiteMode string + +const ( + // SameSiteStrict Strict mode | 严格模式 + SameSiteStrict SameSiteMode = "Strict" + // SameSiteLax Lax mode | 宽松模式 + SameSiteLax SameSiteMode = "Lax" + // SameSiteNone None mode | 无限制模式 + SameSiteNone SameSiteMode = "None" +) + +// Default configuration constants | 默认配置常量 +const ( + DefaultTokenName = "satoken" // Default token name | 默认Token名称 + DefaultKeyPrefix = "satoken:" // Default Redis key prefix | 默认Redis键前缀 + DefaultAuthType = "defaultAuthType:" // Default AuthType | 默认认证体系键前缀 + DefaultTimeout = 2592000 // 30 days (seconds) | 30天(秒) + DefaultMaxLoginCount = 12 // Maximum concurrent logins | 最大并发登录数 + DefaultCookiePath = "/" // Default cookie path | 默认Cookie路径 + NoLimit = -1 // No limit flag | 不限制标志 +) + +const ( + CtxAutoType = "SaTokenCtxAutoType" + CtxTokenValue = "CtxTokenValue" +) diff --git a/core/dep/dep.go b/core/dep/dep.go new file mode 100644 index 0000000..9ec0afe --- /dev/null +++ b/core/dep/dep.go @@ -0,0 +1,84 @@ +// @Author daixk 2025/12/7 19:53:00 +package dep + +import ( + "errors" + "github.com/click33/sa-token-go/core/codec" + "github.com/click33/sa-token-go/core/log" +) + +// Dep Dependency manager containing serializer and logger | 依赖管理器,包含序列化和日志记录器 +type Dep struct { + serializer codec.Adapter // Codec adapter for encoding and decoding operations | 编解码器适配器 + logger log.Adapter // Log adapter for logging operations | 日志适配器 +} + +// NewDep Creates a new Dep instance | 创建一个新的 Dep 实例 +func NewDep(serializer codec.Adapter, logger log.Adapter) (*Dep, error) { + if serializer == nil { + return nil, errors.New("serializer cannot be nil") // Serializer cannot be nil | 序列化器不能为空 + } + if logger == nil { + return nil, errors.New("logger cannot be nil") // Logger cannot be nil | 日志实现不能为空 + } + return &Dep{ + serializer: serializer, + logger: logger, + }, nil +} + +// NewDefaultDep Creates a new Dep instance with default values | 创建一个默认赋值的 Dep 实例 +func NewDefaultDep(serializer codec.Adapter, logger log.Adapter) *Dep { + if serializer == nil { + serializer = codec.GetDefaultSerializer() // Default serializer | 默认的序列化器 + } + if logger == nil { + logger = log.GetDefaultLogger() // Default logger | 默认的日志适配器 + } + return &Dep{ + serializer: codec.GetDefaultSerializer(), + logger: log.GetDefaultLogger(), + } +} + +// SetSerializer Set a new codec serializer | 设置新的编解码器 +func (d *Dep) SetSerializer(serializer codec.Adapter) { + if serializer == nil { + serializer = codec.GetDefaultSerializer() // Default serializer | 默认的序列化器 + } + d.serializer = serializer +} + +// SetLogger Set a new log adapter | 设置新的日志适配器 +func (d *Dep) SetLogger(logger log.Adapter) { + if logger == nil { + logger = log.GetDefaultLogger() // Default logger | 默认的日志适配器 + } + d.logger = logger +} + +// GetSerializer Get the current codec serializer | 获取当前的编解码器 +func (d *Dep) GetSerializer() codec.Adapter { + return d.serializer +} + +// GetLogger Get the current log adapter | 获取当前的日志适配器 +func (d *Dep) GetLogger() log.Adapter { + return d.logger +} + +// ResetSerializer Reset the serializer to default | 重置序列化器为默认 +func (d *Dep) ResetSerializer() { + d.serializer = codec.GetDefaultSerializer() // Reset to default serializer | 重置为默认序列化器 +} + +// ResetLogger Reset the log adapter to default | 重置日志适配器为默认 +func (d *Dep) ResetLogger() { + d.logger = log.GetDefaultLogger() // Reset to default log adapter | 重置为默认日志适配器 +} + +// Clear Clears the current serializer and log adapter | 清空当前序列化器和日志适配器 +func (d *Dep) Clear() { + d.serializer = nil // Clear the serializer | 清空序列化器 + d.logger = nil // Clear the log adapter | 清空日志适配器 +} diff --git a/core/go.mod b/core/go.mod index 5f23cc2..e12e892 100644 --- a/core/go.mod +++ b/core/go.mod @@ -6,13 +6,14 @@ require ( github.com/golang-jwt/jwt/v5 v5.2.2 github.com/google/uuid v1.6.0 github.com/panjf2000/ants/v2 v2.11.3 + github.com/stretchr/testify v1.11.1 github.com/vmihailenco/msgpack/v5 v5.4.1 ) require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/stretchr/testify v1.11.1 // indirect github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect golang.org/x/sync v0.16.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/core/go.sum b/core/go.sum index 02550a9..420e731 100644 --- a/core/go.sum +++ b/core/go.sum @@ -16,5 +16,7 @@ github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAh github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/core/listener/listener.go b/core/listener/listener.go index 88bad1c..30c40cf 100644 --- a/core/listener/listener.go +++ b/core/listener/listener.go @@ -2,6 +2,8 @@ package listener import ( "fmt" + "github.com/click33/sa-token-go/core/config" + "github.com/click33/sa-token-go/core/dep" "sync" "time" ) @@ -50,6 +52,7 @@ const ( // EventData contains information about a triggered event | 事件数据,包含触发事件的相关信息 type EventData struct { Event Event // Event type | 事件类型 + AuthType string // Authentication system type | 认证体系类型 LoginID string // User login ID | 用户登录ID Device string // Device identifier | 设备标识 Token string // Authentication token | 认证Token @@ -59,8 +62,8 @@ type EventData struct { // String returns a string representation of the event data | 返回事件数据的字符串表示 func (e *EventData) String() string { - return fmt.Sprintf("Event{type=%s, loginID=%s, device=%s, timestamp=%d}", - e.Event, e.LoginID, e.Device, e.Timestamp) + return fmt.Sprintf("Event{type=%s,AuthType=%s, loginID=%s, device=%s, timestamp=%d}", + e.Event, e.AuthType, e.LoginID, e.Device, e.Timestamp) } // Listener is the interface for event listeners | 事件监听器接口 @@ -111,6 +114,8 @@ type Manager struct { filters []EventFilter // Global event filters | 全局事件过滤器 stats *EventStats // Event statistics | 事件统计 enableStats bool // Whether to collect statistics | 是否收集统计信息 + globalConfig *config.Config // Global authentication configuration | 全局认证配置 + deps *dep.Dep // Dependencies manager | 依赖管理器 } // NewManager creates a new event manager | 创建新的事件管理器 diff --git a/core/log/log.go b/core/log/log.go index 9769e24..a3f588e 100644 --- a/core/log/log.go +++ b/core/log/log.go @@ -18,8 +18,8 @@ func init() { defaultLogger.Store(loggerHolder{l: &NopLogger{}}) } -// SetGlobalLogger sets global logger | 设置全局日志器 -func SetGlobalLogger(l Adapter) { +// SetDefaultLogger sets the default logger | 设置默认日志器 +func SetDefaultLogger(l Adapter) { if l == nil { return } @@ -28,24 +28,24 @@ func SetGlobalLogger(l Adapter) { defaultLogger.Store(loggerHolder{l: l}) } -// getLogger returns the logger | 获取当前日志器 -func getLogger() Adapter { +// GetDefaultLogger returns the logger | 获取当前日志器 +func GetDefaultLogger() Adapter { return defaultLogger.Load().(loggerHolder).l } // -------------------- Global Logging APIs -------------------- -func Print(v ...any) { getLogger().Print(v...) } -func Printf(format string, v ...any) { getLogger().Printf(format, v...) } +func Print(v ...any) { GetDefaultLogger().Print(v...) } +func Printf(format string, v ...any) { GetDefaultLogger().Printf(format, v...) } -func Debug(v ...any) { getLogger().Debug(v...) } -func Debugf(format string, v ...any) { getLogger().Debugf(format, v...) } +func Debug(v ...any) { GetDefaultLogger().Debug(v...) } +func Debugf(format string, v ...any) { GetDefaultLogger().Debugf(format, v...) } -func Info(v ...any) { getLogger().Info(v...) } -func Infof(format string, v ...any) { getLogger().Infof(format, v...) } +func Info(v ...any) { GetDefaultLogger().Info(v...) } +func Infof(format string, v ...any) { GetDefaultLogger().Infof(format, v...) } -func Warn(v ...any) { getLogger().Warn(v...) } -func Warnf(format string, v ...any) { getLogger().Warnf(format, v...) } +func Warn(v ...any) { GetDefaultLogger().Warn(v...) } +func Warnf(format string, v ...any) { GetDefaultLogger().Warnf(format, v...) } -func Error(v ...any) { getLogger().Error(v...) } -func Errorf(format string, v ...any) { getLogger().Errorf(format, v...) } +func Error(v ...any) { GetDefaultLogger().Error(v...) } +func Errorf(format string, v ...any) { GetDefaultLogger().Errorf(format, v...) } diff --git a/core/log/log_adaper_gf.go b/core/log/log_adaper_gf.go index 9fff529..c5c49b7 100644 --- a/core/log/log_adaper_gf.go +++ b/core/log/log_adaper_gf.go @@ -1,73 +1,73 @@ // @Author daixk 2025/11/27 22:58:00 package log -import ( - "context" - "github.com/gogf/gf/v2/os/glog" -) - -// GFLogger adapts GoFrame v2 glog.Logger to Sa-Token logger interface | GoFrame v2 glog 适配器 -type GFLogger struct { - l *glog.Logger - ctx context.Context -} - -// NewGFLogger creates a logger based on GoFrame v2 glog | 创建基于 GoFrame v2 glog 的日志器 -func NewGFLogger(l *glog.Logger) Adapter { - if l == nil { - l = glog.New() - } - return &GFLogger{ - l: l, - ctx: context.Background(), - } -} - -// SetContext sets logging context | 设置日志 Context -func (g *GFLogger) SetContext(ctx context.Context) { - if ctx != nil { - g.ctx = ctx - } -} - -// ---- Implement Adapter Interface | 实现 Adapter 接口 ---- - -func (g *GFLogger) Print(v ...any) { - g.l.Print(g.ctx, v...) -} - -func (g *GFLogger) Printf(format string, v ...any) { - g.l.Printf(g.ctx, format, v...) -} - -func (g *GFLogger) Debug(v ...any) { - g.l.Debug(g.ctx, v...) -} - -func (g *GFLogger) Debugf(format string, v ...any) { - g.l.Debugf(g.ctx, format, v...) -} - -func (g *GFLogger) Info(v ...any) { - g.l.Info(g.ctx, v...) -} - -func (g *GFLogger) Infof(format string, v ...any) { - g.l.Infof(g.ctx, format, v...) -} - -func (g *GFLogger) Warn(v ...any) { - g.l.Warning(g.ctx, v...) -} - -func (g *GFLogger) Warnf(format string, v ...any) { - g.l.Warningf(g.ctx, format, v...) -} - -func (g *GFLogger) Error(v ...any) { - g.l.Error(g.ctx, v...) -} - -func (g *GFLogger) Errorf(format string, v ...any) { - g.l.Errorf(g.ctx, format, v...) -} +//import ( +// "context" +// "github.com/gogf/gf/v2/os/glog" +//) +// +//// GFLogger adapts GoFrame v2 glog.Logger to Sa-Token logger interface | GoFrame v2 glog 适配器 +//type GFLogger struct { +// l *glog.Logger +// ctx context.Context +//} +// +//// NewGFLogger creates a logger based on GoFrame v2 glog | 创建基于 GoFrame v2 glog 的日志器 +//func NewGFLogger(l *glog.Logger) Adapter { +// if l == nil { +// l = glog.New() +// } +// return &GFLogger{ +// l: l, +// ctx: context.Background(), +// } +//} +// +//// SetContext sets logging context | 设置日志 Context +//func (g *GFLogger) SetContext(ctx context.Context) { +// if ctx != nil { +// g.ctx = ctx +// } +//} +// +//// ---- Implement Adapter Interface | 实现 Adapter 接口 ---- +// +//func (g *GFLogger) Print(v ...any) { +// g.l.Print(g.ctx, v...) +//} +// +//func (g *GFLogger) Printf(format string, v ...any) { +// g.l.Printf(g.ctx, format, v...) +//} +// +//func (g *GFLogger) Debug(v ...any) { +// g.l.Debug(g.ctx, v...) +//} +// +//func (g *GFLogger) Debugf(format string, v ...any) { +// g.l.Debugf(g.ctx, format, v...) +//} +// +//func (g *GFLogger) Info(v ...any) { +// g.l.Info(g.ctx, v...) +//} +// +//func (g *GFLogger) Infof(format string, v ...any) { +// g.l.Infof(g.ctx, format, v...) +//} +// +//func (g *GFLogger) Warn(v ...any) { +// g.l.Warning(g.ctx, v...) +//} +// +//func (g *GFLogger) Warnf(format string, v ...any) { +// g.l.Warningf(g.ctx, format, v...) +//} +// +//func (g *GFLogger) Error(v ...any) { +// g.l.Error(g.ctx, v...) +//} +// +//func (g *GFLogger) Errorf(format string, v ...any) { +// g.l.Errorf(g.ctx, format, v...) +//} diff --git a/core/log/log_test.go b/core/log/log_test.go new file mode 100644 index 0000000..8c310f8 --- /dev/null +++ b/core/log/log_test.go @@ -0,0 +1,313 @@ +// @Author daixk 2025/12/6 17:13:00 +package log + +import ( + "os" + "path/filepath" + "strings" + "sync" + "testing" + "time" +) + +// ---------------- Configuration Tests ---------------- + +func TestLoggerBuilderAndConfig(t *testing.T) { + b := NewBuilder(). + Path("test_logs"). + FileFormat("custom_{Y}-{m}-{d}.log"). + Prefix("[TEST] "). + Level(LevelDebug). + TimeFormat("2006-01-02 15:04:05"). + Stdout(false). + RotateSize(1024). + RotateExpire(time.Hour). + RotateBackupLimit(3). + RotateBackupDays(1) + + logger, err := b.Build() + if err != nil { + t.Fatalf("Build() failed: %v", err) + } + defer logger.Close() + + cfg := logger.currentCfg() + + if cfg.Level != LevelDebug { + t.Errorf("expected LevelDebug, got %v", cfg.Level) + } + if !strings.Contains(cfg.FileFormat, "custom_") { + t.Errorf("FileFormat not set correctly") + } + if !strings.Contains(cfg.Prefix, "[TEST]") { + t.Errorf("Prefix not set correctly") + } + + path := ensureDefaultPath(&cfg) + if path == "" { + t.Errorf("ensureDefaultPath returned empty path") + } +} + +// ---------------- Log Output Tests ---------------- + +func TestLoggerOutputToFileAndStdout(t *testing.T) { + dir, _ := os.Getwd() + + logger, err := NewBuilder(). + Path(dir). + Prefix("[OUT] "). + Stdout(true). + Level(LevelDebug). + Build() + if err != nil { + t.Fatalf("Build() failed: %v", err) + } + defer logger.Close() + + // 写日志 + logger.Info("File log test line 1") + logger.Debugf("File log formatted: %d", 123) + logger.Warn("File log test line 2") + + // 等待异步写入完成 + time.Sleep(200 * time.Millisecond) + logger.Flush() + + files, err := filepath.Glob(filepath.Join(dir, "*.log")) + if err != nil || len(files) == 0 { + t.Fatalf("expected at least one log file, got none: %v", err) + } + + data, err := os.ReadFile(files[0]) + if err != nil { + t.Fatalf("failed to read log file: %v", err) + } + + content := string(data) + if !strings.Contains(content, "[OUT]") { + t.Errorf("log file missing prefix: %s", content) + } + if !strings.Contains(content, "File log test line 1") { + t.Errorf("log file missing expected content") + } +} + +// ---------------- Rotation Tests ---------------- + +func TestLoggerRotationBySize(t *testing.T) { + dir, _ := os.Getwd() + + logger, err := NewBuilder(). + Path(dir). + Prefix("[ROTATE] "). + RotateSize(512). + Level(LevelInfo). + Stdout(false). + RotateBackupLimit(5). + Build() + if err != nil { + t.Fatalf("Build() failed: %v", err) + } + defer logger.Close() + + // 连续写日志以触发切分 + for i := 0; i < 200; i++ { + logger.Infof("Rotating log line %03d - this should create multiple files", i) + } + time.Sleep(300 * time.Millisecond) + logger.Flush() + + files, err := filepath.Glob(filepath.Join(dir, "*.log")) + if err != nil { + t.Fatalf("glob failed: %v", err) + } + if len(files) < 1 { + t.Errorf("expected rotated files, got: %v", files) + } +} + +// ---------------- Global Logger Tests ---------------- + +func TestGlobalLogger(t *testing.T) { + dir, _ := os.Getwd() + + l, err := NewBuilder(). + Path(dir). + Prefix("[GLOBAL] "). + Build() + if err != nil { + t.Fatalf("Build() failed: %v", err) + } + defer l.Close() + + SetGlobalLogger(l) + Info("Global logger test 1") + Infof("Global formatted: %d", 999) + + time.Sleep(100 * time.Millisecond) + l.Flush() + + files, _ := filepath.Glob(filepath.Join(dir, "*.log")) + if len(files) == 0 { + t.Fatal("expected global logger to write to file") + } + + data, _ := os.ReadFile(files[0]) + if !strings.Contains(string(data), "Global logger test 1") { + t.Errorf("global logger output not found") + } +} + +// ---------------- NopLogger Tests ---------------- + +func TestNopLoggerNoOutput(t *testing.T) { + n := &NopLogger{} + n.Info("should not appear") + n.Debugf("format %d", 42) + + // nothing to assert except no panic +} + +// ---------------- Concurrency Tests ---------------- + +func TestConcurrentLogging(t *testing.T) { + dir, _ := os.Getwd() + logger, err := NewBuilder(). + Path(dir). + Prefix("[CONCURRENT] "). + Build() + if err != nil { + t.Fatalf("Build() failed: %v", err) + } + defer logger.Close() + + var wg sync.WaitGroup + for i := 0; i < 50; i++ { + wg.Add(1) + go func(id int) { + defer wg.Done() + for j := 0; j < 100; j++ { + logger.Infof("goroutine=%d line=%d", id, j) + } + }(i) + } + wg.Wait() + logger.Flush() + + files, _ := filepath.Glob(filepath.Join(dir, "*.log")) + if len(files) == 0 { + t.Fatal("no log files created under concurrent writes") + } +} + +// ---------------- Benchmark Tests ---------------- + +func BenchmarkLogger_Info(b *testing.B) { + dir, _ := os.Getwd() + logger, _ := NewBuilder(). + Path(dir). + Prefix("[BENCH] "). + Stdout(false). + Build() + defer logger.Close() + + b.ResetTimer() + for i := 0; i < b.N; i++ { + logger.Info("benchmark log line", i) + } +} + +func BenchmarkLogger_Concurrent(b *testing.B) { + dir, _ := os.Getwd() + logger, _ := NewBuilder(). + Path(dir). + Prefix("[BENCH-CONCURRENT] "). + Stdout(false). + Build() + defer logger.Close() + + b.ResetTimer() + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + logger.Infof("parallel log line %d", time.Now().UnixNano()) + } + }) +} + +func BenchmarkNopLogger(b *testing.B) { + n := &NopLogger{} + b.ResetTimer() + for i := 0; i < b.N; i++ { + n.Info("nop log test") + } +} + +func BenchmarkGlobalLogger(b *testing.B) { + dir, _ := os.Getwd() + l, _ := NewBuilder().Path(dir).Stdout(false).Build() + SetGlobalLogger(l) + defer l.Close() + + b.ResetTimer() + for i := 0; i < b.N; i++ { + Infof("benchmark global log line %d", i) + } +} + +// ---------------- Performance Comparison: Zap & GoFrame ---------------- + +//// BenchmarkZapLogger compares zap performance with our logger | 对比 zap 日志性能 +//func BenchmarkZapLogger(b *testing.B) { +// dir, _ := os.Getwd() +// logPath := filepath.Join(dir, "zap_bench.log") +// +// cfg := zap.NewProductionConfig() +// cfg.OutputPaths = []string{logPath} +// zapLogger, err := cfg.Build() +// if err != nil { +// b.Fatalf("failed to create zap logger: %v", err) +// } +// defer zapLogger.Sync() +// +// b.ResetTimer() +// for i := 0; i < b.N; i++ { +// zapLogger.Info("zap benchmark log", zap.Int("index", i)) +// } +//} +// +//// BenchmarkGFLogger compares GoFrame glog performance with our logger | 对比 GoFrame 日志性能 +//func BenchmarkGFLogger(b *testing.B) { +// ctx := context.Background() +// dir, _ := os.Getwd() +// +// logger := glog.New() +// logger.SetPath(dir) +// logger.SetFile("gf_bench.log") +// logger.SetStdoutPrint(false) +// logger.SetAsync(true) // 为公平起见,关闭异步写入 +// +// b.ResetTimer() +// for i := 0; i < b.N; i++ { +// logger.Info(ctx, "gf benchmark log", i) +// } +//} +// +//// BenchmarkOurLogger compares our logger performance | 对比自研日志性能 +//func BenchmarkOurLogger(b *testing.B) { +// dir, _ := os.Getwd() +// logger, err := NewBuilder(). +// Path(dir). +// Prefix("[OUR] "). +// Stdout(false). +// Build() +// if err != nil { +// b.Fatalf("failed to create our logger: %v", err) +// } +// defer logger.Close() +// +// b.ResetTimer() +// for i := 0; i < b.N; i++ { +// logger.Info("our benchmark log", i) +// } +//} diff --git a/core/manager/consts.go b/core/manager/consts.go new file mode 100644 index 0000000..fbd0efc --- /dev/null +++ b/core/manager/consts.go @@ -0,0 +1,39 @@ +// @Author daixk 2025/12/4 17:58:00 +package manager + +import "time" + +// Constants for storage keys and default values | 存储键和默认值常量 +const ( + DefaultDevice = "default" // Default device type | 默认设备类型 + DefaultPrefix = "satoken" // Default key prefix | 默认键前缀 + DisableValue = "1" // Disabled flag value | 被禁用标记值 + DefaultRenewValue = "1" // Default renew flag value | 默认续期标记值 + DefaultNonceTTL = 5 * time.Minute // Default nonce expiration time | 默认随机令牌有效期 + + // Key prefixes | 键前缀 + TokenKeyPrefix = "token:" // Token storage prefix | Token 存储前缀 + AccountKeyPrefix = "account:" // Account storage prefix | 账号存储前缀 + DisableKeyPrefix = "disable:" // Disable state prefix | 禁用状态存储前缀 + RenewKeyPrefix = "renew:" // Token renew prefix | Token 续期存储前缀 + + // Session keys | Session 键 + SessionKeyLoginID = "loginId" // Login ID | 登录 ID + SessionKeyDevice = "device" // Device type | 设备类型 + SessionKeyLoginTime = "loginTime" // Login time | 登录时间 + SessionKeyPermissions = "permissions" // Permissions list | 权限列表 + SessionKeyRoles = "roles" // Roles list | 角色列表 + + // Wildcard for permissions | 权限通配符 + PermissionWildcard = "*" // Global permission wildcard | 全局权限通配符 + PermissionSeparator = ":" // Permission segment separator | 权限段分隔符 +) + +// TokenState 表示 Token 的逻辑状态 +type TokenState string + +const ( + TokenStateLogout TokenState = "LOGOUT" // Logout state | 主动登出 + TokenStateKickout TokenState = "KICK_OUT" // Kickout state | 被踢下线 + TokenStateReplaced TokenState = "BE_REPLACED" // Replaced state | 被顶下线 +) diff --git a/core/manager/manager.go b/core/manager/manager.go index 5e9b6e5..0d4827c 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -1,8 +1,10 @@ package manager import ( + "context" "fmt" "github.com/click33/sa-token-go/core/codec" + "github.com/click33/sa-token-go/core/dep" "github.com/click33/sa-token-go/core/serror" "strings" "time" @@ -18,76 +20,44 @@ import ( "github.com/click33/sa-token-go/core/token" ) -// Constants for storage keys and default values | 存储键和默认值常量 -const ( - DefaultDevice = "default" - DefaultPrefix = "satoken" - DisableValue = "1" - DefaultRenewValue = "1" - DefaultNonceTTL = 5 * time.Minute - - // Key prefixes | 键前缀 - TokenKeyPrefix = "token:" - AccountKeyPrefix = "account:" - DisableKeyPrefix = "disable:" - RenewKeyPrefix = "renew:" - - // Session keys | Session键 - SessionKeyLoginID = "loginId" - SessionKeyDevice = "device" - SessionKeyLoginTime = "loginTime" - SessionKeyPermissions = "permissions" - SessionKeyRoles = "roles" - - // Wildcard for permissions | 权限通配符 - PermissionWildcard = "*" - PermissionSeparator = ":" -) - -// TokenState 表示 Token 的逻辑状态 -type TokenState string - -const ( - TokenStateLogout TokenState = "LOGOUT" // Logout state | 主动登出 - TokenStateKickout TokenState = "KICK_OUT" // Kickout state | 被踢下线 - TokenStateReplaced TokenState = "BE_REPLACED" // Replaced state | 被顶下线 -) - -// TokenInfo Token information | Token信息 +// TokenInfo Token information | Token 信息 type TokenInfo struct { - LoginID string `json:"loginId"` - Device string `json:"device"` - CreateTime int64 `json:"createTime"` - ActiveTime int64 `json:"activeTime"` // Last active time | 最后活跃时间 - Tag string `json:"tag,omitempty"` + LoginID string `json:"loginId"` // Login ID | 登录 ID + Device string `json:"device"` // Device type | 设备类型 + CreateTime int64 `json:"createTime"` // Token creation timestamp | 创建时间戳 + ActiveTime int64 `json:"activeTime"` // Last active time | 最后活跃时间戳 + AuthType string `json:"authType"` // Authentication system type | 认证体系类型 + Tag string `json:"tag,omitempty"` // Custom tag for additional data | 自定义标记字段(可选) } // Manager Authentication manager | 认证管理器 type Manager struct { - prefix string - storage adapter.Storage - config *config.Config - generator *token.Generator - nonceManager *security.NonceManager - refreshManager *security.RefreshTokenManager - oauth2Server *oauth2.OAuth2Server - renewPool *pool.RenewPoolManager - eventManager *listener.Manager + prefix string // Key prefix for all storage operations | 所有存储操作使用的键前缀 + authType string // Authentication system type | 认证体系类型 + storage adapter.Storage // Storage adapter (Redis, Memory, etc.) | 存储适配器(例如 Redis、内存) + config *config.Config // Global authentication configuration | 全局认证配置 + generator *token.Generator // Token generator | Token 生成器 + nonceManager *security.NonceManager // Nonce manager for preventing replay attacks | 随机串管理器 + refreshManager *security.RefreshTokenManager // Refresh token manager | 刷新令牌管理器 + oauth2Server *oauth2.OAuth2Server // OAuth2 authorization server | OAuth2 授权服务器 + renewPool *pool.RenewPoolManager // Token renewal task pool | Token 自动续期的任务池 + eventManager *listener.Manager // Event manager | 事件管理器 + deps *dep.Dep // Dependencies manager | 依赖管理器 } // NewManager Creates a new manager | 创建管理器 -func NewManager(storage adapter.Storage, cfg *config.Config) *Manager { +func NewManager(cfg *config.Config, storage adapter.Storage, deps *dep.Dep) *Manager { + // If no configuration is provided, use the default configuration | 如果没有提供配置,使用默认配置 if cfg == nil { cfg = config.DefaultConfig() } - // Use configured prefix, fallback to default | 使用配置的前缀,回退到默认值 - prefix := cfg.KeyPrefix - if prefix == "" { - prefix = DefaultPrefix + // If no dependencies are provided, create a default Dep instance | 如果没有提供依赖管理器,创建默认的 Dep 实例 + if deps == nil { + deps = dep.NewDefaultDep(nil, nil) } - // Initialize renew pool manager if configuration is provided | 如果配置了续期池,初始化续期池管理器 + // Initialize the renew pool manager if the renew pool configuration is provided | 如果提供了续期池配置,则初始化续期池管理器 var renewPoolManager *pool.RenewPoolManager if cfg.RenewPoolConfig != nil { renewPoolManager, _ = pool.NewRenewPoolManagerWithConfig(&pool.RenewPoolConfig{ @@ -103,70 +73,51 @@ func NewManager(storage adapter.Storage, cfg *config.Config) *Manager { }) } + // Return the new manager instance with the initialized components | 返回初始化后的管理器实例 return &Manager{ + prefix: cfg.KeyPrefix, + authType: cfg.AuthType, storage: storage, config: cfg, generator: token.NewGenerator(cfg), - prefix: prefix, - nonceManager: security.NewNonceManager(storage, prefix, DefaultNonceTTL), - refreshManager: security.NewRefreshTokenManager(storage, prefix, TokenKeyPrefix, cfg), - oauth2Server: oauth2.NewOAuth2Server(storage, prefix), + nonceManager: security.NewNonceManager(storage, cfg.KeyPrefix, DefaultNonceTTL), + refreshManager: security.NewRefreshTokenManager(storage, cfg.KeyPrefix, TokenKeyPrefix, cfg), + oauth2Server: oauth2.NewOAuth2Server(storage, deps, cfg.KeyPrefix), eventManager: listener.NewManager(), renewPool: renewPoolManager, + deps: deps, } } // CloseManager Closes the manager and releases all resources | 关闭管理器并释放所有资源 func (m *Manager) CloseManager() { if m.renewPool != nil { - // 安全关闭 renewPool + // Safely close the renewPool | 安全关闭 renewPool m.renewPool.Stop() + // Set renewPool to nil | 将 renewPool 设置为 nil m.renewPool = nil } } -// ============ Helper Methods | 辅助方法 ============ - -// getDevice extracts device type from optional parameter | 从可选参数中提取设备类型 -func getDevice(device []string) string { - if len(device) > 0 && device[0] != "" { - return device[0] - } - return DefaultDevice -} - -// getExpiration calculates expiration duration from config | 从配置计算过期时间 -func (m *Manager) getExpiration() time.Duration { - if m.config.Timeout > 0 { - return time.Duration(m.config.Timeout) * time.Second - } - return 0 -} - -// assertString safely converts interface to string | 安全地将interface转换为string -func assertString(v any) (string, bool) { - s, ok := v.(string) - return s, ok -} - // ============ Login Authentication | 登录认证 ============ // Login Performs user login and returns token | 登录,返回Token -func (m *Manager) Login(loginID string, device ...string) (string, error) { +// TODO 后续参数可以抽象为结构体 +func (m *Manager) Login(ctx context.Context, loginID string, device ...string) (string, error) { // Check if account is disabled | 检查账号是否被封禁 - if m.IsDisable(loginID) { + if m.IsDisable(ctx, loginID) { return "", serror.ErrAccountDisabled } deviceType := getDevice(device) - accountKey := m.getAccountKey(loginID, deviceType) + accountKey := m.getAccountKey(ctx, m.authType, loginID, deviceType) // Handle shared token for concurrent login | 处理多人登录共用 Token 的情况 if m.config.IsShare { // Look for existing token of this account + device | 查找账号 + 设备下是否已有登录 Token existingToken, err := m.storage.Get(accountKey) if err == nil && existingToken != nil { - if tokenStr, ok := assertString(existingToken); ok && m.IsLogin(tokenStr) { + if tokenStr, ok := assertString(existingToken); ok && m.IsLogin(context.WithValue(ctx, config.CtxTokenValue, existingToken)) { // If valid token exists, return it directly | 如果已有 Token 且有效,则直接返回 return tokenStr, nil } @@ -182,7 +133,7 @@ func (m *Manager) Login(loginID string, device ...string) (string, error) { // Concurrent login allowed but limited by MaxLoginCount | 允许并发登录但受 MaxLoginCount 限制 // This limit applies to all tokens of this account across devices | 该限制针对账号所有设备的登录 Token 数量 tokens, _ := m.GetTokenValueListByLoginID(loginID) - if len(tokens) >= m.config.MaxLoginCount { + if int64(len(tokens)) >= m.config.MaxLoginCount { // Reached maximum concurrent login count | 已达到最大并发登录数 // You may change to "kick out earliest token" if desired | 如需也可改为“踢掉最早 Token” return "", serror.ErrLoginLimitExceeded @@ -249,7 +200,7 @@ func (m *Manager) Login(loginID string, device ...string) (string, error) { } // LoginByToken Login with specified token (for seamless token refresh) | 使用指定Token登录(用于token无感刷新) -func (m *Manager) LoginByToken(loginID string, tokenValue string, device ...string) error { +func (m *Manager) LoginByToken(ctx context.Context) error { info, err := m.getTokenInfo(tokenValue) if err != nil { return err @@ -308,7 +259,7 @@ func (m *Manager) Logout(loginID string, device ...string) error { } // LogoutByToken Logout by token | 根据Token登出 -func (m *Manager) LogoutByToken(tokenValue string) error { +func (m *Manager) LogoutByToken(ctx context.Context) error { if tokenValue == "" { return nil } @@ -339,12 +290,12 @@ func (m *Manager) Kickout(loginID string, device ...string) error { } // kickoutByToken Kick user offline (private) | 根据Token踢人下线(私有) -func (m *Manager) kickoutByToken(tokenValue string) error { +func (m *Manager) kickoutByToken(ctx context.Context) error { return m.removeTokenChain(tokenValue, false, nil, listener.EventKickout) } // KickoutByToken Kick user offline (public method) | 根据Token踢人下线(公开方法) -func (m *Manager) KickoutByToken(tokenValue string) error { +func (m *Manager) KickoutByToken(ctx context.Context) error { return m.kickoutByToken(tokenValue) } @@ -372,12 +323,12 @@ func (m *Manager) Replace(loginID string, device ...string) error { } // replaceByToken Replace user offline by token (private) | 根据Token顶人下线(私有) -func (m *Manager) replaceByToken(tokenValue string) error { +func (m *Manager) replaceByToken(ctx context.Context) error { return m.removeTokenChain(tokenValue, false, nil, listener.EventReplace) } // ReplaceByToken Replace user offline by token (public method) | 根据Token顶人下线(公开方法) -func (m *Manager) ReplaceByToken(tokenValue string) error { +func (m *Manager) ReplaceByToken(ctx context.Context) error { if tokenValue == "" { return nil } @@ -386,95 +337,95 @@ func (m *Manager) ReplaceByToken(tokenValue string) error { // ============ Token Validation | Token验证 ============ -// IsLogin Checks if user is logged in | 检查是否登录 -func (m *Manager) IsLogin(tokenValue string) bool { - if tokenValue == "" { - return false - } - info, err := m.getTokenInfo(tokenValue) +// IsLogin Checks if the user is logged in | 检查用户是否登录 +func (m *Manager) IsLogin(ctx context.Context) bool { + // Retrieve token information using the token value from context | 从上下文中获取Token值并检索Token信息 + info, err := m.getTokenInfoByTokenValue(ctx) if err != nil { - return false + return false // Return false if token info retrieval fails | 如果获取Token信息失败,则返回false } + // Check if the token has exceeded the active timeout | 检查Token是否超过活跃超时时间 if m.config.ActiveTimeout > 0 { now := time.Now().Unix() - // Check if token has exceeded active timeout | 检查 Token 是否超过活跃超时时间 if now-info.ActiveTime > m.config.ActiveTimeout { - // Force logout and clean up token data | 强制登出并清理 Token 相关数据 - _ = m.removeTokenChain(tokenValue, false, info, listener.EventKickout) - return false + // Force logout and clean up token data | 强制登出并清理Token相关数据 + _ = m.removeTokenChain(ctx, false, info, listener.EventKickout) + return false // Return false if the token has expired | 如果Token超时,则返回false } } // Async auto-renew for better performance | 异步自动续期(提高性能) - // Note: ActiveTimeout feature removed to comply with Java sa-token design + // Note: ActiveTimeout feature removed to comply with Java sa-token design | 注意:为了符合Java版sa-token的设计,移除了ActiveTimeout特性 if m.config.AutoRenew && m.config.Timeout > 0 { - tokenKey := m.getTokenKey(tokenValue) + // Construct the token storage key | 构造Token存储键 + tokenKey := m.getTokenKey(ctx, m.authType, getCtxValue(ctx, config.CtxTokenValue)) + + // Check if token renewal is needed | 检查是否需要进行续期 if ttl, err := m.storage.TTL(tokenKey); err == nil { ttlSeconds := int64(ttl.Seconds()) - // Perform renewal if TTL is below MaxRefresh threshold and RenewInterval allows | TTL和RenewInterval同时满足条件才续期 - if ttlSeconds > 0 && (m.config.MaxRefresh <= 0 || ttlSeconds <= m.config.MaxRefresh) && (m.config.RenewInterval <= 0 || !m.storage.Exists(m.getRenewKey(tokenValue))) { - renewFunc := func() { m.renewToken(tokenValue, info) } + // Perform renewal if TTL is below MaxRefresh threshold and RenewInterval allows | 如果TTL小于MaxRefresh阈值且RenewInterval允许,则进行续期 + if ttlSeconds > 0 && (m.config.MaxRefresh <= 0 || ttlSeconds <= m.config.MaxRefresh) && (m.config.RenewInterval <= 0 || !m.storage.Exists(m.getRenewKey(ctx, m.authType, getCtxValue(ctx, config.CtxTokenValue)))) { + renewFunc := func() { m.renewToken(ctx, info) } - // Submit to pool if configured, otherwise use goroutine | 使用续期池或协程执行续期 + // Submit renewal task to the pool if configured, otherwise use a goroutine | 如果配置了续期池,则提交续期任务到池中,否则使用协程 if m.renewPool != nil { _ = m.renewPool.Submit(renewFunc) // Submit token renewal task to the pool | 提交Token续期任务到续期池 } else { - go renewFunc() // Fallback to goroutine if pool is not configured | 如果续期池未配置,使用普通协程 + go renewFunc() // Fallback to goroutine if pool is not configured | 如果没有配置续期池,使用普通协程 } } } } - return true + return true // Return true if the user is logged in | 如果用户已登录,则返回true } // CheckLogin Checks login status (throws serror if not logged in) | 检查登录(未登录抛出错误) -func (m *Manager) CheckLogin(tokenValue string) error { - if !m.IsLogin(tokenValue) { +func (m *Manager) CheckLogin(ctx context.Context) error { + if !m.IsLogin(ctx) { return serror.ErrNotLogin } return nil } // CheckLoginWithState Checks if user is logged in | 检查是否登录(返回详细状态) -func (m *Manager) CheckLoginWithState(tokenValue string) (bool, error) { - if tokenValue == "" { - return false, nil - } - +func (m *Manager) CheckLoginWithState(ctx context.Context) (bool, error) { // Try to get token info with state check | 尝试获取Token信息(包含状态检查) - info, err := m.getTokenInfo(tokenValue) + info, err := m.getTokenInfoByTokenValue(ctx, true) if err != nil { return false, err } if m.config.ActiveTimeout > 0 { now := time.Now().Unix() - // Check if token has exceeded active timeout | 检查 Token 是否超过活跃超时时间 if now-info.ActiveTime > m.config.ActiveTimeout { - // Force logout and clean up token data | 强制登出并清理 Token 相关数据 - _ = m.removeTokenChain(tokenValue, false, info, listener.EventKickout) + // Force logout and clean up token data | 强制登出并清理Token相关数据 + _ = m.removeTokenChain(ctx, false, info, listener.EventKickout) return false, serror.ErrTokenKickout } } // Async auto-renew for better performance | 异步自动续期(提高性能) - // Note: ActiveTimeout feature removed to comply with Java sa-token design + // Note: ActiveTimeout feature removed to comply with Java sa-token design | 注意:为了符合Java版sa-token的设计,移除了ActiveTimeout特性 if m.config.AutoRenew && m.config.Timeout > 0 { - if ttl, err := m.storage.TTL(m.getTokenKey(tokenValue)); err == nil { + // Construct the token storage key | 构造Token存储键 + tokenKey := m.getTokenKey(ctx, m.authType, getCtxValue(ctx, config.CtxTokenValue)) + + // Check if token renewal is needed | 检查是否需要进行续期 + if ttl, err := m.storage.TTL(tokenKey); err == nil { ttlSeconds := int64(ttl.Seconds()) - // Perform renewal if TTL is below MaxRefresh threshold and RenewInterval allows | TTL和RenewInterval同时满足条件才续期 - if ttlSeconds > 0 && (m.config.MaxRefresh <= 0 || ttlSeconds <= m.config.MaxRefresh) && (m.config.RenewInterval <= 0 || !m.storage.Exists(m.getRenewKey(tokenValue))) { - renewFunc := func() { m.renewToken(tokenValue, info) } + // Perform renewal if TTL is below MaxRefresh threshold and RenewInterval allows | 如果TTL小于MaxRefresh阈值且RenewInterval允许,则进行续期 + if ttlSeconds > 0 && (m.config.MaxRefresh <= 0 || ttlSeconds <= m.config.MaxRefresh) && (m.config.RenewInterval <= 0 || !m.storage.Exists(m.getRenewKey(ctx, m.authType, getCtxValue(ctx, config.CtxTokenValue)))) { + renewFunc := func() { m.renewToken(ctx, info) } - // Submit to pool if configured, otherwise use goroutine | 使用续期池或协程执行续期 + // Submit renewal task to the pool if configured, otherwise use a goroutine | 如果配置了续期池,则提交续期任务到池中,否则使用协程 if m.renewPool != nil { _ = m.renewPool.Submit(renewFunc) // Submit token renewal task to the pool | 提交Token续期任务到续期池 } else { - go renewFunc() // Fallback to goroutine if pool is not configured | 如果续期池未配置,使用普通协程 + go renewFunc() // Fallback to goroutine if pool is not configured | 如果没有配置续期池,使用普通协程 } } } @@ -484,50 +435,55 @@ func (m *Manager) CheckLoginWithState(tokenValue string) (bool, error) { } // GetLoginID Gets login ID from token | 根据Token获取登录ID -func (m *Manager) GetLoginID(tokenValue string) (string, error) { - if !m.IsLogin(tokenValue) { - return "", serror.ErrNotLogin - } - - info, err := m.getTokenInfo(tokenValue) - if err != nil { - return "", err +func (m *Manager) GetLoginID(ctx context.Context) (string, error) { + // Check if the user is logged in | 检查用户是否已登录 + isLogin := m.IsLogin(ctx) + if !isLogin { + return "", serror.ErrNotLogin // Return error if not logged in | 如果未登录,则返回错误 } - return info.LoginID, nil + // Retrieve the login ID without checking token validity | 获取登录ID,不检查Token有效性 + return m.GetLoginIDNotCheck(ctx) } // GetLoginIDNotCheck Gets login ID without checking token validity | 获取登录ID(不检查Token是否有效) -func (m *Manager) GetLoginIDNotCheck(tokenValue string) (string, error) { - info, err := m.getTokenInfo(tokenValue) +func (m *Manager) GetLoginIDNotCheck(ctx context.Context) (string, error) { + // Retrieve token information using the token value from context | 从上下文中获取Token值并检索Token信息 + info, err := m.getTokenInfoByTokenValue(ctx) if err != nil { - return "", err + return "", err // Return error if token info retrieval fails | 如果获取Token信息失败,返回错误 } - return info.LoginID, err + return info.LoginID, nil // Return the login ID from the token info | 返回Token信息中的登录ID } // GetTokenValue Gets token by login ID and device | 根据登录ID以及设备获取Token -func (m *Manager) GetTokenValue(loginID string, device ...string) (string, error) { +func (m *Manager) GetTokenValue(ctx context.Context, loginID string, device ...string) (string, error) { + // Retrieve the device type from the provided device parameter | 从提供的设备参数中获取设备类型 deviceType := getDevice(device) - accountKey := m.getAccountKey(loginID, deviceType) + // Construct the account storage key | 构造账号存储键 + accountKey := m.getAccountKey(ctx, m.authType, loginID, deviceType) + + // Retrieve the token value from storage | 从存储中获取Token值 tokenValue, err := m.storage.Get(accountKey) if err != nil || tokenValue == nil { - return "", serror.ErrTokenNotFound + return "", serror.ErrTokenNotFound // Return error if token not found | 如果未找到Token,则返回错误 } + // Assert token value as a string | 断言Token值为字符串 tokenStr, ok := assertString(tokenValue) if !ok { - return "", serror.ErrTokenNotFound + return "", serror.ErrTokenNotFound // Return error if token is not a valid string | 如果Token不是有效字符串,则返回错误 } + // Return the token string | 返回Token字符串 return tokenStr, nil } // GetTokenInfo Gets token information | 获取Token信息 func (m *Manager) GetTokenInfo(tokenValue string) (*TokenInfo, error) { - return m.getTokenInfo(tokenValue) + return m.getTokenInfoByTokenValue(context.WithValue(context.Background(), config.CtxTokenValue, tokenValue)) } // ============ Account Disable | 账号封禁 ============ @@ -555,8 +511,8 @@ func (m *Manager) Untie(loginID string) error { } // IsDisable Checks if account is disabled | 检查账号是否被封禁 -func (m *Manager) IsDisable(loginID string) bool { - key := m.getDisableKey(loginID) +func (m *Manager) IsDisable(ctx context.Context, loginID string) bool { + key := m.getDisableKey(ctx, m.authType, loginID) return m.storage.Exists(key) } @@ -570,15 +526,10 @@ func (m *Manager) GetDisableTime(loginID string) (int64, error) { return int64(ttl.Seconds()), nil } -// getDisableKey Gets disable storage key | 获取禁用存储键 -func (m *Manager) getDisableKey(loginID string) string { - return m.prefix + DisableKeyPrefix + loginID -} - // ============ Session Management | Session管理 ============ // GetSession Gets session by login ID | 获取Session -func (m *Manager) GetSession(loginID string) (*session.Session, error) { +func (m *Manager) GetSession(ctx context.Context, loginID string) (*session.Session, error) { sess, err := session.Load(loginID, m.storage, m.prefix) if err != nil { sess = session.NewSession(loginID, m.storage, m.prefix) @@ -897,100 +848,196 @@ func (m *Manager) GetSessionCountByLoginID(loginID string) (int, error) { return len(tokens), nil } -// ============ Internal Helper Methods | 内部辅助方法 ============ +// ============ Event Management | 事件管理 ============ -// getTokenKey Gets token storage key | 获取Token存储键 -func (m *Manager) getTokenKey(tokenValue string) string { - return m.prefix + TokenKeyPrefix + tokenValue +// RegisterFunc registers a function as an event listener | 注册函数作为事件监听器 +func (m *Manager) RegisterFunc(event listener.Event, fn func(*listener.EventData)) { + if m.eventManager != nil { + m.eventManager.RegisterFunc(event, fn) + } } -// getAccountKey Gets account storage key | 获取账号存储键 -func (m *Manager) getAccountKey(loginID, device string) string { - return m.prefix + AccountKeyPrefix + loginID + PermissionSeparator + device +// Register registers an event listener | 注册事件监听器 +func (m *Manager) Register(event listener.Event, listener listener.Listener) string { + if m.eventManager != nil { + return m.eventManager.Register(event, listener) + } + return "" } -// getRenewKey Gets token renewal tracking key | 获取Token续期追踪键 -func (m *Manager) getRenewKey(tokenValue string) string { - return m.prefix + RenewKeyPrefix + tokenValue +// RegisterWithConfig registers an event listener with config | 注册带配置的事件监听器 +func (m *Manager) RegisterWithConfig(event listener.Event, listener listener.Listener, config listener.ListenerConfig) string { + if m.eventManager != nil { + return m.eventManager.RegisterWithConfig(event, listener, config) + } + return "" } -// getLoginIDByToken Gets loginID by token (符合 Java sa-token 设计) | 通过 Token 获取 loginID -func (m *Manager) getLoginIDByToken(tokenValue string) (string, error) { - info, err := m.getTokenInfo(tokenValue) +// Unregister removes an event listener by ID | 根据ID移除事件监听器 +func (m *Manager) Unregister(id string) bool { + if m.eventManager != nil { + return m.eventManager.Unregister(id) + } + return false +} + +// TriggerEvent manually triggers an event | 手动触发事件 +func (m *Manager) TriggerEvent(data *listener.EventData) { + if m.eventManager != nil { + m.eventManager.Trigger(data) + } +} + +// WaitEvents waits for all async event listeners to complete | 等待所有异步事件监听器完成 +func (m *Manager) WaitEvents() { + if m.eventManager != nil { + m.eventManager.Wait() + } +} + +// GetEventManager gets the event manager | 获取事件管理器 +func (m *Manager) GetEventManager() *listener.Manager { + return m.eventManager +} + +// ============ Public Getters | 公共获取器 ============ + +// GetConfig Gets configuration | 获取配置 +func (m *Manager) GetConfig() *config.Config { + return m.config +} + +// GetStorage Gets storage | 获取存储 +func (m *Manager) GetStorage() adapter.Storage { + return m.storage +} + +// ============ Security Features | 安全特性 ============ + +// GenerateNonce Generates a one-time nonce | 生成一次性随机数 +func (m *Manager) GenerateNonce() (string, error) { + return m.nonceManager.Generate() +} + +// VerifyNonce Verifies a nonce | 验证随机数 +func (m *Manager) VerifyNonce(nonce string) bool { + return m.nonceManager.Verify(nonce) +} + +// LoginWithRefreshToken Logs in with refresh token | 使用刷新令牌登录 +func (m *Manager) LoginWithRefreshToken(loginID, device string) (*security.RefreshTokenInfo, error) { + deviceType := getDevice([]string{device}) + + accessToken, err := m.Login(loginID, deviceType) if err != nil { - return "", err + return nil, err } - return info.LoginID, nil + + return m.refreshManager.GenerateTokenPair(loginID, deviceType, accessToken) } -// getTokenInfo Gets token information | 获取Token信息 -func (m *Manager) getTokenInfo(tokenValue string, checkState ...bool) (*TokenInfo, error) { - tokenKey := m.getTokenKey(tokenValue) +// RefreshAccessToken Refreshes access token | 刷新访问令牌 +func (m *Manager) RefreshAccessToken(refreshToken string) (*security.RefreshTokenInfo, error) { + return m.refreshManager.RefreshAccessToken(refreshToken) +} + +// RevokeRefreshToken Revokes refresh token | 撤销刷新令牌 +func (m *Manager) RevokeRefreshToken(refreshToken string) error { + return m.refreshManager.RevokeRefreshToken(refreshToken) +} + +// GetOAuth2Server Gets OAuth2 server instance | 获取OAuth2服务器实例 +func (m *Manager) GetOAuth2Server() *oauth2.OAuth2Server { + return m.oauth2Server +} + +// ============ Internal Methods | 内部方法 ============ + +// getTokenInfoByTokenValue Gets token information by token value | 通过Token值获取Token信息 +func (m *Manager) getTokenInfoByTokenValue(ctx context.Context, checkState ...bool) (*TokenInfo, error) { + // Construct the token storage key | 构造Token存储键 + tokenKey := m.getTokenKey(ctx, m.authType, getCtxValue(ctx, config.CtxTokenValue)) + + // Retrieve data from storage using the token key | 使用Token键从存储中获取数据 data, err := m.storage.Get(tokenKey) if err != nil { - return nil, err + return nil, err // Return error if data retrieval fails | 如果数据获取失败,返回错误 } if data == nil { - return nil, serror.ErrTokenNotFound + return nil, serror.ErrTokenNotFound // Return error if token is not found | 如果Token未找到,返回错误 } + // Convert data to raw byte slice | 将数据转换为原始字节切片 raw, err := codec.UnifyToBytes(data) if err != nil { - return nil, err + return nil, err // Return error if conversion fails | 如果转换失败,返回错误 } // Check for special token states (if enabled) | 检查是否为特殊状态(当启用检查时) - str := string(raw) - if len(checkState) == 0 || checkState[0] { - switch str { + // If checkState is provided and the first value is true, check for token states | 如果提供了checkState且第一个值为true,检查Token状态 + if len(checkState) > 0 && checkState[0] { + // Convert raw bytes to string and check the token state | 将原始数据转换为字符串,并检查Token状态 + switch string(raw) { case string(TokenStateKickout): - return nil, serror.ErrTokenKickout // 被踢下线 + // Token has been kicked out | Token已被踢下线 + return nil, serror.ErrTokenKickout // Return error if token is kicked out | 如果Token被踢下线,返回错误 case string(TokenStateReplaced): - return nil, serror.ErrTokenReplaced // 被顶下线 + // Token has been replaced | Token已被顶下线 + return nil, serror.ErrTokenReplaced // Return error if token is replaced | 如果Token被顶下线,返回错误 } } // Parse TokenInfo | 解析Token信息 var info TokenInfo - if err = codec.Decode(raw, &info); err != nil { - return nil, fmt.Errorf("%w: %v", serror.ErrCommonUnmarshal, err) + // Use the serializer to decode the raw data | 使用序列化器来解码原始数据 + if err = m.deps.GetSerializer().Decode(raw, &info); err != nil { + return nil, fmt.Errorf("%w: %v", serror.ErrCommonUnmarshal, err) // Return error if decoding fails | 如果解码失败,返回错误 } - return &info, nil + return &info, nil // Return the parsed TokenInfo | 返回解析后的Token信息 } // renewToken Renews token expiration asynchronously | 异步续期Token -func (m *Manager) renewToken(tokenValue string, info *TokenInfo) { +func (m *Manager) renewToken(ctx context.Context, info *TokenInfo) { + // If info is nil, retrieve token information | 如果info为空,获取Token信息 if info == nil { var err error - info, err = m.getTokenInfo(tokenValue) + info, err = m.getTokenInfoByTokenValue(ctx) if err != nil { - return + return // Return if token info retrieval fails | 如果获取Token信息失败,返回 } } - tokenKey := m.getTokenKey(tokenValue) - accountKey := m.getAccountKey(info.LoginID, info.Device) + // Construct the token storage key | 构造Token存储键 + tokenKey := m.getTokenKey(ctx, m.authType, getCtxValue(ctx, config.CtxTokenValue)) + + // Construct the account storage key | 构造账号存储键 + accountKey := m.getAccountKey(ctx, m.authType, info.LoginID, info.Device) + + // Get expiration time | 获取过期时间 exp := m.getExpiration() - // Update ActiveTime and keep original TTL | 更新 ActiveTime 保持原 TTL 不变 + // Update ActiveTime and keep original TTL | 更新ActiveTime,保持原TTL不变 info.ActiveTime = time.Now().Unix() - if tokenInfo, err := codec.Encode(info); err == nil { - _ = m.storage.SetKeepTTL(tokenKey, tokenInfo) + if tokenInfo, err := m.deps.GetSerializer().Encode(info); err == nil { + _ = m.storage.SetKeepTTL(tokenKey, tokenInfo) // Store the updated token information while keeping the original TTL | 存储更新后的Token信息,保持原TTL } - // Renew token TTL | 续期 Token TTL + + // Renew token TTL | 续期Token的TTL _ = m.storage.Expire(tokenKey, exp) - // Renew accountKey TTL | 续期账号映射 TTL + + // Renew accountKey TTL | 续期账号映射的TTL _ = m.storage.Expire(accountKey, exp) - // Renew session TTL | 续期 Session TTL - if sess, err := m.GetSession(info.LoginID); err == nil && sess != nil { - _ = sess.Renew(exp) + + // Renew session TTL | 续期Session的TTL + if sess, err := m.GetSession(ctx, info.LoginID); err == nil && sess != nil { + _ = sess.Renew(exp) // Renew the session expiration | 续期Session的过期时间 } - // Set minimal renewal interval marker | 设置最小续期间隔标记(限流续期频率) + // Set minimal renewal interval marker | 设置最小续期间隔标记(用于限流续期频率) if m.config.RenewInterval > 0 { _ = m.storage.Set( - m.getRenewKey(tokenValue), + m.getRenewKey(ctx, m.authType, getCtxValue(ctx, config.CtxTokenValue)), DefaultRenewValue, time.Duration(m.config.RenewInterval)*time.Second, ) @@ -998,19 +1045,26 @@ func (m *Manager) renewToken(tokenValue string, info *TokenInfo) { } // removeTokenChain Removes all related keys and triggers event | 删除Token相关的所有键并触发事件 -func (m *Manager) removeTokenChain(tokenValue string, destroySession bool, info *TokenInfo, event listener.Event) error { +func (m *Manager) removeTokenChain(ctx context.Context, destroySession bool, info *TokenInfo, event listener.Event) error { + // If info is nil, retrieve token information | 如果info为空,获取Token信息 if info == nil { var err error - info, err = m.getTokenInfo(tokenValue, false) + info, err = m.getTokenInfoByTokenValue(ctx) if err != nil { - return err + return err // Return err if token info retrieval fails | 如果获取Token信息失败,返回err } } - tokenKey := m.getTokenKey(tokenValue) // Token存储键 | Token storage key - accountKey := m.getAccountKey(info.LoginID, info.Device) // Account映射键 | Account mapping key - renewKey := m.getRenewKey(tokenValue) // 续期追踪键 | Token renewal tracking key + // Construct the token storage key | 构造Token存储键 + tokenKey := m.getTokenKey(ctx, m.authType, getCtxValue(ctx, config.CtxTokenValue)) + + // Construct the account storage key | 构造账号存储键 + accountKey := m.getAccountKey(ctx, m.authType, info.LoginID, info.Device) + // Construct the renewal key | 构造续期标记 + renewKey := m.getRenewKey(ctx, m.authType, getCtxValue(ctx, config.CtxTokenValue)) + + // Handle different events | 处理不同的事件 switch event { // EventLogout User logout | 用户主动登出 @@ -1022,15 +1076,15 @@ func (m *Manager) removeTokenChain(tokenValue string, destroySession bool, info _ = m.DeleteSession(info.LoginID) } - // EventKickout User kicked offline (keep session) | 用户被踢下线(保留Session) + // EventKickout User kicked offline (keep session) | 用户被踢下线(保留Session,自动过期) case listener.EventKickout: _ = m.storage.SetKeepTTL(tokenKey, string(TokenStateKickout)) // Mark token as kicked out (preserve original TTL for cleanup) | 将Token标记为“被踢下线”(保留原TTL以便自动清理) _ = m.storage.Delete(accountKey) // Delete account mapping | 删除账号映射 _ = m.storage.Delete(renewKey) // Delete renew key | 删除续期标记 - // EventReplace User replaced by new login (keep session) | 用户被顶下线(保留Session) + // EventReplace User replaced by new login (keep session) | 用户被顶下线(保留Session,自动过期) case listener.EventReplace: - _ = m.storage.SetKeepTTL(tokenKey, string(TokenStateReplaced)) // Mark as replaced but keep TTL | 标记为被顶下线,保留原TTL + _ = m.storage.SetKeepTTL(tokenKey, string(TokenStateReplaced)) // Mark as replaced but keep TTL | 标记为“被顶下线”,保留原TTL _ = m.storage.Delete(accountKey) // Remove account → token mapping | 删除账号映射 _ = m.storage.Delete(renewKey) // Remove renew mark | 删除续期标记 @@ -1047,16 +1101,79 @@ func (m *Manager) removeTokenChain(tokenValue string, destroySession bool, info // Trigger event notification | 触发事件通知 if m.eventManager != nil { m.eventManager.Trigger(&listener.EventData{ - Event: event, - LoginID: info.LoginID, - Token: tokenValue, - Device: info.Device, + Event: event, // Event type | 事件类型 + AuthType: getCtxValue(ctx, config.CtxAutoType), // Auth type from context | 从上下文中获取认证类型 + LoginID: info.LoginID, // Login ID of the user | 用户的登录ID + Token: getCtxValue(ctx, config.CtxTokenValue), // Token value from context | 从上下文中获取Token值 + Device: info.Device, // Device type | 设备类型 }) } return nil } +// ============ Internal Helper Methods | 内部辅助方法 ============ + +// getTokenKey Gets token storage key | 获取Token存储键 +func (m *Manager) getTokenKey(_ context.Context, autoType, tokenValue string) string { + return m.prefix + autoType + TokenKeyPrefix + tokenValue +} + +// getAccountKey Gets account storage key | 获取账号存储键 +func (m *Manager) getAccountKey(_ context.Context, autoType, loginID, device string) string { + return m.prefix + autoType + AccountKeyPrefix + loginID + PermissionSeparator + device +} + +// getRenewKey Gets token renewal tracking key | 获取Token续期追踪键 +func (m *Manager) getRenewKey(_ context.Context, autoType, tokenValue string) string { + return m.prefix + autoType + RenewKeyPrefix + tokenValue +} + +// getDisableKey Gets disable storage key | 获取禁用存储键 +func (m *Manager) getDisableKey(_ context.Context, autoType, loginID string) string { + return m.prefix + autoType + DisableKeyPrefix + loginID +} + +// getCtxValue Returns the value for the given key in the context as a string or the defaultValue if the value is not of type string | 从上下文中获取指定key的值,如果值不是字符串则返回默认值 +func getCtxValue(ctx context.Context, valueKey string, defaultValue ...string) string { + val := ctx.Value(valueKey) // 从上下文中获取值 | Retrieve the value from the context + + // Check if the value is a non-empty string | 检查值是否是非空字符串 + if v, ok := val.(string); ok && v != "" { + return v // If it's a non-empty string, return it | 如果是非空字符串,返回该值 + } + + // If defaultValue is provided, return it, otherwise return an empty string | 如果提供了默认值,返回默认值,否则返回空字符串 + if len(defaultValue) > 0 { + return defaultValue[0] + } + + // Otherwise, return an empty string | 否则返回空字符串 + return "" +} + +// getDevice extracts device type from optional parameter | 从可选参数中提取设备类型 +func getDevice(device []string) string { + if len(device) > 0 && strings.TrimSpace(device[0]) != "" { + return device[0] + } + return DefaultDevice +} + +// getExpiration calculates expiration duration from config | 从配置计算过期时间 +func (m *Manager) getExpiration() time.Duration { + if m.config.Timeout > 0 { + return time.Duration(m.config.Timeout) * time.Second + } + return 0 +} + +// assertString safely converts interface to string | 安全地将interface转换为string +func assertString(v any) (string, bool) { + s, ok := v.(string) + return s, ok +} + // toStringSlice Converts any to []string | 将any转换为[]string func (m *Manager) toStringSlice(v any) []string { switch val := v.(type) { @@ -1088,106 +1205,3 @@ func removeDuplicateStrings(list []string) []string { } return result } - -// ============ Event Management | 事件管理 ============ - -// RegisterFunc registers a function as an event listener | 注册函数作为事件监听器 -func (m *Manager) RegisterFunc(event listener.Event, fn func(*listener.EventData)) { - if m.eventManager != nil { - m.eventManager.RegisterFunc(event, fn) - } -} - -// Register registers an event listener | 注册事件监听器 -func (m *Manager) Register(event listener.Event, listener listener.Listener) string { - if m.eventManager != nil { - return m.eventManager.Register(event, listener) - } - return "" -} - -// RegisterWithConfig registers an event listener with config | 注册带配置的事件监听器 -func (m *Manager) RegisterWithConfig(event listener.Event, listener listener.Listener, config listener.ListenerConfig) string { - if m.eventManager != nil { - return m.eventManager.RegisterWithConfig(event, listener, config) - } - return "" -} - -// Unregister removes an event listener by ID | 根据ID移除事件监听器 -func (m *Manager) Unregister(id string) bool { - if m.eventManager != nil { - return m.eventManager.Unregister(id) - } - return false -} - -// TriggerEvent manually triggers an event | 手动触发事件 -func (m *Manager) TriggerEvent(data *listener.EventData) { - if m.eventManager != nil { - m.eventManager.Trigger(data) - } -} - -// WaitEvents waits for all async event listeners to complete | 等待所有异步事件监听器完成 -func (m *Manager) WaitEvents() { - if m.eventManager != nil { - m.eventManager.Wait() - } -} - -// GetEventManager gets the event manager | 获取事件管理器 -func (m *Manager) GetEventManager() *listener.Manager { - return m.eventManager -} - -// ============ Public Getters | 公共获取器 ============ - -// GetConfig Gets configuration | 获取配置 -func (m *Manager) GetConfig() *config.Config { - return m.config -} - -// GetStorage Gets storage | 获取存储 -func (m *Manager) GetStorage() adapter.Storage { - return m.storage -} - -// ============ Security Features | 安全特性 ============ - -// GenerateNonce Generates a one-time nonce | 生成一次性随机数 -func (m *Manager) GenerateNonce() (string, error) { - return m.nonceManager.Generate() -} - -// VerifyNonce Verifies a nonce | 验证随机数 -func (m *Manager) VerifyNonce(nonce string) bool { - return m.nonceManager.Verify(nonce) -} - -// LoginWithRefreshToken Logs in with refresh token | 使用刷新令牌登录 -func (m *Manager) LoginWithRefreshToken(loginID, device string) (*security.RefreshTokenInfo, error) { - deviceType := getDevice([]string{device}) - - accessToken, err := m.Login(loginID, deviceType) - if err != nil { - return nil, err - } - - return m.refreshManager.GenerateTokenPair(loginID, deviceType, accessToken) -} - -// RefreshAccessToken Refreshes access token | 刷新访问令牌 -func (m *Manager) RefreshAccessToken(refreshToken string) (*security.RefreshTokenInfo, error) { - return m.refreshManager.RefreshAccessToken(refreshToken) -} - -// RevokeRefreshToken Revokes refresh token | 撤销刷新令牌 -func (m *Manager) RevokeRefreshToken(refreshToken string) error { - return m.refreshManager.RevokeRefreshToken(refreshToken) -} - -// GetOAuth2Server Gets OAuth2 server instance | 获取OAuth2服务器实例 -func (m *Manager) GetOAuth2Server() *oauth2.OAuth2Server { - return m.oauth2Server -} diff --git a/core/oauth2/consts.go b/core/oauth2/consts.go new file mode 100644 index 0000000..d6d7ab3 --- /dev/null +++ b/core/oauth2/consts.go @@ -0,0 +1,31 @@ +// @Author daixk 2025/12/5 9:42:00 +package oauth2 + +import "time" + +// Constants for OAuth2 | OAuth2常量 +const ( + DefaultCodeExpiration = 10 * time.Minute // Authorization code expiration | 授权码过期时间 + DefaultTokenExpiration = 2 * time.Hour // Access token expiration | 访问令牌过期时间 + DefaultRefreshTTL = 30 * 24 * time.Hour // Refresh token expiration | 刷新令牌过期时间 + + CodeLength = 32 // Authorization code byte length | 授权码字节长度 + AccessTokenLength = 32 // Access token byte length | 访问令牌字节长度 + RefreshTokenLength = 32 // Refresh token byte length | 刷新令牌字节长度 + + CodeKeySuffix = "oauth2:code:" // Code key suffix after prefix | 授权码键后缀 + TokenKeySuffix = "oauth2:token:" // Token key suffix after prefix | 令牌键后缀 + RefreshKeySuffix = "oauth2:refresh:" // Refresh key suffix after prefix | 刷新令牌键后缀 + + TokenTypeBearer = "Bearer" // Token type | 令牌类型 +) + +// GrantType OAuth2 grant type | OAuth2授权类型 +type GrantType string + +const ( + GrantTypeAuthorizationCode GrantType = "authorization_code" // Authorization code flow | 授权码模式 + GrantTypeRefreshToken GrantType = "refresh_token" // Refresh token flow | 刷新令牌模式 + GrantTypeClientCredentials GrantType = "client_credentials" // Client credentials flow | 客户端凭证模式 + GrantTypePassword GrantType = "password" // Password flow | 密码模式 +) diff --git a/core/oauth2/oauth2.go b/core/oauth2/oauth2.go index 1751668..ca159d3 100644 --- a/core/oauth2/oauth2.go +++ b/core/oauth2/oauth2.go @@ -4,6 +4,8 @@ import ( "crypto/rand" "encoding/hex" "fmt" + "github.com/click33/sa-token-go/core/config" + "github.com/click33/sa-token-go/core/dep" "sync" "time" @@ -26,47 +28,6 @@ import ( // authCode, _ := server.GenerateAuthorizationCode(...) // token, _ := server.ExchangeCodeForToken(...) -// Constants for OAuth2 | OAuth2常量 -const ( - DefaultCodeExpiration = 10 * time.Minute // Authorization code expiration | 授权码过期时间 - DefaultTokenExpiration = 2 * time.Hour // Access token expiration | 访问令牌过期时间 - DefaultRefreshTTL = 30 * 24 * time.Hour // Refresh token expiration | 刷新令牌过期时间 - - CodeLength = 32 // Authorization code byte length | 授权码字节长度 - AccessTokenLength = 32 // Access token byte length | 访问令牌字节长度 - RefreshTokenLength = 32 // Refresh token byte length | 刷新令牌字节长度 - - CodeKeySuffix = "oauth2:code:" // Code key suffix after prefix | 授权码键后缀 - TokenKeySuffix = "oauth2:token:" // Token key suffix after prefix | 令牌键后缀 - RefreshKeySuffix = "oauth2:refresh:" // Refresh key suffix after prefix | 刷新令牌键后缀 - - TokenTypeBearer = "Bearer" // Token type | 令牌类型 -) - -// Error variables | 错误变量 -var ( - ErrClientNotFound = fmt.Errorf("client not found") - ErrInvalidRedirectURI = fmt.Errorf("invalid redirect_uri") - ErrInvalidClientCredentials = fmt.Errorf("invalid client credentials") - ErrInvalidAuthCode = fmt.Errorf("invalid authorization code") - ErrAuthCodeUsed = fmt.Errorf("authorization code already used") - ErrAuthCodeExpired = fmt.Errorf("authorization code expired") - ErrClientMismatch = fmt.Errorf("client mismatch") - ErrRedirectURIMismatch = fmt.Errorf("redirect_uri mismatch") - ErrInvalidAccessToken = fmt.Errorf("invalid access token") - ErrInvalidTokenData = fmt.Errorf("invalid token data") -) - -// GrantType OAuth2 grant type | OAuth2授权类型 -type GrantType string - -const ( - GrantTypeAuthorizationCode GrantType = "authorization_code" // Authorization code flow | 授权码模式 - GrantTypeRefreshToken GrantType = "refresh_token" // Refresh token flow | 刷新令牌模式 - GrantTypeClientCredentials GrantType = "client_credentials" // Client credentials flow | 客户端凭证模式 - GrantTypePassword GrantType = "password" // Password flow | 密码模式 -) - // Client OAuth2 client configuration | OAuth2客户端配置 type Client struct { ClientID string // Client ID | 客户端ID @@ -104,20 +65,23 @@ type OAuth2Server struct { storage adapter.Storage keyPrefix string // Configurable prefix | 可配置的前缀 clients map[string]*Client - clientsMu sync.RWMutex // Clients map lock | 客户端映射锁 - codeExpiration time.Duration // Authorization code expiration (10min) | 授权码过期时间(10分钟) - tokenExpiration time.Duration // Access token expiration (2h) | 访问令牌过期时间(2小时) + clientsMu sync.RWMutex // Clients map lock | 客户端映射锁 + codeExpiration time.Duration // Authorization code expiration (10min) | 授权码过期时间(10分钟) + tokenExpiration time.Duration // Access token expiration (2h) | 访问令牌过期时间(2小时) + globalConfig *config.Config // Global authentication configuration | 全局认证配置 + deps *dep.Dep // Dependencies manager | 依赖管理器 } // NewOAuth2Server Creates a new OAuth2 server | 创建新的OAuth2服务器 // prefix: key prefix (e.g., "satoken:" or "" for Java compatibility) | 键前缀(如:"satoken:" 或 "" 兼容Java) -func NewOAuth2Server(storage adapter.Storage, prefix string) *OAuth2Server { +func NewOAuth2Server(storage adapter.Storage, deps *dep.Dep, prefix string) *OAuth2Server { return &OAuth2Server{ storage: storage, keyPrefix: prefix, clients: make(map[string]*Client), codeExpiration: DefaultCodeExpiration, tokenExpiration: DefaultTokenExpiration, + deps: deps, } } diff --git a/core/pool/pool.go b/core/pool/pool.go index 50c88b8..331d7e1 100644 --- a/core/pool/pool.go +++ b/core/pool/pool.go @@ -2,6 +2,8 @@ package pool import ( + "github.com/click33/sa-token-go/core/config" + "github.com/click33/sa-token-go/core/dep" "github.com/click33/sa-token-go/core/log" "github.com/click33/sa-token-go/core/serror" "sync" @@ -49,11 +51,13 @@ func DefaultRenewPoolConfig() *RenewPoolConfig { // RenewPoolManager manages a dynamic scaling goroutine pool for token renewal tasks | 续期任务协程池管理器 type RenewPoolManager struct { - pool *ants.Pool // ants pool instance | ants 协程池实例 - config *RenewPoolConfig // Configuration object | 池配置对象 - mu sync.Mutex // Synchronization lock | 互斥锁 - stopCh chan struct{} // Stop signal channel | 停止信号通道 - started bool // Indicates if pool manager is running | 是否已启动 + pool *ants.Pool // ants pool instance | ants 协程池实例 + config *RenewPoolConfig // Configuration object | 池配置对象 + globalConfig *config.Config // Global authentication configuration | 全局认证配置 + mu sync.Mutex // Synchronization lock | 互斥锁 + stopCh chan struct{} // Stop signal channel | 停止信号通道 + started bool // Indicates if pool manager is running | 是否已启动 + deps *dep.Dep // Dependencies manager | 依赖管理器 } // NewRenewPoolManagerWithConfig creates manager with config | 使用配置创建续期池管理器 @@ -133,7 +137,7 @@ func (m *RenewPoolManager) Stop() { m.started = false if m.pool != nil && !m.pool.IsClosed() { - _ = m.pool.ReleaseTimeout(10 * time.Second) + _ = m.pool.ReleaseTimeout(5 * time.Second) } } diff --git a/core/security/nonce.go b/core/security/nonce.go index 9b9dd54..ee97fbb 100644 --- a/core/security/nonce.go +++ b/core/security/nonce.go @@ -4,6 +4,7 @@ import ( "crypto/rand" "encoding/hex" "fmt" + "github.com/click33/sa-token-go/core/config" "sync" "time" @@ -37,10 +38,11 @@ var ( // NonceManager Nonce manager for anti-replay attacks | Nonce管理器,用于防重放攻击 type NonceManager struct { - storage adapter.Storage - keyPrefix string // Configurable prefix | 可配置的前缀 - ttl time.Duration - mu sync.RWMutex + storage adapter.Storage + globalConfig *config.Config // Global authentication configuration | 全局认证配置 + keyPrefix string // Configurable prefix | 可配置的前缀 + ttl time.Duration + mu sync.RWMutex } // NewNonceManager Creates a new nonce manager | 创建新的Nonce管理器 diff --git a/core/security/refresh_token.go b/core/security/refresh_token.go index 500761c..008de2b 100644 --- a/core/security/refresh_token.go +++ b/core/security/refresh_token.go @@ -65,8 +65,9 @@ func (r *RefreshTokenInfo) UnmarshalBinary(data []byte) error { // RefreshTokenManager Refresh token manager | 刷新令牌管理器 type RefreshTokenManager struct { storage adapter.Storage - keyPrefix string // Configurable prefix | 可配置的前缀 - tokenKeyPrefix string // Token key prefix | 令牌键前缀 + globalConfig *config.Config // Global authentication configuration | 全局认证配置 + keyPrefix string // Configurable prefix | 可配置的前缀 + tokenKeyPrefix string // Token key prefix | 令牌键前缀 tokenGen *token.Generator refreshTTL time.Duration // Refresh token TTL (30 days) | 刷新令牌有效期(30天) accessTTL time.Duration // Access token TTL (configurable) | 访问令牌有效期(可配置) diff --git a/core/serror/errors.go b/core/serror/errors.go index 2c610a6..0501907 100644 --- a/core/serror/errors.go +++ b/core/serror/errors.go @@ -1,34 +1,55 @@ // @Author daixk 2025/11/25 9:34:00 package serror -import "fmt" +import ( + "errors" +) + +// 此模块只需要把公共的err定义在这里统一使用 模块内部的err在文件内定义就可以了 // Common Errors | Common 错误 var ( - ErrCommonMarshal = fmt.Errorf("failed to marshal data") // failed to marshal data | 序列化数据失败 - ErrCommonUnmarshal = fmt.Errorf("failed to unmarshal data") // failed to unmarshal data | 反序列化数据失败 + ErrCommonMarshal = errors.New("failed to marshal data") // failed to marshal data | 序列化数据失败 + ErrCommonUnmarshal = errors.New("failed to unmarshal data") // failed to unmarshal data | 反序列化数据失败 + + ErrDataNotByte = errors.New("data cannot be converted to byte slice") ) // RenewPool Errors | RenewPool 错误 var ( - ErrRenewPoolNotStarted = fmt.Errorf("renew pool not started") // renew pool not started | 续期线程池未启动 + ErrRenewPoolNotStarted = errors.New("renew pool not started") // renew pool not started | 续期线程池未启动 ) // Session Errors | Session 错误 var ( - ErrSessionNotFound = fmt.Errorf("session not found") // session not found | 会话不存在 - ErrSessionIDEmpty = fmt.Errorf("session id cannot be empty") // session id cannot be empty | Session ID 不能为空 - ErrSessionKeyEmpty = fmt.Errorf("session key cannot be empty") // session key cannot be empty | Session 键不能为空 + ErrSessionNotFound = errors.New("session not found") // session not found | 会话不存在 + ErrSessionKeyEmpty = errors.New("session key cannot be empty") // session key cannot be empty | Session 键不能为空 ) // Manager Errors | Manager 错误 var ( - ErrTokenNotFound = fmt.Errorf("token not found") // token not found | Token 不存在 - ErrInvalidTokenData = fmt.Errorf("invalid token data") // invalid token data | Token 数据无效 - ErrTokenKickout = fmt.Errorf("token has been kicked out") // token has been kicked out | Token 已被踢下线 - ErrTokenReplaced = fmt.Errorf("token has been replaced") // token has been replaced | Token 已被顶下线 - - ErrNotLogin = fmt.Errorf("not login") // not login | 未登录 - ErrAccountDisabled = fmt.Errorf("account is disabled") // account is disabled | 账号已被禁用 - ErrLoginLimitExceeded = fmt.Errorf("login count exceeds the maximum limit") // login count exceeds the maximum limit | 超出最大登录数量限制 + ErrTokenNotFound = errors.New("token not found") // token not found | Token 不存在 + ErrInvalidTokenData = errors.New("invalid token data") // invalid token data | Token 数据无效 + ErrTokenKickout = errors.New("token has been kicked out") // token has been kicked out | Token 已被踢下线 + ErrTokenReplaced = errors.New("token has been replaced") // token has been replaced | Token 已被顶下线 + + ErrNotLogin = errors.New("not login") // not login | 未登录 + ErrAccountDisabled = errors.New("account is disabled") // account is disabled | 账号已被禁用 + ErrLoginLimitExceeded = errors.New("login count exceeds the maximum limit") // login count exceeds the maximum limit | 超出最大登录数量限制 +) + +// Oauth2 Errors | Oauth2 错误 +var ( + ErrClientOrClientIDEmpty = errors.New("invalid client: clientID is required") + + ErrClientNotFound = errors.New("client not found") + ErrInvalidRedirectURI = errors.New("invalid redirect_uri") + ErrInvalidClientCredentials = errors.New("invalid client credentials") + ErrInvalidAuthCode = errors.New("invalid authorization code") + ErrAuthCodeUsed = errors.New("authorization code already used") + ErrAuthCodeExpired = errors.New("authorization code expired") + ErrClientMismatch = errors.New("client mismatch") + ErrRedirectURIMismatch = errors.New("redirect_uri mismatch") + ErrInvalidAccessToken = errors.New("invalid access token") + //ErrInvalidTokenData = errors.New("invalid token data") ) diff --git a/core/session/consts.go b/core/session/consts.go new file mode 100644 index 0000000..94a7bac --- /dev/null +++ b/core/session/consts.go @@ -0,0 +1,7 @@ +// @Author daixk 2025/12/7 17:22:00 +package session + +// Constants for session keys | Session键常量 +const ( + SessionKeyPrefix = "session:" // Storage key prefix | 存储键前缀 +) diff --git a/core/session/session.go b/core/session/session.go index 9d66f0d..5ad6f11 100644 --- a/core/session/session.go +++ b/core/session/session.go @@ -1,8 +1,11 @@ package session import ( + "context" + "errors" "fmt" "github.com/click33/sa-token-go/core/codec" + "github.com/click33/sa-token-go/core/log" "github.com/click33/sa-token-go/core/serror" "sync" "time" @@ -10,11 +13,6 @@ import ( "github.com/click33/sa-token-go/core/adapter" ) -// Constants for session keys | Session键常量 -const ( - SessionKeyPrefix = "session:" // Storage key prefix | 存储键前缀 -) - // Session Session object for storing user data | 会话对象,用于存储用户数据 type Session struct { ID string `json:"id"` // Session ID | Session标识 @@ -23,6 +21,8 @@ type Session struct { mu sync.RWMutex `json:"-"` // Read-write lock | 读写锁 storage adapter.Storage `json:"-"` // Storage backend | 存储 prefix string `json:"-"` // Key prefix | 键前缀 + serializer codec.Adapter // codec Codec adapter for encoding and decoding operations | 编解码操作的编码器适配器 + logger log.Adapter // log Log adapter for logging operations | 日志记录操作的适配器 } // NewSession Creates a new session | 创建新的Session @@ -231,13 +231,12 @@ func (s *Session) getStorageKey() string { // ============ Static Methods | 静态方法 ============ // Load Loads session from storage | 从存储加载 -func Load(id string, storage adapter.Storage, prefix string) (*Session, error) { +func Load(ctx context.Context, id string, prefix string, storage adapter.Storage, codecAdapter codec.Adapter, logAdapter log.Adapter) (*Session, error) { if id == "" { - return nil, serror.ErrSessionIDEmpty + return nil, errors.New("session id cannot be empty") } - key := prefix + SessionKeyPrefix + id - data, err := storage.Get(key) + data, err := storage.Get(prefix + SessionKeyPrefix + id) if err != nil { return nil, err } diff --git a/core/stgmanager/stgmanager.go b/core/stgmanager/stgmanager.go new file mode 100644 index 0000000..9537717 --- /dev/null +++ b/core/stgmanager/stgmanager.go @@ -0,0 +1,56 @@ +// @Author daixk 2025/12/7 12:58:00 +package stgmanager + +import ( + "errors" + "github.com/click33/sa-token-go/core/manager" + "sync" +) + +// StgManager 管理多个 StgManager 实例 | Manages multiple StgManager instances +type StgManager struct { + stpLogicMap sync.Map // 使用 sync.Map 替代 map 和 RWMutex | Replaces map and RWMutex with sync.Map +} + +var ( + // defaultStgManager 是一个全局变量,表示默认的 StgManager 实例 | The default global StgManager instance + defaultStgManager *StgManager +) + +// NewStgManager 创建 StgManager 实例 | Creates an instance of StgManager +func NewStgManager() *StgManager { + return &StgManager{} +} + +// Init 初始化默认的 StgManager 实例 | Initializes the default StgManager instance +// 此方法将创建一个新的 StgManager 实例并将其赋值为默认实例 | This method creates a new StgManager instance and assigns it as the default instance +func (m *StgManager) init() { + defaultStgManager = NewStgManager() // 创建一个新的 StgManager 实例 | Creates a new StgManager instance +} + +// PutStgLogic 向 StgManager 中添加一个 StgManager 实例 | Adds a StgManager instance to the StgManager +func (m *StgManager) PutStgLogic(loginType string, logic *manager.Manager) { + m.stpLogicMap.Store(loginType, logic) // 使用 Store 方法将数据存入 sync.Map | Use Store method to store data in sync.Map +} + +// GetStgLogic 根据 loginType 获取对应的 StgManager 实例 | Retrieves the StgManager instance by loginType +func (m *StgManager) GetStgLogic(loginType string) (*manager.Manager, error) { + value, exists := m.stpLogicMap.Load(loginType) // 使用 Load 方法从 sync.Map 中获取数据 | Use Load method to get data from sync.Map + if !exists { + return nil, errors.New("StgLogic not found for loginType: " + loginType) + } + logic, ok := value.(*manager.Manager) // 将获取的值断言为正确的类型 | Assert the retrieved value to the correct type + if !ok { + return nil, errors.New("Invalid StgLogic type") + } + return logic, nil +} + +// InitDefaultStgManager 初始化并返回默认的 StgManager 实例 | Initializes and returns the default StgManager instance +// 如果默认实例尚未创建,则会初始化并返回 | If the default instance hasn't been created, it initializes and returns it +func InitDefaultStgManager() *StgManager { + if defaultStgManager == nil { + defaultStgManager = NewStgManager() // 初始化默认 StgManager 实例 | Initialize the default StgManager instance + } + return defaultStgManager +} diff --git a/core/stplic.go b/core/stplic.go new file mode 100644 index 0000000..072d2a4 --- /dev/null +++ b/core/stplic.go @@ -0,0 +1,2 @@ +// @Author daixk 2025/12/7 15:03:00 +package core diff --git a/core/token/consts.go b/core/token/consts.go new file mode 100644 index 0000000..8db4681 --- /dev/null +++ b/core/token/consts.go @@ -0,0 +1,12 @@ +// @Author daixk 2025/12/5 15:55:00 +package token + +// Constants for token generation | Token生成常量 +const ( + DefaultJWTSecret = "default-secret-key" // Should be overridden in production | 生产环境应覆盖 + TikTokenLength = 11 // TikTok-style short ID length | Tik风格短ID长度 + TikCharset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" + HashRandomBytesLen = 16 // Random bytes length for hash token | 哈希Token的随机字节长度 + TimestampRandomLen = 8 // Random bytes length for timestamp token | 时间戳Token的随机字节长度 + DefaultSimpleLength = 16 // Default simple token length | 默认简单Token长度 +) diff --git a/core/token/token.go b/core/token/token.go index e4cf4e7..ff1a404 100644 --- a/core/token/token.go +++ b/core/token/token.go @@ -14,16 +14,6 @@ import ( "github.com/google/uuid" ) -// Constants for token generation | Token生成常量 -const ( - DefaultJWTSecret = "default-secret-key" // Should be overridden in production | 生产环境应覆盖 - TikTokenLength = 11 // TikTok-style short ID length | Tik风格短ID长度 - TikCharset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" - HashRandomBytesLen = 16 // Random bytes length for hash token | 哈希Token的随机字节长度 - TimestampRandomLen = 8 // Random bytes length for timestamp token | 时间戳Token的随机字节长度 - DefaultSimpleLength = 16 // Default simple token length | 默认简单Token长度 -) - // Error variables | 错误变量 var ( ErrInvalidToken = fmt.Errorf("invalid token") diff --git a/core/token/token_adaper.go b/core/token/token_adaper.go new file mode 100644 index 0000000..943e404 --- /dev/null +++ b/core/token/token_adaper.go @@ -0,0 +1,11 @@ +// @Author daixk 2025/12/5 15:52:00 +package token + +// TokenGenerator token generation interface | Token生成接口 +type TokenGenerator interface { + // Generate generates token based on implementation | 生成Token(由实现决定具体规则) + Generate(loginID, device string) (string, error) +} + +// Ensure Generator implements TokenGenerator | 确保Generator实现了TokenGenerator接口 +var _ TokenGenerator = (*Generator)(nil) diff --git a/storage/memory/memory.go b/storage/memory/memory.go index 6fc9797..09c206d 100644 --- a/storage/memory/memory.go +++ b/storage/memory/memory.go @@ -117,6 +117,29 @@ func (s *Storage) Get(key string) (any, error) { return item.value, nil } +// GetAndDelete atomically gets the value and deletes the key | 原子获取并删除键 +func (s *Storage) GetAndDelete(key string) (any, error) { + now := time.Now().Unix() + + s.mu.Lock() + defer s.mu.Unlock() + + item, exists := s.data[key] + if !exists { + return nil, ErrKeyNotFound + } + + if item.isExpired(now) { + delete(s.data, key) + return nil, ErrKeyExpired + } + + val := item.value + delete(s.data, key) + + return val, nil +} + // Delete 删除键 func (s *Storage) Delete(keys ...string) error { s.mu.Lock() @@ -179,12 +202,14 @@ func (s *Storage) Expire(key string, expiration time.Duration) error { return ErrKeyNotFound } + // expiration>0 设置 TTL if expiration > 0 { item.expiration = time.Now().Add(expiration).Unix() - } else { - item.expiration = 0 // 永不过期 + return nil } + // 兼容redis的过期时间设置 + delete(s.data, key) return nil } diff --git a/storage/redis/redis.go b/storage/redis/redis.go index c2a6fee..05697c5 100644 --- a/storage/redis/redis.go +++ b/storage/redis/redis.go @@ -140,6 +140,24 @@ func (s *Storage) Get(key string) (any, error) { return val, nil } +// GetAndDelete atomically gets the value and deletes the key | 原子获取并删除键 +func (s *Storage) GetAndDelete(key string) (any, error) { + ctx, cancel := s.withTimeout() + defer cancel() + + val, err := s.client.Get(ctx, s.getKey(key)).Result() + if err == redis.Nil { + return nil, fmt.Errorf("key not found: %s", key) + } + if err != nil { + return nil, err + } + + _, _ = s.client.Del(ctx, s.getKey(key)).Result() + + return val, nil +} + // Delete 删除键 func (s *Storage) Delete(keys ...string) error { if len(keys) == 0 { diff --git a/stputil/stputil.go b/stputil/stputil.go index 36d6387..60b6cee 100644 --- a/stputil/stputil.go +++ b/stputil/stputil.go @@ -1,7 +1,10 @@ package stputil import ( + "errors" "fmt" + "github.com/click33/sa-token-go/core/config" + "strings" "sync" "time" @@ -11,44 +14,97 @@ import ( "github.com/click33/sa-token-go/core/session" ) -// Global Manager instance | 全局Manager实例 var ( - globalManager *manager.Manager - once sync.Once - mu sync.RWMutex + globalManagerMap sync.Map ) -// SetManager sets the global Manager (must be called first) | 设置全局Manager(必须先调用此方法) -func SetManager(mgr *manager.Manager) { - mu.Lock() - defer mu.Unlock() - globalManager = mgr +// --------------------------辅助方法-------------------------- + +// getAutoType checks if a valid autoType is provided, ensures it's trimmed, appends ":" if missing, and returns the value | 检查是否提供有效的 autoType,修剪空格,如果缺少 ":" 则添加,并返回值 +func getAutoType(autoType ...string) string { + // Check if autoType is provided and not empty, trim it and append ":" if missing | 检查是否提供了有效的 autoType,修剪空格,如果缺少 ":" 则添加 + if len(autoType) > 0 && strings.TrimSpace(autoType[0]) != "" { + trimmed := strings.TrimSpace(autoType[0]) + // If it doesn't end with ":", append ":" | 如果 autoType 的值不以 ":" 结尾,则添加 ":" + if !strings.HasSuffix(trimmed, ":") { + trimmed = trimmed + ":" + } + return trimmed + } + // Return default autoType if autoType is empty or invalid | 如果 autoType 为空或无效,返回默认值 + return config.DefaultAuthType } -// GetManager gets the global Manager | 获取全局Manager -func GetManager() *manager.Manager { - mu.RLock() - defer mu.RUnlock() - if globalManager == nil { - panic("StpUtil not initialized, please call SetManager() first or use builder.NewBuilder().Build()") +// loadManager retrieves the manager from the global map using the valid autoType | 使用有效的 autoType 从全局 map 中加载管理器 +func loadManager(autoType string) (*manager.Manager, error) { + // Load the manager from the global map using the valid autoType | 使用有效的 autoType 从全局 map 中加载管理器 + value, ok := globalManagerMap.Load(autoType) + if !ok { + return nil, errors.New("manager not found for autoType: " + autoType) + } + // Assert the loaded value to the correct type | 将加载的值断言为正确的类型 + mgr, ok := value.(*manager.Manager) + if !ok { + return nil, errors.New("invalid manager type for autoType: " + autoType) } - return globalManager + return mgr, nil } -// CloseManager closes global Manager and releases resources | 关闭全局 Manager 并释放资源 -func CloseManager() { - mu.Lock() - defer mu.Unlock() - if globalManager != nil { - globalManager.CloseManager() - globalManager = nil // 置 nil 避免后续误用 +// PutManager stores the manager in the global map using the specified autoType | 使用指定的 autoType 将管理器存储在全局 map 中 +func PutManager(mgr *manager.Manager, autoType ...string) error { + // Validate and get the autoType value | 验证并获取 autoType 值 + validAutoType := getAutoType(autoType...) // 获取 autoType,默认为 config.DefaultAuthType + // Store the manager in the global map with the valid autoType | 使用有效的 autoType 将管理器存储在全局 map 中 + globalManagerMap.Store(validAutoType, mgr) + return nil +} + +// GetManager retrieves the manager from the global map using the specified autoType | 使用指定的 autoType 从全局 map 中获取管理器 +func GetManager(autoType ...string) (*manager.Manager, error) { + // Validate and get the autoType value | 验证并获取 autoType 值 + validAutoType := getAutoType(autoType...) // 获取 autoType,默认为 config.DefaultAuthType + // Use LoadManager to retrieve the manager | 使用 LoadManager 方法来获取管理器 + return loadManager(validAutoType) +} + +// CloseManager closes the specific manager for the given autoType and releases resources | 关闭指定的管理器并释放资源 +func CloseManager(autoType string) error { + // Validate and get the autoType value | 验证并获取 autoType 值 + validAutoType := getAutoType(autoType) // 获取 autoType,默认为 config.DefaultAuthType + // Load the manager from global map | 从全局 map 中加载管理器 + manager, err := loadManager(validAutoType) + if err != nil { + return err } + // Close the manager and release resources | 关闭管理器并释放资源 + manager.CloseManager() + // Remove the manager from the global map | 从全局 map 中移除该管理器 + globalManagerMap.Delete(validAutoType) + return nil +} + +// CloseAllManager closes all managers in the global map and releases resources | 关闭所有管理器并释放资源 +func CloseAllManager() { + // Iterate over all managers in the global map and close them | 遍历全局 map 中的所有管理器并关闭它们 + globalManagerMap.Range(func(key, value interface{}) bool { + // Assert the value to the correct type | 将值断言为正确的类型 + manager, ok := value.(*manager.Manager) + if ok { + // Close each manager | 关闭每个管理器 + manager.CloseManager() + } + // Continue iterating | 继续遍历 + return true + }) + // Clear the global map after closing all managers | 关闭所有管理器后清空全局 map + globalManagerMap = sync.Map{} } // ============ Authentication | 登录认证 ============ // Login performs user login | 用户登录 func Login(loginID interface{}, device ...string) (string, error) { + return GetManager().Login(toString(loginID), device...) } @@ -238,45 +294,51 @@ func GetSessionCount(loginID interface{}) (int, error) { // ============ 辅助方法 ============ -// toString 将interface{}转换为string -func toString(v interface{}) string { +// toString Converts interface{} to string | 将interface{}转换为string +func toString(v interface{}) (string, error) { + // Check the type and convert to string | 判断类型并转换为字符串 switch val := v.(type) { case string: - return val + return val, nil // If it's a string, return it directly | 如果是字符串,直接返回 case int: - return intToString(val) + return intToString(val), nil // If it's int, convert to string | 如果是int,转换为string case int64: - return int64ToString(val) + return int64ToString(val), nil // If it's int64, convert to string | 如果是int64,转换为string case uint: - return uintToString(val) + return uintToString(val), nil // If it's uint, convert to string | 如果是uint,转换为string case uint64: - return uint64ToString(val) + return uint64ToString(val), nil // If it's uint64, convert to string | 如果是uint64,转换为string default: - return "" + return "", errors.New("Invalid type") // For other types, return error | 对于其他类型,返回错误 } } +// intToString Converts int to string | 将int转换为string func intToString(i int) string { - return int64ToString(int64(i)) + return int64ToString(int64(i)) // Call int64ToString to convert | 调用int64ToString进行转换 } +// int64ToString Converts int64 to string | 将int64转换为string func int64ToString(i int64) string { - // 简单实现,可以用 strconv.FormatInt(i, 10) 但为了减少依赖 + // If it's zero, return "0" | 如果是零,返回 "0" if i == 0 { return "0" } + // Check if it's negative and handle it | 判断是否为负数并处理 negative := i < 0 if negative { - i = -i + i = -i // Take the absolute value | 取绝对值 } var result []byte + // Process each digit and prepend to the result array | 将每一位数字依次处理并添加到结果数组 for i > 0 { result = append([]byte{byte('0' + i%10)}, result...) i /= 10 } + // If it's negative, add the '-' sign | 如果是负数,添加负号 if negative { result = append([]byte{'-'}, result...) } @@ -284,16 +346,20 @@ func int64ToString(i int64) string { return string(result) } +// uintToString Converts uint to string | 将uint转换为string func uintToString(u uint) string { - return uint64ToString(uint64(u)) + return uint64ToString(uint64(u)) // Call uint64ToString to convert | 调用uint64ToString进行转换 } +// uint64ToString Converts uint64 to string | 将uint64转换为string func uint64ToString(u uint64) string { + // If it's zero, return "0" | 如果是零,返回 "0" if u == 0 { return "0" } var result []byte + // Process each digit and prepend to the result array | 将每一位数字依次处理并添加到结果数组 for u > 0 { result = append([]byte{byte('0' + u%10)}, result...) u /= 10 From c094e0819d5b26ff3969b3e477f98f9eaf0bffc0 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Mon, 8 Dec 2025 23:02:14 +0800 Subject: [PATCH 12/50] =?UTF-8?q?feat():=201=E3=80=81=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/manager/manager.go | 291 ++++++++++++++++++++-------------------- core/serror/errors.go | 6 - core/session/session.go | 122 +++++++++-------- core/utils/utils.go | 19 +++ 4 files changed, 234 insertions(+), 204 deletions(-) diff --git a/core/manager/manager.go b/core/manager/manager.go index 0d4827c..49c8008 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -6,6 +6,7 @@ import ( "github.com/click33/sa-token-go/core/codec" "github.com/click33/sa-token-go/core/dep" "github.com/click33/sa-token-go/core/serror" + "github.com/click33/sa-token-go/core/utils" "strings" "time" @@ -102,7 +103,7 @@ func (m *Manager) CloseManager() { // ============ Login Authentication | 登录认证 ============ // Login Performs user login and returns token | 登录,返回Token -// TODO 后续参数可以抽象为结构体 +// TODO 后续参数可以修改为结构体 func (m *Manager) Login(ctx context.Context, loginID string, device ...string) (string, error) { // Check if account is disabled | 检查账号是否被封禁 if m.IsDisable(ctx, loginID) { @@ -110,14 +111,15 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( } deviceType := getDevice(device) - accountKey := m.getAccountKey(ctx, m.authType, loginID, deviceType) + accountKey := m.getAccountKey(ctx, loginID, deviceType) // Handle shared token for concurrent login | 处理多人登录共用 Token 的情况 if m.config.IsShare { // Look for existing token of this account + device | 查找账号 + 设备下是否已有登录 Token existingToken, err := m.storage.Get(accountKey) if err == nil && existingToken != nil { - if tokenStr, ok := assertString(existingToken); ok && m.IsLogin(context.WithValue(ctx, config.CtxTokenValue, existingToken)) { + ctx = context.WithValue(ctx, config.CtxTokenValue, existingToken) + if tokenStr, ok := assertString(existingToken); ok && m.IsLogin(ctx) { // If valid token exists, return it directly | 如果已有 Token 且有效,则直接返回 return tokenStr, nil } @@ -127,12 +129,12 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( // Handle concurrent login behavior | 处理并发登录逻辑 if !m.config.IsConcurrent { // Concurrent login not allowed → replace previous login on the same device | 不允许并发登录 → 顶掉同设备下已存在的登录会话 - _ = m.replace(loginID, deviceType) + _ = m.replace(ctx, loginID, deviceType) } else if m.config.MaxLoginCount > 0 && !m.config.IsShare { // Concurrent login allowed but limited by MaxLoginCount | 允许并发登录但受 MaxLoginCount 限制 // This limit applies to all tokens of this account across devices | 该限制针对账号所有设备的登录 Token 数量 - tokens, _ := m.GetTokenValueListByLoginID(loginID) + tokens, _ := m.GetTokenValueListByLoginID(ctx, loginID) if int64(len(tokens)) >= m.config.MaxLoginCount { // Reached maximum concurrent login count | 已达到最大并发登录数 // You may change to "kick out earliest token" if desired | 如需也可改为“踢掉最早 Token” @@ -150,7 +152,7 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( expiration := m.getExpiration() // Prepare TokenInfo object and serialize to JSON | 准备Token信息对象并序列化 - tokenInfo, err := codec.Encode(TokenInfo{ + tokenInfo, err := m.deps.GetSerializer().Encode(TokenInfo{ LoginID: loginID, Device: deviceType, CreateTime: nowTime, @@ -160,8 +162,10 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( return "", fmt.Errorf("%w: %v", serror.ErrCommonMarshal, err) } + ctx = context.WithValue(ctx, config.CtxTokenValue, tokenValue) + // Save token-tokenInfo mapping | 保存 TokenKey-TokenInfo 映射 - tokenKey := m.getTokenKey(tokenValue) + tokenKey := m.getTokenKey(ctx) if err = m.storage.Set(tokenKey, tokenInfo, expiration); err != nil { return "", err } @@ -173,7 +177,7 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( // Create session | 创建Session err = session. - NewSession(loginID, m.storage, m.prefix). + NewSession(m.authType, loginID, m.prefix, m.deps, m.storage). SetMulti( map[string]any{ SessionKeyLoginID: loginID, @@ -189,10 +193,11 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( // Trigger login event | 触发登录事件 if m.eventManager != nil { m.eventManager.Trigger(&listener.EventData{ - Event: listener.EventLogin, - LoginID: loginID, - Token: tokenValue, - Device: deviceType, + Event: listener.EventLogin, + AuthType: m.authType, + LoginID: loginID, + Device: deviceType, + Token: tokenValue, }) } @@ -201,51 +206,40 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( // LoginByToken Login with specified token (for seamless token refresh) | 使用指定Token登录(用于token无感刷新) func (m *Manager) LoginByToken(ctx context.Context) error { - info, err := m.getTokenInfo(tokenValue) + info, err := m.getTokenInfoByTokenValue(ctx) if err != nil { return err } // Check if the account is disabled | 检查账号是否被封禁 - if m.IsDisable(info.LoginID) { + if m.IsDisable(ctx, info.LoginID) { return serror.ErrAccountDisabled } - now := time.Now().Unix() - expiration := m.getExpiration() - // Update last active time only | 更新活跃时间(轻量刷新) - info.ActiveTime = now + info.ActiveTime = time.Now().Unix() // Write back updated TokenInfo (保留原TTL) - data, err := codec.Encode(info) + data, err := m.deps.GetSerializer().Encode(info) if err != nil { return fmt.Errorf("%w: %v", serror.ErrCommonMarshal, err) } - if err = m.storage.SetKeepTTL(m.getTokenKey(tokenValue), data); err != nil { + if err = m.storage.SetKeepTTL(m.getTokenKey(ctx), data); err != nil { return err } - // Extend TTL for token, account, session | 延长Token、账号、Session的过期时间 - if expiration > 0 { - _ = m.storage.Expire(m.getTokenKey(tokenValue), expiration) - _ = m.storage.Expire(m.getAccountKey(info.LoginID, info.Device), expiration) - if sess, err := m.GetSession(info.LoginID); err == nil && sess != nil { - _ = sess.Renew(expiration) - } - } + // Renews token expiration asynchronously | 异步续期Token + m.renewToken(ctx, info) return nil } // Logout Performs user logout | 登出 -func (m *Manager) Logout(loginID string, device ...string) error { - deviceType := getDevice(device) - accountKey := m.getAccountKey(loginID, deviceType) +func (m *Manager) Logout(ctx context.Context, loginID string, device ...string) error { + accountKey := m.getAccountKey(ctx, loginID, getDevice(device)) tokenValue, err := m.storage.Get(accountKey) if err != nil || tokenValue == nil { - // Already logged out | 已经登出 return nil } @@ -255,21 +249,17 @@ func (m *Manager) Logout(loginID string, device ...string) error { return nil } - return m.removeTokenChain(tokenStr, false, nil, listener.EventLogout) + return m.removeTokenChain(context.WithValue(ctx, config.CtxTokenValue, tokenStr), false, nil, listener.EventLogout) } // LogoutByToken Logout by token | 根据Token登出 func (m *Manager) LogoutByToken(ctx context.Context) error { - if tokenValue == "" { - return nil - } - - return m.removeTokenChain(tokenValue, false, nil, listener.EventLogout) + return m.removeTokenChain(ctx, false, nil, listener.EventLogout) } // kickout Kick user offline (private) | 踢人下线(私有) -func (m *Manager) kickout(loginID string, device string) error { - accountKey := m.getAccountKey(loginID, device) +func (m *Manager) kickout(ctx context.Context, loginID string, device string) error { + accountKey := m.getAccountKey(ctx, loginID, device) tokenValue, err := m.storage.Get(accountKey) if err != nil || tokenValue == nil { return nil @@ -280,31 +270,30 @@ func (m *Manager) kickout(loginID string, device string) error { return nil } - return m.removeTokenChain(tokenStr, false, nil, listener.EventKickout) + return m.removeTokenChain(context.WithValue(ctx, config.CtxTokenValue, tokenStr), false, nil, listener.EventKickout) } // Kickout Kick user offline (public method) | 踢人下线(公开方法) -func (m *Manager) Kickout(loginID string, device ...string) error { +func (m *Manager) Kickout(ctx context.Context, loginID string, device ...string) error { deviceType := getDevice(device) - return m.kickout(loginID, deviceType) + return m.kickout(ctx, loginID, deviceType) } // kickoutByToken Kick user offline (private) | 根据Token踢人下线(私有) func (m *Manager) kickoutByToken(ctx context.Context) error { - return m.removeTokenChain(tokenValue, false, nil, listener.EventKickout) + return m.removeTokenChain(ctx, false, nil, listener.EventKickout) } // KickoutByToken Kick user offline (public method) | 根据Token踢人下线(公开方法) func (m *Manager) KickoutByToken(ctx context.Context) error { - return m.kickoutByToken(tokenValue) + return m.kickoutByToken(ctx) } // replace Replace user offline by login ID and device (private) | 根据账号和设备顶人下线(私有) -func (m *Manager) replace(loginID string, device string) error { - accountKey := m.getAccountKey(loginID, device) +func (m *Manager) replace(ctx context.Context, loginID string, device string) error { + accountKey := m.getAccountKey(ctx, loginID, device) tokenValue, err := m.storage.Get(accountKey) if err != nil || tokenValue == nil { - // No active login to replace | 无活跃登录,无需处理 return nil } @@ -313,26 +302,23 @@ func (m *Manager) replace(loginID string, device string) error { return nil } - return m.removeTokenChain(tokenStr, false, nil, listener.EventReplace) + return m.removeTokenChain(context.WithValue(ctx, config.CtxTokenValue, tokenStr), false, nil, listener.EventReplace) } // Replace Replace user offline by login ID and device (public method) | 根据账号和设备顶人下线(公开方法) -func (m *Manager) Replace(loginID string, device ...string) error { +func (m *Manager) Replace(ctx context.Context, loginID string, device ...string) error { deviceType := getDevice(device) - return m.replace(loginID, deviceType) + return m.replace(ctx, loginID, deviceType) } // replaceByToken Replace user offline by token (private) | 根据Token顶人下线(私有) func (m *Manager) replaceByToken(ctx context.Context) error { - return m.removeTokenChain(tokenValue, false, nil, listener.EventReplace) + return m.removeTokenChain(ctx, false, nil, listener.EventReplace) } // ReplaceByToken Replace user offline by token (public method) | 根据Token顶人下线(公开方法) func (m *Manager) ReplaceByToken(ctx context.Context) error { - if tokenValue == "" { - return nil - } - return m.replaceByToken(tokenValue) + return m.replaceByToken(ctx) } // ============ Token Validation | Token验证 ============ @@ -359,14 +345,14 @@ func (m *Manager) IsLogin(ctx context.Context) bool { // Note: ActiveTimeout feature removed to comply with Java sa-token design | 注意:为了符合Java版sa-token的设计,移除了ActiveTimeout特性 if m.config.AutoRenew && m.config.Timeout > 0 { // Construct the token storage key | 构造Token存储键 - tokenKey := m.getTokenKey(ctx, m.authType, getCtxValue(ctx, config.CtxTokenValue)) + tokenKey := m.getTokenKey(ctx) // Check if token renewal is needed | 检查是否需要进行续期 if ttl, err := m.storage.TTL(tokenKey); err == nil { ttlSeconds := int64(ttl.Seconds()) // Perform renewal if TTL is below MaxRefresh threshold and RenewInterval allows | 如果TTL小于MaxRefresh阈值且RenewInterval允许,则进行续期 - if ttlSeconds > 0 && (m.config.MaxRefresh <= 0 || ttlSeconds <= m.config.MaxRefresh) && (m.config.RenewInterval <= 0 || !m.storage.Exists(m.getRenewKey(ctx, m.authType, getCtxValue(ctx, config.CtxTokenValue)))) { + if ttlSeconds > 0 && (m.config.MaxRefresh <= 0 || ttlSeconds <= m.config.MaxRefresh) && (m.config.RenewInterval <= 0 || !m.storage.Exists(m.getRenewKey(ctx))) { renewFunc := func() { m.renewToken(ctx, info) } // Submit renewal task to the pool if configured, otherwise use a goroutine | 如果配置了续期池,则提交续期任务到池中,否则使用协程 @@ -411,14 +397,14 @@ func (m *Manager) CheckLoginWithState(ctx context.Context) (bool, error) { // Note: ActiveTimeout feature removed to comply with Java sa-token design | 注意:为了符合Java版sa-token的设计,移除了ActiveTimeout特性 if m.config.AutoRenew && m.config.Timeout > 0 { // Construct the token storage key | 构造Token存储键 - tokenKey := m.getTokenKey(ctx, m.authType, getCtxValue(ctx, config.CtxTokenValue)) + tokenKey := m.getTokenKey(ctx) // Check if token renewal is needed | 检查是否需要进行续期 if ttl, err := m.storage.TTL(tokenKey); err == nil { ttlSeconds := int64(ttl.Seconds()) // Perform renewal if TTL is below MaxRefresh threshold and RenewInterval allows | 如果TTL小于MaxRefresh阈值且RenewInterval允许,则进行续期 - if ttlSeconds > 0 && (m.config.MaxRefresh <= 0 || ttlSeconds <= m.config.MaxRefresh) && (m.config.RenewInterval <= 0 || !m.storage.Exists(m.getRenewKey(ctx, m.authType, getCtxValue(ctx, config.CtxTokenValue)))) { + if ttlSeconds > 0 && (m.config.MaxRefresh <= 0 || ttlSeconds <= m.config.MaxRefresh) && (m.config.RenewInterval <= 0 || !m.storage.Exists(m.getRenewKey(ctx))) { renewFunc := func() { m.renewToken(ctx, info) } // Submit renewal task to the pool if configured, otherwise use a goroutine | 如果配置了续期池,则提交续期任务到池中,否则使用协程 @@ -459,11 +445,8 @@ func (m *Manager) GetLoginIDNotCheck(ctx context.Context) (string, error) { // GetTokenValue Gets token by login ID and device | 根据登录ID以及设备获取Token func (m *Manager) GetTokenValue(ctx context.Context, loginID string, device ...string) (string, error) { - // Retrieve the device type from the provided device parameter | 从提供的设备参数中获取设备类型 - deviceType := getDevice(device) - // Construct the account storage key | 构造账号存储键 - accountKey := m.getAccountKey(ctx, m.authType, loginID, deviceType) + accountKey := m.getAccountKey(ctx, loginID, getDevice(device)) // Retrieve the token value from storage | 从存储中获取Token值 tokenValue, err := m.storage.Get(accountKey) @@ -482,85 +465,97 @@ func (m *Manager) GetTokenValue(ctx context.Context, loginID string, device ...s } // GetTokenInfo Gets token information | 获取Token信息 -func (m *Manager) GetTokenInfo(tokenValue string) (*TokenInfo, error) { - return m.getTokenInfoByTokenValue(context.WithValue(context.Background(), config.CtxTokenValue, tokenValue)) +func (m *Manager) GetTokenInfo(ctx context.Context) (*TokenInfo, error) { + return m.getTokenInfoByTokenValue(ctx) } // ============ Account Disable | 账号封禁 ============ // Disable Disables an account | 封禁账号 -func (m *Manager) Disable(loginID string, duration time.Duration) error { +func (m *Manager) Disable(ctx context.Context, loginID string, duration time.Duration) error { // Check if the account has active sessions and force logout | 检查账号是否有活跃会话并强制下线 - tokens, err := m.GetTokenValueListByLoginID(loginID) + tokens, err := m.GetTokenValueListByLoginID(ctx, loginID) if err == nil && len(tokens) > 0 { for _, tokenValue := range tokens { // Force kick out each active token | 强制踢出所有活跃的Token - _ = m.removeTokenChain(tokenValue, true, nil, listener.EventKickout) + _ = m.removeTokenChain(context.WithValue(ctx, config.CtxTokenValue, tokenValue), true, nil, listener.EventKickout) } } - key := m.getDisableKey(loginID) + // Retrieve the disable flag storage key | 获取封禁标记的存储键 + key := m.getDisableKey(ctx, loginID) + // Set disable flag with specified duration | 设置封禁标记并指定封禁时长 return m.storage.Set(key, DisableValue, duration) } // Untie Re-enables a disabled account | 解封账号 -func (m *Manager) Untie(loginID string) error { - key := m.getDisableKey(loginID) +func (m *Manager) Untie(ctx context.Context, loginID string) error { + // Retrieve the disable flag storage key | 获取封禁标记的存储键 + key := m.getDisableKey(ctx, loginID) + // Remove the disable flag from storage | 删除封禁标记 return m.storage.Delete(key) } // IsDisable Checks if account is disabled | 检查账号是否被封禁 func (m *Manager) IsDisable(ctx context.Context, loginID string) bool { - key := m.getDisableKey(ctx, m.authType, loginID) + // Retrieve the disable flag storage key | 获取封禁标记的存储键 + key := m.getDisableKey(ctx, loginID) + // Check if the disable flag exists in storage | 检查封禁标记是否存在 return m.storage.Exists(key) } // GetDisableTime Gets remaining disable time in seconds | 获取账号剩余封禁时间(秒) -func (m *Manager) GetDisableTime(loginID string) (int64, error) { - key := m.getDisableKey(loginID) +func (m *Manager) GetDisableTime(ctx context.Context, loginID string) (int64, error) { + // Retrieve the disable flag storage key | 获取封禁标记的存储键 + key := m.getDisableKey(ctx, loginID) + // Retrieve the TTL (Time to Live) for the disable flag | 获取封禁标记的TTL(剩余时间) ttl, err := m.storage.TTL(key) if err != nil { - return -2, err + return -2, err // Return -2 if TTL retrieval fails | 如果获取TTL失败,返回-2 } + // Return the remaining disable time in seconds | 返回剩余封禁时间(秒) return int64(ttl.Seconds()), nil } // ============ Session Management | Session管理 ============ // GetSession Gets session by login ID | 获取Session -func (m *Manager) GetSession(ctx context.Context, loginID string) (*session.Session, error) { - sess, err := session.Load(loginID, m.storage, m.prefix) +func (m *Manager) GetSession(_ context.Context, loginID string) (*session.Session, error) { + sess, err := session.Load(loginID, m) if err != nil { - sess = session.NewSession(loginID, m.storage, m.prefix) + sess = session.NewSession(m.authType, loginID, m.prefix, m.deps, m.storage) } return sess, nil } // GetSessionByToken Gets session by token | 根据Token获取Session -func (m *Manager) GetSessionByToken(tokenValue string) (*session.Session, error) { - loginID, err := m.GetLoginID(tokenValue) +func (m *Manager) GetSessionByToken(ctx context.Context) (*session.Session, error) { + loginID, err := m.GetLoginID(ctx) if err != nil { return nil, err } - return m.GetSession(loginID) + + return m.GetSession(ctx, loginID) } // DeleteSession Deletes session | 删除Session -func (m *Manager) DeleteSession(loginID string) error { - sess, err := m.GetSession(loginID) +func (m *Manager) DeleteSession(ctx context.Context, loginID string) error { + sess, err := m.GetSession(ctx, loginID) if err != nil { return err } + return sess.Destroy() } // DeleteSessionByToken Deletes session by token | 根据Token删除Session -func (m *Manager) DeleteSessionByToken(tokenValue string) error { - sess, err := m.GetSessionByToken(tokenValue) +func (m *Manager) DeleteSessionByToken(ctx context.Context) error { + sess, err := m.GetSessionByToken(ctx) if err != nil { return err } + return sess.Destroy() } @@ -819,32 +814,43 @@ func (m *Manager) GetTokenTag(tokenValue string) (string, error) { // ============ Session Query | 会话查询 ============ // GetTokenValueListByLoginID Gets all tokens for specified account | 获取指定账号的所有Token -func (m *Manager) GetTokenValueListByLoginID(loginID string) ([]string, error) { - pattern := m.prefix + AccountKeyPrefix + loginID + ":*" +func (m *Manager) GetTokenValueListByLoginID(_ context.Context, loginID string) ([]string, error) { + // Construct the pattern for account key | 构造账号存储键的匹配模式 + pattern := m.prefix + m.authType + AccountKeyPrefix + loginID + ":*" + + // Retrieve keys matching the pattern from storage | 从存储中获取匹配的键 keys, err := m.storage.Keys(pattern) if err != nil { - return nil, err + return nil, err // Return error if key retrieval fails | 如果获取键失败,则返回错误 } + // Initialize a slice to hold the token strings | 初始化切片来存储Token字符串 tokens := make([]string, 0, len(keys)) + + // Loop through the keys and retrieve the associated token values | 遍历键并获取关联的Token值 for _, key := range keys { value, err := m.storage.Get(key) if err == nil && value != nil { + // Assert value as string and add to tokens slice | 将值断言为字符串并添加到Token切片 if tokenStr, ok := assertString(value); ok { tokens = append(tokens, tokenStr) } } } + // Return the list of token strings | 返回Token字符串列表 return tokens, nil } // GetSessionCountByLoginID Gets session count for specified account | 获取指定账号的Session数量 -func (m *Manager) GetSessionCountByLoginID(loginID string) (int, error) { - tokens, err := m.GetTokenValueListByLoginID(loginID) +func (m *Manager) GetSessionCountByLoginID(ctx context.Context, loginID string) (int, error) { + // Get the list of token values for the specified login ID | 获取指定登录ID的Token值列表 + tokens, err := m.GetTokenValueListByLoginID(ctx, loginID) if err != nil { - return 0, err + return 0, err // Return error if token list retrieval fails | 如果获取Token列表失败,则返回错误 } + + // Return the count of tokens as the session count | 返回Token数量作为Session数量 return len(tokens), nil } @@ -900,18 +906,6 @@ func (m *Manager) GetEventManager() *listener.Manager { return m.eventManager } -// ============ Public Getters | 公共获取器 ============ - -// GetConfig Gets configuration | 获取配置 -func (m *Manager) GetConfig() *config.Config { - return m.config -} - -// GetStorage Gets storage | 获取存储 -func (m *Manager) GetStorage() adapter.Storage { - return m.storage -} - // ============ Security Features | 安全特性 ============ // GenerateNonce Generates a one-time nonce | 生成一次性随机数 @@ -951,12 +945,39 @@ func (m *Manager) GetOAuth2Server() *oauth2.OAuth2Server { return m.oauth2Server } +// ============ Public Getters | 公共获取器 ============ + +// GetConfig Gets configuration | 获取配置 +func (m *Manager) GetConfig() *config.Config { + return m.config +} + +// GetStorage Gets storage | 获取存储 +func (m *Manager) GetStorage() adapter.Storage { + return m.storage +} + +// GetAutoType Gets autoType | 获取登录类型 +func (m *Manager) GetAutoType() string { + return m.authType +} + +// GetDeps Gets Deps | 获取依赖 +func (m *Manager) GetDeps() *dep.Dep { + return m.deps +} + +// GetPrefix Gets prefix | 获取前缀 +func (m *Manager) GetPrefix() string { + return m.prefix +} + // ============ Internal Methods | 内部方法 ============ // getTokenInfoByTokenValue Gets token information by token value | 通过Token值获取Token信息 func (m *Manager) getTokenInfoByTokenValue(ctx context.Context, checkState ...bool) (*TokenInfo, error) { // Construct the token storage key | 构造Token存储键 - tokenKey := m.getTokenKey(ctx, m.authType, getCtxValue(ctx, config.CtxTokenValue)) + tokenKey := m.getTokenKey(ctx) // Retrieve data from storage using the token key | 使用Token键从存储中获取数据 data, err := m.storage.Get(tokenKey) @@ -1009,10 +1030,10 @@ func (m *Manager) renewToken(ctx context.Context, info *TokenInfo) { } // Construct the token storage key | 构造Token存储键 - tokenKey := m.getTokenKey(ctx, m.authType, getCtxValue(ctx, config.CtxTokenValue)) + tokenKey := m.getTokenKey(ctx) // Construct the account storage key | 构造账号存储键 - accountKey := m.getAccountKey(ctx, m.authType, info.LoginID, info.Device) + accountKey := m.getAccountKey(ctx, info.LoginID, info.Device) // Get expiration time | 获取过期时间 exp := m.getExpiration() @@ -1037,7 +1058,7 @@ func (m *Manager) renewToken(ctx context.Context, info *TokenInfo) { // Set minimal renewal interval marker | 设置最小续期间隔标记(用于限流续期频率) if m.config.RenewInterval > 0 { _ = m.storage.Set( - m.getRenewKey(ctx, m.authType, getCtxValue(ctx, config.CtxTokenValue)), + m.getRenewKey(ctx), DefaultRenewValue, time.Duration(m.config.RenewInterval)*time.Second, ) @@ -1056,13 +1077,13 @@ func (m *Manager) removeTokenChain(ctx context.Context, destroySession bool, inf } // Construct the token storage key | 构造Token存储键 - tokenKey := m.getTokenKey(ctx, m.authType, getCtxValue(ctx, config.CtxTokenValue)) + tokenKey := m.getTokenKey(ctx) // Construct the account storage key | 构造账号存储键 - accountKey := m.getAccountKey(ctx, m.authType, info.LoginID, info.Device) + accountKey := m.getAccountKey(ctx, info.LoginID, info.Device) // Construct the renewal key | 构造续期标记 - renewKey := m.getRenewKey(ctx, m.authType, getCtxValue(ctx, config.CtxTokenValue)) + renewKey := m.getRenewKey(ctx) // Handle different events | 处理不同的事件 switch event { @@ -1073,7 +1094,7 @@ func (m *Manager) removeTokenChain(ctx context.Context, destroySession bool, inf _ = m.storage.Delete(accountKey) // Delete account-token mapping | 删除账号映射 _ = m.storage.Delete(renewKey) // Delete renew key | 删除续期标记 if destroySession { // Optionally destroy session | 可选销毁Session - _ = m.DeleteSession(info.LoginID) + _ = m.DeleteSession(ctx, info.LoginID) } // EventKickout User kicked offline (keep session) | 用户被踢下线(保留Session,自动过期) @@ -1094,18 +1115,18 @@ func (m *Manager) removeTokenChain(ctx context.Context, destroySession bool, inf _ = m.storage.Delete(accountKey) // Delete account-token mapping | 删除账号映射 _ = m.storage.Delete(renewKey) // Delete renew key | 删除续期标记 if destroySession { // Optionally destroy session | 可选销毁Session - _ = m.DeleteSession(info.LoginID) + _ = m.DeleteSession(ctx, info.LoginID) } } // Trigger event notification | 触发事件通知 if m.eventManager != nil { m.eventManager.Trigger(&listener.EventData{ - Event: event, // Event type | 事件类型 - AuthType: getCtxValue(ctx, config.CtxAutoType), // Auth type from context | 从上下文中获取认证类型 - LoginID: info.LoginID, // Login ID of the user | 用户的登录ID - Token: getCtxValue(ctx, config.CtxTokenValue), // Token value from context | 从上下文中获取Token值 - Device: info.Device, // Device type | 设备类型 + Event: event, // Event type | 事件类型 + AuthType: m.authType, // Auth type from context | 从上下文中获取认证类型 + LoginID: info.LoginID, // Login ID of the user | 用户的登录ID + Token: utils.GetCtxValue(ctx, config.CtxTokenValue), // Token value from context | 从上下文中获取Token值 + Device: info.Device, // Device type | 设备类型 }) } @@ -1115,41 +1136,23 @@ func (m *Manager) removeTokenChain(ctx context.Context, destroySession bool, inf // ============ Internal Helper Methods | 内部辅助方法 ============ // getTokenKey Gets token storage key | 获取Token存储键 -func (m *Manager) getTokenKey(_ context.Context, autoType, tokenValue string) string { - return m.prefix + autoType + TokenKeyPrefix + tokenValue +func (m *Manager) getTokenKey(ctx context.Context) string { + return m.prefix + m.authType + TokenKeyPrefix + utils.GetCtxValue(ctx, config.CtxTokenValue) } // getAccountKey Gets account storage key | 获取账号存储键 -func (m *Manager) getAccountKey(_ context.Context, autoType, loginID, device string) string { - return m.prefix + autoType + AccountKeyPrefix + loginID + PermissionSeparator + device +func (m *Manager) getAccountKey(_ context.Context, loginID, device string) string { + return m.prefix + m.authType + AccountKeyPrefix + loginID + PermissionSeparator + device } // getRenewKey Gets token renewal tracking key | 获取Token续期追踪键 -func (m *Manager) getRenewKey(_ context.Context, autoType, tokenValue string) string { - return m.prefix + autoType + RenewKeyPrefix + tokenValue +func (m *Manager) getRenewKey(ctx context.Context) string { + return m.prefix + m.authType + RenewKeyPrefix + utils.GetCtxValue(ctx, config.CtxTokenValue) } // getDisableKey Gets disable storage key | 获取禁用存储键 -func (m *Manager) getDisableKey(_ context.Context, autoType, loginID string) string { - return m.prefix + autoType + DisableKeyPrefix + loginID -} - -// getCtxValue Returns the value for the given key in the context as a string or the defaultValue if the value is not of type string | 从上下文中获取指定key的值,如果值不是字符串则返回默认值 -func getCtxValue(ctx context.Context, valueKey string, defaultValue ...string) string { - val := ctx.Value(valueKey) // 从上下文中获取值 | Retrieve the value from the context - - // Check if the value is a non-empty string | 检查值是否是非空字符串 - if v, ok := val.(string); ok && v != "" { - return v // If it's a non-empty string, return it | 如果是非空字符串,返回该值 - } - - // If defaultValue is provided, return it, otherwise return an empty string | 如果提供了默认值,返回默认值,否则返回空字符串 - if len(defaultValue) > 0 { - return defaultValue[0] - } - - // Otherwise, return an empty string | 否则返回空字符串 - return "" +func (m *Manager) getDisableKey(_ context.Context, loginID string) string { + return m.prefix + m.authType + DisableKeyPrefix + loginID } // getDevice extracts device type from optional parameter | 从可选参数中提取设备类型 diff --git a/core/serror/errors.go b/core/serror/errors.go index 0501907..10c144b 100644 --- a/core/serror/errors.go +++ b/core/serror/errors.go @@ -20,12 +20,6 @@ var ( ErrRenewPoolNotStarted = errors.New("renew pool not started") // renew pool not started | 续期线程池未启动 ) -// Session Errors | Session 错误 -var ( - ErrSessionNotFound = errors.New("session not found") // session not found | 会话不存在 - ErrSessionKeyEmpty = errors.New("session key cannot be empty") // session key cannot be empty | Session 键不能为空 -) - // Manager Errors | Manager 错误 var ( ErrTokenNotFound = errors.New("token not found") // token not found | Token 不存在 diff --git a/core/session/session.go b/core/session/session.go index 5ad6f11..c942493 100644 --- a/core/session/session.go +++ b/core/session/session.go @@ -1,11 +1,11 @@ package session import ( - "context" "errors" "fmt" "github.com/click33/sa-token-go/core/codec" - "github.com/click33/sa-token-go/core/log" + "github.com/click33/sa-token-go/core/dep" + "github.com/click33/sa-token-go/core/manager" "github.com/click33/sa-token-go/core/serror" "sync" "time" @@ -15,24 +15,26 @@ import ( // Session Session object for storing user data | 会话对象,用于存储用户数据 type Session struct { + AuthType string `json:"authType"` // Authentication system type | 认证体系类型 ID string `json:"id"` // Session ID | Session标识 CreateTime int64 `json:"createTime"` // Creation time | 创建时间 Data map[string]any `json:"data"` // Session data | 数据 - mu sync.RWMutex `json:"-"` // Read-write lock | 读写锁 - storage adapter.Storage `json:"-"` // Storage backend | 存储 prefix string `json:"-"` // Key prefix | 键前缀 - serializer codec.Adapter // codec Codec adapter for encoding and decoding operations | 编解码操作的编码器适配器 - logger log.Adapter // log Log adapter for logging operations | 日志记录操作的适配器 + storage adapter.Storage `json:"-"` // Storage backend | 存储 + mu sync.RWMutex `json:"-"` // Read-write lock | 读写锁 + deps *dep.Dep `json:"-"` // Dependencies manager | 依赖管理器 } // NewSession Creates a new session | 创建新的Session -func NewSession(id string, storage adapter.Storage, prefix string) *Session { +func NewSession(authType, id, prefix string, deps *dep.Dep, storage adapter.Storage) *Session { return &Session{ + AuthType: authType, ID: id, CreateTime: time.Now().Unix(), Data: make(map[string]any), - storage: storage, prefix: prefix, + storage: storage, + deps: deps, } } @@ -41,41 +43,34 @@ func NewSession(id string, storage adapter.Storage, prefix string) *Session { // Set Sets value | 设置值 func (s *Session) Set(key string, value any, ttl ...time.Duration) error { if key == "" { - return serror.ErrSessionIDEmpty + return errors.New("session key cannot empty") } s.mu.Lock() defer s.mu.Unlock() s.Data[key] = value - if len(ttl) > 0 && ttl[0] > 0 { - return s.saveWithTTL(ttl[0]) - } - return s.save() + return s.save(ttl...) } // SetMulti sets multiple key-value pairs | 设置多个键值对 -func (s *Session) SetMulti(values map[string]any, ttl ...time.Duration) error { - if len(values) == 0 { +func (s *Session) SetMulti(valueMap map[string]any, ttl ...time.Duration) error { + if len(valueMap) == 0 { return nil } s.mu.Lock() defer s.mu.Unlock() - for key, value := range values { + for key, value := range valueMap { if key == "" { - return serror.ErrSessionKeyEmpty + return errors.New("session id cannot be empty") } s.Data[key] = value } - if len(ttl) > 0 && ttl[0] > 0 { - return s.saveWithTTL(ttl[0]) - } - - return s.save() + return s.save(ttl...) } // Get Gets value | 获取值 @@ -146,22 +141,22 @@ func (s *Session) Has(key string) bool { return exists } -// Delete 删除键 +// Delete removes a key and preserves TTL | 删除键并保留 TTL func (s *Session) Delete(key string) error { s.mu.Lock() defer s.mu.Unlock() delete(s.Data, key) - return s.save() + return s.saveKeepTTL() } -// Clear Clears all data | 清空所有数据 +// Clear removes all keys but preserves TTL | 清空所有键并保留 TTL func (s *Session) Clear() error { s.mu.Lock() defer s.mu.Unlock() s.Data = make(map[string]any) - return s.save() + return s.saveKeepTTL() } // Keys Gets all keys | 获取所有键 @@ -191,57 +186,85 @@ func (s *Session) IsEmpty() bool { // Renew extends the session TTL without modifying content | 续期 Session 的 TTL,但不修改内容 func (s *Session) Renew(ttl time.Duration) error { - if ttl <= 0 { - return nil // 不允许设置 0 TTL,避免误删 + if ttl < 0 { + return nil // Skip renewal if ttl is invalid | 跳过无效续期 } key := s.getStorageKey() return s.storage.Expire(key, ttl) } +// Destroy Destroys session | 销毁Session +func (s *Session) Destroy() error { + s.mu.Lock() + defer s.mu.Unlock() + + key := s.getStorageKey() + return s.storage.Delete(key) +} + // ============ Internal Methods | 内部方法 ============ +// getStorageKey Gets storage key for this session | 获取Session的存储键 +func (s *Session) getStorageKey() string { + return s.prefix + s.AuthType + SessionKeyPrefix + s.ID +} + // save Saves session to storage | 保存到存储 -func (s *Session) save() error { - data, err := codec.Encode(s) +func (s *Session) save(ttl ...time.Duration) error { + data, err := s.deps.GetSerializer().Encode(s) if err != nil { return fmt.Errorf("%w: %v", serror.ErrCommonMarshal, err) } key := s.getStorageKey() - return s.storage.Set(key, data, 0) + + // Default to 0 (no expiration) | 默认使用 0(无过期时间) + if len(ttl) == 0 || ttl[0] <= 0 { + return s.storage.Set(key, data, 0) + } + + // Save with provided TTL | 使用指定 TTL 保存 + return s.storage.Set(key, data, ttl[0]) } -// saveWithTTL saves session with TTL | 带 TTL 保存 Session -func (s *Session) saveWithTTL(ttl time.Duration) error { - data, err := codec.Encode(s) +// saveKeepTTL saves session while preserving its TTL | 保存 Session 并保留现有 TTL +func (s *Session) saveKeepTTL() error { + data, err := s.deps.GetSerializer().Encode(s) if err != nil { return fmt.Errorf("%w: %v", serror.ErrCommonMarshal, err) } key := s.getStorageKey() - return s.storage.Set(key, string(data), ttl) -} -// getStorageKey Gets storage key for this session | 获取Session的存储键 -func (s *Session) getStorageKey() string { - return s.prefix + SessionKeyPrefix + s.ID + // Try to get current TTL | 获取当前 TTL + ttl, err := s.storage.TTL(key) + if err != nil { + return err + } else if ttl <= 0 { + ttl = 0 // Default to permanent if no TTL exists | 无 TTL 默认永久保存 + } + + return s.storage.Set(key, data, ttl) } // ============ Static Methods | 静态方法 ============ // Load Loads session from storage | 从存储加载 -func Load(ctx context.Context, id string, prefix string, storage adapter.Storage, codecAdapter codec.Adapter, logAdapter log.Adapter) (*Session, error) { +func Load(id string, m *manager.Manager) (*Session, error) { if id == "" { return nil, errors.New("session id cannot be empty") } + if m == nil { + return nil, errors.New("manager cannot be empty") + } - data, err := storage.Get(prefix + SessionKeyPrefix + id) + data, err := m.GetStorage().Get(m.GetPrefix() + m.GetAutoType() + SessionKeyPrefix + id) if err != nil { return nil, err } if data == nil { - return nil, serror.ErrSessionNotFound + return nil, errors.New("session not found") } raw, err := codec.UnifyToBytes(data) @@ -250,20 +273,11 @@ func Load(ctx context.Context, id string, prefix string, storage adapter.Storage } var session Session - if err = codec.Decode(raw, &session); err != nil { + if err = m.GetDeps().GetSerializer().Decode(raw, &session); err != nil { return nil, fmt.Errorf("%w: %v", serror.ErrCommonUnmarshal, err) } - session.storage = storage - session.prefix = prefix + session.storage = m.GetStorage() + session.deps = m.GetDeps() return &session, nil } - -// Destroy Destroys session | 销毁Session -func (s *Session) Destroy() error { - s.mu.Lock() - defer s.mu.Unlock() - - key := s.getStorageKey() - return s.storage.Delete(key) -} diff --git a/core/utils/utils.go b/core/utils/utils.go index c7dbf4d..8668ec3 100644 --- a/core/utils/utils.go +++ b/core/utils/utils.go @@ -1,6 +1,7 @@ package utils import ( + "context" "crypto/rand" "crypto/sha256" "encoding/base64" @@ -588,3 +589,21 @@ func UniqueSlice[T comparable](slice []T) []T { } return result } + +// GetCtxValue Returns the value for the given key in the context as a string or the defaultValue if the value is not of type string | 从上下文中获取指定key的值,如果值不是字符串则返回默认值 +func GetCtxValue(ctx context.Context, valueKey string, defaultValue ...string) string { + val := ctx.Value(valueKey) // 从上下文中获取值 | Retrieve the value from the context + + // Check if the value is a non-empty string | 检查值是否是非空字符串 + if v, ok := val.(string); ok && v != "" { + return v // If it's a non-empty string, return it | 如果是非空字符串,返回该值 + } + + // If defaultValue is provided, return it, otherwise return an empty string | 如果提供了默认值,返回默认值,否则返回空字符串 + if len(defaultValue) > 0 { + return defaultValue[0] + } + + // Otherwise, return an empty string | 否则返回空字符串 + return "" +} From 21265e2aa157f83282f3b542916158d114b6154f Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Tue, 9 Dec 2025 21:54:03 +0800 Subject: [PATCH 13/50] =?UTF-8?q?feat():=201=E3=80=81=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/codec/codec.go | 19 -- core/config/config_test.go | 384 +++++++++++----------- core/context/context.go | 33 +- core/log/log_test.go | 568 ++++++++++++++++----------------- core/manager/manager.go | 101 +++--- core/security/refresh_token.go | 2 + core/serror/errors.go | 2 - core/session/session.go | 4 +- 8 files changed, 551 insertions(+), 562 deletions(-) diff --git a/core/codec/codec.go b/core/codec/codec.go index 57c738f..b3d7efd 100644 --- a/core/codec/codec.go +++ b/core/codec/codec.go @@ -2,7 +2,6 @@ package codec import ( - "github.com/click33/sa-token-go/core/serror" "sync" "sync/atomic" ) @@ -85,21 +84,3 @@ func NewSerializerMust(name string) Adapter { func NewSerializerMustWithJson(name string) Adapter { return NewSerializer(name) } - -// -------------------- Helper Functions -------------------- - -// UnifyToBytes converts string or []byte to []byte safely | 将 string 或 []byte 安全转换为 []byte -func UnifyToBytes(data any) ([]byte, error) { - if data == nil { - return nil, serror.ErrDataNotByte - } - - switch v := data.(type) { - case []byte: - return v, nil - case string: - return []byte(v), nil - default: - return nil, serror.ErrDataNotByte - } -} diff --git a/core/config/config_test.go b/core/config/config_test.go index 980725e..e87fb14 100644 --- a/core/config/config_test.go +++ b/core/config/config_test.go @@ -1,195 +1,195 @@ // @Author daixk 2025/12/6 16:47:00 package config -import ( - "github.com/click33/sa-token-go/core/pool" - "github.com/stretchr/testify/assert" - "testing" - "time" -) - -// TestDefaultConfig verifies that DefaultConfig returns a valid configuration | 验证 DefaultConfig 返回的配置是否合法 -func TestDefaultConfig(t *testing.T) { - cfg := DefaultConfig() - assert.NotNil(t, cfg) - assert.Equal(t, DefaultTokenName, cfg.TokenName) - assert.Equal(t, DefaultKeyPrefix, cfg.KeyPrefix) - assert.True(t, cfg.TokenStyle.IsValid()) - - err := cfg.Validate() - assert.NoError(t, err) -} - -// TestInvalidTokenStyle checks invalid TokenStyle detection | 检查无效 TokenStyle 的检测 -func TestInvalidTokenStyle(t *testing.T) { - cfg := DefaultConfig() - cfg.TokenStyle = "invalid-style" - err := cfg.Validate() - assert.Error(t, err) - assert.Contains(t, err.Error(), "invalid TokenStyle") -} - -// TestJwtSecretKeyValidation checks that JWT style requires secret key | 检查 JWT 风格必须设置密钥 -func TestJwtSecretKeyValidation(t *testing.T) { - cfg := DefaultConfig() - cfg.TokenStyle = TokenStyleJWT - cfg.JwtSecretKey = "" - err := cfg.Validate() - assert.Error(t, err) - assert.Contains(t, err.Error(), "JwtSecretKey is required") -} - -// TestNumericLimitValidation checks NoLimit and invalid numeric values | 检查数值字段 NoLimit 与非法值 -func TestNumericLimitValidation(t *testing.T) { - cfg := DefaultConfig() - cfg.Timeout = 0 // invalid - err := cfg.Validate() - assert.Error(t, err) - assert.Contains(t, err.Error(), "Timeout") - - cfg.Timeout = NoLimit - cfg.MaxRefresh = 10 - cfg.RenewInterval = 5 - err = cfg.Validate() - assert.NoError(t, err) -} - -// TestCookieValidation checks cookie path and samesite validation | 检查 Cookie 路径与 SameSite 校验 -func TestCookieValidation(t *testing.T) { - cfg := DefaultConfig() - cfg.CookieConfig.Path = "" - err := cfg.Validate() - assert.Error(t, err) - assert.Contains(t, err.Error(), "CookieConfig.Path") - - cfg.CookieConfig.Path = "/" - cfg.CookieConfig.SameSite = "Invalid" - err = cfg.Validate() - assert.Error(t, err) - assert.Contains(t, err.Error(), "invalid CookieConfig.SameSite") -} - -// TestRenewPoolValidation checks renew pool config validation | 检查续期池配置验证逻辑 -func TestRenewPoolValidation(t *testing.T) { - cfg := DefaultConfig() - poolCfg := pool.DefaultRenewPoolConfig() - poolCfg.MinSize = 0 - cfg.RenewPoolConfig = poolCfg - err := cfg.Validate() - assert.Error(t, err) - assert.Contains(t, err.Error(), "must be > 0") - - poolCfg.MinSize = 1 - poolCfg.MaxSize = 0 - cfg.RenewPoolConfig = poolCfg - err = cfg.Validate() - assert.Error(t, err) - assert.Contains(t, err.Error(), "must be >=") - - poolCfg.MaxSize = 10 - poolCfg.ScaleUpRate = 2 - cfg.RenewPoolConfig = poolCfg - err = cfg.Validate() - assert.Error(t, err) - assert.Contains(t, err.Error(), "ScaleUpRate") - - poolCfg.ScaleUpRate = 0.5 - poolCfg.ScaleDownRate = -0.2 - cfg.RenewPoolConfig = poolCfg - err = cfg.Validate() - assert.Error(t, err) - assert.Contains(t, err.Error(), "ScaleDownRate") - - poolCfg.ScaleDownRate = 0.5 - poolCfg.CheckInterval = 0 - cfg.RenewPoolConfig = poolCfg - err = cfg.Validate() - assert.Error(t, err) - assert.Contains(t, err.Error(), "CheckInterval") - - poolCfg.CheckInterval = 5 * time.Second - poolCfg.Expiry = 0 - cfg.RenewPoolConfig = poolCfg - err = cfg.Validate() - assert.Error(t, err) - assert.Contains(t, err.Error(), "Expiry") - - // Valid pool config - poolCfg.Expiry = 10 * time.Second - cfg.RenewPoolConfig = poolCfg - err = cfg.Validate() - assert.NoError(t, err) -} - -// TestKeyPrefixValidation checks key prefix length and whitespace | 检查 KeyPrefix 长度与空白字符 -func TestKeyPrefixValidation(t *testing.T) { - cfg := DefaultConfig() - - cfg.KeyPrefix = "with space " - err := cfg.Validate() - assert.Error(t, err) - assert.Contains(t, err.Error(), "whitespace") - - longPrefix := make([]byte, 70) - for i := range longPrefix { - longPrefix[i] = 'a' - } - cfg.KeyPrefix = string(longPrefix) - err = cfg.Validate() - assert.Error(t, err) - assert.Contains(t, err.Error(), "too long") -} - -// TestClone verifies deep copy behavior | 验证 Clone 的深拷贝行为 -func TestClone(t *testing.T) { - cfg := DefaultConfig() - clone := cfg.Clone() - assert.Equal(t, cfg.TokenName, clone.TokenName) - - // Modify original cookie - cfg.CookieConfig.Path = "/changed" - assert.NotEqual(t, cfg.CookieConfig.Path, clone.CookieConfig.Path) - - // Modify renew pool - cfg.RenewPoolConfig.MinSize = 99 - assert.NotEqual(t, cfg.RenewPoolConfig.MinSize, clone.RenewPoolConfig.MinSize) -} - -// TestSetters verifies chainable setter behavior | 验证所有 setter 的链式调用行为 -func TestSetters(t *testing.T) { - cfg := DefaultConfig(). - SetTokenName("mytoken"). - SetTimeout(100). - SetMaxRefresh(50). - SetRenewInterval(10). - SetActiveTimeout(5). - SetIsConcurrent(false). - SetIsShare(false). - SetMaxLoginCount(2). - SetIsReadBody(true). - SetIsReadHeader(false). - SetIsReadCookie(true). - SetTokenStyle(TokenStyleRandom64). - SetTokenSessionCheckLogin(false). - SetJwtSecretKey("secret"). - SetAutoRenew(false). - SetIsLog(true). - SetIsPrintBanner(false). - SetKeyPrefix("prefix:") - - assert.Equal(t, "mytoken", cfg.TokenName) - assert.Equal(t, int64(100), cfg.Timeout) - assert.Equal(t, TokenStyleRandom64, cfg.TokenStyle) - assert.Equal(t, false, cfg.IsConcurrent) - assert.Equal(t, "prefix:", cfg.KeyPrefix) -} - -// TestAdjustMaxRefresh verifies automatic adjustment of MaxRefresh | 验证 MaxRefresh 自动调整逻辑 -func TestAdjustMaxRefresh(t *testing.T) { - cfg := DefaultConfig() - cfg.Timeout = 10 - cfg.MaxRefresh = 100 - err := cfg.Validate() - assert.NoError(t, err) - assert.Equal(t, int64(5), cfg.MaxRefresh) // adjusted to Timeout/2 -} +//import ( +// "github.com/click33/sa-token-go/core/pool" +// "github.com/stretchr/testify/assert" +// "testing" +// "time" +//) +// +//// TestDefaultConfig verifies that DefaultConfig returns a valid configuration | 验证 DefaultConfig 返回的配置是否合法 +//func TestDefaultConfig(t *testing.T) { +// cfg := DefaultConfig() +// assert.NotNil(t, cfg) +// assert.Equal(t, DefaultTokenName, cfg.TokenName) +// assert.Equal(t, DefaultKeyPrefix, cfg.KeyPrefix) +// assert.True(t, cfg.TokenStyle.IsValid()) +// +// err := cfg.Validate() +// assert.NoError(t, err) +//} +// +//// TestInvalidTokenStyle checks invalid TokenStyle detection | 检查无效 TokenStyle 的检测 +//func TestInvalidTokenStyle(t *testing.T) { +// cfg := DefaultConfig() +// cfg.TokenStyle = "invalid-style" +// err := cfg.Validate() +// assert.Error(t, err) +// assert.Contains(t, err.Error(), "invalid TokenStyle") +//} +// +//// TestJwtSecretKeyValidation checks that JWT style requires secret key | 检查 JWT 风格必须设置密钥 +//func TestJwtSecretKeyValidation(t *testing.T) { +// cfg := DefaultConfig() +// cfg.TokenStyle = TokenStyleJWT +// cfg.JwtSecretKey = "" +// err := cfg.Validate() +// assert.Error(t, err) +// assert.Contains(t, err.Error(), "JwtSecretKey is required") +//} +// +//// TestNumericLimitValidation checks NoLimit and invalid numeric values | 检查数值字段 NoLimit 与非法值 +//func TestNumericLimitValidation(t *testing.T) { +// cfg := DefaultConfig() +// cfg.Timeout = 0 // invalid +// err := cfg.Validate() +// assert.Error(t, err) +// assert.Contains(t, err.Error(), "Timeout") +// +// cfg.Timeout = NoLimit +// cfg.MaxRefresh = 10 +// cfg.RenewInterval = 5 +// err = cfg.Validate() +// assert.NoError(t, err) +//} +// +//// TestCookieValidation checks cookie path and samesite validation | 检查 Cookie 路径与 SameSite 校验 +//func TestCookieValidation(t *testing.T) { +// cfg := DefaultConfig() +// cfg.CookieConfig.Path = "" +// err := cfg.Validate() +// assert.Error(t, err) +// assert.Contains(t, err.Error(), "CookieConfig.Path") +// +// cfg.CookieConfig.Path = "/" +// cfg.CookieConfig.SameSite = "Invalid" +// err = cfg.Validate() +// assert.Error(t, err) +// assert.Contains(t, err.Error(), "invalid CookieConfig.SameSite") +//} +// +//// TestRenewPoolValidation checks renew pool config validation | 检查续期池配置验证逻辑 +//func TestRenewPoolValidation(t *testing.T) { +// cfg := DefaultConfig() +// poolCfg := pool.DefaultRenewPoolConfig() +// poolCfg.MinSize = 0 +// cfg.RenewPoolConfig = poolCfg +// err := cfg.Validate() +// assert.Error(t, err) +// assert.Contains(t, err.Error(), "must be > 0") +// +// poolCfg.MinSize = 1 +// poolCfg.MaxSize = 0 +// cfg.RenewPoolConfig = poolCfg +// err = cfg.Validate() +// assert.Error(t, err) +// assert.Contains(t, err.Error(), "must be >=") +// +// poolCfg.MaxSize = 10 +// poolCfg.ScaleUpRate = 2 +// cfg.RenewPoolConfig = poolCfg +// err = cfg.Validate() +// assert.Error(t, err) +// assert.Contains(t, err.Error(), "ScaleUpRate") +// +// poolCfg.ScaleUpRate = 0.5 +// poolCfg.ScaleDownRate = -0.2 +// cfg.RenewPoolConfig = poolCfg +// err = cfg.Validate() +// assert.Error(t, err) +// assert.Contains(t, err.Error(), "ScaleDownRate") +// +// poolCfg.ScaleDownRate = 0.5 +// poolCfg.CheckInterval = 0 +// cfg.RenewPoolConfig = poolCfg +// err = cfg.Validate() +// assert.Error(t, err) +// assert.Contains(t, err.Error(), "CheckInterval") +// +// poolCfg.CheckInterval = 5 * time.Second +// poolCfg.Expiry = 0 +// cfg.RenewPoolConfig = poolCfg +// err = cfg.Validate() +// assert.Error(t, err) +// assert.Contains(t, err.Error(), "Expiry") +// +// // Valid pool config +// poolCfg.Expiry = 10 * time.Second +// cfg.RenewPoolConfig = poolCfg +// err = cfg.Validate() +// assert.NoError(t, err) +//} +// +//// TestKeyPrefixValidation checks key prefix length and whitespace | 检查 KeyPrefix 长度与空白字符 +//func TestKeyPrefixValidation(t *testing.T) { +// cfg := DefaultConfig() +// +// cfg.KeyPrefix = "with space " +// err := cfg.Validate() +// assert.Error(t, err) +// assert.Contains(t, err.Error(), "whitespace") +// +// longPrefix := make([]byte, 70) +// for i := range longPrefix { +// longPrefix[i] = 'a' +// } +// cfg.KeyPrefix = string(longPrefix) +// err = cfg.Validate() +// assert.Error(t, err) +// assert.Contains(t, err.Error(), "too long") +//} +// +//// TestClone verifies deep copy behavior | 验证 Clone 的深拷贝行为 +//func TestClone(t *testing.T) { +// cfg := DefaultConfig() +// clone := cfg.Clone() +// assert.Equal(t, cfg.TokenName, clone.TokenName) +// +// // Modify original cookie +// cfg.CookieConfig.Path = "/changed" +// assert.NotEqual(t, cfg.CookieConfig.Path, clone.CookieConfig.Path) +// +// // Modify renew pool +// cfg.RenewPoolConfig.MinSize = 99 +// assert.NotEqual(t, cfg.RenewPoolConfig.MinSize, clone.RenewPoolConfig.MinSize) +//} +// +//// TestSetters verifies chainable setter behavior | 验证所有 setter 的链式调用行为 +//func TestSetters(t *testing.T) { +// cfg := DefaultConfig(). +// SetTokenName("mytoken"). +// SetTimeout(100). +// SetMaxRefresh(50). +// SetRenewInterval(10). +// SetActiveTimeout(5). +// SetIsConcurrent(false). +// SetIsShare(false). +// SetMaxLoginCount(2). +// SetIsReadBody(true). +// SetIsReadHeader(false). +// SetIsReadCookie(true). +// SetTokenStyle(TokenStyleRandom64). +// SetTokenSessionCheckLogin(false). +// SetJwtSecretKey("secret"). +// SetAutoRenew(false). +// SetIsLog(true). +// SetIsPrintBanner(false). +// SetKeyPrefix("prefix:") +// +// assert.Equal(t, "mytoken", cfg.TokenName) +// assert.Equal(t, int64(100), cfg.Timeout) +// assert.Equal(t, TokenStyleRandom64, cfg.TokenStyle) +// assert.Equal(t, false, cfg.IsConcurrent) +// assert.Equal(t, "prefix:", cfg.KeyPrefix) +//} +// +//// TestAdjustMaxRefresh verifies automatic adjustment of MaxRefresh | 验证 MaxRefresh 自动调整逻辑 +//func TestAdjustMaxRefresh(t *testing.T) { +// cfg := DefaultConfig() +// cfg.Timeout = 10 +// cfg.MaxRefresh = 100 +// err := cfg.Validate() +// assert.NoError(t, err) +// assert.Equal(t, int64(5), cfg.MaxRefresh) // adjusted to Timeout/2 +//} diff --git a/core/context/context.go b/core/context/context.go index aa7e0af..2af4cba 100644 --- a/core/context/context.go +++ b/core/context/context.go @@ -1,6 +1,8 @@ package context import ( + "context" + "github.com/click33/sa-token-go/core/config" "strings" "github.com/click33/sa-token-go/core/adapter" @@ -14,14 +16,16 @@ const ( // SaTokenContext Sa-Token context for current request | Sa-Token上下文,用于当前请求 type SaTokenContext struct { - ctx adapter.RequestContext + ctx context.Context + reqCtx adapter.RequestContext manager *manager.Manager } // NewContext creates a new Sa-Token context | 创建新的Sa-Token上下文 -func NewContext(ctx adapter.RequestContext, mgr *manager.Manager) *SaTokenContext { +func NewContext(ctx context.Context, reqCtx adapter.RequestContext, mgr *manager.Manager) *SaTokenContext { return &SaTokenContext{ ctx: ctx, + reqCtx: reqCtx, manager: mgr, } } @@ -48,12 +52,12 @@ func (c *SaTokenContext) GetTokenValue() string { // 1. 尝试从Header获取 if cfg.IsReadHeader { // 从自定义 token 名称的 Header 获取 - if token := strings.TrimSpace(c.ctx.GetHeader(cfg.TokenName)); token != "" { + if token := strings.TrimSpace(c.reqCtx.GetHeader(cfg.TokenName)); token != "" { return token } // 从 Authorization 头获取 - if auth := c.ctx.GetHeader(authHeader); auth != "" { + if auth := c.reqCtx.GetHeader(authHeader); auth != "" { if token := extractBearerToken(auth); token != "" { return token } @@ -62,13 +66,13 @@ func (c *SaTokenContext) GetTokenValue() string { // 2. 尝试从Cookie获取 if cfg.IsReadCookie { - if token := strings.TrimSpace(c.ctx.GetCookie(cfg.TokenName)); token != "" { + if token := strings.TrimSpace(c.reqCtx.GetCookie(cfg.TokenName)); token != "" { return token } } // 3. 尝试从Query参数获取 - if token := strings.TrimSpace(c.ctx.GetQuery(cfg.TokenName)); token != "" { + if token := strings.TrimSpace(c.reqCtx.GetQuery(cfg.TokenName)); token != "" { return token } @@ -78,19 +82,19 @@ func (c *SaTokenContext) GetTokenValue() string { // IsLogin 检查当前请求是否已登录 func (c *SaTokenContext) IsLogin() bool { token := c.GetTokenValue() - return c.manager.IsLogin(token) + return c.manager.IsLogin(context.WithValue(c.ctx, config.CtxTokenValue, token)) } // CheckLogin 检查登录(未登录抛出错误) func (c *SaTokenContext) CheckLogin() error { token := c.GetTokenValue() - return c.manager.CheckLogin(token) + return c.manager.CheckLogin(context.WithValue(c.ctx, config.CtxTokenValue, token)) } // GetLoginID 获取当前登录ID func (c *SaTokenContext) GetLoginID() (string, error) { token := c.GetTokenValue() - return c.manager.GetLoginID(token) + return c.manager.GetLoginID(context.WithValue(c.ctx, config.CtxTokenValue, token)) } // HasPermission 检查是否有指定权限 @@ -99,7 +103,7 @@ func (c *SaTokenContext) HasPermission(permission string) bool { if err != nil { return false } - return c.manager.HasPermission(loginID, permission) + return c.manager.HasPermission(c.ctx, loginID, permission) } // HasRole 检查是否有指定角色 @@ -108,15 +112,20 @@ func (c *SaTokenContext) HasRole(role string) bool { if err != nil { return false } - return c.manager.HasRole(loginID, role) + return c.manager.HasRole(c.ctx, loginID, role) } // GetRequestContext 获取原始请求上下文 func (c *SaTokenContext) GetRequestContext() adapter.RequestContext { - return c.ctx + return c.reqCtx } // GetManager 获取管理器 func (c *SaTokenContext) GetManager() *manager.Manager { return c.manager } + +// GetCtx 获取全局Ctx +func (c *SaTokenContext) GetCtx() context.Context { + return c.ctx +} diff --git a/core/log/log_test.go b/core/log/log_test.go index 8c310f8..a18821e 100644 --- a/core/log/log_test.go +++ b/core/log/log_test.go @@ -1,313 +1,313 @@ // @Author daixk 2025/12/6 17:13:00 package log -import ( - "os" - "path/filepath" - "strings" - "sync" - "testing" - "time" -) - -// ---------------- Configuration Tests ---------------- - -func TestLoggerBuilderAndConfig(t *testing.T) { - b := NewBuilder(). - Path("test_logs"). - FileFormat("custom_{Y}-{m}-{d}.log"). - Prefix("[TEST] "). - Level(LevelDebug). - TimeFormat("2006-01-02 15:04:05"). - Stdout(false). - RotateSize(1024). - RotateExpire(time.Hour). - RotateBackupLimit(3). - RotateBackupDays(1) - - logger, err := b.Build() - if err != nil { - t.Fatalf("Build() failed: %v", err) - } - defer logger.Close() - - cfg := logger.currentCfg() - - if cfg.Level != LevelDebug { - t.Errorf("expected LevelDebug, got %v", cfg.Level) - } - if !strings.Contains(cfg.FileFormat, "custom_") { - t.Errorf("FileFormat not set correctly") - } - if !strings.Contains(cfg.Prefix, "[TEST]") { - t.Errorf("Prefix not set correctly") - } - - path := ensureDefaultPath(&cfg) - if path == "" { - t.Errorf("ensureDefaultPath returned empty path") - } -} - -// ---------------- Log Output Tests ---------------- - -func TestLoggerOutputToFileAndStdout(t *testing.T) { - dir, _ := os.Getwd() - - logger, err := NewBuilder(). - Path(dir). - Prefix("[OUT] "). - Stdout(true). - Level(LevelDebug). - Build() - if err != nil { - t.Fatalf("Build() failed: %v", err) - } - defer logger.Close() - - // 写日志 - logger.Info("File log test line 1") - logger.Debugf("File log formatted: %d", 123) - logger.Warn("File log test line 2") - - // 等待异步写入完成 - time.Sleep(200 * time.Millisecond) - logger.Flush() - - files, err := filepath.Glob(filepath.Join(dir, "*.log")) - if err != nil || len(files) == 0 { - t.Fatalf("expected at least one log file, got none: %v", err) - } - - data, err := os.ReadFile(files[0]) - if err != nil { - t.Fatalf("failed to read log file: %v", err) - } - - content := string(data) - if !strings.Contains(content, "[OUT]") { - t.Errorf("log file missing prefix: %s", content) - } - if !strings.Contains(content, "File log test line 1") { - t.Errorf("log file missing expected content") - } -} - -// ---------------- Rotation Tests ---------------- - -func TestLoggerRotationBySize(t *testing.T) { - dir, _ := os.Getwd() - - logger, err := NewBuilder(). - Path(dir). - Prefix("[ROTATE] "). - RotateSize(512). - Level(LevelInfo). - Stdout(false). - RotateBackupLimit(5). - Build() - if err != nil { - t.Fatalf("Build() failed: %v", err) - } - defer logger.Close() - - // 连续写日志以触发切分 - for i := 0; i < 200; i++ { - logger.Infof("Rotating log line %03d - this should create multiple files", i) - } - time.Sleep(300 * time.Millisecond) - logger.Flush() - - files, err := filepath.Glob(filepath.Join(dir, "*.log")) - if err != nil { - t.Fatalf("glob failed: %v", err) - } - if len(files) < 1 { - t.Errorf("expected rotated files, got: %v", files) - } -} - -// ---------------- Global Logger Tests ---------------- - -func TestGlobalLogger(t *testing.T) { - dir, _ := os.Getwd() - - l, err := NewBuilder(). - Path(dir). - Prefix("[GLOBAL] "). - Build() - if err != nil { - t.Fatalf("Build() failed: %v", err) - } - defer l.Close() - - SetGlobalLogger(l) - Info("Global logger test 1") - Infof("Global formatted: %d", 999) - - time.Sleep(100 * time.Millisecond) - l.Flush() - - files, _ := filepath.Glob(filepath.Join(dir, "*.log")) - if len(files) == 0 { - t.Fatal("expected global logger to write to file") - } - - data, _ := os.ReadFile(files[0]) - if !strings.Contains(string(data), "Global logger test 1") { - t.Errorf("global logger output not found") - } -} - -// ---------------- NopLogger Tests ---------------- - -func TestNopLoggerNoOutput(t *testing.T) { - n := &NopLogger{} - n.Info("should not appear") - n.Debugf("format %d", 42) - - // nothing to assert except no panic -} - -// ---------------- Concurrency Tests ---------------- - -func TestConcurrentLogging(t *testing.T) { - dir, _ := os.Getwd() - logger, err := NewBuilder(). - Path(dir). - Prefix("[CONCURRENT] "). - Build() - if err != nil { - t.Fatalf("Build() failed: %v", err) - } - defer logger.Close() - - var wg sync.WaitGroup - for i := 0; i < 50; i++ { - wg.Add(1) - go func(id int) { - defer wg.Done() - for j := 0; j < 100; j++ { - logger.Infof("goroutine=%d line=%d", id, j) - } - }(i) - } - wg.Wait() - logger.Flush() - - files, _ := filepath.Glob(filepath.Join(dir, "*.log")) - if len(files) == 0 { - t.Fatal("no log files created under concurrent writes") - } -} - -// ---------------- Benchmark Tests ---------------- - -func BenchmarkLogger_Info(b *testing.B) { - dir, _ := os.Getwd() - logger, _ := NewBuilder(). - Path(dir). - Prefix("[BENCH] "). - Stdout(false). - Build() - defer logger.Close() - - b.ResetTimer() - for i := 0; i < b.N; i++ { - logger.Info("benchmark log line", i) - } -} - -func BenchmarkLogger_Concurrent(b *testing.B) { - dir, _ := os.Getwd() - logger, _ := NewBuilder(). - Path(dir). - Prefix("[BENCH-CONCURRENT] "). - Stdout(false). - Build() - defer logger.Close() - - b.ResetTimer() - b.RunParallel(func(pb *testing.PB) { - for pb.Next() { - logger.Infof("parallel log line %d", time.Now().UnixNano()) - } - }) -} - -func BenchmarkNopLogger(b *testing.B) { - n := &NopLogger{} - b.ResetTimer() - for i := 0; i < b.N; i++ { - n.Info("nop log test") - } -} - -func BenchmarkGlobalLogger(b *testing.B) { - dir, _ := os.Getwd() - l, _ := NewBuilder().Path(dir).Stdout(false).Build() - SetGlobalLogger(l) - defer l.Close() - - b.ResetTimer() - for i := 0; i < b.N; i++ { - Infof("benchmark global log line %d", i) - } -} - -// ---------------- Performance Comparison: Zap & GoFrame ---------------- - -//// BenchmarkZapLogger compares zap performance with our logger | 对比 zap 日志性能 -//func BenchmarkZapLogger(b *testing.B) { -// dir, _ := os.Getwd() -// logPath := filepath.Join(dir, "zap_bench.log") +//import ( +// "os" +// "path/filepath" +// "strings" +// "sync" +// "testing" +// "time" +//) +// +//// ---------------- Configuration Tests ---------------- // -// cfg := zap.NewProductionConfig() -// cfg.OutputPaths = []string{logPath} -// zapLogger, err := cfg.Build() +//func TestLoggerBuilderAndConfig(t *testing.T) { +// b := NewBuilder(). +// Path("test_logs"). +// FileFormat("custom_{Y}-{m}-{d}.log"). +// Prefix("[TEST] "). +// Level(LevelDebug). +// TimeFormat("2006-01-02 15:04:05"). +// Stdout(false). +// RotateSize(1024). +// RotateExpire(time.Hour). +// RotateBackupLimit(3). +// RotateBackupDays(1) +// +// logger, err := b.Build() // if err != nil { -// b.Fatalf("failed to create zap logger: %v", err) +// t.Fatalf("Build() failed: %v", err) // } -// defer zapLogger.Sync() +// defer logger.Close() // -// b.ResetTimer() -// for i := 0; i < b.N; i++ { -// zapLogger.Info("zap benchmark log", zap.Int("index", i)) +// cfg := logger.currentCfg() +// +// if cfg.Level != LevelDebug { +// t.Errorf("expected LevelDebug, got %v", cfg.Level) +// } +// if !strings.Contains(cfg.FileFormat, "custom_") { +// t.Errorf("FileFormat not set correctly") +// } +// if !strings.Contains(cfg.Prefix, "[TEST]") { +// t.Errorf("Prefix not set correctly") +// } +// +// path := ensureDefaultPath(&cfg) +// if path == "" { +// t.Errorf("ensureDefaultPath returned empty path") // } //} // -//// BenchmarkGFLogger compares GoFrame glog performance with our logger | 对比 GoFrame 日志性能 -//func BenchmarkGFLogger(b *testing.B) { -// ctx := context.Background() +//// ---------------- Log Output Tests ---------------- +// +//func TestLoggerOutputToFileAndStdout(t *testing.T) { // dir, _ := os.Getwd() // -// logger := glog.New() -// logger.SetPath(dir) -// logger.SetFile("gf_bench.log") -// logger.SetStdoutPrint(false) -// logger.SetAsync(true) // 为公平起见,关闭异步写入 +// logger, err := NewBuilder(). +// Path(dir). +// Prefix("[OUT] "). +// Stdout(true). +// Level(LevelDebug). +// Build() +// if err != nil { +// t.Fatalf("Build() failed: %v", err) +// } +// defer logger.Close() // -// b.ResetTimer() -// for i := 0; i < b.N; i++ { -// logger.Info(ctx, "gf benchmark log", i) +// // 写日志 +// logger.Info("File log test line 1") +// logger.Debugf("File log formatted: %d", 123) +// logger.Warn("File log test line 2") +// +// // 等待异步写入完成 +// time.Sleep(200 * time.Millisecond) +// logger.Flush() +// +// files, err := filepath.Glob(filepath.Join(dir, "*.log")) +// if err != nil || len(files) == 0 { +// t.Fatalf("expected at least one log file, got none: %v", err) +// } +// +// data, err := os.ReadFile(files[0]) +// if err != nil { +// t.Fatalf("failed to read log file: %v", err) +// } +// +// content := string(data) +// if !strings.Contains(content, "[OUT]") { +// t.Errorf("log file missing prefix: %s", content) +// } +// if !strings.Contains(content, "File log test line 1") { +// t.Errorf("log file missing expected content") // } //} // -//// BenchmarkOurLogger compares our logger performance | 对比自研日志性能 -//func BenchmarkOurLogger(b *testing.B) { +//// ---------------- Rotation Tests ---------------- +// +//func TestLoggerRotationBySize(t *testing.T) { // dir, _ := os.Getwd() +// // logger, err := NewBuilder(). // Path(dir). -// Prefix("[OUR] "). +// Prefix("[ROTATE] "). +// RotateSize(512). +// Level(LevelInfo). // Stdout(false). +// RotateBackupLimit(5). +// Build() +// if err != nil { +// t.Fatalf("Build() failed: %v", err) +// } +// defer logger.Close() +// +// // 连续写日志以触发切分 +// for i := 0; i < 200; i++ { +// logger.Infof("Rotating log line %03d - this should create multiple files", i) +// } +// time.Sleep(300 * time.Millisecond) +// logger.Flush() +// +// files, err := filepath.Glob(filepath.Join(dir, "*.log")) +// if err != nil { +// t.Fatalf("glob failed: %v", err) +// } +// if len(files) < 1 { +// t.Errorf("expected rotated files, got: %v", files) +// } +//} +// +//// ---------------- Global Logger Tests ---------------- +// +//func TestGlobalLogger(t *testing.T) { +// dir, _ := os.Getwd() +// +// l, err := NewBuilder(). +// Path(dir). +// Prefix("[GLOBAL] "). +// Build() +// if err != nil { +// t.Fatalf("Build() failed: %v", err) +// } +// defer l.Close() +// +// SetGlobalLogger(l) +// Info("Global logger test 1") +// Infof("Global formatted: %d", 999) +// +// time.Sleep(100 * time.Millisecond) +// l.Flush() +// +// files, _ := filepath.Glob(filepath.Join(dir, "*.log")) +// if len(files) == 0 { +// t.Fatal("expected global logger to write to file") +// } +// +// data, _ := os.ReadFile(files[0]) +// if !strings.Contains(string(data), "Global logger test 1") { +// t.Errorf("global logger output not found") +// } +//} +// +//// ---------------- NopLogger Tests ---------------- +// +//func TestNopLoggerNoOutput(t *testing.T) { +// n := &NopLogger{} +// n.Info("should not appear") +// n.Debugf("format %d", 42) +// +// // nothing to assert except no panic +//} +// +//// ---------------- Concurrency Tests ---------------- +// +//func TestConcurrentLogging(t *testing.T) { +// dir, _ := os.Getwd() +// logger, err := NewBuilder(). +// Path(dir). +// Prefix("[CONCURRENT] "). // Build() // if err != nil { -// b.Fatalf("failed to create our logger: %v", err) +// t.Fatalf("Build() failed: %v", err) +// } +// defer logger.Close() +// +// var wg sync.WaitGroup +// for i := 0; i < 50; i++ { +// wg.Add(1) +// go func(id int) { +// defer wg.Done() +// for j := 0; j < 100; j++ { +// logger.Infof("goroutine=%d line=%d", id, j) +// } +// }(i) +// } +// wg.Wait() +// logger.Flush() +// +// files, _ := filepath.Glob(filepath.Join(dir, "*.log")) +// if len(files) == 0 { +// t.Fatal("no log files created under concurrent writes") +// } +//} +// +//// ---------------- Benchmark Tests ---------------- +// +//func BenchmarkLogger_Info(b *testing.B) { +// dir, _ := os.Getwd() +// logger, _ := NewBuilder(). +// Path(dir). +// Prefix("[BENCH] "). +// Stdout(false). +// Build() +// defer logger.Close() +// +// b.ResetTimer() +// for i := 0; i < b.N; i++ { +// logger.Info("benchmark log line", i) // } +//} +// +//func BenchmarkLogger_Concurrent(b *testing.B) { +// dir, _ := os.Getwd() +// logger, _ := NewBuilder(). +// Path(dir). +// Prefix("[BENCH-CONCURRENT] "). +// Stdout(false). +// Build() // defer logger.Close() // // b.ResetTimer() +// b.RunParallel(func(pb *testing.PB) { +// for pb.Next() { +// logger.Infof("parallel log line %d", time.Now().UnixNano()) +// } +// }) +//} +// +//func BenchmarkNopLogger(b *testing.B) { +// n := &NopLogger{} +// b.ResetTimer() // for i := 0; i < b.N; i++ { -// logger.Info("our benchmark log", i) +// n.Info("nop log test") // } //} +// +//func BenchmarkGlobalLogger(b *testing.B) { +// dir, _ := os.Getwd() +// l, _ := NewBuilder().Path(dir).Stdout(false).Build() +// SetGlobalLogger(l) +// defer l.Close() +// +// b.ResetTimer() +// for i := 0; i < b.N; i++ { +// Infof("benchmark global log line %d", i) +// } +//} +// +//// ---------------- Performance Comparison: Zap & GoFrame ---------------- +// +////// BenchmarkZapLogger compares zap performance with our logger | 对比 zap 日志性能 +////func BenchmarkZapLogger(b *testing.B) { +//// dir, _ := os.Getwd() +//// logPath := filepath.Join(dir, "zap_bench.log") +//// +//// cfg := zap.NewProductionConfig() +//// cfg.OutputPaths = []string{logPath} +//// zapLogger, err := cfg.Build() +//// if err != nil { +//// b.Fatalf("failed to create zap logger: %v", err) +//// } +//// defer zapLogger.Sync() +//// +//// b.ResetTimer() +//// for i := 0; i < b.N; i++ { +//// zapLogger.Info("zap benchmark log", zap.Int("index", i)) +//// } +////} +//// +////// BenchmarkGFLogger compares GoFrame glog performance with our logger | 对比 GoFrame 日志性能 +////func BenchmarkGFLogger(b *testing.B) { +//// ctx := context.Background() +//// dir, _ := os.Getwd() +//// +//// logger := glog.New() +//// logger.SetPath(dir) +//// logger.SetFile("gf_bench.log") +//// logger.SetStdoutPrint(false) +//// logger.SetAsync(true) // 为公平起见,关闭异步写入 +//// +//// b.ResetTimer() +//// for i := 0; i < b.N; i++ { +//// logger.Info(ctx, "gf benchmark log", i) +//// } +////} +//// +////// BenchmarkOurLogger compares our logger performance | 对比自研日志性能 +////func BenchmarkOurLogger(b *testing.B) { +//// dir, _ := os.Getwd() +//// logger, err := NewBuilder(). +//// Path(dir). +//// Prefix("[OUR] "). +//// Stdout(false). +//// Build() +//// if err != nil { +//// b.Fatalf("failed to create our logger: %v", err) +//// } +//// defer logger.Close() +//// +//// b.ResetTimer() +//// for i := 0; i < b.N; i++ { +//// logger.Info("our benchmark log", i) +//// } +////} diff --git a/core/manager/manager.go b/core/manager/manager.go index 49c8008..f204927 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -3,7 +3,6 @@ package manager import ( "context" "fmt" - "github.com/click33/sa-token-go/core/codec" "github.com/click33/sa-token-go/core/dep" "github.com/click33/sa-token-go/core/serror" "github.com/click33/sa-token-go/core/utils" @@ -175,20 +174,20 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( return "", err } - // Create session | 创建Session - err = session. - NewSession(m.authType, loginID, m.prefix, m.deps, m.storage). - SetMulti( - map[string]any{ - SessionKeyLoginID: loginID, - SessionKeyDevice: deviceType, - SessionKeyLoginTime: nowTime, - }, - expiration, - ) - if err != nil { - return "", err - } + //// Create session | 创建Session + //err = session. + // NewSession(m.authType, loginID, m.prefix, m.deps, m.storage). + // SetMulti( + // map[string]any{ + // SessionKeyLoginID: loginID, + // SessionKeyDevice: deviceType, + // SessionKeyLoginTime: nowTime, + // }, + // expiration, + // ) + //if err != nil { + // return "", err + //} // Trigger login event | 触发登录事件 if m.eventManager != nil { @@ -521,7 +520,7 @@ func (m *Manager) GetDisableTime(ctx context.Context, loginID string) (int64, er // ============ Session Management | Session管理 ============ // GetSession Gets session by login ID | 获取Session -func (m *Manager) GetSession(_ context.Context, loginID string) (*session.Session, error) { +func (m *Manager) GetSession(loginID string) (*session.Session, error) { sess, err := session.Load(loginID, m) if err != nil { sess = session.NewSession(m.authType, loginID, m.prefix, m.deps, m.storage) @@ -536,12 +535,12 @@ func (m *Manager) GetSessionByToken(ctx context.Context) (*session.Session, erro return nil, err } - return m.GetSession(ctx, loginID) + return m.GetSession(loginID) } // DeleteSession Deletes session | 删除Session -func (m *Manager) DeleteSession(ctx context.Context, loginID string) error { - sess, err := m.GetSession(ctx, loginID) +func (m *Manager) DeleteSession(loginID string) error { + sess, err := m.GetSession(loginID) if err != nil { return err } @@ -562,7 +561,7 @@ func (m *Manager) DeleteSessionByToken(ctx context.Context) error { // ============ Permission Validation | 权限验证 ============ // SetPermissions Sets permissions for user | 设置权限 -func (m *Manager) SetPermissions(loginID string, permissions []string) error { +func (m *Manager) SetPermissions(_ context.Context, loginID string, permissions []string) error { sess, err := m.GetSession(loginID) if err != nil { return err @@ -576,8 +575,8 @@ func (m *Manager) SetPermissions(loginID string, permissions []string) error { } // RemovePermissions removes specified permissions for user | 删除用户指定权限 -func (m *Manager) RemovePermissions(loginID string, permissions []string) error { - sess, err := m.GetSession(loginID) +func (m *Manager) RemovePermissions(ctx context.Context, loginID string, permissions []string) error { + sess, err := m.GetSession(ctx, loginID) if err != nil { return err } @@ -612,8 +611,8 @@ func (m *Manager) RemovePermissions(loginID string, permissions []string) error } // GetPermissions Gets permission list | 获取权限列表 -func (m *Manager) GetPermissions(loginID string) ([]string, error) { - sess, err := m.GetSession(loginID) +func (m *Manager) GetPermissions(ctx context.Context, loginID string) ([]string, error) { + sess, err := m.GetSession(ctx, loginID) if err != nil { return nil, err } @@ -627,14 +626,14 @@ func (m *Manager) GetPermissions(loginID string) ([]string, error) { } // HasPermission 检查是否有指定权限 -func (m *Manager) HasPermission(loginID string, permission string) bool { - perms, err := m.GetPermissions(loginID) +func (m *Manager) HasPermission(ctx context.Context, loginID string, permission string) bool { + perms, err := m.GetPermissions(ctx, loginID) if err != nil { return false } for _, p := range perms { - if m.matchPermission(p, permission) { + if m.matchPermission(ctx, p, permission) { return true } } @@ -643,9 +642,9 @@ func (m *Manager) HasPermission(loginID string, permission string) bool { } // HasPermissionsAnd 检查是否拥有所有权限(AND) -func (m *Manager) HasPermissionsAnd(loginID string, permissions []string) bool { +func (m *Manager) HasPermissionsAnd(ctx context.Context, loginID string, permissions []string) bool { for _, perm := range permissions { - if !m.HasPermission(loginID, perm) { + if !m.HasPermission(ctx, loginID, perm) { return false } } @@ -653,9 +652,9 @@ func (m *Manager) HasPermissionsAnd(loginID string, permissions []string) bool { } // HasPermissionsOr 检查是否拥有任一权限(OR) -func (m *Manager) HasPermissionsOr(loginID string, permissions []string) bool { +func (m *Manager) HasPermissionsOr(ctx context.Context, loginID string, permissions []string) bool { for _, perm := range permissions { - if m.HasPermission(loginID, perm) { + if m.HasPermission(ctx, loginID, perm) { return true } } @@ -663,7 +662,7 @@ func (m *Manager) HasPermissionsOr(loginID string, permissions []string) bool { } // matchPermission Matches permission with wildcards support | 权限匹配(支持通配符) -func (m *Manager) matchPermission(pattern, permission string) bool { +func (m *Manager) matchPermission(_ context.Context, pattern, permission string) bool { // Exact match or wildcard | 精确匹配或通配符 if pattern == PermissionWildcard || pattern == permission { return true @@ -697,8 +696,8 @@ func (m *Manager) matchPermission(pattern, permission string) bool { // ============ Role Validation | 角色验证 ============ // SetRoles Sets roles for user | 设置角色 -func (m *Manager) SetRoles(loginID string, roles []string) error { - sess, err := m.GetSession(loginID) +func (m *Manager) SetRoles(ctx context.Context, loginID string, roles []string) error { + sess, err := m.GetSession(ctx, loginID) if err != nil { return err } @@ -711,8 +710,8 @@ func (m *Manager) SetRoles(loginID string, roles []string) error { } // RemoveRoles removes specified roles for user | 删除用户指定角色 -func (m *Manager) RemoveRoles(loginID string, roles []string) error { - sess, err := m.GetSession(loginID) +func (m *Manager) RemoveRoles(ctx context.Context, loginID string, roles []string) error { + sess, err := m.GetSession(ctx, loginID) if err != nil { return err } @@ -747,8 +746,8 @@ func (m *Manager) RemoveRoles(loginID string, roles []string) error { } // GetRoles Gets role list | 获取角色列表 -func (m *Manager) GetRoles(loginID string) ([]string, error) { - sess, err := m.GetSession(loginID) +func (m *Manager) GetRoles(ctx context.Context, loginID string) ([]string, error) { + sess, err := m.GetSession(ctx, loginID) if err != nil { return nil, err } @@ -762,8 +761,8 @@ func (m *Manager) GetRoles(loginID string) ([]string, error) { } // HasRole 检查是否有指定角色 -func (m *Manager) HasRole(loginID string, role string) bool { - roles, err := m.GetRoles(loginID) +func (m *Manager) HasRole(ctx context.Context, loginID string, role string) bool { + roles, err := m.GetRoles(ctx, loginID) if err != nil { return false } @@ -777,9 +776,9 @@ func (m *Manager) HasRole(loginID string, role string) bool { } // HasRolesAnd 检查是否拥有所有角色(AND) -func (m *Manager) HasRolesAnd(loginID string, roles []string) bool { +func (m *Manager) HasRolesAnd(ctx context.Context, loginID string, roles []string) bool { for _, role := range roles { - if !m.HasRole(loginID, role) { + if !m.HasRole(ctx, loginID, role) { return false } } @@ -787,9 +786,9 @@ func (m *Manager) HasRolesAnd(loginID string, roles []string) bool { } // HasRolesOr 检查是否拥有任一角色(OR) -func (m *Manager) HasRolesOr(loginID string, roles []string) bool { +func (m *Manager) HasRolesOr(ctx context.Context, loginID string, roles []string) bool { for _, role := range roles { - if m.HasRole(loginID, role) { + if m.HasRole(ctx, loginID, role) { return true } } @@ -799,14 +798,14 @@ func (m *Manager) HasRolesOr(loginID string, roles []string) bool { // ============ Token Tags | Token标签 ============ // SetTokenTag Sets token tag | 设置Token标签 -func (m *Manager) SetTokenTag(tokenValue, tag string) error { +func (m *Manager) SetTokenTag(ctx context.Context, tag string) error { // Tag feature not supported to comply with Java sa-token design // If you need custom metadata, use Session instead return fmt.Errorf("token tag feature not supported (use Session for custom metadata)") } // GetTokenTag Gets token tag | 获取Token标签 -func (m *Manager) GetTokenTag(tokenValue string) (string, error) { +func (m *Manager) GetTokenTag(ctx context.Context) (string, error) { // Tag feature not supported to comply with Java sa-token design return "", fmt.Errorf("token tag feature not supported (use Session for custom metadata)") } @@ -919,10 +918,10 @@ func (m *Manager) VerifyNonce(nonce string) bool { } // LoginWithRefreshToken Logs in with refresh token | 使用刷新令牌登录 -func (m *Manager) LoginWithRefreshToken(loginID, device string) (*security.RefreshTokenInfo, error) { +func (m *Manager) LoginWithRefreshToken(ctx context.Context, loginID, device string) (*security.RefreshTokenInfo, error) { deviceType := getDevice([]string{device}) - accessToken, err := m.Login(loginID, deviceType) + accessToken, err := m.Login(ctx, loginID, deviceType) if err != nil { return nil, err } @@ -931,12 +930,12 @@ func (m *Manager) LoginWithRefreshToken(loginID, device string) (*security.Refre } // RefreshAccessToken Refreshes access token | 刷新访问令牌 -func (m *Manager) RefreshAccessToken(refreshToken string) (*security.RefreshTokenInfo, error) { +func (m *Manager) RefreshAccessToken(_ context.Context, refreshToken string) (*security.RefreshTokenInfo, error) { return m.refreshManager.RefreshAccessToken(refreshToken) } // RevokeRefreshToken Revokes refresh token | 撤销刷新令牌 -func (m *Manager) RevokeRefreshToken(refreshToken string) error { +func (m *Manager) RevokeRefreshToken(_ context.Context, refreshToken string) error { return m.refreshManager.RevokeRefreshToken(refreshToken) } @@ -989,7 +988,7 @@ func (m *Manager) getTokenInfoByTokenValue(ctx context.Context, checkState ...bo } // Convert data to raw byte slice | 将数据转换为原始字节切片 - raw, err := codec.UnifyToBytes(data) + raw, err := utils.ToBytes(data) if err != nil { return nil, err // Return error if conversion fails | 如果转换失败,返回错误 } diff --git a/core/security/refresh_token.go b/core/security/refresh_token.go index 008de2b..b88731c 100644 --- a/core/security/refresh_token.go +++ b/core/security/refresh_token.go @@ -172,7 +172,9 @@ func (rtm *RefreshTokenManager) RefreshAccessToken(refreshToken string) (*Refres // Check expiration | 检查是否过期 if time.Now().Unix() > oldInfo.ExpireTime { + // 删除刷新令牌 rtm.storage.Delete(key) + // TODO 删除访问令牌 return nil, ErrRefreshTokenExpired } diff --git a/core/serror/errors.go b/core/serror/errors.go index 10c144b..591288a 100644 --- a/core/serror/errors.go +++ b/core/serror/errors.go @@ -11,8 +11,6 @@ import ( var ( ErrCommonMarshal = errors.New("failed to marshal data") // failed to marshal data | 序列化数据失败 ErrCommonUnmarshal = errors.New("failed to unmarshal data") // failed to unmarshal data | 反序列化数据失败 - - ErrDataNotByte = errors.New("data cannot be converted to byte slice") ) // RenewPool Errors | RenewPool 错误 diff --git a/core/session/session.go b/core/session/session.go index c942493..a45f682 100644 --- a/core/session/session.go +++ b/core/session/session.go @@ -3,10 +3,10 @@ package session import ( "errors" "fmt" - "github.com/click33/sa-token-go/core/codec" "github.com/click33/sa-token-go/core/dep" "github.com/click33/sa-token-go/core/manager" "github.com/click33/sa-token-go/core/serror" + "github.com/click33/sa-token-go/core/utils" "sync" "time" @@ -267,7 +267,7 @@ func Load(id string, m *manager.Manager) (*Session, error) { return nil, errors.New("session not found") } - raw, err := codec.UnifyToBytes(data) + raw, err := utils.ToBytes(data) if err != nil { return nil, err } From 5f02958f94fa18fd9ecfec32d58086ca2b3d9a1f Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Tue, 9 Dec 2025 22:52:09 +0800 Subject: [PATCH 14/50] =?UTF-8?q?feat():=201=E3=80=81=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E4=B8=8Esession=E7=9B=B8=E5=85=B3=E6=96=B9=E6=B3=95=E5=8F=82?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/codec/codec_test.go | 26 -------------------------- core/manager/manager.go | 26 +++++++++++++------------- 2 files changed, 13 insertions(+), 39 deletions(-) diff --git a/core/codec/codec_test.go b/core/codec/codec_test.go index 1925027..9991c42 100644 --- a/core/codec/codec_test.go +++ b/core/codec/codec_test.go @@ -2,7 +2,6 @@ package codec import ( - "github.com/click33/sa-token-go/core/serror" "reflect" "strings" "sync" @@ -188,31 +187,6 @@ func TestNewSerializerMustWithJson(t *testing.T) { } } -// -------------------- UnifyToBytes Tests -------------------- - -// TestUnifyToBytes tests type conversion to []byte | 测试数据统一转换为 []byte -func TestUnifyToBytes(t *testing.T) { - data, err := UnifyToBytes([]byte("abc")) - if err != nil || string(data) != "abc" { - t.Errorf("UnifyToBytes([]byte) failed: %v", err) - } - - data, err = UnifyToBytes("xyz") - if err != nil || string(data) != "xyz" { - t.Errorf("UnifyToBytes(string) failed: %v", err) - } - - _, err = UnifyToBytes(123) - if err == nil { - t.Error("UnifyToBytes(int) should return error") - } - - _, err = UnifyToBytes(nil) - if err == nil || err != serror.ErrInvalidTokenData { - t.Error("UnifyToBytes(nil) should return ErrInvalidTokenData") - } -} - // -------------------- Benchmark -------------------- // BenchmarkEncodeJSON benchmarks JSON encoding performance | 基准测试 JSON 编码性能 diff --git a/core/manager/manager.go b/core/manager/manager.go index f204927..45ada71 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -575,8 +575,8 @@ func (m *Manager) SetPermissions(_ context.Context, loginID string, permissions } // RemovePermissions removes specified permissions for user | 删除用户指定权限 -func (m *Manager) RemovePermissions(ctx context.Context, loginID string, permissions []string) error { - sess, err := m.GetSession(ctx, loginID) +func (m *Manager) RemovePermissions(_ context.Context, loginID string, permissions []string) error { + sess, err := m.GetSession(loginID) if err != nil { return err } @@ -611,8 +611,8 @@ func (m *Manager) RemovePermissions(ctx context.Context, loginID string, permiss } // GetPermissions Gets permission list | 获取权限列表 -func (m *Manager) GetPermissions(ctx context.Context, loginID string) ([]string, error) { - sess, err := m.GetSession(ctx, loginID) +func (m *Manager) GetPermissions(_ context.Context, loginID string) ([]string, error) { + sess, err := m.GetSession(loginID) if err != nil { return nil, err } @@ -696,8 +696,8 @@ func (m *Manager) matchPermission(_ context.Context, pattern, permission string) // ============ Role Validation | 角色验证 ============ // SetRoles Sets roles for user | 设置角色 -func (m *Manager) SetRoles(ctx context.Context, loginID string, roles []string) error { - sess, err := m.GetSession(ctx, loginID) +func (m *Manager) SetRoles(_ context.Context, loginID string, roles []string) error { + sess, err := m.GetSession(loginID) if err != nil { return err } @@ -710,8 +710,8 @@ func (m *Manager) SetRoles(ctx context.Context, loginID string, roles []string) } // RemoveRoles removes specified roles for user | 删除用户指定角色 -func (m *Manager) RemoveRoles(ctx context.Context, loginID string, roles []string) error { - sess, err := m.GetSession(ctx, loginID) +func (m *Manager) RemoveRoles(_ context.Context, loginID string, roles []string) error { + sess, err := m.GetSession(loginID) if err != nil { return err } @@ -746,8 +746,8 @@ func (m *Manager) RemoveRoles(ctx context.Context, loginID string, roles []strin } // GetRoles Gets role list | 获取角色列表 -func (m *Manager) GetRoles(ctx context.Context, loginID string) ([]string, error) { - sess, err := m.GetSession(ctx, loginID) +func (m *Manager) GetRoles(_ context.Context, loginID string) ([]string, error) { + sess, err := m.GetSession(loginID) if err != nil { return nil, err } @@ -1050,7 +1050,7 @@ func (m *Manager) renewToken(ctx context.Context, info *TokenInfo) { _ = m.storage.Expire(accountKey, exp) // Renew session TTL | 续期Session的TTL - if sess, err := m.GetSession(ctx, info.LoginID); err == nil && sess != nil { + if sess, err := m.GetSession(info.LoginID); err == nil && sess != nil { _ = sess.Renew(exp) // Renew the session expiration | 续期Session的过期时间 } @@ -1093,7 +1093,7 @@ func (m *Manager) removeTokenChain(ctx context.Context, destroySession bool, inf _ = m.storage.Delete(accountKey) // Delete account-token mapping | 删除账号映射 _ = m.storage.Delete(renewKey) // Delete renew key | 删除续期标记 if destroySession { // Optionally destroy session | 可选销毁Session - _ = m.DeleteSession(ctx, info.LoginID) + _ = m.DeleteSession(info.LoginID) } // EventKickout User kicked offline (keep session) | 用户被踢下线(保留Session,自动过期) @@ -1114,7 +1114,7 @@ func (m *Manager) removeTokenChain(ctx context.Context, destroySession bool, inf _ = m.storage.Delete(accountKey) // Delete account-token mapping | 删除账号映射 _ = m.storage.Delete(renewKey) // Delete renew key | 删除续期标记 if destroySession { // Optionally destroy session | 可选销毁Session - _ = m.DeleteSession(ctx, info.LoginID) + _ = m.DeleteSession(info.LoginID) } } From d4833181f3ef343118728ae95b88a64635e3a113 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Tue, 16 Dec 2025 13:36:07 +0800 Subject: [PATCH 15/50] =?UTF-8?q?feat():=201=E3=80=81=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E9=83=A8=E5=88=86=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../codec => codec/json}/codec_adaper_json.go | 12 +- codec/json/go.mod | 7 + .../msgpack}/codec_adaper_msgpack.go | 12 +- codec/msgpack/go.mod | 14 + codec/msgpack/go.sum | 6 + core/adapter/codec.go | 9 + core/adapter/generator.go | 8 + core/adapter/log.go | 30 ++ core/adapter/pool.go | 8 + core/builder/builder.go | 370 +++++++++++------- core/codec/codec.go | 86 ---- core/codec/codec_adaper.go | 8 - core/codec/codec_test.go | 228 ----------- core/config/config.go | 102 ++--- core/config/config_log.go | 104 +++++ core/config/config_pool.go | 127 ++++++ core/config/config_test.go | 195 --------- core/config/consts.go | 39 +- core/dep/adapter.go | 20 + core/dep/dep.go | 198 ++++++---- core/go.mod | 13 +- core/listener/consts.go | 43 ++ core/listener/listener.go | 87 ++-- core/log/log.go | 51 --- core/log/log_adaper.go | 27 -- core/log/log_adaper_gf.go | 73 ---- core/log/log_config.go | 162 -------- core/log/log_test.go | 313 --------------- core/manager/consts.go | 4 +- core/manager/manager.go | 153 +++++--- core/oauth2/oauth2.go | 300 ++++++++------ core/pool/pool.go | 274 ------------- core/satoken.go | 2 +- core/security/consts.go | 19 + core/security/nonce.go | 89 ++--- core/security/refresh_token.go | 344 +++++++++------- core/serror/errors.go | 54 ++- core/session/session.go | 40 +- core/stgmanager/stgmanager.go | 56 --- core/stplic.go | 2 - core/token/consts.go | 6 +- core/token/token_adaper.go | 11 - core/token/token_test.go | 119 ------ core/utils/utils.go | 2 +- docs/guide/authentication.md | 4 +- docs/guide/listener_zh.md | 2 +- docs/guide/nonce.md | 2 +- docs/guide/redis-storage_zh.md | 4 +- docs/guide/single-import.md | 2 +- go.work | 6 + integrations/chi/export.go | 2 +- integrations/chi/plugin.go | 2 +- integrations/echo/export.go | 2 +- integrations/echo/go.sum | 4 +- integrations/echo/plugin.go | 2 +- integrations/fiber/export.go | 2 +- integrations/fiber/go.sum | 2 +- integrations/fiber/plugin.go | 2 +- integrations/gf/export.go | 2 +- integrations/gf/go.mod | 2 - integrations/gf/go.sum | 6 +- integrations/gf/plugin.go | 2 +- integrations/gin/export.go | 2 +- integrations/gin/plugin.go | 2 +- integrations/kratos/export.go | 2 +- integrations/kratos/go.mod | 3 - integrations/kratos/go.sum | 6 +- log/gf/go.mod | 27 ++ log/gf/go.sum | 34 ++ log/gf/log_adaper_gf.go | 55 +++ log/nop/go.mod | 7 + {core/log => log/nop}/log_adaper_nop.go | 5 +- log/slog/go.mod | 12 + log/slog/go.sum | 6 + .../slog/log_adaper_slog.go | 110 +++--- pool/ants/go.mod | 7 + pool/ants/pool_adapter_ants.go | 151 +++++++ stputil/stputil.go | 4 +- 78 files changed, 1818 insertions(+), 2492 deletions(-) rename {core/codec => codec/json}/codec_adaper_json.go (59%) create mode 100644 codec/json/go.mod rename {core/codec => codec/msgpack}/codec_adaper_msgpack.go (55%) create mode 100644 codec/msgpack/go.mod create mode 100644 codec/msgpack/go.sum create mode 100644 core/adapter/codec.go create mode 100644 core/adapter/generator.go create mode 100644 core/adapter/log.go create mode 100644 core/adapter/pool.go delete mode 100644 core/codec/codec.go delete mode 100644 core/codec/codec_adaper.go delete mode 100644 core/codec/codec_test.go create mode 100644 core/config/config_log.go create mode 100644 core/config/config_pool.go delete mode 100644 core/config/config_test.go create mode 100644 core/dep/adapter.go create mode 100644 core/listener/consts.go delete mode 100644 core/log/log.go delete mode 100644 core/log/log_adaper.go delete mode 100644 core/log/log_adaper_gf.go delete mode 100644 core/log/log_config.go delete mode 100644 core/log/log_test.go delete mode 100644 core/pool/pool.go create mode 100644 core/security/consts.go delete mode 100644 core/stgmanager/stgmanager.go delete mode 100644 core/stplic.go delete mode 100644 core/token/token_adaper.go delete mode 100644 core/token/token_test.go create mode 100644 log/gf/go.mod create mode 100644 log/gf/go.sum create mode 100644 log/gf/log_adaper_gf.go create mode 100644 log/nop/go.mod rename {core/log => log/nop}/log_adaper_nop.go (87%) create mode 100644 log/slog/go.mod create mode 100644 log/slog/go.sum rename core/log/log_manager.go => log/slog/log_adaper_slog.go (80%) create mode 100644 pool/ants/go.mod create mode 100644 pool/ants/pool_adapter_ants.go diff --git a/core/codec/codec_adaper_json.go b/codec/json/codec_adaper_json.go similarity index 59% rename from core/codec/codec_adaper_json.go rename to codec/json/codec_adaper_json.go index eeb3ef0..b204802 100644 --- a/core/codec/codec_adaper_json.go +++ b/codec/json/codec_adaper_json.go @@ -1,7 +1,9 @@ // @Author daixk 2025/11/27 20:57:00 -package codec +package json -import "encoding/json" +import ( + "encoding/json" +) type JSONSerializer struct{} @@ -13,4 +15,8 @@ func (s *JSONSerializer) Decode(data []byte, v any) error { return json.Unmarshal(data, v) } -func (s *JSONSerializer) Name() string { return SerializerJSON } +func (s *JSONSerializer) Name() string { return "json" } + +func NewJSONSerializer() *JSONSerializer { + return &JSONSerializer{} +} diff --git a/codec/json/go.mod b/codec/json/go.mod new file mode 100644 index 0000000..c307e99 --- /dev/null +++ b/codec/json/go.mod @@ -0,0 +1,7 @@ +module github.com/click33/sa-token-go/codec/json + +go 1.23.0 + +require github.com/click33/sa-token-go/core v0.1.5 + +replace github.com/click33/sa-token-go/core => ../../core diff --git a/core/codec/codec_adaper_msgpack.go b/codec/msgpack/codec_adaper_msgpack.go similarity index 55% rename from core/codec/codec_adaper_msgpack.go rename to codec/msgpack/codec_adaper_msgpack.go index 45ae857..df0cd07 100644 --- a/core/codec/codec_adaper_msgpack.go +++ b/codec/msgpack/codec_adaper_msgpack.go @@ -1,7 +1,9 @@ // @Author daixk 2025/11/27 20:58:00 -package codec +package msgpack -import "github.com/vmihailenco/msgpack/v5" +import ( + "github.com/vmihailenco/msgpack/v5" +) type MsgPackSerializer struct{} @@ -13,4 +15,8 @@ func (s *MsgPackSerializer) Decode(data []byte, v any) error { return msgpack.Unmarshal(data, v) } -func (s *MsgPackSerializer) Name() string { return SerializerMsgPack } +func (s *MsgPackSerializer) Name() string { return "msgpack" } + +func NewMsgPackSerializer() *MsgPackSerializer { + return &MsgPackSerializer{} +} diff --git a/codec/msgpack/go.mod b/codec/msgpack/go.mod new file mode 100644 index 0000000..c412f77 --- /dev/null +++ b/codec/msgpack/go.mod @@ -0,0 +1,14 @@ +module github.com/click33/sa-token-go/codec/msgpack + +go 1.23.0 + +replace github.com/click33/sa-token-go/core => ../../core + +require github.com/vmihailenco/msgpack/v5 v5.4.1 + +require ( + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/stretchr/testify v1.11.1 // indirect + github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect +) diff --git a/codec/msgpack/go.sum b/codec/msgpack/go.sum new file mode 100644 index 0000000..62714bd --- /dev/null +++ b/codec/msgpack/go.sum @@ -0,0 +1,6 @@ +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/vmihailenco/msgpack/v5 v5.4.1 h1:cQriyiUvjTwOHg8QZaPihLWeRAAVoCpE00IUPn0Bjt8= +github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/core/adapter/codec.go b/core/adapter/codec.go new file mode 100644 index 0000000..a05d842 --- /dev/null +++ b/core/adapter/codec.go @@ -0,0 +1,9 @@ +// @Author daixk 2025/12/12 10:46:00 +package adapter + +// Codec defines serialization behavior abstraction | 序列化行为抽象接口 +type Codec interface { + Encode(v any) ([]byte, error) // Encode value to byte slice | 将对象编码为字节数组 + Decode(data []byte, v any) error // Decode byte slice to target value | 将字节数组解码到目标对象 + Name() string // Return codec implementation name | 返回序列化器名称 +} diff --git a/core/adapter/generator.go b/core/adapter/generator.go new file mode 100644 index 0000000..2cfcc35 --- /dev/null +++ b/core/adapter/generator.go @@ -0,0 +1,8 @@ +// @Author daixk 2025/12/5 15:52:00 +package adapter + +//// Generator token generation interface | Token生成接口 +//type Generator interface { +// // Generate generates token based on implementation | 生成Token(由实现决定具体规则) +// Generate(loginID, device string) (string, error) +//} diff --git a/core/adapter/log.go b/core/adapter/log.go new file mode 100644 index 0000000..e0aed39 --- /dev/null +++ b/core/adapter/log.go @@ -0,0 +1,30 @@ +// @Author daixk 2025/12/12 10:45:00 +package adapter + +import "github.com/click33/sa-token-go/core/config" + +// Log defines logging behavior abstraction | 日志行为抽象接口 +type Log interface { + Print(v ...any) // Print log without level | 无级别日志输出 + Printf(format string, v ...any) // Print formatted log without level | 无级别格式化日志输出 + + Debug(v ...any) // Print debug level log | 输出调试级别日志 + Debugf(format string, v ...any) // Print formatted debug level log | 输出调试级别格式化日志 + + Info(v ...any) // Print info level log | 输出信息级别日志 + Infof(format string, v ...any) // Print formatted info level log | 输出信息级别格式化日志 + + Warn(v ...any) // Print warn level log | 输出警告级别日志 + Warnf(format string, v ...any) // Print formatted warn level log | 输出警告级别格式化日志 + + Error(v ...any) // Print error level log | 输出错误级别日志 + Errorf(format string, v ...any) // Print formatted error level log | 输出错误级别格式化日志 +} + +// LogControl defines log runtime control behavior | 日志运行时控制接口 +type LogControl interface { + SetLevel(level config.LogLevel) // Set minimum output log level | 设置最小日志输出级别 + SetPrefix(prefix string) // Set log message prefix | 设置日志前缀 + SetStdout(enable bool) // Enable or disable stdout output | 启用或关闭终端输出 + Close() // Release logging resources | 释放日志相关资源 +} diff --git a/core/adapter/pool.go b/core/adapter/pool.go new file mode 100644 index 0000000..a3049b1 --- /dev/null +++ b/core/adapter/pool.go @@ -0,0 +1,8 @@ +// @Author daixk 2025/12/12 11:56:00 +package adapter + +type Pool interface { + Submit(task func()) error + Stop() + Stats() (running, capacity int, usage float64) +} diff --git a/core/builder/builder.go b/core/builder/builder.go index 38e38d4..042abc3 100644 --- a/core/builder/builder.go +++ b/core/builder/builder.go @@ -1,10 +1,9 @@ package builder import ( - "github.com/click33/sa-token-go/core/codec" - "github.com/click33/sa-token-go/core/dep" - "github.com/click33/sa-token-go/core/log" - "github.com/click33/sa-token-go/core/pool" + codec_json "github.com/click33/sa-token-go/codec/json" + "github.com/click33/sa-token-go/log/nop" + "github.com/click33/sa-token-go/pool/ants" "strings" "time" @@ -12,37 +11,42 @@ import ( "github.com/click33/sa-token-go/core/banner" "github.com/click33/sa-token-go/core/config" "github.com/click33/sa-token-go/core/manager" + "github.com/click33/sa-token-go/storage/memory" ) // Builder provides fluent configuration for Sa-Token | Sa-Token 构建器用于流式配置 type Builder struct { - storage adapter.Storage // Storage adapter | 存储适配器 - tokenName string // Token name used by client | 客户端 Token 名称 - timeout int64 // Token timeout seconds | Token 过期时间(秒) - maxRefresh int64 // Max auto-refresh duration | 最大无感刷新时间 - renewInterval int64 // Min renewal interval seconds | 最小续期间隔(秒) - activeTimeout int64 // Force offline when idle | 活跃超时时间(秒) - isConcurrent bool // Allow concurrent login | 是否允许并发登录 - isShare bool // Share same token among devices | 是否共用 Token - maxLoginCount int64 // Max concurrent login count | 最大并发登录数 - tokenStyle config.TokenStyle // Token generation style | Token 生成方式 - autoRenew bool // Enable renewal | 是否启用自动续期 - jwtSecretKey string // JWT secret key | JWT 密钥 - isLog bool // Enable log output | 是否启用日志 - isPrintBanner bool // Print startup banner | 是否打印启动 Banner - isReadBody bool // Read token from body | 是否从 Body 读取 Token - isReadHeader bool // Read token from header | 是否从 Header 读取 Token - isReadCookie bool // Read token from cookie | 是否从 Cookie 读取 Token - tokenSessionCheckLogin bool // Check login before Session | 读取 Session 时是否检查登录 - keyPrefix string // Storage key prefix | 存储键前缀 - cookieConfig *config.CookieConfig // Cookie config | Cookie 配置 - renewPoolConfig *pool.RenewPoolConfig // Renew pool config | 续期协程池配置 - authType string // Authentication system type | 认证体系类型 - codec codec.Adapter // codec Codec adapter for encoding and decoding operations | 编解码操作的编码器适配器 - log log.Adapter // log Log adapter for logging operations | 日志记录操作的适配器 -} - -// NewBuilder creates a new builder with default configuration | 创建新的构建器(使用默认配置) + tokenName string // Token name used by client | 客户端 Token 名称 + timeout int64 // Token timeout seconds | Token 过期时间(秒) + maxRefresh int64 // Max auto-refresh duration | 最大无感刷新时间 + renewInterval int64 // Min renewal interval seconds | 最小续期间隔(秒) + activeTimeout int64 // Force offline when idle | 活跃超时时间(秒) + isConcurrent bool // Allow concurrent login | 是否允许并发登录 + isShare bool // Share same token among devices | 是否共用 Token + maxLoginCount int64 // Max concurrent login count | 最大并发登录数 + isReadBody bool // Read token from body | 是否从 Body 读取 Token + isReadHeader bool // Read token from header | 是否从 Header 读取 Token + isReadCookie bool // Read token from cookie | 是否从 Cookie 读取 Token + tokenStyle config.TokenStyle // Token generation style | Token 生成方式 + tokenSessionCheckLogin bool // Check login before Session | 读取 Session 时是否检查登录 + autoRenew bool // Enable renewal | 是否启用自动续期 + jwtSecretKey string // JWT secret key | JWT 密钥 + isLog bool // Enable log output | 是否启用日志 + isPrintBanner bool // Print startup banner | 是否打印启动 Banner + keyPrefix string // Storage key prefix | 存储键前缀 + authType string // Authentication system type | 认证体系类型 + + cookieConfig *config.CookieConfig // Cookie config | Cookie 配置 + renewPoolConfig *config.RenewPoolConfig // Renew pool config | 续期协程池配置 + logConfig *config.LoggerConfig // 日志配置 + + storage adapter.Storage // Storage adapter | 存储适配器 + codec adapter.Codec // codec Codec adapter for encoding and decoding operations | 编解码操作的编码器适配器 + log adapter.Log // log Log adapter for logging operations | 日志记录操作的适配器 + pool adapter.Pool // 续期池 +} + +// NewBuilder creates a new builder with log configuration | 创建新的构建器(使用默认配置) func NewBuilder() *Builder { return &Builder{ tokenName: config.DefaultTokenName, @@ -53,27 +57,22 @@ func NewBuilder() *Builder { isConcurrent: true, isShare: true, maxLoginCount: config.DefaultMaxLoginCount, - tokenStyle: config.TokenStyleUUID, - autoRenew: true, - isLog: false, - isPrintBanner: true, isReadBody: false, isReadHeader: true, isReadCookie: false, + tokenStyle: config.TokenStyleUUID, tokenSessionCheckLogin: true, + autoRenew: true, + jwtSecretKey: config.DefaultJwtSecretKey, + isLog: false, + isPrintBanner: true, keyPrefix: config.DefaultKeyPrefix, - cookieConfig: config.DefaultCookieConfig(), - renewPoolConfig: pool.DefaultRenewPoolConfig(), authType: config.DefaultAuthType, - codec: codec.GetDefaultSerializer(), - log: log.GetDefaultLogger(), - } -} -// Storage sets storage adapter | 设置存储适配器 -func (b *Builder) Storage(storage adapter.Storage) *Builder { - b.storage = storage - return b + cookieConfig: config.DefaultCookieConfig(), + renewPoolConfig: config.DefaultRenewPoolConfig(), + logConfig: config.DefaultLoggerConfig(), + } } // TokenName sets token name | 设置Token名称 @@ -130,12 +129,36 @@ func (b *Builder) MaxLoginCount(count int64) *Builder { return b } +// IsReadBody sets whether to read token from request body | 设置是否从请求体读取Token +func (b *Builder) IsReadBody(isRead bool) *Builder { + b.isReadBody = isRead + return b +} + +// IsReadHeader sets whether to read token from header | 设置是否从Header读取Token +func (b *Builder) IsReadHeader(isRead bool) *Builder { + b.isReadHeader = isRead + return b +} + +// IsReadCookie sets whether to read token from cookie | 设置是否从Cookie读取Token +func (b *Builder) IsReadCookie(isRead bool) *Builder { + b.isReadCookie = isRead + return b +} + // TokenStyle sets token generation style | 设置Token风格 func (b *Builder) TokenStyle(style config.TokenStyle) *Builder { b.tokenStyle = style return b } +// TokenSessionCheckLogin sets whether to check token session on login | 设置登录时是否检查Token会话 +func (b *Builder) TokenSessionCheckLogin(check bool) *Builder { + b.tokenSessionCheckLogin = check + return b +} + // AutoRenew sets whether to auto-renew token | 设置是否自动续期 func (b *Builder) AutoRenew(autoRenew bool) *Builder { b.autoRenew = autoRenew @@ -160,27 +183,25 @@ func (b *Builder) IsPrintBanner(isPrint bool) *Builder { return b } -// IsReadBody sets whether to read token from request body | 设置是否从请求体读取Token -func (b *Builder) IsReadBody(isRead bool) *Builder { - b.isReadBody = isRead - return b -} - -// IsReadHeader sets whether to read token from header | 设置是否从Header读取Token -func (b *Builder) IsReadHeader(isRead bool) *Builder { - b.isReadHeader = isRead - return b -} - -// IsReadCookie sets whether to read token from cookie | 设置是否从Cookie读取Token -func (b *Builder) IsReadCookie(isRead bool) *Builder { - b.isReadCookie = isRead +// KeyPrefix sets storage key prefix | 设置存储键前缀 +func (b *Builder) KeyPrefix(prefix string) *Builder { + // 如果前缀不为空且不以 : 结尾,自动添加 : + if prefix != "" && !strings.HasSuffix(prefix, ":") { + b.keyPrefix = prefix + ":" + } else { + b.keyPrefix = prefix + } return b } -// TokenSessionCheckLogin sets whether to check token session on login | 设置登录时是否检查Token会话 -func (b *Builder) TokenSessionCheckLogin(check bool) *Builder { - b.tokenSessionCheckLogin = check +// AuthType sets authentication system type | 设置认证体系类型 +func (b *Builder) AuthType(authType string) *Builder { + // 如果前缀不为空且不以 : 结尾,自动添加 : + if authType != "" && !strings.HasSuffix(authType, ":") { + b.authType = authType + ":" + } else { + b.authType = authType + } return b } @@ -247,7 +268,7 @@ func (b *Builder) CookieConfig(cfg *config.CookieConfig) *Builder { // RenewPoolMinSize sets the minimum pool size | 设置最小协程数 func (b *Builder) RenewPoolMinSize(size int) *Builder { if b.renewPoolConfig == nil { - b.renewPoolConfig = pool.DefaultRenewPoolConfig() + b.renewPoolConfig = &config.RenewPoolConfig{} } b.renewPoolConfig.MinSize = size return b @@ -256,7 +277,7 @@ func (b *Builder) RenewPoolMinSize(size int) *Builder { // RenewPoolMaxSize sets the maximum pool size | 设置最大协程数 func (b *Builder) RenewPoolMaxSize(size int) *Builder { if b.renewPoolConfig == nil { - b.renewPoolConfig = pool.DefaultRenewPoolConfig() + b.renewPoolConfig = &config.RenewPoolConfig{} } b.renewPoolConfig.MaxSize = size return b @@ -265,7 +286,7 @@ func (b *Builder) RenewPoolMaxSize(size int) *Builder { // RenewPoolScaleUpRate sets the scale-up threshold | 设置扩容阈值 func (b *Builder) RenewPoolScaleUpRate(rate float64) *Builder { if b.renewPoolConfig == nil { - b.renewPoolConfig = pool.DefaultRenewPoolConfig() + b.renewPoolConfig = &config.RenewPoolConfig{} } b.renewPoolConfig.ScaleUpRate = rate return b @@ -274,7 +295,7 @@ func (b *Builder) RenewPoolScaleUpRate(rate float64) *Builder { // RenewPoolScaleDownRate sets the scale-down threshold | 设置缩容阈值 func (b *Builder) RenewPoolScaleDownRate(rate float64) *Builder { if b.renewPoolConfig == nil { - b.renewPoolConfig = pool.DefaultRenewPoolConfig() + b.renewPoolConfig = &config.RenewPoolConfig{} } b.renewPoolConfig.ScaleDownRate = rate return b @@ -283,7 +304,7 @@ func (b *Builder) RenewPoolScaleDownRate(rate float64) *Builder { // RenewPoolCheckInterval sets the interval for auto-scale checking | 设置自动扩缩容检查间隔 func (b *Builder) RenewPoolCheckInterval(interval time.Duration) *Builder { if b.renewPoolConfig == nil { - b.renewPoolConfig = pool.DefaultRenewPoolConfig() + b.renewPoolConfig = &config.RenewPoolConfig{} } b.renewPoolConfig.CheckInterval = interval return b @@ -292,7 +313,7 @@ func (b *Builder) RenewPoolCheckInterval(interval time.Duration) *Builder { // RenewPoolExpiry sets the idle worker expiry duration | 设置空闲协程过期时间 func (b *Builder) RenewPoolExpiry(duration time.Duration) *Builder { if b.renewPoolConfig == nil { - b.renewPoolConfig = pool.DefaultRenewPoolConfig() + b.renewPoolConfig = &config.RenewPoolConfig{} } b.renewPoolConfig.Expiry = duration return b @@ -301,7 +322,7 @@ func (b *Builder) RenewPoolExpiry(duration time.Duration) *Builder { // RenewPoolPrintStatusInterval sets the status printing interval | 设置状态打印间隔 func (b *Builder) RenewPoolPrintStatusInterval(interval time.Duration) *Builder { if b.renewPoolConfig == nil { - b.renewPoolConfig = pool.DefaultRenewPoolConfig() + b.renewPoolConfig = &config.RenewPoolConfig{} } b.renewPoolConfig.PrintStatusInterval = interval return b @@ -310,7 +331,7 @@ func (b *Builder) RenewPoolPrintStatusInterval(interval time.Duration) *Builder // RenewPoolPreAlloc sets whether to pre-allocate memory | 设置是否预分配内存 func (b *Builder) RenewPoolPreAlloc(preAlloc bool) *Builder { if b.renewPoolConfig == nil { - b.renewPoolConfig = pool.DefaultRenewPoolConfig() + b.renewPoolConfig = &config.RenewPoolConfig{} } b.renewPoolConfig.PreAlloc = preAlloc return b @@ -319,88 +340,129 @@ func (b *Builder) RenewPoolPreAlloc(preAlloc bool) *Builder { // RenewPoolNonBlocking sets whether the pool works in non-blocking mode | 设置是否为非阻塞模式 func (b *Builder) RenewPoolNonBlocking(nonBlocking bool) *Builder { if b.renewPoolConfig == nil { - b.renewPoolConfig = pool.DefaultRenewPoolConfig() + b.renewPoolConfig = &config.RenewPoolConfig{} } b.renewPoolConfig.NonBlocking = nonBlocking return b } // RenewPoolConfig sets the token renewal pool configuration | 设置完整的Token续期池配置 -func (b *Builder) RenewPoolConfig(cfg *pool.RenewPoolConfig) *Builder { +func (b *Builder) RenewPoolConfig(cfg *config.RenewPoolConfig) *Builder { b.renewPoolConfig = cfg return b } -// SetCodec sets the codec for encoding and decoding operations | 设置编解码器适配器 -func (b *Builder) SetCodec(codec codec.Adapter) *Builder { - b.codec = codec +// LoggerPath sets the log directory path | 设置日志文件目录 +func (b *Builder) LoggerPath(path string) *Builder { + if b.logConfig == nil { + b.logConfig = &config.LoggerConfig{} + } + b.logConfig.Path = path return b } -// SetLog sets the log adapter for logging operations | 设置日志记录适配器 -func (b *Builder) SetLog(log log.Adapter) *Builder { - b.log = log +// LoggerFileFormat sets the log file naming format | 设置日志文件命名格式 +func (b *Builder) LoggerFileFormat(format string) *Builder { + if b.logConfig == nil { + b.logConfig = &config.LoggerConfig{} + } + b.logConfig.FileFormat = format return b } -// KeyPrefix sets storage key prefix | 设置存储键前缀 -// Automatically adds ":" suffix if not present (except for empty string) | 自动添加 ":" 后缀(空字符串除外) -// Examples: "satoken" -> "satoken:", "myapp" -> "myapp:", "" -> "" -// Use empty string "" for Java sa-token compatibility | 使用空字符串 "" 兼容 Java sa-token -func (b *Builder) KeyPrefix(prefix string) *Builder { - // 如果前缀不为空且不以 : 结尾,自动添加 : - if prefix != "" && !strings.HasSuffix(prefix, ":") { - b.keyPrefix = prefix + ":" - } else { - b.keyPrefix = prefix +// LoggerPrefix sets the log line prefix | 设置日志前缀 +func (b *Builder) LoggerPrefix(prefix string) *Builder { + if b.logConfig == nil { + b.logConfig = &config.LoggerConfig{} } + b.logConfig.Prefix = prefix return b } -// AuthType sets authentication system type | 设置认证体系类型 -func (b *Builder) AuthType(authType string) *Builder { - // 如果前缀不为空且不以 : 结尾,自动添加 : - if authType != "" && !strings.HasSuffix(authType, ":") { - b.authType = authType + ":" - } else { - b.authType = authType +// LoggerLevel sets the minimum output log level | 设置日志最低输出级别 +func (b *Builder) LoggerLevel(level config.LogLevel) *Builder { + if b.logConfig == nil { + b.logConfig = &config.LoggerConfig{} + } + b.logConfig.Level = level + return b +} + +// LoggerTimeFormat sets the timestamp format | 设置时间戳格式 +func (b *Builder) LoggerTimeFormat(format string) *Builder { + if b.logConfig == nil { + b.logConfig = &config.LoggerConfig{} + } + b.logConfig.TimeFormat = format + return b +} + +// LoggerStdout sets whether to print logs to console | 设置是否输出到控制台 +func (b *Builder) LoggerStdout(stdout bool) *Builder { + if b.logConfig == nil { + b.logConfig = &config.LoggerConfig{} } + b.logConfig.Stdout = stdout return b } -// NeverExpire sets token to never expire | 设置Token永不过期 -func (b *Builder) NeverExpire() *Builder { - b.timeout = config.NoLimit +// LoggerRotateSize sets the file size threshold for log rotation (bytes) | 设置日志文件大小滚动阈值(字节) +func (b *Builder) LoggerRotateSize(size int64) *Builder { + if b.logConfig == nil { + b.logConfig = &config.LoggerConfig{} + } + b.logConfig.RotateSize = size return b } -// NoActiveTimeout disables active timeout | 禁用活跃超时 -func (b *Builder) NoActiveTimeout() *Builder { - b.activeTimeout = config.NoLimit +// LoggerRotateExpire sets the rotation interval by time duration | 设置文件时间滚动间隔 +func (b *Builder) LoggerRotateExpire(expire time.Duration) *Builder { + if b.logConfig == nil { + b.logConfig = &config.LoggerConfig{} + } + b.logConfig.RotateExpire = expire return b } -// UnlimitedLogin allows unlimited concurrent logins | 允许无限并发登录 -func (b *Builder) UnlimitedLogin() *Builder { - b.maxLoginCount = config.NoLimit +// LoggerRotateBackupLimit sets the maximum number of rotated backup files | 设置最大备份文件数量 +func (b *Builder) LoggerRotateBackupLimit(limit int) *Builder { + if b.logConfig == nil { + b.logConfig = &config.LoggerConfig{} + } + b.logConfig.RotateBackupLimit = limit return b } -// NoBanner disables startup banner printing | 禁用启动Banner打印 -func (b *Builder) NoBanner() *Builder { - b.isPrintBanner = false +// LoggerRotateBackupDays sets the retention days for old log files | 设置备份文件保留天数 +func (b *Builder) LoggerRotateBackupDays(days int) *Builder { + if b.logConfig == nil { + b.logConfig = &config.LoggerConfig{} + } + b.logConfig.RotateBackupDays = days return b } -// NoLog disables log output | 禁用日志输出 -func (b *Builder) NoLog() *Builder { - b.isLog = false +// LoggerConfig sets complete logger configuration | 设置完整的日志配置 +func (b *Builder) LoggerConfig(cfg *config.LoggerConfig) *Builder { + b.logConfig = cfg return b } -// DisableAutoRenew disables token auto-renewal | 禁用Token自动续期 -func (b *Builder) DisableAutoRenew() *Builder { - b.autoRenew = false +// Storage sets storage adapter | 设置存储适配器 +func (b *Builder) Storage(storage adapter.Storage) *Builder { + b.storage = storage + return b +} + +// SetCodec sets the codec for encoding and decoding operations | 设置编解码器适配器 +func (b *Builder) SetCodec(codec adapter.Codec) *Builder { + b.codec = codec + return b +} + +// SetLog sets the log adapter for logging operations | 设置日志记录适配器 +func (b *Builder) SetLog(log adapter.Log) *Builder { + b.log = log return b } @@ -414,34 +476,31 @@ func (b *Builder) Jwt(secret string) *Builder { // Clone creates a deep copy of the builder | 克隆当前构建器 func (b *Builder) Clone() *Builder { clone := *b + + // Deep copy for cookieConfig if b.cookieConfig != nil { cookieCopy := *b.cookieConfig clone.cookieConfig = &cookieCopy } + + // Deep copy for renewPoolConfig if b.renewPoolConfig != nil { poolCopy := *b.renewPoolConfig clone.renewPoolConfig = &poolCopy } + + // Deep copy for logConfig + if b.logConfig != nil { + logCopy := *b.logConfig + clone.logConfig = &logCopy + } + return &clone } // Build builds Manager and prints startup banner | 构建Manager并打印启动Banner func (b *Builder) Build() *manager.Manager { - // Validate storage | 验证存储 - if b.storage == nil { - panic("storage cannot be nil") // storage 不能为空 - } - - // Validate codec | 验证codec - if b.codec == nil { - panic("codec cannot be nil") // codec 不能为空 - } - - // Validate log | 验证log - if b.log == nil { - panic("log cannot be nil") // log 不能为空 - } - + // 初始化config cfg := &config.Config{ TokenName: b.tokenName, Timeout: b.timeout, @@ -462,14 +521,52 @@ func (b *Builder) Build() *manager.Manager { IsPrintBanner: b.isPrintBanner, KeyPrefix: b.keyPrefix, CookieConfig: b.cookieConfig, - RenewPoolConfig: b.renewPoolConfig, AuthType: b.authType, } // Validate configuration | 验证配置 err := cfg.Validate() if err != nil { - panic(err) + panic("Invalid config: " + err.Error()) + } + + // 如果storage为nil,则初始化默认storage + if b.storage == nil { + b.storage = memory.NewStorage() + } + // 如果codec为nil,则初始化默认codec + if b.codec == nil { + b.codec = codec_json.NewJSONSerializer() + } + // 如果log为nil,则初始化默认log + if b.log == nil { + b.log = nop.NewNopLogger() + } + // 如果pool为nil,则初始化默认pool + if b.autoRenew && b.pool == nil { + if b.renewPoolConfig == nil { + // 初始化RenewPoolConfig + b.renewPoolConfig = &config.RenewPoolConfig{ + MinSize: b.renewPoolConfig.MinSize, + MaxSize: b.renewPoolConfig.MaxSize, + ScaleUpRate: b.renewPoolConfig.ScaleUpRate, + ScaleDownRate: b.renewPoolConfig.ScaleDownRate, + CheckInterval: b.renewPoolConfig.CheckInterval, + Expiry: b.renewPoolConfig.Expiry, + PrintStatusInterval: b.renewPoolConfig.PrintStatusInterval, + PreAlloc: b.renewPoolConfig.PreAlloc, + NonBlocking: b.renewPoolConfig.NonBlocking, + } + } + // Validate configuration | 验证配置 + err = b.renewPoolConfig.Validate() + if err != nil { + panic("Invalid RenewPoolConfig: " + err.Error()) + } + b.pool, err = ants.NewRenewPoolManagerWithConfig(b.renewPoolConfig) + if err != nil { + panic(err) + } } // Print startup banner with full configuration | 打印启动Banner和完整配置 @@ -478,14 +575,5 @@ func (b *Builder) Build() *manager.Manager { } // Build Manager | 构建 Manager - mgr := manager.NewManager(cfg, b.storage, dep.NewDefaultDep(b.codec, b.log)) - - // Note: If you use the stputil package, it will automatically set the global Manager | 注意:如果你使用了 stputil 包,它会自动设置全局 Manager - // We don't directly call stputil.SetManager here to avoid hard dependencies | 这里不直接调用 stputil.SetManager,避免强依赖 - return mgr -} - -// MustBuild builds Manager and panics if validation fails | 构建Manager,验证失败时panic -func (b *Builder) MustBuild() *manager.Manager { - return b.Build() + return manager.NewManager(cfg, b.storage, b.codec, b.log, b.pool) } diff --git a/core/codec/codec.go b/core/codec/codec.go deleted file mode 100644 index b3d7efd..0000000 --- a/core/codec/codec.go +++ /dev/null @@ -1,86 +0,0 @@ -// @Author daixk 2025/11/21 9:57:00 -package codec - -import ( - "sync" - "sync/atomic" -) - -// Built-in serializer names | 内置序列化器名称 -const ( - SerializerJSON = "json" - SerializerMsgPack = "msgpack" -) - -// 默认初始化全局的codec实现 这里先注释 向后兼容 - -// serializerHolder wraps Adapter to ensure atomic.Value type consistency | 包装 Adapter 以确保 atomic.Value 类型一致性 -type serializerHolder struct { - s Adapter -} - -// serializerValue stores the global serializer using atomic.Value | 使用 atomic.Value 存储全局序列化器 -var ( - serializerValue atomic.Value // stores serializerHolder | 存储 serializerHolder - serializerMu sync.Mutex // used only for SetDefaultSerializer write lock | 仅用于写入加锁 -) - -func init() { - // Initialize default JSON serializer | 初始化默认 JSON 序列化器 - serializerValue.Store(serializerHolder{s: &JSONSerializer{}}) -} - -// SetDefaultSerializer sets the global serializer | 设置全局默认序列化器 -func SetDefaultSerializer(s Adapter) { - if s == nil { - return - } - - // lock ensures write ordering | 加锁确保写入顺序一致 - serializerMu.Lock() - serializerValue.Store(serializerHolder{s: s}) - serializerMu.Unlock() -} - -// GetDefaultSerializer returns the global serializer | 获取全局默认序列化器 -func GetDefaultSerializer() Adapter { - return serializerValue.Load().(serializerHolder).s -} - -// Encode encodes a value using the global serializer | 使用全局序列化器编码数据 -func Encode(v any) ([]byte, error) { - return GetDefaultSerializer().Encode(v) -} - -// Decode decodes bytes using the global serializer | 使用全局序列化器解码数据到目标对象 -func Decode(data []byte, v any) error { - return GetDefaultSerializer().Decode(data, v) -} - -// NewSerializer creates a serializer by name | 根据名称创建对应的序列化器 -func NewSerializer(name string) Adapter { - switch name { - case SerializerJSON, "": - return &JSONSerializer{} - case SerializerMsgPack: - return &MsgPackSerializer{} - default: - return &JSONSerializer{} - } -} - -// NewSerializerMust returns serializer or panic if not found | 根据名称创建序列化器,未找到则 panic -func NewSerializerMust(name string) Adapter { - switch name { - case SerializerJSON, "": - return &JSONSerializer{} - case SerializerMsgPack: - return &MsgPackSerializer{} - } - panic("unknown serializer: " + name) -} - -// NewSerializerMustWithJson returns JSON serializer if name not found | 根据名称创建序列化器,未找到则返回 JSON 序列化器 -func NewSerializerMustWithJson(name string) Adapter { - return NewSerializer(name) -} diff --git a/core/codec/codec_adaper.go b/core/codec/codec_adaper.go deleted file mode 100644 index 8458fbc..0000000 --- a/core/codec/codec_adaper.go +++ /dev/null @@ -1,8 +0,0 @@ -// @Author daixk 2025/11/27 20:55:00 -package codec - -type Adapter interface { - Encode(v any) ([]byte, error) // Encode to bytes | 编码 - Decode(data []byte, v any) error // Decode to struct | 解码 - Name() string // Serializer name | 序列化器名称 -} diff --git a/core/codec/codec_test.go b/core/codec/codec_test.go deleted file mode 100644 index 9991c42..0000000 --- a/core/codec/codec_test.go +++ /dev/null @@ -1,228 +0,0 @@ -// @Author daixk 2025/12/6 17:04:00 -package codec - -import ( - "reflect" - "strings" - "sync" - "testing" -) - -// -------------------- Mock Struct -------------------- - -type mockStruct struct { - Name string - Age int -} - -// -------------------- JSONSerializer Tests -------------------- - -// TestJSONSerializerEncodeDecode tests JSON encode/decode behavior | 测试 JSON 序列化器的编码与解码行为 -func TestJSONSerializerEncodeDecode(t *testing.T) { - s := &JSONSerializer{} - input := mockStruct{Name: "Alice", Age: 20} - - // Encode - data, err := s.Encode(input) - if err != nil { - t.Fatalf("JSON Encode failed: %v", err) - } - if !strings.Contains(string(data), "Alice") { - t.Errorf("JSON Encode output missing field: got %s", string(data)) - } - - // Decode - var output mockStruct - err = s.Decode(data, &output) - if err != nil { - t.Fatalf("JSON Decode failed: %v", err) - } - if !reflect.DeepEqual(input, output) { - t.Errorf("JSON Decode mismatch: got %+v, want %+v", output, input) - } - - // Name check - if s.Name() != SerializerJSON { - t.Errorf("JSONSerializer.Name() = %s, want %s", s.Name(), SerializerJSON) - } -} - -// -------------------- MsgPackSerializer Tests -------------------- - -// TestMsgPackSerializerEncodeDecode tests MsgPack encode/decode | 测试 MsgPack 序列化器的编码与解码行为 -func TestMsgPackSerializerEncodeDecode(t *testing.T) { - s := &MsgPackSerializer{} - input := mockStruct{Name: "Bob", Age: 25} - - data, err := s.Encode(input) - if err != nil { - t.Fatalf("MsgPack Encode failed: %v", err) - } - - var output mockStruct - err = s.Decode(data, &output) - if err != nil { - t.Fatalf("MsgPack Decode failed: %v", err) - } - if !reflect.DeepEqual(input, output) { - t.Errorf("MsgPack Decode mismatch: got %+v, want %+v", output, input) - } - - if s.Name() != SerializerMsgPack { - t.Errorf("MsgPackSerializer.Name() = %s, want %s", s.Name(), SerializerMsgPack) - } -} - -// -------------------- Global Serializer Tests -------------------- - -// TestGlobalSerializerDefault tests default global serializer | 测试默认全局序列化器(应为 JSON) -func TestGlobalSerializerDefault(t *testing.T) { - def := GetDefaultSerializer() - if def == nil { - t.Fatal("default serializer should not be nil") - } - if def.Name() != SerializerJSON { - t.Errorf("default serializer name = %s, want %s", def.Name(), SerializerJSON) - } -} - -// TestSetDefaultSerializer tests setting and getting the global serializer | 测试设置与获取全局序列化器 -func TestSetDefaultSerializer(t *testing.T) { - SetDefaultSerializer(&MsgPackSerializer{}) - s := GetDefaultSerializer() - if s.Name() != SerializerMsgPack { - t.Errorf("expected global serializer to be msgpack, got %s", s.Name()) - } - - SetDefaultSerializer(&JSONSerializer{}) - s = GetDefaultSerializer() - if s.Name() != SerializerJSON { - t.Errorf("expected global serializer to be json, got %s", s.Name()) - } - - // nil should not change current serializer - current := GetDefaultSerializer() - SetDefaultSerializer(nil) - if GetDefaultSerializer() != current { - t.Error("SetDefaultSerializer(nil) should not change the serializer") - } -} - -// TestConcurrentSetDefaultSerializer tests concurrent SetDefaultSerializer safety | 测试并发安全性 -func TestConcurrentSetDefaultSerializer(t *testing.T) { - wg := sync.WaitGroup{} - for i := 0; i < 50; i++ { - wg.Add(1) - go func(i int) { - defer wg.Done() - if i%2 == 0 { - SetDefaultSerializer(&JSONSerializer{}) - } else { - SetDefaultSerializer(&MsgPackSerializer{}) - } - }(i) - } - wg.Wait() - _ = GetDefaultSerializer() // ensure no panic -} - -// -------------------- Encode / Decode Entry Tests -------------------- - -// TestEncodeDecodeGlobal tests Encode/Decode helpers using global serializer | 测试全局编码解码辅助函数 -func TestEncodeDecodeGlobal(t *testing.T) { - SetDefaultSerializer(&JSONSerializer{}) - - src := mockStruct{Name: "Eve", Age: 30} - data, err := Encode(src) - if err != nil { - t.Fatalf("Encode() failed: %v", err) - } - - var dst mockStruct - err = Decode(data, &dst) - if err != nil { - t.Fatalf("Decode() failed: %v", err) - } - - if !reflect.DeepEqual(src, dst) { - t.Errorf("Decode() result mismatch: got %+v, want %+v", dst, src) - } -} - -// -------------------- NewSerializer Tests -------------------- - -// TestNewSerializer tests serializer creation by name | 测试根据名称创建序列化器 -func TestNewSerializer(t *testing.T) { - s := NewSerializer("json") - if s.Name() != SerializerJSON { - t.Errorf("NewSerializer(json) got %s", s.Name()) - } - - s = NewSerializer("msgpack") - if s.Name() != SerializerMsgPack { - t.Errorf("NewSerializer(msgpack) got %s", s.Name()) - } - - s = NewSerializer("unknown") - if s.Name() != SerializerJSON { - t.Errorf("NewSerializer(unknown) default fallback should be json, got %s", s.Name()) - } -} - -// TestNewSerializerMust tests NewSerializerMust panic on invalid name | 测试 NewSerializerMust 异常情况 -func TestNewSerializerMust(t *testing.T) { - defer func() { - if r := recover(); r == nil { - t.Error("expected panic for unknown serializer, got none") - } - }() - _ = NewSerializerMust("invalid-name") -} - -// TestNewSerializerMustWithJson ensures fallback to JSON | 测试 NewSerializerMustWithJson 返回 JSON -func TestNewSerializerMustWithJson(t *testing.T) { - s := NewSerializerMustWithJson("non-exist") - if s.Name() != SerializerJSON { - t.Errorf("expected fallback JSON, got %s", s.Name()) - } -} - -// -------------------- Benchmark -------------------- - -// BenchmarkEncodeJSON benchmarks JSON encoding performance | 基准测试 JSON 编码性能 -func BenchmarkEncodeJSON(b *testing.B) { - s := &JSONSerializer{} - data := mockStruct{Name: "Benchmark", Age: 100} - for i := 0; i < b.N; i++ { - _, _ = s.Encode(data) - } -} - -// BenchmarkDecodeJSON benchmarks JSON decoding performance | 基准测试 JSON 解码性能 -func BenchmarkDecodeJSON(b *testing.B) { - s := &JSONSerializer{} - raw, _ := s.Encode(mockStruct{Name: "Benchmark", Age: 100}) - var v mockStruct - for i := 0; i < b.N; i++ { - _ = s.Decode(raw, &v) - } -} - -// BenchmarkEncodeMsgPack benchmarks MsgPack encoding performance | 基准测试 MsgPack 编码性能 -func BenchmarkEncodeMsgPack(b *testing.B) { - s := &MsgPackSerializer{} - data := mockStruct{Name: "Benchmark", Age: 100} - for i := 0; i < b.N; i++ { - _, _ = s.Encode(data) - } -} - -// BenchmarkDecodeMsgPack benchmarks MsgPack decoding performance | 基准测试 MsgPack 解码性能 -func BenchmarkDecodeMsgPack(b *testing.B) { - s := &MsgPackSerializer{} - raw, _ := s.Encode(mockStruct{Name: "Benchmark", Age: 100}) - var v mockStruct - for i := 0; i < b.N; i++ { - _ = s.Decode(raw, &v) - } -} diff --git a/core/config/config.go b/core/config/config.go index 7cf8c43..41d7565 100644 --- a/core/config/config.go +++ b/core/config/config.go @@ -3,7 +3,6 @@ package config import ( "errors" "fmt" - "github.com/click33/sa-token-go/core/pool" "strings" ) @@ -33,13 +32,13 @@ type Config struct { // MaxLoginCount Maximum concurrent login count for the same account; -1 means unlimited (only effective when IsConcurrent=true and IsShare=false) | 同一账号最大登录数量,-1代表不限(仅当IsConcurrent=true且IsShare=false时生效) MaxLoginCount int64 - // IsReadBody Try to read Token from the request body (default: false) | 是否尝试从请求体读取Token(默认:false) + // IsReadBody Try to read Token from the request body (log: false) | 是否尝试从请求体读取Token(默认:false) IsReadBody bool - // IsReadHeader Try to read Token from the HTTP Header (default: true, recommended) | 是否尝试从Header读取Token(默认:true,推荐) + // IsReadHeader Try to read Token from the HTTP Header (log: true, recommended) | 是否尝试从Header读取Token(默认:true,推荐) IsReadHeader bool - // IsReadCookie Try to read Token from the Cookie (default: false) | 是否尝试从Cookie读取Token(默认:false) + // IsReadCookie Try to read Token from the Cookie (log: false) | 是否尝试从Cookie读取Token(默认:false) IsReadCookie bool // TokenStyle Token generation style | Token生成风格 @@ -57,18 +56,15 @@ type Config struct { // IsLog Enable operation logging | 是否开启操作日志 IsLog bool - // IsPrintBanner Print the startup banner (default: true) | 是否打印启动Banner(默认:true) + // IsPrintBanner Print the startup banner (log: true) | 是否打印启动Banner(默认:true) IsPrintBanner bool - // KeyPrefix Storage key prefix for Redis isolation (default: "satoken:"); set to "" for Java Sa-Token compatibility | 存储键前缀(默认:"satoken:");设置为空""可兼容Java版Sa-Token默认行为 + // KeyPrefix Storage key prefix for Storage isolation | 存储键前缀 KeyPrefix string // CookieConfig Cookie configuration | Cookie配置 CookieConfig *CookieConfig - // RenewPoolConfig Configuration for the renewal pool manager | 续期池管理器配置 - RenewPoolConfig *pool.RenewPoolConfig - // Authentication system type | 认证体系类型 AuthType string } @@ -94,7 +90,7 @@ type CookieConfig struct { MaxAge int64 } -// DefaultConfig Returns default configuration | 返回默认配置 +// DefaultConfig Returns log configuration | 返回默认配置 func DefaultConfig() *Config { return &Config{ TokenName: DefaultTokenName, @@ -115,16 +111,8 @@ func DefaultConfig() *Config { IsLog: false, IsPrintBanner: true, KeyPrefix: DefaultKeyPrefix, - CookieConfig: &CookieConfig{ - Domain: "", - Path: DefaultCookiePath, - Secure: false, - HttpOnly: true, - SameSite: SameSiteLax, - MaxAge: 0, - }, - RenewPoolConfig: pool.DefaultRenewPoolConfig(), - AuthType: DefaultAuthType, + CookieConfig: DefaultCookieConfig(), + AuthType: DefaultAuthType, } } @@ -150,12 +138,22 @@ func (c *Config) Validate() error { return errors.New("JwtSecretKey is required when TokenStyle is JWT") } - // Adjust MaxRefresh if it exceeds Timeout | 如果 MaxRefresh 大于 Timeout,则自动调整为 Timeout/2 + // MaxRefresh must not exceed Timeout | MaxRefresh 不能大于 Timeout if c.Timeout != NoLimit && c.MaxRefresh > c.Timeout { - c.MaxRefresh = c.Timeout / 2 - if c.MaxRefresh < 1 { - c.MaxRefresh = 1 - } + return fmt.Errorf( + "MaxRefresh (%d) must be <= Timeout (%d)", + c.MaxRefresh, + c.Timeout, + ) + } + + // RenewInterval must not exceed MaxRefresh | RenewInterval 不能大于 MaxRefresh + if c.MaxRefresh != NoLimit && c.RenewInterval != NoLimit && c.RenewInterval > c.MaxRefresh { + return fmt.Errorf( + "RenewInterval (%d) must be <= MaxRefresh (%d)", + c.RenewInterval, + c.MaxRefresh, + ) } // Check if at least one read source is enabled | 检查是否至少启用了一个 Token 读取来源 @@ -174,17 +172,6 @@ func (c *Config) Validate() error { return fmt.Errorf("KeyPrefix too long (max 64 chars), got length: %d", len(c.KeyPrefix)) } - // Check authType validity | 校验AuthType的合法性 - if c.AuthType == "" { - return errors.New("AuthType cannot be empty") // AuthType不能为空 - } - if strings.ContainsAny(c.AuthType, " \t\r\n") { - return fmt.Errorf("AuthType cannot contain whitespace characters, got: %q", c.AuthType) - } - if len(c.AuthType) > 64 { - return fmt.Errorf("AuthType too long (max 64 chars), got length: %d", len(c.AuthType)) - } - // Check authType validity | 校验 AuthType 的合法性 if c.AuthType == "" { return errors.New("AuthType cannot be empty") // AuthType不能为空 @@ -210,35 +197,6 @@ func (c *Config) Validate() error { } } - // Validate RenewPoolConfig if set | 验证续期池配置(如果设置) - if c.RenewPoolConfig != nil { - // Check MinSize and MaxSize | 检查最小和最大协程池大小 - if c.RenewPoolConfig.MinSize <= 0 { - return errors.New("RenewPoolConfig.MinSize must be > 0") // 最小协程池大小必须大于0 - } - if c.RenewPoolConfig.MaxSize < c.RenewPoolConfig.MinSize { - return errors.New("RenewPoolConfig.MaxSize must be >= RenewPoolConfig.MinSize") // 最大协程池大小必须大于等于最小协程池大小 - } - - // Check ScaleUpRate and ScaleDownRate | 检查扩容和缩容阈值 - if c.RenewPoolConfig.ScaleUpRate <= 0 || c.RenewPoolConfig.ScaleUpRate > 1 { - return errors.New("RenewPoolConfig.ScaleUpRate must be between 0 and 1") // 扩容阈值必须在0和1之间 - } - if c.RenewPoolConfig.ScaleDownRate < 0 || c.RenewPoolConfig.ScaleDownRate > 1 { - return errors.New("RenewPoolConfig.ScaleDownRate must be between 0 and 1") // 缩容阈值必须在0和1之间 - } - - // Check CheckInterval | 检查检查间隔 - if c.RenewPoolConfig.CheckInterval <= 0 { - return errors.New("RenewPoolConfig.CheckInterval must be a positive duration") // 检查间隔必须为正数 - } - - // Check Expiry | 检查过期时间 - if c.RenewPoolConfig.Expiry <= 0 { - return errors.New("RenewPoolConfig.Expiry must be a positive duration") // 过期时间必须为正数 - } - } - // All checks passed | 所有配置验证通过 return nil } @@ -250,10 +208,6 @@ func (c *Config) Clone() *Config { cookieConfig := *c.CookieConfig newConfig.CookieConfig = &cookieConfig } - if c.RenewPoolConfig != nil { - poolConfig := *c.RenewPoolConfig - newConfig.RenewPoolConfig = &poolConfig - } return &newConfig } @@ -373,14 +327,6 @@ func (c *Config) SetCookieConfig(cookieConfig *CookieConfig) *Config { return c } -// SetRenewPoolConfig Set renewal pool configuration | 设置续期池配置 -func (c *Config) SetRenewPoolConfig(renewPoolConfig *pool.RenewPoolConfig) *Config { - if renewPoolConfig != nil { - c.RenewPoolConfig = renewPoolConfig - } - return c -} - // SetAuthType Set authentication system type | 设置认证体系类型 func (c *Config) SetAuthType(authType string) *Config { c.AuthType = authType @@ -427,7 +373,7 @@ func (ts TokenStyle) IsValidTokenStyle() bool { } } -// DefaultCookieConfig returns the default Cookie configuration | 返回默认的 Cookie 配置 +// DefaultCookieConfig returns the log Cookie configuration | 返回默认的 Cookie 配置 func DefaultCookieConfig() *CookieConfig { return &CookieConfig{ Domain: "", diff --git a/core/config/config_log.go b/core/config/config_log.go new file mode 100644 index 0000000..7615da3 --- /dev/null +++ b/core/config/config_log.go @@ -0,0 +1,104 @@ +// @Author daixk 2025/12/12 11:23:00 +package config + +import ( + "time" +) + +// LoggerConfig defines configuration for the logger | 日志配置项,定义日志输出的行为、格式和文件管理策略 +type LoggerConfig struct { + Path string // Log directory path | 日志文件目录 + FileFormat string // Log file naming format | 日志文件命名格式 + Prefix string // Log line prefix | 日志前缀 + Level LogLevel // Minimum output level | 最低输出级别 + TimeFormat string // Timestamp format | 时间戳格式 + Stdout bool // Print logs to console | 是否输出到控制台 + RotateSize int64 // File size threshold before rotation (bytes) | 文件滚动大小阈值(字节) + RotateExpire time.Duration // Rotation interval by time duration | 文件时间滚动间隔 + RotateBackupLimit int // Maximum number of rotated backup files | 最大备份文件数量 + RotateBackupDays int // Retention days for old log files | 备份文件保留天数 +} + +// DefaultLoggerConfig returns default logger configuration | 返回默认日志配置 +func DefaultLoggerConfig() *LoggerConfig { + return &LoggerConfig{ + TimeFormat: DefaultTimeFormat, + FileFormat: DefaultFileFormat, + Prefix: DefaultPrefix, + Level: LevelInfo, + Stdout: true, + RotateSize: DefaultRotateSize, + RotateExpire: DefaultRotateExpire, + RotateBackupLimit: DefaultRotateBackupLimit, + RotateBackupDays: DefaultRotateBackupDays, + } +} + +// SetPath sets the log output directory | 设置日志输出目录 +func (c *LoggerConfig) SetPath(path string) *LoggerConfig { + c.Path = path + return c +} + +// SetFileFormat sets the log file naming format | 设置日志文件命名格式 +func (c *LoggerConfig) SetFileFormat(format string) *LoggerConfig { + c.FileFormat = format + return c +} + +// SetPrefix sets the log line prefix | 设置日志输出前缀 +func (c *LoggerConfig) SetPrefix(prefix string) *LoggerConfig { + c.Prefix = prefix + return c +} + +// SetLevel sets the minimum output log level | 设置日志最低输出级别 +func (c *LoggerConfig) SetLevel(level LogLevel) *LoggerConfig { + c.Level = level + return c +} + +// SetTimeFormat sets the timestamp format in log lines | 设置日志时间戳格式 +func (c *LoggerConfig) SetTimeFormat(format string) *LoggerConfig { + c.TimeFormat = format + return c +} + +// SetStdout enables or disables console output | 设置是否输出到控制台 +func (c *LoggerConfig) SetStdout(enable bool) *LoggerConfig { + c.Stdout = enable + return c +} + +// SetRotateSize sets the file size threshold for log rotation | 设置日志文件大小滚动阈值 +func (c *LoggerConfig) SetRotateSize(size int64) *LoggerConfig { + c.RotateSize = size + return c +} + +// SetRotateExpire sets the time-based rotation interval | 设置时间滚动间隔 +func (c *LoggerConfig) SetRotateExpire(d time.Duration) *LoggerConfig { + c.RotateExpire = d + return c +} + +// SetRotateBackupLimit sets the maximum number of backup log files retained | 设置最大备份文件数量 +func (c *LoggerConfig) SetRotateBackupLimit(limit int) *LoggerConfig { + c.RotateBackupLimit = limit + return c +} + +// SetRotateBackupDays sets the retention days for backup log files | 设置日志备份保留天数 +func (c *LoggerConfig) SetRotateBackupDays(days int) *LoggerConfig { + c.RotateBackupDays = days + return c +} + +// Clone returns a copy of the current logger configuration | 返回当前日志配置的副本 +func (c *LoggerConfig) Clone() *LoggerConfig { + if c == nil { + return &LoggerConfig{} + } + copyCfg := *c + return ©Cfg +} diff --git a/core/config/config_pool.go b/core/config/config_pool.go new file mode 100644 index 0000000..6b1c208 --- /dev/null +++ b/core/config/config_pool.go @@ -0,0 +1,127 @@ +// @Author daixk 2025/12/12 11:21:00 +package config + +import ( + "errors" + "time" +) + +// RenewPoolConfig configuration for the renewal pool manager | 续期池配置 +type RenewPoolConfig struct { + MinSize int // Minimum pool size | 最小协程数 + MaxSize int // Maximum pool size | 最大协程数 + ScaleUpRate float64 // Scale-up threshold | 扩容阈值 + ScaleDownRate float64 // Scale-down threshold | 缩容阈值 + CheckInterval time.Duration // Auto-scale check interval | 检查间隔 + Expiry time.Duration // Idle worker expiry duration | 空闲协程过期时间 + PrintStatusInterval time.Duration // Interval for periodic status printing (0 = disabled) | 定时打印池状态的间隔(0表示关闭) + PreAlloc bool // Whether to pre-allocate memory | 是否预分配内存 + NonBlocking bool // Whether to use non-blocking mode | 是否为非阻塞模式 +} + +// DefaultRenewPoolConfig returns default renew pool config | 返回默认续期池配置 +func DefaultRenewPoolConfig() *RenewPoolConfig { + return &RenewPoolConfig{ + MinSize: DefaultMinSize, + MaxSize: DefaultMaxSize, + ScaleUpRate: DefaultScaleUpRate, + ScaleDownRate: DefaultScaleDownRate, + CheckInterval: DefaultCheckInterval, + Expiry: DefaultExpiry, + PreAlloc: false, + NonBlocking: true, + } +} + +// Validate validates renew pool configuration | 验证续期池配置合法性 +func (c *RenewPoolConfig) Validate() error { + if c == nil { + return nil // Nil config is allowed | 允许未配置续期池 + } + + if c.MinSize <= 0 { + return errors.New("RenewPoolConfig.MinSize must be > 0") + } + if c.MaxSize < c.MinSize { + return errors.New("RenewPoolConfig.MaxSize must be >= RenewPoolConfig.MinSize") + } + + if c.ScaleUpRate <= 0 || c.ScaleUpRate > 1 { + return errors.New("RenewPoolConfig.ScaleUpRate must be between 0 and 1") + } + if c.ScaleDownRate < 0 || c.ScaleDownRate > 1 { + return errors.New("RenewPoolConfig.ScaleDownRate must be between 0 and 1") + } + + if c.CheckInterval <= 0 { + return errors.New("RenewPoolConfig.CheckInterval must be a positive duration") + } + if c.Expiry <= 0 { + return errors.New("RenewPoolConfig.Expiry must be a positive duration") + } + + return nil +} + +// Clone returns a deep copy of the renew pool config | 克隆续期池配置 +func (c *RenewPoolConfig) Clone() *RenewPoolConfig { + if c == nil { + return nil + } + copyCfg := *c + return ©Cfg +} + +// SetMinSize sets minimum pool size | 设置最小协程数 +func (c *RenewPoolConfig) SetMinSize(size int) *RenewPoolConfig { + c.MinSize = size + return c +} + +// SetMaxSize sets maximum pool size | 设置最大协程数 +func (c *RenewPoolConfig) SetMaxSize(size int) *RenewPoolConfig { + c.MaxSize = size + return c +} + +// SetScaleUpRate sets scale-up threshold | 设置扩容阈值 +func (c *RenewPoolConfig) SetScaleUpRate(up float64) *RenewPoolConfig { + c.ScaleUpRate = up + return c +} + +// SetScaleDownRate sets scale-down threshold | 设置缩容阈值 +func (c *RenewPoolConfig) SetScaleDownRate(down float64) *RenewPoolConfig { + c.ScaleDownRate = down + return c +} + +// SetCheckInterval sets auto-scaling check interval | 设置检查间隔 +func (c *RenewPoolConfig) SetCheckInterval(interval time.Duration) *RenewPoolConfig { + c.CheckInterval = interval + return c +} + +// SetExpiry sets worker expiry duration | 设置空闲协程过期时间 +func (c *RenewPoolConfig) SetExpiry(expiry time.Duration) *RenewPoolConfig { + c.Expiry = expiry + return c +} + +// SetPrintStatusInterval sets status print interval | 设置打印状态的间隔 +func (c *RenewPoolConfig) SetPrintStatusInterval(interval time.Duration) *RenewPoolConfig { + c.PrintStatusInterval = interval + return c +} + +// SetPreAlloc sets pre-allocation flag | 设置是否预分配内存 +func (c *RenewPoolConfig) SetPreAlloc(prealloc bool) *RenewPoolConfig { + c.PreAlloc = prealloc + return c +} + +// SetNonBlocking sets non-blocking mode | 设置是否非阻塞模式 +func (c *RenewPoolConfig) SetNonBlocking(nonblocking bool) *RenewPoolConfig { + c.NonBlocking = nonblocking + return c +} diff --git a/core/config/config_test.go b/core/config/config_test.go deleted file mode 100644 index e87fb14..0000000 --- a/core/config/config_test.go +++ /dev/null @@ -1,195 +0,0 @@ -// @Author daixk 2025/12/6 16:47:00 -package config - -//import ( -// "github.com/click33/sa-token-go/core/pool" -// "github.com/stretchr/testify/assert" -// "testing" -// "time" -//) -// -//// TestDefaultConfig verifies that DefaultConfig returns a valid configuration | 验证 DefaultConfig 返回的配置是否合法 -//func TestDefaultConfig(t *testing.T) { -// cfg := DefaultConfig() -// assert.NotNil(t, cfg) -// assert.Equal(t, DefaultTokenName, cfg.TokenName) -// assert.Equal(t, DefaultKeyPrefix, cfg.KeyPrefix) -// assert.True(t, cfg.TokenStyle.IsValid()) -// -// err := cfg.Validate() -// assert.NoError(t, err) -//} -// -//// TestInvalidTokenStyle checks invalid TokenStyle detection | 检查无效 TokenStyle 的检测 -//func TestInvalidTokenStyle(t *testing.T) { -// cfg := DefaultConfig() -// cfg.TokenStyle = "invalid-style" -// err := cfg.Validate() -// assert.Error(t, err) -// assert.Contains(t, err.Error(), "invalid TokenStyle") -//} -// -//// TestJwtSecretKeyValidation checks that JWT style requires secret key | 检查 JWT 风格必须设置密钥 -//func TestJwtSecretKeyValidation(t *testing.T) { -// cfg := DefaultConfig() -// cfg.TokenStyle = TokenStyleJWT -// cfg.JwtSecretKey = "" -// err := cfg.Validate() -// assert.Error(t, err) -// assert.Contains(t, err.Error(), "JwtSecretKey is required") -//} -// -//// TestNumericLimitValidation checks NoLimit and invalid numeric values | 检查数值字段 NoLimit 与非法值 -//func TestNumericLimitValidation(t *testing.T) { -// cfg := DefaultConfig() -// cfg.Timeout = 0 // invalid -// err := cfg.Validate() -// assert.Error(t, err) -// assert.Contains(t, err.Error(), "Timeout") -// -// cfg.Timeout = NoLimit -// cfg.MaxRefresh = 10 -// cfg.RenewInterval = 5 -// err = cfg.Validate() -// assert.NoError(t, err) -//} -// -//// TestCookieValidation checks cookie path and samesite validation | 检查 Cookie 路径与 SameSite 校验 -//func TestCookieValidation(t *testing.T) { -// cfg := DefaultConfig() -// cfg.CookieConfig.Path = "" -// err := cfg.Validate() -// assert.Error(t, err) -// assert.Contains(t, err.Error(), "CookieConfig.Path") -// -// cfg.CookieConfig.Path = "/" -// cfg.CookieConfig.SameSite = "Invalid" -// err = cfg.Validate() -// assert.Error(t, err) -// assert.Contains(t, err.Error(), "invalid CookieConfig.SameSite") -//} -// -//// TestRenewPoolValidation checks renew pool config validation | 检查续期池配置验证逻辑 -//func TestRenewPoolValidation(t *testing.T) { -// cfg := DefaultConfig() -// poolCfg := pool.DefaultRenewPoolConfig() -// poolCfg.MinSize = 0 -// cfg.RenewPoolConfig = poolCfg -// err := cfg.Validate() -// assert.Error(t, err) -// assert.Contains(t, err.Error(), "must be > 0") -// -// poolCfg.MinSize = 1 -// poolCfg.MaxSize = 0 -// cfg.RenewPoolConfig = poolCfg -// err = cfg.Validate() -// assert.Error(t, err) -// assert.Contains(t, err.Error(), "must be >=") -// -// poolCfg.MaxSize = 10 -// poolCfg.ScaleUpRate = 2 -// cfg.RenewPoolConfig = poolCfg -// err = cfg.Validate() -// assert.Error(t, err) -// assert.Contains(t, err.Error(), "ScaleUpRate") -// -// poolCfg.ScaleUpRate = 0.5 -// poolCfg.ScaleDownRate = -0.2 -// cfg.RenewPoolConfig = poolCfg -// err = cfg.Validate() -// assert.Error(t, err) -// assert.Contains(t, err.Error(), "ScaleDownRate") -// -// poolCfg.ScaleDownRate = 0.5 -// poolCfg.CheckInterval = 0 -// cfg.RenewPoolConfig = poolCfg -// err = cfg.Validate() -// assert.Error(t, err) -// assert.Contains(t, err.Error(), "CheckInterval") -// -// poolCfg.CheckInterval = 5 * time.Second -// poolCfg.Expiry = 0 -// cfg.RenewPoolConfig = poolCfg -// err = cfg.Validate() -// assert.Error(t, err) -// assert.Contains(t, err.Error(), "Expiry") -// -// // Valid pool config -// poolCfg.Expiry = 10 * time.Second -// cfg.RenewPoolConfig = poolCfg -// err = cfg.Validate() -// assert.NoError(t, err) -//} -// -//// TestKeyPrefixValidation checks key prefix length and whitespace | 检查 KeyPrefix 长度与空白字符 -//func TestKeyPrefixValidation(t *testing.T) { -// cfg := DefaultConfig() -// -// cfg.KeyPrefix = "with space " -// err := cfg.Validate() -// assert.Error(t, err) -// assert.Contains(t, err.Error(), "whitespace") -// -// longPrefix := make([]byte, 70) -// for i := range longPrefix { -// longPrefix[i] = 'a' -// } -// cfg.KeyPrefix = string(longPrefix) -// err = cfg.Validate() -// assert.Error(t, err) -// assert.Contains(t, err.Error(), "too long") -//} -// -//// TestClone verifies deep copy behavior | 验证 Clone 的深拷贝行为 -//func TestClone(t *testing.T) { -// cfg := DefaultConfig() -// clone := cfg.Clone() -// assert.Equal(t, cfg.TokenName, clone.TokenName) -// -// // Modify original cookie -// cfg.CookieConfig.Path = "/changed" -// assert.NotEqual(t, cfg.CookieConfig.Path, clone.CookieConfig.Path) -// -// // Modify renew pool -// cfg.RenewPoolConfig.MinSize = 99 -// assert.NotEqual(t, cfg.RenewPoolConfig.MinSize, clone.RenewPoolConfig.MinSize) -//} -// -//// TestSetters verifies chainable setter behavior | 验证所有 setter 的链式调用行为 -//func TestSetters(t *testing.T) { -// cfg := DefaultConfig(). -// SetTokenName("mytoken"). -// SetTimeout(100). -// SetMaxRefresh(50). -// SetRenewInterval(10). -// SetActiveTimeout(5). -// SetIsConcurrent(false). -// SetIsShare(false). -// SetMaxLoginCount(2). -// SetIsReadBody(true). -// SetIsReadHeader(false). -// SetIsReadCookie(true). -// SetTokenStyle(TokenStyleRandom64). -// SetTokenSessionCheckLogin(false). -// SetJwtSecretKey("secret"). -// SetAutoRenew(false). -// SetIsLog(true). -// SetIsPrintBanner(false). -// SetKeyPrefix("prefix:") -// -// assert.Equal(t, "mytoken", cfg.TokenName) -// assert.Equal(t, int64(100), cfg.Timeout) -// assert.Equal(t, TokenStyleRandom64, cfg.TokenStyle) -// assert.Equal(t, false, cfg.IsConcurrent) -// assert.Equal(t, "prefix:", cfg.KeyPrefix) -//} -// -//// TestAdjustMaxRefresh verifies automatic adjustment of MaxRefresh | 验证 MaxRefresh 自动调整逻辑 -//func TestAdjustMaxRefresh(t *testing.T) { -// cfg := DefaultConfig() -// cfg.Timeout = 10 -// cfg.MaxRefresh = 100 -// err := cfg.Validate() -// assert.NoError(t, err) -// assert.Equal(t, int64(5), cfg.MaxRefresh) // adjusted to Timeout/2 -//} diff --git a/core/config/consts.go b/core/config/consts.go index 06f3dce..c244d7b 100644 --- a/core/config/consts.go +++ b/core/config/consts.go @@ -1,6 +1,13 @@ // @Author daixk 2025/12/7 15:34:00 package config +import "time" + +const ( + CtxAutoType = "CtxAutoType" + CtxTokenValue = "CtxTokenValue" +) + // TokenStyle Token generation style | Token生成风格 type TokenStyle string @@ -46,9 +53,37 @@ const ( DefaultMaxLoginCount = 12 // Maximum concurrent logins | 最大并发登录数 DefaultCookiePath = "/" // Default cookie path | 默认Cookie路径 NoLimit = -1 // No limit flag | 不限制标志 + DefaultJwtSecretKey = "" ) +// LogLevel defines severity level | 日志级别定义 +type LogLevel int + const ( - CtxAutoType = "SaTokenCtxAutoType" - CtxTokenValue = "CtxTokenValue" + LevelDebug LogLevel = iota + 1 // Debug level | 调试级别 + LevelInfo // Info level | 信息级别 + LevelWarn // Warn level | 警告级别 + LevelError // Error level | 错误级别(最高) +) + +const ( + DefaultPrefix = "[SA-TOKEN-GO] " // Default log prefix | 默认日志前缀 + DefaultFileFormat = "SA-TOKEN-GO_{Y}-{m}-{d}.log" // Default log filename format | 默认文件命名格式 + DefaultTimeFormat = "2006-01-02 15:04:05" // Default time format | 默认时间格式 + DefaultDirName = "sa_token_go_logs" // Default log directory name | 默认日志目录名 + DefaultBaseName = "SA-TOKEN-GO" // Default log filename prefix | 默认日志文件基础前缀 + DefaultRotateSize = 10 * 1024 * 1024 // Rotate threshold (10MB) | 文件滚动大小阈值 + DefaultRotateExpire = 24 * time.Hour // Rotate by time interval (1 day) | 时间滚动间隔 + DefaultRotateBackupLimit = 10 // Max number of backups | 最大备份数量 + DefaultRotateBackupDays = 7 // Retain logs for 7 days | 备份保留天数 +) + +// Default configuration constants | 默认配置常量 +const ( + DefaultMinSize = 100 // Minimum pool size | 最小协程数 + DefaultMaxSize = 2000 // Maximum pool size | 最大协程数 + DefaultScaleUpRate = 0.8 // Scale-up threshold | 扩容阈值 + DefaultScaleDownRate = 0.3 // Scale-down threshold | 缩容阈值 + DefaultCheckInterval = time.Minute // Interval for auto-scaling checks | 检查间隔 + DefaultExpiry = 10 * time.Second // Idle worker expiry duration | 空闲协程过期时间 ) diff --git a/core/dep/adapter.go b/core/dep/adapter.go new file mode 100644 index 0000000..693efa0 --- /dev/null +++ b/core/dep/adapter.go @@ -0,0 +1,20 @@ +// @Author daixk 2025/12/14 21:11:00 +package dep + +import "github.com/click33/sa-token-go/core/adapter" + +type LoggerProvider interface { + Logger() adapter.Log +} + +type StorageProvider interface { + Storage() adapter.Storage +} + +type SerializerProvider interface { + Serializer() adapter.Codec +} + +type PoolProvider interface { + Pool() adapter.Pool +} diff --git a/core/dep/dep.go b/core/dep/dep.go index 9ec0afe..876cdd5 100644 --- a/core/dep/dep.go +++ b/core/dep/dep.go @@ -1,84 +1,120 @@ // @Author daixk 2025/12/7 19:53:00 package dep -import ( - "errors" - "github.com/click33/sa-token-go/core/codec" - "github.com/click33/sa-token-go/core/log" -) - -// Dep Dependency manager containing serializer and logger | 依赖管理器,包含序列化和日志记录器 -type Dep struct { - serializer codec.Adapter // Codec adapter for encoding and decoding operations | 编解码器适配器 - logger log.Adapter // Log adapter for logging operations | 日志适配器 -} - -// NewDep Creates a new Dep instance | 创建一个新的 Dep 实例 -func NewDep(serializer codec.Adapter, logger log.Adapter) (*Dep, error) { - if serializer == nil { - return nil, errors.New("serializer cannot be nil") // Serializer cannot be nil | 序列化器不能为空 - } - if logger == nil { - return nil, errors.New("logger cannot be nil") // Logger cannot be nil | 日志实现不能为空 - } - return &Dep{ - serializer: serializer, - logger: logger, - }, nil -} - -// NewDefaultDep Creates a new Dep instance with default values | 创建一个默认赋值的 Dep 实例 -func NewDefaultDep(serializer codec.Adapter, logger log.Adapter) *Dep { - if serializer == nil { - serializer = codec.GetDefaultSerializer() // Default serializer | 默认的序列化器 - } - if logger == nil { - logger = log.GetDefaultLogger() // Default logger | 默认的日志适配器 - } - return &Dep{ - serializer: codec.GetDefaultSerializer(), - logger: log.GetDefaultLogger(), - } -} - -// SetSerializer Set a new codec serializer | 设置新的编解码器 -func (d *Dep) SetSerializer(serializer codec.Adapter) { - if serializer == nil { - serializer = codec.GetDefaultSerializer() // Default serializer | 默认的序列化器 - } - d.serializer = serializer -} - -// SetLogger Set a new log adapter | 设置新的日志适配器 -func (d *Dep) SetLogger(logger log.Adapter) { - if logger == nil { - logger = log.GetDefaultLogger() // Default logger | 默认的日志适配器 - } - d.logger = logger -} - -// GetSerializer Get the current codec serializer | 获取当前的编解码器 -func (d *Dep) GetSerializer() codec.Adapter { - return d.serializer -} - -// GetLogger Get the current log adapter | 获取当前的日志适配器 -func (d *Dep) GetLogger() log.Adapter { - return d.logger -} - -// ResetSerializer Reset the serializer to default | 重置序列化器为默认 -func (d *Dep) ResetSerializer() { - d.serializer = codec.GetDefaultSerializer() // Reset to default serializer | 重置为默认序列化器 -} - -// ResetLogger Reset the log adapter to default | 重置日志适配器为默认 -func (d *Dep) ResetLogger() { - d.logger = log.GetDefaultLogger() // Reset to default log adapter | 重置为默认日志适配器 -} - -// Clear Clears the current serializer and log adapter | 清空当前序列化器和日志适配器 -func (d *Dep) Clear() { - d.serializer = nil // Clear the serializer | 清空序列化器 - d.logger = nil // Clear the log adapter | 清空日志适配器 -} +//import ( +// "errors" +// +// codec_json "github.com/click33/sa-token-go/codec/json" +// "github.com/click33/sa-token-go/core/adapter" +// "github.com/click33/sa-token-go/log/nop" +// "github.com/click33/sa-token-go/pool/ants" +// "github.com/click33/sa-token-go/storage/memory" +//) +// +//// Dep Dependency manager containing serializer, logger, storage and pool | 依赖管理器,包含序列化器、日志器、存储适配器和协程池组件 +//type Dep struct { +// storage adapter.Storage // Storage adapter (Redis, Memory, etc.) | 存储适配器(如 Redis、Memory) +// serializer adapter.Codec // Codec adapter for encoding and decoding operations | 编解码器适配器 +// logger adapter.Log // Log adapter for logging operations | 日志适配器 +// pool adapter.Pool // Async task pool component | 异步任务协程池组件 +//} +// +//// NewDep Creates a new Dep instance with strict parameter checking | 创建一个 Dep 实例(严格校验参数) +//func NewDep(serializer adapter.Codec, logger adapter.Log, storage adapter.Storage, pool adapter.Pool) (*Dep, error) { +// if serializer == nil { +// return nil, errors.New("serializer cannot be nil") // Serializer cannot be nil | 序列化器不能为空 +// } +// if logger == nil { +// return nil, errors.New("logger cannot be nil") // Logger cannot be nil | 日志实现不能为空 +// } +// if storage == nil { +// return nil, errors.New("storage cannot be nil") // Storage cannot be nil | 存储实现不能为空 +// } +// +// return &Dep{ +// serializer: serializer, +// logger: logger, +// storage: storage, +// pool: pool, +// }, nil +//} +// +//// NewDefaultDep Creates a new Dep instance with default implementations | 创建一个使用默认实现的 Dep 实例 +//func NewDefaultDep() *Dep { +// return &Dep{ +// serializer: codec_json.NewJSONSerializer(), +// logger: nop.NewNopLogger(), +// storage: memory.NewStorage(), +// pool: ants.NewRenewPoolManagerWithDefaultConfig(), +// } +//} +// +//func (d *Dep) SetSerializer(serializer adapter.Codec) { +// if serializer == nil { +// serializer = codec_json.NewJSONSerializer() +// } +// d.serializer = serializer +//} +// +//func (d *Dep) GetSerializer() adapter.Codec { +// return d.serializer +//} +// +//func (d *Dep) ResetSerializer() { +// d.serializer = codec_json.NewJSONSerializer() +//} +// +//func (d *Dep) SetLogger(logger adapter.Log) { +// if logger == nil { +// logger = nop.NewNopLogger() +// } +// d.logger = logger +//} +// +//func (d *Dep) GetLogger() adapter.Log { +// return d.logger +//} +// +//func (d *Dep) ResetLogger() { +// d.logger = nop.NewNopLogger() +//} +// +//func (d *Dep) SetStorage(storage adapter.Storage) { +// if storage == nil { +// storage = memory.NewStorage() +// } +// d.storage = storage +//} +// +//func (d *Dep) GetStorage() adapter.Storage { +// return d.storage +//} +// +//func (d *Dep) ResetStorage() { +// d.storage = memory.NewStorage() +//} +// +//func (d *Dep) SetPool(pool adapter.Pool) { +// d.pool = pool // pool 允许为 nil +//} +// +//func (d *Dep) GetPool() adapter.Pool { +// return d.pool +//} +// +//func (d *Dep) ResetPool() { +// d.pool = nil +//} +// +//// ResetAll resets all dependencies to default | 重置所有依赖 +//func (d *Dep) ResetAll() { +// d.serializer = codec_json.NewJSONSerializer() +// d.logger = nop.NewNopLogger() +// d.storage = memory.NewStorage() +// d.pool = nil +//} +// +//func (d *Dep) Logger() adapter.Log { return d.logger } +//func (d *Dep) Storage() adapter.Storage { return d.storage } +//func (d *Dep) Serializer() adapter.Codec { return d.serializer } +//func (d *Dep) Pool() adapter.Pool { return d.pool } diff --git a/core/go.mod b/core/go.mod index e12e892..d3197cf 100644 --- a/core/go.mod +++ b/core/go.mod @@ -5,15 +5,4 @@ go 1.23.0 require ( github.com/golang-jwt/jwt/v5 v5.2.2 github.com/google/uuid v1.6.0 - github.com/panjf2000/ants/v2 v2.11.3 - github.com/stretchr/testify v1.11.1 - github.com/vmihailenco/msgpack/v5 v5.4.1 -) - -require ( - github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect - golang.org/x/sync v0.16.0 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect -) +) \ No newline at end of file diff --git a/core/listener/consts.go b/core/listener/consts.go new file mode 100644 index 0000000..8028570 --- /dev/null +++ b/core/listener/consts.go @@ -0,0 +1,43 @@ +// @Author daixk 2025/12/14 20:49:00 +package listener + +// Event represents the type of authentication event | 认证事件类型 +type Event string + +const ( + // EventLogin fired when a user logs in | 用户登录事件 + EventLogin Event = "login" + + // EventLogout fired when a user logs out | 用户登出事件 + EventLogout Event = "logout" + + // EventKickout fired when a user is forcibly logged out | 用户被踢下线事件 + EventKickout Event = "kickout" + + // EventReplace fired when a user is replaced by a new login | 用户被顶下线事件 + EventReplace Event = "replace" + + // EventDisable fired when an account is disabled | 账号被禁用事件 + EventDisable Event = "disable" + + // EventUntie fired when an account is re-enabled | 账号解禁事件 + EventUntie Event = "untie" + + // EventRenew fired when a token is renewed | Token续期事件 + EventRenew Event = "renew" + + // EventCreateSession fired when a new session is created | Session创建事件 + EventCreateSession Event = "createSession" + + // EventDestroySession fired when a session is destroyed | Session销毁事件 + EventDestroySession Event = "destroySession" + + // EventPermissionCheck fired when a permission check is performed | 权限检查事件 + EventPermissionCheck Event = "permissionCheck" + + // EventRoleCheck fired when a role check is performed | 角色检查事件 + EventRoleCheck Event = "roleCheck" + + // EventAll is a wildcard event that matches all events | 通配符事件(匹配所有事件) + EventAll Event = "*" +) diff --git a/core/listener/listener.go b/core/listener/listener.go index 30c40cf..74e8896 100644 --- a/core/listener/listener.go +++ b/core/listener/listener.go @@ -2,53 +2,12 @@ package listener import ( "fmt" - "github.com/click33/sa-token-go/core/config" - "github.com/click33/sa-token-go/core/dep" + "github.com/click33/sa-token-go/core/adapter" + "github.com/click33/sa-token-go/log/nop" "sync" "time" ) -// Event represents the type of authentication event | 认证事件类型 -type Event string - -const ( - // EventLogin fired when a user logs in | 用户登录事件 - EventLogin Event = "login" - - // EventLogout fired when a user logs out | 用户登出事件 - EventLogout Event = "logout" - - // EventKickout fired when a user is forcibly logged out | 用户被踢下线事件 - EventKickout Event = "kickout" - - // EventReplace fired when a user is replaced by a new login | 用户被顶下线事件 - EventReplace Event = "replace" - - // EventDisable fired when an account is disabled | 账号被禁用事件 - EventDisable Event = "disable" - - // EventUntie fired when an account is re-enabled | 账号解禁事件 - EventUntie Event = "untie" - - // EventRenew fired when a token is renewed | Token续期事件 - EventRenew Event = "renew" - - // EventCreateSession fired when a new session is created | Session创建事件 - EventCreateSession Event = "createSession" - - // EventDestroySession fired when a session is destroyed | Session销毁事件 - EventDestroySession Event = "destroySession" - - // EventPermissionCheck fired when a permission check is performed | 权限检查事件 - EventPermissionCheck Event = "permissionCheck" - - // EventRoleCheck fired when a role check is performed | 角色检查事件 - EventRoleCheck Event = "roleCheck" - - // EventAll is a wildcard event that matches all events | 通配符事件(匹配所有事件) - EventAll Event = "*" -) - // EventData contains information about a triggered event | 事件数据,包含触发事件的相关信息 type EventData struct { Event Event // Event type | 事件类型 @@ -84,7 +43,7 @@ func (f ListenerFunc) OnEvent(data *EventData) { // ListenerConfig holds configuration for a registered listener | 监听器配置 type ListenerConfig struct { Async bool // If true, listener runs asynchronously | 如果为true,监听器异步运行 - Priority int // Higher priority listeners are called first (default: 0) | 优先级越高越先执行(默认:0) + Priority int // Higher priority listeners are called first (log: 0) | 优先级越高越先执行(默认:0) ID string // Unique identifier for this listener (for unregistering) | 监听器唯一标识(用于注销) } @@ -114,26 +73,40 @@ type Manager struct { filters []EventFilter // Global event filters | 全局事件过滤器 stats *EventStats // Event statistics | 事件统计 enableStats bool // Whether to collect statistics | 是否收集统计信息 - globalConfig *config.Config // Global authentication configuration | 全局认证配置 - deps *dep.Dep // Dependencies manager | 依赖管理器 + logger adapter.Log // Log adapter for logging operations | 日志适配器 } // NewManager creates a new event manager | 创建新的事件管理器 -func NewManager() *Manager { - return &Manager{ - listeners: make(map[Event][]listenerEntry), - panicHandler: func(event Event, data *EventData, recovered any) { - // Default panic handler: log but don't crash | 默认panic处理器:记录日志但不崩溃 - fmt.Printf("sa-token: listener panic recovered: event=%s, panic=%v\n", event, recovered) - }, - enabledEvents: nil, // All events enabled by default | 默认启用所有事件 +func NewManager(loggers ...adapter.Log) *Manager { + var logger adapter.Log + + if len(loggers) > 0 && loggers[0] != nil { + logger = loggers[0] + } else { + logger = nop.NewNopLogger() + } + + m := &Manager{ + listeners: make(map[Event][]listenerEntry), + enabledEvents: nil, // All events enabled by log | 默认启用所有事件 filters: make([]EventFilter, 0), stats: &EventStats{ EventCounts: make(map[Event]int64), LastTriggered: make(map[Event]time.Time), }, - enableStats: false, // Stats disabled by default | 默认不启用统计 + enableStats: false, // Stats disabled by log | 默认不启用统计 + logger: logger, } + + // panicHandler 绑定“已经确定好的 logger” + m.panicHandler = func(event Event, data *EventData, recovered any) { + logger.Errorf( + "listener panic recovered: event=%s, panic=%v", + event, recovered, + ) + } + + return m } // SetPanicHandler sets a custom panic handler for listener errors | 设置自定义的panic处理器 @@ -242,7 +215,7 @@ func (m *Manager) IsEventEnabled(event Event) bool { return m.enabledEvents[event] || m.enabledEvents[EventAll] } -// Register registers a listener for an event with default configuration +// Register registers a listener for an event with log configuration func (m *Manager) Register(event Event, listener Listener) string { return m.RegisterWithConfig(event, listener, ListenerConfig{ Async: true, @@ -278,7 +251,7 @@ func (m *Manager) RegisterWithConfig(event Event, listener Listener, config List return config.ID } -// RegisterFunc registers a function listener with default configuration +// RegisterFunc registers a function listener with log configuration func (m *Manager) RegisterFunc(event Event, handler func(data *EventData)) string { return m.Register(event, ListenerFunc(handler)) } diff --git a/core/log/log.go b/core/log/log.go deleted file mode 100644 index a3f588e..0000000 --- a/core/log/log.go +++ /dev/null @@ -1,51 +0,0 @@ -// @Author daixk 2025/11/27 21:11:00 -package log - -import ( - "sync/atomic" -) - -// loggerHolder wraps Adapter to ensure atomic.Value type consistency | 包装 Adapter 以确保 atomic.Value 类型一致性 -type loggerHolder struct { - l Adapter -} - -// using atomic.Value for lock-free fast read | 使用 atomic.Value 实现无锁快速读取 -var defaultLogger atomic.Value - -func init() { - // 初始化为 NopLogger,确保类型一致:loggerHolder - defaultLogger.Store(loggerHolder{l: &NopLogger{}}) -} - -// SetDefaultLogger sets the default logger | 设置默认日志器 -func SetDefaultLogger(l Adapter) { - if l == nil { - return - } - - // atomic 替换,但存的是结构体 loggerHolder,类型始终一致 - defaultLogger.Store(loggerHolder{l: l}) -} - -// GetDefaultLogger returns the logger | 获取当前日志器 -func GetDefaultLogger() Adapter { - return defaultLogger.Load().(loggerHolder).l -} - -// -------------------- Global Logging APIs -------------------- - -func Print(v ...any) { GetDefaultLogger().Print(v...) } -func Printf(format string, v ...any) { GetDefaultLogger().Printf(format, v...) } - -func Debug(v ...any) { GetDefaultLogger().Debug(v...) } -func Debugf(format string, v ...any) { GetDefaultLogger().Debugf(format, v...) } - -func Info(v ...any) { GetDefaultLogger().Info(v...) } -func Infof(format string, v ...any) { GetDefaultLogger().Infof(format, v...) } - -func Warn(v ...any) { GetDefaultLogger().Warn(v...) } -func Warnf(format string, v ...any) { GetDefaultLogger().Warnf(format, v...) } - -func Error(v ...any) { GetDefaultLogger().Error(v...) } -func Errorf(format string, v ...any) { GetDefaultLogger().Errorf(format, v...) } diff --git a/core/log/log_adaper.go b/core/log/log_adaper.go deleted file mode 100644 index c964233..0000000 --- a/core/log/log_adaper.go +++ /dev/null @@ -1,27 +0,0 @@ -package log - -// Adapter defines core logging methods | 核心日志输出接口 -type Adapter interface { - Print(v ...any) // Print general log | 普通日志打印 - Printf(format string, v ...any) // Print formatted general log | 普通日志格式化打印 - - Debug(v ...any) // Print debug level log | 调试级别日志 - Debugf(format string, v ...any) // Print formatted debug log | 调试级别格式化日志 - - Info(v ...any) // Print info level log | 信息级别日志 - Infof(format string, v ...any) // Print formatted info log | 信息级别格式化日志 - - Warn(v ...any) // Print warning level log | 警告级别日志 - Warnf(format string, v ...any) // Print formatted warning log | 警告级别格式化日志 - - Error(v ...any) // Print error level log | 错误级别日志 - Errorf(format string, v ...any) // Print formatted error log | 错误级别格式化日志 -} - -// AdapterControl defines log configuration methods | 日志控制接口(用于配置级别、前缀、输出等) -type AdapterControl interface { - SetLevel(level LogLevel) // Set minimum log level | 设置最小输出级别 - SetPrefix(prefix string) // Set log prefix | 设置日志前缀 - SetStdout(enable bool) // Enable/disable console output | 设置终端输出开关 - Close() // Close current file handle | 关闭当前日志文件 -} diff --git a/core/log/log_adaper_gf.go b/core/log/log_adaper_gf.go deleted file mode 100644 index c5c49b7..0000000 --- a/core/log/log_adaper_gf.go +++ /dev/null @@ -1,73 +0,0 @@ -// @Author daixk 2025/11/27 22:58:00 -package log - -//import ( -// "context" -// "github.com/gogf/gf/v2/os/glog" -//) -// -//// GFLogger adapts GoFrame v2 glog.Logger to Sa-Token logger interface | GoFrame v2 glog 适配器 -//type GFLogger struct { -// l *glog.Logger -// ctx context.Context -//} -// -//// NewGFLogger creates a logger based on GoFrame v2 glog | 创建基于 GoFrame v2 glog 的日志器 -//func NewGFLogger(l *glog.Logger) Adapter { -// if l == nil { -// l = glog.New() -// } -// return &GFLogger{ -// l: l, -// ctx: context.Background(), -// } -//} -// -//// SetContext sets logging context | 设置日志 Context -//func (g *GFLogger) SetContext(ctx context.Context) { -// if ctx != nil { -// g.ctx = ctx -// } -//} -// -//// ---- Implement Adapter Interface | 实现 Adapter 接口 ---- -// -//func (g *GFLogger) Print(v ...any) { -// g.l.Print(g.ctx, v...) -//} -// -//func (g *GFLogger) Printf(format string, v ...any) { -// g.l.Printf(g.ctx, format, v...) -//} -// -//func (g *GFLogger) Debug(v ...any) { -// g.l.Debug(g.ctx, v...) -//} -// -//func (g *GFLogger) Debugf(format string, v ...any) { -// g.l.Debugf(g.ctx, format, v...) -//} -// -//func (g *GFLogger) Info(v ...any) { -// g.l.Info(g.ctx, v...) -//} -// -//func (g *GFLogger) Infof(format string, v ...any) { -// g.l.Infof(g.ctx, format, v...) -//} -// -//func (g *GFLogger) Warn(v ...any) { -// g.l.Warning(g.ctx, v...) -//} -// -//func (g *GFLogger) Warnf(format string, v ...any) { -// g.l.Warningf(g.ctx, format, v...) -//} -// -//func (g *GFLogger) Error(v ...any) { -// g.l.Error(g.ctx, v...) -//} -// -//func (g *GFLogger) Errorf(format string, v ...any) { -// g.l.Errorf(g.ctx, format, v...) -//} diff --git a/core/log/log_config.go b/core/log/log_config.go deleted file mode 100644 index da82dff..0000000 --- a/core/log/log_config.go +++ /dev/null @@ -1,162 +0,0 @@ -package log - -import ( - "os" - "path/filepath" - "time" -) - -// LogLevel defines severity level | 日志级别定义 -type LogLevel int - -const ( - LevelDebug LogLevel = iota + 1 // Debug level | 调试级别 - LevelInfo // Info level | 信息级别 - LevelWarn // Warn level | 警告级别 - LevelError // Error level | 错误级别(最高) -) - -const ( - DefaultPrefix = "[SA-TOKEN-GO] " // Default log prefix | 默认日志前缀 - DefaultFileFormat = "SA-TOKEN-GO_{Y}-{m}-{d}.log" // Default log filename format | 默认文件命名格式 - DefaultTimeFormat = "2006-01-02 15:04:05" // Default time format | 默认时间格式 - DefaultDirName = "sa_token_go_logs" // Default log directory name | 默认日志目录名 - DefaultBaseName = "SA-TOKEN-GO" // Default log filename prefix | 默认日志文件基础前缀 - DefaultRotateSize = 10 * 1024 * 1024 // Rotate threshold (10MB) | 文件滚动大小阈值 - DefaultRotateExpire = 24 * time.Hour // Rotate by time interval (1 day) | 时间滚动间隔 - DefaultRotateBackupLimit = 10 // Max number of backups | 最大备份数量 - DefaultRotateBackupDays = 7 // Retain logs for 7 days | 备份保留天数 -) - -// LoggerConfig defines configuration for the logger | 日志配置项,定义日志输出的行为、格式和文件管理策略 -type LoggerConfig struct { - Path string // Log directory path | 日志文件目录 - FileFormat string // Log file naming format | 日志文件命名格式 - Prefix string // Log line prefix | 日志前缀 - Level LogLevel // Minimum output level | 最低输出级别 - TimeFormat string // Timestamp format | 时间戳格式 - Stdout bool // Print logs to console | 是否输出到控制台 - RotateSize int64 // File size threshold before rotation (bytes) | 文件滚动大小阈值(字节) - RotateExpire time.Duration // Rotation interval by time duration | 文件时间滚动间隔 - RotateBackupLimit int // Maximum number of rotated backup files | 最大备份文件数量 - RotateBackupDays int // Retention days for old log files | 备份文件保留天数 -} - -// LoggerBuilder provides a fluent interface for building logger instances | 链式日志构建器 -type LoggerBuilder struct { - cfg *LoggerConfig -} - -// NewBuilder creates a new LoggerBuilder with default configuration | 创建一个带默认配置的日志构建器 -func NewBuilder() *LoggerBuilder { - return &LoggerBuilder{ - cfg: &LoggerConfig{ - TimeFormat: DefaultTimeFormat, - FileFormat: DefaultFileFormat, - Prefix: DefaultPrefix, - Level: LevelInfo, - Stdout: true, - RotateSize: DefaultRotateSize, - RotateExpire: DefaultRotateExpire, - RotateBackupLimit: DefaultRotateBackupLimit, - RotateBackupDays: DefaultRotateBackupDays, - }, - } -} - -// Path sets the log output directory | 设置日志输出目录 -func (b *LoggerBuilder) Path(path string) *LoggerBuilder { - b.cfg.Path = path - return b -} - -// FileFormat sets the log file naming format | 设置日志文件命名格式 -func (b *LoggerBuilder) FileFormat(format string) *LoggerBuilder { - b.cfg.FileFormat = format - return b -} - -// Prefix sets the log line prefix | 设置日志输出前缀 -func (b *LoggerBuilder) Prefix(prefix string) *LoggerBuilder { - b.cfg.Prefix = prefix - return b -} - -// Level sets the minimum output log level | 设置日志最低输出级别 -func (b *LoggerBuilder) Level(level LogLevel) *LoggerBuilder { - b.cfg.Level = level - return b -} - -// TimeFormat sets the timestamp format in log lines | 设置日志时间戳格式 -func (b *LoggerBuilder) TimeFormat(format string) *LoggerBuilder { - b.cfg.TimeFormat = format - return b -} - -// Stdout enables or disables console output | 设置是否输出到控制台 -func (b *LoggerBuilder) Stdout(enable bool) *LoggerBuilder { - b.cfg.Stdout = enable - return b -} - -// RotateSize sets the file size threshold for log rotation | 设置日志文件大小滚动阈值 -func (b *LoggerBuilder) RotateSize(size int64) *LoggerBuilder { - b.cfg.RotateSize = size - return b -} - -// RotateExpire sets the time-based rotation interval | 设置时间滚动间隔 -func (b *LoggerBuilder) RotateExpire(d time.Duration) *LoggerBuilder { - b.cfg.RotateExpire = d - return b -} - -// RotateBackupLimit sets the maximum number of backup log files retained | 设置最大备份文件数量 -func (b *LoggerBuilder) RotateBackupLimit(limit int) *LoggerBuilder { - b.cfg.RotateBackupLimit = limit - return b -} - -// RotateBackupDays sets the retention days for backup log files | 设置日志备份保留天数 -func (b *LoggerBuilder) RotateBackupDays(days int) *LoggerBuilder { - b.cfg.RotateBackupDays = days - return b -} - -// Build creates a new Logger instance with the configured options | 构建 Logger 实例,返回错误而不是 panic -func (b *LoggerBuilder) Build() (*Logger, error) { - return NewLoggerWithConfig(b.cloneConfig()) -} - -// BuildMust creates a new Logger instance or panics if creation fails | 构建 Logger 实例(若失败则 panic) -func (b *LoggerBuilder) BuildMust() *Logger { - l, err := NewLoggerWithConfig(b.cloneConfig()) - if err != nil { - panic(err) - } - return l -} - -// cloneConfig returns a safe copy of the builder’s current configuration | 复制当前构建器配置,确保构建过程安全独立 -func (b *LoggerBuilder) cloneConfig() *LoggerConfig { - if b == nil || b.cfg == nil { - return &LoggerConfig{} - } - copyCfg := *b.cfg - return ©Cfg -} - -// ensureDefaultPath ensures the log directory exists; if not set, uses the default path | 确保日志目录存在;如果未设置则使用默认路径 -func ensureDefaultPath(cfg *LoggerConfig) string { - if cfg.Path != "" { - return cfg.Path - } - wd, err := os.Getwd() - if err != nil { - wd = "." - } - path := filepath.Join(wd, DefaultDirName) - _ = os.MkdirAll(path, 0755) - return path -} diff --git a/core/log/log_test.go b/core/log/log_test.go deleted file mode 100644 index a18821e..0000000 --- a/core/log/log_test.go +++ /dev/null @@ -1,313 +0,0 @@ -// @Author daixk 2025/12/6 17:13:00 -package log - -//import ( -// "os" -// "path/filepath" -// "strings" -// "sync" -// "testing" -// "time" -//) -// -//// ---------------- Configuration Tests ---------------- -// -//func TestLoggerBuilderAndConfig(t *testing.T) { -// b := NewBuilder(). -// Path("test_logs"). -// FileFormat("custom_{Y}-{m}-{d}.log"). -// Prefix("[TEST] "). -// Level(LevelDebug). -// TimeFormat("2006-01-02 15:04:05"). -// Stdout(false). -// RotateSize(1024). -// RotateExpire(time.Hour). -// RotateBackupLimit(3). -// RotateBackupDays(1) -// -// logger, err := b.Build() -// if err != nil { -// t.Fatalf("Build() failed: %v", err) -// } -// defer logger.Close() -// -// cfg := logger.currentCfg() -// -// if cfg.Level != LevelDebug { -// t.Errorf("expected LevelDebug, got %v", cfg.Level) -// } -// if !strings.Contains(cfg.FileFormat, "custom_") { -// t.Errorf("FileFormat not set correctly") -// } -// if !strings.Contains(cfg.Prefix, "[TEST]") { -// t.Errorf("Prefix not set correctly") -// } -// -// path := ensureDefaultPath(&cfg) -// if path == "" { -// t.Errorf("ensureDefaultPath returned empty path") -// } -//} -// -//// ---------------- Log Output Tests ---------------- -// -//func TestLoggerOutputToFileAndStdout(t *testing.T) { -// dir, _ := os.Getwd() -// -// logger, err := NewBuilder(). -// Path(dir). -// Prefix("[OUT] "). -// Stdout(true). -// Level(LevelDebug). -// Build() -// if err != nil { -// t.Fatalf("Build() failed: %v", err) -// } -// defer logger.Close() -// -// // 写日志 -// logger.Info("File log test line 1") -// logger.Debugf("File log formatted: %d", 123) -// logger.Warn("File log test line 2") -// -// // 等待异步写入完成 -// time.Sleep(200 * time.Millisecond) -// logger.Flush() -// -// files, err := filepath.Glob(filepath.Join(dir, "*.log")) -// if err != nil || len(files) == 0 { -// t.Fatalf("expected at least one log file, got none: %v", err) -// } -// -// data, err := os.ReadFile(files[0]) -// if err != nil { -// t.Fatalf("failed to read log file: %v", err) -// } -// -// content := string(data) -// if !strings.Contains(content, "[OUT]") { -// t.Errorf("log file missing prefix: %s", content) -// } -// if !strings.Contains(content, "File log test line 1") { -// t.Errorf("log file missing expected content") -// } -//} -// -//// ---------------- Rotation Tests ---------------- -// -//func TestLoggerRotationBySize(t *testing.T) { -// dir, _ := os.Getwd() -// -// logger, err := NewBuilder(). -// Path(dir). -// Prefix("[ROTATE] "). -// RotateSize(512). -// Level(LevelInfo). -// Stdout(false). -// RotateBackupLimit(5). -// Build() -// if err != nil { -// t.Fatalf("Build() failed: %v", err) -// } -// defer logger.Close() -// -// // 连续写日志以触发切分 -// for i := 0; i < 200; i++ { -// logger.Infof("Rotating log line %03d - this should create multiple files", i) -// } -// time.Sleep(300 * time.Millisecond) -// logger.Flush() -// -// files, err := filepath.Glob(filepath.Join(dir, "*.log")) -// if err != nil { -// t.Fatalf("glob failed: %v", err) -// } -// if len(files) < 1 { -// t.Errorf("expected rotated files, got: %v", files) -// } -//} -// -//// ---------------- Global Logger Tests ---------------- -// -//func TestGlobalLogger(t *testing.T) { -// dir, _ := os.Getwd() -// -// l, err := NewBuilder(). -// Path(dir). -// Prefix("[GLOBAL] "). -// Build() -// if err != nil { -// t.Fatalf("Build() failed: %v", err) -// } -// defer l.Close() -// -// SetGlobalLogger(l) -// Info("Global logger test 1") -// Infof("Global formatted: %d", 999) -// -// time.Sleep(100 * time.Millisecond) -// l.Flush() -// -// files, _ := filepath.Glob(filepath.Join(dir, "*.log")) -// if len(files) == 0 { -// t.Fatal("expected global logger to write to file") -// } -// -// data, _ := os.ReadFile(files[0]) -// if !strings.Contains(string(data), "Global logger test 1") { -// t.Errorf("global logger output not found") -// } -//} -// -//// ---------------- NopLogger Tests ---------------- -// -//func TestNopLoggerNoOutput(t *testing.T) { -// n := &NopLogger{} -// n.Info("should not appear") -// n.Debugf("format %d", 42) -// -// // nothing to assert except no panic -//} -// -//// ---------------- Concurrency Tests ---------------- -// -//func TestConcurrentLogging(t *testing.T) { -// dir, _ := os.Getwd() -// logger, err := NewBuilder(). -// Path(dir). -// Prefix("[CONCURRENT] "). -// Build() -// if err != nil { -// t.Fatalf("Build() failed: %v", err) -// } -// defer logger.Close() -// -// var wg sync.WaitGroup -// for i := 0; i < 50; i++ { -// wg.Add(1) -// go func(id int) { -// defer wg.Done() -// for j := 0; j < 100; j++ { -// logger.Infof("goroutine=%d line=%d", id, j) -// } -// }(i) -// } -// wg.Wait() -// logger.Flush() -// -// files, _ := filepath.Glob(filepath.Join(dir, "*.log")) -// if len(files) == 0 { -// t.Fatal("no log files created under concurrent writes") -// } -//} -// -//// ---------------- Benchmark Tests ---------------- -// -//func BenchmarkLogger_Info(b *testing.B) { -// dir, _ := os.Getwd() -// logger, _ := NewBuilder(). -// Path(dir). -// Prefix("[BENCH] "). -// Stdout(false). -// Build() -// defer logger.Close() -// -// b.ResetTimer() -// for i := 0; i < b.N; i++ { -// logger.Info("benchmark log line", i) -// } -//} -// -//func BenchmarkLogger_Concurrent(b *testing.B) { -// dir, _ := os.Getwd() -// logger, _ := NewBuilder(). -// Path(dir). -// Prefix("[BENCH-CONCURRENT] "). -// Stdout(false). -// Build() -// defer logger.Close() -// -// b.ResetTimer() -// b.RunParallel(func(pb *testing.PB) { -// for pb.Next() { -// logger.Infof("parallel log line %d", time.Now().UnixNano()) -// } -// }) -//} -// -//func BenchmarkNopLogger(b *testing.B) { -// n := &NopLogger{} -// b.ResetTimer() -// for i := 0; i < b.N; i++ { -// n.Info("nop log test") -// } -//} -// -//func BenchmarkGlobalLogger(b *testing.B) { -// dir, _ := os.Getwd() -// l, _ := NewBuilder().Path(dir).Stdout(false).Build() -// SetGlobalLogger(l) -// defer l.Close() -// -// b.ResetTimer() -// for i := 0; i < b.N; i++ { -// Infof("benchmark global log line %d", i) -// } -//} -// -//// ---------------- Performance Comparison: Zap & GoFrame ---------------- -// -////// BenchmarkZapLogger compares zap performance with our logger | 对比 zap 日志性能 -////func BenchmarkZapLogger(b *testing.B) { -//// dir, _ := os.Getwd() -//// logPath := filepath.Join(dir, "zap_bench.log") -//// -//// cfg := zap.NewProductionConfig() -//// cfg.OutputPaths = []string{logPath} -//// zapLogger, err := cfg.Build() -//// if err != nil { -//// b.Fatalf("failed to create zap logger: %v", err) -//// } -//// defer zapLogger.Sync() -//// -//// b.ResetTimer() -//// for i := 0; i < b.N; i++ { -//// zapLogger.Info("zap benchmark log", zap.Int("index", i)) -//// } -////} -//// -////// BenchmarkGFLogger compares GoFrame glog performance with our logger | 对比 GoFrame 日志性能 -////func BenchmarkGFLogger(b *testing.B) { -//// ctx := context.Background() -//// dir, _ := os.Getwd() -//// -//// logger := glog.New() -//// logger.SetPath(dir) -//// logger.SetFile("gf_bench.log") -//// logger.SetStdoutPrint(false) -//// logger.SetAsync(true) // 为公平起见,关闭异步写入 -//// -//// b.ResetTimer() -//// for i := 0; i < b.N; i++ { -//// logger.Info(ctx, "gf benchmark log", i) -//// } -////} -//// -////// BenchmarkOurLogger compares our logger performance | 对比自研日志性能 -////func BenchmarkOurLogger(b *testing.B) { -//// dir, _ := os.Getwd() -//// logger, err := NewBuilder(). -//// Path(dir). -//// Prefix("[OUR] "). -//// Stdout(false). -//// Build() -//// if err != nil { -//// b.Fatalf("failed to create our logger: %v", err) -//// } -//// defer logger.Close() -//// -//// b.ResetTimer() -//// for i := 0; i < b.N; i++ { -//// logger.Info("our benchmark log", i) -//// } -////} diff --git a/core/manager/consts.go b/core/manager/consts.go index fbd0efc..f5a4248 100644 --- a/core/manager/consts.go +++ b/core/manager/consts.go @@ -3,9 +3,9 @@ package manager import "time" -// Constants for storage keys and default values | 存储键和默认值常量 +// Constants for storage keys and log values | 存储键和默认值常量 const ( - DefaultDevice = "default" // Default device type | 默认设备类型 + DefaultDevice = "log" // Default device type | 默认设备类型 DefaultPrefix = "satoken" // Default key prefix | 默认键前缀 DisableValue = "1" // Disabled flag value | 被禁用标记值 DefaultRenewValue = "1" // Default renew flag value | 默认续期标记值 diff --git a/core/manager/manager.go b/core/manager/manager.go index 45ada71..e25333e 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -3,14 +3,16 @@ package manager import ( "context" "fmt" + codec_json "github.com/click33/sa-token-go/codec/json" "github.com/click33/sa-token-go/core/dep" "github.com/click33/sa-token-go/core/serror" "github.com/click33/sa-token-go/core/utils" + "github.com/click33/sa-token-go/log/nop" + "github.com/click33/sa-token-go/pool/ants" + "github.com/click33/sa-token-go/storage/memory" "strings" "time" - "github.com/click33/sa-token-go/core/pool" - "github.com/click33/sa-token-go/core/adapter" "github.com/click33/sa-token-go/core/config" "github.com/click33/sa-token-go/core/listener" @@ -32,70 +34,110 @@ type TokenInfo struct { // Manager Authentication manager | 认证管理器 type Manager struct { - prefix string // Key prefix for all storage operations | 所有存储操作使用的键前缀 - authType string // Authentication system type | 认证体系类型 - storage adapter.Storage // Storage adapter (Redis, Memory, etc.) | 存储适配器(例如 Redis、内存) config *config.Config // Global authentication configuration | 全局认证配置 generator *token.Generator // Token generator | Token 生成器 nonceManager *security.NonceManager // Nonce manager for preventing replay attacks | 随机串管理器 refreshManager *security.RefreshTokenManager // Refresh token manager | 刷新令牌管理器 oauth2Server *oauth2.OAuth2Server // OAuth2 authorization server | OAuth2 授权服务器 - renewPool *pool.RenewPoolManager // Token renewal task pool | Token 自动续期的任务池 eventManager *listener.Manager // Event manager | 事件管理器 - deps *dep.Dep // Dependencies manager | 依赖管理器 + + storage adapter.Storage // Storage adapter (Redis, Memory, etc.) | 存储适配器(如 Redis、Memory) + serializer adapter.Codec // Codec adapter for encoding and decoding operations | 编解码器适配器 + logger adapter.Log // Log adapter for logging operations | 日志适配器 + pool adapter.Pool // Async task pool component | 异步任务协程池组件 } -// NewManager Creates a new manager | 创建管理器 -func NewManager(cfg *config.Config, storage adapter.Storage, deps *dep.Dep) *Manager { - // If no configuration is provided, use the default configuration | 如果没有提供配置,使用默认配置 +// NewManager creates and initializes a new Manager instance | 创建并初始化一个新的 Manager 实例 +func NewManager(cfg *config.Config, storage adapter.Storage, serializer adapter.Codec, logger adapter.Log, pool adapter.Pool) *Manager { + + // Use default configuration if cfg is nil | 如果未传入配置,则使用默认配置 if cfg == nil { cfg = config.DefaultConfig() } - // If no dependencies are provided, create a default Dep instance | 如果没有提供依赖管理器,创建默认的 Dep 实例 - if deps == nil { - deps = dep.NewDefaultDep(nil, nil) - } - - // Initialize the renew pool manager if the renew pool configuration is provided | 如果提供了续期池配置,则初始化续期池管理器 - var renewPoolManager *pool.RenewPoolManager - if cfg.RenewPoolConfig != nil { - renewPoolManager, _ = pool.NewRenewPoolManagerWithConfig(&pool.RenewPoolConfig{ - MinSize: cfg.RenewPoolConfig.MinSize, // Minimum pool size | 最小协程数 - MaxSize: cfg.RenewPoolConfig.MaxSize, // Maximum pool size | 最大协程数 - ScaleUpRate: cfg.RenewPoolConfig.ScaleUpRate, // Scale-up threshold | 扩容阈值 - ScaleDownRate: cfg.RenewPoolConfig.ScaleDownRate, // Scale-down threshold | 缩容阈值 - CheckInterval: cfg.RenewPoolConfig.CheckInterval, // Auto-scale check interval | 自动缩放检查间隔 - Expiry: cfg.RenewPoolConfig.Expiry, // Idle worker expiry duration | 空闲协程过期时间 - PrintStatusInterval: cfg.RenewPoolConfig.PrintStatusInterval, // Interval for periodic status printing | 定时打印池状态的间隔 - PreAlloc: cfg.RenewPoolConfig.PreAlloc, // Whether to pre-allocate memory | 是否预分配内存 - NonBlocking: cfg.RenewPoolConfig.NonBlocking, // Whether to use non-blocking mode | 是否为非阻塞模式 - }) + // Use in-memory storage if storage is nil | 如果未传入存储实现,则使用内存存储 + if storage == nil { + storage = memory.NewStorage() + } + + // Use JSON serializer if serializer is nil | 如果未传入序列化器,则使用 JSON 序列化器 + if serializer == nil { + serializer = codec_json.NewJSONSerializer() } - // Return the new manager instance with the initialized components | 返回初始化后的管理器实例 + // Use no-op logger if logger is nil | 如果未传入日志实现,则使用空日志(不输出) + if logger == nil { + logger = nop.NewNopLogger() + } + + // 如果启用了自动续期并且pool为nil + if cfg.AutoRenew && pool == nil { + // Use default goroutine pool if pool is nil | 如果未传入协程池,则使用默认协程池 + pool = ants.NewRenewPoolManagerWithDefaultConfig() + } + + // Initialize token generator based on configuration | 根据配置初始化 Token 生成器 + generator := token.NewGenerator(cfg) + + // Return the new manager instance with initialized sub-managers | 返回已初始化各子模块的管理器实例 return &Manager{ - prefix: cfg.KeyPrefix, - authType: cfg.AuthType, - storage: storage, - config: cfg, - generator: token.NewGenerator(cfg), - nonceManager: security.NewNonceManager(storage, cfg.KeyPrefix, DefaultNonceTTL), - refreshManager: security.NewRefreshTokenManager(storage, cfg.KeyPrefix, TokenKeyPrefix, cfg), - oauth2Server: oauth2.NewOAuth2Server(storage, deps, cfg.KeyPrefix), - eventManager: listener.NewManager(), - renewPool: renewPoolManager, - deps: deps, + // Store global configuration | 保存全局配置 + config: cfg, + + // Token generator used for creating access/refresh tokens | 用于生成访问令牌和刷新令牌的生成器 + generator: generator, + + // Nonce manager for replay-attack protection | 防重放攻击的 Nonce 管理器 + nonceManager: security.NewNonceManager( + cfg.AuthType, + cfg.KeyPrefix, + storage, + DefaultNonceTTL, + ), + + // Refresh token manager for token renewal logic | 刷新令牌管理器,用于令牌续期逻辑 + refreshManager: security.NewRefreshTokenManager( + cfg.AuthType, + cfg.KeyPrefix, + TokenKeyPrefix, + generator, + time.Duration(cfg.Timeout)*time.Second, + storage, + serializer, + ), + + // OAuth2 server for authorization and token exchange | OAuth2 授权与令牌颁发服务 + oauth2Server: oauth2.NewOAuth2Server( + cfg.AuthType, + cfg.KeyPrefix, + storage, + serializer, + ), + + // Event manager for lifecycle and auth events | 生命周期与认证事件管理器 + eventManager: listener.NewManager(logger), + + // Storage adapter for persistence layer | 持久化存储适配器 + storage: storage, + + // Serializer for encoding/decoding data | 数据编解码序列化器 + serializer: serializer, + + // Logger for internal logging | 内部日志记录器 + logger: logger, + + // Goroutine pool for async task execution | 用于异步任务执行的协程池 + pool: pool, } } // CloseManager Closes the manager and releases all resources | 关闭管理器并释放所有资源 func (m *Manager) CloseManager() { - if m.renewPool != nil { + if m.pool != nil { // Safely close the renewPool | 安全关闭 renewPool - m.renewPool.Stop() + m.pool.Stop() // Set renewPool to nil | 将 renewPool 设置为 nil - m.renewPool = nil + m.pool = nil } } @@ -109,7 +151,9 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( return "", serror.ErrAccountDisabled } + // 获取设备类型 deviceType := getDevice(device) + // 获取账号存储键 accountKey := m.getAccountKey(ctx, loginID, deviceType) // Handle shared token for concurrent login | 处理多人登录共用 Token 的情况 @@ -117,8 +161,7 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( // Look for existing token of this account + device | 查找账号 + 设备下是否已有登录 Token existingToken, err := m.storage.Get(accountKey) if err == nil && existingToken != nil { - ctx = context.WithValue(ctx, config.CtxTokenValue, existingToken) - if tokenStr, ok := assertString(existingToken); ok && m.IsLogin(ctx) { + if tokenStr, ok := assertString(existingToken); ok && m.IsLogin(context.WithValue(ctx, config.CtxTokenValue, existingToken)) { // If valid token exists, return it directly | 如果已有 Token 且有效,则直接返回 return tokenStr, nil } @@ -355,8 +398,8 @@ func (m *Manager) IsLogin(ctx context.Context) bool { renewFunc := func() { m.renewToken(ctx, info) } // Submit renewal task to the pool if configured, otherwise use a goroutine | 如果配置了续期池,则提交续期任务到池中,否则使用协程 - if m.renewPool != nil { - _ = m.renewPool.Submit(renewFunc) // Submit token renewal task to the pool | 提交Token续期任务到续期池 + if m.pool != nil { + _ = m.pool.Submit(renewFunc) // Submit token renewal task to the pool | 提交Token续期任务到续期池 } else { go renewFunc() // Fallback to goroutine if pool is not configured | 如果没有配置续期池,使用普通协程 } @@ -1010,8 +1053,8 @@ func (m *Manager) getTokenInfoByTokenValue(ctx context.Context, checkState ...bo // Parse TokenInfo | 解析Token信息 var info TokenInfo // Use the serializer to decode the raw data | 使用序列化器来解码原始数据 - if err = m.deps.GetSerializer().Decode(raw, &info); err != nil { - return nil, fmt.Errorf("%w: %v", serror.ErrCommonUnmarshal, err) // Return error if decoding fails | 如果解码失败,返回错误 + if err = m.serializer.Decode(raw, &info); err != nil { + return nil, fmt.Errorf("%w: %v", serror.ErrCommonDecode, err) // Return error if decoding fails | 如果解码失败,返回错误 } return &info, nil // Return the parsed TokenInfo | 返回解析后的Token信息 @@ -1122,7 +1165,7 @@ func (m *Manager) removeTokenChain(ctx context.Context, destroySession bool, inf if m.eventManager != nil { m.eventManager.Trigger(&listener.EventData{ Event: event, // Event type | 事件类型 - AuthType: m.authType, // Auth type from context | 从上下文中获取认证类型 + AuthType: m.config.AuthType, // Auth type from context | 从上下文中获取认证类型 LoginID: info.LoginID, // Login ID of the user | 用户的登录ID Token: utils.GetCtxValue(ctx, config.CtxTokenValue), // Token value from context | 从上下文中获取Token值 Device: info.Device, // Device type | 设备类型 @@ -1136,22 +1179,22 @@ func (m *Manager) removeTokenChain(ctx context.Context, destroySession bool, inf // getTokenKey Gets token storage key | 获取Token存储键 func (m *Manager) getTokenKey(ctx context.Context) string { - return m.prefix + m.authType + TokenKeyPrefix + utils.GetCtxValue(ctx, config.CtxTokenValue) + return m.config.KeyPrefix + m.config.AuthType + TokenKeyPrefix + utils.GetCtxValue(ctx, config.CtxTokenValue) } // getAccountKey Gets account storage key | 获取账号存储键 func (m *Manager) getAccountKey(_ context.Context, loginID, device string) string { - return m.prefix + m.authType + AccountKeyPrefix + loginID + PermissionSeparator + device + return m.config.KeyPrefix + m.config.AuthType + AccountKeyPrefix + loginID + PermissionSeparator + device } // getRenewKey Gets token renewal tracking key | 获取Token续期追踪键 func (m *Manager) getRenewKey(ctx context.Context) string { - return m.prefix + m.authType + RenewKeyPrefix + utils.GetCtxValue(ctx, config.CtxTokenValue) + return m.config.KeyPrefix + m.config.AuthType + RenewKeyPrefix + utils.GetCtxValue(ctx, config.CtxTokenValue) } // getDisableKey Gets disable storage key | 获取禁用存储键 func (m *Manager) getDisableKey(_ context.Context, loginID string) string { - return m.prefix + m.authType + DisableKeyPrefix + loginID + return m.config.KeyPrefix + m.config.AuthType + DisableKeyPrefix + loginID } // getDevice extracts device type from optional parameter | 从可选参数中提取设备类型 diff --git a/core/oauth2/oauth2.go b/core/oauth2/oauth2.go index ca159d3..0bdf1d2 100644 --- a/core/oauth2/oauth2.go +++ b/core/oauth2/oauth2.go @@ -4,12 +4,13 @@ import ( "crypto/rand" "encoding/hex" "fmt" - "github.com/click33/sa-token-go/core/config" - "github.com/click33/sa-token-go/core/dep" + codec_json "github.com/click33/sa-token-go/codec/json" + "github.com/click33/sa-token-go/core/adapter" + "github.com/click33/sa-token-go/core/serror" + "github.com/click33/sa-token-go/core/utils" + "github.com/click33/sa-token-go/storage/memory" "sync" "time" - - "github.com/click33/sa-token-go/core/adapter" ) // OAuth2 Authorization Code Flow Implementation @@ -62,33 +63,40 @@ type AccessToken struct { // OAuth2Server OAuth2 authorization server | OAuth2授权服务器 type OAuth2Server struct { - storage adapter.Storage - keyPrefix string // Configurable prefix | 可配置的前缀 - clients map[string]*Client - clientsMu sync.RWMutex // Clients map lock | 客户端映射锁 - codeExpiration time.Duration // Authorization code expiration (10min) | 授权码过期时间(10分钟) - tokenExpiration time.Duration // Access token expiration (2h) | 访问令牌过期时间(2小时) - globalConfig *config.Config // Global authentication configuration | 全局认证配置 - deps *dep.Dep // Dependencies manager | 依赖管理器 + authType string // Authentication system type | 认证体系类型 + keyPrefix string // Configurable prefix | 可配置的前缀 + clients map[string]*Client // client map | 客户端映射map + clientsMu sync.RWMutex // Clients map lock | 客户端映射锁 + codeExpiration time.Duration // Authorization code expiration (10min) | 授权码过期时间(10分钟) + tokenExpiration time.Duration // Access token expiration (2h) | 访问令牌过期时间(2小时) + serializer adapter.Codec // Codec adapter for encoding and decoding operations | 编解码器适配器 + storage adapter.Storage // Storage adapter (Redis, Memory, etc.) | 存储适配器(如 Redis、Memory) } // NewOAuth2Server Creates a new OAuth2 server | 创建新的OAuth2服务器 -// prefix: key prefix (e.g., "satoken:" or "" for Java compatibility) | 键前缀(如:"satoken:" 或 "" 兼容Java) -func NewOAuth2Server(storage adapter.Storage, deps *dep.Dep, prefix string) *OAuth2Server { +func NewOAuth2Server(authType, prefix string, storage adapter.Storage, serializer adapter.Codec) *OAuth2Server { + if storage == nil { + storage = memory.NewStorage() // default in-memory storage | 默认内存存储 + } + if serializer == nil { + serializer = codec_json.NewJSONSerializer() // default JSON serializer | 默认 JSON 编解码器 + } + return &OAuth2Server{ - storage: storage, - keyPrefix: prefix, - clients: make(map[string]*Client), - codeExpiration: DefaultCodeExpiration, - tokenExpiration: DefaultTokenExpiration, - deps: deps, + authType: authType, // Auth system identifier | 认证体系标识 + keyPrefix: prefix, // Global key prefix | 全局Key前缀 + clients: make(map[string]*Client), // Initialize client registry | 初始化客户端注册表 + codeExpiration: DefaultCodeExpiration, // Default auth code TTL | 默认授权码有效期 + tokenExpiration: DefaultTokenExpiration, // Default access token TTL | 默认访问令牌有效期 + storage: storage, // Storage backend | 存储后端 + serializer: serializer, // Codec implementation | 编解码实现 } } // RegisterClient Registers an OAuth2 client | 注册OAuth2客户端 func (s *OAuth2Server) RegisterClient(client *Client) error { if client == nil || client.ClientID == "" { - return fmt.Errorf("invalid client: clientID is required") + return serror.ErrClientOrClientIDEmpty } s.clientsMu.Lock() @@ -113,15 +121,15 @@ func (s *OAuth2Server) GetClient(clientID string) (*Client, error) { client, exists := s.clients[clientID] if !exists { - return nil, ErrClientNotFound + return nil, serror.ErrClientNotFound } return client, nil } // GenerateAuthorizationCode Generates authorization code | 生成授权码 -func (s *OAuth2Server) GenerateAuthorizationCode(clientID, redirectURI, userID string, scopes []string) (*AuthorizationCode, error) { +func (s *OAuth2Server) GenerateAuthorizationCode(clientID, userID, redirectURI string, scopes []string) (*AuthorizationCode, error) { if userID == "" { - return nil, fmt.Errorf("userID cannot be empty") + return nil, serror.ErrUserIDEmpty } client, err := s.GetClient(clientID) @@ -131,7 +139,7 @@ func (s *OAuth2Server) GenerateAuthorizationCode(clientID, redirectURI, userID s // Validate redirect URI | 验证回调URI if !s.isValidRedirectURI(client, redirectURI) { - return nil, ErrInvalidRedirectURI + return nil, serror.ErrInvalidRedirectURI } // Generate code | 生成授权码 @@ -152,24 +160,19 @@ func (s *OAuth2Server) GenerateAuthorizationCode(clientID, redirectURI, userID s Used: false, } + encodeData, err := s.serializer.Encode(authCode) + if err != nil { + return nil, fmt.Errorf("%w: %v", serror.ErrCommonEncode, err) + } + key := s.getCodeKey(code) - if err := s.storage.Set(key, authCode, s.codeExpiration); err != nil { + if err := s.storage.Set(key, encodeData, s.codeExpiration); err != nil { return nil, fmt.Errorf("failed to store authorization code: %w", err) } return authCode, nil } -// isValidRedirectURI Checks if redirect URI is valid for client | 检查回调URI是否有效 -func (s *OAuth2Server) isValidRedirectURI(client *Client, redirectURI string) bool { - for _, uri := range client.RedirectURIs { - if uri == redirectURI { - return true - } - } - return false -} - // ExchangeCodeForToken Exchanges authorization code for access token | 用授权码换取访问令牌 func (s *OAuth2Server) ExchangeCodeForToken(code, clientID, clientSecret, redirectURI string) (*AccessToken, error) { // Verify client credentials | 验证客户端凭证 @@ -179,106 +182,87 @@ func (s *OAuth2Server) ExchangeCodeForToken(code, clientID, clientSecret, redire } if client.ClientSecret != clientSecret { - return nil, ErrInvalidClientCredentials + return nil, serror.ErrInvalidClientCredentials } // Get authorization code | 获取授权码 key := s.getCodeKey(code) data, err := s.storage.Get(key) - if err != nil || data == nil { - return nil, ErrInvalidAuthCode + if err != nil { + return nil, fmt.Errorf("failed to get authorization data: %w", err) + } + if data == nil { + return nil, serror.ErrInvalidAuthCode } - authCode, ok := data.(*AuthorizationCode) - if !ok { - return nil, fmt.Errorf("invalid code data") + rawData, err := utils.ToBytes(data) + if err != nil { + return nil, err + } + + var authCode AuthorizationCode + if err := s.serializer.Decode(rawData, &authCode); err != nil { + return nil, fmt.Errorf("%w: %v", serror.ErrCommonDecode, err) } // Validate authorization code | 验证授权码 if authCode.Used { - return nil, ErrAuthCodeUsed + return nil, serror.ErrAuthCodeUsed } if authCode.ClientID != clientID { - return nil, ErrClientMismatch + return nil, serror.ErrClientMismatch } if authCode.RedirectURI != redirectURI { - return nil, ErrRedirectURIMismatch + return nil, serror.ErrRedirectURIMismatch } if time.Now().Unix() > authCode.CreateTime+authCode.ExpiresIn { - s.storage.Delete(key) - return nil, ErrAuthCodeExpired + _ = s.storage.Delete(key) + return nil, serror.ErrAuthCodeExpired } // Mark code as used | 标记为已使用 authCode.Used = true - s.storage.Set(key, authCode, time.Minute) - - return s.generateAccessToken(authCode.UserID, authCode.ClientID, authCode.Scopes) -} - -// generateAccessToken Generates access token and refresh token | 生成访问令牌和刷新令牌 -func (s *OAuth2Server) generateAccessToken(userID, clientID string, scopes []string) (*AccessToken, error) { - // Generate access token | 生成访问令牌 - tokenBytes := make([]byte, AccessTokenLength) - if _, err := rand.Read(tokenBytes); err != nil { - return nil, fmt.Errorf("failed to generate access token: %w", err) - } - accessToken := hex.EncodeToString(tokenBytes) - - // Generate refresh token | 生成刷新令牌 - refreshBytes := make([]byte, RefreshTokenLength) - if _, err := rand.Read(refreshBytes); err != nil { - return nil, fmt.Errorf("failed to generate refresh token: %w", err) - } - refreshToken := hex.EncodeToString(refreshBytes) - token := &AccessToken{ - Token: accessToken, - TokenType: TokenTypeBearer, - ExpiresIn: int64(s.tokenExpiration.Seconds()), - RefreshToken: refreshToken, - Scopes: scopes, - UserID: userID, - ClientID: clientID, - } - - tokenKey := s.getTokenKey(accessToken) - refreshKey := s.getRefreshKey(refreshToken) - - // Store access token | 存储访问令牌 - if err := s.storage.Set(tokenKey, token, s.tokenExpiration); err != nil { - return nil, fmt.Errorf("failed to store access token: %w", err) + encodeData, err := s.serializer.Encode(authCode) + if err != nil { + return nil, fmt.Errorf("%w: %v", serror.ErrCommonEncode, err) } - // Store refresh token | 存储刷新令牌 - if err := s.storage.Set(refreshKey, token, DefaultRefreshTTL); err != nil { - return nil, fmt.Errorf("failed to store refresh token: %w", err) - } + _ = s.storage.Set(key, encodeData, time.Minute) - return token, nil + return s.generateAccessToken(authCode.UserID, authCode.ClientID, authCode.Scopes) } // ValidateAccessToken Validates access token | 验证访问令牌 -func (s *OAuth2Server) ValidateAccessToken(tokenString string) (*AccessToken, error) { - if tokenString == "" { - return nil, ErrInvalidAccessToken +func (s *OAuth2Server) ValidateAccessToken(accessToken string) (*AccessToken, error) { + if accessToken == "" { + return nil, serror.ErrInvalidAccessToken } - key := s.getTokenKey(tokenString) + key := s.getTokenKey(accessToken) data, err := s.storage.Get(key) - if err != nil || data == nil { - return nil, ErrInvalidAccessToken + if err != nil { + return nil, fmt.Errorf("failed to get access token data: %w", err) + } + if data == nil { + return nil, serror.ErrInvalidAccessToken } - token, ok := data.(*AccessToken) - if !ok { - return nil, ErrInvalidTokenData + rawData, err := utils.ToBytes(data) + if err != nil { + return nil, err } - return token, nil + var accessTokenInfo AccessToken + err = s.serializer.Decode(rawData, &accessTokenInfo) + if err != nil { + return nil, fmt.Errorf("%w: %v", serror.ErrCommonDecode, err) + } + + return &accessTokenInfo, nil } // RefreshAccessToken Refreshes access token using refresh token | 使用刷新令牌刷新访问令牌 @@ -290,48 +274,68 @@ func (s *OAuth2Server) RefreshAccessToken(refreshToken, clientID, clientSecret s } if client.ClientSecret != clientSecret { - return nil, ErrInvalidClientCredentials + return nil, serror.ErrInvalidClientCredentials } // Get refresh token | 获取刷新令牌 key := s.getRefreshKey(refreshToken) data, err := s.storage.Get(key) - if err != nil || data == nil { - return nil, fmt.Errorf("invalid refresh token") + if err != nil { + return nil, fmt.Errorf("failed to get refresh token data: %w", err) + } + if data == nil { + return nil, serror.ErrInvalidRefreshToken + } + + rawData, err := utils.ToBytes(data) + if err != nil { + return nil, err } - oldToken, ok := data.(*AccessToken) - if !ok { - return nil, fmt.Errorf("invalid refresh token data") + var accessTokenInfo AccessToken + err = s.serializer.Decode(rawData, &accessTokenInfo) + if err != nil { + return nil, fmt.Errorf("%w: %v", serror.ErrCommonDecode, err) } - if oldToken.ClientID != clientID { - return nil, ErrClientMismatch + if accessTokenInfo.ClientID != clientID { + return nil, serror.ErrClientMismatch } - // Delete old access token | 删除旧的访问令牌 - oldTokenKey := s.getTokenKey(oldToken.Token) - s.storage.Delete(oldTokenKey) + _ = s.storage.Delete(s.getTokenKey(accessTokenInfo.Token)) - return s.generateAccessToken(oldToken.UserID, oldToken.ClientID, oldToken.Scopes) + return s.generateAccessToken(accessTokenInfo.UserID, accessTokenInfo.ClientID, accessTokenInfo.Scopes) } // RevokeToken Revokes access token and its refresh token | 撤销访问令牌及其刷新令牌 -func (s *OAuth2Server) RevokeToken(tokenString string) error { - if tokenString == "" { +func (s *OAuth2Server) RevokeToken(accessToken string) error { + if accessToken == "" { return nil } - key := s.getTokenKey(tokenString) + key := s.getTokenKey(accessToken) data, err := s.storage.Get(key) + if err != nil { + return fmt.Errorf("failed to get access token data: %w", err) + } + if data == nil { + return serror.ErrInvalidAccessToken + } + + rawData, err := utils.ToBytes(data) if err != nil { return err } - // Revoke refresh token if exists | 如果存在则撤销刷新令牌 - if token, ok := data.(*AccessToken); ok && token.RefreshToken != "" { - refreshKey := s.getRefreshKey(token.RefreshToken) - s.storage.Delete(refreshKey) + var accessTokenInfo AccessToken + err = s.serializer.Decode(rawData, &accessTokenInfo) + if err != nil { + return fmt.Errorf("%w: %v", serror.ErrCommonDecode, err) + } + + if accessTokenInfo.RefreshToken != "" { + refreshKey := s.getRefreshKey(accessTokenInfo.RefreshToken) + _ = s.storage.Delete(refreshKey) } return s.storage.Delete(key) @@ -341,15 +345,71 @@ func (s *OAuth2Server) RevokeToken(tokenString string) error { // getCodeKey Gets storage key for authorization code | 获取授权码的存储键 func (s *OAuth2Server) getCodeKey(code string) string { - return s.keyPrefix + CodeKeySuffix + code + return s.keyPrefix + s.authType + CodeKeySuffix + code } // getTokenKey Gets storage key for access token | 获取访问令牌的存储键 func (s *OAuth2Server) getTokenKey(token string) string { - return s.keyPrefix + TokenKeySuffix + token + return s.keyPrefix + s.authType + TokenKeySuffix + token } // getRefreshKey Gets storage key for refresh token | 获取刷新令牌的存储键 func (s *OAuth2Server) getRefreshKey(refreshToken string) string { - return s.keyPrefix + RefreshKeySuffix + refreshToken + return s.keyPrefix + s.authType + RefreshKeySuffix + refreshToken +} + +// isValidRedirectURI Checks if redirect URI is valid for client | 检查回调URI是否有效 +func (s *OAuth2Server) isValidRedirectURI(client *Client, redirectURI string) bool { + for _, uri := range client.RedirectURIs { + if uri == redirectURI { + return true + } + } + return false +} + +// generateAccessToken Generates access token and refresh token | 生成访问令牌和刷新令牌 +func (s *OAuth2Server) generateAccessToken(userID, clientID string, scopes []string) (*AccessToken, error) { + // Generate access token | 生成访问令牌 + tokenBytes := make([]byte, AccessTokenLength) + if _, err := rand.Read(tokenBytes); err != nil { + return nil, fmt.Errorf("failed to generate access token: %w", err) + } + accessToken := hex.EncodeToString(tokenBytes) + + // Generate refresh token | 生成刷新令牌 + refreshBytes := make([]byte, RefreshTokenLength) + if _, err := rand.Read(refreshBytes); err != nil { + return nil, fmt.Errorf("failed to generate refresh token: %w", err) + } + refreshToken := hex.EncodeToString(refreshBytes) + + token := &AccessToken{ + Token: accessToken, + TokenType: TokenTypeBearer, + ExpiresIn: int64(s.tokenExpiration.Seconds()), + RefreshToken: refreshToken, + Scopes: scopes, + UserID: userID, + ClientID: clientID, + } + encodeData, err := s.serializer.Encode(token) + if err != nil { + return nil, fmt.Errorf("%w: %v", serror.ErrCommonEncode, err) + } + + tokenKey := s.getTokenKey(accessToken) + refreshKey := s.getRefreshKey(refreshToken) + + // Store access token | 存储访问令牌 + if err = s.storage.Set(tokenKey, encodeData, s.tokenExpiration); err != nil { + return nil, fmt.Errorf("failed to store access token: %w", err) + } + + // Store refresh token | 存储刷新令牌 + if err = s.storage.Set(refreshKey, encodeData, DefaultRefreshTTL); err != nil { + return nil, fmt.Errorf("failed to store refresh token: %w", err) + } + + return token, nil } diff --git a/core/pool/pool.go b/core/pool/pool.go deleted file mode 100644 index 331d7e1..0000000 --- a/core/pool/pool.go +++ /dev/null @@ -1,274 +0,0 @@ -// @Author daixk 2025-10-28 22:00:20 -package pool - -import ( - "github.com/click33/sa-token-go/core/config" - "github.com/click33/sa-token-go/core/dep" - "github.com/click33/sa-token-go/core/log" - "github.com/click33/sa-token-go/core/serror" - "sync" - "time" - - "github.com/panjf2000/ants/v2" -) - -// Default configuration constants | 默认配置常量 -const ( - DefaultMinSize = 100 // Minimum pool size | 最小协程数 - DefaultMaxSize = 2000 // Maximum pool size | 最大协程数 - DefaultScaleUpRate = 0.8 // Scale-up threshold (expand when usage exceeds this ratio) | 扩容阈值,当使用率超过此比例时扩容 - DefaultScaleDownRate = 0.3 // Scale-down threshold (shrink when usage below this ratio) | 缩容阈值,当使用率低于此比例时缩容 - DefaultCheckInterval = time.Minute // Interval for auto-scaling checks | 检查间隔 - DefaultExpiry = 10 * time.Second // Idle worker expiry duration | 空闲协程过期时间 -) - -// RenewPoolConfig configuration for the renewal pool manager | 续期池配置 -type RenewPoolConfig struct { - MinSize int // Minimum pool size | 最小协程数 - MaxSize int // Maximum pool size | 最大协程数 - ScaleUpRate float64 // Scale-up threshold | 扩容阈值 - ScaleDownRate float64 // Scale-down threshold | 缩容阈值 - CheckInterval time.Duration // Auto-scale check interval | 检查间隔 - Expiry time.Duration // Idle worker expiry duration | 空闲协程过期时间 - PrintStatusInterval time.Duration // Interval for periodic status printing (0 = disabled) | 定时打印池状态的间隔(0表示关闭) - PreAlloc bool // Whether to pre-allocate memory | 是否预分配内存 - NonBlocking bool // Whether to use non-blocking mode | 是否为非阻塞模式 -} - -// DefaultRenewPoolConfig returns default configuration | 返回默认配置 -func DefaultRenewPoolConfig() *RenewPoolConfig { - return &RenewPoolConfig{ - MinSize: DefaultMinSize, - MaxSize: DefaultMaxSize, - ScaleUpRate: DefaultScaleUpRate, - ScaleDownRate: DefaultScaleDownRate, - CheckInterval: DefaultCheckInterval, - Expiry: DefaultExpiry, - PreAlloc: false, - NonBlocking: true, - } -} - -// RenewPoolManager manages a dynamic scaling goroutine pool for token renewal tasks | 续期任务协程池管理器 -type RenewPoolManager struct { - pool *ants.Pool // ants pool instance | ants 协程池实例 - config *RenewPoolConfig // Configuration object | 池配置对象 - globalConfig *config.Config // Global authentication configuration | 全局认证配置 - mu sync.Mutex // Synchronization lock | 互斥锁 - stopCh chan struct{} // Stop signal channel | 停止信号通道 - started bool // Indicates if pool manager is running | 是否已启动 - deps *dep.Dep // Dependencies manager | 依赖管理器 -} - -// NewRenewPoolManagerWithConfig creates manager with config | 使用配置创建续期池管理器 -func NewRenewPoolManagerWithConfig(cfg *RenewPoolConfig) (*RenewPoolManager, error) { - if cfg == nil { - cfg = DefaultRenewPoolConfig() - } - if cfg.MinSize <= 0 { - cfg.MinSize = DefaultMinSize - } - if cfg.MaxSize < cfg.MinSize { - cfg.MaxSize = cfg.MinSize - } - - mgr := &RenewPoolManager{ - config: cfg, - stopCh: make(chan struct{}), - started: true, - } - - if err := mgr.initPool(); err != nil { - return nil, err - } - - // Start auto-scaling routine | 启动自动扩缩容协程 - go mgr.autoScale() - - // Start periodic pool status printer if interval is set | 若设置了打印间隔,则启动定时打印池状态的协程 - if cfg.PrintStatusInterval > 0 { - go func() { - ticker := time.NewTicker(cfg.PrintStatusInterval) // Create ticker for status printing | 创建定时器用于打印状态 - defer ticker.Stop() // Stop ticker on exit | 退出时停止定时器 - - for { - select { - case <-ticker.C: - mgr.PrintStatus() // Print current pool status | 打印当前协程池状态 - case <-mgr.stopCh: - return // Exit when stop signal received | 收到停止信号后退出 - } - } - }() - } - - return mgr, nil -} - -// initPool initializes the ants pool | 初始化 ants 协程池 -func (m *RenewPoolManager) initPool() error { - p, err := ants.NewPool( - m.config.MinSize, - ants.WithExpiryDuration(m.config.Expiry), - ants.WithPreAlloc(m.config.PreAlloc), - ants.WithNonblocking(m.config.NonBlocking), - ) - if err != nil { - return err - } - m.pool = p - return nil -} - -// Submit submits a renewal task | 提交续期任务 -func (m *RenewPoolManager) Submit(task func()) error { - if !m.started { - return serror.ErrRenewPoolNotStarted - } - return m.pool.Submit(task) -} - -// Stop stops the auto-scaling process | 停止自动扩缩容 -func (m *RenewPoolManager) Stop() { - if !m.started { - return - } - close(m.stopCh) - m.started = false - - if m.pool != nil && !m.pool.IsClosed() { - _ = m.pool.ReleaseTimeout(5 * time.Second) - } -} - -// autoScale automatic pool scale-up/down logic | 自动扩缩容逻辑 -func (m *RenewPoolManager) autoScale() { - ticker := time.NewTicker(m.config.CheckInterval) // Ticker for periodic usage checks | 定时器,用于定期检测使用率 - defer ticker.Stop() // Stop ticker on exit | 函数退出时停止定时器 - - for { - select { - case <-ticker.C: - m.mu.Lock() // Protect concurrent access | 加锁防止并发冲突 - - // Get current pool stats | 获取当前运行状态 - running := m.pool.Running() // Number of active goroutines | 当前正在执行的任务数 - capacity := m.pool.Cap() // Current pool capacity | 当前协程池容量 - usage := float64(running) / float64(capacity) // Current usage ratio | 当前使用率(运行数 ÷ 总容量) - - switch { - // Expand if usage exceeds threshold and capacity < MaxSize | 当使用率超过扩容阈值且容量小于最大值时扩容 - case usage > m.config.ScaleUpRate && capacity < m.config.MaxSize: - newCap := int(float64(capacity) * 1.5) // Increase capacity by 1.5x | 扩容为当前的 1.5 倍 - if newCap > m.config.MaxSize { // Cap to maximum size | 限制最大值 - newCap = m.config.MaxSize - } - m.pool.Tune(newCap) // Apply new pool capacity | 调整 ants 池容量 - - // Reduce if usage below threshold and capacity > MinSize | 当使用率低于缩容阈值且容量大于最小值时缩容 - case usage < m.config.ScaleDownRate && capacity > m.config.MinSize: - newCap := int(float64(capacity) * 0.7) // Reduce capacity to 70% | 缩容为当前的 70% - if newCap < m.config.MinSize { // Ensure not below MinSize | 限制最小值 - newCap = m.config.MinSize - } - m.pool.Tune(newCap) // Apply new pool capacity | 调整 ants 池容量 - } - - m.mu.Unlock() // Unlock after adjustment | 解锁 - - case <-m.stopCh: - // Stop signal received, exit loop | 收到停止信号,终止扩缩容协程 - return - } - } -} - -// Stats returns current pool statistics | 返回当前池状态 -func (m *RenewPoolManager) Stats() (running, capacity int, usage float64) { - m.mu.Lock() - defer m.mu.Unlock() - running = m.pool.Running() // Active tasks | 当前运行任务数 - capacity = m.pool.Cap() // Pool capacity | 当前池容量 - usage = float64(running) / float64(capacity) // Usage ratio | 当前使用率 - return -} - -// PrintStatus prints current pool status | 打印池状态 -func (m *RenewPoolManager) PrintStatus() { - r, c, u := m.Stats() - log.Infof("RenewPool Running: %d, Capacity: %d, Usage: %.1f%%", r, c, u*100) -} - -// RenewPoolBuilder builder for RenewPoolManager | RenewPoolManager 构造器 -type RenewPoolBuilder struct { - cfg *RenewPoolConfig // Builder configuration | 构造器配置对象 -} - -// NewRenewPoolBuilder creates a new builder | 创建构造器 -func NewRenewPoolBuilder() *RenewPoolBuilder { - return &RenewPoolBuilder{cfg: DefaultRenewPoolConfig()} -} - -// MinSize sets minimum pool size | 设置最小协程数 -func (b *RenewPoolBuilder) MinSize(size int) *RenewPoolBuilder { - b.cfg.MinSize = size - return b -} - -// MaxSize sets maximum pool size | 设置最大协程数 -func (b *RenewPoolBuilder) MaxSize(size int) *RenewPoolBuilder { - b.cfg.MaxSize = size - return b -} - -// ScaleUpRate sets the threshold for scaling up | 设置扩容阈值 -func (b *RenewPoolBuilder) ScaleUpRate(up float64) *RenewPoolBuilder { - b.cfg.ScaleUpRate = up - return b -} - -// ScaleDownRate sets the threshold for scaling down | 设置缩容阈值 -func (b *RenewPoolBuilder) ScaleDownRate(down float64) *RenewPoolBuilder { - b.cfg.ScaleDownRate = down - return b -} - -// CheckInterval sets auto-scaling check interval | 设置检查间隔 -func (b *RenewPoolBuilder) CheckInterval(interval time.Duration) *RenewPoolBuilder { - b.cfg.CheckInterval = interval - return b -} - -// Expiry sets worker expiry duration | 设置空闲协程过期时间 -func (b *RenewPoolBuilder) Expiry(expiry time.Duration) *RenewPoolBuilder { - b.cfg.Expiry = expiry - return b -} - -// PrintStatusInterval sets the interval for printing pool status | 设置打印状态的间隔 -func (b *RenewPoolBuilder) PrintStatusInterval(interval time.Duration) *RenewPoolBuilder { - b.cfg.PrintStatusInterval = interval - return b -} - -// PreAlloc sets pre-allocation flag | 设置是否预分配内存 -func (b *RenewPoolBuilder) PreAlloc(prealloc bool) *RenewPoolBuilder { - b.cfg.PreAlloc = prealloc - return b -} - -// NonBlocking sets non-blocking mode | 设置是否非阻塞模式 -func (b *RenewPoolBuilder) NonBlocking(nonblocking bool) *RenewPoolBuilder { - b.cfg.NonBlocking = nonblocking - return b -} - -// Config returns the current RenewPoolConfig | 返回当前的续期池配置 -func (b *RenewPoolBuilder) Config() *RenewPoolConfig { - return b.cfg -} - -// Build constructs a RenewPoolManager instance | 构建 RenewPoolManager 实例 -func (b *RenewPoolBuilder) Build() (*RenewPoolManager, error) { - return NewRenewPoolManagerWithConfig(b.cfg) -} diff --git a/core/satoken.go b/core/satoken.go index fff2046..1372899 100644 --- a/core/satoken.go +++ b/core/satoken.go @@ -131,7 +131,7 @@ var ( // ============ Factory Functions | 工厂函数 ============ -// DefaultConfig Returns default configuration | 返回默认配置 +// DefaultConfig Returns log configuration | 返回默认配置 func DefaultConfig() *Config { return config.DefaultConfig() } diff --git a/core/security/consts.go b/core/security/consts.go new file mode 100644 index 0000000..b126048 --- /dev/null +++ b/core/security/consts.go @@ -0,0 +1,19 @@ +// @Author daixk 2025/12/11 22:20:00 +package security + +import "time" + +// Constants for nonce | Nonce常量 +const ( + DefaultNonceTTL = 5 * time.Minute // Default nonce expiration | 默认nonce过期时间 + NonceLength = 32 // Nonce byte length | Nonce字节长度 + NonceKeySuffix = "nonce:" // Key suffix after prefix | 前缀后的键后缀 +) + +// Constants for refresh token | 刷新令牌常量 +const ( + DefaultRefreshTTL = 30 * 24 * time.Hour // 30 days | 30天 + DefaultAccessTTL = 2 * time.Hour // 2 hours | 2小时 + RefreshTokenLength = 32 // Refresh token byte length | 刷新令牌字节长度 + RefreshKeySuffix = "refresh:" // Key suffix after prefix | 前缀后的键后缀 +) diff --git a/core/security/nonce.go b/core/security/nonce.go index ee97fbb..73cdf90 100644 --- a/core/security/nonce.go +++ b/core/security/nonce.go @@ -4,73 +4,62 @@ import ( "crypto/rand" "encoding/hex" "fmt" - "github.com/click33/sa-token-go/core/config" + "github.com/click33/sa-token-go/core/adapter" + "github.com/click33/sa-token-go/core/serror" + "github.com/click33/sa-token-go/storage/memory" "sync" "time" - - "github.com/click33/sa-token-go/core/adapter" ) -// Nonce Anti-Replay Attack Implementation -// Nonce 防重放攻击实现 +// Nonce Anti-Replay Attack Implementation | Nonce 防重放攻击实现 // // Flow | 流程: // 1. Generate() - Create unique nonce and store with TTL | 生成唯一nonce并存储(带过期时间) // 2. Verify() - Check existence and delete (one-time use) | 检查存在性并删除(一次性使用) -// 3. Auto-expire after TTL (default 5min) | TTL后自动过期(默认5分钟) +// 3. Auto-expire after TTL (log 5min) | TTL后自动过期(默认5分钟) // // Usage | 用法: -// nonce, _ := manager.GenerateNonce() -// valid := manager.VerifyNonce(nonce) // true -// valid = manager.VerifyNonce(nonce) // false (replay prevented) - -// Constants for nonce | Nonce常量 -const ( - DefaultNonceTTL = 5 * time.Minute // Default nonce expiration | 默认nonce过期时间 - NonceLength = 32 // Nonce byte length | Nonce字节长度 - NonceKeySuffix = "nonce:" // Key suffix after prefix | 前缀后的键后缀 -) - -// Error variables | 错误变量 -var ( - ErrInvalidNonce = fmt.Errorf("invalid or expired nonce") -) +// nonce, _ := manager.Generate() +// valid := manager.Verify(nonce) // true +// valid = manager.Verify(nonce) // false (replay prevented) // NonceManager Nonce manager for anti-replay attacks | Nonce管理器,用于防重放攻击 type NonceManager struct { - storage adapter.Storage - globalConfig *config.Config // Global authentication configuration | 全局认证配置 - keyPrefix string // Configurable prefix | 可配置的前缀 - ttl time.Duration - mu sync.RWMutex + authType string // Authentication system type | 认证体系类型 + keyPrefix string // Configurable prefix | 可配置的前缀 + ttl time.Duration // Nonce TTL | Nonce有效期 + mu sync.RWMutex // RWMutex for concurrent access | 并发访问读写锁 + storage adapter.Storage // Storage adapter (Redis, Memory, etc.) | 存储适配器(如 Redis、Memory) } // NewNonceManager Creates a new nonce manager | 创建新的Nonce管理器 -// prefix: key prefix (e.g., "satoken:" or "" for Java compatibility) | 键前缀(如:"satoken:" 或 "" 兼容Java) -// ttl: time to live, default 5 minutes | 过期时间,默认5分钟 -func NewNonceManager(storage adapter.Storage, prefix string, ttl time.Duration) *NonceManager { +func NewNonceManager(authType, prefix string, storage adapter.Storage, ttl time.Duration) *NonceManager { if ttl == 0 { - ttl = DefaultNonceTTL + ttl = DefaultNonceTTL // Default TTL 5 minutes | 默认5分钟 + } + if storage == nil { + storage = memory.NewStorage() // Use in-memory storage if not provided | 如果未提供使用内存存储 } + return &NonceManager{ - storage: storage, + authType: authType, keyPrefix: prefix, + storage: storage, ttl: ttl, } } // Generate Generates a new nonce and stores it | 生成新的nonce并存储 -// Returns 64-char hex string | 返回64字符的十六进制字符串 func (nm *NonceManager) Generate() (string, error) { - bytes := make([]byte, NonceLength) + bytes := make([]byte, NonceLength) // Create byte slice for nonce | 创建字节切片生成nonce if _, err := rand.Read(bytes); err != nil { - return "", fmt.Errorf("failed to generate random bytes: %w", err) + return "", fmt.Errorf("failed to generate random bytes: %w", err) // Random generation failed | 随机生成失败 } - nonce := hex.EncodeToString(bytes) + nonce := hex.EncodeToString(bytes) // Encode bytes to hex string | 编码为16进制字符串 - key := nm.getNonceKey(nonce) + key := nm.getNonceKey(nonce) // Build storage key | 构建存储键 if err := nm.storage.Set(key, time.Now().Unix(), nm.ttl); err != nil { - return "", fmt.Errorf("failed to store nonce: %w", err) + return "", fmt.Errorf("failed to store nonce: %w", err) // Storage failed | 存储失败 } return nonce, nil @@ -80,26 +69,26 @@ func (nm *NonceManager) Generate() (string, error) { // Returns false if nonce doesn't exist or already used | 如果nonce不存在或已使用则返回false func (nm *NonceManager) Verify(nonce string) bool { if nonce == "" { - return false + return false // Empty nonce invalid | 空nonce无效 } - key := nm.getNonceKey(nonce) + key := nm.getNonceKey(nonce) // Build storage key | 构建存储键 - nm.mu.Lock() - defer nm.mu.Unlock() + nm.mu.Lock() // Acquire write lock | 获取写锁 + defer nm.mu.Unlock() // Release lock after function | 函数结束释放锁 if !nm.storage.Exists(key) { - return false + return false // Nonce not found | 未找到nonce } - nm.storage.Delete(key) + _ = nm.storage.Delete(key) // Consume nonce | 消耗nonce return true } // VerifyAndConsume Verifies and consumes nonce, returns error if invalid | 验证并消费nonce,无效时返回错误 func (nm *NonceManager) VerifyAndConsume(nonce string) error { if !nm.Verify(nonce) { - return ErrInvalidNonce + return serror.ErrInvalidNonce // Invalid nonce error | 无效nonce错误 } return nil } @@ -107,18 +96,18 @@ func (nm *NonceManager) VerifyAndConsume(nonce string) error { // IsValid Checks if nonce is valid without consuming it | 检查nonce是否有效(不消费) func (nm *NonceManager) IsValid(nonce string) bool { if nonce == "" { - return false + return false // Empty nonce invalid | 空nonce无效 } - key := nm.getNonceKey(nonce) + key := nm.getNonceKey(nonce) // Build storage key | 构建存储键 - nm.mu.RLock() - defer nm.mu.RUnlock() + nm.mu.RLock() // Acquire read lock | 获取读锁 + defer nm.mu.RUnlock() // Release read lock | 释放读锁 - return nm.storage.Exists(key) + return nm.storage.Exists(key) // Return existence | 返回是否存在 } // getNonceKey Gets storage key for nonce | 获取nonce的存储键 func (nm *NonceManager) getNonceKey(nonce string) string { - return nm.keyPrefix + NonceKeySuffix + nonce + return nm.keyPrefix + nm.authType + NonceKeySuffix + nonce // Construct full key | 构建完整存储键 } diff --git a/core/security/refresh_token.go b/core/security/refresh_token.go index b88731c..25ad337 100644 --- a/core/security/refresh_token.go +++ b/core/security/refresh_token.go @@ -3,128 +3,108 @@ package security import ( "crypto/rand" "encoding/hex" - "encoding/json" "fmt" + codec_json "github.com/click33/sa-token-go/codec/json" + "github.com/click33/sa-token-go/core/adapter" + "github.com/click33/sa-token-go/core/serror" + "github.com/click33/sa-token-go/storage/memory" "time" - "github.com/click33/sa-token-go/core/adapter" - "github.com/click33/sa-token-go/core/config" "github.com/click33/sa-token-go/core/token" "github.com/click33/sa-token-go/core/utils" ) -// Refresh Token Implementation -// 刷新令牌实现 +// Refresh Token Implementation | 刷新令牌实现 // // Flow | 流程: -// 1. GenerateTokenPair() - Create access token + refresh token | 创建访问令牌 + 刷新令牌 -// 2. Access token expires (short-lived, e.g. 2h) | 访问令牌过期(短期,如2小时) -// 3. RefreshAccessToken() - Use refresh token to get new access token | 使用刷新令牌获取新访问令牌 -// 4. Refresh token expires (long-lived, 30 days) | 刷新令牌过期(长期,30天) -// -// Usage | 用法: -// tokenInfo, _ := manager.LoginWithRefreshToken(loginID, "web") -// // ... access token expires ... -// newInfo, _ := manager.RefreshAccessToken(tokenInfo.RefreshToken) - -// Constants for refresh token | 刷新令牌常量 -const ( - DefaultRefreshTTL = 30 * 24 * time.Hour // 30 days | 30天 - DefaultAccessTTL = 2 * time.Hour // 2 hours | 2小时 - RefreshTokenLength = 32 // Refresh token byte length | 刷新令牌字节长度 - RefreshKeySuffix = "refresh:" // Key suffix after prefix | 前缀后的键后缀 -) - -// Error variables | 错误变量 -var ( - ErrInvalidRefreshToken = fmt.Errorf("invalid refresh token") - ErrRefreshTokenExpired = fmt.Errorf("refresh token expired") - ErrInvalidRefreshData = fmt.Errorf("invalid refresh token data") -) +// 1. GenerateTokenPair() -> AccessToken + RefreshToken | 创建访问令牌 + 刷新令牌 +// 2. AccessToken expires | 访问令牌过期 +// 3. RefreshAccessToken() -> New AccessToken | 使用刷新令牌获取新访问令牌 +// 4. RefreshToken expires -> Relogin | 刷新令牌过期需重新登录 + +// AccessTokenInfo Access token storage value | 访问令牌存储数据 +type AccessTokenInfo struct { + LoginID string `json:"loginID"` // User login ID | 用户登录ID + Device string `json:"device"` // Device type | 设备类型 +} -// RefreshTokenInfo refresh token information | 刷新令牌信息 +// RefreshTokenInfo Refresh token storage value | 刷新令牌存储数据 type RefreshTokenInfo struct { - RefreshToken string `json:"refreshToken"` // Refresh token (long-lived) | 刷新令牌(长期有效) - AccessToken string `json:"accessToken"` // Access token (short-lived) | 访问令牌(短期有效) + RefreshToken string `json:"refreshToken"` // Refresh token value | 刷新令牌值 + AccessToken string `json:"accessToken"` // Latest access token | 最新访问令牌 LoginID string `json:"loginID"` // User login ID | 用户登录ID Device string `json:"device"` // Device type | 设备类型 - CreateTime int64 `json:"createTime"` // Creation timestamp | 创建时间戳 - ExpireTime int64 `json:"expireTime"` // Expiration timestamp | 过期时间戳 -} - -// MarshalBinary implements encoding.BinaryMarshaler for Redis storage | 实现encoding.BinaryMarshaler接口用于Redis存储 -func (r *RefreshTokenInfo) MarshalBinary() ([]byte, error) { - return json.Marshal(r) -} - -// UnmarshalBinary implements encoding.BinaryUnmarshaler for Redis storage | 实现encoding.BinaryUnmarshaler接口用于Redis存储 -func (r *RefreshTokenInfo) UnmarshalBinary(data []byte) error { - return json.Unmarshal(data, r) + CreateTime int64 `json:"createTime"` // Create timestamp | 创建时间 + ExpireTime int64 `json:"expireTime"` // Expire timestamp | 过期时间 } // RefreshTokenManager Refresh token manager | 刷新令牌管理器 type RefreshTokenManager struct { - storage adapter.Storage - globalConfig *config.Config // Global authentication configuration | 全局认证配置 - keyPrefix string // Configurable prefix | 可配置的前缀 - tokenKeyPrefix string // Token key prefix | 令牌键前缀 + authType string // Auth system type | 认证体系类型 + keyPrefix string // Storage key prefix | 存储前缀 + tokenKeyPrefix string // Token key prefix | Token 前缀 tokenGen *token.Generator - refreshTTL time.Duration // Refresh token TTL (30 days) | 刷新令牌有效期(30天) - accessTTL time.Duration // Access token TTL (configurable) | 访问令牌有效期(可配置) + refreshTTL time.Duration // Refresh token TTL | 刷新令牌有效期 + accessTTL time.Duration // Access token TTL | 访问令牌有效期 + storage adapter.Storage // Storage adapter | 存储适配器 + serializer adapter.Codec // Codec adapter | 编解码器 } -// NewRefreshTokenManager Creates a new refresh token manager | 创建新的刷新令牌管理器 -// prefix: key prefix (e.g., "satoken:" or "" for Java compatibility) | 键前缀(如:"satoken:" 或 "" 兼容Java) -// cfg: configuration, uses Timeout for access token TTL | 配置,使用Timeout作为访问令牌有效期 -func NewRefreshTokenManager(storage adapter.Storage, prefix, keyPrefix string, cfg *config.Config) *RefreshTokenManager { - accessTTL := time.Duration(cfg.Timeout) * time.Second - +// NewRefreshTokenManager Create manager instance | 创建刷新令牌管理器 +func NewRefreshTokenManager( + authType, prefix, tokenKeyPrefix string, + tokenGen *token.Generator, + accessTTL time.Duration, + storage adapter.Storage, + serializer adapter.Codec, +) *RefreshTokenManager { + + if tokenGen == nil { + tokenGen = token.NewGenerator(nil) + } if accessTTL == 0 { accessTTL = DefaultAccessTTL } + if storage == nil { + storage = memory.NewStorage() + } + if serializer == nil { + serializer = codec_json.NewJSONSerializer() + } return &RefreshTokenManager{ - storage: storage, + authType: authType, keyPrefix: prefix, - tokenKeyPrefix: keyPrefix, - tokenGen: token.NewGenerator(cfg), + tokenKeyPrefix: tokenKeyPrefix, + tokenGen: tokenGen, refreshTTL: DefaultRefreshTTL, accessTTL: accessTTL, + storage: storage, + serializer: serializer, } } -// GenerateTokenPair Generates access token and refresh token pair | 生成访问令牌和刷新令牌对 -func (rtm *RefreshTokenManager) GenerateTokenPair(loginID, device string, accessTokenOverride ...string) (*RefreshTokenInfo, error) { +// GenerateTokenPair Create access + refresh token | 生成访问令牌和刷新令牌 +func (rtm *RefreshTokenManager) GenerateTokenPair(loginID, device string) (*RefreshTokenInfo, error) { if loginID == "" { - return nil, fmt.Errorf("loginID cannot be empty") + return nil, serror.ErrInvalidLoginIDEmpty } // Generate access token | 生成访问令牌 - var accessToken string - if len(accessTokenOverride) > 0 && accessTokenOverride[0] != "" { - accessToken = accessTokenOverride[0] - } else { - var err error - accessToken, err = rtm.tokenGen.Generate(loginID, device) - if err != nil { - return nil, fmt.Errorf("failed to generate access token: %w", err) - } - } - - // Save token-loginID mapping (符合 Java sa-token 设计) | 保存 Token-LoginID 映射 - tokenKey := rtm.getTokenKey(accessToken) - if err := rtm.storage.Set(tokenKey, loginID, rtm.accessTTL); err != nil { - return nil, fmt.Errorf("failed to save token: %w", err) + accessToken, err := rtm.tokenGen.Generate(loginID, device) + if err != nil { + return nil, err } // Generate refresh token | 生成刷新令牌 - refreshTokenBytes := make([]byte, RefreshTokenLength) - if _, err := rand.Read(refreshTokenBytes); err != nil { - return nil, fmt.Errorf("failed to generate refresh token: %w", err) + random := make([]byte, RefreshTokenLength) + if _, err := rand.Read(random); err != nil { + return nil, err } - refreshToken := hex.EncodeToString(refreshTokenBytes) + refreshToken := hex.EncodeToString(random) now := time.Now() + info := &RefreshTokenInfo{ RefreshToken: refreshToken, AccessToken: accessToken, @@ -134,125 +114,195 @@ func (rtm *RefreshTokenManager) GenerateTokenPair(loginID, device string, access ExpireTime: now.Add(rtm.refreshTTL).Unix(), } - key := rtm.getRefreshKey(refreshToken) - if err := rtm.storage.Set(key, info, rtm.refreshTTL); err != nil { - return nil, fmt.Errorf("failed to store refresh token: %w", err) + // Encode access token info | 编码访问令牌信息 + accessData, err := rtm.serializer.Encode(&AccessTokenInfo{ + LoginID: loginID, + Device: device, + }) + if err != nil { + return nil, fmt.Errorf("%w: %v", serror.ErrCommonEncode, err) } - return info, nil -} + // Encode refresh token info | 编码刷新令牌信息 + refreshData, err := rtm.serializer.Encode(info) + if err != nil { + return nil, fmt.Errorf("%w: %v", serror.ErrCommonEncode, err) + } -// RefreshAccessToken Generates new access token using refresh token | 使用刷新令牌生成新的访问令牌 -func (rtm *RefreshTokenManager) RefreshAccessToken(refreshToken string) (*RefreshTokenInfo, error) { - if refreshToken == "" { - return nil, ErrInvalidRefreshToken + // Store access token | 存储访问令牌 + if err := rtm.storage.Set( + rtm.getTokenKey(accessToken), + accessData, + rtm.accessTTL, + ); err != nil { + return nil, err + } + + // Store refresh token | 存储刷新令牌 + if err := rtm.storage.Set( + rtm.getRefreshKey(refreshToken), + refreshData, + rtm.refreshTTL, + ); err != nil { + return nil, err } - // Get refresh token info | 获取刷新令牌信息 - key := rtm.getRefreshKey(refreshToken) + return info, nil +} + +// VerifyAccessToken Check token exists | 验证访问令牌是否存在 +func (rtm *RefreshTokenManager) VerifyAccessToken(accessToken string) bool { + return rtm.storage.Exists(rtm.getTokenKey(accessToken)) +} - // Get refresh token info | 获取刷新令牌信息 - data, err := rtm.storage.Get(key) +// VerifyAccessTokenAndGetInfo Verify and get info | 验证访问令牌并获取信息 +func (rtm *RefreshTokenManager) VerifyAccessTokenAndGetInfo(accessToken string) (*AccessTokenInfo, bool) { + data, err := rtm.storage.Get(rtm.getTokenKey(accessToken)) if err != nil || data == nil { - return nil, ErrInvalidRefreshToken + return nil, false } - // Convert to RefreshTokenInfo | 转换为 RefreshTokenInfo - dataBytes, err := utils.ToBytes(data) + bytes, err := utils.ToBytes(data) if err != nil { - return nil, ErrInvalidRefreshData + return nil, false } - // Unmarshal data | 反序列化数据 - oldInfo := &RefreshTokenInfo{} - err = oldInfo.UnmarshalBinary(dataBytes) - if err != nil { - return nil, ErrInvalidRefreshData + var info AccessTokenInfo + if err := rtm.serializer.Decode(bytes, &info); err != nil { + return nil, false } - // Check expiration | 检查是否过期 - if time.Now().Unix() > oldInfo.ExpireTime { - // 删除刷新令牌 - rtm.storage.Delete(key) - // TODO 删除访问令牌 - return nil, ErrRefreshTokenExpired + return &info, true +} + +// RefreshAccessToken Refresh access token by refresh token | 使用刷新令牌刷新访问令牌 +func (rtm *RefreshTokenManager) RefreshAccessToken(refreshToken string) (*RefreshTokenInfo, error) { + if refreshToken == "" { + return nil, serror.ErrInvalidRefreshToken } - // Generate new access token | 生成新的访问令牌 - newAccessToken, err := rtm.tokenGen.Generate(oldInfo.LoginID, oldInfo.Device) + refreshKey := rtm.getRefreshKey(refreshToken) + + // Load refresh token | 读取刷新令牌 + data, err := rtm.storage.Get(refreshKey) + if err != nil || data == nil { + return nil, serror.ErrInvalidRefreshToken + } + bytes, err := utils.ToBytes(data) if err != nil { - return nil, fmt.Errorf("failed to generate new access token: %w", err) + return nil, err } - // Update access token info | 更新访问令牌信息 - oldInfo.AccessToken = newAccessToken + var info RefreshTokenInfo + if err := rtm.serializer.Decode(bytes, &info); err != nil { + return nil, err + } - // Save token-loginID mapping (符合 Java sa-token 设计) | 保存 Token-LoginID 映射 - tokenKey := rtm.getTokenKey(newAccessToken) - if err := rtm.storage.Set(tokenKey, oldInfo.LoginID, rtm.accessTTL); err != nil { - return nil, fmt.Errorf("failed to save token: %w", err) + // Check expiration | 检查过期 + if time.Now().Unix() > info.ExpireTime { + _ = rtm.storage.Delete(refreshKey) + return nil, serror.ErrRefreshTokenExpired } - // Update storage | 更新存储 - if err := rtm.storage.Set(key, oldInfo, rtm.refreshTTL); err != nil { - return nil, fmt.Errorf("failed to update refresh token: %w", err) + // Remove old access token | 删除旧访问令牌 + if info.AccessToken != "" { + _ = rtm.storage.Delete(rtm.getTokenKey(info.AccessToken)) } - return oldInfo, nil -} + // Generate new access token | 生成新访问令牌 + newAccessToken, err := rtm.tokenGen.Generate(info.LoginID, info.Device) + if err != nil { + return nil, err + } + info.AccessToken = newAccessToken -// RevokeRefreshToken Revokes a refresh token | 撤销刷新令牌 -func (rtm *RefreshTokenManager) RevokeRefreshToken(refreshToken string) error { - if refreshToken == "" { - return nil + // Store new access token | 存储新访问令牌 + accessData, err := rtm.serializer.Encode(&AccessTokenInfo{ + LoginID: info.LoginID, + Device: info.Device, + }) + if err != nil { + return nil, fmt.Errorf("%w: %v", serror.ErrCommonEncode, err) + } + if err := rtm.storage.Set( + rtm.getTokenKey(newAccessToken), + accessData, + rtm.accessTTL, + ); err != nil { + return nil, err + } + + // Update refresh token without extending TTL | 更新刷新令牌但不续期 + refreshData, err := rtm.serializer.Encode(&info) + if err != nil { + return nil, fmt.Errorf("%w: %v", serror.ErrCommonEncode, err) + } + if err = rtm.storage.SetKeepTTL(refreshKey, refreshData); err != nil { + return nil, err } - key := rtm.getRefreshKey(refreshToken) - return rtm.storage.Delete(key) + + return &info, nil } -// GetRefreshTokenInfo Gets refresh token information | 获取刷新令牌信息 +// GetRefreshTokenInfo Get refresh token info by token | 根据刷新令牌获取刷新令牌信息 func (rtm *RefreshTokenManager) GetRefreshTokenInfo(refreshToken string) (*RefreshTokenInfo, error) { if refreshToken == "" { - return nil, ErrInvalidRefreshToken + return nil, serror.ErrInvalidRefreshToken } - key := rtm.getRefreshKey(refreshToken) + refreshKey := rtm.getRefreshKey(refreshToken) - data, err := rtm.storage.Get(key) + // Load refresh token | 读取刷新令牌 + data, err := rtm.storage.Get(refreshKey) if err != nil || data == nil { - return nil, ErrInvalidRefreshToken + return nil, serror.ErrInvalidRefreshToken } - dataBytes, err := utils.ToBytes(data) + bytes, err := utils.ToBytes(data) if err != nil { - return nil, ErrInvalidRefreshData + return nil, err } - info := &RefreshTokenInfo{} - err = info.UnmarshalBinary(dataBytes) - if err != nil { - return nil, ErrInvalidRefreshData + var info RefreshTokenInfo + if err = rtm.serializer.Decode(bytes, &info); err != nil { + return nil, fmt.Errorf("%w: %v", serror.ErrCommonDecode, err) } - return info, nil + return &info, nil } -// IsValid Checks if refresh token is valid | 检查刷新令牌是否有效 +// RevokeRefreshToken Remove refresh token | 撤销刷新令牌 +func (rtm *RefreshTokenManager) RevokeRefreshToken(refreshToken string) error { + if refreshToken == "" { + return nil + } + return rtm.storage.Delete(rtm.getRefreshKey(refreshToken)) +} + +// IsValid Check refresh token valid | 判断刷新令牌是否有效 func (rtm *RefreshTokenManager) IsValid(refreshToken string) bool { - info, err := rtm.GetRefreshTokenInfo(refreshToken) + data, err := rtm.storage.Get(rtm.getRefreshKey(refreshToken)) + if err != nil || data == nil { + return false + } + bytes, err := utils.ToBytes(data) if err != nil { return false } + var info RefreshTokenInfo + if err = rtm.serializer.Decode(bytes, &info); err != nil { + return false + } return time.Now().Unix() <= info.ExpireTime } -// getRefreshKey Gets storage key for refresh token | 获取刷新令牌的存储键 +// getRefreshKey Build refresh token key | 构建刷新令牌 Key func (rtm *RefreshTokenManager) getRefreshKey(refreshToken string) string { - return rtm.keyPrefix + RefreshKeySuffix + refreshToken + return rtm.keyPrefix + rtm.authType + RefreshKeySuffix + refreshToken } -// getTokenKey Gets token storage key | 获取Token存储键 +// getTokenKey Build access token key | 构建访问令牌 Key func (rtm *RefreshTokenManager) getTokenKey(tokenValue string) string { - return rtm.keyPrefix + rtm.tokenKeyPrefix + tokenValue + return rtm.keyPrefix + rtm.authType + rtm.tokenKeyPrefix + tokenValue } diff --git a/core/serror/errors.go b/core/serror/errors.go index 591288a..4fa8894 100644 --- a/core/serror/errors.go +++ b/core/serror/errors.go @@ -5,43 +5,35 @@ import ( "errors" ) -// 此模块只需要把公共的err定义在这里统一使用 模块内部的err在文件内定义就可以了 - -// Common Errors | Common 错误 var ( - ErrCommonMarshal = errors.New("failed to marshal data") // failed to marshal data | 序列化数据失败 - ErrCommonUnmarshal = errors.New("failed to unmarshal data") // failed to unmarshal data | 反序列化数据失败 -) + ErrCommonEncode = errors.New("failed to encode data") // failed to marshal data | 序列化数据失败 + ErrCommonDecode = errors.New("failed to decode data") // failed to unmarshal data | 反序列化数据失败 -// RenewPool Errors | RenewPool 错误 -var ( ErrRenewPoolNotStarted = errors.New("renew pool not started") // renew pool not started | 续期线程池未启动 -) - -// Manager Errors | Manager 错误 -var ( - ErrTokenNotFound = errors.New("token not found") // token not found | Token 不存在 - ErrInvalidTokenData = errors.New("invalid token data") // invalid token data | Token 数据无效 - ErrTokenKickout = errors.New("token has been kicked out") // token has been kicked out | Token 已被踢下线 - ErrTokenReplaced = errors.New("token has been replaced") // token has been replaced | Token 已被顶下线 + ErrTokenNotFound = errors.New("token not found") // token not found | Token 不存在 + ErrInvalidTokenData = errors.New("invalid token data") // invalid token data | Token 数据无效 + ErrTokenKickout = errors.New("token has been kicked out") // token has been kicked out | Token 已被踢下线 + ErrTokenReplaced = errors.New("token has been replaced") // token has been replaced | Token 已被顶下线 ErrNotLogin = errors.New("not login") // not login | 未登录 ErrAccountDisabled = errors.New("account is disabled") // account is disabled | 账号已被禁用 ErrLoginLimitExceeded = errors.New("login count exceeds the maximum limit") // login count exceeds the maximum limit | 超出最大登录数量限制 -) - -// Oauth2 Errors | Oauth2 错误 -var ( - ErrClientOrClientIDEmpty = errors.New("invalid client: clientID is required") - ErrClientNotFound = errors.New("client not found") - ErrInvalidRedirectURI = errors.New("invalid redirect_uri") - ErrInvalidClientCredentials = errors.New("invalid client credentials") - ErrInvalidAuthCode = errors.New("invalid authorization code") - ErrAuthCodeUsed = errors.New("authorization code already used") - ErrAuthCodeExpired = errors.New("authorization code expired") - ErrClientMismatch = errors.New("client mismatch") - ErrRedirectURIMismatch = errors.New("redirect_uri mismatch") - ErrInvalidAccessToken = errors.New("invalid access token") - //ErrInvalidTokenData = errors.New("invalid token data") + ErrClientOrClientIDEmpty = errors.New("invalid client: clientID is required") // client or clientID is empty | 客户端或客户端ID为空 + ErrClientNotFound = errors.New("client not found") // client not found | 客户端不存在 + ErrUserIDEmpty = errors.New("userID cannot be empty") // userID is empty | 用户ID不能为空 + ErrInvalidRedirectURI = errors.New("invalid redirectUri") // invalid redirect URI | 回调URI非法 + ErrInvalidClientCredentials = errors.New("invalid client credentials") // invalid client credentials | 客户端凭证无效 + ErrInvalidAuthCode = errors.New("invalid authorization code") // invalid authorization code | 授权码无效 + ErrAuthCodeUsed = errors.New("authorization code already used") // authorization code already used | 授权码已被使用 + ErrAuthCodeExpired = errors.New("authorization code expired") // authorization code expired | 授权码已过期 + ErrClientMismatch = errors.New("client mismatch") // client mismatch | 客户端不匹配 + ErrRedirectURIMismatch = errors.New("redirectUri mismatch") // redirect URI mismatch | 回调URI不匹配 + ErrInvalidAccessToken = errors.New("invalid access token") // invalid access token | 访问令牌无效 + ErrInvalidRefreshToken = errors.New("invalid refresh token") // invalid refresh token | 刷新令牌无效 + + ErrInvalidNonce = errors.New("invalid or expired nonce") // invalid or expired nonce | Nonce 无效或已过期 + ErrInvalidLoginIDEmpty = errors.New("loginID cannot be empty") // loginID is empty | 登录ID不能为空 + + ErrRefreshTokenExpired = errors.New("refresh token expired") // refresh token expired | 刷新令牌已过期 ) diff --git a/core/session/session.go b/core/session/session.go index a45f682..2c6e327 100644 --- a/core/session/session.go +++ b/core/session/session.go @@ -3,10 +3,11 @@ package session import ( "errors" "fmt" - "github.com/click33/sa-token-go/core/dep" + codec_json "github.com/click33/sa-token-go/codec/json" "github.com/click33/sa-token-go/core/manager" "github.com/click33/sa-token-go/core/serror" "github.com/click33/sa-token-go/core/utils" + "github.com/click33/sa-token-go/storage/memory" "sync" "time" @@ -15,18 +16,25 @@ import ( // Session Session object for storing user data | 会话对象,用于存储用户数据 type Session struct { - AuthType string `json:"authType"` // Authentication system type | 认证体系类型 - ID string `json:"id"` // Session ID | Session标识 - CreateTime int64 `json:"createTime"` // Creation time | 创建时间 - Data map[string]any `json:"data"` // Session data | 数据 - prefix string `json:"-"` // Key prefix | 键前缀 - storage adapter.Storage `json:"-"` // Storage backend | 存储 - mu sync.RWMutex `json:"-"` // Read-write lock | 读写锁 - deps *dep.Dep `json:"-"` // Dependencies manager | 依赖管理器 + AuthType string `json:"authType"` // Authentication system type | 认证体系类型 + ID string `json:"id"` // Session ID | Session标识 + CreateTime int64 `json:"createTime"` // Creation time | 创建时间 + Data map[string]any `json:"data"` // Session data | 数据 + prefix string `json:"-" msgpack:"-"` // Key prefix | 键前缀 + mu sync.RWMutex `json:"-" msgpack:"-"` // Read-write lock | 读写锁 + storage adapter.Storage `json:"-" msgpack:"-"` // Storage adapter (Redis, Memory, etc.) | 存储适配器(如 Redis、Memory) + serializer adapter.Codec `json:"-" msgpack:"-"` // Codec adapter for encoding and decoding operations | 编解码器适配器 } // NewSession Creates a new session | 创建新的Session -func NewSession(authType, id, prefix string, deps *dep.Dep, storage adapter.Storage) *Session { +func NewSession(authType, id, prefix string, storage adapter.Storage, serializer adapter.Codec) *Session { + if storage == nil { + storage = memory.NewStorage() + } + if serializer == nil { + serializer = codec_json.NewJSONSerializer() + } + return &Session{ AuthType: authType, ID: id, @@ -34,7 +42,7 @@ func NewSession(authType, id, prefix string, deps *dep.Dep, storage adapter.Stor Data: make(map[string]any), prefix: prefix, storage: storage, - deps: deps, + serializer: serializer, } } @@ -212,9 +220,9 @@ func (s *Session) getStorageKey() string { // save Saves session to storage | 保存到存储 func (s *Session) save(ttl ...time.Duration) error { - data, err := s.deps.GetSerializer().Encode(s) + data, err := s.serializer.Encode(s) if err != nil { - return fmt.Errorf("%w: %v", serror.ErrCommonMarshal, err) + return fmt.Errorf("%w: %v", serror.ErrCommonEncode, err) } key := s.getStorageKey() @@ -230,9 +238,9 @@ func (s *Session) save(ttl ...time.Duration) error { // saveKeepTTL saves session while preserving its TTL | 保存 Session 并保留现有 TTL func (s *Session) saveKeepTTL() error { - data, err := s.deps.GetSerializer().Encode(s) + data, err := s.serializer.Encode(s) if err != nil { - return fmt.Errorf("%w: %v", serror.ErrCommonMarshal, err) + return fmt.Errorf("%w: %v", serror.ErrCommonEncode, err) } key := s.getStorageKey() @@ -273,7 +281,7 @@ func Load(id string, m *manager.Manager) (*Session, error) { } var session Session - if err = m.GetDeps().GetSerializer().Decode(raw, &session); err != nil { + if err = m.GetSerializer().Decode(raw, &session); err != nil { return nil, fmt.Errorf("%w: %v", serror.ErrCommonUnmarshal, err) } diff --git a/core/stgmanager/stgmanager.go b/core/stgmanager/stgmanager.go deleted file mode 100644 index 9537717..0000000 --- a/core/stgmanager/stgmanager.go +++ /dev/null @@ -1,56 +0,0 @@ -// @Author daixk 2025/12/7 12:58:00 -package stgmanager - -import ( - "errors" - "github.com/click33/sa-token-go/core/manager" - "sync" -) - -// StgManager 管理多个 StgManager 实例 | Manages multiple StgManager instances -type StgManager struct { - stpLogicMap sync.Map // 使用 sync.Map 替代 map 和 RWMutex | Replaces map and RWMutex with sync.Map -} - -var ( - // defaultStgManager 是一个全局变量,表示默认的 StgManager 实例 | The default global StgManager instance - defaultStgManager *StgManager -) - -// NewStgManager 创建 StgManager 实例 | Creates an instance of StgManager -func NewStgManager() *StgManager { - return &StgManager{} -} - -// Init 初始化默认的 StgManager 实例 | Initializes the default StgManager instance -// 此方法将创建一个新的 StgManager 实例并将其赋值为默认实例 | This method creates a new StgManager instance and assigns it as the default instance -func (m *StgManager) init() { - defaultStgManager = NewStgManager() // 创建一个新的 StgManager 实例 | Creates a new StgManager instance -} - -// PutStgLogic 向 StgManager 中添加一个 StgManager 实例 | Adds a StgManager instance to the StgManager -func (m *StgManager) PutStgLogic(loginType string, logic *manager.Manager) { - m.stpLogicMap.Store(loginType, logic) // 使用 Store 方法将数据存入 sync.Map | Use Store method to store data in sync.Map -} - -// GetStgLogic 根据 loginType 获取对应的 StgManager 实例 | Retrieves the StgManager instance by loginType -func (m *StgManager) GetStgLogic(loginType string) (*manager.Manager, error) { - value, exists := m.stpLogicMap.Load(loginType) // 使用 Load 方法从 sync.Map 中获取数据 | Use Load method to get data from sync.Map - if !exists { - return nil, errors.New("StgLogic not found for loginType: " + loginType) - } - logic, ok := value.(*manager.Manager) // 将获取的值断言为正确的类型 | Assert the retrieved value to the correct type - if !ok { - return nil, errors.New("Invalid StgLogic type") - } - return logic, nil -} - -// InitDefaultStgManager 初始化并返回默认的 StgManager 实例 | Initializes and returns the default StgManager instance -// 如果默认实例尚未创建,则会初始化并返回 | If the default instance hasn't been created, it initializes and returns it -func InitDefaultStgManager() *StgManager { - if defaultStgManager == nil { - defaultStgManager = NewStgManager() // 初始化默认 StgManager 实例 | Initialize the default StgManager instance - } - return defaultStgManager -} diff --git a/core/stplic.go b/core/stplic.go deleted file mode 100644 index 072d2a4..0000000 --- a/core/stplic.go +++ /dev/null @@ -1,2 +0,0 @@ -// @Author daixk 2025/12/7 15:03:00 -package core diff --git a/core/token/consts.go b/core/token/consts.go index 8db4681..a5528f1 100644 --- a/core/token/consts.go +++ b/core/token/consts.go @@ -1,10 +1,10 @@ -// @Author daixk 2025/12/5 15:55:00 +// @Author daixk 2025/12/15 15:30:00 package token // Constants for token generation | Token生成常量 const ( - DefaultJWTSecret = "default-secret-key" // Should be overridden in production | 生产环境应覆盖 - TikTokenLength = 11 // TikTok-style short ID length | Tik风格短ID长度 + DefaultJWTSecret = "log-secret-key" // Should be overridden in production | 生产环境应覆盖 + TikTokenLength = 11 // TikTok-style short ID length | Tik风格短ID长度 TikCharset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" HashRandomBytesLen = 16 // Random bytes length for hash token | 哈希Token的随机字节长度 TimestampRandomLen = 8 // Random bytes length for timestamp token | 时间戳Token的随机字节长度 diff --git a/core/token/token_adaper.go b/core/token/token_adaper.go deleted file mode 100644 index 943e404..0000000 --- a/core/token/token_adaper.go +++ /dev/null @@ -1,11 +0,0 @@ -// @Author daixk 2025/12/5 15:52:00 -package token - -// TokenGenerator token generation interface | Token生成接口 -type TokenGenerator interface { - // Generate generates token based on implementation | 生成Token(由实现决定具体规则) - Generate(loginID, device string) (string, error) -} - -// Ensure Generator implements TokenGenerator | 确保Generator实现了TokenGenerator接口 -var _ TokenGenerator = (*Generator)(nil) diff --git a/core/token/token_test.go b/core/token/token_test.go deleted file mode 100644 index 693da94..0000000 --- a/core/token/token_test.go +++ /dev/null @@ -1,119 +0,0 @@ -package token - -import ( - "testing" - - "github.com/click33/sa-token-go/core/config" -) - -func TestGenerateHash(t *testing.T) { - cfg := &config.Config{ - TokenStyle: config.TokenStyleHash, - Timeout: 3600, - } - gen := NewGenerator(cfg) - - token1, err := gen.Generate("user1000", "default") - if err != nil { - t.Fatalf("Failed to generate hash token: %v", err) - } - - if len(token1) != 64 { - t.Errorf("Hash token should be 64 characters, got %d", len(token1)) - } - - // Generate another token, should be different - token2, err := gen.Generate("user1000", "default") - if err != nil { - t.Fatalf("Failed to generate second hash token: %v", err) - } - - if token1 == token2 { - t.Error("Hash tokens should be different due to randomness") - } - - t.Logf("Hash Token 1: %s", token1) - t.Logf("Hash Token 2: %s", token2) -} - -func TestGenerateTimestamp(t *testing.T) { - cfg := &config.Config{ - TokenStyle: config.TokenStyleTimestamp, - Timeout: 3600, - } - gen := NewGenerator(cfg) - - token, err := gen.Generate("user1000", "default") - if err != nil { - t.Fatalf("Failed to generate timestamp token: %v", err) - } - - // Timestamp token format: timestamp_loginID_random - if len(token) < 20 { - t.Errorf("Timestamp token seems too short: %s", token) - } - - t.Logf("Timestamp Token: %s", token) -} - -func TestGenerateTik(t *testing.T) { - cfg := &config.Config{ - TokenStyle: config.TokenStyleTik, - Timeout: 3600, - } - gen := NewGenerator(cfg) - - token, err := gen.Generate("user1000", "default") - if err != nil { - t.Fatalf("Failed to generate tik token: %v", err) - } - - if len(token) != 11 { - t.Errorf("Tik token should be 11 characters, got %d", len(token)) - } - - // Check all characters are alphanumeric - for _, c := range token { - if !((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) { - t.Errorf("Tik token should only contain alphanumeric characters, got: %c in %s", c, token) - } - } - - t.Logf("Tik Token: %s", token) -} - -func TestAllTokenStyles(t *testing.T) { - styles := []config.TokenStyle{ - config.TokenStyleUUID, - config.TokenStyleSimple, - config.TokenStyleRandom32, - config.TokenStyleRandom64, - config.TokenStyleRandom128, - config.TokenStyleJWT, - config.TokenStyleHash, - config.TokenStyleTimestamp, - config.TokenStyleTik, - } - - for _, style := range styles { - t.Run(string(style), func(t *testing.T) { - cfg := &config.Config{ - TokenStyle: style, - Timeout: 3600, - JwtSecretKey: "test-secret-key", - } - gen := NewGenerator(cfg) - - token, err := gen.Generate("user1000", "default") - if err != nil { - t.Fatalf("Failed to generate %s token: %v", style, err) - } - - if token == "" { - t.Errorf("%s token should not be empty", style) - } - - t.Logf("%s Token: %s (length: %d)", style, token, len(token)) - }) - } -} diff --git a/core/utils/utils.go b/core/utils/utils.go index 8668ec3..8a252a0 100644 --- a/core/utils/utils.go +++ b/core/utils/utils.go @@ -109,7 +109,7 @@ func IsNotEmpty(s string) bool { return !IsEmpty(s) } -// DefaultString returns default value if string is empty | 如果字符串为空则返回默认值 +// DefaultString returns log value if string is empty | 如果字符串为空则返回默认值 func DefaultString(s, defaultValue string) string { if IsEmpty(s) { return defaultValue diff --git a/docs/guide/authentication.md b/docs/guide/authentication.md index 726845d..ff1a226 100644 --- a/docs/guide/authentication.md +++ b/docs/guide/authentication.md @@ -86,7 +86,7 @@ fmt.Println("Create Time:", info.CreateTime) ### Concurrent Login ```go -// Allow concurrent login (default: true) +// Allow concurrent login (log: true) core.NewBuilder(). IsConcurrent(true). Build() @@ -95,7 +95,7 @@ core.NewBuilder(). ### Share Token ```go -// Share token for concurrent logins (default: true) +// Share token for concurrent logins (log: true) core.NewBuilder(). IsShare(true). Build() diff --git a/docs/guide/listener_zh.md b/docs/guide/listener_zh.md index 75c716b..0852d0c 100644 --- a/docs/guide/listener_zh.md +++ b/docs/guide/listener_zh.md @@ -77,7 +77,7 @@ import ( ) func main() { - // Create manager with default event support + // Create manager with log event support manager := core.NewBuilder(). Storage(memory.NewStorage()). Build() diff --git a/docs/guide/nonce.md b/docs/guide/nonce.md index acb53ea..9eccee0 100644 --- a/docs/guide/nonce.md +++ b/docs/guide/nonce.md @@ -222,7 +222,7 @@ POST /search // Search // Quick operations (1 minute) core.NewNonceManager(storage, 60) -// Form submissions (5 minutes, default) +// Form submissions (5 minutes, log) core.NewNonceManager(storage, 300) // Long processes (10 minutes) diff --git a/docs/guide/redis-storage_zh.md b/docs/guide/redis-storage_zh.md index ba136a0..6f4bd1c 100644 --- a/docs/guide/redis-storage_zh.md +++ b/docs/guide/redis-storage_zh.md @@ -408,7 +408,7 @@ Key: satoken:token:6R9twUC-OL_uL6JQFKfncyoVuK3NlDL2... Value: 1000 # 只是简单的字符串(4 bytes) # Account 键(loginID -> Token) -Key: satoken:account:1000:default +Key: satoken:account:1000:log Value: 6R9twUC-OL_uL6JQFKfncyoVuK3NlDL2... # Session 键(存储完整用户对象和自定义数据) @@ -438,7 +438,7 @@ GET satoken:token:6R9twUC-OL_uL6JQFKfncyoVuK3NlDL2... # 输出: "1000" # 查看 Account 映射(返回 Token) -GET satoken:account:1000:default +GET satoken:account:1000:log # 输出: "6R9twUC-OL_uL6JQFKfncyoVuK3NlDL2..." # 查看用户 Session(包含完整用户数据) diff --git a/docs/guide/single-import.md b/docs/guide/single-import.md index e48c9a8..5456808 100644 --- a/docs/guide/single-import.md +++ b/docs/guide/single-import.md @@ -230,7 +230,7 @@ All functions from `core` and `stputil` are re-exported in framework integration ### Configuration & Initialization ```go -config := sagin.DefaultConfig() // Create default config +config := sagin.DefaultConfig() // Create log config manager := sagin.NewManager(storage, cfg) // Create manager builder := sagin.NewBuilder() // Create builder sagin.SetManager(manager) // Set global manager diff --git a/go.work b/go.work index 5dd5f54..dffe24c 100644 --- a/go.work +++ b/go.work @@ -1,6 +1,8 @@ go 1.25.3 use ( + ./codec/json + ./codec/msgpack ./core ./examples/kratos/kratos-example ./integrations/chi @@ -9,6 +11,10 @@ use ( ./integrations/gf ./integrations/gin ./integrations/kratos + ./log/gf + ./log/nop + ./log/slog + ./pool/ants ./storage/memory ./storage/redis ./stputil diff --git a/integrations/chi/export.go b/integrations/chi/export.go index 7b756c9..417371c 100644 --- a/integrations/chi/export.go +++ b/integrations/chi/export.go @@ -100,7 +100,7 @@ var ( // ============ Core constructor functions | 核心构造函数 ============ -// DefaultConfig returns default configuration | 返回默认配置 +// DefaultConfig returns log configuration | 返回默认配置 func DefaultConfig() *Config { return core.DefaultConfig() } diff --git a/integrations/chi/plugin.go b/integrations/chi/plugin.go index 7fdab88..126038d 100644 --- a/integrations/chi/plugin.go +++ b/integrations/chi/plugin.go @@ -100,7 +100,7 @@ func (p *Plugin) LoginHandler(w http.ResponseWriter, r *http.Request) { device := req.Device if device == "" { - device = "default" + device = "log" } token, err := p.manager.Login(req.Username, device) diff --git a/integrations/echo/export.go b/integrations/echo/export.go index 2d62528..b6e9562 100644 --- a/integrations/echo/export.go +++ b/integrations/echo/export.go @@ -100,7 +100,7 @@ var ( // ============ Core constructor functions | 核心构造函数 ============ -// DefaultConfig returns default configuration | 返回默认配置 +// DefaultConfig returns log configuration | 返回默认配置 func DefaultConfig() *Config { return core.DefaultConfig() } diff --git a/integrations/echo/go.sum b/integrations/echo/go.sum index 7077012..79d94db 100644 --- a/integrations/echo/go.sum +++ b/integrations/echo/go.sum @@ -1,5 +1,5 @@ -github.com/click33/sa-token-go/stputil v0.1.4 h1:YvMEwPfAfTunQn+AePudO3Esp0CvLoc2o5kmg/uZf/c= -github.com/click33/sa-token-go/stputil v0.1.4/go.mod h1:NiFR1mUb43QRcybueAjyMeXxx92RngvpP4eLbglxEb0= +github.com/click33/sa-token-go/stputil v0.1.5 h1:603tbI4JkBTg3MnfTj+lCMDxJOKSCOqsMyC2zyuvEco= +github.com/click33/sa-token-go/stputil v0.1.5/go.mod h1:YH+3NLXgGJfrS2wkGubMWFnr/Nk0GgejOtRxcE+9x0c= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= diff --git a/integrations/echo/plugin.go b/integrations/echo/plugin.go index 50299c8..e264f29 100644 --- a/integrations/echo/plugin.go +++ b/integrations/echo/plugin.go @@ -93,7 +93,7 @@ func (p *Plugin) LoginHandler(c echo.Context) error { device := req.Device if device == "" { - device = "default" + device = "log" } token, err := p.manager.Login(req.Username, device) diff --git a/integrations/fiber/export.go b/integrations/fiber/export.go index 038d0d3..af0828d 100644 --- a/integrations/fiber/export.go +++ b/integrations/fiber/export.go @@ -100,7 +100,7 @@ var ( // ============ Core constructor functions | 核心构造函数 ============ -// DefaultConfig returns default configuration | 返回默认配置 +// DefaultConfig returns log configuration | 返回默认配置 func DefaultConfig() *Config { return core.DefaultConfig() } diff --git a/integrations/fiber/go.sum b/integrations/fiber/go.sum index a04b709..26f6381 100644 --- a/integrations/fiber/go.sum +++ b/integrations/fiber/go.sum @@ -1,5 +1,5 @@ github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs= -github.com/click33/sa-token-go/stputil v0.1.4 h1:YvMEwPfAfTunQn+AePudO3Esp0CvLoc2o5kmg/uZf/c= +github.com/click33/sa-token-go/stputil v0.1.5 h1:603tbI4JkBTg3MnfTj+lCMDxJOKSCOqsMyC2zyuvEco= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/gofiber/fiber/v2 v2.52.0 h1:S+qXi7y+/Pgvqq4DrSmREGiFwtB7Bu6+QFLuIHYw/UE= github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= diff --git a/integrations/fiber/plugin.go b/integrations/fiber/plugin.go index 7aa193b..be742c7 100644 --- a/integrations/fiber/plugin.go +++ b/integrations/fiber/plugin.go @@ -86,7 +86,7 @@ func (p *Plugin) LoginHandler(c *fiber.Ctx) error { device := req.Device if device == "" { - device = "default" + device = "log" } token, err := p.manager.Login(req.Username, device) diff --git a/integrations/gf/export.go b/integrations/gf/export.go index 1c73b61..194f3d3 100644 --- a/integrations/gf/export.go +++ b/integrations/gf/export.go @@ -100,7 +100,7 @@ var ( // ============ Core constructor functions | 核心构造函数 ============ -// DefaultConfig returns default configuration | 返回默认配置 +// DefaultConfig returns log configuration | 返回默认配置 func DefaultConfig() *Config { return core.DefaultConfig() } diff --git a/integrations/gf/go.mod b/integrations/gf/go.mod index 340f21f..d4347f1 100644 --- a/integrations/gf/go.mod +++ b/integrations/gf/go.mod @@ -11,7 +11,6 @@ require ( require ( github.com/BurntSushi/toml v1.5.0 // indirect github.com/clbanning/mxj/v2 v2.7.0 // indirect - github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/emirpasic/gods v1.18.1 // indirect github.com/fatih/color v1.18.0 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect @@ -29,7 +28,6 @@ require ( github.com/olekukonko/ll v0.0.9 // indirect github.com/olekukonko/tablewriter v1.1.0 // indirect github.com/panjf2000/ants/v2 v2.11.3 // indirect - github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rivo/uniseg v0.4.7 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/otel v1.38.0 // indirect diff --git a/integrations/gf/go.sum b/integrations/gf/go.sum index 18b899f..2b8b5ae 100644 --- a/integrations/gf/go.sum +++ b/integrations/gf/go.sum @@ -1,8 +1,8 @@ github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME= -github.com/click33/sa-token-go/core v0.1.4 h1:mODeJ0WKSusQmiO5b/uK9UDD0OFqLrkJ/j7W/2e3Ios= -github.com/click33/sa-token-go/core v0.1.4/go.mod h1:LK9zMyf3L8adSAYkAQj8ypwxKicS1q0qxdWV5uLDD6E= -github.com/click33/sa-token-go/stputil v0.1.4 h1:YvMEwPfAfTunQn+AePudO3Esp0CvLoc2o5kmg/uZf/c= +github.com/click33/sa-token-go/core v0.1.5 h1:+1ze5dX8C6+DfOc/3O6eQuY4QYHAmSXB0Qg+x3zMUOs= +github.com/click33/sa-token-go/core v0.1.5/go.mod h1:mb3AQAJIXqx9WdULyn5qjufK1j/u+kgB0q+tafHVhgk= +github.com/click33/sa-token-go/stputil v0.1.5 h1:603tbI4JkBTg3MnfTj+lCMDxJOKSCOqsMyC2zyuvEco= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= diff --git a/integrations/gf/plugin.go b/integrations/gf/plugin.go index d9d18db..e540b85 100644 --- a/integrations/gf/plugin.go +++ b/integrations/gf/plugin.go @@ -211,7 +211,7 @@ func (p *Plugin) LoginHandler(r *ghttp.Request) { device := req.Device if device == "" { - device = "default" + device = "log" } token, err := p.manager.Login(req.Username, device) diff --git a/integrations/gin/export.go b/integrations/gin/export.go index 56177a2..fb12168 100644 --- a/integrations/gin/export.go +++ b/integrations/gin/export.go @@ -100,7 +100,7 @@ var ( // ============ Core constructor functions | 核心构造函数 ============ -// DefaultConfig returns default configuration | 返回默认配置 +// DefaultConfig returns log configuration | 返回默认配置 func DefaultConfig() *Config { return core.DefaultConfig() } diff --git a/integrations/gin/plugin.go b/integrations/gin/plugin.go index d5e3f29..162a741 100644 --- a/integrations/gin/plugin.go +++ b/integrations/gin/plugin.go @@ -108,7 +108,7 @@ func (p *Plugin) LoginHandler(c *gin.Context) { // Login | 登录 device := req.Device if device == "" { - device = "default" + device = "log" } token, err := p.manager.Login(req.Username, device) diff --git a/integrations/kratos/export.go b/integrations/kratos/export.go index 595df16..8292262 100644 --- a/integrations/kratos/export.go +++ b/integrations/kratos/export.go @@ -100,7 +100,7 @@ var ( // ============ Core constructor functions | 核心构造函数 ============ -// DefaultConfig returns default configuration | 返回默认配置 +// DefaultConfig returns log configuration | 返回默认配置 func DefaultConfig() *Config { return core.DefaultConfig() } diff --git a/integrations/kratos/go.mod b/integrations/kratos/go.mod index ee423cc..d52d62d 100644 --- a/integrations/kratos/go.mod +++ b/integrations/kratos/go.mod @@ -12,7 +12,6 @@ require ( ) require ( - github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/go-kratos/aegis v0.2.0 // indirect github.com/go-playground/assert/v2 v2.2.0 // indirect github.com/go-playground/form/v4 v4.2.0 // indirect @@ -21,9 +20,7 @@ require ( github.com/gorilla/mux v1.8.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/panjf2000/ants/v2 v2.11.3 // indirect - github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rogpeppe/go-internal v1.13.1 // indirect - github.com/stretchr/testify v1.11.1 // indirect golang.org/x/net v0.43.0 // indirect golang.org/x/sync v0.16.0 // indirect golang.org/x/sys v0.35.0 // indirect diff --git a/integrations/kratos/go.sum b/integrations/kratos/go.sum index 17c483d..8f2ff7a 100644 --- a/integrations/kratos/go.sum +++ b/integrations/kratos/go.sum @@ -1,6 +1,6 @@ -github.com/click33/sa-token-go/core v0.1.4 h1:mODeJ0WKSusQmiO5b/uK9UDD0OFqLrkJ/j7W/2e3Ios= -github.com/click33/sa-token-go/storage/memory v0.1.4 h1:gA2HT42Q84+qaOotHOOrVQOHTRybNxdafllELV5yw4o= -github.com/click33/sa-token-go/stputil v0.1.4 h1:YvMEwPfAfTunQn+AePudO3Esp0CvLoc2o5kmg/uZf/c= +github.com/click33/sa-token-go/core v0.1.5 h1:+1ze5dX8C6+DfOc/3O6eQuY4QYHAmSXB0Qg+x3zMUOs= +github.com/click33/sa-token-go/storage/memory v0.1.5 h1:t+OLAQ57w01Db8bvjIFYzLjgV1HTL+Rar+uZKTWu8j0= +github.com/click33/sa-token-go/stputil v0.1.5 h1:603tbI4JkBTg3MnfTj+lCMDxJOKSCOqsMyC2zyuvEco= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/go-kratos/aegis v0.2.0 h1:dObzCDWn3XVjUkgxyBp6ZeWtx/do0DPZ7LY3yNSJLUQ= diff --git a/log/gf/go.mod b/log/gf/go.mod new file mode 100644 index 0000000..db51706 --- /dev/null +++ b/log/gf/go.mod @@ -0,0 +1,27 @@ +module github.com/click33/sa-token-go/log/gf + +go 1.23.0 + +require github.com/gogf/gf/v2 v2.9.4 + +require ( + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/emirpasic/gods v1.18.1 // indirect + github.com/fatih/color v1.18.0 // indirect + github.com/fsnotify/fsnotify v1.9.0 // indirect + github.com/go-logr/logr v1.4.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/mattn/go-colorable v0.1.14 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + go.opentelemetry.io/auto/sdk v1.1.0 // indirect + go.opentelemetry.io/otel v1.38.0 // indirect + go.opentelemetry.io/otel/metric v1.38.0 // indirect + go.opentelemetry.io/otel/sdk v1.38.0 // indirect + go.opentelemetry.io/otel/trace v1.38.0 // indirect + golang.org/x/sys v0.35.0 // indirect + golang.org/x/text v0.28.0 // indirect +) + +replace github.com/click33/sa-token-go/core => ../../core diff --git a/log/gf/go.sum b/log/gf/go.sum new file mode 100644 index 0000000..84e26e9 --- /dev/null +++ b/log/gf/go.sum @@ -0,0 +1,34 @@ +github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= +github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= +github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= +github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/gogf/gf/v2 v2.9.4 h1:6vleEWypot9WBPncP2GjbpgAUeG6Mzb1YESb9nPMkjY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/grokify/html-strip-tags-go v0.1.0 h1:03UrQLjAny8xci+R+qjCce/MYnpNXCtgzltlQbOBae4= +github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE= +github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/olekukonko/errors v1.1.0 h1:RNuGIh15QdDenh+hNvKrJkmxxjV4hcS50Db478Ou5sM= +github.com/olekukonko/ll v0.0.9 h1:Y+1YqDfVkqMWuEQMclsF9HUR5+a82+dxJuL1HHSRpxI= +github.com/olekukonko/tablewriter v1.1.0 h1:N0LHrshF4T39KvI96fn6GT8HEjXRXYNDrDjKFDB7RIY= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= +go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= +go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= +go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM= +go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/log/gf/log_adaper_gf.go b/log/gf/log_adaper_gf.go new file mode 100644 index 0000000..dd57497 --- /dev/null +++ b/log/gf/log_adaper_gf.go @@ -0,0 +1,55 @@ +// @Author daixk 2025/11/27 22:58:00 +package gf + +import ( + "context" + "github.com/gogf/gf/v2/os/glog" +) + +// GFLogger adapts GoFrame v2 glog.Logger to Sa-Token logger interface | GoFrame v2 glog 适配器 +type GFLogger struct { + l *glog.Logger + ctx context.Context +} + +// ---- Implement Adapter Interface | 实现 Adapter 接口 ---- + +func (g *GFLogger) Print(v ...any) { + g.l.Print(g.ctx, v...) +} + +func (g *GFLogger) Printf(format string, v ...any) { + g.l.Printf(g.ctx, format, v...) +} + +func (g *GFLogger) Debug(v ...any) { + g.l.Debug(g.ctx, v...) +} + +func (g *GFLogger) Debugf(format string, v ...any) { + g.l.Debugf(g.ctx, format, v...) +} + +func (g *GFLogger) Info(v ...any) { + g.l.Info(g.ctx, v...) +} + +func (g *GFLogger) Infof(format string, v ...any) { + g.l.Infof(g.ctx, format, v...) +} + +func (g *GFLogger) Warn(v ...any) { + g.l.Warning(g.ctx, v...) +} + +func (g *GFLogger) Warnf(format string, v ...any) { + g.l.Warningf(g.ctx, format, v...) +} + +func (g *GFLogger) Error(v ...any) { + g.l.Error(g.ctx, v...) +} + +func (g *GFLogger) Errorf(format string, v ...any) { + g.l.Errorf(g.ctx, format, v...) +} diff --git a/log/nop/go.mod b/log/nop/go.mod new file mode 100644 index 0000000..aa9defe --- /dev/null +++ b/log/nop/go.mod @@ -0,0 +1,7 @@ +module github.com/click33/sa-token-go/log/nop + +go 1.23.0 + +require github.com/click33/sa-token-go/core v0.1.5 + +replace github.com/click33/sa-token-go/core => ../../core \ No newline at end of file diff --git a/core/log/log_adaper_nop.go b/log/nop/log_adaper_nop.go similarity index 87% rename from core/log/log_adaper_nop.go rename to log/nop/log_adaper_nop.go index 50c5d98..a05557d 100644 --- a/core/log/log_adaper_nop.go +++ b/log/nop/log_adaper_nop.go @@ -1,11 +1,10 @@ // @Author daixk 2025/11/27 21:08:00 -package log +package nop // NopLogger is a logger implementation that performs no operations | 用于禁用所有日志输出的空日志器 type NopLogger struct{} -// NewNopLogger creates a new no-op logger | 创建一个空日志器实例 -func NewNopLogger() Adapter { +func NewNopLogger() *NopLogger { return &NopLogger{} } diff --git a/log/slog/go.mod b/log/slog/go.mod new file mode 100644 index 0000000..55c416a --- /dev/null +++ b/log/slog/go.mod @@ -0,0 +1,12 @@ +module github.com/click33/sa-token-go/log/slog + +go 1.23.0 + +require github.com/click33/sa-token-go/core v0.1.5 + +require ( + github.com/panjf2000/ants/v2 v2.11.3 // indirect + golang.org/x/sync v0.16.0 // indirect +) + +replace github.com/click33/sa-token-go/core => ../../core diff --git a/log/slog/go.sum b/log/slog/go.sum new file mode 100644 index 0000000..2fb8f28 --- /dev/null +++ b/log/slog/go.sum @@ -0,0 +1,6 @@ +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/core/log/log_manager.go b/log/slog/log_adaper_slog.go similarity index 80% rename from core/log/log_manager.go rename to log/slog/log_adaper_slog.go index 660b271..106de07 100644 --- a/core/log/log_manager.go +++ b/log/slog/log_adaper_slog.go @@ -1,9 +1,10 @@ // @Author daixk -package log +package slog import ( "bytes" "fmt" + "github.com/click33/sa-token-go/core/config" "math/rand" "os" "path/filepath" @@ -19,8 +20,8 @@ import ( type Logger struct { // ---- Config & State ---- - cfg *LoggerConfig // Logger configuration | 日志配置 - cfgMu sync.RWMutex // Config lock | 配置锁 + cfg *config.LoggerConfig // Logger configuration | 日志配置 + cfgMu sync.RWMutex // Config lock | 配置锁 // ---- File IO ---- fileMu sync.Mutex // File write lock | 文件写锁 @@ -46,7 +47,7 @@ type Logger struct { } // NewLoggerWithConfig creates a logger instance | 使用配置创建日志器 -func NewLoggerWithConfig(cfg *LoggerConfig) (*Logger, error) { +func NewLoggerWithConfig(cfg *config.LoggerConfig) (*Logger, error) { newCfg, err := prepareConfig(cfg) if err != nil { return nil, err @@ -60,6 +61,7 @@ func NewLoggerWithConfig(cfg *LoggerConfig) (*Logger, error) { } l.wg.Add(1) + go func() { defer l.wg.Done() l.writerLoop() @@ -68,21 +70,8 @@ func NewLoggerWithConfig(cfg *LoggerConfig) (*Logger, error) { return l, nil } -// ---- Logging API ---- - -func (l *Logger) Print(v ...any) { l.write(LevelInfo, v...) } -func (l *Logger) Printf(f string, v ...any) { l.writef(LevelInfo, f, v...) } -func (l *Logger) Debug(v ...any) { l.write(LevelDebug, v...) } -func (l *Logger) Debugf(f string, v ...any) { l.writef(LevelDebug, f, v...) } -func (l *Logger) Info(v ...any) { l.write(LevelInfo, v...) } -func (l *Logger) Infof(f string, v ...any) { l.writef(LevelInfo, f, v...) } -func (l *Logger) Warn(v ...any) { l.write(LevelWarn, v...) } -func (l *Logger) Warnf(f string, v ...any) { l.writef(LevelWarn, f, v...) } -func (l *Logger) Error(v ...any) { l.write(LevelError, v...) } -func (l *Logger) Errorf(f string, v ...any) { l.writef(LevelError, f, v...) } - // write handles simple log output | 输出普通日志 -func (l *Logger) write(level LogLevel, args ...any) { +func (l *Logger) write(level config.LogLevel, args ...any) { if atomic.LoadUint32(&l.closed) != 0 { return } @@ -94,7 +83,7 @@ func (l *Logger) write(level LogLevel, args ...any) { } // writef handles formatted log output | 输出格式化日志 -func (l *Logger) writef(level LogLevel, format string, args ...any) { +func (l *Logger) writef(level config.LogLevel, format string, args ...any) { if atomic.LoadUint32(&l.closed) != 0 { return } @@ -125,7 +114,7 @@ func (l *Logger) enqueue(b []byte) { // ---- Build Log Line ---- // buildLine builds complete log line | 构建完整日志行 -func (l *Logger) buildLine(level LogLevel, args ...any) []byte { +func (l *Logger) buildLine(level config.LogLevel, args ...any) []byte { cfg := l.currentCfg() buf := getBuf() @@ -194,7 +183,7 @@ func (l *Logger) appendValue(buf *bytes.Buffer, v any) { } case time.Time: - buf.WriteString(val.Format(DefaultTimeFormat)) + buf.WriteString(val.Format(config.DefaultTimeFormat)) default: fmt.Fprint(buf, val) @@ -268,7 +257,7 @@ func (l *Logger) writeToFile(b []byte) { // ---- File Handling ---- // ensureLogFile ensures a log file is open | 确保日志文件存在 -func (l *Logger) ensureLogFile(now time.Time, cfg LoggerConfig) error { +func (l *Logger) ensureLogFile(now time.Time, cfg config.LoggerConfig) error { if l.curFile == nil { return l.openNewFile(now, cfg) } @@ -279,7 +268,7 @@ func (l *Logger) ensureLogFile(now time.Time, cfg LoggerConfig) error { } // openNewFile opens a new log file | 打开新日志文件 -func (l *Logger) openNewFile(now time.Time, cfg LoggerConfig) error { +func (l *Logger) openNewFile(now time.Time, cfg config.LoggerConfig) error { name := l.formatFileName(now, cfg) path := filepath.Join(cfg.Path, name) @@ -296,7 +285,7 @@ func (l *Logger) openNewFile(now time.Time, cfg LoggerConfig) error { } // shouldRotate checks rotation conditions | 检查是否需要切分 -func (l *Logger) shouldRotate(now time.Time, cfg LoggerConfig) bool { +func (l *Logger) shouldRotate(now time.Time, cfg config.LoggerConfig) bool { if cfg.RotateSize > 0 && l.curSize >= cfg.RotateSize { return true } @@ -307,7 +296,7 @@ func (l *Logger) shouldRotate(now time.Time, cfg LoggerConfig) bool { } // rotate rotates the current log file | 日志切分逻辑 -func (l *Logger) rotate(cfg LoggerConfig) error { +func (l *Logger) rotate(cfg config.LoggerConfig) error { if l.curFile == nil { return nil } @@ -337,11 +326,11 @@ func (l *Logger) rotate(cfg LoggerConfig) error { } // cleanup removes expired logs | 清理过期/多余日志文件 -func (l *Logger) cleanup(cfg LoggerConfig) { +func (l *Logger) cleanup(cfg config.LoggerConfig) { // base is the fixed prefix of log files for this logger | base 为该 Logger 对应日志文件的固定前缀 base := normalizeBaseName(cfg.FileFormat) if base == "" { - base = DefaultBaseName + base = config.DefaultBaseName } files, _ := filepath.Glob(filepath.Join(cfg.Path, "*.log")) @@ -401,10 +390,10 @@ func (l *Logger) cleanup(cfg LoggerConfig) { } // formatFileName generates filename | 生成日志文件名 -func (l *Logger) formatFileName(t time.Time, cfg LoggerConfig) string { +func (l *Logger) formatFileName(t time.Time, cfg config.LoggerConfig) string { name := cfg.FileFormat if name == "" { - return fmt.Sprintf("%s_%s.log", DefaultBaseName, t.Format("2006-01-02")) + return fmt.Sprintf("%s_%s.log", config.DefaultBaseName, t.Format("2006-01-02")) } r := strings.NewReplacer( @@ -423,7 +412,7 @@ func (l *Logger) formatFileName(t time.Time, cfg LoggerConfig) string { // ---- Runtime Control ---- // SetLevel updates minimum level | 动态更新日志级别 -func (l *Logger) SetLevel(level LogLevel) { +func (l *Logger) SetLevel(level config.LogLevel) { l.cfgMu.Lock() if l.cfg != nil { l.cfg.Level = level @@ -450,7 +439,7 @@ func (l *Logger) SetStdout(enable bool) { } // SetConfig replaces config and reopens log file | 动态替换配置并重新创建日志文件 -func (l *Logger) SetConfig(cfg *LoggerConfig) { +func (l *Logger) SetConfig(cfg *config.LoggerConfig) { newCfg, err := prepareConfig(cfg) if err != nil { return @@ -545,30 +534,30 @@ func getFileSize(f *os.File) int64 { } // prepareConfig applies defaults and ensures directory | 应用默认配置并确保目录存在 -func prepareConfig(cfg *LoggerConfig) (*LoggerConfig, error) { +func prepareConfig(cfg *config.LoggerConfig) (*config.LoggerConfig, error) { if cfg == nil { - cfg = &LoggerConfig{} + cfg = &config.LoggerConfig{} } c := *cfg // copy if c.TimeFormat == "" { - c.TimeFormat = DefaultTimeFormat + c.TimeFormat = config.DefaultTimeFormat } if c.FileFormat == "" { - c.FileFormat = DefaultFileFormat + c.FileFormat = config.DefaultFileFormat } if c.Prefix == "" { - c.Prefix = DefaultPrefix + c.Prefix = config.DefaultPrefix } if c.RotateSize <= 0 { - c.RotateSize = DefaultRotateSize + c.RotateSize = config.DefaultRotateSize } if c.RotateExpire < 0 { c.RotateExpire = 0 } if c.RotateBackupLimit <= 0 { - c.RotateBackupLimit = DefaultRotateBackupLimit + c.RotateBackupLimit = config.DefaultRotateBackupLimit } if c.RotateBackupDays < 0 { c.RotateBackupDays = 0 @@ -584,26 +573,26 @@ func prepareConfig(cfg *LoggerConfig) (*LoggerConfig, error) { } // currentCfg returns a config snapshot | 返回当前配置快照 -func (l *Logger) currentCfg() LoggerConfig { +func (l *Logger) currentCfg() config.LoggerConfig { l.cfgMu.RLock() defer l.cfgMu.RUnlock() if l.cfg == nil { - return LoggerConfig{} + return config.LoggerConfig{} } return *l.cfg } // levelString converts log level to string | 将日志级别转换为字符串 -func (l *Logger) levelString(level LogLevel) string { +func (l *Logger) levelString(level config.LogLevel) string { switch level { - case LevelDebug: + case config.LevelDebug: return "DEBUG" - case LevelInfo: + case config.LevelInfo: return "INFO" - case LevelWarn: + case config.LevelWarn: return "WARN" - case LevelError: + case config.LevelError: return "ERROR" default: return "UNKNOWN" @@ -613,7 +602,7 @@ func (l *Logger) levelString(level LogLevel) string { // normalizeBaseName extracts static name | 提取基础日志文件名前缀 func normalizeBaseName(format string) string { if format == "" { - return DefaultBaseName + return config.DefaultBaseName } // 去掉 .log 后缀 | strip ".log" suffix @@ -628,7 +617,34 @@ func normalizeBaseName(format string) string { name = strings.TrimSpace(name) if name == "" { - return DefaultBaseName + return config.DefaultBaseName } return name } + +// ensureDefaultPath ensures the log directory exists; if not set, uses the log path | 确保日志目录存在;如果未设置则使用默认路径 +func ensureDefaultPath(cfg *config.LoggerConfig) string { + if cfg.Path != "" { + return cfg.Path + } + wd, err := os.Getwd() + if err != nil { + wd = "." + } + path := filepath.Join(wd, config.DefaultDirName) + _ = os.MkdirAll(path, 0755) + return path +} + +// ---- Logging API ---- + +func (l *Logger) Print(v ...any) { l.write(config.LevelInfo, v...) } +func (l *Logger) Printf(f string, v ...any) { l.writef(config.LevelInfo, f, v...) } +func (l *Logger) Debug(v ...any) { l.write(config.LevelDebug, v...) } +func (l *Logger) Debugf(f string, v ...any) { l.writef(config.LevelDebug, f, v...) } +func (l *Logger) Info(v ...any) { l.write(config.LevelInfo, v...) } +func (l *Logger) Infof(f string, v ...any) { l.writef(config.LevelInfo, f, v...) } +func (l *Logger) Warn(v ...any) { l.write(config.LevelWarn, v...) } +func (l *Logger) Warnf(f string, v ...any) { l.writef(config.LevelWarn, f, v...) } +func (l *Logger) Error(v ...any) { l.write(config.LevelError, v...) } +func (l *Logger) Errorf(f string, v ...any) { l.writef(config.LevelError, f, v...) } diff --git a/pool/ants/go.mod b/pool/ants/go.mod new file mode 100644 index 0000000..e5b4b08 --- /dev/null +++ b/pool/ants/go.mod @@ -0,0 +1,7 @@ +module github.com/click33/sa-token-go/pool/ants + +go 1.23.0 + +require github.com/click33/sa-token-go/core v0.1.5 + +replace github.com/click33/sa-token-go/core => ../../core \ No newline at end of file diff --git a/pool/ants/pool_adapter_ants.go b/pool/ants/pool_adapter_ants.go new file mode 100644 index 0000000..28227a7 --- /dev/null +++ b/pool/ants/pool_adapter_ants.go @@ -0,0 +1,151 @@ +// @Author daixk 2025/12/12 11:55:00 +package ants + +import ( + "github.com/click33/sa-token-go/core/config" + "github.com/click33/sa-token-go/core/serror" + "github.com/panjf2000/ants/v2" + "sync" + "time" +) + +// RenewPoolManager manages a dynamic scaling goroutine pool for token renewal tasks | 续期任务协程池管理器 +type RenewPoolManager struct { + pool *ants.Pool // ants pool instance | ants 协程池实例 + config *config.RenewPoolConfig // Configuration object | 池配置对象 + globalConfig *config.Config // Global authentication configuration | 全局认证配置 + mu sync.Mutex // Synchronization lock | 互斥锁 + stopCh chan struct{} // Stop signal channel | 停止信号通道 + started bool // Indicates if pool manager is running | 是否已启动 +} + +func NewRenewPoolManagerWithDefaultConfig() *RenewPoolManager { + mgr := &RenewPoolManager{ + config: config.DefaultRenewPoolConfig(), + stopCh: make(chan struct{}), + started: true, + } + + _ = mgr.initPool() + + return mgr +} + +// NewRenewPoolManagerWithConfig creates manager with config | 使用配置创建续期池管理器 +func NewRenewPoolManagerWithConfig(cfg *config.RenewPoolConfig) (*RenewPoolManager, error) { + if cfg == nil { + cfg = config.DefaultRenewPoolConfig() + } + if cfg.MinSize <= 0 { + cfg.MinSize = config.DefaultMinSize + } + if cfg.MaxSize < cfg.MinSize { + cfg.MaxSize = cfg.MinSize + } + + mgr := &RenewPoolManager{ + config: cfg, + stopCh: make(chan struct{}), + started: true, + } + + if err := mgr.initPool(); err != nil { + return nil, err + } + + // Start auto-scaling routine | 启动自动扩缩容协程 + go mgr.autoScale() + + return mgr, nil +} + +// initPool initializes the ants pool | 初始化 ants 协程池 +func (m *RenewPoolManager) initPool() error { + p, err := ants.NewPool( + m.config.MinSize, + ants.WithExpiryDuration(m.config.Expiry), + ants.WithPreAlloc(m.config.PreAlloc), + ants.WithNonblocking(m.config.NonBlocking), + ) + if err != nil { + return err + } + + m.pool = p + return nil +} + +// Submit submits a renewal task | 提交续期任务 +func (m *RenewPoolManager) Submit(task func()) error { + if !m.started { + return serror.ErrRenewPoolNotStarted + } + return m.pool.Submit(task) +} + +// Stop stops the auto-scaling process | 停止自动扩缩容 +func (m *RenewPoolManager) Stop() { + if !m.started { + return + } + close(m.stopCh) + m.started = false + + if m.pool != nil && !m.pool.IsClosed() { + _ = m.pool.ReleaseTimeout(5 * time.Second) + } +} + +// Stats returns current pool statistics | 返回当前池状态 +func (m *RenewPoolManager) Stats() (running, capacity int, usage float64) { + m.mu.Lock() + defer m.mu.Unlock() + + running = m.pool.Running() // Active tasks | 当前运行任务数 + capacity = m.pool.Cap() // Pool capacity | 当前池容量 + usage = float64(running) / float64(capacity) // Usage ratio | 当前使用率 + + return +} + +// autoScale automatic pool scale-up/down logic | 自动扩缩容逻辑 +func (m *RenewPoolManager) autoScale() { + ticker := time.NewTicker(m.config.CheckInterval) // Ticker for periodic usage checks | 定时器,用于定期检测使用率 + defer ticker.Stop() // Stop ticker on exit | 函数退出时停止定时器 + + for { + select { + case <-ticker.C: + m.mu.Lock() // Protect concurrent access | 加锁防止并发冲突 + + // Get current pool stats | 获取当前运行状态 + running := m.pool.Running() // Number of active goroutines | 当前正在执行的任务数 + capacity := m.pool.Cap() // Current pool capacity | 当前协程池容量 + usage := float64(running) / float64(capacity) // Current usage ratio | 当前使用率(运行数 ÷ 总容量) + + switch { + // Expand if usage exceeds threshold and capacity < MaxSize | 当使用率超过扩容阈值且容量小于最大值时扩容 + case usage > m.config.ScaleUpRate && capacity < m.config.MaxSize: + newCap := int(float64(capacity) * 1.5) // Increase capacity by 1.5x | 扩容为当前的 1.5 倍 + if newCap > m.config.MaxSize { // Cap to maximum size | 限制最大值 + newCap = m.config.MaxSize + } + m.pool.Tune(newCap) // Apply new pool capacity | 调整 ants 池容量 + + // Reduce if usage below threshold and capacity > MinSize | 当使用率低于缩容阈值且容量大于最小值时缩容 + case usage < m.config.ScaleDownRate && capacity > m.config.MinSize: + newCap := int(float64(capacity) * 0.7) // Reduce capacity to 70% | 缩容为当前的 70% + if newCap < m.config.MinSize { // Ensure not below MinSize | 限制最小值 + newCap = m.config.MinSize + } + m.pool.Tune(newCap) // Apply new pool capacity | 调整 ants 池容量 + } + + m.mu.Unlock() // Unlock after adjustment | 解锁 + + case <-m.stopCh: + // Stop signal received, exit loop | 收到停止信号,终止扩缩容协程 + return + } + } +} diff --git a/stputil/stputil.go b/stputil/stputil.go index 60b6cee..de0bbef 100644 --- a/stputil/stputil.go +++ b/stputil/stputil.go @@ -31,7 +31,7 @@ func getAutoType(autoType ...string) string { } return trimmed } - // Return default autoType if autoType is empty or invalid | 如果 autoType 为空或无效,返回默认值 + // Return log autoType if autoType is empty or invalid | 如果 autoType 为空或无效,返回默认值 return config.DefaultAuthType } @@ -386,7 +386,7 @@ func LoginWithRefreshToken(loginID interface{}, device ...string) (*security.Ref if globalManager == nil { panic("Manager not initialized. Call stputil.SetManager() first") } - deviceType := "default" + deviceType := "log" if len(device) > 0 { deviceType = device[0] } From 8b2f2b677926b8da5e7c3f6c9cbcdfaecd496af6 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Tue, 16 Dec 2025 23:17:38 +0800 Subject: [PATCH 16/50] =?UTF-8?q?feat():=201=E3=80=81=E5=AE=8C=E6=88=90man?= =?UTF-8?q?ager=E6=A0=B8=E5=BF=83=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/manager/consts.go | 9 +- core/manager/manager.go | 252 +++++++++++++++++++++++----------------- core/serror/errors.go | 1 - core/session/session.go | 10 +- 4 files changed, 157 insertions(+), 115 deletions(-) diff --git a/core/manager/consts.go b/core/manager/consts.go index f5a4248..ac74597 100644 --- a/core/manager/consts.go +++ b/core/manager/consts.go @@ -12,10 +12,11 @@ const ( DefaultNonceTTL = 5 * time.Minute // Default nonce expiration time | 默认随机令牌有效期 // Key prefixes | 键前缀 - TokenKeyPrefix = "token:" // Token storage prefix | Token 存储前缀 - AccountKeyPrefix = "account:" // Account storage prefix | 账号存储前缀 - DisableKeyPrefix = "disable:" // Disable state prefix | 禁用状态存储前缀 - RenewKeyPrefix = "renew:" // Token renew prefix | Token 续期存储前缀 + TokenKeyPrefix = "token:" // Token storage prefix | Token 存储前缀 + AccountKeyPrefix = "account:" // Account storage prefix | 账号存储前缀 + DisableKeyPrefix = "disable:" // Disable state prefix | 禁用状态存储前缀 + RenewKeyPrefix = "renew:" // Token renew prefix | Token 续期存储前缀 + TokenValueListLastKey = ":*" // Session keys | Session 键 SessionKeyLoginID = "loginId" // Login ID | 登录 ID diff --git a/core/manager/manager.go b/core/manager/manager.go index e25333e..8e2022c 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -4,7 +4,6 @@ import ( "context" "fmt" codec_json "github.com/click33/sa-token-go/codec/json" - "github.com/click33/sa-token-go/core/dep" "github.com/click33/sa-token-go/core/serror" "github.com/click33/sa-token-go/core/utils" "github.com/click33/sa-token-go/log/nop" @@ -24,11 +23,11 @@ import ( // TokenInfo Token information | Token 信息 type TokenInfo struct { + AuthType string `json:"authType"` // Authentication system type | 认证体系类型 LoginID string `json:"loginId"` // Login ID | 登录 ID Device string `json:"device"` // Device type | 设备类型 CreateTime int64 `json:"createTime"` // Token creation timestamp | 创建时间戳 ActiveTime int64 `json:"activeTime"` // Last active time | 最后活跃时间戳 - AuthType string `json:"authType"` // Authentication system type | 认证体系类型 Tag string `json:"tag,omitempty"` // Custom tag for additional data | 自定义标记字段(可选) } @@ -161,6 +160,7 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( // Look for existing token of this account + device | 查找账号 + 设备下是否已有登录 Token existingToken, err := m.storage.Get(accountKey) if err == nil && existingToken != nil { + // 校验一下如果登录Token有效 if tokenStr, ok := assertString(existingToken); ok && m.IsLogin(context.WithValue(ctx, config.CtxTokenValue, existingToken)) { // If valid token exists, return it directly | 如果已有 Token 且有效,则直接返回 return tokenStr, nil @@ -170,16 +170,14 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( // Handle concurrent login behavior | 处理并发登录逻辑 if !m.config.IsConcurrent { - // Concurrent login not allowed → replace previous login on the same device | 不允许并发登录 → 顶掉同设备下已存在的登录会话 + // Concurrent login not allowed → replace previous login on the same device | 不允许并发登录 顶掉同设备下已存在的登录会话 _ = m.replace(ctx, loginID, deviceType) } else if m.config.MaxLoginCount > 0 && !m.config.IsShare { // Concurrent login allowed but limited by MaxLoginCount | 允许并发登录但受 MaxLoginCount 限制 - // This limit applies to all tokens of this account across devices | 该限制针对账号所有设备的登录 Token 数量 tokens, _ := m.GetTokenValueListByLoginID(ctx, loginID) if int64(len(tokens)) >= m.config.MaxLoginCount { - // Reached maximum concurrent login count | 已达到最大并发登录数 - // You may change to "kick out earliest token" if desired | 如需也可改为“踢掉最早 Token” + // Reached maximum concurrent login count | 已达到最大并发登录数 如需也可改为 踢掉最早Token return "", serror.ErrLoginLimitExceeded } } @@ -190,20 +188,24 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( return "", err } + // 当前时间戳 nowTime := time.Now().Unix() + // 计算过期时间 expiration := m.getExpiration() // Prepare TokenInfo object and serialize to JSON | 准备Token信息对象并序列化 - tokenInfo, err := m.deps.GetSerializer().Encode(TokenInfo{ + tokenInfo, err := m.serializer.Encode(TokenInfo{ + AuthType: m.config.AuthType, LoginID: loginID, Device: deviceType, CreateTime: nowTime, ActiveTime: nowTime, }) if err != nil { - return "", fmt.Errorf("%w: %v", serror.ErrCommonMarshal, err) + return "", fmt.Errorf("%w: %v", serror.ErrCommonDecode, err) } + // 生成新的ctx ctx = context.WithValue(ctx, config.CtxTokenValue, tokenValue) // Save token-tokenInfo mapping | 保存 TokenKey-TokenInfo 映射 @@ -217,26 +219,26 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( return "", err } - //// Create session | 创建Session - //err = session. - // NewSession(m.authType, loginID, m.prefix, m.deps, m.storage). - // SetMulti( - // map[string]any{ - // SessionKeyLoginID: loginID, - // SessionKeyDevice: deviceType, - // SessionKeyLoginTime: nowTime, - // }, - // expiration, - // ) - //if err != nil { - // return "", err - //} + // Create session | 创建Session + err = session. + NewSession(m.config.AuthType, m.config.KeyPrefix, loginID, m.storage, m.serializer). + SetMulti( + map[string]any{ + SessionKeyLoginID: loginID, + SessionKeyDevice: deviceType, + SessionKeyLoginTime: nowTime, + }, + expiration, + ) + if err != nil { + return "", err + } // Trigger login event | 触发登录事件 if m.eventManager != nil { m.eventManager.Trigger(&listener.EventData{ Event: listener.EventLogin, - AuthType: m.authType, + AuthType: m.config.AuthType, LoginID: loginID, Device: deviceType, Token: tokenValue, @@ -258,18 +260,6 @@ func (m *Manager) LoginByToken(ctx context.Context) error { return serror.ErrAccountDisabled } - // Update last active time only | 更新活跃时间(轻量刷新) - info.ActiveTime = time.Now().Unix() - - // Write back updated TokenInfo (保留原TTL) - data, err := m.deps.GetSerializer().Encode(info) - if err != nil { - return fmt.Errorf("%w: %v", serror.ErrCommonMarshal, err) - } - if err = m.storage.SetKeepTTL(m.getTokenKey(ctx), data); err != nil { - return err - } - // Renews token expiration asynchronously | 异步续期Token m.renewToken(ctx, info) @@ -278,8 +268,10 @@ func (m *Manager) LoginByToken(ctx context.Context) error { // Logout Performs user logout | 登出 func (m *Manager) Logout(ctx context.Context, loginID string, device ...string) error { + // Get account key | 获取账号存储键 accountKey := m.getAccountKey(ctx, loginID, getDevice(device)) + // Get token value | 获取Token值 tokenValue, err := m.storage.Get(accountKey) if err != nil || tokenValue == nil { return nil @@ -384,7 +376,6 @@ func (m *Manager) IsLogin(ctx context.Context) bool { } // Async auto-renew for better performance | 异步自动续期(提高性能) - // Note: ActiveTimeout feature removed to comply with Java sa-token design | 注意:为了符合Java版sa-token的设计,移除了ActiveTimeout特性 if m.config.AutoRenew && m.config.Timeout > 0 { // Construct the token storage key | 构造Token存储键 tokenKey := m.getTokenKey(ctx) @@ -418,7 +409,7 @@ func (m *Manager) CheckLogin(ctx context.Context) error { return nil } -// CheckLoginWithState Checks if user is logged in | 检查是否登录(返回详细状态) +// CheckLoginWithState Checks if user is logged in | 检查是否登录(返回详细状态err) func (m *Manager) CheckLoginWithState(ctx context.Context) (bool, error) { // Try to get token info with state check | 尝试获取Token信息(包含状态检查) info, err := m.getTokenInfoByTokenValue(ctx, true) @@ -436,7 +427,6 @@ func (m *Manager) CheckLoginWithState(ctx context.Context) (bool, error) { } // Async auto-renew for better performance | 异步自动续期(提高性能) - // Note: ActiveTimeout feature removed to comply with Java sa-token design | 注意:为了符合Java版sa-token的设计,移除了ActiveTimeout特性 if m.config.AutoRenew && m.config.Timeout > 0 { // Construct the token storage key | 构造Token存储键 tokenKey := m.getTokenKey(ctx) @@ -450,8 +440,8 @@ func (m *Manager) CheckLoginWithState(ctx context.Context) (bool, error) { renewFunc := func() { m.renewToken(ctx, info) } // Submit renewal task to the pool if configured, otherwise use a goroutine | 如果配置了续期池,则提交续期任务到池中,否则使用协程 - if m.renewPool != nil { - _ = m.renewPool.Submit(renewFunc) // Submit token renewal task to the pool | 提交Token续期任务到续期池 + if m.pool != nil { + _ = m.pool.Submit(renewFunc) // Submit token renewal task to the pool | 提交Token续期任务到续期池 } else { go renewFunc() // Fallback to goroutine if pool is not configured | 如果没有配置续期池,使用普通协程 } @@ -535,6 +525,7 @@ func (m *Manager) Disable(ctx context.Context, loginID string, duration time.Dur func (m *Manager) Untie(ctx context.Context, loginID string) error { // Retrieve the disable flag storage key | 获取封禁标记的存储键 key := m.getDisableKey(ctx, loginID) + // Remove the disable flag from storage | 删除封禁标记 return m.storage.Delete(key) } @@ -543,6 +534,7 @@ func (m *Manager) Untie(ctx context.Context, loginID string) error { func (m *Manager) IsDisable(ctx context.Context, loginID string) bool { // Retrieve the disable flag storage key | 获取封禁标记的存储键 key := m.getDisableKey(ctx, loginID) + // Check if the disable flag exists in storage | 检查封禁标记是否存在 return m.storage.Exists(key) } @@ -551,11 +543,13 @@ func (m *Manager) IsDisable(ctx context.Context, loginID string) bool { func (m *Manager) GetDisableTime(ctx context.Context, loginID string) (int64, error) { // Retrieve the disable flag storage key | 获取封禁标记的存储键 key := m.getDisableKey(ctx, loginID) + // Retrieve the TTL (Time to Live) for the disable flag | 获取封禁标记的TTL(剩余时间) ttl, err := m.storage.TTL(key) if err != nil { return -2, err // Return -2 if TTL retrieval fails | 如果获取TTL失败,返回-2 } + // Return the remaining disable time in seconds | 返回剩余封禁时间(秒) return int64(ttl.Seconds()), nil } @@ -566,8 +560,9 @@ func (m *Manager) GetDisableTime(ctx context.Context, loginID string) (int64, er func (m *Manager) GetSession(loginID string) (*session.Session, error) { sess, err := session.Load(loginID, m) if err != nil { - sess = session.NewSession(m.authType, loginID, m.prefix, m.deps, m.storage) + sess = session.NewSession(m.config.AuthType, m.config.KeyPrefix, loginID, m.storage, m.serializer) } + return sess, nil } @@ -609,11 +604,13 @@ func (m *Manager) SetPermissions(_ context.Context, loginID string, permissions if err != nil { return err } - permissionsFromSession, b := sess.Get(SessionKeyPermissions) - if b { + + permissionsFromSession, ok := sess.Get(SessionKeyPermissions) + if ok { permissions = append(permissions, m.toStringSlice(permissionsFromSession)...) permissions = removeDuplicateStrings(permissions) } + return sess.Set(SessionKeyPermissions, permissions, m.getExpiration()) } @@ -624,13 +621,12 @@ func (m *Manager) RemovePermissions(_ context.Context, loginID string, permissio return err } - // Load existing permissions | 加载已有权限 - existing, ok := sess.Get(SessionKeyPermissions) + permissionsFromSession, ok := sess.Get(SessionKeyPermissions) if !ok { - return nil // No permissions to remove | 没有权限可删除 + return nil } - existingPerms := m.toStringSlice(existing) + existingPerms := m.toStringSlice(permissionsFromSession) if len(existingPerms) == 0 { return nil } @@ -649,7 +645,6 @@ func (m *Manager) RemovePermissions(_ context.Context, loginID string, permissio } } - // Save updated permissions | 保存更新后的权限列表 return sess.Set(SessionKeyPermissions, newPerms, m.getExpiration()) } @@ -684,20 +679,34 @@ func (m *Manager) HasPermission(ctx context.Context, loginID string, permission return false } -// HasPermissionsAnd 检查是否拥有所有权限(AND) +// HasPermissionsAnd Checks whether the user has all permissions (AND) | 是否拥有所有权限(AND) func (m *Manager) HasPermissionsAnd(ctx context.Context, loginID string, permissions []string) bool { - for _, perm := range permissions { - if !m.HasPermission(ctx, loginID, perm) { + // Get all permissions once | 一次性获取用户权限 + userPerms, err := m.GetPermissions(ctx, loginID) + if err != nil || len(userPerms) == 0 { + return false + } + + // Check every required permission | 校验每一个必需权限 + for _, need := range permissions { + if !m.hasPermissionInList(ctx, userPerms, need) { return false } } return true } -// HasPermissionsOr 检查是否拥有任一权限(OR) +// HasPermissionsOr Checks whether the user has any permission (OR) | 是否拥有任一权限(OR) func (m *Manager) HasPermissionsOr(ctx context.Context, loginID string, permissions []string) bool { - for _, perm := range permissions { - if m.HasPermission(ctx, loginID, perm) { + // Get all permissions once | 一次性获取用户权限 + userPerms, err := m.GetPermissions(ctx, loginID) + if err != nil || len(userPerms) == 0 { + return false + } + + // Check if any permission matches | 任一权限匹配即通过 + for _, need := range permissions { + if m.hasPermissionInList(ctx, userPerms, need) { return true } } @@ -736,6 +745,15 @@ func (m *Manager) matchPermission(_ context.Context, pattern, permission string) return false } +func (m *Manager) hasPermissionInList(ctx context.Context, perms []string, permission string) bool { + for _, p := range perms { + if m.matchPermission(ctx, p, permission) { + return true + } + } + return false +} + // ============ Role Validation | 角色验证 ============ // SetRoles Sets roles for user | 设置角色 @@ -744,11 +762,13 @@ func (m *Manager) SetRoles(_ context.Context, loginID string, roles []string) er if err != nil { return err } - rolesFromSession, b := sess.Get(SessionKeyRoles) - if b { + + rolesFromSession, ok := sess.Get(SessionKeyRoles) + if ok { roles = append(roles, m.toStringSlice(rolesFromSession)...) roles = removeDuplicateStrings(roles) } + return sess.Set(SessionKeyRoles, roles, m.getExpiration()) } @@ -760,12 +780,12 @@ func (m *Manager) RemoveRoles(_ context.Context, loginID string, roles []string) } // Load existing roles | 加载已有角色 - existing, ok := sess.Get(SessionKeyRoles) + rolesFromSession, ok := sess.Get(SessionKeyRoles) if !ok { return nil // No roles to remove | 没有角色可删除 } - existingRoles := m.toStringSlice(existing) + existingRoles := m.toStringSlice(rolesFromSession) if len(existingRoles) == 0 { return nil } @@ -818,20 +838,39 @@ func (m *Manager) HasRole(ctx context.Context, loginID string, role string) bool return false } -// HasRolesAnd 检查是否拥有所有角色(AND) +// HasRolesAnd Checks whether the user has all roles (AND) | 是否拥有所有角色(AND) func (m *Manager) HasRolesAnd(ctx context.Context, loginID string, roles []string) bool { - for _, role := range roles { - if !m.HasRole(ctx, loginID, role) { + userRoles, err := m.GetRoles(ctx, loginID) + if err != nil || len(userRoles) == 0 { + return false + } + + for _, need := range roles { + if !m.hasRoleInList(userRoles, need) { return false } } return true } -// HasRolesOr 检查是否拥有任一角色(OR) +// HasRolesOr Checks whether the user has any role (OR) | 是否拥有任一角色(OR) func (m *Manager) HasRolesOr(ctx context.Context, loginID string, roles []string) bool { - for _, role := range roles { - if m.HasRole(ctx, loginID, role) { + userRoles, err := m.GetRoles(ctx, loginID) + if err != nil || len(userRoles) == 0 { + return false + } + + for _, need := range roles { + if m.hasRoleInList(userRoles, need) { + return true + } + } + return false +} + +func (m *Manager) hasRoleInList(roles []string, role string) bool { + for _, r := range roles { + if r == role { return true } } @@ -858,7 +897,7 @@ func (m *Manager) GetTokenTag(ctx context.Context) (string, error) { // GetTokenValueListByLoginID Gets all tokens for specified account | 获取指定账号的所有Token func (m *Manager) GetTokenValueListByLoginID(_ context.Context, loginID string) ([]string, error) { // Construct the pattern for account key | 构造账号存储键的匹配模式 - pattern := m.prefix + m.authType + AccountKeyPrefix + loginID + ":*" + pattern := m.config.KeyPrefix + m.config.AuthType + AccountKeyPrefix + loginID + TokenValueListLastKey // Retrieve keys matching the pattern from storage | 从存储中获取匹配的键 keys, err := m.storage.Keys(pattern) @@ -943,11 +982,6 @@ func (m *Manager) WaitEvents() { } } -// GetEventManager gets the event manager | 获取事件管理器 -func (m *Manager) GetEventManager() *listener.Manager { - return m.eventManager -} - // ============ Security Features | 安全特性 ============ // GenerateNonce Generates a one-time nonce | 生成一次性随机数 @@ -961,15 +995,9 @@ func (m *Manager) VerifyNonce(nonce string) bool { } // LoginWithRefreshToken Logs in with refresh token | 使用刷新令牌登录 -func (m *Manager) LoginWithRefreshToken(ctx context.Context, loginID, device string) (*security.RefreshTokenInfo, error) { +func (m *Manager) LoginWithRefreshToken(_ context.Context, loginID, device string) (*security.RefreshTokenInfo, error) { deviceType := getDevice([]string{device}) - - accessToken, err := m.Login(ctx, loginID, deviceType) - if err != nil { - return nil, err - } - - return m.refreshManager.GenerateTokenPair(loginID, deviceType, accessToken) + return m.refreshManager.GenerateTokenPair(loginID, deviceType) } // RefreshAccessToken Refreshes access token | 刷新访问令牌 @@ -982,36 +1010,56 @@ func (m *Manager) RevokeRefreshToken(_ context.Context, refreshToken string) err return m.refreshManager.RevokeRefreshToken(refreshToken) } -// GetOAuth2Server Gets OAuth2 server instance | 获取OAuth2服务器实例 -func (m *Manager) GetOAuth2Server() *oauth2.OAuth2Server { - return m.oauth2Server -} - // ============ Public Getters | 公共获取器 ============ -// GetConfig Gets configuration | 获取配置 +// GetConfig returns the manager configuration | 获取 Manager 当前使用的配置 func (m *Manager) GetConfig() *config.Config { return m.config } -// GetStorage Gets storage | 获取存储 +// GetStorage returns the storage adapter | 获取 Manager 使用的存储适配器 func (m *Manager) GetStorage() adapter.Storage { return m.storage } -// GetAutoType Gets autoType | 获取登录类型 -func (m *Manager) GetAutoType() string { - return m.authType +// GetCodec returns the codec (serializer) | 获取 Manager 使用的编解码器 +func (m *Manager) GetCodec() adapter.Codec { + return m.serializer } -// GetDeps Gets Deps | 获取依赖 -func (m *Manager) GetDeps() *dep.Dep { - return m.deps +// GetLog returns the logger adapter | 获取 Manager 使用的日志适配器 +func (m *Manager) GetLog() adapter.Log { + return m.logger } -// GetPrefix Gets prefix | 获取前缀 -func (m *Manager) GetPrefix() string { - return m.prefix +// GetPool returns the goroutine pool | 获取 Manager 使用的协程池 +func (m *Manager) GetPool() adapter.Pool { + return m.pool +} + +// GetGenerator returns the token generator | 获取 Token 生成器 +func (m *Manager) GetGenerator() *token.Generator { + return m.generator +} + +// GetNonceManager returns the nonce manager | 获取随机串管理器 +func (m *Manager) GetNonceManager() *security.NonceManager { + return m.nonceManager +} + +// GetRefreshManager returns the refresh token manager | 获取刷新令牌管理器 +func (m *Manager) GetRefreshManager() *security.RefreshTokenManager { + return m.refreshManager +} + +// GetEventManager returns the event manager | 获取事件管理器 +func (m *Manager) GetEventManager() *listener.Manager { + return m.eventManager +} + +// GetOAuth2Server Gets OAuth2 server instance | 获取OAuth2服务器实例 +func (m *Manager) GetOAuth2Server() *oauth2.OAuth2Server { + return m.oauth2Server } // ============ Internal Methods | 内部方法 ============ @@ -1073,22 +1121,18 @@ func (m *Manager) renewToken(ctx context.Context, info *TokenInfo) { // Construct the token storage key | 构造Token存储键 tokenKey := m.getTokenKey(ctx) - // Construct the account storage key | 构造账号存储键 accountKey := m.getAccountKey(ctx, info.LoginID, info.Device) - // Get expiration time | 获取过期时间 exp := m.getExpiration() - // Update ActiveTime and keep original TTL | 更新ActiveTime,保持原TTL不变 + // Update ActiveTime | 更新ActiveTime info.ActiveTime = time.Now().Unix() - if tokenInfo, err := m.deps.GetSerializer().Encode(info); err == nil { - _ = m.storage.SetKeepTTL(tokenKey, tokenInfo) // Store the updated token information while keeping the original TTL | 存储更新后的Token信息,保持原TTL + if tokenInfo, err := m.serializer.Encode(info); err == nil { + // Renew token TTL | 续期Token的TTL + _ = m.storage.Set(tokenKey, tokenInfo, exp) } - // Renew token TTL | 续期Token的TTL - _ = m.storage.Expire(tokenKey, exp) - // Renew accountKey TTL | 续期账号映射的TTL _ = m.storage.Expire(accountKey, exp) @@ -1120,10 +1164,8 @@ func (m *Manager) removeTokenChain(ctx context.Context, destroySession bool, inf // Construct the token storage key | 构造Token存储键 tokenKey := m.getTokenKey(ctx) - // Construct the account storage key | 构造账号存储键 accountKey := m.getAccountKey(ctx, info.LoginID, info.Device) - // Construct the renewal key | 构造续期标记 renewKey := m.getRenewKey(ctx) @@ -1167,8 +1209,8 @@ func (m *Manager) removeTokenChain(ctx context.Context, destroySession bool, inf Event: event, // Event type | 事件类型 AuthType: m.config.AuthType, // Auth type from context | 从上下文中获取认证类型 LoginID: info.LoginID, // Login ID of the user | 用户的登录ID - Token: utils.GetCtxValue(ctx, config.CtxTokenValue), // Token value from context | 从上下文中获取Token值 Device: info.Device, // Device type | 设备类型 + Token: utils.GetCtxValue(ctx, config.CtxTokenValue), // Token value from context | 从上下文中获取Token值 }) } diff --git a/core/serror/errors.go b/core/serror/errors.go index 4fa8894..91ef9a4 100644 --- a/core/serror/errors.go +++ b/core/serror/errors.go @@ -12,7 +12,6 @@ var ( ErrRenewPoolNotStarted = errors.New("renew pool not started") // renew pool not started | 续期线程池未启动 ErrTokenNotFound = errors.New("token not found") // token not found | Token 不存在 - ErrInvalidTokenData = errors.New("invalid token data") // invalid token data | Token 数据无效 ErrTokenKickout = errors.New("token has been kicked out") // token has been kicked out | Token 已被踢下线 ErrTokenReplaced = errors.New("token has been replaced") // token has been replaced | Token 已被顶下线 ErrNotLogin = errors.New("not login") // not login | 未登录 diff --git a/core/session/session.go b/core/session/session.go index 2c6e327..8b5a4d7 100644 --- a/core/session/session.go +++ b/core/session/session.go @@ -27,7 +27,7 @@ type Session struct { } // NewSession Creates a new session | 创建新的Session -func NewSession(authType, id, prefix string, storage adapter.Storage, serializer adapter.Codec) *Session { +func NewSession(authType, prefix, id string, storage adapter.Storage, serializer adapter.Codec) *Session { if storage == nil { storage = memory.NewStorage() } @@ -267,7 +267,7 @@ func Load(id string, m *manager.Manager) (*Session, error) { return nil, errors.New("manager cannot be empty") } - data, err := m.GetStorage().Get(m.GetPrefix() + m.GetAutoType() + SessionKeyPrefix + id) + data, err := m.GetStorage().Get(m.GetConfig().KeyPrefix + m.GetConfig().AuthType + SessionKeyPrefix + id) if err != nil { return nil, err } @@ -281,11 +281,11 @@ func Load(id string, m *manager.Manager) (*Session, error) { } var session Session - if err = m.GetSerializer().Decode(raw, &session); err != nil { - return nil, fmt.Errorf("%w: %v", serror.ErrCommonUnmarshal, err) + if err = m.GetCodec().Decode(raw, &session); err != nil { + return nil, fmt.Errorf("%w: %v", serror.ErrCommonDecode, err) } session.storage = m.GetStorage() - session.deps = m.GetDeps() + session.serializer = m.GetCodec() return &session, nil } From 76dce05f2b46185dacdad822cc4346e59d97f161 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Wed, 17 Dec 2025 10:35:07 +0800 Subject: [PATCH 17/50] =?UTF-8?q?feat():=201=E3=80=81=E5=AE=8C=E6=88=90man?= =?UTF-8?q?ager=E6=A0=B8=E5=BF=83=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/adapter/generator.go | 10 +-- core/builder/builder.go | 26 +++++--- core/config/config.go | 11 ++-- core/config/config_pool.go | 14 ++--- core/config/consts.go | 10 +++ core/dep/adapter.go | 34 +++++----- core/dep/dep.go | 6 +- core/listener/listener.go | 12 +++- core/manager/manager.go | 27 ++++---- core/satoken.go | 56 ++++++++++------- core/security/refresh_token.go | 23 +++---- core/serror/errors.go | 63 ++++++++++--------- core/session/session.go | 11 ++-- core/token/consts.go | 12 ---- .../generator_adapter_sgenerator.go | 35 +++++------ generator/sgenerator/go.mod | 3 + go.work | 1 + 17 files changed, 195 insertions(+), 159 deletions(-) delete mode 100644 core/token/consts.go rename core/token/token.go => generator/sgenerator/generator_adapter_sgenerator.go (90%) create mode 100644 generator/sgenerator/go.mod diff --git a/core/adapter/generator.go b/core/adapter/generator.go index 2cfcc35..95c9f73 100644 --- a/core/adapter/generator.go +++ b/core/adapter/generator.go @@ -1,8 +1,8 @@ // @Author daixk 2025/12/5 15:52:00 package adapter -//// Generator token generation interface | Token生成接口 -//type Generator interface { -// // Generate generates token based on implementation | 生成Token(由实现决定具体规则) -// Generate(loginID, device string) (string, error) -//} +// Generator token generation interface | Token生成接口 +type Generator interface { + // Generate generates token based on implementation | 生成Token(由实现决定具体规则) + Generate(loginID, device string) (string, error) +} diff --git a/core/builder/builder.go b/core/builder/builder.go index 042abc3..7997e7d 100644 --- a/core/builder/builder.go +++ b/core/builder/builder.go @@ -2,6 +2,7 @@ package builder import ( codec_json "github.com/click33/sa-token-go/codec/json" + "github.com/click33/sa-token-go/generator/sgenerator" "github.com/click33/sa-token-go/log/nop" "github.com/click33/sa-token-go/pool/ants" "strings" @@ -40,10 +41,11 @@ type Builder struct { renewPoolConfig *config.RenewPoolConfig // Renew pool config | 续期协程池配置 logConfig *config.LoggerConfig // 日志配置 - storage adapter.Storage // Storage adapter | 存储适配器 - codec adapter.Codec // codec Codec adapter for encoding and decoding operations | 编解码操作的编码器适配器 - log adapter.Log // log Log adapter for logging operations | 日志记录操作的适配器 - pool adapter.Pool // 续期池 + generator adapter.Generator // Token generator | Token 生成器 + storage adapter.Storage // Storage adapter | 存储适配器 + codec adapter.Codec // codec Codec adapter for encoding and decoding operations | 编解码操作的编码器适配器 + log adapter.Log // log Log adapter for logging operations | 日志记录操作的适配器 + pool adapter.Pool // 续期池 } // NewBuilder creates a new builder with log configuration | 创建新的构建器(使用默认配置) @@ -448,8 +450,14 @@ func (b *Builder) LoggerConfig(cfg *config.LoggerConfig) *Builder { return b } -// Storage sets storage adapter | 设置存储适配器 -func (b *Builder) Storage(storage adapter.Storage) *Builder { +// SetGenerator sets generator adapter | 设置Token生成器 +func (b *Builder) SetGenerator(generator adapter.Generator) *Builder { + b.generator = generator + return b +} + +// SetStorage sets storage adapter | 设置存储适配器 +func (b *Builder) SetStorage(storage adapter.Storage) *Builder { b.storage = storage return b } @@ -530,6 +538,10 @@ func (b *Builder) Build() *manager.Manager { panic("Invalid config: " + err.Error()) } + // 如果generator为nil,则初始化默认generator + if b.generator == nil { + b.generator = sgenerator.NewGenerator(cfg) + } // 如果storage为nil,则初始化默认storage if b.storage == nil { b.storage = memory.NewStorage() @@ -575,5 +587,5 @@ func (b *Builder) Build() *manager.Manager { } // Build Manager | 构建 Manager - return manager.NewManager(cfg, b.storage, b.codec, b.log, b.pool) + return manager.NewManager(cfg, b.generator, b.storage, b.codec, b.log, b.pool) } diff --git a/core/config/config.go b/core/config/config.go index 41d7565..b4aeb50 100644 --- a/core/config/config.go +++ b/core/config/config.go @@ -1,7 +1,6 @@ package config import ( - "errors" "fmt" "strings" ) @@ -130,12 +129,12 @@ func (c *Config) Validate() error { // Check TokenName | 检查 Token 名称 if c.TokenName == "" { - return errors.New("TokenName cannot be empty") + return fmt.Errorf("TokenName cannot be empty") } // Check JwtSecretKey if TokenStyle is JWT | 如果 Token 风格为 JWT,则检查密钥是否设置 if c.TokenStyle == TokenStyleJWT && c.JwtSecretKey == "" { - return errors.New("JwtSecretKey is required when TokenStyle is JWT") + return fmt.Errorf("JwtSecretKey is required when TokenStyle is JWT") } // MaxRefresh must not exceed Timeout | MaxRefresh 不能大于 Timeout @@ -163,7 +162,7 @@ func (c *Config) Validate() error { // Check KeyPrefix validity | 检查 KeyPrefix 合法性 if c.KeyPrefix == "" { - return errors.New("KeyPrefix cannot be empty") // KeyPrefix不能为空 + return fmt.Errorf("KeyPrefix cannot be empty") // KeyPrefix不能为空 } if strings.ContainsAny(c.KeyPrefix, " \t\r\n") { return fmt.Errorf("KeyPrefix cannot contain whitespace characters, got: %q", c.KeyPrefix) @@ -174,7 +173,7 @@ func (c *Config) Validate() error { // Check authType validity | 校验 AuthType 的合法性 if c.AuthType == "" { - return errors.New("AuthType cannot be empty") // AuthType不能为空 + return fmt.Errorf("AuthType cannot be empty") // AuthType不能为空 } if strings.ContainsAny(c.AuthType, " \t\r\n") { return fmt.Errorf("AuthType cannot contain whitespace characters, got: %q", c.AuthType) @@ -187,7 +186,7 @@ func (c *Config) Validate() error { if c.CookieConfig != nil { // Check Path | 检查路径 if c.CookieConfig.Path == "" { - return errors.New("CookieConfig.Path cannot be empty") + return fmt.Errorf("CookieConfig.Path cannot be empty") } // Check SameSite | 检查 SameSite 值是否合法 switch c.CookieConfig.SameSite { diff --git a/core/config/config_pool.go b/core/config/config_pool.go index 6b1c208..05401d7 100644 --- a/core/config/config_pool.go +++ b/core/config/config_pool.go @@ -2,7 +2,7 @@ package config import ( - "errors" + "fmt" "time" ) @@ -40,24 +40,24 @@ func (c *RenewPoolConfig) Validate() error { } if c.MinSize <= 0 { - return errors.New("RenewPoolConfig.MinSize must be > 0") + return fmt.Errorf("RenewPoolConfig.MinSize must be > 0") } if c.MaxSize < c.MinSize { - return errors.New("RenewPoolConfig.MaxSize must be >= RenewPoolConfig.MinSize") + return fmt.Errorf("RenewPoolConfig.MaxSize must be >= RenewPoolConfig.MinSize") } if c.ScaleUpRate <= 0 || c.ScaleUpRate > 1 { - return errors.New("RenewPoolConfig.ScaleUpRate must be between 0 and 1") + return fmt.Errorf("RenewPoolConfig.ScaleUpRate must be between 0 and 1") } if c.ScaleDownRate < 0 || c.ScaleDownRate > 1 { - return errors.New("RenewPoolConfig.ScaleDownRate must be between 0 and 1") + return fmt.Errorf("RenewPoolConfig.ScaleDownRate must be between 0 and 1") } if c.CheckInterval <= 0 { - return errors.New("RenewPoolConfig.CheckInterval must be a positive duration") + return fmt.Errorf("RenewPoolConfig.CheckInterval must be a positive duration") } if c.Expiry <= 0 { - return errors.New("RenewPoolConfig.Expiry must be a positive duration") + return fmt.Errorf("RenewPoolConfig.Expiry must be a positive duration") } return nil diff --git a/core/config/consts.go b/core/config/consts.go index c244d7b..0a15178 100644 --- a/core/config/consts.go +++ b/core/config/consts.go @@ -87,3 +87,13 @@ const ( DefaultCheckInterval = time.Minute // Interval for auto-scaling checks | 检查间隔 DefaultExpiry = 10 * time.Second // Idle worker expiry duration | 空闲协程过期时间 ) + +// Constants for token generation | Token生成常量 +const ( + DefaultJWTSecret = "log-secret-key" // Should be overridden in production | 生产环境应覆盖 + TikTokenLength = 11 // TikTok-style short ID length | Tik风格短ID长度 + TikCharset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" + HashRandomBytesLen = 16 // Random bytes length for hash token | 哈希Token的随机字节长度 + TimestampRandomLen = 8 // Random bytes length for timestamp token | 时间戳Token的随机字节长度 + DefaultSimpleLength = 16 // Default simple token length | 默认简单Token长度 +) diff --git a/core/dep/adapter.go b/core/dep/adapter.go index 693efa0..b854e08 100644 --- a/core/dep/adapter.go +++ b/core/dep/adapter.go @@ -1,20 +1,20 @@ // @Author daixk 2025/12/14 21:11:00 package dep -import "github.com/click33/sa-token-go/core/adapter" - -type LoggerProvider interface { - Logger() adapter.Log -} - -type StorageProvider interface { - Storage() adapter.Storage -} - -type SerializerProvider interface { - Serializer() adapter.Codec -} - -type PoolProvider interface { - Pool() adapter.Pool -} +//import "github.com/click33/sa-token-go/core/adapter" +// +//type LoggerProvider interface { +// Logger() adapter.Log +//} +// +//type StorageProvider interface { +// Storage() adapter.Storage +//} +// +//type SerializerProvider interface { +// Serializer() adapter.Codec +//} +// +//type PoolProvider interface { +// Pool() adapter.Pool +//} diff --git a/core/dep/dep.go b/core/dep/dep.go index 876cdd5..a607eb9 100644 --- a/core/dep/dep.go +++ b/core/dep/dep.go @@ -22,13 +22,13 @@ package dep //// NewDep Creates a new Dep instance with strict parameter checking | 创建一个 Dep 实例(严格校验参数) //func NewDep(serializer adapter.Codec, logger adapter.Log, storage adapter.Storage, pool adapter.Pool) (*Dep, error) { // if serializer == nil { -// return nil, errors.New("serializer cannot be nil") // Serializer cannot be nil | 序列化器不能为空 +// return nil, fmt.Errorf("serializer cannot be nil") // Serializer cannot be nil | 序列化器不能为空 // } // if logger == nil { -// return nil, errors.New("logger cannot be nil") // Logger cannot be nil | 日志实现不能为空 +// return nil, fmt.Errorf("logger cannot be nil") // Logger cannot be nil | 日志实现不能为空 // } // if storage == nil { -// return nil, errors.New("storage cannot be nil") // Storage cannot be nil | 存储实现不能为空 +// return nil, fmt.Errorf("storage cannot be nil") // Storage cannot be nil | 存储实现不能为空 // } // // return &Dep{ diff --git a/core/listener/listener.go b/core/listener/listener.go index 74e8896..2fee85d 100644 --- a/core/listener/listener.go +++ b/core/listener/listener.go @@ -101,7 +101,7 @@ func NewManager(loggers ...adapter.Log) *Manager { // panicHandler 绑定“已经确定好的 logger” m.panicHandler = func(event Event, data *EventData, recovered any) { logger.Errorf( - "listener panic recovered: event=%s, panic=%v", + "[listener] listener panic recovered: event=%s, panic=%v", event, recovered, ) } @@ -339,6 +339,16 @@ func (m *Manager) Trigger(data *EventData) { m.mu.RUnlock() + // log + m.logger.Debugf( + "[listener] auth event triggered: event=%s, authType=%s, loginID=%s, device=%s, listeners=%d", + data.Event, + data.AuthType, + data.LoginID, + data.Device, + len(listenersToCall), + ) + // Execute listeners for _, entry := range listenersToCall { if entry.config.Async { diff --git a/core/manager/manager.go b/core/manager/manager.go index 8e2022c..d19de3d 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -6,6 +6,7 @@ import ( codec_json "github.com/click33/sa-token-go/codec/json" "github.com/click33/sa-token-go/core/serror" "github.com/click33/sa-token-go/core/utils" + "github.com/click33/sa-token-go/generator/sgenerator" "github.com/click33/sa-token-go/log/nop" "github.com/click33/sa-token-go/pool/ants" "github.com/click33/sa-token-go/storage/memory" @@ -18,7 +19,6 @@ import ( "github.com/click33/sa-token-go/core/oauth2" "github.com/click33/sa-token-go/core/security" "github.com/click33/sa-token-go/core/session" - "github.com/click33/sa-token-go/core/token" ) // TokenInfo Token information | Token 信息 @@ -34,26 +34,31 @@ type TokenInfo struct { // Manager Authentication manager | 认证管理器 type Manager struct { config *config.Config // Global authentication configuration | 全局认证配置 - generator *token.Generator // Token generator | Token 生成器 nonceManager *security.NonceManager // Nonce manager for preventing replay attacks | 随机串管理器 refreshManager *security.RefreshTokenManager // Refresh token manager | 刷新令牌管理器 oauth2Server *oauth2.OAuth2Server // OAuth2 authorization server | OAuth2 授权服务器 eventManager *listener.Manager // Event manager | 事件管理器 - storage adapter.Storage // Storage adapter (Redis, Memory, etc.) | 存储适配器(如 Redis、Memory) - serializer adapter.Codec // Codec adapter for encoding and decoding operations | 编解码器适配器 - logger adapter.Log // Log adapter for logging operations | 日志适配器 - pool adapter.Pool // Async task pool component | 异步任务协程池组件 + generator adapter.Generator // Token generator | Token 生成器 + storage adapter.Storage // Storage adapter (Redis, Memory, etc.) | 存储适配器(如 Redis、Memory) + serializer adapter.Codec // Codec adapter for encoding and decoding operations | 编解码器适配器 + logger adapter.Log // Log adapter for logging operations | 日志适配器 + pool adapter.Pool // Async task pool component | 异步任务协程池组件 } // NewManager creates and initializes a new Manager instance | 创建并初始化一个新的 Manager 实例 -func NewManager(cfg *config.Config, storage adapter.Storage, serializer adapter.Codec, logger adapter.Log, pool adapter.Pool) *Manager { +func NewManager(cfg *config.Config, generator adapter.Generator, storage adapter.Storage, serializer adapter.Codec, logger adapter.Log, pool adapter.Pool) *Manager { // Use default configuration if cfg is nil | 如果未传入配置,则使用默认配置 if cfg == nil { cfg = config.DefaultConfig() } + // generator + if generator == nil { + generator = sgenerator.NewGenerator(cfg) + } + // Use in-memory storage if storage is nil | 如果未传入存储实现,则使用内存存储 if storage == nil { storage = memory.NewStorage() @@ -75,9 +80,6 @@ func NewManager(cfg *config.Config, storage adapter.Storage, serializer adapter. pool = ants.NewRenewPoolManagerWithDefaultConfig() } - // Initialize token generator based on configuration | 根据配置初始化 Token 生成器 - generator := token.NewGenerator(cfg) - // Return the new manager instance with initialized sub-managers | 返回已初始化各子模块的管理器实例 return &Manager{ // Store global configuration | 保存全局配置 @@ -142,8 +144,7 @@ func (m *Manager) CloseManager() { // ============ Login Authentication | 登录认证 ============ -// Login Performs user login and returns token | 登录,返回Token -// TODO 后续参数可以修改为结构体 +// Login Performs user login and returns token | 登录,返回Token TODO 后续参数可以修改为结构体 func (m *Manager) Login(ctx context.Context, loginID string, device ...string) (string, error) { // Check if account is disabled | 检查账号是否被封禁 if m.IsDisable(ctx, loginID) { @@ -1038,7 +1039,7 @@ func (m *Manager) GetPool() adapter.Pool { } // GetGenerator returns the token generator | 获取 Token 生成器 -func (m *Manager) GetGenerator() *token.Generator { +func (m *Manager) GetGenerator() adapter.Generator { return m.generator } diff --git a/core/satoken.go b/core/satoken.go index 1372899..fcee840 100644 --- a/core/satoken.go +++ b/core/satoken.go @@ -12,7 +12,6 @@ import ( "github.com/click33/sa-token-go/core/oauth2" "github.com/click33/sa-token-go/core/security" "github.com/click33/sa-token-go/core/session" - "github.com/click33/sa-token-go/core/token" "github.com/click33/sa-token-go/core/utils" ) @@ -24,9 +23,14 @@ const Version = "0.1.3" // Configuration related types | 配置相关类型 type ( - Config = config.Config - CookieConfig = config.CookieConfig + Config = config.Config + CookieConfig = config.CookieConfig + LoggerConfig = config.LoggerConfig + RenewPoolConfig = config.RenewPoolConfig + TokenStyle = config.TokenStyle + SameSiteMode = config.SameSiteMode + LogLevel = config.LogLevel ) // Token style constants | Token风格常量 @@ -42,27 +46,37 @@ const ( TokenStyleTik = config.TokenStyleTik ) +// Adapter interfaces | 适配器接口 +type ( + Codec = adapter.Codec + Generator = adapter.Generator + Log = adapter.Log + Pool = adapter.Pool + Storage = adapter.Storage + RequestContext = adapter.RequestContext +) + // Core types | 核心类型 type ( - Manager = manager.Manager - TokenInfo = manager.TokenInfo - Session = session.Session - TokenGenerator = token.Generator - SaTokenContext = context.SaTokenContext - Builder = builder.Builder - NonceManager = security.NonceManager + Builder = builder.Builder + + Manager = manager.Manager + TokenInfo = manager.TokenInfo + + Session = session.Session + + SaTokenContext = context.SaTokenContext + + NonceManager = security.NonceManager + + AccessTokenInfo = security.AccessTokenInfo RefreshTokenInfo = security.RefreshTokenInfo RefreshTokenManager = security.RefreshTokenManager - OAuth2Server = oauth2.OAuth2Server - OAuth2Client = oauth2.Client - OAuth2AccessToken = oauth2.AccessToken - OAuth2GrantType = oauth2.GrantType -) -// Adapter interfaces | 适配器接口 -type ( - Storage = adapter.Storage - RequestContext = adapter.RequestContext + OAuth2Client = oauth2.Client + OAuth2Server = oauth2.OAuth2Server + OAuth2AccessToken = oauth2.AccessToken + OAuth2GrantType = oauth2.GrantType ) // Event related types | 事件相关类型 @@ -137,8 +151,8 @@ func DefaultConfig() *Config { } // NewManager Creates a new authentication manager | 创建新的认证管理器 -func NewManager(storage Storage, cfg *Config) *Manager { - return manager.NewManager(storage, cfg) +func NewManager(cfg *Config, generator adapter.Generator, storage adapter.Storage, serializer adapter.Codec, logger adapter.Log, pool adapter.Pool) *Manager { + return manager.NewManager(cfg, generator, storage, serializer, logger, pool) } // NewContext Creates a new Sa-Token context | 创建新的Sa-Token上下文 diff --git a/core/security/refresh_token.go b/core/security/refresh_token.go index 25ad337..24899af 100644 --- a/core/security/refresh_token.go +++ b/core/security/refresh_token.go @@ -7,10 +7,10 @@ import ( codec_json "github.com/click33/sa-token-go/codec/json" "github.com/click33/sa-token-go/core/adapter" "github.com/click33/sa-token-go/core/serror" + "github.com/click33/sa-token-go/generator/sgenerator" "github.com/click33/sa-token-go/storage/memory" "time" - "github.com/click33/sa-token-go/core/token" "github.com/click33/sa-token-go/core/utils" ) @@ -40,27 +40,28 @@ type RefreshTokenInfo struct { // RefreshTokenManager Refresh token manager | 刷新令牌管理器 type RefreshTokenManager struct { - authType string // Auth system type | 认证体系类型 - keyPrefix string // Storage key prefix | 存储前缀 - tokenKeyPrefix string // Token key prefix | Token 前缀 - tokenGen *token.Generator - refreshTTL time.Duration // Refresh token TTL | 刷新令牌有效期 - accessTTL time.Duration // Access token TTL | 访问令牌有效期 - storage adapter.Storage // Storage adapter | 存储适配器 - serializer adapter.Codec // Codec adapter | 编解码器 + authType string // Auth system type | 认证体系类型 + keyPrefix string // Storage key prefix | 存储前缀 + tokenKeyPrefix string // Token key prefix | Token 前缀 + refreshTTL time.Duration // Refresh token TTL | 刷新令牌有效期 + accessTTL time.Duration // Access token TTL | 访问令牌有效期 + + tokenGen adapter.Generator // Token generator | Token 生成器 + storage adapter.Storage // Storage adapter | 存储适配器 + serializer adapter.Codec // Codec adapter | 编解码器 } // NewRefreshTokenManager Create manager instance | 创建刷新令牌管理器 func NewRefreshTokenManager( authType, prefix, tokenKeyPrefix string, - tokenGen *token.Generator, + tokenGen adapter.Generator, accessTTL time.Duration, storage adapter.Storage, serializer adapter.Codec, ) *RefreshTokenManager { if tokenGen == nil { - tokenGen = token.NewGenerator(nil) + tokenGen = sgenerator.NewGenerator(nil) } if accessTTL == 0 { accessTTL = DefaultAccessTTL diff --git a/core/serror/errors.go b/core/serror/errors.go index 91ef9a4..2ead247 100644 --- a/core/serror/errors.go +++ b/core/serror/errors.go @@ -2,37 +2,40 @@ package serror import ( - "errors" + "fmt" ) var ( - ErrCommonEncode = errors.New("failed to encode data") // failed to marshal data | 序列化数据失败 - ErrCommonDecode = errors.New("failed to decode data") // failed to unmarshal data | 反序列化数据失败 - - ErrRenewPoolNotStarted = errors.New("renew pool not started") // renew pool not started | 续期线程池未启动 - - ErrTokenNotFound = errors.New("token not found") // token not found | Token 不存在 - ErrTokenKickout = errors.New("token has been kicked out") // token has been kicked out | Token 已被踢下线 - ErrTokenReplaced = errors.New("token has been replaced") // token has been replaced | Token 已被顶下线 - ErrNotLogin = errors.New("not login") // not login | 未登录 - ErrAccountDisabled = errors.New("account is disabled") // account is disabled | 账号已被禁用 - ErrLoginLimitExceeded = errors.New("login count exceeds the maximum limit") // login count exceeds the maximum limit | 超出最大登录数量限制 - - ErrClientOrClientIDEmpty = errors.New("invalid client: clientID is required") // client or clientID is empty | 客户端或客户端ID为空 - ErrClientNotFound = errors.New("client not found") // client not found | 客户端不存在 - ErrUserIDEmpty = errors.New("userID cannot be empty") // userID is empty | 用户ID不能为空 - ErrInvalidRedirectURI = errors.New("invalid redirectUri") // invalid redirect URI | 回调URI非法 - ErrInvalidClientCredentials = errors.New("invalid client credentials") // invalid client credentials | 客户端凭证无效 - ErrInvalidAuthCode = errors.New("invalid authorization code") // invalid authorization code | 授权码无效 - ErrAuthCodeUsed = errors.New("authorization code already used") // authorization code already used | 授权码已被使用 - ErrAuthCodeExpired = errors.New("authorization code expired") // authorization code expired | 授权码已过期 - ErrClientMismatch = errors.New("client mismatch") // client mismatch | 客户端不匹配 - ErrRedirectURIMismatch = errors.New("redirectUri mismatch") // redirect URI mismatch | 回调URI不匹配 - ErrInvalidAccessToken = errors.New("invalid access token") // invalid access token | 访问令牌无效 - ErrInvalidRefreshToken = errors.New("invalid refresh token") // invalid refresh token | 刷新令牌无效 - - ErrInvalidNonce = errors.New("invalid or expired nonce") // invalid or expired nonce | Nonce 无效或已过期 - ErrInvalidLoginIDEmpty = errors.New("loginID cannot be empty") // loginID is empty | 登录ID不能为空 - - ErrRefreshTokenExpired = errors.New("refresh token expired") // refresh token expired | 刷新令牌已过期 + ErrCommonEncode = fmt.Errorf("failed to encode data") // failed to marshal data | 序列化数据失败 + ErrCommonDecode = fmt.Errorf("failed to decode data") // failed to unmarshal data | 反序列化数据失败 + + ErrRenewPoolNotStarted = fmt.Errorf("renew pool not started") // renew pool not started | 续期线程池未启动 + + ErrTokenNotFound = fmt.Errorf("token not found") // token not found | Token 不存在 + ErrTokenKickout = fmt.Errorf("token has been kicked out") // token has been kicked out | Token 已被踢下线 + ErrTokenReplaced = fmt.Errorf("token has been replaced") // token has been replaced | Token 已被顶下线 + ErrNotLogin = fmt.Errorf("not login") // not login | 未登录 + ErrAccountDisabled = fmt.Errorf("account is disabled") // account is disabled | 账号已被禁用 + ErrLoginLimitExceeded = fmt.Errorf("login count exceeds the maximum limit") // login count exceeds the maximum limit | 超出最大登录数量限制 + + ErrClientOrClientIDEmpty = fmt.Errorf("invalid client: clientID is required") // client or clientID is empty | 客户端或客户端ID为空 + ErrClientNotFound = fmt.Errorf("client not found") // client not found | 客户端不存在 + ErrUserIDEmpty = fmt.Errorf("userID cannot be empty") // userID is empty | 用户ID不能为空 + ErrInvalidRedirectURI = fmt.Errorf("invalid redirectUri") // invalid redirect URI | 回调URI非法 + ErrInvalidClientCredentials = fmt.Errorf("invalid client credentials") // invalid client credentials | 客户端凭证无效 + ErrInvalidAuthCode = fmt.Errorf("invalid authorization code") // invalid authorization code | 授权码无效 + ErrAuthCodeUsed = fmt.Errorf("authorization code already used") // authorization code already used | 授权码已被使用 + ErrAuthCodeExpired = fmt.Errorf("authorization code expired") // authorization code expired | 授权码已过期 + ErrClientMismatch = fmt.Errorf("client mismatch") // client mismatch | 客户端不匹配 + ErrRedirectURIMismatch = fmt.Errorf("redirectUri mismatch") // redirect URI mismatch | 回调URI不匹配 + ErrInvalidAccessToken = fmt.Errorf("invalid access token") // invalid access token | 访问令牌无效 + ErrInvalidRefreshToken = fmt.Errorf("invalid refresh token") // invalid refresh token | 刷新令牌无效 + + ErrInvalidNonce = fmt.Errorf("invalid or expired nonce") // invalid or expired nonce | Nonce 无效或已过期 + ErrInvalidLoginIDEmpty = fmt.Errorf("loginID cannot be empty") // loginID is empty | 登录ID不能为空 + + ErrRefreshTokenExpired = fmt.Errorf("refresh token expired") // refresh token expired | 刷新令牌已过期 + + ErrInvalidToken = fmt.Errorf("invalid token") + ErrUnexpectedSigningMethod = fmt.Errorf("unexpected signing method") ) diff --git a/core/session/session.go b/core/session/session.go index 8b5a4d7..48e0bb6 100644 --- a/core/session/session.go +++ b/core/session/session.go @@ -1,7 +1,6 @@ package session import ( - "errors" "fmt" codec_json "github.com/click33/sa-token-go/codec/json" "github.com/click33/sa-token-go/core/manager" @@ -51,7 +50,7 @@ func NewSession(authType, prefix, id string, storage adapter.Storage, serializer // Set Sets value | 设置值 func (s *Session) Set(key string, value any, ttl ...time.Duration) error { if key == "" { - return errors.New("session key cannot empty") + return fmt.Errorf("session key cannot empty") } s.mu.Lock() @@ -73,7 +72,7 @@ func (s *Session) SetMulti(valueMap map[string]any, ttl ...time.Duration) error for key, value := range valueMap { if key == "" { - return errors.New("session id cannot be empty") + return fmt.Errorf("session id cannot be empty") } s.Data[key] = value } @@ -261,10 +260,10 @@ func (s *Session) saveKeepTTL() error { // Load Loads session from storage | 从存储加载 func Load(id string, m *manager.Manager) (*Session, error) { if id == "" { - return nil, errors.New("session id cannot be empty") + return nil, fmt.Errorf("session id cannot be empty") } if m == nil { - return nil, errors.New("manager cannot be empty") + return nil, fmt.Errorf("manager cannot be empty") } data, err := m.GetStorage().Get(m.GetConfig().KeyPrefix + m.GetConfig().AuthType + SessionKeyPrefix + id) @@ -272,7 +271,7 @@ func Load(id string, m *manager.Manager) (*Session, error) { return nil, err } if data == nil { - return nil, errors.New("session not found") + return nil, fmt.Errorf("session not found") } raw, err := utils.ToBytes(data) diff --git a/core/token/consts.go b/core/token/consts.go deleted file mode 100644 index a5528f1..0000000 --- a/core/token/consts.go +++ /dev/null @@ -1,12 +0,0 @@ -// @Author daixk 2025/12/15 15:30:00 -package token - -// Constants for token generation | Token生成常量 -const ( - DefaultJWTSecret = "log-secret-key" // Should be overridden in production | 生产环境应覆盖 - TikTokenLength = 11 // TikTok-style short ID length | Tik风格短ID长度 - TikCharset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" - HashRandomBytesLen = 16 // Random bytes length for hash token | 哈希Token的随机字节长度 - TimestampRandomLen = 8 // Random bytes length for timestamp token | 时间戳Token的随机字节长度 - DefaultSimpleLength = 16 // Default simple token length | 默认简单Token长度 -) diff --git a/core/token/token.go b/generator/sgenerator/generator_adapter_sgenerator.go similarity index 90% rename from core/token/token.go rename to generator/sgenerator/generator_adapter_sgenerator.go index ff1a404..bda7d7b 100644 --- a/core/token/token.go +++ b/generator/sgenerator/generator_adapter_sgenerator.go @@ -1,23 +1,18 @@ -package token +// @Author daixk 2025/12/17 9:39:00 +package sgenerator import ( "crypto/rand" "crypto/sha256" "encoding/hex" "fmt" - "math/big" - "time" - "github.com/click33/sa-token-go/core/config" + "github.com/click33/sa-token-go/core/serror" "github.com/click33/sa-token-go/core/utils" "github.com/golang-jwt/jwt/v5" "github.com/google/uuid" -) - -// Error variables | 错误变量 -var ( - ErrInvalidToken = fmt.Errorf("invalid token") - ErrUnexpectedSigningMethod = fmt.Errorf("unexpected signing method") + "math/big" + "time" ) // Generator Token generator | Token生成器 @@ -47,7 +42,7 @@ func (g *Generator) Generate(loginID string, device string) (string, error) { case config.TokenStyleUUID: return g.generateUUID() case config.TokenStyleSimple: - return g.generateSimple(DefaultSimpleLength) + return g.generateSimple(config.DefaultSimpleLength) case config.TokenStyleRandom32: return g.generateSimple(32) case config.TokenStyleRandom64: @@ -81,7 +76,7 @@ func (g *Generator) generateUUID() (string, error) { // generateSimple Generates simple random string token | 生成简单随机字符串Token func (g *Generator) generateSimple(length int) (string, error) { if length <= 0 { - length = DefaultSimpleLength + length = config.DefaultSimpleLength } token := utils.RandomString(length) @@ -121,7 +116,7 @@ func (g *Generator) getJWTSecret() string { if g.config.JwtSecretKey != "" { return g.config.JwtSecretKey } - return DefaultJWTSecret + return config.DefaultJWTSecret } // ============ JWT Helper Methods | JWT辅助方法 ============ @@ -137,7 +132,7 @@ func (g *Generator) ParseJWT(tokenStr string) (jwt.MapClaims, error) { token, err := jwt.Parse(tokenStr, func(token *jwt.Token) (any, error) { // Verify signing method | 验证签名方法 if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { - return nil, fmt.Errorf("%w: %v", ErrUnexpectedSigningMethod, token.Header["alg"]) + return nil, fmt.Errorf("%w: %v", serror.ErrUnexpectedSigningMethod, token.Header["alg"]) } return []byte(secretKey), nil }) @@ -150,7 +145,7 @@ func (g *Generator) ParseJWT(tokenStr string) (jwt.MapClaims, error) { return claims, nil } - return nil, ErrInvalidToken + return nil, serror.ErrInvalidToken } // ValidateJWT Validates JWT token | 验证JWT Token @@ -177,7 +172,7 @@ func (g *Generator) GetLoginIDFromJWT(tokenStr string) (string, error) { // generateHash Generates SHA256 hash-based token | 生成SHA256哈希风格Token func (g *Generator) generateHash(loginID string, device string) (string, error) { // Combine loginID, device, timestamp and random bytes | 组合 loginID、device、时间戳和随机字节 - randomBytes := make([]byte, HashRandomBytesLen) + randomBytes := make([]byte, config.HashRandomBytesLen) if _, err := rand.Read(randomBytes); err != nil { return "", fmt.Errorf("failed to generate random bytes: %w", err) } @@ -196,7 +191,7 @@ func (g *Generator) generateHash(loginID string, device string) (string, error) // generateTimestamp Generates timestamp-based token | 生成时间戳风格Token func (g *Generator) generateTimestamp(loginID string, device string) (string, error) { // Format: timestamp_loginID_random | 格式:时间戳_loginID_随机数 - randomBytes := make([]byte, TimestampRandomLen) + randomBytes := make([]byte, config.TimestampRandomLen) if _, err := rand.Read(randomBytes); err != nil { return "", fmt.Errorf("failed to generate random bytes: %w", err) } @@ -208,15 +203,15 @@ func (g *Generator) generateTimestamp(loginID string, device string) (string, er // generateTik Generates short ID style token (like TikTok) | 生成Tik风格短ID Token(类似抖音) func (g *Generator) generateTik() (string, error) { - result := make([]byte, TikTokenLength) - charsetLen := int64(len(TikCharset)) + result := make([]byte, config.TikTokenLength) + charsetLen := int64(len(config.TikCharset)) for i := range result { num, err := rand.Int(rand.Reader, big.NewInt(charsetLen)) if err != nil { return "", fmt.Errorf("failed to generate random number: %w", err) } - result[i] = TikCharset[num.Int64()] + result[i] = config.TikCharset[num.Int64()] } return string(result), nil diff --git a/generator/sgenerator/go.mod b/generator/sgenerator/go.mod new file mode 100644 index 0000000..4e1656d --- /dev/null +++ b/generator/sgenerator/go.mod @@ -0,0 +1,3 @@ +module github.com/click33/sa-token-go/generator/sgenerator + +go 1.23.0 diff --git a/go.work b/go.work index dffe24c..3f6a18b 100644 --- a/go.work +++ b/go.work @@ -2,6 +2,7 @@ go 1.25.3 use ( ./codec/json + ./generator/sgenerator ./codec/msgpack ./core ./examples/kratos/kratos-example From 00344582aa9720133bd5d051faab2d20309c3c12 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Thu, 18 Dec 2025 23:37:41 +0800 Subject: [PATCH 18/50] =?UTF-8?q?feat():=201=E3=80=81=E5=AE=8C=E5=96=84stp?= =?UTF-8?q?util=E7=9B=B8=E5=85=B3=E6=96=B9=E6=B3=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/builder/builder.go | 26 +- core/manager/consts.go | 2 +- core/manager/manager.go | 131 +++-- core/satoken.go | 4 + core/session/session.go | 3 +- stputil/stputil.go | 1049 +++++++++++++++++++++++++++++---------- 6 files changed, 911 insertions(+), 304 deletions(-) diff --git a/core/builder/builder.go b/core/builder/builder.go index 7997e7d..87006cd 100644 --- a/core/builder/builder.go +++ b/core/builder/builder.go @@ -1,6 +1,7 @@ package builder import ( + "context" codec_json "github.com/click33/sa-token-go/codec/json" "github.com/click33/sa-token-go/generator/sgenerator" "github.com/click33/sa-token-go/log/nop" @@ -45,7 +46,10 @@ type Builder struct { storage adapter.Storage // Storage adapter | 存储适配器 codec adapter.Codec // codec Codec adapter for encoding and decoding operations | 编解码操作的编码器适配器 log adapter.Log // log Log adapter for logging operations | 日志记录操作的适配器 - pool adapter.Pool // 续期池 + pool adapter.Pool // Async task pool component | 异步任务协程池组件 + + customPermissionListFunc func(ctx context.Context, loginID string) ([]string, error) // Custom permission provider | 自定义权限获取函数 + customRoleListFunc func(ctx context.Context, loginID string) ([]string, error) // Custom role provider | 自定义角色获取函数 } // NewBuilder creates a new builder with log configuration | 创建新的构建器(使用默认配置) @@ -198,12 +202,18 @@ func (b *Builder) KeyPrefix(prefix string) *Builder { // AuthType sets authentication system type | 设置认证体系类型 func (b *Builder) AuthType(authType string) *Builder { + // 如果为空,则使用默认 + if authType == "" { + b.authType = config.DefaultAuthType + } + // 如果前缀不为空且不以 : 结尾,自动添加 : if authType != "" && !strings.HasSuffix(authType, ":") { b.authType = authType + ":" } else { b.authType = authType } + return b } @@ -474,6 +484,18 @@ func (b *Builder) SetLog(log adapter.Log) *Builder { return b } +// SetCustomPermissionListFunc sets the custom permission provider | 设置自定义权限获取函数 +func (b *Builder) SetCustomPermissionListFunc(f func(ctx context.Context, loginID string) ([]string, error)) *Builder { + b.customPermissionListFunc = f + return b +} + +// SetCustomRoleListFunc sets the custom role provider | 设置自定义角色获取函数 +func (b *Builder) SetCustomRoleListFunc(f func(ctx context.Context, loginID string) ([]string, error)) *Builder { + b.customRoleListFunc = f + return b +} + // Jwt sets TokenStyle to JWT and sets secret key | 设置为JWT模式并指定密钥 func (b *Builder) Jwt(secret string) *Builder { b.tokenStyle = config.TokenStyleJWT @@ -587,5 +609,5 @@ func (b *Builder) Build() *manager.Manager { } // Build Manager | 构建 Manager - return manager.NewManager(cfg, b.generator, b.storage, b.codec, b.log, b.pool) + return manager.NewManager(cfg, b.generator, b.storage, b.codec, b.log, b.pool, b.customPermissionListFunc, b.customRoleListFunc) } diff --git a/core/manager/consts.go b/core/manager/consts.go index ac74597..d354de0 100644 --- a/core/manager/consts.go +++ b/core/manager/consts.go @@ -5,7 +5,7 @@ import "time" // Constants for storage keys and log values | 存储键和默认值常量 const ( - DefaultDevice = "log" // Default device type | 默认设备类型 + DefaultDevice = "default" // Default device type | 默认设备类型 DefaultPrefix = "satoken" // Default key prefix | 默认键前缀 DisableValue = "1" // Disabled flag value | 被禁用标记值 DefaultRenewValue = "1" // Default renew flag value | 默认续期标记值 diff --git a/core/manager/manager.go b/core/manager/manager.go index d19de3d..ca27e4e 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -44,10 +44,13 @@ type Manager struct { serializer adapter.Codec // Codec adapter for encoding and decoding operations | 编解码器适配器 logger adapter.Log // Log adapter for logging operations | 日志适配器 pool adapter.Pool // Async task pool component | 异步任务协程池组件 + + CustomPermissionListFunc func(ctx context.Context, loginID string) ([]string, error) // Custom permission func | 自定义权限获取函数 + CustomRoleListFunc func(ctx context.Context, loginID string) ([]string, error) // Custom role func | 自定义角色获取函数 } // NewManager creates and initializes a new Manager instance | 创建并初始化一个新的 Manager 实例 -func NewManager(cfg *config.Config, generator adapter.Generator, storage adapter.Storage, serializer adapter.Codec, logger adapter.Log, pool adapter.Pool) *Manager { +func NewManager(cfg *config.Config, generator adapter.Generator, storage adapter.Storage, serializer adapter.Codec, logger adapter.Log, pool adapter.Pool, customPermissionListFunc, CustomRoleListFunc func(ctx context.Context, loginID string) ([]string, error)) *Manager { // Use default configuration if cfg is nil | 如果未传入配置,则使用默认配置 if cfg == nil { @@ -340,7 +343,7 @@ func (m *Manager) replace(ctx context.Context, loginID string, device string) er return m.removeTokenChain(context.WithValue(ctx, config.CtxTokenValue, tokenStr), false, nil, listener.EventReplace) } -// Replace Replace user offline by login ID and device (public method) | 根据账号和设备顶人下线(公开方法) +// Replace user offline by login ID and device (public method) | 根据账号和设备顶人下线(公开方法) func (m *Manager) Replace(ctx context.Context, loginID string, device ...string) error { deviceType := getDevice(device) return m.replace(ctx, loginID, deviceType) @@ -558,8 +561,8 @@ func (m *Manager) GetDisableTime(ctx context.Context, loginID string) (int64, er // ============ Session Management | Session管理 ============ // GetSession Gets session by login ID | 获取Session -func (m *Manager) GetSession(loginID string) (*session.Session, error) { - sess, err := session.Load(loginID, m) +func (m *Manager) GetSession(ctx context.Context, loginID string) (*session.Session, error) { + sess, err := session.Load(ctx, loginID, m) if err != nil { sess = session.NewSession(m.config.AuthType, m.config.KeyPrefix, loginID, m.storage, m.serializer) } @@ -574,12 +577,12 @@ func (m *Manager) GetSessionByToken(ctx context.Context) (*session.Session, erro return nil, err } - return m.GetSession(loginID) + return m.GetSession(ctx, loginID) } // DeleteSession Deletes session | 删除Session -func (m *Manager) DeleteSession(loginID string) error { - sess, err := m.GetSession(loginID) +func (m *Manager) DeleteSession(ctx context.Context, loginID string) error { + sess, err := m.GetSession(ctx, loginID) if err != nil { return err } @@ -600,8 +603,8 @@ func (m *Manager) DeleteSessionByToken(ctx context.Context) error { // ============ Permission Validation | 权限验证 ============ // SetPermissions Sets permissions for user | 设置权限 -func (m *Manager) SetPermissions(_ context.Context, loginID string, permissions []string) error { - sess, err := m.GetSession(loginID) +func (m *Manager) SetPermissions(ctx context.Context, loginID string, permissions []string) error { + sess, err := m.GetSession(ctx, loginID) if err != nil { return err } @@ -616,8 +619,8 @@ func (m *Manager) SetPermissions(_ context.Context, loginID string, permissions } // RemovePermissions removes specified permissions for user | 删除用户指定权限 -func (m *Manager) RemovePermissions(_ context.Context, loginID string, permissions []string) error { - sess, err := m.GetSession(loginID) +func (m *Manager) RemovePermissions(ctx context.Context, loginID string, permissions []string) error { + sess, err := m.GetSession(ctx, loginID) if err != nil { return err } @@ -650,8 +653,16 @@ func (m *Manager) RemovePermissions(_ context.Context, loginID string, permissio } // GetPermissions Gets permission list | 获取权限列表 -func (m *Manager) GetPermissions(_ context.Context, loginID string) ([]string, error) { - sess, err := m.GetSession(loginID) +func (m *Manager) GetPermissions(ctx context.Context, loginID string) ([]string, error) { + if m.CustomPermissionListFunc != nil { + perms, err := m.CustomPermissionListFunc(ctx, loginID) + if err != nil { + return nil, err + } + return perms, nil + } + + sess, err := m.GetSession(ctx, loginID) if err != nil { return nil, err } @@ -664,7 +675,7 @@ func (m *Manager) GetPermissions(_ context.Context, loginID string) ([]string, e return m.toStringSlice(perms), nil } -// HasPermission 检查是否有指定权限 +// HasPermission checks whether the specified loginID has the given permission | 检查指定账号是否拥有指定权限 func (m *Manager) HasPermission(ctx context.Context, loginID string, permission string) bool { perms, err := m.GetPermissions(ctx, loginID) if err != nil { @@ -746,6 +757,7 @@ func (m *Manager) matchPermission(_ context.Context, pattern, permission string) return false } +// hasPermissionInList checks whether permission exists in permission list | 判断权限是否存在于权限列表中 func (m *Manager) hasPermissionInList(ctx context.Context, perms []string, permission string) bool { for _, p := range perms { if m.matchPermission(ctx, p, permission) { @@ -758,8 +770,8 @@ func (m *Manager) hasPermissionInList(ctx context.Context, perms []string, permi // ============ Role Validation | 角色验证 ============ // SetRoles Sets roles for user | 设置角色 -func (m *Manager) SetRoles(_ context.Context, loginID string, roles []string) error { - sess, err := m.GetSession(loginID) +func (m *Manager) SetRoles(ctx context.Context, loginID string, roles []string) error { + sess, err := m.GetSession(ctx, loginID) if err != nil { return err } @@ -774,8 +786,8 @@ func (m *Manager) SetRoles(_ context.Context, loginID string, roles []string) er } // RemoveRoles removes specified roles for user | 删除用户指定角色 -func (m *Manager) RemoveRoles(_ context.Context, loginID string, roles []string) error { - sess, err := m.GetSession(loginID) +func (m *Manager) RemoveRoles(ctx context.Context, loginID string, roles []string) error { + sess, err := m.GetSession(ctx, loginID) if err != nil { return err } @@ -809,9 +821,17 @@ func (m *Manager) RemoveRoles(_ context.Context, loginID string, roles []string) return sess.Set(SessionKeyRoles, newRoles, m.getExpiration()) } -// GetRoles Gets role list | 获取角色列表 -func (m *Manager) GetRoles(_ context.Context, loginID string) ([]string, error) { - sess, err := m.GetSession(loginID) +// GetRoles gets role list for the specified loginID | 获取指定账号的角色列表 +func (m *Manager) GetRoles(ctx context.Context, loginID string) ([]string, error) { + if m.CustomRoleListFunc != nil { + perms, err := m.CustomRoleListFunc(ctx, loginID) + if err != nil { + return nil, err + } + return perms, nil + } + + sess, err := m.GetSession(ctx, loginID) if err != nil { return nil, err } @@ -824,7 +844,7 @@ func (m *Manager) GetRoles(_ context.Context, loginID string) ([]string, error) return m.toStringSlice(roles), nil } -// HasRole 检查是否有指定角色 +// HasRole checks whether the specified loginID has the given role | 检查指定账号是否拥有指定角色 func (m *Manager) HasRole(ctx context.Context, loginID string, role string) bool { roles, err := m.GetRoles(ctx, loginID) if err != nil { @@ -869,6 +889,7 @@ func (m *Manager) HasRolesOr(ctx context.Context, loginID string, roles []string return false } +// hasPermissionInList checks whether permission exists in permission list | 判断权限是否存在于权限列表中 func (m *Manager) hasRoleInList(roles []string, role string) bool { for _, r := range roles { if r == role { @@ -985,31 +1006,31 @@ func (m *Manager) WaitEvents() { // ============ Security Features | 安全特性 ============ -// GenerateNonce Generates a one-time nonce | 生成一次性随机数 -func (m *Manager) GenerateNonce() (string, error) { - return m.nonceManager.Generate() -} - -// VerifyNonce Verifies a nonce | 验证随机数 -func (m *Manager) VerifyNonce(nonce string) bool { - return m.nonceManager.Verify(nonce) -} - -// LoginWithRefreshToken Logs in with refresh token | 使用刷新令牌登录 -func (m *Manager) LoginWithRefreshToken(_ context.Context, loginID, device string) (*security.RefreshTokenInfo, error) { - deviceType := getDevice([]string{device}) - return m.refreshManager.GenerateTokenPair(loginID, deviceType) -} - -// RefreshAccessToken Refreshes access token | 刷新访问令牌 -func (m *Manager) RefreshAccessToken(_ context.Context, refreshToken string) (*security.RefreshTokenInfo, error) { - return m.refreshManager.RefreshAccessToken(refreshToken) -} - -// RevokeRefreshToken Revokes refresh token | 撤销刷新令牌 -func (m *Manager) RevokeRefreshToken(_ context.Context, refreshToken string) error { - return m.refreshManager.RevokeRefreshToken(refreshToken) -} +//// GenerateNonce Generates a one-time nonce | 生成一次性随机数 +//func (m *Manager) GenerateNonce(_ context.Context) (string, error) { +// return m.nonceManager.Generate() +//} +// +//// VerifyNonce Verifies a nonce | 验证随机数 +//func (m *Manager) VerifyNonce(_ context.Context, nonce string) bool { +// return m.nonceManager.Verify(nonce) +//} +// +//// LoginWithRefreshToken Logs in with refresh token | 使用刷新令牌登录 +//func (m *Manager) LoginWithRefreshToken(_ context.Context, loginID string, device ...string) (*security.RefreshTokenInfo, error) { +// deviceType := getDevice(device) +// return m.refreshManager.GenerateTokenPair(loginID, deviceType) +//} +// +//// RefreshAccessToken Refreshes access token | 刷新访问令牌 +//func (m *Manager) RefreshAccessToken(ctx context.Context) (*security.RefreshTokenInfo, error) { +// return m.refreshManager.RefreshAccessToken(utils.GetCtxValue(ctx, config.CtxTokenValue)) +//} +// +//// RevokeRefreshToken Revokes refresh token | 撤销刷新令牌 +//func (m *Manager) RevokeRefreshToken(ctx context.Context) error { +// return m.refreshManager.RevokeRefreshToken(utils.GetCtxValue(ctx, config.CtxTokenValue)) +//} // ============ Public Getters | 公共获取器 ============ @@ -1138,7 +1159,7 @@ func (m *Manager) renewToken(ctx context.Context, info *TokenInfo) { _ = m.storage.Expire(accountKey, exp) // Renew session TTL | 续期Session的TTL - if sess, err := m.GetSession(info.LoginID); err == nil && sess != nil { + if sess, err := m.GetSession(ctx, info.LoginID); err == nil && sess != nil { _ = sess.Renew(exp) // Renew the session expiration | 续期Session的过期时间 } @@ -1179,7 +1200,7 @@ func (m *Manager) removeTokenChain(ctx context.Context, destroySession bool, inf _ = m.storage.Delete(accountKey) // Delete account-token mapping | 删除账号映射 _ = m.storage.Delete(renewKey) // Delete renew key | 删除续期标记 if destroySession { // Optionally destroy session | 可选销毁Session - _ = m.DeleteSession(info.LoginID) + _ = m.DeleteSession(ctx, info.LoginID) } // EventKickout User kicked offline (keep session) | 用户被踢下线(保留Session,自动过期) @@ -1200,7 +1221,7 @@ func (m *Manager) removeTokenChain(ctx context.Context, destroySession bool, inf _ = m.storage.Delete(accountKey) // Delete account-token mapping | 删除账号映射 _ = m.storage.Delete(renewKey) // Delete renew key | 删除续期标记 if destroySession { // Optionally destroy session | 可选销毁Session - _ = m.DeleteSession(info.LoginID) + _ = m.DeleteSession(ctx, info.LoginID) } } @@ -1248,6 +1269,14 @@ func getDevice(device []string) string { return DefaultDevice } +// GetDevice extracts device type from optional parameter | 从可选参数中提取设备类型 公开方法 +func (m *Manager) GetDevice(device []string) string { + if len(device) > 0 && strings.TrimSpace(device[0]) != "" { + return device[0] + } + return DefaultDevice +} + // getExpiration calculates expiration duration from config | 从配置计算过期时间 func (m *Manager) getExpiration() time.Duration { if m.config.Timeout > 0 { @@ -1256,7 +1285,7 @@ func (m *Manager) getExpiration() time.Duration { return 0 } -// assertString safely converts interface to string | 安全地将interface转换为string +// assertString asserts value as string safely | 安全断言值为字符串 func assertString(v any) (string, bool) { s, ok := v.(string) return s, ok diff --git a/core/satoken.go b/core/satoken.go index fcee840..9a74f41 100644 --- a/core/satoken.go +++ b/core/satoken.go @@ -150,6 +150,10 @@ func DefaultConfig() *Config { return config.DefaultConfig() } +func DefaultLoggerConfig() *LoggerConfig { + return config.DefaultLoggerConfig() +} + // NewManager Creates a new authentication manager | 创建新的认证管理器 func NewManager(cfg *Config, generator adapter.Generator, storage adapter.Storage, serializer adapter.Codec, logger adapter.Log, pool adapter.Pool) *Manager { return manager.NewManager(cfg, generator, storage, serializer, logger, pool) diff --git a/core/session/session.go b/core/session/session.go index 48e0bb6..3a57524 100644 --- a/core/session/session.go +++ b/core/session/session.go @@ -1,6 +1,7 @@ package session import ( + "context" "fmt" codec_json "github.com/click33/sa-token-go/codec/json" "github.com/click33/sa-token-go/core/manager" @@ -258,7 +259,7 @@ func (s *Session) saveKeepTTL() error { // ============ Static Methods | 静态方法 ============ // Load Loads session from storage | 从存储加载 -func Load(id string, m *manager.Manager) (*Session, error) { +func Load(_ context.Context, id string, m *manager.Manager) (*Session, error) { if id == "" { return nil, fmt.Errorf("session id cannot be empty") } diff --git a/stputil/stputil.go b/stputil/stputil.go index de0bbef..c3b3c8a 100644 --- a/stputil/stputil.go +++ b/stputil/stputil.go @@ -1,9 +1,12 @@ package stputil import ( + "context" "errors" "fmt" + "github.com/click33/sa-token-go/core/adapter" "github.com/click33/sa-token-go/core/config" + "github.com/click33/sa-token-go/core/listener" "strings" "sync" "time" @@ -18,400 +21,792 @@ var ( globalManagerMap sync.Map ) -// --------------------------辅助方法-------------------------- +// ============ Authentication | 登录认证 ============ -// getAutoType checks if a valid autoType is provided, ensures it's trimmed, appends ":" if missing, and returns the value | 检查是否提供有效的 autoType,修剪空格,如果缺少 ":" 则添加,并返回值 -func getAutoType(autoType ...string) string { - // Check if autoType is provided and not empty, trim it and append ":" if missing | 检查是否提供了有效的 autoType,修剪空格,如果缺少 ":" 则添加 - if len(autoType) > 0 && strings.TrimSpace(autoType[0]) != "" { - trimmed := strings.TrimSpace(autoType[0]) - // If it doesn't end with ":", append ":" | 如果 autoType 的值不以 ":" 结尾,则添加 ":" - if !strings.HasSuffix(trimmed, ":") { - trimmed = trimmed + ":" - } - return trimmed +// Login performs user login | 用户登录 +func Login(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) (string, error) { + mgr, err := GetManager(deviceOrAutoType...) + if err != nil { + return "", err } - // Return log autoType if autoType is empty or invalid | 如果 autoType 为空或无效,返回默认值 - return config.DefaultAuthType -} -// loadManager retrieves the manager from the global map using the valid autoType | 使用有效的 autoType 从全局 map 中加载管理器 -func loadManager(autoType string) (*manager.Manager, error) { - // Load the manager from the global map using the valid autoType | 使用有效的 autoType 从全局 map 中加载管理器 - value, ok := globalManagerMap.Load(autoType) - if !ok { - return nil, errors.New("manager not found for autoType: " + autoType) + if id, err := toString(loginID); err != nil { + return "", err + } else { + return mgr.Login(ctx, id, deviceOrAutoType...) } - // Assert the loaded value to the correct type | 将加载的值断言为正确的类型 - mgr, ok := value.(*manager.Manager) - if !ok { - return nil, errors.New("invalid manager type for autoType: " + autoType) - } - return mgr, nil } -// PutManager stores the manager in the global map using the specified autoType | 使用指定的 autoType 将管理器存储在全局 map 中 -func PutManager(mgr *manager.Manager, autoType ...string) error { - // Validate and get the autoType value | 验证并获取 autoType 值 - validAutoType := getAutoType(autoType...) // 获取 autoType,默认为 config.DefaultAuthType - // Store the manager in the global map with the valid autoType | 使用有效的 autoType 将管理器存储在全局 map 中 - globalManagerMap.Store(validAutoType, mgr) - return nil -} +// LoginByToken performs login with specified token | 使用指定Token登录 +func LoginByToken(ctx context.Context, tokenValue string, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err + } -// GetManager retrieves the manager from the global map using the specified autoType | 使用指定的 autoType 从全局 map 中获取管理器 -func GetManager(autoType ...string) (*manager.Manager, error) { - // Validate and get the autoType value | 验证并获取 autoType 值 - validAutoType := getAutoType(autoType...) // 获取 autoType,默认为 config.DefaultAuthType - // Use LoadManager to retrieve the manager | 使用 LoadManager 方法来获取管理器 - return loadManager(validAutoType) + return mgr.LoginByToken(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) } -// CloseManager closes the specific manager for the given autoType and releases resources | 关闭指定的管理器并释放资源 -func CloseManager(autoType string) error { - // Validate and get the autoType value | 验证并获取 autoType 值 - validAutoType := getAutoType(autoType) // 获取 autoType,默认为 config.DefaultAuthType - // Load the manager from global map | 从全局 map 中加载管理器 - manager, err := loadManager(validAutoType) +// Logout performs user logout | 用户登出 +func Logout(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) error { + mgr, err := GetManager(deviceOrAutoType...) if err != nil { return err } - // Close the manager and release resources | 关闭管理器并释放资源 - manager.CloseManager() - // Remove the manager from the global map | 从全局 map 中移除该管理器 - globalManagerMap.Delete(validAutoType) - return nil -} -// CloseAllManager closes all managers in the global map and releases resources | 关闭所有管理器并释放资源 -func CloseAllManager() { - // Iterate over all managers in the global map and close them | 遍历全局 map 中的所有管理器并关闭它们 - globalManagerMap.Range(func(key, value interface{}) bool { - // Assert the value to the correct type | 将值断言为正确的类型 - manager, ok := value.(*manager.Manager) - if ok { - // Close each manager | 关闭每个管理器 - manager.CloseManager() - } - // Continue iterating | 继续遍历 - return true - }) - // Clear the global map after closing all managers | 关闭所有管理器后清空全局 map - globalManagerMap = sync.Map{} + if id, err := toString(loginID); err != nil { + return err + } else { + return mgr.Logout(ctx, id, deviceOrAutoType...) + } } -// ============ Authentication | 登录认证 ============ +// LogoutByToken performs logout by token | 根据Token登出 +func LogoutByToken(ctx context.Context, tokenValue string, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err + } -// Login performs user login | 用户登录 -func Login(loginID interface{}, device ...string) (string, error) { + return mgr.LogoutByToken(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) +} + +// Kickout kicks out a user session | 踢人下线 +func Kickout(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) error { + mgr, err := GetManager(deviceOrAutoType...) + if err != nil { + return err + } - return GetManager().Login(toString(loginID), device...) + if id, err := toString(loginID); err != nil { + return err + } else { + return mgr.Kickout(ctx, id, deviceOrAutoType...) + } } -// LoginByToken performs login with specified token | 使用指定Token登录 -func LoginByToken(loginID interface{}, tokenValue string, device ...string) error { - return GetManager().LoginByToken(toString(loginID), tokenValue, device...) +// KickoutByToken Kick user offline | 根据Token踢人下线 +func KickoutByToken(ctx context.Context, tokenValue string, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err + } + + return mgr.KickoutByToken(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) } -// Logout performs user logout | 用户登出 -func Logout(loginID interface{}, device ...string) error { - return GetManager().Logout(toString(loginID), device...) +// Replace user offline by login ID and device | 根据账号和设备顶人下线 +func Replace(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) error { + mgr, err := GetManager(deviceOrAutoType...) + if err != nil { + return err + } + + if id, err := toString(loginID); err != nil { + return err + } else { + return mgr.Replace(ctx, id, deviceOrAutoType...) + } } -// LogoutByToken performs logout by token | 根据Token登出 -func LogoutByToken(tokenValue string) error { - return GetManager().LogoutByToken(tokenValue) +// ReplaceByToken Replace user offline by token | 根据Token顶人下线 +func ReplaceByToken(ctx context.Context, tokenValue string, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err + } + + return mgr.ReplaceByToken(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) } +// ============ Token Validation | Token验证 ============ + // IsLogin checks if the user is logged in | 检查用户是否已登录 -func IsLogin(tokenValue string) bool { - return GetManager().IsLogin(tokenValue) +func IsLogin(ctx context.Context, tokenValue string, authType ...string) bool { + mgr, err := GetManager(authType...) + if err != nil { + return false + } + + return mgr.IsLogin(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) } // CheckLogin checks login status (throws error if not logged in) | 检查登录状态(未登录抛出错误) -func CheckLogin(tokenValue string) error { - return GetManager().CheckLogin(tokenValue) +func CheckLogin(ctx context.Context, tokenValue string, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err + } + + return mgr.CheckLogin(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) } // CheckLoginWithState checks the login status (returns error to determine the reason if not logged in) | 检查登录状态(未登录时根据错误确定原因) -func CheckLoginWithState(tokenValue string) (bool, error) { - return GetManager().CheckLoginWithState(tokenValue) +func CheckLoginWithState(ctx context.Context, tokenValue string, authType ...string) (bool, error) { + mgr, err := GetManager(authType...) + if err != nil { + return false, err + } + + return mgr.CheckLoginWithState(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) } // GetLoginID gets the login ID from token | 从Token获取登录ID -func GetLoginID(tokenValue string) (string, error) { - return GetManager().GetLoginID(tokenValue) +func GetLoginID(ctx context.Context, tokenValue string, authType ...string) (string, error) { + mgr, err := GetManager(authType...) + if err != nil { + return "", err + } + + return mgr.GetLoginID(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) } // GetLoginIDNotCheck gets login ID without checking | 获取登录ID(不检查) -func GetLoginIDNotCheck(tokenValue string) (string, error) { - return GetManager().GetLoginIDNotCheck(tokenValue) +func GetLoginIDNotCheck(ctx context.Context, tokenValue string, authType ...string) (string, error) { + mgr, err := GetManager(authType...) + if err != nil { + return "", err + } + + return mgr.GetLoginIDNotCheck(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) } // GetTokenValue gets the token value for a login ID | 获取登录ID对应的Token值 -func GetTokenValue(loginID interface{}, device ...string) (string, error) { - return GetManager().GetTokenValue(toString(loginID), device...) -} +func GetTokenValue(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) (string, error) { + mgr, err := GetManager(deviceOrAutoType...) + if err != nil { + return "", err + } -// GetTokenInfo gets token information | 获取Token信息 -func GetTokenInfo(tokenValue string) (*manager.TokenInfo, error) { - return GetManager().GetTokenInfo(tokenValue) + if id, err := toString(loginID); err != nil { + return "", err + } else { + return mgr.GetTokenValue(ctx, id, deviceOrAutoType...) + } } -// ============ Kickout | 踢人下线 ============ +// GetTokenInfo gets token information | 获取Token信息 +func GetTokenInfo(ctx context.Context, tokenValue string, authType ...string) (*manager.TokenInfo, error) { + mgr, err := GetManager(authType...) + if err != nil { + return nil, err + } -// Kickout kicks out a user session | 踢人下线 -func Kickout(loginID interface{}, device ...string) error { - return GetManager().Kickout(toString(loginID), device...) + return mgr.GetTokenInfo(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) } // ============ Account Disable | 账号封禁 ============ // Disable disables an account for specified duration | 封禁账号(指定时长) -func Disable(loginID interface{}, duration time.Duration) error { - return GetManager().Disable(toString(loginID), duration) +func Disable(ctx context.Context, loginID interface{}, duration time.Duration, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err + } + + if id, err := toString(loginID); err != nil { + return err + } else { + return mgr.Disable(ctx, id, duration) + } } // Untie re-enables a disabled account | 解封账号 -func Untie(loginID interface{}) error { - return GetManager().Untie(toString(loginID)) +func Untie(ctx context.Context, loginID interface{}, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err + } + + if id, err := toString(loginID); err != nil { + return err + } else { + return mgr.Untie(ctx, id) + } } // IsDisable checks if an account is disabled | 检查账号是否被封禁 -func IsDisable(loginID interface{}) bool { - return GetManager().IsDisable(toString(loginID)) +func IsDisable(ctx context.Context, loginID interface{}, authType ...string) bool { + mgr, err := GetManager(authType...) + if err != nil { + return false + } + + if id, err := toString(loginID); err != nil { + return false + } else { + return mgr.IsDisable(ctx, id) + } } // GetDisableTime gets remaining disable time in seconds | 获取剩余封禁时间(秒) -func GetDisableTime(loginID interface{}) (int64, error) { - return GetManager().GetDisableTime(toString(loginID)) +func GetDisableTime(ctx context.Context, loginID interface{}, authType ...string) (int64, error) { + mgr, err := GetManager(authType...) + if err != nil { + return 0, err + } + + if id, err := toString(loginID); err != nil { + return 0, err + } else { + return mgr.GetDisableTime(ctx, id) + } } // ============ Session Management | Session管理 ============ // GetSession gets session by login ID | 根据登录ID获取Session -func GetSession(loginID interface{}) (*session.Session, error) { - return GetManager().GetSession(toString(loginID)) +func GetSession(ctx context.Context, loginID interface{}, authType ...string) (*session.Session, error) { + mgr, err := GetManager(authType...) + if err != nil { + return nil, err + } + + if id, err := toString(loginID); err != nil { + return nil, err + } else { + return mgr.GetSession(ctx, id) + } } // GetSessionByToken gets session by token | 根据Token获取Session -func GetSessionByToken(tokenValue string) (*session.Session, error) { - return GetManager().GetSessionByToken(tokenValue) +func GetSessionByToken(ctx context.Context, tokenValue string, authType ...string) (*session.Session, error) { + mgr, err := GetManager(authType...) + if err != nil { + return nil, err + } + + return mgr.GetSessionByToken(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) } // DeleteSession deletes a session | 删除Session -func DeleteSession(loginID interface{}) error { - return GetManager().DeleteSession(toString(loginID)) +func DeleteSession(ctx context.Context, loginID interface{}, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err + } + + if id, err := toString(loginID); err != nil { + return err + } else { + return mgr.DeleteSession(ctx, id) + } +} + +// DeleteSessionByToken Deletes session by token | 根据Token删除Session +func DeleteSessionByToken(ctx context.Context, tokenValue string, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err + } + + return mgr.DeleteSessionByToken(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) } // ============ Permission Verification | 权限验证 ============ // SetPermissions sets permissions for a login ID | 设置用户权限 -func SetPermissions(loginID interface{}, permissions []string) error { - return GetManager().SetPermissions(toString(loginID), permissions) +func SetPermissions(ctx context.Context, loginID interface{}, permissions []string, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err + } + + if id, err := toString(loginID); err != nil { + return err + } else { + return mgr.SetPermissions(ctx, id, permissions) + } } // RemovePermissions removes specified permissions for a login ID | 删除用户指定权限 -func RemovePermissions(loginID interface{}, permissions []string) error { - return GetManager().RemovePermissions(toString(loginID), permissions) +func RemovePermissions(ctx context.Context, loginID interface{}, permissions []string, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err + } + + if id, err := toString(loginID); err != nil { + return err + } else { + return mgr.RemovePermissions(ctx, id, permissions) + } } // GetPermissions gets permission list | 获取权限列表 -func GetPermissions(loginID interface{}) ([]string, error) { - return GetManager().GetPermissions(toString(loginID)) +func GetPermissions(ctx context.Context, loginID interface{}, authType ...string) ([]string, error) { + mgr, err := GetManager(authType...) + if err != nil { + return nil, err + } + + if id, err := toString(loginID); err != nil { + return nil, err + } else { + return mgr.GetPermissions(ctx, id) + } } // HasPermission checks if has specified permission | 检查是否拥有指定权限 -func HasPermission(loginID interface{}, permission string) bool { - return GetManager().HasPermission(toString(loginID), permission) +func HasPermission(ctx context.Context, loginID interface{}, permissions string, authType ...string) bool { + mgr, err := GetManager(authType...) + if err != nil { + return false + } + + if id, err := toString(loginID); err != nil { + return false + } else { + return mgr.HasPermission(ctx, id, permissions) + } } // HasPermissionsAnd checks if has all permissions (AND logic) | 检查是否拥有所有权限(AND逻辑) -func HasPermissionsAnd(loginID interface{}, permissions []string) bool { - return GetManager().HasPermissionsAnd(toString(loginID), permissions) +func HasPermissionsAnd(ctx context.Context, loginID interface{}, permissions []string, authType ...string) bool { + mgr, err := GetManager(authType...) + if err != nil { + return false + } + + if id, err := toString(loginID); err != nil { + return false + } else { + return mgr.HasPermissionsAnd(ctx, id, permissions) + } +} + +// HasPermissionsOr checks if has any permission (OR logic) | 检查是否拥有任一权限(OR逻辑) +func HasPermissionsOr(ctx context.Context, loginID interface{}, permissions []string, authType ...string) bool { + mgr, err := GetManager(authType...) + if err != nil { + return false + } + + if id, err := toString(loginID); err != nil { + return false + } else { + return mgr.HasPermissionsOr(ctx, id, permissions) + } +} + +// ============ Role Management | 角色管理 ============ + +// SetRoles sets roles for a login ID | 设置用户角色 +func SetRoles(ctx context.Context, loginID interface{}, roles []string, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err + } + + if id, err := toString(loginID); err != nil { + return err + } else { + return mgr.SetRoles(ctx, id, roles) + } +} + +// RemoveRoles removes specified roles for a login ID | 删除用户指定角色 +func RemoveRoles(ctx context.Context, loginID interface{}, roles []string, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err + } + + if id, err := toString(loginID); err != nil { + return err + } else { + return mgr.RemoveRoles(ctx, id, roles) + } +} + +// GetRoles gets role list | 获取角色列表 +func GetRoles(ctx context.Context, loginID interface{}, authType ...string) ([]string, error) { + mgr, err := GetManager(authType...) + if err != nil { + return nil, err + } + + if id, err := toString(loginID); err != nil { + return nil, err + } else { + return mgr.GetRoles(ctx, id) + } +} + +// HasRole checks if has specified role | 检查是否拥有指定角色 +func HasRole(ctx context.Context, loginID interface{}, role string, authType ...string) bool { + mgr, err := GetManager(authType...) + if err != nil { + return false + } + + if id, err := toString(loginID); err != nil { + return false + } else { + return mgr.HasRole(ctx, id, role) + } +} + +// HasRolesAnd checks if has all roles (AND logic) | 检查是否拥有所有角色(AND逻辑) +func HasRolesAnd(ctx context.Context, loginID interface{}, roles []string, authType ...string) bool { + mgr, err := GetManager(authType...) + if err != nil { + return false + } + + if id, err := toString(loginID); err != nil { + return false + } else { + return mgr.HasRolesAnd(ctx, id, roles) + } +} + +// HasRolesOr 检查是否拥有任一角色(OR) +func HasRolesOr(ctx context.Context, loginID interface{}, roles []string, authType ...string) bool { + mgr, err := GetManager(authType...) + if err != nil { + return false + } + + if id, err := toString(loginID); err != nil { + return false + } else { + return mgr.HasRolesOr(ctx, id, roles) + } +} + +// ============ Token标签 ============ + +// SetTokenTag 设置Token标签 +func SetTokenTag(ctx context.Context, tokenValue, tag string, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err + } + + return mgr.SetTokenTag(context.WithValue(ctx, config.CtxTokenValue, tokenValue), tag) +} + +// GetTokenTag 获取Token标签 +func GetTokenTag(ctx context.Context, tokenValue string, authType ...string) (string, error) { + mgr, err := GetManager(authType...) + if err != nil { + return "", err + } + + return mgr.GetTokenTag(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) +} + +// ============ 会话查询 ============ + +// GetTokenValueListByLoginID 获取指定账号的所有Token +func GetTokenValueListByLoginID(ctx context.Context, loginID interface{}, authType ...string) ([]string, error) { + mgr, err := GetManager(authType...) + if err != nil { + return nil, err + } + + if id, err := toString(loginID); err != nil { + return nil, err + } else { + return mgr.GetTokenValueListByLoginID(ctx, id) + } +} + +// GetSessionCountByLoginID 获取指定账号的Session数量 +func GetSessionCountByLoginID(ctx context.Context, loginID interface{}, authType ...string) (int, error) { + mgr, err := GetManager(authType...) + if err != nil { + return 0, err + } + + if id, err := toString(loginID); err != nil { + return 0, err + } else { + return mgr.GetSessionCountByLoginID(ctx, id) + } +} + +// ============ Security Features | 安全特性 ============ + +// Generate Generates a one-time nonce | 生成一次性随机数 +func Generate(ctx context.Context, authType ...string) (string, error) { + mgr, err := GetManager(authType...) + if err != nil { + return "", err + } + + return mgr.GetNonceManager().Generate() +} + +// Verify Verifies a nonce | 验证随机数 +func Verify(ctx context.Context, nonce string, authType ...string) bool { + mgr, err := GetManager(authType...) + if err != nil { + return false + } + + return mgr.GetNonceManager().Verify(nonce) +} + +// VerifyAndConsume Verifies and consumes nonce, returns error if invalid | 验证并消费nonce,无效时返回错误 +func VerifyAndConsume(ctx context.Context, nonce string, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err + } + + return mgr.GetNonceManager().VerifyAndConsume(nonce) +} + +// IsValidNonce Checks if nonce is valid without consuming it | 检查nonce是否有效(不消费) +func IsValidNonce(ctx context.Context, nonce string, authType ...string) bool { + mgr, err := GetManager(authType...) + if err != nil { + return false + } + + return mgr.GetNonceManager().IsValid(nonce) +} + +// GenerateTokenPair Create access + refresh token | 生成访问令牌和刷新令牌 +func GenerateTokenPair(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) (*security.RefreshTokenInfo, error) { + mgr, err := GetManager(deviceOrAutoType...) + if err != nil { + return nil, err + } + + if id, err := toString(loginID); err != nil { + return nil, err + } else { + return mgr.GetRefreshManager().GenerateTokenPair(id, mgr.GetDevice(deviceOrAutoType)) + } } -// HasPermissionsOr checks if has any permission (OR logic) | 检查是否拥有任一权限(OR逻辑) -func HasPermissionsOr(loginID interface{}, permissions []string) bool { - return GetManager().HasPermissionsOr(toString(loginID), permissions) +// VerifyAccessToken verifies access token validity | 验证访问令牌是否有效 +func VerifyAccessToken(ctx context.Context, accessToken string, authType ...string) bool { + mgr, err := GetManager(authType...) + if err != nil { + return false + } + + return mgr.GetRefreshManager().VerifyAccessToken(accessToken) +} + +// VerifyAccessTokenAndGetInfo verifies access token and returns token info | 验证访问令牌并返回Token信息 +func VerifyAccessTokenAndGetInfo(ctx context.Context, accessToken string, authType ...string) (*security.AccessTokenInfo, bool) { + mgr, err := GetManager(authType...) + if err != nil { + return nil, false + } + + return mgr.GetRefreshManager().VerifyAccessTokenAndGetInfo(accessToken) +} + +// GetRefreshTokenInfo gets refresh token information | 获取刷新令牌信息 +func GetRefreshTokenInfo(ctx context.Context, refreshToken string, authType ...string) (*security.RefreshTokenInfo, error) { + mgr, err := GetManager(authType...) + if err != nil { + return nil, err + } + + return mgr.GetRefreshManager().GetRefreshTokenInfo(refreshToken) +} + +// RevokeRefreshToken Revokes refresh token | 撤销刷新令牌 +func RevokeRefreshToken(ctx context.Context, refreshToken string, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err + } + + return mgr.GetRefreshManager().RevokeRefreshToken(refreshToken) } -// ============ Role Management | 角色管理 ============ +// IsValid checks whether token is valid | 检查Token是否有效 +func IsValid(ctx context.Context, refreshToken string, authType ...string) bool { + mgr, err := GetManager(authType...) + if err != nil { + return false + } -// SetRoles sets roles for a login ID | 设置用户角色 -func SetRoles(loginID interface{}, roles []string) error { - return GetManager().SetRoles(toString(loginID), roles) + return mgr.GetRefreshManager().IsValid(refreshToken) } -// RemoveRoles removes specified roles for a login ID | 删除用户指定角色 -func RemoveRoles(loginID interface{}, roles []string) error { - return GetManager().RemoveRoles(toString(loginID), roles) -} +// ============ OAuth2 Features | OAuth2 功能 ============ -// GetRoles gets role list | 获取角色列表 -func GetRoles(loginID interface{}) ([]string, error) { - return GetManager().GetRoles(toString(loginID)) -} +// RegisterClient Registers an OAuth2 client | 注册OAuth2客户端 +func RegisterClient(ctx context.Context, client *oauth2.Client, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err + } -// HasRole checks if has specified role | 检查是否拥有指定角色 -func HasRole(loginID interface{}, role string) bool { - return GetManager().HasRole(toString(loginID), role) + return mgr.GetOAuth2Server().RegisterClient(client) } -// HasRolesAnd checks if has all roles (AND logic) | 检查是否拥有所有角色(AND逻辑) -func HasRolesAnd(loginID interface{}, roles []string) bool { - return GetManager().HasRolesAnd(toString(loginID), roles) -} +// UnregisterClient unregisters an OAuth2 client | 注销OAuth2客户端 +func UnregisterClient(ctx context.Context, clientID string, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err + } -// HasRolesOr 检查是否拥有任一角色(OR) -func HasRolesOr(loginID interface{}, roles []string) bool { - return GetManager().HasRolesOr(toString(loginID), roles) + mgr.GetOAuth2Server().UnregisterClient(clientID) + + return nil } -// ============ Token标签 ============ +// GetClient gets OAuth2 client information | 获取OAuth2客户端信息 +func GetClient(ctx context.Context, clientID string, authType ...string) (*oauth2.Client, error) { + mgr, err := GetManager(authType...) + if err != nil { + return nil, err + } -// SetTokenTag 设置Token标签 -func SetTokenTag(tokenValue, tag string) error { - return GetManager().SetTokenTag(tokenValue, tag) + return mgr.GetOAuth2Server().GetClient(clientID) } -// GetTokenTag 获取Token标签 -func GetTokenTag(tokenValue string) (string, error) { - return GetManager().GetTokenTag(tokenValue) +// GenerateAuthorizationCode creates an authorization code | 创建授权码 +func GenerateAuthorizationCode(ctx context.Context, clientID, loginID, redirectURI string, scope []string, authType ...string) (*oauth2.AuthorizationCode, error) { + mgr, err := GetManager(authType...) + if err != nil { + return nil, err + } + + return mgr.GetOAuth2Server().GenerateAuthorizationCode(clientID, loginID, redirectURI, scope) } -// ============ 会话查询 ============ +// ExchangeCodeForToken exchanges authorization code for token | 使用授权码换取令牌 +func ExchangeCodeForToken(ctx context.Context, code, clientID, clientSecret, redirectURI string, authType ...string) (*oauth2.AccessToken, error) { + mgr, err := GetManager(authType...) + if err != nil { + return nil, err + } -// GetTokenValueList 获取指定账号的所有Token -func GetTokenValueList(loginID interface{}) ([]string, error) { - return GetManager().GetTokenValueListByLoginID(toString(loginID)) + return mgr.GetOAuth2Server().ExchangeCodeForToken(code, clientID, clientSecret, redirectURI) } -// GetSessionCount 获取指定账号的Session数量 -func GetSessionCount(loginID interface{}) (int, error) { - return GetManager().GetSessionCountByLoginID(toString(loginID)) -} +// ValidateAccessToken verifies OAuth2 access token | 验证OAuth2访问令牌 +func ValidateAccessToken(ctx context.Context, accessToken string, authType ...string) (*oauth2.AccessToken, error) { + mgr, err := GetManager(authType...) + if err != nil { + return nil, err + } -// ============ 辅助方法 ============ + return mgr.GetOAuth2Server().ValidateAccessToken(accessToken) +} -// toString Converts interface{} to string | 将interface{}转换为string -func toString(v interface{}) (string, error) { - // Check the type and convert to string | 判断类型并转换为字符串 - switch val := v.(type) { - case string: - return val, nil // If it's a string, return it directly | 如果是字符串,直接返回 - case int: - return intToString(val), nil // If it's int, convert to string | 如果是int,转换为string - case int64: - return int64ToString(val), nil // If it's int64, convert to string | 如果是int64,转换为string - case uint: - return uintToString(val), nil // If it's uint, convert to string | 如果是uint,转换为string - case uint64: - return uint64ToString(val), nil // If it's uint64, convert to string | 如果是uint64,转换为string - default: - return "", errors.New("Invalid type") // For other types, return error | 对于其他类型,返回错误 +// RefreshAccessToken Refreshes access token using refresh token | 使用刷新令牌刷新访问令牌 +func RefreshAccessToken(ctx context.Context, refreshToken, clientID, clientSecret string, authType ...string) (*oauth2.AccessToken, error) { + mgr, err := GetManager(authType...) + if err != nil { + return nil, err } -} -// intToString Converts int to string | 将int转换为string -func intToString(i int) string { - return int64ToString(int64(i)) // Call int64ToString to convert | 调用int64ToString进行转换 + return mgr.GetOAuth2Server().RefreshAccessToken(refreshToken, clientID, clientSecret) } -// int64ToString Converts int64 to string | 将int64转换为string -func int64ToString(i int64) string { - // If it's zero, return "0" | 如果是零,返回 "0" - if i == 0 { - return "0" +// RevokeToken Revokes access token and its refresh token | 撤销访问令牌及其刷新令牌 +func RevokeToken(ctx context.Context, accessToken string, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err } - // Check if it's negative and handle it | 判断是否为负数并处理 - negative := i < 0 - if negative { - i = -i // Take the absolute value | 取绝对值 - } + return mgr.GetOAuth2Server().RevokeToken(accessToken) +} - var result []byte - // Process each digit and prepend to the result array | 将每一位数字依次处理并添加到结果数组 - for i > 0 { - result = append([]byte{byte('0' + i%10)}, result...) - i /= 10 - } +// ============ Public Getters | 公共获取器 ============ - // If it's negative, add the '-' sign | 如果是负数,添加负号 - if negative { - result = append([]byte{'-'}, result...) +// GetConfig returns the manager configuration | 获取 Manager 当前使用的配置 +func GetConfig(ctx context.Context, authType ...string) *config.Config { + mgr, err := GetManager(authType...) + if err != nil { + return nil } - - return string(result) + return mgr.GetConfig() } -// uintToString Converts uint to string | 将uint转换为string -func uintToString(u uint) string { - return uint64ToString(uint64(u)) // Call uint64ToString to convert | 调用uint64ToString进行转换 +// GetStorage returns the storage adapter | 获取 Manager 使用的存储适配器 +func GetStorage(ctx context.Context, authType ...string) adapter.Storage { + mgr, err := GetManager(authType...) + if err != nil { + return nil + } + return mgr.GetStorage() } -// uint64ToString Converts uint64 to string | 将uint64转换为string -func uint64ToString(u uint64) string { - // If it's zero, return "0" | 如果是零,返回 "0" - if u == 0 { - return "0" +// GetCodec returns the codec (serializer) | 获取 Manager 使用的编解码器 +func GetCodec(ctx context.Context, authType ...string) adapter.Codec { + mgr, err := GetManager(authType...) + if err != nil { + return nil } + return mgr.GetCodec() +} - var result []byte - // Process each digit and prepend to the result array | 将每一位数字依次处理并添加到结果数组 - for u > 0 { - result = append([]byte{byte('0' + u%10)}, result...) - u /= 10 +// GetLog returns the logger adapter | 获取 Manager 使用的日志适配器 +func GetLog(ctx context.Context, authType ...string) adapter.Log { + mgr, err := GetManager(authType...) + if err != nil { + return nil } - - return string(result) + return mgr.GetLog() } -func GenerateNonce() (string, error) { - if globalManager == nil { - panic("Manager not initialized. Call stputil.SetManager() first") +// GetPool returns the goroutine pool | 获取 Manager 使用的协程池 +func GetPool(ctx context.Context, authType ...string) adapter.Pool { + mgr, err := GetManager(authType...) + if err != nil { + return nil } - return globalManager.GenerateNonce() + return mgr.GetPool() } -func VerifyNonce(nonce string) bool { - if globalManager == nil { - panic("Manager not initialized. Call stputil.SetManager() first") +// GetGenerator returns the token generator | 获取 Token 生成器 +func GetGenerator(ctx context.Context, authType ...string) adapter.Generator { + mgr, err := GetManager(authType...) + if err != nil { + return nil } - return globalManager.VerifyNonce(nonce) + return mgr.GetGenerator() } -func LoginWithRefreshToken(loginID interface{}, device ...string) (*security.RefreshTokenInfo, error) { - if globalManager == nil { - panic("Manager not initialized. Call stputil.SetManager() first") - } - deviceType := "log" - if len(device) > 0 { - deviceType = device[0] +// GetNonceManager returns the nonce manager | 获取随机串管理器 +func GetNonceManager(ctx context.Context, authType ...string) *security.NonceManager { + mgr, err := GetManager(authType...) + if err != nil { + return nil } - return globalManager.LoginWithRefreshToken(fmt.Sprintf("%v", loginID), deviceType) + return mgr.GetNonceManager() } -func RefreshAccessToken(refreshToken string) (*security.RefreshTokenInfo, error) { - if globalManager == nil { - panic("Manager not initialized. Call stputil.SetManager() first") +// GetRefreshManager returns the refresh token manager | 获取刷新令牌管理器 +func GetRefreshManager(ctx context.Context, authType ...string) *security.RefreshTokenManager { + mgr, err := GetManager(authType...) + if err != nil { + return nil } - return globalManager.RefreshAccessToken(refreshToken) + return mgr.GetRefreshManager() } -func RevokeRefreshToken(refreshToken string) error { - if globalManager == nil { - panic("Manager not initialized. Call stputil.SetManager() first") +// GetEventManager returns the event manager | 获取事件管理器 +func GetEventManager(ctx context.Context, authType ...string) *listener.Manager { + mgr, err := GetManager(authType...) + if err != nil { + return nil } - return globalManager.RevokeRefreshToken(refreshToken) + return mgr.GetEventManager() } -func GetOAuth2Server() *oauth2.OAuth2Server { - if globalManager == nil { - panic("Manager not initialized. Call stputil.SetManager() first") +// GetOAuth2Server Gets OAuth2 server instance | 获取OAuth2服务器实例 +func GetOAuth2Server(ctx context.Context, authType ...string) *oauth2.OAuth2Server { + mgr, err := GetManager(authType...) + if err != nil { + return nil } - return globalManager.GetOAuth2Server() + return mgr.GetOAuth2Server() } // ============ Check Functions for Token-based operations | 基于Token的检查函数 ============ @@ -522,3 +917,159 @@ func GetRoleList(tokenValue string) ([]string, error) { func GetTokenSession(tokenValue string) (*session.Session, error) { return GetSessionByToken(tokenValue) } + +// ============ Internal Helper Methods | 内部辅助方法 ============ + +// SetManager stores the manager in the global map using the specified autoType | 使用指定的 autoType 将管理器存储在全局 map 中 +func SetManager(mgr *manager.Manager) error { + // Validate and get the autoType value | 验证并获取 autoType 值 + validAutoType := getAutoType(mgr.GetConfig().AuthType) // 获取 autoType,默认为 config.DefaultAuthType + // Store the manager in the global map with the valid autoType | 使用有效的 autoType 将管理器存储在全局 map 中 + globalManagerMap.Store(validAutoType, mgr) + return nil +} + +// GetManager retrieves the manager from the global map using the specified autoType | 使用指定的 autoType 从全局 map 中获取管理器 +func GetManager(autoType ...string) (*manager.Manager, error) { + // Validate and get the autoType value | 验证并获取 autoType 值 + validAutoType := getAutoType(autoType...) // 获取 autoType,默认为 config.DefaultAuthType + // Use LoadManager to retrieve the manager | 使用 LoadManager 方法来获取管理器 + return loadManager(validAutoType) +} + +// DeleteManager delete the specific manager for the given autoType and releases resources | 删除指定的管理器并释放资源 +func DeleteManager(autoType string) error { + // Validate and get the autoType value | 验证并获取 autoType 值 + validAutoType := getAutoType(autoType) // 获取 autoType,默认为 config.DefaultAuthType + // Load the manager from global map | 从全局 map 中加载管理器 + mgr, err := loadManager(validAutoType) + if err != nil { + return err + } + // Close the manager and release resources | 关闭管理器并释放资源 + mgr.CloseManager() + // Remove the manager from the global map | 从全局 map 中移除该管理器 + globalManagerMap.Delete(validAutoType) + return nil +} + +// DeleteAllManager delete all managers in the global map and releases resources | 关闭所有管理器并释放资源 +func DeleteAllManager() { + // Iterate over all managers in the global map and close them | 遍历全局 map 中的所有管理器并关闭它们 + globalManagerMap.Range(func(key, value interface{}) bool { + // Assert the value to the correct type | 将值断言为正确的类型 + mgr, ok := value.(*manager.Manager) + if ok { + // Close each manager | 关闭每个管理器 + mgr.CloseManager() + } + // Continue iterating | 继续遍历 + return true + }) + // Clear the global map after closing all managers | 关闭所有管理器后清空全局 map + globalManagerMap = sync.Map{} +} + +// getAutoType checks if a valid autoType is provided, ensures it's trimmed, appends ":" if missing, and returns the value | 检查是否提供有效的 autoType,修剪空格,如果缺少 ":" 则添加,并返回值 +func getAutoType(autoType ...string) string { + // Check if autoType is provided and not empty, trim it and append ":" if missing | 检查是否提供了有效的 autoType,修剪空格,如果缺少 ":" 则添加 + if len(autoType) > 1 && strings.TrimSpace(autoType[1]) != "" { + trimmed := strings.TrimSpace(autoType[1]) + // If it doesn't end with ":", append ":" | 如果 autoType 的值不以 ":" 结尾,则添加 ":" + if !strings.HasSuffix(trimmed, ":") { + trimmed = trimmed + ":" + } + return trimmed + } + // Return log autoType if autoType is empty or invalid | 如果 autoType 为空或无效,返回默认值 + return config.DefaultAuthType +} + +// loadManager retrieves the manager from the global map using the valid autoType | 使用有效的 autoType 从全局 map 中加载管理器 +func loadManager(autoType string) (*manager.Manager, error) { + // Load the manager from the global map using the valid autoType | 使用有效的 autoType 从全局 map 中加载管理器 + value, ok := globalManagerMap.Load(autoType) + if !ok { + return nil, errors.New("manager not found for autoType: " + autoType) + } + // Assert the loaded value to the correct type | 将加载的值断言为正确的类型 + mgr, ok := value.(*manager.Manager) + if !ok { + return nil, errors.New("invalid manager type for autoType: " + autoType) + } + return mgr, nil +} + +// toString Converts interface{} to string | 将interface{}转换为string +func toString(v interface{}) (string, error) { + // Check the type and convert to string | 判断类型并转换为字符串 + switch val := v.(type) { + case string: + return val, nil // If it's a string, return it directly | 如果是字符串,直接返回 + case int: + return intToString(val), nil // If it's int, convert to string | 如果是int,转换为string + case int64: + return int64ToString(val), nil // If it's int64, convert to string | 如果是int64,转换为string + case uint: + return uintToString(val), nil // If it's uint, convert to string | 如果是uint,转换为string + case uint64: + return uint64ToString(val), nil // If it's uint64, convert to string | 如果是uint64,转换为string + default: + return "", errors.New("Invalid type") // For other types, return error | 对于其他类型,返回错误 + } +} + +// intToString Converts int to string | 将int转换为string +func intToString(i int) string { + return int64ToString(int64(i)) // Call int64ToString to convert | 调用int64ToString进行转换 +} + +// int64ToString Converts int64 to string | 将int64转换为string +func int64ToString(i int64) string { + // If it's zero, return "0" | 如果是零,返回 "0" + if i == 0 { + return "0" + } + + // Check if it's negative and handle it | 判断是否为负数并处理 + negative := i < 0 + if negative { + i = -i // Take the absolute value | 取绝对值 + } + + var result []byte + // Process each digit and prepend to the result array | 将每一位数字依次处理并添加到结果数组 + for i > 0 { + result = append([]byte{byte('0' + i%10)}, result...) + i /= 10 + } + + // If it's negative, add the '-' sign | 如果是负数,添加负号 + if negative { + result = append([]byte{'-'}, result...) + } + + return string(result) +} + +// uintToString Converts uint to string | 将uint转换为string +func uintToString(u uint) string { + return uint64ToString(uint64(u)) // Call uint64ToString to convert | 调用uint64ToString进行转换 +} + +// uint64ToString Converts uint64 to string | 将uint64转换为string +func uint64ToString(u uint64) string { + // If it's zero, return "0" | 如果是零,返回 "0" + if u == 0 { + return "0" + } + + var result []byte + // Process each digit and prepend to the result array | 将每一位数字依次处理并添加到结果数组 + for u > 0 { + result = append([]byte{byte('0' + u%10)}, result...) + u /= 10 + } + + return string(result) +} From f0c632bb37b4994bd99564cc0e49ac36c89704f6 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Mon, 22 Dec 2025 14:41:20 +0800 Subject: [PATCH 19/50] =?UTF-8?q?feat():=201=E3=80=81=E5=AE=8C=E5=96=84gf?= =?UTF-8?q?=E7=8B=AC=E7=AB=8B=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/banner/banner.go | 6 +- core/builder/builder.go | 40 +- core/context/context.go | 103 ++-- core/errors.go | 6 + core/manager/consts.go | 14 +- core/manager/manager.go | 158 ++++++- core/oauth2/consts.go | 20 +- core/oauth2/oauth2.go | 47 +- core/satoken.go | 411 ++++++++-------- core/security/consts.go | 13 +- core/security/refresh_token.go | 23 +- core/serror/errors.go | 41 -- core/session/session.go | 7 +- core/version.go | 5 + .../generator_adapter_sgenerator.go | 5 +- integrations/gf/annotation.go | 125 ----- integrations/gf/context.go | 18 +- integrations/gf/export.go | 360 +------------- integrations/gf/middleware.go | 353 ++++++++++++++ integrations/gf/plugin.go | 313 ------------- log/gf/log_adaper_gf.go | 9 +- pool/ants/pool_adapter_ants.go | 4 +- stputil/stputil.go | 439 ++++++++++++++---- 23 files changed, 1256 insertions(+), 1264 deletions(-) delete mode 100644 core/serror/errors.go create mode 100644 core/version.go delete mode 100644 integrations/gf/annotation.go create mode 100644 integrations/gf/middleware.go delete mode 100644 integrations/gf/plugin.go diff --git a/core/banner/banner.go b/core/banner/banner.go index b0f9f91..bb7c63e 100644 --- a/core/banner/banner.go +++ b/core/banner/banner.go @@ -5,12 +5,10 @@ import ( "runtime" "strings" + "github.com/click33/sa-token-go/core" "github.com/click33/sa-token-go/core/config" ) -// Version version number | 版本号 (此配置项需与satoken中的同步) -const Version = "0.1.3" - // Banner startup banner | 启动横幅 const Banner = ` _____ ______ __ ______ @@ -33,7 +31,7 @@ const ( // Print prints startup banner | 打印启动横幅 func Print() { - fmt.Printf(Banner, Version) + fmt.Printf(Banner, core.Version) fmt.Printf(":: Go Version :: %s\n", runtime.Version()) fmt.Printf(":: GOOS/GOARCH :: %s/%s\n", runtime.GOOS, runtime.GOARCH) fmt.Println() diff --git a/core/builder/builder.go b/core/builder/builder.go index 87006cd..7afd3f2 100644 --- a/core/builder/builder.go +++ b/core/builder/builder.go @@ -5,6 +5,7 @@ import ( codec_json "github.com/click33/sa-token-go/codec/json" "github.com/click33/sa-token-go/generator/sgenerator" "github.com/click33/sa-token-go/log/nop" + "github.com/click33/sa-token-go/log/slog" "github.com/click33/sa-token-go/pool/ants" "strings" "time" @@ -484,6 +485,12 @@ func (b *Builder) SetLog(log adapter.Log) *Builder { return b } +// SetPool sets the goroutine pool for async task execution | 设置用于异步任务执行的协程池 +func (b *Builder) SetPool(pool adapter.Pool) *Builder { + b.pool = pool + return b +} + // SetCustomPermissionListFunc sets the custom permission provider | 设置自定义权限获取函数 func (b *Builder) SetCustomPermissionListFunc(f func(ctx context.Context, loginID string) ([]string, error)) *Builder { b.customPermissionListFunc = f @@ -530,6 +537,10 @@ func (b *Builder) Clone() *Builder { // Build builds Manager and prints startup banner | 构建Manager并打印启动Banner func (b *Builder) Build() *manager.Manager { + if b.cookieConfig == nil { + b.cookieConfig = config.DefaultCookieConfig() + } + // 初始化config cfg := &config.Config{ TokenName: b.tokenName, @@ -572,25 +583,24 @@ func (b *Builder) Build() *manager.Manager { if b.codec == nil { b.codec = codec_json.NewJSONSerializer() } - // 如果log为nil,则初始化默认log - if b.log == nil { + + // 日志 + if b.isLog { + if b.logConfig == nil { + b.logConfig = config.DefaultLoggerConfig() + } + b.log, err = slog.NewLoggerWithConfig(b.logConfig) + if err != nil { + panic("Invalid LoggerConfig: " + err.Error()) + } + } else { b.log = nop.NewNopLogger() } - // 如果pool为nil,则初始化默认pool + + // 续期池 if b.autoRenew && b.pool == nil { if b.renewPoolConfig == nil { - // 初始化RenewPoolConfig - b.renewPoolConfig = &config.RenewPoolConfig{ - MinSize: b.renewPoolConfig.MinSize, - MaxSize: b.renewPoolConfig.MaxSize, - ScaleUpRate: b.renewPoolConfig.ScaleUpRate, - ScaleDownRate: b.renewPoolConfig.ScaleDownRate, - CheckInterval: b.renewPoolConfig.CheckInterval, - Expiry: b.renewPoolConfig.Expiry, - PrintStatusInterval: b.renewPoolConfig.PrintStatusInterval, - PreAlloc: b.renewPoolConfig.PreAlloc, - NonBlocking: b.renewPoolConfig.NonBlocking, - } + b.renewPoolConfig = config.DefaultRenewPoolConfig() } // Validate configuration | 验证配置 err = b.renewPoolConfig.Validate() diff --git a/core/context/context.go b/core/context/context.go index 2af4cba..14cdc12 100644 --- a/core/context/context.go +++ b/core/context/context.go @@ -2,7 +2,6 @@ package context import ( "context" - "github.com/click33/sa-token-go/core/config" "strings" "github.com/click33/sa-token-go/core/adapter" @@ -30,21 +29,6 @@ func NewContext(ctx context.Context, reqCtx adapter.RequestContext, mgr *manager } } -// extractBearerToken 从 Authorization 头中提取 Bearer Token -func extractBearerToken(auth string) string { - auth = strings.TrimSpace(auth) - if auth == "" { - return "" - } - - // 支持大小写不敏感的 Bearer 前缀 - if len(auth) > 7 && strings.EqualFold(auth[:7], bearerPrefix) { - return strings.TrimSpace(auth[7:]) - } - - return auth -} - // GetTokenValue gets token value from current request | 获取当前请求的Token值 func (c *SaTokenContext) GetTokenValue() string { cfg := c.manager.GetConfig() @@ -79,42 +63,6 @@ func (c *SaTokenContext) GetTokenValue() string { return "" } -// IsLogin 检查当前请求是否已登录 -func (c *SaTokenContext) IsLogin() bool { - token := c.GetTokenValue() - return c.manager.IsLogin(context.WithValue(c.ctx, config.CtxTokenValue, token)) -} - -// CheckLogin 检查登录(未登录抛出错误) -func (c *SaTokenContext) CheckLogin() error { - token := c.GetTokenValue() - return c.manager.CheckLogin(context.WithValue(c.ctx, config.CtxTokenValue, token)) -} - -// GetLoginID 获取当前登录ID -func (c *SaTokenContext) GetLoginID() (string, error) { - token := c.GetTokenValue() - return c.manager.GetLoginID(context.WithValue(c.ctx, config.CtxTokenValue, token)) -} - -// HasPermission 检查是否有指定权限 -func (c *SaTokenContext) HasPermission(permission string) bool { - loginID, err := c.GetLoginID() - if err != nil { - return false - } - return c.manager.HasPermission(c.ctx, loginID, permission) -} - -// HasRole 检查是否有指定角色 -func (c *SaTokenContext) HasRole(role string) bool { - loginID, err := c.GetLoginID() - if err != nil { - return false - } - return c.manager.HasRole(c.ctx, loginID, role) -} - // GetRequestContext 获取原始请求上下文 func (c *SaTokenContext) GetRequestContext() adapter.RequestContext { return c.reqCtx @@ -129,3 +77,54 @@ func (c *SaTokenContext) GetManager() *manager.Manager { func (c *SaTokenContext) GetCtx() context.Context { return c.ctx } + +//// IsLogin 检查当前请求是否已登录 +//func (c *SaTokenContext) IsLogin() bool { +// token := c.GetTokenValue() +// return c.manager.IsLogin(context.WithValue(c.ctx, config.CtxTokenValue, token)) +//} +// +//// CheckLogin 检查登录(未登录抛出错误) +//func (c *SaTokenContext) CheckLogin() error { +// token := c.GetTokenValue() +// return c.manager.CheckLogin(context.WithValue(c.ctx, config.CtxTokenValue, token)) +//} +// +//// GetLoginID 获取当前登录ID +//func (c *SaTokenContext) GetLoginID() (string, error) { +// token := c.GetTokenValue() +// return c.manager.GetLoginID(context.WithValue(c.ctx, config.CtxTokenValue, token)) +//} +// +//// HasPermission 检查是否有指定权限 +//func (c *SaTokenContext) HasPermission(permission string) bool { +// loginID, err := c.GetLoginID() +// if err != nil { +// return false +// } +// return c.manager.HasPermission(c.ctx, loginID, permission) +//} +// +//// HasRole 检查是否有指定角色 +//func (c *SaTokenContext) HasRole(role string) bool { +// loginID, err := c.GetLoginID() +// if err != nil { +// return false +// } +// return c.manager.HasRole(c.ctx, loginID, role) +//} + +// extractBearerToken 从 Authorization 头中提取 Bearer Token +func extractBearerToken(auth string) string { + auth = strings.TrimSpace(auth) + if auth == "" { + return "" + } + + // 支持大小写不敏感的 Bearer 前缀 + if len(auth) > 7 && strings.EqualFold(auth[:7], bearerPrefix) { + return strings.TrimSpace(auth[7:]) + } + + return auth +} diff --git a/core/errors.go b/core/errors.go index 0a80c2d..494d559 100644 --- a/core/errors.go +++ b/core/errors.go @@ -20,6 +20,12 @@ var ( // ErrTokenExpired indicates the token has expired | Token已过期 ErrTokenExpired = fmt.Errorf("token expired: please login again to get a new token") + // ErrTokenKickout token has been kicked out | Token 已被踢下线 + ErrTokenKickout = fmt.Errorf("token has been kicked out") + + // ErrTokenReplaced token has been replaced | Token 已被顶下线 + ErrTokenReplaced = fmt.Errorf("token has been replaced") + // ErrInvalidLoginID indicates the login ID is invalid | 登录ID无效 ErrInvalidLoginID = fmt.Errorf("invalid login ID: the login identifier cannot be empty") diff --git a/core/manager/consts.go b/core/manager/consts.go index d354de0..a4e74a8 100644 --- a/core/manager/consts.go +++ b/core/manager/consts.go @@ -1,7 +1,10 @@ // @Author daixk 2025/12/4 17:58:00 package manager -import "time" +import ( + "fmt" + "time" +) // Constants for storage keys and log values | 存储键和默认值常量 const ( @@ -38,3 +41,12 @@ const ( TokenStateKickout TokenState = "KICK_OUT" // Kickout state | 被踢下线 TokenStateReplaced TokenState = "BE_REPLACED" // Replaced state | 被顶下线 ) + +var ( + ErrTokenNotFound = fmt.Errorf("token not found") // token not found | Token 不存在 + ErrTokenKickout = fmt.Errorf("token has been kicked out") // token has been kicked out | Token 已被踢下线 + ErrTokenReplaced = fmt.Errorf("token has been replaced") // token has been replaced | Token 已被顶下线 + ErrNotLogin = fmt.Errorf("not login") // not login | 未登录 + ErrAccountDisabled = fmt.Errorf("account is disabled") // account is disabled | 账号已被禁用 + ErrLoginLimitExceeded = fmt.Errorf("login count exceeds the maximum limit") // login count exceeds the maximum limit | 超出最大登录数量限制 +) diff --git a/core/manager/manager.go b/core/manager/manager.go index ca27e4e..5790c2c 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -4,7 +4,6 @@ import ( "context" "fmt" codec_json "github.com/click33/sa-token-go/codec/json" - "github.com/click33/sa-token-go/core/serror" "github.com/click33/sa-token-go/core/utils" "github.com/click33/sa-token-go/generator/sgenerator" "github.com/click33/sa-token-go/log/nop" @@ -132,6 +131,12 @@ func NewManager(cfg *config.Config, generator adapter.Generator, storage adapter // Goroutine pool for async task execution | 用于异步任务执行的协程池 pool: pool, + + // Custom permission list provider | 自定义权限列表获取函数 + CustomPermissionListFunc: customPermissionListFunc, + + // Custom role list provider | 自定义角色列表获取函数 + CustomRoleListFunc: CustomRoleListFunc, } } @@ -151,7 +156,7 @@ func (m *Manager) CloseManager() { func (m *Manager) Login(ctx context.Context, loginID string, device ...string) (string, error) { // Check if account is disabled | 检查账号是否被封禁 if m.IsDisable(ctx, loginID) { - return "", serror.ErrAccountDisabled + return "", ErrAccountDisabled } // 获取设备类型 @@ -182,7 +187,7 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( tokens, _ := m.GetTokenValueListByLoginID(ctx, loginID) if int64(len(tokens)) >= m.config.MaxLoginCount { // Reached maximum concurrent login count | 已达到最大并发登录数 如需也可改为 踢掉最早Token - return "", serror.ErrLoginLimitExceeded + return "", ErrLoginLimitExceeded } } @@ -206,7 +211,7 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( ActiveTime: nowTime, }) if err != nil { - return "", fmt.Errorf("%w: %v", serror.ErrCommonDecode, err) + return "", fmt.Errorf("%w: %v", fmt.Errorf("failed to encode data"), err) } // 生成新的ctx @@ -261,7 +266,7 @@ func (m *Manager) LoginByToken(ctx context.Context) error { // Check if the account is disabled | 检查账号是否被封禁 if m.IsDisable(ctx, info.LoginID) { - return serror.ErrAccountDisabled + return ErrAccountDisabled } // Renews token expiration asynchronously | 异步续期Token @@ -408,7 +413,7 @@ func (m *Manager) IsLogin(ctx context.Context) bool { // CheckLogin Checks login status (throws serror if not logged in) | 检查登录(未登录抛出错误) func (m *Manager) CheckLogin(ctx context.Context) error { if !m.IsLogin(ctx) { - return serror.ErrNotLogin + return ErrNotLogin } return nil } @@ -426,7 +431,7 @@ func (m *Manager) CheckLoginWithState(ctx context.Context) (bool, error) { if now-info.ActiveTime > m.config.ActiveTimeout { // Force logout and clean up token data | 强制登出并清理Token相关数据 _ = m.removeTokenChain(ctx, false, info, listener.EventKickout) - return false, serror.ErrTokenKickout + return false, ErrTokenKickout } } @@ -461,7 +466,7 @@ func (m *Manager) GetLoginID(ctx context.Context) (string, error) { // Check if the user is logged in | 检查用户是否已登录 isLogin := m.IsLogin(ctx) if !isLogin { - return "", serror.ErrNotLogin // Return error if not logged in | 如果未登录,则返回错误 + return "", ErrNotLogin // Return error if not logged in | 如果未登录,则返回错误 } // Retrieve the login ID without checking token validity | 获取登录ID,不检查Token有效性 @@ -487,13 +492,13 @@ func (m *Manager) GetTokenValue(ctx context.Context, loginID string, device ...s // Retrieve the token value from storage | 从存储中获取Token值 tokenValue, err := m.storage.Get(accountKey) if err != nil || tokenValue == nil { - return "", serror.ErrTokenNotFound // Return error if token not found | 如果未找到Token,则返回错误 + return "", ErrTokenNotFound // Return error if token not found | 如果未找到Token,则返回错误 } // Assert token value as a string | 断言Token值为字符串 tokenStr, ok := assertString(tokenValue) if !ok { - return "", serror.ErrTokenNotFound // Return error if token is not a valid string | 如果Token不是有效字符串,则返回错误 + return "", ErrTokenNotFound // Return error if token is not a valid string | 如果Token不是有效字符串,则返回错误 } // Return the token string | 返回Token字符串 @@ -691,6 +696,27 @@ func (m *Manager) HasPermission(ctx context.Context, loginID string, permission return false } +// HasPermissionByToken checks whether the current token subject has the specified permission | 根据当前 Token 判断是否拥有指定权限 +func (m *Manager) HasPermissionByToken(ctx context.Context, permission string) bool { + loginID, err := m.GetLoginIDNotCheck(ctx) + if err != nil { + return false + } + + perms, err := m.GetPermissions(ctx, loginID) + if err != nil { + return false + } + + for _, p := range perms { + if m.matchPermission(ctx, p, permission) { + return true + } + } + + return false +} + // HasPermissionsAnd Checks whether the user has all permissions (AND) | 是否拥有所有权限(AND) func (m *Manager) HasPermissionsAnd(ctx context.Context, loginID string, permissions []string) bool { // Get all permissions once | 一次性获取用户权限 @@ -708,6 +734,28 @@ func (m *Manager) HasPermissionsAnd(ctx context.Context, loginID string, permiss return true } +// HasPermissionsAndByToken checks whether the current token subject has all specified permissions (AND) | 根据当前 Token 判断是否拥有所有指定权限(AND) +func (m *Manager) HasPermissionsAndByToken(ctx context.Context, permissions []string) bool { + loginID, err := m.GetLoginIDNotCheck(ctx) + if err != nil { + return false + } + + // Get all permissions once | 一次性获取用户权限 + userPerms, err := m.GetPermissions(ctx, loginID) + if err != nil || len(userPerms) == 0 { + return false + } + + // Check every required permission | 校验每一个必需权限 + for _, need := range permissions { + if !m.hasPermissionInList(ctx, userPerms, need) { + return false + } + } + return true +} + // HasPermissionsOr Checks whether the user has any permission (OR) | 是否拥有任一权限(OR) func (m *Manager) HasPermissionsOr(ctx context.Context, loginID string, permissions []string) bool { // Get all permissions once | 一次性获取用户权限 @@ -725,6 +773,28 @@ func (m *Manager) HasPermissionsOr(ctx context.Context, loginID string, permissi return false } +// HasPermissionsOrByToken checks whether the current token subject has any of the specified permissions (OR) | 根据当前 Token 判断是否拥有任一指定权限(OR) +func (m *Manager) HasPermissionsOrByToken(ctx context.Context, permissions []string) bool { + loginID, err := m.GetLoginIDNotCheck(ctx) + if err != nil { + return false + } + + // Get all permissions once | 一次性获取用户权限 + userPerms, err := m.GetPermissions(ctx, loginID) + if err != nil || len(userPerms) == 0 { + return false + } + + // Check if any permission matches | 任一权限匹配即通过 + for _, need := range permissions { + if m.hasPermissionInList(ctx, userPerms, need) { + return true + } + } + return false +} + // matchPermission Matches permission with wildcards support | 权限匹配(支持通配符) func (m *Manager) matchPermission(_ context.Context, pattern, permission string) bool { // Exact match or wildcard | 精确匹配或通配符 @@ -859,6 +929,26 @@ func (m *Manager) HasRole(ctx context.Context, loginID string, role string) bool return false } +// HasRoleByToken checks whether the current token subject has the specified role | 根据当前 Token 判断是否拥有指定角色 +func (m *Manager) HasRoleByToken(ctx context.Context, role string) bool { + loginID, err := m.GetLoginIDNotCheck(ctx) + if err != nil { + return false + } + + roles, err := m.GetRoles(ctx, loginID) + if err != nil { + return false + } + + for _, r := range roles { + if r == role { + return true + } + } + return false +} + // HasRolesAnd Checks whether the user has all roles (AND) | 是否拥有所有角色(AND) func (m *Manager) HasRolesAnd(ctx context.Context, loginID string, roles []string) bool { userRoles, err := m.GetRoles(ctx, loginID) @@ -874,6 +964,26 @@ func (m *Manager) HasRolesAnd(ctx context.Context, loginID string, roles []strin return true } +// HasRolesAndByToken checks whether the current token subject has all specified roles (AND) | 根据当前 Token 判断是否拥有所有指定角色(AND) +func (m *Manager) HasRolesAndByToken(ctx context.Context, roles []string) bool { + loginID, err := m.GetLoginIDNotCheck(ctx) + if err != nil { + return false + } + + userRoles, err := m.GetRoles(ctx, loginID) + if err != nil || len(userRoles) == 0 { + return false + } + + for _, need := range roles { + if !m.hasRoleInList(userRoles, need) { + return false + } + } + return true +} + // HasRolesOr Checks whether the user has any role (OR) | 是否拥有任一角色(OR) func (m *Manager) HasRolesOr(ctx context.Context, loginID string, roles []string) bool { userRoles, err := m.GetRoles(ctx, loginID) @@ -889,6 +999,26 @@ func (m *Manager) HasRolesOr(ctx context.Context, loginID string, roles []string return false } +// HasRolesOrByToken checks whether the current token subject has any of the specified roles (OR) | 根据当前 Token 判断是否拥有任一指定角色(OR) +func (m *Manager) HasRolesOrByToken(ctx context.Context, roles []string) bool { + loginID, err := m.GetLoginIDNotCheck(ctx) + if err != nil { + return false + } + + userRoles, err := m.GetRoles(ctx, loginID) + if err != nil || len(userRoles) == 0 { + return false + } + + for _, need := range roles { + if m.hasRoleInList(userRoles, need) { + return true + } + } + return false +} + // hasPermissionInList checks whether permission exists in permission list | 判断权限是否存在于权限列表中 func (m *Manager) hasRoleInList(roles []string, role string) bool { for _, r := range roles { @@ -1097,7 +1227,7 @@ func (m *Manager) getTokenInfoByTokenValue(ctx context.Context, checkState ...bo return nil, err // Return error if data retrieval fails | 如果数据获取失败,返回错误 } if data == nil { - return nil, serror.ErrTokenNotFound // Return error if token is not found | 如果Token未找到,返回错误 + return nil, ErrTokenNotFound // Return error if token is not found | 如果Token未找到,返回错误 } // Convert data to raw byte slice | 将数据转换为原始字节切片 @@ -1113,10 +1243,10 @@ func (m *Manager) getTokenInfoByTokenValue(ctx context.Context, checkState ...bo switch string(raw) { case string(TokenStateKickout): // Token has been kicked out | Token已被踢下线 - return nil, serror.ErrTokenKickout // Return error if token is kicked out | 如果Token被踢下线,返回错误 + return nil, ErrTokenKickout // Return error if token is kicked out | 如果Token被踢下线,返回错误 case string(TokenStateReplaced): // Token has been replaced | Token已被顶下线 - return nil, serror.ErrTokenReplaced // Return error if token is replaced | 如果Token被顶下线,返回错误 + return nil, ErrTokenReplaced // Return error if token is replaced | 如果Token被顶下线,返回错误 } } @@ -1124,7 +1254,7 @@ func (m *Manager) getTokenInfoByTokenValue(ctx context.Context, checkState ...bo var info TokenInfo // Use the serializer to decode the raw data | 使用序列化器来解码原始数据 if err = m.serializer.Decode(raw, &info); err != nil { - return nil, fmt.Errorf("%w: %v", serror.ErrCommonDecode, err) // Return error if decoding fails | 如果解码失败,返回错误 + return nil, fmt.Errorf("%w: %v", fmt.Errorf("failed to decode data"), err) // Return error if decoding fails | 如果解码失败,返回错误 } return &info, nil // Return the parsed TokenInfo | 返回解析后的Token信息 diff --git a/core/oauth2/consts.go b/core/oauth2/consts.go index d6d7ab3..0fe7f52 100644 --- a/core/oauth2/consts.go +++ b/core/oauth2/consts.go @@ -1,7 +1,10 @@ // @Author daixk 2025/12/5 9:42:00 package oauth2 -import "time" +import ( + "fmt" + "time" +) // Constants for OAuth2 | OAuth2常量 const ( @@ -29,3 +32,18 @@ const ( GrantTypeClientCredentials GrantType = "client_credentials" // Client credentials flow | 客户端凭证模式 GrantTypePassword GrantType = "password" // Password flow | 密码模式 ) + +var ( + ErrClientOrClientIDEmpty = fmt.Errorf("invalid client: clientID is required") // client or clientID is empty | 客户端或客户端ID为空 + ErrClientNotFound = fmt.Errorf("client not found") // client not found | 客户端不存在 + ErrUserIDEmpty = fmt.Errorf("userID cannot be empty") // userID is empty | 用户ID不能为空 + ErrInvalidRedirectURI = fmt.Errorf("invalid redirectUri") // invalid redirect URI | 回调URI非法 + ErrInvalidClientCredentials = fmt.Errorf("invalid client credentials") // invalid client credentials | 客户端凭证无效 + ErrInvalidAuthCode = fmt.Errorf("invalid authorization code") // invalid authorization code | 授权码无效 + ErrAuthCodeUsed = fmt.Errorf("authorization code already used") // authorization code already used | 授权码已被使用 + ErrAuthCodeExpired = fmt.Errorf("authorization code expired") // authorization code expired | 授权码已过期 + ErrClientMismatch = fmt.Errorf("client mismatch") // client mismatch | 客户端不匹配 + ErrRedirectURIMismatch = fmt.Errorf("redirectUri mismatch") // redirect URI mismatch | 回调URI不匹配 + ErrInvalidAccessToken = fmt.Errorf("invalid access token") // invalid access token | 访问令牌无效 + ErrInvalidRefreshToken = fmt.Errorf("invalid refresh token") // invalid refresh token | 刷新令牌无效 +) diff --git a/core/oauth2/oauth2.go b/core/oauth2/oauth2.go index 0bdf1d2..8799133 100644 --- a/core/oauth2/oauth2.go +++ b/core/oauth2/oauth2.go @@ -6,7 +6,6 @@ import ( "fmt" codec_json "github.com/click33/sa-token-go/codec/json" "github.com/click33/sa-token-go/core/adapter" - "github.com/click33/sa-token-go/core/serror" "github.com/click33/sa-token-go/core/utils" "github.com/click33/sa-token-go/storage/memory" "sync" @@ -96,7 +95,7 @@ func NewOAuth2Server(authType, prefix string, storage adapter.Storage, serialize // RegisterClient Registers an OAuth2 client | 注册OAuth2客户端 func (s *OAuth2Server) RegisterClient(client *Client) error { if client == nil || client.ClientID == "" { - return serror.ErrClientOrClientIDEmpty + return ErrClientOrClientIDEmpty } s.clientsMu.Lock() @@ -121,7 +120,7 @@ func (s *OAuth2Server) GetClient(clientID string) (*Client, error) { client, exists := s.clients[clientID] if !exists { - return nil, serror.ErrClientNotFound + return nil, ErrClientNotFound } return client, nil } @@ -129,7 +128,7 @@ func (s *OAuth2Server) GetClient(clientID string) (*Client, error) { // GenerateAuthorizationCode Generates authorization code | 生成授权码 func (s *OAuth2Server) GenerateAuthorizationCode(clientID, userID, redirectURI string, scopes []string) (*AuthorizationCode, error) { if userID == "" { - return nil, serror.ErrUserIDEmpty + return nil, ErrUserIDEmpty } client, err := s.GetClient(clientID) @@ -139,7 +138,7 @@ func (s *OAuth2Server) GenerateAuthorizationCode(clientID, userID, redirectURI s // Validate redirect URI | 验证回调URI if !s.isValidRedirectURI(client, redirectURI) { - return nil, serror.ErrInvalidRedirectURI + return nil, ErrInvalidRedirectURI } // Generate code | 生成授权码 @@ -162,7 +161,7 @@ func (s *OAuth2Server) GenerateAuthorizationCode(clientID, userID, redirectURI s encodeData, err := s.serializer.Encode(authCode) if err != nil { - return nil, fmt.Errorf("%w: %v", serror.ErrCommonEncode, err) + return nil, fmt.Errorf("%w: %v", fmt.Errorf("failed to encode data"), err) } key := s.getCodeKey(code) @@ -182,7 +181,7 @@ func (s *OAuth2Server) ExchangeCodeForToken(code, clientID, clientSecret, redire } if client.ClientSecret != clientSecret { - return nil, serror.ErrInvalidClientCredentials + return nil, ErrInvalidClientCredentials } // Get authorization code | 获取授权码 @@ -192,7 +191,7 @@ func (s *OAuth2Server) ExchangeCodeForToken(code, clientID, clientSecret, redire return nil, fmt.Errorf("failed to get authorization data: %w", err) } if data == nil { - return nil, serror.ErrInvalidAuthCode + return nil, ErrInvalidAuthCode } rawData, err := utils.ToBytes(data) @@ -202,25 +201,25 @@ func (s *OAuth2Server) ExchangeCodeForToken(code, clientID, clientSecret, redire var authCode AuthorizationCode if err := s.serializer.Decode(rawData, &authCode); err != nil { - return nil, fmt.Errorf("%w: %v", serror.ErrCommonDecode, err) + return nil, fmt.Errorf("%w: %v", fmt.Errorf("failed to decode data"), err) } // Validate authorization code | 验证授权码 if authCode.Used { - return nil, serror.ErrAuthCodeUsed + return nil, ErrAuthCodeUsed } if authCode.ClientID != clientID { - return nil, serror.ErrClientMismatch + return nil, ErrClientMismatch } if authCode.RedirectURI != redirectURI { - return nil, serror.ErrRedirectURIMismatch + return nil, ErrRedirectURIMismatch } if time.Now().Unix() > authCode.CreateTime+authCode.ExpiresIn { _ = s.storage.Delete(key) - return nil, serror.ErrAuthCodeExpired + return nil, ErrAuthCodeExpired } // Mark code as used | 标记为已使用 @@ -228,7 +227,7 @@ func (s *OAuth2Server) ExchangeCodeForToken(code, clientID, clientSecret, redire encodeData, err := s.serializer.Encode(authCode) if err != nil { - return nil, fmt.Errorf("%w: %v", serror.ErrCommonEncode, err) + return nil, fmt.Errorf("%w: %v", fmt.Errorf("failed to encode data"), err) } _ = s.storage.Set(key, encodeData, time.Minute) @@ -239,7 +238,7 @@ func (s *OAuth2Server) ExchangeCodeForToken(code, clientID, clientSecret, redire // ValidateAccessToken Validates access token | 验证访问令牌 func (s *OAuth2Server) ValidateAccessToken(accessToken string) (*AccessToken, error) { if accessToken == "" { - return nil, serror.ErrInvalidAccessToken + return nil, ErrInvalidAccessToken } key := s.getTokenKey(accessToken) @@ -248,7 +247,7 @@ func (s *OAuth2Server) ValidateAccessToken(accessToken string) (*AccessToken, er return nil, fmt.Errorf("failed to get access token data: %w", err) } if data == nil { - return nil, serror.ErrInvalidAccessToken + return nil, ErrInvalidAccessToken } rawData, err := utils.ToBytes(data) @@ -259,7 +258,7 @@ func (s *OAuth2Server) ValidateAccessToken(accessToken string) (*AccessToken, er var accessTokenInfo AccessToken err = s.serializer.Decode(rawData, &accessTokenInfo) if err != nil { - return nil, fmt.Errorf("%w: %v", serror.ErrCommonDecode, err) + return nil, fmt.Errorf("%w: %v", fmt.Errorf("failed to decode data"), err) } return &accessTokenInfo, nil @@ -274,7 +273,7 @@ func (s *OAuth2Server) RefreshAccessToken(refreshToken, clientID, clientSecret s } if client.ClientSecret != clientSecret { - return nil, serror.ErrInvalidClientCredentials + return nil, ErrInvalidClientCredentials } // Get refresh token | 获取刷新令牌 @@ -284,7 +283,7 @@ func (s *OAuth2Server) RefreshAccessToken(refreshToken, clientID, clientSecret s return nil, fmt.Errorf("failed to get refresh token data: %w", err) } if data == nil { - return nil, serror.ErrInvalidRefreshToken + return nil, ErrInvalidRefreshToken } rawData, err := utils.ToBytes(data) @@ -295,11 +294,11 @@ func (s *OAuth2Server) RefreshAccessToken(refreshToken, clientID, clientSecret s var accessTokenInfo AccessToken err = s.serializer.Decode(rawData, &accessTokenInfo) if err != nil { - return nil, fmt.Errorf("%w: %v", serror.ErrCommonDecode, err) + return nil, fmt.Errorf("%w: %v", fmt.Errorf("failed to decode data"), err) } if accessTokenInfo.ClientID != clientID { - return nil, serror.ErrClientMismatch + return nil, ErrClientMismatch } _ = s.storage.Delete(s.getTokenKey(accessTokenInfo.Token)) @@ -319,7 +318,7 @@ func (s *OAuth2Server) RevokeToken(accessToken string) error { return fmt.Errorf("failed to get access token data: %w", err) } if data == nil { - return serror.ErrInvalidAccessToken + return ErrInvalidAccessToken } rawData, err := utils.ToBytes(data) @@ -330,7 +329,7 @@ func (s *OAuth2Server) RevokeToken(accessToken string) error { var accessTokenInfo AccessToken err = s.serializer.Decode(rawData, &accessTokenInfo) if err != nil { - return fmt.Errorf("%w: %v", serror.ErrCommonDecode, err) + return fmt.Errorf("%w: %v", fmt.Errorf("failed to decode data"), err) } if accessTokenInfo.RefreshToken != "" { @@ -395,7 +394,7 @@ func (s *OAuth2Server) generateAccessToken(userID, clientID string, scopes []str } encodeData, err := s.serializer.Encode(token) if err != nil { - return nil, fmt.Errorf("%w: %v", serror.ErrCommonEncode, err) + return nil, fmt.Errorf("%w: %v", fmt.Errorf("failed to encode data"), err) } tokenKey := s.getTokenKey(accessToken) diff --git a/core/satoken.go b/core/satoken.go index 9a74f41..7a7e4ed 100644 --- a/core/satoken.go +++ b/core/satoken.go @@ -1,209 +1,206 @@ package core -import ( - "time" - - "github.com/click33/sa-token-go/core/adapter" - "github.com/click33/sa-token-go/core/builder" - "github.com/click33/sa-token-go/core/config" - "github.com/click33/sa-token-go/core/context" - "github.com/click33/sa-token-go/core/listener" - "github.com/click33/sa-token-go/core/manager" - "github.com/click33/sa-token-go/core/oauth2" - "github.com/click33/sa-token-go/core/security" - "github.com/click33/sa-token-go/core/session" - "github.com/click33/sa-token-go/core/utils" -) - -// Version Sa-Token-Go version | Sa-Token-Go版本 -const Version = "0.1.3" - -// ============ Exported Types | 导出的类型 ============ -// Export main types and functions for external use | 导出主要类型和函数,方便外部使用 - -// Configuration related types | 配置相关类型 -type ( - Config = config.Config - CookieConfig = config.CookieConfig - LoggerConfig = config.LoggerConfig - RenewPoolConfig = config.RenewPoolConfig - - TokenStyle = config.TokenStyle - SameSiteMode = config.SameSiteMode - LogLevel = config.LogLevel -) - -// Token style constants | Token风格常量 -const ( - TokenStyleUUID = config.TokenStyleUUID - TokenStyleSimple = config.TokenStyleSimple - TokenStyleRandom32 = config.TokenStyleRandom32 - TokenStyleRandom64 = config.TokenStyleRandom64 - TokenStyleRandom128 = config.TokenStyleRandom128 - TokenStyleJWT = config.TokenStyleJWT - TokenStyleHash = config.TokenStyleHash - TokenStyleTimestamp = config.TokenStyleTimestamp - TokenStyleTik = config.TokenStyleTik -) - -// Adapter interfaces | 适配器接口 -type ( - Codec = adapter.Codec - Generator = adapter.Generator - Log = adapter.Log - Pool = adapter.Pool - Storage = adapter.Storage - RequestContext = adapter.RequestContext -) - -// Core types | 核心类型 -type ( - Builder = builder.Builder - - Manager = manager.Manager - TokenInfo = manager.TokenInfo - - Session = session.Session - - SaTokenContext = context.SaTokenContext - - NonceManager = security.NonceManager - - AccessTokenInfo = security.AccessTokenInfo - RefreshTokenInfo = security.RefreshTokenInfo - RefreshTokenManager = security.RefreshTokenManager - - OAuth2Client = oauth2.Client - OAuth2Server = oauth2.OAuth2Server - OAuth2AccessToken = oauth2.AccessToken - OAuth2GrantType = oauth2.GrantType -) - -// Event related types | 事件相关类型 -type ( - EventListener = listener.Listener - EventManager = listener.Manager - EventData = listener.EventData - Event = listener.Event - ListenerFunc = listener.ListenerFunc - ListenerConfig = listener.ListenerConfig -) - -// Event constants | 事件常量 -const ( - EventLogin = listener.EventLogin - EventLogout = listener.EventLogout - EventKickout = listener.EventKickout - EventDisable = listener.EventDisable - EventUntie = listener.EventUntie - EventRenew = listener.EventRenew - EventCreateSession = listener.EventCreateSession - EventDestroySession = listener.EventDestroySession - EventPermissionCheck = listener.EventPermissionCheck - EventRoleCheck = listener.EventRoleCheck - EventAll = listener.EventAll -) - -const ( - GrantTypeAuthorizationCode = oauth2.GrantTypeAuthorizationCode - GrantTypeRefreshToken = oauth2.GrantTypeRefreshToken - GrantTypeClientCredentials = oauth2.GrantTypeClientCredentials - GrantTypePassword = oauth2.GrantTypePassword -) - -// ============ Utility Functions | 工具函数 ============ - -var ( - // String utilities | 字符串工具 - RandomString = utils.RandomString - RandomNumericString = utils.RandomNumericString - RandomAlphanumeric = utils.RandomAlphanumeric - IsEmpty = utils.IsEmpty - IsNotEmpty = utils.IsNotEmpty - DefaultString = utils.DefaultString - - // Slice utilities | 切片工具 - ContainsString = utils.ContainsString - RemoveString = utils.RemoveString - UniqueStrings = utils.UniqueStrings - MergeStrings = utils.MergeStrings - FilterStrings = utils.FilterStrings - MapStrings = utils.MapStrings - - // Pattern matching | 模式匹配 - MatchPattern = utils.MatchPattern - - // Duration utilities | 时长工具 - FormatDuration = utils.FormatDuration - ParseDuration = utils.ParseDuration - - // Hash & Encoding | 哈希和编码 - SHA256Hash = utils.SHA256Hash - Base64Encode = utils.Base64Encode - Base64Decode = utils.Base64Decode -) - -// ============ Factory Functions | 工厂函数 ============ - -// DefaultConfig Returns log configuration | 返回默认配置 -func DefaultConfig() *Config { - return config.DefaultConfig() -} - -func DefaultLoggerConfig() *LoggerConfig { - return config.DefaultLoggerConfig() -} - -// NewManager Creates a new authentication manager | 创建新的认证管理器 -func NewManager(cfg *Config, generator adapter.Generator, storage adapter.Storage, serializer adapter.Codec, logger adapter.Log, pool adapter.Pool) *Manager { - return manager.NewManager(cfg, generator, storage, serializer, logger, pool) -} - -// NewContext Creates a new Sa-Token context | 创建新的Sa-Token上下文 -func NewContext(ctx RequestContext, mgr *Manager) *SaTokenContext { - return context.NewContext(ctx, mgr) -} - -// NewSession Creates a new session | 创建新的Session -func NewSession(id string, storage Storage, prefix string) *Session { - return session.NewSession(id, storage, prefix) -} - -// LoadSession Loads an existing session | 加载已存在的Session -func LoadSession(id string, storage Storage, prefix string) (*Session, error) { - return session.Load(id, storage, prefix) -} - -// NewTokenGenerator Creates a new token generator | 创建新的Token生成器 -func NewTokenGenerator(cfg *Config) *TokenGenerator { - return token.NewGenerator(cfg) -} - -// NewEventManager Creates a new event manager | 创建新的事件管理器 -func NewEventManager() *EventManager { - return listener.NewManager() -} - -// NewBuilder Creates a new builder for fluent configuration | 创建新的Builder构建器(用于流式配置) -func NewBuilder() *Builder { - return builder.NewBuilder() -} - -// NewNonceManager Creates a new nonce manager | 创建新的Nonce管理器 -func NewNonceManager(storage Storage, prefix string, ttl ...int64) *NonceManager { - var duration time.Duration - if len(ttl) > 0 && ttl[0] > 0 { - duration = time.Duration(ttl[0]) * time.Second - } - return security.NewNonceManager(storage, prefix, duration) -} - -// NewRefreshTokenManager Creates a new refresh token manager | 创建新的刷新令牌管理器 -func NewRefreshTokenManager(storage Storage, prefix string, cfg *Config) *RefreshTokenManager { - return security.NewRefreshTokenManager(storage, prefix, manager.TokenKeyPrefix, cfg) -} - -// NewOAuth2Server Creates a new OAuth2 server | 创建新的OAuth2服务器 -func NewOAuth2Server(storage Storage, prefix string) *OAuth2Server { - return oauth2.NewOAuth2Server(storage, prefix) -} +//import ( +// "time" +// +// "github.com/click33/sa-token-go/core/adapter" +// "github.com/click33/sa-token-go/core/builder" +// "github.com/click33/sa-token-go/core/config" +// "github.com/click33/sa-token-go/core/context" +// "github.com/click33/sa-token-go/core/listener" +// "github.com/click33/sa-token-go/core/manager" +// "github.com/click33/sa-token-go/core/oauth2" +// "github.com/click33/sa-token-go/core/security" +// "github.com/click33/sa-token-go/core/session" +// "github.com/click33/sa-token-go/core/utils" +//) +// +//// ============ Exported Types | 导出的类型 ============ +//// Export main types and functions for external use | 导出主要类型和函数,方便外部使用 +// +//// Configuration related types | 配置相关类型 +//type ( +// Config = config.Config +// CookieConfig = config.CookieConfig +// LoggerConfig = config.LoggerConfig +// RenewPoolConfig = config.RenewPoolConfig +// +// TokenStyle = config.TokenStyle +// SameSiteMode = config.SameSiteMode +// LogLevel = config.LogLevel +//) +// +//// Token style constants | Token风格常量 +//const ( +// TokenStyleUUID = config.TokenStyleUUID +// TokenStyleSimple = config.TokenStyleSimple +// TokenStyleRandom32 = config.TokenStyleRandom32 +// TokenStyleRandom64 = config.TokenStyleRandom64 +// TokenStyleRandom128 = config.TokenStyleRandom128 +// TokenStyleJWT = config.TokenStyleJWT +// TokenStyleHash = config.TokenStyleHash +// TokenStyleTimestamp = config.TokenStyleTimestamp +// TokenStyleTik = config.TokenStyleTik +//) +// +//// Adapter interfaces | 适配器接口 +//type ( +// Codec = adapter.Codec +// Generator = adapter.Generator +// Log = adapter.Log +// Pool = adapter.Pool +// Storage = adapter.Storage +// RequestContext = adapter.RequestContext +//) +// +//// Core types | 核心类型 +//type ( +// Builder = builder.Builder +// +// Manager = manager.Manager +// TokenInfo = manager.TokenInfo +// +// Session = session.Session +// +// SaTokenContext = context.SaTokenContext +// +// NonceManager = security.NonceManager +// +// AccessTokenInfo = security.AccessTokenInfo +// RefreshTokenInfo = security.RefreshTokenInfo +// RefreshTokenManager = security.RefreshTokenManager +// +// OAuth2Client = oauth2.Client +// OAuth2Server = oauth2.OAuth2Server +// OAuth2AccessToken = oauth2.AccessToken +// OAuth2GrantType = oauth2.GrantType +//) +// +//// Event related types | 事件相关类型 +//type ( +// EventListener = listener.Listener +// EventManager = listener.Manager +// EventData = listener.EventData +// Event = listener.Event +// ListenerFunc = listener.ListenerFunc +// ListenerConfig = listener.ListenerConfig +//) +// +//// Event constants | 事件常量 +//const ( +// EventLogin = listener.EventLogin +// EventLogout = listener.EventLogout +// EventKickout = listener.EventKickout +// EventDisable = listener.EventDisable +// EventUntie = listener.EventUntie +// EventRenew = listener.EventRenew +// EventCreateSession = listener.EventCreateSession +// EventDestroySession = listener.EventDestroySession +// EventPermissionCheck = listener.EventPermissionCheck +// EventRoleCheck = listener.EventRoleCheck +// EventAll = listener.EventAll +//) +// +//const ( +// GrantTypeAuthorizationCode = oauth2.GrantTypeAuthorizationCode +// GrantTypeRefreshToken = oauth2.GrantTypeRefreshToken +// GrantTypeClientCredentials = oauth2.GrantTypeClientCredentials +// GrantTypePassword = oauth2.GrantTypePassword +//) +// +//// ============ Utility Functions | 工具函数 ============ +// +//var ( +// // String utilities | 字符串工具 +// RandomString = utils.RandomString +// RandomNumericString = utils.RandomNumericString +// RandomAlphanumeric = utils.RandomAlphanumeric +// IsEmpty = utils.IsEmpty +// IsNotEmpty = utils.IsNotEmpty +// DefaultString = utils.DefaultString +// +// // Slice utilities | 切片工具 +// ContainsString = utils.ContainsString +// RemoveString = utils.RemoveString +// UniqueStrings = utils.UniqueStrings +// MergeStrings = utils.MergeStrings +// FilterStrings = utils.FilterStrings +// MapStrings = utils.MapStrings +// +// // Pattern matching | 模式匹配 +// MatchPattern = utils.MatchPattern +// +// // Duration utilities | 时长工具 +// FormatDuration = utils.FormatDuration +// ParseDuration = utils.ParseDuration +// +// // Hash & Encoding | 哈希和编码 +// SHA256Hash = utils.SHA256Hash +// Base64Encode = utils.Base64Encode +// Base64Decode = utils.Base64Decode +//) +// +//// ============ Factory Functions | 工厂函数 ============ +// +//// DefaultConfig Returns log configuration | 返回默认配置 +//func DefaultConfig() *Config { +// return config.DefaultConfig() +//} +// +//func DefaultLoggerConfig() *LoggerConfig { +// return config.DefaultLoggerConfig() +//} +// +//// NewManager Creates a new authentication manager | 创建新的认证管理器 +//func NewManager(cfg *Config, generator adapter.Generator, storage adapter.Storage, serializer adapter.Codec, logger adapter.Log, pool adapter.Pool) *Manager { +// return manager.NewManager(cfg, generator, storage, serializer, logger, pool) +//} +// +//// NewContext Creates a new Sa-Token context | 创建新的Sa-Token上下文 +//func NewContext(ctx RequestContext, mgr *Manager) *SaTokenContext { +// return context.NewContext(ctx, mgr) +//} +// +//// NewSession Creates a new session | 创建新的Session +//func NewSession(id string, storage Storage, prefix string) *Session { +// return session.NewSession(id, storage, prefix) +//} +// +//// LoadSession Loads an existing session | 加载已存在的Session +//func LoadSession(id string, storage Storage, prefix string) (*Session, error) { +// return session.Load(id, storage, prefix) +//} +// +//// NewTokenGenerator Creates a new token generator | 创建新的Token生成器 +//func NewTokenGenerator(cfg *Config) *TokenGenerator { +// return token.NewGenerator(cfg) +//} +// +//// NewEventManager Creates a new event manager | 创建新的事件管理器 +//func NewEventManager() *EventManager { +// return listener.NewManager() +//} +// +//// NewBuilder Creates a new builder for fluent configuration | 创建新的Builder构建器(用于流式配置) +//func NewBuilder() *Builder { +// return builder.NewBuilder() +//} +// +//// NewNonceManager Creates a new nonce manager | 创建新的Nonce管理器 +//func NewNonceManager(storage Storage, prefix string, ttl ...int64) *NonceManager { +// var duration time.Duration +// if len(ttl) > 0 && ttl[0] > 0 { +// duration = time.Duration(ttl[0]) * time.Second +// } +// return security.NewNonceManager(storage, prefix, duration) +//} +// +//// NewRefreshTokenManager Creates a new refresh token manager | 创建新的刷新令牌管理器 +//func NewRefreshTokenManager(storage Storage, prefix string, cfg *Config) *RefreshTokenManager { +// return security.NewRefreshTokenManager(storage, prefix, manager.TokenKeyPrefix, cfg) +//} +// +//// NewOAuth2Server Creates a new OAuth2 server | 创建新的OAuth2服务器 +//func NewOAuth2Server(storage Storage, prefix string) *OAuth2Server { +// return oauth2.NewOAuth2Server(storage, prefix) +//} diff --git a/core/security/consts.go b/core/security/consts.go index b126048..f6e5094 100644 --- a/core/security/consts.go +++ b/core/security/consts.go @@ -1,7 +1,10 @@ // @Author daixk 2025/12/11 22:20:00 package security -import "time" +import ( + "fmt" + "time" +) // Constants for nonce | Nonce常量 const ( @@ -17,3 +20,11 @@ const ( RefreshTokenLength = 32 // Refresh token byte length | 刷新令牌字节长度 RefreshKeySuffix = "refresh:" // Key suffix after prefix | 前缀后的键后缀 ) + +var ( + ErrInvalidNonce = fmt.Errorf("invalid or expired nonce") // invalid or expired nonce | Nonce 无效或已过期 + ErrInvalidLoginIDEmpty = fmt.Errorf("loginID cannot be empty") // loginID is empty | 登录ID不能为空 + + ErrRefreshTokenExpired = fmt.Errorf("refresh token expired") // refresh token expired | 刷新令牌已过期 + ErrInvalidRefreshToken = fmt.Errorf("invalid refresh token") // invalid refresh token | 刷新令牌无效 +) diff --git a/core/security/refresh_token.go b/core/security/refresh_token.go index 24899af..78ad9c0 100644 --- a/core/security/refresh_token.go +++ b/core/security/refresh_token.go @@ -6,7 +6,6 @@ import ( "fmt" codec_json "github.com/click33/sa-token-go/codec/json" "github.com/click33/sa-token-go/core/adapter" - "github.com/click33/sa-token-go/core/serror" "github.com/click33/sa-token-go/generator/sgenerator" "github.com/click33/sa-token-go/storage/memory" "time" @@ -88,7 +87,7 @@ func NewRefreshTokenManager( // GenerateTokenPair Create access + refresh token | 生成访问令牌和刷新令牌 func (rtm *RefreshTokenManager) GenerateTokenPair(loginID, device string) (*RefreshTokenInfo, error) { if loginID == "" { - return nil, serror.ErrInvalidLoginIDEmpty + return nil, ErrInvalidLoginIDEmpty } // Generate access token | 生成访问令牌 @@ -121,13 +120,13 @@ func (rtm *RefreshTokenManager) GenerateTokenPair(loginID, device string) (*Refr Device: device, }) if err != nil { - return nil, fmt.Errorf("%w: %v", serror.ErrCommonEncode, err) + return nil, fmt.Errorf("%w: %v", fmt.Errorf("failed to encode data"), err) } // Encode refresh token info | 编码刷新令牌信息 refreshData, err := rtm.serializer.Encode(info) if err != nil { - return nil, fmt.Errorf("%w: %v", serror.ErrCommonEncode, err) + return nil, fmt.Errorf("%w: %v", fmt.Errorf("failed to encode data"), err) } // Store access token | 存储访问令牌 @@ -179,7 +178,7 @@ func (rtm *RefreshTokenManager) VerifyAccessTokenAndGetInfo(accessToken string) // RefreshAccessToken Refresh access token by refresh token | 使用刷新令牌刷新访问令牌 func (rtm *RefreshTokenManager) RefreshAccessToken(refreshToken string) (*RefreshTokenInfo, error) { if refreshToken == "" { - return nil, serror.ErrInvalidRefreshToken + return nil, ErrInvalidRefreshToken } refreshKey := rtm.getRefreshKey(refreshToken) @@ -187,7 +186,7 @@ func (rtm *RefreshTokenManager) RefreshAccessToken(refreshToken string) (*Refres // Load refresh token | 读取刷新令牌 data, err := rtm.storage.Get(refreshKey) if err != nil || data == nil { - return nil, serror.ErrInvalidRefreshToken + return nil, ErrInvalidRefreshToken } bytes, err := utils.ToBytes(data) if err != nil { @@ -202,7 +201,7 @@ func (rtm *RefreshTokenManager) RefreshAccessToken(refreshToken string) (*Refres // Check expiration | 检查过期 if time.Now().Unix() > info.ExpireTime { _ = rtm.storage.Delete(refreshKey) - return nil, serror.ErrRefreshTokenExpired + return nil, ErrRefreshTokenExpired } // Remove old access token | 删除旧访问令牌 @@ -223,7 +222,7 @@ func (rtm *RefreshTokenManager) RefreshAccessToken(refreshToken string) (*Refres Device: info.Device, }) if err != nil { - return nil, fmt.Errorf("%w: %v", serror.ErrCommonEncode, err) + return nil, fmt.Errorf("%w: %v", fmt.Errorf("failed to encode data"), err) } if err := rtm.storage.Set( rtm.getTokenKey(newAccessToken), @@ -236,7 +235,7 @@ func (rtm *RefreshTokenManager) RefreshAccessToken(refreshToken string) (*Refres // Update refresh token without extending TTL | 更新刷新令牌但不续期 refreshData, err := rtm.serializer.Encode(&info) if err != nil { - return nil, fmt.Errorf("%w: %v", serror.ErrCommonEncode, err) + return nil, fmt.Errorf("%w: %v", fmt.Errorf("failed to encode data"), err) } if err = rtm.storage.SetKeepTTL(refreshKey, refreshData); err != nil { return nil, err @@ -248,7 +247,7 @@ func (rtm *RefreshTokenManager) RefreshAccessToken(refreshToken string) (*Refres // GetRefreshTokenInfo Get refresh token info by token | 根据刷新令牌获取刷新令牌信息 func (rtm *RefreshTokenManager) GetRefreshTokenInfo(refreshToken string) (*RefreshTokenInfo, error) { if refreshToken == "" { - return nil, serror.ErrInvalidRefreshToken + return nil, ErrInvalidRefreshToken } refreshKey := rtm.getRefreshKey(refreshToken) @@ -256,7 +255,7 @@ func (rtm *RefreshTokenManager) GetRefreshTokenInfo(refreshToken string) (*Refre // Load refresh token | 读取刷新令牌 data, err := rtm.storage.Get(refreshKey) if err != nil || data == nil { - return nil, serror.ErrInvalidRefreshToken + return nil, ErrInvalidRefreshToken } bytes, err := utils.ToBytes(data) @@ -266,7 +265,7 @@ func (rtm *RefreshTokenManager) GetRefreshTokenInfo(refreshToken string) (*Refre var info RefreshTokenInfo if err = rtm.serializer.Decode(bytes, &info); err != nil { - return nil, fmt.Errorf("%w: %v", serror.ErrCommonDecode, err) + return nil, fmt.Errorf("%w: %v", fmt.Errorf("failed to decode data"), err) } return &info, nil diff --git a/core/serror/errors.go b/core/serror/errors.go deleted file mode 100644 index 2ead247..0000000 --- a/core/serror/errors.go +++ /dev/null @@ -1,41 +0,0 @@ -// @Author daixk 2025/11/25 9:34:00 -package serror - -import ( - "fmt" -) - -var ( - ErrCommonEncode = fmt.Errorf("failed to encode data") // failed to marshal data | 序列化数据失败 - ErrCommonDecode = fmt.Errorf("failed to decode data") // failed to unmarshal data | 反序列化数据失败 - - ErrRenewPoolNotStarted = fmt.Errorf("renew pool not started") // renew pool not started | 续期线程池未启动 - - ErrTokenNotFound = fmt.Errorf("token not found") // token not found | Token 不存在 - ErrTokenKickout = fmt.Errorf("token has been kicked out") // token has been kicked out | Token 已被踢下线 - ErrTokenReplaced = fmt.Errorf("token has been replaced") // token has been replaced | Token 已被顶下线 - ErrNotLogin = fmt.Errorf("not login") // not login | 未登录 - ErrAccountDisabled = fmt.Errorf("account is disabled") // account is disabled | 账号已被禁用 - ErrLoginLimitExceeded = fmt.Errorf("login count exceeds the maximum limit") // login count exceeds the maximum limit | 超出最大登录数量限制 - - ErrClientOrClientIDEmpty = fmt.Errorf("invalid client: clientID is required") // client or clientID is empty | 客户端或客户端ID为空 - ErrClientNotFound = fmt.Errorf("client not found") // client not found | 客户端不存在 - ErrUserIDEmpty = fmt.Errorf("userID cannot be empty") // userID is empty | 用户ID不能为空 - ErrInvalidRedirectURI = fmt.Errorf("invalid redirectUri") // invalid redirect URI | 回调URI非法 - ErrInvalidClientCredentials = fmt.Errorf("invalid client credentials") // invalid client credentials | 客户端凭证无效 - ErrInvalidAuthCode = fmt.Errorf("invalid authorization code") // invalid authorization code | 授权码无效 - ErrAuthCodeUsed = fmt.Errorf("authorization code already used") // authorization code already used | 授权码已被使用 - ErrAuthCodeExpired = fmt.Errorf("authorization code expired") // authorization code expired | 授权码已过期 - ErrClientMismatch = fmt.Errorf("client mismatch") // client mismatch | 客户端不匹配 - ErrRedirectURIMismatch = fmt.Errorf("redirectUri mismatch") // redirect URI mismatch | 回调URI不匹配 - ErrInvalidAccessToken = fmt.Errorf("invalid access token") // invalid access token | 访问令牌无效 - ErrInvalidRefreshToken = fmt.Errorf("invalid refresh token") // invalid refresh token | 刷新令牌无效 - - ErrInvalidNonce = fmt.Errorf("invalid or expired nonce") // invalid or expired nonce | Nonce 无效或已过期 - ErrInvalidLoginIDEmpty = fmt.Errorf("loginID cannot be empty") // loginID is empty | 登录ID不能为空 - - ErrRefreshTokenExpired = fmt.Errorf("refresh token expired") // refresh token expired | 刷新令牌已过期 - - ErrInvalidToken = fmt.Errorf("invalid token") - ErrUnexpectedSigningMethod = fmt.Errorf("unexpected signing method") -) diff --git a/core/session/session.go b/core/session/session.go index 3a57524..e69394d 100644 --- a/core/session/session.go +++ b/core/session/session.go @@ -5,7 +5,6 @@ import ( "fmt" codec_json "github.com/click33/sa-token-go/codec/json" "github.com/click33/sa-token-go/core/manager" - "github.com/click33/sa-token-go/core/serror" "github.com/click33/sa-token-go/core/utils" "github.com/click33/sa-token-go/storage/memory" "sync" @@ -222,7 +221,7 @@ func (s *Session) getStorageKey() string { func (s *Session) save(ttl ...time.Duration) error { data, err := s.serializer.Encode(s) if err != nil { - return fmt.Errorf("%w: %v", serror.ErrCommonEncode, err) + return fmt.Errorf("%w: %v", fmt.Errorf("failed to encode data"), err) } key := s.getStorageKey() @@ -240,7 +239,7 @@ func (s *Session) save(ttl ...time.Duration) error { func (s *Session) saveKeepTTL() error { data, err := s.serializer.Encode(s) if err != nil { - return fmt.Errorf("%w: %v", serror.ErrCommonEncode, err) + return fmt.Errorf("%w: %v", fmt.Errorf("failed to encode data"), err) } key := s.getStorageKey() @@ -282,7 +281,7 @@ func Load(_ context.Context, id string, m *manager.Manager) (*Session, error) { var session Session if err = m.GetCodec().Decode(raw, &session); err != nil { - return nil, fmt.Errorf("%w: %v", serror.ErrCommonDecode, err) + return nil, fmt.Errorf("%w: %v", fmt.Errorf("failed to decode data"), err) } session.storage = m.GetStorage() diff --git a/core/version.go b/core/version.go new file mode 100644 index 0000000..ff376b6 --- /dev/null +++ b/core/version.go @@ -0,0 +1,5 @@ +// @Author daixk 2025/12/22 13:33:00 +package core + +// Version Sa-Token-Go version | Sa-Token-Go版本 +const Version = "0.1.3" diff --git a/generator/sgenerator/generator_adapter_sgenerator.go b/generator/sgenerator/generator_adapter_sgenerator.go index bda7d7b..a666570 100644 --- a/generator/sgenerator/generator_adapter_sgenerator.go +++ b/generator/sgenerator/generator_adapter_sgenerator.go @@ -7,7 +7,6 @@ import ( "encoding/hex" "fmt" "github.com/click33/sa-token-go/core/config" - "github.com/click33/sa-token-go/core/serror" "github.com/click33/sa-token-go/core/utils" "github.com/golang-jwt/jwt/v5" "github.com/google/uuid" @@ -132,7 +131,7 @@ func (g *Generator) ParseJWT(tokenStr string) (jwt.MapClaims, error) { token, err := jwt.Parse(tokenStr, func(token *jwt.Token) (any, error) { // Verify signing method | 验证签名方法 if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { - return nil, fmt.Errorf("%w: %v", serror.ErrUnexpectedSigningMethod, token.Header["alg"]) + return nil, fmt.Errorf("%w: %v", fmt.Errorf("unexpected signing method"), token.Header["alg"]) } return []byte(secretKey), nil }) @@ -145,7 +144,7 @@ func (g *Generator) ParseJWT(tokenStr string) (jwt.MapClaims, error) { return claims, nil } - return nil, serror.ErrInvalidToken + return nil, fmt.Errorf("invalid token") } // ValidateJWT Validates JWT token | 验证JWT Token diff --git a/integrations/gf/annotation.go b/integrations/gf/annotation.go deleted file mode 100644 index d1e0630..0000000 --- a/integrations/gf/annotation.go +++ /dev/null @@ -1,125 +0,0 @@ -package gf - -import ( - "strings" - - "github.com/click33/sa-token-go/core" - "github.com/click33/sa-token-go/stputil" - "github.com/gogf/gf/v2/net/ghttp" -) - -// Annotation annotation structure | 注解结构体 -type Annotation struct { - CheckLogin bool `json:"checkLogin"` - CheckRole []string `json:"checkRole"` - CheckPermission []string `json:"checkPermission"` - CheckDisable bool `json:"checkDisable"` - Ignore bool `json:"ignore"` -} - -// GetHandler gets handler with annotations | 获取带注解的处理器 -func GetHandler(handler ghttp.HandlerFunc, annotations ...*Annotation) ghttp.HandlerFunc { - return func(r *ghttp.Request) { - // Check if authentication should be ignored | 检查是否忽略认证 - if len(annotations) > 0 && annotations[0].Ignore { - if handler != nil { - handler(r) - } else { - r.Middleware.Next() - } - return - } - - // Get token from context using configured TokenName | 从上下文获取Token(使用配置的TokenName) - ctx := NewGFContext(r) - saCtx := core.NewContext(ctx, stputil.GetManager()) - token := saCtx.GetTokenValue() - if token == "" { - writeErrorResponse(r, core.NewNotLoginError()) - return - } - - // Check login | 检查登录 - if !stputil.IsLogin(token) { - writeErrorResponse(r, core.NewNotLoginError()) - return - } - - // Get login ID | 获取登录ID - loginID, err := stputil.GetLoginID(token) - if err != nil { - writeErrorResponse(r, err) - return - } - - // Check if account is disabled | 检查是否被封禁 - if len(annotations) > 0 && annotations[0].CheckDisable { - if stputil.IsDisable(loginID) { - writeErrorResponse(r, core.NewAccountDisabledError(loginID)) - return - } - } - - // Check permission | 检查权限 - if len(annotations) > 0 && len(annotations[0].CheckPermission) > 0 { - hasPermission := false - for _, perm := range annotations[0].CheckPermission { - if stputil.HasPermission(loginID, strings.TrimSpace(perm)) { - hasPermission = true - break - } - } - if !hasPermission { - writeErrorResponse(r, core.NewPermissionDeniedError(strings.Join(annotations[0].CheckPermission, ","))) - return - } - } - - // Check role | 检查角色 - if len(annotations) > 0 && len(annotations[0].CheckRole) > 0 { - hasRole := false - for _, role := range annotations[0].CheckRole { - if stputil.HasRole(loginID, strings.TrimSpace(role)) { - hasRole = true - break - } - } - if !hasRole { - writeErrorResponse(r, core.NewRoleDeniedError(strings.Join(annotations[0].CheckRole, ","))) - return - } - } - - // All checks passed, execute original handler | 所有检查通过,执行原函数 - if handler != nil { - handler(r) - } else { - r.Middleware.Next() - } - } -} - -// CheckLoginMiddleware decorator for login checking | 检查登录装饰器 -func CheckLoginMiddleware() ghttp.HandlerFunc { - return GetHandler(nil, &Annotation{CheckLogin: true}) -} - -// CheckRoleMiddleware decorator for role checking | 检查角色装饰器 -func CheckRoleMiddleware(roles ...string) ghttp.HandlerFunc { - return GetHandler(nil, &Annotation{CheckRole: roles}) -} - -// CheckPermissionMiddleware decorator for permission checking | 检查权限装饰器 -func CheckPermissionMiddleware(perms ...string) ghttp.HandlerFunc { - return GetHandler(nil, &Annotation{CheckPermission: perms}) -} - -// CheckDisableMiddleware decorator for checking if account is disabled | 检查是否被封禁装饰器 -func CheckDisableMiddleware() ghttp.HandlerFunc { - return GetHandler(nil, &Annotation{CheckDisable: true}) -} - -// IgnoreMiddleware decorator to ignore authentication | 忽略认证装饰器 -func IgnoreMiddleware() ghttp.HandlerFunc { - return GetHandler(nil, &Annotation{Ignore: true}) -} diff --git a/integrations/gf/context.go b/integrations/gf/context.go index c28eae0..6ec3b2c 100644 --- a/integrations/gf/context.go +++ b/integrations/gf/context.go @@ -12,6 +12,13 @@ type GFContext struct { aborted bool } +// NewGFContext creates a GF context adapter | 创建GF上下文适配器 +func NewGFContext(c *ghttp.Request) adapter.RequestContext { + return &GFContext{ + c: c, + } +} + // Get implements adapter.RequestContext. func (g *GFContext) Get(key string) (interface{}, bool) { v := g.c.Get(key) @@ -71,13 +78,6 @@ func (g *GFContext) SetHeader(key string, value string) { g.c.Header.Set(key, value) } -// NewGFContext creates a GF context adapter | 创建GF上下文适配器 -func NewGFContext(c *ghttp.Request) adapter.RequestContext { - return &GFContext{ - c: c, - } -} - // ============ Additional Required Methods | 额外必需的方法 ============ // GetHeaders implements adapter.RequestContext. @@ -123,7 +123,7 @@ func (g *GFContext) SetCookieWithOptions(options *adapter.CookieOptions) { HttpOnly: options.HttpOnly, SameSite: http.SameSite(0), // Default to SameSiteNone } - + // Set SameSite attribute switch options.SameSite { case "Strict": @@ -133,7 +133,7 @@ func (g *GFContext) SetCookieWithOptions(options *adapter.CookieOptions) { case "None": cookie.SameSite = http.SameSiteNoneMode } - + g.c.Cookie.SetHttpCookie(cookie) } diff --git a/integrations/gf/export.go b/integrations/gf/export.go index 194f3d3..c08b1c5 100644 --- a/integrations/gf/export.go +++ b/integrations/gf/export.go @@ -1,364 +1,40 @@ package gf import ( - "time" - - "github.com/click33/sa-token-go/core" + "github.com/click33/sa-token-go/core/builder" + "github.com/click33/sa-token-go/core/config" + "github.com/click33/sa-token-go/core/manager" "github.com/click33/sa-token-go/stputil" ) -// ============ Re-export core types | 重新导出核心类型 ============ - -// Configuration related types | 配置相关类型 -type ( - Config = core.Config - CookieConfig = core.CookieConfig - TokenStyle = core.TokenStyle -) - -// Token style constants | Token风格常量 -const ( - TokenStyleUUID = core.TokenStyleUUID - TokenStyleSimple = core.TokenStyleSimple - TokenStyleRandom32 = core.TokenStyleRandom32 - TokenStyleRandom64 = core.TokenStyleRandom64 - TokenStyleRandom128 = core.TokenStyleRandom128 - TokenStyleJWT = core.TokenStyleJWT - TokenStyleHash = core.TokenStyleHash - TokenStyleTimestamp = core.TokenStyleTimestamp - TokenStyleTik = core.TokenStyleTik -) - -// Core types | 核心类型 -type ( - Manager = core.Manager - TokenInfo = core.TokenInfo - Session = core.Session - TokenGenerator = core.TokenGenerator - SaTokenContext = core.SaTokenContext - Builder = core.Builder - NonceManager = core.NonceManager - RefreshTokenInfo = core.RefreshTokenInfo - RefreshTokenManager = core.RefreshTokenManager - OAuth2Server = core.OAuth2Server - OAuth2Client = core.OAuth2Client - OAuth2AccessToken = core.OAuth2AccessToken - OAuth2GrantType = core.OAuth2GrantType -) - -// Adapter interfaces | 适配器接口 -type ( - Storage = core.Storage - RequestContext = core.RequestContext -) - -// Event related types | 事件相关类型 -type ( - EventListener = core.EventListener - EventManager = core.EventManager - EventData = core.EventData - Event = core.Event - ListenerFunc = core.ListenerFunc - ListenerConfig = core.ListenerConfig -) - -// Event constants | 事件常量 -const ( - EventLogin = core.EventLogin - EventLogout = core.EventLogout - EventKickout = core.EventKickout - EventDisable = core.EventDisable - EventUntie = core.EventUntie - EventRenew = core.EventRenew - EventCreateSession = core.EventCreateSession - EventDestroySession = core.EventDestroySession - EventPermissionCheck = core.EventPermissionCheck - EventRoleCheck = core.EventRoleCheck - EventAll = core.EventAll -) - -// OAuth2 grant type constants | OAuth2授权类型常量 -const ( - GrantTypeAuthorizationCode = core.GrantTypeAuthorizationCode - GrantTypeRefreshToken = core.GrantTypeRefreshToken - GrantTypeClientCredentials = core.GrantTypeClientCredentials - GrantTypePassword = core.GrantTypePassword -) - -// Utility functions | 工具函数 -var ( - RandomString = core.RandomString - IsEmpty = core.IsEmpty - IsNotEmpty = core.IsNotEmpty - DefaultString = core.DefaultString - ContainsString = core.ContainsString - RemoveString = core.RemoveString - UniqueStrings = core.UniqueStrings - MergeStrings = core.MergeStrings - MatchPattern = core.MatchPattern -) - -// ============ Core constructor functions | 核心构造函数 ============ - -// DefaultConfig returns log configuration | 返回默认配置 -func DefaultConfig() *Config { - return core.DefaultConfig() -} - -// NewManager creates a new authentication manager | 创建新的认证管理器 -func NewManager(storage Storage, cfg *Config) *Manager { - return core.NewManager(storage, cfg) -} - -// NewContext creates a new Sa-Token context | 创建新的Sa-Token上下文 -func NewContext(ctx RequestContext, mgr *Manager) *SaTokenContext { - return core.NewContext(ctx, mgr) -} - -// NewSession creates a new session | 创建新的Session -func NewSession(id string, storage Storage, prefix string) *Session { - return core.NewSession(id, storage, prefix) -} - -// LoadSession loads an existing session | 加载已存在的Session -func LoadSession(id string, storage Storage, prefix string) (*Session, error) { - return core.LoadSession(id, storage, prefix) -} - -// NewTokenGenerator creates a new token generator | 创建新的Token生成器 -func NewTokenGenerator(cfg *Config) *TokenGenerator { - return core.NewTokenGenerator(cfg) -} - -// NewEventManager creates a new event manager | 创建新的事件管理器 -func NewEventManager() *EventManager { - return core.NewEventManager() -} - -// NewBuilder creates a new builder for fluent configuration | 创建新的Builder构建器(用于流式配置) -func NewBuilder() *Builder { - return core.NewBuilder() -} - -// NewNonceManager creates a new nonce manager | 创建新的Nonce管理器 -func NewNonceManager(storage Storage, prefix string, ttl ...int64) *NonceManager { - return core.NewNonceManager(storage, prefix, ttl...) -} - -// NewRefreshTokenManager creates a new refresh token manager | 创建新的刷新令牌管理器 -func NewRefreshTokenManager(storage Storage, prefix string, cfg *Config) *RefreshTokenManager { - return core.NewRefreshTokenManager(storage, prefix, cfg) -} - -// NewOAuth2Server creates a new OAuth2 server | 创建新的OAuth2服务器 -func NewOAuth2Server(storage Storage, prefix string) *OAuth2Server { - return core.NewOAuth2Server(storage, prefix) -} - -// ============ Global StpUtil functions | 全局StpUtil函数 ============ - -// SetManager sets the global Manager (must be called first) | 设置全局Manager(必须先调用此方法) -func SetManager(mgr *Manager) { +func SetManager(mgr *manager.Manager) { stputil.SetManager(mgr) } -// GetManager gets the global Manager | 获取全局Manager -func GetManager() *Manager { - return stputil.GetManager() -} - -// ============ Authentication | 登录认证 ============ - -// Login performs user login | 用户登录 -func Login(loginID interface{}, device ...string) (string, error) { - return stputil.Login(loginID, device...) -} - -// LoginByToken performs login with specified token | 使用指定Token登录 -func LoginByToken(loginID interface{}, tokenValue string, device ...string) error { - return stputil.LoginByToken(loginID, tokenValue, device...) -} - -// Logout performs user logout | 用户登出 -func Logout(loginID interface{}, device ...string) error { - return stputil.Logout(loginID, device...) -} - -// LogoutByToken performs logout by token | 根据Token登出 -func LogoutByToken(tokenValue string) error { - return stputil.LogoutByToken(tokenValue) -} - -// IsLogin checks if the user is logged in | 检查用户是否已登录 -func IsLogin(tokenValue string) bool { - return stputil.IsLogin(tokenValue) -} - -// CheckLogin checks login status (throws error if not logged in) | 检查登录状态(未登录抛出错误) -func CheckLogin(tokenValue string) error { - return stputil.CheckLogin(tokenValue) +func GetManager(autoType ...string) (*manager.Manager, error) { + return stputil.GetManager(autoType...) } -// GetLoginID gets the login ID from token | 从Token获取登录ID -func GetLoginID(tokenValue string) (string, error) { - return stputil.GetLoginID(tokenValue) +func DeleteManager(autoType ...string) error { + return stputil.DeleteManager(autoType...) } -// GetLoginIDNotCheck gets login ID without checking | 获取登录ID(不检查) -func GetLoginIDNotCheck(tokenValue string) (string, error) { - return stputil.GetLoginIDNotCheck(tokenValue) +func DeleteAllManager() { + stputil.DeleteAllManager() } -// GetTokenValue gets the token value for a login ID | 获取登录ID对应的Token值 -func GetTokenValue(loginID interface{}, device ...string) (string, error) { - return stputil.GetTokenValue(loginID, device...) +func NewDefaultBuild() *builder.Builder { + return builder.NewBuilder() } -// GetTokenInfo gets token information | 获取Token信息 -func GetTokenInfo(tokenValue string) (*TokenInfo, error) { - return stputil.GetTokenInfo(tokenValue) +func NewDefaultConfig() *config.Config { + return config.DefaultConfig() } -// ============ Kickout | 踢人下线 ============ - -// Kickout kicks out a user session | 踢人下线 -func Kickout(loginID interface{}, device ...string) error { - return stputil.Kickout(loginID, device...) -} - -// ============ Account Disable | 账号封禁 ============ - -// Disable disables an account for specified duration | 封禁账号(指定时长) -func Disable(loginID interface{}, duration time.Duration) error { - return stputil.Disable(loginID, duration) -} - -// IsDisable checks if an account is disabled | 检查账号是否被封禁 -func IsDisable(loginID interface{}) bool { - return stputil.IsDisable(loginID) -} - -// CheckDisable checks if account is disabled (throws error if disabled) | 检查账号是否被封禁(被封禁则抛出错误) -func CheckDisableByToken(tokenValue string) error { - return stputil.CheckDisable(tokenValue) -} - -// GetDisableTime gets remaining disabled time | 获取账号剩余封禁时间 -func GetDisableTime(loginID interface{}) (int64, error) { - return stputil.GetDisableTime(loginID) -} - -// Untie unties/unlocks an account | 解除账号封禁 -func Untie(loginID interface{}) error { - return stputil.Untie(loginID) -} - -// ============ Permission Check | 权限验证 ============ - -// CheckPermission checks if the account has specified permission | 检查账号是否拥有指定权限 -func CheckPermissionByToken(tokenValue string, permission string) error { - return stputil.CheckPermission(tokenValue, permission) -} - -// HasPermission checks if the account has specified permission (returns bool) | 检查账号是否拥有指定权限(返回布尔值) -func HasPermission(loginID interface{}, permission string) bool { - return stputil.HasPermission(loginID, permission) -} - -// CheckPermissionAnd checks if the account has all specified permissions (AND logic) | 检查账号是否拥有所有指定权限(AND逻辑) -func CheckPermissionAndByToken(tokenValue string, permissions []string) error { - return stputil.CheckPermissionAnd(tokenValue, permissions) -} - -// CheckPermissionOr checks if the account has any of the specified permissions (OR logic) | 检查账号是否拥有指定权限中的任意一个(OR逻辑) -func CheckPermissionOrByToken(tokenValue string, permissions []string) error { - return stputil.CheckPermissionOr(tokenValue, permissions) -} - -// GetPermissionList gets the permission list for an account | 获取账号的权限列表 -func GetPermissionListByToken(tokenValue string) ([]string, error) { - return stputil.GetPermissionList(tokenValue) -} - -// ============ Role Check | 角色验证 ============ - -// CheckRole checks if the account has specified role | 检查账号是否拥有指定角色 -func CheckRoleByToken(tokenValue string, role string) error { - return stputil.CheckRole(tokenValue, role) -} - -// HasRole checks if the account has specified role (returns bool) | 检查账号是否拥有指定角色(返回布尔值) -func HasRole(loginID interface{}, role string) bool { - return stputil.HasRole(loginID, role) +func DefaultLoggerConfig() *config.LoggerConfig { + return config.DefaultLoggerConfig() } -// CheckRoleAnd checks if the account has all specified roles (AND logic) | 检查账号是否拥有所有指定角色(AND逻辑) -func CheckRoleAndByToken(tokenValue string, roles []string) error { - return stputil.CheckRoleAnd(tokenValue, roles) +func DefaultDefaultRenewPoolConfig() *config.RenewPoolConfig { + return config.DefaultRenewPoolConfig() } - -// CheckRoleOr checks if the account has any of the specified roles (OR logic) | 检查账号是否拥有指定角色中的任意一个(OR逻辑) -func CheckRoleOrByToken(tokenValue string, roles []string) error { - return stputil.CheckRoleOr(tokenValue, roles) -} - -// GetRoleList gets the role list for an account | 获取账号的角色列表 -func GetRoleListByToken(tokenValue string) ([]string, error) { - return stputil.GetRoleList(tokenValue) -} - -// ============ Session Management | Session管理 ============ - -// GetSession gets the session for a login ID | 获取登录ID的Session -func GetSession(loginID interface{}) (*Session, error) { - return stputil.GetSession(loginID) -} - -// GetSessionByToken gets the session by token | 根据Token获取Session -func GetSessionByToken(tokenValue string) (*Session, error) { - return stputil.GetSessionByToken(tokenValue) -} - -// GetTokenSession gets the token session | 获取Token的Session -func GetTokenSession(tokenValue string) (*Session, error) { - return stputil.GetTokenSession(tokenValue) -} - -// ============ Token Renewal | Token续期 ============ - -// RenewTimeout renews token timeout | 续期Token超时时间 - -// ============ Security Features | 安全特性 ============ - -// GenerateNonce generates a new nonce token | 生成新的Nonce令牌 -func GenerateNonce() (string, error) { - return stputil.GenerateNonce() -} - -// VerifyNonce verifies a nonce token | 验证Nonce令牌 -func VerifyNonce(nonce string) bool { - return stputil.VerifyNonce(nonce) -} - -// LoginWithRefreshToken performs login and returns both access token and refresh token | 登录并返回访问令牌和刷新令牌 -func LoginWithRefreshToken(loginID interface{}, device ...string) (*RefreshTokenInfo, error) { - return stputil.LoginWithRefreshToken(loginID, device...) -} - -// RefreshAccessToken refreshes the access token using a refresh token | 使用刷新令牌刷新访问令牌 -func RefreshAccessToken(refreshToken string) (*RefreshTokenInfo, error) { - return stputil.RefreshAccessToken(refreshToken) -} - -// RevokeRefreshToken revokes a refresh token | 撤销刷新令牌 -func RevokeRefreshToken(refreshToken string) error { - return stputil.RevokeRefreshToken(refreshToken) -} - -// GetOAuth2Server gets the OAuth2 server instance | 获取OAuth2服务器实例 -func GetOAuth2Server() *OAuth2Server { - return stputil.GetOAuth2Server() -} - -// Version Sa-Token-Go version | Sa-Token-Go版本 -const Version = core.Version diff --git a/integrations/gf/middleware.go b/integrations/gf/middleware.go new file mode 100644 index 0000000..a7e248a --- /dev/null +++ b/integrations/gf/middleware.go @@ -0,0 +1,353 @@ +package gf + +import ( + "context" + "errors" + "github.com/click33/sa-token-go/core" + "github.com/click33/sa-token-go/core/manager" + "net/http" + + "github.com/click33/sa-token-go/core/config" + saContext "github.com/click33/sa-token-go/core/context" + "github.com/click33/sa-token-go/stputil" + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/net/ghttp" +) + +// LogicType permission/role logic type | 权限/角色判断逻辑 +type LogicType string + +const ( + SaTokenCtxKey = "saCtx" + + LogicOr LogicType = "OR" // Logical OR | 任一满足 + LogicAnd LogicType = "AND" // Logical AND | 全部满足 +) + +type AuthOption func(*AuthOptions) + +type AuthOptions struct { + AuthType string + LogicType LogicType + AuthFailFunc func(r *ghttp.Request, err error) +} + +func defaultAuthOptions() *AuthOptions { + return &AuthOptions{} +} + +// WithAuthType sets auth type | 设置认证类型 +func WithAuthType(authType string) AuthOption { + return func(o *AuthOptions) { + o.AuthType = authType + } +} + +func WithLogicType(logicType LogicType) AuthOption { + return func(o *AuthOptions) { + o.LogicType = logicType + } +} + +// WithAuthFailFunc sets auth failure callback | 设置认证失败回调 +func WithAuthFailFunc(fn func(r *ghttp.Request, err error)) AuthOption { + return func(o *AuthOptions) { + o.AuthFailFunc = fn + } +} + +// AuthMiddleware authentication middleware | 认证中间件 +func AuthMiddleware(opts ...AuthOption) ghttp.HandlerFunc { + options := defaultAuthOptions() + for _, opt := range opts { + opt(options) + } + + return func(r *ghttp.Request) { + mgr, err := stputil.GetManager(options.AuthType) + if err != nil { + if options.AuthFailFunc != nil { + options.AuthFailFunc(r, err) + return + } + writeErrorResponse(r, err) + return + } + + saCtx := saContext.NewContext(r.Context(), NewGFContext(r), mgr) + err = mgr.CheckLogin( + context.WithValue( + r.Context(), + config.CtxTokenValue, + saCtx.GetTokenValue(), + ), + ) + if err != nil { + if options.AuthFailFunc != nil { + options.AuthFailFunc(r, err) + return + } + writeErrorResponse(r, err) + return + } + + r.SetCtxVar(SaTokenCtxKey, saCtx) + r.Middleware.Next() + } +} + +// AuthWithStateMiddleware authentication middleware | 认证中间件 +func AuthWithStateMiddleware(opts ...AuthOption) ghttp.HandlerFunc { + options := defaultAuthOptions() + for _, opt := range opts { + opt(options) + } + + return func(r *ghttp.Request) { + mgr, err := stputil.GetManager(options.AuthType) + if err != nil { + if options.AuthFailFunc != nil { + options.AuthFailFunc(r, err) + return + } + writeErrorResponse(r, err) + return + } + + saCtx := saContext.NewContext(r.Context(), NewGFContext(r), mgr) + _, err = mgr.CheckLoginWithState(context.WithValue(r.Context(), config.CtxTokenValue, saCtx.GetTokenValue())) + if err != nil { + if options.AuthFailFunc != nil { + options.AuthFailFunc(r, err) + return + } + + switch err { + case manager.ErrTokenKickout: + writeErrorResponse(r, core.ErrTokenKickout) + case manager.ErrTokenReplaced: + writeErrorResponse(r, core.ErrTokenReplaced) + default: + writeErrorResponse(r, core.ErrNotLogin) + } + + return + } + + r.SetCtxVar(SaTokenCtxKey, saCtx) + r.Middleware.Next() + } +} + +// PermissionMiddleware permission check middleware | 权限校验中间件 +func PermissionMiddleware( + permissions []string, + opts ...AuthOption, +) ghttp.HandlerFunc { + + options := defaultAuthOptions() + for _, opt := range opts { + opt(options) + } + + return func(r *ghttp.Request) { + // No permission required | 无需权限直接放行 + if len(permissions) == 0 { + r.Middleware.Next() + return + } + + // Get Manager | 获取 Manager + mgr, err := stputil.GetManager(options.AuthType) + if err != nil { + if options.AuthFailFunc != nil { + options.AuthFailFunc(r, err) + return + } + writeErrorResponse(r, err) + return + } + + // Build Sa-Token context | 构建 Sa-Token 上下文 + saCtx := saContext.NewContext( + r.Context(), + NewGFContext(r), + mgr, + ) + + // Permission check | 权限校验 + var ok bool + + switch { + // Single permission | 单权限判断 + case len(permissions) == 1: + ok = mgr.HasPermissionByToken( + context.WithValue(r.Context(), config.CtxTokenValue, saCtx.GetTokenValue()), + permissions[0], + ) + + // AND logic | AND 逻辑 + case options.LogicType == LogicAnd: + ok = mgr.HasPermissionsAndByToken( + context.WithValue(r.Context(), config.CtxTokenValue, saCtx.GetTokenValue()), + permissions, + ) + + // OR logic (default) | OR 逻辑(默认) + default: + ok = mgr.HasPermissionsOrByToken( + context.WithValue(r.Context(), config.CtxTokenValue, saCtx.GetTokenValue()), + permissions, + ) + } + + if !ok { + if options.AuthFailFunc != nil { + options.AuthFailFunc(r, core.ErrPermissionDenied) + return + } + writeErrorResponse(r, core.ErrPermissionDenied) + return + } + + // Store Sa-Token context | 保存 Sa-Token 上下文 + r.SetCtxVar(SaTokenCtxKey, saCtx) + + r.Middleware.Next() + } +} + +// RoleMiddleware role check middleware | 角色校验中间件 +func RoleMiddleware( + roles []string, + opts ...AuthOption, +) ghttp.HandlerFunc { + + options := defaultAuthOptions() + for _, opt := range opts { + opt(options) + } + + return func(r *ghttp.Request) { + // No role required | 无需角色直接放行 + if len(roles) == 0 { + r.Middleware.Next() + return + } + + // Get Manager | 获取 Manager + mgr, err := stputil.GetManager(options.AuthType) + if err != nil { + if options.AuthFailFunc != nil { + options.AuthFailFunc(r, err) + return + } + writeErrorResponse(r, err) + return + } + + // Build Sa-Token context | 构建 Sa-Token 上下文 + saCtx := saContext.NewContext( + r.Context(), + NewGFContext(r), + mgr, + ) + + // Role check | 角色校验 + var ok bool + + switch { + // Single role | 单角色判断 + case len(roles) == 1: + ok = mgr.HasRoleByToken(context.WithValue(r.Context(), config.CtxTokenValue, saCtx.GetTokenValue()), roles[0]) + + // AND logic | AND 逻辑 + case options.LogicType == LogicAnd: + ok = mgr.HasRolesAndByToken(context.WithValue(r.Context(), config.CtxTokenValue, saCtx.GetTokenValue()), roles) + + // OR logic (default) | OR 逻辑(默认) + default: + ok = mgr.HasRolesOrByToken(context.WithValue(r.Context(), config.CtxTokenValue, saCtx.GetTokenValue()), roles) + } + + if !ok { + if options.AuthFailFunc != nil { + options.AuthFailFunc(r, core.ErrRoleDenied) + return + } + writeErrorResponse(r, core.ErrRoleDenied) + return + } + + // Store Sa-Token context | 保存 Sa-Token 上下文 + r.SetCtxVar(SaTokenCtxKey, saCtx) + + r.Middleware.Next() + } +} + +// GetSaTokenContext gets Sa-Token context from GoFrame context | 获取 Sa-Token 上下文 +func GetSaTokenContext(r *ghttp.Request) (*saContext.SaTokenContext, bool) { + v := r.GetCtxVar(SaTokenCtxKey) + if v == nil { + return nil, false + } + + ctx, ok := v.Val().(*saContext.SaTokenContext) + return ctx, ok +} + +// ============ Error Handling Helpers | 错误处理辅助函数 ============ + +// writeErrorResponse writes a standardized error response | 写入标准化的错误响应 +func writeErrorResponse(r *ghttp.Request, err error) { + var saErr *core.SaTokenError + var code int + var message string + var httpStatus int + + // Check if it's a SaTokenError | 检查是否为SaTokenError + if errors.As(err, &saErr) { + code = saErr.Code + message = saErr.Message + httpStatus = getHTTPStatusFromCode(code) + } else { + // Handle standard errors | 处理标准错误 + code = core.CodeServerError + message = err.Error() + httpStatus = http.StatusInternalServerError + } + + r.Response.WriteStatusExit(httpStatus, g.Map{ + "code": code, + "message": message, + "error": err.Error(), + }) +} + +// writeSuccessResponse writes a standardized success response | 写入标准化的成功响应 +func writeSuccessResponse(r *ghttp.Request, data interface{}) { + r.Response.WriteStatusExit(http.StatusOK, g.Map{ + "code": core.CodeSuccess, + "message": "success", + "data": data, + }) +} + +// getHTTPStatusFromCode converts Sa-Token error code to HTTP status | 将Sa-Token错误码转换为HTTP状态码 +func getHTTPStatusFromCode(code int) int { + switch code { + case core.CodeNotLogin: + return http.StatusUnauthorized + case core.CodePermissionDenied: + return http.StatusForbidden + case core.CodeBadRequest: + return http.StatusBadRequest + case core.CodeNotFound: + return http.StatusNotFound + case core.CodeServerError: + return http.StatusInternalServerError + default: + return http.StatusInternalServerError + } +} diff --git a/integrations/gf/plugin.go b/integrations/gf/plugin.go deleted file mode 100644 index e540b85..0000000 --- a/integrations/gf/plugin.go +++ /dev/null @@ -1,313 +0,0 @@ -package gf - -import ( - "errors" - "net/http" - "strings" - - "github.com/click33/sa-token-go/core" - "github.com/gogf/gf/v2/frame/g" - "github.com/gogf/gf/v2/net/ghttp" -) - -type MiddlewareType string - -var ( - MiddlewareTypeOr MiddlewareType = "MiddlewareTypeOr" // Logical OR permission mode | “或” 逻辑权限模式 - MiddlewareTypeAnd MiddlewareType = "MiddlewareTypeAnd" // Logical AND permission mode | “与” 逻辑权限模式 -) - -// Plugin GoFrame plugin for Sa-Token | GoFrame插件 -type Plugin struct { - manager *core.Manager -} - -// NewPlugin creates an GoFrame plugin | 创建GoFrame插件 -func NewPlugin(manager *core.Manager) *Plugin { - return &Plugin{ - manager: manager, - } -} - -// AuthMiddleware authentication middleware | 认证中间件 -func (p *Plugin) AuthMiddleware() ghttp.HandlerFunc { - return func(r *ghttp.Request) { - ctx := NewGFContext(r) - saCtx := core.NewContext(ctx, p.manager) - // Check login | 检查登录 - if err := saCtx.CheckLogin(); err != nil { - writeErrorResponse(r, err) - return - } - // Store Sa-Token context in GoFrame context | 将Sa-Token上下文存储到GoFrame上下文 - r.SetCtxVar("satoken", saCtx) - - r.Middleware.Next() - } - -} - -// PermissionRequired permission validation middleware | 权限验证中间件 -func (p *Plugin) PermissionRequired(permission string) ghttp.HandlerFunc { - return func(r *ghttp.Request) { - ctx := NewGFContext(r) - saCtx := core.NewContext(ctx, p.manager) - - if err := saCtx.CheckLogin(); err != nil { - writeErrorResponse(r, err) - return - } - if !saCtx.HasPermission(permission) { - writeErrorResponse(r, core.NewPermissionDeniedError(permission)) - return - } - r.SetCtxVar("satoken", saCtx) - r.Middleware.Next() - } - -} - -// RoleRequired role validation middleware | 角色验证中间件 -func (p *Plugin) RoleRequired(role string) ghttp.HandlerFunc { - return func(r *ghttp.Request) { - ctx := NewGFContext(r) - saCtx := core.NewContext(ctx, p.manager) - - if err := saCtx.CheckLogin(); err != nil { - writeErrorResponse(r, err) - return - } - - if !saCtx.HasRole(role) { - writeErrorResponse(r, core.NewRoleDeniedError(role)) - return - } - - r.SetCtxVar("satoken", saCtx) - r.Middleware.Next() - } -} - -// HandlerAuthMiddleware — Authentication check middleware | 认证校验中间件 -func (p *Plugin) HandlerAuthMiddleware(authFailedFunc ...func(r *ghttp.Request)) ghttp.HandlerFunc { - return func(r *ghttp.Request) { - ctx := NewGFContext(r) - saCtx := core.NewContext(ctx, p.manager) - // Check login | 检查登录 - if err := saCtx.CheckLogin(); err != nil { - if len(authFailedFunc) > 0 && authFailedFunc[0] != nil { - authFailedFunc[0](r) - return - } - writeErrorResponse(r, err) - return - } - - // Store Sa-Token context in GoFrame context | 将Sa-Token上下文存储到GoFrame上下文 - r.SetCtxVar("satoken", saCtx) - - r.Middleware.Next() - } -} - -// HandlerPermissionRequiredMiddleware — Permission check middleware | 权限校验中间件 -func (p *Plugin) HandlerPermissionRequiredMiddleware(middlewareType MiddlewareType, permissions []string, permFailedFunc ...func(r *ghttp.Request)) ghttp.HandlerFunc { - return func(r *ghttp.Request) { - if len(permissions) == 0 { // Skip if no permission required | 无需权限则跳过 - r.Middleware.Next() - return - } - - ctx := NewGFContext(r) - saCtx := core.NewContext(ctx, p.manager) - loginID, err := saCtx.GetLoginID() - if err != nil { - if len(permFailedFunc) > 0 && permFailedFunc[0] != nil { - permFailedFunc[0](r) - return - } - writeErrorResponse(r, err) - return - } - - var hasPerm bool - switch middlewareType { - case MiddlewareTypeOr: - hasPerm = saCtx.GetManager().HasPermissionsOr(loginID, permissions) // OR check | 任一权限满足即可 - case MiddlewareTypeAnd: - hasPerm = saCtx.GetManager().HasPermissionsAnd(loginID, permissions) // AND check | 所有权限都需满足 - default: - hasPerm = false - } - - if !hasPerm { // No permission | 权限不足 - if len(permFailedFunc) > 0 && permFailedFunc[0] != nil { - permFailedFunc[0](r) - return - } - writeErrorResponse(r, core.NewPermissionDeniedError(strings.Join(permissions, ","))) - return - } - - r.Middleware.Next() // Continue | 继续执行 - } -} - -// HandlerRoleRequiredMiddleware — Role check middleware | 角色校验中间件 -func (p *Plugin) HandlerRoleRequiredMiddleware(middlewareType MiddlewareType, roles []string, roleFailedFunc ...func(r *ghttp.Request)) ghttp.HandlerFunc { - return func(r *ghttp.Request) { - if len(roles) == 0 { // Skip if no role required | 无需角色则跳过 - r.Middleware.Next() - return - } - - ctx := NewGFContext(r) - saCtx := core.NewContext(ctx, p.manager) - loginID, err := saCtx.GetLoginID() - if err != nil { - if len(roleFailedFunc) > 0 && roleFailedFunc[0] != nil { - roleFailedFunc[0](r) - return - } - writeErrorResponse(r, err) - return - } - - var hasRole bool - switch middlewareType { - case MiddlewareTypeOr: - hasRole = saCtx.GetManager().HasRolesOr(loginID, roles) // OR mode | 任一角色满足即可 - case MiddlewareTypeAnd: - hasRole = saCtx.GetManager().HasRolesAnd(loginID, roles) // AND mode | 所有角色都需满足 - default: - hasRole = false - } - - if !hasRole { // No required role | 无权限角色 - if len(roleFailedFunc) > 0 && roleFailedFunc[0] != nil { - roleFailedFunc[0](r) - return - } - writeErrorResponse(r, core.NewRoleDeniedError(strings.Join(roles, ","))) - return - } - - r.Middleware.Next() // Continue | 继续执行 - } -} - -// LoginHandler 登录处理器 -func (p *Plugin) LoginHandler(r *ghttp.Request) { - var req struct { - Username string `json:"username"` - Password string `json:"password"` - Device string `json:"device"` - } - - if err := r.Parse(&req); err != nil { - writeErrorResponse(r, core.NewError(core.CodeBadRequest, "invalid request parameters", err)) - return - } - - device := req.Device - if device == "" { - device = "log" - } - - token, err := p.manager.Login(req.Username, device) - if err != nil { - writeErrorResponse(r, core.NewError(core.CodeServerError, "login failed", err)) - return - } - - writeSuccessResponse(r, g.Map{ - "token": token, - }) -} - -// UserInfoHandler user info handler example | 获取用户信息处理器示例 -func (p *Plugin) UserInfoHandler(r *ghttp.Request) { - ctx := NewGFContext(r) - saCtx := core.NewContext(ctx, p.manager) - - loginID, err := saCtx.GetLoginID() - if err != nil { - writeErrorResponse(r, err) - return - } - - // Get user permissions and roles | 获取用户权限和角色 - permissions, _ := p.manager.GetPermissions(loginID) - roles, _ := p.manager.GetRoles(loginID) - - writeSuccessResponse(r, g.Map{ - "loginId": loginID, - "permissions": permissions, - "roles": roles, - }) -} - -// GetSaToken 从GoFrame上下文获取Sa-Token上下文 -func GetSaToken(r *ghttp.Request) (*core.SaTokenContext, bool) { - satoken := r.GetCtx().Value("satoken") - if satoken == nil { - return nil, false - } - ctx, ok := satoken.(*core.SaTokenContext) - return ctx, ok -} - -// ============ Error Handling Helpers | 错误处理辅助函数 ============ - -// writeErrorResponse writes a standardized error response | 写入标准化的错误响应 -func writeErrorResponse(r *ghttp.Request, err error) { - var saErr *core.SaTokenError - var code int - var message string - var httpStatus int - - // Check if it's a SaTokenError | 检查是否为SaTokenError - if errors.As(err, &saErr) { - code = saErr.Code - message = saErr.Message - httpStatus = getHTTPStatusFromCode(code) - } else { - // Handle standard errors | 处理标准错误 - code = core.CodeServerError - message = err.Error() - httpStatus = http.StatusInternalServerError - } - - r.Response.WriteStatusExit(httpStatus, g.Map{ - "code": code, - "message": message, - "error": err.Error(), - }) -} - -// writeSuccessResponse writes a standardized success response | 写入标准化的成功响应 -func writeSuccessResponse(r *ghttp.Request, data interface{}) { - r.Response.WriteStatusExit(http.StatusOK, g.Map{ - "code": core.CodeSuccess, - "message": "success", - "data": data, - }) -} - -// getHTTPStatusFromCode converts Sa-Token error code to HTTP status | 将Sa-Token错误码转换为HTTP状态码 -func getHTTPStatusFromCode(code int) int { - switch code { - case core.CodeNotLogin: - return http.StatusUnauthorized - case core.CodePermissionDenied: - return http.StatusForbidden - case core.CodeBadRequest: - return http.StatusBadRequest - case core.CodeNotFound: - return http.StatusNotFound - case core.CodeServerError: - return http.StatusInternalServerError - default: - return http.StatusInternalServerError - } -} diff --git a/log/gf/log_adaper_gf.go b/log/gf/log_adaper_gf.go index dd57497..a547177 100644 --- a/log/gf/log_adaper_gf.go +++ b/log/gf/log_adaper_gf.go @@ -8,8 +8,15 @@ import ( // GFLogger adapts GoFrame v2 glog.Logger to Sa-Token logger interface | GoFrame v2 glog 适配器 type GFLogger struct { - l *glog.Logger ctx context.Context + l *glog.Logger +} + +func NewGFLogger(ctx context.Context, l *glog.Logger) *GFLogger { + return &GFLogger{ + ctx: ctx, + l: l, + } } // ---- Implement Adapter Interface | 实现 Adapter 接口 ---- diff --git a/pool/ants/pool_adapter_ants.go b/pool/ants/pool_adapter_ants.go index 28227a7..9eaa67d 100644 --- a/pool/ants/pool_adapter_ants.go +++ b/pool/ants/pool_adapter_ants.go @@ -2,8 +2,8 @@ package ants import ( + "fmt" "github.com/click33/sa-token-go/core/config" - "github.com/click33/sa-token-go/core/serror" "github.com/panjf2000/ants/v2" "sync" "time" @@ -78,7 +78,7 @@ func (m *RenewPoolManager) initPool() error { // Submit submits a renewal task | 提交续期任务 func (m *RenewPoolManager) Submit(task func()) error { if !m.started { - return serror.ErrRenewPoolNotStarted + return fmt.Errorf("renew pool not started") } return m.pool.Submit(task) } diff --git a/stputil/stputil.go b/stputil/stputil.go index c3b3c8a..8d7701c 100644 --- a/stputil/stputil.go +++ b/stputil/stputil.go @@ -3,7 +3,6 @@ package stputil import ( "context" "errors" - "fmt" "github.com/click33/sa-token-go/core/adapter" "github.com/click33/sa-token-go/core/config" "github.com/click33/sa-token-go/core/listener" @@ -161,7 +160,7 @@ func GetLoginID(ctx context.Context, tokenValue string, authType ...string) (str return mgr.GetLoginID(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) } -// GetLoginIDNotCheck gets login ID without checking | 获取登录ID(不检查) +// GetLoginIDNotCheck gets login ID without checking | 获取登录ID(不检查登录状态) func GetLoginIDNotCheck(ctx context.Context, tokenValue string, authType ...string) (string, error) { mgr, err := GetManager(authType...) if err != nil { @@ -211,6 +210,21 @@ func Disable(ctx context.Context, loginID interface{}, duration time.Duration, a } } +// DisableByToken disables the account associated with the given token for a duration | 根据指定 Token 封禁其对应的账号 +func DisableByToken(ctx context.Context, tokenValue string, duration time.Duration, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err + } + + loginID, err := mgr.GetLoginIDNotCheck(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + if err != nil { + return err + } + + return mgr.Disable(ctx, loginID, duration) +} + // Untie re-enables a disabled account | 解封账号 func Untie(ctx context.Context, loginID interface{}, authType ...string) error { mgr, err := GetManager(authType...) @@ -225,6 +239,20 @@ func Untie(ctx context.Context, loginID interface{}, authType ...string) error { } } +func UntieByToken(ctx context.Context, tokenValue string, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err + } + + loginID, err := mgr.GetLoginIDNotCheck(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + if err != nil { + return err + } + + return mgr.Untie(ctx, loginID) +} + // IsDisable checks if an account is disabled | 检查账号是否被封禁 func IsDisable(ctx context.Context, loginID interface{}, authType ...string) bool { mgr, err := GetManager(authType...) @@ -239,6 +267,20 @@ func IsDisable(ctx context.Context, loginID interface{}, authType ...string) boo } } +func IsDisableByToken(ctx context.Context, tokenValue string, authType ...string) bool { + mgr, err := GetManager(authType...) + if err != nil { + return false + } + + loginID, err := mgr.GetLoginIDNotCheck(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + if err != nil { + return false + } + + return mgr.IsDisable(ctx, loginID) +} + // GetDisableTime gets remaining disable time in seconds | 获取剩余封禁时间(秒) func GetDisableTime(ctx context.Context, loginID interface{}, authType ...string) (int64, error) { mgr, err := GetManager(authType...) @@ -253,6 +295,20 @@ func GetDisableTime(ctx context.Context, loginID interface{}, authType ...string } } +func GetDisableTimeByToken(ctx context.Context, tokenValue string, authType ...string) (int64, error) { + mgr, err := GetManager(authType...) + if err != nil { + return 0, err + } + + loginID, err := mgr.GetLoginIDNotCheck(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + if err != nil { + return 0, err + } + + return mgr.GetDisableTime(ctx, loginID) +} + // ============ Session Management | Session管理 ============ // GetSession gets session by login ID | 根据登录ID获取Session @@ -319,6 +375,23 @@ func SetPermissions(ctx context.Context, loginID interface{}, permissions []stri } } +// SetPermissionsByToken sets permissions by token | 根据 Token 设置对应账号的权限 +func SetPermissionsByToken(ctx context.Context, tokenValue string, permissions []string, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err + } + + loginID, err := mgr.GetLoginIDNotCheck( + context.WithValue(ctx, config.CtxTokenValue, tokenValue), + ) + if err != nil { + return err + } + + return mgr.SetPermissions(ctx, loginID, permissions) +} + // RemovePermissions removes specified permissions for a login ID | 删除用户指定权限 func RemovePermissions(ctx context.Context, loginID interface{}, permissions []string, authType ...string) error { mgr, err := GetManager(authType...) @@ -333,6 +406,23 @@ func RemovePermissions(ctx context.Context, loginID interface{}, permissions []s } } +// RemovePermissionsByToken removes specified permissions by token | 根据 Token 删除对应账号的指定权限 +func RemovePermissionsByToken(ctx context.Context, tokenValue string, permissions []string, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err + } + + loginID, err := mgr.GetLoginIDNotCheck( + context.WithValue(ctx, config.CtxTokenValue, tokenValue), + ) + if err != nil { + return err + } + + return mgr.RemovePermissions(ctx, loginID, permissions) +} + // GetPermissions gets permission list | 获取权限列表 func GetPermissions(ctx context.Context, loginID interface{}, authType ...string) ([]string, error) { mgr, err := GetManager(authType...) @@ -347,6 +437,23 @@ func GetPermissions(ctx context.Context, loginID interface{}, authType ...string } } +// GetPermissionsByToken gets permission list by token | 根据 Token 获取对应账号的权限列表 +func GetPermissionsByToken(ctx context.Context, tokenValue string, authType ...string) ([]string, error) { + mgr, err := GetManager(authType...) + if err != nil { + return nil, err + } + + loginID, err := mgr.GetLoginIDNotCheck( + context.WithValue(ctx, config.CtxTokenValue, tokenValue), + ) + if err != nil { + return nil, err + } + + return mgr.GetPermissions(ctx, loginID) +} + // HasPermission checks if has specified permission | 检查是否拥有指定权限 func HasPermission(ctx context.Context, loginID interface{}, permissions string, authType ...string) bool { mgr, err := GetManager(authType...) @@ -361,6 +468,21 @@ func HasPermission(ctx context.Context, loginID interface{}, permissions string, } } +// HasPermissionByToken checks if the token has the specified permission | 检查Token是否拥有指定权限 +func HasPermissionByToken(ctx context.Context, tokenValue string, permission string, authType ...string) bool { + mgr, err := GetManager(authType...) + if err != nil { + return false + } + + loginID, err := mgr.GetLoginIDNotCheck(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + if err != nil { + return false + } + + return mgr.HasPermission(ctx, loginID, permission) +} + // HasPermissionsAnd checks if has all permissions (AND logic) | 检查是否拥有所有权限(AND逻辑) func HasPermissionsAnd(ctx context.Context, loginID interface{}, permissions []string, authType ...string) bool { mgr, err := GetManager(authType...) @@ -375,6 +497,21 @@ func HasPermissionsAnd(ctx context.Context, loginID interface{}, permissions []s } } +// HasPermissionsAndByToken checks if the token has all specified permissions | 检查Token是否拥有所有指定权限 +func HasPermissionsAndByToken(ctx context.Context, tokenValue string, permissions []string, authType ...string) bool { + mgr, err := GetManager(authType...) + if err != nil { + return false + } + + loginID, err := mgr.GetLoginIDNotCheck(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + if err != nil { + return false + } + + return mgr.HasPermissionsAnd(ctx, loginID, permissions) +} + // HasPermissionsOr checks if has any permission (OR logic) | 检查是否拥有任一权限(OR逻辑) func HasPermissionsOr(ctx context.Context, loginID interface{}, permissions []string, authType ...string) bool { mgr, err := GetManager(authType...) @@ -389,6 +526,21 @@ func HasPermissionsOr(ctx context.Context, loginID interface{}, permissions []st } } +// HasPermissionsOrByToken checks if the token has any of the specified permissions | 检查Token是否拥有任一指定权限 +func HasPermissionsOrByToken(ctx context.Context, tokenValue string, permissions []string, authType ...string) bool { + mgr, err := GetManager(authType...) + if err != nil { + return false + } + + loginID, err := mgr.GetLoginIDNotCheck(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + if err != nil { + return false + } + + return mgr.HasPermissionsOr(ctx, loginID, permissions) +} + // ============ Role Management | 角色管理 ============ // SetRoles sets roles for a login ID | 设置用户角色 @@ -405,6 +557,23 @@ func SetRoles(ctx context.Context, loginID interface{}, roles []string, authType } } +// SetRolesByToken sets roles by token | 根据 Token 设置对应账号的角色 +func SetRolesByToken(ctx context.Context, tokenValue string, roles []string, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err + } + + loginID, err := mgr.GetLoginIDNotCheck( + context.WithValue(ctx, config.CtxTokenValue, tokenValue), + ) + if err != nil { + return err + } + + return mgr.SetRoles(ctx, loginID, roles) +} + // RemoveRoles removes specified roles for a login ID | 删除用户指定角色 func RemoveRoles(ctx context.Context, loginID interface{}, roles []string, authType ...string) error { mgr, err := GetManager(authType...) @@ -419,6 +588,23 @@ func RemoveRoles(ctx context.Context, loginID interface{}, roles []string, authT } } +// RemoveRolesByToken removes specified roles by token | 根据 Token 删除对应账号的指定角色 +func RemoveRolesByToken(ctx context.Context, tokenValue string, roles []string, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err + } + + loginID, err := mgr.GetLoginIDNotCheck( + context.WithValue(ctx, config.CtxTokenValue, tokenValue), + ) + if err != nil { + return err + } + + return mgr.RemoveRoles(ctx, loginID, roles) +} + // GetRoles gets role list | 获取角色列表 func GetRoles(ctx context.Context, loginID interface{}, authType ...string) ([]string, error) { mgr, err := GetManager(authType...) @@ -433,6 +619,23 @@ func GetRoles(ctx context.Context, loginID interface{}, authType ...string) ([]s } } +// GetRolesByToken gets role list by token | 根据 Token 获取对应账号的角色列表 +func GetRolesByToken(ctx context.Context, tokenValue string, authType ...string) ([]string, error) { + mgr, err := GetManager(authType...) + if err != nil { + return nil, err + } + + loginID, err := mgr.GetLoginIDNotCheck( + context.WithValue(ctx, config.CtxTokenValue, tokenValue), + ) + if err != nil { + return nil, err + } + + return mgr.GetRoles(ctx, loginID) +} + // HasRole checks if has specified role | 检查是否拥有指定角色 func HasRole(ctx context.Context, loginID interface{}, role string, authType ...string) bool { mgr, err := GetManager(authType...) @@ -447,6 +650,23 @@ func HasRole(ctx context.Context, loginID interface{}, role string, authType ... } } +// HasRoleByToken checks if the token has the specified role | 检查 Token 是否拥有指定角色 +func HasRoleByToken(ctx context.Context, tokenValue string, role string, authType ...string) bool { + mgr, err := GetManager(authType...) + if err != nil { + return false + } + + loginID, err := mgr.GetLoginIDNotCheck( + context.WithValue(ctx, config.CtxTokenValue, tokenValue), + ) + if err != nil { + return false + } + + return mgr.HasRole(ctx, loginID, role) +} + // HasRolesAnd checks if has all roles (AND logic) | 检查是否拥有所有角色(AND逻辑) func HasRolesAnd(ctx context.Context, loginID interface{}, roles []string, authType ...string) bool { mgr, err := GetManager(authType...) @@ -461,6 +681,23 @@ func HasRolesAnd(ctx context.Context, loginID interface{}, roles []string, authT } } +// HasRolesAndByToken checks if the token has all specified roles | 检查 Token 是否拥有所有指定角色 +func HasRolesAndByToken(ctx context.Context, tokenValue string, roles []string, authType ...string) bool { + mgr, err := GetManager(authType...) + if err != nil { + return false + } + + loginID, err := mgr.GetLoginIDNotCheck( + context.WithValue(ctx, config.CtxTokenValue, tokenValue), + ) + if err != nil { + return false + } + + return mgr.HasRolesAnd(ctx, loginID, roles) +} + // HasRolesOr 检查是否拥有任一角色(OR) func HasRolesOr(ctx context.Context, loginID interface{}, roles []string, authType ...string) bool { mgr, err := GetManager(authType...) @@ -475,6 +712,23 @@ func HasRolesOr(ctx context.Context, loginID interface{}, roles []string, authTy } } +// HasRolesOrByToken checks if the token has any of the specified roles | 检查 Token 是否拥有任一指定角色 +func HasRolesOrByToken(ctx context.Context, tokenValue string, roles []string, authType ...string) bool { + mgr, err := GetManager(authType...) + if err != nil { + return false + } + + loginID, err := mgr.GetLoginIDNotCheck( + context.WithValue(ctx, config.CtxTokenValue, tokenValue), + ) + if err != nil { + return false + } + + return mgr.HasRolesOr(ctx, loginID, roles) +} + // ============ Token标签 ============ // SetTokenTag 设置Token标签 @@ -812,121 +1066,120 @@ func GetOAuth2Server(ctx context.Context, authType ...string) *oauth2.OAuth2Serv // ============ Check Functions for Token-based operations | 基于Token的检查函数 ============ // CheckDisable checks if the account associated with the token is disabled | 检查Token对应账号是否被封禁 -func CheckDisable(tokenValue string) error { - loginID, err := GetLoginID(tokenValue) - if err != nil { - return err - } - if IsDisable(loginID) { - return fmt.Errorf("account is disabled") - } - return nil -} +//func CheckDisable(ctx context.Context, tokenValue string, authType ...string) error { +// loginID, err := GetLoginID(tokenValue) +// if err != nil { +// return err +// } +// if IsDisable(loginID) { +// return fmt.Errorf("account is disabled") +// } +// return nil +//} // CheckPermission checks if the token has the specified permission | 检查Token是否拥有指定权限 -func CheckPermission(tokenValue string, permission string) error { - loginID, err := GetLoginID(tokenValue) - if err != nil { - return err - } - if !HasPermission(loginID, permission) { - return fmt.Errorf("permission denied: %s", permission) - } - return nil -} +//func CheckPermission(tokenValue string, permission string) error { +// loginID, err := GetLoginID(tokenValue) +// if err != nil { +// return err +// } +// if !HasPermission(loginID, permission) { +// return fmt.Errorf("permission denied: %s", permission) +// } +// return nil +//} // CheckPermissionAnd checks if the token has all specified permissions | 检查Token是否拥有所有指定权限 -func CheckPermissionAnd(tokenValue string, permissions []string) error { - loginID, err := GetLoginID(tokenValue) - if err != nil { - return err - } - if !HasPermissionsAnd(loginID, permissions) { - return fmt.Errorf("permission denied: %v", permissions) - } - return nil -} +//func CheckPermissionAnd(tokenValue string, permissions []string) error { +// loginID, err := GetLoginID(tokenValue) +// if err != nil { +// return err +// } +// if !HasPermissionsAnd(loginID, permissions) { +// return fmt.Errorf("permission denied: %v", permissions) +// } +// return nil +//} // CheckPermissionOr checks if the token has any of the specified permissions | 检查Token是否拥有任一指定权限 -func CheckPermissionOr(tokenValue string, permissions []string) error { - loginID, err := GetLoginID(tokenValue) - if err != nil { - return err - } - if !HasPermissionsOr(loginID, permissions) { - return fmt.Errorf("permission denied: %v", permissions) - } - return nil -} +//func CheckPermissionOr(tokenValue string, permissions []string) error { +// loginID, err := GetLoginID(tokenValue) +// if err != nil { +// return err +// } +// if !HasPermissionsOr(loginID, permissions) { +// return fmt.Errorf("permission denied: %v", permissions) +// } +// return nil +//} // GetPermissionList gets permission list for the token | 获取Token对应的权限列表 -func GetPermissionList(tokenValue string) ([]string, error) { - loginID, err := GetLoginID(tokenValue) - if err != nil { - return nil, err - } - return GetPermissions(loginID) -} +//func GetPermissionList(tokenValue string) ([]string, error) { +// loginID, err := GetLoginID(tokenValue) +// if err != nil { +// return nil, err +// } +// return GetPermissions(loginID) +//} // CheckRole checks if the token has the specified role | 检查Token是否拥有指定角色 -func CheckRole(tokenValue string, role string) error { - loginID, err := GetLoginID(tokenValue) - if err != nil { - return err - } - if !HasRole(loginID, role) { - return fmt.Errorf("role denied: %s", role) - } - return nil -} +//func CheckRole(tokenValue string, role string) error { +// loginID, err := GetLoginID(tokenValue) +// if err != nil { +// return err +// } +// if !HasRole(loginID, role) { +// return fmt.Errorf("role denied: %s", role) +// } +// return nil +//} // CheckRoleAnd checks if the token has all specified roles | 检查Token是否拥有所有指定角色 -func CheckRoleAnd(tokenValue string, roles []string) error { - loginID, err := GetLoginID(tokenValue) - if err != nil { - return err - } - if !HasRolesAnd(loginID, roles) { - return fmt.Errorf("role denied: %v", roles) - } - return nil -} +//func CheckRoleAnd(tokenValue string, roles []string) error { +// loginID, err := GetLoginID(tokenValue) +// if err != nil { +// return err +// } +// if !HasRolesAnd(loginID, roles) { +// return fmt.Errorf("role denied: %v", roles) +// } +// return nil +//} // CheckRoleOr checks if the token has any of the specified roles | 检查Token是否拥有任一指定角色 -func CheckRoleOr(tokenValue string, roles []string) error { - loginID, err := GetLoginID(tokenValue) - if err != nil { - return err - } - if !HasRolesOr(loginID, roles) { - return fmt.Errorf("role denied: %v", roles) - } - return nil -} +//func CheckRoleOr(tokenValue string, roles []string) error { +// loginID, err := GetLoginID(tokenValue) +// if err != nil { +// return err +// } +// if !HasRolesOr(loginID, roles) { +// return fmt.Errorf("role denied: %v", roles) +// } +// return nil +//} // GetRoleList gets role list for the token | 获取Token对应的角色列表 -func GetRoleList(tokenValue string) ([]string, error) { - loginID, err := GetLoginID(tokenValue) - if err != nil { - return nil, err - } - return GetRoles(loginID) -} +//func GetRoleList(tokenValue string) ([]string, error) { +// loginID, err := GetLoginID(tokenValue) +// if err != nil { +// return nil, err +// } +// return GetRoles(loginID) +//} // GetTokenSession gets session for the token | 获取Token对应的Session -func GetTokenSession(tokenValue string) (*session.Session, error) { - return GetSessionByToken(tokenValue) -} +//func GetTokenSession(tokenValue string) (*session.Session, error) { +// return GetSessionByToken(tokenValue) +//} // ============ Internal Helper Methods | 内部辅助方法 ============ // SetManager stores the manager in the global map using the specified autoType | 使用指定的 autoType 将管理器存储在全局 map 中 -func SetManager(mgr *manager.Manager) error { +func SetManager(mgr *manager.Manager) { // Validate and get the autoType value | 验证并获取 autoType 值 validAutoType := getAutoType(mgr.GetConfig().AuthType) // 获取 autoType,默认为 config.DefaultAuthType // Store the manager in the global map with the valid autoType | 使用有效的 autoType 将管理器存储在全局 map 中 globalManagerMap.Store(validAutoType, mgr) - return nil } // GetManager retrieves the manager from the global map using the specified autoType | 使用指定的 autoType 从全局 map 中获取管理器 @@ -938,9 +1191,9 @@ func GetManager(autoType ...string) (*manager.Manager, error) { } // DeleteManager delete the specific manager for the given autoType and releases resources | 删除指定的管理器并释放资源 -func DeleteManager(autoType string) error { +func DeleteManager(autoType ...string) error { // Validate and get the autoType value | 验证并获取 autoType 值 - validAutoType := getAutoType(autoType) // 获取 autoType,默认为 config.DefaultAuthType + validAutoType := getAutoType(autoType...) // 获取 autoType,默认为 config.DefaultAuthType // Load the manager from global map | 从全局 map 中加载管理器 mgr, err := loadManager(validAutoType) if err != nil { From 4fa5d8e03a757b9b2331a5f42c3ecafc3e06da93 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Tue, 23 Dec 2025 15:54:40 +0800 Subject: [PATCH 20/50] =?UTF-8?q?feat():=201=E3=80=81=E6=8F=90=E5=8F=96?= =?UTF-8?q?=E7=8B=AC=E7=AB=8B=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- codec/json/go.mod | 4 - codec/msgpack/go.mod | 2 - core/adapter/log.go | 10 - core/banner/banner_test.go | 383 ------------------ core/builder/builder.go | 106 ++--- core/config/config.go | 21 +- core/config/consts.go | 68 ---- core/dep/adapter.go | 20 - core/dep/dep.go | 120 ------ core/go.mod | 7 +- core/manager/manager.go | 33 +- core/satoken.go | 206 ---------- core/security/nonce.go | 3 +- core/security/refresh_token.go | 2 +- core/session/session.go | 37 -- generator/sgenerator/consts.go | 49 +++ .../generator_adapter_sgenerator.go | 65 +-- integrations/gf/export.go | 10 +- log/gf/go.mod | 2 - log/nop/go.mod | 6 +- .../config_log.go => log/slog/config.go | 6 +- log/slog/consts.go | 26 ++ log/slog/go.mod | 8 - log/slog/log_adaper_slog.go | 93 +++-- .../config_pool.go => pool/ants/config.go | 4 +- pool/ants/consts.go | 14 + pool/ants/go.mod | 4 +- pool/ants/go.sum | 12 + pool/ants/pool_adapter_ants.go | 20 +- storage/memory/go.mod | 4 - storage/memory/memory.go | 6 +- storage/redis/go.mod | 3 - storage/redis/redis.go | 9 +- 33 files changed, 303 insertions(+), 1060 deletions(-) delete mode 100644 core/banner/banner_test.go delete mode 100644 core/dep/adapter.go delete mode 100644 core/dep/dep.go delete mode 100644 core/satoken.go create mode 100644 generator/sgenerator/consts.go rename core/config/config_log.go => log/slog/config.go (97%) create mode 100644 log/slog/consts.go rename core/config/config_pool.go => pool/ants/config.go (98%) create mode 100644 pool/ants/consts.go create mode 100644 pool/ants/go.sum diff --git a/codec/json/go.mod b/codec/json/go.mod index c307e99..0bee238 100644 --- a/codec/json/go.mod +++ b/codec/json/go.mod @@ -1,7 +1,3 @@ module github.com/click33/sa-token-go/codec/json go 1.23.0 - -require github.com/click33/sa-token-go/core v0.1.5 - -replace github.com/click33/sa-token-go/core => ../../core diff --git a/codec/msgpack/go.mod b/codec/msgpack/go.mod index c412f77..e43a9a3 100644 --- a/codec/msgpack/go.mod +++ b/codec/msgpack/go.mod @@ -2,8 +2,6 @@ module github.com/click33/sa-token-go/codec/msgpack go 1.23.0 -replace github.com/click33/sa-token-go/core => ../../core - require github.com/vmihailenco/msgpack/v5 v5.4.1 require ( diff --git a/core/adapter/log.go b/core/adapter/log.go index e0aed39..78a96f4 100644 --- a/core/adapter/log.go +++ b/core/adapter/log.go @@ -1,8 +1,6 @@ // @Author daixk 2025/12/12 10:45:00 package adapter -import "github.com/click33/sa-token-go/core/config" - // Log defines logging behavior abstraction | 日志行为抽象接口 type Log interface { Print(v ...any) // Print log without level | 无级别日志输出 @@ -20,11 +18,3 @@ type Log interface { Error(v ...any) // Print error level log | 输出错误级别日志 Errorf(format string, v ...any) // Print formatted error level log | 输出错误级别格式化日志 } - -// LogControl defines log runtime control behavior | 日志运行时控制接口 -type LogControl interface { - SetLevel(level config.LogLevel) // Set minimum output log level | 设置最小日志输出级别 - SetPrefix(prefix string) // Set log message prefix | 设置日志前缀 - SetStdout(enable bool) // Enable or disable stdout output | 启用或关闭终端输出 - Close() // Release logging resources | 释放日志相关资源 -} diff --git a/core/banner/banner_test.go b/core/banner/banner_test.go deleted file mode 100644 index 509be94..0000000 --- a/core/banner/banner_test.go +++ /dev/null @@ -1,383 +0,0 @@ -package banner - -import ( - "bytes" - "io" - "os" - "runtime" - "strings" - "testing" - - "github.com/click33/sa-token-go/core/config" -) - -// captureOutput captures stdout output for testing -func captureOutput(f func()) string { - old := os.Stdout - r, w, _ := os.Pipe() - os.Stdout = w - - f() - - w.Close() - os.Stdout = old - - var buf bytes.Buffer - io.Copy(&buf, r) - return buf.String() -} - -func TestPrint(t *testing.T) { - output := captureOutput(func() { - Print() - }) - - // Check if output contains expected elements - if !strings.Contains(output, "Sa-Token-Go") { - t.Error("Output should contain 'Sa-Token-Go'") - } - - if !strings.Contains(output, Version) { - t.Errorf("Output should contain version %s", Version) - } - - if !strings.Contains(output, "Go Version") { - t.Error("Output should contain 'Go Version'") - } - - if !strings.Contains(output, runtime.Version()) { - t.Errorf("Output should contain Go version %s", runtime.Version()) - } - - if !strings.Contains(output, "GOOS/GOARCH") { - t.Error("Output should contain 'GOOS/GOARCH'") - } - - expectedOS := runtime.GOOS + "/" + runtime.GOARCH - if !strings.Contains(output, expectedOS) { - t.Errorf("Output should contain OS/ARCH %s", expectedOS) - } -} - -func TestFormatTimeout(t *testing.T) { - tests := []struct { - name string - seconds int64 - expected string - }{ - { - name: "Positive seconds less than a day", - seconds: 3600, - expected: "3600 seconds", - }, - { - name: "Exactly one day", - seconds: 86400, - expected: "86400 seconds (1 days)", - }, - { - name: "Multiple days", - seconds: 259200, // 3 days - expected: "259200 seconds (3 days)", - }, - { - name: "30 days", - seconds: 2592000, - expected: "2592000 seconds (30 days)", - }, - { - name: "Zero means never expire", - seconds: 0, - expected: neverExpire, - }, - { - name: "Negative means no limit", - seconds: -1, - expected: noLimit, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - result := formatTimeout(tt.seconds) - if result != tt.expected { - t.Errorf("formatTimeout(%d) = %s, want %s", tt.seconds, result, tt.expected) - } - }) - } -} - -func TestFormatCount(t *testing.T) { - tests := []struct { - name string - count int64 - expected string - }{ - { - name: "Positive count", - count: 12, - expected: "12", - }, - { - name: "Zero means no limit", - count: 0, - expected: noLimit, - }, - { - name: "Negative means no limit", - count: -1, - expected: noLimit, - }, - { - name: "Large count", - count: 9999, - expected: "9999", - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - result := formatCount(tt.count) - if result != tt.expected { - t.Errorf("formatCount(%d) = %s, want %s", tt.count, result, tt.expected) - } - }) - } -} - -func TestFormatConfigLine(t *testing.T) { - tests := []struct { - name string - label string - value any - contains []string - }{ - { - name: "String value", - label: "Token Name", - value: "sa-token", - contains: []string{ - "Token Name", - "sa-token", - "│", - }, - }, - { - name: "Boolean value", - label: "Auto Renew", - value: true, - contains: []string{ - "Auto Renew", - "true", - }, - }, - { - name: "Integer value", - label: "Max Count", - value: 12, - contains: []string{ - "Max Count", - "12", - }, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - result := formatConfigLine(tt.label, tt.value) - for _, s := range tt.contains { - if !strings.Contains(result, s) { - t.Errorf("formatConfigLine(%s, %v) should contain %s, got: %s", tt.label, tt.value, s, result) - } - } - }) - } -} - -func TestPrintWithConfig(t *testing.T) { - tests := []struct { - name string - config *config.Config - contains []string - }{ - { - name: "Default configuration", - config: config.DefaultConfig(), - contains: []string{ - "Configuration", - "Token Name", - "satoken", // 默认 TokenName - "Token Style", - "uuid", - "Token Timeout", - "30 days", // 2592000 秒 -> 30天 - "Auto Renew", - "Concurrent Login", - "Share Token", - "Max Login Count", - "Read From", // 只有 “Header”,不含 Cookie/Body - "JWT Secret Key", - "(not used)", - }, - }, - { - name: "JWT configuration", - config: &config.Config{ - TokenName: "jwt-token", - Timeout: 3600, - ActiveTimeout: -1, - IsConcurrent: true, - IsShare: false, - MaxLoginCount: 5, - IsReadBody: false, - IsReadHeader: true, - IsReadCookie: false, - TokenStyle: config.TokenStyleJWT, - AutoRenew: true, - JwtSecretKey: "my-secret-key", - IsLog: true, - CookieConfig: &config.CookieConfig{ - Path: "/api", - SameSite: config.SameSiteLax, - HttpOnly: true, - Secure: true, - }, - }, - contains: []string{ - "jwt-token", - "jwt", - "3600 seconds", - "JWT Secret Key", - "*** (configured)", // 当前逻辑始终打印这个 - }, - }, - { - name: "Never expire configuration", - config: &config.Config{ - TokenName: "never-token", - Timeout: 0, - ActiveTimeout: -1, - IsConcurrent: false, - IsShare: true, - MaxLoginCount: -1, - TokenStyle: config.TokenStyleUUID, - CookieConfig: &config.CookieConfig{}, - }, - contains: []string{ - "Never Expire", - "No Limit", - "JWT Secret Key", - "(not used)", - }, - }, - { - name: "JWT without secret key", - config: &config.Config{ - TokenName: "jwt-token", - TokenStyle: config.TokenStyleJWT, - JwtSecretKey: "", - CookieConfig: &config.CookieConfig{}, - }, - contains: []string{ - "JWT Secret Key", - "*** (configured)", // 因为代码不会判断空字符串 - }, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - output := captureOutput(func() { - PrintWithConfig(tt.config) - }) - - for _, s := range tt.contains { - if !strings.Contains(output, s) { - t.Errorf("PrintWithConfig() output should contain '%s'\nGot output:\n%s", s, output) - } - } - - // Check for box drawing characters - if !strings.Contains(output, "┌") || !strings.Contains(output, "└") { - t.Error("Output should contain box drawing characters") - } - }) - } -} - -func TestPrintWithConfigNilCookie(t *testing.T) { - cfg := &config.Config{ - TokenName: "test-token", - TokenStyle: config.TokenStyleSimple, - CookieConfig: nil, // nil cookie config - } - - output := captureOutput(func() { - PrintWithConfig(cfg) - }) - - // Should not panic and should not contain cookie configuration - if strings.Contains(output, "Cookie Path") { - t.Error("Output should not contain Cookie configuration when CookieConfig is nil") - } -} - -func BenchmarkPrint(b *testing.B) { - // Redirect output to discard - old := os.Stdout - os.Stdout, _ = os.Open(os.DevNull) - defer func() { os.Stdout = old }() - - b.ResetTimer() - for i := 0; i < b.N; i++ { - Print() - } -} - -func BenchmarkPrintWithConfig(b *testing.B) { - cfg := config.DefaultConfig() - - // Redirect output to discard - old := os.Stdout - os.Stdout, _ = os.Open(os.DevNull) - defer func() { os.Stdout = old }() - - b.ResetTimer() - for i := 0; i < b.N; i++ { - PrintWithConfig(cfg) - } -} - -func BenchmarkFormatTimeout(b *testing.B) { - for i := 0; i < b.N; i++ { - formatTimeout(2592000) - } -} - -func BenchmarkFormatCount(b *testing.B) { - for i := 0; i < b.N; i++ { - formatCount(12) - } -} - -func BenchmarkFormatConfigLine(b *testing.B) { - for i := 0; i < b.N; i++ { - formatConfigLine("Token Name", "sa-token") - } -} - -func TestPrintWithConfigVisual(t *testing.T) { - PrintWithConfig(config.DefaultConfig()) - -} - -func TestPrintWithConfigMaxRefresh(t *testing.T) { - cfg := config.DefaultConfig() - cfg.Timeout = 10 - cfg.MaxRefresh = 100 - err := cfg.Validate() - if err != nil { - panic(err) - } - PrintWithConfig(cfg) -} diff --git a/core/builder/builder.go b/core/builder/builder.go index 7afd3f2..685b280 100644 --- a/core/builder/builder.go +++ b/core/builder/builder.go @@ -19,29 +19,29 @@ import ( // Builder provides fluent configuration for Sa-Token | Sa-Token 构建器用于流式配置 type Builder struct { - tokenName string // Token name used by client | 客户端 Token 名称 - timeout int64 // Token timeout seconds | Token 过期时间(秒) - maxRefresh int64 // Max auto-refresh duration | 最大无感刷新时间 - renewInterval int64 // Min renewal interval seconds | 最小续期间隔(秒) - activeTimeout int64 // Force offline when idle | 活跃超时时间(秒) - isConcurrent bool // Allow concurrent login | 是否允许并发登录 - isShare bool // Share same token among devices | 是否共用 Token - maxLoginCount int64 // Max concurrent login count | 最大并发登录数 - isReadBody bool // Read token from body | 是否从 Body 读取 Token - isReadHeader bool // Read token from header | 是否从 Header 读取 Token - isReadCookie bool // Read token from cookie | 是否从 Cookie 读取 Token - tokenStyle config.TokenStyle // Token generation style | Token 生成方式 - tokenSessionCheckLogin bool // Check login before Session | 读取 Session 时是否检查登录 - autoRenew bool // Enable renewal | 是否启用自动续期 - jwtSecretKey string // JWT secret key | JWT 密钥 - isLog bool // Enable log output | 是否启用日志 - isPrintBanner bool // Print startup banner | 是否打印启动 Banner - keyPrefix string // Storage key prefix | 存储键前缀 - authType string // Authentication system type | 认证体系类型 - - cookieConfig *config.CookieConfig // Cookie config | Cookie 配置 - renewPoolConfig *config.RenewPoolConfig // Renew pool config | 续期协程池配置 - logConfig *config.LoggerConfig // 日志配置 + tokenName string // Token name used by client | 客户端 Token 名称 + timeout int64 // Token timeout seconds | Token 过期时间(秒) + maxRefresh int64 // Max auto-refresh duration | 最大无感刷新时间 + renewInterval int64 // Min renewal interval seconds | 最小续期间隔(秒) + activeTimeout int64 // Force offline when idle | 活跃超时时间(秒) + isConcurrent bool // Allow concurrent login | 是否允许并发登录 + isShare bool // Share same token among devices | 是否共用 Token + maxLoginCount int64 // Max concurrent login count | 最大并发登录数 + isReadBody bool // Read token from body | 是否从 Body 读取 Token + isReadHeader bool // Read token from header | 是否从 Header 读取 Token + isReadCookie bool // Read token from cookie | 是否从 Cookie 读取 Token + tokenStyle sgenerator.TokenStyle // Token generation style | Token 生成方式 + tokenSessionCheckLogin bool // Check login before Session | 读取 Session 时是否检查登录 + autoRenew bool // Enable renewal | 是否启用自动续期 + jwtSecretKey string // JWT secret key | JWT 密钥 + isLog bool // Enable log output | 是否启用日志 + isPrintBanner bool // Print startup banner | 是否打印启动 Banner + keyPrefix string // Storage key prefix | 存储键前缀 + authType string // Authentication system type | 认证体系类型 + + cookieConfig *config.CookieConfig // Cookie config | Cookie 配置 + renewPoolConfig *ants.RenewPoolConfig // Renew pool config | 续期协程池配置 + logConfig *slog.LoggerConfig // 日志配置 generator adapter.Generator // Token generator | Token 生成器 storage adapter.Storage // Storage adapter | 存储适配器 @@ -67,7 +67,7 @@ func NewBuilder() *Builder { isReadBody: false, isReadHeader: true, isReadCookie: false, - tokenStyle: config.TokenStyleUUID, + tokenStyle: sgenerator.TokenStyleUUID, tokenSessionCheckLogin: true, autoRenew: true, jwtSecretKey: config.DefaultJwtSecretKey, @@ -77,8 +77,8 @@ func NewBuilder() *Builder { authType: config.DefaultAuthType, cookieConfig: config.DefaultCookieConfig(), - renewPoolConfig: config.DefaultRenewPoolConfig(), - logConfig: config.DefaultLoggerConfig(), + renewPoolConfig: ants.DefaultRenewPoolConfig(), + logConfig: slog.DefaultLoggerConfig(), } } @@ -155,7 +155,7 @@ func (b *Builder) IsReadCookie(isRead bool) *Builder { } // TokenStyle sets token generation style | 设置Token风格 -func (b *Builder) TokenStyle(style config.TokenStyle) *Builder { +func (b *Builder) TokenStyle(style sgenerator.TokenStyle) *Builder { b.tokenStyle = style return b } @@ -281,7 +281,7 @@ func (b *Builder) CookieConfig(cfg *config.CookieConfig) *Builder { // RenewPoolMinSize sets the minimum pool size | 设置最小协程数 func (b *Builder) RenewPoolMinSize(size int) *Builder { if b.renewPoolConfig == nil { - b.renewPoolConfig = &config.RenewPoolConfig{} + b.renewPoolConfig = &ants.RenewPoolConfig{} } b.renewPoolConfig.MinSize = size return b @@ -290,7 +290,7 @@ func (b *Builder) RenewPoolMinSize(size int) *Builder { // RenewPoolMaxSize sets the maximum pool size | 设置最大协程数 func (b *Builder) RenewPoolMaxSize(size int) *Builder { if b.renewPoolConfig == nil { - b.renewPoolConfig = &config.RenewPoolConfig{} + b.renewPoolConfig = &ants.RenewPoolConfig{} } b.renewPoolConfig.MaxSize = size return b @@ -299,7 +299,7 @@ func (b *Builder) RenewPoolMaxSize(size int) *Builder { // RenewPoolScaleUpRate sets the scale-up threshold | 设置扩容阈值 func (b *Builder) RenewPoolScaleUpRate(rate float64) *Builder { if b.renewPoolConfig == nil { - b.renewPoolConfig = &config.RenewPoolConfig{} + b.renewPoolConfig = &ants.RenewPoolConfig{} } b.renewPoolConfig.ScaleUpRate = rate return b @@ -308,7 +308,7 @@ func (b *Builder) RenewPoolScaleUpRate(rate float64) *Builder { // RenewPoolScaleDownRate sets the scale-down threshold | 设置缩容阈值 func (b *Builder) RenewPoolScaleDownRate(rate float64) *Builder { if b.renewPoolConfig == nil { - b.renewPoolConfig = &config.RenewPoolConfig{} + b.renewPoolConfig = &ants.RenewPoolConfig{} } b.renewPoolConfig.ScaleDownRate = rate return b @@ -317,7 +317,7 @@ func (b *Builder) RenewPoolScaleDownRate(rate float64) *Builder { // RenewPoolCheckInterval sets the interval for auto-scale checking | 设置自动扩缩容检查间隔 func (b *Builder) RenewPoolCheckInterval(interval time.Duration) *Builder { if b.renewPoolConfig == nil { - b.renewPoolConfig = &config.RenewPoolConfig{} + b.renewPoolConfig = &ants.RenewPoolConfig{} } b.renewPoolConfig.CheckInterval = interval return b @@ -326,7 +326,7 @@ func (b *Builder) RenewPoolCheckInterval(interval time.Duration) *Builder { // RenewPoolExpiry sets the idle worker expiry duration | 设置空闲协程过期时间 func (b *Builder) RenewPoolExpiry(duration time.Duration) *Builder { if b.renewPoolConfig == nil { - b.renewPoolConfig = &config.RenewPoolConfig{} + b.renewPoolConfig = &ants.RenewPoolConfig{} } b.renewPoolConfig.Expiry = duration return b @@ -335,7 +335,7 @@ func (b *Builder) RenewPoolExpiry(duration time.Duration) *Builder { // RenewPoolPrintStatusInterval sets the status printing interval | 设置状态打印间隔 func (b *Builder) RenewPoolPrintStatusInterval(interval time.Duration) *Builder { if b.renewPoolConfig == nil { - b.renewPoolConfig = &config.RenewPoolConfig{} + b.renewPoolConfig = &ants.RenewPoolConfig{} } b.renewPoolConfig.PrintStatusInterval = interval return b @@ -344,7 +344,7 @@ func (b *Builder) RenewPoolPrintStatusInterval(interval time.Duration) *Builder // RenewPoolPreAlloc sets whether to pre-allocate memory | 设置是否预分配内存 func (b *Builder) RenewPoolPreAlloc(preAlloc bool) *Builder { if b.renewPoolConfig == nil { - b.renewPoolConfig = &config.RenewPoolConfig{} + b.renewPoolConfig = &ants.RenewPoolConfig{} } b.renewPoolConfig.PreAlloc = preAlloc return b @@ -353,14 +353,14 @@ func (b *Builder) RenewPoolPreAlloc(preAlloc bool) *Builder { // RenewPoolNonBlocking sets whether the pool works in non-blocking mode | 设置是否为非阻塞模式 func (b *Builder) RenewPoolNonBlocking(nonBlocking bool) *Builder { if b.renewPoolConfig == nil { - b.renewPoolConfig = &config.RenewPoolConfig{} + b.renewPoolConfig = &ants.RenewPoolConfig{} } b.renewPoolConfig.NonBlocking = nonBlocking return b } // RenewPoolConfig sets the token renewal pool configuration | 设置完整的Token续期池配置 -func (b *Builder) RenewPoolConfig(cfg *config.RenewPoolConfig) *Builder { +func (b *Builder) RenewPoolConfig(cfg *ants.RenewPoolConfig) *Builder { b.renewPoolConfig = cfg return b } @@ -368,7 +368,7 @@ func (b *Builder) RenewPoolConfig(cfg *config.RenewPoolConfig) *Builder { // LoggerPath sets the log directory path | 设置日志文件目录 func (b *Builder) LoggerPath(path string) *Builder { if b.logConfig == nil { - b.logConfig = &config.LoggerConfig{} + b.logConfig = &slog.LoggerConfig{} } b.logConfig.Path = path return b @@ -377,7 +377,7 @@ func (b *Builder) LoggerPath(path string) *Builder { // LoggerFileFormat sets the log file naming format | 设置日志文件命名格式 func (b *Builder) LoggerFileFormat(format string) *Builder { if b.logConfig == nil { - b.logConfig = &config.LoggerConfig{} + b.logConfig = &slog.LoggerConfig{} } b.logConfig.FileFormat = format return b @@ -386,16 +386,16 @@ func (b *Builder) LoggerFileFormat(format string) *Builder { // LoggerPrefix sets the log line prefix | 设置日志前缀 func (b *Builder) LoggerPrefix(prefix string) *Builder { if b.logConfig == nil { - b.logConfig = &config.LoggerConfig{} + b.logConfig = &slog.LoggerConfig{} } b.logConfig.Prefix = prefix return b } // LoggerLevel sets the minimum output log level | 设置日志最低输出级别 -func (b *Builder) LoggerLevel(level config.LogLevel) *Builder { +func (b *Builder) LoggerLevel(level slog.LogLevel) *Builder { if b.logConfig == nil { - b.logConfig = &config.LoggerConfig{} + b.logConfig = &slog.LoggerConfig{} } b.logConfig.Level = level return b @@ -404,7 +404,7 @@ func (b *Builder) LoggerLevel(level config.LogLevel) *Builder { // LoggerTimeFormat sets the timestamp format | 设置时间戳格式 func (b *Builder) LoggerTimeFormat(format string) *Builder { if b.logConfig == nil { - b.logConfig = &config.LoggerConfig{} + b.logConfig = &slog.LoggerConfig{} } b.logConfig.TimeFormat = format return b @@ -413,7 +413,7 @@ func (b *Builder) LoggerTimeFormat(format string) *Builder { // LoggerStdout sets whether to print logs to console | 设置是否输出到控制台 func (b *Builder) LoggerStdout(stdout bool) *Builder { if b.logConfig == nil { - b.logConfig = &config.LoggerConfig{} + b.logConfig = &slog.LoggerConfig{} } b.logConfig.Stdout = stdout return b @@ -422,7 +422,7 @@ func (b *Builder) LoggerStdout(stdout bool) *Builder { // LoggerRotateSize sets the file size threshold for log rotation (bytes) | 设置日志文件大小滚动阈值(字节) func (b *Builder) LoggerRotateSize(size int64) *Builder { if b.logConfig == nil { - b.logConfig = &config.LoggerConfig{} + b.logConfig = &slog.LoggerConfig{} } b.logConfig.RotateSize = size return b @@ -431,7 +431,7 @@ func (b *Builder) LoggerRotateSize(size int64) *Builder { // LoggerRotateExpire sets the rotation interval by time duration | 设置文件时间滚动间隔 func (b *Builder) LoggerRotateExpire(expire time.Duration) *Builder { if b.logConfig == nil { - b.logConfig = &config.LoggerConfig{} + b.logConfig = &slog.LoggerConfig{} } b.logConfig.RotateExpire = expire return b @@ -440,7 +440,7 @@ func (b *Builder) LoggerRotateExpire(expire time.Duration) *Builder { // LoggerRotateBackupLimit sets the maximum number of rotated backup files | 设置最大备份文件数量 func (b *Builder) LoggerRotateBackupLimit(limit int) *Builder { if b.logConfig == nil { - b.logConfig = &config.LoggerConfig{} + b.logConfig = &slog.LoggerConfig{} } b.logConfig.RotateBackupLimit = limit return b @@ -449,14 +449,14 @@ func (b *Builder) LoggerRotateBackupLimit(limit int) *Builder { // LoggerRotateBackupDays sets the retention days for old log files | 设置备份文件保留天数 func (b *Builder) LoggerRotateBackupDays(days int) *Builder { if b.logConfig == nil { - b.logConfig = &config.LoggerConfig{} + b.logConfig = &slog.LoggerConfig{} } b.logConfig.RotateBackupDays = days return b } // LoggerConfig sets complete logger configuration | 设置完整的日志配置 -func (b *Builder) LoggerConfig(cfg *config.LoggerConfig) *Builder { +func (b *Builder) LoggerConfig(cfg *slog.LoggerConfig) *Builder { b.logConfig = cfg return b } @@ -505,7 +505,7 @@ func (b *Builder) SetCustomRoleListFunc(f func(ctx context.Context, loginID stri // Jwt sets TokenStyle to JWT and sets secret key | 设置为JWT模式并指定密钥 func (b *Builder) Jwt(secret string) *Builder { - b.tokenStyle = config.TokenStyleJWT + b.tokenStyle = sgenerator.TokenStyleJWT b.jwtSecretKey = secret return b } @@ -573,7 +573,7 @@ func (b *Builder) Build() *manager.Manager { // 如果generator为nil,则初始化默认generator if b.generator == nil { - b.generator = sgenerator.NewGenerator(cfg) + b.generator = sgenerator.NewGenerator(b.timeout, b.tokenStyle, b.jwtSecretKey) } // 如果storage为nil,则初始化默认storage if b.storage == nil { @@ -587,7 +587,7 @@ func (b *Builder) Build() *manager.Manager { // 日志 if b.isLog { if b.logConfig == nil { - b.logConfig = config.DefaultLoggerConfig() + b.logConfig = slog.DefaultLoggerConfig() } b.log, err = slog.NewLoggerWithConfig(b.logConfig) if err != nil { @@ -600,7 +600,7 @@ func (b *Builder) Build() *manager.Manager { // 续期池 if b.autoRenew && b.pool == nil { if b.renewPoolConfig == nil { - b.renewPoolConfig = config.DefaultRenewPoolConfig() + b.renewPoolConfig = ants.DefaultRenewPoolConfig() } // Validate configuration | 验证配置 err = b.renewPoolConfig.Validate() diff --git a/core/config/config.go b/core/config/config.go index b4aeb50..ea0696e 100644 --- a/core/config/config.go +++ b/core/config/config.go @@ -2,6 +2,7 @@ package config import ( "fmt" + "github.com/click33/sa-token-go/generator/sgenerator" "strings" ) @@ -41,7 +42,7 @@ type Config struct { IsReadCookie bool // TokenStyle Token generation style | Token生成风格 - TokenStyle TokenStyle + TokenStyle sgenerator.TokenStyle // TokenSessionCheckLogin Whether to check if Token-Session is kicked out when logging in (true=check, false=skip) | 登录时是否检查Token-Session是否被踢下线(true=检查,false=不检查) TokenSessionCheckLogin bool @@ -103,7 +104,7 @@ func DefaultConfig() *Config { IsReadBody: false, IsReadHeader: true, IsReadCookie: false, - TokenStyle: TokenStyleUUID, + TokenStyle: sgenerator.TokenStyleUUID, TokenSessionCheckLogin: true, AutoRenew: true, JwtSecretKey: "", @@ -133,7 +134,7 @@ func (c *Config) Validate() error { } // Check JwtSecretKey if TokenStyle is JWT | 如果 Token 风格为 JWT,则检查密钥是否设置 - if c.TokenStyle == TokenStyleJWT && c.JwtSecretKey == "" { + if c.TokenStyle == sgenerator.TokenStyleJWT && c.JwtSecretKey == "" { return fmt.Errorf("JwtSecretKey is required when TokenStyle is JWT") } @@ -277,7 +278,7 @@ func (c *Config) SetIsReadCookie(isReadCookie bool) *Config { } // SetTokenStyle Set Token generation style | 设置Token风格 -func (c *Config) SetTokenStyle(style TokenStyle) *Config { +func (c *Config) SetTokenStyle(style sgenerator.TokenStyle) *Config { c.TokenStyle = style return c } @@ -360,18 +361,6 @@ func (c *Config) checkNoLimits() error { return nil } -// IsValidTokenStyle checks if the TokenStyle is valid | 检查TokenStyle是否有效 -func (ts TokenStyle) IsValidTokenStyle() bool { - switch ts { - case TokenStyleUUID, TokenStyleSimple, TokenStyleRandom32, - TokenStyleRandom64, TokenStyleRandom128, TokenStyleJWT, - TokenStyleHash, TokenStyleTimestamp, TokenStyleTik: - return true - default: - return false - } -} - // DefaultCookieConfig returns the log Cookie configuration | 返回默认的 Cookie 配置 func DefaultCookieConfig() *CookieConfig { return &CookieConfig{ diff --git a/core/config/consts.go b/core/config/consts.go index 0a15178..e0e9d40 100644 --- a/core/config/consts.go +++ b/core/config/consts.go @@ -1,37 +1,11 @@ // @Author daixk 2025/12/7 15:34:00 package config -import "time" - const ( CtxAutoType = "CtxAutoType" CtxTokenValue = "CtxTokenValue" ) -// TokenStyle Token generation style | Token生成风格 -type TokenStyle string - -const ( - // TokenStyleUUID UUID style | UUID风格 - TokenStyleUUID TokenStyle = "uuid" - // TokenStyleSimple Simple random string | 简单随机字符串 - TokenStyleSimple TokenStyle = "simple" - // TokenStyleRandom32 32-bit random string | 32位随机字符串 - TokenStyleRandom32 TokenStyle = "random32" - // TokenStyleRandom64 64-bit random string | 64位随机字符串 - TokenStyleRandom64 TokenStyle = "random64" - // TokenStyleRandom128 128-bit random string | 128位随机字符串 - TokenStyleRandom128 TokenStyle = "random128" - // TokenStyleJWT JWT style | JWT风格 - TokenStyleJWT TokenStyle = "jwt" - // TokenStyleHash SHA256 hash-based style | SHA256哈希风格 - TokenStyleHash TokenStyle = "hash" - // TokenStyleTimestamp Timestamp-based style | 时间戳风格 - TokenStyleTimestamp TokenStyle = "timestamp" - // TokenStyleTik Short ID style (like TikTok) | Tik风格短ID(类似抖音) - TokenStyleTik TokenStyle = "tik" -) - // SameSiteMode Cookie SameSite attribute values | Cookie的SameSite属性值 type SameSiteMode string @@ -55,45 +29,3 @@ const ( NoLimit = -1 // No limit flag | 不限制标志 DefaultJwtSecretKey = "" ) - -// LogLevel defines severity level | 日志级别定义 -type LogLevel int - -const ( - LevelDebug LogLevel = iota + 1 // Debug level | 调试级别 - LevelInfo // Info level | 信息级别 - LevelWarn // Warn level | 警告级别 - LevelError // Error level | 错误级别(最高) -) - -const ( - DefaultPrefix = "[SA-TOKEN-GO] " // Default log prefix | 默认日志前缀 - DefaultFileFormat = "SA-TOKEN-GO_{Y}-{m}-{d}.log" // Default log filename format | 默认文件命名格式 - DefaultTimeFormat = "2006-01-02 15:04:05" // Default time format | 默认时间格式 - DefaultDirName = "sa_token_go_logs" // Default log directory name | 默认日志目录名 - DefaultBaseName = "SA-TOKEN-GO" // Default log filename prefix | 默认日志文件基础前缀 - DefaultRotateSize = 10 * 1024 * 1024 // Rotate threshold (10MB) | 文件滚动大小阈值 - DefaultRotateExpire = 24 * time.Hour // Rotate by time interval (1 day) | 时间滚动间隔 - DefaultRotateBackupLimit = 10 // Max number of backups | 最大备份数量 - DefaultRotateBackupDays = 7 // Retain logs for 7 days | 备份保留天数 -) - -// Default configuration constants | 默认配置常量 -const ( - DefaultMinSize = 100 // Minimum pool size | 最小协程数 - DefaultMaxSize = 2000 // Maximum pool size | 最大协程数 - DefaultScaleUpRate = 0.8 // Scale-up threshold | 扩容阈值 - DefaultScaleDownRate = 0.3 // Scale-down threshold | 缩容阈值 - DefaultCheckInterval = time.Minute // Interval for auto-scaling checks | 检查间隔 - DefaultExpiry = 10 * time.Second // Idle worker expiry duration | 空闲协程过期时间 -) - -// Constants for token generation | Token生成常量 -const ( - DefaultJWTSecret = "log-secret-key" // Should be overridden in production | 生产环境应覆盖 - TikTokenLength = 11 // TikTok-style short ID length | Tik风格短ID长度 - TikCharset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" - HashRandomBytesLen = 16 // Random bytes length for hash token | 哈希Token的随机字节长度 - TimestampRandomLen = 8 // Random bytes length for timestamp token | 时间戳Token的随机字节长度 - DefaultSimpleLength = 16 // Default simple token length | 默认简单Token长度 -) diff --git a/core/dep/adapter.go b/core/dep/adapter.go deleted file mode 100644 index b854e08..0000000 --- a/core/dep/adapter.go +++ /dev/null @@ -1,20 +0,0 @@ -// @Author daixk 2025/12/14 21:11:00 -package dep - -//import "github.com/click33/sa-token-go/core/adapter" -// -//type LoggerProvider interface { -// Logger() adapter.Log -//} -// -//type StorageProvider interface { -// Storage() adapter.Storage -//} -// -//type SerializerProvider interface { -// Serializer() adapter.Codec -//} -// -//type PoolProvider interface { -// Pool() adapter.Pool -//} diff --git a/core/dep/dep.go b/core/dep/dep.go deleted file mode 100644 index a607eb9..0000000 --- a/core/dep/dep.go +++ /dev/null @@ -1,120 +0,0 @@ -// @Author daixk 2025/12/7 19:53:00 -package dep - -//import ( -// "errors" -// -// codec_json "github.com/click33/sa-token-go/codec/json" -// "github.com/click33/sa-token-go/core/adapter" -// "github.com/click33/sa-token-go/log/nop" -// "github.com/click33/sa-token-go/pool/ants" -// "github.com/click33/sa-token-go/storage/memory" -//) -// -//// Dep Dependency manager containing serializer, logger, storage and pool | 依赖管理器,包含序列化器、日志器、存储适配器和协程池组件 -//type Dep struct { -// storage adapter.Storage // Storage adapter (Redis, Memory, etc.) | 存储适配器(如 Redis、Memory) -// serializer adapter.Codec // Codec adapter for encoding and decoding operations | 编解码器适配器 -// logger adapter.Log // Log adapter for logging operations | 日志适配器 -// pool adapter.Pool // Async task pool component | 异步任务协程池组件 -//} -// -//// NewDep Creates a new Dep instance with strict parameter checking | 创建一个 Dep 实例(严格校验参数) -//func NewDep(serializer adapter.Codec, logger adapter.Log, storage adapter.Storage, pool adapter.Pool) (*Dep, error) { -// if serializer == nil { -// return nil, fmt.Errorf("serializer cannot be nil") // Serializer cannot be nil | 序列化器不能为空 -// } -// if logger == nil { -// return nil, fmt.Errorf("logger cannot be nil") // Logger cannot be nil | 日志实现不能为空 -// } -// if storage == nil { -// return nil, fmt.Errorf("storage cannot be nil") // Storage cannot be nil | 存储实现不能为空 -// } -// -// return &Dep{ -// serializer: serializer, -// logger: logger, -// storage: storage, -// pool: pool, -// }, nil -//} -// -//// NewDefaultDep Creates a new Dep instance with default implementations | 创建一个使用默认实现的 Dep 实例 -//func NewDefaultDep() *Dep { -// return &Dep{ -// serializer: codec_json.NewJSONSerializer(), -// logger: nop.NewNopLogger(), -// storage: memory.NewStorage(), -// pool: ants.NewRenewPoolManagerWithDefaultConfig(), -// } -//} -// -//func (d *Dep) SetSerializer(serializer adapter.Codec) { -// if serializer == nil { -// serializer = codec_json.NewJSONSerializer() -// } -// d.serializer = serializer -//} -// -//func (d *Dep) GetSerializer() adapter.Codec { -// return d.serializer -//} -// -//func (d *Dep) ResetSerializer() { -// d.serializer = codec_json.NewJSONSerializer() -//} -// -//func (d *Dep) SetLogger(logger adapter.Log) { -// if logger == nil { -// logger = nop.NewNopLogger() -// } -// d.logger = logger -//} -// -//func (d *Dep) GetLogger() adapter.Log { -// return d.logger -//} -// -//func (d *Dep) ResetLogger() { -// d.logger = nop.NewNopLogger() -//} -// -//func (d *Dep) SetStorage(storage adapter.Storage) { -// if storage == nil { -// storage = memory.NewStorage() -// } -// d.storage = storage -//} -// -//func (d *Dep) GetStorage() adapter.Storage { -// return d.storage -//} -// -//func (d *Dep) ResetStorage() { -// d.storage = memory.NewStorage() -//} -// -//func (d *Dep) SetPool(pool adapter.Pool) { -// d.pool = pool // pool 允许为 nil -//} -// -//func (d *Dep) GetPool() adapter.Pool { -// return d.pool -//} -// -//func (d *Dep) ResetPool() { -// d.pool = nil -//} -// -//// ResetAll resets all dependencies to default | 重置所有依赖 -//func (d *Dep) ResetAll() { -// d.serializer = codec_json.NewJSONSerializer() -// d.logger = nop.NewNopLogger() -// d.storage = memory.NewStorage() -// d.pool = nil -//} -// -//func (d *Dep) Logger() adapter.Log { return d.logger } -//func (d *Dep) Storage() adapter.Storage { return d.storage } -//func (d *Dep) Serializer() adapter.Codec { return d.serializer } -//func (d *Dep) Pool() adapter.Pool { return d.pool } diff --git a/core/go.mod b/core/go.mod index d3197cf..55501dd 100644 --- a/core/go.mod +++ b/core/go.mod @@ -1,8 +1,3 @@ module github.com/click33/sa-token-go/core -go 1.23.0 - -require ( - github.com/golang-jwt/jwt/v5 v5.2.2 - github.com/google/uuid v1.6.0 -) \ No newline at end of file +go 1.23.0 \ No newline at end of file diff --git a/core/manager/manager.go b/core/manager/manager.go index 5790c2c..1567aea 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -58,7 +58,7 @@ func NewManager(cfg *config.Config, generator adapter.Generator, storage adapter // generator if generator == nil { - generator = sgenerator.NewGenerator(cfg) + generator = sgenerator.NewGenerator(cfg.Timeout, cfg.TokenStyle, cfg.JwtSecretKey) } // Use in-memory storage if storage is nil | 如果未传入存储实现,则使用内存存储 @@ -565,10 +565,35 @@ func (m *Manager) GetDisableTime(ctx context.Context, loginID string) (int64, er // ============ Session Management | Session管理 ============ -// GetSession Gets session by login ID | 获取Session -func (m *Manager) GetSession(ctx context.Context, loginID string) (*session.Session, error) { - sess, err := session.Load(ctx, loginID, m) +// GetSession gets session by login ID | 获取 Session +func (m *Manager) GetSession(_ context.Context, loginID string) (*session.Session, error) { + if loginID == "" { + return nil, fmt.Errorf("session id cannot be empty") + } + + key := m.config.KeyPrefix + m.config.AuthType + session.SessionKeyPrefix + loginID + data, err := m.GetStorage().Get(key) if err != nil { + return nil, err + } + + // 如果找到数据,解码到新分配的 session 对象 + var sess *session.Session + if data != nil { + raw, err := utils.ToBytes(data) + if err != nil { + return nil, err + } + + // 直接初始化对象再解码 + sess = &session.Session{} + if err := m.GetCodec().Decode(raw, sess); err != nil { + return nil, fmt.Errorf("failed to decode session: %w", err) + } + } + + // 没找到就创建新的 + if sess == nil { sess = session.NewSession(m.config.AuthType, m.config.KeyPrefix, loginID, m.storage, m.serializer) } diff --git a/core/satoken.go b/core/satoken.go deleted file mode 100644 index 7a7e4ed..0000000 --- a/core/satoken.go +++ /dev/null @@ -1,206 +0,0 @@ -package core - -//import ( -// "time" -// -// "github.com/click33/sa-token-go/core/adapter" -// "github.com/click33/sa-token-go/core/builder" -// "github.com/click33/sa-token-go/core/config" -// "github.com/click33/sa-token-go/core/context" -// "github.com/click33/sa-token-go/core/listener" -// "github.com/click33/sa-token-go/core/manager" -// "github.com/click33/sa-token-go/core/oauth2" -// "github.com/click33/sa-token-go/core/security" -// "github.com/click33/sa-token-go/core/session" -// "github.com/click33/sa-token-go/core/utils" -//) -// -//// ============ Exported Types | 导出的类型 ============ -//// Export main types and functions for external use | 导出主要类型和函数,方便外部使用 -// -//// Configuration related types | 配置相关类型 -//type ( -// Config = config.Config -// CookieConfig = config.CookieConfig -// LoggerConfig = config.LoggerConfig -// RenewPoolConfig = config.RenewPoolConfig -// -// TokenStyle = config.TokenStyle -// SameSiteMode = config.SameSiteMode -// LogLevel = config.LogLevel -//) -// -//// Token style constants | Token风格常量 -//const ( -// TokenStyleUUID = config.TokenStyleUUID -// TokenStyleSimple = config.TokenStyleSimple -// TokenStyleRandom32 = config.TokenStyleRandom32 -// TokenStyleRandom64 = config.TokenStyleRandom64 -// TokenStyleRandom128 = config.TokenStyleRandom128 -// TokenStyleJWT = config.TokenStyleJWT -// TokenStyleHash = config.TokenStyleHash -// TokenStyleTimestamp = config.TokenStyleTimestamp -// TokenStyleTik = config.TokenStyleTik -//) -// -//// Adapter interfaces | 适配器接口 -//type ( -// Codec = adapter.Codec -// Generator = adapter.Generator -// Log = adapter.Log -// Pool = adapter.Pool -// Storage = adapter.Storage -// RequestContext = adapter.RequestContext -//) -// -//// Core types | 核心类型 -//type ( -// Builder = builder.Builder -// -// Manager = manager.Manager -// TokenInfo = manager.TokenInfo -// -// Session = session.Session -// -// SaTokenContext = context.SaTokenContext -// -// NonceManager = security.NonceManager -// -// AccessTokenInfo = security.AccessTokenInfo -// RefreshTokenInfo = security.RefreshTokenInfo -// RefreshTokenManager = security.RefreshTokenManager -// -// OAuth2Client = oauth2.Client -// OAuth2Server = oauth2.OAuth2Server -// OAuth2AccessToken = oauth2.AccessToken -// OAuth2GrantType = oauth2.GrantType -//) -// -//// Event related types | 事件相关类型 -//type ( -// EventListener = listener.Listener -// EventManager = listener.Manager -// EventData = listener.EventData -// Event = listener.Event -// ListenerFunc = listener.ListenerFunc -// ListenerConfig = listener.ListenerConfig -//) -// -//// Event constants | 事件常量 -//const ( -// EventLogin = listener.EventLogin -// EventLogout = listener.EventLogout -// EventKickout = listener.EventKickout -// EventDisable = listener.EventDisable -// EventUntie = listener.EventUntie -// EventRenew = listener.EventRenew -// EventCreateSession = listener.EventCreateSession -// EventDestroySession = listener.EventDestroySession -// EventPermissionCheck = listener.EventPermissionCheck -// EventRoleCheck = listener.EventRoleCheck -// EventAll = listener.EventAll -//) -// -//const ( -// GrantTypeAuthorizationCode = oauth2.GrantTypeAuthorizationCode -// GrantTypeRefreshToken = oauth2.GrantTypeRefreshToken -// GrantTypeClientCredentials = oauth2.GrantTypeClientCredentials -// GrantTypePassword = oauth2.GrantTypePassword -//) -// -//// ============ Utility Functions | 工具函数 ============ -// -//var ( -// // String utilities | 字符串工具 -// RandomString = utils.RandomString -// RandomNumericString = utils.RandomNumericString -// RandomAlphanumeric = utils.RandomAlphanumeric -// IsEmpty = utils.IsEmpty -// IsNotEmpty = utils.IsNotEmpty -// DefaultString = utils.DefaultString -// -// // Slice utilities | 切片工具 -// ContainsString = utils.ContainsString -// RemoveString = utils.RemoveString -// UniqueStrings = utils.UniqueStrings -// MergeStrings = utils.MergeStrings -// FilterStrings = utils.FilterStrings -// MapStrings = utils.MapStrings -// -// // Pattern matching | 模式匹配 -// MatchPattern = utils.MatchPattern -// -// // Duration utilities | 时长工具 -// FormatDuration = utils.FormatDuration -// ParseDuration = utils.ParseDuration -// -// // Hash & Encoding | 哈希和编码 -// SHA256Hash = utils.SHA256Hash -// Base64Encode = utils.Base64Encode -// Base64Decode = utils.Base64Decode -//) -// -//// ============ Factory Functions | 工厂函数 ============ -// -//// DefaultConfig Returns log configuration | 返回默认配置 -//func DefaultConfig() *Config { -// return config.DefaultConfig() -//} -// -//func DefaultLoggerConfig() *LoggerConfig { -// return config.DefaultLoggerConfig() -//} -// -//// NewManager Creates a new authentication manager | 创建新的认证管理器 -//func NewManager(cfg *Config, generator adapter.Generator, storage adapter.Storage, serializer adapter.Codec, logger adapter.Log, pool adapter.Pool) *Manager { -// return manager.NewManager(cfg, generator, storage, serializer, logger, pool) -//} -// -//// NewContext Creates a new Sa-Token context | 创建新的Sa-Token上下文 -//func NewContext(ctx RequestContext, mgr *Manager) *SaTokenContext { -// return context.NewContext(ctx, mgr) -//} -// -//// NewSession Creates a new session | 创建新的Session -//func NewSession(id string, storage Storage, prefix string) *Session { -// return session.NewSession(id, storage, prefix) -//} -// -//// LoadSession Loads an existing session | 加载已存在的Session -//func LoadSession(id string, storage Storage, prefix string) (*Session, error) { -// return session.Load(id, storage, prefix) -//} -// -//// NewTokenGenerator Creates a new token generator | 创建新的Token生成器 -//func NewTokenGenerator(cfg *Config) *TokenGenerator { -// return token.NewGenerator(cfg) -//} -// -//// NewEventManager Creates a new event manager | 创建新的事件管理器 -//func NewEventManager() *EventManager { -// return listener.NewManager() -//} -// -//// NewBuilder Creates a new builder for fluent configuration | 创建新的Builder构建器(用于流式配置) -//func NewBuilder() *Builder { -// return builder.NewBuilder() -//} -// -//// NewNonceManager Creates a new nonce manager | 创建新的Nonce管理器 -//func NewNonceManager(storage Storage, prefix string, ttl ...int64) *NonceManager { -// var duration time.Duration -// if len(ttl) > 0 && ttl[0] > 0 { -// duration = time.Duration(ttl[0]) * time.Second -// } -// return security.NewNonceManager(storage, prefix, duration) -//} -// -//// NewRefreshTokenManager Creates a new refresh token manager | 创建新的刷新令牌管理器 -//func NewRefreshTokenManager(storage Storage, prefix string, cfg *Config) *RefreshTokenManager { -// return security.NewRefreshTokenManager(storage, prefix, manager.TokenKeyPrefix, cfg) -//} -// -//// NewOAuth2Server Creates a new OAuth2 server | 创建新的OAuth2服务器 -//func NewOAuth2Server(storage Storage, prefix string) *OAuth2Server { -// return oauth2.NewOAuth2Server(storage, prefix) -//} diff --git a/core/security/nonce.go b/core/security/nonce.go index 73cdf90..c0c2660 100644 --- a/core/security/nonce.go +++ b/core/security/nonce.go @@ -5,7 +5,6 @@ import ( "encoding/hex" "fmt" "github.com/click33/sa-token-go/core/adapter" - "github.com/click33/sa-token-go/core/serror" "github.com/click33/sa-token-go/storage/memory" "sync" "time" @@ -88,7 +87,7 @@ func (nm *NonceManager) Verify(nonce string) bool { // VerifyAndConsume Verifies and consumes nonce, returns error if invalid | 验证并消费nonce,无效时返回错误 func (nm *NonceManager) VerifyAndConsume(nonce string) error { if !nm.Verify(nonce) { - return serror.ErrInvalidNonce // Invalid nonce error | 无效nonce错误 + return ErrInvalidNonce // Invalid nonce error | 无效nonce错误 } return nil } diff --git a/core/security/refresh_token.go b/core/security/refresh_token.go index 78ad9c0..7816bf1 100644 --- a/core/security/refresh_token.go +++ b/core/security/refresh_token.go @@ -60,7 +60,7 @@ func NewRefreshTokenManager( ) *RefreshTokenManager { if tokenGen == nil { - tokenGen = sgenerator.NewGenerator(nil) + tokenGen = sgenerator.NewDefaultGenerator() } if accessTTL == 0 { accessTTL = DefaultAccessTTL diff --git a/core/session/session.go b/core/session/session.go index e69394d..089720c 100644 --- a/core/session/session.go +++ b/core/session/session.go @@ -1,11 +1,8 @@ package session import ( - "context" "fmt" codec_json "github.com/click33/sa-token-go/codec/json" - "github.com/click33/sa-token-go/core/manager" - "github.com/click33/sa-token-go/core/utils" "github.com/click33/sa-token-go/storage/memory" "sync" "time" @@ -254,37 +251,3 @@ func (s *Session) saveKeepTTL() error { return s.storage.Set(key, data, ttl) } - -// ============ Static Methods | 静态方法 ============ - -// Load Loads session from storage | 从存储加载 -func Load(_ context.Context, id string, m *manager.Manager) (*Session, error) { - if id == "" { - return nil, fmt.Errorf("session id cannot be empty") - } - if m == nil { - return nil, fmt.Errorf("manager cannot be empty") - } - - data, err := m.GetStorage().Get(m.GetConfig().KeyPrefix + m.GetConfig().AuthType + SessionKeyPrefix + id) - if err != nil { - return nil, err - } - if data == nil { - return nil, fmt.Errorf("session not found") - } - - raw, err := utils.ToBytes(data) - if err != nil { - return nil, err - } - - var session Session - if err = m.GetCodec().Decode(raw, &session); err != nil { - return nil, fmt.Errorf("%w: %v", fmt.Errorf("failed to decode data"), err) - } - - session.storage = m.GetStorage() - session.serializer = m.GetCodec() - return &session, nil -} diff --git a/generator/sgenerator/consts.go b/generator/sgenerator/consts.go new file mode 100644 index 0000000..7e49567 --- /dev/null +++ b/generator/sgenerator/consts.go @@ -0,0 +1,49 @@ +// @Author daixk 2025/12/22 16:08:00 +package sgenerator + +// TokenStyle Token generation style | Token生成风格 +type TokenStyle string + +const ( + // TokenStyleUUID UUID style | UUID风格 + TokenStyleUUID TokenStyle = "uuid" + // TokenStyleSimple Simple random string | 简单随机字符串 + TokenStyleSimple TokenStyle = "simple" + // TokenStyleRandom32 32-bit random string | 32位随机字符串 + TokenStyleRandom32 TokenStyle = "random32" + // TokenStyleRandom64 64-bit random string | 64位随机字符串 + TokenStyleRandom64 TokenStyle = "random64" + // TokenStyleRandom128 128-bit random string | 128位随机字符串 + TokenStyleRandom128 TokenStyle = "random128" + // TokenStyleJWT JWT style | JWT风格 + TokenStyleJWT TokenStyle = "jwt" + // TokenStyleHash SHA256 hash-based style | SHA256哈希风格 + TokenStyleHash TokenStyle = "hash" + // TokenStyleTimestamp Timestamp-based style | 时间戳风格 + TokenStyleTimestamp TokenStyle = "timestamp" + // TokenStyleTik Short ID style (like TikTok) | Tik风格短ID(类似抖音) + TokenStyleTik TokenStyle = "tik" +) + +// IsValidTokenStyle checks if the TokenStyle is valid | 检查TokenStyle是否有效 +func (ts TokenStyle) IsValidTokenStyle() bool { + switch ts { + case TokenStyleUUID, TokenStyleSimple, TokenStyleRandom32, + TokenStyleRandom64, TokenStyleRandom128, TokenStyleJWT, + TokenStyleHash, TokenStyleTimestamp, TokenStyleTik: + return true + default: + return false + } +} + +// Constants for token generation | Token生成常量 +const ( + DefaultTimeout = 2592000 // 30 days (seconds) | 30天(秒) + DefaultJWTSecret = "log-secret-key" // Should be overridden in production | 生产环境应覆盖 + TikTokenLength = 11 // TikTok-style short ID length | Tik风格短ID长度 + TikCharset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" + HashRandomBytesLen = 16 // Random bytes length for hash token | 哈希Token的随机字节长度 + TimestampRandomLen = 8 // Random bytes length for timestamp token | 时间戳Token的随机字节长度 + DefaultSimpleLength = 16 // Default simple token length | 默认简单Token长度 +) diff --git a/generator/sgenerator/generator_adapter_sgenerator.go b/generator/sgenerator/generator_adapter_sgenerator.go index a666570..37b8e3a 100644 --- a/generator/sgenerator/generator_adapter_sgenerator.go +++ b/generator/sgenerator/generator_adapter_sgenerator.go @@ -6,7 +6,6 @@ import ( "crypto/sha256" "encoding/hex" "fmt" - "github.com/click33/sa-token-go/core/config" "github.com/click33/sa-token-go/core/utils" "github.com/golang-jwt/jwt/v5" "github.com/google/uuid" @@ -16,16 +15,26 @@ import ( // Generator Token generator | Token生成器 type Generator struct { - config *config.Config + timeout int64 + tokenStyle TokenStyle + jwtSecretKey string } // NewGenerator Creates a new token generator | 创建新的Token生成器 -func NewGenerator(cfg *config.Config) *Generator { - if cfg == nil { - cfg = config.DefaultConfig() +func NewGenerator(timeout int64, tokenStyle TokenStyle, jwtSecretKey string) *Generator { + return &Generator{ + timeout: timeout, + tokenStyle: tokenStyle, + jwtSecretKey: jwtSecretKey, } +} + +// NewDefaultGenerator Creates a new token generator | 创建新的默认的Token生成器 +func NewDefaultGenerator() *Generator { return &Generator{ - config: cfg, + timeout: DefaultTimeout, + tokenStyle: TokenStyleUUID, + jwtSecretKey: TikCharset, } } @@ -37,24 +46,24 @@ func (g *Generator) Generate(loginID string, device string) (string, error) { return "", fmt.Errorf("loginID cannot be empty") } - switch g.config.TokenStyle { - case config.TokenStyleUUID: + switch g.tokenStyle { + case TokenStyleUUID: return g.generateUUID() - case config.TokenStyleSimple: - return g.generateSimple(config.DefaultSimpleLength) - case config.TokenStyleRandom32: + case TokenStyleSimple: + return g.generateSimple(DefaultSimpleLength) + case TokenStyleRandom32: return g.generateSimple(32) - case config.TokenStyleRandom64: + case TokenStyleRandom64: return g.generateSimple(64) - case config.TokenStyleRandom128: + case TokenStyleRandom128: return g.generateSimple(128) - case config.TokenStyleJWT: + case TokenStyleJWT: return g.generateJWT(loginID, device) - case config.TokenStyleHash: + case TokenStyleHash: return g.generateHash(loginID, device) - case config.TokenStyleTimestamp: + case TokenStyleTimestamp: return g.generateTimestamp(loginID, device) - case config.TokenStyleTik: + case TokenStyleTik: return g.generateTik() default: return g.generateUUID() @@ -75,7 +84,7 @@ func (g *Generator) generateUUID() (string, error) { // generateSimple Generates simple random string token | 生成简单随机字符串Token func (g *Generator) generateSimple(length int) (string, error) { if length <= 0 { - length = config.DefaultSimpleLength + length = DefaultSimpleLength } token := utils.RandomString(length) @@ -95,8 +104,8 @@ func (g *Generator) generateJWT(loginID string, device string) (string, error) { } // Add expiration if timeout is configured | 如果配置了超时时间则添加过期时间 - if g.config.Timeout > 0 { - claims["exp"] = now.Add(time.Duration(g.config.Timeout) * time.Second).Unix() + if g.timeout > 0 { + claims["exp"] = now.Add(time.Duration(g.timeout) * time.Second).Unix() } token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) @@ -112,10 +121,10 @@ func (g *Generator) generateJWT(loginID string, device string) (string, error) { // getJWTSecret Gets JWT secret key with fallback | 获取JWT密钥(带默认值) func (g *Generator) getJWTSecret() string { - if g.config.JwtSecretKey != "" { - return g.config.JwtSecretKey + if g.jwtSecretKey != "" { + return g.jwtSecretKey } - return config.DefaultJWTSecret + return DefaultJWTSecret } // ============ JWT Helper Methods | JWT辅助方法 ============ @@ -171,7 +180,7 @@ func (g *Generator) GetLoginIDFromJWT(tokenStr string) (string, error) { // generateHash Generates SHA256 hash-based token | 生成SHA256哈希风格Token func (g *Generator) generateHash(loginID string, device string) (string, error) { // Combine loginID, device, timestamp and random bytes | 组合 loginID、device、时间戳和随机字节 - randomBytes := make([]byte, config.HashRandomBytesLen) + randomBytes := make([]byte, HashRandomBytesLen) if _, err := rand.Read(randomBytes); err != nil { return "", fmt.Errorf("failed to generate random bytes: %w", err) } @@ -190,7 +199,7 @@ func (g *Generator) generateHash(loginID string, device string) (string, error) // generateTimestamp Generates timestamp-based token | 生成时间戳风格Token func (g *Generator) generateTimestamp(loginID string, device string) (string, error) { // Format: timestamp_loginID_random | 格式:时间戳_loginID_随机数 - randomBytes := make([]byte, config.TimestampRandomLen) + randomBytes := make([]byte, TimestampRandomLen) if _, err := rand.Read(randomBytes); err != nil { return "", fmt.Errorf("failed to generate random bytes: %w", err) } @@ -202,15 +211,15 @@ func (g *Generator) generateTimestamp(loginID string, device string) (string, er // generateTik Generates short ID style token (like TikTok) | 生成Tik风格短ID Token(类似抖音) func (g *Generator) generateTik() (string, error) { - result := make([]byte, config.TikTokenLength) - charsetLen := int64(len(config.TikCharset)) + result := make([]byte, TikTokenLength) + charsetLen := int64(len(TikCharset)) for i := range result { num, err := rand.Int(rand.Reader, big.NewInt(charsetLen)) if err != nil { return "", fmt.Errorf("failed to generate random number: %w", err) } - result[i] = config.TikCharset[num.Int64()] + result[i] = TikCharset[num.Int64()] } return string(result), nil diff --git a/integrations/gf/export.go b/integrations/gf/export.go index c08b1c5..f27b98c 100644 --- a/integrations/gf/export.go +++ b/integrations/gf/export.go @@ -4,6 +4,8 @@ import ( "github.com/click33/sa-token-go/core/builder" "github.com/click33/sa-token-go/core/config" "github.com/click33/sa-token-go/core/manager" + "github.com/click33/sa-token-go/log/slog" + "github.com/click33/sa-token-go/pool/ants" "github.com/click33/sa-token-go/stputil" ) @@ -31,10 +33,10 @@ func NewDefaultConfig() *config.Config { return config.DefaultConfig() } -func DefaultLoggerConfig() *config.LoggerConfig { - return config.DefaultLoggerConfig() +func DefaultLoggerConfig() *slog.LoggerConfig { + return slog.DefaultLoggerConfig() } -func DefaultDefaultRenewPoolConfig() *config.RenewPoolConfig { - return config.DefaultRenewPoolConfig() +func DefaultDefaultRenewPoolConfig() *ants.RenewPoolConfig { + return ants.DefaultRenewPoolConfig() } diff --git a/log/gf/go.mod b/log/gf/go.mod index db51706..9c3455c 100644 --- a/log/gf/go.mod +++ b/log/gf/go.mod @@ -23,5 +23,3 @@ require ( golang.org/x/sys v0.35.0 // indirect golang.org/x/text v0.28.0 // indirect ) - -replace github.com/click33/sa-token-go/core => ../../core diff --git a/log/nop/go.mod b/log/nop/go.mod index aa9defe..114fb31 100644 --- a/log/nop/go.mod +++ b/log/nop/go.mod @@ -1,7 +1,3 @@ module github.com/click33/sa-token-go/log/nop -go 1.23.0 - -require github.com/click33/sa-token-go/core v0.1.5 - -replace github.com/click33/sa-token-go/core => ../../core \ No newline at end of file +go 1.23.0 \ No newline at end of file diff --git a/core/config/config_log.go b/log/slog/config.go similarity index 97% rename from core/config/config_log.go rename to log/slog/config.go index 7615da3..f97424f 100644 --- a/core/config/config_log.go +++ b/log/slog/config.go @@ -1,5 +1,5 @@ -// @Author daixk 2025/12/12 11:23:00 -package config +// @Author daixk 2025/12/22 15:55:00 +package slog import ( "time" @@ -26,7 +26,7 @@ func DefaultLoggerConfig() *LoggerConfig { FileFormat: DefaultFileFormat, Prefix: DefaultPrefix, Level: LevelInfo, - Stdout: true, + Stdout: false, RotateSize: DefaultRotateSize, RotateExpire: DefaultRotateExpire, RotateBackupLimit: DefaultRotateBackupLimit, diff --git a/log/slog/consts.go b/log/slog/consts.go new file mode 100644 index 0000000..b0dcdfd --- /dev/null +++ b/log/slog/consts.go @@ -0,0 +1,26 @@ +// @Author daixk 2025/12/22 15:56:00 +package slog + +import "time" + +// LogLevel defines severity level | 日志级别定义 +type LogLevel int + +const ( + LevelDebug LogLevel = iota + 1 // Debug level | 调试级别 + LevelInfo // Info level | 信息级别 + LevelWarn // Warn level | 警告级别 + LevelError // Error level | 错误级别(最高) +) + +const ( + DefaultPrefix = "[SA-TOKEN-GO] " // Default log prefix | 默认日志前缀 + DefaultFileFormat = "SA-TOKEN-GO_{Y}-{m}-{d}.log" // Default log filename format | 默认文件命名格式 + DefaultTimeFormat = "2006-01-02 15:04:05" // Default time format | 默认时间格式 + DefaultDirName = "sa_token_go_logs" // Default log directory name | 默认日志目录名 + DefaultBaseName = "SA-TOKEN-GO" // Default log filename prefix | 默认日志文件基础前缀 + DefaultRotateSize = 10 * 1024 * 1024 // Rotate threshold (10MB) | 文件滚动大小阈值 + DefaultRotateExpire = 24 * time.Hour // Rotate by time interval (1 day) | 时间滚动间隔 + DefaultRotateBackupLimit = 10 // Max number of backups | 最大备份数量 + DefaultRotateBackupDays = 7 // Retain logs for 7 days | 备份保留天数 +) diff --git a/log/slog/go.mod b/log/slog/go.mod index 55c416a..96a365e 100644 --- a/log/slog/go.mod +++ b/log/slog/go.mod @@ -2,11 +2,3 @@ module github.com/click33/sa-token-go/log/slog go 1.23.0 -require github.com/click33/sa-token-go/core v0.1.5 - -require ( - github.com/panjf2000/ants/v2 v2.11.3 // indirect - golang.org/x/sync v0.16.0 // indirect -) - -replace github.com/click33/sa-token-go/core => ../../core diff --git a/log/slog/log_adaper_slog.go b/log/slog/log_adaper_slog.go index 106de07..5a1a3e5 100644 --- a/log/slog/log_adaper_slog.go +++ b/log/slog/log_adaper_slog.go @@ -4,7 +4,6 @@ package slog import ( "bytes" "fmt" - "github.com/click33/sa-token-go/core/config" "math/rand" "os" "path/filepath" @@ -20,8 +19,8 @@ import ( type Logger struct { // ---- Config & State ---- - cfg *config.LoggerConfig // Logger configuration | 日志配置 - cfgMu sync.RWMutex // Config lock | 配置锁 + cfg *LoggerConfig // Logger configuration | 日志配置 + cfgMu sync.RWMutex // Config lock | 配置锁 // ---- File IO ---- fileMu sync.Mutex // File write lock | 文件写锁 @@ -47,7 +46,7 @@ type Logger struct { } // NewLoggerWithConfig creates a logger instance | 使用配置创建日志器 -func NewLoggerWithConfig(cfg *config.LoggerConfig) (*Logger, error) { +func NewLoggerWithConfig(cfg *LoggerConfig) (*Logger, error) { newCfg, err := prepareConfig(cfg) if err != nil { return nil, err @@ -71,7 +70,7 @@ func NewLoggerWithConfig(cfg *config.LoggerConfig) (*Logger, error) { } // write handles simple log output | 输出普通日志 -func (l *Logger) write(level config.LogLevel, args ...any) { +func (l *Logger) write(level LogLevel, args ...any) { if atomic.LoadUint32(&l.closed) != 0 { return } @@ -83,7 +82,7 @@ func (l *Logger) write(level config.LogLevel, args ...any) { } // writef handles formatted log output | 输出格式化日志 -func (l *Logger) writef(level config.LogLevel, format string, args ...any) { +func (l *Logger) writef(level LogLevel, format string, args ...any) { if atomic.LoadUint32(&l.closed) != 0 { return } @@ -114,7 +113,7 @@ func (l *Logger) enqueue(b []byte) { // ---- Build Log Line ---- // buildLine builds complete log line | 构建完整日志行 -func (l *Logger) buildLine(level config.LogLevel, args ...any) []byte { +func (l *Logger) buildLine(level LogLevel, args ...any) []byte { cfg := l.currentCfg() buf := getBuf() @@ -183,10 +182,10 @@ func (l *Logger) appendValue(buf *bytes.Buffer, v any) { } case time.Time: - buf.WriteString(val.Format(config.DefaultTimeFormat)) + buf.WriteString(val.Format(DefaultTimeFormat)) default: - fmt.Fprint(buf, val) + _, _ = fmt.Fprint(buf, val) } } @@ -257,7 +256,7 @@ func (l *Logger) writeToFile(b []byte) { // ---- File Handling ---- // ensureLogFile ensures a log file is open | 确保日志文件存在 -func (l *Logger) ensureLogFile(now time.Time, cfg config.LoggerConfig) error { +func (l *Logger) ensureLogFile(now time.Time, cfg LoggerConfig) error { if l.curFile == nil { return l.openNewFile(now, cfg) } @@ -268,7 +267,7 @@ func (l *Logger) ensureLogFile(now time.Time, cfg config.LoggerConfig) error { } // openNewFile opens a new log file | 打开新日志文件 -func (l *Logger) openNewFile(now time.Time, cfg config.LoggerConfig) error { +func (l *Logger) openNewFile(now time.Time, cfg LoggerConfig) error { name := l.formatFileName(now, cfg) path := filepath.Join(cfg.Path, name) @@ -285,7 +284,7 @@ func (l *Logger) openNewFile(now time.Time, cfg config.LoggerConfig) error { } // shouldRotate checks rotation conditions | 检查是否需要切分 -func (l *Logger) shouldRotate(now time.Time, cfg config.LoggerConfig) bool { +func (l *Logger) shouldRotate(now time.Time, cfg LoggerConfig) bool { if cfg.RotateSize > 0 && l.curSize >= cfg.RotateSize { return true } @@ -296,7 +295,7 @@ func (l *Logger) shouldRotate(now time.Time, cfg config.LoggerConfig) bool { } // rotate rotates the current log file | 日志切分逻辑 -func (l *Logger) rotate(cfg config.LoggerConfig) error { +func (l *Logger) rotate(cfg LoggerConfig) error { if l.curFile == nil { return nil } @@ -326,11 +325,11 @@ func (l *Logger) rotate(cfg config.LoggerConfig) error { } // cleanup removes expired logs | 清理过期/多余日志文件 -func (l *Logger) cleanup(cfg config.LoggerConfig) { +func (l *Logger) cleanup(cfg LoggerConfig) { // base is the fixed prefix of log files for this logger | base 为该 Logger 对应日志文件的固定前缀 base := normalizeBaseName(cfg.FileFormat) if base == "" { - base = config.DefaultBaseName + base = DefaultBaseName } files, _ := filepath.Glob(filepath.Join(cfg.Path, "*.log")) @@ -390,10 +389,10 @@ func (l *Logger) cleanup(cfg config.LoggerConfig) { } // formatFileName generates filename | 生成日志文件名 -func (l *Logger) formatFileName(t time.Time, cfg config.LoggerConfig) string { +func (l *Logger) formatFileName(t time.Time, cfg LoggerConfig) string { name := cfg.FileFormat if name == "" { - return fmt.Sprintf("%s_%s.log", config.DefaultBaseName, t.Format("2006-01-02")) + return fmt.Sprintf("%s_%s.log", DefaultBaseName, t.Format("2006-01-02")) } r := strings.NewReplacer( @@ -412,7 +411,7 @@ func (l *Logger) formatFileName(t time.Time, cfg config.LoggerConfig) string { // ---- Runtime Control ---- // SetLevel updates minimum level | 动态更新日志级别 -func (l *Logger) SetLevel(level config.LogLevel) { +func (l *Logger) SetLevel(level LogLevel) { l.cfgMu.Lock() if l.cfg != nil { l.cfg.Level = level @@ -439,7 +438,7 @@ func (l *Logger) SetStdout(enable bool) { } // SetConfig replaces config and reopens log file | 动态替换配置并重新创建日志文件 -func (l *Logger) SetConfig(cfg *config.LoggerConfig) { +func (l *Logger) SetConfig(cfg *LoggerConfig) { newCfg, err := prepareConfig(cfg) if err != nil { return @@ -534,30 +533,30 @@ func getFileSize(f *os.File) int64 { } // prepareConfig applies defaults and ensures directory | 应用默认配置并确保目录存在 -func prepareConfig(cfg *config.LoggerConfig) (*config.LoggerConfig, error) { +func prepareConfig(cfg *LoggerConfig) (*LoggerConfig, error) { if cfg == nil { - cfg = &config.LoggerConfig{} + cfg = &LoggerConfig{} } c := *cfg // copy if c.TimeFormat == "" { - c.TimeFormat = config.DefaultTimeFormat + c.TimeFormat = DefaultTimeFormat } if c.FileFormat == "" { - c.FileFormat = config.DefaultFileFormat + c.FileFormat = DefaultFileFormat } if c.Prefix == "" { - c.Prefix = config.DefaultPrefix + c.Prefix = DefaultPrefix } if c.RotateSize <= 0 { - c.RotateSize = config.DefaultRotateSize + c.RotateSize = DefaultRotateSize } if c.RotateExpire < 0 { c.RotateExpire = 0 } if c.RotateBackupLimit <= 0 { - c.RotateBackupLimit = config.DefaultRotateBackupLimit + c.RotateBackupLimit = DefaultRotateBackupLimit } if c.RotateBackupDays < 0 { c.RotateBackupDays = 0 @@ -573,26 +572,26 @@ func prepareConfig(cfg *config.LoggerConfig) (*config.LoggerConfig, error) { } // currentCfg returns a config snapshot | 返回当前配置快照 -func (l *Logger) currentCfg() config.LoggerConfig { +func (l *Logger) currentCfg() LoggerConfig { l.cfgMu.RLock() defer l.cfgMu.RUnlock() if l.cfg == nil { - return config.LoggerConfig{} + return LoggerConfig{} } return *l.cfg } // levelString converts log level to string | 将日志级别转换为字符串 -func (l *Logger) levelString(level config.LogLevel) string { +func (l *Logger) levelString(level LogLevel) string { switch level { - case config.LevelDebug: + case LevelDebug: return "DEBUG" - case config.LevelInfo: + case LevelInfo: return "INFO" - case config.LevelWarn: + case LevelWarn: return "WARN" - case config.LevelError: + case LevelError: return "ERROR" default: return "UNKNOWN" @@ -602,7 +601,7 @@ func (l *Logger) levelString(level config.LogLevel) string { // normalizeBaseName extracts static name | 提取基础日志文件名前缀 func normalizeBaseName(format string) string { if format == "" { - return config.DefaultBaseName + return DefaultBaseName } // 去掉 .log 后缀 | strip ".log" suffix @@ -617,13 +616,13 @@ func normalizeBaseName(format string) string { name = strings.TrimSpace(name) if name == "" { - return config.DefaultBaseName + return DefaultBaseName } return name } // ensureDefaultPath ensures the log directory exists; if not set, uses the log path | 确保日志目录存在;如果未设置则使用默认路径 -func ensureDefaultPath(cfg *config.LoggerConfig) string { +func ensureDefaultPath(cfg *LoggerConfig) string { if cfg.Path != "" { return cfg.Path } @@ -631,20 +630,20 @@ func ensureDefaultPath(cfg *config.LoggerConfig) string { if err != nil { wd = "." } - path := filepath.Join(wd, config.DefaultDirName) + path := filepath.Join(wd, DefaultDirName) _ = os.MkdirAll(path, 0755) return path } // ---- Logging API ---- -func (l *Logger) Print(v ...any) { l.write(config.LevelInfo, v...) } -func (l *Logger) Printf(f string, v ...any) { l.writef(config.LevelInfo, f, v...) } -func (l *Logger) Debug(v ...any) { l.write(config.LevelDebug, v...) } -func (l *Logger) Debugf(f string, v ...any) { l.writef(config.LevelDebug, f, v...) } -func (l *Logger) Info(v ...any) { l.write(config.LevelInfo, v...) } -func (l *Logger) Infof(f string, v ...any) { l.writef(config.LevelInfo, f, v...) } -func (l *Logger) Warn(v ...any) { l.write(config.LevelWarn, v...) } -func (l *Logger) Warnf(f string, v ...any) { l.writef(config.LevelWarn, f, v...) } -func (l *Logger) Error(v ...any) { l.write(config.LevelError, v...) } -func (l *Logger) Errorf(f string, v ...any) { l.writef(config.LevelError, f, v...) } +func (l *Logger) Print(v ...any) { l.write(LevelInfo, v...) } +func (l *Logger) Printf(f string, v ...any) { l.writef(LevelInfo, f, v...) } +func (l *Logger) Debug(v ...any) { l.write(LevelDebug, v...) } +func (l *Logger) Debugf(f string, v ...any) { l.writef(LevelDebug, f, v...) } +func (l *Logger) Info(v ...any) { l.write(LevelInfo, v...) } +func (l *Logger) Infof(f string, v ...any) { l.writef(LevelInfo, f, v...) } +func (l *Logger) Warn(v ...any) { l.write(LevelWarn, v...) } +func (l *Logger) Warnf(f string, v ...any) { l.writef(LevelWarn, f, v...) } +func (l *Logger) Error(v ...any) { l.write(LevelError, v...) } +func (l *Logger) Errorf(f string, v ...any) { l.writef(LevelError, f, v...) } diff --git a/core/config/config_pool.go b/pool/ants/config.go similarity index 98% rename from core/config/config_pool.go rename to pool/ants/config.go index 05401d7..e4dcc0a 100644 --- a/core/config/config_pool.go +++ b/pool/ants/config.go @@ -1,5 +1,5 @@ -// @Author daixk 2025/12/12 11:21:00 -package config +// @Author daixk 2025/12/22 15:56:00 +package ants import ( "fmt" diff --git a/pool/ants/consts.go b/pool/ants/consts.go new file mode 100644 index 0000000..9a7e82b --- /dev/null +++ b/pool/ants/consts.go @@ -0,0 +1,14 @@ +// @Author daixk 2025/12/22 15:56:00 +package ants + +import "time" + +// Default configuration constants | 默认配置常量 +const ( + DefaultMinSize = 100 // Minimum pool size | 最小协程数 + DefaultMaxSize = 2000 // Maximum pool size | 最大协程数 + DefaultScaleUpRate = 0.8 // Scale-up threshold | 扩容阈值 + DefaultScaleDownRate = 0.3 // Scale-down threshold | 缩容阈值 + DefaultCheckInterval = time.Minute // Interval for auto-scaling checks | 检查间隔 + DefaultExpiry = 10 * time.Second // Idle worker expiry duration | 空闲协程过期时间 +) diff --git a/pool/ants/go.mod b/pool/ants/go.mod index e5b4b08..83fecf9 100644 --- a/pool/ants/go.mod +++ b/pool/ants/go.mod @@ -2,6 +2,6 @@ module github.com/click33/sa-token-go/pool/ants go 1.23.0 -require github.com/click33/sa-token-go/core v0.1.5 +require github.com/panjf2000/ants/v2 v2.11.3 -replace github.com/click33/sa-token-go/core => ../../core \ No newline at end of file +require golang.org/x/sync v0.11.0 // indirect diff --git a/pool/ants/go.sum b/pool/ants/go.sum new file mode 100644 index 0000000..6a67abe --- /dev/null +++ b/pool/ants/go.sum @@ -0,0 +1,12 @@ +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg= +github.com/panjf2000/ants/v2 v2.11.3/go.mod h1:8u92CYMUc6gyvTIw8Ru7Mt7+/ESnJahz5EVtqfrilek= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= +golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pool/ants/pool_adapter_ants.go b/pool/ants/pool_adapter_ants.go index 9eaa67d..662bf51 100644 --- a/pool/ants/pool_adapter_ants.go +++ b/pool/ants/pool_adapter_ants.go @@ -3,7 +3,6 @@ package ants import ( "fmt" - "github.com/click33/sa-token-go/core/config" "github.com/panjf2000/ants/v2" "sync" "time" @@ -11,17 +10,16 @@ import ( // RenewPoolManager manages a dynamic scaling goroutine pool for token renewal tasks | 续期任务协程池管理器 type RenewPoolManager struct { - pool *ants.Pool // ants pool instance | ants 协程池实例 - config *config.RenewPoolConfig // Configuration object | 池配置对象 - globalConfig *config.Config // Global authentication configuration | 全局认证配置 - mu sync.Mutex // Synchronization lock | 互斥锁 - stopCh chan struct{} // Stop signal channel | 停止信号通道 - started bool // Indicates if pool manager is running | 是否已启动 + pool *ants.Pool // ants pool instance | ants 协程池实例 + config *RenewPoolConfig // Configuration object | 池配置对象 + mu sync.Mutex // Synchronization lock | 互斥锁 + stopCh chan struct{} // Stop signal channel | 停止信号通道 + started bool // Indicates if pool manager is running | 是否已启动 } func NewRenewPoolManagerWithDefaultConfig() *RenewPoolManager { mgr := &RenewPoolManager{ - config: config.DefaultRenewPoolConfig(), + config: DefaultRenewPoolConfig(), stopCh: make(chan struct{}), started: true, } @@ -32,12 +30,12 @@ func NewRenewPoolManagerWithDefaultConfig() *RenewPoolManager { } // NewRenewPoolManagerWithConfig creates manager with config | 使用配置创建续期池管理器 -func NewRenewPoolManagerWithConfig(cfg *config.RenewPoolConfig) (*RenewPoolManager, error) { +func NewRenewPoolManagerWithConfig(cfg *RenewPoolConfig) (*RenewPoolManager, error) { if cfg == nil { - cfg = config.DefaultRenewPoolConfig() + cfg = DefaultRenewPoolConfig() } if cfg.MinSize <= 0 { - cfg.MinSize = config.DefaultMinSize + cfg.MinSize = DefaultMinSize } if cfg.MaxSize < cfg.MinSize { cfg.MaxSize = cfg.MinSize diff --git a/storage/memory/go.mod b/storage/memory/go.mod index ef4bdfc..26f18fc 100644 --- a/storage/memory/go.mod +++ b/storage/memory/go.mod @@ -1,7 +1,3 @@ module github.com/click33/sa-token-go/storage/memory go 1.23.0 - -require github.com/click33/sa-token-go/core v0.1.5 - -replace github.com/click33/sa-token-go/core => ../../core diff --git a/storage/memory/memory.go b/storage/memory/memory.go index 09c206d..696aa49 100644 --- a/storage/memory/memory.go +++ b/storage/memory/memory.go @@ -6,8 +6,6 @@ import ( "strings" "sync" "time" - - "github.com/click33/sa-token-go/core/adapter" ) var ( @@ -37,12 +35,12 @@ type Storage struct { } // NewStorage 创建内存存储 -func NewStorage() adapter.Storage { +func NewStorage() *Storage { return NewStorageWithCleanupInterval(time.Minute) } // NewStorageWithCleanupInterval 创建内存存储 -func NewStorageWithCleanupInterval(interval time.Duration) adapter.Storage { +func NewStorageWithCleanupInterval(interval time.Duration) *Storage { ctx, cancel := context.WithCancel(context.Background()) s := &Storage{ data: make(map[string]*item), diff --git a/storage/redis/go.mod b/storage/redis/go.mod index 4901b81..347de15 100644 --- a/storage/redis/go.mod +++ b/storage/redis/go.mod @@ -3,7 +3,6 @@ module github.com/click33/sa-token-go/storage/redis go 1.23.0 require ( - github.com/click33/sa-token-go/core v0.1.5 github.com/redis/go-redis/v9 v9.5.1 ) @@ -11,5 +10,3 @@ require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect ) - -replace github.com/click33/sa-token-go/core => ../../core diff --git a/storage/redis/redis.go b/storage/redis/redis.go index 05697c5..8077169 100644 --- a/storage/redis/redis.go +++ b/storage/redis/redis.go @@ -5,7 +5,6 @@ import ( "fmt" "time" - "github.com/click33/sa-token-go/core/adapter" "github.com/redis/go-redis/v9" ) @@ -33,7 +32,7 @@ type Config struct { } // NewStorage 通过Redis URL创建存储 -func NewStorage(url string) (adapter.Storage, error) { +func NewStorage(url string) (*Storage, error) { opts, err := redis.ParseURL(url) if err != nil { return nil, fmt.Errorf("failed to parse redis url: %w", err) @@ -55,7 +54,7 @@ func NewStorage(url string) (adapter.Storage, error) { } // NewStorageFromConfig 通过配置创建存储 -func NewStorageFromConfig(cfg *Config) (adapter.Storage, error) { +func NewStorageFromConfig(cfg *Config) (*Storage, error) { client := redis.NewClient(&redis.Options{ Addr: fmt.Sprintf("%s:%d", cfg.Host, cfg.Port), Password: cfg.Password, @@ -86,7 +85,7 @@ func NewStorageFromConfig(cfg *Config) (adapter.Storage, error) { } // NewStorageFromClient 从已有的Redis客户端创建存储 -func NewStorageFromClient(client *redis.Client) adapter.Storage { +func NewStorageFromClient(client *redis.Client) *Storage { return &Storage{ client: client, ctx: context.Background(), @@ -326,7 +325,7 @@ func (b *Builder) PoolSize(poolSize int) *Builder { } // Build 构建存储 -func (b *Builder) Build() (adapter.Storage, error) { +func (b *Builder) Build() (*Storage, error) { return NewStorageFromConfig(&Config{ Host: b.host, Port: b.port, From af54c0df7430543bdd207f0c5218f0c62c6d319c Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Wed, 24 Dec 2025 17:18:33 +0800 Subject: [PATCH 21/50] =?UTF-8?q?feat():=201=E3=80=81=E4=BF=AE=E6=94=B9gf?= =?UTF-8?q?=E5=92=8Cgin=E7=9A=84=E7=8B=AC=E7=AB=8B=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/banner/banner.go | 94 +++--- core/builder/builder.go | 4 +- core/config/consts.go | 1 - core/context/context.go | 10 +- core/security/nonce.go | 3 +- core/version.go | 2 +- integrations/gf/export.go | 10 +- integrations/gf/middleware.go | 131 ++++---- integrations/gin/annotation.go | 368 --------------------- integrations/gin/annotation_test.go | 486 ---------------------------- integrations/gin/export.go | 363 ++------------------- integrations/gin/middleware.go | 328 +++++++++++++++++++ integrations/gin/plugin.go | 249 -------------- log/slog/config.go | 2 +- stputil/stputil.go | 5 + 15 files changed, 494 insertions(+), 1562 deletions(-) delete mode 100644 integrations/gin/annotation.go delete mode 100644 integrations/gin/annotation_test.go create mode 100644 integrations/gin/middleware.go delete mode 100644 integrations/gin/plugin.go diff --git a/core/banner/banner.go b/core/banner/banner.go index bb7c63e..c0fcbf8 100644 --- a/core/banner/banner.go +++ b/core/banner/banner.go @@ -37,6 +37,53 @@ func Print() { fmt.Println() } +// PrintWithConfig prints startup banner with essential configuration | 打印启动横幅和核心配置信息 +func PrintWithConfig(cfg *config.Config) { + Print() + + fmt.Println("┌─────────────────────────────────────────────────────────┐") + fmt.Println("│ Configuration │") + fmt.Println("├─────────────────────────────────────────────────────────┤") + + // Basic Token Settings | Token 基础设置 + fmt.Print(formatConfigLine("Token Name", cfg.TokenName)) + fmt.Print(formatConfigLine("Token Style", cfg.TokenStyle)) + fmt.Print(formatConfigLine("Key Prefix", cfg.KeyPrefix)) + fmt.Print(formatConfigLine("AuthType", cfg.AuthType)) + + // Login Control | 登录控制 + fmt.Println("├─────────────────────────────────────────────────────────┤") + fmt.Print(formatConfigLine("Concurrent Login", cfg.IsConcurrent)) + fmt.Print(formatConfigLine("Share Token", cfg.IsShare)) + fmt.Print(formatConfigLine("Max Login Count", formatCount(cfg.MaxLoginCount))) + + // Timeout & Activity | 超时与活跃控制 + fmt.Println("├─────────────────────────────────────────────────────────┤") + fmt.Print(formatConfigLine("Token Timeout", formatTimeout(cfg.Timeout))) + fmt.Print(formatConfigLine("Active Timeout", formatTimeout(cfg.ActiveTimeout))) + + // Renewal & Refresh Strategy | 续期与刷新策略 + fmt.Println("├─────────────────────────────────────────────────────────┤") + fmt.Print(formatConfigLine("Auto Renew", cfg.AutoRenew)) + fmt.Print(formatConfigLine("Max Refresh", formatTimeout(cfg.MaxRefresh))) + fmt.Print(formatConfigLine("Renew Interval", formatTimeout(cfg.RenewInterval))) + + // Token Read Sources (compact) | Token 读取来源(紧凑显示) + fmt.Println("├─────────────────────────────────────────────────────────┤") + fmt.Print(formatConfigLine("Read From", tokenReadSources(cfg))) + + // Security & Storage | 安全与存储 + fmt.Println("├─────────────────────────────────────────────────────────┤") + if cfg.TokenStyle == "jwt" || cfg.TokenStyle == "JWT" { + fmt.Print(formatConfigLine("JWT Secret Key", configured)) + } else { + fmt.Print(formatConfigLine("JWT Secret Key", "(not used)")) + } + + fmt.Println("└─────────────────────────────────────────────────────────┘") + fmt.Println() +} + // formatConfigLine formats configuration line with alignment and truncation | 格式化配置行(自动截断过长文本并保持对齐) func formatConfigLine(label string, value any) string { if len(label) > labelWidth { @@ -91,50 +138,3 @@ func tokenReadSources(cfg *config.Config) string { } return strings.Join(parts, ", ") } - -// PrintWithConfig prints startup banner with essential configuration | 打印启动横幅和核心配置信息 -func PrintWithConfig(cfg *config.Config) { - Print() - - fmt.Println("┌─────────────────────────────────────────────────────────┐") - fmt.Println("│ Configuration │") - fmt.Println("├─────────────────────────────────────────────────────────┤") - - // Basic Token Settings | Token 基础设置 - fmt.Print(formatConfigLine("Token Name", cfg.TokenName)) - fmt.Print(formatConfigLine("Token Style", cfg.TokenStyle)) - fmt.Print(formatConfigLine("Key Prefix", cfg.KeyPrefix)) - fmt.Print(formatConfigLine("AuthType", cfg.AuthType)) - - // Login Control | 登录控制 - fmt.Println("├─────────────────────────────────────────────────────────┤") - fmt.Print(formatConfigLine("Concurrent Login", cfg.IsConcurrent)) - fmt.Print(formatConfigLine("Share Token", cfg.IsShare)) - fmt.Print(formatConfigLine("Max Login Count", formatCount(cfg.MaxLoginCount))) - - // Timeout & Activity | 超时与活跃控制 - fmt.Println("├─────────────────────────────────────────────────────────┤") - fmt.Print(formatConfigLine("Token Timeout", formatTimeout(cfg.Timeout))) - fmt.Print(formatConfigLine("Active Timeout", formatTimeout(cfg.ActiveTimeout))) - - // Renewal & Refresh Strategy | 续期与刷新策略 - fmt.Println("├─────────────────────────────────────────────────────────┤") - fmt.Print(formatConfigLine("Auto Renew", cfg.AutoRenew)) - fmt.Print(formatConfigLine("Max Refresh", formatTimeout(cfg.MaxRefresh))) - fmt.Print(formatConfigLine("Renew Interval", formatTimeout(cfg.RenewInterval))) - - // Token Read Sources (compact) | Token 读取来源(紧凑显示) - fmt.Println("├─────────────────────────────────────────────────────────┤") - fmt.Print(formatConfigLine("Read From", tokenReadSources(cfg))) - - // Security & Storage | 安全与存储 - fmt.Println("├─────────────────────────────────────────────────────────┤") - if cfg.TokenStyle == "jwt" || cfg.TokenStyle == "JWT" { - fmt.Print(formatConfigLine("JWT Secret Key", configured)) - } else { - fmt.Print(formatConfigLine("JWT Secret Key", "(not used)")) - } - - fmt.Println("└─────────────────────────────────────────────────────────┘") - fmt.Println() -} diff --git a/core/builder/builder.go b/core/builder/builder.go index 685b280..485c411 100644 --- a/core/builder/builder.go +++ b/core/builder/builder.go @@ -41,7 +41,7 @@ type Builder struct { cookieConfig *config.CookieConfig // Cookie config | Cookie 配置 renewPoolConfig *ants.RenewPoolConfig // Renew pool config | 续期协程池配置 - logConfig *slog.LoggerConfig // 日志配置 + logConfig *slog.LoggerConfig // log config | 日志配置 generator adapter.Generator // Token generator | Token 生成器 storage adapter.Storage // Storage adapter | 存储适配器 @@ -70,7 +70,7 @@ func NewBuilder() *Builder { tokenStyle: sgenerator.TokenStyleUUID, tokenSessionCheckLogin: true, autoRenew: true, - jwtSecretKey: config.DefaultJwtSecretKey, + jwtSecretKey: sgenerator.DefaultJWTSecret, isLog: false, isPrintBanner: true, keyPrefix: config.DefaultKeyPrefix, diff --git a/core/config/consts.go b/core/config/consts.go index e0e9d40..5f093a2 100644 --- a/core/config/consts.go +++ b/core/config/consts.go @@ -27,5 +27,4 @@ const ( DefaultMaxLoginCount = 12 // Maximum concurrent logins | 最大并发登录数 DefaultCookiePath = "/" // Default cookie path | 默认Cookie路径 NoLimit = -1 // No limit flag | 不限制标志 - DefaultJwtSecretKey = "" ) diff --git a/core/context/context.go b/core/context/context.go index 14cdc12..4c9a214 100644 --- a/core/context/context.go +++ b/core/context/context.go @@ -1,7 +1,6 @@ package context import ( - "context" "strings" "github.com/click33/sa-token-go/core/adapter" @@ -15,15 +14,13 @@ const ( // SaTokenContext Sa-Token context for current request | Sa-Token上下文,用于当前请求 type SaTokenContext struct { - ctx context.Context reqCtx adapter.RequestContext manager *manager.Manager } // NewContext creates a new Sa-Token context | 创建新的Sa-Token上下文 -func NewContext(ctx context.Context, reqCtx adapter.RequestContext, mgr *manager.Manager) *SaTokenContext { +func NewContext(reqCtx adapter.RequestContext, mgr *manager.Manager) *SaTokenContext { return &SaTokenContext{ - ctx: ctx, reqCtx: reqCtx, manager: mgr, } @@ -73,11 +70,6 @@ func (c *SaTokenContext) GetManager() *manager.Manager { return c.manager } -// GetCtx 获取全局Ctx -func (c *SaTokenContext) GetCtx() context.Context { - return c.ctx -} - //// IsLogin 检查当前请求是否已登录 //func (c *SaTokenContext) IsLogin() bool { // token := c.GetTokenValue() diff --git a/core/security/nonce.go b/core/security/nonce.go index c0c2660..12a0b6a 100644 --- a/core/security/nonce.go +++ b/core/security/nonce.go @@ -64,8 +64,7 @@ func (nm *NonceManager) Generate() (string, error) { return nonce, nil } -// Verify Verifies nonce and consumes it (one-time use) | 验证nonce并消费它(一次性使用) -// Returns false if nonce doesn't exist or already used | 如果nonce不存在或已使用则返回false +// Verify Verifies nonce and consumes it (one-time use) Returns false if nonce doesn't exist or already used | 验证nonce并消费它(一次性使用)如果nonce不存在或已使用则返回false func (nm *NonceManager) Verify(nonce string) bool { if nonce == "" { return false // Empty nonce invalid | 空nonce无效 diff --git a/core/version.go b/core/version.go index ff376b6..28693a3 100644 --- a/core/version.go +++ b/core/version.go @@ -2,4 +2,4 @@ package core // Version Sa-Token-Go version | Sa-Token-Go版本 -const Version = "0.1.3" +const Version = "0.1.6" diff --git a/integrations/gf/export.go b/integrations/gf/export.go index f27b98c..2dfd7f5 100644 --- a/integrations/gf/export.go +++ b/integrations/gf/export.go @@ -1,6 +1,7 @@ package gf import ( + "github.com/click33/sa-token-go/core" "github.com/click33/sa-token-go/core/builder" "github.com/click33/sa-token-go/core/config" "github.com/click33/sa-token-go/core/manager" @@ -9,6 +10,13 @@ import ( "github.com/click33/sa-token-go/stputil" ) +var ( + ErrTokenKickout = core.ErrTokenKickout // token has been kicked out | Token 已被踢下线 + ErrTokenReplaced = core.ErrTokenReplaced // token has been replaced | Token 已被顶下线 + ErrAccountDisabled = core.ErrAccountDisabled // account is disabled | 账号已被禁用 + ErrLoginLimitExceeded = manager.ErrLoginLimitExceeded // login count exceeds the maximum limit | 超出最大登录数量限制 +) + func SetManager(mgr *manager.Manager) { stputil.SetManager(mgr) } @@ -37,6 +45,6 @@ func DefaultLoggerConfig() *slog.LoggerConfig { return slog.DefaultLoggerConfig() } -func DefaultDefaultRenewPoolConfig() *ants.RenewPoolConfig { +func DefaultRenewPoolConfig() *ants.RenewPoolConfig { return ants.DefaultRenewPoolConfig() } diff --git a/integrations/gf/middleware.go b/integrations/gf/middleware.go index a7e248a..83e8309 100644 --- a/integrations/gf/middleware.go +++ b/integrations/gf/middleware.go @@ -33,7 +33,7 @@ type AuthOptions struct { } func defaultAuthOptions() *AuthOptions { - return &AuthOptions{} + return &AuthOptions{LogicType: LogicAnd} // 默认 AND } // WithAuthType sets auth type | 设置认证类型 @@ -56,6 +56,8 @@ func WithAuthFailFunc(fn func(r *ghttp.Request, err error)) AuthOption { } } +// ========== Middlewares ========== + // AuthMiddleware authentication middleware | 认证中间件 func AuthMiddleware(opts ...AuthOption) ghttp.HandlerFunc { options := defaultAuthOptions() @@ -68,13 +70,13 @@ func AuthMiddleware(opts ...AuthOption) ghttp.HandlerFunc { if err != nil { if options.AuthFailFunc != nil { options.AuthFailFunc(r, err) - return + } else { + writeErrorResponse(r, err) } - writeErrorResponse(r, err) return } - saCtx := saContext.NewContext(r.Context(), NewGFContext(r), mgr) + saCtx := getSaContext(r, mgr) err = mgr.CheckLogin( context.WithValue( r.Context(), @@ -85,18 +87,17 @@ func AuthMiddleware(opts ...AuthOption) ghttp.HandlerFunc { if err != nil { if options.AuthFailFunc != nil { options.AuthFailFunc(r, err) - return + } else { + writeErrorResponse(r, err) } - writeErrorResponse(r, err) return } - r.SetCtxVar(SaTokenCtxKey, saCtx) r.Middleware.Next() } } -// AuthWithStateMiddleware authentication middleware | 认证中间件 +// AuthWithStateMiddleware with state authentication middleware | 带状态返回的认证中间件 func AuthWithStateMiddleware(opts ...AuthOption) ghttp.HandlerFunc { options := defaultAuthOptions() for _, opt := range opts { @@ -104,37 +105,50 @@ func AuthWithStateMiddleware(opts ...AuthOption) ghttp.HandlerFunc { } return func(r *ghttp.Request) { + // 获取 Manager | Get Manager mgr, err := stputil.GetManager(options.AuthType) if err != nil { if options.AuthFailFunc != nil { options.AuthFailFunc(r, err) - return + } else { + writeErrorResponse(r, err) } - writeErrorResponse(r, err) return } - saCtx := saContext.NewContext(r.Context(), NewGFContext(r), mgr) - _, err = mgr.CheckLoginWithState(context.WithValue(r.Context(), config.CtxTokenValue, saCtx.GetTokenValue())) + // 构建 Sa-Token 上下文 | Build Sa-Token context + saCtx := getSaContext(r, mgr) + + // 检查登录并返回状态 | Check login with state + _, err = mgr.CheckLoginWithState( + context.WithValue( + r.Context(), + config.CtxTokenValue, + saCtx.GetTokenValue(), + ), + ) + if err != nil { - if options.AuthFailFunc != nil { - options.AuthFailFunc(r, err) - return + // 映射错误为标准 Sa-Token 错误 + switch { + case errors.Is(err, manager.ErrTokenKickout): + err = core.ErrTokenKickout + case errors.Is(err, manager.ErrTokenReplaced): + err = core.ErrTokenReplaced + default: + err = core.ErrNotLogin } - switch err { - case manager.ErrTokenKickout: - writeErrorResponse(r, core.ErrTokenKickout) - case manager.ErrTokenReplaced: - writeErrorResponse(r, core.ErrTokenReplaced) - default: - writeErrorResponse(r, core.ErrNotLogin) + // 用户自定义回调优先 + if options.AuthFailFunc != nil { + options.AuthFailFunc(r, err) + } else { + writeErrorResponse(r, err) } return } - r.SetCtxVar(SaTokenCtxKey, saCtx) r.Middleware.Next() } } @@ -162,41 +176,37 @@ func PermissionMiddleware( if err != nil { if options.AuthFailFunc != nil { options.AuthFailFunc(r, err) - return + } else { + writeErrorResponse(r, err) } - writeErrorResponse(r, err) return } - // Build Sa-Token context | 构建 Sa-Token 上下文 - saCtx := saContext.NewContext( - r.Context(), - NewGFContext(r), - mgr, - ) + // 构建 Sa-Token 上下文 | Build Sa-Token context + saCtx := getSaContext(r, mgr) + ctx := context.WithValue(r.Context(), config.CtxTokenValue, saCtx.GetTokenValue()) // Permission check | 权限校验 var ok bool - switch { // Single permission | 单权限判断 case len(permissions) == 1: ok = mgr.HasPermissionByToken( - context.WithValue(r.Context(), config.CtxTokenValue, saCtx.GetTokenValue()), + ctx, permissions[0], ) // AND logic | AND 逻辑 case options.LogicType == LogicAnd: ok = mgr.HasPermissionsAndByToken( - context.WithValue(r.Context(), config.CtxTokenValue, saCtx.GetTokenValue()), + ctx, permissions, ) // OR logic (default) | OR 逻辑(默认) default: ok = mgr.HasPermissionsOrByToken( - context.WithValue(r.Context(), config.CtxTokenValue, saCtx.GetTokenValue()), + ctx, permissions, ) } @@ -204,15 +214,12 @@ func PermissionMiddleware( if !ok { if options.AuthFailFunc != nil { options.AuthFailFunc(r, core.ErrPermissionDenied) - return + } else { + writeErrorResponse(r, core.ErrPermissionDenied) } - writeErrorResponse(r, core.ErrPermissionDenied) return } - // Store Sa-Token context | 保存 Sa-Token 上下文 - r.SetCtxVar(SaTokenCtxKey, saCtx) - r.Middleware.Next() } } @@ -240,18 +247,15 @@ func RoleMiddleware( if err != nil { if options.AuthFailFunc != nil { options.AuthFailFunc(r, err) - return + } else { + writeErrorResponse(r, err) } - writeErrorResponse(r, err) return } - // Build Sa-Token context | 构建 Sa-Token 上下文 - saCtx := saContext.NewContext( - r.Context(), - NewGFContext(r), - mgr, - ) + // 构建 Sa-Token 上下文 | Build Sa-Token context + saCtx := getSaContext(r, mgr) + ctx := context.WithValue(r.Context(), config.CtxTokenValue, saCtx.GetTokenValue()) // Role check | 角色校验 var ok bool @@ -259,29 +263,26 @@ func RoleMiddleware( switch { // Single role | 单角色判断 case len(roles) == 1: - ok = mgr.HasRoleByToken(context.WithValue(r.Context(), config.CtxTokenValue, saCtx.GetTokenValue()), roles[0]) + ok = mgr.HasRoleByToken(ctx, roles[0]) // AND logic | AND 逻辑 case options.LogicType == LogicAnd: - ok = mgr.HasRolesAndByToken(context.WithValue(r.Context(), config.CtxTokenValue, saCtx.GetTokenValue()), roles) + ok = mgr.HasRolesAndByToken(ctx, roles) // OR logic (default) | OR 逻辑(默认) default: - ok = mgr.HasRolesOrByToken(context.WithValue(r.Context(), config.CtxTokenValue, saCtx.GetTokenValue()), roles) + ok = mgr.HasRolesOrByToken(ctx, roles) } if !ok { if options.AuthFailFunc != nil { options.AuthFailFunc(r, core.ErrRoleDenied) - return + } else { + writeErrorResponse(r, core.ErrRoleDenied) } - writeErrorResponse(r, core.ErrRoleDenied) return } - // Store Sa-Token context | 保存 Sa-Token 上下文 - r.SetCtxVar(SaTokenCtxKey, saCtx) - r.Middleware.Next() } } @@ -297,6 +298,22 @@ func GetSaTokenContext(r *ghttp.Request) (*saContext.SaTokenContext, bool) { return ctx, ok } +func getSaContext(r *ghttp.Request, mgr *manager.Manager) *saContext.SaTokenContext { + // Try get from context | 尝试从 ctx 取值 + if v := r.GetCtxVar(SaTokenCtxKey); v != nil { + // gvar.Var -> interface{} -> *SaTokenContext + if saCtx, ok := v.Val().(*saContext.SaTokenContext); ok { + return saCtx + } + } + + // Create new context | 创建并缓存 SaTokenContext + saCtx := saContext.NewContext(NewGFContext(r), mgr) + r.SetCtxVar(SaTokenCtxKey, saCtx) + + return saCtx +} + // ============ Error Handling Helpers | 错误处理辅助函数 ============ // writeErrorResponse writes a standardized error response | 写入标准化的错误响应 @@ -321,7 +338,7 @@ func writeErrorResponse(r *ghttp.Request, err error) { r.Response.WriteStatusExit(httpStatus, g.Map{ "code": code, "message": message, - "error": err.Error(), + "data": err.Error(), }) } diff --git a/integrations/gin/annotation.go b/integrations/gin/annotation.go deleted file mode 100644 index cc7a1dc..0000000 --- a/integrations/gin/annotation.go +++ /dev/null @@ -1,368 +0,0 @@ -package gin - -import ( - "reflect" - "strings" - - "github.com/click33/sa-token-go/core" - "github.com/click33/sa-token-go/stputil" - ginfw "github.com/gin-gonic/gin" -) - -// Annotation constants | 注解常量 -const ( - TagSaCheckLogin = "sa_check_login" - TagSaCheckRole = "sa_check_role" - TagSaCheckPermission = "sa_check_permission" - TagSaCheckDisable = "sa_check_disable" - TagSaIgnore = "sa_ignore" -) - -// Annotation annotation structure | 注解结构体 -type Annotation struct { - CheckLogin bool `json:"checkLogin"` - CheckRole []string `json:"checkRole"` - CheckPermission []string `json:"checkPermission"` - CheckDisable bool `json:"checkDisable"` - Ignore bool `json:"ignore"` -} - -// ParseTag parses struct tags | 解析结构体标签 -func ParseTag(tag string) *Annotation { - ann := &Annotation{} - - if tag == "" { - return ann - } - - parts := strings.Split(tag, ",") - for _, part := range parts { - part = strings.TrimSpace(part) - switch { - case part == TagSaCheckLogin || part == "login": - ann.CheckLogin = true - case strings.HasPrefix(part, TagSaCheckRole+"=") || strings.HasPrefix(part, "role="): - roles := strings.TrimPrefix(part, TagSaCheckRole+"=") - roles = strings.TrimPrefix(roles, "role=") - if roles != "" { - ann.CheckRole = strings.Split(roles, "|") - } - case strings.HasPrefix(part, TagSaCheckPermission+"=") || strings.HasPrefix(part, "permission="): - perms := strings.TrimPrefix(part, TagSaCheckPermission+"=") - perms = strings.TrimPrefix(perms, "permission=") - if perms != "" { - ann.CheckPermission = strings.Split(perms, "|") - } - case part == TagSaCheckDisable || part == "disable": - ann.CheckDisable = true - case part == TagSaIgnore || part == "ignore": - ann.Ignore = true - } - } - - return ann -} - -// Validate validates if annotation is valid | 验证注解是否有效 -func (a *Annotation) Validate() bool { - if a.Ignore { - return true // When ignore is true, other checks are invalid | 忽略认证时,其他检查无效 - } - - count := 0 - if a.CheckLogin { - count++ - } - if len(a.CheckRole) > 0 { - count++ - } - if len(a.CheckPermission) > 0 { - count++ - } - if a.CheckDisable { - count++ - } - - // At most one check type allowed | 最多只能有一个检查类型 - return count <= 1 -} - -// GetHandler gets handler with annotations | 获取带注解的处理器 -func GetHandler(handler interface{}, annotations ...*Annotation) ginfw.HandlerFunc { - return func(c *ginfw.Context) { - // Check if authentication should be ignored | 检查是否忽略认证 - if len(annotations) > 0 && annotations[0].Ignore { - if callHandler(handler, c) { - return - } - c.Next() - return - } - - // Get token from context using configured TokenName | 从上下文获取Token(使用配置的TokenName) - ctx := NewGinContext(c) - saCtx := core.NewContext(ctx, stputil.GetManager()) - token := saCtx.GetTokenValue() - if token == "" { - writeErrorResponse(c, core.NewNotLoginError()) - c.Abort() - return - } - - // Check login | 检查登录 - if !stputil.IsLogin(token) { - writeErrorResponse(c, core.NewNotLoginError()) - c.Abort() - return - } - - // Get login ID | 获取登录ID - loginID, err := stputil.GetLoginID(token) - if err != nil { - writeErrorResponse(c, err) - c.Abort() - return - } - - // Check if account is disabled | 检查是否被封禁 - if len(annotations) > 0 && annotations[0].CheckDisable { - if stputil.IsDisable(loginID) { - writeErrorResponse(c, core.NewAccountDisabledError(loginID)) - c.Abort() - return - } - } - - // Check permission | 检查权限 - if len(annotations) > 0 && len(annotations[0].CheckPermission) > 0 { - hasPermission := false - for _, perm := range annotations[0].CheckPermission { - if stputil.HasPermission(loginID, strings.TrimSpace(perm)) { - hasPermission = true - break - } - } - if !hasPermission { - writeErrorResponse(c, core.NewPermissionDeniedError(strings.Join(annotations[0].CheckPermission, ","))) - c.Abort() - return - } - } - - // Check role | 检查角色 - if len(annotations) > 0 && len(annotations[0].CheckRole) > 0 { - hasRole := false - for _, role := range annotations[0].CheckRole { - if stputil.HasRole(loginID, strings.TrimSpace(role)) { - hasRole = true - break - } - } - if !hasRole { - writeErrorResponse(c, core.NewRoleDeniedError(strings.Join(annotations[0].CheckRole, ","))) - c.Abort() - return - } - } - - // All checks passed, execute original handler or continue | 所有检查通过,执行原函数或继续 - if callHandler(handler, c) { - return - } - c.Next() - } -} - -func callHandler(handler interface{}, c *ginfw.Context) bool { - if handler == nil { - return false - } - - switch h := handler.(type) { - case func(*ginfw.Context): - if h == nil { - return false - } - h(c) - return true - case ginfw.HandlerFunc: - if h == nil { - return false - } - h(c) - return true - } - - hv := reflect.ValueOf(handler) - if hv.Kind() != reflect.Func || hv.IsNil() || hv.Type().NumIn() != 1 { - return false - } - - argType := hv.Type().In(0) - if !argType.AssignableTo(reflect.TypeOf(c)) { - return false - } - - hv.Call([]reflect.Value{reflect.ValueOf(c)}) - return true -} - -// Decorator functions | 装饰器函数 - -// CheckLogin decorator for login checking | 检查登录装饰器 -func CheckLogin() ginfw.HandlerFunc { - return GetHandler(nil, &Annotation{CheckLogin: true}) -} - -// CheckRole decorator for role checking | 检查角色装饰器 -func CheckRole(roles ...string) ginfw.HandlerFunc { - return GetHandler(nil, &Annotation{CheckRole: roles}) -} - -// CheckPermission decorator for permission checking | 检查权限装饰器 -func CheckPermission(perms ...string) ginfw.HandlerFunc { - return GetHandler(nil, &Annotation{CheckPermission: perms}) -} - -// CheckDisable decorator for checking if account is disabled | 检查是否被封禁装饰器 -func CheckDisable() ginfw.HandlerFunc { - return GetHandler(nil, &Annotation{CheckDisable: true}) -} - -// Ignore decorator to ignore authentication | 忽略认证装饰器 -func Ignore() ginfw.HandlerFunc { - return GetHandler(nil, &Annotation{Ignore: true}) -} - -// WithAnnotation decorator with custom annotation | 使用自定义注解装饰器 -func WithAnnotation(ann *Annotation) ginfw.HandlerFunc { - return GetHandler(nil, ann) -} - -// ProcessStructAnnotations processes annotations on struct tags | 处理结构体上的注解标签 -func ProcessStructAnnotations(handler interface{}) ginfw.HandlerFunc { - handlerValue := reflect.ValueOf(handler) - handlerType := reflect.TypeOf(handler) - - // Find method name, usually the last path segment | 查找方法名,通常是最后一个路径段 - methodName := "unknown" - if handlerType.Kind() == reflect.Ptr { - handlerType = handlerType.Elem() - } - if handlerType.Kind() == reflect.Struct { - methodName = handlerType.Name() - } - - // Parse method annotations | 解析方法上的注解标签 - ann := parseMethodAnnotation(handlerType, methodName) - - return GetHandler(func(c *ginfw.Context) { - handlerValue.MethodByName("ServeHTTP").Call([]reflect.Value{reflect.ValueOf(c)}) - }, ann) -} - -// parseMethodAnnotation parses method annotations | 解析方法注解 -func parseMethodAnnotation(t reflect.Type, methodName string) *Annotation { - // Simplified implementation, returns empty annotation | 简化实现,直接返回空注解 - return &Annotation{} -} - -// HandlerWithAnnotations 带注解的处理器包装器 -type HandlerWithAnnotations struct { - Handler interface{} - Annotations []*Annotation -} - -// NewHandlerWithAnnotations 创建带注解的处理器 -func NewHandlerWithAnnotations(handler interface{}, annotations ...*Annotation) *HandlerWithAnnotations { - return &HandlerWithAnnotations{ - Handler: handler, - Annotations: annotations, - } -} - -// ToGinHandler 转换为Gin处理器 -func (h *HandlerWithAnnotations) ToGinHandler() ginfw.HandlerFunc { - return GetHandler(h.Handler, h.Annotations...) -} - -// Middleware 创建中间件版本 -func Middleware(annotations ...*Annotation) ginfw.HandlerFunc { - return func(c *ginfw.Context) { - - // 检查是否忽略认证 - if len(annotations) > 0 && annotations[0].Ignore { - c.Next() - return - } - - // 获取Token(使用配置的TokenName) - ctx := NewGinContext(c) - saCtx := core.NewContext(ctx, stputil.GetManager()) - token := saCtx.GetTokenValue() - if token == "" { - writeErrorResponse(c, core.NewNotLoginError()) - c.Abort() - return - } - - // 检查登录 - if !stputil.IsLogin(token) { - writeErrorResponse(c, core.NewNotLoginError()) - c.Abort() - return - } - - // 获取登录ID - loginID, err := stputil.GetLoginID(token) - if err != nil { - writeErrorResponse(c, err) - c.Abort() - return - } - - // 检查是否被封禁 - if len(annotations) > 0 && annotations[0].CheckDisable { - if stputil.IsDisable(loginID) { - writeErrorResponse(c, core.NewAccountDisabledError(loginID)) - c.Abort() - return - } - } - - // 检查权限 - if len(annotations) > 0 && len(annotations[0].CheckPermission) > 0 { - hasPermission := false - for _, perm := range annotations[0].CheckPermission { - if stputil.HasPermission(loginID, strings.TrimSpace(perm)) { - hasPermission = true - break - } - } - if !hasPermission { - writeErrorResponse(c, core.NewPermissionDeniedError(strings.Join(annotations[0].CheckPermission, ","))) - c.Abort() - return - } - } - - // 检查角色 - if len(annotations) > 0 && len(annotations[0].CheckRole) > 0 { - hasRole := false - for _, role := range annotations[0].CheckRole { - if stputil.HasRole(loginID, strings.TrimSpace(role)) { - hasRole = true - break - } - } - if !hasRole { - writeErrorResponse(c, core.NewRoleDeniedError(strings.Join(annotations[0].CheckRole, ","))) - c.Abort() - return - } - } - - // 所有检查通过,继续下一个处理器 - c.Next() - } -} diff --git a/integrations/gin/annotation_test.go b/integrations/gin/annotation_test.go deleted file mode 100644 index 4d00279..0000000 --- a/integrations/gin/annotation_test.go +++ /dev/null @@ -1,486 +0,0 @@ -package gin - -import ( - "net/http" - "net/http/httptest" - "testing" - - "github.com/click33/sa-token-go/core/config" - "github.com/click33/sa-token-go/core/manager" - "github.com/click33/sa-token-go/storage/memory" - "github.com/click33/sa-token-go/stputil" - ginfw "github.com/gin-gonic/gin" - "github.com/stretchr/testify/assert" -) - -// setupTestRouter 创建测试路由器和初始化 sa-token -func setupTestRouter() *ginfw.Engine { - ginfw.SetMode(ginfw.TestMode) - router := ginfw.New() - - // 创建内存存储 - storage := memory.NewStorage() - - // 创建配置 - cfg := &config.Config{ - TokenName: "satoken", - Timeout: 2592000, // 30 天(秒) - IsConcurrent: true, - IsShare: true, - MaxLoginCount: -1, - } - - // 创建并设置全局 Manager - mgr := manager.NewManager(storage, cfg) - stputil.SetManager(mgr) - - return router -} - -// mockLogin 模拟用户登录并返回 token -func mockLogin(loginID interface{}) string { - token, _ := stputil.Login(loginID) - return token -} - -// mockLoginWithRole 模拟用户登录并设置角色 -func mockLoginWithRole(loginID interface{}, roles []string) string { - token, _ := stputil.Login(loginID) - stputil.SetRoles(loginID, roles) - return token -} - -// mockLoginWithPermission 模拟用户登录并设置权限 -func mockLoginWithPermission(loginID interface{}, permissions []string) string { - token, _ := stputil.Login(loginID) - stputil.SetPermissions(loginID, permissions) - return token -} - -// TestCheckRole_WithValidRole 测试具有有效角色的用户访问 -func TestCheckRole_WithValidRole(t *testing.T) { - router := setupTestRouter() - - // 设置路由 - 使用 CheckRole 作为中间件 - router.GET("/admin", CheckRole("Admin"), func(c *ginfw.Context) { - c.JSON(http.StatusOK, ginfw.H{"message": "success"}) - }) - - // 创建一个具有 Admin 角色的用户 - token := mockLoginWithRole("user123", []string{"Admin"}) - - // 发送请求 - w := httptest.NewRecorder() - req, _ := http.NewRequest("GET", "/admin", nil) - req.Header.Set("Authorization", token) - router.ServeHTTP(w, req) - - // 断言 - assert.Equal(t, http.StatusOK, w.Code) - assert.Contains(t, w.Body.String(), "success") -} - -// TestCheckRole_WithInvalidRole 测试没有所需角色的用户访问 -func TestCheckRole_WithInvalidRole(t *testing.T) { - router := setupTestRouter() - - // 设置路由 - router.GET("/admin", CheckRole("Admin"), func(c *ginfw.Context) { - c.JSON(http.StatusOK, ginfw.H{"message": "success"}) - }) - - // 创建一个只有 User 角色的用户 - token := mockLoginWithRole("user456", []string{"User"}) - - // 发送请求 - w := httptest.NewRecorder() - req, _ := http.NewRequest("GET", "/admin", nil) - req.Header.Set("Authorization", token) - router.ServeHTTP(w, req) - - // 断言 - assert.Equal(t, http.StatusForbidden, w.Code) - assert.Contains(t, w.Body.String(), "角色不足") -} - -// TestCheckRole_MultipleRoles 测试多个角色的情况(OR 逻辑) -func TestCheckRole_MultipleRoles(t *testing.T) { - router := setupTestRouter() - - // 设置路由 - 需要 Admin 或 SuperAdmin 角色 - router.GET("/manage", CheckRole("Admin", "SuperAdmin"), func(c *ginfw.Context) { - c.JSON(http.StatusOK, ginfw.H{"message": "success"}) - }) - - // 测试具有 SuperAdmin 角色的用户 - token := mockLoginWithRole("superuser", []string{"SuperAdmin"}) - - w := httptest.NewRecorder() - req, _ := http.NewRequest("GET", "/manage", nil) - req.Header.Set("Authorization", token) - router.ServeHTTP(w, req) - - assert.Equal(t, http.StatusOK, w.Code) - assert.Contains(t, w.Body.String(), "success") -} - -// TestCheckRole_NoToken 测试未提供 token 的情况 -func TestCheckRole_NoToken(t *testing.T) { - router := setupTestRouter() - - router.GET("/admin", CheckRole("Admin"), func(c *ginfw.Context) { - c.JSON(http.StatusOK, ginfw.H{"message": "success"}) - }) - - w := httptest.NewRecorder() - req, _ := http.NewRequest("GET", "/admin", nil) - router.ServeHTTP(w, req) - - assert.Equal(t, http.StatusUnauthorized, w.Code) - assert.Contains(t, w.Body.String(), "未登录") -} - -// TestCheckRole_InvalidToken 测试无效 token 的情况 -func TestCheckRole_InvalidToken(t *testing.T) { - router := setupTestRouter() - - router.GET("/admin", CheckRole("Admin"), func(c *ginfw.Context) { - c.JSON(http.StatusOK, ginfw.H{"message": "success"}) - }) - - w := httptest.NewRecorder() - req, _ := http.NewRequest("GET", "/admin", nil) - req.Header.Set("Authorization", "invalid-token-12345") - router.ServeHTTP(w, req) - - assert.Equal(t, http.StatusUnauthorized, w.Code) - assert.Contains(t, w.Body.String(), "未登录") -} - -// TestCheckPermission_WithValidPermission 测试具有有效权限的用户访问 -func TestCheckPermission_WithValidPermission(t *testing.T) { - router := setupTestRouter() - - router.GET("/users", CheckPermission("user.read"), func(c *ginfw.Context) { - c.JSON(http.StatusOK, ginfw.H{"message": "success"}) - }) - - token := mockLoginWithPermission("user789", []string{"user.read"}) - - w := httptest.NewRecorder() - req, _ := http.NewRequest("GET", "/users", nil) - req.Header.Set("Authorization", token) - router.ServeHTTP(w, req) - - assert.Equal(t, http.StatusOK, w.Code) - assert.Contains(t, w.Body.String(), "success") -} - -// TestCheckPermission_WithInvalidPermission 测试没有所需权限的用户访问 -func TestCheckPermission_WithInvalidPermission(t *testing.T) { - router := setupTestRouter() - - router.GET("/users", CheckPermission("user.delete"), func(c *ginfw.Context) { - c.JSON(http.StatusOK, ginfw.H{"message": "success"}) - }) - - token := mockLoginWithPermission("user789", []string{"user.read"}) - - w := httptest.NewRecorder() - req, _ := http.NewRequest("GET", "/users", nil) - req.Header.Set("Authorization", token) - router.ServeHTTP(w, req) - - assert.Equal(t, http.StatusForbidden, w.Code) - assert.Contains(t, w.Body.String(), "权限不足") -} - -// TestCheckLogin_Success 测试登录检查成功 -func TestCheckLogin_Success(t *testing.T) { - router := setupTestRouter() - - router.GET("/profile", CheckLogin(), func(c *ginfw.Context) { - c.JSON(http.StatusOK, ginfw.H{"message": "profile data"}) - }) - - token := mockLogin("user999") - - w := httptest.NewRecorder() - req, _ := http.NewRequest("GET", "/profile", nil) - req.Header.Set("Authorization", token) - router.ServeHTTP(w, req) - - assert.Equal(t, http.StatusOK, w.Code) - assert.Contains(t, w.Body.String(), "profile data") -} - -// TestCheckLogin_Failed 测试登录检查失败 -func TestCheckLogin_Failed(t *testing.T) { - router := setupTestRouter() - - router.GET("/profile", CheckLogin(), func(c *ginfw.Context) { - c.JSON(http.StatusOK, ginfw.H{"message": "profile data"}) - }) - - w := httptest.NewRecorder() - req, _ := http.NewRequest("GET", "/profile", nil) - router.ServeHTTP(w, req) - - assert.Equal(t, http.StatusUnauthorized, w.Code) - assert.Contains(t, w.Body.String(), "未登录") -} - -// TestCheckDisable_NotDisabled 测试账号未被封禁的情况 -func TestCheckDisable_NotDisabled(t *testing.T) { - router := setupTestRouter() - - router.GET("/resource", CheckDisable(), func(c *ginfw.Context) { - c.JSON(http.StatusOK, ginfw.H{"message": "resource data"}) - }) - - token := mockLogin("user101") - - w := httptest.NewRecorder() - req, _ := http.NewRequest("GET", "/resource", nil) - req.Header.Set("Authorization", token) - router.ServeHTTP(w, req) - - assert.Equal(t, http.StatusOK, w.Code) - assert.Contains(t, w.Body.String(), "resource data") -} - -// TestCheckDisable_IsDisabled 测试账号被封禁的情况 -func TestCheckDisable_IsDisabled(t *testing.T) { - router := setupTestRouter() - - router.GET("/resource", CheckDisable(), func(c *ginfw.Context) { - c.JSON(http.StatusOK, ginfw.H{"message": "resource data"}) - }) - - loginID := "user102" - token := mockLogin(loginID) - - // 封禁账号 - stputil.Disable(loginID, 3600) // 封禁 1 小时 - - w := httptest.NewRecorder() - req, _ := http.NewRequest("GET", "/resource", nil) - req.Header.Set("Authorization", token) - router.ServeHTTP(w, req) - - assert.Equal(t, http.StatusForbidden, w.Code) - assert.Contains(t, w.Body.String(), "账号已被封禁") -} - -// TestIgnore_SkipsAuthentication 测试忽略认证装饰器 -func TestIgnore_SkipsAuthentication(t *testing.T) { - router := setupTestRouter() - - router.GET("/public", Ignore(), func(c *ginfw.Context) { - c.JSON(http.StatusOK, ginfw.H{"message": "public data"}) - }) - - w := httptest.NewRecorder() - req, _ := http.NewRequest("GET", "/public", nil) - // 不提供任何 token - router.ServeHTTP(w, req) - - assert.Equal(t, http.StatusOK, w.Code) - assert.Contains(t, w.Body.String(), "public data") -} - -// TestChainedMiddleware_CheckRoleAndHandler 测试链式中间件:CheckRole + 实际处理器 -func TestChainedMiddleware_CheckRoleAndHandler(t *testing.T) { - router := setupTestRouter() - - // 模拟用户示例代码的使用方式 - safeGroup := router.Group("/safe") - { - safeGroup.GET("", CheckRole("SuperAdmin"), func(c *ginfw.Context) { - c.JSON(http.StatusOK, ginfw.H{"message": "safe settings"}) - }) - } - - // 测试具有 SuperAdmin 角色的用户 - token := mockLoginWithRole("admin123", []string{"SuperAdmin"}) - - w := httptest.NewRecorder() - req, _ := http.NewRequest("GET", "/safe", nil) - req.Header.Set("Authorization", token) - router.ServeHTTP(w, req) - - assert.Equal(t, http.StatusOK, w.Code) - assert.Contains(t, w.Body.String(), "safe settings") -} - -// TestChainedMiddleware_CheckRoleAndHandler_NoRole 测试链式中间件:无角色访问 -func TestChainedMiddleware_CheckRoleAndHandler_NoRole(t *testing.T) { - router := setupTestRouter() - - safeGroup := router.Group("/safe") - { - safeGroup.GET("", CheckRole("SuperAdmin"), func(c *ginfw.Context) { - c.JSON(http.StatusOK, ginfw.H{"message": "safe settings"}) - }) - } - - // 测试具有普通用户角色 - token := mockLoginWithRole("user123", []string{"User"}) - - w := httptest.NewRecorder() - req, _ := http.NewRequest("GET", "/safe", nil) - req.Header.Set("Authorization", token) - router.ServeHTTP(w, req) - - assert.Equal(t, http.StatusForbidden, w.Code) - assert.Contains(t, w.Body.String(), "角色不足") -} - -// TestGetHandler_WithNilHandler 测试 GetHandler 在 handler 为 nil 时的行为 -func TestGetHandler_WithNilHandler(t *testing.T) { - router := setupTestRouter() - - // 直接使用 GetHandler 创建中间件 - middleware := GetHandler(nil, &Annotation{CheckRole: []string{"Admin"}}) - - router.GET("/test", middleware, func(c *ginfw.Context) { - c.JSON(http.StatusOK, ginfw.H{"message": "test passed"}) - }) - - token := mockLoginWithRole("testuser", []string{"Admin"}) - - w := httptest.NewRecorder() - req, _ := http.NewRequest("GET", "/test", nil) - req.Header.Set("Authorization", token) - router.ServeHTTP(w, req) - - // 应该能够正常执行,不会 panic - assert.Equal(t, http.StatusOK, w.Code) - assert.Contains(t, w.Body.String(), "test passed") -} - -// TestMiddleware_CheckRole 测试 Middleware 函数的角色检查 -func TestMiddleware_CheckRole(t *testing.T) { - router := setupTestRouter() - - // 使用 Middleware 函数 - router.GET("/api/data", Middleware(&Annotation{CheckRole: []string{"Admin"}}), func(c *ginfw.Context) { - c.JSON(http.StatusOK, ginfw.H{"data": "sensitive data"}) - }) - - token := mockLoginWithRole("admin999", []string{"Admin"}) - - w := httptest.NewRecorder() - req, _ := http.NewRequest("GET", "/api/data", nil) - req.Header.Set("Authorization", token) - router.ServeHTTP(w, req) - - assert.Equal(t, http.StatusOK, w.Code) - assert.Contains(t, w.Body.String(), "sensitive data") -} - -// TestParseTag 测试标签解析功能 -func TestParseTag(t *testing.T) { - tests := []struct { - name string - tag string - expected *Annotation - }{ - { - name: "解析登录检查标签", - tag: "sa_check_login", - expected: &Annotation{ - CheckLogin: true, - }, - }, - { - name: "解析角色检查标签", - tag: "sa_check_role=Admin|SuperAdmin", - expected: &Annotation{ - CheckRole: []string{"Admin", "SuperAdmin"}, - }, - }, - { - name: "解析权限检查标签", - tag: "sa_check_permission=user.read|user.write", - expected: &Annotation{ - CheckPermission: []string{"user.read", "user.write"}, - }, - }, - { - name: "解析忽略认证标签", - tag: "sa_ignore", - expected: &Annotation{ - Ignore: true, - }, - }, - { - name: "解析封禁检查标签", - tag: "sa_check_disable", - expected: &Annotation{ - CheckDisable: true, - }, - }, - { - name: "空标签", - tag: "", - expected: &Annotation{}, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - result := ParseTag(tt.tag) - assert.Equal(t, tt.expected.CheckLogin, result.CheckLogin) - assert.Equal(t, tt.expected.CheckRole, result.CheckRole) - assert.Equal(t, tt.expected.CheckPermission, result.CheckPermission) - assert.Equal(t, tt.expected.CheckDisable, result.CheckDisable) - assert.Equal(t, tt.expected.Ignore, result.Ignore) - }) - } -} - -// TestAnnotationValidate 测试注解验证功能 -func TestAnnotationValidate(t *testing.T) { - tests := []struct { - name string - annotation *Annotation - valid bool - }{ - { - name: "有效的单一检查", - annotation: &Annotation{ - CheckLogin: true, - }, - valid: true, - }, - { - name: "有效的忽略标记", - annotation: &Annotation{ - Ignore: true, - CheckLogin: true, // 即使有其他标记,忽略时仍然有效 - }, - valid: true, - }, - { - name: "有效的空注解", - annotation: &Annotation{}, - valid: true, - }, - { - name: "无效的多重检查", - annotation: &Annotation{ - CheckLogin: true, - CheckRole: []string{"Admin"}, - }, - valid: false, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - result := tt.annotation.Validate() - assert.Equal(t, tt.valid, result) - }) - } -} diff --git a/integrations/gin/export.go b/integrations/gin/export.go index fb12168..74ea0cb 100644 --- a/integrations/gin/export.go +++ b/integrations/gin/export.go @@ -1,364 +1,51 @@ package gin import ( - "time" - "github.com/click33/sa-token-go/core" + "github.com/click33/sa-token-go/core/builder" + "github.com/click33/sa-token-go/core/config" + "github.com/click33/sa-token-go/core/manager" + "github.com/click33/sa-token-go/log/slog" + "github.com/click33/sa-token-go/pool/ants" "github.com/click33/sa-token-go/stputil" ) -// ============ Re-export core types | 重新导出核心类型 ============ - -// Configuration related types | 配置相关类型 -type ( - Config = core.Config - CookieConfig = core.CookieConfig - TokenStyle = core.TokenStyle -) - -// Token style constants | Token风格常量 -const ( - TokenStyleUUID = core.TokenStyleUUID - TokenStyleSimple = core.TokenStyleSimple - TokenStyleRandom32 = core.TokenStyleRandom32 - TokenStyleRandom64 = core.TokenStyleRandom64 - TokenStyleRandom128 = core.TokenStyleRandom128 - TokenStyleJWT = core.TokenStyleJWT - TokenStyleHash = core.TokenStyleHash - TokenStyleTimestamp = core.TokenStyleTimestamp - TokenStyleTik = core.TokenStyleTik -) - -// Core types | 核心类型 -type ( - Manager = core.Manager - TokenInfo = core.TokenInfo - Session = core.Session - TokenGenerator = core.TokenGenerator - SaTokenContext = core.SaTokenContext - Builder = core.Builder - NonceManager = core.NonceManager - RefreshTokenInfo = core.RefreshTokenInfo - RefreshTokenManager = core.RefreshTokenManager - OAuth2Server = core.OAuth2Server - OAuth2Client = core.OAuth2Client - OAuth2AccessToken = core.OAuth2AccessToken - OAuth2GrantType = core.OAuth2GrantType -) - -// Adapter interfaces | 适配器接口 -type ( - Storage = core.Storage - RequestContext = core.RequestContext -) - -// Event related types | 事件相关类型 -type ( - EventListener = core.EventListener - EventManager = core.EventManager - EventData = core.EventData - Event = core.Event - ListenerFunc = core.ListenerFunc - ListenerConfig = core.ListenerConfig -) - -// Event constants | 事件常量 -const ( - EventLogin = core.EventLogin - EventLogout = core.EventLogout - EventKickout = core.EventKickout - EventDisable = core.EventDisable - EventUntie = core.EventUntie - EventRenew = core.EventRenew - EventCreateSession = core.EventCreateSession - EventDestroySession = core.EventDestroySession - EventPermissionCheck = core.EventPermissionCheck - EventRoleCheck = core.EventRoleCheck - EventAll = core.EventAll -) - -// OAuth2 grant type constants | OAuth2授权类型常量 -const ( - GrantTypeAuthorizationCode = core.GrantTypeAuthorizationCode - GrantTypeRefreshToken = core.GrantTypeRefreshToken - GrantTypeClientCredentials = core.GrantTypeClientCredentials - GrantTypePassword = core.GrantTypePassword -) - -// Utility functions | 工具函数 var ( - RandomString = core.RandomString - IsEmpty = core.IsEmpty - IsNotEmpty = core.IsNotEmpty - DefaultString = core.DefaultString - ContainsString = core.ContainsString - RemoveString = core.RemoveString - UniqueStrings = core.UniqueStrings - MergeStrings = core.MergeStrings - MatchPattern = core.MatchPattern + ErrNotLogin = core.ErrNotLogin // token has been kicked out | Token 已被踢下线 + ErrTokenKickout = core.ErrTokenKickout // token has been kicked out | Token 已被踢下线 + ErrTokenReplaced = core.ErrTokenReplaced // token has been replaced | Token 已被顶下线 + ErrAccountDisabled = core.ErrAccountDisabled // account is disabled | 账号已被禁用 + ErrLoginLimitExceeded = manager.ErrLoginLimitExceeded // login count exceeds the maximum limit | 超出最大登录数量限制 ) -// ============ Core constructor functions | 核心构造函数 ============ - -// DefaultConfig returns log configuration | 返回默认配置 -func DefaultConfig() *Config { - return core.DefaultConfig() -} - -// NewManager creates a new authentication manager | 创建新的认证管理器 -func NewManager(storage Storage, cfg *Config) *Manager { - return core.NewManager(storage, cfg) -} - -// NewContext creates a new Sa-Token context | 创建新的Sa-Token上下文 -func NewContext(ctx RequestContext, mgr *Manager) *SaTokenContext { - return core.NewContext(ctx, mgr) -} - -// NewSession creates a new session | 创建新的Session -func NewSession(id string, storage Storage, prefix string) *Session { - return core.NewSession(id, storage, prefix) -} - -// LoadSession loads an existing session | 加载已存在的Session -func LoadSession(id string, storage Storage, prefix string) (*Session, error) { - return core.LoadSession(id, storage, prefix) -} - -// NewTokenGenerator creates a new token generator | 创建新的Token生成器 -func NewTokenGenerator(cfg *Config) *TokenGenerator { - return core.NewTokenGenerator(cfg) -} - -// NewEventManager creates a new event manager | 创建新的事件管理器 -func NewEventManager() *EventManager { - return core.NewEventManager() -} - -// NewBuilder creates a new builder for fluent configuration | 创建新的Builder构建器(用于流式配置) -func NewBuilder() *Builder { - return core.NewBuilder() -} - -// NewNonceManager creates a new nonce manager | 创建新的Nonce管理器 -func NewNonceManager(storage Storage, prefix string, ttl ...int64) *NonceManager { - return core.NewNonceManager(storage, prefix, ttl...) -} - -// NewRefreshTokenManager creates a new refresh token manager | 创建新的刷新令牌管理器 -func NewRefreshTokenManager(storage Storage, prefix string, cfg *Config) *RefreshTokenManager { - return core.NewRefreshTokenManager(storage, prefix, cfg) -} - -// NewOAuth2Server creates a new OAuth2 server | 创建新的OAuth2服务器 -func NewOAuth2Server(storage Storage, prefix string) *OAuth2Server { - return core.NewOAuth2Server(storage, prefix) -} - -// ============ Global StpUtil functions | 全局StpUtil函数 ============ - -// SetManager sets the global Manager (must be called first) | 设置全局Manager(必须先调用此方法) -func SetManager(mgr *Manager) { +func SetManager(mgr *manager.Manager) { stputil.SetManager(mgr) } -// GetManager gets the global Manager | 获取全局Manager -func GetManager() *Manager { - return stputil.GetManager() +func GetManager(autoType ...string) (*manager.Manager, error) { + return stputil.GetManager(autoType...) } -// ============ Authentication | 登录认证 ============ - -// Login performs user login | 用户登录 -func Login(loginID interface{}, device ...string) (string, error) { - return stputil.Login(loginID, device...) +func DeleteManager(autoType ...string) error { + return stputil.DeleteManager(autoType...) } -// LoginByToken performs login with specified token | 使用指定Token登录 -func LoginByToken(loginID interface{}, tokenValue string, device ...string) error { - return stputil.LoginByToken(loginID, tokenValue, device...) +func DeleteAllManager() { + stputil.DeleteAllManager() } -// Logout performs user logout | 用户登出 -func Logout(loginID interface{}, device ...string) error { - return stputil.Logout(loginID, device...) +func NewDefaultBuild() *builder.Builder { + return builder.NewBuilder() } -// LogoutByToken performs logout by token | 根据Token登出 -func LogoutByToken(tokenValue string) error { - return stputil.LogoutByToken(tokenValue) +func NewDefaultConfig() *config.Config { + return config.DefaultConfig() } -// IsLogin checks if the user is logged in | 检查用户是否已登录 -func IsLogin(tokenValue string) bool { - return stputil.IsLogin(tokenValue) +func DefaultLoggerConfig() *slog.LoggerConfig { + return slog.DefaultLoggerConfig() } -// CheckLoginByToken checks login status (throws error if not logged in) | 检查登录状态(未登录抛出错误) -func CheckLoginByToken(tokenValue string) error { - return stputil.CheckLogin(tokenValue) +func DefaultRenewPoolConfig() *ants.RenewPoolConfig { + return ants.DefaultRenewPoolConfig() } - -// GetLoginID gets the login ID from token | 从Token获取登录ID -func GetLoginID(tokenValue string) (string, error) { - return stputil.GetLoginID(tokenValue) -} - -// GetLoginIDNotCheck gets login ID without checking | 获取登录ID(不检查) -func GetLoginIDNotCheck(tokenValue string) (string, error) { - return stputil.GetLoginIDNotCheck(tokenValue) -} - -// GetTokenValue gets the token value for a login ID | 获取登录ID对应的Token值 -func GetTokenValue(loginID interface{}, device ...string) (string, error) { - return stputil.GetTokenValue(loginID, device...) -} - -// GetTokenInfo gets token information | 获取Token信息 -func GetTokenInfo(tokenValue string) (*TokenInfo, error) { - return stputil.GetTokenInfo(tokenValue) -} - -// ============ Kickout | 踢人下线 ============ - -// Kickout kicks out a user session | 踢人下线 -func Kickout(loginID interface{}, device ...string) error { - return stputil.Kickout(loginID, device...) -} - -// ============ Account Disable | 账号封禁 ============ - -// Disable disables an account for specified duration | 封禁账号(指定时长) -func Disable(loginID interface{}, duration time.Duration) error { - return stputil.Disable(loginID, duration) -} - -// IsDisable checks if an account is disabled | 检查账号是否被封禁 -func IsDisable(loginID interface{}) bool { - return stputil.IsDisable(loginID) -} - -// CheckDisableByToken checks if account is disabled (throws error if disabled) | 检查Token对应账号是否被封禁(被封禁则抛出错误) -func CheckDisableByToken(tokenValue string) error { - return stputil.CheckDisable(tokenValue) -} - -// GetDisableTime gets remaining disabled time | 获取账号剩余封禁时间 -func GetDisableTime(loginID interface{}) (int64, error) { - return stputil.GetDisableTime(loginID) -} - -// Untie unties/unlocks an account | 解除账号封禁 -func Untie(loginID interface{}) error { - return stputil.Untie(loginID) -} - -// ============ Permission Check | 权限验证 ============ - -// CheckPermissionByToken checks if the token has specified permission | 检查Token是否拥有指定权限 -func CheckPermissionByToken(tokenValue string, permission string) error { - return stputil.CheckPermission(tokenValue, permission) -} - -// HasPermission checks if the account has specified permission (returns bool) | 检查账号是否拥有指定权限(返回布尔值) -func HasPermission(loginID interface{}, permission string) bool { - return stputil.HasPermission(loginID, permission) -} - -// CheckPermissionAndByToken checks if the token has all specified permissions (AND logic) | 检查Token是否拥有所有指定权限(AND逻辑) -func CheckPermissionAndByToken(tokenValue string, permissions []string) error { - return stputil.CheckPermissionAnd(tokenValue, permissions) -} - -// CheckPermissionOrByToken checks if the token has any of the specified permissions (OR logic) | 检查Token是否拥有指定权限中的任意一个(OR逻辑) -func CheckPermissionOrByToken(tokenValue string, permissions []string) error { - return stputil.CheckPermissionOr(tokenValue, permissions) -} - -// GetPermissionListByToken gets the permission list for a token | 获取Token的权限列表 -func GetPermissionListByToken(tokenValue string) ([]string, error) { - return stputil.GetPermissionList(tokenValue) -} - -// ============ Role Check | 角色验证 ============ - -// CheckRoleByToken checks if the token has specified role | 检查Token是否拥有指定角色 -func CheckRoleByToken(tokenValue string, role string) error { - return stputil.CheckRole(tokenValue, role) -} - -// HasRole checks if the account has specified role (returns bool) | 检查账号是否拥有指定角色(返回布尔值) -func HasRole(loginID interface{}, role string) bool { - return stputil.HasRole(loginID, role) -} - -// CheckRoleAndByToken checks if the token has all specified roles (AND logic) | 检查Token是否拥有所有指定角色(AND逻辑) -func CheckRoleAndByToken(tokenValue string, roles []string) error { - return stputil.CheckRoleAnd(tokenValue, roles) -} - -// CheckRoleOrByToken checks if the token has any of the specified roles (OR logic) | 检查Token是否拥有指定角色中的任意一个(OR逻辑) -func CheckRoleOrByToken(tokenValue string, roles []string) error { - return stputil.CheckRoleOr(tokenValue, roles) -} - -// GetRoleListByToken gets the role list for a token | 获取Token的角色列表 -func GetRoleListByToken(tokenValue string) ([]string, error) { - return stputil.GetRoleList(tokenValue) -} - -// ============ Session Management | Session管理 ============ - -// GetSession gets the session for a login ID | 获取登录ID的Session -func GetSession(loginID interface{}) (*Session, error) { - return stputil.GetSession(loginID) -} - -// GetSessionByToken gets the session by token | 根据Token获取Session -func GetSessionByToken(tokenValue string) (*Session, error) { - return stputil.GetSessionByToken(tokenValue) -} - -// GetTokenSession gets the token session | 获取Token的Session -func GetTokenSession(tokenValue string) (*Session, error) { - return stputil.GetTokenSession(tokenValue) -} - -// ============ Token Renewal | Token续期 ============ -// Note: Token auto-renewal is handled automatically by the manager -// 注意:Token自动续期由管理器自动处理 - -// ============ Security Features | 安全特性 ============ - -// GenerateNonce generates a new nonce token | 生成新的Nonce令牌 -func GenerateNonce() (string, error) { - return stputil.GenerateNonce() -} - -// VerifyNonce verifies a nonce token | 验证Nonce令牌 -func VerifyNonce(nonce string) bool { - return stputil.VerifyNonce(nonce) -} - -// LoginWithRefreshToken performs login and returns refresh token info | 登录并返回刷新令牌信息 -func LoginWithRefreshToken(loginID interface{}, device ...string) (*RefreshTokenInfo, error) { - return stputil.LoginWithRefreshToken(loginID, device...) -} - -// RefreshAccessToken refreshes the access token using a refresh token | 使用刷新令牌刷新访问令牌 -func RefreshAccessToken(refreshToken string) (*RefreshTokenInfo, error) { - return stputil.RefreshAccessToken(refreshToken) -} - -// RevokeRefreshToken revokes a refresh token | 撤销刷新令牌 -func RevokeRefreshToken(refreshToken string) error { - return stputil.RevokeRefreshToken(refreshToken) -} - -// GetOAuth2Server gets the OAuth2 server instance | 获取OAuth2服务器实例 -func GetOAuth2Server() *OAuth2Server { - return stputil.GetOAuth2Server() -} - -// Version Sa-Token-Go version | Sa-Token-Go版本 -const Version = core.Version diff --git a/integrations/gin/middleware.go b/integrations/gin/middleware.go new file mode 100644 index 0000000..337fdcd --- /dev/null +++ b/integrations/gin/middleware.go @@ -0,0 +1,328 @@ +package gin + +import ( + "context" + "errors" + saContext "github.com/click33/sa-token-go/core/context" + "github.com/click33/sa-token-go/core/manager" + "github.com/click33/sa-token-go/stputil" + "net/http" + + "github.com/click33/sa-token-go/core" + "github.com/click33/sa-token-go/core/config" + "github.com/gin-gonic/gin" +) + +// LogicType permission/role logic type | 权限/角色判断逻辑 +type LogicType string + +const ( + SaTokenCtxKey = "satoken" + + LogicOr LogicType = "OR" // 任一满足 + LogicAnd LogicType = "AND" // 全部满足 +) + +// AuthOption defines optional parameters for middleware | 中间件可选参数 +type AuthOption func(*AuthOptions) + +// AuthOptions stores optional parameters | 中间件可选参数结构体 +type AuthOptions struct { + AuthType string + LogicType LogicType + AuthFailFunc func(c *gin.Context, err error) +} + +// defaultAuthOptions returns default options | 默认中间件选项 +func defaultAuthOptions() *AuthOptions { + return &AuthOptions{LogicType: LogicAnd} // 默认 AND +} + +// WithAuthType sets AuthType option | 设置认证类型 +func WithAuthType(authType string) AuthOption { + return func(o *AuthOptions) { + o.AuthType = authType + } +} + +// WithLogicType sets LogicType option | 设置逻辑类型 +func WithLogicType(logicType LogicType) AuthOption { + return func(o *AuthOptions) { + o.LogicType = logicType + } +} + +// WithAuthFailFunc sets custom fail function | 设置自定义失败函数 +func WithAuthFailFunc(fn func(c *gin.Context, err error)) AuthOption { + return func(o *AuthOptions) { + o.AuthFailFunc = fn + } +} + +// ========== Middlewares ========== + +// AuthMiddleware checks login | 登录状态校验中间件 +func AuthMiddleware(opts ...AuthOption) gin.HandlerFunc { + options := defaultAuthOptions() + for _, opt := range opts { + opt(options) + } + + return func(c *gin.Context) { + // 获取 Manager | Get Manager + mgr, err := stputil.GetManager(options.AuthType) + if err != nil { + if options.AuthFailFunc != nil { + options.AuthFailFunc(c, err) // 自定义失败处理 | custom fail handler + } else { + writeErrorResponse(c, err) // 默认失败响应 | default error response + } + c.Abort() + return + } + + // 构建 Sa-Token 上下文 | Build Sa-Token context + saCtx := getSaContext(c, mgr) + err = mgr.CheckLogin( + context.WithValue(c.Request.Context(), config.CtxTokenValue, saCtx.GetTokenValue()), + ) + if err != nil { + if options.AuthFailFunc != nil { + options.AuthFailFunc(c, core.ErrNotLogin) + } else { + writeErrorResponse(c, core.ErrNotLogin) + } + c.Abort() + return + } + + c.Next() + } +} + +// AuthWithStateMiddleware with state authentication middleware | 带状态返回的认证中间件 +func AuthWithStateMiddleware(opts ...AuthOption) gin.HandlerFunc { + options := defaultAuthOptions() + for _, opt := range opts { + opt(options) + } + + return func(c *gin.Context) { + mgr, err := stputil.GetManager(options.AuthType) + if err != nil { + if options.AuthFailFunc != nil { + options.AuthFailFunc(c, err) + } else { + writeErrorResponse(c, err) + } + c.Abort() + return + } + + saCtx := getSaContext(c, mgr) + + _, err = mgr.CheckLoginWithState(context.WithValue(c.Request.Context(), config.CtxTokenValue, saCtx.GetTokenValue())) + if err != nil { + + switch { + case errors.Is(err, manager.ErrTokenKickout): + err = core.ErrTokenKickout + case errors.Is(err, manager.ErrTokenReplaced): + err = core.ErrTokenReplaced + default: + err = core.ErrNotLogin + } + + if options.AuthFailFunc != nil { + options.AuthFailFunc(c, err) + } else { + writeErrorResponse(c, err) + } + + c.Abort() + return + } + + c.Next() + } +} + +// PermissionMiddleware checks permissions | 权限校验中间件 +func PermissionMiddleware(permissions []string, opts ...AuthOption) gin.HandlerFunc { + options := defaultAuthOptions() + for _, opt := range opts { + opt(options) + } + + return func(c *gin.Context) { + if len(permissions) == 0 { + c.Next() + return + } + + // 获取 Manager | Get Manager + mgr, err := stputil.GetManager(options.AuthType) + if err != nil { + if options.AuthFailFunc != nil { + options.AuthFailFunc(c, err) + } else { + writeErrorResponse(c, err) + } + c.Abort() + return + } + + // 构建 Sa-Token 上下文 | Build Sa-Token context + saCtx := getSaContext(c, mgr) + ctx := context.WithValue(c.Request.Context(), config.CtxTokenValue, saCtx.GetTokenValue()) + + // 判断权限 | Check permissions + var ok bool + switch { + case len(permissions) == 1: + ok = mgr.HasPermissionByToken(ctx, permissions[0]) + case options.LogicType == LogicAnd: + ok = mgr.HasPermissionsAndByToken(ctx, permissions) + default: + ok = mgr.HasPermissionsOrByToken(ctx, permissions) + } + + if !ok { + if options.AuthFailFunc != nil { + options.AuthFailFunc(c, core.ErrPermissionDenied) + } else { + writeErrorResponse(c, core.ErrPermissionDenied) + } + c.Abort() + return + } + + c.Next() + } +} + +// RoleMiddleware checks roles | 角色校验中间件 +func RoleMiddleware(roles []string, opts ...AuthOption) gin.HandlerFunc { + options := defaultAuthOptions() + for _, opt := range opts { + opt(options) + } + + return func(c *gin.Context) { + if len(roles) == 0 { + c.Next() + return + } + + // 获取 Manager | Get Manager + mgr, err := stputil.GetManager(options.AuthType) + if err != nil { + if options.AuthFailFunc != nil { + options.AuthFailFunc(c, err) + } else { + writeErrorResponse(c, err) + } + c.Abort() + return + } + + // 构建 Sa-Token 上下文 | Build Sa-Token context + saCtx := getSaContext(c, mgr) + ctx := context.WithValue(c.Request.Context(), config.CtxTokenValue, saCtx.GetTokenValue()) + + // 判断角色 | Check roles + var ok bool + switch { + case len(roles) == 1: + ok = mgr.HasRoleByToken(ctx, roles[0]) + case options.LogicType == LogicAnd: + ok = mgr.HasRolesAndByToken(ctx, roles) + default: + ok = mgr.HasRolesOrByToken(ctx, roles) + } + + if !ok { + if options.AuthFailFunc != nil { + options.AuthFailFunc(c, core.ErrRoleDenied) + } else { + writeErrorResponse(c, core.ErrRoleDenied) + } + c.Abort() + return + } + + c.Next() + } +} + +// GetSaTokenContext gets Sa-Token context from Gin context | 获取 Sa-Token 上下文 +func GetSaTokenContext(c *gin.Context) (*saContext.SaTokenContext, bool) { + if v, exists := c.Get(SaTokenCtxKey); exists { + if saCtx, ok := v.(*saContext.SaTokenContext); ok { + return saCtx, true + } + } + return nil, false +} + +func getSaContext(c *gin.Context, mgr *manager.Manager) *saContext.SaTokenContext { + if v, exists := c.Get(SaTokenCtxKey); exists { + if saCtx, ok := v.(*saContext.SaTokenContext); ok { + return saCtx + } + } + + saCtx := saContext.NewContext(NewGinContext(c), mgr) + c.Set(SaTokenCtxKey, saCtx) + return saCtx +} + +// ========== Error/Success Responses ========== + +func writeErrorResponse(c *gin.Context, err error) { + var saErr *core.SaTokenError + var code int + var message string + var httpStatus int + + if errors.As(err, &saErr) { + code = saErr.Code + message = saErr.Message + httpStatus = getHTTPStatusFromCode(code) + } else { + code = core.CodeServerError + message = err.Error() + httpStatus = http.StatusInternalServerError + } + + c.JSON(httpStatus, gin.H{ + "code": code, + "message": message, + "data": []interface{}{}, + }) +} + +func writeSuccessResponse(c *gin.Context, data interface{}) { + c.JSON(http.StatusOK, gin.H{ + "code": core.CodeSuccess, + "message": "success", + "data": data, + }) +} + +func getHTTPStatusFromCode(code int) int { + switch code { + case core.CodeNotLogin: + return http.StatusUnauthorized + case core.CodePermissionDenied: + return http.StatusForbidden + case core.CodeBadRequest: + return http.StatusBadRequest + case core.CodeNotFound: + return http.StatusNotFound + case core.CodeServerError: + return http.StatusInternalServerError + default: + return http.StatusInternalServerError + } +} diff --git a/integrations/gin/plugin.go b/integrations/gin/plugin.go deleted file mode 100644 index 162a741..0000000 --- a/integrations/gin/plugin.go +++ /dev/null @@ -1,249 +0,0 @@ -package gin - -import ( - "errors" - "net/http" - - "github.com/click33/sa-token-go/core" - "github.com/gin-gonic/gin" -) - -// Plugin Gin plugin for Sa-Token | Gin插件 -type Plugin struct { - manager *core.Manager -} - -// NewPlugin creates a Gin plugin | 创建Gin插件 -func NewPlugin(manager *core.Manager) *Plugin { - return &Plugin{ - manager: manager, - } -} - -// AuthMiddleware authentication middleware | 认证中间件 -func (p *Plugin) AuthMiddleware() gin.HandlerFunc { - return func(c *gin.Context) { - ctx := NewGinContext(c) - saCtx := core.NewContext(ctx, p.manager) - - // Check login | 检查登录 - if err := saCtx.CheckLogin(); err != nil { - writeErrorResponse(c, err) - c.Abort() - return - } - - // Store Sa-Token context in Gin context | 将Sa-Token上下文存储到Gin上下文 - c.Set("satoken", saCtx) - c.Next() - } -} - -// PermissionRequired permission validation middleware | 权限验证中间件 -func (p *Plugin) PermissionRequired(permission string) gin.HandlerFunc { - return func(c *gin.Context) { - ctx := NewGinContext(c) - saCtx := core.NewContext(ctx, p.manager) - - // Check login | 检查登录 - if err := saCtx.CheckLogin(); err != nil { - writeErrorResponse(c, err) - c.Abort() - return - } - - // Check permission | 检查权限 - if !saCtx.HasPermission(permission) { - writeErrorResponse(c, core.NewPermissionDeniedError(permission)) - c.Abort() - return - } - - c.Set("satoken", saCtx) - c.Next() - } -} - -// RoleRequired role validation middleware | 角色验证中间件 -func (p *Plugin) RoleRequired(role string) gin.HandlerFunc { - return func(c *gin.Context) { - ctx := NewGinContext(c) - saCtx := core.NewContext(ctx, p.manager) - - // Check login | 检查登录 - if err := saCtx.CheckLogin(); err != nil { - writeErrorResponse(c, err) - c.Abort() - return - } - - // Check role | 检查角色 - if !saCtx.HasRole(role) { - writeErrorResponse(c, core.NewRoleDeniedError(role)) - c.Abort() - return - } - - c.Set("satoken", saCtx) - c.Next() - } -} - -// LoginHandler login handler example | 登录处理器示例 -func (p *Plugin) LoginHandler(c *gin.Context) { - var req struct { - Username string `json:"username" binding:"required"` - Password string `json:"password" binding:"required"` - Device string `json:"device"` - } - - if err := c.ShouldBindJSON(&req); err != nil { - writeErrorResponse(c, core.NewError(core.CodeBadRequest, "invalid request parameters", err)) - return - } - - // TODO: Validate username and password (should call your user service) | 验证用户名密码(这里应该调用你的用户服务) - // if !validateUser(req.Username, req.Password) { ... } - - // Login | 登录 - device := req.Device - if device == "" { - device = "log" - } - - token, err := p.manager.Login(req.Username, device) - if err != nil { - writeErrorResponse(c, core.NewError(core.CodeServerError, "login failed", err)) - return - } - - // Set cookie (optional) | 设置Cookie(可选) - cfg := p.manager.GetConfig() - if cfg.IsReadCookie { - maxAge := int(cfg.Timeout) - if maxAge < 0 { - maxAge = 0 - } - c.SetCookie( - cfg.TokenName, - token, - maxAge, - cfg.CookieConfig.Path, - cfg.CookieConfig.Domain, - cfg.CookieConfig.Secure, - cfg.CookieConfig.HttpOnly, - ) - } - - writeSuccessResponse(c, gin.H{ - "token": token, - }) -} - -// LogoutHandler logout handler | 登出处理器 -func (p *Plugin) LogoutHandler(c *gin.Context) { - ctx := NewGinContext(c) - saCtx := core.NewContext(ctx, p.manager) - - loginID, err := saCtx.GetLoginID() - if err != nil { - writeErrorResponse(c, err) - return - } - - if err := p.manager.Logout(loginID); err != nil { - writeErrorResponse(c, core.NewError(core.CodeServerError, "logout failed", err)) - return - } - - writeSuccessResponse(c, gin.H{ - "message": "logout successful", - }) -} - -// UserInfoHandler user info handler example | 获取用户信息处理器示例 -func (p *Plugin) UserInfoHandler(c *gin.Context) { - ctx := NewGinContext(c) - saCtx := core.NewContext(ctx, p.manager) - - loginID, err := saCtx.GetLoginID() - if err != nil { - writeErrorResponse(c, err) - return - } - - // Get user permissions and roles | 获取用户权限和角色 - permissions, _ := p.manager.GetPermissions(loginID) - roles, _ := p.manager.GetRoles(loginID) - - writeSuccessResponse(c, gin.H{ - "loginId": loginID, - "permissions": permissions, - "roles": roles, - }) -} - -// GetSaToken gets Sa-Token context from Gin context | 从Gin上下文获取Sa-Token上下文 -func GetSaToken(c *gin.Context) (*core.SaTokenContext, bool) { - satoken, exists := c.Get("satoken") - if !exists { - return nil, false - } - ctx, ok := satoken.(*core.SaTokenContext) - return ctx, ok -} - -// ============ Error Handling Helpers | 错误处理辅助函数 ============ - -// writeErrorResponse writes a standardized error response | 写入标准化的错误响应 -func writeErrorResponse(c *gin.Context, err error) { - var saErr *core.SaTokenError - var code int - var message string - var httpStatus int - - // Check if it's a SaTokenError | 检查是否为SaTokenError - if errors.As(err, &saErr) { - code = saErr.Code - message = saErr.Message - httpStatus = getHTTPStatusFromCode(code) - } else { - // Handle standard errors | 处理标准错误 - code = core.CodeServerError - message = err.Error() - httpStatus = http.StatusInternalServerError - } - - c.JSON(httpStatus, gin.H{ - "code": code, - "message": message, - "error": err.Error(), - }) -} - -// writeSuccessResponse writes a standardized success response | 写入标准化的成功响应 -func writeSuccessResponse(c *gin.Context, data interface{}) { - c.JSON(http.StatusOK, gin.H{ - "code": core.CodeSuccess, - "message": "success", - "data": data, - }) -} - -// getHTTPStatusFromCode converts Sa-Token error code to HTTP status | 将Sa-Token错误码转换为HTTP状态码 -func getHTTPStatusFromCode(code int) int { - switch code { - case core.CodeNotLogin: - return http.StatusUnauthorized - case core.CodePermissionDenied: - return http.StatusForbidden - case core.CodeBadRequest: - return http.StatusBadRequest - case core.CodeNotFound: - return http.StatusNotFound - case core.CodeServerError: - return http.StatusInternalServerError - default: - return http.StatusInternalServerError - } -} diff --git a/log/slog/config.go b/log/slog/config.go index f97424f..89b07f0 100644 --- a/log/slog/config.go +++ b/log/slog/config.go @@ -26,7 +26,7 @@ func DefaultLoggerConfig() *LoggerConfig { FileFormat: DefaultFileFormat, Prefix: DefaultPrefix, Level: LevelInfo, - Stdout: false, + Stdout: true, RotateSize: DefaultRotateSize, RotateExpire: DefaultRotateExpire, RotateBackupLimit: DefaultRotateBackupLimit, diff --git a/stputil/stputil.go b/stputil/stputil.go index 8d7701c..0cd3636 100644 --- a/stputil/stputil.go +++ b/stputil/stputil.go @@ -18,6 +18,11 @@ import ( var ( globalManagerMap sync.Map + + ErrTokenKickout = manager.ErrTokenKickout // token has been kicked out | Token 已被踢下线 + ErrTokenReplaced = manager.ErrTokenReplaced // token has been replaced | Token 已被顶下线 + ErrAccountDisabled = manager.ErrAccountDisabled // account is disabled | 账号已被禁用 + ErrLoginLimitExceeded = manager.ErrLoginLimitExceeded // login count exceeds the maximum limit | 超出最大登录数量限制 ) // ============ Authentication | 登录认证 ============ From ce8ede84ea04a7ef444987aa84353319a7f7c37e Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Thu, 25 Dec 2025 16:37:26 +0800 Subject: [PATCH 22/50] =?UTF-8?q?feat():=201=E3=80=81=E6=9B=B4=E6=96=B0man?= =?UTF-8?q?ager=E6=96=B9=E6=B3=95=E5=8F=82=E6=95=B0=202=E3=80=81=E6=8F=90?= =?UTF-8?q?=E5=8F=96=E9=83=A8=E5=88=86=E7=BB=9F=E4=B8=80err?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/config/config.go | 2 +- core/errors.go | 86 ++- core/listener/listener.go | 6 +- core/manager/consts.go | 17 +- core/manager/manager.go | 542 +++++++++--------- core/oauth2/consts.go | 16 - core/oauth2/oauth2.go | 132 +++-- core/security/consts.go | 9 - core/security/nonce.go | 38 +- core/security/refresh_token.go | 73 ++- .../generator_adapter_sgenerator.go | 2 +- 11 files changed, 520 insertions(+), 403 deletions(-) diff --git a/core/config/config.go b/core/config/config.go index ea0696e..e011ce5 100644 --- a/core/config/config.go +++ b/core/config/config.go @@ -20,7 +20,7 @@ type Config struct { // RenewInterval Minimum interval (in seconds) between two renewals for the same token; -1 means no limit | 同一Token两次续期的最小间隔时间(单位:秒,-1代表不限制) RenewInterval int64 - // ActiveTimeout Maximum inactivity duration (in seconds); if the Token is not accessed within this time, it will be frozen. -1 means no limit | Token最大不活跃时长(单位:秒),超过此时间未访问则被冻结,-1代表不限制 + // ActiveTimeout Maximum inactivity duration (in seconds); if the Token is not accessed within this time, it will be frozen. -1 means no limit | Token最大不活跃时长(单位:秒),超过此时间未访问则被踢出,-1代表不限制 ActiveTimeout int64 // IsConcurrent Allow concurrent login for the same account (true=allow, false=new login kicks old) | 是否允许同一账号并发登录(true=允许并发,false=新登录挤掉旧登录) diff --git a/core/errors.go b/core/errors.go index 494d559..374d1e8 100644 --- a/core/errors.go +++ b/core/errors.go @@ -20,17 +20,20 @@ var ( // ErrTokenExpired indicates the token has expired | Token已过期 ErrTokenExpired = fmt.Errorf("token expired: please login again to get a new token") - // ErrTokenKickout token has been kicked out | Token 已被踢下线 - ErrTokenKickout = fmt.Errorf("token has been kicked out") + // ErrTokenKickout indicates the token has been kicked out | Token 已被踢下线 + ErrTokenKickout = fmt.Errorf("authentication required: token has been kicked out") - // ErrTokenReplaced token has been replaced | Token 已被顶下线 - ErrTokenReplaced = fmt.Errorf("token has been replaced") + // ErrTokenReplaced indicates the token has been replaced | Token 已被顶下线 + ErrTokenReplaced = fmt.Errorf("authentication required: token has been replaced") // ErrInvalidLoginID indicates the login ID is invalid | 登录ID无效 ErrInvalidLoginID = fmt.Errorf("invalid login ID: the login identifier cannot be empty") // ErrInvalidDevice indicates the device identifier is invalid | 设备标识无效 ErrInvalidDevice = fmt.Errorf("invalid device: the device identifier is not valid") + + // ErrTokenNotFound indicates the token does not exist | Token 不存在 + ErrTokenNotFound = fmt.Errorf("authentication required: token not found") ) // ============ Authorization Errors | 授权错误 ============ @@ -59,14 +62,70 @@ var ( // ErrSessionNotFound indicates the session doesn't exist | Session不存在 ErrSessionNotFound = fmt.Errorf("session not found: the session may have expired or been deleted") - // ErrKickedOut indicates the user has been kicked out | 用户已被踢下线 - ErrKickedOut = fmt.Errorf("kicked out: this session has been forcibly terminated") - // ErrActiveTimeout indicates the session has been inactive for too long | Session活跃超时 ErrActiveTimeout = fmt.Errorf("session inactive: the session has exceeded the inactivity timeout") - // ErrMaxLoginCount indicates maximum concurrent login limit reached | 达到最大登录数量限制 - ErrMaxLoginCount = fmt.Errorf("max login limit: maximum number of concurrent logins reached") + // ErrLoginLimitExceeded indicates login count exceeds the maximum limit | 超出最大登录数量限制 + ErrLoginLimitExceeded = fmt.Errorf("account error: login count exceeds the maximum limit") +) + +// ============ Security Errors | Security 错误 ============ + +var ( + // ErrInvalidNonce indicates the nonce is invalid or expired | Nonce 无效或已过期 + ErrInvalidNonce = fmt.Errorf("invalid nonce: nonce is invalid or expired") + + // ErrRefreshTokenExpired indicates the refresh token has expired | 刷新令牌已过期 + ErrRefreshTokenExpired = fmt.Errorf("refresh token expired: please request a new token") + + // ErrNonceInvalidRefreshToken indicates the refresh token is invalid | 刷新令牌无效 + ErrNonceInvalidRefreshToken = fmt.Errorf("invalid refresh token: token is malformed or does not exist") + + // ErrInvalidLoginIDEmpty indicates loginID is empty | 登录ID不能为空 + ErrInvalidLoginIDEmpty = fmt.Errorf("invalid loginID: loginID cannot be empty") +) + +// ============ OAuth2 Errors | OAuth2 错误 ============ + +var ( + // ErrClientOrClientIDEmpty indicates client or clientID is empty | 客户端或客户端ID为空 + ErrClientOrClientIDEmpty = fmt.Errorf("invalid client: clientID is required") + + // ErrClientNotFound indicates the client does not exist | 客户端不存在 + ErrClientNotFound = fmt.Errorf("client error: client not found") + + // ErrUserIDEmpty indicates userID is empty | 用户ID不能为空 + ErrUserIDEmpty = fmt.Errorf("invalid user: userID cannot be empty") + + // ErrInvalidRedirectURI indicates redirect URI is invalid | 回调URI非法 + ErrInvalidRedirectURI = fmt.Errorf("invalid redirect uri: redirectUri is not allowed") + + // ErrInvalidClientCredentials indicates incorrect client credentials | 客户端凭证无效 + ErrInvalidClientCredentials = fmt.Errorf("invalid client credentials: authentication failed") + + // ErrInvalidAuthCode indicates an invalid authorization code | 授权码无效 + ErrInvalidAuthCode = fmt.Errorf("invalid authorization code: code is malformed or does not exist") + + // ErrAuthCodeUsed indicates the authorization code has already been used | 授权码已被使用 + ErrAuthCodeUsed = fmt.Errorf("authorization code error: code already used") + + // ErrAuthCodeExpired indicates the authorization code has expired | 授权码已过期 + ErrAuthCodeExpired = fmt.Errorf("authorization code expired: please restart authorization process") + + // ErrClientMismatch indicates client mismatch | 客户端不匹配 + ErrClientMismatch = fmt.Errorf("client mismatch: clientID does not match the authorization code") + + // ErrRedirectURIMismatch indicates redirect URI mismatch | 回调URI不匹配 + ErrRedirectURIMismatch = fmt.Errorf("redirect uri mismatch: callback URL does not match registered value") + + // ErrInvalidAccessToken indicates access token invalid | 访问令牌无效 + ErrInvalidAccessToken = fmt.Errorf("invalid access token: token is malformed or expired") + + // ErrInvalidRefreshToken indicates refresh token invalid | 刷新令牌无效 + ErrInvalidRefreshToken = fmt.Errorf("invalid refresh token: token is malformed or expired") + + // ErrInvalidScope indicates requested scope is not allowed | 请求的权限范围不被允许 + ErrInvalidScope = fmt.Errorf("invalid scope: requested scope is not allowed for this client") ) // ============ System Errors | 系统错误 ============ @@ -74,6 +133,15 @@ var ( var ( // ErrStorageUnavailable indicates the storage backend is unavailable | 存储后端不可用 ErrStorageUnavailable = fmt.Errorf("storage unavailable: unable to connect to storage backend") + + // ErrSerializeFailed indicates serialization failed | 序列化失败 + ErrSerializeFailed = fmt.Errorf("serialize failed: unable to encode data") + + // ErrDeserializeFailed indicates deserialization failed | 反序列化失败 + ErrDeserializeFailed = fmt.Errorf("deserialize failed: unable to decode data") + + // ErrTypeConvert indicates a type conversion failed | 类型转换失败 + ErrTypeConvert = fmt.Errorf("type conversion failed: unable to convert value to target type") ) // ============ Custom Error Type | 自定义错误类型 ============ diff --git a/core/listener/listener.go b/core/listener/listener.go index 2fee85d..f103e09 100644 --- a/core/listener/listener.go +++ b/core/listener/listener.go @@ -339,9 +339,9 @@ func (m *Manager) Trigger(data *EventData) { m.mu.RUnlock() - // log - m.logger.Debugf( - "[listener] auth event triggered: event=%s, authType=%s, loginID=%s, device=%s, listeners=%d", + // 日志 + m.logger.Infof( + "Listener auth event triggered: event=%s, authType=%s, loginID=%s, device=%s, listeners=%d", data.Event, data.AuthType, data.LoginID, diff --git a/core/manager/consts.go b/core/manager/consts.go index a4e74a8..8598fcb 100644 --- a/core/manager/consts.go +++ b/core/manager/consts.go @@ -2,17 +2,13 @@ package manager import ( - "fmt" "time" ) // Constants for storage keys and log values | 存储键和默认值常量 const ( - DefaultDevice = "default" // Default device type | 默认设备类型 - DefaultPrefix = "satoken" // Default key prefix | 默认键前缀 - DisableValue = "1" // Disabled flag value | 被禁用标记值 - DefaultRenewValue = "1" // Default renew flag value | 默认续期标记值 - DefaultNonceTTL = 5 * time.Minute // Default nonce expiration time | 默认随机令牌有效期 + DefaultDevice = "default" // Default device type | 默认设备类型 + DefaultNonceTTL = 5 * time.Minute // Default nonce expiration time | 默认随机令牌有效期 // Key prefixes | 键前缀 TokenKeyPrefix = "token:" // Token storage prefix | Token 存储前缀 @@ -41,12 +37,3 @@ const ( TokenStateKickout TokenState = "KICK_OUT" // Kickout state | 被踢下线 TokenStateReplaced TokenState = "BE_REPLACED" // Replaced state | 被顶下线 ) - -var ( - ErrTokenNotFound = fmt.Errorf("token not found") // token not found | Token 不存在 - ErrTokenKickout = fmt.Errorf("token has been kicked out") // token has been kicked out | Token 已被踢下线 - ErrTokenReplaced = fmt.Errorf("token has been replaced") // token has been replaced | Token 已被顶下线 - ErrNotLogin = fmt.Errorf("not login") // not login | 未登录 - ErrAccountDisabled = fmt.Errorf("account is disabled") // account is disabled | 账号已被禁用 - ErrLoginLimitExceeded = fmt.Errorf("login count exceeds the maximum limit") // login count exceeds the maximum limit | 超出最大登录数量限制 -) diff --git a/core/manager/manager.go b/core/manager/manager.go index 1567aea..7e2f7e2 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -4,6 +4,7 @@ import ( "context" "fmt" codec_json "github.com/click33/sa-token-go/codec/json" + "github.com/click33/sa-token-go/core" "github.com/click33/sa-token-go/core/utils" "github.com/click33/sa-token-go/generator/sgenerator" "github.com/click33/sa-token-go/log/nop" @@ -30,6 +31,12 @@ type TokenInfo struct { Tag string `json:"tag,omitempty"` // Custom tag for additional data | 自定义标记字段(可选) } +// DisableInfo Account disable information | 封禁信息结构体 +type DisableInfo struct { + DisableTime int64 `json:"disableTime"` // Disable timestamp | 封禁时间戳 + DisableReason string `json:"disableReason"` // Reason for account disable | 账号封禁原因说明 +} + // Manager Authentication manager | 认证管理器 type Manager struct { config *config.Config // Global authentication configuration | 全局认证配置 @@ -44,19 +51,19 @@ type Manager struct { logger adapter.Log // Log adapter for logging operations | 日志适配器 pool adapter.Pool // Async task pool component | 异步任务协程池组件 - CustomPermissionListFunc func(ctx context.Context, loginID string) ([]string, error) // Custom permission func | 自定义权限获取函数 - CustomRoleListFunc func(ctx context.Context, loginID string) ([]string, error) // Custom role func | 自定义角色获取函数 + CustomPermissionListFunc func(loginID string) ([]string, error) // Custom permission func | 自定义权限获取函数 + CustomRoleListFunc func(loginID string) ([]string, error) // Custom role func | 自定义角色获取函数 } // NewManager creates and initializes a new Manager instance | 创建并初始化一个新的 Manager 实例 -func NewManager(cfg *config.Config, generator adapter.Generator, storage adapter.Storage, serializer adapter.Codec, logger adapter.Log, pool adapter.Pool, customPermissionListFunc, CustomRoleListFunc func(ctx context.Context, loginID string) ([]string, error)) *Manager { +func NewManager(cfg *config.Config, generator adapter.Generator, storage adapter.Storage, serializer adapter.Codec, logger adapter.Log, pool adapter.Pool, customPermissionListFunc, CustomRoleListFunc func(loginID string) ([]string, error)) *Manager { // Use default configuration if cfg is nil | 如果未传入配置,则使用默认配置 if cfg == nil { cfg = config.DefaultConfig() } - // generator + // Initialize token generator if generator is nil | 如果未传入 Token 生成器,则创建默认生成器 if generator == nil { generator = sgenerator.NewGenerator(cfg.Timeout, cfg.TokenStyle, cfg.JwtSecretKey) } @@ -152,17 +159,19 @@ func (m *Manager) CloseManager() { // ============ Login Authentication | 登录认证 ============ -// Login Performs user login and returns token | 登录,返回Token TODO 后续参数可以修改为结构体 -func (m *Manager) Login(ctx context.Context, loginID string, device ...string) (string, error) { +// Login Performs user login and returns token | 登录 返回Token +func (m *Manager) Login(loginID string, device ...string) (string, error) { // Check if account is disabled | 检查账号是否被封禁 - if m.IsDisable(ctx, loginID) { - return "", ErrAccountDisabled + if m.IsDisable(loginID) { + // 如果账号被封禁,则返回core的自定义错误 + return "", core.ErrAccountDisabled } // 获取设备类型 deviceType := getDevice(device) + // 获取账号存储键 - accountKey := m.getAccountKey(ctx, loginID, deviceType) + accountKey := m.getAccountKey(loginID, deviceType) // Handle shared token for concurrent login | 处理多人登录共用 Token 的情况 if m.config.IsShare { @@ -170,9 +179,9 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( existingToken, err := m.storage.Get(accountKey) if err == nil && existingToken != nil { // 校验一下如果登录Token有效 - if tokenStr, ok := assertString(existingToken); ok && m.IsLogin(context.WithValue(ctx, config.CtxTokenValue, existingToken)) { + if existingTokenStr, ok := assertString(existingToken); ok && m.IsLogin(existingTokenStr) { // If valid token exists, return it directly | 如果已有 Token 且有效,则直接返回 - return tokenStr, nil + return existingTokenStr, nil } } } @@ -180,14 +189,13 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( // Handle concurrent login behavior | 处理并发登录逻辑 if !m.config.IsConcurrent { // Concurrent login not allowed → replace previous login on the same device | 不允许并发登录 顶掉同设备下已存在的登录会话 - _ = m.replace(ctx, loginID, deviceType) + _ = m.replace(loginID, deviceType) } else if m.config.MaxLoginCount > 0 && !m.config.IsShare { // Concurrent login allowed but limited by MaxLoginCount | 允许并发登录但受 MaxLoginCount 限制 - tokens, _ := m.GetTokenValueListByLoginID(ctx, loginID) + tokens, _ := m.GetTokenValueListByLoginID(loginID) if int64(len(tokens)) >= m.config.MaxLoginCount { - // Reached maximum concurrent login count | 已达到最大并发登录数 如需也可改为 踢掉最早Token - return "", ErrLoginLimitExceeded + return "", core.ErrLoginLimitExceeded } } @@ -211,24 +219,21 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( ActiveTime: nowTime, }) if err != nil { - return "", fmt.Errorf("%w: %v", fmt.Errorf("failed to encode data"), err) + return "", fmt.Errorf("%w: %v", core.ErrSerializeFailed, err) } - // 生成新的ctx - ctx = context.WithValue(ctx, config.CtxTokenValue, tokenValue) - // Save token-tokenInfo mapping | 保存 TokenKey-TokenInfo 映射 - tokenKey := m.getTokenKey(ctx) + tokenKey := m.getTokenKey(tokenValue) if err = m.storage.Set(tokenKey, tokenInfo, expiration); err != nil { - return "", err + return "", fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } // Save account-token mapping | 保存 AccountKey-Token 映射 if err = m.storage.Set(accountKey, tokenValue, expiration); err != nil { - return "", err + return "", fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } - // Create session | 创建Session + // Create session | 创建Session TODO 修改err err = session. NewSession(m.config.AuthType, m.config.KeyPrefix, loginID, m.storage, m.serializer). SetMulti( @@ -258,118 +263,120 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( } // LoginByToken Login with specified token (for seamless token refresh) | 使用指定Token登录(用于token无感刷新) -func (m *Manager) LoginByToken(ctx context.Context) error { - info, err := m.getTokenInfoByTokenValue(ctx) +func (m *Manager) LoginByToken(tokenValue string) error { + info, err := m.getTokenInfoByTokenValue(tokenValue) if err != nil { return err } // Check if the account is disabled | 检查账号是否被封禁 - if m.IsDisable(ctx, info.LoginID) { - return ErrAccountDisabled + if m.IsDisable(info.LoginID) { + return core.ErrAccountDisabled } // Renews token expiration asynchronously | 异步续期Token - m.renewToken(ctx, info) + m.renewToken(tokenValue, info) return nil } // Logout Performs user logout | 登出 -func (m *Manager) Logout(ctx context.Context, loginID string, device ...string) error { +func (m *Manager) Logout(loginID string, device ...string) error { // Get account key | 获取账号存储键 - accountKey := m.getAccountKey(ctx, loginID, getDevice(device)) + accountKey := m.getAccountKey(loginID, getDevice(device)) // Get token value | 获取Token值 tokenValue, err := m.storage.Get(accountKey) - if err != nil || tokenValue == nil { + if err != nil { + return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) + } + if tokenValue == nil { return nil } // Assert token value type | 类型断言为字符串 - tokenStr, ok := assertString(tokenValue) + tokenValueStr, ok := assertString(tokenValue) if !ok { return nil } - return m.removeTokenChain(context.WithValue(ctx, config.CtxTokenValue, tokenStr), false, nil, listener.EventLogout) + return m.removeTokenChain(tokenValueStr, false, nil, listener.EventLogout) } // LogoutByToken Logout by token | 根据Token登出 -func (m *Manager) LogoutByToken(ctx context.Context) error { - return m.removeTokenChain(ctx, false, nil, listener.EventLogout) +func (m *Manager) LogoutByToken(tokenValue string) error { + return m.removeTokenChain(tokenValue, false, nil, listener.EventLogout) } // kickout Kick user offline (private) | 踢人下线(私有) -func (m *Manager) kickout(ctx context.Context, loginID string, device string) error { - accountKey := m.getAccountKey(ctx, loginID, device) +func (m *Manager) kickout(loginID string, device string) error { + accountKey := m.getAccountKey(loginID, device) tokenValue, err := m.storage.Get(accountKey) if err != nil || tokenValue == nil { return nil } - tokenStr, ok := assertString(tokenValue) + tokenValueStr, ok := assertString(tokenValue) if !ok { return nil } - return m.removeTokenChain(context.WithValue(ctx, config.CtxTokenValue, tokenStr), false, nil, listener.EventKickout) + return m.removeTokenChain(tokenValueStr, false, nil, listener.EventKickout) } // Kickout Kick user offline (public method) | 踢人下线(公开方法) -func (m *Manager) Kickout(ctx context.Context, loginID string, device ...string) error { +func (m *Manager) Kickout(loginID string, device ...string) error { deviceType := getDevice(device) - return m.kickout(ctx, loginID, deviceType) + return m.kickout(loginID, deviceType) } // kickoutByToken Kick user offline (private) | 根据Token踢人下线(私有) -func (m *Manager) kickoutByToken(ctx context.Context) error { - return m.removeTokenChain(ctx, false, nil, listener.EventKickout) +func (m *Manager) kickoutByToken(tokenValue string) error { + return m.removeTokenChain(tokenValue, false, nil, listener.EventKickout) } // KickoutByToken Kick user offline (public method) | 根据Token踢人下线(公开方法) -func (m *Manager) KickoutByToken(ctx context.Context) error { - return m.kickoutByToken(ctx) +func (m *Manager) KickoutByToken(tokenValue string) error { + return m.kickoutByToken(tokenValue) } // replace Replace user offline by login ID and device (private) | 根据账号和设备顶人下线(私有) -func (m *Manager) replace(ctx context.Context, loginID string, device string) error { - accountKey := m.getAccountKey(ctx, loginID, device) +func (m *Manager) replace(loginID string, device string) error { + accountKey := m.getAccountKey(loginID, device) tokenValue, err := m.storage.Get(accountKey) if err != nil || tokenValue == nil { return nil } - tokenStr, ok := assertString(tokenValue) - if !ok { - return nil + if tokenValueStr, ok := assertString(tokenValue); ok { + return m.removeTokenChain(tokenValueStr, false, nil, listener.EventReplace) } - return m.removeTokenChain(context.WithValue(ctx, config.CtxTokenValue, tokenStr), false, nil, listener.EventReplace) + return nil } // Replace user offline by login ID and device (public method) | 根据账号和设备顶人下线(公开方法) -func (m *Manager) Replace(ctx context.Context, loginID string, device ...string) error { +func (m *Manager) Replace(loginID string, device ...string) error { deviceType := getDevice(device) - return m.replace(ctx, loginID, deviceType) + return m.replace(loginID, deviceType) } // replaceByToken Replace user offline by token (private) | 根据Token顶人下线(私有) -func (m *Manager) replaceByToken(ctx context.Context) error { - return m.removeTokenChain(ctx, false, nil, listener.EventReplace) +func (m *Manager) replaceByToken(tokenValue string) error { + return m.removeTokenChain(tokenValue, false, nil, listener.EventReplace) } // ReplaceByToken Replace user offline by token (public method) | 根据Token顶人下线(公开方法) -func (m *Manager) ReplaceByToken(ctx context.Context) error { - return m.replaceByToken(ctx) +func (m *Manager) ReplaceByToken(tokenValue string) error { + return m.replaceByToken(tokenValue) } // ============ Token Validation | Token验证 ============ // IsLogin Checks if the user is logged in | 检查用户是否登录 -func (m *Manager) IsLogin(ctx context.Context) bool { +func (m *Manager) IsLogin(tokenValue string) bool { // Retrieve token information using the token value from context | 从上下文中获取Token值并检索Token信息 - info, err := m.getTokenInfoByTokenValue(ctx) + info, err := m.getTokenInfoByTokenValue(tokenValue) if err != nil { return false // Return false if token info retrieval fails | 如果获取Token信息失败,则返回false } @@ -379,7 +386,7 @@ func (m *Manager) IsLogin(ctx context.Context) bool { now := time.Now().Unix() if now-info.ActiveTime > m.config.ActiveTimeout { // Force logout and clean up token data | 强制登出并清理Token相关数据 - _ = m.removeTokenChain(ctx, false, info, listener.EventKickout) + _ = m.removeTokenChain(tokenValue, false, info, listener.EventKickout) return false // Return false if the token has expired | 如果Token超时,则返回false } } @@ -387,15 +394,15 @@ func (m *Manager) IsLogin(ctx context.Context) bool { // Async auto-renew for better performance | 异步自动续期(提高性能) if m.config.AutoRenew && m.config.Timeout > 0 { // Construct the token storage key | 构造Token存储键 - tokenKey := m.getTokenKey(ctx) + tokenKey := m.getTokenKey(tokenValue) // Check if token renewal is needed | 检查是否需要进行续期 if ttl, err := m.storage.TTL(tokenKey); err == nil { ttlSeconds := int64(ttl.Seconds()) // Perform renewal if TTL is below MaxRefresh threshold and RenewInterval allows | 如果TTL小于MaxRefresh阈值且RenewInterval允许,则进行续期 - if ttlSeconds > 0 && (m.config.MaxRefresh <= 0 || ttlSeconds <= m.config.MaxRefresh) && (m.config.RenewInterval <= 0 || !m.storage.Exists(m.getRenewKey(ctx))) { - renewFunc := func() { m.renewToken(ctx, info) } + if ttlSeconds > 0 && (m.config.MaxRefresh <= 0 || ttlSeconds <= m.config.MaxRefresh) && (m.config.RenewInterval <= 0 || !m.storage.Exists(m.getRenewKey(tokenValue))) { + renewFunc := func() { m.renewToken(tokenValue, info) } // Submit renewal task to the pool if configured, otherwise use a goroutine | 如果配置了续期池,则提交续期任务到池中,否则使用协程 if m.pool != nil { @@ -411,17 +418,17 @@ func (m *Manager) IsLogin(ctx context.Context) bool { } // CheckLogin Checks login status (throws serror if not logged in) | 检查登录(未登录抛出错误) -func (m *Manager) CheckLogin(ctx context.Context) error { - if !m.IsLogin(ctx) { - return ErrNotLogin +func (m *Manager) CheckLogin(tokenValue string) error { + if !m.IsLogin(tokenValue) { + return core.ErrNotLogin } return nil } // CheckLoginWithState Checks if user is logged in | 检查是否登录(返回详细状态err) -func (m *Manager) CheckLoginWithState(ctx context.Context) (bool, error) { +func (m *Manager) CheckLoginWithState(tokenValue string) (bool, error) { // Try to get token info with state check | 尝试获取Token信息(包含状态检查) - info, err := m.getTokenInfoByTokenValue(ctx, true) + info, err := m.getTokenInfoByTokenValue(tokenValue, true) if err != nil { return false, err } @@ -430,23 +437,23 @@ func (m *Manager) CheckLoginWithState(ctx context.Context) (bool, error) { now := time.Now().Unix() if now-info.ActiveTime > m.config.ActiveTimeout { // Force logout and clean up token data | 强制登出并清理Token相关数据 - _ = m.removeTokenChain(ctx, false, info, listener.EventKickout) - return false, ErrTokenKickout + _ = m.removeTokenChain(tokenValue, false, info, listener.EventKickout) + return false, core.ErrTokenKickout } } // Async auto-renew for better performance | 异步自动续期(提高性能) if m.config.AutoRenew && m.config.Timeout > 0 { // Construct the token storage key | 构造Token存储键 - tokenKey := m.getTokenKey(ctx) + tokenKey := m.getTokenKey(tokenValue) // Check if token renewal is needed | 检查是否需要进行续期 if ttl, err := m.storage.TTL(tokenKey); err == nil { ttlSeconds := int64(ttl.Seconds()) // Perform renewal if TTL is below MaxRefresh threshold and RenewInterval allows | 如果TTL小于MaxRefresh阈值且RenewInterval允许,则进行续期 - if ttlSeconds > 0 && (m.config.MaxRefresh <= 0 || ttlSeconds <= m.config.MaxRefresh) && (m.config.RenewInterval <= 0 || !m.storage.Exists(m.getRenewKey(ctx))) { - renewFunc := func() { m.renewToken(ctx, info) } + if ttlSeconds > 0 && (m.config.MaxRefresh <= 0 || ttlSeconds <= m.config.MaxRefresh) && (m.config.RenewInterval <= 0 || !m.storage.Exists(m.getRenewKey(tokenValue))) { + renewFunc := func() { m.renewToken(tokenValue, info) } // Submit renewal task to the pool if configured, otherwise use a goroutine | 如果配置了续期池,则提交续期任务到池中,否则使用协程 if m.pool != nil { @@ -462,21 +469,21 @@ func (m *Manager) CheckLoginWithState(ctx context.Context) (bool, error) { } // GetLoginID Gets login ID from token | 根据Token获取登录ID -func (m *Manager) GetLoginID(ctx context.Context) (string, error) { +func (m *Manager) GetLoginID(tokenValue string) (string, error) { // Check if the user is logged in | 检查用户是否已登录 - isLogin := m.IsLogin(ctx) + isLogin := m.IsLogin(tokenValue) if !isLogin { - return "", ErrNotLogin // Return error if not logged in | 如果未登录,则返回错误 + return "", core.ErrNotLogin // Return error if not logged in | 如果未登录,则返回错误 } // Retrieve the login ID without checking token validity | 获取登录ID,不检查Token有效性 - return m.GetLoginIDNotCheck(ctx) + return m.GetLoginIDNotCheck(tokenValue) } // GetLoginIDNotCheck Gets login ID without checking token validity | 获取登录ID(不检查Token是否有效) -func (m *Manager) GetLoginIDNotCheck(ctx context.Context) (string, error) { +func (m *Manager) GetLoginIDNotCheck(tokenValue string) (string, error) { // Retrieve token information using the token value from context | 从上下文中获取Token值并检索Token信息 - info, err := m.getTokenInfoByTokenValue(ctx) + info, err := m.getTokenInfoByTokenValue(tokenValue) if err != nil { return "", err // Return error if token info retrieval fails | 如果获取Token信息失败,返回错误 } @@ -485,73 +492,118 @@ func (m *Manager) GetLoginIDNotCheck(ctx context.Context) (string, error) { } // GetTokenValue Gets token by login ID and device | 根据登录ID以及设备获取Token -func (m *Manager) GetTokenValue(ctx context.Context, loginID string, device ...string) (string, error) { +func (m *Manager) GetTokenValue(loginID string, device ...string) (string, error) { // Construct the account storage key | 构造账号存储键 - accountKey := m.getAccountKey(ctx, loginID, getDevice(device)) + accountKey := m.getAccountKey(loginID, getDevice(device)) // Retrieve the token value from storage | 从存储中获取Token值 tokenValue, err := m.storage.Get(accountKey) if err != nil || tokenValue == nil { - return "", ErrTokenNotFound // Return error if token not found | 如果未找到Token,则返回错误 + return "", core.ErrTokenNotFound // Return error if token not found | 如果未找到Token,则返回错误 } // Assert token value as a string | 断言Token值为字符串 - tokenStr, ok := assertString(tokenValue) + tokenValueStr, ok := assertString(tokenValue) if !ok { - return "", ErrTokenNotFound // Return error if token is not a valid string | 如果Token不是有效字符串,则返回错误 + return "", core.ErrTokenNotFound } // Return the token string | 返回Token字符串 - return tokenStr, nil + return tokenValueStr, nil } -// GetTokenInfo Gets token information | 获取Token信息 -func (m *Manager) GetTokenInfo(ctx context.Context) (*TokenInfo, error) { - return m.getTokenInfoByTokenValue(ctx) +// GetTokenInfoByToken Gets token information | 获取Token信息 +func (m *Manager) GetTokenInfoByToken(tokenValue string) (*TokenInfo, error) { + return m.getTokenInfoByTokenValue(tokenValue) } // ============ Account Disable | 账号封禁 ============ // Disable Disables an account | 封禁账号 -func (m *Manager) Disable(ctx context.Context, loginID string, duration time.Duration) error { +func (m *Manager) Disable(loginID string, duration time.Duration, reason ...string) error { // Check if the account has active sessions and force logout | 检查账号是否有活跃会话并强制下线 - tokens, err := m.GetTokenValueListByLoginID(ctx, loginID) + tokens, err := m.GetTokenValueListByLoginID(loginID) if err == nil && len(tokens) > 0 { for _, tokenValue := range tokens { // Force kick out each active token | 强制踢出所有活跃的Token - _ = m.removeTokenChain(context.WithValue(ctx, config.CtxTokenValue, tokenValue), true, nil, listener.EventKickout) + _ = m.removeTokenChain(tokenValue, true, nil, listener.EventKickout) } } // Retrieve the disable flag storage key | 获取封禁标记的存储键 - key := m.getDisableKey(ctx, loginID) + key := m.getDisableKey(loginID) + + // Prepare disable information | 准备封禁信息 + disableInfo := DisableInfo{ + DisableTime: time.Now().Unix(), + DisableReason: "", + } + if len(reason) > 0 { + disableInfo.DisableReason = reason[0] + } + + // Encode disable information into storage format | 将封禁信息序列化为存储格式 + encodeData, err := m.serializer.Encode(disableInfo) + if err != nil { + return err + } // Set disable flag with specified duration | 设置封禁标记并指定封禁时长 - return m.storage.Set(key, DisableValue, duration) + return m.storage.Set(key, encodeData, duration) } // Untie Re-enables a disabled account | 解封账号 -func (m *Manager) Untie(ctx context.Context, loginID string) error { +func (m *Manager) Untie(loginID string) error { // Retrieve the disable flag storage key | 获取封禁标记的存储键 - key := m.getDisableKey(ctx, loginID) + key := m.getDisableKey(loginID) // Remove the disable flag from storage | 删除封禁标记 return m.storage.Delete(key) } // IsDisable Checks if account is disabled | 检查账号是否被封禁 -func (m *Manager) IsDisable(ctx context.Context, loginID string) bool { +func (m *Manager) IsDisable(loginID string) bool { // Retrieve the disable flag storage key | 获取封禁标记的存储键 - key := m.getDisableKey(ctx, loginID) + key := m.getDisableKey(loginID) // Check if the disable flag exists in storage | 检查封禁标记是否存在 return m.storage.Exists(key) } +// IsDisableWithInfo Checks if the account is disabled and returns its disable info | 检查账号是否被封禁并返回封禁信息 +func (m *Manager) IsDisableWithInfo(loginID string) (*DisableInfo, error) { + // Retrieve the disable flag storage key | 获取封禁标记的存储键 + key := m.getDisableKey(loginID) + + // Get disable data from storage | 从存储中获取封禁信息 + data, err := m.storage.Get(key) + if err != nil { + m.logger.Errorf("Failed to get disable info: %v", err) + return nil, err + } + + // 将数据转换为字节数组 + raw, err := utils.ToBytes(data) + if err != nil { + m.logger.Errorf("Failed to decode disable info: %v", err) + return nil, err + } + + // Decode stored disable information | 反序列化封禁信息 + var disableInfo DisableInfo + if err := m.serializer.Decode(raw, &disableInfo); err != nil { + m.logger.Errorf("Failed to decode disable info: %v", err) + return nil, err + } + + // Account is disabled | 账号已被封禁 + return &disableInfo, nil +} + // GetDisableTime Gets remaining disable time in seconds | 获取账号剩余封禁时间(秒) -func (m *Manager) GetDisableTime(ctx context.Context, loginID string) (int64, error) { +func (m *Manager) GetDisableTime(loginID string) (int64, error) { // Retrieve the disable flag storage key | 获取封禁标记的存储键 - key := m.getDisableKey(ctx, loginID) + key := m.getDisableKey(loginID) // Retrieve the TTL (Time to Live) for the disable flag | 获取封禁标记的TTL(剩余时间) ttl, err := m.storage.TTL(key) @@ -566,7 +618,7 @@ func (m *Manager) GetDisableTime(ctx context.Context, loginID string) (int64, er // ============ Session Management | Session管理 ============ // GetSession gets session by login ID | 获取 Session -func (m *Manager) GetSession(_ context.Context, loginID string) (*session.Session, error) { +func (m *Manager) GetSession(loginID string) (*session.Session, error) { if loginID == "" { return nil, fmt.Errorf("session id cannot be empty") } @@ -577,7 +629,7 @@ func (m *Manager) GetSession(_ context.Context, loginID string) (*session.Sessio return nil, err } - // 如果找到数据,解码到新分配的 session 对象 + // If found, decode session | 如果找到 Session,则解码 var sess *session.Session if data != nil { raw, err := utils.ToBytes(data) @@ -585,14 +637,13 @@ func (m *Manager) GetSession(_ context.Context, loginID string) (*session.Sessio return nil, err } - // 直接初始化对象再解码 sess = &session.Session{} if err := m.GetCodec().Decode(raw, sess); err != nil { return nil, fmt.Errorf("failed to decode session: %w", err) } } - // 没找到就创建新的 + // If not exist, create new session | 没找到就创建新的 Session if sess == nil { sess = session.NewSession(m.config.AuthType, m.config.KeyPrefix, loginID, m.storage, m.serializer) } @@ -601,18 +652,18 @@ func (m *Manager) GetSession(_ context.Context, loginID string) (*session.Sessio } // GetSessionByToken Gets session by token | 根据Token获取Session -func (m *Manager) GetSessionByToken(ctx context.Context) (*session.Session, error) { - loginID, err := m.GetLoginID(ctx) +func (m *Manager) GetSessionByToken(tokenValue string) (*session.Session, error) { + loginID, err := m.GetLoginID(tokenValue) if err != nil { return nil, err } - return m.GetSession(ctx, loginID) + return m.GetSession(loginID) } // DeleteSession Deletes session | 删除Session -func (m *Manager) DeleteSession(ctx context.Context, loginID string) error { - sess, err := m.GetSession(ctx, loginID) +func (m *Manager) DeleteSession(loginID string) error { + sess, err := m.GetSession(loginID) if err != nil { return err } @@ -621,8 +672,8 @@ func (m *Manager) DeleteSession(ctx context.Context, loginID string) error { } // DeleteSessionByToken Deletes session by token | 根据Token删除Session -func (m *Manager) DeleteSessionByToken(ctx context.Context) error { - sess, err := m.GetSessionByToken(ctx) +func (m *Manager) DeleteSessionByToken(tokenValue string) error { + sess, err := m.GetSessionByToken(tokenValue) if err != nil { return err } @@ -633,8 +684,8 @@ func (m *Manager) DeleteSessionByToken(ctx context.Context) error { // ============ Permission Validation | 权限验证 ============ // SetPermissions Sets permissions for user | 设置权限 -func (m *Manager) SetPermissions(ctx context.Context, loginID string, permissions []string) error { - sess, err := m.GetSession(ctx, loginID) +func (m *Manager) SetPermissions(loginID string, permissions []string) error { + sess, err := m.GetSession(loginID) if err != nil { return err } @@ -649,8 +700,8 @@ func (m *Manager) SetPermissions(ctx context.Context, loginID string, permission } // RemovePermissions removes specified permissions for user | 删除用户指定权限 -func (m *Manager) RemovePermissions(ctx context.Context, loginID string, permissions []string) error { - sess, err := m.GetSession(ctx, loginID) +func (m *Manager) RemovePermissions(loginID string, permissions []string) error { + sess, err := m.GetSession(loginID) if err != nil { return err } @@ -683,16 +734,16 @@ func (m *Manager) RemovePermissions(ctx context.Context, loginID string, permiss } // GetPermissions Gets permission list | 获取权限列表 -func (m *Manager) GetPermissions(ctx context.Context, loginID string) ([]string, error) { +func (m *Manager) GetPermissions(loginID string) ([]string, error) { if m.CustomPermissionListFunc != nil { - perms, err := m.CustomPermissionListFunc(ctx, loginID) + perms, err := m.CustomPermissionListFunc(loginID) if err != nil { return nil, err } return perms, nil } - sess, err := m.GetSession(ctx, loginID) + sess, err := m.GetSession(loginID) if err != nil { return nil, err } @@ -706,14 +757,14 @@ func (m *Manager) GetPermissions(ctx context.Context, loginID string) ([]string, } // HasPermission checks whether the specified loginID has the given permission | 检查指定账号是否拥有指定权限 -func (m *Manager) HasPermission(ctx context.Context, loginID string, permission string) bool { - perms, err := m.GetPermissions(ctx, loginID) +func (m *Manager) HasPermission(loginID string, permission string) bool { + perms, err := m.GetPermissions(loginID) if err != nil { return false } for _, p := range perms { - if m.matchPermission(ctx, p, permission) { + if m.matchPermission(p, permission) { return true } } @@ -722,19 +773,19 @@ func (m *Manager) HasPermission(ctx context.Context, loginID string, permission } // HasPermissionByToken checks whether the current token subject has the specified permission | 根据当前 Token 判断是否拥有指定权限 -func (m *Manager) HasPermissionByToken(ctx context.Context, permission string) bool { - loginID, err := m.GetLoginIDNotCheck(ctx) +func (m *Manager) HasPermissionByToken(tokenValue string, permission string) bool { + loginID, err := m.GetLoginIDNotCheck(tokenValue) if err != nil { return false } - perms, err := m.GetPermissions(ctx, loginID) + perms, err := m.GetPermissions(loginID) if err != nil { return false } for _, p := range perms { - if m.matchPermission(ctx, p, permission) { + if m.matchPermission(p, permission) { return true } } @@ -743,16 +794,15 @@ func (m *Manager) HasPermissionByToken(ctx context.Context, permission string) b } // HasPermissionsAnd Checks whether the user has all permissions (AND) | 是否拥有所有权限(AND) -func (m *Manager) HasPermissionsAnd(ctx context.Context, loginID string, permissions []string) bool { - // Get all permissions once | 一次性获取用户权限 - userPerms, err := m.GetPermissions(ctx, loginID) +func (m *Manager) HasPermissionsAnd(loginID string, permissions []string) bool { + userPerms, err := m.GetPermissions(loginID) if err != nil || len(userPerms) == 0 { return false } // Check every required permission | 校验每一个必需权限 for _, need := range permissions { - if !m.hasPermissionInList(ctx, userPerms, need) { + if !m.hasPermissionInList(userPerms, need) { return false } } @@ -760,21 +810,21 @@ func (m *Manager) HasPermissionsAnd(ctx context.Context, loginID string, permiss } // HasPermissionsAndByToken checks whether the current token subject has all specified permissions (AND) | 根据当前 Token 判断是否拥有所有指定权限(AND) -func (m *Manager) HasPermissionsAndByToken(ctx context.Context, permissions []string) bool { - loginID, err := m.GetLoginIDNotCheck(ctx) +func (m *Manager) HasPermissionsAndByToken(tokenValue string, permissions []string) bool { + loginID, err := m.GetLoginIDNotCheck(tokenValue) if err != nil { return false } // Get all permissions once | 一次性获取用户权限 - userPerms, err := m.GetPermissions(ctx, loginID) + userPerms, err := m.GetPermissions(loginID) if err != nil || len(userPerms) == 0 { return false } // Check every required permission | 校验每一个必需权限 for _, need := range permissions { - if !m.hasPermissionInList(ctx, userPerms, need) { + if !m.hasPermissionInList(userPerms, need) { return false } } @@ -782,16 +832,16 @@ func (m *Manager) HasPermissionsAndByToken(ctx context.Context, permissions []st } // HasPermissionsOr Checks whether the user has any permission (OR) | 是否拥有任一权限(OR) -func (m *Manager) HasPermissionsOr(ctx context.Context, loginID string, permissions []string) bool { +func (m *Manager) HasPermissionsOr(loginID string, permissions []string) bool { // Get all permissions once | 一次性获取用户权限 - userPerms, err := m.GetPermissions(ctx, loginID) + userPerms, err := m.GetPermissions(loginID) if err != nil || len(userPerms) == 0 { return false } // Check if any permission matches | 任一权限匹配即通过 for _, need := range permissions { - if m.hasPermissionInList(ctx, userPerms, need) { + if m.hasPermissionInList(userPerms, need) { return true } } @@ -799,21 +849,21 @@ func (m *Manager) HasPermissionsOr(ctx context.Context, loginID string, permissi } // HasPermissionsOrByToken checks whether the current token subject has any of the specified permissions (OR) | 根据当前 Token 判断是否拥有任一指定权限(OR) -func (m *Manager) HasPermissionsOrByToken(ctx context.Context, permissions []string) bool { - loginID, err := m.GetLoginIDNotCheck(ctx) +func (m *Manager) HasPermissionsOrByToken(tokenValue string, permissions []string) bool { + loginID, err := m.GetLoginIDNotCheck(tokenValue) if err != nil { return false } // Get all permissions once | 一次性获取用户权限 - userPerms, err := m.GetPermissions(ctx, loginID) + userPerms, err := m.GetPermissions(loginID) if err != nil || len(userPerms) == 0 { return false } // Check if any permission matches | 任一权限匹配即通过 for _, need := range permissions { - if m.hasPermissionInList(ctx, userPerms, need) { + if m.hasPermissionInList(userPerms, need) { return true } } @@ -821,7 +871,7 @@ func (m *Manager) HasPermissionsOrByToken(ctx context.Context, permissions []str } // matchPermission Matches permission with wildcards support | 权限匹配(支持通配符) -func (m *Manager) matchPermission(_ context.Context, pattern, permission string) bool { +func (m *Manager) matchPermission(pattern, permission string) bool { // Exact match or wildcard | 精确匹配或通配符 if pattern == PermissionWildcard || pattern == permission { return true @@ -853,9 +903,9 @@ func (m *Manager) matchPermission(_ context.Context, pattern, permission string) } // hasPermissionInList checks whether permission exists in permission list | 判断权限是否存在于权限列表中 -func (m *Manager) hasPermissionInList(ctx context.Context, perms []string, permission string) bool { +func (m *Manager) hasPermissionInList(perms []string, permission string) bool { for _, p := range perms { - if m.matchPermission(ctx, p, permission) { + if m.matchPermission(p, permission) { return true } } @@ -865,8 +915,8 @@ func (m *Manager) hasPermissionInList(ctx context.Context, perms []string, permi // ============ Role Validation | 角色验证 ============ // SetRoles Sets roles for user | 设置角色 -func (m *Manager) SetRoles(ctx context.Context, loginID string, roles []string) error { - sess, err := m.GetSession(ctx, loginID) +func (m *Manager) SetRoles(loginID string, roles []string) error { + sess, err := m.GetSession(loginID) if err != nil { return err } @@ -881,8 +931,8 @@ func (m *Manager) SetRoles(ctx context.Context, loginID string, roles []string) } // RemoveRoles removes specified roles for user | 删除用户指定角色 -func (m *Manager) RemoveRoles(ctx context.Context, loginID string, roles []string) error { - sess, err := m.GetSession(ctx, loginID) +func (m *Manager) RemoveRoles(loginID string, roles []string) error { + sess, err := m.GetSession(loginID) if err != nil { return err } @@ -917,16 +967,16 @@ func (m *Manager) RemoveRoles(ctx context.Context, loginID string, roles []strin } // GetRoles gets role list for the specified loginID | 获取指定账号的角色列表 -func (m *Manager) GetRoles(ctx context.Context, loginID string) ([]string, error) { +func (m *Manager) GetRoles(loginID string) ([]string, error) { if m.CustomRoleListFunc != nil { - perms, err := m.CustomRoleListFunc(ctx, loginID) + perms, err := m.CustomRoleListFunc(loginID) if err != nil { return nil, err } return perms, nil } - sess, err := m.GetSession(ctx, loginID) + sess, err := m.GetSession(loginID) if err != nil { return nil, err } @@ -940,8 +990,8 @@ func (m *Manager) GetRoles(ctx context.Context, loginID string) ([]string, error } // HasRole checks whether the specified loginID has the given role | 检查指定账号是否拥有指定角色 -func (m *Manager) HasRole(ctx context.Context, loginID string, role string) bool { - roles, err := m.GetRoles(ctx, loginID) +func (m *Manager) HasRole(loginID string, role string) bool { + roles, err := m.GetRoles(loginID) if err != nil { return false } @@ -955,13 +1005,13 @@ func (m *Manager) HasRole(ctx context.Context, loginID string, role string) bool } // HasRoleByToken checks whether the current token subject has the specified role | 根据当前 Token 判断是否拥有指定角色 -func (m *Manager) HasRoleByToken(ctx context.Context, role string) bool { - loginID, err := m.GetLoginIDNotCheck(ctx) +func (m *Manager) HasRoleByToken(tokenValue string, role string) bool { + loginID, err := m.GetLoginIDNotCheck(tokenValue) if err != nil { return false } - roles, err := m.GetRoles(ctx, loginID) + roles, err := m.GetRoles(loginID) if err != nil { return false } @@ -975,8 +1025,8 @@ func (m *Manager) HasRoleByToken(ctx context.Context, role string) bool { } // HasRolesAnd Checks whether the user has all roles (AND) | 是否拥有所有角色(AND) -func (m *Manager) HasRolesAnd(ctx context.Context, loginID string, roles []string) bool { - userRoles, err := m.GetRoles(ctx, loginID) +func (m *Manager) HasRolesAnd(loginID string, roles []string) bool { + userRoles, err := m.GetRoles(loginID) if err != nil || len(userRoles) == 0 { return false } @@ -990,13 +1040,13 @@ func (m *Manager) HasRolesAnd(ctx context.Context, loginID string, roles []strin } // HasRolesAndByToken checks whether the current token subject has all specified roles (AND) | 根据当前 Token 判断是否拥有所有指定角色(AND) -func (m *Manager) HasRolesAndByToken(ctx context.Context, roles []string) bool { - loginID, err := m.GetLoginIDNotCheck(ctx) +func (m *Manager) HasRolesAndByToken(tokenValue string, roles []string) bool { + loginID, err := m.GetLoginIDNotCheck(tokenValue) if err != nil { return false } - userRoles, err := m.GetRoles(ctx, loginID) + userRoles, err := m.GetRoles(loginID) if err != nil || len(userRoles) == 0 { return false } @@ -1010,8 +1060,8 @@ func (m *Manager) HasRolesAndByToken(ctx context.Context, roles []string) bool { } // HasRolesOr Checks whether the user has any role (OR) | 是否拥有任一角色(OR) -func (m *Manager) HasRolesOr(ctx context.Context, loginID string, roles []string) bool { - userRoles, err := m.GetRoles(ctx, loginID) +func (m *Manager) HasRolesOr(loginID string, roles []string) bool { + userRoles, err := m.GetRoles(loginID) if err != nil || len(userRoles) == 0 { return false } @@ -1025,13 +1075,13 @@ func (m *Manager) HasRolesOr(ctx context.Context, loginID string, roles []string } // HasRolesOrByToken checks whether the current token subject has any of the specified roles (OR) | 根据当前 Token 判断是否拥有任一指定角色(OR) -func (m *Manager) HasRolesOrByToken(ctx context.Context, roles []string) bool { - loginID, err := m.GetLoginIDNotCheck(ctx) +func (m *Manager) HasRolesOrByToken(tokenValue string, roles []string) bool { + loginID, err := m.GetLoginIDNotCheck(tokenValue) if err != nil { return false } - userRoles, err := m.GetRoles(ctx, loginID) + userRoles, err := m.GetRoles(loginID) if err != nil || len(userRoles) == 0 { return false } @@ -1057,7 +1107,7 @@ func (m *Manager) hasRoleInList(roles []string, role string) bool { // ============ Token Tags | Token标签 ============ // SetTokenTag Sets token tag | 设置Token标签 -func (m *Manager) SetTokenTag(ctx context.Context, tag string) error { +func (m *Manager) SetTokenTag(tag string) error { // Tag feature not supported to comply with Java sa-token design // If you need custom metadata, use Session instead return fmt.Errorf("token tag feature not supported (use Session for custom metadata)") @@ -1072,7 +1122,7 @@ func (m *Manager) GetTokenTag(ctx context.Context) (string, error) { // ============ Session Query | 会话查询 ============ // GetTokenValueListByLoginID Gets all tokens for specified account | 获取指定账号的所有Token -func (m *Manager) GetTokenValueListByLoginID(_ context.Context, loginID string) ([]string, error) { +func (m *Manager) GetTokenValueListByLoginID(loginID string) ([]string, error) { // Construct the pattern for account key | 构造账号存储键的匹配模式 pattern := m.config.KeyPrefix + m.config.AuthType + AccountKeyPrefix + loginID + TokenValueListLastKey @@ -1101,9 +1151,9 @@ func (m *Manager) GetTokenValueListByLoginID(_ context.Context, loginID string) } // GetSessionCountByLoginID Gets session count for specified account | 获取指定账号的Session数量 -func (m *Manager) GetSessionCountByLoginID(ctx context.Context, loginID string) (int, error) { +func (m *Manager) GetSessionCountByLoginID(loginID string) (int, error) { // Get the list of token values for the specified login ID | 获取指定登录ID的Token值列表 - tokens, err := m.GetTokenValueListByLoginID(ctx, loginID) + tokens, err := m.GetTokenValueListByLoginID(loginID) if err != nil { return 0, err // Return error if token list retrieval fails | 如果获取Token列表失败,则返回错误 } @@ -1161,31 +1211,31 @@ func (m *Manager) WaitEvents() { // ============ Security Features | 安全特性 ============ -//// GenerateNonce Generates a one-time nonce | 生成一次性随机数 -//func (m *Manager) GenerateNonce(_ context.Context) (string, error) { -// return m.nonceManager.Generate() -//} -// -//// VerifyNonce Verifies a nonce | 验证随机数 -//func (m *Manager) VerifyNonce(_ context.Context, nonce string) bool { -// return m.nonceManager.Verify(nonce) -//} -// -//// LoginWithRefreshToken Logs in with refresh token | 使用刷新令牌登录 -//func (m *Manager) LoginWithRefreshToken(_ context.Context, loginID string, device ...string) (*security.RefreshTokenInfo, error) { -// deviceType := getDevice(device) -// return m.refreshManager.GenerateTokenPair(loginID, deviceType) -//} -// -//// RefreshAccessToken Refreshes access token | 刷新访问令牌 -//func (m *Manager) RefreshAccessToken(ctx context.Context) (*security.RefreshTokenInfo, error) { -// return m.refreshManager.RefreshAccessToken(utils.GetCtxValue(ctx, config.CtxTokenValue)) -//} -// -//// RevokeRefreshToken Revokes refresh token | 撤销刷新令牌 -//func (m *Manager) RevokeRefreshToken(ctx context.Context) error { -// return m.refreshManager.RevokeRefreshToken(utils.GetCtxValue(ctx, config.CtxTokenValue)) -//} +// GenerateNonce Generates a one-time nonce | 生成一次性随机数 +func (m *Manager) GenerateNonce(_ context.Context) (string, error) { + return m.nonceManager.Generate() +} + +// VerifyNonce Verifies a nonce | 验证随机数 +func (m *Manager) VerifyNonce(_ context.Context, nonce string) bool { + return m.nonceManager.Verify(nonce) +} + +// LoginWithRefreshToken Logs in with refresh token | 使用刷新令牌登录 +func (m *Manager) LoginWithRefreshToken(_ context.Context, loginID string, device ...string) (*security.RefreshTokenInfo, error) { + deviceType := getDevice(device) + return m.refreshManager.GenerateTokenPair(loginID, deviceType) +} + +// RefreshAccessToken Refreshes access token | 刷新访问令牌 +func (m *Manager) RefreshAccessToken(ctx context.Context) (*security.RefreshTokenInfo, error) { + return m.refreshManager.RefreshAccessToken(utils.GetCtxValue(ctx, config.CtxTokenValue)) +} + +// RevokeRefreshToken Revokes refresh token | 撤销刷新令牌 +func (m *Manager) RevokeRefreshToken(ctx context.Context) error { + return m.refreshManager.RevokeRefreshToken(utils.GetCtxValue(ctx, config.CtxTokenValue)) +} // ============ Public Getters | 公共获取器 ============ @@ -1242,23 +1292,23 @@ func (m *Manager) GetOAuth2Server() *oauth2.OAuth2Server { // ============ Internal Methods | 内部方法 ============ // getTokenInfoByTokenValue Gets token information by token value | 通过Token值获取Token信息 -func (m *Manager) getTokenInfoByTokenValue(ctx context.Context, checkState ...bool) (*TokenInfo, error) { +func (m *Manager) getTokenInfoByTokenValue(tokenValue string, checkState ...bool) (*TokenInfo, error) { // Construct the token storage key | 构造Token存储键 - tokenKey := m.getTokenKey(ctx) + tokenKey := m.getTokenKey(tokenValue) // Retrieve data from storage using the token key | 使用Token键从存储中获取数据 data, err := m.storage.Get(tokenKey) if err != nil { - return nil, err // Return error if data retrieval fails | 如果数据获取失败,返回错误 + return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } if data == nil { - return nil, ErrTokenNotFound // Return error if token is not found | 如果Token未找到,返回错误 + return nil, core.ErrTokenNotFound } // Convert data to raw byte slice | 将数据转换为原始字节切片 raw, err := utils.ToBytes(data) if err != nil { - return nil, err // Return error if conversion fails | 如果转换失败,返回错误 + return nil, fmt.Errorf("%w: %v", core.ErrTypeConvert, err) } // Check for special token states (if enabled) | 检查是否为特殊状态(当启用检查时) @@ -1268,10 +1318,10 @@ func (m *Manager) getTokenInfoByTokenValue(ctx context.Context, checkState ...bo switch string(raw) { case string(TokenStateKickout): // Token has been kicked out | Token已被踢下线 - return nil, ErrTokenKickout // Return error if token is kicked out | 如果Token被踢下线,返回错误 + return nil, core.ErrTokenKickout // Return error if token is kicked out | 如果Token被踢下线,返回错误 case string(TokenStateReplaced): // Token has been replaced | Token已被顶下线 - return nil, ErrTokenReplaced // Return error if token is replaced | 如果Token被顶下线,返回错误 + return nil, core.ErrTokenReplaced // Return error if token is replaced | 如果Token被顶下线,返回错误 } } @@ -1279,27 +1329,27 @@ func (m *Manager) getTokenInfoByTokenValue(ctx context.Context, checkState ...bo var info TokenInfo // Use the serializer to decode the raw data | 使用序列化器来解码原始数据 if err = m.serializer.Decode(raw, &info); err != nil { - return nil, fmt.Errorf("%w: %v", fmt.Errorf("failed to decode data"), err) // Return error if decoding fails | 如果解码失败,返回错误 + return nil, fmt.Errorf("%w: %v", core.ErrDeserializeFailed, err) } return &info, nil // Return the parsed TokenInfo | 返回解析后的Token信息 } // renewToken Renews token expiration asynchronously | 异步续期Token -func (m *Manager) renewToken(ctx context.Context, info *TokenInfo) { +func (m *Manager) renewToken(tokenValue string, info *TokenInfo) { // If info is nil, retrieve token information | 如果info为空,获取Token信息 if info == nil { var err error - info, err = m.getTokenInfoByTokenValue(ctx) + info, err = m.getTokenInfoByTokenValue(tokenValue) if err != nil { - return // Return if token info retrieval fails | 如果获取Token信息失败,返回 + return } } // Construct the token storage key | 构造Token存储键 - tokenKey := m.getTokenKey(ctx) + tokenKey := m.getTokenKey(tokenValue) // Construct the account storage key | 构造账号存储键 - accountKey := m.getAccountKey(ctx, info.LoginID, info.Device) + accountKey := m.getAccountKey(info.LoginID, info.Device) // Get expiration time | 获取过期时间 exp := m.getExpiration() @@ -1314,80 +1364,46 @@ func (m *Manager) renewToken(ctx context.Context, info *TokenInfo) { _ = m.storage.Expire(accountKey, exp) // Renew session TTL | 续期Session的TTL - if sess, err := m.GetSession(ctx, info.LoginID); err == nil && sess != nil { - _ = sess.Renew(exp) // Renew the session expiration | 续期Session的过期时间 + if sess, err := m.GetSession(info.LoginID); err == nil && sess != nil { + _ = sess.Renew(exp) } // Set minimal renewal interval marker | 设置最小续期间隔标记(用于限流续期频率) if m.config.RenewInterval > 0 { _ = m.storage.Set( - m.getRenewKey(ctx), - DefaultRenewValue, + m.getRenewKey(tokenValue), + time.Now().Unix(), time.Duration(m.config.RenewInterval)*time.Second, ) } } // removeTokenChain Removes all related keys and triggers event | 删除Token相关的所有键并触发事件 -func (m *Manager) removeTokenChain(ctx context.Context, destroySession bool, info *TokenInfo, event listener.Event) error { +func (m *Manager) removeTokenChain(tokenValue string, destroySession bool, info *TokenInfo, event listener.Event) error { // If info is nil, retrieve token information | 如果info为空,获取Token信息 if info == nil { var err error - info, err = m.getTokenInfoByTokenValue(ctx) + info, err = m.getTokenInfoByTokenValue(tokenValue) if err != nil { - return err // Return err if token info retrieval fails | 如果获取Token信息失败,返回err + return err } } - // Construct the token storage key | 构造Token存储键 - tokenKey := m.getTokenKey(ctx) - // Construct the account storage key | 构造账号存储键 - accountKey := m.getAccountKey(ctx, info.LoginID, info.Device) - // Construct the renewal key | 构造续期标记 - renewKey := m.getRenewKey(ctx) - - // Handle different events | 处理不同的事件 - switch event { - - // EventLogout User logout | 用户主动登出 - case listener.EventLogout: - _ = m.storage.Delete(tokenKey) // Delete token-info mapping | 删除Token信息映射 - _ = m.storage.Delete(accountKey) // Delete account-token mapping | 删除账号映射 - _ = m.storage.Delete(renewKey) // Delete renew key | 删除续期标记 - if destroySession { // Optionally destroy session | 可选销毁Session - _ = m.DeleteSession(ctx, info.LoginID) - } - - // EventKickout User kicked offline (keep session) | 用户被踢下线(保留Session,自动过期) - case listener.EventKickout: - _ = m.storage.SetKeepTTL(tokenKey, string(TokenStateKickout)) // Mark token as kicked out (preserve original TTL for cleanup) | 将Token标记为“被踢下线”(保留原TTL以便自动清理) - _ = m.storage.Delete(accountKey) // Delete account mapping | 删除账号映射 - _ = m.storage.Delete(renewKey) // Delete renew key | 删除续期标记 - - // EventReplace User replaced by new login (keep session) | 用户被顶下线(保留Session,自动过期) - case listener.EventReplace: - _ = m.storage.SetKeepTTL(tokenKey, string(TokenStateReplaced)) // Mark as replaced but keep TTL | 标记为“被顶下线”,保留原TTL - _ = m.storage.Delete(accountKey) // Remove account → token mapping | 删除账号映射 - _ = m.storage.Delete(renewKey) // Remove renew mark | 删除续期标记 - - // Default Unknown event type | 未知事件类型(默认删除) - default: - _ = m.storage.Delete(tokenKey) // Delete token-info mapping | 删除Token信息映射 - _ = m.storage.Delete(accountKey) // Delete account-token mapping | 删除账号映射 - _ = m.storage.Delete(renewKey) // Delete renew key | 删除续期标记 - if destroySession { // Optionally destroy session | 可选销毁Session - _ = m.DeleteSession(ctx, info.LoginID) - } + _ = m.storage.Delete(m.getTokenKey(tokenValue)) // Delete token-info mapping | 删除Token信息映射 + _ = m.storage.Delete(m.getAccountKey(info.LoginID, info.Device)) // Delete account-token mapping | 删除账号映射 + _ = m.storage.Delete(m.getRenewKey(tokenValue)) // Delete renew key | 删除续期标记 + if destroySession { // Optionally destroy session | 可选销毁Session + _ = m.DeleteSession(info.LoginID) } // Trigger event notification | 触发事件通知 if m.eventManager != nil { m.eventManager.Trigger(&listener.EventData{ - Event: event, // Event type | 事件类型 - AuthType: m.config.AuthType, // Auth type from context | 从上下文中获取认证类型 - LoginID: info.LoginID, // Login ID of the user | 用户的登录ID - Device: info.Device, // Device type | 设备类型 - Token: utils.GetCtxValue(ctx, config.CtxTokenValue), // Token value from context | 从上下文中获取Token值 + Event: event, // Event type | 事件类型 + AuthType: m.config.AuthType, // Auth type from context | 从上下文中获取认证类型 + LoginID: info.LoginID, // Login ID of the user | 用户的登录ID + Device: info.Device, // Device type | 设备类型 + Token: tokenValue, // Token value from context | 从上下文中获取Token值 }) } @@ -1397,22 +1413,22 @@ func (m *Manager) removeTokenChain(ctx context.Context, destroySession bool, inf // ============ Internal Helper Methods | 内部辅助方法 ============ // getTokenKey Gets token storage key | 获取Token存储键 -func (m *Manager) getTokenKey(ctx context.Context) string { - return m.config.KeyPrefix + m.config.AuthType + TokenKeyPrefix + utils.GetCtxValue(ctx, config.CtxTokenValue) +func (m *Manager) getTokenKey(tokenValue string) string { + return m.config.KeyPrefix + m.config.AuthType + TokenKeyPrefix + tokenValue } // getAccountKey Gets account storage key | 获取账号存储键 -func (m *Manager) getAccountKey(_ context.Context, loginID, device string) string { +func (m *Manager) getAccountKey(loginID, device string) string { return m.config.KeyPrefix + m.config.AuthType + AccountKeyPrefix + loginID + PermissionSeparator + device } // getRenewKey Gets token renewal tracking key | 获取Token续期追踪键 -func (m *Manager) getRenewKey(ctx context.Context) string { - return m.config.KeyPrefix + m.config.AuthType + RenewKeyPrefix + utils.GetCtxValue(ctx, config.CtxTokenValue) +func (m *Manager) getRenewKey(tokenValue string) string { + return m.config.KeyPrefix + m.config.AuthType + RenewKeyPrefix + tokenValue } // getDisableKey Gets disable storage key | 获取禁用存储键 -func (m *Manager) getDisableKey(_ context.Context, loginID string) string { +func (m *Manager) getDisableKey(loginID string) string { return m.config.KeyPrefix + m.config.AuthType + DisableKeyPrefix + loginID } diff --git a/core/oauth2/consts.go b/core/oauth2/consts.go index 0fe7f52..cb136aa 100644 --- a/core/oauth2/consts.go +++ b/core/oauth2/consts.go @@ -2,7 +2,6 @@ package oauth2 import ( - "fmt" "time" ) @@ -32,18 +31,3 @@ const ( GrantTypeClientCredentials GrantType = "client_credentials" // Client credentials flow | 客户端凭证模式 GrantTypePassword GrantType = "password" // Password flow | 密码模式 ) - -var ( - ErrClientOrClientIDEmpty = fmt.Errorf("invalid client: clientID is required") // client or clientID is empty | 客户端或客户端ID为空 - ErrClientNotFound = fmt.Errorf("client not found") // client not found | 客户端不存在 - ErrUserIDEmpty = fmt.Errorf("userID cannot be empty") // userID is empty | 用户ID不能为空 - ErrInvalidRedirectURI = fmt.Errorf("invalid redirectUri") // invalid redirect URI | 回调URI非法 - ErrInvalidClientCredentials = fmt.Errorf("invalid client credentials") // invalid client credentials | 客户端凭证无效 - ErrInvalidAuthCode = fmt.Errorf("invalid authorization code") // invalid authorization code | 授权码无效 - ErrAuthCodeUsed = fmt.Errorf("authorization code already used") // authorization code already used | 授权码已被使用 - ErrAuthCodeExpired = fmt.Errorf("authorization code expired") // authorization code expired | 授权码已过期 - ErrClientMismatch = fmt.Errorf("client mismatch") // client mismatch | 客户端不匹配 - ErrRedirectURIMismatch = fmt.Errorf("redirectUri mismatch") // redirect URI mismatch | 回调URI不匹配 - ErrInvalidAccessToken = fmt.Errorf("invalid access token") // invalid access token | 访问令牌无效 - ErrInvalidRefreshToken = fmt.Errorf("invalid refresh token") // invalid refresh token | 刷新令牌无效 -) diff --git a/core/oauth2/oauth2.go b/core/oauth2/oauth2.go index 8799133..4291f54 100644 --- a/core/oauth2/oauth2.go +++ b/core/oauth2/oauth2.go @@ -5,6 +5,7 @@ import ( "encoding/hex" "fmt" codec_json "github.com/click33/sa-token-go/codec/json" + "github.com/click33/sa-token-go/core" "github.com/click33/sa-token-go/core/adapter" "github.com/click33/sa-token-go/core/utils" "github.com/click33/sa-token-go/storage/memory" @@ -95,7 +96,7 @@ func NewOAuth2Server(authType, prefix string, storage adapter.Storage, serialize // RegisterClient Registers an OAuth2 client | 注册OAuth2客户端 func (s *OAuth2Server) RegisterClient(client *Client) error { if client == nil || client.ClientID == "" { - return ErrClientOrClientIDEmpty + return core.ErrClientOrClientIDEmpty } s.clientsMu.Lock() @@ -120,15 +121,16 @@ func (s *OAuth2Server) GetClient(clientID string) (*Client, error) { client, exists := s.clients[clientID] if !exists { - return nil, ErrClientNotFound + return nil, core.ErrClientNotFound } + return client, nil } // GenerateAuthorizationCode Generates authorization code | 生成授权码 func (s *OAuth2Server) GenerateAuthorizationCode(clientID, userID, redirectURI string, scopes []string) (*AuthorizationCode, error) { if userID == "" { - return nil, ErrUserIDEmpty + return nil, core.ErrUserIDEmpty } client, err := s.GetClient(clientID) @@ -138,13 +140,18 @@ func (s *OAuth2Server) GenerateAuthorizationCode(clientID, userID, redirectURI s // Validate redirect URI | 验证回调URI if !s.isValidRedirectURI(client, redirectURI) { - return nil, ErrInvalidRedirectURI + return nil, core.ErrInvalidRedirectURI + } + + // Validate scopes | 验证权限范围 + if !s.isValidScopes(client, scopes) { + return nil, core.ErrInvalidScope } // Generate code | 生成授权码 codeBytes := make([]byte, CodeLength) - if _, err := rand.Read(codeBytes); err != nil { - return nil, fmt.Errorf("failed to generate authorization code: %w", err) + if _, err = rand.Read(codeBytes); err != nil { + return nil, err } code := hex.EncodeToString(codeBytes) @@ -161,12 +168,12 @@ func (s *OAuth2Server) GenerateAuthorizationCode(clientID, userID, redirectURI s encodeData, err := s.serializer.Encode(authCode) if err != nil { - return nil, fmt.Errorf("%w: %v", fmt.Errorf("failed to encode data"), err) + return nil, fmt.Errorf("%w: %v", core.ErrSerializeFailed, err) } key := s.getCodeKey(code) if err := s.storage.Set(key, encodeData, s.codeExpiration); err != nil { - return nil, fmt.Errorf("failed to store authorization code: %w", err) + return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } return authCode, nil @@ -181,45 +188,44 @@ func (s *OAuth2Server) ExchangeCodeForToken(code, clientID, clientSecret, redire } if client.ClientSecret != clientSecret { - return nil, ErrInvalidClientCredentials + return nil, core.ErrInvalidClientCredentials } // Get authorization code | 获取授权码 key := s.getCodeKey(code) data, err := s.storage.Get(key) if err != nil { - return nil, fmt.Errorf("failed to get authorization data: %w", err) + return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } if data == nil { - return nil, ErrInvalidAuthCode + return nil, core.ErrInvalidAuthCode } rawData, err := utils.ToBytes(data) if err != nil { - return nil, err + return nil, fmt.Errorf("%w: %v", core.ErrTypeConvert, err) } var authCode AuthorizationCode if err := s.serializer.Decode(rawData, &authCode); err != nil { - return nil, fmt.Errorf("%w: %v", fmt.Errorf("failed to decode data"), err) + return nil, fmt.Errorf("%w: %v", core.ErrDeserializeFailed, err) } - // Validate authorization code | 验证授权码 if authCode.Used { - return nil, ErrAuthCodeUsed + return nil, core.ErrAuthCodeUsed } if authCode.ClientID != clientID { - return nil, ErrClientMismatch + return nil, core.ErrClientMismatch } if authCode.RedirectURI != redirectURI { - return nil, ErrRedirectURIMismatch + return nil, core.ErrRedirectURIMismatch } if time.Now().Unix() > authCode.CreateTime+authCode.ExpiresIn { _ = s.storage.Delete(key) - return nil, ErrAuthCodeExpired + return nil, core.ErrAuthCodeExpired } // Mark code as used | 标记为已使用 @@ -227,7 +233,7 @@ func (s *OAuth2Server) ExchangeCodeForToken(code, clientID, clientSecret, redire encodeData, err := s.serializer.Encode(authCode) if err != nil { - return nil, fmt.Errorf("%w: %v", fmt.Errorf("failed to encode data"), err) + return nil, fmt.Errorf("%w: %v", core.ErrSerializeFailed, err) } _ = s.storage.Set(key, encodeData, time.Minute) @@ -236,36 +242,45 @@ func (s *OAuth2Server) ExchangeCodeForToken(code, clientID, clientSecret, redire } // ValidateAccessToken Validates access token | 验证访问令牌 -func (s *OAuth2Server) ValidateAccessToken(accessToken string) (*AccessToken, error) { +func (s *OAuth2Server) ValidateAccessToken(accessToken string) bool { + return s.storage.Exists(s.getTokenKey(accessToken)) +} + +// ValidateAccessTokenAndGetInfo Validates access token and get info | 验证访问令牌并获取信息 +func (s *OAuth2Server) ValidateAccessTokenAndGetInfo(accessToken string) (*AccessToken, error) { if accessToken == "" { - return nil, ErrInvalidAccessToken + return nil, core.ErrInvalidAccessToken } key := s.getTokenKey(accessToken) data, err := s.storage.Get(key) if err != nil { - return nil, fmt.Errorf("failed to get access token data: %w", err) + return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } if data == nil { - return nil, ErrInvalidAccessToken + return nil, core.ErrInvalidAccessToken } rawData, err := utils.ToBytes(data) if err != nil { - return nil, err + return nil, fmt.Errorf("%w: %v", core.ErrTypeConvert, err) } var accessTokenInfo AccessToken err = s.serializer.Decode(rawData, &accessTokenInfo) if err != nil { - return nil, fmt.Errorf("%w: %v", fmt.Errorf("failed to decode data"), err) + return nil, fmt.Errorf("%w: %v", core.ErrDeserializeFailed, err) } return &accessTokenInfo, nil } // RefreshAccessToken Refreshes access token using refresh token | 使用刷新令牌刷新访问令牌 -func (s *OAuth2Server) RefreshAccessToken(refreshToken, clientID, clientSecret string) (*AccessToken, error) { +func (s *OAuth2Server) RefreshAccessToken(clientID, refreshToken, clientSecret string) (*AccessToken, error) { + if refreshToken == "" { + return nil, core.ErrInvalidRefreshToken + } + // Verify client credentials | 验证客户端凭证 client, err := s.GetClient(clientID) if err != nil { @@ -273,36 +288,40 @@ func (s *OAuth2Server) RefreshAccessToken(refreshToken, clientID, clientSecret s } if client.ClientSecret != clientSecret { - return nil, ErrInvalidClientCredentials + return nil, core.ErrInvalidClientCredentials } // Get refresh token | 获取刷新令牌 key := s.getRefreshKey(refreshToken) data, err := s.storage.Get(key) if err != nil { - return nil, fmt.Errorf("failed to get refresh token data: %w", err) + return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } if data == nil { - return nil, ErrInvalidRefreshToken + return nil, core.ErrInvalidRefreshToken } rawData, err := utils.ToBytes(data) if err != nil { - return nil, err + return nil, fmt.Errorf("%w: %v", core.ErrTypeConvert, err) } var accessTokenInfo AccessToken err = s.serializer.Decode(rawData, &accessTokenInfo) if err != nil { - return nil, fmt.Errorf("%w: %v", fmt.Errorf("failed to decode data"), err) + return nil, fmt.Errorf("%w: %v", core.ErrDeserializeFailed, err) } if accessTokenInfo.ClientID != clientID { - return nil, ErrClientMismatch + return nil, core.ErrClientMismatch } + // Delete old access token | 删除旧访问令牌 _ = s.storage.Delete(s.getTokenKey(accessTokenInfo.Token)) + // Delete old refresh token (token rotation) | 删除旧刷新令牌(令牌轮换) + _ = s.storage.Delete(key) + return s.generateAccessToken(accessTokenInfo.UserID, accessTokenInfo.ClientID, accessTokenInfo.Scopes) } @@ -315,26 +334,25 @@ func (s *OAuth2Server) RevokeToken(accessToken string) error { key := s.getTokenKey(accessToken) data, err := s.storage.Get(key) if err != nil { - return fmt.Errorf("failed to get access token data: %w", err) + return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } if data == nil { - return ErrInvalidAccessToken + return core.ErrInvalidAccessToken } rawData, err := utils.ToBytes(data) if err != nil { - return err + return fmt.Errorf("%w: %v", core.ErrTypeConvert, err) } var accessTokenInfo AccessToken err = s.serializer.Decode(rawData, &accessTokenInfo) if err != nil { - return fmt.Errorf("%w: %v", fmt.Errorf("failed to decode data"), err) + return fmt.Errorf("%w: %v", core.ErrDeserializeFailed, err) } if accessTokenInfo.RefreshToken != "" { - refreshKey := s.getRefreshKey(accessTokenInfo.RefreshToken) - _ = s.storage.Delete(refreshKey) + _ = s.storage.Delete(s.getRefreshKey(accessTokenInfo.RefreshToken)) } return s.storage.Delete(key) @@ -367,19 +385,47 @@ func (s *OAuth2Server) isValidRedirectURI(client *Client, redirectURI string) bo return false } +// isValidScopes Checks if requested scopes are allowed for client | 检查请求的权限范围是否被允许 +func (s *OAuth2Server) isValidScopes(client *Client, scopes []string) bool { + // If no scopes requested, allow | 如果没有请求scope,允许 + if len(scopes) == 0 { + return true + } + + // If client has no scope restrictions, allow all | 如果客户端没有scope限制,允许所有 + if len(client.Scopes) == 0 { + return true + } + + // Build allowed scopes set | 构建允许的scope集合 + allowedScopes := make(map[string]struct{}, len(client.Scopes)) + for _, scope := range client.Scopes { + allowedScopes[scope] = struct{}{} + } + + // Check if all requested scopes are allowed | 检查所有请求的scope是否都被允许 + for _, scope := range scopes { + if _, ok := allowedScopes[scope]; !ok { + return false + } + } + + return true +} + // generateAccessToken Generates access token and refresh token | 生成访问令牌和刷新令牌 func (s *OAuth2Server) generateAccessToken(userID, clientID string, scopes []string) (*AccessToken, error) { // Generate access token | 生成访问令牌 tokenBytes := make([]byte, AccessTokenLength) if _, err := rand.Read(tokenBytes); err != nil { - return nil, fmt.Errorf("failed to generate access token: %w", err) + return nil, err } accessToken := hex.EncodeToString(tokenBytes) // Generate refresh token | 生成刷新令牌 refreshBytes := make([]byte, RefreshTokenLength) if _, err := rand.Read(refreshBytes); err != nil { - return nil, fmt.Errorf("failed to generate refresh token: %w", err) + return nil, err } refreshToken := hex.EncodeToString(refreshBytes) @@ -394,7 +440,7 @@ func (s *OAuth2Server) generateAccessToken(userID, clientID string, scopes []str } encodeData, err := s.serializer.Encode(token) if err != nil { - return nil, fmt.Errorf("%w: %v", fmt.Errorf("failed to encode data"), err) + return nil, fmt.Errorf("%w: %v", core.ErrSerializeFailed, err) } tokenKey := s.getTokenKey(accessToken) @@ -402,12 +448,12 @@ func (s *OAuth2Server) generateAccessToken(userID, clientID string, scopes []str // Store access token | 存储访问令牌 if err = s.storage.Set(tokenKey, encodeData, s.tokenExpiration); err != nil { - return nil, fmt.Errorf("failed to store access token: %w", err) + return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } // Store refresh token | 存储刷新令牌 if err = s.storage.Set(refreshKey, encodeData, DefaultRefreshTTL); err != nil { - return nil, fmt.Errorf("failed to store refresh token: %w", err) + return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } return token, nil diff --git a/core/security/consts.go b/core/security/consts.go index f6e5094..e6b1ba9 100644 --- a/core/security/consts.go +++ b/core/security/consts.go @@ -2,7 +2,6 @@ package security import ( - "fmt" "time" ) @@ -20,11 +19,3 @@ const ( RefreshTokenLength = 32 // Refresh token byte length | 刷新令牌字节长度 RefreshKeySuffix = "refresh:" // Key suffix after prefix | 前缀后的键后缀 ) - -var ( - ErrInvalidNonce = fmt.Errorf("invalid or expired nonce") // invalid or expired nonce | Nonce 无效或已过期 - ErrInvalidLoginIDEmpty = fmt.Errorf("loginID cannot be empty") // loginID is empty | 登录ID不能为空 - - ErrRefreshTokenExpired = fmt.Errorf("refresh token expired") // refresh token expired | 刷新令牌已过期 - ErrInvalidRefreshToken = fmt.Errorf("invalid refresh token") // invalid refresh token | 刷新令牌无效 -) diff --git a/core/security/nonce.go b/core/security/nonce.go index 12a0b6a..14e62a4 100644 --- a/core/security/nonce.go +++ b/core/security/nonce.go @@ -4,6 +4,7 @@ import ( "crypto/rand" "encoding/hex" "fmt" + "github.com/click33/sa-token-go/core" "github.com/click33/sa-token-go/core/adapter" "github.com/click33/sa-token-go/storage/memory" "sync" @@ -50,15 +51,18 @@ func NewNonceManager(authType, prefix string, storage adapter.Storage, ttl time. // Generate Generates a new nonce and stores it | 生成新的nonce并存储 func (nm *NonceManager) Generate() (string, error) { - bytes := make([]byte, NonceLength) // Create byte slice for nonce | 创建字节切片生成nonce + // Create byte slice for nonce | 创建字节切片生成nonce + bytes := make([]byte, NonceLength) if _, err := rand.Read(bytes); err != nil { - return "", fmt.Errorf("failed to generate random bytes: %w", err) // Random generation failed | 随机生成失败 + return "", err } - nonce := hex.EncodeToString(bytes) // Encode bytes to hex string | 编码为16进制字符串 + // Encode bytes to hex string | 编码为16进制字符串 + nonce := hex.EncodeToString(bytes) - key := nm.getNonceKey(nonce) // Build storage key | 构建存储键 + // Build storage key | 构建存储键 + key := nm.getNonceKey(nonce) if err := nm.storage.Set(key, time.Now().Unix(), nm.ttl); err != nil { - return "", fmt.Errorf("failed to store nonce: %w", err) // Storage failed | 存储失败 + return "", fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } return nonce, nil @@ -67,26 +71,30 @@ func (nm *NonceManager) Generate() (string, error) { // Verify Verifies nonce and consumes it (one-time use) Returns false if nonce doesn't exist or already used | 验证nonce并消费它(一次性使用)如果nonce不存在或已使用则返回false func (nm *NonceManager) Verify(nonce string) bool { if nonce == "" { - return false // Empty nonce invalid | 空nonce无效 + return false } - key := nm.getNonceKey(nonce) // Build storage key | 构建存储键 + // Build storage key | 构建存储键 + key := nm.getNonceKey(nonce) nm.mu.Lock() // Acquire write lock | 获取写锁 defer nm.mu.Unlock() // Release lock after function | 函数结束释放锁 + // Nonce not found | 未找到nonce if !nm.storage.Exists(key) { - return false // Nonce not found | 未找到nonce + return false } - _ = nm.storage.Delete(key) // Consume nonce | 消耗nonce + // Consume nonce | 消耗nonce + _ = nm.storage.Delete(key) + return true } // VerifyAndConsume Verifies and consumes nonce, returns error if invalid | 验证并消费nonce,无效时返回错误 func (nm *NonceManager) VerifyAndConsume(nonce string) error { if !nm.Verify(nonce) { - return ErrInvalidNonce // Invalid nonce error | 无效nonce错误 + return core.ErrInvalidNonce } return nil } @@ -94,18 +102,20 @@ func (nm *NonceManager) VerifyAndConsume(nonce string) error { // IsValid Checks if nonce is valid without consuming it | 检查nonce是否有效(不消费) func (nm *NonceManager) IsValid(nonce string) bool { if nonce == "" { - return false // Empty nonce invalid | 空nonce无效 + return false } - key := nm.getNonceKey(nonce) // Build storage key | 构建存储键 + // Build storage key | 构建存储键 + key := nm.getNonceKey(nonce) nm.mu.RLock() // Acquire read lock | 获取读锁 defer nm.mu.RUnlock() // Release read lock | 释放读锁 - return nm.storage.Exists(key) // Return existence | 返回是否存在 + // Return existence | 返回是否存在 + return nm.storage.Exists(key) } // getNonceKey Gets storage key for nonce | 获取nonce的存储键 func (nm *NonceManager) getNonceKey(nonce string) string { - return nm.keyPrefix + nm.authType + NonceKeySuffix + nonce // Construct full key | 构建完整存储键 + return nm.keyPrefix + nm.authType + NonceKeySuffix + nonce } diff --git a/core/security/refresh_token.go b/core/security/refresh_token.go index 7816bf1..761eeed 100644 --- a/core/security/refresh_token.go +++ b/core/security/refresh_token.go @@ -5,6 +5,7 @@ import ( "encoding/hex" "fmt" codec_json "github.com/click33/sa-token-go/codec/json" + "github.com/click33/sa-token-go/core" "github.com/click33/sa-token-go/core/adapter" "github.com/click33/sa-token-go/generator/sgenerator" "github.com/click33/sa-token-go/storage/memory" @@ -87,7 +88,7 @@ func NewRefreshTokenManager( // GenerateTokenPair Create access + refresh token | 生成访问令牌和刷新令牌 func (rtm *RefreshTokenManager) GenerateTokenPair(loginID, device string) (*RefreshTokenInfo, error) { if loginID == "" { - return nil, ErrInvalidLoginIDEmpty + return nil, core.ErrInvalidLoginIDEmpty } // Generate access token | 生成访问令牌 @@ -96,15 +97,15 @@ func (rtm *RefreshTokenManager) GenerateTokenPair(loginID, device string) (*Refr return nil, err } - // Generate refresh token | 生成刷新令牌 random := make([]byte, RefreshTokenLength) if _, err := rand.Read(random); err != nil { return nil, err } + + // Generate refresh token | 生成刷新令牌 refreshToken := hex.EncodeToString(random) now := time.Now() - info := &RefreshTokenInfo{ RefreshToken: refreshToken, AccessToken: accessToken, @@ -113,6 +114,11 @@ func (rtm *RefreshTokenManager) GenerateTokenPair(loginID, device string) (*Refr CreateTime: now.Unix(), ExpireTime: now.Add(rtm.refreshTTL).Unix(), } + // Encode refresh token info | 编码刷新令牌信息 + refreshData, err := rtm.serializer.Encode(info) + if err != nil { + return nil, fmt.Errorf("%w: %v", core.ErrSerializeFailed, err) + } // Encode access token info | 编码访问令牌信息 accessData, err := rtm.serializer.Encode(&AccessTokenInfo{ @@ -120,22 +126,16 @@ func (rtm *RefreshTokenManager) GenerateTokenPair(loginID, device string) (*Refr Device: device, }) if err != nil { - return nil, fmt.Errorf("%w: %v", fmt.Errorf("failed to encode data"), err) - } - - // Encode refresh token info | 编码刷新令牌信息 - refreshData, err := rtm.serializer.Encode(info) - if err != nil { - return nil, fmt.Errorf("%w: %v", fmt.Errorf("failed to encode data"), err) + return nil, fmt.Errorf("%w: %v", core.ErrSerializeFailed, err) } // Store access token | 存储访问令牌 - if err := rtm.storage.Set( + if err = rtm.storage.Set( rtm.getTokenKey(accessToken), accessData, rtm.accessTTL, ); err != nil { - return nil, err + return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } // Store refresh token | 存储刷新令牌 @@ -144,7 +144,7 @@ func (rtm *RefreshTokenManager) GenerateTokenPair(loginID, device string) (*Refr refreshData, rtm.refreshTTL, ); err != nil { - return nil, err + return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } return info, nil @@ -178,30 +178,34 @@ func (rtm *RefreshTokenManager) VerifyAccessTokenAndGetInfo(accessToken string) // RefreshAccessToken Refresh access token by refresh token | 使用刷新令牌刷新访问令牌 func (rtm *RefreshTokenManager) RefreshAccessToken(refreshToken string) (*RefreshTokenInfo, error) { if refreshToken == "" { - return nil, ErrInvalidRefreshToken + return nil, core.ErrInvalidRefreshToken } refreshKey := rtm.getRefreshKey(refreshToken) // Load refresh token | 读取刷新令牌 data, err := rtm.storage.Get(refreshKey) - if err != nil || data == nil { - return nil, ErrInvalidRefreshToken + if err != nil { + return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) + } + if data == nil { + return nil, core.ErrInvalidRefreshToken } + bytes, err := utils.ToBytes(data) if err != nil { - return nil, err + return nil, fmt.Errorf("%w: %v", core.ErrTypeConvert, err) } var info RefreshTokenInfo if err := rtm.serializer.Decode(bytes, &info); err != nil { - return nil, err + return nil, fmt.Errorf("%w: %v", core.ErrDeserializeFailed, err) } // Check expiration | 检查过期 if time.Now().Unix() > info.ExpireTime { _ = rtm.storage.Delete(refreshKey) - return nil, ErrRefreshTokenExpired + return nil, core.ErrRefreshTokenExpired } // Remove old access token | 删除旧访问令牌 @@ -222,23 +226,23 @@ func (rtm *RefreshTokenManager) RefreshAccessToken(refreshToken string) (*Refres Device: info.Device, }) if err != nil { - return nil, fmt.Errorf("%w: %v", fmt.Errorf("failed to encode data"), err) + return nil, fmt.Errorf("%w: %v", core.ErrSerializeFailed, err) } if err := rtm.storage.Set( rtm.getTokenKey(newAccessToken), accessData, rtm.accessTTL, ); err != nil { - return nil, err + return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } // Update refresh token without extending TTL | 更新刷新令牌但不续期 refreshData, err := rtm.serializer.Encode(&info) if err != nil { - return nil, fmt.Errorf("%w: %v", fmt.Errorf("failed to encode data"), err) + return nil, fmt.Errorf("%w: %v", core.ErrSerializeFailed, err) } if err = rtm.storage.SetKeepTTL(refreshKey, refreshData); err != nil { - return nil, err + return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } return &info, nil @@ -247,25 +251,28 @@ func (rtm *RefreshTokenManager) RefreshAccessToken(refreshToken string) (*Refres // GetRefreshTokenInfo Get refresh token info by token | 根据刷新令牌获取刷新令牌信息 func (rtm *RefreshTokenManager) GetRefreshTokenInfo(refreshToken string) (*RefreshTokenInfo, error) { if refreshToken == "" { - return nil, ErrInvalidRefreshToken + return nil, core.ErrInvalidRefreshToken } refreshKey := rtm.getRefreshKey(refreshToken) // Load refresh token | 读取刷新令牌 data, err := rtm.storage.Get(refreshKey) - if err != nil || data == nil { - return nil, ErrInvalidRefreshToken + if err != nil { + return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) + } + if data == nil { + return nil, core.ErrInvalidRefreshToken } bytes, err := utils.ToBytes(data) if err != nil { - return nil, err + return nil, fmt.Errorf("%w: %v", core.ErrTypeConvert, err) } var info RefreshTokenInfo if err = rtm.serializer.Decode(bytes, &info); err != nil { - return nil, fmt.Errorf("%w: %v", fmt.Errorf("failed to decode data"), err) + return nil, fmt.Errorf("%w: %v", core.ErrDeserializeFailed, err) } return &info, nil @@ -276,7 +283,13 @@ func (rtm *RefreshTokenManager) RevokeRefreshToken(refreshToken string) error { if refreshToken == "" { return nil } - return rtm.storage.Delete(rtm.getRefreshKey(refreshToken)) + + err := rtm.storage.Delete(rtm.getRefreshKey(refreshToken)) + if err != nil { + return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) + } + + return nil } // IsValid Check refresh token valid | 判断刷新令牌是否有效 @@ -285,6 +298,7 @@ func (rtm *RefreshTokenManager) IsValid(refreshToken string) bool { if err != nil || data == nil { return false } + bytes, err := utils.ToBytes(data) if err != nil { return false @@ -294,6 +308,7 @@ func (rtm *RefreshTokenManager) IsValid(refreshToken string) bool { if err = rtm.serializer.Decode(bytes, &info); err != nil { return false } + return time.Now().Unix() <= info.ExpireTime } diff --git a/generator/sgenerator/generator_adapter_sgenerator.go b/generator/sgenerator/generator_adapter_sgenerator.go index 37b8e3a..37706b3 100644 --- a/generator/sgenerator/generator_adapter_sgenerator.go +++ b/generator/sgenerator/generator_adapter_sgenerator.go @@ -34,7 +34,7 @@ func NewDefaultGenerator() *Generator { return &Generator{ timeout: DefaultTimeout, tokenStyle: TokenStyleUUID, - jwtSecretKey: TikCharset, + jwtSecretKey: DefaultJWTSecret, } } From 5834d87760ace014fa0f0bad4fbeab03b4669c50 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Thu, 25 Dec 2025 16:40:10 +0800 Subject: [PATCH 23/50] =?UTF-8?q?feat():=201=E3=80=81=E6=9B=B4=E6=96=B0man?= =?UTF-8?q?ager=E6=96=B9=E6=B3=95=E5=8F=82=E6=95=B0=202=E3=80=81=E6=8F=90?= =?UTF-8?q?=E5=8F=96=E9=83=A8=E5=88=86=E7=BB=9F=E4=B8=80err?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/builder/builder.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/core/builder/builder.go b/core/builder/builder.go index 485c411..8a9f6c7 100644 --- a/core/builder/builder.go +++ b/core/builder/builder.go @@ -1,7 +1,6 @@ package builder import ( - "context" codec_json "github.com/click33/sa-token-go/codec/json" "github.com/click33/sa-token-go/generator/sgenerator" "github.com/click33/sa-token-go/log/nop" @@ -49,8 +48,8 @@ type Builder struct { log adapter.Log // log Log adapter for logging operations | 日志记录操作的适配器 pool adapter.Pool // Async task pool component | 异步任务协程池组件 - customPermissionListFunc func(ctx context.Context, loginID string) ([]string, error) // Custom permission provider | 自定义权限获取函数 - customRoleListFunc func(ctx context.Context, loginID string) ([]string, error) // Custom role provider | 自定义角色获取函数 + customPermissionListFunc func(loginID string) ([]string, error) // Custom permission provider | 自定义权限获取函数 + customRoleListFunc func(loginID string) ([]string, error) // Custom role provider | 自定义角色获取函数 } // NewBuilder creates a new builder with log configuration | 创建新的构建器(使用默认配置) @@ -492,13 +491,13 @@ func (b *Builder) SetPool(pool adapter.Pool) *Builder { } // SetCustomPermissionListFunc sets the custom permission provider | 设置自定义权限获取函数 -func (b *Builder) SetCustomPermissionListFunc(f func(ctx context.Context, loginID string) ([]string, error)) *Builder { +func (b *Builder) SetCustomPermissionListFunc(f func(loginID string) ([]string, error)) *Builder { b.customPermissionListFunc = f return b } // SetCustomRoleListFunc sets the custom role provider | 设置自定义角色获取函数 -func (b *Builder) SetCustomRoleListFunc(f func(ctx context.Context, loginID string) ([]string, error)) *Builder { +func (b *Builder) SetCustomRoleListFunc(f func(loginID string) ([]string, error)) *Builder { b.customRoleListFunc = f return b } From 4f5840f2664242233679b521a4340150654f10d9 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Fri, 26 Dec 2025 00:06:38 +0800 Subject: [PATCH 24/50] =?UTF-8?q?feat():=201=E3=80=81=E6=9B=B4=E6=96=B0man?= =?UTF-8?q?ager=E6=96=B9=E6=B3=95=E5=8F=82=E6=95=B0=202=E3=80=81=E6=8F=90?= =?UTF-8?q?=E5=8F=96=E9=83=A8=E5=88=86=E7=BB=9F=E4=B8=80err?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/errors.go | 10 + core/listener/listener.go | 2 +- core/manager/manager.go | 558 ++++++++++++++++++++------------- core/security/refresh_token.go | 2 +- core/session/session.go | 51 ++- stputil/stputil.go | 5 - 6 files changed, 383 insertions(+), 245 deletions(-) diff --git a/core/errors.go b/core/errors.go index 374d1e8..b1293ad 100644 --- a/core/errors.go +++ b/core/errors.go @@ -128,6 +128,16 @@ var ( ErrInvalidScope = fmt.Errorf("invalid scope: requested scope is not allowed for this client") ) +// ============ Session Errors | Session 错误 ============ + +var ( + // ErrSessionInvalidDataKey indicates a session data key is empty or invalid | Session 数据的 key 为空或非法 + ErrSessionInvalidDataKey = fmt.Errorf("invalid session data key: key cannot be empty") + + // ErrSessionIDEmpty indicates that a session ID is empty or missing | Session ID 为空或缺失 + ErrSessionIDEmpty = errors.New("session id cannot be empty") +) + // ============ System Errors | 系统错误 ============ var ( diff --git a/core/listener/listener.go b/core/listener/listener.go index f103e09..63b5d9b 100644 --- a/core/listener/listener.go +++ b/core/listener/listener.go @@ -101,7 +101,7 @@ func NewManager(loggers ...adapter.Log) *Manager { // panicHandler 绑定“已经确定好的 logger” m.panicHandler = func(event Event, data *EventData, recovered any) { logger.Errorf( - "[listener] listener panic recovered: event=%s, panic=%v", + "Listener listener panic recovered: event=%s, panic=%v", event, recovered, ) } diff --git a/core/manager/manager.go b/core/manager/manager.go index 7e2f7e2..2b62174 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -163,14 +163,13 @@ func (m *Manager) CloseManager() { func (m *Manager) Login(loginID string, device ...string) (string, error) { // Check if account is disabled | 检查账号是否被封禁 if m.IsDisable(loginID) { - // 如果账号被封禁,则返回core的自定义错误 return "", core.ErrAccountDisabled } - // 获取设备类型 + // Get device type | 获取设备类型 deviceType := getDevice(device) - // 获取账号存储键 + // Get account key | 获取账号存储键 accountKey := m.getAccountKey(loginID, deviceType) // Handle shared token for concurrent login | 处理多人登录共用 Token 的情况 @@ -178,7 +177,6 @@ func (m *Manager) Login(loginID string, device ...string) (string, error) { // Look for existing token of this account + device | 查找账号 + 设备下是否已有登录 Token existingToken, err := m.storage.Get(accountKey) if err == nil && existingToken != nil { - // 校验一下如果登录Token有效 if existingTokenStr, ok := assertString(existingToken); ok && m.IsLogin(existingTokenStr) { // If valid token exists, return it directly | 如果已有 Token 且有效,则直接返回 return existingTokenStr, nil @@ -205,9 +203,9 @@ func (m *Manager) Login(loginID string, device ...string) (string, error) { return "", err } - // 当前时间戳 + // Current timestamp | 当前时间戳 nowTime := time.Now().Unix() - // 计算过期时间 + // Calculate expiration time | 计算过期时间 expiration := m.getExpiration() // Prepare TokenInfo object and serialize to JSON | 准备Token信息对象并序列化 @@ -233,8 +231,8 @@ func (m *Manager) Login(loginID string, device ...string) (string, error) { return "", fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } - // Create session | 创建Session TODO 修改err - err = session. + // Create session | 创建Session + if err = session. NewSession(m.config.AuthType, m.config.KeyPrefix, loginID, m.storage, m.serializer). SetMulti( map[string]any{ @@ -243,8 +241,7 @@ func (m *Manager) Login(loginID string, device ...string) (string, error) { SessionKeyLoginTime: nowTime, }, expiration, - ) - if err != nil { + ); err != nil { return "", err } @@ -264,7 +261,7 @@ func (m *Manager) Login(loginID string, device ...string) (string, error) { // LoginByToken Login with specified token (for seamless token refresh) | 使用指定Token登录(用于token无感刷新) func (m *Manager) LoginByToken(tokenValue string) error { - info, err := m.getTokenInfoByTokenValue(tokenValue) + info, err := m.getTokenInfo(tokenValue) if err != nil { return err } @@ -300,12 +297,12 @@ func (m *Manager) Logout(loginID string, device ...string) error { return nil } - return m.removeTokenChain(tokenValueStr, false, nil, listener.EventLogout) + return m.removeTokenChain(tokenValueStr, nil, listener.EventLogout) } // LogoutByToken Logout by token | 根据Token登出 func (m *Manager) LogoutByToken(tokenValue string) error { - return m.removeTokenChain(tokenValue, false, nil, listener.EventLogout) + return m.removeTokenChain(tokenValue, nil, listener.EventLogout) } // kickout Kick user offline (private) | 踢人下线(私有) @@ -316,23 +313,21 @@ func (m *Manager) kickout(loginID string, device string) error { return nil } - tokenValueStr, ok := assertString(tokenValue) - if !ok { - return nil + if tokenValueStr, ok := assertString(tokenValue); ok { + return m.removeTokenChain(tokenValueStr, nil, listener.EventKickout) } - return m.removeTokenChain(tokenValueStr, false, nil, listener.EventKickout) + return nil } // Kickout Kick user offline (public method) | 踢人下线(公开方法) func (m *Manager) Kickout(loginID string, device ...string) error { - deviceType := getDevice(device) - return m.kickout(loginID, deviceType) + return m.kickout(loginID, getDevice(device)) } // kickoutByToken Kick user offline (private) | 根据Token踢人下线(私有) func (m *Manager) kickoutByToken(tokenValue string) error { - return m.removeTokenChain(tokenValue, false, nil, listener.EventKickout) + return m.removeTokenChain(tokenValue, nil, listener.EventKickout) } // KickoutByToken Kick user offline (public method) | 根据Token踢人下线(公开方法) @@ -349,7 +344,7 @@ func (m *Manager) replace(loginID string, device string) error { } if tokenValueStr, ok := assertString(tokenValue); ok { - return m.removeTokenChain(tokenValueStr, false, nil, listener.EventReplace) + return m.removeTokenChain(tokenValueStr, nil, listener.EventReplace) } return nil @@ -357,13 +352,12 @@ func (m *Manager) replace(loginID string, device string) error { // Replace user offline by login ID and device (public method) | 根据账号和设备顶人下线(公开方法) func (m *Manager) Replace(loginID string, device ...string) error { - deviceType := getDevice(device) - return m.replace(loginID, deviceType) + return m.replace(loginID, getDevice(device)) } // replaceByToken Replace user offline by token (private) | 根据Token顶人下线(私有) func (m *Manager) replaceByToken(tokenValue string) error { - return m.removeTokenChain(tokenValue, false, nil, listener.EventReplace) + return m.removeTokenChain(tokenValue, nil, listener.EventReplace) } // ReplaceByToken Replace user offline by token (public method) | 根据Token顶人下线(公开方法) @@ -375,10 +369,9 @@ func (m *Manager) ReplaceByToken(tokenValue string) error { // IsLogin Checks if the user is logged in | 检查用户是否登录 func (m *Manager) IsLogin(tokenValue string) bool { - // Retrieve token information using the token value from context | 从上下文中获取Token值并检索Token信息 - info, err := m.getTokenInfoByTokenValue(tokenValue) + info, err := m.getTokenInfo(tokenValue) if err != nil { - return false // Return false if token info retrieval fails | 如果获取Token信息失败,则返回false + return false } // Check if the token has exceeded the active timeout | 检查Token是否超过活跃超时时间 @@ -386,8 +379,8 @@ func (m *Manager) IsLogin(tokenValue string) bool { now := time.Now().Unix() if now-info.ActiveTime > m.config.ActiveTimeout { // Force logout and clean up token data | 强制登出并清理Token相关数据 - _ = m.removeTokenChain(tokenValue, false, info, listener.EventKickout) - return false // Return false if the token has expired | 如果Token超时,则返回false + _ = m.removeTokenChain(tokenValue, info, listener.EventKickout) + return false } } @@ -414,7 +407,7 @@ func (m *Manager) IsLogin(tokenValue string) bool { } } - return true // Return true if the user is logged in | 如果用户已登录,则返回true + return true } // CheckLogin Checks login status (throws serror if not logged in) | 检查登录(未登录抛出错误) @@ -422,13 +415,14 @@ func (m *Manager) CheckLogin(tokenValue string) error { if !m.IsLogin(tokenValue) { return core.ErrNotLogin } + return nil } // CheckLoginWithState Checks if user is logged in | 检查是否登录(返回详细状态err) func (m *Manager) CheckLoginWithState(tokenValue string) (bool, error) { // Try to get token info with state check | 尝试获取Token信息(包含状态检查) - info, err := m.getTokenInfoByTokenValue(tokenValue, true) + info, err := m.getTokenInfo(tokenValue, true) if err != nil { return false, err } @@ -437,7 +431,7 @@ func (m *Manager) CheckLoginWithState(tokenValue string) (bool, error) { now := time.Now().Unix() if now-info.ActiveTime > m.config.ActiveTimeout { // Force logout and clean up token data | 强制登出并清理Token相关数据 - _ = m.removeTokenChain(tokenValue, false, info, listener.EventKickout) + _ = m.removeTokenChain(tokenValue, info, listener.EventKickout) return false, core.ErrTokenKickout } } @@ -473,7 +467,7 @@ func (m *Manager) GetLoginID(tokenValue string) (string, error) { // Check if the user is logged in | 检查用户是否已登录 isLogin := m.IsLogin(tokenValue) if !isLogin { - return "", core.ErrNotLogin // Return error if not logged in | 如果未登录,则返回错误 + return "", core.ErrNotLogin } // Retrieve the login ID without checking token validity | 获取登录ID,不检查Token有效性 @@ -482,13 +476,13 @@ func (m *Manager) GetLoginID(tokenValue string) (string, error) { // GetLoginIDNotCheck Gets login ID without checking token validity | 获取登录ID(不检查Token是否有效) func (m *Manager) GetLoginIDNotCheck(tokenValue string) (string, error) { - // Retrieve token information using the token value from context | 从上下文中获取Token值并检索Token信息 - info, err := m.getTokenInfoByTokenValue(tokenValue) + // Get token info | 获取Token信息 + info, err := m.getTokenInfo(tokenValue) if err != nil { - return "", err // Return error if token info retrieval fails | 如果获取Token信息失败,返回错误 + return "", err } - return info.LoginID, nil // Return the login ID from the token info | 返回Token信息中的登录ID + return info.LoginID, nil } // GetTokenValue Gets token by login ID and device | 根据登录ID以及设备获取Token @@ -499,7 +493,7 @@ func (m *Manager) GetTokenValue(loginID string, device ...string) (string, error // Retrieve the token value from storage | 从存储中获取Token值 tokenValue, err := m.storage.Get(accountKey) if err != nil || tokenValue == nil { - return "", core.ErrTokenNotFound // Return error if token not found | 如果未找到Token,则返回错误 + return "", core.ErrTokenNotFound } // Assert token value as a string | 断言Token值为字符串 @@ -508,13 +502,12 @@ func (m *Manager) GetTokenValue(loginID string, device ...string) (string, error return "", core.ErrTokenNotFound } - // Return the token string | 返回Token字符串 return tokenValueStr, nil } // GetTokenInfoByToken Gets token information | 获取Token信息 func (m *Manager) GetTokenInfoByToken(tokenValue string) (*TokenInfo, error) { - return m.getTokenInfoByTokenValue(tokenValue) + return m.getTokenInfo(tokenValue) } // ============ Account Disable | 账号封禁 ============ @@ -526,12 +519,12 @@ func (m *Manager) Disable(loginID string, duration time.Duration, reason ...stri if err == nil && len(tokens) > 0 { for _, tokenValue := range tokens { // Force kick out each active token | 强制踢出所有活跃的Token - _ = m.removeTokenChain(tokenValue, true, nil, listener.EventKickout) + _ = m.removeTokenChain(tokenValue, nil, listener.EventKickout, true) } } // Retrieve the disable flag storage key | 获取封禁标记的存储键 - key := m.getDisableKey(loginID) + disableKeyKey := m.getDisableKey(loginID) // Prepare disable information | 准备封禁信息 disableInfo := DisableInfo{ @@ -545,70 +538,79 @@ func (m *Manager) Disable(loginID string, duration time.Duration, reason ...stri // Encode disable information into storage format | 将封禁信息序列化为存储格式 encodeData, err := m.serializer.Encode(disableInfo) if err != nil { - return err + return fmt.Errorf("%w: %v", core.ErrSerializeFailed, err) } // Set disable flag with specified duration | 设置封禁标记并指定封禁时长 - return m.storage.Set(key, encodeData, duration) + err = m.storage.Set(disableKeyKey, encodeData, duration) + if err != nil { + return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) + } + + return nil } // Untie Re-enables a disabled account | 解封账号 func (m *Manager) Untie(loginID string) error { // Retrieve the disable flag storage key | 获取封禁标记的存储键 - key := m.getDisableKey(loginID) + disableKeyKey := m.getDisableKey(loginID) // Remove the disable flag from storage | 删除封禁标记 - return m.storage.Delete(key) + err := m.storage.Delete(disableKeyKey) + if err != nil { + return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) + } + + return nil } // IsDisable Checks if account is disabled | 检查账号是否被封禁 func (m *Manager) IsDisable(loginID string) bool { // Retrieve the disable flag storage key | 获取封禁标记的存储键 - key := m.getDisableKey(loginID) + disableKeyKey := m.getDisableKey(loginID) // Check if the disable flag exists in storage | 检查封禁标记是否存在 - return m.storage.Exists(key) + return m.storage.Exists(disableKeyKey) } -// IsDisableWithInfo Checks if the account is disabled and returns its disable info | 检查账号是否被封禁并返回封禁信息 -func (m *Manager) IsDisableWithInfo(loginID string) (*DisableInfo, error) { +// CheckDisableWithInfo get disable info | 获取封禁信息 +func (m *Manager) CheckDisableWithInfo(loginID string) (*DisableInfo, error) { // Retrieve the disable flag storage key | 获取封禁标记的存储键 - key := m.getDisableKey(loginID) + disableKeyKey := m.getDisableKey(loginID) // Get disable data from storage | 从存储中获取封禁信息 - data, err := m.storage.Get(key) + data, err := m.storage.Get(disableKeyKey) if err != nil { - m.logger.Errorf("Failed to get disable info: %v", err) - return nil, err + return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) + } + if data == nil { + return nil, nil } // 将数据转换为字节数组 raw, err := utils.ToBytes(data) if err != nil { - m.logger.Errorf("Failed to decode disable info: %v", err) - return nil, err + return nil, fmt.Errorf("%w: %v", core.ErrTypeConvert, err) } // Decode stored disable information | 反序列化封禁信息 var disableInfo DisableInfo if err := m.serializer.Decode(raw, &disableInfo); err != nil { - m.logger.Errorf("Failed to decode disable info: %v", err) - return nil, err + return nil, fmt.Errorf("%w: %v", core.ErrDeserializeFailed, err) } - // Account is disabled | 账号已被封禁 return &disableInfo, nil } -// GetDisableTime Gets remaining disable time in seconds | 获取账号剩余封禁时间(秒) -func (m *Manager) GetDisableTime(loginID string) (int64, error) { +// GetDisableTTL Gets remaining disable time in seconds | 获取账号剩余封禁时间(秒) +func (m *Manager) GetDisableTTL(loginID string) (int64, error) { // Retrieve the disable flag storage key | 获取封禁标记的存储键 - key := m.getDisableKey(loginID) + disableKeyKey := m.getDisableKey(loginID) // Retrieve the TTL (Time to Live) for the disable flag | 获取封禁标记的TTL(剩余时间) - ttl, err := m.storage.TTL(key) + ttl, err := m.storage.TTL(disableKeyKey) if err != nil { - return -2, err // Return -2 if TTL retrieval fails | 如果获取TTL失败,返回-2 + return -2, err } // Return the remaining disable time in seconds | 返回剩余封禁时间(秒) @@ -620,13 +622,13 @@ func (m *Manager) GetDisableTime(loginID string) (int64, error) { // GetSession gets session by login ID | 获取 Session func (m *Manager) GetSession(loginID string) (*session.Session, error) { if loginID == "" { - return nil, fmt.Errorf("session id cannot be empty") + return nil, core.ErrSessionIDEmpty } key := m.config.KeyPrefix + m.config.AuthType + session.SessionKeyPrefix + loginID data, err := m.GetStorage().Get(key) if err != nil { - return nil, err + return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } // If found, decode session | 如果找到 Session,则解码 @@ -634,12 +636,12 @@ func (m *Manager) GetSession(loginID string) (*session.Session, error) { if data != nil { raw, err := utils.ToBytes(data) if err != nil { - return nil, err + return nil, fmt.Errorf("%w: %v", core.ErrTypeConvert, err) } sess = &session.Session{} if err := m.GetCodec().Decode(raw, sess); err != nil { - return nil, fmt.Errorf("failed to decode session: %w", err) + return nil, fmt.Errorf("%w: %v", core.ErrDeserializeFailed, err) } } @@ -653,7 +655,7 @@ func (m *Manager) GetSession(loginID string) (*session.Session, error) { // GetSessionByToken Gets session by token | 根据Token获取Session func (m *Manager) GetSessionByToken(tokenValue string) (*session.Session, error) { - loginID, err := m.GetLoginID(tokenValue) + loginID, err := m.GetLoginIDNotCheck(tokenValue) if err != nil { return nil, err } @@ -681,6 +683,26 @@ func (m *Manager) DeleteSessionByToken(tokenValue string) error { return sess.Destroy() } +// HasSession Checks if session exists | 检查Session是否存在 +func (m *Manager) HasSession(loginID string) bool { + if loginID == "" { + return false + } + + key := m.config.KeyPrefix + m.config.AuthType + session.SessionKeyPrefix + loginID + return m.GetStorage().Exists(key) +} + +// RenewSession Renews session TTL | 续期Session +func (m *Manager) RenewSession(loginID string, ttl time.Duration) error { + sess, err := m.GetSession(loginID) + if err != nil { + return err + } + + return sess.Renew(ttl) +} + // ============ Permission Validation | 权限验证 ============ // SetPermissions Sets permissions for user | 设置权限 @@ -699,6 +721,16 @@ func (m *Manager) SetPermissions(loginID string, permissions []string) error { return sess.Set(SessionKeyPermissions, permissions, m.getExpiration()) } +// SetPermissionsByToken Sets permissions by token | 根据Token设置权限 +func (m *Manager) SetPermissionsByToken(tokenValue string, permissions []string) error { + loginID, err := m.GetLoginIDNotCheck(tokenValue) + if err != nil { + return err + } + + return m.SetPermissions(loginID, permissions) +} + // RemovePermissions removes specified permissions for user | 删除用户指定权限 func (m *Manager) RemovePermissions(loginID string, permissions []string) error { sess, err := m.GetSession(loginID) @@ -733,6 +765,16 @@ func (m *Manager) RemovePermissions(loginID string, permissions []string) error return sess.Set(SessionKeyPermissions, newPerms, m.getExpiration()) } +// RemovePermissionsByToken removes specified permissions by token | 根据Token删除指定权限 +func (m *Manager) RemovePermissionsByToken(tokenValue string, permissions []string) error { + loginID, err := m.GetLoginIDNotCheck(tokenValue) + if err != nil { + return err + } + + return m.RemovePermissions(loginID, permissions) +} + // GetPermissions Gets permission list | 获取权限列表 func (m *Manager) GetPermissions(loginID string) ([]string, error) { if m.CustomPermissionListFunc != nil { @@ -756,6 +798,16 @@ func (m *Manager) GetPermissions(loginID string) ([]string, error) { return m.toStringSlice(perms), nil } +// GetPermissionsByToken Gets permission list by token | 根据Token获取权限列表 +func (m *Manager) GetPermissionsByToken(tokenValue string) ([]string, error) { + loginID, err := m.GetLoginIDNotCheck(tokenValue) + if err != nil { + return nil, err + } + + return m.GetPermissions(loginID) +} + // HasPermission checks whether the specified loginID has the given permission | 检查指定账号是否拥有指定权限 func (m *Manager) HasPermission(loginID string, permission string) bool { perms, err := m.GetPermissions(loginID) @@ -779,18 +831,7 @@ func (m *Manager) HasPermissionByToken(tokenValue string, permission string) boo return false } - perms, err := m.GetPermissions(loginID) - if err != nil { - return false - } - - for _, p := range perms { - if m.matchPermission(p, permission) { - return true - } - } - - return false + return m.HasPermission(loginID, permission) } // HasPermissionsAnd Checks whether the user has all permissions (AND) | 是否拥有所有权限(AND) @@ -806,6 +847,7 @@ func (m *Manager) HasPermissionsAnd(loginID string, permissions []string) bool { return false } } + return true } @@ -816,19 +858,7 @@ func (m *Manager) HasPermissionsAndByToken(tokenValue string, permissions []stri return false } - // Get all permissions once | 一次性获取用户权限 - userPerms, err := m.GetPermissions(loginID) - if err != nil || len(userPerms) == 0 { - return false - } - - // Check every required permission | 校验每一个必需权限 - for _, need := range permissions { - if !m.hasPermissionInList(userPerms, need) { - return false - } - } - return true + return m.HasPermissionsAnd(loginID, permissions) } // HasPermissionsOr Checks whether the user has any permission (OR) | 是否拥有任一权限(OR) @@ -855,19 +885,7 @@ func (m *Manager) HasPermissionsOrByToken(tokenValue string, permissions []strin return false } - // Get all permissions once | 一次性获取用户权限 - userPerms, err := m.GetPermissions(loginID) - if err != nil || len(userPerms) == 0 { - return false - } - - // Check if any permission matches | 任一权限匹配即通过 - for _, need := range permissions { - if m.hasPermissionInList(userPerms, need) { - return true - } - } - return false + return m.HasPermissionsOr(loginID, permissions) } // matchPermission Matches permission with wildcards support | 权限匹配(支持通配符) @@ -930,6 +948,16 @@ func (m *Manager) SetRoles(loginID string, roles []string) error { return sess.Set(SessionKeyRoles, roles, m.getExpiration()) } +// SetRolesByToken Sets roles by token | 根据Token设置角色 +func (m *Manager) SetRolesByToken(tokenValue string, roles []string) error { + loginID, err := m.GetLoginIDNotCheck(tokenValue) + if err != nil { + return err + } + + return m.SetRoles(loginID, roles) +} + // RemoveRoles removes specified roles for user | 删除用户指定角色 func (m *Manager) RemoveRoles(loginID string, roles []string) error { sess, err := m.GetSession(loginID) @@ -966,6 +994,16 @@ func (m *Manager) RemoveRoles(loginID string, roles []string) error { return sess.Set(SessionKeyRoles, newRoles, m.getExpiration()) } +// RemoveRolesByToken removes specified roles by token | 根据Token删除指定角色 +func (m *Manager) RemoveRolesByToken(tokenValue string, roles []string) error { + loginID, err := m.GetLoginIDNotCheck(tokenValue) + if err != nil { + return err + } + + return m.RemoveRoles(loginID, roles) +} + // GetRoles gets role list for the specified loginID | 获取指定账号的角色列表 func (m *Manager) GetRoles(loginID string) ([]string, error) { if m.CustomRoleListFunc != nil { @@ -989,6 +1027,16 @@ func (m *Manager) GetRoles(loginID string) ([]string, error) { return m.toStringSlice(roles), nil } +// GetRolesByToken Gets role list by token | 根据Token获取角色列表 +func (m *Manager) GetRolesByToken(tokenValue string) ([]string, error) { + loginID, err := m.GetLoginIDNotCheck(tokenValue) + if err != nil { + return nil, err + } + + return m.GetRoles(loginID) +} + // HasRole checks whether the specified loginID has the given role | 检查指定账号是否拥有指定角色 func (m *Manager) HasRole(loginID string, role string) bool { roles, err := m.GetRoles(loginID) @@ -1011,17 +1059,7 @@ func (m *Manager) HasRoleByToken(tokenValue string, role string) bool { return false } - roles, err := m.GetRoles(loginID) - if err != nil { - return false - } - - for _, r := range roles { - if r == role { - return true - } - } - return false + return m.HasRole(loginID, role) } // HasRolesAnd Checks whether the user has all roles (AND) | 是否拥有所有角色(AND) @@ -1046,17 +1084,7 @@ func (m *Manager) HasRolesAndByToken(tokenValue string, roles []string) bool { return false } - userRoles, err := m.GetRoles(loginID) - if err != nil || len(userRoles) == 0 { - return false - } - - for _, need := range roles { - if !m.hasRoleInList(userRoles, need) { - return false - } - } - return true + return m.HasRolesAnd(loginID, roles) } // HasRolesOr Checks whether the user has any role (OR) | 是否拥有任一角色(OR) @@ -1081,17 +1109,7 @@ func (m *Manager) HasRolesOrByToken(tokenValue string, roles []string) bool { return false } - userRoles, err := m.GetRoles(loginID) - if err != nil || len(userRoles) == 0 { - return false - } - - for _, need := range roles { - if m.hasRoleInList(userRoles, need) { - return true - } - } - return false + return m.HasRolesOr(loginID, roles) } // hasPermissionInList checks whether permission exists in permission list | 判断权限是否存在于权限列表中 @@ -1166,75 +1184,182 @@ func (m *Manager) GetSessionCountByLoginID(loginID string) (int, error) { // RegisterFunc registers a function as an event listener | 注册函数作为事件监听器 func (m *Manager) RegisterFunc(event listener.Event, fn func(*listener.EventData)) { - if m.eventManager != nil { - m.eventManager.RegisterFunc(event, fn) - } + m.eventManager.RegisterFunc(event, fn) } // Register registers an event listener | 注册事件监听器 func (m *Manager) Register(event listener.Event, listener listener.Listener) string { - if m.eventManager != nil { - return m.eventManager.Register(event, listener) - } - return "" + return m.eventManager.Register(event, listener) } // RegisterWithConfig registers an event listener with config | 注册带配置的事件监听器 func (m *Manager) RegisterWithConfig(event listener.Event, listener listener.Listener, config listener.ListenerConfig) string { - if m.eventManager != nil { - return m.eventManager.RegisterWithConfig(event, listener, config) - } - return "" + return m.eventManager.RegisterWithConfig(event, listener, config) } // Unregister removes an event listener by ID | 根据ID移除事件监听器 func (m *Manager) Unregister(id string) bool { - if m.eventManager != nil { - return m.eventManager.Unregister(id) - } - return false + return m.eventManager.Unregister(id) } // TriggerEvent manually triggers an event | 手动触发事件 func (m *Manager) TriggerEvent(data *listener.EventData) { - if m.eventManager != nil { - m.eventManager.Trigger(data) - } + m.eventManager.Trigger(data) +} + +// TriggerEventAsync triggers an event asynchronously and returns immediately | 异步触发事件并立即返回 +func (m *Manager) TriggerEventAsync(data *listener.EventData) { + m.eventManager.TriggerAsync(data) +} + +// TriggerEventSync triggers an event synchronously and waits for all listeners | 同步触发事件并等待所有监听器完成 +func (m *Manager) TriggerEventSync(data *listener.EventData) { + m.eventManager.TriggerSync(data) } // WaitEvents waits for all async event listeners to complete | 等待所有异步事件监听器完成 func (m *Manager) WaitEvents() { - if m.eventManager != nil { - m.eventManager.Wait() - } + m.eventManager.Wait() +} + +// ClearEventListeners removes all listeners for a specific event | 清除指定事件的所有监听器 +func (m *Manager) ClearEventListeners(event listener.Event) { + m.eventManager.ClearEvent(event) +} + +// ClearAllEventListeners removes all listeners | 清除所有事件监听器 +func (m *Manager) ClearAllEventListeners() { + m.eventManager.Clear() +} + +// CountEventListeners returns the number of listeners for a specific event | 获取指定事件监听器数量 +func (m *Manager) CountEventListeners(event listener.Event) int { + return m.eventManager.CountForEvent(event) +} + +// CountAllListeners returns the total number of registered listeners | 获取已注册监听器总数 +func (m *Manager) CountAllListeners() int { + return m.eventManager.Count() +} + +// GetEventListenerIDs returns all listener IDs for a specific event | 获取指定事件的所有监听器ID +func (m *Manager) GetEventListenerIDs(event listener.Event) []string { + return m.eventManager.GetListenerIDs(event) +} + +// GetAllRegisteredEvents returns all events that have registered listeners | 获取所有已注册事件 +func (m *Manager) GetAllRegisteredEvents() []listener.Event { + return m.eventManager.GetAllEvents() +} + +// HasEventListeners checks if there are any listeners for a specific event | 检查指定事件是否有监听器 +func (m *Manager) HasEventListeners(event listener.Event) bool { + return m.eventManager.HasListeners(event) } // ============ Security Features | 安全特性 ============ -// GenerateNonce Generates a one-time nonce | 生成一次性随机数 -func (m *Manager) GenerateNonce(_ context.Context) (string, error) { +// SecurityGenerateNonce Generates a one-time nonce | 生成一次性随机数 +func (m *Manager) SecurityGenerateNonce() (string, error) { return m.nonceManager.Generate() } -// VerifyNonce Verifies a nonce | 验证随机数 -func (m *Manager) VerifyNonce(_ context.Context, nonce string) bool { +// SecurityVerifyNonce Verifies a nonce | 验证随机数 +func (m *Manager) SecurityVerifyNonce(nonce string) bool { return m.nonceManager.Verify(nonce) } -// LoginWithRefreshToken Logs in with refresh token | 使用刷新令牌登录 -func (m *Manager) LoginWithRefreshToken(_ context.Context, loginID string, device ...string) (*security.RefreshTokenInfo, error) { +// SecurityVerifyAndConsumeNonce Verifies and consumes nonce, returns error if invalid | 验证并消费nonce,无效时返回错误 +func (m *Manager) SecurityVerifyAndConsumeNonce(nonce string) error { + return m.nonceManager.VerifyAndConsume(nonce) +} + +// SecurityIsValidNonce Checks if nonce is valid without consuming it | 检查nonce是否有效(不消费) +func (m *Manager) SecurityIsValidNonce(nonce string) bool { + return m.nonceManager.IsValid(nonce) +} + +// SecurityGenerateTokenPair Create access + refresh token | 生成访问令牌和刷新令牌 +func (m *Manager) SecurityGenerateTokenPair(loginID string, device ...string) (*security.RefreshTokenInfo, error) { deviceType := getDevice(device) return m.refreshManager.GenerateTokenPair(loginID, deviceType) } -// RefreshAccessToken Refreshes access token | 刷新访问令牌 -func (m *Manager) RefreshAccessToken(ctx context.Context) (*security.RefreshTokenInfo, error) { - return m.refreshManager.RefreshAccessToken(utils.GetCtxValue(ctx, config.CtxTokenValue)) +// SecurityVerifyAccessToken Check token exists | 验证访问令牌是否存在 +func (m *Manager) SecurityVerifyAccessToken(accessToken string) bool { + return m.refreshManager.VerifyAccessToken(accessToken) +} + +// SecurityVerifyAccessTokenAndGetInfo Verify and get info | 验证访问令牌并获取信息 +func (m *Manager) SecurityVerifyAccessTokenAndGetInfo(accessToken string) (*security.AccessTokenInfo, bool) { + return m.refreshManager.VerifyAccessTokenAndGetInfo(accessToken) +} + +// SecurityRefreshAccessToken Refresh access token by refresh token | 使用刷新令牌刷新访问令牌 +func (m *Manager) SecurityRefreshAccessToken(refreshToken string) (*security.RefreshTokenInfo, error) { + return m.refreshManager.RefreshAccessToken(refreshToken) +} + +// SecurityGetRefreshTokenInfo Get refresh token info by token | 根据刷新令牌获取刷新令牌信息 +func (m *Manager) SecurityGetRefreshTokenInfo(refreshToken string) (*security.RefreshTokenInfo, error) { + return m.refreshManager.GetRefreshTokenInfo(refreshToken) +} + +// SecurityRevokeRefreshToken Remove refresh token | 撤销刷新令牌 +func (m *Manager) SecurityRevokeRefreshToken(refreshToken string) error { + return m.refreshManager.RevokeRefreshToken(refreshToken) +} + +// SecurityIsRefreshTokenValid Check refresh token valid | 判断刷新令牌是否有效 +func (m *Manager) SecurityIsRefreshTokenValid(refreshToken string) bool { + return m.refreshManager.IsValid(refreshToken) +} + +// ============ OAuth2 Features | Oauth2特性 ============ + +// OAuth2RegisterClient Registers an OAuth2 client | 注册OAuth2客户端 +func (m *Manager) OAuth2RegisterClient(client *oauth2.Client) error { + return m.oauth2Server.RegisterClient(client) +} + +// OAuth2UnregisterClient Unregisters an OAuth2 client | 注销OAuth2客户端 +func (m *Manager) OAuth2UnregisterClient(clientID string) { + m.oauth2Server.UnregisterClient(clientID) +} + +// OAuth2GetClient Gets client by ID | 根据ID获取客户端 +func (m *Manager) OAuth2GetClient(clientID string) (*oauth2.Client, error) { + return m.oauth2Server.GetClient(clientID) +} + +// OAuth2GenerateAuthorizationCode Generates authorization code | 生成授权码 +func (m *Manager) OAuth2GenerateAuthorizationCode(clientID, userID, redirectURI string, scopes []string) (*oauth2.AuthorizationCode, error) { + return m.oauth2Server.GenerateAuthorizationCode(clientID, userID, redirectURI, scopes) +} + +// OAuth2ExchangeCodeForToken Exchanges authorization code for access token | 用授权码换取访问令牌 +func (m *Manager) OAuth2ExchangeCodeForToken(code, clientID, clientSecret, redirectURI string) (*oauth2.AccessToken, error) { + return m.oauth2Server.ExchangeCodeForToken(code, clientID, clientSecret, redirectURI) +} + +// OAuth2ValidateAccessToken Validates access token | 验证访问令牌 +func (m *Manager) OAuth2ValidateAccessToken(accessToken string) bool { + return m.oauth2Server.ValidateAccessToken(accessToken) +} + +// OAuth2ValidateAccessTokenAndGetInfo Validates access token and get info | 验证访问令牌并获取信息 +func (m *Manager) OAuth2ValidateAccessTokenAndGetInfo(accessToken string) (*oauth2.AccessToken, error) { + return m.oauth2Server.ValidateAccessTokenAndGetInfo(accessToken) +} + +// OAuth2RefreshAccessToken Refreshes access token using refresh token | 使用刷新令牌刷新访问令牌 +func (m *Manager) OAuth2RefreshAccessToken(clientID, refreshToken, clientSecret string) (*oauth2.AccessToken, error) { + return m.oauth2Server.RefreshAccessToken(clientID, refreshToken, clientSecret) } -// RevokeRefreshToken Revokes refresh token | 撤销刷新令牌 -func (m *Manager) RevokeRefreshToken(ctx context.Context) error { - return m.refreshManager.RevokeRefreshToken(utils.GetCtxValue(ctx, config.CtxTokenValue)) +// OAuth2RevokeToken Revokes access token and its refresh token | 撤销访问令牌及其刷新令牌 +func (m *Manager) OAuth2RevokeToken(accessToken string) error { + return m.oauth2Server.RevokeToken(accessToken) } // ============ Public Getters | 公共获取器 ============ @@ -1289,19 +1414,21 @@ func (m *Manager) GetOAuth2Server() *oauth2.OAuth2Server { return m.oauth2Server } -// ============ Internal Methods | 内部方法 ============ +// GetDevice extracts device type from optional parameter | 从可选参数中提取设备类型 公开方法 +func (m *Manager) GetDevice(device []string) string { + if len(device) > 0 && strings.TrimSpace(device[0]) != "" { + return device[0] + } + return DefaultDevice +} -// getTokenInfoByTokenValue Gets token information by token value | 通过Token值获取Token信息 -func (m *Manager) getTokenInfoByTokenValue(tokenValue string, checkState ...bool) (*TokenInfo, error) { - // Construct the token storage key | 构造Token存储键 - tokenKey := m.getTokenKey(tokenValue) +// ============ Internal Methods | 内部方法 ============ +// getTokenInfo Gets token information by token value | 通过Token值获取Token信息 +func (m *Manager) getTokenInfo(tokenValue string, checkState ...bool) (*TokenInfo, error) { // Retrieve data from storage using the token key | 使用Token键从存储中获取数据 - data, err := m.storage.Get(tokenKey) - if err != nil { - return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) - } - if data == nil { + data, err := m.storage.Get(m.getTokenKey(tokenValue)) + if err != nil || data == nil { return nil, core.ErrTokenNotFound } @@ -1311,28 +1438,25 @@ func (m *Manager) getTokenInfoByTokenValue(tokenValue string, checkState ...bool return nil, fmt.Errorf("%w: %v", core.ErrTypeConvert, err) } - // Check for special token states (if enabled) | 检查是否为特殊状态(当启用检查时) - // If checkState is provided and the first value is true, check for token states | 如果提供了checkState且第一个值为true,检查Token状态 + // Check for special token states (if enabled) | 检查是否为特殊状态 if len(checkState) > 0 && checkState[0] { - // Convert raw bytes to string and check the token state | 将原始数据转换为字符串,并检查Token状态 switch string(raw) { case string(TokenStateKickout): // Token has been kicked out | Token已被踢下线 - return nil, core.ErrTokenKickout // Return error if token is kicked out | 如果Token被踢下线,返回错误 + return nil, core.ErrTokenKickout case string(TokenStateReplaced): // Token has been replaced | Token已被顶下线 - return nil, core.ErrTokenReplaced // Return error if token is replaced | 如果Token被顶下线,返回错误 + return nil, core.ErrTokenReplaced } } // Parse TokenInfo | 解析Token信息 var info TokenInfo - // Use the serializer to decode the raw data | 使用序列化器来解码原始数据 if err = m.serializer.Decode(raw, &info); err != nil { return nil, fmt.Errorf("%w: %v", core.ErrDeserializeFailed, err) } - return &info, nil // Return the parsed TokenInfo | 返回解析后的Token信息 + return &info, nil } // renewToken Renews token expiration asynchronously | 异步续期Token @@ -1340,35 +1464,28 @@ func (m *Manager) renewToken(tokenValue string, info *TokenInfo) { // If info is nil, retrieve token information | 如果info为空,获取Token信息 if info == nil { var err error - info, err = m.getTokenInfoByTokenValue(tokenValue) - if err != nil { + if info, err = m.getTokenInfo(tokenValue); err != nil || info == nil { return } } - // Construct the token storage key | 构造Token存储键 - tokenKey := m.getTokenKey(tokenValue) - // Construct the account storage key | 构造账号存储键 - accountKey := m.getAccountKey(info.LoginID, info.Device) // Get expiration time | 获取过期时间 exp := m.getExpiration() // Update ActiveTime | 更新ActiveTime info.ActiveTime = time.Now().Unix() + // Renew token TTL | 续期Token的TTL if tokenInfo, err := m.serializer.Encode(info); err == nil { - // Renew token TTL | 续期Token的TTL - _ = m.storage.Set(tokenKey, tokenInfo, exp) + _ = m.storage.Set(m.getTokenKey(tokenValue), tokenInfo, exp) } // Renew accountKey TTL | 续期账号映射的TTL - _ = m.storage.Expire(accountKey, exp) + _ = m.storage.Expire(m.getAccountKey(info.LoginID, info.Device), exp) // Renew session TTL | 续期Session的TTL - if sess, err := m.GetSession(info.LoginID); err == nil && sess != nil { - _ = sess.Renew(exp) - } + _ = m.RenewSession(info.LoginID, exp) - // Set minimal renewal interval marker | 设置最小续期间隔标记(用于限流续期频率) + // Set minimal renewal interval marker | 设置最小续期间隔标记 if m.config.RenewInterval > 0 { _ = m.storage.Set( m.getRenewKey(tokenValue), @@ -1379,31 +1496,34 @@ func (m *Manager) renewToken(tokenValue string, info *TokenInfo) { } // removeTokenChain Removes all related keys and triggers event | 删除Token相关的所有键并触发事件 -func (m *Manager) removeTokenChain(tokenValue string, destroySession bool, info *TokenInfo, event listener.Event) error { +func (m *Manager) removeTokenChain(tokenValue string, info *TokenInfo, event listener.Event, destroySession ...bool) error { // If info is nil, retrieve token information | 如果info为空,获取Token信息 if info == nil { var err error - info, err = m.getTokenInfoByTokenValue(tokenValue) - if err != nil { + if info, err = m.getTokenInfo(tokenValue); err != nil { return err } } - _ = m.storage.Delete(m.getTokenKey(tokenValue)) // Delete token-info mapping | 删除Token信息映射 - _ = m.storage.Delete(m.getAccountKey(info.LoginID, info.Device)) // Delete account-token mapping | 删除账号映射 - _ = m.storage.Delete(m.getRenewKey(tokenValue)) // Delete renew key | 删除续期标记 - if destroySession { // Optionally destroy session | 可选销毁Session + // Delete token-info mapping | 删除Token信息映射 + _ = m.storage.Delete(m.getTokenKey(tokenValue)) + // Delete account-token mapping | 删除账号映射 + _ = m.storage.Delete(m.getAccountKey(info.LoginID, info.Device)) + // Delete renew key | 删除续期标记 + _ = m.storage.Delete(m.getRenewKey(tokenValue)) + // Optionally destroy session | 可选销毁Session + if len(destroySession) > 0 && destroySession[0] { _ = m.DeleteSession(info.LoginID) } // Trigger event notification | 触发事件通知 if m.eventManager != nil { m.eventManager.Trigger(&listener.EventData{ - Event: event, // Event type | 事件类型 - AuthType: m.config.AuthType, // Auth type from context | 从上下文中获取认证类型 - LoginID: info.LoginID, // Login ID of the user | 用户的登录ID - Device: info.Device, // Device type | 设备类型 - Token: tokenValue, // Token value from context | 从上下文中获取Token值 + Event: event, + AuthType: m.config.AuthType, + LoginID: info.LoginID, + Device: info.Device, + Token: tokenValue, }) } @@ -1440,14 +1560,6 @@ func getDevice(device []string) string { return DefaultDevice } -// GetDevice extracts device type from optional parameter | 从可选参数中提取设备类型 公开方法 -func (m *Manager) GetDevice(device []string) string { - if len(device) > 0 && strings.TrimSpace(device[0]) != "" { - return device[0] - } - return DefaultDevice -} - // getExpiration calculates expiration duration from config | 从配置计算过期时间 func (m *Manager) getExpiration() time.Duration { if m.config.Timeout > 0 { diff --git a/core/security/refresh_token.go b/core/security/refresh_token.go index 761eeed..38eb64d 100644 --- a/core/security/refresh_token.go +++ b/core/security/refresh_token.go @@ -178,7 +178,7 @@ func (rtm *RefreshTokenManager) VerifyAccessTokenAndGetInfo(accessToken string) // RefreshAccessToken Refresh access token by refresh token | 使用刷新令牌刷新访问令牌 func (rtm *RefreshTokenManager) RefreshAccessToken(refreshToken string) (*RefreshTokenInfo, error) { if refreshToken == "" { - return nil, core.ErrInvalidRefreshToken + return nil, core.ErrNonceInvalidRefreshToken } refreshKey := rtm.getRefreshKey(refreshToken) diff --git a/core/session/session.go b/core/session/session.go index 089720c..d789451 100644 --- a/core/session/session.go +++ b/core/session/session.go @@ -3,6 +3,7 @@ package session import ( "fmt" codec_json "github.com/click33/sa-token-go/codec/json" + "github.com/click33/sa-token-go/core" "github.com/click33/sa-token-go/storage/memory" "sync" "time" @@ -12,10 +13,11 @@ import ( // Session Session object for storing user data | 会话对象,用于存储用户数据 type Session struct { - AuthType string `json:"authType"` // Authentication system type | 认证体系类型 - ID string `json:"id"` // Session ID | Session标识 - CreateTime int64 `json:"createTime"` // Creation time | 创建时间 - Data map[string]any `json:"data"` // Session data | 数据 + AuthType string `json:"authType"` // Authentication system type | 认证体系类型 + ID string `json:"id"` // Session ID | Session标识 + CreateTime int64 `json:"createTime"` // Creation time | 创建时间 + Data map[string]any `json:"data"` // Session data | 数据 + prefix string `json:"-" msgpack:"-"` // Key prefix | 键前缀 mu sync.RWMutex `json:"-" msgpack:"-"` // Read-write lock | 读写锁 storage adapter.Storage `json:"-" msgpack:"-"` // Storage adapter (Redis, Memory, etc.) | 存储适配器(如 Redis、Memory) @@ -47,7 +49,7 @@ func NewSession(authType, prefix, id string, storage adapter.Storage, serializer // Set Sets value | 设置值 func (s *Session) Set(key string, value any, ttl ...time.Duration) error { if key == "" { - return fmt.Errorf("session key cannot empty") + return core.ErrSessionInvalidDataKey } s.mu.Lock() @@ -69,7 +71,7 @@ func (s *Session) SetMulti(valueMap map[string]any, ttl ...time.Duration) error for key, value := range valueMap { if key == "" { - return fmt.Errorf("session id cannot be empty") + return core.ErrSessionInvalidDataKey } s.Data[key] = value } @@ -218,36 +220,55 @@ func (s *Session) getStorageKey() string { func (s *Session) save(ttl ...time.Duration) error { data, err := s.serializer.Encode(s) if err != nil { - return fmt.Errorf("%w: %v", fmt.Errorf("failed to encode data"), err) + return fmt.Errorf("%w: %v", core.ErrSerializeFailed, err) } key := s.getStorageKey() // Default to 0 (no expiration) | 默认使用 0(无过期时间) if len(ttl) == 0 || ttl[0] <= 0 { - return s.storage.Set(key, data, 0) + err = s.storage.Set(key, data, 0) + if err != nil { + return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) + } + return nil } // Save with provided TTL | 使用指定 TTL 保存 - return s.storage.Set(key, data, ttl[0]) + err = s.storage.Set(key, data, ttl[0]) + if err != nil { + return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) + } + + return nil } // saveKeepTTL saves session while preserving its TTL | 保存 Session 并保留现有 TTL func (s *Session) saveKeepTTL() error { data, err := s.serializer.Encode(s) if err != nil { - return fmt.Errorf("%w: %v", fmt.Errorf("failed to encode data"), err) + return fmt.Errorf("%w: %v", core.ErrSerializeFailed, err) } key := s.getStorageKey() // Try to get current TTL | 获取当前 TTL - ttl, err := s.storage.TTL(key) + // -1: never expires | 永不过期 + // -2: key not found | key不存在 + // >0: remaining TTL | 剩余时间 + ttl, _ := s.storage.TTL(key) + + // ttl <= 0 means: not found(-2), never expires(-1), or expired + // All these cases should save with no expiration | 这些情况都保存为永久 + if ttl <= 0 { + ttl = 0 + } + // ttl > 0: use original TTL | 使用原有TTL + + err = s.storage.Set(key, data, ttl) if err != nil { - return err - } else if ttl <= 0 { - ttl = 0 // Default to permanent if no TTL exists | 无 TTL 默认永久保存 + return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } - return s.storage.Set(key, data, ttl) + return nil } diff --git a/stputil/stputil.go b/stputil/stputil.go index 0cd3636..8d7701c 100644 --- a/stputil/stputil.go +++ b/stputil/stputil.go @@ -18,11 +18,6 @@ import ( var ( globalManagerMap sync.Map - - ErrTokenKickout = manager.ErrTokenKickout // token has been kicked out | Token 已被踢下线 - ErrTokenReplaced = manager.ErrTokenReplaced // token has been replaced | Token 已被顶下线 - ErrAccountDisabled = manager.ErrAccountDisabled // account is disabled | 账号已被禁用 - ErrLoginLimitExceeded = manager.ErrLoginLimitExceeded // login count exceeds the maximum limit | 超出最大登录数量限制 ) // ============ Authentication | 登录认证 ============ From 6f0281549eab820a1b7b00dfbc3a35f9c022da4e Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Fri, 26 Dec 2025 11:55:53 +0800 Subject: [PATCH 25/50] =?UTF-8?q?feat():=201=E3=80=81=E5=AE=8C=E5=96=84man?= =?UTF-8?q?ager=E4=BB=A5=E5=8F=8Agf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/adapter/storage.go | 27 +- core/errors.go | 6 +- core/manager/manager.go | 406 +++++++-------- core/oauth2/oauth2.go | 47 +- core/security/nonce.go | 19 +- core/security/refresh_token.go | 36 +- core/session/session.go | 37 +- integrations/gf/export.go | 898 ++++++++++++++++++++++++++++++++- integrations/gf/middleware.go | 63 +-- integrations/gin/middleware.go | 10 - storage/memory/memory.go | 26 +- storage/redis/redis.go | 57 +-- stputil/stputil.go | 335 ++++++++++-- 13 files changed, 1530 insertions(+), 437 deletions(-) diff --git a/core/adapter/storage.go b/core/adapter/storage.go index 53fa540..bd4eb76 100644 --- a/core/adapter/storage.go +++ b/core/adapter/storage.go @@ -1,45 +1,48 @@ package adapter -import "time" +import ( + "context" + "time" +) // Storage defines storage interface for Token and Session data | 定义存储接口,用于存储Token和Session数据 type Storage interface { // ============== Basic Operations | 基本操作 ============== // Set sets key-value pair with optional expiration time (0 means never expire) | 设置键值对,可选过期时间(0表示永不过期) - Set(key string, value any, expiration time.Duration) error + Set(ctx context.Context, key string, value any, expiration time.Duration) error // SetKeepTTL sets key-value pair but keeps the original TTL unchanged | 设置键值但保持原有TTL不变 - SetKeepTTL(key string, value any) error + SetKeepTTL(ctx context.Context, key string, value any) error // Get gets value by key, returns nil if key doesn't exist | 获取键对应的值,键不存在时返回nil - Get(key string) (any, error) + Get(ctx context.Context, key string) (any, error) // GetAndDelete atomically gets the value and deletes the key | 原子获取并删除键 - GetAndDelete(key string) (any, error) + GetAndDelete(ctx context.Context, key string) (any, error) // Delete deletes one or more keys | 删除一个或多个键 - Delete(keys ...string) error + Delete(ctx context.Context, keys ...string) error // Exists checks if key exists | 检查键是否存在 - Exists(key string) bool + Exists(ctx context.Context, key string) bool // ============== Key Management | 键管理 ============== // Keys gets all keys matching pattern (e.g., "user:*") | 获取匹配模式的所有键(如:"user:*") - Keys(pattern string) ([]string, error) + Keys(ctx context.Context, pattern string) ([]string, error) // Expire sets expiration time for key | 设置键的过期时间 - Expire(key string, expiration time.Duration) error + Expire(ctx context.Context, key string, expiration time.Duration) error // TTL gets remaining time to live (-1 if no expiration, -2 if key doesn't exist) | 获取键的剩余生存时间(-1表示永不过期,-2表示键不存在) - TTL(key string) (time.Duration, error) + TTL(ctx context.Context, key string) (time.Duration, error) // ============== Utility Methods | 工具方法 ============== // Clear clears all data (use with caution, mainly for testing) | 清空所有数据(谨慎使用,主要用于测试) - Clear() error + Clear(ctx context.Context) error // Ping checks if storage is accessible | 检查存储是否可访问 - Ping() error + Ping(ctx context.Context) error } diff --git a/core/errors.go b/core/errors.go index b1293ad..c67c950 100644 --- a/core/errors.go +++ b/core/errors.go @@ -54,6 +54,9 @@ var ( // ErrAccountNotFound indicates the account doesn't exist | 账号不存在 ErrAccountNotFound = fmt.Errorf("account not found: no account associated with this identifier") + + // ErrLoginLimitExceeded indicates login count exceeds the maximum limit | 超出最大登录数量限制 + ErrLoginLimitExceeded = fmt.Errorf("account error: login count exceeds the maximum limit") ) // ============ Session Errors | 会话错误 ============ @@ -64,9 +67,6 @@ var ( // ErrActiveTimeout indicates the session has been inactive for too long | Session活跃超时 ErrActiveTimeout = fmt.Errorf("session inactive: the session has exceeded the inactivity timeout") - - // ErrLoginLimitExceeded indicates login count exceeds the maximum limit | 超出最大登录数量限制 - ErrLoginLimitExceeded = fmt.Errorf("account error: login count exceeds the maximum limit") ) // ============ Security Errors | Security 错误 ============ diff --git a/core/manager/manager.go b/core/manager/manager.go index 2b62174..4833cc4 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -160,9 +160,9 @@ func (m *Manager) CloseManager() { // ============ Login Authentication | 登录认证 ============ // Login Performs user login and returns token | 登录 返回Token -func (m *Manager) Login(loginID string, device ...string) (string, error) { +func (m *Manager) Login(ctx context.Context, loginID string, device ...string) (string, error) { // Check if account is disabled | 检查账号是否被封禁 - if m.IsDisable(loginID) { + if m.IsDisable(ctx, loginID) { return "", core.ErrAccountDisabled } @@ -175,9 +175,9 @@ func (m *Manager) Login(loginID string, device ...string) (string, error) { // Handle shared token for concurrent login | 处理多人登录共用 Token 的情况 if m.config.IsShare { // Look for existing token of this account + device | 查找账号 + 设备下是否已有登录 Token - existingToken, err := m.storage.Get(accountKey) + existingToken, err := m.storage.Get(ctx, accountKey) if err == nil && existingToken != nil { - if existingTokenStr, ok := assertString(existingToken); ok && m.IsLogin(existingTokenStr) { + if existingTokenStr, ok := assertString(existingToken); ok && m.IsLogin(ctx, existingTokenStr) { // If valid token exists, return it directly | 如果已有 Token 且有效,则直接返回 return existingTokenStr, nil } @@ -187,11 +187,11 @@ func (m *Manager) Login(loginID string, device ...string) (string, error) { // Handle concurrent login behavior | 处理并发登录逻辑 if !m.config.IsConcurrent { // Concurrent login not allowed → replace previous login on the same device | 不允许并发登录 顶掉同设备下已存在的登录会话 - _ = m.replace(loginID, deviceType) + _ = m.replace(ctx, loginID, deviceType) } else if m.config.MaxLoginCount > 0 && !m.config.IsShare { // Concurrent login allowed but limited by MaxLoginCount | 允许并发登录但受 MaxLoginCount 限制 - tokens, _ := m.GetTokenValueListByLoginID(loginID) + tokens, _ := m.GetTokenValueListByLoginID(ctx, loginID) if int64(len(tokens)) >= m.config.MaxLoginCount { return "", core.ErrLoginLimitExceeded } @@ -222,12 +222,12 @@ func (m *Manager) Login(loginID string, device ...string) (string, error) { // Save token-tokenInfo mapping | 保存 TokenKey-TokenInfo 映射 tokenKey := m.getTokenKey(tokenValue) - if err = m.storage.Set(tokenKey, tokenInfo, expiration); err != nil { + if err = m.storage.Set(ctx, tokenKey, tokenInfo, expiration); err != nil { return "", fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } // Save account-token mapping | 保存 AccountKey-Token 映射 - if err = m.storage.Set(accountKey, tokenValue, expiration); err != nil { + if err = m.storage.Set(ctx, accountKey, tokenValue, expiration); err != nil { return "", fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } @@ -235,6 +235,7 @@ func (m *Manager) Login(loginID string, device ...string) (string, error) { if err = session. NewSession(m.config.AuthType, m.config.KeyPrefix, loginID, m.storage, m.serializer). SetMulti( + ctx, map[string]any{ SessionKeyLoginID: loginID, SessionKeyDevice: deviceType, @@ -260,30 +261,30 @@ func (m *Manager) Login(loginID string, device ...string) (string, error) { } // LoginByToken Login with specified token (for seamless token refresh) | 使用指定Token登录(用于token无感刷新) -func (m *Manager) LoginByToken(tokenValue string) error { - info, err := m.getTokenInfo(tokenValue) +func (m *Manager) LoginByToken(ctx context.Context, tokenValue string) error { + info, err := m.getTokenInfo(ctx, tokenValue) if err != nil { return err } // Check if the account is disabled | 检查账号是否被封禁 - if m.IsDisable(info.LoginID) { + if m.IsDisable(ctx, info.LoginID) { return core.ErrAccountDisabled } // Renews token expiration asynchronously | 异步续期Token - m.renewToken(tokenValue, info) + m.renewToken(ctx, tokenValue, info) return nil } // Logout Performs user logout | 登出 -func (m *Manager) Logout(loginID string, device ...string) error { +func (m *Manager) Logout(ctx context.Context, loginID string, device ...string) error { // Get account key | 获取账号存储键 accountKey := m.getAccountKey(loginID, getDevice(device)) // Get token value | 获取Token值 - tokenValue, err := m.storage.Get(accountKey) + tokenValue, err := m.storage.Get(ctx, accountKey) if err != nil { return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } @@ -297,79 +298,79 @@ func (m *Manager) Logout(loginID string, device ...string) error { return nil } - return m.removeTokenChain(tokenValueStr, nil, listener.EventLogout) + return m.removeTokenChain(ctx, tokenValueStr, nil, listener.EventLogout) } // LogoutByToken Logout by token | 根据Token登出 -func (m *Manager) LogoutByToken(tokenValue string) error { - return m.removeTokenChain(tokenValue, nil, listener.EventLogout) +func (m *Manager) LogoutByToken(ctx context.Context, tokenValue string) error { + return m.removeTokenChain(ctx, tokenValue, nil, listener.EventLogout) } // kickout Kick user offline (private) | 踢人下线(私有) -func (m *Manager) kickout(loginID string, device string) error { +func (m *Manager) kickout(ctx context.Context, loginID string, device string) error { accountKey := m.getAccountKey(loginID, device) - tokenValue, err := m.storage.Get(accountKey) + tokenValue, err := m.storage.Get(ctx, accountKey) if err != nil || tokenValue == nil { return nil } if tokenValueStr, ok := assertString(tokenValue); ok { - return m.removeTokenChain(tokenValueStr, nil, listener.EventKickout) + return m.removeTokenChain(ctx, tokenValueStr, nil, listener.EventKickout) } return nil } // Kickout Kick user offline (public method) | 踢人下线(公开方法) -func (m *Manager) Kickout(loginID string, device ...string) error { - return m.kickout(loginID, getDevice(device)) +func (m *Manager) Kickout(ctx context.Context, loginID string, device ...string) error { + return m.kickout(ctx, loginID, getDevice(device)) } // kickoutByToken Kick user offline (private) | 根据Token踢人下线(私有) -func (m *Manager) kickoutByToken(tokenValue string) error { - return m.removeTokenChain(tokenValue, nil, listener.EventKickout) +func (m *Manager) kickoutByToken(ctx context.Context, tokenValue string) error { + return m.removeTokenChain(ctx, tokenValue, nil, listener.EventKickout) } // KickoutByToken Kick user offline (public method) | 根据Token踢人下线(公开方法) -func (m *Manager) KickoutByToken(tokenValue string) error { - return m.kickoutByToken(tokenValue) +func (m *Manager) KickoutByToken(ctx context.Context, tokenValue string) error { + return m.kickoutByToken(ctx, tokenValue) } // replace Replace user offline by login ID and device (private) | 根据账号和设备顶人下线(私有) -func (m *Manager) replace(loginID string, device string) error { +func (m *Manager) replace(ctx context.Context, loginID string, device string) error { accountKey := m.getAccountKey(loginID, device) - tokenValue, err := m.storage.Get(accountKey) + tokenValue, err := m.storage.Get(ctx, accountKey) if err != nil || tokenValue == nil { return nil } if tokenValueStr, ok := assertString(tokenValue); ok { - return m.removeTokenChain(tokenValueStr, nil, listener.EventReplace) + return m.removeTokenChain(ctx, tokenValueStr, nil, listener.EventReplace) } return nil } // Replace user offline by login ID and device (public method) | 根据账号和设备顶人下线(公开方法) -func (m *Manager) Replace(loginID string, device ...string) error { - return m.replace(loginID, getDevice(device)) +func (m *Manager) Replace(ctx context.Context, loginID string, device ...string) error { + return m.replace(ctx, loginID, getDevice(device)) } // replaceByToken Replace user offline by token (private) | 根据Token顶人下线(私有) -func (m *Manager) replaceByToken(tokenValue string) error { - return m.removeTokenChain(tokenValue, nil, listener.EventReplace) +func (m *Manager) replaceByToken(ctx context.Context, tokenValue string) error { + return m.removeTokenChain(ctx, tokenValue, nil, listener.EventReplace) } // ReplaceByToken Replace user offline by token (public method) | 根据Token顶人下线(公开方法) -func (m *Manager) ReplaceByToken(tokenValue string) error { - return m.replaceByToken(tokenValue) +func (m *Manager) ReplaceByToken(ctx context.Context, tokenValue string) error { + return m.replaceByToken(ctx, tokenValue) } // ============ Token Validation | Token验证 ============ // IsLogin Checks if the user is logged in | 检查用户是否登录 -func (m *Manager) IsLogin(tokenValue string) bool { - info, err := m.getTokenInfo(tokenValue) +func (m *Manager) IsLogin(ctx context.Context, tokenValue string) bool { + info, err := m.getTokenInfo(ctx, tokenValue) if err != nil { return false } @@ -379,7 +380,7 @@ func (m *Manager) IsLogin(tokenValue string) bool { now := time.Now().Unix() if now-info.ActiveTime > m.config.ActiveTimeout { // Force logout and clean up token data | 强制登出并清理Token相关数据 - _ = m.removeTokenChain(tokenValue, info, listener.EventKickout) + _ = m.removeTokenChain(ctx, tokenValue, info, listener.EventKickout) return false } } @@ -390,12 +391,12 @@ func (m *Manager) IsLogin(tokenValue string) bool { tokenKey := m.getTokenKey(tokenValue) // Check if token renewal is needed | 检查是否需要进行续期 - if ttl, err := m.storage.TTL(tokenKey); err == nil { + if ttl, err := m.storage.TTL(ctx, tokenKey); err == nil { ttlSeconds := int64(ttl.Seconds()) // Perform renewal if TTL is below MaxRefresh threshold and RenewInterval allows | 如果TTL小于MaxRefresh阈值且RenewInterval允许,则进行续期 - if ttlSeconds > 0 && (m.config.MaxRefresh <= 0 || ttlSeconds <= m.config.MaxRefresh) && (m.config.RenewInterval <= 0 || !m.storage.Exists(m.getRenewKey(tokenValue))) { - renewFunc := func() { m.renewToken(tokenValue, info) } + if ttlSeconds > 0 && (m.config.MaxRefresh <= 0 || ttlSeconds <= m.config.MaxRefresh) && (m.config.RenewInterval <= 0 || !m.storage.Exists(ctx, m.getRenewKey(tokenValue))) { + renewFunc := func() { m.renewToken(ctx, tokenValue, info) } // Submit renewal task to the pool if configured, otherwise use a goroutine | 如果配置了续期池,则提交续期任务到池中,否则使用协程 if m.pool != nil { @@ -411,8 +412,8 @@ func (m *Manager) IsLogin(tokenValue string) bool { } // CheckLogin Checks login status (throws serror if not logged in) | 检查登录(未登录抛出错误) -func (m *Manager) CheckLogin(tokenValue string) error { - if !m.IsLogin(tokenValue) { +func (m *Manager) CheckLogin(ctx context.Context, tokenValue string) error { + if !m.IsLogin(ctx, tokenValue) { return core.ErrNotLogin } @@ -420,9 +421,9 @@ func (m *Manager) CheckLogin(tokenValue string) error { } // CheckLoginWithState Checks if user is logged in | 检查是否登录(返回详细状态err) -func (m *Manager) CheckLoginWithState(tokenValue string) (bool, error) { +func (m *Manager) CheckLoginWithState(ctx context.Context, tokenValue string) (bool, error) { // Try to get token info with state check | 尝试获取Token信息(包含状态检查) - info, err := m.getTokenInfo(tokenValue, true) + info, err := m.getTokenInfo(ctx, tokenValue, true) if err != nil { return false, err } @@ -431,7 +432,7 @@ func (m *Manager) CheckLoginWithState(tokenValue string) (bool, error) { now := time.Now().Unix() if now-info.ActiveTime > m.config.ActiveTimeout { // Force logout and clean up token data | 强制登出并清理Token相关数据 - _ = m.removeTokenChain(tokenValue, info, listener.EventKickout) + _ = m.removeTokenChain(ctx, tokenValue, info, listener.EventKickout) return false, core.ErrTokenKickout } } @@ -442,12 +443,12 @@ func (m *Manager) CheckLoginWithState(tokenValue string) (bool, error) { tokenKey := m.getTokenKey(tokenValue) // Check if token renewal is needed | 检查是否需要进行续期 - if ttl, err := m.storage.TTL(tokenKey); err == nil { + if ttl, err := m.storage.TTL(ctx, tokenKey); err == nil { ttlSeconds := int64(ttl.Seconds()) // Perform renewal if TTL is below MaxRefresh threshold and RenewInterval allows | 如果TTL小于MaxRefresh阈值且RenewInterval允许,则进行续期 - if ttlSeconds > 0 && (m.config.MaxRefresh <= 0 || ttlSeconds <= m.config.MaxRefresh) && (m.config.RenewInterval <= 0 || !m.storage.Exists(m.getRenewKey(tokenValue))) { - renewFunc := func() { m.renewToken(tokenValue, info) } + if ttlSeconds > 0 && (m.config.MaxRefresh <= 0 || ttlSeconds <= m.config.MaxRefresh) && (m.config.RenewInterval <= 0 || !m.storage.Exists(ctx, m.getRenewKey(tokenValue))) { + renewFunc := func() { m.renewToken(ctx, tokenValue, info) } // Submit renewal task to the pool if configured, otherwise use a goroutine | 如果配置了续期池,则提交续期任务到池中,否则使用协程 if m.pool != nil { @@ -463,21 +464,21 @@ func (m *Manager) CheckLoginWithState(tokenValue string) (bool, error) { } // GetLoginID Gets login ID from token | 根据Token获取登录ID -func (m *Manager) GetLoginID(tokenValue string) (string, error) { +func (m *Manager) GetLoginID(ctx context.Context, tokenValue string) (string, error) { // Check if the user is logged in | 检查用户是否已登录 - isLogin := m.IsLogin(tokenValue) + isLogin := m.IsLogin(ctx, tokenValue) if !isLogin { return "", core.ErrNotLogin } // Retrieve the login ID without checking token validity | 获取登录ID,不检查Token有效性 - return m.GetLoginIDNotCheck(tokenValue) + return m.GetLoginIDNotCheck(ctx, tokenValue) } // GetLoginIDNotCheck Gets login ID without checking token validity | 获取登录ID(不检查Token是否有效) -func (m *Manager) GetLoginIDNotCheck(tokenValue string) (string, error) { +func (m *Manager) GetLoginIDNotCheck(ctx context.Context, tokenValue string) (string, error) { // Get token info | 获取Token信息 - info, err := m.getTokenInfo(tokenValue) + info, err := m.getTokenInfo(ctx, tokenValue) if err != nil { return "", err } @@ -486,12 +487,12 @@ func (m *Manager) GetLoginIDNotCheck(tokenValue string) (string, error) { } // GetTokenValue Gets token by login ID and device | 根据登录ID以及设备获取Token -func (m *Manager) GetTokenValue(loginID string, device ...string) (string, error) { +func (m *Manager) GetTokenValue(ctx context.Context, loginID string, device ...string) (string, error) { // Construct the account storage key | 构造账号存储键 accountKey := m.getAccountKey(loginID, getDevice(device)) // Retrieve the token value from storage | 从存储中获取Token值 - tokenValue, err := m.storage.Get(accountKey) + tokenValue, err := m.storage.Get(ctx, accountKey) if err != nil || tokenValue == nil { return "", core.ErrTokenNotFound } @@ -506,20 +507,20 @@ func (m *Manager) GetTokenValue(loginID string, device ...string) (string, error } // GetTokenInfoByToken Gets token information | 获取Token信息 -func (m *Manager) GetTokenInfoByToken(tokenValue string) (*TokenInfo, error) { - return m.getTokenInfo(tokenValue) +func (m *Manager) GetTokenInfoByToken(ctx context.Context, tokenValue string) (*TokenInfo, error) { + return m.getTokenInfo(ctx, tokenValue) } // ============ Account Disable | 账号封禁 ============ // Disable Disables an account | 封禁账号 -func (m *Manager) Disable(loginID string, duration time.Duration, reason ...string) error { +func (m *Manager) Disable(ctx context.Context, loginID string, duration time.Duration, reason ...string) error { // Check if the account has active sessions and force logout | 检查账号是否有活跃会话并强制下线 - tokens, err := m.GetTokenValueListByLoginID(loginID) + tokens, err := m.GetTokenValueListByLoginID(ctx, loginID) if err == nil && len(tokens) > 0 { for _, tokenValue := range tokens { // Force kick out each active token | 强制踢出所有活跃的Token - _ = m.removeTokenChain(tokenValue, nil, listener.EventKickout, true) + _ = m.removeTokenChain(ctx, tokenValue, nil, listener.EventKickout, true) } } @@ -542,7 +543,7 @@ func (m *Manager) Disable(loginID string, duration time.Duration, reason ...stri } // Set disable flag with specified duration | 设置封禁标记并指定封禁时长 - err = m.storage.Set(disableKeyKey, encodeData, duration) + err = m.storage.Set(ctx, disableKeyKey, encodeData, duration) if err != nil { return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } @@ -551,12 +552,12 @@ func (m *Manager) Disable(loginID string, duration time.Duration, reason ...stri } // Untie Re-enables a disabled account | 解封账号 -func (m *Manager) Untie(loginID string) error { +func (m *Manager) Untie(ctx context.Context, loginID string) error { // Retrieve the disable flag storage key | 获取封禁标记的存储键 disableKeyKey := m.getDisableKey(loginID) // Remove the disable flag from storage | 删除封禁标记 - err := m.storage.Delete(disableKeyKey) + err := m.storage.Delete(ctx, disableKeyKey) if err != nil { return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } @@ -565,21 +566,21 @@ func (m *Manager) Untie(loginID string) error { } // IsDisable Checks if account is disabled | 检查账号是否被封禁 -func (m *Manager) IsDisable(loginID string) bool { +func (m *Manager) IsDisable(ctx context.Context, loginID string) bool { // Retrieve the disable flag storage key | 获取封禁标记的存储键 disableKeyKey := m.getDisableKey(loginID) // Check if the disable flag exists in storage | 检查封禁标记是否存在 - return m.storage.Exists(disableKeyKey) + return m.storage.Exists(ctx, disableKeyKey) } // CheckDisableWithInfo get disable info | 获取封禁信息 -func (m *Manager) CheckDisableWithInfo(loginID string) (*DisableInfo, error) { +func (m *Manager) CheckDisableWithInfo(ctx context.Context, loginID string) (*DisableInfo, error) { // Retrieve the disable flag storage key | 获取封禁标记的存储键 disableKeyKey := m.getDisableKey(loginID) // Get disable data from storage | 从存储中获取封禁信息 - data, err := m.storage.Get(disableKeyKey) + data, err := m.storage.Get(ctx, disableKeyKey) if err != nil { return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } @@ -603,12 +604,12 @@ func (m *Manager) CheckDisableWithInfo(loginID string) (*DisableInfo, error) { } // GetDisableTTL Gets remaining disable time in seconds | 获取账号剩余封禁时间(秒) -func (m *Manager) GetDisableTTL(loginID string) (int64, error) { +func (m *Manager) GetDisableTTL(ctx context.Context, loginID string) (int64, error) { // Retrieve the disable flag storage key | 获取封禁标记的存储键 disableKeyKey := m.getDisableKey(loginID) // Retrieve the TTL (Time to Live) for the disable flag | 获取封禁标记的TTL(剩余时间) - ttl, err := m.storage.TTL(disableKeyKey) + ttl, err := m.storage.TTL(ctx, disableKeyKey) if err != nil { return -2, err } @@ -620,13 +621,13 @@ func (m *Manager) GetDisableTTL(loginID string) (int64, error) { // ============ Session Management | Session管理 ============ // GetSession gets session by login ID | 获取 Session -func (m *Manager) GetSession(loginID string) (*session.Session, error) { +func (m *Manager) GetSession(ctx context.Context, loginID string) (*session.Session, error) { if loginID == "" { return nil, core.ErrSessionIDEmpty } key := m.config.KeyPrefix + m.config.AuthType + session.SessionKeyPrefix + loginID - data, err := m.GetStorage().Get(key) + data, err := m.GetStorage().Get(ctx, key) if err != nil { return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } @@ -654,60 +655,60 @@ func (m *Manager) GetSession(loginID string) (*session.Session, error) { } // GetSessionByToken Gets session by token | 根据Token获取Session -func (m *Manager) GetSessionByToken(tokenValue string) (*session.Session, error) { - loginID, err := m.GetLoginIDNotCheck(tokenValue) +func (m *Manager) GetSessionByToken(ctx context.Context, tokenValue string) (*session.Session, error) { + loginID, err := m.GetLoginIDNotCheck(ctx, tokenValue) if err != nil { return nil, err } - return m.GetSession(loginID) + return m.GetSession(ctx, loginID) } // DeleteSession Deletes session | 删除Session -func (m *Manager) DeleteSession(loginID string) error { - sess, err := m.GetSession(loginID) +func (m *Manager) DeleteSession(ctx context.Context, loginID string) error { + sess, err := m.GetSession(ctx, loginID) if err != nil { return err } - return sess.Destroy() + return sess.Destroy(ctx) } // DeleteSessionByToken Deletes session by token | 根据Token删除Session -func (m *Manager) DeleteSessionByToken(tokenValue string) error { - sess, err := m.GetSessionByToken(tokenValue) +func (m *Manager) DeleteSessionByToken(ctx context.Context, tokenValue string) error { + sess, err := m.GetSessionByToken(ctx, tokenValue) if err != nil { return err } - return sess.Destroy() + return sess.Destroy(ctx) } // HasSession Checks if session exists | 检查Session是否存在 -func (m *Manager) HasSession(loginID string) bool { +func (m *Manager) HasSession(ctx context.Context, loginID string) bool { if loginID == "" { return false } key := m.config.KeyPrefix + m.config.AuthType + session.SessionKeyPrefix + loginID - return m.GetStorage().Exists(key) + return m.GetStorage().Exists(ctx, key) } // RenewSession Renews session TTL | 续期Session -func (m *Manager) RenewSession(loginID string, ttl time.Duration) error { - sess, err := m.GetSession(loginID) +func (m *Manager) RenewSession(ctx context.Context, loginID string, ttl time.Duration) error { + sess, err := m.GetSession(ctx, loginID) if err != nil { return err } - return sess.Renew(ttl) + return sess.Renew(ctx, ttl) } // ============ Permission Validation | 权限验证 ============ // SetPermissions Sets permissions for user | 设置权限 -func (m *Manager) SetPermissions(loginID string, permissions []string) error { - sess, err := m.GetSession(loginID) +func (m *Manager) SetPermissions(ctx context.Context, loginID string, permissions []string) error { + sess, err := m.GetSession(ctx, loginID) if err != nil { return err } @@ -718,22 +719,22 @@ func (m *Manager) SetPermissions(loginID string, permissions []string) error { permissions = removeDuplicateStrings(permissions) } - return sess.Set(SessionKeyPermissions, permissions, m.getExpiration()) + return sess.Set(ctx, SessionKeyPermissions, permissions, m.getExpiration()) } // SetPermissionsByToken Sets permissions by token | 根据Token设置权限 -func (m *Manager) SetPermissionsByToken(tokenValue string, permissions []string) error { - loginID, err := m.GetLoginIDNotCheck(tokenValue) +func (m *Manager) SetPermissionsByToken(ctx context.Context, tokenValue string, permissions []string) error { + loginID, err := m.GetLoginIDNotCheck(ctx, tokenValue) if err != nil { return err } - return m.SetPermissions(loginID, permissions) + return m.SetPermissions(ctx, loginID, permissions) } // RemovePermissions removes specified permissions for user | 删除用户指定权限 -func (m *Manager) RemovePermissions(loginID string, permissions []string) error { - sess, err := m.GetSession(loginID) +func (m *Manager) RemovePermissions(ctx context.Context, loginID string, permissions []string) error { + sess, err := m.GetSession(ctx, loginID) if err != nil { return err } @@ -762,21 +763,21 @@ func (m *Manager) RemovePermissions(loginID string, permissions []string) error } } - return sess.Set(SessionKeyPermissions, newPerms, m.getExpiration()) + return sess.Set(ctx, SessionKeyPermissions, newPerms, m.getExpiration()) } // RemovePermissionsByToken removes specified permissions by token | 根据Token删除指定权限 -func (m *Manager) RemovePermissionsByToken(tokenValue string, permissions []string) error { - loginID, err := m.GetLoginIDNotCheck(tokenValue) +func (m *Manager) RemovePermissionsByToken(ctx context.Context, tokenValue string, permissions []string) error { + loginID, err := m.GetLoginIDNotCheck(ctx, tokenValue) if err != nil { return err } - return m.RemovePermissions(loginID, permissions) + return m.RemovePermissions(ctx, loginID, permissions) } // GetPermissions Gets permission list | 获取权限列表 -func (m *Manager) GetPermissions(loginID string) ([]string, error) { +func (m *Manager) GetPermissions(ctx context.Context, loginID string) ([]string, error) { if m.CustomPermissionListFunc != nil { perms, err := m.CustomPermissionListFunc(loginID) if err != nil { @@ -785,7 +786,7 @@ func (m *Manager) GetPermissions(loginID string) ([]string, error) { return perms, nil } - sess, err := m.GetSession(loginID) + sess, err := m.GetSession(ctx, loginID) if err != nil { return nil, err } @@ -799,18 +800,18 @@ func (m *Manager) GetPermissions(loginID string) ([]string, error) { } // GetPermissionsByToken Gets permission list by token | 根据Token获取权限列表 -func (m *Manager) GetPermissionsByToken(tokenValue string) ([]string, error) { - loginID, err := m.GetLoginIDNotCheck(tokenValue) +func (m *Manager) GetPermissionsByToken(ctx context.Context, tokenValue string) ([]string, error) { + loginID, err := m.GetLoginIDNotCheck(ctx, tokenValue) if err != nil { return nil, err } - return m.GetPermissions(loginID) + return m.GetPermissions(ctx, loginID) } // HasPermission checks whether the specified loginID has the given permission | 检查指定账号是否拥有指定权限 -func (m *Manager) HasPermission(loginID string, permission string) bool { - perms, err := m.GetPermissions(loginID) +func (m *Manager) HasPermission(ctx context.Context, loginID string, permission string) bool { + perms, err := m.GetPermissions(ctx, loginID) if err != nil { return false } @@ -825,18 +826,18 @@ func (m *Manager) HasPermission(loginID string, permission string) bool { } // HasPermissionByToken checks whether the current token subject has the specified permission | 根据当前 Token 判断是否拥有指定权限 -func (m *Manager) HasPermissionByToken(tokenValue string, permission string) bool { - loginID, err := m.GetLoginIDNotCheck(tokenValue) +func (m *Manager) HasPermissionByToken(ctx context.Context, tokenValue string, permission string) bool { + loginID, err := m.GetLoginIDNotCheck(ctx, tokenValue) if err != nil { return false } - return m.HasPermission(loginID, permission) + return m.HasPermission(ctx, loginID, permission) } // HasPermissionsAnd Checks whether the user has all permissions (AND) | 是否拥有所有权限(AND) -func (m *Manager) HasPermissionsAnd(loginID string, permissions []string) bool { - userPerms, err := m.GetPermissions(loginID) +func (m *Manager) HasPermissionsAnd(ctx context.Context, loginID string, permissions []string) bool { + userPerms, err := m.GetPermissions(ctx, loginID) if err != nil || len(userPerms) == 0 { return false } @@ -852,19 +853,19 @@ func (m *Manager) HasPermissionsAnd(loginID string, permissions []string) bool { } // HasPermissionsAndByToken checks whether the current token subject has all specified permissions (AND) | 根据当前 Token 判断是否拥有所有指定权限(AND) -func (m *Manager) HasPermissionsAndByToken(tokenValue string, permissions []string) bool { - loginID, err := m.GetLoginIDNotCheck(tokenValue) +func (m *Manager) HasPermissionsAndByToken(ctx context.Context, tokenValue string, permissions []string) bool { + loginID, err := m.GetLoginIDNotCheck(ctx, tokenValue) if err != nil { return false } - return m.HasPermissionsAnd(loginID, permissions) + return m.HasPermissionsAnd(ctx, loginID, permissions) } // HasPermissionsOr Checks whether the user has any permission (OR) | 是否拥有任一权限(OR) -func (m *Manager) HasPermissionsOr(loginID string, permissions []string) bool { +func (m *Manager) HasPermissionsOr(ctx context.Context, loginID string, permissions []string) bool { // Get all permissions once | 一次性获取用户权限 - userPerms, err := m.GetPermissions(loginID) + userPerms, err := m.GetPermissions(ctx, loginID) if err != nil || len(userPerms) == 0 { return false } @@ -879,13 +880,13 @@ func (m *Manager) HasPermissionsOr(loginID string, permissions []string) bool { } // HasPermissionsOrByToken checks whether the current token subject has any of the specified permissions (OR) | 根据当前 Token 判断是否拥有任一指定权限(OR) -func (m *Manager) HasPermissionsOrByToken(tokenValue string, permissions []string) bool { - loginID, err := m.GetLoginIDNotCheck(tokenValue) +func (m *Manager) HasPermissionsOrByToken(ctx context.Context, tokenValue string, permissions []string) bool { + loginID, err := m.GetLoginIDNotCheck(ctx, tokenValue) if err != nil { return false } - return m.HasPermissionsOr(loginID, permissions) + return m.HasPermissionsOr(ctx, loginID, permissions) } // matchPermission Matches permission with wildcards support | 权限匹配(支持通配符) @@ -933,8 +934,8 @@ func (m *Manager) hasPermissionInList(perms []string, permission string) bool { // ============ Role Validation | 角色验证 ============ // SetRoles Sets roles for user | 设置角色 -func (m *Manager) SetRoles(loginID string, roles []string) error { - sess, err := m.GetSession(loginID) +func (m *Manager) SetRoles(ctx context.Context, loginID string, roles []string) error { + sess, err := m.GetSession(ctx, loginID) if err != nil { return err } @@ -945,22 +946,22 @@ func (m *Manager) SetRoles(loginID string, roles []string) error { roles = removeDuplicateStrings(roles) } - return sess.Set(SessionKeyRoles, roles, m.getExpiration()) + return sess.Set(ctx, SessionKeyRoles, roles, m.getExpiration()) } // SetRolesByToken Sets roles by token | 根据Token设置角色 -func (m *Manager) SetRolesByToken(tokenValue string, roles []string) error { - loginID, err := m.GetLoginIDNotCheck(tokenValue) +func (m *Manager) SetRolesByToken(ctx context.Context, tokenValue string, roles []string) error { + loginID, err := m.GetLoginIDNotCheck(ctx, tokenValue) if err != nil { return err } - return m.SetRoles(loginID, roles) + return m.SetRoles(ctx, loginID, roles) } // RemoveRoles removes specified roles for user | 删除用户指定角色 -func (m *Manager) RemoveRoles(loginID string, roles []string) error { - sess, err := m.GetSession(loginID) +func (m *Manager) RemoveRoles(ctx context.Context, loginID string, roles []string) error { + sess, err := m.GetSession(ctx, loginID) if err != nil { return err } @@ -991,21 +992,21 @@ func (m *Manager) RemoveRoles(loginID string, roles []string) error { } // Save updated roles | 保存更新后的角色列表 - return sess.Set(SessionKeyRoles, newRoles, m.getExpiration()) + return sess.Set(ctx, SessionKeyRoles, newRoles, m.getExpiration()) } // RemoveRolesByToken removes specified roles by token | 根据Token删除指定角色 -func (m *Manager) RemoveRolesByToken(tokenValue string, roles []string) error { - loginID, err := m.GetLoginIDNotCheck(tokenValue) +func (m *Manager) RemoveRolesByToken(ctx context.Context, tokenValue string, roles []string) error { + loginID, err := m.GetLoginIDNotCheck(ctx, tokenValue) if err != nil { return err } - return m.RemoveRoles(loginID, roles) + return m.RemoveRoles(ctx, loginID, roles) } // GetRoles gets role list for the specified loginID | 获取指定账号的角色列表 -func (m *Manager) GetRoles(loginID string) ([]string, error) { +func (m *Manager) GetRoles(ctx context.Context, loginID string) ([]string, error) { if m.CustomRoleListFunc != nil { perms, err := m.CustomRoleListFunc(loginID) if err != nil { @@ -1014,7 +1015,7 @@ func (m *Manager) GetRoles(loginID string) ([]string, error) { return perms, nil } - sess, err := m.GetSession(loginID) + sess, err := m.GetSession(ctx, loginID) if err != nil { return nil, err } @@ -1028,18 +1029,18 @@ func (m *Manager) GetRoles(loginID string) ([]string, error) { } // GetRolesByToken Gets role list by token | 根据Token获取角色列表 -func (m *Manager) GetRolesByToken(tokenValue string) ([]string, error) { - loginID, err := m.GetLoginIDNotCheck(tokenValue) +func (m *Manager) GetRolesByToken(ctx context.Context, tokenValue string) ([]string, error) { + loginID, err := m.GetLoginIDNotCheck(ctx, tokenValue) if err != nil { return nil, err } - return m.GetRoles(loginID) + return m.GetRoles(ctx, loginID) } // HasRole checks whether the specified loginID has the given role | 检查指定账号是否拥有指定角色 -func (m *Manager) HasRole(loginID string, role string) bool { - roles, err := m.GetRoles(loginID) +func (m *Manager) HasRole(ctx context.Context, loginID string, role string) bool { + roles, err := m.GetRoles(ctx, loginID) if err != nil { return false } @@ -1053,18 +1054,18 @@ func (m *Manager) HasRole(loginID string, role string) bool { } // HasRoleByToken checks whether the current token subject has the specified role | 根据当前 Token 判断是否拥有指定角色 -func (m *Manager) HasRoleByToken(tokenValue string, role string) bool { - loginID, err := m.GetLoginIDNotCheck(tokenValue) +func (m *Manager) HasRoleByToken(ctx context.Context, tokenValue string, role string) bool { + loginID, err := m.GetLoginIDNotCheck(ctx, tokenValue) if err != nil { return false } - return m.HasRole(loginID, role) + return m.HasRole(ctx, loginID, role) } // HasRolesAnd Checks whether the user has all roles (AND) | 是否拥有所有角色(AND) -func (m *Manager) HasRolesAnd(loginID string, roles []string) bool { - userRoles, err := m.GetRoles(loginID) +func (m *Manager) HasRolesAnd(ctx context.Context, loginID string, roles []string) bool { + userRoles, err := m.GetRoles(ctx, loginID) if err != nil || len(userRoles) == 0 { return false } @@ -1078,18 +1079,18 @@ func (m *Manager) HasRolesAnd(loginID string, roles []string) bool { } // HasRolesAndByToken checks whether the current token subject has all specified roles (AND) | 根据当前 Token 判断是否拥有所有指定角色(AND) -func (m *Manager) HasRolesAndByToken(tokenValue string, roles []string) bool { - loginID, err := m.GetLoginIDNotCheck(tokenValue) +func (m *Manager) HasRolesAndByToken(ctx context.Context, tokenValue string, roles []string) bool { + loginID, err := m.GetLoginIDNotCheck(ctx, tokenValue) if err != nil { return false } - return m.HasRolesAnd(loginID, roles) + return m.HasRolesAnd(ctx, loginID, roles) } // HasRolesOr Checks whether the user has any role (OR) | 是否拥有任一角色(OR) -func (m *Manager) HasRolesOr(loginID string, roles []string) bool { - userRoles, err := m.GetRoles(loginID) +func (m *Manager) HasRolesOr(ctx context.Context, loginID string, roles []string) bool { + userRoles, err := m.GetRoles(ctx, loginID) if err != nil || len(userRoles) == 0 { return false } @@ -1103,13 +1104,13 @@ func (m *Manager) HasRolesOr(loginID string, roles []string) bool { } // HasRolesOrByToken checks whether the current token subject has any of the specified roles (OR) | 根据当前 Token 判断是否拥有任一指定角色(OR) -func (m *Manager) HasRolesOrByToken(tokenValue string, roles []string) bool { - loginID, err := m.GetLoginIDNotCheck(tokenValue) +func (m *Manager) HasRolesOrByToken(ctx context.Context, tokenValue string, roles []string) bool { + loginID, err := m.GetLoginIDNotCheck(ctx, tokenValue) if err != nil { return false } - return m.HasRolesOr(loginID, roles) + return m.HasRolesOr(ctx, loginID, roles) } // hasPermissionInList checks whether permission exists in permission list | 判断权限是否存在于权限列表中 @@ -1140,12 +1141,12 @@ func (m *Manager) GetTokenTag(ctx context.Context) (string, error) { // ============ Session Query | 会话查询 ============ // GetTokenValueListByLoginID Gets all tokens for specified account | 获取指定账号的所有Token -func (m *Manager) GetTokenValueListByLoginID(loginID string) ([]string, error) { +func (m *Manager) GetTokenValueListByLoginID(ctx context.Context, loginID string) ([]string, error) { // Construct the pattern for account key | 构造账号存储键的匹配模式 pattern := m.config.KeyPrefix + m.config.AuthType + AccountKeyPrefix + loginID + TokenValueListLastKey // Retrieve keys matching the pattern from storage | 从存储中获取匹配的键 - keys, err := m.storage.Keys(pattern) + keys, err := m.storage.Keys(ctx, pattern) if err != nil { return nil, err // Return error if key retrieval fails | 如果获取键失败,则返回错误 } @@ -1155,7 +1156,7 @@ func (m *Manager) GetTokenValueListByLoginID(loginID string) ([]string, error) { // Loop through the keys and retrieve the associated token values | 遍历键并获取关联的Token值 for _, key := range keys { - value, err := m.storage.Get(key) + value, err := m.storage.Get(ctx, key) if err == nil && value != nil { // Assert value as string and add to tokens slice | 将值断言为字符串并添加到Token切片 if tokenStr, ok := assertString(value); ok { @@ -1169,9 +1170,9 @@ func (m *Manager) GetTokenValueListByLoginID(loginID string) ([]string, error) { } // GetSessionCountByLoginID Gets session count for specified account | 获取指定账号的Session数量 -func (m *Manager) GetSessionCountByLoginID(loginID string) (int, error) { +func (m *Manager) GetSessionCountByLoginID(ctx context.Context, loginID string) (int, error) { // Get the list of token values for the specified login ID | 获取指定登录ID的Token值列表 - tokens, err := m.GetTokenValueListByLoginID(loginID) + tokens, err := m.GetTokenValueListByLoginID(ctx, loginID) if err != nil { return 0, err // Return error if token list retrieval fails | 如果获取Token列表失败,则返回错误 } @@ -1260,59 +1261,59 @@ func (m *Manager) HasEventListeners(event listener.Event) bool { // ============ Security Features | 安全特性 ============ // SecurityGenerateNonce Generates a one-time nonce | 生成一次性随机数 -func (m *Manager) SecurityGenerateNonce() (string, error) { - return m.nonceManager.Generate() +func (m *Manager) SecurityGenerateNonce(ctx context.Context) (string, error) { + return m.nonceManager.Generate(ctx) } // SecurityVerifyNonce Verifies a nonce | 验证随机数 -func (m *Manager) SecurityVerifyNonce(nonce string) bool { - return m.nonceManager.Verify(nonce) +func (m *Manager) SecurityVerifyNonce(ctx context.Context, nonce string) bool { + return m.nonceManager.Verify(ctx, nonce) } // SecurityVerifyAndConsumeNonce Verifies and consumes nonce, returns error if invalid | 验证并消费nonce,无效时返回错误 -func (m *Manager) SecurityVerifyAndConsumeNonce(nonce string) error { - return m.nonceManager.VerifyAndConsume(nonce) +func (m *Manager) SecurityVerifyAndConsumeNonce(ctx context.Context, nonce string) error { + return m.nonceManager.VerifyAndConsume(ctx, nonce) } // SecurityIsValidNonce Checks if nonce is valid without consuming it | 检查nonce是否有效(不消费) -func (m *Manager) SecurityIsValidNonce(nonce string) bool { - return m.nonceManager.IsValid(nonce) +func (m *Manager) SecurityIsValidNonce(ctx context.Context, nonce string) bool { + return m.nonceManager.IsValid(ctx, nonce) } // SecurityGenerateTokenPair Create access + refresh token | 生成访问令牌和刷新令牌 -func (m *Manager) SecurityGenerateTokenPair(loginID string, device ...string) (*security.RefreshTokenInfo, error) { +func (m *Manager) SecurityGenerateTokenPair(ctx context.Context, loginID string, device ...string) (*security.RefreshTokenInfo, error) { deviceType := getDevice(device) - return m.refreshManager.GenerateTokenPair(loginID, deviceType) + return m.refreshManager.GenerateTokenPair(ctx, loginID, deviceType) } // SecurityVerifyAccessToken Check token exists | 验证访问令牌是否存在 -func (m *Manager) SecurityVerifyAccessToken(accessToken string) bool { - return m.refreshManager.VerifyAccessToken(accessToken) +func (m *Manager) SecurityVerifyAccessToken(ctx context.Context, accessToken string) bool { + return m.refreshManager.VerifyAccessToken(ctx, accessToken) } // SecurityVerifyAccessTokenAndGetInfo Verify and get info | 验证访问令牌并获取信息 -func (m *Manager) SecurityVerifyAccessTokenAndGetInfo(accessToken string) (*security.AccessTokenInfo, bool) { - return m.refreshManager.VerifyAccessTokenAndGetInfo(accessToken) +func (m *Manager) SecurityVerifyAccessTokenAndGetInfo(ctx context.Context, accessToken string) (*security.AccessTokenInfo, bool) { + return m.refreshManager.VerifyAccessTokenAndGetInfo(ctx, accessToken) } // SecurityRefreshAccessToken Refresh access token by refresh token | 使用刷新令牌刷新访问令牌 -func (m *Manager) SecurityRefreshAccessToken(refreshToken string) (*security.RefreshTokenInfo, error) { - return m.refreshManager.RefreshAccessToken(refreshToken) +func (m *Manager) SecurityRefreshAccessToken(ctx context.Context, refreshToken string) (*security.RefreshTokenInfo, error) { + return m.refreshManager.RefreshAccessToken(ctx, refreshToken) } // SecurityGetRefreshTokenInfo Get refresh token info by token | 根据刷新令牌获取刷新令牌信息 -func (m *Manager) SecurityGetRefreshTokenInfo(refreshToken string) (*security.RefreshTokenInfo, error) { - return m.refreshManager.GetRefreshTokenInfo(refreshToken) +func (m *Manager) SecurityGetRefreshTokenInfo(ctx context.Context, refreshToken string) (*security.RefreshTokenInfo, error) { + return m.refreshManager.GetRefreshTokenInfo(ctx, refreshToken) } // SecurityRevokeRefreshToken Remove refresh token | 撤销刷新令牌 -func (m *Manager) SecurityRevokeRefreshToken(refreshToken string) error { - return m.refreshManager.RevokeRefreshToken(refreshToken) +func (m *Manager) SecurityRevokeRefreshToken(ctx context.Context, refreshToken string) error { + return m.refreshManager.RevokeRefreshToken(ctx, refreshToken) } // SecurityIsRefreshTokenValid Check refresh token valid | 判断刷新令牌是否有效 -func (m *Manager) SecurityIsRefreshTokenValid(refreshToken string) bool { - return m.refreshManager.IsValid(refreshToken) +func (m *Manager) SecurityIsRefreshTokenValid(ctx context.Context, refreshToken string) bool { + return m.refreshManager.IsValid(ctx, refreshToken) } // ============ OAuth2 Features | Oauth2特性 ============ @@ -1333,33 +1334,33 @@ func (m *Manager) OAuth2GetClient(clientID string) (*oauth2.Client, error) { } // OAuth2GenerateAuthorizationCode Generates authorization code | 生成授权码 -func (m *Manager) OAuth2GenerateAuthorizationCode(clientID, userID, redirectURI string, scopes []string) (*oauth2.AuthorizationCode, error) { - return m.oauth2Server.GenerateAuthorizationCode(clientID, userID, redirectURI, scopes) +func (m *Manager) OAuth2GenerateAuthorizationCode(ctx context.Context, clientID, userID, redirectURI string, scopes []string) (*oauth2.AuthorizationCode, error) { + return m.oauth2Server.GenerateAuthorizationCode(ctx, clientID, userID, redirectURI, scopes) } // OAuth2ExchangeCodeForToken Exchanges authorization code for access token | 用授权码换取访问令牌 -func (m *Manager) OAuth2ExchangeCodeForToken(code, clientID, clientSecret, redirectURI string) (*oauth2.AccessToken, error) { - return m.oauth2Server.ExchangeCodeForToken(code, clientID, clientSecret, redirectURI) +func (m *Manager) OAuth2ExchangeCodeForToken(ctx context.Context, code, clientID, clientSecret, redirectURI string) (*oauth2.AccessToken, error) { + return m.oauth2Server.ExchangeCodeForToken(ctx, code, clientID, clientSecret, redirectURI) } // OAuth2ValidateAccessToken Validates access token | 验证访问令牌 -func (m *Manager) OAuth2ValidateAccessToken(accessToken string) bool { - return m.oauth2Server.ValidateAccessToken(accessToken) +func (m *Manager) OAuth2ValidateAccessToken(ctx context.Context, accessToken string) bool { + return m.oauth2Server.ValidateAccessToken(ctx, accessToken) } // OAuth2ValidateAccessTokenAndGetInfo Validates access token and get info | 验证访问令牌并获取信息 -func (m *Manager) OAuth2ValidateAccessTokenAndGetInfo(accessToken string) (*oauth2.AccessToken, error) { - return m.oauth2Server.ValidateAccessTokenAndGetInfo(accessToken) +func (m *Manager) OAuth2ValidateAccessTokenAndGetInfo(ctx context.Context, accessToken string) (*oauth2.AccessToken, error) { + return m.oauth2Server.ValidateAccessTokenAndGetInfo(ctx, accessToken) } // OAuth2RefreshAccessToken Refreshes access token using refresh token | 使用刷新令牌刷新访问令牌 -func (m *Manager) OAuth2RefreshAccessToken(clientID, refreshToken, clientSecret string) (*oauth2.AccessToken, error) { - return m.oauth2Server.RefreshAccessToken(clientID, refreshToken, clientSecret) +func (m *Manager) OAuth2RefreshAccessToken(ctx context.Context, clientID, refreshToken, clientSecret string) (*oauth2.AccessToken, error) { + return m.oauth2Server.RefreshAccessToken(ctx, clientID, refreshToken, clientSecret) } // OAuth2RevokeToken Revokes access token and its refresh token | 撤销访问令牌及其刷新令牌 -func (m *Manager) OAuth2RevokeToken(accessToken string) error { - return m.oauth2Server.RevokeToken(accessToken) +func (m *Manager) OAuth2RevokeToken(ctx context.Context, accessToken string) error { + return m.oauth2Server.RevokeToken(ctx, accessToken) } // ============ Public Getters | 公共获取器 ============ @@ -1425,9 +1426,9 @@ func (m *Manager) GetDevice(device []string) string { // ============ Internal Methods | 内部方法 ============ // getTokenInfo Gets token information by token value | 通过Token值获取Token信息 -func (m *Manager) getTokenInfo(tokenValue string, checkState ...bool) (*TokenInfo, error) { +func (m *Manager) getTokenInfo(ctx context.Context, tokenValue string, checkState ...bool) (*TokenInfo, error) { // Retrieve data from storage using the token key | 使用Token键从存储中获取数据 - data, err := m.storage.Get(m.getTokenKey(tokenValue)) + data, err := m.storage.Get(ctx, m.getTokenKey(tokenValue)) if err != nil || data == nil { return nil, core.ErrTokenNotFound } @@ -1460,11 +1461,11 @@ func (m *Manager) getTokenInfo(tokenValue string, checkState ...bool) (*TokenInf } // renewToken Renews token expiration asynchronously | 异步续期Token -func (m *Manager) renewToken(tokenValue string, info *TokenInfo) { +func (m *Manager) renewToken(ctx context.Context, tokenValue string, info *TokenInfo) { // If info is nil, retrieve token information | 如果info为空,获取Token信息 if info == nil { var err error - if info, err = m.getTokenInfo(tokenValue); err != nil || info == nil { + if info, err = m.getTokenInfo(ctx, tokenValue); err != nil || info == nil { return } } @@ -1476,18 +1477,19 @@ func (m *Manager) renewToken(tokenValue string, info *TokenInfo) { info.ActiveTime = time.Now().Unix() // Renew token TTL | 续期Token的TTL if tokenInfo, err := m.serializer.Encode(info); err == nil { - _ = m.storage.Set(m.getTokenKey(tokenValue), tokenInfo, exp) + _ = m.storage.Set(ctx, m.getTokenKey(tokenValue), tokenInfo, exp) } // Renew accountKey TTL | 续期账号映射的TTL - _ = m.storage.Expire(m.getAccountKey(info.LoginID, info.Device), exp) + _ = m.storage.Expire(ctx, m.getAccountKey(info.LoginID, info.Device), exp) // Renew session TTL | 续期Session的TTL - _ = m.RenewSession(info.LoginID, exp) + _ = m.RenewSession(ctx, info.LoginID, exp) // Set minimal renewal interval marker | 设置最小续期间隔标记 if m.config.RenewInterval > 0 { _ = m.storage.Set( + ctx, m.getRenewKey(tokenValue), time.Now().Unix(), time.Duration(m.config.RenewInterval)*time.Second, @@ -1496,24 +1498,24 @@ func (m *Manager) renewToken(tokenValue string, info *TokenInfo) { } // removeTokenChain Removes all related keys and triggers event | 删除Token相关的所有键并触发事件 -func (m *Manager) removeTokenChain(tokenValue string, info *TokenInfo, event listener.Event, destroySession ...bool) error { +func (m *Manager) removeTokenChain(ctx context.Context, tokenValue string, info *TokenInfo, event listener.Event, destroySession ...bool) error { // If info is nil, retrieve token information | 如果info为空,获取Token信息 if info == nil { var err error - if info, err = m.getTokenInfo(tokenValue); err != nil { + if info, err = m.getTokenInfo(ctx, tokenValue); err != nil { return err } } // Delete token-info mapping | 删除Token信息映射 - _ = m.storage.Delete(m.getTokenKey(tokenValue)) + _ = m.storage.Delete(ctx, m.getTokenKey(tokenValue)) // Delete account-token mapping | 删除账号映射 - _ = m.storage.Delete(m.getAccountKey(info.LoginID, info.Device)) + _ = m.storage.Delete(ctx, m.getAccountKey(info.LoginID, info.Device)) // Delete renew key | 删除续期标记 - _ = m.storage.Delete(m.getRenewKey(tokenValue)) + _ = m.storage.Delete(ctx, m.getRenewKey(tokenValue)) // Optionally destroy session | 可选销毁Session if len(destroySession) > 0 && destroySession[0] { - _ = m.DeleteSession(info.LoginID) + _ = m.DeleteSession(ctx, info.LoginID) } // Trigger event notification | 触发事件通知 diff --git a/core/oauth2/oauth2.go b/core/oauth2/oauth2.go index 4291f54..2747165 100644 --- a/core/oauth2/oauth2.go +++ b/core/oauth2/oauth2.go @@ -1,6 +1,7 @@ package oauth2 import ( + "context" "crypto/rand" "encoding/hex" "fmt" @@ -128,7 +129,7 @@ func (s *OAuth2Server) GetClient(clientID string) (*Client, error) { } // GenerateAuthorizationCode Generates authorization code | 生成授权码 -func (s *OAuth2Server) GenerateAuthorizationCode(clientID, userID, redirectURI string, scopes []string) (*AuthorizationCode, error) { +func (s *OAuth2Server) GenerateAuthorizationCode(ctx context.Context, clientID, userID, redirectURI string, scopes []string) (*AuthorizationCode, error) { if userID == "" { return nil, core.ErrUserIDEmpty } @@ -172,7 +173,7 @@ func (s *OAuth2Server) GenerateAuthorizationCode(clientID, userID, redirectURI s } key := s.getCodeKey(code) - if err := s.storage.Set(key, encodeData, s.codeExpiration); err != nil { + if err := s.storage.Set(ctx, key, encodeData, s.codeExpiration); err != nil { return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } @@ -180,7 +181,7 @@ func (s *OAuth2Server) GenerateAuthorizationCode(clientID, userID, redirectURI s } // ExchangeCodeForToken Exchanges authorization code for access token | 用授权码换取访问令牌 -func (s *OAuth2Server) ExchangeCodeForToken(code, clientID, clientSecret, redirectURI string) (*AccessToken, error) { +func (s *OAuth2Server) ExchangeCodeForToken(ctx context.Context, code, clientID, clientSecret, redirectURI string) (*AccessToken, error) { // Verify client credentials | 验证客户端凭证 client, err := s.GetClient(clientID) if err != nil { @@ -193,7 +194,7 @@ func (s *OAuth2Server) ExchangeCodeForToken(code, clientID, clientSecret, redire // Get authorization code | 获取授权码 key := s.getCodeKey(code) - data, err := s.storage.Get(key) + data, err := s.storage.Get(ctx, key) if err != nil { return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } @@ -224,7 +225,7 @@ func (s *OAuth2Server) ExchangeCodeForToken(code, clientID, clientSecret, redire } if time.Now().Unix() > authCode.CreateTime+authCode.ExpiresIn { - _ = s.storage.Delete(key) + _ = s.storage.Delete(ctx, key) return nil, core.ErrAuthCodeExpired } @@ -236,24 +237,24 @@ func (s *OAuth2Server) ExchangeCodeForToken(code, clientID, clientSecret, redire return nil, fmt.Errorf("%w: %v", core.ErrSerializeFailed, err) } - _ = s.storage.Set(key, encodeData, time.Minute) + _ = s.storage.Set(ctx, key, encodeData, time.Minute) - return s.generateAccessToken(authCode.UserID, authCode.ClientID, authCode.Scopes) + return s.generateAccessToken(ctx, authCode.UserID, authCode.ClientID, authCode.Scopes) } // ValidateAccessToken Validates access token | 验证访问令牌 -func (s *OAuth2Server) ValidateAccessToken(accessToken string) bool { - return s.storage.Exists(s.getTokenKey(accessToken)) +func (s *OAuth2Server) ValidateAccessToken(ctx context.Context, accessToken string) bool { + return s.storage.Exists(ctx, s.getTokenKey(accessToken)) } // ValidateAccessTokenAndGetInfo Validates access token and get info | 验证访问令牌并获取信息 -func (s *OAuth2Server) ValidateAccessTokenAndGetInfo(accessToken string) (*AccessToken, error) { +func (s *OAuth2Server) ValidateAccessTokenAndGetInfo(ctx context.Context, accessToken string) (*AccessToken, error) { if accessToken == "" { return nil, core.ErrInvalidAccessToken } key := s.getTokenKey(accessToken) - data, err := s.storage.Get(key) + data, err := s.storage.Get(ctx, key) if err != nil { return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } @@ -276,7 +277,7 @@ func (s *OAuth2Server) ValidateAccessTokenAndGetInfo(accessToken string) (*Acces } // RefreshAccessToken Refreshes access token using refresh token | 使用刷新令牌刷新访问令牌 -func (s *OAuth2Server) RefreshAccessToken(clientID, refreshToken, clientSecret string) (*AccessToken, error) { +func (s *OAuth2Server) RefreshAccessToken(ctx context.Context, clientID, refreshToken, clientSecret string) (*AccessToken, error) { if refreshToken == "" { return nil, core.ErrInvalidRefreshToken } @@ -293,7 +294,7 @@ func (s *OAuth2Server) RefreshAccessToken(clientID, refreshToken, clientSecret s // Get refresh token | 获取刷新令牌 key := s.getRefreshKey(refreshToken) - data, err := s.storage.Get(key) + data, err := s.storage.Get(ctx, key) if err != nil { return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } @@ -317,22 +318,22 @@ func (s *OAuth2Server) RefreshAccessToken(clientID, refreshToken, clientSecret s } // Delete old access token | 删除旧访问令牌 - _ = s.storage.Delete(s.getTokenKey(accessTokenInfo.Token)) + _ = s.storage.Delete(ctx, s.getTokenKey(accessTokenInfo.Token)) // Delete old refresh token (token rotation) | 删除旧刷新令牌(令牌轮换) - _ = s.storage.Delete(key) + _ = s.storage.Delete(ctx, key) - return s.generateAccessToken(accessTokenInfo.UserID, accessTokenInfo.ClientID, accessTokenInfo.Scopes) + return s.generateAccessToken(ctx, accessTokenInfo.UserID, accessTokenInfo.ClientID, accessTokenInfo.Scopes) } // RevokeToken Revokes access token and its refresh token | 撤销访问令牌及其刷新令牌 -func (s *OAuth2Server) RevokeToken(accessToken string) error { +func (s *OAuth2Server) RevokeToken(ctx context.Context, accessToken string) error { if accessToken == "" { return nil } key := s.getTokenKey(accessToken) - data, err := s.storage.Get(key) + data, err := s.storage.Get(ctx, key) if err != nil { return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } @@ -352,10 +353,10 @@ func (s *OAuth2Server) RevokeToken(accessToken string) error { } if accessTokenInfo.RefreshToken != "" { - _ = s.storage.Delete(s.getRefreshKey(accessTokenInfo.RefreshToken)) + _ = s.storage.Delete(ctx, s.getRefreshKey(accessTokenInfo.RefreshToken)) } - return s.storage.Delete(key) + return s.storage.Delete(ctx, key) } // ============ Helper Methods | 辅助方法 ============ @@ -414,7 +415,7 @@ func (s *OAuth2Server) isValidScopes(client *Client, scopes []string) bool { } // generateAccessToken Generates access token and refresh token | 生成访问令牌和刷新令牌 -func (s *OAuth2Server) generateAccessToken(userID, clientID string, scopes []string) (*AccessToken, error) { +func (s *OAuth2Server) generateAccessToken(ctx context.Context, userID, clientID string, scopes []string) (*AccessToken, error) { // Generate access token | 生成访问令牌 tokenBytes := make([]byte, AccessTokenLength) if _, err := rand.Read(tokenBytes); err != nil { @@ -447,12 +448,12 @@ func (s *OAuth2Server) generateAccessToken(userID, clientID string, scopes []str refreshKey := s.getRefreshKey(refreshToken) // Store access token | 存储访问令牌 - if err = s.storage.Set(tokenKey, encodeData, s.tokenExpiration); err != nil { + if err = s.storage.Set(ctx, tokenKey, encodeData, s.tokenExpiration); err != nil { return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } // Store refresh token | 存储刷新令牌 - if err = s.storage.Set(refreshKey, encodeData, DefaultRefreshTTL); err != nil { + if err = s.storage.Set(ctx, refreshKey, encodeData, DefaultRefreshTTL); err != nil { return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } diff --git a/core/security/nonce.go b/core/security/nonce.go index 14e62a4..845a83b 100644 --- a/core/security/nonce.go +++ b/core/security/nonce.go @@ -1,6 +1,7 @@ package security import ( + "context" "crypto/rand" "encoding/hex" "fmt" @@ -50,7 +51,7 @@ func NewNonceManager(authType, prefix string, storage adapter.Storage, ttl time. } // Generate Generates a new nonce and stores it | 生成新的nonce并存储 -func (nm *NonceManager) Generate() (string, error) { +func (nm *NonceManager) Generate(ctx context.Context) (string, error) { // Create byte slice for nonce | 创建字节切片生成nonce bytes := make([]byte, NonceLength) if _, err := rand.Read(bytes); err != nil { @@ -61,7 +62,7 @@ func (nm *NonceManager) Generate() (string, error) { // Build storage key | 构建存储键 key := nm.getNonceKey(nonce) - if err := nm.storage.Set(key, time.Now().Unix(), nm.ttl); err != nil { + if err := nm.storage.Set(ctx, key, time.Now().Unix(), nm.ttl); err != nil { return "", fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } @@ -69,7 +70,7 @@ func (nm *NonceManager) Generate() (string, error) { } // Verify Verifies nonce and consumes it (one-time use) Returns false if nonce doesn't exist or already used | 验证nonce并消费它(一次性使用)如果nonce不存在或已使用则返回false -func (nm *NonceManager) Verify(nonce string) bool { +func (nm *NonceManager) Verify(ctx context.Context, nonce string) bool { if nonce == "" { return false } @@ -81,26 +82,26 @@ func (nm *NonceManager) Verify(nonce string) bool { defer nm.mu.Unlock() // Release lock after function | 函数结束释放锁 // Nonce not found | 未找到nonce - if !nm.storage.Exists(key) { + if !nm.storage.Exists(ctx, key) { return false } // Consume nonce | 消耗nonce - _ = nm.storage.Delete(key) + _ = nm.storage.Delete(ctx, key) return true } // VerifyAndConsume Verifies and consumes nonce, returns error if invalid | 验证并消费nonce,无效时返回错误 -func (nm *NonceManager) VerifyAndConsume(nonce string) error { - if !nm.Verify(nonce) { +func (nm *NonceManager) VerifyAndConsume(ctx context.Context, nonce string) error { + if !nm.Verify(ctx, nonce) { return core.ErrInvalidNonce } return nil } // IsValid Checks if nonce is valid without consuming it | 检查nonce是否有效(不消费) -func (nm *NonceManager) IsValid(nonce string) bool { +func (nm *NonceManager) IsValid(ctx context.Context, nonce string) bool { if nonce == "" { return false } @@ -112,7 +113,7 @@ func (nm *NonceManager) IsValid(nonce string) bool { defer nm.mu.RUnlock() // Release read lock | 释放读锁 // Return existence | 返回是否存在 - return nm.storage.Exists(key) + return nm.storage.Exists(ctx, key) } // getNonceKey Gets storage key for nonce | 获取nonce的存储键 diff --git a/core/security/refresh_token.go b/core/security/refresh_token.go index 38eb64d..cbc9943 100644 --- a/core/security/refresh_token.go +++ b/core/security/refresh_token.go @@ -1,6 +1,7 @@ package security import ( + "context" "crypto/rand" "encoding/hex" "fmt" @@ -86,7 +87,7 @@ func NewRefreshTokenManager( } // GenerateTokenPair Create access + refresh token | 生成访问令牌和刷新令牌 -func (rtm *RefreshTokenManager) GenerateTokenPair(loginID, device string) (*RefreshTokenInfo, error) { +func (rtm *RefreshTokenManager) GenerateTokenPair(ctx context.Context, loginID, device string) (*RefreshTokenInfo, error) { if loginID == "" { return nil, core.ErrInvalidLoginIDEmpty } @@ -131,6 +132,7 @@ func (rtm *RefreshTokenManager) GenerateTokenPair(loginID, device string) (*Refr // Store access token | 存储访问令牌 if err = rtm.storage.Set( + ctx, rtm.getTokenKey(accessToken), accessData, rtm.accessTTL, @@ -140,6 +142,7 @@ func (rtm *RefreshTokenManager) GenerateTokenPair(loginID, device string) (*Refr // Store refresh token | 存储刷新令牌 if err := rtm.storage.Set( + ctx, rtm.getRefreshKey(refreshToken), refreshData, rtm.refreshTTL, @@ -151,13 +154,13 @@ func (rtm *RefreshTokenManager) GenerateTokenPair(loginID, device string) (*Refr } // VerifyAccessToken Check token exists | 验证访问令牌是否存在 -func (rtm *RefreshTokenManager) VerifyAccessToken(accessToken string) bool { - return rtm.storage.Exists(rtm.getTokenKey(accessToken)) +func (rtm *RefreshTokenManager) VerifyAccessToken(ctx context.Context, accessToken string) bool { + return rtm.storage.Exists(ctx, rtm.getTokenKey(accessToken)) } // VerifyAccessTokenAndGetInfo Verify and get info | 验证访问令牌并获取信息 -func (rtm *RefreshTokenManager) VerifyAccessTokenAndGetInfo(accessToken string) (*AccessTokenInfo, bool) { - data, err := rtm.storage.Get(rtm.getTokenKey(accessToken)) +func (rtm *RefreshTokenManager) VerifyAccessTokenAndGetInfo(ctx context.Context, accessToken string) (*AccessTokenInfo, bool) { + data, err := rtm.storage.Get(ctx, rtm.getTokenKey(accessToken)) if err != nil || data == nil { return nil, false } @@ -176,7 +179,7 @@ func (rtm *RefreshTokenManager) VerifyAccessTokenAndGetInfo(accessToken string) } // RefreshAccessToken Refresh access token by refresh token | 使用刷新令牌刷新访问令牌 -func (rtm *RefreshTokenManager) RefreshAccessToken(refreshToken string) (*RefreshTokenInfo, error) { +func (rtm *RefreshTokenManager) RefreshAccessToken(ctx context.Context, refreshToken string) (*RefreshTokenInfo, error) { if refreshToken == "" { return nil, core.ErrNonceInvalidRefreshToken } @@ -184,7 +187,7 @@ func (rtm *RefreshTokenManager) RefreshAccessToken(refreshToken string) (*Refres refreshKey := rtm.getRefreshKey(refreshToken) // Load refresh token | 读取刷新令牌 - data, err := rtm.storage.Get(refreshKey) + data, err := rtm.storage.Get(ctx, refreshKey) if err != nil { return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } @@ -204,13 +207,13 @@ func (rtm *RefreshTokenManager) RefreshAccessToken(refreshToken string) (*Refres // Check expiration | 检查过期 if time.Now().Unix() > info.ExpireTime { - _ = rtm.storage.Delete(refreshKey) + _ = rtm.storage.Delete(ctx, refreshKey) return nil, core.ErrRefreshTokenExpired } // Remove old access token | 删除旧访问令牌 if info.AccessToken != "" { - _ = rtm.storage.Delete(rtm.getTokenKey(info.AccessToken)) + _ = rtm.storage.Delete(ctx, rtm.getTokenKey(info.AccessToken)) } // Generate new access token | 生成新访问令牌 @@ -229,6 +232,7 @@ func (rtm *RefreshTokenManager) RefreshAccessToken(refreshToken string) (*Refres return nil, fmt.Errorf("%w: %v", core.ErrSerializeFailed, err) } if err := rtm.storage.Set( + ctx, rtm.getTokenKey(newAccessToken), accessData, rtm.accessTTL, @@ -241,7 +245,7 @@ func (rtm *RefreshTokenManager) RefreshAccessToken(refreshToken string) (*Refres if err != nil { return nil, fmt.Errorf("%w: %v", core.ErrSerializeFailed, err) } - if err = rtm.storage.SetKeepTTL(refreshKey, refreshData); err != nil { + if err = rtm.storage.SetKeepTTL(ctx, refreshKey, refreshData); err != nil { return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } @@ -249,7 +253,7 @@ func (rtm *RefreshTokenManager) RefreshAccessToken(refreshToken string) (*Refres } // GetRefreshTokenInfo Get refresh token info by token | 根据刷新令牌获取刷新令牌信息 -func (rtm *RefreshTokenManager) GetRefreshTokenInfo(refreshToken string) (*RefreshTokenInfo, error) { +func (rtm *RefreshTokenManager) GetRefreshTokenInfo(ctx context.Context, refreshToken string) (*RefreshTokenInfo, error) { if refreshToken == "" { return nil, core.ErrInvalidRefreshToken } @@ -257,7 +261,7 @@ func (rtm *RefreshTokenManager) GetRefreshTokenInfo(refreshToken string) (*Refre refreshKey := rtm.getRefreshKey(refreshToken) // Load refresh token | 读取刷新令牌 - data, err := rtm.storage.Get(refreshKey) + data, err := rtm.storage.Get(ctx, refreshKey) if err != nil { return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } @@ -279,12 +283,12 @@ func (rtm *RefreshTokenManager) GetRefreshTokenInfo(refreshToken string) (*Refre } // RevokeRefreshToken Remove refresh token | 撤销刷新令牌 -func (rtm *RefreshTokenManager) RevokeRefreshToken(refreshToken string) error { +func (rtm *RefreshTokenManager) RevokeRefreshToken(ctx context.Context, refreshToken string) error { if refreshToken == "" { return nil } - err := rtm.storage.Delete(rtm.getRefreshKey(refreshToken)) + err := rtm.storage.Delete(ctx, rtm.getRefreshKey(refreshToken)) if err != nil { return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } @@ -293,8 +297,8 @@ func (rtm *RefreshTokenManager) RevokeRefreshToken(refreshToken string) error { } // IsValid Check refresh token valid | 判断刷新令牌是否有效 -func (rtm *RefreshTokenManager) IsValid(refreshToken string) bool { - data, err := rtm.storage.Get(rtm.getRefreshKey(refreshToken)) +func (rtm *RefreshTokenManager) IsValid(ctx context.Context, refreshToken string) bool { + data, err := rtm.storage.Get(ctx, rtm.getRefreshKey(refreshToken)) if err != nil || data == nil { return false } diff --git a/core/session/session.go b/core/session/session.go index d789451..d5d3674 100644 --- a/core/session/session.go +++ b/core/session/session.go @@ -1,6 +1,7 @@ package session import ( + "context" "fmt" codec_json "github.com/click33/sa-token-go/codec/json" "github.com/click33/sa-token-go/core" @@ -47,7 +48,7 @@ func NewSession(authType, prefix, id string, storage adapter.Storage, serializer // ============ Data Operations | 数据操作 ============ // Set Sets value | 设置值 -func (s *Session) Set(key string, value any, ttl ...time.Duration) error { +func (s *Session) Set(ctx context.Context, key string, value any, ttl ...time.Duration) error { if key == "" { return core.ErrSessionInvalidDataKey } @@ -57,11 +58,11 @@ func (s *Session) Set(key string, value any, ttl ...time.Duration) error { s.Data[key] = value - return s.save(ttl...) + return s.save(ctx, ttl...) } // SetMulti sets multiple key-value pairs | 设置多个键值对 -func (s *Session) SetMulti(valueMap map[string]any, ttl ...time.Duration) error { +func (s *Session) SetMulti(ctx context.Context, valueMap map[string]any, ttl ...time.Duration) error { if len(valueMap) == 0 { return nil } @@ -76,7 +77,7 @@ func (s *Session) SetMulti(valueMap map[string]any, ttl ...time.Duration) error s.Data[key] = value } - return s.save(ttl...) + return s.save(ctx, ttl...) } // Get Gets value | 获取值 @@ -148,21 +149,21 @@ func (s *Session) Has(key string) bool { } // Delete removes a key and preserves TTL | 删除键并保留 TTL -func (s *Session) Delete(key string) error { +func (s *Session) Delete(ctx context.Context, key string) error { s.mu.Lock() defer s.mu.Unlock() delete(s.Data, key) - return s.saveKeepTTL() + return s.saveKeepTTL(ctx) } // Clear removes all keys but preserves TTL | 清空所有键并保留 TTL -func (s *Session) Clear() error { +func (s *Session) Clear(ctx context.Context) error { s.mu.Lock() defer s.mu.Unlock() s.Data = make(map[string]any) - return s.saveKeepTTL() + return s.saveKeepTTL(ctx) } // Keys Gets all keys | 获取所有键 @@ -191,22 +192,22 @@ func (s *Session) IsEmpty() bool { } // Renew extends the session TTL without modifying content | 续期 Session 的 TTL,但不修改内容 -func (s *Session) Renew(ttl time.Duration) error { +func (s *Session) Renew(ctx context.Context, ttl time.Duration) error { if ttl < 0 { return nil // Skip renewal if ttl is invalid | 跳过无效续期 } key := s.getStorageKey() - return s.storage.Expire(key, ttl) + return s.storage.Expire(ctx, key, ttl) } // Destroy Destroys session | 销毁Session -func (s *Session) Destroy() error { +func (s *Session) Destroy(ctx context.Context) error { s.mu.Lock() defer s.mu.Unlock() key := s.getStorageKey() - return s.storage.Delete(key) + return s.storage.Delete(ctx, key) } // ============ Internal Methods | 内部方法 ============ @@ -217,7 +218,7 @@ func (s *Session) getStorageKey() string { } // save Saves session to storage | 保存到存储 -func (s *Session) save(ttl ...time.Duration) error { +func (s *Session) save(ctx context.Context, ttl ...time.Duration) error { data, err := s.serializer.Encode(s) if err != nil { return fmt.Errorf("%w: %v", core.ErrSerializeFailed, err) @@ -227,7 +228,7 @@ func (s *Session) save(ttl ...time.Duration) error { // Default to 0 (no expiration) | 默认使用 0(无过期时间) if len(ttl) == 0 || ttl[0] <= 0 { - err = s.storage.Set(key, data, 0) + err = s.storage.Set(ctx, key, data, 0) if err != nil { return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } @@ -235,7 +236,7 @@ func (s *Session) save(ttl ...time.Duration) error { } // Save with provided TTL | 使用指定 TTL 保存 - err = s.storage.Set(key, data, ttl[0]) + err = s.storage.Set(ctx, key, data, ttl[0]) if err != nil { return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } @@ -244,7 +245,7 @@ func (s *Session) save(ttl ...time.Duration) error { } // saveKeepTTL saves session while preserving its TTL | 保存 Session 并保留现有 TTL -func (s *Session) saveKeepTTL() error { +func (s *Session) saveKeepTTL(ctx context.Context) error { data, err := s.serializer.Encode(s) if err != nil { return fmt.Errorf("%w: %v", core.ErrSerializeFailed, err) @@ -256,7 +257,7 @@ func (s *Session) saveKeepTTL() error { // -1: never expires | 永不过期 // -2: key not found | key不存在 // >0: remaining TTL | 剩余时间 - ttl, _ := s.storage.TTL(key) + ttl, _ := s.storage.TTL(ctx, key) // ttl <= 0 means: not found(-2), never expires(-1), or expired // All these cases should save with no expiration | 这些情况都保存为永久 @@ -265,7 +266,7 @@ func (s *Session) saveKeepTTL() error { } // ttl > 0: use original TTL | 使用原有TTL - err = s.storage.Set(key, data, ttl) + err = s.storage.Set(ctx, key, data, ttl) if err != nil { return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } diff --git a/integrations/gf/export.go b/integrations/gf/export.go index 2dfd7f5..c3a1777 100644 --- a/integrations/gf/export.go +++ b/integrations/gf/export.go @@ -1,50 +1,940 @@ package gf import ( + "context" + "time" + + "github.com/click33/sa-token-go/codec/json" + "github.com/click33/sa-token-go/codec/msgpack" "github.com/click33/sa-token-go/core" + "github.com/click33/sa-token-go/core/adapter" "github.com/click33/sa-token-go/core/builder" "github.com/click33/sa-token-go/core/config" + "github.com/click33/sa-token-go/core/listener" "github.com/click33/sa-token-go/core/manager" + "github.com/click33/sa-token-go/core/oauth2" + "github.com/click33/sa-token-go/core/security" + "github.com/click33/sa-token-go/core/session" + "github.com/click33/sa-token-go/generator/sgenerator" + gflog "github.com/click33/sa-token-go/log/gf" + "github.com/click33/sa-token-go/log/nop" "github.com/click33/sa-token-go/log/slog" "github.com/click33/sa-token-go/pool/ants" + "github.com/click33/sa-token-go/storage/memory" + "github.com/click33/sa-token-go/storage/redis" "github.com/click33/sa-token-go/stputil" + "github.com/gogf/gf/v2/os/glog" + goredis "github.com/redis/go-redis/v9" +) + +// ============ Type Aliases | 类型别名 ============ + +type ( + // Config 配置 + Config = config.Config + // Manager 管理器 + Manager = manager.Manager + // Session 会话 + Session = session.Session + // TokenInfo Token信息 + TokenInfo = manager.TokenInfo + // DisableInfo 封禁信息 + DisableInfo = manager.DisableInfo + // Builder 构建器 + Builder = builder.Builder + // SaTokenError 错误类型 + SaTokenError = core.SaTokenError + // Event 事件类型 + Event = listener.Event + // EventData 事件数据 + EventData = listener.EventData + // Listener 事件监听器 + Listener = listener.Listener + // ListenerConfig 监听器配置 + ListenerConfig = listener.ListenerConfig + // RefreshTokenInfo 刷新令牌信息 + RefreshTokenInfo = security.RefreshTokenInfo + // AccessTokenInfo 访问令牌信息 + AccessTokenInfo = security.AccessTokenInfo + // OAuth2Client OAuth2客户端 + OAuth2Client = oauth2.Client + // OAuth2AccessToken OAuth2访问令牌 + OAuth2AccessToken = oauth2.AccessToken + // AuthorizationCode 授权码 + AuthorizationCode = oauth2.AuthorizationCode + // Storage 存储接口 + Storage = adapter.Storage + // Codec 编解码接口 + Codec = adapter.Codec + // Log 日志接口 + Log = adapter.Log + // Pool 协程池接口 + Pool = adapter.Pool + // Generator 生成器接口 + Generator = adapter.Generator + + // ============ Codec Types | 编解码器类型 ============ + + // JSONSerializer JSON编解码器 + JSONSerializer = json.JSONSerializer + // MsgPackSerializer MsgPack编解码器 + MsgPackSerializer = msgpack.MsgPackSerializer + + // ============ Storage Types | 存储类型 ============ + + // MemoryStorage 内存存储 + MemoryStorage = memory.Storage + // RedisStorage Redis存储 + RedisStorage = redis.Storage + // RedisConfig Redis配置 + RedisConfig = redis.Config + // RedisBuilder Redis构建器 + RedisBuilder = redis.Builder + // RedisClient Redis客户端 (go-redis/v9) + RedisClient = goredis.Client + // RedisOptions Redis连接选项 (go-redis/v9) + RedisOptions = goredis.Options + + // ============ Logger Types | 日志类型 ============ + + // SlogLogger 标准日志实现 + SlogLogger = slog.Logger + // SlogLoggerConfig 标准日志配置 + SlogLoggerConfig = slog.LoggerConfig + // SlogLogLevel 日志级别 + SlogLogLevel = slog.LogLevel + // GFLogger GoFrame日志适配器 + GFLogger = gflog.GFLogger + // NopLogger 空日志实现 + NopLogger = nop.NopLogger + + // ============ Generator Types | 生成器类型 ============ + + // TokenGenerator Token生成器 + TokenGenerator = sgenerator.Generator + // TokenStyle Token风格 + TokenStyle = sgenerator.TokenStyle + + // ============ Pool Types | 协程池类型 ============ + + // RenewPoolManager 续期池管理器 + RenewPoolManager = ants.RenewPoolManager + // RenewPoolConfig 续期池配置 + RenewPoolConfig = ants.RenewPoolConfig +) + +// ============ Error Codes | 错误码 ============ + +const ( + CodeSuccess = core.CodeSuccess + CodeBadRequest = core.CodeBadRequest + CodeNotLogin = core.CodeNotLogin + CodePermissionDenied = core.CodePermissionDenied + CodeNotFound = core.CodeNotFound + CodeServerError = core.CodeServerError + CodeTokenInvalid = core.CodeTokenInvalid + CodeTokenExpired = core.CodeTokenExpired + CodeAccountDisabled = core.CodeAccountDisabled + CodeKickedOut = core.CodeKickedOut + CodeActiveTimeout = core.CodeActiveTimeout + CodeMaxLoginCount = core.CodeMaxLoginCount + CodeStorageError = core.CodeStorageError + CodeInvalidParameter = core.CodeInvalidParameter + CodeSessionError = core.CodeSessionError +) + +// ============ Errors | 错误变量 ============ + +var ( + // Authentication Errors | 认证错误 + ErrNotLogin = core.ErrNotLogin + ErrTokenInvalid = core.ErrTokenInvalid + ErrTokenExpired = core.ErrTokenExpired + ErrTokenKickout = core.ErrTokenKickout + ErrTokenReplaced = core.ErrTokenReplaced + ErrInvalidLoginID = core.ErrInvalidLoginID + ErrInvalidDevice = core.ErrInvalidDevice + ErrTokenNotFound = core.ErrTokenNotFound + + // Authorization Errors | 授权错误 + ErrPermissionDenied = core.ErrPermissionDenied + ErrRoleDenied = core.ErrRoleDenied + + // Account Errors | 账号错误 + ErrAccountDisabled = core.ErrAccountDisabled + ErrAccountNotFound = core.ErrAccountNotFound + ErrLoginLimitExceeded = core.ErrLoginLimitExceeded + + // Session Errors | 会话错误 + ErrSessionNotFound = core.ErrSessionNotFound + ErrActiveTimeout = core.ErrActiveTimeout + ErrSessionInvalidDataKey = core.ErrSessionInvalidDataKey + ErrSessionIDEmpty = core.ErrSessionIDEmpty + + // Security Errors | 安全错误 + ErrInvalidNonce = core.ErrInvalidNonce + ErrRefreshTokenExpired = core.ErrRefreshTokenExpired + ErrNonceInvalidRefreshToken = core.ErrNonceInvalidRefreshToken + ErrInvalidLoginIDEmpty = core.ErrInvalidLoginIDEmpty + + // OAuth2 Errors | OAuth2错误 + ErrClientOrClientIDEmpty = core.ErrClientOrClientIDEmpty + ErrClientNotFound = core.ErrClientNotFound + ErrUserIDEmpty = core.ErrUserIDEmpty + ErrInvalidRedirectURI = core.ErrInvalidRedirectURI + ErrInvalidClientCredentials = core.ErrInvalidClientCredentials + ErrInvalidAuthCode = core.ErrInvalidAuthCode + ErrAuthCodeUsed = core.ErrAuthCodeUsed + ErrAuthCodeExpired = core.ErrAuthCodeExpired + ErrClientMismatch = core.ErrClientMismatch + ErrRedirectURIMismatch = core.ErrRedirectURIMismatch + ErrInvalidAccessToken = core.ErrInvalidAccessToken + ErrInvalidRefreshToken = core.ErrInvalidRefreshToken + ErrInvalidScope = core.ErrInvalidScope + + // System Errors | 系统错误 + ErrStorageUnavailable = core.ErrStorageUnavailable + ErrSerializeFailed = core.ErrSerializeFailed + ErrDeserializeFailed = core.ErrDeserializeFailed + ErrTypeConvert = core.ErrTypeConvert ) +// ============ Error Constructors | 错误构造函数 ============ + var ( - ErrTokenKickout = core.ErrTokenKickout // token has been kicked out | Token 已被踢下线 - ErrTokenReplaced = core.ErrTokenReplaced // token has been replaced | Token 已被顶下线 - ErrAccountDisabled = core.ErrAccountDisabled // account is disabled | 账号已被禁用 - ErrLoginLimitExceeded = manager.ErrLoginLimitExceeded // login count exceeds the maximum limit | 超出最大登录数量限制 + NewError = core.NewError + NewErrorWithContext = core.NewErrorWithContext + NewNotLoginError = core.NewNotLoginError + NewPermissionDeniedError = core.NewPermissionDeniedError + NewRoleDeniedError = core.NewRoleDeniedError + NewAccountDisabledError = core.NewAccountDisabledError ) +// ============ Error Checking Helpers | 错误检查辅助函数 ============ + +var ( + IsNotLoginError = core.IsNotLoginError + IsPermissionDeniedError = core.IsPermissionDeniedError + IsAccountDisabledError = core.IsAccountDisabledError + IsTokenError = core.IsTokenError + GetErrorCode = core.GetErrorCode +) + +// ============ Manager Management | Manager 管理 ============ + +// SetManager stores the manager in the global map using the specified autoType | 使用指定的 autoType 将管理器存储在全局 map 中 func SetManager(mgr *manager.Manager) { stputil.SetManager(mgr) } +// GetManager retrieves the manager from the global map using the specified autoType | 使用指定的 autoType 从全局 map 中获取管理器 func GetManager(autoType ...string) (*manager.Manager, error) { return stputil.GetManager(autoType...) } +// DeleteManager delete the specific manager for the given autoType and releases resources | 删除指定的管理器并释放资源 func DeleteManager(autoType ...string) error { return stputil.DeleteManager(autoType...) } +// DeleteAllManager delete all managers in the global map and releases resources | 关闭所有管理器并释放资源 func DeleteAllManager() { stputil.DeleteAllManager() } +// ============ Builder & Config | 构建器和配置 ============ + +// NewDefaultBuild creates a new default builder | 创建默认构建器 func NewDefaultBuild() *builder.Builder { return builder.NewBuilder() } +// NewDefaultConfig creates a new default config | 创建默认配置 func NewDefaultConfig() *config.Config { return config.DefaultConfig() } +// DefaultLoggerConfig returns the default logger config | 返回默认日志配置 func DefaultLoggerConfig() *slog.LoggerConfig { return slog.DefaultLoggerConfig() } +// DefaultRenewPoolConfig returns the default renew pool config | 返回默认续期池配置 func DefaultRenewPoolConfig() *ants.RenewPoolConfig { return ants.DefaultRenewPoolConfig() } + +// ============ Codec Constructors | 编解码器构造函数 ============ + +// NewJSONSerializer creates a new JSON serializer | 创建JSON序列化器 +func NewJSONSerializer() *json.JSONSerializer { + return json.NewJSONSerializer() +} + +// NewMsgPackSerializer creates a new MsgPack serializer | 创建MsgPack序列化器 +func NewMsgPackSerializer() *msgpack.MsgPackSerializer { + return msgpack.NewMsgPackSerializer() +} + +// ============ Storage Constructors | 存储构造函数 ============ + +// NewMemoryStorage creates a new memory storage | 创建内存存储 +func NewMemoryStorage() *memory.Storage { + return memory.NewStorage() +} + +// NewMemoryStorageWithCleanupInterval creates a new memory storage with cleanup interval | 创建带清理间隔的内存存储 +func NewMemoryStorageWithCleanupInterval(interval time.Duration) *memory.Storage { + return memory.NewStorageWithCleanupInterval(interval) +} + +// NewRedisStorage creates a new Redis storage from URL | 通过URL创建Redis存储 +func NewRedisStorage(url string) (*redis.Storage, error) { + return redis.NewStorage(url) +} + +// NewRedisStorageFromConfig creates a new Redis storage from config | 通过配置创建Redis存储 +func NewRedisStorageFromConfig(cfg *redis.Config) (*redis.Storage, error) { + return redis.NewStorageFromConfig(cfg) +} + +// NewRedisStorageFromClient creates a new Redis storage from existing client | 从已有Redis客户端创建存储 +func NewRedisStorageFromClient(client *goredis.Client) *redis.Storage { + return redis.NewStorageFromClient(client) +} + +// NewRedisClient creates a new Redis client | 创建Redis客户端 +func NewRedisClient(opts *goredis.Options) *goredis.Client { + return goredis.NewClient(opts) +} + +// NewRedisBuilder creates a new Redis builder | 创建Redis构建器 +func NewRedisBuilder() *redis.Builder { + return redis.NewBuilder() +} + +// ============ Logger Constructors | 日志构造函数 ============ + +// NewSlogLogger creates a new slog logger with config | 使用配置创建标准日志器 +func NewSlogLogger(cfg *slog.LoggerConfig) (*slog.Logger, error) { + return slog.NewLoggerWithConfig(cfg) +} + +// NewGFLogger creates a new GoFrame logger adapter | 创建GoFrame日志适配器 +func NewGFLogger(ctx context.Context, l *glog.Logger) *gflog.GFLogger { + return gflog.NewGFLogger(ctx, l) +} + +// NewNopLogger creates a new no-op logger | 创建空日志器 +func NewNopLogger() *nop.NopLogger { + return nop.NewNopLogger() +} + +// ============ Generator Constructors | 生成器构造函数 ============ + +// NewTokenGenerator creates a new token generator | 创建Token生成器 +func NewTokenGenerator(timeout int64, tokenStyle sgenerator.TokenStyle, jwtSecretKey string) *sgenerator.Generator { + return sgenerator.NewGenerator(timeout, tokenStyle, jwtSecretKey) +} + +// NewDefaultTokenGenerator creates a new default token generator | 创建默认Token生成器 +func NewDefaultTokenGenerator() *sgenerator.Generator { + return sgenerator.NewDefaultGenerator() +} + +// ============ Pool Constructors | 协程池构造函数 ============ + +// NewRenewPoolManager creates a new renew pool manager with default config | 使用默认配置创建续期池管理器 +func NewRenewPoolManager() *ants.RenewPoolManager { + return ants.NewRenewPoolManagerWithDefaultConfig() +} + +// NewRenewPoolManagerWithConfig creates a new renew pool manager with config | 使用配置创建续期池管理器 +func NewRenewPoolManagerWithConfig(cfg *ants.RenewPoolConfig) (*ants.RenewPoolManager, error) { + return ants.NewRenewPoolManagerWithConfig(cfg) +} + +// ============ Token Style Constants | Token风格常量 ============ + +const ( + // TokenStyleUUID UUID style | UUID风格 + TokenStyleUUID = sgenerator.TokenStyleUUID + // TokenStyleSimple Simple random string | 简单随机字符串 + TokenStyleSimple = sgenerator.TokenStyleSimple + // TokenStyleRandom32 32-bit random string | 32位随机字符串 + TokenStyleRandom32 = sgenerator.TokenStyleRandom32 + // TokenStyleRandom64 64-bit random string | 64位随机字符串 + TokenStyleRandom64 = sgenerator.TokenStyleRandom64 + // TokenStyleRandom128 128-bit random string | 128位随机字符串 + TokenStyleRandom128 = sgenerator.TokenStyleRandom128 + // TokenStyleJWT JWT style | JWT风格 + TokenStyleJWT = sgenerator.TokenStyleJWT + // TokenStyleHash SHA256 hash-based style | SHA256哈希风格 + TokenStyleHash = sgenerator.TokenStyleHash + // TokenStyleTimestamp Timestamp-based style | 时间戳风格 + TokenStyleTimestamp = sgenerator.TokenStyleTimestamp + // TokenStyleTik Short ID style (like TikTok) | Tik风格短ID + TokenStyleTik = sgenerator.TokenStyleTik +) + +// ============ Log Level Constants | 日志级别常量 ============ + +const ( + // LogLevelDebug Debug level | 调试级别 + LogLevelDebug = slog.LevelDebug + // LogLevelInfo Info level | 信息级别 + LogLevelInfo = slog.LevelInfo + // LogLevelWarn Warn level | 警告级别 + LogLevelWarn = slog.LevelWarn + // LogLevelError Error level | 错误级别 + LogLevelError = slog.LevelError +) + +// ============ Authentication | 登录认证 ============ + +// Login performs user login | 用户登录 +func Login(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) (string, error) { + return stputil.Login(ctx, loginID, deviceOrAutoType...) +} + +// LoginByToken performs login with specified token | 使用指定Token登录 +func LoginByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.LoginByToken(ctx, tokenValue, authType...) +} + +// Logout performs user logout | 用户登出 +func Logout(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) error { + return stputil.Logout(ctx, loginID, deviceOrAutoType...) +} + +// LogoutByToken performs logout by token | 根据Token登出 +func LogoutByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.LogoutByToken(ctx, tokenValue, authType...) +} + +// Kickout kicks out a user session | 踢人下线 +func Kickout(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) error { + return stputil.Kickout(ctx, loginID, deviceOrAutoType...) +} + +// KickoutByToken Kick user offline | 根据Token踢人下线 +func KickoutByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.KickoutByToken(ctx, tokenValue, authType...) +} + +// Replace user offline by login ID and device | 根据账号和设备顶人下线 +func Replace(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) error { + return stputil.Replace(ctx, loginID, deviceOrAutoType...) +} + +// ReplaceByToken Replace user offline by token | 根据Token顶人下线 +func ReplaceByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.ReplaceByToken(ctx, tokenValue, authType...) +} + +// ============ Token Validation | Token验证 ============ + +// IsLogin checks if the user is logged in | 检查用户是否已登录 +func IsLogin(ctx context.Context, tokenValue string, authType ...string) bool { + return stputil.IsLogin(ctx, tokenValue, authType...) +} + +// CheckLogin checks login status (throws error if not logged in) | 检查登录状态(未登录抛出错误) +func CheckLogin(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.CheckLogin(ctx, tokenValue, authType...) +} + +// CheckLoginWithState checks the login status (returns error to determine the reason if not logged in) | 检查登录状态(未登录时根据错误确定原因) +func CheckLoginWithState(ctx context.Context, tokenValue string, authType ...string) (bool, error) { + return stputil.CheckLoginWithState(ctx, tokenValue, authType...) +} + +// GetLoginID gets the login ID from token | 从Token获取登录ID +func GetLoginID(ctx context.Context, tokenValue string, authType ...string) (string, error) { + return stputil.GetLoginID(ctx, tokenValue, authType...) +} + +// GetLoginIDNotCheck gets login ID without checking | 获取登录ID(不检查登录状态) +func GetLoginIDNotCheck(ctx context.Context, tokenValue string, authType ...string) (string, error) { + return stputil.GetLoginIDNotCheck(ctx, tokenValue, authType...) +} + +// GetTokenValue gets the token value for a login ID | 获取登录ID对应的Token值 +func GetTokenValue(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) (string, error) { + return stputil.GetTokenValue(ctx, loginID, deviceOrAutoType...) +} + +// GetTokenInfo gets token information | 获取Token信息 +func GetTokenInfo(ctx context.Context, tokenValue string, authType ...string) (*manager.TokenInfo, error) { + return stputil.GetTokenInfo(ctx, tokenValue, authType...) +} + +// ============ Account Disable | 账号封禁 ============ + +// Disable disables an account for specified duration | 封禁账号(指定时长) +func Disable(ctx context.Context, loginID interface{}, duration time.Duration, authType ...string) error { + return stputil.Disable(ctx, loginID, duration, authType...) +} + +// DisableByToken disables the account associated with the given token for a duration | 根据指定 Token 封禁其对应的账号 +func DisableByToken(ctx context.Context, tokenValue string, duration time.Duration, authType ...string) error { + return stputil.DisableByToken(ctx, tokenValue, duration, authType...) +} + +// Untie re-enables a disabled account | 解封账号 +func Untie(ctx context.Context, loginID interface{}, authType ...string) error { + return stputil.Untie(ctx, loginID, authType...) +} + +// UntieByToken re-enables a disabled account by token | 根据Token解封账号 +func UntieByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.UntieByToken(ctx, tokenValue, authType...) +} + +// IsDisable checks if an account is disabled | 检查账号是否被封禁 +func IsDisable(ctx context.Context, loginID interface{}, authType ...string) bool { + return stputil.IsDisable(ctx, loginID, authType...) +} + +// IsDisableByToken checks if an account is disabled by token | 根据Token检查账号是否被封禁 +func IsDisableByToken(ctx context.Context, tokenValue string, authType ...string) bool { + return stputil.IsDisableByToken(ctx, tokenValue, authType...) +} + +// GetDisableTime gets remaining disable time in seconds | 获取剩余封禁时间(秒) +func GetDisableTime(ctx context.Context, loginID interface{}, authType ...string) (int64, error) { + return stputil.GetDisableTime(ctx, loginID, authType...) +} + +// GetDisableTimeByToken gets remaining disable time by token | 根据Token获取剩余封禁时间(秒) +func GetDisableTimeByToken(ctx context.Context, tokenValue string, authType ...string) (int64, error) { + return stputil.GetDisableTimeByToken(ctx, tokenValue, authType...) +} + +// CheckDisableWithInfo gets disable info | 获取封禁信息 +func CheckDisableWithInfo(ctx context.Context, loginID interface{}, authType ...string) (*manager.DisableInfo, error) { + return stputil.CheckDisableWithInfo(ctx, loginID, authType...) +} + +// CheckDisableWithInfoByToken gets disable info by token | 根据Token获取封禁信息 +func CheckDisableWithInfoByToken(ctx context.Context, tokenValue string, authType ...string) (*manager.DisableInfo, error) { + return stputil.CheckDisableWithInfoByToken(ctx, tokenValue, authType...) +} + +// ============ Session Management | Session管理 ============ + +// GetSession gets session by login ID | 根据登录ID获取Session +func GetSession(ctx context.Context, loginID interface{}, authType ...string) (*session.Session, error) { + return stputil.GetSession(ctx, loginID, authType...) +} + +// GetSessionByToken gets session by token | 根据Token获取Session +func GetSessionByToken(ctx context.Context, tokenValue string, authType ...string) (*session.Session, error) { + return stputil.GetSessionByToken(ctx, tokenValue, authType...) +} + +// DeleteSession deletes a session | 删除Session +func DeleteSession(ctx context.Context, loginID interface{}, authType ...string) error { + return stputil.DeleteSession(ctx, loginID, authType...) +} + +// DeleteSessionByToken Deletes session by token | 根据Token删除Session +func DeleteSessionByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.DeleteSessionByToken(ctx, tokenValue, authType...) +} + +// HasSession checks if session exists | 检查Session是否存在 +func HasSession(ctx context.Context, loginID interface{}, authType ...string) bool { + return stputil.HasSession(ctx, loginID, authType...) +} + +// RenewSession renews session TTL | 续期Session +func RenewSession(ctx context.Context, loginID interface{}, ttl time.Duration, authType ...string) error { + return stputil.RenewSession(ctx, loginID, ttl, authType...) +} + +// RenewSessionByToken renews session TTL by token | 根据Token续期Session +func RenewSessionByToken(ctx context.Context, tokenValue string, ttl time.Duration, authType ...string) error { + return stputil.RenewSessionByToken(ctx, tokenValue, ttl, authType...) +} + +// ============ Permission Verification | 权限验证 ============ + +// SetPermissions sets permissions for a login ID | 设置用户权限 +func SetPermissions(ctx context.Context, loginID interface{}, permissions []string, authType ...string) error { + return stputil.SetPermissions(ctx, loginID, permissions, authType...) +} + +// SetPermissionsByToken sets permissions by token | 根据 Token 设置对应账号的权限 +func SetPermissionsByToken(ctx context.Context, tokenValue string, permissions []string, authType ...string) error { + return stputil.SetPermissionsByToken(ctx, tokenValue, permissions, authType...) +} + +// RemovePermissions removes specified permissions for a login ID | 删除用户指定权限 +func RemovePermissions(ctx context.Context, loginID interface{}, permissions []string, authType ...string) error { + return stputil.RemovePermissions(ctx, loginID, permissions, authType...) +} + +// RemovePermissionsByToken removes specified permissions by token | 根据 Token 删除对应账号的指定权限 +func RemovePermissionsByToken(ctx context.Context, tokenValue string, permissions []string, authType ...string) error { + return stputil.RemovePermissionsByToken(ctx, tokenValue, permissions, authType...) +} + +// GetPermissions gets permission list | 获取权限列表 +func GetPermissions(ctx context.Context, loginID interface{}, authType ...string) ([]string, error) { + return stputil.GetPermissions(ctx, loginID, authType...) +} + +// GetPermissionsByToken gets permission list by token | 根据 Token 获取对应账号的权限列表 +func GetPermissionsByToken(ctx context.Context, tokenValue string, authType ...string) ([]string, error) { + return stputil.GetPermissionsByToken(ctx, tokenValue, authType...) +} + +// HasPermission checks if has specified permission | 检查是否拥有指定权限 +func HasPermission(ctx context.Context, loginID interface{}, permission string, authType ...string) bool { + return stputil.HasPermission(ctx, loginID, permission, authType...) +} + +// HasPermissionByToken checks if the token has the specified permission | 检查Token是否拥有指定权限 +func HasPermissionByToken(ctx context.Context, tokenValue string, permission string, authType ...string) bool { + return stputil.HasPermissionByToken(ctx, tokenValue, permission, authType...) +} + +// HasPermissionsAnd checks if has all permissions (AND logic) | 检查是否拥有所有权限(AND逻辑) +func HasPermissionsAnd(ctx context.Context, loginID interface{}, permissions []string, authType ...string) bool { + return stputil.HasPermissionsAnd(ctx, loginID, permissions, authType...) +} + +// HasPermissionsAndByToken checks if the token has all specified permissions | 检查Token是否拥有所有指定权限 +func HasPermissionsAndByToken(ctx context.Context, tokenValue string, permissions []string, authType ...string) bool { + return stputil.HasPermissionsAndByToken(ctx, tokenValue, permissions, authType...) +} + +// HasPermissionsOr checks if has any permission (OR logic) | 检查是否拥有任一权限(OR逻辑) +func HasPermissionsOr(ctx context.Context, loginID interface{}, permissions []string, authType ...string) bool { + return stputil.HasPermissionsOr(ctx, loginID, permissions, authType...) +} + +// HasPermissionsOrByToken checks if the token has any of the specified permissions | 检查Token是否拥有任一指定权限 +func HasPermissionsOrByToken(ctx context.Context, tokenValue string, permissions []string, authType ...string) bool { + return stputil.HasPermissionsOrByToken(ctx, tokenValue, permissions, authType...) +} + +// ============ Role Management | 角色管理 ============ + +// SetRoles sets roles for a login ID | 设置用户角色 +func SetRoles(ctx context.Context, loginID interface{}, roles []string, authType ...string) error { + return stputil.SetRoles(ctx, loginID, roles, authType...) +} + +// SetRolesByToken sets roles by token | 根据 Token 设置对应账号的角色 +func SetRolesByToken(ctx context.Context, tokenValue string, roles []string, authType ...string) error { + return stputil.SetRolesByToken(ctx, tokenValue, roles, authType...) +} + +// RemoveRoles removes specified roles for a login ID | 删除用户指定角色 +func RemoveRoles(ctx context.Context, loginID interface{}, roles []string, authType ...string) error { + return stputil.RemoveRoles(ctx, loginID, roles, authType...) +} + +// RemoveRolesByToken removes specified roles by token | 根据 Token 删除对应账号的指定角色 +func RemoveRolesByToken(ctx context.Context, tokenValue string, roles []string, authType ...string) error { + return stputil.RemoveRolesByToken(ctx, tokenValue, roles, authType...) +} + +// GetRoles gets role list | 获取角色列表 +func GetRoles(ctx context.Context, loginID interface{}, authType ...string) ([]string, error) { + return stputil.GetRoles(ctx, loginID, authType...) +} + +// GetRolesByToken gets role list by token | 根据 Token 获取对应账号的角色列表 +func GetRolesByToken(ctx context.Context, tokenValue string, authType ...string) ([]string, error) { + return stputil.GetRolesByToken(ctx, tokenValue, authType...) +} + +// HasRole checks if has specified role | 检查是否拥有指定角色 +func HasRole(ctx context.Context, loginID interface{}, role string, authType ...string) bool { + return stputil.HasRole(ctx, loginID, role, authType...) +} + +// HasRoleByToken checks if the token has the specified role | 检查 Token 是否拥有指定角色 +func HasRoleByToken(ctx context.Context, tokenValue string, role string, authType ...string) bool { + return stputil.HasRoleByToken(ctx, tokenValue, role, authType...) +} + +// HasRolesAnd checks if has all roles (AND logic) | 检查是否拥有所有角色(AND逻辑) +func HasRolesAnd(ctx context.Context, loginID interface{}, roles []string, authType ...string) bool { + return stputil.HasRolesAnd(ctx, loginID, roles, authType...) +} + +// HasRolesAndByToken checks if the token has all specified roles | 检查 Token 是否拥有所有指定角色 +func HasRolesAndByToken(ctx context.Context, tokenValue string, roles []string, authType ...string) bool { + return stputil.HasRolesAndByToken(ctx, tokenValue, roles, authType...) +} + +// HasRolesOr checks if has any role (OR logic) | 检查是否拥有任一角色(OR逻辑) +func HasRolesOr(ctx context.Context, loginID interface{}, roles []string, authType ...string) bool { + return stputil.HasRolesOr(ctx, loginID, roles, authType...) +} + +// HasRolesOrByToken checks if the token has any of the specified roles | 检查 Token 是否拥有任一指定角色 +func HasRolesOrByToken(ctx context.Context, tokenValue string, roles []string, authType ...string) bool { + return stputil.HasRolesOrByToken(ctx, tokenValue, roles, authType...) +} + +// ============ Token Tag | Token标签 ============ + +// SetTokenTag sets token tag | 设置Token标签 +func SetTokenTag(ctx context.Context, tokenValue, tag string, authType ...string) error { + return stputil.SetTokenTag(ctx, tokenValue, tag, authType...) +} + +// GetTokenTag gets token tag | 获取Token标签 +func GetTokenTag(ctx context.Context, tokenValue string, authType ...string) (string, error) { + return stputil.GetTokenTag(ctx, tokenValue, authType...) +} + +// ============ Session Query | 会话查询 ============ + +// GetTokenValueListByLoginID gets all tokens for a login ID | 获取指定账号的所有Token +func GetTokenValueListByLoginID(ctx context.Context, loginID interface{}, authType ...string) ([]string, error) { + return stputil.GetTokenValueListByLoginID(ctx, loginID, authType...) +} + +// GetSessionCountByLoginID gets session count for a login ID | 获取指定账号的Session数量 +func GetSessionCountByLoginID(ctx context.Context, loginID interface{}, authType ...string) (int, error) { + return stputil.GetSessionCountByLoginID(ctx, loginID, authType...) +} + +// ============ Security Features | 安全特性 ============ + +// Generate Generates a one-time nonce | 生成一次性随机数 +func Generate(ctx context.Context, authType ...string) (string, error) { + return stputil.Generate(ctx, authType...) +} + +// Verify Verifies a nonce | 验证随机数 +func Verify(ctx context.Context, nonce string, authType ...string) bool { + return stputil.Verify(ctx, nonce, authType...) +} + +// VerifyAndConsume Verifies and consumes nonce, returns error if invalid | 验证并消费nonce,无效时返回错误 +func VerifyAndConsume(ctx context.Context, nonce string, authType ...string) error { + return stputil.VerifyAndConsume(ctx, nonce, authType...) +} + +// IsValidNonce Checks if nonce is valid without consuming it | 检查nonce是否有效(不消费) +func IsValidNonce(ctx context.Context, nonce string, authType ...string) bool { + return stputil.IsValidNonce(ctx, nonce, authType...) +} + +// GenerateTokenPair Create access + refresh token | 生成访问令牌和刷新令牌 +func GenerateTokenPair(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) (*security.RefreshTokenInfo, error) { + return stputil.GenerateTokenPair(ctx, loginID, deviceOrAutoType...) +} + +// VerifyAccessToken verifies access token validity | 验证访问令牌是否有效 +func VerifyAccessToken(ctx context.Context, accessToken string, authType ...string) bool { + return stputil.VerifyAccessToken(ctx, accessToken, authType...) +} + +// VerifyAccessTokenAndGetInfo verifies access token and returns token info | 验证访问令牌并返回Token信息 +func VerifyAccessTokenAndGetInfo(ctx context.Context, accessToken string, authType ...string) (*security.AccessTokenInfo, bool) { + return stputil.VerifyAccessTokenAndGetInfo(ctx, accessToken, authType...) +} + +// GetRefreshTokenInfo gets refresh token information | 获取刷新令牌信息 +func GetRefreshTokenInfo(ctx context.Context, refreshToken string, authType ...string) (*security.RefreshTokenInfo, error) { + return stputil.GetRefreshTokenInfo(ctx, refreshToken, authType...) +} + +// RefreshAccessToken refreshes access token using refresh token | 使用刷新令牌刷新访问令牌 +func RefreshAccessToken(ctx context.Context, refreshToken string, authType ...string) (*security.RefreshTokenInfo, error) { + return stputil.RefreshAccessToken(ctx, refreshToken, authType...) +} + +// RevokeRefreshToken Revokes refresh token | 撤销刷新令牌 +func RevokeRefreshToken(ctx context.Context, refreshToken string, authType ...string) error { + return stputil.RevokeRefreshToken(ctx, refreshToken, authType...) +} + +// IsValid checks whether token is valid | 检查Token是否有效 +func IsValid(ctx context.Context, refreshToken string, authType ...string) bool { + return stputil.IsValid(ctx, refreshToken, authType...) +} + +// ============ OAuth2 Features | OAuth2 功能 ============ + +// RegisterClient Registers an OAuth2 client | 注册OAuth2客户端 +func RegisterClient(ctx context.Context, client *oauth2.Client, authType ...string) error { + return stputil.RegisterClient(ctx, client, authType...) +} + +// UnregisterClient unregisters an OAuth2 client | 注销OAuth2客户端 +func UnregisterClient(ctx context.Context, clientID string, authType ...string) error { + return stputil.UnregisterClient(ctx, clientID, authType...) +} + +// GetClient gets OAuth2 client information | 获取OAuth2客户端信息 +func GetClient(ctx context.Context, clientID string, authType ...string) (*oauth2.Client, error) { + return stputil.GetClient(ctx, clientID, authType...) +} + +// GenerateAuthorizationCode creates an authorization code | 创建授权码 +func GenerateAuthorizationCode(ctx context.Context, clientID, loginID, redirectURI string, scope []string, authType ...string) (*oauth2.AuthorizationCode, error) { + return stputil.GenerateAuthorizationCode(ctx, clientID, loginID, redirectURI, scope, authType...) +} + +// ExchangeCodeForToken exchanges authorization code for token | 使用授权码换取令牌 +func ExchangeCodeForToken(ctx context.Context, code, clientID, clientSecret, redirectURI string, authType ...string) (*oauth2.AccessToken, error) { + return stputil.ExchangeCodeForToken(ctx, code, clientID, clientSecret, redirectURI, authType...) +} + +// ValidateAccessToken verifies OAuth2 access token | 验证OAuth2访问令牌 +func ValidateAccessToken(ctx context.Context, accessToken string, authType ...string) bool { + return stputil.ValidateAccessToken(ctx, accessToken, authType...) +} + +// ValidateAccessTokenAndGetInfo verifies OAuth2 access token and get info | 验证OAuth2访问令牌并获取信息 +func ValidateAccessTokenAndGetInfo(ctx context.Context, accessToken string, authType ...string) (*oauth2.AccessToken, error) { + return stputil.ValidateAccessTokenAndGetInfo(ctx, accessToken, authType...) +} + +// OAuth2RefreshAccessToken Refreshes access token using refresh token | 使用刷新令牌刷新访问令牌(OAuth2) +func OAuth2RefreshAccessToken(ctx context.Context, clientID, refreshToken, clientSecret string, authType ...string) (*oauth2.AccessToken, error) { + return stputil.OAuth2RefreshAccessToken(ctx, clientID, refreshToken, clientSecret, authType...) +} + +// RevokeToken Revokes access token and its refresh token | 撤销访问令牌及其刷新令牌 +func RevokeToken(ctx context.Context, accessToken string, authType ...string) error { + return stputil.RevokeToken(ctx, accessToken, authType...) +} + +// ============ Public Getters | 公共获取器 ============ + +// GetConfig returns the manager configuration | 获取 Manager 当前使用的配置 +func GetConfig(ctx context.Context, authType ...string) *config.Config { + return stputil.GetConfig(ctx, authType...) +} + +// GetStorage returns the storage adapter | 获取 Manager 使用的存储适配器 +func GetStorage(ctx context.Context, authType ...string) adapter.Storage { + return stputil.GetStorage(ctx, authType...) +} + +// GetCodec returns the codec (serializer) | 获取 Manager 使用的编解码器 +func GetCodec(ctx context.Context, authType ...string) adapter.Codec { + return stputil.GetCodec(ctx, authType...) +} + +// GetLog returns the logger adapter | 获取 Manager 使用的日志适配器 +func GetLog(ctx context.Context, authType ...string) adapter.Log { + return stputil.GetLog(ctx, authType...) +} + +// GetPool returns the goroutine pool | 获取 Manager 使用的协程池 +func GetPool(ctx context.Context, authType ...string) adapter.Pool { + return stputil.GetPool(ctx, authType...) +} + +// GetGenerator returns the token generator | 获取 Token 生成器 +func GetGenerator(ctx context.Context, authType ...string) adapter.Generator { + return stputil.GetGenerator(ctx, authType...) +} + +// GetNonceManager returns the nonce manager | 获取随机串管理器 +func GetNonceManager(ctx context.Context, authType ...string) *security.NonceManager { + return stputil.GetNonceManager(ctx, authType...) +} + +// GetRefreshManager returns the refresh token manager | 获取刷新令牌管理器 +func GetRefreshManager(ctx context.Context, authType ...string) *security.RefreshTokenManager { + return stputil.GetRefreshManager(ctx, authType...) +} + +// GetEventManager returns the event manager | 获取事件管理器 +func GetEventManager(ctx context.Context, authType ...string) *listener.Manager { + return stputil.GetEventManager(ctx, authType...) +} + +// GetOAuth2Server Gets OAuth2 server instance | 获取OAuth2服务器实例 +func GetOAuth2Server(ctx context.Context, authType ...string) *oauth2.OAuth2Server { + return stputil.GetOAuth2Server(ctx, authType...) +} + +// ============ Event Management | 事件管理 ============ + +// RegisterFunc registers a function as an event listener | 注册函数作为事件监听器 +func RegisterFunc(event listener.Event, fn func(*listener.EventData), authType ...string) { + stputil.RegisterFunc(event, fn, authType...) +} + +// Register registers an event listener | 注册事件监听器 +func Register(event listener.Event, l listener.Listener, authType ...string) string { + return stputil.Register(event, l, authType...) +} + +// RegisterWithConfig registers an event listener with config | 注册带配置的事件监听器 +func RegisterWithConfig(event listener.Event, l listener.Listener, cfg listener.ListenerConfig, authType ...string) string { + return stputil.RegisterWithConfig(event, l, cfg, authType...) +} + +// Unregister removes an event listener by ID | 根据ID移除事件监听器 +func Unregister(id string, authType ...string) bool { + return stputil.Unregister(id, authType...) +} + +// TriggerEvent manually triggers an event | 手动触发事件 +func TriggerEvent(data *listener.EventData, authType ...string) { + stputil.TriggerEvent(data, authType...) +} + +// TriggerEventAsync triggers an event asynchronously and returns immediately | 异步触发事件并立即返回 +func TriggerEventAsync(data *listener.EventData, authType ...string) { + stputil.TriggerEventAsync(data, authType...) +} + +// TriggerEventSync triggers an event synchronously and waits for all listeners | 同步触发事件并等待所有监听器完成 +func TriggerEventSync(data *listener.EventData, authType ...string) { + stputil.TriggerEventSync(data, authType...) +} + +// WaitEvents waits for all async event listeners to complete | 等待所有异步事件监听器完成 +func WaitEvents(authType ...string) { + stputil.WaitEvents(authType...) +} + +// ClearEventListeners removes all listeners for a specific event | 清除指定事件的所有监听器 +func ClearEventListeners(event listener.Event, authType ...string) { + stputil.ClearEventListeners(event, authType...) +} + +// ClearAllEventListeners removes all listeners | 清除所有事件监听器 +func ClearAllEventListeners(authType ...string) { + stputil.ClearAllEventListeners(authType...) +} + +// CountEventListeners returns the number of listeners for a specific event | 获取指定事件监听器数量 +func CountEventListeners(event listener.Event, authType ...string) int { + return stputil.CountEventListeners(event, authType...) +} + +// CountAllListeners returns the total number of registered listeners | 获取已注册监听器总数 +func CountAllListeners(authType ...string) int { + return stputil.CountAllListeners(authType...) +} + +// GetEventListenerIDs returns all listener IDs for a specific event | 获取指定事件的所有监听器ID +func GetEventListenerIDs(event listener.Event, authType ...string) []string { + return stputil.GetEventListenerIDs(event, authType...) +} + +// GetAllRegisteredEvents returns all events that have registered listeners | 获取所有已注册事件 +func GetAllRegisteredEvents(authType ...string) []listener.Event { + return stputil.GetAllRegisteredEvents(authType...) +} + +// HasEventListeners checks if there are any listeners for a specific event | 检查指定事件是否有监听器 +func HasEventListeners(event listener.Event, authType ...string) bool { + return stputil.HasEventListeners(event, authType...) +} diff --git a/integrations/gf/middleware.go b/integrations/gf/middleware.go index 83e8309..e72b8ae 100644 --- a/integrations/gf/middleware.go +++ b/integrations/gf/middleware.go @@ -1,13 +1,12 @@ package gf import ( - "context" "errors" + "net/http" + "github.com/click33/sa-token-go/core" "github.com/click33/sa-token-go/core/manager" - "net/http" - "github.com/click33/sa-token-go/core/config" saContext "github.com/click33/sa-token-go/core/context" "github.com/click33/sa-token-go/stputil" "github.com/gogf/gf/v2/frame/g" @@ -76,14 +75,12 @@ func AuthMiddleware(opts ...AuthOption) ghttp.HandlerFunc { return } + // 获取 token | Get token saCtx := getSaContext(r, mgr) - err = mgr.CheckLogin( - context.WithValue( - r.Context(), - config.CtxTokenValue, - saCtx.GetTokenValue(), - ), - ) + tokenValue := saCtx.GetTokenValue() + + // 检查登录 | Check login + err = mgr.CheckLogin(r.Context(), tokenValue) if err != nil { if options.AuthFailFunc != nil { options.AuthFailFunc(r, err) @@ -118,27 +115,12 @@ func AuthWithStateMiddleware(opts ...AuthOption) ghttp.HandlerFunc { // 构建 Sa-Token 上下文 | Build Sa-Token context saCtx := getSaContext(r, mgr) + tokenValue := saCtx.GetTokenValue() // 检查登录并返回状态 | Check login with state - _, err = mgr.CheckLoginWithState( - context.WithValue( - r.Context(), - config.CtxTokenValue, - saCtx.GetTokenValue(), - ), - ) + _, err = mgr.CheckLoginWithState(r.Context(), tokenValue) if err != nil { - // 映射错误为标准 Sa-Token 错误 - switch { - case errors.Is(err, manager.ErrTokenKickout): - err = core.ErrTokenKickout - case errors.Is(err, manager.ErrTokenReplaced): - err = core.ErrTokenReplaced - default: - err = core.ErrNotLogin - } - // 用户自定义回调优先 if options.AuthFailFunc != nil { options.AuthFailFunc(r, err) @@ -184,31 +166,23 @@ func PermissionMiddleware( // 构建 Sa-Token 上下文 | Build Sa-Token context saCtx := getSaContext(r, mgr) - ctx := context.WithValue(r.Context(), config.CtxTokenValue, saCtx.GetTokenValue()) + tokenValue := saCtx.GetTokenValue() + ctx := r.Context() // Permission check | 权限校验 var ok bool switch { // Single permission | 单权限判断 case len(permissions) == 1: - ok = mgr.HasPermissionByToken( - ctx, - permissions[0], - ) + ok = mgr.HasPermissionByToken(ctx, tokenValue, permissions[0]) // AND logic | AND 逻辑 case options.LogicType == LogicAnd: - ok = mgr.HasPermissionsAndByToken( - ctx, - permissions, - ) + ok = mgr.HasPermissionsAndByToken(ctx, tokenValue, permissions) // OR logic (default) | OR 逻辑(默认) default: - ok = mgr.HasPermissionsOrByToken( - ctx, - permissions, - ) + ok = mgr.HasPermissionsOrByToken(ctx, tokenValue, permissions) } if !ok { @@ -255,7 +229,8 @@ func RoleMiddleware( // 构建 Sa-Token 上下文 | Build Sa-Token context saCtx := getSaContext(r, mgr) - ctx := context.WithValue(r.Context(), config.CtxTokenValue, saCtx.GetTokenValue()) + tokenValue := saCtx.GetTokenValue() + ctx := r.Context() // Role check | 角色校验 var ok bool @@ -263,15 +238,15 @@ func RoleMiddleware( switch { // Single role | 单角色判断 case len(roles) == 1: - ok = mgr.HasRoleByToken(ctx, roles[0]) + ok = mgr.HasRoleByToken(ctx, tokenValue, roles[0]) // AND logic | AND 逻辑 case options.LogicType == LogicAnd: - ok = mgr.HasRolesAndByToken(ctx, roles) + ok = mgr.HasRolesAndByToken(ctx, tokenValue, roles) // OR logic (default) | OR 逻辑(默认) default: - ok = mgr.HasRolesOrByToken(ctx, roles) + ok = mgr.HasRolesOrByToken(ctx, tokenValue, roles) } if !ok { diff --git a/integrations/gin/middleware.go b/integrations/gin/middleware.go index 337fdcd..c385106 100644 --- a/integrations/gin/middleware.go +++ b/integrations/gin/middleware.go @@ -123,16 +123,6 @@ func AuthWithStateMiddleware(opts ...AuthOption) gin.HandlerFunc { _, err = mgr.CheckLoginWithState(context.WithValue(c.Request.Context(), config.CtxTokenValue, saCtx.GetTokenValue())) if err != nil { - - switch { - case errors.Is(err, manager.ErrTokenKickout): - err = core.ErrTokenKickout - case errors.Is(err, manager.ErrTokenReplaced): - err = core.ErrTokenReplaced - default: - err = core.ErrNotLogin - } - if options.AuthFailFunc != nil { options.AuthFailFunc(c, err) } else { diff --git a/storage/memory/memory.go b/storage/memory/memory.go index 696aa49..7d6b837 100644 --- a/storage/memory/memory.go +++ b/storage/memory/memory.go @@ -52,7 +52,7 @@ func NewStorageWithCleanupInterval(interval time.Duration) *Storage { } // Set 设置键值对 -func (s *Storage) Set(key string, value any, expiration time.Duration) error { +func (s *Storage) Set(_ context.Context, key string, value any, expiration time.Duration) error { s.mu.Lock() defer s.mu.Unlock() @@ -70,7 +70,7 @@ func (s *Storage) Set(key string, value any, expiration time.Duration) error { } // SetKeepTTL Sets value without modifying TTL | 设置键值但保持原有TTL不变 -func (s *Storage) SetKeepTTL(key string, value any) error { +func (s *Storage) SetKeepTTL(_ context.Context, key string, value any) error { now := time.Now().Unix() s.mu.Lock() @@ -95,7 +95,7 @@ func (s *Storage) SetKeepTTL(key string, value any) error { } // Get 获取值 -func (s *Storage) Get(key string) (any, error) { +func (s *Storage) Get(_ context.Context, key string) (any, error) { now := time.Now().Unix() s.mu.RLock() @@ -108,7 +108,7 @@ func (s *Storage) Get(key string) (any, error) { if item.isExpired(now) { // 异步删除过期项 - go s.Delete(key) + go s.Delete(context.Background(), key) return nil, ErrKeyExpired } @@ -116,7 +116,7 @@ func (s *Storage) Get(key string) (any, error) { } // GetAndDelete atomically gets the value and deletes the key | 原子获取并删除键 -func (s *Storage) GetAndDelete(key string) (any, error) { +func (s *Storage) GetAndDelete(_ context.Context, key string) (any, error) { now := time.Now().Unix() s.mu.Lock() @@ -139,7 +139,7 @@ func (s *Storage) GetAndDelete(key string) (any, error) { } // Delete 删除键 -func (s *Storage) Delete(keys ...string) error { +func (s *Storage) Delete(_ context.Context, keys ...string) error { s.mu.Lock() defer s.mu.Unlock() @@ -150,7 +150,7 @@ func (s *Storage) Delete(keys ...string) error { } // Exists 检查键是否存在 -func (s *Storage) Exists(key string) bool { +func (s *Storage) Exists(_ context.Context, key string) bool { now := time.Now().Unix() s.mu.RLock() @@ -163,7 +163,7 @@ func (s *Storage) Exists(key string) bool { if item.isExpired(now) { // 异步删除过期项 - go s.Delete(key) + go s.Delete(context.Background(), key) return false } @@ -171,7 +171,7 @@ func (s *Storage) Exists(key string) bool { } // Keys 获取匹配模式的所有键 -func (s *Storage) Keys(pattern string) ([]string, error) { +func (s *Storage) Keys(_ context.Context, pattern string) ([]string, error) { now := time.Now().Unix() s.mu.RLock() @@ -191,7 +191,7 @@ func (s *Storage) Keys(pattern string) ([]string, error) { } // Expire 设置键的过期时间 -func (s *Storage) Expire(key string, expiration time.Duration) error { +func (s *Storage) Expire(_ context.Context, key string, expiration time.Duration) error { s.mu.Lock() defer s.mu.Unlock() @@ -212,7 +212,7 @@ func (s *Storage) Expire(key string, expiration time.Duration) error { } // TTL 获取键的剩余生存时间 -func (s *Storage) TTL(key string) (time.Duration, error) { +func (s *Storage) TTL(_ context.Context, key string) (time.Duration, error) { now := time.Now().Unix() s.mu.RLock() @@ -236,7 +236,7 @@ func (s *Storage) TTL(key string) (time.Duration, error) { } // Clear 清空所有数据 -func (s *Storage) Clear() error { +func (s *Storage) Clear(_ context.Context) error { s.mu.Lock() defer s.mu.Unlock() @@ -245,7 +245,7 @@ func (s *Storage) Clear() error { } // Ping 检查存储可用性 -func (s *Storage) Ping() error { +func (s *Storage) Ping(_ context.Context) error { s.mu.RLock() defer s.mu.RUnlock() diff --git a/storage/redis/redis.go b/storage/redis/redis.go index 8077169..0aada78 100644 --- a/storage/redis/redis.go +++ b/storage/redis/redis.go @@ -11,7 +11,6 @@ import ( // Storage Redis存储实现 type Storage struct { client *redis.Client - ctx context.Context opTimeout time.Duration } @@ -48,7 +47,6 @@ func NewStorage(url string) (*Storage, error) { return &Storage{ client: client, - ctx: ctx, opTimeout: 3 * time.Second, }, nil } @@ -79,7 +77,6 @@ func NewStorageFromConfig(cfg *Config) (*Storage, error) { return &Storage{ client: client, - ctx: ctx, opTimeout: opTimeout, }, nil } @@ -88,7 +85,6 @@ func NewStorageFromConfig(cfg *Config) (*Storage, error) { func NewStorageFromClient(client *redis.Client) *Storage { return &Storage{ client: client, - ctx: context.Background(), opTimeout: 3 * time.Second, } } @@ -99,15 +95,15 @@ func (s *Storage) getKey(key string) string { } // Set 设置键值对 -func (s *Storage) Set(key string, value any, expiration time.Duration) error { - ctx, cancel := s.withTimeout() +func (s *Storage) Set(ctx context.Context, key string, value any, expiration time.Duration) error { + ctx, cancel := s.withTimeoutCtx(ctx) defer cancel() return s.client.Set(ctx, s.getKey(key), value, expiration).Err() } // SetKeepTTL Sets value without modifying TTL | 设置键值但保持原有TTL不变 -func (s *Storage) SetKeepTTL(key string, value any) error { - ctx, cancel := s.withTimeout() +func (s *Storage) SetKeepTTL(ctx context.Context, key string, value any) error { + ctx, cancel := s.withTimeoutCtx(ctx) defer cancel() // 先检查键是否存在,不存在则返回错误(与Memory实现保持一致) @@ -126,8 +122,8 @@ func (s *Storage) SetKeepTTL(key string, value any) error { } // Get 获取值 -func (s *Storage) Get(key string) (any, error) { - ctx, cancel := s.withTimeout() +func (s *Storage) Get(ctx context.Context, key string) (any, error) { + ctx, cancel := s.withTimeoutCtx(ctx) defer cancel() val, err := s.client.Get(ctx, s.getKey(key)).Result() if err == redis.Nil { @@ -140,8 +136,8 @@ func (s *Storage) Get(key string) (any, error) { } // GetAndDelete atomically gets the value and deletes the key | 原子获取并删除键 -func (s *Storage) GetAndDelete(key string) (any, error) { - ctx, cancel := s.withTimeout() +func (s *Storage) GetAndDelete(ctx context.Context, key string) (any, error) { + ctx, cancel := s.withTimeoutCtx(ctx) defer cancel() val, err := s.client.Get(ctx, s.getKey(key)).Result() @@ -158,12 +154,12 @@ func (s *Storage) GetAndDelete(key string) (any, error) { } // Delete 删除键 -func (s *Storage) Delete(keys ...string) error { +func (s *Storage) Delete(ctx context.Context, keys ...string) error { if len(keys) == 0 { return nil } - ctx, cancel := s.withTimeout() + ctx, cancel := s.withTimeoutCtx(ctx) defer cancel() fullKeys := make([]string, len(keys)) @@ -174,8 +170,8 @@ func (s *Storage) Delete(keys ...string) error { } // Exists 检查键是否存在 -func (s *Storage) Exists(key string) bool { - ctx, cancel := s.withTimeout() +func (s *Storage) Exists(ctx context.Context, key string) bool { + ctx, cancel := s.withTimeoutCtx(ctx) defer cancel() result, err := s.client.Exists(ctx, s.getKey(key)).Result() if err != nil { @@ -185,8 +181,8 @@ func (s *Storage) Exists(key string) bool { } // Keys 获取匹配模式的所有键 -func (s *Storage) Keys(pattern string) ([]string, error) { - ctx, cancel := s.withTimeout() +func (s *Storage) Keys(ctx context.Context, pattern string) ([]string, error) { + ctx, cancel := s.withTimeoutCtx(ctx) defer cancel() var ( @@ -211,22 +207,22 @@ func (s *Storage) Keys(pattern string) ([]string, error) { } // Expire 设置键的过期时间 -func (s *Storage) Expire(key string, expiration time.Duration) error { - ctx, cancel := s.withTimeout() +func (s *Storage) Expire(ctx context.Context, key string, expiration time.Duration) error { + ctx, cancel := s.withTimeoutCtx(ctx) defer cancel() return s.client.Expire(ctx, s.getKey(key), expiration).Err() } // TTL 获取键的剩余生存时间 -func (s *Storage) TTL(key string) (time.Duration, error) { - ctx, cancel := s.withTimeout() +func (s *Storage) TTL(ctx context.Context, key string) (time.Duration, error) { + ctx, cancel := s.withTimeoutCtx(ctx) defer cancel() return s.client.TTL(ctx, s.getKey(key)).Result() } // Clear 清空所有数据(警告:会清空整个 Redis,谨慎使用!应由 Manager 层控制) -func (s *Storage) Clear() error { - ctx, cancel := s.withTimeout() +func (s *Storage) Clear(ctx context.Context) error { + ctx, cancel := s.withTimeoutCtx(ctx) defer cancel() var cursor uint64 @@ -250,8 +246,8 @@ func (s *Storage) Clear() error { } // Ping 检查连接 -func (s *Storage) Ping() error { - ctx, cancel := s.withTimeout() +func (s *Storage) Ping(ctx context.Context) error { + ctx, cancel := s.withTimeoutCtx(ctx) defer cancel() return s.client.Ping(ctx).Err() } @@ -266,12 +262,13 @@ func (s *Storage) GetClient() *redis.Client { return s.client } -// withTimeout returns a context with the configured per-operation timeout. -func (s *Storage) withTimeout() (context.Context, context.CancelFunc) { +// withTimeoutCtx returns a context with the configured per-operation timeout. +// If the parent context has a shorter deadline, it will be respected. +func (s *Storage) withTimeoutCtx(parent context.Context) (context.Context, context.CancelFunc) { if s.opTimeout > 0 { - return context.WithTimeout(s.ctx, s.opTimeout) + return context.WithTimeout(parent, s.opTimeout) } - return context.WithCancel(s.ctx) + return context.WithCancel(parent) } // Builder Redis存储构建器 diff --git a/stputil/stputil.go b/stputil/stputil.go index 8d7701c..72dd6f5 100644 --- a/stputil/stputil.go +++ b/stputil/stputil.go @@ -43,7 +43,7 @@ func LoginByToken(ctx context.Context, tokenValue string, authType ...string) er return err } - return mgr.LoginByToken(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + return mgr.LoginByToken(ctx, tokenValue) } // Logout performs user logout | 用户登出 @@ -67,7 +67,7 @@ func LogoutByToken(ctx context.Context, tokenValue string, authType ...string) e return err } - return mgr.LogoutByToken(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + return mgr.LogoutByToken(ctx, tokenValue) } // Kickout kicks out a user session | 踢人下线 @@ -91,7 +91,7 @@ func KickoutByToken(ctx context.Context, tokenValue string, authType ...string) return err } - return mgr.KickoutByToken(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + return mgr.KickoutByToken(ctx, tokenValue) } // Replace user offline by login ID and device | 根据账号和设备顶人下线 @@ -115,7 +115,7 @@ func ReplaceByToken(ctx context.Context, tokenValue string, authType ...string) return err } - return mgr.ReplaceByToken(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + return mgr.ReplaceByToken(ctx, tokenValue) } // ============ Token Validation | Token验证 ============ @@ -127,7 +127,7 @@ func IsLogin(ctx context.Context, tokenValue string, authType ...string) bool { return false } - return mgr.IsLogin(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + return mgr.IsLogin(ctx, tokenValue) } // CheckLogin checks login status (throws error if not logged in) | 检查登录状态(未登录抛出错误) @@ -137,7 +137,7 @@ func CheckLogin(ctx context.Context, tokenValue string, authType ...string) erro return err } - return mgr.CheckLogin(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + return mgr.CheckLogin(ctx, tokenValue) } // CheckLoginWithState checks the login status (returns error to determine the reason if not logged in) | 检查登录状态(未登录时根据错误确定原因) @@ -147,7 +147,7 @@ func CheckLoginWithState(ctx context.Context, tokenValue string, authType ...str return false, err } - return mgr.CheckLoginWithState(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + return mgr.CheckLoginWithState(ctx, tokenValue) } // GetLoginID gets the login ID from token | 从Token获取登录ID @@ -157,7 +157,7 @@ func GetLoginID(ctx context.Context, tokenValue string, authType ...string) (str return "", err } - return mgr.GetLoginID(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + return mgr.GetLoginID(ctx, tokenValue) } // GetLoginIDNotCheck gets login ID without checking | 获取登录ID(不检查登录状态) @@ -167,7 +167,7 @@ func GetLoginIDNotCheck(ctx context.Context, tokenValue string, authType ...stri return "", err } - return mgr.GetLoginIDNotCheck(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + return mgr.GetLoginIDNotCheck(ctx, tokenValue) } // GetTokenValue gets the token value for a login ID | 获取登录ID对应的Token值 @@ -191,7 +191,7 @@ func GetTokenInfo(ctx context.Context, tokenValue string, authType ...string) (* return nil, err } - return mgr.GetTokenInfo(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + return mgr.GetTokenInfoByToken(ctx, tokenValue) } // ============ Account Disable | 账号封禁 ============ @@ -217,7 +217,7 @@ func DisableByToken(ctx context.Context, tokenValue string, duration time.Durati return err } - loginID, err := mgr.GetLoginIDNotCheck(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + loginID, err := mgr.GetLoginIDNotCheck(ctx, tokenValue) if err != nil { return err } @@ -245,7 +245,7 @@ func UntieByToken(ctx context.Context, tokenValue string, authType ...string) er return err } - loginID, err := mgr.GetLoginIDNotCheck(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + loginID, err := mgr.GetLoginIDNotCheck(ctx, tokenValue) if err != nil { return err } @@ -273,7 +273,7 @@ func IsDisableByToken(ctx context.Context, tokenValue string, authType ...string return false } - loginID, err := mgr.GetLoginIDNotCheck(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + loginID, err := mgr.GetLoginIDNotCheck(ctx, tokenValue) if err != nil { return false } @@ -291,7 +291,7 @@ func GetDisableTime(ctx context.Context, loginID interface{}, authType ...string if id, err := toString(loginID); err != nil { return 0, err } else { - return mgr.GetDisableTime(ctx, id) + return mgr.GetDisableTTL(ctx, id) } } @@ -301,12 +301,41 @@ func GetDisableTimeByToken(ctx context.Context, tokenValue string, authType ...s return 0, err } - loginID, err := mgr.GetLoginIDNotCheck(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + loginID, err := mgr.GetLoginIDNotCheck(ctx, tokenValue) if err != nil { return 0, err } - return mgr.GetDisableTime(ctx, loginID) + return mgr.GetDisableTTL(ctx, loginID) +} + +// CheckDisableWithInfo gets disable info | 获取封禁信息 +func CheckDisableWithInfo(ctx context.Context, loginID interface{}, authType ...string) (*manager.DisableInfo, error) { + mgr, err := GetManager(authType...) + if err != nil { + return nil, err + } + + if id, err := toString(loginID); err != nil { + return nil, err + } else { + return mgr.CheckDisableWithInfo(ctx, id) + } +} + +// CheckDisableWithInfoByToken gets disable info by token | 根据Token获取封禁信息 +func CheckDisableWithInfoByToken(ctx context.Context, tokenValue string, authType ...string) (*manager.DisableInfo, error) { + mgr, err := GetManager(authType...) + if err != nil { + return nil, err + } + + loginID, err := mgr.GetLoginIDNotCheck(ctx, tokenValue) + if err != nil { + return nil, err + } + + return mgr.CheckDisableWithInfo(ctx, loginID) } // ============ Session Management | Session管理 ============ @@ -332,7 +361,7 @@ func GetSessionByToken(ctx context.Context, tokenValue string, authType ...strin return nil, err } - return mgr.GetSessionByToken(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + return mgr.GetSessionByToken(ctx, tokenValue) } // DeleteSession deletes a session | 删除Session @@ -356,7 +385,50 @@ func DeleteSessionByToken(ctx context.Context, tokenValue string, authType ...st return err } - return mgr.DeleteSessionByToken(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + return mgr.DeleteSessionByToken(ctx, tokenValue) +} + +// HasSession checks if session exists | 检查Session是否存在 +func HasSession(ctx context.Context, loginID interface{}, authType ...string) bool { + mgr, err := GetManager(authType...) + if err != nil { + return false + } + + if id, err := toString(loginID); err != nil { + return false + } else { + return mgr.HasSession(ctx, id) + } +} + +// RenewSession renews session TTL | 续期Session +func RenewSession(ctx context.Context, loginID interface{}, ttl time.Duration, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err + } + + if id, err := toString(loginID); err != nil { + return err + } else { + return mgr.RenewSession(ctx, id, ttl) + } +} + +// RenewSessionByToken renews session TTL by token | 根据Token续期Session +func RenewSessionByToken(ctx context.Context, tokenValue string, ttl time.Duration, authType ...string) error { + mgr, err := GetManager(authType...) + if err != nil { + return err + } + + loginID, err := mgr.GetLoginIDNotCheck(ctx, tokenValue) + if err != nil { + return err + } + + return mgr.RenewSession(ctx, loginID, ttl) } // ============ Permission Verification | 权限验证 ============ @@ -383,7 +455,7 @@ func SetPermissionsByToken(ctx context.Context, tokenValue string, permissions [ } loginID, err := mgr.GetLoginIDNotCheck( - context.WithValue(ctx, config.CtxTokenValue, tokenValue), + ctx, tokenValue, ) if err != nil { return err @@ -414,7 +486,7 @@ func RemovePermissionsByToken(ctx context.Context, tokenValue string, permission } loginID, err := mgr.GetLoginIDNotCheck( - context.WithValue(ctx, config.CtxTokenValue, tokenValue), + ctx, tokenValue, ) if err != nil { return err @@ -445,7 +517,7 @@ func GetPermissionsByToken(ctx context.Context, tokenValue string, authType ...s } loginID, err := mgr.GetLoginIDNotCheck( - context.WithValue(ctx, config.CtxTokenValue, tokenValue), + ctx, tokenValue, ) if err != nil { return nil, err @@ -475,7 +547,7 @@ func HasPermissionByToken(ctx context.Context, tokenValue string, permission str return false } - loginID, err := mgr.GetLoginIDNotCheck(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + loginID, err := mgr.GetLoginIDNotCheck(ctx, tokenValue) if err != nil { return false } @@ -504,7 +576,7 @@ func HasPermissionsAndByToken(ctx context.Context, tokenValue string, permission return false } - loginID, err := mgr.GetLoginIDNotCheck(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + loginID, err := mgr.GetLoginIDNotCheck(ctx, tokenValue) if err != nil { return false } @@ -533,7 +605,7 @@ func HasPermissionsOrByToken(ctx context.Context, tokenValue string, permissions return false } - loginID, err := mgr.GetLoginIDNotCheck(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + loginID, err := mgr.GetLoginIDNotCheck(ctx, tokenValue) if err != nil { return false } @@ -565,7 +637,7 @@ func SetRolesByToken(ctx context.Context, tokenValue string, roles []string, aut } loginID, err := mgr.GetLoginIDNotCheck( - context.WithValue(ctx, config.CtxTokenValue, tokenValue), + ctx, tokenValue, ) if err != nil { return err @@ -596,7 +668,7 @@ func RemoveRolesByToken(ctx context.Context, tokenValue string, roles []string, } loginID, err := mgr.GetLoginIDNotCheck( - context.WithValue(ctx, config.CtxTokenValue, tokenValue), + ctx, tokenValue, ) if err != nil { return err @@ -627,7 +699,7 @@ func GetRolesByToken(ctx context.Context, tokenValue string, authType ...string) } loginID, err := mgr.GetLoginIDNotCheck( - context.WithValue(ctx, config.CtxTokenValue, tokenValue), + ctx, tokenValue, ) if err != nil { return nil, err @@ -658,7 +730,7 @@ func HasRoleByToken(ctx context.Context, tokenValue string, role string, authTyp } loginID, err := mgr.GetLoginIDNotCheck( - context.WithValue(ctx, config.CtxTokenValue, tokenValue), + ctx, tokenValue, ) if err != nil { return false @@ -689,7 +761,7 @@ func HasRolesAndByToken(ctx context.Context, tokenValue string, roles []string, } loginID, err := mgr.GetLoginIDNotCheck( - context.WithValue(ctx, config.CtxTokenValue, tokenValue), + ctx, tokenValue, ) if err != nil { return false @@ -720,7 +792,7 @@ func HasRolesOrByToken(ctx context.Context, tokenValue string, roles []string, a } loginID, err := mgr.GetLoginIDNotCheck( - context.WithValue(ctx, config.CtxTokenValue, tokenValue), + ctx, tokenValue, ) if err != nil { return false @@ -738,7 +810,7 @@ func SetTokenTag(ctx context.Context, tokenValue, tag string, authType ...string return err } - return mgr.SetTokenTag(context.WithValue(ctx, config.CtxTokenValue, tokenValue), tag) + return mgr.SetTokenTag(tag) } // GetTokenTag 获取Token标签 @@ -748,7 +820,7 @@ func GetTokenTag(ctx context.Context, tokenValue string, authType ...string) (st return "", err } - return mgr.GetTokenTag(context.WithValue(ctx, config.CtxTokenValue, tokenValue)) + return mgr.GetTokenTag(ctx) } // ============ 会话查询 ============ @@ -790,7 +862,7 @@ func Generate(ctx context.Context, authType ...string) (string, error) { return "", err } - return mgr.GetNonceManager().Generate() + return mgr.SecurityGenerateNonce(ctx) } // Verify Verifies a nonce | 验证随机数 @@ -800,7 +872,7 @@ func Verify(ctx context.Context, nonce string, authType ...string) bool { return false } - return mgr.GetNonceManager().Verify(nonce) + return mgr.SecurityVerifyNonce(ctx, nonce) } // VerifyAndConsume Verifies and consumes nonce, returns error if invalid | 验证并消费nonce,无效时返回错误 @@ -810,7 +882,7 @@ func VerifyAndConsume(ctx context.Context, nonce string, authType ...string) err return err } - return mgr.GetNonceManager().VerifyAndConsume(nonce) + return mgr.SecurityVerifyAndConsumeNonce(ctx, nonce) } // IsValidNonce Checks if nonce is valid without consuming it | 检查nonce是否有效(不消费) @@ -820,7 +892,7 @@ func IsValidNonce(ctx context.Context, nonce string, authType ...string) bool { return false } - return mgr.GetNonceManager().IsValid(nonce) + return mgr.SecurityIsValidNonce(ctx, nonce) } // GenerateTokenPair Create access + refresh token | 生成访问令牌和刷新令牌 @@ -833,7 +905,7 @@ func GenerateTokenPair(ctx context.Context, loginID interface{}, deviceOrAutoTyp if id, err := toString(loginID); err != nil { return nil, err } else { - return mgr.GetRefreshManager().GenerateTokenPair(id, mgr.GetDevice(deviceOrAutoType)) + return mgr.SecurityGenerateTokenPair(ctx, id, mgr.GetDevice(deviceOrAutoType)) } } @@ -844,7 +916,7 @@ func VerifyAccessToken(ctx context.Context, accessToken string, authType ...stri return false } - return mgr.GetRefreshManager().VerifyAccessToken(accessToken) + return mgr.SecurityVerifyAccessToken(ctx, accessToken) } // VerifyAccessTokenAndGetInfo verifies access token and returns token info | 验证访问令牌并返回Token信息 @@ -854,7 +926,7 @@ func VerifyAccessTokenAndGetInfo(ctx context.Context, accessToken string, authTy return nil, false } - return mgr.GetRefreshManager().VerifyAccessTokenAndGetInfo(accessToken) + return mgr.SecurityVerifyAccessTokenAndGetInfo(ctx, accessToken) } // GetRefreshTokenInfo gets refresh token information | 获取刷新令牌信息 @@ -864,7 +936,17 @@ func GetRefreshTokenInfo(ctx context.Context, refreshToken string, authType ...s return nil, err } - return mgr.GetRefreshManager().GetRefreshTokenInfo(refreshToken) + return mgr.SecurityGetRefreshTokenInfo(ctx, refreshToken) +} + +// RefreshAccessToken refreshes access token using refresh token | 使用刷新令牌刷新访问令牌 +func RefreshAccessToken(ctx context.Context, refreshToken string, authType ...string) (*security.RefreshTokenInfo, error) { + mgr, err := GetManager(authType...) + if err != nil { + return nil, err + } + + return mgr.SecurityRefreshAccessToken(ctx, refreshToken) } // RevokeRefreshToken Revokes refresh token | 撤销刷新令牌 @@ -874,7 +956,7 @@ func RevokeRefreshToken(ctx context.Context, refreshToken string, authType ...st return err } - return mgr.GetRefreshManager().RevokeRefreshToken(refreshToken) + return mgr.SecurityRevokeRefreshToken(ctx, refreshToken) } // IsValid checks whether token is valid | 检查Token是否有效 @@ -884,7 +966,7 @@ func IsValid(ctx context.Context, refreshToken string, authType ...string) bool return false } - return mgr.GetRefreshManager().IsValid(refreshToken) + return mgr.SecurityIsRefreshTokenValid(ctx, refreshToken) } // ============ OAuth2 Features | OAuth2 功能 ============ @@ -896,7 +978,7 @@ func RegisterClient(ctx context.Context, client *oauth2.Client, authType ...stri return err } - return mgr.GetOAuth2Server().RegisterClient(client) + return mgr.OAuth2RegisterClient(client) } // UnregisterClient unregisters an OAuth2 client | 注销OAuth2客户端 @@ -906,7 +988,7 @@ func UnregisterClient(ctx context.Context, clientID string, authType ...string) return err } - mgr.GetOAuth2Server().UnregisterClient(clientID) + mgr.OAuth2UnregisterClient(clientID) return nil } @@ -918,7 +1000,7 @@ func GetClient(ctx context.Context, clientID string, authType ...string) (*oauth return nil, err } - return mgr.GetOAuth2Server().GetClient(clientID) + return mgr.OAuth2GetClient(clientID) } // GenerateAuthorizationCode creates an authorization code | 创建授权码 @@ -928,7 +1010,7 @@ func GenerateAuthorizationCode(ctx context.Context, clientID, loginID, redirectU return nil, err } - return mgr.GetOAuth2Server().GenerateAuthorizationCode(clientID, loginID, redirectURI, scope) + return mgr.OAuth2GenerateAuthorizationCode(ctx, clientID, loginID, redirectURI, scope) } // ExchangeCodeForToken exchanges authorization code for token | 使用授权码换取令牌 @@ -938,27 +1020,37 @@ func ExchangeCodeForToken(ctx context.Context, code, clientID, clientSecret, red return nil, err } - return mgr.GetOAuth2Server().ExchangeCodeForToken(code, clientID, clientSecret, redirectURI) + return mgr.OAuth2ExchangeCodeForToken(ctx, code, clientID, clientSecret, redirectURI) } // ValidateAccessToken verifies OAuth2 access token | 验证OAuth2访问令牌 -func ValidateAccessToken(ctx context.Context, accessToken string, authType ...string) (*oauth2.AccessToken, error) { +func ValidateAccessToken(ctx context.Context, accessToken string, authType ...string) bool { + mgr, err := GetManager(authType...) + if err != nil { + return false + } + + return mgr.OAuth2ValidateAccessToken(ctx, accessToken) +} + +// ValidateAccessTokenAndGetInfo verifies OAuth2 access token and get info | 验证OAuth2访问令牌并获取信息 +func ValidateAccessTokenAndGetInfo(ctx context.Context, accessToken string, authType ...string) (*oauth2.AccessToken, error) { mgr, err := GetManager(authType...) if err != nil { return nil, err } - return mgr.GetOAuth2Server().ValidateAccessToken(accessToken) + return mgr.OAuth2ValidateAccessTokenAndGetInfo(ctx, accessToken) } -// RefreshAccessToken Refreshes access token using refresh token | 使用刷新令牌刷新访问令牌 -func RefreshAccessToken(ctx context.Context, refreshToken, clientID, clientSecret string, authType ...string) (*oauth2.AccessToken, error) { +// OAuth2RefreshAccessToken Refreshes access token using refresh token | 使用刷新令牌刷新访问令牌(OAuth2) +func OAuth2RefreshAccessToken(ctx context.Context, clientID, refreshToken, clientSecret string, authType ...string) (*oauth2.AccessToken, error) { mgr, err := GetManager(authType...) if err != nil { return nil, err } - return mgr.GetOAuth2Server().RefreshAccessToken(refreshToken, clientID, clientSecret) + return mgr.OAuth2RefreshAccessToken(ctx, clientID, refreshToken, clientSecret) } // RevokeToken Revokes access token and its refresh token | 撤销访问令牌及其刷新令牌 @@ -968,7 +1060,7 @@ func RevokeToken(ctx context.Context, accessToken string, authType ...string) er return err } - return mgr.GetOAuth2Server().RevokeToken(accessToken) + return mgr.OAuth2RevokeToken(ctx, accessToken) } // ============ Public Getters | 公共获取器 ============ @@ -1063,6 +1155,143 @@ func GetOAuth2Server(ctx context.Context, authType ...string) *oauth2.OAuth2Serv return mgr.GetOAuth2Server() } +// ============ Event Management | 事件管理 ============ + +// RegisterFunc registers a function as an event listener | 注册函数作为事件监听器 +func RegisterFunc(event listener.Event, fn func(*listener.EventData), authType ...string) { + mgr, err := GetManager(authType...) + if err != nil { + return + } + mgr.RegisterFunc(event, fn) +} + +// Register registers an event listener | 注册事件监听器 +func Register(event listener.Event, l listener.Listener, authType ...string) string { + mgr, err := GetManager(authType...) + if err != nil { + return "" + } + return mgr.Register(event, l) +} + +// RegisterWithConfig registers an event listener with config | 注册带配置的事件监听器 +func RegisterWithConfig(event listener.Event, l listener.Listener, config listener.ListenerConfig, authType ...string) string { + mgr, err := GetManager(authType...) + if err != nil { + return "" + } + return mgr.RegisterWithConfig(event, l, config) +} + +// Unregister removes an event listener by ID | 根据ID移除事件监听器 +func Unregister(id string, authType ...string) bool { + mgr, err := GetManager(authType...) + if err != nil { + return false + } + return mgr.Unregister(id) +} + +// TriggerEvent manually triggers an event | 手动触发事件 +func TriggerEvent(data *listener.EventData, authType ...string) { + mgr, err := GetManager(authType...) + if err != nil { + return + } + mgr.TriggerEvent(data) +} + +// TriggerEventAsync triggers an event asynchronously and returns immediately | 异步触发事件并立即返回 +func TriggerEventAsync(data *listener.EventData, authType ...string) { + mgr, err := GetManager(authType...) + if err != nil { + return + } + mgr.TriggerEventAsync(data) +} + +// TriggerEventSync triggers an event synchronously and waits for all listeners | 同步触发事件并等待所有监听器完成 +func TriggerEventSync(data *listener.EventData, authType ...string) { + mgr, err := GetManager(authType...) + if err != nil { + return + } + mgr.TriggerEventSync(data) +} + +// WaitEvents waits for all async event listeners to complete | 等待所有异步事件监听器完成 +func WaitEvents(authType ...string) { + mgr, err := GetManager(authType...) + if err != nil { + return + } + mgr.WaitEvents() +} + +// ClearEventListeners removes all listeners for a specific event | 清除指定事件的所有监听器 +func ClearEventListeners(event listener.Event, authType ...string) { + mgr, err := GetManager(authType...) + if err != nil { + return + } + mgr.ClearEventListeners(event) +} + +// ClearAllEventListeners removes all listeners | 清除所有事件监听器 +func ClearAllEventListeners(authType ...string) { + mgr, err := GetManager(authType...) + if err != nil { + return + } + mgr.ClearAllEventListeners() +} + +// CountEventListeners returns the number of listeners for a specific event | 获取指定事件监听器数量 +func CountEventListeners(event listener.Event, authType ...string) int { + mgr, err := GetManager(authType...) + if err != nil { + return 0 + } + return mgr.CountEventListeners(event) +} + +// CountAllListeners returns the total number of registered listeners | 获取已注册监听器总数 +func CountAllListeners(authType ...string) int { + mgr, err := GetManager(authType...) + if err != nil { + return 0 + } + return mgr.CountAllListeners() +} + +// GetEventListenerIDs returns all listener IDs for a specific event | 获取指定事件的所有监听器ID +func GetEventListenerIDs(event listener.Event, authType ...string) []string { + mgr, err := GetManager(authType...) + if err != nil { + return nil + } + return mgr.GetEventListenerIDs(event) +} + +// GetAllRegisteredEvents returns all events that have registered listeners | 获取所有已注册事件 +func GetAllRegisteredEvents(authType ...string) []listener.Event { + mgr, err := GetManager(authType...) + if err != nil { + return nil + } + return mgr.GetAllRegisteredEvents() +} + +// HasEventListeners checks if there are any listeners for a specific event | 检查指定事件是否有监听器 +func HasEventListeners(event listener.Event, authType ...string) bool { + mgr, err := GetManager(authType...) + if err != nil { + return false + } + return mgr.HasEventListeners(event) +} + // ============ Check Functions for Token-based operations | 基于Token的检查函数 ============ // CheckDisable checks if the account associated with the token is disabled | 检查Token对应账号是否被封禁 From eee6339c13af565161433eba1461595ac4f092d5 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Fri, 26 Dec 2025 12:40:32 +0800 Subject: [PATCH 26/50] =?UTF-8?q?feat():=201=E3=80=81=E5=AE=8C=E5=96=84gin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- integrations/gin/context.go | 75 ++- integrations/gin/export.go | 890 ++++++++++++++++++++++++++++++++- integrations/gin/middleware.go | 128 +++-- 3 files changed, 1001 insertions(+), 92 deletions(-) diff --git a/integrations/gin/context.go b/integrations/gin/context.go index 55dffed..042bfd6 100644 --- a/integrations/gin/context.go +++ b/integrations/gin/context.go @@ -7,7 +7,6 @@ import ( "github.com/gin-gonic/gin" ) -// GinContext Gin request context adapter | Gin请求上下文适配器 type GinContext struct { c *gin.Context aborted bool @@ -15,59 +14,61 @@ type GinContext struct { // NewGinContext creates a Gin context adapter | 创建Gin上下文适配器 func NewGinContext(c *gin.Context) adapter.RequestContext { - return &GinContext{c: c} + return &GinContext{ + c: c, + } } -// GetHeader gets request header | 获取请求头 -func (g *GinContext) GetHeader(key string) string { - return g.c.GetHeader(key) +// Get implements adapter.RequestContext. +func (g *GinContext) Get(key string) (interface{}, bool) { + return g.c.Get(key) } -// GetQuery gets query parameter | 获取查询参数 -func (g *GinContext) GetQuery(key string) string { - return g.c.Query(key) +// GetClientIP implements adapter.RequestContext. +func (g *GinContext) GetClientIP() string { + return g.c.ClientIP() } -// GetCookie gets cookie | 获取Cookie +// GetCookie implements adapter.RequestContext. func (g *GinContext) GetCookie(key string) string { cookie, _ := g.c.Cookie(key) return cookie } -// SetHeader sets response header | 设置响应头 -func (g *GinContext) SetHeader(key, value string) { - g.c.Header(key, value) -} - -// SetCookie sets cookie | 设置Cookie -func (g *GinContext) SetCookie(name, value string, maxAge int, path, domain string, secure, httpOnly bool) { - g.c.SetCookie(name, value, maxAge, path, domain, secure, httpOnly) - g.c.SetSameSite(http.SameSiteLaxMode) -} - -// GetClientIP gets client IP address | 获取客户端IP地址 -func (g *GinContext) GetClientIP() string { - return g.c.ClientIP() +// GetHeader implements adapter.RequestContext. +func (g *GinContext) GetHeader(key string) string { + return g.c.GetHeader(key) } -// GetMethod gets request method | 获取请求方法 +// GetMethod implements adapter.RequestContext. func (g *GinContext) GetMethod() string { return g.c.Request.Method } -// GetPath gets request path | 获取请求路径 +// GetPath implements adapter.RequestContext. func (g *GinContext) GetPath() string { return g.c.Request.URL.Path } -// Set sets context value | 设置上下文值 +// GetQuery implements adapter.RequestContext. +func (g *GinContext) GetQuery(key string) string { + return g.c.Query(key) +} + +// Set implements adapter.RequestContext. func (g *GinContext) Set(key string, value interface{}) { g.c.Set(key, value) } -// Get gets context value | 获取上下文值 -func (g *GinContext) Get(key string) (interface{}, bool) { - return g.c.Get(key) +// SetCookie implements adapter.RequestContext. +func (g *GinContext) SetCookie(name string, value string, maxAge int, path string, domain string, secure bool, httpOnly bool) { + g.c.SetCookie(name, value, maxAge, path, domain, secure, httpOnly) + g.c.SetSameSite(http.SameSiteLaxMode) +} + +// SetHeader implements adapter.RequestContext. +func (g *GinContext) SetHeader(key string, value string) { + g.c.Header(key, value) } // ============ Additional Required Methods | 额外必需的方法 ============ @@ -113,7 +114,7 @@ func (g *GinContext) SetCookieWithOptions(options *adapter.CookieOptions) { options.Secure, options.HttpOnly, ) - + // Set SameSite attribute switch options.SameSite { case "Strict": @@ -127,23 +128,17 @@ func (g *GinContext) SetCookieWithOptions(options *adapter.CookieOptions) { // GetString implements adapter.RequestContext. func (g *GinContext) GetString(key string) string { - value, exists := g.c.Get(key) - if !exists { - return "" - } - if str, ok := value.(string); ok { - return str - } - return "" + v := g.c.GetString(key) + return v } // MustGet implements adapter.RequestContext. func (g *GinContext) MustGet(key string) any { - value, exists := g.c.Get(key) + v, exists := g.c.Get(key) if !exists { panic("key not found: " + key) } - return value + return v } // Abort implements adapter.RequestContext. diff --git a/integrations/gin/export.go b/integrations/gin/export.go index 74ea0cb..4b44fea 100644 --- a/integrations/gin/export.go +++ b/integrations/gin/export.go @@ -1,51 +1,931 @@ package gin import ( + "context" + "time" + + "github.com/click33/sa-token-go/codec/json" + "github.com/click33/sa-token-go/codec/msgpack" "github.com/click33/sa-token-go/core" + "github.com/click33/sa-token-go/core/adapter" "github.com/click33/sa-token-go/core/builder" "github.com/click33/sa-token-go/core/config" + "github.com/click33/sa-token-go/core/listener" "github.com/click33/sa-token-go/core/manager" + "github.com/click33/sa-token-go/core/oauth2" + "github.com/click33/sa-token-go/core/security" + "github.com/click33/sa-token-go/core/session" + "github.com/click33/sa-token-go/generator/sgenerator" + "github.com/click33/sa-token-go/log/nop" "github.com/click33/sa-token-go/log/slog" "github.com/click33/sa-token-go/pool/ants" + "github.com/click33/sa-token-go/storage/memory" + "github.com/click33/sa-token-go/storage/redis" "github.com/click33/sa-token-go/stputil" + goredis "github.com/redis/go-redis/v9" +) + +// ============ Type Aliases | 类型别名 ============ + +type ( + // Config 配置 + Config = config.Config + // Manager 管理器 + Manager = manager.Manager + // Session 会话 + Session = session.Session + // TokenInfo Token信息 + TokenInfo = manager.TokenInfo + // DisableInfo 封禁信息 + DisableInfo = manager.DisableInfo + // Builder 构建器 + Builder = builder.Builder + // SaTokenError 错误类型 + SaTokenError = core.SaTokenError + // Event 事件类型 + Event = listener.Event + // EventData 事件数据 + EventData = listener.EventData + // Listener 事件监听器 + Listener = listener.Listener + // ListenerConfig 监听器配置 + ListenerConfig = listener.ListenerConfig + // RefreshTokenInfo 刷新令牌信息 + RefreshTokenInfo = security.RefreshTokenInfo + // AccessTokenInfo 访问令牌信息 + AccessTokenInfo = security.AccessTokenInfo + // OAuth2Client OAuth2客户端 + OAuth2Client = oauth2.Client + // OAuth2AccessToken OAuth2访问令牌 + OAuth2AccessToken = oauth2.AccessToken + // AuthorizationCode 授权码 + AuthorizationCode = oauth2.AuthorizationCode + // Storage 存储接口 + Storage = adapter.Storage + // Codec 编解码接口 + Codec = adapter.Codec + // Log 日志接口 + Log = adapter.Log + // Pool 协程池接口 + Pool = adapter.Pool + // Generator 生成器接口 + Generator = adapter.Generator + + // ============ Codec Types | 编解码器类型 ============ + + // JSONSerializer JSON编解码器 + JSONSerializer = json.JSONSerializer + // MsgPackSerializer MsgPack编解码器 + MsgPackSerializer = msgpack.MsgPackSerializer + + // ============ Storage Types | 存储类型 ============ + + // MemoryStorage 内存存储 + MemoryStorage = memory.Storage + // RedisStorage Redis存储 + RedisStorage = redis.Storage + // RedisConfig Redis配置 + RedisConfig = redis.Config + // RedisBuilder Redis构建器 + RedisBuilder = redis.Builder + // RedisClient Redis客户端 (go-redis/v9) + RedisClient = goredis.Client + // RedisOptions Redis连接选项 (go-redis/v9) + RedisOptions = goredis.Options + + // ============ Logger Types | 日志类型 ============ + + // SlogLogger 标准日志实现 + SlogLogger = slog.Logger + // SlogLoggerConfig 标准日志配置 + SlogLoggerConfig = slog.LoggerConfig + // SlogLogLevel 日志级别 + SlogLogLevel = slog.LogLevel + // NopLogger 空日志实现 + NopLogger = nop.NopLogger + + // ============ Generator Types | 生成器类型 ============ + + // TokenGenerator Token生成器 + TokenGenerator = sgenerator.Generator + // TokenStyle Token风格 + TokenStyle = sgenerator.TokenStyle + + // ============ Pool Types | 协程池类型 ============ + + // RenewPoolManager 续期池管理器 + RenewPoolManager = ants.RenewPoolManager + // RenewPoolConfig 续期池配置 + RenewPoolConfig = ants.RenewPoolConfig +) + +// ============ Error Codes | 错误码 ============ + +const ( + CodeSuccess = core.CodeSuccess + CodeBadRequest = core.CodeBadRequest + CodeNotLogin = core.CodeNotLogin + CodePermissionDenied = core.CodePermissionDenied + CodeNotFound = core.CodeNotFound + CodeServerError = core.CodeServerError + CodeTokenInvalid = core.CodeTokenInvalid + CodeTokenExpired = core.CodeTokenExpired + CodeAccountDisabled = core.CodeAccountDisabled + CodeKickedOut = core.CodeKickedOut + CodeActiveTimeout = core.CodeActiveTimeout + CodeMaxLoginCount = core.CodeMaxLoginCount + CodeStorageError = core.CodeStorageError + CodeInvalidParameter = core.CodeInvalidParameter + CodeSessionError = core.CodeSessionError +) + +// ============ Errors | 错误变量 ============ + +var ( + // Authentication Errors | 认证错误 + ErrNotLogin = core.ErrNotLogin + ErrTokenInvalid = core.ErrTokenInvalid + ErrTokenExpired = core.ErrTokenExpired + ErrTokenKickout = core.ErrTokenKickout + ErrTokenReplaced = core.ErrTokenReplaced + ErrInvalidLoginID = core.ErrInvalidLoginID + ErrInvalidDevice = core.ErrInvalidDevice + ErrTokenNotFound = core.ErrTokenNotFound + + // Authorization Errors | 授权错误 + ErrPermissionDenied = core.ErrPermissionDenied + ErrRoleDenied = core.ErrRoleDenied + + // Account Errors | 账号错误 + ErrAccountDisabled = core.ErrAccountDisabled + ErrAccountNotFound = core.ErrAccountNotFound + ErrLoginLimitExceeded = core.ErrLoginLimitExceeded + + // Session Errors | 会话错误 + ErrSessionNotFound = core.ErrSessionNotFound + ErrActiveTimeout = core.ErrActiveTimeout + ErrSessionInvalidDataKey = core.ErrSessionInvalidDataKey + ErrSessionIDEmpty = core.ErrSessionIDEmpty + + // Security Errors | 安全错误 + ErrInvalidNonce = core.ErrInvalidNonce + ErrRefreshTokenExpired = core.ErrRefreshTokenExpired + ErrNonceInvalidRefreshToken = core.ErrNonceInvalidRefreshToken + ErrInvalidLoginIDEmpty = core.ErrInvalidLoginIDEmpty + + // OAuth2 Errors | OAuth2错误 + ErrClientOrClientIDEmpty = core.ErrClientOrClientIDEmpty + ErrClientNotFound = core.ErrClientNotFound + ErrUserIDEmpty = core.ErrUserIDEmpty + ErrInvalidRedirectURI = core.ErrInvalidRedirectURI + ErrInvalidClientCredentials = core.ErrInvalidClientCredentials + ErrInvalidAuthCode = core.ErrInvalidAuthCode + ErrAuthCodeUsed = core.ErrAuthCodeUsed + ErrAuthCodeExpired = core.ErrAuthCodeExpired + ErrClientMismatch = core.ErrClientMismatch + ErrRedirectURIMismatch = core.ErrRedirectURIMismatch + ErrInvalidAccessToken = core.ErrInvalidAccessToken + ErrInvalidRefreshToken = core.ErrInvalidRefreshToken + ErrInvalidScope = core.ErrInvalidScope + + // System Errors | 系统错误 + ErrStorageUnavailable = core.ErrStorageUnavailable + ErrSerializeFailed = core.ErrSerializeFailed + ErrDeserializeFailed = core.ErrDeserializeFailed + ErrTypeConvert = core.ErrTypeConvert ) +// ============ Error Constructors | 错误构造函数 ============ + var ( - ErrNotLogin = core.ErrNotLogin // token has been kicked out | Token 已被踢下线 - ErrTokenKickout = core.ErrTokenKickout // token has been kicked out | Token 已被踢下线 - ErrTokenReplaced = core.ErrTokenReplaced // token has been replaced | Token 已被顶下线 - ErrAccountDisabled = core.ErrAccountDisabled // account is disabled | 账号已被禁用 - ErrLoginLimitExceeded = manager.ErrLoginLimitExceeded // login count exceeds the maximum limit | 超出最大登录数量限制 + NewError = core.NewError + NewErrorWithContext = core.NewErrorWithContext + NewNotLoginError = core.NewNotLoginError + NewPermissionDeniedError = core.NewPermissionDeniedError + NewRoleDeniedError = core.NewRoleDeniedError + NewAccountDisabledError = core.NewAccountDisabledError ) +// ============ Error Checking Helpers | 错误检查辅助函数 ============ + +var ( + IsNotLoginError = core.IsNotLoginError + IsPermissionDeniedError = core.IsPermissionDeniedError + IsAccountDisabledError = core.IsAccountDisabledError + IsTokenError = core.IsTokenError + GetErrorCode = core.GetErrorCode +) + +// ============ Manager Management | Manager 管理 ============ + +// SetManager stores the manager in the global map using the specified autoType | 使用指定的 autoType 将管理器存储在全局 map 中 func SetManager(mgr *manager.Manager) { stputil.SetManager(mgr) } +// GetManager retrieves the manager from the global map using the specified autoType | 使用指定的 autoType 从全局 map 中获取管理器 func GetManager(autoType ...string) (*manager.Manager, error) { return stputil.GetManager(autoType...) } +// DeleteManager delete the specific manager for the given autoType and releases resources | 删除指定的管理器并释放资源 func DeleteManager(autoType ...string) error { return stputil.DeleteManager(autoType...) } +// DeleteAllManager delete all managers in the global map and releases resources | 关闭所有管理器并释放资源 func DeleteAllManager() { stputil.DeleteAllManager() } +// ============ Builder & Config | 构建器和配置 ============ + +// NewDefaultBuild creates a new default builder | 创建默认构建器 func NewDefaultBuild() *builder.Builder { return builder.NewBuilder() } +// NewDefaultConfig creates a new default config | 创建默认配置 func NewDefaultConfig() *config.Config { return config.DefaultConfig() } +// DefaultLoggerConfig returns the default logger config | 返回默认日志配置 func DefaultLoggerConfig() *slog.LoggerConfig { return slog.DefaultLoggerConfig() } +// DefaultRenewPoolConfig returns the default renew pool config | 返回默认续期池配置 func DefaultRenewPoolConfig() *ants.RenewPoolConfig { return ants.DefaultRenewPoolConfig() } + +// ============ Codec Constructors | 编解码器构造函数 ============ + +// NewJSONSerializer creates a new JSON serializer | 创建JSON序列化器 +func NewJSONSerializer() *json.JSONSerializer { + return json.NewJSONSerializer() +} + +// NewMsgPackSerializer creates a new MsgPack serializer | 创建MsgPack序列化器 +func NewMsgPackSerializer() *msgpack.MsgPackSerializer { + return msgpack.NewMsgPackSerializer() +} + +// ============ Storage Constructors | 存储构造函数 ============ + +// NewMemoryStorage creates a new memory storage | 创建内存存储 +func NewMemoryStorage() *memory.Storage { + return memory.NewStorage() +} + +// NewMemoryStorageWithCleanupInterval creates a new memory storage with cleanup interval | 创建带清理间隔的内存存储 +func NewMemoryStorageWithCleanupInterval(interval time.Duration) *memory.Storage { + return memory.NewStorageWithCleanupInterval(interval) +} + +// NewRedisStorage creates a new Redis storage from URL | 通过URL创建Redis存储 +func NewRedisStorage(url string) (*redis.Storage, error) { + return redis.NewStorage(url) +} + +// NewRedisStorageFromConfig creates a new Redis storage from config | 通过配置创建Redis存储 +func NewRedisStorageFromConfig(cfg *redis.Config) (*redis.Storage, error) { + return redis.NewStorageFromConfig(cfg) +} + +// NewRedisStorageFromClient creates a new Redis storage from existing client | 从已有Redis客户端创建存储 +func NewRedisStorageFromClient(client *goredis.Client) *redis.Storage { + return redis.NewStorageFromClient(client) +} + +// NewRedisClient creates a new Redis client | 创建Redis客户端 +func NewRedisClient(opts *goredis.Options) *goredis.Client { + return goredis.NewClient(opts) +} + +// NewRedisBuilder creates a new Redis builder | 创建Redis构建器 +func NewRedisBuilder() *redis.Builder { + return redis.NewBuilder() +} + +// ============ Logger Constructors | 日志构造函数 ============ + +// NewSlogLogger creates a new slog logger with config | 使用配置创建标准日志器 +func NewSlogLogger(cfg *slog.LoggerConfig) (*slog.Logger, error) { + return slog.NewLoggerWithConfig(cfg) +} + +// NewNopLogger creates a new no-op logger | 创建空日志器 +func NewNopLogger() *nop.NopLogger { + return nop.NewNopLogger() +} + +// ============ Generator Constructors | 生成器构造函数 ============ + +// NewTokenGenerator creates a new token generator | 创建Token生成器 +func NewTokenGenerator(timeout int64, tokenStyle sgenerator.TokenStyle, jwtSecretKey string) *sgenerator.Generator { + return sgenerator.NewGenerator(timeout, tokenStyle, jwtSecretKey) +} + +// NewDefaultTokenGenerator creates a new default token generator | 创建默认Token生成器 +func NewDefaultTokenGenerator() *sgenerator.Generator { + return sgenerator.NewDefaultGenerator() +} + +// ============ Pool Constructors | 协程池构造函数 ============ + +// NewRenewPoolManager creates a new renew pool manager with default config | 使用默认配置创建续期池管理器 +func NewRenewPoolManager() *ants.RenewPoolManager { + return ants.NewRenewPoolManagerWithDefaultConfig() +} + +// NewRenewPoolManagerWithConfig creates a new renew pool manager with config | 使用配置创建续期池管理器 +func NewRenewPoolManagerWithConfig(cfg *ants.RenewPoolConfig) (*ants.RenewPoolManager, error) { + return ants.NewRenewPoolManagerWithConfig(cfg) +} + +// ============ Token Style Constants | Token风格常量 ============ + +const ( + // TokenStyleUUID UUID style | UUID风格 + TokenStyleUUID = sgenerator.TokenStyleUUID + // TokenStyleSimple Simple random string | 简单随机字符串 + TokenStyleSimple = sgenerator.TokenStyleSimple + // TokenStyleRandom32 32-bit random string | 32位随机字符串 + TokenStyleRandom32 = sgenerator.TokenStyleRandom32 + // TokenStyleRandom64 64-bit random string | 64位随机字符串 + TokenStyleRandom64 = sgenerator.TokenStyleRandom64 + // TokenStyleRandom128 128-bit random string | 128位随机字符串 + TokenStyleRandom128 = sgenerator.TokenStyleRandom128 + // TokenStyleJWT JWT style | JWT风格 + TokenStyleJWT = sgenerator.TokenStyleJWT + // TokenStyleHash SHA256 hash-based style | SHA256哈希风格 + TokenStyleHash = sgenerator.TokenStyleHash + // TokenStyleTimestamp Timestamp-based style | 时间戳风格 + TokenStyleTimestamp = sgenerator.TokenStyleTimestamp + // TokenStyleTik Short ID style (like TikTok) | Tik风格短ID + TokenStyleTik = sgenerator.TokenStyleTik +) + +// ============ Log Level Constants | 日志级别常量 ============ + +const ( + // LogLevelDebug Debug level | 调试级别 + LogLevelDebug = slog.LevelDebug + // LogLevelInfo Info level | 信息级别 + LogLevelInfo = slog.LevelInfo + // LogLevelWarn Warn level | 警告级别 + LogLevelWarn = slog.LevelWarn + // LogLevelError Error level | 错误级别 + LogLevelError = slog.LevelError +) + +// ============ Authentication | 登录认证 ============ + +// Login performs user login | 用户登录 +func Login(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) (string, error) { + return stputil.Login(ctx, loginID, deviceOrAutoType...) +} + +// LoginByToken performs login with specified token | 使用指定Token登录 +func LoginByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.LoginByToken(ctx, tokenValue, authType...) +} + +// Logout performs user logout | 用户登出 +func Logout(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) error { + return stputil.Logout(ctx, loginID, deviceOrAutoType...) +} + +// LogoutByToken performs logout by token | 根据Token登出 +func LogoutByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.LogoutByToken(ctx, tokenValue, authType...) +} + +// Kickout kicks out a user session | 踢人下线 +func Kickout(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) error { + return stputil.Kickout(ctx, loginID, deviceOrAutoType...) +} + +// KickoutByToken Kick user offline | 根据Token踢人下线 +func KickoutByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.KickoutByToken(ctx, tokenValue, authType...) +} + +// Replace user offline by login ID and device | 根据账号和设备顶人下线 +func Replace(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) error { + return stputil.Replace(ctx, loginID, deviceOrAutoType...) +} + +// ReplaceByToken Replace user offline by token | 根据Token顶人下线 +func ReplaceByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.ReplaceByToken(ctx, tokenValue, authType...) +} + +// ============ Token Validation | Token验证 ============ + +// IsLogin checks if the user is logged in | 检查用户是否已登录 +func IsLogin(ctx context.Context, tokenValue string, authType ...string) bool { + return stputil.IsLogin(ctx, tokenValue, authType...) +} + +// CheckLogin checks login status (throws error if not logged in) | 检查登录状态(未登录抛出错误) +func CheckLogin(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.CheckLogin(ctx, tokenValue, authType...) +} + +// CheckLoginWithState checks the login status (returns error to determine the reason if not logged in) | 检查登录状态(未登录时根据错误确定原因) +func CheckLoginWithState(ctx context.Context, tokenValue string, authType ...string) (bool, error) { + return stputil.CheckLoginWithState(ctx, tokenValue, authType...) +} + +// GetLoginID gets the login ID from token | 从Token获取登录ID +func GetLoginID(ctx context.Context, tokenValue string, authType ...string) (string, error) { + return stputil.GetLoginID(ctx, tokenValue, authType...) +} + +// GetLoginIDNotCheck gets login ID without checking | 获取登录ID(不检查登录状态) +func GetLoginIDNotCheck(ctx context.Context, tokenValue string, authType ...string) (string, error) { + return stputil.GetLoginIDNotCheck(ctx, tokenValue, authType...) +} + +// GetTokenValue gets the token value for a login ID | 获取登录ID对应的Token值 +func GetTokenValue(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) (string, error) { + return stputil.GetTokenValue(ctx, loginID, deviceOrAutoType...) +} + +// GetTokenInfo gets token information | 获取Token信息 +func GetTokenInfo(ctx context.Context, tokenValue string, authType ...string) (*manager.TokenInfo, error) { + return stputil.GetTokenInfo(ctx, tokenValue, authType...) +} + +// ============ Account Disable | 账号封禁 ============ + +// Disable disables an account for specified duration | 封禁账号(指定时长) +func Disable(ctx context.Context, loginID interface{}, duration time.Duration, authType ...string) error { + return stputil.Disable(ctx, loginID, duration, authType...) +} + +// DisableByToken disables the account associated with the given token for a duration | 根据指定 Token 封禁其对应的账号 +func DisableByToken(ctx context.Context, tokenValue string, duration time.Duration, authType ...string) error { + return stputil.DisableByToken(ctx, tokenValue, duration, authType...) +} + +// Untie re-enables a disabled account | 解封账号 +func Untie(ctx context.Context, loginID interface{}, authType ...string) error { + return stputil.Untie(ctx, loginID, authType...) +} + +// UntieByToken re-enables a disabled account by token | 根据Token解封账号 +func UntieByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.UntieByToken(ctx, tokenValue, authType...) +} + +// IsDisable checks if an account is disabled | 检查账号是否被封禁 +func IsDisable(ctx context.Context, loginID interface{}, authType ...string) bool { + return stputil.IsDisable(ctx, loginID, authType...) +} + +// IsDisableByToken checks if an account is disabled by token | 根据Token检查账号是否被封禁 +func IsDisableByToken(ctx context.Context, tokenValue string, authType ...string) bool { + return stputil.IsDisableByToken(ctx, tokenValue, authType...) +} + +// GetDisableTime gets remaining disable time in seconds | 获取剩余封禁时间(秒) +func GetDisableTime(ctx context.Context, loginID interface{}, authType ...string) (int64, error) { + return stputil.GetDisableTime(ctx, loginID, authType...) +} + +// GetDisableTimeByToken gets remaining disable time by token | 根据Token获取剩余封禁时间(秒) +func GetDisableTimeByToken(ctx context.Context, tokenValue string, authType ...string) (int64, error) { + return stputil.GetDisableTimeByToken(ctx, tokenValue, authType...) +} + +// CheckDisableWithInfo gets disable info | 获取封禁信息 +func CheckDisableWithInfo(ctx context.Context, loginID interface{}, authType ...string) (*manager.DisableInfo, error) { + return stputil.CheckDisableWithInfo(ctx, loginID, authType...) +} + +// CheckDisableWithInfoByToken gets disable info by token | 根据Token获取封禁信息 +func CheckDisableWithInfoByToken(ctx context.Context, tokenValue string, authType ...string) (*manager.DisableInfo, error) { + return stputil.CheckDisableWithInfoByToken(ctx, tokenValue, authType...) +} + +// ============ Session Management | Session管理 ============ + +// GetSession gets session by login ID | 根据登录ID获取Session +func GetSession(ctx context.Context, loginID interface{}, authType ...string) (*session.Session, error) { + return stputil.GetSession(ctx, loginID, authType...) +} + +// GetSessionByToken gets session by token | 根据Token获取Session +func GetSessionByToken(ctx context.Context, tokenValue string, authType ...string) (*session.Session, error) { + return stputil.GetSessionByToken(ctx, tokenValue, authType...) +} + +// DeleteSession deletes a session | 删除Session +func DeleteSession(ctx context.Context, loginID interface{}, authType ...string) error { + return stputil.DeleteSession(ctx, loginID, authType...) +} + +// DeleteSessionByToken Deletes session by token | 根据Token删除Session +func DeleteSessionByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.DeleteSessionByToken(ctx, tokenValue, authType...) +} + +// HasSession checks if session exists | 检查Session是否存在 +func HasSession(ctx context.Context, loginID interface{}, authType ...string) bool { + return stputil.HasSession(ctx, loginID, authType...) +} + +// RenewSession renews session TTL | 续期Session +func RenewSession(ctx context.Context, loginID interface{}, ttl time.Duration, authType ...string) error { + return stputil.RenewSession(ctx, loginID, ttl, authType...) +} + +// RenewSessionByToken renews session TTL by token | 根据Token续期Session +func RenewSessionByToken(ctx context.Context, tokenValue string, ttl time.Duration, authType ...string) error { + return stputil.RenewSessionByToken(ctx, tokenValue, ttl, authType...) +} + +// ============ Permission Verification | 权限验证 ============ + +// SetPermissions sets permissions for a login ID | 设置用户权限 +func SetPermissions(ctx context.Context, loginID interface{}, permissions []string, authType ...string) error { + return stputil.SetPermissions(ctx, loginID, permissions, authType...) +} + +// SetPermissionsByToken sets permissions by token | 根据 Token 设置对应账号的权限 +func SetPermissionsByToken(ctx context.Context, tokenValue string, permissions []string, authType ...string) error { + return stputil.SetPermissionsByToken(ctx, tokenValue, permissions, authType...) +} + +// RemovePermissions removes specified permissions for a login ID | 删除用户指定权限 +func RemovePermissions(ctx context.Context, loginID interface{}, permissions []string, authType ...string) error { + return stputil.RemovePermissions(ctx, loginID, permissions, authType...) +} + +// RemovePermissionsByToken removes specified permissions by token | 根据 Token 删除对应账号的指定权限 +func RemovePermissionsByToken(ctx context.Context, tokenValue string, permissions []string, authType ...string) error { + return stputil.RemovePermissionsByToken(ctx, tokenValue, permissions, authType...) +} + +// GetPermissions gets permission list | 获取权限列表 +func GetPermissions(ctx context.Context, loginID interface{}, authType ...string) ([]string, error) { + return stputil.GetPermissions(ctx, loginID, authType...) +} + +// GetPermissionsByToken gets permission list by token | 根据 Token 获取对应账号的权限列表 +func GetPermissionsByToken(ctx context.Context, tokenValue string, authType ...string) ([]string, error) { + return stputil.GetPermissionsByToken(ctx, tokenValue, authType...) +} + +// HasPermission checks if has specified permission | 检查是否拥有指定权限 +func HasPermission(ctx context.Context, loginID interface{}, permission string, authType ...string) bool { + return stputil.HasPermission(ctx, loginID, permission, authType...) +} + +// HasPermissionByToken checks if the token has the specified permission | 检查Token是否拥有指定权限 +func HasPermissionByToken(ctx context.Context, tokenValue string, permission string, authType ...string) bool { + return stputil.HasPermissionByToken(ctx, tokenValue, permission, authType...) +} + +// HasPermissionsAnd checks if has all permissions (AND logic) | 检查是否拥有所有权限(AND逻辑) +func HasPermissionsAnd(ctx context.Context, loginID interface{}, permissions []string, authType ...string) bool { + return stputil.HasPermissionsAnd(ctx, loginID, permissions, authType...) +} + +// HasPermissionsAndByToken checks if the token has all specified permissions | 检查Token是否拥有所有指定权限 +func HasPermissionsAndByToken(ctx context.Context, tokenValue string, permissions []string, authType ...string) bool { + return stputil.HasPermissionsAndByToken(ctx, tokenValue, permissions, authType...) +} + +// HasPermissionsOr checks if has any permission (OR logic) | 检查是否拥有任一权限(OR逻辑) +func HasPermissionsOr(ctx context.Context, loginID interface{}, permissions []string, authType ...string) bool { + return stputil.HasPermissionsOr(ctx, loginID, permissions, authType...) +} + +// HasPermissionsOrByToken checks if the token has any of the specified permissions | 检查Token是否拥有任一指定权限 +func HasPermissionsOrByToken(ctx context.Context, tokenValue string, permissions []string, authType ...string) bool { + return stputil.HasPermissionsOrByToken(ctx, tokenValue, permissions, authType...) +} + +// ============ Role Management | 角色管理 ============ + +// SetRoles sets roles for a login ID | 设置用户角色 +func SetRoles(ctx context.Context, loginID interface{}, roles []string, authType ...string) error { + return stputil.SetRoles(ctx, loginID, roles, authType...) +} + +// SetRolesByToken sets roles by token | 根据 Token 设置对应账号的角色 +func SetRolesByToken(ctx context.Context, tokenValue string, roles []string, authType ...string) error { + return stputil.SetRolesByToken(ctx, tokenValue, roles, authType...) +} + +// RemoveRoles removes specified roles for a login ID | 删除用户指定角色 +func RemoveRoles(ctx context.Context, loginID interface{}, roles []string, authType ...string) error { + return stputil.RemoveRoles(ctx, loginID, roles, authType...) +} + +// RemoveRolesByToken removes specified roles by token | 根据 Token 删除对应账号的指定角色 +func RemoveRolesByToken(ctx context.Context, tokenValue string, roles []string, authType ...string) error { + return stputil.RemoveRolesByToken(ctx, tokenValue, roles, authType...) +} + +// GetRoles gets role list | 获取角色列表 +func GetRoles(ctx context.Context, loginID interface{}, authType ...string) ([]string, error) { + return stputil.GetRoles(ctx, loginID, authType...) +} + +// GetRolesByToken gets role list by token | 根据 Token 获取对应账号的角色列表 +func GetRolesByToken(ctx context.Context, tokenValue string, authType ...string) ([]string, error) { + return stputil.GetRolesByToken(ctx, tokenValue, authType...) +} + +// HasRole checks if has specified role | 检查是否拥有指定角色 +func HasRole(ctx context.Context, loginID interface{}, role string, authType ...string) bool { + return stputil.HasRole(ctx, loginID, role, authType...) +} + +// HasRoleByToken checks if the token has the specified role | 检查 Token 是否拥有指定角色 +func HasRoleByToken(ctx context.Context, tokenValue string, role string, authType ...string) bool { + return stputil.HasRoleByToken(ctx, tokenValue, role, authType...) +} + +// HasRolesAnd checks if has all roles (AND logic) | 检查是否拥有所有角色(AND逻辑) +func HasRolesAnd(ctx context.Context, loginID interface{}, roles []string, authType ...string) bool { + return stputil.HasRolesAnd(ctx, loginID, roles, authType...) +} + +// HasRolesAndByToken checks if the token has all specified roles | 检查 Token 是否拥有所有指定角色 +func HasRolesAndByToken(ctx context.Context, tokenValue string, roles []string, authType ...string) bool { + return stputil.HasRolesAndByToken(ctx, tokenValue, roles, authType...) +} + +// HasRolesOr checks if has any role (OR logic) | 检查是否拥有任一角色(OR逻辑) +func HasRolesOr(ctx context.Context, loginID interface{}, roles []string, authType ...string) bool { + return stputil.HasRolesOr(ctx, loginID, roles, authType...) +} + +// HasRolesOrByToken checks if the token has any of the specified roles | 检查 Token 是否拥有任一指定角色 +func HasRolesOrByToken(ctx context.Context, tokenValue string, roles []string, authType ...string) bool { + return stputil.HasRolesOrByToken(ctx, tokenValue, roles, authType...) +} + +// ============ Token Tag | Token标签 ============ + +// SetTokenTag sets token tag | 设置Token标签 +func SetTokenTag(ctx context.Context, tokenValue, tag string, authType ...string) error { + return stputil.SetTokenTag(ctx, tokenValue, tag, authType...) +} + +// GetTokenTag gets token tag | 获取Token标签 +func GetTokenTag(ctx context.Context, tokenValue string, authType ...string) (string, error) { + return stputil.GetTokenTag(ctx, tokenValue, authType...) +} + +// ============ Session Query | 会话查询 ============ + +// GetTokenValueListByLoginID gets all tokens for a login ID | 获取指定账号的所有Token +func GetTokenValueListByLoginID(ctx context.Context, loginID interface{}, authType ...string) ([]string, error) { + return stputil.GetTokenValueListByLoginID(ctx, loginID, authType...) +} + +// GetSessionCountByLoginID gets session count for a login ID | 获取指定账号的Session数量 +func GetSessionCountByLoginID(ctx context.Context, loginID interface{}, authType ...string) (int, error) { + return stputil.GetSessionCountByLoginID(ctx, loginID, authType...) +} + +// ============ Security Features | 安全特性 ============ + +// Generate Generates a one-time nonce | 生成一次性随机数 +func Generate(ctx context.Context, authType ...string) (string, error) { + return stputil.Generate(ctx, authType...) +} + +// Verify Verifies a nonce | 验证随机数 +func Verify(ctx context.Context, nonce string, authType ...string) bool { + return stputil.Verify(ctx, nonce, authType...) +} + +// VerifyAndConsume Verifies and consumes nonce, returns error if invalid | 验证并消费nonce,无效时返回错误 +func VerifyAndConsume(ctx context.Context, nonce string, authType ...string) error { + return stputil.VerifyAndConsume(ctx, nonce, authType...) +} + +// IsValidNonce Checks if nonce is valid without consuming it | 检查nonce是否有效(不消费) +func IsValidNonce(ctx context.Context, nonce string, authType ...string) bool { + return stputil.IsValidNonce(ctx, nonce, authType...) +} + +// GenerateTokenPair Create access + refresh token | 生成访问令牌和刷新令牌 +func GenerateTokenPair(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) (*security.RefreshTokenInfo, error) { + return stputil.GenerateTokenPair(ctx, loginID, deviceOrAutoType...) +} + +// VerifyAccessToken verifies access token validity | 验证访问令牌是否有效 +func VerifyAccessToken(ctx context.Context, accessToken string, authType ...string) bool { + return stputil.VerifyAccessToken(ctx, accessToken, authType...) +} + +// VerifyAccessTokenAndGetInfo verifies access token and returns token info | 验证访问令牌并返回Token信息 +func VerifyAccessTokenAndGetInfo(ctx context.Context, accessToken string, authType ...string) (*security.AccessTokenInfo, bool) { + return stputil.VerifyAccessTokenAndGetInfo(ctx, accessToken, authType...) +} + +// GetRefreshTokenInfo gets refresh token information | 获取刷新令牌信息 +func GetRefreshTokenInfo(ctx context.Context, refreshToken string, authType ...string) (*security.RefreshTokenInfo, error) { + return stputil.GetRefreshTokenInfo(ctx, refreshToken, authType...) +} + +// RefreshAccessToken refreshes access token using refresh token | 使用刷新令牌刷新访问令牌 +func RefreshAccessToken(ctx context.Context, refreshToken string, authType ...string) (*security.RefreshTokenInfo, error) { + return stputil.RefreshAccessToken(ctx, refreshToken, authType...) +} + +// RevokeRefreshToken Revokes refresh token | 撤销刷新令牌 +func RevokeRefreshToken(ctx context.Context, refreshToken string, authType ...string) error { + return stputil.RevokeRefreshToken(ctx, refreshToken, authType...) +} + +// IsValid checks whether token is valid | 检查Token是否有效 +func IsValid(ctx context.Context, refreshToken string, authType ...string) bool { + return stputil.IsValid(ctx, refreshToken, authType...) +} + +// ============ OAuth2 Features | OAuth2 功能 ============ + +// RegisterClient Registers an OAuth2 client | 注册OAuth2客户端 +func RegisterClient(ctx context.Context, client *oauth2.Client, authType ...string) error { + return stputil.RegisterClient(ctx, client, authType...) +} + +// UnregisterClient unregisters an OAuth2 client | 注销OAuth2客户端 +func UnregisterClient(ctx context.Context, clientID string, authType ...string) error { + return stputil.UnregisterClient(ctx, clientID, authType...) +} + +// GetClient gets OAuth2 client information | 获取OAuth2客户端信息 +func GetClient(ctx context.Context, clientID string, authType ...string) (*oauth2.Client, error) { + return stputil.GetClient(ctx, clientID, authType...) +} + +// GenerateAuthorizationCode creates an authorization code | 创建授权码 +func GenerateAuthorizationCode(ctx context.Context, clientID, loginID, redirectURI string, scope []string, authType ...string) (*oauth2.AuthorizationCode, error) { + return stputil.GenerateAuthorizationCode(ctx, clientID, loginID, redirectURI, scope, authType...) +} + +// ExchangeCodeForToken exchanges authorization code for token | 使用授权码换取令牌 +func ExchangeCodeForToken(ctx context.Context, code, clientID, clientSecret, redirectURI string, authType ...string) (*oauth2.AccessToken, error) { + return stputil.ExchangeCodeForToken(ctx, code, clientID, clientSecret, redirectURI, authType...) +} + +// ValidateAccessToken verifies OAuth2 access token | 验证OAuth2访问令牌 +func ValidateAccessToken(ctx context.Context, accessToken string, authType ...string) bool { + return stputil.ValidateAccessToken(ctx, accessToken, authType...) +} + +// ValidateAccessTokenAndGetInfo verifies OAuth2 access token and get info | 验证OAuth2访问令牌并获取信息 +func ValidateAccessTokenAndGetInfo(ctx context.Context, accessToken string, authType ...string) (*oauth2.AccessToken, error) { + return stputil.ValidateAccessTokenAndGetInfo(ctx, accessToken, authType...) +} + +// OAuth2RefreshAccessToken Refreshes access token using refresh token | 使用刷新令牌刷新访问令牌(OAuth2) +func OAuth2RefreshAccessToken(ctx context.Context, clientID, refreshToken, clientSecret string, authType ...string) (*oauth2.AccessToken, error) { + return stputil.OAuth2RefreshAccessToken(ctx, clientID, refreshToken, clientSecret, authType...) +} + +// RevokeToken Revokes access token and its refresh token | 撤销访问令牌及其刷新令牌 +func RevokeToken(ctx context.Context, accessToken string, authType ...string) error { + return stputil.RevokeToken(ctx, accessToken, authType...) +} + +// ============ Public Getters | 公共获取器 ============ + +// GetConfig returns the manager configuration | 获取 Manager 当前使用的配置 +func GetConfig(ctx context.Context, authType ...string) *config.Config { + return stputil.GetConfig(ctx, authType...) +} + +// GetStorage returns the storage adapter | 获取 Manager 使用的存储适配器 +func GetStorage(ctx context.Context, authType ...string) adapter.Storage { + return stputil.GetStorage(ctx, authType...) +} + +// GetCodec returns the codec (serializer) | 获取 Manager 使用的编解码器 +func GetCodec(ctx context.Context, authType ...string) adapter.Codec { + return stputil.GetCodec(ctx, authType...) +} + +// GetLog returns the logger adapter | 获取 Manager 使用的日志适配器 +func GetLog(ctx context.Context, authType ...string) adapter.Log { + return stputil.GetLog(ctx, authType...) +} + +// GetPool returns the goroutine pool | 获取 Manager 使用的协程池 +func GetPool(ctx context.Context, authType ...string) adapter.Pool { + return stputil.GetPool(ctx, authType...) +} + +// GetGenerator returns the token generator | 获取 Token 生成器 +func GetGenerator(ctx context.Context, authType ...string) adapter.Generator { + return stputil.GetGenerator(ctx, authType...) +} + +// GetNonceManager returns the nonce manager | 获取随机串管理器 +func GetNonceManager(ctx context.Context, authType ...string) *security.NonceManager { + return stputil.GetNonceManager(ctx, authType...) +} + +// GetRefreshManager returns the refresh token manager | 获取刷新令牌管理器 +func GetRefreshManager(ctx context.Context, authType ...string) *security.RefreshTokenManager { + return stputil.GetRefreshManager(ctx, authType...) +} + +// GetEventManager returns the event manager | 获取事件管理器 +func GetEventManager(ctx context.Context, authType ...string) *listener.Manager { + return stputil.GetEventManager(ctx, authType...) +} + +// GetOAuth2Server Gets OAuth2 server instance | 获取OAuth2服务器实例 +func GetOAuth2Server(ctx context.Context, authType ...string) *oauth2.OAuth2Server { + return stputil.GetOAuth2Server(ctx, authType...) +} + +// ============ Event Management | 事件管理 ============ + +// RegisterFunc registers a function as an event listener | 注册函数作为事件监听器 +func RegisterFunc(event listener.Event, fn func(*listener.EventData), authType ...string) { + stputil.RegisterFunc(event, fn, authType...) +} + +// Register registers an event listener | 注册事件监听器 +func Register(event listener.Event, l listener.Listener, authType ...string) string { + return stputil.Register(event, l, authType...) +} + +// RegisterWithConfig registers an event listener with config | 注册带配置的事件监听器 +func RegisterWithConfig(event listener.Event, l listener.Listener, cfg listener.ListenerConfig, authType ...string) string { + return stputil.RegisterWithConfig(event, l, cfg, authType...) +} + +// Unregister removes an event listener by ID | 根据ID移除事件监听器 +func Unregister(id string, authType ...string) bool { + return stputil.Unregister(id, authType...) +} + +// TriggerEvent manually triggers an event | 手动触发事件 +func TriggerEvent(data *listener.EventData, authType ...string) { + stputil.TriggerEvent(data, authType...) +} + +// TriggerEventAsync triggers an event asynchronously and returns immediately | 异步触发事件并立即返回 +func TriggerEventAsync(data *listener.EventData, authType ...string) { + stputil.TriggerEventAsync(data, authType...) +} + +// TriggerEventSync triggers an event synchronously and waits for all listeners | 同步触发事件并等待所有监听器完成 +func TriggerEventSync(data *listener.EventData, authType ...string) { + stputil.TriggerEventSync(data, authType...) +} + +// WaitEvents waits for all async event listeners to complete | 等待所有异步事件监听器完成 +func WaitEvents(authType ...string) { + stputil.WaitEvents(authType...) +} + +// ClearEventListeners removes all listeners for a specific event | 清除指定事件的所有监听器 +func ClearEventListeners(event listener.Event, authType ...string) { + stputil.ClearEventListeners(event, authType...) +} + +// ClearAllEventListeners removes all listeners | 清除所有事件监听器 +func ClearAllEventListeners(authType ...string) { + stputil.ClearAllEventListeners(authType...) +} + +// CountEventListeners returns the number of listeners for a specific event | 获取指定事件监听器数量 +func CountEventListeners(event listener.Event, authType ...string) int { + return stputil.CountEventListeners(event, authType...) +} + +// CountAllListeners returns the total number of registered listeners | 获取已注册监听器总数 +func CountAllListeners(authType ...string) int { + return stputil.CountAllListeners(authType...) +} + +// GetEventListenerIDs returns all listener IDs for a specific event | 获取指定事件的所有监听器ID +func GetEventListenerIDs(event listener.Event, authType ...string) []string { + return stputil.GetEventListenerIDs(event, authType...) +} + +// GetAllRegisteredEvents returns all events that have registered listeners | 获取所有已注册事件 +func GetAllRegisteredEvents(authType ...string) []listener.Event { + return stputil.GetAllRegisteredEvents(authType...) +} + +// HasEventListeners checks if there are any listeners for a specific event | 检查指定事件是否有监听器 +func HasEventListeners(event listener.Event, authType ...string) bool { + return stputil.HasEventListeners(event, authType...) +} diff --git a/integrations/gin/middleware.go b/integrations/gin/middleware.go index c385106..8e75a18 100644 --- a/integrations/gin/middleware.go +++ b/integrations/gin/middleware.go @@ -1,15 +1,14 @@ package gin import ( - "context" "errors" - saContext "github.com/click33/sa-token-go/core/context" - "github.com/click33/sa-token-go/core/manager" - "github.com/click33/sa-token-go/stputil" "net/http" "github.com/click33/sa-token-go/core" - "github.com/click33/sa-token-go/core/config" + "github.com/click33/sa-token-go/core/manager" + + saContext "github.com/click33/sa-token-go/core/context" + "github.com/click33/sa-token-go/stputil" "github.com/gin-gonic/gin" ) @@ -17,28 +16,25 @@ import ( type LogicType string const ( - SaTokenCtxKey = "satoken" + SaTokenCtxKey = "saCtx" - LogicOr LogicType = "OR" // 任一满足 - LogicAnd LogicType = "AND" // 全部满足 + LogicOr LogicType = "OR" // Logical OR | 任一满足 + LogicAnd LogicType = "AND" // Logical AND | 全部满足 ) -// AuthOption defines optional parameters for middleware | 中间件可选参数 type AuthOption func(*AuthOptions) -// AuthOptions stores optional parameters | 中间件可选参数结构体 type AuthOptions struct { AuthType string LogicType LogicType AuthFailFunc func(c *gin.Context, err error) } -// defaultAuthOptions returns default options | 默认中间件选项 func defaultAuthOptions() *AuthOptions { return &AuthOptions{LogicType: LogicAnd} // 默认 AND } -// WithAuthType sets AuthType option | 设置认证类型 +// WithAuthType sets auth type | 设置认证类型 func WithAuthType(authType string) AuthOption { return func(o *AuthOptions) { o.AuthType = authType @@ -52,7 +48,7 @@ func WithLogicType(logicType LogicType) AuthOption { } } -// WithAuthFailFunc sets custom fail function | 设置自定义失败函数 +// WithAuthFailFunc sets auth failure callback | 设置认证失败回调 func WithAuthFailFunc(fn func(c *gin.Context, err error)) AuthOption { return func(o *AuthOptions) { o.AuthFailFunc = fn @@ -61,7 +57,7 @@ func WithAuthFailFunc(fn func(c *gin.Context, err error)) AuthOption { // ========== Middlewares ========== -// AuthMiddleware checks login | 登录状态校验中间件 +// AuthMiddleware authentication middleware | 认证中间件 func AuthMiddleware(opts ...AuthOption) gin.HandlerFunc { options := defaultAuthOptions() for _, opt := range opts { @@ -69,28 +65,28 @@ func AuthMiddleware(opts ...AuthOption) gin.HandlerFunc { } return func(c *gin.Context) { - // 获取 Manager | Get Manager mgr, err := stputil.GetManager(options.AuthType) if err != nil { if options.AuthFailFunc != nil { - options.AuthFailFunc(c, err) // 自定义失败处理 | custom fail handler + options.AuthFailFunc(c, err) } else { - writeErrorResponse(c, err) // 默认失败响应 | default error response + writeErrorResponse(c, err) } c.Abort() return } - // 构建 Sa-Token 上下文 | Build Sa-Token context + // 获取 token | Get token saCtx := getSaContext(c, mgr) - err = mgr.CheckLogin( - context.WithValue(c.Request.Context(), config.CtxTokenValue, saCtx.GetTokenValue()), - ) + tokenValue := saCtx.GetTokenValue() + + // 检查登录 | Check login + err = mgr.CheckLogin(c.Request.Context(), tokenValue) if err != nil { if options.AuthFailFunc != nil { - options.AuthFailFunc(c, core.ErrNotLogin) + options.AuthFailFunc(c, err) } else { - writeErrorResponse(c, core.ErrNotLogin) + writeErrorResponse(c, err) } c.Abort() return @@ -108,6 +104,7 @@ func AuthWithStateMiddleware(opts ...AuthOption) gin.HandlerFunc { } return func(c *gin.Context) { + // 获取 Manager | Get Manager mgr, err := stputil.GetManager(options.AuthType) if err != nil { if options.AuthFailFunc != nil { @@ -119,10 +116,15 @@ func AuthWithStateMiddleware(opts ...AuthOption) gin.HandlerFunc { return } + // 构建 Sa-Token 上下文 | Build Sa-Token context saCtx := getSaContext(c, mgr) + tokenValue := saCtx.GetTokenValue() + + // 检查登录并返回状态 | Check login with state + _, err = mgr.CheckLoginWithState(c.Request.Context(), tokenValue) - _, err = mgr.CheckLoginWithState(context.WithValue(c.Request.Context(), config.CtxTokenValue, saCtx.GetTokenValue())) if err != nil { + // 用户自定义回调优先 if options.AuthFailFunc != nil { options.AuthFailFunc(c, err) } else { @@ -137,20 +139,25 @@ func AuthWithStateMiddleware(opts ...AuthOption) gin.HandlerFunc { } } -// PermissionMiddleware checks permissions | 权限校验中间件 -func PermissionMiddleware(permissions []string, opts ...AuthOption) gin.HandlerFunc { +// PermissionMiddleware permission check middleware | 权限校验中间件 +func PermissionMiddleware( + permissions []string, + opts ...AuthOption, +) gin.HandlerFunc { + options := defaultAuthOptions() for _, opt := range opts { opt(options) } return func(c *gin.Context) { + // No permission required | 无需权限直接放行 if len(permissions) == 0 { c.Next() return } - // 获取 Manager | Get Manager + // Get Manager | 获取 Manager mgr, err := stputil.GetManager(options.AuthType) if err != nil { if options.AuthFailFunc != nil { @@ -164,17 +171,23 @@ func PermissionMiddleware(permissions []string, opts ...AuthOption) gin.HandlerF // 构建 Sa-Token 上下文 | Build Sa-Token context saCtx := getSaContext(c, mgr) - ctx := context.WithValue(c.Request.Context(), config.CtxTokenValue, saCtx.GetTokenValue()) + tokenValue := saCtx.GetTokenValue() + ctx := c.Request.Context() - // 判断权限 | Check permissions + // Permission check | 权限校验 var ok bool switch { + // Single permission | 单权限判断 case len(permissions) == 1: - ok = mgr.HasPermissionByToken(ctx, permissions[0]) + ok = mgr.HasPermissionByToken(ctx, tokenValue, permissions[0]) + + // AND logic | AND 逻辑 case options.LogicType == LogicAnd: - ok = mgr.HasPermissionsAndByToken(ctx, permissions) + ok = mgr.HasPermissionsAndByToken(ctx, tokenValue, permissions) + + // OR logic (default) | OR 逻辑(默认) default: - ok = mgr.HasPermissionsOrByToken(ctx, permissions) + ok = mgr.HasPermissionsOrByToken(ctx, tokenValue, permissions) } if !ok { @@ -191,20 +204,25 @@ func PermissionMiddleware(permissions []string, opts ...AuthOption) gin.HandlerF } } -// RoleMiddleware checks roles | 角色校验中间件 -func RoleMiddleware(roles []string, opts ...AuthOption) gin.HandlerFunc { +// RoleMiddleware role check middleware | 角色校验中间件 +func RoleMiddleware( + roles []string, + opts ...AuthOption, +) gin.HandlerFunc { + options := defaultAuthOptions() for _, opt := range opts { opt(options) } return func(c *gin.Context) { + // No role required | 无需角色直接放行 if len(roles) == 0 { c.Next() return } - // 获取 Manager | Get Manager + // Get Manager | 获取 Manager mgr, err := stputil.GetManager(options.AuthType) if err != nil { if options.AuthFailFunc != nil { @@ -218,17 +236,24 @@ func RoleMiddleware(roles []string, opts ...AuthOption) gin.HandlerFunc { // 构建 Sa-Token 上下文 | Build Sa-Token context saCtx := getSaContext(c, mgr) - ctx := context.WithValue(c.Request.Context(), config.CtxTokenValue, saCtx.GetTokenValue()) + tokenValue := saCtx.GetTokenValue() + ctx := c.Request.Context() - // 判断角色 | Check roles + // Role check | 角色校验 var ok bool + switch { + // Single role | 单角色判断 case len(roles) == 1: - ok = mgr.HasRoleByToken(ctx, roles[0]) + ok = mgr.HasRoleByToken(ctx, tokenValue, roles[0]) + + // AND logic | AND 逻辑 case options.LogicType == LogicAnd: - ok = mgr.HasRolesAndByToken(ctx, roles) + ok = mgr.HasRolesAndByToken(ctx, tokenValue, roles) + + // OR logic (default) | OR 逻辑(默认) default: - ok = mgr.HasRolesOrByToken(ctx, roles) + ok = mgr.HasRolesOrByToken(ctx, tokenValue, roles) } if !ok { @@ -247,39 +272,46 @@ func RoleMiddleware(roles []string, opts ...AuthOption) gin.HandlerFunc { // GetSaTokenContext gets Sa-Token context from Gin context | 获取 Sa-Token 上下文 func GetSaTokenContext(c *gin.Context) (*saContext.SaTokenContext, bool) { - if v, exists := c.Get(SaTokenCtxKey); exists { - if saCtx, ok := v.(*saContext.SaTokenContext); ok { - return saCtx, true - } + v, exists := c.Get(SaTokenCtxKey) + if !exists { + return nil, false } - return nil, false + + ctx, ok := v.(*saContext.SaTokenContext) + return ctx, ok } func getSaContext(c *gin.Context, mgr *manager.Manager) *saContext.SaTokenContext { + // Try get from context | 尝试从 ctx 取值 if v, exists := c.Get(SaTokenCtxKey); exists { if saCtx, ok := v.(*saContext.SaTokenContext); ok { return saCtx } } + // Create new context | 创建并缓存 SaTokenContext saCtx := saContext.NewContext(NewGinContext(c), mgr) c.Set(SaTokenCtxKey, saCtx) + return saCtx } -// ========== Error/Success Responses ========== +// ============ Error Handling Helpers | 错误处理辅助函数 ============ +// writeErrorResponse writes a standardized error response | 写入标准化的错误响应 func writeErrorResponse(c *gin.Context, err error) { var saErr *core.SaTokenError var code int var message string var httpStatus int + // Check if it's a SaTokenError | 检查是否为SaTokenError if errors.As(err, &saErr) { code = saErr.Code message = saErr.Message httpStatus = getHTTPStatusFromCode(code) } else { + // Handle standard errors | 处理标准错误 code = core.CodeServerError message = err.Error() httpStatus = http.StatusInternalServerError @@ -288,10 +320,11 @@ func writeErrorResponse(c *gin.Context, err error) { c.JSON(httpStatus, gin.H{ "code": code, "message": message, - "data": []interface{}{}, + "data": err.Error(), }) } +// writeSuccessResponse writes a standardized success response | 写入标准化的成功响应 func writeSuccessResponse(c *gin.Context, data interface{}) { c.JSON(http.StatusOK, gin.H{ "code": core.CodeSuccess, @@ -300,6 +333,7 @@ func writeSuccessResponse(c *gin.Context, data interface{}) { }) } +// getHTTPStatusFromCode converts Sa-Token error code to HTTP status | 将Sa-Token错误码转换为HTTP状态码 func getHTTPStatusFromCode(code int) int { switch code { case core.CodeNotLogin: From c65fbbcd6648912251cf3c142e5355c5f34f1aea Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Fri, 26 Dec 2025 15:46:14 +0800 Subject: [PATCH 27/50] =?UTF-8?q?feat():=201=E3=80=81=E5=AE=8C=E5=96=84slo?= =?UTF-8?q?g?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/adapter/log.go | 44 ++ core/builder/builder.go | 21 +- core/manager/manager.go | 14 + examples/gf/api_test.go | 364 ++++++++++++++ examples/gf/go.mod | 10 +- examples/gf/main.go | 170 ++++++- go.work | 36 +- go.work.sum | 116 ++++- integrations/gf/export.go | 8 +- integrations/gf/go.mod | 4 +- integrations/gin/export.go | 8 +- integrations/gin/go.mod | 5 +- log/slog/config.go | 19 + log/slog/consts.go | 20 +- log/slog/doc.go | 18 + log/slog/log_adaper_slog.go | 224 ++++++--- log/slog/slog_test.go | 964 ++++++++++++++++++++++++++++++++++++ 17 files changed, 1911 insertions(+), 134 deletions(-) create mode 100644 examples/gf/api_test.go create mode 100644 log/slog/doc.go create mode 100644 log/slog/slog_test.go diff --git a/core/adapter/log.go b/core/adapter/log.go index 78a96f4..56f7c6d 100644 --- a/core/adapter/log.go +++ b/core/adapter/log.go @@ -1,6 +1,32 @@ // @Author daixk 2025/12/12 10:45:00 package adapter +// LogLevel defines log severity level | 日志级别定义 +type LogLevel int + +const ( + LogLevelDebug LogLevel = iota + 1 // Debug level | 调试级别 + LogLevelInfo // Info level | 信息级别 + LogLevelWarn // Warn level | 警告级别 + LogLevelError // Error level | 错误级别(最高) +) + +// String returns the string representation of log level | 返回日志级别的字符串表示 +func (l LogLevel) String() string { + switch l { + case LogLevelDebug: + return "DEBUG" + case LogLevelInfo: + return "INFO" + case LogLevelWarn: + return "WARN" + case LogLevelError: + return "ERROR" + default: + return "UNKNOWN" + } +} + // Log defines logging behavior abstraction | 日志行为抽象接口 type Log interface { Print(v ...any) // Print log without level | 无级别日志输出 @@ -18,3 +44,21 @@ type Log interface { Error(v ...any) // Print error level log | 输出错误级别日志 Errorf(format string, v ...any) // Print formatted error level log | 输出错误级别格式化日志 } + +// LogControl defines runtime control methods for loggers | 日志运行时控制接口 +type LogControl interface { + Log + + // ---- Lifecycle | 生命周期 ---- + Close() // Close the logger and release resources | 关闭日志并释放资源 + Flush() // Flush buffered logs to output | 刷新缓冲区 + + // ---- Runtime Config | 运行时配置 ---- + SetLevel(level LogLevel) // Update minimum log level | 动态更新日志级别 + SetPrefix(prefix string) // Update log prefix | 动态更新日志前缀 + SetStdout(enable bool) // Enable/disable stdout output | 开关控制台输出 + + // ---- Status Query | 状态查询 ---- + LogPath() string // Get log directory path | 获取日志目录 + DropCount() uint64 // Get dropped log count (queue full) | 获取丢弃的日志数量 +} diff --git a/core/builder/builder.go b/core/builder/builder.go index 8a9f6c7..e5f468a 100644 --- a/core/builder/builder.go +++ b/core/builder/builder.go @@ -418,6 +418,24 @@ func (b *Builder) LoggerStdout(stdout bool) *Builder { return b } +// LoggerStdoutOnly sets whether to only print to console (skip file output) | 设置是否仅输出到控制台(不写入文件) +func (b *Builder) LoggerStdoutOnly(stdoutOnly bool) *Builder { + if b.logConfig == nil { + b.logConfig = &slog.LoggerConfig{} + } + b.logConfig.StdoutOnly = stdoutOnly + return b +} + +// LoggerQueueSize sets the async write queue size | 设置异步写入队列大小 +func (b *Builder) LoggerQueueSize(size int) *Builder { + if b.logConfig == nil { + b.logConfig = &slog.LoggerConfig{} + } + b.logConfig.QueueSize = size + return b +} + // LoggerRotateSize sets the file size threshold for log rotation (bytes) | 设置日志文件大小滚动阈值(字节) func (b *Builder) LoggerRotateSize(size int64) *Builder { if b.logConfig == nil { @@ -584,7 +602,7 @@ func (b *Builder) Build() *manager.Manager { } // 日志 - if b.isLog { + if b.isLog && b.log == nil { if b.logConfig == nil { b.logConfig = slog.DefaultLoggerConfig() } @@ -601,7 +619,6 @@ func (b *Builder) Build() *manager.Manager { if b.renewPoolConfig == nil { b.renewPoolConfig = ants.DefaultRenewPoolConfig() } - // Validate configuration | 验证配置 err = b.renewPoolConfig.Validate() if err != nil { panic("Invalid RenewPoolConfig: " + err.Error()) diff --git a/core/manager/manager.go b/core/manager/manager.go index 4833cc4..234092c 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -149,6 +149,12 @@ func NewManager(cfg *config.Config, generator adapter.Generator, storage adapter // CloseManager Closes the manager and releases all resources | 关闭管理器并释放所有资源 func (m *Manager) CloseManager() { + // Close logger if it implements LogControl | 如果日志实现了 LogControl 接口,则关闭日志 + if logControl, ok := m.logger.(adapter.LogControl); ok { + logControl.Flush() + logControl.Close() + } + if m.pool != nil { // Safely close the renewPool | 安全关闭 renewPool m.pool.Stop() @@ -1385,6 +1391,14 @@ func (m *Manager) GetLog() adapter.Log { return m.logger } +// GetLogControl returns the logger control interface if available | 获取日志控制接口(如果支持) +func (m *Manager) GetLogControl() adapter.LogControl { + if logControl, ok := m.logger.(adapter.LogControl); ok { + return logControl + } + return nil +} + // GetPool returns the goroutine pool | 获取 Manager 使用的协程池 func (m *Manager) GetPool() adapter.Pool { return m.pool diff --git a/examples/gf/api_test.go b/examples/gf/api_test.go new file mode 100644 index 0000000..771dc0f --- /dev/null +++ b/examples/gf/api_test.go @@ -0,0 +1,364 @@ +package main + +import ( + "encoding/json" + "fmt" + "io" + "net/http" + "strings" + "testing" + "time" +) + +const baseURL = "http://127.0.0.1:8000" + +// Response 通用响应结构 +type Response struct { + Code int `json:"code"` + Message string `json:"message"` + Data json.RawMessage `json:"data,omitempty"` +} + +// LoginData 登录响应数据 +type LoginData struct { + Token string `json:"token"` + LoginID string `json:"loginID"` +} + +// httpGet 发送 GET 请求 +func httpGet(url string, token string) (*Response, error) { + req, err := http.NewRequest("GET", url, nil) + if err != nil { + return nil, err + } + + if token != "" { + req.Header.Set("satoken", token) + } + + client := &http.Client{Timeout: 10 * time.Second} + resp, err := client.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + body, err := io.ReadAll(resp.Body) + if err != nil { + return nil, err + } + + var result Response + if err := json.Unmarshal(body, &result); err != nil { + return nil, fmt.Errorf("parse response failed: %s, body: %s", err, string(body)) + } + + return &result, nil +} + +// TestHomePage 测试首页 +func TestHomePage(t *testing.T) { + resp, err := httpGet(baseURL+"/", "") + if err != nil { + t.Fatalf("请求失败: %v", err) + } + + if resp.Code != 200 { + t.Errorf("期望 code=200, 实际 code=%d", resp.Code) + } + + t.Logf("首页响应: code=%d, message=%s", resp.Code, resp.Message) +} + +// TestPublicRoute 测试公开路由 +func TestPublicRoute(t *testing.T) { + resp, err := httpGet(baseURL+"/public", "") + if err != nil { + t.Fatalf("请求失败: %v", err) + } + + if resp.Code != 200 { + t.Errorf("期望 code=200, 实际 code=%d", resp.Code) + } + + t.Logf("公开路由响应: code=%d, message=%s", resp.Code, resp.Message) +} + +// TestLoginAndLogout 测试登录和登出流程 +func TestLoginAndLogout(t *testing.T) { + // 1. 登录 + t.Log("=== 步骤1: 登录 ===") + resp, err := httpGet(baseURL+"/login?id=10001", "") + if err != nil { + t.Fatalf("登录请求失败: %v", err) + } + + if resp.Code != 200 { + t.Fatalf("登录失败: code=%d, message=%s", resp.Code, resp.Message) + } + + var loginData LoginData + if err := json.Unmarshal(resp.Data, &loginData); err != nil { + t.Fatalf("解析登录数据失败: %v", err) + } + + t.Logf("登录成功: token=%s, loginID=%s", loginData.Token, loginData.LoginID) + + // 2. 使用 token 访问受保护资源 + t.Log("=== 步骤2: 访问受保护资源 ===") + resp, err = httpGet(baseURL+"/api/user", loginData.Token) + if err != nil { + t.Fatalf("获取用户信息请求失败: %v", err) + } + + if resp.Code != 200 { + t.Errorf("获取用户信息失败: code=%d, message=%s", resp.Code, resp.Message) + } else { + t.Logf("获取用户信息成功: %s", string(resp.Data)) + } + + // 3. 登出 + t.Log("=== 步骤3: 登出 ===") + resp, err = httpGet(baseURL+"/logout", loginData.Token) + if err != nil { + t.Fatalf("登出请求失败: %v", err) + } + + if resp.Code != 200 { + t.Errorf("登出失败: code=%d, message=%s", resp.Code, resp.Message) + } else { + t.Logf("登出成功: message=%s", resp.Message) + } + + // 4. 登出后再次访问受保护资源(应该失败) + t.Log("=== 步骤4: 登出后访问受保护资源 ===") + resp, err = httpGet(baseURL+"/api/user", loginData.Token) + if err != nil { + t.Fatalf("请求失败: %v", err) + } + + if resp.Code == 200 { + t.Error("登出后不应该能访问受保护资源") + } else { + t.Logf("符合预期,访问被拒绝: code=%d, message=%s", resp.Code, resp.Message) + } +} + +// TestProtectedRouteWithoutToken 测试无 token 访问受保护路由 +func TestProtectedRouteWithoutToken(t *testing.T) { + resp, err := httpGet(baseURL+"/api/user", "") + if err != nil { + t.Fatalf("请求失败: %v", err) + } + + if resp.Code == 200 { + t.Error("无 token 不应该能访问受保护资源") + } else { + t.Logf("符合预期,访问被拒绝: code=%d, message=%s", resp.Code, resp.Message) + } +} + +// TestTokenInfo 测试获取 Token 信息 +func TestTokenInfo(t *testing.T) { + // 先登录 + resp, err := httpGet(baseURL+"/login?id=20001", "") + if err != nil { + t.Fatalf("登录请求失败: %v", err) + } + + var loginData LoginData + if err := json.Unmarshal(resp.Data, &loginData); err != nil { + t.Fatalf("解析登录数据失败: %v", err) + } + + t.Logf("登录成功: token=%s", loginData.Token) + + // 获取 Token 信息 + resp, err = httpGet(baseURL+"/api/token-info", loginData.Token) + if err != nil { + t.Fatalf("获取Token信息请求失败: %v", err) + } + + if resp.Code != 200 { + t.Errorf("获取Token信息失败: code=%d, message=%s", resp.Code, resp.Message) + } else { + t.Logf("Token信息: %s", string(resp.Data)) + } +} + +// TestAdminDashboard 测试管理员面板(需要权限) +func TestAdminDashboard(t *testing.T) { + // 先登录 + resp, err := httpGet(baseURL+"/login?id=admin001", "") + if err != nil { + t.Fatalf("登录请求失败: %v", err) + } + + var loginData LoginData + if err := json.Unmarshal(resp.Data, &loginData); err != nil { + t.Fatalf("解析登录数据失败: %v", err) + } + + t.Logf("登录成功: token=%s", loginData.Token) + + // 访问管理员面板 + resp, err = httpGet(baseURL+"/admin/dashboard", loginData.Token) + if err != nil { + t.Fatalf("访问管理员面板请求失败: %v", err) + } + + // 注意:这个测试可能会因为没有配置权限而失败,这是正常的 + t.Logf("管理员面板响应: code=%d, message=%s", resp.Code, resp.Message) +} + +// TestSuperSettings 测试超级管理员设置(需要角色) +func TestSuperSettings(t *testing.T) { + // 先登录 + resp, err := httpGet(baseURL+"/login?id=super001", "") + if err != nil { + t.Fatalf("登录请求失败: %v", err) + } + + var loginData LoginData + if err := json.Unmarshal(resp.Data, &loginData); err != nil { + t.Fatalf("解析登录数据失败: %v", err) + } + + t.Logf("登录成功: token=%s", loginData.Token) + + // 访问超级管理员设置 + resp, err = httpGet(baseURL+"/super/settings", loginData.Token) + if err != nil { + t.Fatalf("访问超级管理员设置请求失败: %v", err) + } + + // 注意:这个测试可能会因为没有配置角色而失败,这是正常的 + t.Logf("超级管理员设置响应: code=%d, message=%s", resp.Code, resp.Message) +} + +// TestInvalidToken 测试无效 Token +func TestInvalidToken(t *testing.T) { + resp, err := httpGet(baseURL+"/api/user", "invalid-token-12345") + if err != nil { + t.Fatalf("请求失败: %v", err) + } + + if resp.Code == 200 { + t.Error("无效 token 不应该能访问受保护资源") + } else { + t.Logf("符合预期,无效Token被拒绝: code=%d, message=%s", resp.Code, resp.Message) + } +} + +// TestMultipleLogin 测试多次登录同一用户 +func TestMultipleLogin(t *testing.T) { + userID := "multi-user-001" + + // 第一次登录 + resp1, err := httpGet(baseURL+"/login?id="+userID, "") + if err != nil { + t.Fatalf("第一次登录请求失败: %v", err) + } + + var loginData1 LoginData + if err := json.Unmarshal(resp1.Data, &loginData1); err != nil { + t.Fatalf("解析第一次登录数据失败: %v", err) + } + + t.Logf("第一次登录成功: token=%s", loginData1.Token) + + // 第二次登录 + resp2, err := httpGet(baseURL+"/login?id="+userID, "") + if err != nil { + t.Fatalf("第二次登录请求失败: %v", err) + } + + var loginData2 LoginData + if err := json.Unmarshal(resp2.Data, &loginData2); err != nil { + t.Fatalf("解析第二次登录数据失败: %v", err) + } + + t.Logf("第二次登录成功: token=%s", loginData2.Token) + + // 检查两个 token 是否都有效 + resp, err := httpGet(baseURL+"/api/user", loginData1.Token) + if err != nil { + t.Fatalf("请求失败: %v", err) + } + t.Logf("第一个Token访问结果: code=%d, message=%s", resp.Code, resp.Message) + + resp, err = httpGet(baseURL+"/api/user", loginData2.Token) + if err != nil { + t.Fatalf("请求失败: %v", err) + } + t.Logf("第二个Token访问结果: code=%d, message=%s", resp.Code, resp.Message) +} + +// 以下是一个完整的测试流程示例,可以直接运行 +func ExampleFullFlow() { + fmt.Println("=== Sa-Token-Go GF Example API 测试 ===") + fmt.Println() + + // 1. 测试首页 + fmt.Println("1. 测试首页") + resp, _ := httpGet(baseURL+"/", "") + fmt.Printf(" 响应: %s\n", resp.Message) + + // 2. 测试公开路由 + fmt.Println("2. 测试公开路由") + resp, _ = httpGet(baseURL+"/public", "") + fmt.Printf(" 响应: %s\n", resp.Message) + + // 3. 登录 + fmt.Println("3. 登录") + resp, _ = httpGet(baseURL+"/login?id=test001", "") + var loginData LoginData + json.Unmarshal(resp.Data, &loginData) + fmt.Printf(" Token: %s\n", loginData.Token) + + // 4. 访问受保护资源 + fmt.Println("4. 访问受保护资源") + resp, _ = httpGet(baseURL+"/api/user", loginData.Token) + fmt.Printf(" 响应: %s\n", resp.Message) + + // 5. 登出 + fmt.Println("5. 登出") + resp, _ = httpGet(baseURL+"/logout", loginData.Token) + fmt.Printf(" 响应: %s\n", resp.Message) + + fmt.Println() + fmt.Println("=== 测试完成 ===") +} + +// BenchmarkLogin 登录性能测试 +func BenchmarkLogin(b *testing.B) { + for i := 0; i < b.N; i++ { + httpGet(baseURL+"/login?id=bench-user", "") + } +} + +// BenchmarkProtectedRoute 受保护路由性能测试 +func BenchmarkProtectedRoute(b *testing.B) { + // 先登录获取 token + resp, err := httpGet(baseURL+"/login?id=bench-user", "") + if err != nil { + b.Fatalf("登录失败: %v", err) + } + + var loginData LoginData + if err := json.Unmarshal(resp.Data, &loginData); err != nil { + b.Fatalf("解析登录数据失败: %v", err) + } + + b.ResetTimer() + for i := 0; i < b.N; i++ { + httpGet(baseURL+"/api/user", loginData.Token) + } +} + +// 辅助函数:打印分隔线 +func printSeparator(title string) { + fmt.Println(strings.Repeat("=", 50)) + fmt.Printf(" %s\n", title) + fmt.Println(strings.Repeat("=", 50)) +} diff --git a/examples/gf/go.mod b/examples/gf/go.mod index fdf155e..5d8d80c 100644 --- a/examples/gf/go.mod +++ b/examples/gf/go.mod @@ -2,16 +2,10 @@ module github.com/click33/sa-token-go/examples/gf-example go 1.24.1 -replace ( - github.com/click33/sa-token-go/core => ../../core - github.com/click33/sa-token-go/integrations/gf => ../../integrations/gf - github.com/click33/sa-token-go/storage/memory => ../../storage/memory -) - require ( - github.com/click33/sa-token-go/integrations/gf v0.0.0-00010101000000-000000000000 - github.com/click33/sa-token-go/storage/memory v0.0.0-00010101000000-000000000000 github.com/gogf/gf/v2 v2.9.4 + github.com/click33/sa-token-go/integrations/gf v0.1.6 + github.com/click33/sa-token-go/storage/memory v0.1.6 ) require ( diff --git a/examples/gf/main.go b/examples/gf/main.go index 40c4787..90c78f4 100644 --- a/examples/gf/main.go +++ b/examples/gf/main.go @@ -3,48 +3,168 @@ package main import ( "net/http" - sagin "github.com/click33/sa-token-go/integrations/gf" - "github.com/click33/sa-token-go/storage/memory" + satoken "github.com/click33/sa-token-go/integrations/gf" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" ) func main() { - // 初始化存储 - storage := memory.NewStorage() + // 使用 Builder 模式构建 Manager | Build Manager using Builder pattern + manager := satoken.NewDefaultBuild(). + SetStorage(satoken.NewMemoryStorage()). // 设置内存存储 | Set memory storage + IsLog(true). // 开启日志 | Enable logging + Build() - // 创建配置 (现在可以直接使用 sagin 包的函数) - config := sagin.DefaultConfig() - // 创建管理器 (现在可以直接使用 sagin 包的函数) - manager := sagin.NewManager(storage, config) + // 注册 Manager | Register Manager + satoken.SetManager(manager) - // 创建 Gin 插件 - plugin := sagin.NewPlugin(manager) s := g.Server() + // 首页路由 | Home route s.BindHandler("/", func(r *ghttp.Request) { - r.Response.Writef( - "Hello %s! Your Age is %d", - r.Get("name", "unknown").String(), - r.Get("age").Int(), - ) + r.Response.WriteJson(g.Map{ + "code": satoken.CodeSuccess, + "message": "Welcome to Sa-Token-Go GF Example", + }) }) - // 公开路由 + + // 公开路由 | Public route s.BindHandler("/public", func(r *ghttp.Request) { - r.Response.WriteStatusExit( - http.StatusOK, - g.Map{ - "message": "公开访问", + r.Response.WriteStatusExit(http.StatusOK, g.Map{ + "code": satoken.CodeSuccess, + "message": "公开访问 | Public access", + }) + }) + + // 登录接口 | Login API + s.BindHandler("/login", func(r *ghttp.Request) { + // 模拟用户ID | Simulate user ID + loginID := r.Get("id", "10001").String() + + // 执行登录 | Perform login + token, err := satoken.Login(r.Context(), loginID) + if err != nil { + r.Response.WriteStatusExit(http.StatusInternalServerError, g.Map{ + "code": satoken.CodeServerError, + "message": err.Error(), + }) + return + } + + r.Response.WriteJson(g.Map{ + "code": satoken.CodeSuccess, + "message": "登录成功 | Login successful", + "data": g.Map{ + "token": token, + "loginID": loginID, }, - ) + }) }) - s.BindHandler("/login", plugin.LoginHandler) - // 受保护路由 - protected := s.Group("/api").Middleware(plugin.AuthMiddleware()) + // 登出接口 | Logout API + s.BindHandler("/logout", func(r *ghttp.Request) { + // 从请求中获取 Token | Get token from request + saCtx, ok := satoken.GetSaTokenContext(r) + if !ok { + r.Response.WriteStatusExit(http.StatusUnauthorized, g.Map{ + "code": satoken.CodeNotLogin, + "message": "未登录 | Not logged in", + }) + return + } + + tokenValue := saCtx.GetTokenValue() + err := satoken.LogoutByToken(r.Context(), tokenValue) + if err != nil { + r.Response.WriteStatusExit(http.StatusInternalServerError, g.Map{ + "code": satoken.CodeServerError, + "message": err.Error(), + }) + return + } + + r.Response.WriteJson(g.Map{ + "code": satoken.CodeSuccess, + "message": "登出成功 | Logout successful", + }) + }) + + // 受保护的路由组 | Protected route group + protected := s.Group("/api").Middleware(satoken.AuthMiddleware()) + { + // 获取用户信息 | Get user info + protected.GET("/user", func(r *ghttp.Request) { + saCtx, _ := satoken.GetSaTokenContext(r) + tokenValue := saCtx.GetTokenValue() + + loginID, err := satoken.GetLoginID(r.Context(), tokenValue) + if err != nil { + r.Response.WriteStatusExit(http.StatusUnauthorized, g.Map{ + "code": satoken.CodeNotLogin, + "message": err.Error(), + }) + return + } + + r.Response.WriteJson(g.Map{ + "code": satoken.CodeSuccess, + "message": "获取用户信息成功 | Get user info successful", + "data": g.Map{ + "loginID": loginID, + "token": tokenValue, + }, + }) + }) + + // 获取 Token 信息 | Get token info + protected.GET("/token-info", func(r *ghttp.Request) { + saCtx, _ := satoken.GetSaTokenContext(r) + tokenValue := saCtx.GetTokenValue() + + tokenInfo, err := satoken.GetTokenInfo(r.Context(), tokenValue) + if err != nil { + r.Response.WriteStatusExit(http.StatusInternalServerError, g.Map{ + "code": satoken.CodeServerError, + "message": err.Error(), + }) + return + } + + r.Response.WriteJson(g.Map{ + "code": satoken.CodeSuccess, + "message": "获取Token信息成功 | Get token info successful", + "data": tokenInfo, + }) + }) + } + + // 需要特定权限的路由 | Routes requiring specific permissions + permGroup := s.Group("/admin").Middleware( + satoken.AuthMiddleware(), + satoken.PermissionMiddleware([]string{"admin:read"}, satoken.WithLogicType(satoken.LogicOr)), + ) + { + permGroup.GET("/dashboard", func(r *ghttp.Request) { + r.Response.WriteJson(g.Map{ + "code": satoken.CodeSuccess, + "message": "管理员面板 | Admin dashboard", + }) + }) + } + + // 需要特定角色的路由 | Routes requiring specific roles + roleGroup := s.Group("/super").Middleware( + satoken.AuthMiddleware(), + satoken.RoleMiddleware([]string{"super-admin"}, satoken.WithLogicType(satoken.LogicAnd)), + ) { - protected.GET("/user", plugin.UserInfoHandler) + roleGroup.GET("/settings", func(r *ghttp.Request) { + r.Response.WriteJson(g.Map{ + "code": satoken.CodeSuccess, + "message": "超级管理员设置 | Super admin settings", + }) + }) } s.SetPort(8000) diff --git a/go.work b/go.work index 3f6a18b..6d82417 100644 --- a/go.work +++ b/go.work @@ -1,22 +1,52 @@ go 1.25.3 use ( + // codec ./codec/json - ./generator/sgenerator ./codec/msgpack + + // core ./core - ./examples/kratos/kratos-example + ./stputil + + // generator + ./generator/sgenerator + + // integrations ./integrations/chi ./integrations/echo ./integrations/fiber ./integrations/gf ./integrations/gin ./integrations/kratos + + // log ./log/gf ./log/nop ./log/slog + + // pool ./pool/ants + + // storage ./storage/memory ./storage/redis - ./stputil + + // examples + ./examples/gf + ./examples/gin/gin-example + ./examples/gin/gin-simple + ./examples/kratos/kratos-example + ./examples/chi/chi-example + ./examples/echo/echo-example + ./examples/fiber/fiber-example + ./examples/quick-start/simple-example + ./examples/redis-example + ./examples/jwt-example + ./examples/listener-example + ./examples/oauth2-example + ./examples/security-features + ./examples/session-demo + ./examples/token-styles + ./examples/annotation/annotation-example ) diff --git a/go.work.sum b/go.work.sum index 45b4e26..1638860 100644 --- a/go.work.sum +++ b/go.work.sum @@ -1,11 +1,21 @@ cel.dev/expr v0.19.1 h1:NciYrtDRIR0lNCnH1LFJegdjspNx9fI59O7TWcua/W4= cel.dev/expr v0.19.1/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw= +cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y= +cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic= cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I= cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg= +cloud.google.com/go/firestore v1.14.0 h1:8aLcKnMPoldYU3YHgu4t2exrKhLQkqaXAGqT0ljrFVw= +cloud.google.com/go/firestore v1.14.0/go.mod h1:96MVaHLsEhbvkBEdZgfN+AS/GIkco1LRpH9Xp9YZfzQ= +cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI= +cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= +cloud.google.com/go/longrunning v0.5.4 h1:w8xEcbZodnA2BbW6sVirkkoC+1gP8wS57EUUgGS0GVg= +cloud.google.com/go/longrunning v0.5.4/go.mod h1:zqNVncI0BOP8ST6XQD1+VcvuShMmq7+xFSzOL++V0dI= +cloud.google.com/go/storage v1.35.1 h1:B59ahL//eDfx2IIKFBeT5Atm9wnNmj3+8xG/W4WB//w= +cloud.google.com/go/storage v1.35.1/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= @@ -18,6 +28,8 @@ github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 github.com/alicebob/miniredis/v2 v2.35.0 h1:QwLphYqCEAo1eu1TqPRN2jgVMPBweeQcR21jeqDCONI= github.com/alicebob/miniredis/v2 v2.35.0/go.mod h1:TcL7YfarKPGDAthEtl5NBeHZfeUQj6OXMm/+iu5cLMM= github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= +github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= @@ -33,6 +45,7 @@ github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91 github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= +github.com/click33/sa-token-go/integrations/gf v0.1.6/go.mod h1:cwAY3VJ/KNLNcuYDNjMt1O4IERCep1JWCfvS9LyoA5w= github.com/click33/sa-token-go/storage/memory v0.1.4/go.mod h1:nqyuEh23mNjcuG3aI/BqJFz71zkpsgjdStW1BC5lkB0= github.com/click33/sa-token-go/storage/memory v0.1.5/go.mod h1:HxN2NVLq7lx+sOmq5RmV0h8xJjEUJLm4Xt1Mq+9PV2s= github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= @@ -43,13 +56,16 @@ github.com/cncf/xds/go v0.0.0-20231109132714-523115ebc101 h1:7To3pQ+pZo0i3dsWEbi github.com/cncf/xds/go v0.0.0-20231109132714-523115ebc101/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20241223141626-cff3c89139a3 h1:boJj011Hh+874zpIySeApCX4GeOjPl9qhRF3QuIZq+Q= github.com/cncf/xds/go v0.0.0-20241223141626-cff3c89139a3/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4= github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= +github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= +github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/creack/pty v1.1.9 h1:uDmaGzcdjhF4i/plgjmEsriH11Y0o7RKapEf/LDaM3w= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= @@ -67,12 +83,17 @@ github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7 github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8= github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/fullstorydev/grpcurl v1.9.3 h1:PC1Xi3w+JAvEE2Tg2Gf2RfVgPbf9+tbuQr1ZkyVU3jk= github.com/fullstorydev/grpcurl v1.9.3/go.mod h1:/b4Wxe8bG6ndAjlfSUjwseQReUDUvBJiFEB7UllOlUE= github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= +github.com/go-chi/chi/v5 v5.0.11 h1:BnpYbFZ3T3S1WMpD79r7R5ThWX40TaFB7L31Y8xqSwA= +github.com/go-chi/chi/v5 v5.0.11/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -119,6 +140,14 @@ github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= +github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= +github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= +github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= +github.com/googleapis/google-cloud-go-testing v0.0.0-20210719221736-1c9a4c676720 h1:zC34cGQu69FG7qzJ3WiKW244WfhDC3xxYMeNOX2gtUQ= +github.com/googleapis/google-cloud-go-testing v0.0.0-20210719221736-1c9a4c676720/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grafana/pyroscope-go v1.2.7 h1:VWBBlqxjyR0Cwk2W6UrE8CdcdD80GOFNutj0Kb1T8ac= github.com/grafana/pyroscope-go v1.2.7/go.mod h1:o/bpSLiJYYP6HQtvcoVKiE9s5RiNgjYTj1DhiddP2Pc= @@ -129,6 +158,22 @@ github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1 github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k= github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslCrtky5vbi9dd7HrQPQIx6wqiw= github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI= +github.com/hashicorp/consul/api v1.25.1 h1:CqrdhYzc8XZuPnhIYZWH45toM0LB9ZeYr/gvpLVI3PE= +github.com/hashicorp/consul/api v1.25.1/go.mod h1:iiLVwR/htV7mas/sy0O+XSuEnrdBUUydemjxcUrAt4g= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c= +github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= +github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= +github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= @@ -151,6 +196,8 @@ github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa02 github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/knz/go-libedit v1.10.1 h1:0pHpWtx9vcvC0xGZqEQlQdfSQs7WRlAjuPvk3fOZDCo= github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= +github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -164,6 +211,7 @@ github.com/lufia/plan9stats v0.0.0-20230326075908-cb1d2100619a h1:N9zuLhTvBSRt0g github.com/lufia/plan9stats v0.0.0-20230326075908-cb1d2100619a/go.mod h1:JKx41uQRwqlTZabZc+kILPrO/3jlKnQ2Z8b7YiVw5cE= github.com/lyft/protoc-gen-star/v2 v2.0.4-0.20230330145011-496ad1ac90a4 h1:sIXJOMrYnQZJu7OB7ANSF4MYri2fTEGIsRLz6LwI4xE= github.com/lyft/protoc-gen-star/v2 v2.0.4-0.20230330145011-496ad1ac90a4/go.mod h1:amey7yeodaJhXSbf/TlLvWiqQfLOSpEk//mLlc+axEk= +github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= @@ -171,12 +219,23 @@ github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovk github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/nats-io/nats.go v1.31.0 h1:/WFBHEc/dOKBF6qf1TZhrdEfTmOZ5JzdJ+Y3m6Y/p7E= +github.com/nats-io/nats.go v1.31.0/go.mod h1:di3Bm5MLsoB4Bx61CBTsxuarI36WbhAwOm8QrW39+i8= +github.com/nats-io/nkeys v0.4.6 h1:IzVe95ru2CT6ta874rt9saQRkWfe2nFj1NtvYSLqMzY= +github.com/nats-io/nkeys v0.4.6/go.mod h1:4DxZNzenSVd1cYQoAa8948QY3QDjrHfcfVADymtkpts= +github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/olekukonko/errors v1.1.0/go.mod h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y= github.com/olekukonko/ll v0.0.9/go.mod h1:En+sEW0JNETl26+K8eZ6/W4UQ7CYSrrgg/EdIYT2H8g= github.com/olekukonko/tablewriter v1.1.0/go.mod h1:5c+EBPeSqvXnLLgkm9isDdzR3wjfBkHR9Nhfp3NWrzo= @@ -189,9 +248,12 @@ github.com/philhofer/fwd v1.1.2 h1:bnDivRJ1EWPjUIRXV5KfORO897HTbpFAQddBdE8t7Gw= github.com/philhofer/fwd v1.1.2/go.mod h1:qkPdfjR2SIEbspLqpe1tO4n5yICnr2DY7mqEx2tUTP0= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.13.6 h1:JFZT4XbOU7l77xGSpOdW+pwIMqP044IyjXX6FGyEKFo= +github.com/pkg/sftp v1.13.6/go.mod h1:tz1ryNURKu77RL+GuCzmoJYxQczL3wLNNpPWagdg4Qk= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b h1:0LFwY6Q3gMACTjAbMZBjXAqTOzOwFaj2Ld6cjeQ7Rig= github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus/client_golang v1.21.1 h1:DOvXXTqVzvkIewV/CDPFdejpMCGeMcbGCQ8YOmu+Ibk= @@ -209,12 +271,28 @@ github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJ github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +github.com/sagikazarmark/crypt v0.17.0 h1:ZA/7pXyjkHoK4bW4mIdnCLvL8hd+Nrbiw7Dqk7D4qUk= +github.com/sagikazarmark/crypt v0.17.0/go.mod h1:SMtHTvdmsZMuY/bpZoqokSoChIrcJ/epOxZN58PbZDg= +github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= +github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= +github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= +github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/shirou/gopsutil/v3 v3.23.6 h1:5y46WPI9QBKBbK7EEccUPNXpJpNrvPuTD0O2zHEHT08= github.com/shirou/gopsutil/v3 v3.23.6/go.mod h1:j7QX50DrXYggrpN30W0Mo+I4/8U2UUIQrnrhqUeWrAU= github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= +github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= +github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= +github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= +github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ= +github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= @@ -227,6 +305,8 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/tinylib/msgp v1.1.8 h1:FCXC1xanKO4I8plpHGH2P7koL/RzZs12l/+r7vakfm0= github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw= github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= @@ -255,14 +335,24 @@ github.com/yuin/gopher-lua v1.1.1 h1:kYKnWBjvbNP4XLT3+bPEwAXJx262OhaHDWDVOPjL46M github.com/yuin/gopher-lua v1.1.1/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw= github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +go.etcd.io/etcd/api/v3 v3.5.10 h1:szRajuUUbLyppkhs9K6BRtjY37l66XQQmw7oZRANE4k= +go.etcd.io/etcd/api/v3 v3.5.10/go.mod h1:TidfmT4Uycad3NM/o25fG3J07odo4GBB9hoxaodFCtI= go.etcd.io/etcd/api/v3 v3.5.15 h1:3KpLJir1ZEBrYuV2v+Twaa/e2MdDCEZ/70H+lzEiwsk= go.etcd.io/etcd/api/v3 v3.5.15/go.mod h1:N9EhGzXq58WuMllgH9ZvnEr7SI9pS0k0+DHZezGp7jM= +go.etcd.io/etcd/client/pkg/v3 v3.5.10 h1:kfYIdQftBnbAq8pUWFXfpuuxFSKzlmM5cSn76JByiT0= +go.etcd.io/etcd/client/pkg/v3 v3.5.10/go.mod h1:DYivfIviIuQ8+/lCq4vcxuseg2P2XbHygkKwFo9fc8U= go.etcd.io/etcd/client/pkg/v3 v3.5.15 h1:fo0HpWz/KlHGMCC+YejpiCmyWDEuIpnTDzpJLB5fWlA= go.etcd.io/etcd/client/pkg/v3 v3.5.15/go.mod h1:mXDI4NAOwEiszrHCb0aqfAYNCrZP4e9hRca3d1YK8EU= +go.etcd.io/etcd/client/v2 v2.305.10 h1:MrmRktzv/XF8CvtQt+P6wLUlURaNpSDJHFZhe//2QE4= +go.etcd.io/etcd/client/v2 v2.305.10/go.mod h1:m3CKZi69HzilhVqtPDcjhSGp+kA1OmbNn0qamH80xjA= +go.etcd.io/etcd/client/v3 v3.5.10 h1:W9TXNZ+oB3MCd/8UjxHTWK5J9Nquw9fQBLJd5ne5/Ao= +go.etcd.io/etcd/client/v3 v3.5.10/go.mod h1:RVeBnDz2PUEZqTpgqwAtUd8nAPf5kjyFyND7P1VkOKc= go.etcd.io/etcd/client/v3 v3.5.15 h1:23M0eY4Fd/inNv1ZfU3AxrbbOdW79r9V9Rl62Nm6ip4= go.etcd.io/etcd/client/v3 v3.5.15/go.mod h1:CLSJxrYjvLtHsrPKsy7LmZEE+DK2ktfd2bN4RhBMwlU= go.mongodb.org/mongo-driver/v2 v2.4.0 h1:Oq6BmUAAFTzMeh6AonuDlgZMuAuEiUxoAD1koK5MuFo= go.mongodb.org/mongo-driver/v2 v2.4.0/go.mod h1:jHeEDJHJq7tm6ZF45Issun9dbogjfnPySb1vXA7EeAI= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= go.opentelemetry.io/contrib/detectors/gcp v1.34.0 h1:JRxssobiPg23otYU5SbWtQC//snGVIM3Tx6QRzlQBao= go.opentelemetry.io/contrib/detectors/gcp v1.34.0/go.mod h1:cV4BMFcscUR/ckqLkbfQmF0PRsq8w/lMGzdbCSveBHo= @@ -292,18 +382,28 @@ go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lI go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= +go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= +go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= +go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= +golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg= golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= @@ -315,6 +415,8 @@ golang.org/x/oauth2 v0.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbht golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= @@ -324,6 +426,7 @@ golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4= golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= @@ -336,6 +439,12 @@ golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +google.golang.org/api v0.153.0 h1:N1AwGhielyKFaUqH07/ZSIQR3uNPcV7NVw0vj+j4iR4= +google.golang.org/api v0.153.0/go.mod h1:3qNJX5eOmhiWYc67jRA/3GsDw97UFb5ivv7Y2PrriAY= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-20231212172506-995d672761c0 h1:YJ5pD9rF8o9Qtta0Cmy9rdBwkSjrTCT6XTiUQVOtIos= @@ -348,6 +457,7 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go. google.golang.org/genproto/googleapis/rpc v0.0.0-20251103181224-f26f9409b101/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= @@ -357,6 +467,8 @@ gopkg.in/h2non/gock.v1 v1.1.2 h1:jBbHXgGBK/AoPVfJh5x4r/WxIrElvbLel8TCZkkZJoY= gopkg.in/h2non/gock.v1 v1.1.2/go.mod h1:n7UGz/ckNChHiK05rDoiC4MYSunEC/lyaUm2WWaDva0= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/integrations/gf/export.go b/integrations/gf/export.go index c3a1777..1ba1dfa 100644 --- a/integrations/gf/export.go +++ b/integrations/gf/export.go @@ -381,13 +381,13 @@ const ( const ( // LogLevelDebug Debug level | 调试级别 - LogLevelDebug = slog.LevelDebug + LogLevelDebug = adapter.LogLevelDebug // LogLevelInfo Info level | 信息级别 - LogLevelInfo = slog.LevelInfo + LogLevelInfo = adapter.LogLevelInfo // LogLevelWarn Warn level | 警告级别 - LogLevelWarn = slog.LevelWarn + LogLevelWarn = adapter.LogLevelWarn // LogLevelError Error level | 错误级别 - LogLevelError = slog.LevelError + LogLevelError = adapter.LogLevelError ) // ============ Authentication | 登录认证 ============ diff --git a/integrations/gf/go.mod b/integrations/gf/go.mod index d4347f1..93163b8 100644 --- a/integrations/gf/go.mod +++ b/integrations/gf/go.mod @@ -3,8 +3,8 @@ module github.com/click33/sa-token-go/integrations/gf go 1.24.1 require ( - github.com/click33/sa-token-go/core v0.1.5 - github.com/click33/sa-token-go/stputil v0.1.5 + github.com/click33/sa-token-go/core v0.1.6 + github.com/click33/sa-token-go/stputil v0.1.6 github.com/gogf/gf/v2 v2.9.4 ) diff --git a/integrations/gin/export.go b/integrations/gin/export.go index 4b44fea..b809471 100644 --- a/integrations/gin/export.go +++ b/integrations/gin/export.go @@ -372,13 +372,13 @@ const ( const ( // LogLevelDebug Debug level | 调试级别 - LogLevelDebug = slog.LevelDebug + LogLevelDebug = adapter.LogLevelDebug // LogLevelInfo Info level | 信息级别 - LogLevelInfo = slog.LevelInfo + LogLevelInfo = adapter.LogLevelInfo // LogLevelWarn Warn level | 警告级别 - LogLevelWarn = slog.LevelWarn + LogLevelWarn = adapter.LogLevelWarn // LogLevelError Error level | 错误级别 - LogLevelError = slog.LevelError + LogLevelError = adapter.LogLevelError ) // ============ Authentication | 登录认证 ============ diff --git a/integrations/gin/go.mod b/integrations/gin/go.mod index 3b8d3d3..01bcc20 100644 --- a/integrations/gin/go.mod +++ b/integrations/gin/go.mod @@ -5,10 +5,9 @@ go 1.23.0 toolchain go1.24.1 require ( - github.com/click33/sa-token-go/core v0.1.5 - github.com/click33/sa-token-go/stputil v0.1.5 + github.com/click33/sa-token-go/core v0.1.6 + github.com/click33/sa-token-go/stputil v0.1.6 github.com/gin-gonic/gin v1.10.0 - github.com/stretchr/testify v1.11.1 ) require ( diff --git a/log/slog/config.go b/log/slog/config.go index 89b07f0..789af12 100644 --- a/log/slog/config.go +++ b/log/slog/config.go @@ -13,6 +13,8 @@ type LoggerConfig struct { Level LogLevel // Minimum output level | 最低输出级别 TimeFormat string // Timestamp format | 时间戳格式 Stdout bool // Print logs to console | 是否输出到控制台 + StdoutOnly bool // Only print to console, skip file output | 仅输出到控制台,不写入文件 + QueueSize int // Async write queue size | 异步写入队列大小 RotateSize int64 // File size threshold before rotation (bytes) | 文件滚动大小阈值(字节) RotateExpire time.Duration // Rotation interval by time duration | 文件时间滚动间隔 RotateBackupLimit int // Maximum number of rotated backup files | 最大备份文件数量 @@ -27,6 +29,8 @@ func DefaultLoggerConfig() *LoggerConfig { Prefix: DefaultPrefix, Level: LevelInfo, Stdout: true, + StdoutOnly: false, + QueueSize: DefaultQueueSize, RotateSize: DefaultRotateSize, RotateExpire: DefaultRotateExpire, RotateBackupLimit: DefaultRotateBackupLimit, @@ -70,6 +74,21 @@ func (c *LoggerConfig) SetStdout(enable bool) *LoggerConfig { return c } +// SetStdoutOnly enables console-only mode (no file output) | 设置仅输出到控制台模式 +func (c *LoggerConfig) SetStdoutOnly(enable bool) *LoggerConfig { + c.StdoutOnly = enable + if enable { + c.Stdout = true + } + return c +} + +// SetQueueSize sets the async write queue size | 设置异步写入队列大小 +func (c *LoggerConfig) SetQueueSize(size int) *LoggerConfig { + c.QueueSize = size + return c +} + // SetRotateSize sets the file size threshold for log rotation | 设置日志文件大小滚动阈值 func (c *LoggerConfig) SetRotateSize(size int64) *LoggerConfig { c.RotateSize = size diff --git a/log/slog/consts.go b/log/slog/consts.go index b0dcdfd..2ca3d17 100644 --- a/log/slog/consts.go +++ b/log/slog/consts.go @@ -1,16 +1,21 @@ // @Author daixk 2025/12/22 15:56:00 package slog -import "time" +import ( + "time" -// LogLevel defines severity level | 日志级别定义 -type LogLevel int + "github.com/click33/sa-token-go/core/adapter" +) + +// LogLevel is an alias for adapter.LogLevel | 日志级别别名 +type LogLevel = adapter.LogLevel +// Log level constants | 日志级别常量 const ( - LevelDebug LogLevel = iota + 1 // Debug level | 调试级别 - LevelInfo // Info level | 信息级别 - LevelWarn // Warn level | 警告级别 - LevelError // Error level | 错误级别(最高) + LevelDebug = adapter.LogLevelDebug // Debug level | 调试级别 + LevelInfo = adapter.LogLevelInfo // Info level | 信息级别 + LevelWarn = adapter.LogLevelWarn // Warn level | 警告级别 + LevelError = adapter.LogLevelError // Error level | 错误级别(最高) ) const ( @@ -19,6 +24,7 @@ const ( DefaultTimeFormat = "2006-01-02 15:04:05" // Default time format | 默认时间格式 DefaultDirName = "sa_token_go_logs" // Default log directory name | 默认日志目录名 DefaultBaseName = "SA-TOKEN-GO" // Default log filename prefix | 默认日志文件基础前缀 + DefaultQueueSize = 4096 // Default async queue size | 默认异步队列大小 DefaultRotateSize = 10 * 1024 * 1024 // Rotate threshold (10MB) | 文件滚动大小阈值 DefaultRotateExpire = 24 * time.Hour // Rotate by time interval (1 day) | 时间滚动间隔 DefaultRotateBackupLimit = 10 // Max number of backups | 最大备份数量 diff --git a/log/slog/doc.go b/log/slog/doc.go new file mode 100644 index 0000000..1f8d972 --- /dev/null +++ b/log/slog/doc.go @@ -0,0 +1,18 @@ +// @Author daixk 2025/12/26 15:17:00 +package slog + +// Package slog provides an async logging implementation for sa-token-go. +// +// Features: +// - Async write with buffered queue (non-blocking) +// - Log rotation by size and time +// - Auto cleanup of expired backup files +// - Runtime config modification (level, prefix, stdout) +// - Thread-safe design with proper locking +// +// TODO: Future enhancements | 未来增强计划: +// - [ ] Structured logging with JSON format output | 结构化日志(JSON 格式输出) +// - [ ] Sampling and rate limiting mechanism | 日志采样与限流机制 +// - [ ] Trace/Span ID support for distributed tracing | 分布式链路追踪 trace/span ID 支持 +// - [ ] Log aggregation hooks (e.g., send to ELK, Loki) | 日志聚合钩子(如发送到 ELK、Loki) +// - [ ] Context-aware logging with context.Context | 支持 context.Context 的上下文日志 diff --git a/log/slog/log_adaper_slog.go b/log/slog/log_adaper_slog.go index 5a1a3e5..9ad3f04 100644 --- a/log/slog/log_adaper_slog.go +++ b/log/slog/log_adaper_slog.go @@ -1,10 +1,11 @@ -// @Author daixk +// @Author daixk 2025-12-26 14:14:15 package slog import ( "bytes" + "crypto/rand" "fmt" - "math/rand" + "math/big" "os" "path/filepath" "sort" @@ -17,7 +18,6 @@ import ( // Logger implements ILogger + LoggerControl | 日志核心实现 type Logger struct { - // ---- Config & State ---- cfg *LoggerConfig // Logger configuration | 日志配置 cfgMu sync.RWMutex // Config lock | 配置锁 @@ -35,8 +35,7 @@ type Logger struct { wg sync.WaitGroup // ---- Time Cache ---- - cacheSec int64 // Cached timestamp seconds | 缓存秒级时间戳 - cacheStr atomic.Value // Cached formatted timestamp | 缓存格式化后的时间字符串 + timeCache atomic.Value // Cached time info | 缓存的时间信息 // ---- State ---- closed uint32 // Closed flag | 关闭标记 @@ -45,6 +44,12 @@ type Logger struct { closeOnce sync.Once // Ensure Close only executes once | 确保 Close 只执行一次 } +// timeCacheEntry stores cached timestamp | 时间缓存条目 +type timeCacheEntry struct { + sec int64 // Unix seconds | Unix 秒 + str string // Formatted string | 格式化字符串 +} + // NewLoggerWithConfig creates a logger instance | 使用配置创建日志器 func NewLoggerWithConfig(cfg *LoggerConfig) (*Logger, error) { newCfg, err := prepareConfig(cfg) @@ -52,15 +57,26 @@ func NewLoggerWithConfig(cfg *LoggerConfig) (*Logger, error) { return nil, err } + queueSize := newCfg.QueueSize + if queueSize <= 0 { + queueSize = DefaultQueueSize + } + l := &Logger{ cfg: newCfg, - queue: make(chan []byte, 4096), + queue: make(chan []byte, queueSize), quit: make(chan struct{}), lastRotate: time.Now(), } - l.wg.Add(1) + // Initialize time cache | 初始化时间缓存 + now := time.Now() + l.timeCache.Store(&timeCacheEntry{ + sec: now.Unix(), + str: now.Format(newCfg.TimeFormat), + }) + l.wg.Add(1) go func() { defer l.wg.Done() l.writerLoop() @@ -78,7 +94,7 @@ func (l *Logger) write(level LogLevel, args ...any) { if level < cfg.Level { return } - l.enqueue(l.buildLine(level, args...)) + l.enqueue(l.buildLine(level, cfg, args...)) } // writef handles formatted log output | 输出格式化日志 @@ -92,7 +108,7 @@ func (l *Logger) writef(level LogLevel, format string, args ...any) { } buf := getBuf() _, _ = fmt.Fprintf(buf, format, args...) - line := l.buildLine(level, buf.String()) + line := l.buildLine(level, cfg, buf.String()) putBuf(buf) l.enqueue(line) } @@ -113,28 +129,18 @@ func (l *Logger) enqueue(b []byte) { // ---- Build Log Line ---- // buildLine builds complete log line | 构建完整日志行 -func (l *Logger) buildLine(level LogLevel, args ...any) []byte { - cfg := l.currentCfg() +func (l *Logger) buildLine(level LogLevel, cfg LoggerConfig, args ...any) []byte { buf := getBuf() - // timestamp caching | 时间戳缓存 + // Get cached timestamp or format new one | 获取缓存时间戳或格式化新的 now := time.Now() sec := now.Unix() - if atomic.LoadInt64(&l.cacheSec) != sec { - atomic.StoreInt64(&l.cacheSec, sec) - l.cacheStr.Store(now.Format(cfg.TimeFormat)) - } - - // write time prefix | 写入时间前缀 - if ts, ok := l.cacheStr.Load().(string); ok { - buf.WriteString(ts) - } else { - buf.WriteString(now.Format(cfg.TimeFormat)) - } + ts := l.getTimeString(now, sec, cfg.TimeFormat) + buf.WriteString(ts) buf.WriteString(" [") - buf.WriteString(l.levelString(level)) + buf.WriteString(levelString(level)) buf.WriteString("] ") buf.WriteString(cfg.Prefix) @@ -143,7 +149,7 @@ func (l *Logger) buildLine(level LogLevel, args ...any) []byte { if i > 0 { buf.WriteByte(' ') } - l.appendValue(buf, arg) + appendValue(buf, arg) } buf.WriteByte('\n') @@ -154,20 +160,59 @@ func (l *Logger) buildLine(level LogLevel, args ...any) []byte { return out } -// appendValue writes a single value | 写入单个参数 -func (l *Logger) appendValue(buf *bytes.Buffer, v any) { +// getTimeString returns cached or formatted time string | 返回缓存或格式化的时间字符串 +func (l *Logger) getTimeString(now time.Time, sec int64, format string) string { + // Try to load from cache | 尝试从缓存加载 + if cached, ok := l.timeCache.Load().(*timeCacheEntry); ok && cached.sec == sec { + return cached.str + } + + // Format new string and update cache (atomic, no race) | 格式化新字符串并更新缓存 + str := now.Format(format) + l.timeCache.Store(&timeCacheEntry{sec: sec, str: str}) + return str +} + +// appendValue writes a single value with optimized type handling | 写入单个参数(优化类型处理) +func appendValue(buf *bytes.Buffer, v any) { + if v == nil { + buf.WriteString("") + return + } + switch val := v.(type) { case string: buf.WriteString(val) case []byte: buf.Write(val) case error: - buf.WriteString(val.Error()) + if val != nil { + buf.WriteString(val.Error()) + } else { + buf.WriteString("") + } - case int, int8, int16, int32, int64: - buf.WriteString(fmt.Sprintf("%d", val)) - case uint, uint8, uint16, uint32, uint64: - buf.WriteString(fmt.Sprintf("%d", val)) + // Optimized integer handling | 优化整数处理 + case int: + buf.WriteString(strconv.FormatInt(int64(val), 10)) + case int8: + buf.WriteString(strconv.FormatInt(int64(val), 10)) + case int16: + buf.WriteString(strconv.FormatInt(int64(val), 10)) + case int32: + buf.WriteString(strconv.FormatInt(int64(val), 10)) + case int64: + buf.WriteString(strconv.FormatInt(val, 10)) + case uint: + buf.WriteString(strconv.FormatUint(uint64(val), 10)) + case uint8: + buf.WriteString(strconv.FormatUint(uint64(val), 10)) + case uint16: + buf.WriteString(strconv.FormatUint(uint64(val), 10)) + case uint32: + buf.WriteString(strconv.FormatUint(uint64(val), 10)) + case uint64: + buf.WriteString(strconv.FormatUint(val, 10)) case float32: buf.WriteString(strconv.FormatFloat(float64(val), 'g', -1, 32)) @@ -203,14 +248,14 @@ func (l *Logger) writerLoop() { if !ok { return } - l.writeToFile(b) + l.writeToOutput(b) case <-l.quit: // drain queue | 退出前清空队列 for { select { case b := <-l.queue: - l.writeToFile(b) + l.writeToOutput(b) default: return } @@ -219,9 +264,18 @@ func (l *Logger) writerLoop() { } } -// writeToFile writes to current file | 写入文件 -func (l *Logger) writeToFile(b []byte) { +// writeToOutput writes to file and/or stdout | 写入文件和/或控制台 +func (l *Logger) writeToOutput(b []byte) { cfg := l.currentCfg() + + // StdoutOnly mode: only print to console | 仅控制台模式 + if cfg.StdoutOnly { + if cfg.Stdout { + _, _ = os.Stdout.Write(b) + } + return + } + now := time.Now() l.fileMu.Lock() @@ -229,6 +283,10 @@ func (l *Logger) writeToFile(b []byte) { // open file if needed | 无文件则打开 if err := l.ensureLogFile(now, cfg); err != nil { + // File open failed, fallback to stdout | 文件打开失败,回退到控制台 + if cfg.Stdout { + _, _ = os.Stdout.Write(b) + } return } @@ -237,7 +295,11 @@ func (l *Logger) writeToFile(b []byte) { if err != nil { _ = l.curFile.Close() l.curFile = nil - _ = l.openNewFile(now, cfg) + // Retry once with new file | 重试一次新文件 + if retryErr := l.openNewFile(now, cfg); retryErr == nil && l.curFile != nil { + n, _ = l.curFile.Write(b) + l.curSize += int64(n) + } } else { l.curSize += int64(n) } @@ -313,19 +375,30 @@ func (l *Logger) rotate(cfg LoggerConfig) error { newPath := filepath.Join(cfg.Path, newName) if err := os.Rename(old, newPath); err != nil { - _ = os.Rename(old, filepath.Join(cfg.Path, base+fmt.Sprintf("_%06d.log", rand.Intn(1_000_000)))) + // Use crypto/rand for secure random number | 使用加密安全的随机数 + randNum := secureRandomInt(1_000_000) + _ = os.Rename(old, filepath.Join(cfg.Path, base+fmt.Sprintf("_%06d.log", randNum))) } l.curSize = 0 l.curName = "" l.lastRotate = now - l.cleanup(cfg) + // Async cleanup to avoid blocking writes | 异步清理避免阻塞写入 + go l.cleanup(cfg) + return l.openNewFile(now, cfg) } // cleanup removes expired logs | 清理过期/多余日志文件 func (l *Logger) cleanup(cfg LoggerConfig) { + // Recover from panic to avoid crashing the program | 捕获 panic 避免程序崩溃 + defer func() { + if r := recover(); r != nil { + // Silently ignore cleanup errors | 静默忽略清理错误 + } + }() + // base is the fixed prefix of log files for this logger | base 为该 Logger 对应日志文件的固定前缀 base := normalizeBaseName(cfg.FileFormat) if base == "" { @@ -368,7 +441,7 @@ func (l *Logger) cleanup(cfg LoggerConfig) { } // 当前正在写入的文件此时尚未创建(在 rotate 之后), - // 这里收集到的全是“备份文件”,后续按数量进行裁剪 + // 这里收集到的全是"备份文件",后续按数量进行裁剪 keep = append(keep, struct { path string t time.Time @@ -413,28 +486,28 @@ func (l *Logger) formatFileName(t time.Time, cfg LoggerConfig) string { // SetLevel updates minimum level | 动态更新日志级别 func (l *Logger) SetLevel(level LogLevel) { l.cfgMu.Lock() + defer l.cfgMu.Unlock() if l.cfg != nil { l.cfg.Level = level } - l.cfgMu.Unlock() } // SetPrefix updates prefix | 动态更新日志前缀 func (l *Logger) SetPrefix(prefix string) { l.cfgMu.Lock() + defer l.cfgMu.Unlock() if l.cfg != nil { l.cfg.Prefix = prefix } - l.cfgMu.Unlock() } // SetStdout enables/disables stdout | 开关控制台输出 func (l *Logger) SetStdout(enable bool) { l.cfgMu.Lock() + defer l.cfgMu.Unlock() if l.cfg != nil { l.cfg.Stdout = enable } - l.cfgMu.Unlock() } // SetConfig replaces config and reopens log file | 动态替换配置并重新创建日志文件 @@ -444,8 +517,12 @@ func (l *Logger) SetConfig(cfg *LoggerConfig) { return } - l.cfgMu.Lock() + // Lock in consistent order: fileMu first, then cfgMu | 统一锁顺序:先 fileMu,再 cfgMu l.fileMu.Lock() + defer l.fileMu.Unlock() + + l.cfgMu.Lock() + defer l.cfgMu.Unlock() l.cfg = newCfg @@ -458,9 +535,6 @@ func (l *Logger) SetConfig(cfg *LoggerConfig) { l.curName = "" l.curSize = 0 l.lastRotate = time.Now() - - l.fileMu.Unlock() - l.cfgMu.Unlock() } // Close stops logger | 关闭日志系统 @@ -543,12 +617,23 @@ func prepareConfig(cfg *LoggerConfig) (*LoggerConfig, error) { if c.TimeFormat == "" { c.TimeFormat = DefaultTimeFormat } - if c.FileFormat == "" { - c.FileFormat = DefaultFileFormat - } if c.Prefix == "" { c.Prefix = DefaultPrefix } + if c.QueueSize <= 0 { + c.QueueSize = DefaultQueueSize + } + + // StdoutOnly mode doesn't need file config | 仅控制台模式不需要文件配置 + if c.StdoutOnly { + c.Stdout = true + return &c, nil + } + + // File mode: apply file-related defaults | 文件模式:应用文件相关默认值 + if c.FileFormat == "" { + c.FileFormat = DefaultFileFormat + } if c.RotateSize <= 0 { c.RotateSize = DefaultRotateSize } @@ -562,7 +647,14 @@ func prepareConfig(cfg *LoggerConfig) (*LoggerConfig, error) { c.RotateBackupDays = 0 } - c.Path = ensureDefaultPath(&c) + // Ensure path exists | 确保路径存在 + if c.Path == "" { + wd, err := os.Getwd() + if err != nil { + wd = "." + } + c.Path = filepath.Join(wd, DefaultDirName) + } if err := os.MkdirAll(c.Path, 0755); err != nil { return nil, fmt.Errorf("failed to create log directory: %w", err) @@ -583,19 +675,8 @@ func (l *Logger) currentCfg() LoggerConfig { } // levelString converts log level to string | 将日志级别转换为字符串 -func (l *Logger) levelString(level LogLevel) string { - switch level { - case LevelDebug: - return "DEBUG" - case LevelInfo: - return "INFO" - case LevelWarn: - return "WARN" - case LevelError: - return "ERROR" - default: - return "UNKNOWN" - } +func levelString(level LogLevel) string { + return level.String() } // normalizeBaseName extracts static name | 提取基础日志文件名前缀 @@ -621,18 +702,13 @@ func normalizeBaseName(format string) string { return name } -// ensureDefaultPath ensures the log directory exists; if not set, uses the log path | 确保日志目录存在;如果未设置则使用默认路径 -func ensureDefaultPath(cfg *LoggerConfig) string { - if cfg.Path != "" { - return cfg.Path - } - wd, err := os.Getwd() +// secureRandomInt returns a cryptographically secure random int | 返回加密安全的随机整数 +func secureRandomInt(max int) int { + n, err := rand.Int(rand.Reader, big.NewInt(int64(max))) if err != nil { - wd = "." + return 0 } - path := filepath.Join(wd, DefaultDirName) - _ = os.MkdirAll(path, 0755) - return path + return int(n.Int64()) } // ---- Logging API ---- diff --git a/log/slog/slog_test.go b/log/slog/slog_test.go new file mode 100644 index 0000000..5ce6b57 --- /dev/null +++ b/log/slog/slog_test.go @@ -0,0 +1,964 @@ +// @Author daixk +package slog + +import ( + "bytes" + "errors" + "os" + "path/filepath" + "strings" + "sync" + "testing" + "time" +) + +// ============ LogLevel Tests | 日志级别测试 ============ + +func TestLogLevel_String(t *testing.T) { + tests := []struct { + level LogLevel + expected string + }{ + {LevelDebug, "DEBUG"}, + {LevelInfo, "INFO"}, + {LevelWarn, "WARN"}, + {LevelError, "ERROR"}, + {LogLevel(0), "UNKNOWN"}, + {LogLevel(100), "UNKNOWN"}, + } + + for _, tt := range tests { + t.Run(tt.expected, func(t *testing.T) { + if got := tt.level.String(); got != tt.expected { + t.Errorf("LogLevel.String() = %v, want %v", got, tt.expected) + } + }) + } +} + +// ============ LoggerConfig Tests | 配置测试 ============ + +func TestDefaultLoggerConfig(t *testing.T) { + cfg := DefaultLoggerConfig() + + if cfg.TimeFormat != DefaultTimeFormat { + t.Errorf("TimeFormat = %v, want %v", cfg.TimeFormat, DefaultTimeFormat) + } + if cfg.FileFormat != DefaultFileFormat { + t.Errorf("FileFormat = %v, want %v", cfg.FileFormat, DefaultFileFormat) + } + if cfg.Prefix != DefaultPrefix { + t.Errorf("Prefix = %v, want %v", cfg.Prefix, DefaultPrefix) + } + if cfg.Level != LevelInfo { + t.Errorf("Level = %v, want %v", cfg.Level, LevelInfo) + } + if !cfg.Stdout { + t.Error("Stdout should be true by default") + } + if cfg.StdoutOnly { + t.Error("StdoutOnly should be false by default") + } + if cfg.QueueSize != DefaultQueueSize { + t.Errorf("QueueSize = %v, want %v", cfg.QueueSize, DefaultQueueSize) + } + if cfg.RotateSize != DefaultRotateSize { + t.Errorf("RotateSize = %v, want %v", cfg.RotateSize, DefaultRotateSize) + } +} + +func TestLoggerConfig_Setters(t *testing.T) { + cfg := &LoggerConfig{} + testPath := "test_logs_path" + + cfg.SetPath(testPath). + SetFileFormat("test_{Y}-{m}-{d}.log"). + SetPrefix("[TEST] "). + SetLevel(LevelDebug). + SetTimeFormat("2006-01-02"). + SetStdout(true). + SetStdoutOnly(false). + SetQueueSize(1024). + SetRotateSize(1024 * 1024). + SetRotateExpire(time.Hour). + SetRotateBackupLimit(5). + SetRotateBackupDays(3) + + if cfg.Path != testPath { + t.Errorf("Path = %v, want %v", cfg.Path, testPath) + } + if cfg.FileFormat != "test_{Y}-{m}-{d}.log" { + t.Errorf("FileFormat = %v", cfg.FileFormat) + } + if cfg.Prefix != "[TEST] " { + t.Errorf("Prefix = %v", cfg.Prefix) + } + if cfg.Level != LevelDebug { + t.Errorf("Level = %v", cfg.Level) + } + if cfg.QueueSize != 1024 { + t.Errorf("QueueSize = %v", cfg.QueueSize) + } + if cfg.RotateBackupLimit != 5 { + t.Errorf("RotateBackupLimit = %v", cfg.RotateBackupLimit) + } +} + +func TestLoggerConfig_SetStdoutOnly(t *testing.T) { + cfg := &LoggerConfig{Stdout: false} + + cfg.SetStdoutOnly(true) + + if !cfg.Stdout { + t.Error("SetStdoutOnly(true) should also set Stdout to true") + } + if !cfg.StdoutOnly { + t.Error("StdoutOnly should be true") + } +} + +func TestLoggerConfig_Clone(t *testing.T) { + original := DefaultLoggerConfig() + original.Path = "original_path" + + cloned := original.Clone() + + if cloned.Path != original.Path { + t.Errorf("Clone().Path = %v, want %v", cloned.Path, original.Path) + } + + // Modify clone should not affect original + cloned.Path = "cloned_path" + if original.Path == cloned.Path { + t.Error("Modifying clone should not affect original") + } +} + +func TestLoggerConfig_Clone_Nil(t *testing.T) { + var cfg *LoggerConfig + cloned := cfg.Clone() + + if cloned == nil { + t.Error("Clone of nil should return empty config, not nil") + } +} + +// ============ Logger Creation Tests | 日志器创建测试 ============ + +func TestNewLoggerWithConfig_StdoutOnly(t *testing.T) { + cfg := &LoggerConfig{ + Stdout: true, + StdoutOnly: true, + QueueSize: DefaultQueueSize, + } + + logger, err := NewLoggerWithConfig(cfg) + if err != nil { + t.Fatalf("NewLoggerWithConfig() error = %v", err) + } + defer logger.Close() + + // StdoutOnly mode should not create directory + if logger.LogPath() != "" { + t.Errorf("StdoutOnly mode should have empty path, got %v", logger.LogPath()) + } +} + +func TestNewLoggerWithConfig_WithPath(t *testing.T) { + tmpDir := t.TempDir() + //tmpDir, _ := os.Getwd() + + cfg := DefaultLoggerConfig() + cfg.Path = tmpDir + cfg.Stdout = false + + logger, err := NewLoggerWithConfig(cfg) + if err != nil { + t.Fatalf("NewLoggerWithConfig() error = %v", err) + } + defer logger.Close() + + if logger.LogPath() != tmpDir { + t.Errorf("LogPath() = %v, want %v", logger.LogPath(), tmpDir) + } +} + +func TestNewLoggerWithConfig_NilConfig(t *testing.T) { + // Should create logger with default config + logger, err := NewLoggerWithConfig(nil) + if err != nil { + t.Fatalf("NewLoggerWithConfig(nil) error = %v", err) + } + defer logger.Close() + + // Clean up default directory + defer os.RemoveAll(logger.LogPath()) +} + +func TestNewLoggerWithConfig_InvalidPath(t *testing.T) { + cfg := DefaultLoggerConfig() + // Use invalid path (NUL is invalid on Windows, /dev/null/invalid on Unix) + cfg.Path = string([]byte{0}) // Null byte is invalid in paths + + _, err := NewLoggerWithConfig(cfg) + if err == nil { + t.Error("Expected error for invalid path") + } +} + +// ============ Logging Tests | 日志记录测试 ============ + +func TestLogger_AllLevels(t *testing.T) { + tmpDir := t.TempDir() + //tmpDir, _ := os.Getwd() + + cfg := &LoggerConfig{ + Path: tmpDir, + Level: LevelDebug, + Stdout: false, + FileFormat: "test.log", + QueueSize: 100, + } + + logger, err := NewLoggerWithConfig(cfg) + if err != nil { + t.Fatalf("NewLoggerWithConfig() error = %v", err) + } + + // Log at all levels + logger.Debug("debug message") + logger.Debugf("debug formatted %d", 1) + logger.Info("info message") + logger.Infof("info formatted %d", 2) + logger.Warn("warn message") + logger.Warnf("warn formatted %d", 3) + logger.Error("error message") + logger.Errorf("error formatted %d", 4) + logger.Print("print message") + logger.Printf("print formatted %d", 5) + + logger.Close() + + // Read log file and verify + content, err := os.ReadFile(filepath.Join(tmpDir, "test.log")) + if err != nil { + t.Fatalf("Failed to read log file: %v", err) + } + + lines := strings.Split(string(content), "\n") + expectedCount := 10 // 5 pairs of log calls + + actualCount := 0 + for _, line := range lines { + if strings.TrimSpace(line) != "" { + actualCount++ + } + } + + if actualCount != expectedCount { + t.Errorf("Expected %d log lines, got %d", expectedCount, actualCount) + } + + // Verify level filtering works + if !strings.Contains(string(content), "[DEBUG]") { + t.Error("Should contain DEBUG logs") + } + if !strings.Contains(string(content), "[INFO]") { + t.Error("Should contain INFO logs") + } + if !strings.Contains(string(content), "[WARN]") { + t.Error("Should contain WARN logs") + } + if !strings.Contains(string(content), "[ERROR]") { + t.Error("Should contain ERROR logs") + } +} + +func TestLogger_LevelFiltering(t *testing.T) { + tmpDir := t.TempDir() + //tmpDir, _ := os.Getwd() + + cfg := &LoggerConfig{ + Path: tmpDir, + Level: LevelWarn, // Only WARN and ERROR + Stdout: false, + FileFormat: "test.log", + QueueSize: 100, + } + + logger, err := NewLoggerWithConfig(cfg) + if err != nil { + t.Fatalf("NewLoggerWithConfig() error = %v", err) + } + + logger.Debug("should not appear") + logger.Info("should not appear") + logger.Warn("should appear") + logger.Error("should appear") + + logger.Close() + + content, err := os.ReadFile(filepath.Join(tmpDir, "test.log")) + if err != nil { + t.Fatalf("Failed to read log file: %v", err) + } + + if strings.Contains(string(content), "[DEBUG]") { + t.Error("Should NOT contain DEBUG logs") + } + if strings.Contains(string(content), "[INFO]") { + t.Error("Should NOT contain INFO logs") + } + if !strings.Contains(string(content), "[WARN]") { + t.Error("Should contain WARN logs") + } + if !strings.Contains(string(content), "[ERROR]") { + t.Error("Should contain ERROR logs") + } +} + +// ============ appendValue Tests | 值追加测试 ============ + +func TestAppendValue_AllTypes(t *testing.T) { + tests := []struct { + name string + value any + expected string + }{ + {"nil", nil, ""}, + {"string", "hello", "hello"}, + {"bytes", []byte("world"), "world"}, + {"error", errors.New("test error"), "test error"}, + {"nil error", error(nil), ""}, + {"int", 42, "42"}, + {"int8", int8(-8), "-8"}, + {"int16", int16(-16), "-16"}, + {"int32", int32(-32), "-32"}, + {"int64", int64(-64), "-64"}, + {"uint", uint(42), "42"}, + {"uint8", uint8(8), "8"}, + {"uint16", uint16(16), "16"}, + {"uint32", uint32(32), "32"}, + {"uint64", uint64(64), "64"}, + {"float32", float32(3.14), "3.14"}, + {"float64", float64(3.14159), "3.14159"}, + {"bool true", true, "true"}, + {"bool false", false, "false"}, + {"time", time.Date(2025, 1, 1, 12, 0, 0, 0, time.UTC), "2025-01-01 12:00:00"}, + {"struct", struct{ Name string }{"test"}, "{test}"}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + buf := &bytes.Buffer{} + appendValue(buf, tt.value) + + if got := buf.String(); got != tt.expected { + t.Errorf("appendValue() = %v, want %v", got, tt.expected) + } + }) + } +} + +// ============ Runtime Control Tests | 运行时控制测试 ============ + +func TestLogger_SetLevel(t *testing.T) { + cfg := &LoggerConfig{ + Stdout: true, + StdoutOnly: true, + QueueSize: DefaultQueueSize, + } + logger, _ := NewLoggerWithConfig(cfg) + defer logger.Close() + + logger.SetLevel(LevelError) + + currentCfg := logger.currentCfg() + if currentCfg.Level != LevelError { + t.Errorf("Level = %v, want %v", currentCfg.Level, LevelError) + } +} + +func TestLogger_SetPrefix(t *testing.T) { + cfg := &LoggerConfig{ + Stdout: true, + StdoutOnly: true, + QueueSize: DefaultQueueSize, + } + logger, _ := NewLoggerWithConfig(cfg) + defer logger.Close() + + logger.SetPrefix("[NEW] ") + + currentCfg := logger.currentCfg() + if currentCfg.Prefix != "[NEW] " { + t.Errorf("Prefix = %v, want [NEW] ", currentCfg.Prefix) + } +} + +func TestLogger_SetStdout(t *testing.T) { + cfg := &LoggerConfig{ + Stdout: true, + StdoutOnly: true, + QueueSize: DefaultQueueSize, + } + logger, _ := NewLoggerWithConfig(cfg) + defer logger.Close() + + logger.SetStdout(false) + + currentCfg := logger.currentCfg() + if currentCfg.Stdout { + t.Error("Stdout should be false") + } +} + +func TestLogger_SetConfig(t *testing.T) { + tmpDir := t.TempDir() + //tmpDir, _ := os.Getwd() + + cfg := &LoggerConfig{ + Path: tmpDir, + Stdout: false, + FileFormat: "old.log", + QueueSize: 100, + } + + logger, _ := NewLoggerWithConfig(cfg) + defer logger.Close() + + logger.Info("old log") + + // Change config + newCfg := &LoggerConfig{ + Path: tmpDir, + Stdout: false, + FileFormat: "new.log", + Prefix: "[NEW] ", + QueueSize: 100, + } + + logger.SetConfig(newCfg) + logger.Info("new log") + + // Wait for async write + time.Sleep(100 * time.Millisecond) + logger.Flush() +} + +// ============ Concurrent Tests | 并发测试 ============ + +func TestLogger_ConcurrentWrite(t *testing.T) { + tmpDir := t.TempDir() + //tmpDir, _ := os.Getwd() + + cfg := &LoggerConfig{ + Path: tmpDir, + Level: LevelDebug, + Stdout: false, + FileFormat: "concurrent.log", + QueueSize: 1000, + } + + logger, err := NewLoggerWithConfig(cfg) + if err != nil { + t.Fatalf("NewLoggerWithConfig() error = %v", err) + } + + var wg sync.WaitGroup + goroutines := 10 + logsPerGoroutine := 100 + + for i := 0; i < goroutines; i++ { + wg.Add(1) + go func(id int) { + defer wg.Done() + for j := 0; j < logsPerGoroutine; j++ { + logger.Infof("goroutine %d, log %d", id, j) + } + }(i) + } + + wg.Wait() + logger.Close() + + content, err := os.ReadFile(filepath.Join(tmpDir, "concurrent.log")) + if err != nil { + t.Fatalf("Failed to read log file: %v", err) + } + + lines := strings.Split(strings.TrimSpace(string(content)), "\n") + expectedLines := goroutines * logsPerGoroutine + + if len(lines) != expectedLines { + t.Errorf("Expected %d lines, got %d", expectedLines, len(lines)) + } +} + +// ============ Close Tests | 关闭测试 ============ + +func TestLogger_DoubleClose(t *testing.T) { + cfg := &LoggerConfig{ + Stdout: true, + StdoutOnly: true, + QueueSize: DefaultQueueSize, + } + logger, _ := NewLoggerWithConfig(cfg) + + // Should not panic on double close + logger.Close() + logger.Close() +} + +func TestLogger_WriteAfterClose(t *testing.T) { + cfg := &LoggerConfig{ + Stdout: true, + StdoutOnly: true, + QueueSize: DefaultQueueSize, + } + logger, _ := NewLoggerWithConfig(cfg) + logger.Close() + + // Should not panic + logger.Info("after close") + logger.Infof("after close %d", 1) +} + +// ============ DropCount Tests | 丢弃计数测试 ============ + +func TestLogger_DropCount(t *testing.T) { + cfg := &LoggerConfig{ + Stdout: true, + StdoutOnly: true, + QueueSize: 1, // Very small queue + } + + logger, _ := NewLoggerWithConfig(cfg) + + initial := logger.DropCount() + if initial != 0 { + t.Errorf("Initial DropCount = %v, want 0", initial) + } + + // Flood the logger to potentially cause drops + for i := 0; i < 100; i++ { + logger.Info("flood message") + } + + logger.Close() + + // DropCount should be accessible after close + _ = logger.DropCount() +} + +// ============ Time Cache Tests | 时间缓存测试 ============ + +func TestLogger_TimeCache(t *testing.T) { + tmpDir := t.TempDir() + //tmpDir, _ := os.Getwd() + + cfg := &LoggerConfig{ + Path: tmpDir, + Level: LevelDebug, + Stdout: false, + FileFormat: "timecache.log", + QueueSize: 100, + } + + logger, _ := NewLoggerWithConfig(cfg) + + // Write multiple logs in same second - should use cache + for i := 0; i < 10; i++ { + logger.Info("same second log") + } + + logger.Close() + + content, err := os.ReadFile(filepath.Join(tmpDir, "timecache.log")) + if err != nil { + t.Fatalf("Failed to read log file: %v", err) + } + + lines := strings.Split(strings.TrimSpace(string(content)), "\n") + if len(lines) != 10 { + t.Errorf("Expected 10 lines, got %d", len(lines)) + } +} + +// ============ File Rotation Tests | 文件轮转测试 ============ + +func TestLogger_RotateBySize(t *testing.T) { + tmpDir := t.TempDir() + //tmpDir, _ := os.Getwd() + + cfg := &LoggerConfig{ + Path: tmpDir, + Level: LevelDebug, + Stdout: false, + FileFormat: "rotate.log", + RotateSize: 500, // Very small for testing + RotateBackupLimit: 3, + QueueSize: 100, + } + + logger, _ := NewLoggerWithConfig(cfg) + + // Write enough to trigger rotation + for i := 0; i < 100; i++ { + logger.Infof("rotation test message number %d with some padding text", i) + } + + logger.Close() + + // Wait for async cleanup + time.Sleep(200 * time.Millisecond) + + // Check for rotated files + files, _ := filepath.Glob(filepath.Join(tmpDir, "*.log")) + if len(files) == 0 { + t.Error("Expected at least one log file") + } + + t.Logf("Found %d log files after rotation", len(files)) +} + +// ============ Format Tests | 格式测试 ============ + +func TestFormatFileName(t *testing.T) { + logger := &Logger{} + + tests := []struct { + format string + time time.Time + expected string + }{ + { + format: "app_{Y}-{m}-{d}.log", + time: time.Date(2025, 6, 15, 0, 0, 0, 0, time.UTC), + expected: "app_2025-06-15.log", + }, + { + format: "log_{Y}{m}{d}", + time: time.Date(2025, 1, 1, 0, 0, 0, 0, time.UTC), + expected: "log_20250101.log", + }, + { + format: "", + time: time.Date(2025, 12, 31, 0, 0, 0, 0, time.UTC), + expected: "SA-TOKEN-GO_2025-12-31.log", + }, + } + + for _, tt := range tests { + t.Run(tt.format, func(t *testing.T) { + cfg := LoggerConfig{FileFormat: tt.format} + got := logger.formatFileName(tt.time, cfg) + if got != tt.expected { + t.Errorf("formatFileName() = %v, want %v", got, tt.expected) + } + }) + } +} + +func TestNormalizeBaseName(t *testing.T) { + tests := []struct { + format string + expected string + }{ + {"SA-TOKEN-GO_{Y}-{m}-{d}.log", "SA-TOKEN-GO"}, + {"app_{Y}{m}{d}.log", "app"}, + {"mylog-{Y}-{m}-{d}.log", "mylog"}, + {"simple.log", "simple"}, + {"{Y}-{m}-{d}.log", DefaultBaseName}, + {"", DefaultBaseName}, + } + + for _, tt := range tests { + t.Run(tt.format, func(t *testing.T) { + got := normalizeBaseName(tt.format) + if got != tt.expected { + t.Errorf("normalizeBaseName(%q) = %v, want %v", tt.format, got, tt.expected) + } + }) + } +} + +// ============ Benchmark Tests | 性能测试 ============ + +func BenchmarkLogger_Info(b *testing.B) { + cfg := &LoggerConfig{ + Stdout: false, + StdoutOnly: true, + QueueSize: DefaultQueueSize, + } + + logger, _ := NewLoggerWithConfig(cfg) + defer logger.Close() + + b.ResetTimer() + for i := 0; i < b.N; i++ { + logger.Info("benchmark message") + } +} + +func BenchmarkLogger_Infof(b *testing.B) { + cfg := &LoggerConfig{ + Stdout: false, + StdoutOnly: true, + QueueSize: DefaultQueueSize, + } + + logger, _ := NewLoggerWithConfig(cfg) + defer logger.Close() + + b.ResetTimer() + for i := 0; i < b.N; i++ { + logger.Infof("benchmark message %d", i) + } +} + +func BenchmarkLogger_Concurrent(b *testing.B) { + cfg := &LoggerConfig{ + Stdout: false, + StdoutOnly: true, + QueueSize: DefaultQueueSize, + } + + logger, _ := NewLoggerWithConfig(cfg) + defer logger.Close() + + b.ResetTimer() + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + logger.Info("concurrent benchmark") + } + }) +} + +func BenchmarkAppendValue_String(b *testing.B) { + buf := &bytes.Buffer{} + b.ResetTimer() + for i := 0; i < b.N; i++ { + buf.Reset() + appendValue(buf, "test string") + } +} + +func BenchmarkAppendValue_Int(b *testing.B) { + buf := &bytes.Buffer{} + b.ResetTimer() + for i := 0; i < b.N; i++ { + buf.Reset() + appendValue(buf, 12345678) + } +} + +func BenchmarkAppendValue_Float(b *testing.B) { + buf := &bytes.Buffer{} + b.ResetTimer() + for i := 0; i < b.N; i++ { + buf.Reset() + appendValue(buf, 3.14159265359) + } +} + +// ============ Edge Cases | 边界情况 ============ + +func TestLogger_EmptyMessage(t *testing.T) { + tmpDir := t.TempDir() + //tmpDir, _ := os.Getwd() + + cfg := &LoggerConfig{ + Path: tmpDir, + Level: LevelDebug, + Stdout: false, + FileFormat: "empty.log", + QueueSize: 100, + } + + logger, _ := NewLoggerWithConfig(cfg) + logger.Info("") + logger.Info() // No args + logger.Close() + + content, _ := os.ReadFile(filepath.Join(tmpDir, "empty.log")) + if len(content) == 0 { + t.Error("Log file should not be empty") + } +} + +func TestLogger_SpecialCharacters(t *testing.T) { + tmpDir := t.TempDir() + //tmpDir, _ := os.Getwd() + + cfg := &LoggerConfig{ + Path: tmpDir, + Level: LevelDebug, + Stdout: false, + FileFormat: "special.log", + QueueSize: 100, + } + + logger, _ := NewLoggerWithConfig(cfg) + logger.Info("hello\nworld") + logger.Info("tab\there") + logger.Info("中文日志") + logger.Info("emoji 🎉") + logger.Close() + + content, _ := os.ReadFile(filepath.Join(tmpDir, "special.log")) + if !strings.Contains(string(content), "中文日志") { + t.Error("Should contain Chinese characters") + } +} + +func TestLogger_LargeMessage(t *testing.T) { + tmpDir := t.TempDir() + //tmpDir, _ := os.Getwd() + + cfg := &LoggerConfig{ + Path: tmpDir, + Level: LevelDebug, + Stdout: false, + FileFormat: "large.log", + QueueSize: 100, + } + + logger, _ := NewLoggerWithConfig(cfg) + + // 1MB message + largeMsg := strings.Repeat("x", 1024*1024) + logger.Info(largeMsg) + logger.Close() + + info, err := os.Stat(filepath.Join(tmpDir, "large.log")) + if err != nil { + t.Fatalf("Failed to stat log file: %v", err) + } + + if info.Size() < 1024*1024 { + t.Errorf("Log file too small: %d bytes", info.Size()) + } +} + +// ============ Secure Random Tests | 安全随机数测试 ============ + +func TestSecureRandomInt(t *testing.T) { + seen := make(map[int]bool) + + for i := 0; i < 100; i++ { + n := secureRandomInt(1000000) + if n < 0 || n >= 1000000 { + t.Errorf("secureRandomInt returned out of range: %d", n) + } + seen[n] = true + } + + // Should have some variety (very unlikely to get < 50 unique in 100 tries) + if len(seen) < 50 { + t.Errorf("secureRandomInt seems not random enough: only %d unique values", len(seen)) + } +} + +// ============ Buffer Pool Tests | 缓冲池测试 ============ + +func TestBufferPool(t *testing.T) { + buf1 := getBuf() + buf1.WriteString("test") + putBuf(buf1) + + buf2 := getBuf() + if buf2.Len() != 0 { + t.Error("Buffer from pool should be reset") + } + putBuf(buf2) +} + +func BenchmarkBufferPool(b *testing.B) { + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + buf := getBuf() + buf.WriteString("test message for buffer pool") + putBuf(buf) + } + }) +} + +// ============ LogControl Interface Tests | 日志控制接口测试 ============ + +func TestLogger_ImplementsLogControl(t *testing.T) { + cfg := &LoggerConfig{ + Stdout: true, + StdoutOnly: true, + QueueSize: DefaultQueueSize, + } + + logger, _ := NewLoggerWithConfig(cfg) + defer logger.Close() + + // Test all LogControl methods + logger.SetLevel(LevelDebug) + logger.SetPrefix("[TEST] ") + logger.SetStdout(false) + logger.Flush() + + path := logger.LogPath() + if path != "" { + t.Errorf("StdoutOnly mode should have empty LogPath, got %v", path) + } + + dropCount := logger.DropCount() + if dropCount != 0 { + t.Errorf("Initial DropCount should be 0, got %v", dropCount) + } +} + +// ============ StdoutOnly Mode Tests | 仅控制台模式测试 ============ + +func TestLogger_StdoutOnlyMode(t *testing.T) { + cfg := &LoggerConfig{ + Stdout: true, + StdoutOnly: true, + Level: LevelDebug, + Prefix: "[STDOUT-ONLY] ", + QueueSize: 100, + } + + logger, err := NewLoggerWithConfig(cfg) + if err != nil { + t.Fatalf("NewLoggerWithConfig() error = %v", err) + } + defer logger.Close() + + // These should not panic and should output to stdout + logger.Debug("stdout only debug") + logger.Info("stdout only info") + logger.Warn("stdout only warn") + logger.Error("stdout only error") + + // Verify no file was created + if logger.LogPath() != "" { + t.Errorf("StdoutOnly mode should not have a log path") + } +} + +func TestLogger_StdoutOnlyWithStdoutDisabled(t *testing.T) { + // Edge case: StdoutOnly=true but Stdout=false + // prepareConfig should force Stdout=true + cfg := &LoggerConfig{ + Stdout: false, // Will be overridden + StdoutOnly: true, + QueueSize: 100, + } + + logger, err := NewLoggerWithConfig(cfg) + if err != nil { + t.Fatalf("NewLoggerWithConfig() error = %v", err) + } + defer logger.Close() + + currentCfg := logger.currentCfg() + if !currentCfg.Stdout { + t.Error("StdoutOnly mode should force Stdout=true") + } +} From 1080b0366061d24e2c3821127a6ba05bc1109cd7 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Fri, 26 Dec 2025 18:13:54 +0800 Subject: [PATCH 28/50] =?UTF-8?q?feat():=201=E3=80=81=E5=AE=8C=E5=96=84poo?= =?UTF-8?q?l=E4=BB=A5=E5=8F=8Asgenerator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/adapter/generator.go | 36 +++ core/builder/builder.go | 46 ++-- core/config/config.go | 12 +- core/errors.go | 6 + core/manager/manager.go | 4 +- core/oauth2/oauth2.go | 206 ++++++++++++++++++ generator/sgenerator/consts.go | 36 --- .../generator_adapter_sgenerator.go | 25 ++- integrations/gf/export.go | 46 +--- integrations/gin/export.go | 37 +--- pool/ants/config.go | 2 +- pool/ants/pool_adapter_ants.go | 55 +++-- 12 files changed, 350 insertions(+), 161 deletions(-) diff --git a/core/adapter/generator.go b/core/adapter/generator.go index 95c9f73..6d12fd1 100644 --- a/core/adapter/generator.go +++ b/core/adapter/generator.go @@ -1,6 +1,42 @@ // @Author daixk 2025/12/5 15:52:00 package adapter +// TokenStyle Token generation style | Token生成风格 +type TokenStyle string + +const ( + // TokenStyleUUID UUID style | UUID风格 + TokenStyleUUID TokenStyle = "uuid" + // TokenStyleSimple Simple random string | 简单随机字符串 + TokenStyleSimple TokenStyle = "simple" + // TokenStyleRandom32 32-bit random string | 32位随机字符串 + TokenStyleRandom32 TokenStyle = "random32" + // TokenStyleRandom64 64-bit random string | 64位随机字符串 + TokenStyleRandom64 TokenStyle = "random64" + // TokenStyleRandom128 128-bit random string | 128位随机字符串 + TokenStyleRandom128 TokenStyle = "random128" + // TokenStyleJWT JWT style | JWT风格 + TokenStyleJWT TokenStyle = "jwt" + // TokenStyleHash SHA256 hash-based style | SHA256哈希风格 + TokenStyleHash TokenStyle = "hash" + // TokenStyleTimestamp Timestamp-based style | 时间戳风格 + TokenStyleTimestamp TokenStyle = "timestamp" + // TokenStyleTik Short ID style (like TikTok) | Tik风格短ID(类似抖音) + TokenStyleTik TokenStyle = "tik" +) + +// IsValid checks if the TokenStyle is valid | 检查TokenStyle是否有效 +func (ts TokenStyle) IsValid() bool { + switch ts { + case TokenStyleUUID, TokenStyleSimple, TokenStyleRandom32, + TokenStyleRandom64, TokenStyleRandom128, TokenStyleJWT, + TokenStyleHash, TokenStyleTimestamp, TokenStyleTik: + return true + default: + return false + } +} + // Generator token generation interface | Token生成接口 type Generator interface { // Generate generates token based on implementation | 生成Token(由实现决定具体规则) diff --git a/core/builder/builder.go b/core/builder/builder.go index e5f468a..121f118 100644 --- a/core/builder/builder.go +++ b/core/builder/builder.go @@ -18,25 +18,25 @@ import ( // Builder provides fluent configuration for Sa-Token | Sa-Token 构建器用于流式配置 type Builder struct { - tokenName string // Token name used by client | 客户端 Token 名称 - timeout int64 // Token timeout seconds | Token 过期时间(秒) - maxRefresh int64 // Max auto-refresh duration | 最大无感刷新时间 - renewInterval int64 // Min renewal interval seconds | 最小续期间隔(秒) - activeTimeout int64 // Force offline when idle | 活跃超时时间(秒) - isConcurrent bool // Allow concurrent login | 是否允许并发登录 - isShare bool // Share same token among devices | 是否共用 Token - maxLoginCount int64 // Max concurrent login count | 最大并发登录数 - isReadBody bool // Read token from body | 是否从 Body 读取 Token - isReadHeader bool // Read token from header | 是否从 Header 读取 Token - isReadCookie bool // Read token from cookie | 是否从 Cookie 读取 Token - tokenStyle sgenerator.TokenStyle // Token generation style | Token 生成方式 - tokenSessionCheckLogin bool // Check login before Session | 读取 Session 时是否检查登录 - autoRenew bool // Enable renewal | 是否启用自动续期 - jwtSecretKey string // JWT secret key | JWT 密钥 - isLog bool // Enable log output | 是否启用日志 - isPrintBanner bool // Print startup banner | 是否打印启动 Banner - keyPrefix string // Storage key prefix | 存储键前缀 - authType string // Authentication system type | 认证体系类型 + tokenName string // Token name used by client | 客户端 Token 名称 + timeout int64 // Token timeout seconds | Token 过期时间(秒) + maxRefresh int64 // Max auto-refresh duration | 最大无感刷新时间 + renewInterval int64 // Min renewal interval seconds | 最小续期间隔(秒) + activeTimeout int64 // Force offline when idle | 活跃超时时间(秒) + isConcurrent bool // Allow concurrent login | 是否允许并发登录 + isShare bool // Share same token among devices | 是否共用 Token + maxLoginCount int64 // Max concurrent login count | 最大并发登录数 + isReadBody bool // Read token from body | 是否从 Body 读取 Token + isReadHeader bool // Read token from header | 是否从 Header 读取 Token + isReadCookie bool // Read token from cookie | 是否从 Cookie 读取 Token + tokenStyle adapter.TokenStyle // Token generation style | Token 生成方式 + tokenSessionCheckLogin bool // Check login before Session | 读取 Session 时是否检查登录 + autoRenew bool // Enable renewal | 是否启用自动续期 + jwtSecretKey string // JWT secret key | JWT 密钥 + isLog bool // Enable log output | 是否启用日志 + isPrintBanner bool // Print startup banner | 是否打印启动 Banner + keyPrefix string // Storage key prefix | 存储键前缀 + authType string // Authentication system type | 认证体系类型 cookieConfig *config.CookieConfig // Cookie config | Cookie 配置 renewPoolConfig *ants.RenewPoolConfig // Renew pool config | 续期协程池配置 @@ -66,7 +66,7 @@ func NewBuilder() *Builder { isReadBody: false, isReadHeader: true, isReadCookie: false, - tokenStyle: sgenerator.TokenStyleUUID, + tokenStyle: adapter.TokenStyleUUID, tokenSessionCheckLogin: true, autoRenew: true, jwtSecretKey: sgenerator.DefaultJWTSecret, @@ -154,7 +154,7 @@ func (b *Builder) IsReadCookie(isRead bool) *Builder { } // TokenStyle sets token generation style | 设置Token风格 -func (b *Builder) TokenStyle(style sgenerator.TokenStyle) *Builder { +func (b *Builder) TokenStyle(style adapter.TokenStyle) *Builder { b.tokenStyle = style return b } @@ -522,7 +522,7 @@ func (b *Builder) SetCustomRoleListFunc(f func(loginID string) ([]string, error) // Jwt sets TokenStyle to JWT and sets secret key | 设置为JWT模式并指定密钥 func (b *Builder) Jwt(secret string) *Builder { - b.tokenStyle = sgenerator.TokenStyleJWT + b.tokenStyle = adapter.TokenStyleJWT b.jwtSecretKey = secret return b } @@ -558,7 +558,7 @@ func (b *Builder) Build() *manager.Manager { b.cookieConfig = config.DefaultCookieConfig() } - // 初始化config + // Init config | 初始化config cfg := &config.Config{ TokenName: b.tokenName, Timeout: b.timeout, diff --git a/core/config/config.go b/core/config/config.go index e011ce5..d8a538a 100644 --- a/core/config/config.go +++ b/core/config/config.go @@ -2,7 +2,7 @@ package config import ( "fmt" - "github.com/click33/sa-token-go/generator/sgenerator" + "github.com/click33/sa-token-go/core/adapter" "strings" ) @@ -42,7 +42,7 @@ type Config struct { IsReadCookie bool // TokenStyle Token generation style | Token生成风格 - TokenStyle sgenerator.TokenStyle + TokenStyle adapter.TokenStyle // TokenSessionCheckLogin Whether to check if Token-Session is kicked out when logging in (true=check, false=skip) | 登录时是否检查Token-Session是否被踢下线(true=检查,false=不检查) TokenSessionCheckLogin bool @@ -104,7 +104,7 @@ func DefaultConfig() *Config { IsReadBody: false, IsReadHeader: true, IsReadCookie: false, - TokenStyle: sgenerator.TokenStyleUUID, + TokenStyle: adapter.TokenStyleUUID, TokenSessionCheckLogin: true, AutoRenew: true, JwtSecretKey: "", @@ -119,7 +119,7 @@ func DefaultConfig() *Config { // Validate validates the configuration | 验证配置是否合理 func (c *Config) Validate() error { // Check TokenStyle validity | 检查 Token 风格是否合法 - if !c.TokenStyle.IsValidTokenStyle() { + if !c.TokenStyle.IsValid() { return fmt.Errorf("invalid TokenStyle: %s", c.TokenStyle) } @@ -134,7 +134,7 @@ func (c *Config) Validate() error { } // Check JwtSecretKey if TokenStyle is JWT | 如果 Token 风格为 JWT,则检查密钥是否设置 - if c.TokenStyle == sgenerator.TokenStyleJWT && c.JwtSecretKey == "" { + if c.TokenStyle == adapter.TokenStyleJWT && c.JwtSecretKey == "" { return fmt.Errorf("JwtSecretKey is required when TokenStyle is JWT") } @@ -278,7 +278,7 @@ func (c *Config) SetIsReadCookie(isReadCookie bool) *Config { } // SetTokenStyle Set Token generation style | 设置Token风格 -func (c *Config) SetTokenStyle(style sgenerator.TokenStyle) *Config { +func (c *Config) SetTokenStyle(style adapter.TokenStyle) *Config { c.TokenStyle = style return c } diff --git a/core/errors.go b/core/errors.go index c67c950..5a87ffd 100644 --- a/core/errors.go +++ b/core/errors.go @@ -126,6 +126,12 @@ var ( // ErrInvalidScope indicates requested scope is not allowed | 请求的权限范围不被允许 ErrInvalidScope = fmt.Errorf("invalid scope: requested scope is not allowed for this client") + + // ErrInvalidGrantType indicates grant type is not allowed | 授权类型不被允许 + ErrInvalidGrantType = fmt.Errorf("invalid grant type: this grant type is not allowed for this client") + + // ErrInvalidUserCredentials indicates user credentials are incorrect | 用户凭证无效 + ErrInvalidUserCredentials = fmt.Errorf("invalid user credentials: username or password is incorrect") ) // ============ Session Errors | Session 错误 ============ diff --git a/core/manager/manager.go b/core/manager/manager.go index 234092c..e948485 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -78,12 +78,10 @@ func NewManager(cfg *config.Config, generator adapter.Generator, storage adapter serializer = codec_json.NewJSONSerializer() } - // Use no-op logger if logger is nil | 如果未传入日志实现,则使用空日志(不输出) - if logger == nil { + if cfg.IsLog && logger == nil { logger = nop.NewNopLogger() } - // 如果启用了自动续期并且pool为nil if cfg.AutoRenew && pool == nil { // Use default goroutine pool if pool is nil | 如果未传入协程池,则使用默认协程池 pool = ants.NewRenewPoolManagerWithDefaultConfig() diff --git a/core/oauth2/oauth2.go b/core/oauth2/oauth2.go index 2747165..6088071 100644 --- a/core/oauth2/oauth2.go +++ b/core/oauth2/oauth2.go @@ -192,6 +192,11 @@ func (s *OAuth2Server) ExchangeCodeForToken(ctx context.Context, code, clientID, return nil, core.ErrInvalidClientCredentials } + // Validate grant type | 验证授权类型 + if !s.isValidGrantType(client, GrantTypeAuthorizationCode) { + return nil, core.ErrInvalidGrantType + } + // Get authorization code | 获取授权码 key := s.getCodeKey(code) data, err := s.storage.Get(ctx, key) @@ -292,6 +297,11 @@ func (s *OAuth2Server) RefreshAccessToken(ctx context.Context, clientID, refresh return nil, core.ErrInvalidClientCredentials } + // Validate grant type | 验证授权类型 + if !s.isValidGrantType(client, GrantTypeRefreshToken) { + return nil, core.ErrInvalidGrantType + } + // Get refresh token | 获取刷新令牌 key := s.getRefreshKey(refreshToken) data, err := s.storage.Get(ctx, key) @@ -414,6 +424,21 @@ func (s *OAuth2Server) isValidScopes(client *Client, scopes []string) bool { return true } +// isValidGrantType Checks if grant type is allowed for client | 检查授权类型是否被允许 +func (s *OAuth2Server) isValidGrantType(client *Client, grantType GrantType) bool { + // If client has no grant type restrictions, allow all | 如果客户端没有授权类型限制,允许所有 + if len(client.GrantTypes) == 0 { + return true + } + + for _, gt := range client.GrantTypes { + if gt == grantType { + return true + } + } + return false +} + // generateAccessToken Generates access token and refresh token | 生成访问令牌和刷新令牌 func (s *OAuth2Server) generateAccessToken(ctx context.Context, userID, clientID string, scopes []string) (*AccessToken, error) { // Generate access token | 生成访问令牌 @@ -459,3 +484,184 @@ func (s *OAuth2Server) generateAccessToken(ctx context.Context, userID, clientID return token, nil } + +// ============ Client Credentials Grant | 客户端凭证模式 ============ + +// ClientCredentialsToken Gets access token using client credentials grant +// 使用客户端凭证模式获取访问令牌 +// +// This grant type is used for server-to-server communication where no user is involved. +// The client authenticates with its own credentials and receives an access token. +// 此授权类型用于服务器间通信,无需用户参与。客户端使用自己的凭证进行认证并获取访问令牌。 +// +// Usage | 用法: +// +// token, err := server.ClientCredentialsToken(ctx, "client_id", "client_secret", []string{"read", "write"}) +func (s *OAuth2Server) ClientCredentialsToken(ctx context.Context, clientID, clientSecret string, scopes []string) (*AccessToken, error) { + // Verify client credentials | 验证客户端凭证 + client, err := s.GetClient(clientID) + if err != nil { + return nil, err + } + + if client.ClientSecret != clientSecret { + return nil, core.ErrInvalidClientCredentials + } + + // Validate grant type | 验证授权类型 + if !s.isValidGrantType(client, GrantTypeClientCredentials) { + return nil, core.ErrInvalidGrantType + } + + // Validate scopes | 验证权限范围 + if !s.isValidScopes(client, scopes) { + return nil, core.ErrInvalidScope + } + + // For client credentials, userID is the clientID itself | 客户端凭证模式下,userID 就是 clientID + return s.generateAccessToken(ctx, clientID, clientID, scopes) +} + +// ============ Password Grant | 密码模式 ============ + +// UserValidator Function type for validating user credentials | 验证用户凭证的函数类型 +// Returns userID if validation succeeds, error otherwise | 验证成功返回 userID,否则返回错误 +type UserValidator func(username, password string) (userID string, err error) + +// PasswordGrantToken Gets access token using resource owner password credentials grant +// 使用密码模式获取访问令牌 +// +// This grant type is used when the application is highly trusted (e.g., official app). +// The user provides their username and password directly to the client. +// 此授权类型用于高度信任的应用(如官方App)。用户直接向客户端提供用户名和密码。 +// +// SECURITY WARNING: This grant type should only be used when other flows are not viable. +// 安全警告:仅在其他授权流程不可行时才应使用此授权类型。 +// +// Usage | 用法: +// +// validator := func(username, password string) (string, error) { +// // Validate user credentials from your user store +// if user := userService.Authenticate(username, password); user != nil { +// return user.ID, nil +// } +// return "", errors.New("invalid credentials") +// } +// token, err := server.PasswordGrantToken(ctx, "client_id", "client_secret", "user", "pass", scopes, validator) +func (s *OAuth2Server) PasswordGrantToken(ctx context.Context, clientID, clientSecret, username, password string, scopes []string, validateUser UserValidator) (*AccessToken, error) { + if validateUser == nil { + return nil, fmt.Errorf("%w: user validator function is required", core.ErrInvalidUserCredentials) + } + + // Verify client credentials | 验证客户端凭证 + client, err := s.GetClient(clientID) + if err != nil { + return nil, err + } + + if client.ClientSecret != clientSecret { + return nil, core.ErrInvalidClientCredentials + } + + // Validate grant type | 验证授权类型 + if !s.isValidGrantType(client, GrantTypePassword) { + return nil, core.ErrInvalidGrantType + } + + // Validate scopes | 验证权限范围 + if !s.isValidScopes(client, scopes) { + return nil, core.ErrInvalidScope + } + + // Validate user credentials | 验证用户凭证 + userID, err := validateUser(username, password) + if err != nil { + return nil, fmt.Errorf("%w: %v", core.ErrInvalidUserCredentials, err) + } + + if userID == "" { + return nil, core.ErrUserIDEmpty + } + + return s.generateAccessToken(ctx, userID, clientID, scopes) +} + +// ============ Unified Token Endpoint | 统一令牌端点 ============ + +// TokenRequest Unified token request structure | 统一的令牌请求结构 +type TokenRequest struct { + GrantType GrantType // Required: grant type | 必需:授权类型 + ClientID string // Required: client ID | 必需:客户端ID + ClientSecret string // Required: client secret | 必需:客户端密钥 + Code string // For authorization_code: authorization code | 授权码模式:授权码 + RedirectURI string // For authorization_code: redirect URI | 授权码模式:回调URI + RefreshToken string // For refresh_token: refresh token | 刷新令牌模式:刷新令牌 + Username string // For password: username | 密码模式:用户名 + Password string // For password: password | 密码模式:密码 + Scopes []string // Optional: requested scopes | 可选:请求的权限范围 +} + +// Token Unified token endpoint that dispatches to appropriate handler based on grant type +// 统一的令牌端点,根据授权类型分发到相应的处理逻辑 +// +// This method provides a single entry point for all OAuth2 token operations. +// 此方法为所有 OAuth2 令牌操作提供统一入口。 +// +// Usage | 用法: +// +// // Authorization Code Grant | 授权码模式 +// token, err := server.Token(ctx, &TokenRequest{ +// GrantType: GrantTypeAuthorizationCode, +// ClientID: "client_id", +// ClientSecret: "client_secret", +// Code: "auth_code", +// RedirectURI: "https://example.com/callback", +// }, nil) +// +// // Client Credentials Grant | 客户端凭证模式 +// token, err := server.Token(ctx, &TokenRequest{ +// GrantType: GrantTypeClientCredentials, +// ClientID: "client_id", +// ClientSecret: "client_secret", +// Scopes: []string{"read", "write"}, +// }, nil) +// +// // Password Grant | 密码模式 +// token, err := server.Token(ctx, &TokenRequest{ +// GrantType: GrantTypePassword, +// ClientID: "client_id", +// ClientSecret: "client_secret", +// Username: "user", +// Password: "pass", +// Scopes: []string{"read"}, +// }, userValidator) +// +// // Refresh Token Grant | 刷新令牌模式 +// token, err := server.Token(ctx, &TokenRequest{ +// GrantType: GrantTypeRefreshToken, +// ClientID: "client_id", +// ClientSecret: "client_secret", +// RefreshToken: "refresh_token", +// }, nil) +func (s *OAuth2Server) Token(ctx context.Context, req *TokenRequest, validateUser UserValidator) (*AccessToken, error) { + if req == nil { + return nil, fmt.Errorf("%w: token request cannot be nil", core.ErrInvalidAuthCode) + } + + switch req.GrantType { + case GrantTypeAuthorizationCode: + return s.ExchangeCodeForToken(ctx, req.Code, req.ClientID, req.ClientSecret, req.RedirectURI) + + case GrantTypeClientCredentials: + return s.ClientCredentialsToken(ctx, req.ClientID, req.ClientSecret, req.Scopes) + + case GrantTypePassword: + return s.PasswordGrantToken(ctx, req.ClientID, req.ClientSecret, req.Username, req.Password, req.Scopes, validateUser) + + case GrantTypeRefreshToken: + return s.RefreshAccessToken(ctx, req.ClientID, req.RefreshToken, req.ClientSecret) + + default: + return nil, core.ErrInvalidGrantType + } +} diff --git a/generator/sgenerator/consts.go b/generator/sgenerator/consts.go index 7e49567..af33f74 100644 --- a/generator/sgenerator/consts.go +++ b/generator/sgenerator/consts.go @@ -1,42 +1,6 @@ // @Author daixk 2025/12/22 16:08:00 package sgenerator -// TokenStyle Token generation style | Token生成风格 -type TokenStyle string - -const ( - // TokenStyleUUID UUID style | UUID风格 - TokenStyleUUID TokenStyle = "uuid" - // TokenStyleSimple Simple random string | 简单随机字符串 - TokenStyleSimple TokenStyle = "simple" - // TokenStyleRandom32 32-bit random string | 32位随机字符串 - TokenStyleRandom32 TokenStyle = "random32" - // TokenStyleRandom64 64-bit random string | 64位随机字符串 - TokenStyleRandom64 TokenStyle = "random64" - // TokenStyleRandom128 128-bit random string | 128位随机字符串 - TokenStyleRandom128 TokenStyle = "random128" - // TokenStyleJWT JWT style | JWT风格 - TokenStyleJWT TokenStyle = "jwt" - // TokenStyleHash SHA256 hash-based style | SHA256哈希风格 - TokenStyleHash TokenStyle = "hash" - // TokenStyleTimestamp Timestamp-based style | 时间戳风格 - TokenStyleTimestamp TokenStyle = "timestamp" - // TokenStyleTik Short ID style (like TikTok) | Tik风格短ID(类似抖音) - TokenStyleTik TokenStyle = "tik" -) - -// IsValidTokenStyle checks if the TokenStyle is valid | 检查TokenStyle是否有效 -func (ts TokenStyle) IsValidTokenStyle() bool { - switch ts { - case TokenStyleUUID, TokenStyleSimple, TokenStyleRandom32, - TokenStyleRandom64, TokenStyleRandom128, TokenStyleJWT, - TokenStyleHash, TokenStyleTimestamp, TokenStyleTik: - return true - default: - return false - } -} - // Constants for token generation | Token生成常量 const ( DefaultTimeout = 2592000 // 30 days (seconds) | 30天(秒) diff --git a/generator/sgenerator/generator_adapter_sgenerator.go b/generator/sgenerator/generator_adapter_sgenerator.go index 37706b3..c4419d0 100644 --- a/generator/sgenerator/generator_adapter_sgenerator.go +++ b/generator/sgenerator/generator_adapter_sgenerator.go @@ -6,6 +6,7 @@ import ( "crypto/sha256" "encoding/hex" "fmt" + "github.com/click33/sa-token-go/core/adapter" "github.com/click33/sa-token-go/core/utils" "github.com/golang-jwt/jwt/v5" "github.com/google/uuid" @@ -16,12 +17,12 @@ import ( // Generator Token generator | Token生成器 type Generator struct { timeout int64 - tokenStyle TokenStyle + tokenStyle adapter.TokenStyle jwtSecretKey string } // NewGenerator Creates a new token generator | 创建新的Token生成器 -func NewGenerator(timeout int64, tokenStyle TokenStyle, jwtSecretKey string) *Generator { +func NewGenerator(timeout int64, tokenStyle adapter.TokenStyle, jwtSecretKey string) *Generator { return &Generator{ timeout: timeout, tokenStyle: tokenStyle, @@ -33,7 +34,7 @@ func NewGenerator(timeout int64, tokenStyle TokenStyle, jwtSecretKey string) *Ge func NewDefaultGenerator() *Generator { return &Generator{ timeout: DefaultTimeout, - tokenStyle: TokenStyleUUID, + tokenStyle: adapter.TokenStyleUUID, jwtSecretKey: DefaultJWTSecret, } } @@ -47,23 +48,23 @@ func (g *Generator) Generate(loginID string, device string) (string, error) { } switch g.tokenStyle { - case TokenStyleUUID: + case adapter.TokenStyleUUID: return g.generateUUID() - case TokenStyleSimple: + case adapter.TokenStyleSimple: return g.generateSimple(DefaultSimpleLength) - case TokenStyleRandom32: + case adapter.TokenStyleRandom32: return g.generateSimple(32) - case TokenStyleRandom64: + case adapter.TokenStyleRandom64: return g.generateSimple(64) - case TokenStyleRandom128: + case adapter.TokenStyleRandom128: return g.generateSimple(128) - case TokenStyleJWT: + case adapter.TokenStyleJWT: return g.generateJWT(loginID, device) - case TokenStyleHash: + case adapter.TokenStyleHash: return g.generateHash(loginID, device) - case TokenStyleTimestamp: + case adapter.TokenStyleTimestamp: return g.generateTimestamp(loginID, device) - case TokenStyleTik: + case adapter.TokenStyleTik: return g.generateTik() default: return g.generateUUID() diff --git a/integrations/gf/export.go b/integrations/gf/export.go index 1ba1dfa..978976d 100644 --- a/integrations/gf/export.go +++ b/integrations/gf/export.go @@ -16,15 +16,12 @@ import ( "github.com/click33/sa-token-go/core/security" "github.com/click33/sa-token-go/core/session" "github.com/click33/sa-token-go/generator/sgenerator" - gflog "github.com/click33/sa-token-go/log/gf" "github.com/click33/sa-token-go/log/nop" "github.com/click33/sa-token-go/log/slog" "github.com/click33/sa-token-go/pool/ants" "github.com/click33/sa-token-go/storage/memory" "github.com/click33/sa-token-go/storage/redis" "github.com/click33/sa-token-go/stputil" - "github.com/gogf/gf/v2/os/glog" - goredis "github.com/redis/go-redis/v9" ) // ============ Type Aliases | 类型别名 ============ @@ -90,10 +87,6 @@ type ( RedisConfig = redis.Config // RedisBuilder Redis构建器 RedisBuilder = redis.Builder - // RedisClient Redis客户端 (go-redis/v9) - RedisClient = goredis.Client - // RedisOptions Redis连接选项 (go-redis/v9) - RedisOptions = goredis.Options // ============ Logger Types | 日志类型 ============ @@ -103,8 +96,6 @@ type ( SlogLoggerConfig = slog.LoggerConfig // SlogLogLevel 日志级别 SlogLogLevel = slog.LogLevel - // GFLogger GoFrame日志适配器 - GFLogger = gflog.GFLogger // NopLogger 空日志实现 NopLogger = nop.NopLogger @@ -113,7 +104,7 @@ type ( // TokenGenerator Token生成器 TokenGenerator = sgenerator.Generator // TokenStyle Token风格 - TokenStyle = sgenerator.TokenStyle + TokenStyle = adapter.TokenStyle // ============ Pool Types | 协程池类型 ============ @@ -298,16 +289,6 @@ func NewRedisStorageFromConfig(cfg *redis.Config) (*redis.Storage, error) { return redis.NewStorageFromConfig(cfg) } -// NewRedisStorageFromClient creates a new Redis storage from existing client | 从已有Redis客户端创建存储 -func NewRedisStorageFromClient(client *goredis.Client) *redis.Storage { - return redis.NewStorageFromClient(client) -} - -// NewRedisClient creates a new Redis client | 创建Redis客户端 -func NewRedisClient(opts *goredis.Options) *goredis.Client { - return goredis.NewClient(opts) -} - // NewRedisBuilder creates a new Redis builder | 创建Redis构建器 func NewRedisBuilder() *redis.Builder { return redis.NewBuilder() @@ -320,11 +301,6 @@ func NewSlogLogger(cfg *slog.LoggerConfig) (*slog.Logger, error) { return slog.NewLoggerWithConfig(cfg) } -// NewGFLogger creates a new GoFrame logger adapter | 创建GoFrame日志适配器 -func NewGFLogger(ctx context.Context, l *glog.Logger) *gflog.GFLogger { - return gflog.NewGFLogger(ctx, l) -} - // NewNopLogger creates a new no-op logger | 创建空日志器 func NewNopLogger() *nop.NopLogger { return nop.NewNopLogger() @@ -333,7 +309,7 @@ func NewNopLogger() *nop.NopLogger { // ============ Generator Constructors | 生成器构造函数 ============ // NewTokenGenerator creates a new token generator | 创建Token生成器 -func NewTokenGenerator(timeout int64, tokenStyle sgenerator.TokenStyle, jwtSecretKey string) *sgenerator.Generator { +func NewTokenGenerator(timeout int64, tokenStyle adapter.TokenStyle, jwtSecretKey string) *sgenerator.Generator { return sgenerator.NewGenerator(timeout, tokenStyle, jwtSecretKey) } @@ -358,23 +334,23 @@ func NewRenewPoolManagerWithConfig(cfg *ants.RenewPoolConfig) (*ants.RenewPoolMa const ( // TokenStyleUUID UUID style | UUID风格 - TokenStyleUUID = sgenerator.TokenStyleUUID + TokenStyleUUID = adapter.TokenStyleUUID // TokenStyleSimple Simple random string | 简单随机字符串 - TokenStyleSimple = sgenerator.TokenStyleSimple + TokenStyleSimple = adapter.TokenStyleSimple // TokenStyleRandom32 32-bit random string | 32位随机字符串 - TokenStyleRandom32 = sgenerator.TokenStyleRandom32 + TokenStyleRandom32 = adapter.TokenStyleRandom32 // TokenStyleRandom64 64-bit random string | 64位随机字符串 - TokenStyleRandom64 = sgenerator.TokenStyleRandom64 + TokenStyleRandom64 = adapter.TokenStyleRandom64 // TokenStyleRandom128 128-bit random string | 128位随机字符串 - TokenStyleRandom128 = sgenerator.TokenStyleRandom128 + TokenStyleRandom128 = adapter.TokenStyleRandom128 // TokenStyleJWT JWT style | JWT风格 - TokenStyleJWT = sgenerator.TokenStyleJWT + TokenStyleJWT = adapter.TokenStyleJWT // TokenStyleHash SHA256 hash-based style | SHA256哈希风格 - TokenStyleHash = sgenerator.TokenStyleHash + TokenStyleHash = adapter.TokenStyleHash // TokenStyleTimestamp Timestamp-based style | 时间戳风格 - TokenStyleTimestamp = sgenerator.TokenStyleTimestamp + TokenStyleTimestamp = adapter.TokenStyleTimestamp // TokenStyleTik Short ID style (like TikTok) | Tik风格短ID - TokenStyleTik = sgenerator.TokenStyleTik + TokenStyleTik = adapter.TokenStyleTik ) // ============ Log Level Constants | 日志级别常量 ============ diff --git a/integrations/gin/export.go b/integrations/gin/export.go index b809471..444327a 100644 --- a/integrations/gin/export.go +++ b/integrations/gin/export.go @@ -22,7 +22,6 @@ import ( "github.com/click33/sa-token-go/storage/memory" "github.com/click33/sa-token-go/storage/redis" "github.com/click33/sa-token-go/stputil" - goredis "github.com/redis/go-redis/v9" ) // ============ Type Aliases | 类型别名 ============ @@ -88,10 +87,6 @@ type ( RedisConfig = redis.Config // RedisBuilder Redis构建器 RedisBuilder = redis.Builder - // RedisClient Redis客户端 (go-redis/v9) - RedisClient = goredis.Client - // RedisOptions Redis连接选项 (go-redis/v9) - RedisOptions = goredis.Options // ============ Logger Types | 日志类型 ============ @@ -109,7 +104,7 @@ type ( // TokenGenerator Token生成器 TokenGenerator = sgenerator.Generator // TokenStyle Token风格 - TokenStyle = sgenerator.TokenStyle + TokenStyle = adapter.TokenStyle // ============ Pool Types | 协程池类型 ============ @@ -294,16 +289,6 @@ func NewRedisStorageFromConfig(cfg *redis.Config) (*redis.Storage, error) { return redis.NewStorageFromConfig(cfg) } -// NewRedisStorageFromClient creates a new Redis storage from existing client | 从已有Redis客户端创建存储 -func NewRedisStorageFromClient(client *goredis.Client) *redis.Storage { - return redis.NewStorageFromClient(client) -} - -// NewRedisClient creates a new Redis client | 创建Redis客户端 -func NewRedisClient(opts *goredis.Options) *goredis.Client { - return goredis.NewClient(opts) -} - // NewRedisBuilder creates a new Redis builder | 创建Redis构建器 func NewRedisBuilder() *redis.Builder { return redis.NewBuilder() @@ -324,7 +309,7 @@ func NewNopLogger() *nop.NopLogger { // ============ Generator Constructors | 生成器构造函数 ============ // NewTokenGenerator creates a new token generator | 创建Token生成器 -func NewTokenGenerator(timeout int64, tokenStyle sgenerator.TokenStyle, jwtSecretKey string) *sgenerator.Generator { +func NewTokenGenerator(timeout int64, tokenStyle adapter.TokenStyle, jwtSecretKey string) *sgenerator.Generator { return sgenerator.NewGenerator(timeout, tokenStyle, jwtSecretKey) } @@ -349,23 +334,23 @@ func NewRenewPoolManagerWithConfig(cfg *ants.RenewPoolConfig) (*ants.RenewPoolMa const ( // TokenStyleUUID UUID style | UUID风格 - TokenStyleUUID = sgenerator.TokenStyleUUID + TokenStyleUUID = adapter.TokenStyleUUID // TokenStyleSimple Simple random string | 简单随机字符串 - TokenStyleSimple = sgenerator.TokenStyleSimple + TokenStyleSimple = adapter.TokenStyleSimple // TokenStyleRandom32 32-bit random string | 32位随机字符串 - TokenStyleRandom32 = sgenerator.TokenStyleRandom32 + TokenStyleRandom32 = adapter.TokenStyleRandom32 // TokenStyleRandom64 64-bit random string | 64位随机字符串 - TokenStyleRandom64 = sgenerator.TokenStyleRandom64 + TokenStyleRandom64 = adapter.TokenStyleRandom64 // TokenStyleRandom128 128-bit random string | 128位随机字符串 - TokenStyleRandom128 = sgenerator.TokenStyleRandom128 + TokenStyleRandom128 = adapter.TokenStyleRandom128 // TokenStyleJWT JWT style | JWT风格 - TokenStyleJWT = sgenerator.TokenStyleJWT + TokenStyleJWT = adapter.TokenStyleJWT // TokenStyleHash SHA256 hash-based style | SHA256哈希风格 - TokenStyleHash = sgenerator.TokenStyleHash + TokenStyleHash = adapter.TokenStyleHash // TokenStyleTimestamp Timestamp-based style | 时间戳风格 - TokenStyleTimestamp = sgenerator.TokenStyleTimestamp + TokenStyleTimestamp = adapter.TokenStyleTimestamp // TokenStyleTik Short ID style (like TikTok) | Tik风格短ID - TokenStyleTik = sgenerator.TokenStyleTik + TokenStyleTik = adapter.TokenStyleTik ) // ============ Log Level Constants | 日志级别常量 ============ diff --git a/pool/ants/config.go b/pool/ants/config.go index e4dcc0a..cc67924 100644 --- a/pool/ants/config.go +++ b/pool/ants/config.go @@ -14,7 +14,7 @@ type RenewPoolConfig struct { ScaleDownRate float64 // Scale-down threshold | 缩容阈值 CheckInterval time.Duration // Auto-scale check interval | 检查间隔 Expiry time.Duration // Idle worker expiry duration | 空闲协程过期时间 - PrintStatusInterval time.Duration // Interval for periodic status printing (0 = disabled) | 定时打印池状态的间隔(0表示关闭) + PrintStatusInterval time.Duration // Interval for periodic status printing | 定时打印池状态的间隔 PreAlloc bool // Whether to pre-allocate memory | 是否预分配内存 NonBlocking bool // Whether to use non-blocking mode | 是否为非阻塞模式 } diff --git a/pool/ants/pool_adapter_ants.go b/pool/ants/pool_adapter_ants.go index 662bf51..fcbf5de 100644 --- a/pool/ants/pool_adapter_ants.go +++ b/pool/ants/pool_adapter_ants.go @@ -3,20 +3,23 @@ package ants import ( "fmt" - "github.com/panjf2000/ants/v2" "sync" "time" + + "github.com/panjf2000/ants/v2" ) // RenewPoolManager manages a dynamic scaling goroutine pool for token renewal tasks | 续期任务协程池管理器 type RenewPoolManager struct { - pool *ants.Pool // ants pool instance | ants 协程池实例 - config *RenewPoolConfig // Configuration object | 池配置对象 - mu sync.Mutex // Synchronization lock | 互斥锁 - stopCh chan struct{} // Stop signal channel | 停止信号通道 - started bool // Indicates if pool manager is running | 是否已启动 + pool *ants.Pool // ants pool instance | ants 协程池实例 + config *RenewPoolConfig // Configuration object | 池配置对象 + mu sync.Mutex // Synchronization lock | 互斥锁 + stopCh chan struct{} // Stop signal channel | 停止信号通道 + started bool // Indicates if pool manager is running | 是否已启动 + closeOnce sync.Once // Ensure Stop only executes once | 确保 Stop 只执行一次 } +// NewRenewPoolManagerWithDefaultConfig creates manager with default config | 使用默认配置创建续期池管理器 func NewRenewPoolManagerWithDefaultConfig() *RenewPoolManager { mgr := &RenewPoolManager{ config: DefaultRenewPoolConfig(), @@ -26,6 +29,9 @@ func NewRenewPoolManagerWithDefaultConfig() *RenewPoolManager { _ = mgr.initPool() + // Start auto-scaling routine | 启动自动扩缩容协程 + go mgr.autoScale() + return mgr } @@ -83,15 +89,17 @@ func (m *RenewPoolManager) Submit(task func()) error { // Stop stops the auto-scaling process | 停止自动扩缩容 func (m *RenewPoolManager) Stop() { - if !m.started { - return - } - close(m.stopCh) - m.started = false + m.closeOnce.Do(func() { + if !m.started { + return + } + close(m.stopCh) + m.started = false - if m.pool != nil && !m.pool.IsClosed() { - _ = m.pool.ReleaseTimeout(5 * time.Second) - } + if m.pool != nil && !m.pool.IsClosed() { + _ = m.pool.ReleaseTimeout(3 * time.Second) + } + }) } // Stats returns current pool statistics | 返回当前池状态 @@ -99,9 +107,11 @@ func (m *RenewPoolManager) Stats() (running, capacity int, usage float64) { m.mu.Lock() defer m.mu.Unlock() - running = m.pool.Running() // Active tasks | 当前运行任务数 - capacity = m.pool.Cap() // Pool capacity | 当前池容量 - usage = float64(running) / float64(capacity) // Usage ratio | 当前使用率 + running = m.pool.Running() // Active tasks | 当前运行任务数 + capacity = m.pool.Cap() // Pool capacity | 当前池容量 + if capacity > 0 { + usage = float64(running) / float64(capacity) // Usage ratio | 当前使用率 + } return } @@ -117,8 +127,15 @@ func (m *RenewPoolManager) autoScale() { m.mu.Lock() // Protect concurrent access | 加锁防止并发冲突 // Get current pool stats | 获取当前运行状态 - running := m.pool.Running() // Number of active goroutines | 当前正在执行的任务数 - capacity := m.pool.Cap() // Current pool capacity | 当前协程池容量 + running := m.pool.Running() // Number of active goroutines | 当前正在执行的任务数 + capacity := m.pool.Cap() // Current pool capacity | 当前协程池容量 + + // Skip if capacity is 0 to avoid division by zero | 容量为0时跳过,避免除零 + if capacity <= 0 { + m.mu.Unlock() + continue + } + usage := float64(running) / float64(capacity) // Current usage ratio | 当前使用率(运行数 ÷ 总容量) switch { From aa44204ea9c432a817a4c3c244a477392777cd40 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Sat, 27 Dec 2025 22:04:09 +0800 Subject: [PATCH 29/50] =?UTF-8?q?feat():=201=E3=80=81=E5=AE=8C=E5=96=84oau?= =?UTF-8?q?th2=E6=A8=A1=E5=9D=97=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/manager/manager.go | 15 ++ core/oauth2/oauth2.go | 450 +++++++++++++++++++++------------------- stputil/stputil.go | 30 +++ 3 files changed, 280 insertions(+), 215 deletions(-) diff --git a/core/manager/manager.go b/core/manager/manager.go index e948485..0bc64e1 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -1367,6 +1367,21 @@ func (m *Manager) OAuth2RevokeToken(ctx context.Context, accessToken string) err return m.oauth2Server.RevokeToken(ctx, accessToken) } +// OAuth2Token Unified token endpoint that dispatches to appropriate handler based on grant type | 统一的令牌端点,根据授权类型分发到相应的处理逻辑 +func (m *Manager) OAuth2Token(ctx context.Context, req *oauth2.TokenRequest, validateUser oauth2.UserValidator) (*oauth2.AccessToken, error) { + return m.oauth2Server.Token(ctx, req, validateUser) +} + +// OAuth2ClientCredentialsToken Gets access token using client credentials grant | 使用客户端凭证模式获取访问令牌 +func (m *Manager) OAuth2ClientCredentialsToken(ctx context.Context, clientID, clientSecret string, scopes []string) (*oauth2.AccessToken, error) { + return m.oauth2Server.ClientCredentialsToken(ctx, clientID, clientSecret, scopes) +} + +// OAuth2PasswordGrantToken Gets access token using resource owner password credentials grant | 使用密码模式获取访问令牌 +func (m *Manager) OAuth2PasswordGrantToken(ctx context.Context, clientID, clientSecret, username, password string, scopes []string, validateUser oauth2.UserValidator) (*oauth2.AccessToken, error) { + return m.oauth2Server.PasswordGrantToken(ctx, clientID, clientSecret, username, password, scopes, validateUser) +} + // ============ Public Getters | 公共获取器 ============ // GetConfig returns the manager configuration | 获取 Manager 当前使用的配置 diff --git a/core/oauth2/oauth2.go b/core/oauth2/oauth2.go index 6088071..a0050af 100644 --- a/core/oauth2/oauth2.go +++ b/core/oauth2/oauth2.go @@ -5,30 +5,39 @@ import ( "crypto/rand" "encoding/hex" "fmt" + "sync" + "time" + codec_json "github.com/click33/sa-token-go/codec/json" "github.com/click33/sa-token-go/core" "github.com/click33/sa-token-go/core/adapter" "github.com/click33/sa-token-go/core/utils" "github.com/click33/sa-token-go/storage/memory" - "sync" - "time" ) -// OAuth2 Authorization Code Flow Implementation -// OAuth2 授权码模式实现 +// Package oauth2 provides OAuth2 authorization server implementation +// OAuth2 授权服务器实现 +// +// Supported Grant Types | 支持的授权类型: +// - Authorization Code (authorization_code) | 授权码模式 +// - Client Credentials (client_credentials) | 客户端凭证模式 +// - Password (password) | 密码模式 +// - Refresh Token (refresh_token) | 刷新令牌模式 // -// Flow | 流程: -// 1. RegisterClient() - Register OAuth2 client | 注册OAuth2客户端 -// 2. GenerateAuthorizationCode() - User authorizes, get code | 用户授权,获取授权码 -// 3. ExchangeCodeForToken() - Exchange code for access token | 用授权码换取访问令牌 -// 4. ValidateAccessToken() - Validate access token | 验证访问令牌 -// 5. RefreshAccessToken() - Use refresh token to get new token | 用刷新令牌获取新令牌 +// Basic Flow | 基本流程: +// 1. RegisterClient() - Register OAuth2 client | 注册OAuth2客户端 +// 2. GenerateAuthorizationCode() - User authorizes, get code | 用户授权,获取授权码 +// 3. Token() or ExchangeCodeForToken() - Exchange code for access token | 用授权码换取访问令牌 +// 4. ValidateAccessToken() - Validate access token | 验证访问令牌 +// 5. RefreshAccessToken() - Use refresh token to get new token | 用刷新令牌获取新令牌 // // Usage | 用法: -// server := oauth2.NewOAuth2Server(storage) -// server.RegisterClient(&oauth2.Client{...}) -// authCode, _ := server.GenerateAuthorizationCode(...) -// token, _ := server.ExchangeCodeForToken(...) +// +// server := oauth2.NewOAuth2Server(authType, prefix, storage, serializer) +// server.RegisterClient(&oauth2.Client{...}) +// token, _ := server.Token(ctx, &oauth2.TokenRequest{...}, nil) + +// ============ Type Definitions | 类型定义 ============ // Client OAuth2 client configuration | OAuth2客户端配置 type Client struct { @@ -62,6 +71,22 @@ type AccessToken struct { ClientID string // Client ID | 客户端ID } +// TokenRequest Unified token request structure | 统一的令牌请求结构 +type TokenRequest struct { + GrantType GrantType // Required: grant type | 必需:授权类型 + ClientID string // Required: client ID | 必需:客户端ID + ClientSecret string // Required: client secret | 必需:客户端密钥 + Code string // For authorization_code: authorization code | 授权码模式:授权码 + RedirectURI string // For authorization_code: redirect URI | 授权码模式:回调URI + RefreshToken string // For refresh_token: refresh token | 刷新令牌模式:刷新令牌 + Username string // For password: username | 密码模式:用户名 + Password string // For password: password | 密码模式:密码 + Scopes []string // Optional: requested scopes | 可选:请求的权限范围 +} + +// UserValidator Function type for validating user credentials | 验证用户凭证的函数类型 +type UserValidator func(username, password string) (userID string, err error) + // OAuth2Server OAuth2 authorization server | OAuth2授权服务器 type OAuth2Server struct { authType string // Authentication system type | 认证体系类型 @@ -74,6 +99,8 @@ type OAuth2Server struct { storage adapter.Storage // Storage adapter (Redis, Memory, etc.) | 存储适配器(如 Redis、Memory) } +// ============ Constructor | 构造函数 ============ + // NewOAuth2Server Creates a new OAuth2 server | 创建新的OAuth2服务器 func NewOAuth2Server(authType, prefix string, storage adapter.Storage, serializer adapter.Codec) *OAuth2Server { if storage == nil { @@ -94,6 +121,8 @@ func NewOAuth2Server(authType, prefix string, storage adapter.Storage, serialize } } +// ============ Client Management | 客户端管理 ============ + // RegisterClient Registers an OAuth2 client | 注册OAuth2客户端 func (s *OAuth2Server) RegisterClient(client *Client) error { if client == nil || client.ClientID == "" { @@ -128,6 +157,75 @@ func (s *OAuth2Server) GetClient(clientID string) (*Client, error) { return client, nil } +// ============ Unified Token Endpoint | 统一令牌端点 ============ + +// Token Unified token endpoint that dispatches to appropriate handler based on grant type +// 统一的令牌端点,根据授权类型分发到相应的处理逻辑 +// +// This method provides a single entry point for all OAuth2 token operations. +// 此方法为所有 OAuth2 令牌操作提供统一入口。 +// +// Usage | 用法: +// +// // Authorization Code Grant | 授权码模式 +// token, err := server.Token(ctx, &TokenRequest{ +// GrantType: GrantTypeAuthorizationCode, +// ClientID: "client_id", +// ClientSecret: "client_secret", +// Code: "auth_code", +// RedirectURI: "https://example.com/callback", +// }, nil) +// +// // Client Credentials Grant | 客户端凭证模式 +// token, err := server.Token(ctx, &TokenRequest{ +// GrantType: GrantTypeClientCredentials, +// ClientID: "client_id", +// ClientSecret: "client_secret", +// Scopes: []string{"read", "write"}, +// }, nil) +// +// // Password Grant | 密码模式 +// token, err := server.Token(ctx, &TokenRequest{ +// GrantType: GrantTypePassword, +// ClientID: "client_id", +// ClientSecret: "client_secret", +// Username: "user", +// Password: "pass", +// Scopes: []string{"read"}, +// }, userValidator) +// +// // Refresh Token Grant | 刷新令牌模式 +// token, err := server.Token(ctx, &TokenRequest{ +// GrantType: GrantTypeRefreshToken, +// ClientID: "client_id", +// ClientSecret: "client_secret", +// RefreshToken: "refresh_token", +// }, nil) +func (s *OAuth2Server) Token(ctx context.Context, req *TokenRequest, validateUser UserValidator) (*AccessToken, error) { + if req == nil { + return nil, fmt.Errorf("%w: token request cannot be nil", core.ErrInvalidAuthCode) + } + + switch req.GrantType { + case GrantTypeAuthorizationCode: + return s.ExchangeCodeForToken(ctx, req.Code, req.ClientID, req.ClientSecret, req.RedirectURI) + + case GrantTypeClientCredentials: + return s.ClientCredentialsToken(ctx, req.ClientID, req.ClientSecret, req.Scopes) + + case GrantTypePassword: + return s.PasswordGrantToken(ctx, req.ClientID, req.ClientSecret, req.Username, req.Password, req.Scopes, validateUser) + + case GrantTypeRefreshToken: + return s.RefreshAccessToken(ctx, req.ClientID, req.RefreshToken, req.ClientSecret) + + default: + return nil, core.ErrInvalidGrantType + } +} + +// ============ Authorization Code Grant | 授权码模式 ============ + // GenerateAuthorizationCode Generates authorization code | 生成授权码 func (s *OAuth2Server) GenerateAuthorizationCode(ctx context.Context, clientID, userID, redirectURI string, scopes []string) (*AuthorizationCode, error) { if userID == "" { @@ -247,40 +345,105 @@ func (s *OAuth2Server) ExchangeCodeForToken(ctx context.Context, code, clientID, return s.generateAccessToken(ctx, authCode.UserID, authCode.ClientID, authCode.Scopes) } -// ValidateAccessToken Validates access token | 验证访问令牌 -func (s *OAuth2Server) ValidateAccessToken(ctx context.Context, accessToken string) bool { - return s.storage.Exists(ctx, s.getTokenKey(accessToken)) +// ============ Client Credentials Grant | 客户端凭证模式 ============ + +// ClientCredentialsToken Gets access token using client credentials grant +// 使用客户端凭证模式获取访问令牌 +// +// This grant type is used for server-to-server communication where no user is involved. +// The client authenticates with its own credentials and receives an access token. +// 此授权类型用于服务器间通信,无需用户参与。客户端使用自己的凭证进行认证并获取访问令牌。 +// +// Usage | 用法: +// +// token, err := server.ClientCredentialsToken(ctx, "client_id", "client_secret", []string{"read", "write"}) +func (s *OAuth2Server) ClientCredentialsToken(ctx context.Context, clientID, clientSecret string, scopes []string) (*AccessToken, error) { + // Verify client credentials | 验证客户端凭证 + client, err := s.GetClient(clientID) + if err != nil { + return nil, err + } + + if client.ClientSecret != clientSecret { + return nil, core.ErrInvalidClientCredentials + } + + // Validate grant type | 验证授权类型 + if !s.isValidGrantType(client, GrantTypeClientCredentials) { + return nil, core.ErrInvalidGrantType + } + + // Validate scopes | 验证权限范围 + if !s.isValidScopes(client, scopes) { + return nil, core.ErrInvalidScope + } + + // For client credentials, userID is the clientID itself | 客户端凭证模式下,userID 就是 clientID + return s.generateAccessToken(ctx, clientID, clientID, scopes) } -// ValidateAccessTokenAndGetInfo Validates access token and get info | 验证访问令牌并获取信息 -func (s *OAuth2Server) ValidateAccessTokenAndGetInfo(ctx context.Context, accessToken string) (*AccessToken, error) { - if accessToken == "" { - return nil, core.ErrInvalidAccessToken +// ============ Password Grant | 密码模式 ============ + +// PasswordGrantToken Gets access token using resource owner password credentials grant +// 使用密码模式获取访问令牌 +// +// This grant type is used when the application is highly trusted (e.g., official app). +// The user provides their username and password directly to the client. +// 此授权类型用于高度信任的应用(如官方App)。用户直接向客户端提供用户名和密码。 +// +// SECURITY WARNING: This grant type should only be used when other flows are not viable. +// 安全警告:仅在其他授权流程不可行时才应使用此授权类型。 +// +// Usage | 用法: +// +// validator := func(username, password string) (string, error) { +// // Validate user credentials from your user store +// if user := userService.Authenticate(username, password); user != nil { +// return user.ID, nil +// } +// return "", errors.New("invalid credentials") +// } +// token, err := server.PasswordGrantToken(ctx, "client_id", "client_secret", "user", "pass", scopes, validator) +func (s *OAuth2Server) PasswordGrantToken(ctx context.Context, clientID, clientSecret, username, password string, scopes []string, validateUser UserValidator) (*AccessToken, error) { + if validateUser == nil { + return nil, fmt.Errorf("%w: user validator function is required", core.ErrInvalidUserCredentials) } - key := s.getTokenKey(accessToken) - data, err := s.storage.Get(ctx, key) + // Verify client credentials | 验证客户端凭证 + client, err := s.GetClient(clientID) if err != nil { - return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) + return nil, err } - if data == nil { - return nil, core.ErrInvalidAccessToken + + if client.ClientSecret != clientSecret { + return nil, core.ErrInvalidClientCredentials } - rawData, err := utils.ToBytes(data) - if err != nil { - return nil, fmt.Errorf("%w: %v", core.ErrTypeConvert, err) + // Validate grant type | 验证授权类型 + if !s.isValidGrantType(client, GrantTypePassword) { + return nil, core.ErrInvalidGrantType } - var accessTokenInfo AccessToken - err = s.serializer.Decode(rawData, &accessTokenInfo) + // Validate scopes | 验证权限范围 + if !s.isValidScopes(client, scopes) { + return nil, core.ErrInvalidScope + } + + // Validate user credentials | 验证用户凭证 + userID, err := validateUser(username, password) if err != nil { - return nil, fmt.Errorf("%w: %v", core.ErrDeserializeFailed, err) + return nil, fmt.Errorf("%w: %v", core.ErrInvalidUserCredentials, err) } - return &accessTokenInfo, nil + if userID == "" { + return nil, core.ErrUserIDEmpty + } + + return s.generateAccessToken(ctx, userID, clientID, scopes) } +// ============ Refresh Token Grant | 刷新令牌模式 ============ + // RefreshAccessToken Refreshes access token using refresh token | 使用刷新令牌刷新访问令牌 func (s *OAuth2Server) RefreshAccessToken(ctx context.Context, clientID, refreshToken, clientSecret string) (*AccessToken, error) { if refreshToken == "" { @@ -336,6 +499,44 @@ func (s *OAuth2Server) RefreshAccessToken(ctx context.Context, clientID, refresh return s.generateAccessToken(ctx, accessTokenInfo.UserID, accessTokenInfo.ClientID, accessTokenInfo.Scopes) } +// ============ Token Validation | 令牌验证 ============ + +// ValidateAccessToken Validates access token | 验证访问令牌 +func (s *OAuth2Server) ValidateAccessToken(ctx context.Context, accessToken string) bool { + return s.storage.Exists(ctx, s.getTokenKey(accessToken)) +} + +// ValidateAccessTokenAndGetInfo Validates access token and get info | 验证访问令牌并获取信息 +func (s *OAuth2Server) ValidateAccessTokenAndGetInfo(ctx context.Context, accessToken string) (*AccessToken, error) { + if accessToken == "" { + return nil, core.ErrInvalidAccessToken + } + + key := s.getTokenKey(accessToken) + data, err := s.storage.Get(ctx, key) + if err != nil { + return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) + } + if data == nil { + return nil, core.ErrInvalidAccessToken + } + + rawData, err := utils.ToBytes(data) + if err != nil { + return nil, fmt.Errorf("%w: %v", core.ErrTypeConvert, err) + } + + var accessTokenInfo AccessToken + err = s.serializer.Decode(rawData, &accessTokenInfo) + if err != nil { + return nil, fmt.Errorf("%w: %v", core.ErrDeserializeFailed, err) + } + + return &accessTokenInfo, nil +} + +// ============ Token Revocation | 令牌撤销 ============ + // RevokeToken Revokes access token and its refresh token | 撤销访问令牌及其刷新令牌 func (s *OAuth2Server) RevokeToken(ctx context.Context, accessToken string) error { if accessToken == "" { @@ -369,7 +570,7 @@ func (s *OAuth2Server) RevokeToken(ctx context.Context, accessToken string) erro return s.storage.Delete(ctx, key) } -// ============ Helper Methods | 辅助方法 ============ +// ============ Private Helper Methods | 私有辅助方法 ============ // getCodeKey Gets storage key for authorization code | 获取授权码的存储键 func (s *OAuth2Server) getCodeKey(code string) string { @@ -484,184 +685,3 @@ func (s *OAuth2Server) generateAccessToken(ctx context.Context, userID, clientID return token, nil } - -// ============ Client Credentials Grant | 客户端凭证模式 ============ - -// ClientCredentialsToken Gets access token using client credentials grant -// 使用客户端凭证模式获取访问令牌 -// -// This grant type is used for server-to-server communication where no user is involved. -// The client authenticates with its own credentials and receives an access token. -// 此授权类型用于服务器间通信,无需用户参与。客户端使用自己的凭证进行认证并获取访问令牌。 -// -// Usage | 用法: -// -// token, err := server.ClientCredentialsToken(ctx, "client_id", "client_secret", []string{"read", "write"}) -func (s *OAuth2Server) ClientCredentialsToken(ctx context.Context, clientID, clientSecret string, scopes []string) (*AccessToken, error) { - // Verify client credentials | 验证客户端凭证 - client, err := s.GetClient(clientID) - if err != nil { - return nil, err - } - - if client.ClientSecret != clientSecret { - return nil, core.ErrInvalidClientCredentials - } - - // Validate grant type | 验证授权类型 - if !s.isValidGrantType(client, GrantTypeClientCredentials) { - return nil, core.ErrInvalidGrantType - } - - // Validate scopes | 验证权限范围 - if !s.isValidScopes(client, scopes) { - return nil, core.ErrInvalidScope - } - - // For client credentials, userID is the clientID itself | 客户端凭证模式下,userID 就是 clientID - return s.generateAccessToken(ctx, clientID, clientID, scopes) -} - -// ============ Password Grant | 密码模式 ============ - -// UserValidator Function type for validating user credentials | 验证用户凭证的函数类型 -// Returns userID if validation succeeds, error otherwise | 验证成功返回 userID,否则返回错误 -type UserValidator func(username, password string) (userID string, err error) - -// PasswordGrantToken Gets access token using resource owner password credentials grant -// 使用密码模式获取访问令牌 -// -// This grant type is used when the application is highly trusted (e.g., official app). -// The user provides their username and password directly to the client. -// 此授权类型用于高度信任的应用(如官方App)。用户直接向客户端提供用户名和密码。 -// -// SECURITY WARNING: This grant type should only be used when other flows are not viable. -// 安全警告:仅在其他授权流程不可行时才应使用此授权类型。 -// -// Usage | 用法: -// -// validator := func(username, password string) (string, error) { -// // Validate user credentials from your user store -// if user := userService.Authenticate(username, password); user != nil { -// return user.ID, nil -// } -// return "", errors.New("invalid credentials") -// } -// token, err := server.PasswordGrantToken(ctx, "client_id", "client_secret", "user", "pass", scopes, validator) -func (s *OAuth2Server) PasswordGrantToken(ctx context.Context, clientID, clientSecret, username, password string, scopes []string, validateUser UserValidator) (*AccessToken, error) { - if validateUser == nil { - return nil, fmt.Errorf("%w: user validator function is required", core.ErrInvalidUserCredentials) - } - - // Verify client credentials | 验证客户端凭证 - client, err := s.GetClient(clientID) - if err != nil { - return nil, err - } - - if client.ClientSecret != clientSecret { - return nil, core.ErrInvalidClientCredentials - } - - // Validate grant type | 验证授权类型 - if !s.isValidGrantType(client, GrantTypePassword) { - return nil, core.ErrInvalidGrantType - } - - // Validate scopes | 验证权限范围 - if !s.isValidScopes(client, scopes) { - return nil, core.ErrInvalidScope - } - - // Validate user credentials | 验证用户凭证 - userID, err := validateUser(username, password) - if err != nil { - return nil, fmt.Errorf("%w: %v", core.ErrInvalidUserCredentials, err) - } - - if userID == "" { - return nil, core.ErrUserIDEmpty - } - - return s.generateAccessToken(ctx, userID, clientID, scopes) -} - -// ============ Unified Token Endpoint | 统一令牌端点 ============ - -// TokenRequest Unified token request structure | 统一的令牌请求结构 -type TokenRequest struct { - GrantType GrantType // Required: grant type | 必需:授权类型 - ClientID string // Required: client ID | 必需:客户端ID - ClientSecret string // Required: client secret | 必需:客户端密钥 - Code string // For authorization_code: authorization code | 授权码模式:授权码 - RedirectURI string // For authorization_code: redirect URI | 授权码模式:回调URI - RefreshToken string // For refresh_token: refresh token | 刷新令牌模式:刷新令牌 - Username string // For password: username | 密码模式:用户名 - Password string // For password: password | 密码模式:密码 - Scopes []string // Optional: requested scopes | 可选:请求的权限范围 -} - -// Token Unified token endpoint that dispatches to appropriate handler based on grant type -// 统一的令牌端点,根据授权类型分发到相应的处理逻辑 -// -// This method provides a single entry point for all OAuth2 token operations. -// 此方法为所有 OAuth2 令牌操作提供统一入口。 -// -// Usage | 用法: -// -// // Authorization Code Grant | 授权码模式 -// token, err := server.Token(ctx, &TokenRequest{ -// GrantType: GrantTypeAuthorizationCode, -// ClientID: "client_id", -// ClientSecret: "client_secret", -// Code: "auth_code", -// RedirectURI: "https://example.com/callback", -// }, nil) -// -// // Client Credentials Grant | 客户端凭证模式 -// token, err := server.Token(ctx, &TokenRequest{ -// GrantType: GrantTypeClientCredentials, -// ClientID: "client_id", -// ClientSecret: "client_secret", -// Scopes: []string{"read", "write"}, -// }, nil) -// -// // Password Grant | 密码模式 -// token, err := server.Token(ctx, &TokenRequest{ -// GrantType: GrantTypePassword, -// ClientID: "client_id", -// ClientSecret: "client_secret", -// Username: "user", -// Password: "pass", -// Scopes: []string{"read"}, -// }, userValidator) -// -// // Refresh Token Grant | 刷新令牌模式 -// token, err := server.Token(ctx, &TokenRequest{ -// GrantType: GrantTypeRefreshToken, -// ClientID: "client_id", -// ClientSecret: "client_secret", -// RefreshToken: "refresh_token", -// }, nil) -func (s *OAuth2Server) Token(ctx context.Context, req *TokenRequest, validateUser UserValidator) (*AccessToken, error) { - if req == nil { - return nil, fmt.Errorf("%w: token request cannot be nil", core.ErrInvalidAuthCode) - } - - switch req.GrantType { - case GrantTypeAuthorizationCode: - return s.ExchangeCodeForToken(ctx, req.Code, req.ClientID, req.ClientSecret, req.RedirectURI) - - case GrantTypeClientCredentials: - return s.ClientCredentialsToken(ctx, req.ClientID, req.ClientSecret, req.Scopes) - - case GrantTypePassword: - return s.PasswordGrantToken(ctx, req.ClientID, req.ClientSecret, req.Username, req.Password, req.Scopes, validateUser) - - case GrantTypeRefreshToken: - return s.RefreshAccessToken(ctx, req.ClientID, req.RefreshToken, req.ClientSecret) - - default: - return nil, core.ErrInvalidGrantType - } -} diff --git a/stputil/stputil.go b/stputil/stputil.go index 72dd6f5..73699d4 100644 --- a/stputil/stputil.go +++ b/stputil/stputil.go @@ -1063,6 +1063,36 @@ func RevokeToken(ctx context.Context, accessToken string, authType ...string) er return mgr.OAuth2RevokeToken(ctx, accessToken) } +// OAuth2Token Unified token endpoint that dispatches to appropriate handler based on grant type | 统一的令牌端点,根据授权类型分发到相应的处理逻辑 +func OAuth2Token(ctx context.Context, req *oauth2.TokenRequest, validateUser oauth2.UserValidator, authType ...string) (*oauth2.AccessToken, error) { + mgr, err := GetManager(authType...) + if err != nil { + return nil, err + } + + return mgr.OAuth2Token(ctx, req, validateUser) +} + +// OAuth2ClientCredentialsToken Gets access token using client credentials grant | 使用客户端凭证模式获取访问令牌 +func OAuth2ClientCredentialsToken(ctx context.Context, clientID, clientSecret string, scopes []string, authType ...string) (*oauth2.AccessToken, error) { + mgr, err := GetManager(authType...) + if err != nil { + return nil, err + } + + return mgr.OAuth2ClientCredentialsToken(ctx, clientID, clientSecret, scopes) +} + +// OAuth2PasswordGrantToken Gets access token using resource owner password credentials grant | 使用密码模式获取访问令牌 +func OAuth2PasswordGrantToken(ctx context.Context, clientID, clientSecret, username, password string, scopes []string, validateUser oauth2.UserValidator, authType ...string) (*oauth2.AccessToken, error) { + mgr, err := GetManager(authType...) + if err != nil { + return nil, err + } + + return mgr.OAuth2PasswordGrantToken(ctx, clientID, clientSecret, username, password, scopes, validateUser) +} + // ============ Public Getters | 公共获取器 ============ // GetConfig returns the manager configuration | 获取 Manager 当前使用的配置 From 2bbd92eb70428f8f7fa7cd2a23c39e3c00f5dd90 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Sun, 28 Dec 2025 02:15:39 +0800 Subject: [PATCH 30/50] =?UTF-8?q?feat():=201=E3=80=81=E5=AE=8C=E5=96=84gf?= =?UTF-8?q?=E4=B8=8Egin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- integrations/gf/annotation.go | 279 +++++++++++++++++++++++++++++++++ integrations/gf/export.go | 34 ++++ integrations/gf/middleware.go | 25 +-- integrations/gin/export.go | 34 ++++ integrations/gin/middleware.go | 25 +-- pool/ants/pool_adapter_ants.go | 5 + 6 files changed, 360 insertions(+), 42 deletions(-) create mode 100644 integrations/gf/annotation.go diff --git a/integrations/gf/annotation.go b/integrations/gf/annotation.go new file mode 100644 index 0000000..6c27534 --- /dev/null +++ b/integrations/gf/annotation.go @@ -0,0 +1,279 @@ +// @Author daixk 2025/12/28 1:27:00 +package gf + +import ( + "context" + "strings" + + "github.com/click33/sa-token-go/core" + "github.com/click33/sa-token-go/stputil" + "github.com/gogf/gf/v2/net/ghttp" +) + +// Annotation annotation structure | 注解结构体 +type Annotation struct { + AuthType string `json:"authType"` // Optional: specify auth type | 可选:指定认证类型 + CheckLogin bool `json:"checkLogin"` // Check login | 检查登录 + CheckRole []string `json:"checkRole"` // Check roles | 检查角色 + CheckPermission []string `json:"checkPermission"` // Check permissions | 检查权限 + CheckDisable bool `json:"checkDisable"` // Check disable status | 检查封禁状态 + Ignore bool `json:"ignore"` // Ignore authentication | 忽略认证 + LogicType LogicType `json:"logicType"` // OR or AND logic (default: OR) | OR 或 AND 逻辑(默认: OR) +} + +// GetHandler gets handler with annotations | 获取带注解的处理器 +func GetHandler(handler ghttp.HandlerFunc, annotations ...*Annotation) ghttp.HandlerFunc { + return func(r *ghttp.Request) { + // Ignore authentication | 忽略认证直接放行 + if len(annotations) > 0 && annotations[0].Ignore { + if handler != nil { + handler(r) + } else { + r.Middleware.Next() + } + return + } + + // Check if any authentication is needed | 检查是否需要任何认证 + ann := &Annotation{} + if len(annotations) > 0 { + ann = annotations[0] + } + + // No authentication required | 无需任何认证 + needAuth := ann.CheckLogin || ann.CheckDisable || len(ann.CheckPermission) > 0 || len(ann.CheckRole) > 0 + if !needAuth { + if handler != nil { + handler(r) + } else { + r.Middleware.Next() + } + return + } + + ctx := r.Context() + + // Get manager | 获取 Manager + mgr, err := stputil.GetManager(ann.AuthType) + if err != nil { + writeErrorResponse(r, err) + return + } + + // Get SaTokenContext (reuse cached context) | 获取 SaTokenContext(复用缓存上下文) + saCtx := getSaContext(r, mgr) + token := saCtx.GetTokenValue() + + if token == "" { + writeErrorResponse(r, core.NewNotLoginError()) + return + } + + // Check login | 检查登录 + if err := mgr.CheckLogin(ctx, token); err != nil { + writeErrorResponse(r, err) + return + } + + // Get loginID for further checks | 获取 loginID 用于后续检查 + var loginID string + if ann.CheckDisable || len(ann.CheckPermission) > 0 || len(ann.CheckRole) > 0 { + loginID, err = mgr.GetLoginIDNotCheck(ctx, token) + if err != nil { + writeErrorResponse(r, err) + return + } + } + + // Check if account is disabled | 检查是否被封禁 + if ann.CheckDisable { + if mgr.IsDisable(ctx, loginID) { + writeErrorResponse(r, core.NewAccountDisabledError(loginID)) + return + } + } + + // Check permission | 检查权限 + if len(ann.CheckPermission) > 0 { + var ok bool + if ann.LogicType == LogicAnd { + ok = mgr.HasPermissionsAnd(ctx, loginID, ann.CheckPermission) + } else { + ok = mgr.HasPermissionsOr(ctx, loginID, ann.CheckPermission) + } + if !ok { + writeErrorResponse(r, core.NewPermissionDeniedError(strings.Join(ann.CheckPermission, ","))) + return + } + } + + // Check role | 检查角色 + if len(ann.CheckRole) > 0 { + var ok bool + if ann.LogicType == LogicAnd { + ok = mgr.HasRolesAnd(ctx, loginID, ann.CheckRole) + } else { + ok = mgr.HasRolesOr(ctx, loginID, ann.CheckRole) + } + if !ok { + writeErrorResponse(r, core.NewRoleDeniedError(strings.Join(ann.CheckRole, ","))) + return + } + } + + // All checks passed, execute original handler | 所有检查通过,执行原函数 + if handler != nil { + handler(r) + } else { + r.Middleware.Next() + } + } +} + +// CheckLoginMiddleware decorator for login checking | 检查登录装饰器 +func CheckLoginMiddleware(authType ...string) ghttp.HandlerFunc { + ann := &Annotation{CheckLogin: true} + if len(authType) > 0 { + ann.AuthType = authType[0] + } + return GetHandler(nil, ann) +} + +// CheckRoleMiddleware decorator for role checking | 检查角色装饰器 +func CheckRoleMiddleware(roles ...string) ghttp.HandlerFunc { + return GetHandler(nil, &Annotation{CheckRole: roles}) +} + +// CheckRoleMiddlewareWithAuthType decorator for role checking with auth type | 检查角色装饰器(带认证类型) +func CheckRoleMiddlewareWithAuthType(authType string, roles ...string) ghttp.HandlerFunc { + return GetHandler(nil, &Annotation{CheckRole: roles, AuthType: authType}) +} + +// CheckPermissionMiddleware decorator for permission checking | 检查权限装饰器 +func CheckPermissionMiddleware(perms ...string) ghttp.HandlerFunc { + return GetHandler(nil, &Annotation{CheckPermission: perms}) +} + +// CheckPermissionMiddlewareWithAuthType decorator for permission checking with auth type | 检查权限装饰器(带认证类型) +func CheckPermissionMiddlewareWithAuthType(authType string, perms ...string) ghttp.HandlerFunc { + return GetHandler(nil, &Annotation{CheckPermission: perms, AuthType: authType}) +} + +// CheckDisableMiddleware decorator for checking if account is disabled | 检查是否被封禁装饰器 +func CheckDisableMiddleware(authType ...string) ghttp.HandlerFunc { + ann := &Annotation{CheckDisable: true} + if len(authType) > 0 { + ann.AuthType = authType[0] + } + return GetHandler(nil, ann) +} + +// IgnoreMiddleware decorator to ignore authentication | 忽略认证装饰器 +func IgnoreMiddleware() ghttp.HandlerFunc { + return GetHandler(nil, &Annotation{Ignore: true}) +} + +// ============ Combined Middleware | 组合中间件 ============ + +// CheckLoginAndRoleMiddleware checks login and role | 检查登录和角色 +func CheckLoginAndRoleMiddleware(roles ...string) ghttp.HandlerFunc { + return GetHandler(nil, &Annotation{CheckLogin: true, CheckRole: roles}) +} + +// CheckLoginAndPermissionMiddleware checks login and permission | 检查登录和权限 +func CheckLoginAndPermissionMiddleware(perms ...string) ghttp.HandlerFunc { + return GetHandler(nil, &Annotation{CheckLogin: true, CheckPermission: perms}) +} + +// CheckAllMiddleware checks login, role, permission and disable status | 全面检查 +func CheckAllMiddleware(roles []string, perms []string) ghttp.HandlerFunc { + return GetHandler(nil, &Annotation{ + CheckLogin: true, + CheckRole: roles, + CheckPermission: perms, + CheckDisable: true, + }) +} + +// ============ Route Group Helper | 路由组辅助函数 ============ + +// AuthGroup creates a route group with authentication | 创建带认证的路由组 +func AuthGroup(group *ghttp.RouterGroup, authType ...string) *ghttp.RouterGroup { + group.Middleware(CheckLoginMiddleware(authType...)) + return group +} + +// RoleGroup creates a route group with role checking | 创建带角色检查的路由组 +func RoleGroup(group *ghttp.RouterGroup, roles ...string) *ghttp.RouterGroup { + group.Middleware(CheckLoginAndRoleMiddleware(roles...)) + return group +} + +// PermissionGroup creates a route group with permission checking | 创建带权限检查的路由组 +func PermissionGroup(group *ghttp.RouterGroup, perms ...string) *ghttp.RouterGroup { + group.Middleware(CheckLoginAndPermissionMiddleware(perms...)) + return group +} + +// ============ Context Helper | 上下文辅助函数 ============ + +// GetLoginIDFromRequest gets login ID from request context | 从请求上下文获取登录 ID +func GetLoginIDFromRequest(r *ghttp.Request, authType ...string) (string, error) { + var at string + if len(authType) > 0 { + at = authType[0] + } + + mgr, err := stputil.GetManager(at) + if err != nil { + return "", err + } + + saCtx := getSaContext(r, mgr) + token := saCtx.GetTokenValue() + if token == "" { + return "", core.ErrNotLogin + } + return mgr.GetLoginID(r.Context(), token) +} + +// IsLoginFromRequest checks if user is logged in from request | 从请求检查用户是否已登录 +func IsLoginFromRequest(r *ghttp.Request, authType ...string) bool { + var at string + if len(authType) > 0 { + at = authType[0] + } + + mgr, err := stputil.GetManager(at) + if err != nil { + return false + } + + saCtx := getSaContext(r, mgr) + token := saCtx.GetTokenValue() + if token == "" { + return false + } + return mgr.IsLogin(r.Context(), token) +} + +// GetTokenFromRequest gets token from request (exported) | 从请求获取 Token(导出) +func GetTokenFromRequest(r *ghttp.Request, authType ...string) string { + var at string + if len(authType) > 0 { + at = authType[0] + } + + mgr, err := stputil.GetManager(at) + if err != nil { + return "" + } + + saCtx := getSaContext(r, mgr) + return saCtx.GetTokenValue() +} + +// WithContext creates a new context with sa-token context | 创建带 sa-token 上下文的新上下文 +func WithContext(r *ghttp.Request, authType ...string) context.Context { + return r.Context() +} diff --git a/integrations/gf/export.go b/integrations/gf/export.go index 978976d..43093d2 100644 --- a/integrations/gf/export.go +++ b/integrations/gf/export.go @@ -59,6 +59,12 @@ type ( OAuth2AccessToken = oauth2.AccessToken // AuthorizationCode 授权码 AuthorizationCode = oauth2.AuthorizationCode + // OAuth2TokenRequest OAuth2令牌请求 + OAuth2TokenRequest = oauth2.TokenRequest + // OAuth2GrantType OAuth2授权类型 + OAuth2GrantType = oauth2.GrantType + // OAuth2UserValidator OAuth2用户验证器 + OAuth2UserValidator = oauth2.UserValidator // Storage 存储接口 Storage = adapter.Storage // Codec 编解码接口 @@ -786,6 +792,34 @@ func RevokeToken(ctx context.Context, accessToken string, authType ...string) er return stputil.RevokeToken(ctx, accessToken, authType...) } +// OAuth2Token Unified token endpoint that dispatches to appropriate handler based on grant type | 统一的令牌端点 +func OAuth2Token(ctx context.Context, req *oauth2.TokenRequest, validateUser oauth2.UserValidator, authType ...string) (*oauth2.AccessToken, error) { + return stputil.OAuth2Token(ctx, req, validateUser, authType...) +} + +// OAuth2ClientCredentialsToken Gets access token using client credentials grant | 使用客户端凭证模式获取访问令牌 +func OAuth2ClientCredentialsToken(ctx context.Context, clientID, clientSecret string, scopes []string, authType ...string) (*oauth2.AccessToken, error) { + return stputil.OAuth2ClientCredentialsToken(ctx, clientID, clientSecret, scopes, authType...) +} + +// OAuth2PasswordGrantToken Gets access token using resource owner password credentials grant | 使用密码模式获取访问令牌 +func OAuth2PasswordGrantToken(ctx context.Context, clientID, clientSecret, username, password string, scopes []string, validateUser oauth2.UserValidator, authType ...string) (*oauth2.AccessToken, error) { + return stputil.OAuth2PasswordGrantToken(ctx, clientID, clientSecret, username, password, scopes, validateUser, authType...) +} + +// ============ OAuth2 Grant Type Constants | OAuth2授权类型常量 ============ + +const ( + // GrantTypeAuthorizationCode Authorization code grant type | 授权码模式 + GrantTypeAuthorizationCode = oauth2.GrantTypeAuthorizationCode + // GrantTypeClientCredentials Client credentials grant type | 客户端凭证模式 + GrantTypeClientCredentials = oauth2.GrantTypeClientCredentials + // GrantTypePassword Password grant type | 密码模式 + GrantTypePassword = oauth2.GrantTypePassword + // GrantTypeRefreshToken Refresh token grant type | 刷新令牌模式 + GrantTypeRefreshToken = oauth2.GrantTypeRefreshToken +) + // ============ Public Getters | 公共获取器 ============ // GetConfig returns the manager configuration | 获取 Manager 当前使用的配置 diff --git a/integrations/gf/middleware.go b/integrations/gf/middleware.go index e72b8ae..42ff8ee 100644 --- a/integrations/gf/middleware.go +++ b/integrations/gf/middleware.go @@ -171,17 +171,9 @@ func PermissionMiddleware( // Permission check | 权限校验 var ok bool - switch { - // Single permission | 单权限判断 - case len(permissions) == 1: - ok = mgr.HasPermissionByToken(ctx, tokenValue, permissions[0]) - - // AND logic | AND 逻辑 - case options.LogicType == LogicAnd: + if options.LogicType == LogicAnd { ok = mgr.HasPermissionsAndByToken(ctx, tokenValue, permissions) - - // OR logic (default) | OR 逻辑(默认) - default: + } else { ok = mgr.HasPermissionsOrByToken(ctx, tokenValue, permissions) } @@ -234,18 +226,9 @@ func RoleMiddleware( // Role check | 角色校验 var ok bool - - switch { - // Single role | 单角色判断 - case len(roles) == 1: - ok = mgr.HasRoleByToken(ctx, tokenValue, roles[0]) - - // AND logic | AND 逻辑 - case options.LogicType == LogicAnd: + if options.LogicType == LogicAnd { ok = mgr.HasRolesAndByToken(ctx, tokenValue, roles) - - // OR logic (default) | OR 逻辑(默认) - default: + } else { ok = mgr.HasRolesOrByToken(ctx, tokenValue, roles) } diff --git a/integrations/gin/export.go b/integrations/gin/export.go index 444327a..679115b 100644 --- a/integrations/gin/export.go +++ b/integrations/gin/export.go @@ -59,6 +59,12 @@ type ( OAuth2AccessToken = oauth2.AccessToken // AuthorizationCode 授权码 AuthorizationCode = oauth2.AuthorizationCode + // OAuth2TokenRequest OAuth2令牌请求 + OAuth2TokenRequest = oauth2.TokenRequest + // OAuth2GrantType OAuth2授权类型 + OAuth2GrantType = oauth2.GrantType + // OAuth2UserValidator OAuth2用户验证器 + OAuth2UserValidator = oauth2.UserValidator // Storage 存储接口 Storage = adapter.Storage // Codec 编解码接口 @@ -786,6 +792,34 @@ func RevokeToken(ctx context.Context, accessToken string, authType ...string) er return stputil.RevokeToken(ctx, accessToken, authType...) } +// OAuth2Token Unified token endpoint that dispatches to appropriate handler based on grant type | 统一的令牌端点 +func OAuth2Token(ctx context.Context, req *oauth2.TokenRequest, validateUser oauth2.UserValidator, authType ...string) (*oauth2.AccessToken, error) { + return stputil.OAuth2Token(ctx, req, validateUser, authType...) +} + +// OAuth2ClientCredentialsToken Gets access token using client credentials grant | 使用客户端凭证模式获取访问令牌 +func OAuth2ClientCredentialsToken(ctx context.Context, clientID, clientSecret string, scopes []string, authType ...string) (*oauth2.AccessToken, error) { + return stputil.OAuth2ClientCredentialsToken(ctx, clientID, clientSecret, scopes, authType...) +} + +// OAuth2PasswordGrantToken Gets access token using resource owner password credentials grant | 使用密码模式获取访问令牌 +func OAuth2PasswordGrantToken(ctx context.Context, clientID, clientSecret, username, password string, scopes []string, validateUser oauth2.UserValidator, authType ...string) (*oauth2.AccessToken, error) { + return stputil.OAuth2PasswordGrantToken(ctx, clientID, clientSecret, username, password, scopes, validateUser, authType...) +} + +// ============ OAuth2 Grant Type Constants | OAuth2授权类型常量 ============ + +const ( + // GrantTypeAuthorizationCode Authorization code grant type | 授权码模式 + GrantTypeAuthorizationCode = oauth2.GrantTypeAuthorizationCode + // GrantTypeClientCredentials Client credentials grant type | 客户端凭证模式 + GrantTypeClientCredentials = oauth2.GrantTypeClientCredentials + // GrantTypePassword Password grant type | 密码模式 + GrantTypePassword = oauth2.GrantTypePassword + // GrantTypeRefreshToken Refresh token grant type | 刷新令牌模式 + GrantTypeRefreshToken = oauth2.GrantTypeRefreshToken +) + // ============ Public Getters | 公共获取器 ============ // GetConfig returns the manager configuration | 获取 Manager 当前使用的配置 diff --git a/integrations/gin/middleware.go b/integrations/gin/middleware.go index 8e75a18..ca29b91 100644 --- a/integrations/gin/middleware.go +++ b/integrations/gin/middleware.go @@ -176,17 +176,9 @@ func PermissionMiddleware( // Permission check | 权限校验 var ok bool - switch { - // Single permission | 单权限判断 - case len(permissions) == 1: - ok = mgr.HasPermissionByToken(ctx, tokenValue, permissions[0]) - - // AND logic | AND 逻辑 - case options.LogicType == LogicAnd: + if options.LogicType == LogicAnd { ok = mgr.HasPermissionsAndByToken(ctx, tokenValue, permissions) - - // OR logic (default) | OR 逻辑(默认) - default: + } else { ok = mgr.HasPermissionsOrByToken(ctx, tokenValue, permissions) } @@ -241,18 +233,9 @@ func RoleMiddleware( // Role check | 角色校验 var ok bool - - switch { - // Single role | 单角色判断 - case len(roles) == 1: - ok = mgr.HasRoleByToken(ctx, tokenValue, roles[0]) - - // AND logic | AND 逻辑 - case options.LogicType == LogicAnd: + if options.LogicType == LogicAnd { ok = mgr.HasRolesAndByToken(ctx, tokenValue, roles) - - // OR logic (default) | OR 逻辑(默认) - default: + } else { ok = mgr.HasRolesOrByToken(ctx, tokenValue, roles) } diff --git a/pool/ants/pool_adapter_ants.go b/pool/ants/pool_adapter_ants.go index fcbf5de..f446903 100644 --- a/pool/ants/pool_adapter_ants.go +++ b/pool/ants/pool_adapter_ants.go @@ -111,6 +111,11 @@ func (m *RenewPoolManager) Stats() (running, capacity int, usage float64) { capacity = m.pool.Cap() // Pool capacity | 当前池容量 if capacity > 0 { usage = float64(running) / float64(capacity) // Usage ratio | 当前使用率 + // Cap usage at 1.0 to handle race condition between Running() and Cap() calls + // 限制使用率最大为 1.0,处理 Running() 和 Cap() 调用之间的竞态条件 + if usage > 1.0 { + usage = 1.0 + } } return From 263eed3dd26436bc7d945c70ebdccf1770efcf5e Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Sun, 28 Dec 2025 12:26:29 +0800 Subject: [PATCH 31/50] =?UTF-8?q?feat():=201=E3=80=81=E5=AE=8C=E5=96=84gf?= =?UTF-8?q?=E4=B8=8Egin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../generator_adapter_sgenerator_test.go | 407 +++++++++ integrations/gin/annotation.go | 286 +++++++ pool/ants/pool_adapter_ants_test.go | 795 ++++++++++++++++++ 3 files changed, 1488 insertions(+) create mode 100644 generator/sgenerator/generator_adapter_sgenerator_test.go create mode 100644 integrations/gin/annotation.go create mode 100644 pool/ants/pool_adapter_ants_test.go diff --git a/generator/sgenerator/generator_adapter_sgenerator_test.go b/generator/sgenerator/generator_adapter_sgenerator_test.go new file mode 100644 index 0000000..3874395 --- /dev/null +++ b/generator/sgenerator/generator_adapter_sgenerator_test.go @@ -0,0 +1,407 @@ +// @Author daixk 2025/12/28 10:00:00 +package sgenerator + +import ( + "strings" + "testing" + + "github.com/click33/sa-token-go/core/adapter" +) + +// ============ Constructor Tests | 构造函数测试 ============ + +func TestNewGenerator(t *testing.T) { + g := NewGenerator(3600, adapter.TokenStyleUUID, "my-secret") + + if g.timeout != 3600 { + t.Errorf("expected timeout 3600, got %d", g.timeout) + } + if g.tokenStyle != adapter.TokenStyleUUID { + t.Errorf("expected tokenStyle uuid, got %s", g.tokenStyle) + } + if g.jwtSecretKey != "my-secret" { + t.Errorf("expected jwtSecretKey my-secret, got %s", g.jwtSecretKey) + } +} + +func TestNewDefaultGenerator(t *testing.T) { + g := NewDefaultGenerator() + + if g.timeout != DefaultTimeout { + t.Errorf("expected default timeout %d, got %d", DefaultTimeout, g.timeout) + } + if g.tokenStyle != adapter.TokenStyleUUID { + t.Errorf("expected default tokenStyle uuid, got %s", g.tokenStyle) + } + if g.jwtSecretKey != DefaultJWTSecret { + t.Errorf("expected default jwtSecretKey, got %s", g.jwtSecretKey) + } +} + +// ============ Generate Tests | 生成测试 ============ + +func TestGenerate_EmptyLoginID(t *testing.T) { + g := NewDefaultGenerator() + + _, err := g.Generate("", "pc") + if err == nil { + t.Error("expected error for empty loginID") + } +} + +func TestGenerate_UUID(t *testing.T) { + g := NewGenerator(3600, adapter.TokenStyleUUID, "") + + token, err := g.Generate("user123", "pc") + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + // UUID format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + if len(token) != 36 { + t.Errorf("expected UUID length 36, got %d", len(token)) + } + if strings.Count(token, "-") != 4 { + t.Errorf("expected 4 dashes in UUID, got %d", strings.Count(token, "-")) + } +} + +func TestGenerate_Simple(t *testing.T) { + g := NewGenerator(3600, adapter.TokenStyleSimple, "") + + token, err := g.Generate("user123", "pc") + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + if len(token) != DefaultSimpleLength { + t.Errorf("expected length %d, got %d", DefaultSimpleLength, len(token)) + } +} + +func TestGenerate_Random32(t *testing.T) { + g := NewGenerator(3600, adapter.TokenStyleRandom32, "") + + token, err := g.Generate("user123", "pc") + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + if len(token) != 32 { + t.Errorf("expected length 32, got %d", len(token)) + } +} + +func TestGenerate_Random64(t *testing.T) { + g := NewGenerator(3600, adapter.TokenStyleRandom64, "") + + token, err := g.Generate("user123", "pc") + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + if len(token) != 64 { + t.Errorf("expected length 64, got %d", len(token)) + } +} + +func TestGenerate_Random128(t *testing.T) { + g := NewGenerator(3600, adapter.TokenStyleRandom128, "") + + token, err := g.Generate("user123", "pc") + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + if len(token) != 128 { + t.Errorf("expected length 128, got %d", len(token)) + } +} + +func TestGenerate_JWT(t *testing.T) { + g := NewGenerator(3600, adapter.TokenStyleJWT, "test-secret") + + token, err := g.Generate("user123", "pc") + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + // JWT format: header.payload.signature + parts := strings.Split(token, ".") + if len(parts) != 3 { + t.Errorf("expected JWT with 3 parts, got %d", len(parts)) + } +} + +func TestGenerate_Hash(t *testing.T) { + g := NewGenerator(3600, adapter.TokenStyleHash, "") + + token, err := g.Generate("user123", "pc") + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + // SHA256 hex string length is 64 + if len(token) != 64 { + t.Errorf("expected hash length 64, got %d", len(token)) + } +} + +func TestGenerate_Timestamp(t *testing.T) { + g := NewGenerator(3600, adapter.TokenStyleTimestamp, "") + + token, err := g.Generate("user123", "pc") + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + // Format: timestamp_loginID_random + parts := strings.Split(token, "_") + if len(parts) != 3 { + t.Errorf("expected 3 parts separated by underscore, got %d", len(parts)) + } + if parts[1] != "user123" { + t.Errorf("expected loginID user123 in token, got %s", parts[1]) + } +} + +func TestGenerate_Tik(t *testing.T) { + g := NewGenerator(3600, adapter.TokenStyleTik, "") + + token, err := g.Generate("user123", "pc") + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + if len(token) != TikTokenLength { + t.Errorf("expected tik length %d, got %d", TikTokenLength, len(token)) + } + + // Check all characters are in charset + for _, c := range token { + if !strings.ContainsRune(TikCharset, c) { + t.Errorf("unexpected character %c in tik token", c) + } + } +} + +func TestGenerate_DefaultStyle(t *testing.T) { + g := &Generator{ + timeout: 3600, + tokenStyle: "invalid_style", + } + + token, err := g.Generate("user123", "pc") + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + // Should fallback to UUID + if len(token) != 36 { + t.Errorf("expected UUID fallback, got length %d", len(token)) + } +} + +// ============ JWT Helper Tests | JWT辅助方法测试 ============ + +func TestParseJWT(t *testing.T) { + g := NewGenerator(3600, adapter.TokenStyleJWT, "test-secret") + + token, err := g.Generate("user123", "mobile") + if err != nil { + t.Fatalf("failed to generate JWT: %v", err) + } + + claims, err := g.ParseJWT(token) + if err != nil { + t.Fatalf("failed to parse JWT: %v", err) + } + + if claims["loginId"] != "user123" { + t.Errorf("expected loginId user123, got %v", claims["loginId"]) + } + if claims["device"] != "mobile" { + t.Errorf("expected device mobile, got %v", claims["device"]) + } +} + +func TestParseJWT_EmptyToken(t *testing.T) { + g := NewDefaultGenerator() + + _, err := g.ParseJWT("") + if err == nil { + t.Error("expected error for empty token") + } +} + +func TestParseJWT_InvalidToken(t *testing.T) { + g := NewDefaultGenerator() + + _, err := g.ParseJWT("invalid.token.string") + if err == nil { + t.Error("expected error for invalid token") + } +} + +func TestParseJWT_WrongSecret(t *testing.T) { + g1 := NewGenerator(3600, adapter.TokenStyleJWT, "secret1") + g2 := NewGenerator(3600, adapter.TokenStyleJWT, "secret2") + + token, _ := g1.Generate("user123", "pc") + + _, err := g2.ParseJWT(token) + if err == nil { + t.Error("expected error for wrong secret") + } +} + +func TestValidateJWT(t *testing.T) { + g := NewGenerator(3600, adapter.TokenStyleJWT, "test-secret") + + token, _ := g.Generate("user123", "pc") + + err := g.ValidateJWT(token) + if err != nil { + t.Errorf("expected valid JWT, got error: %v", err) + } +} + +func TestValidateJWT_Invalid(t *testing.T) { + g := NewDefaultGenerator() + + err := g.ValidateJWT("invalid.token") + if err == nil { + t.Error("expected error for invalid JWT") + } +} + +func TestGetLoginIDFromJWT(t *testing.T) { + g := NewGenerator(3600, adapter.TokenStyleJWT, "test-secret") + + token, _ := g.Generate("user456", "pc") + + loginID, err := g.GetLoginIDFromJWT(token) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if loginID != "user456" { + t.Errorf("expected loginID user456, got %s", loginID) + } +} + +func TestGetLoginIDFromJWT_InvalidToken(t *testing.T) { + g := NewDefaultGenerator() + + _, err := g.GetLoginIDFromJWT("invalid.token") + if err == nil { + t.Error("expected error for invalid token") + } +} + +// ============ Uniqueness Tests | 唯一性测试 ============ + +func TestGenerate_Uniqueness(t *testing.T) { + styles := []adapter.TokenStyle{ + adapter.TokenStyleUUID, + adapter.TokenStyleSimple, + adapter.TokenStyleRandom32, + adapter.TokenStyleRandom64, + adapter.TokenStyleHash, + adapter.TokenStyleTimestamp, + adapter.TokenStyleTik, + } + + for _, style := range styles { + t.Run(string(style), func(t *testing.T) { + g := NewGenerator(3600, style, "test-secret") + tokens := make(map[string]bool) + count := 100 + + for i := 0; i < count; i++ { + token, err := g.Generate("user123", "pc") + if err != nil { + t.Fatalf("failed to generate token: %v", err) + } + + if tokens[token] { + t.Errorf("duplicate token generated: %s", token) + } + tokens[token] = true + } + }) + } +} + +// ============ JWT Expiration Tests | JWT过期测试 ============ + +func TestGenerate_JWT_WithExpiration(t *testing.T) { + g := NewGenerator(3600, adapter.TokenStyleJWT, "test-secret") + + token, _ := g.Generate("user123", "pc") + claims, _ := g.ParseJWT(token) + + if _, ok := claims["exp"]; !ok { + t.Error("expected exp claim in JWT") + } + if _, ok := claims["iat"]; !ok { + t.Error("expected iat claim in JWT") + } +} + +func TestGenerate_JWT_NoExpiration(t *testing.T) { + g := NewGenerator(0, adapter.TokenStyleJWT, "test-secret") + + token, _ := g.Generate("user123", "pc") + claims, _ := g.ParseJWT(token) + + if _, ok := claims["exp"]; ok { + t.Error("expected no exp claim when timeout is 0") + } +} + +// ============ Benchmark Tests | 基准测试 ============ + +func BenchmarkGenerate_UUID(b *testing.B) { + g := NewGenerator(3600, adapter.TokenStyleUUID, "") + for i := 0; i < b.N; i++ { + g.Generate("user123", "pc") + } +} + +func BenchmarkGenerate_Simple(b *testing.B) { + g := NewGenerator(3600, adapter.TokenStyleSimple, "") + for i := 0; i < b.N; i++ { + g.Generate("user123", "pc") + } +} + +func BenchmarkGenerate_JWT(b *testing.B) { + g := NewGenerator(3600, adapter.TokenStyleJWT, "test-secret") + for i := 0; i < b.N; i++ { + g.Generate("user123", "pc") + } +} + +func BenchmarkGenerate_Hash(b *testing.B) { + g := NewGenerator(3600, adapter.TokenStyleHash, "") + for i := 0; i < b.N; i++ { + g.Generate("user123", "pc") + } +} + +func BenchmarkGenerate_Tik(b *testing.B) { + g := NewGenerator(3600, adapter.TokenStyleTik, "") + for i := 0; i < b.N; i++ { + g.Generate("user123", "pc") + } +} + +func BenchmarkParseJWT(b *testing.B) { + g := NewGenerator(3600, adapter.TokenStyleJWT, "test-secret") + token, _ := g.Generate("user123", "pc") + + b.ResetTimer() + for i := 0; i < b.N; i++ { + g.ParseJWT(token) + } +} diff --git a/integrations/gin/annotation.go b/integrations/gin/annotation.go new file mode 100644 index 0000000..b532521 --- /dev/null +++ b/integrations/gin/annotation.go @@ -0,0 +1,286 @@ +// @Author daixk 2025/12/28 +package gin + +import ( + "context" + "strings" + + "github.com/click33/sa-token-go/core" + "github.com/click33/sa-token-go/stputil" + "github.com/gin-gonic/gin" +) + +// Annotation annotation structure | 注解结构体 +type Annotation struct { + AuthType string `json:"authType"` // Optional: specify auth type | 可选:指定认证类型 + CheckLogin bool `json:"checkLogin"` // Check login | 检查登录 + CheckRole []string `json:"checkRole"` // Check roles | 检查角色 + CheckPermission []string `json:"checkPermission"` // Check permissions | 检查权限 + CheckDisable bool `json:"checkDisable"` // Check disable status | 检查封禁状态 + Ignore bool `json:"ignore"` // Ignore authentication | 忽略认证 + LogicType LogicType `json:"logicType"` // OR or AND logic (default: OR) | OR 或 AND 逻辑(默认: OR) +} + +// GetHandler gets handler with annotations | 获取带注解的处理器 +func GetHandler(handler gin.HandlerFunc, annotations ...*Annotation) gin.HandlerFunc { + return func(c *gin.Context) { + // Ignore authentication | 忽略认证直接放行 + if len(annotations) > 0 && annotations[0].Ignore { + if handler != nil { + handler(c) + } else { + c.Next() + } + return + } + + // Check if any authentication is needed | 检查是否需要任何认证 + ann := &Annotation{} + if len(annotations) > 0 { + ann = annotations[0] + } + + // No authentication required | 无需任何认证 + needAuth := ann.CheckLogin || ann.CheckDisable || len(ann.CheckPermission) > 0 || len(ann.CheckRole) > 0 + if !needAuth { + if handler != nil { + handler(c) + } else { + c.Next() + } + return + } + + ctx := c.Request.Context() + + // Get manager | 获取 Manager + mgr, err := stputil.GetManager(ann.AuthType) + if err != nil { + writeErrorResponse(c, err) + c.Abort() + return + } + + // Get SaTokenContext (reuse cached context) | 获取 SaTokenContext(复用缓存上下文) + saCtx := getSaContext(c, mgr) + token := saCtx.GetTokenValue() + + if token == "" { + writeErrorResponse(c, core.NewNotLoginError()) + c.Abort() + return + } + + // Check login | 检查登录 + if err := mgr.CheckLogin(ctx, token); err != nil { + writeErrorResponse(c, err) + c.Abort() + return + } + + // Get loginID for further checks | 获取 loginID 用于后续检查 + var loginID string + if ann.CheckDisable || len(ann.CheckPermission) > 0 || len(ann.CheckRole) > 0 { + loginID, err = mgr.GetLoginIDNotCheck(ctx, token) + if err != nil { + writeErrorResponse(c, err) + c.Abort() + return + } + } + + // Check if account is disabled | 检查是否被封禁 + if ann.CheckDisable { + if mgr.IsDisable(ctx, loginID) { + writeErrorResponse(c, core.NewAccountDisabledError(loginID)) + c.Abort() + return + } + } + + // Check permission | 检查权限 + if len(ann.CheckPermission) > 0 { + var ok bool + if ann.LogicType == LogicAnd { + ok = mgr.HasPermissionsAnd(ctx, loginID, ann.CheckPermission) + } else { + ok = mgr.HasPermissionsOr(ctx, loginID, ann.CheckPermission) + } + if !ok { + writeErrorResponse(c, core.NewPermissionDeniedError(strings.Join(ann.CheckPermission, ","))) + c.Abort() + return + } + } + + // Check role | 检查角色 + if len(ann.CheckRole) > 0 { + var ok bool + if ann.LogicType == LogicAnd { + ok = mgr.HasRolesAnd(ctx, loginID, ann.CheckRole) + } else { + ok = mgr.HasRolesOr(ctx, loginID, ann.CheckRole) + } + if !ok { + writeErrorResponse(c, core.NewRoleDeniedError(strings.Join(ann.CheckRole, ","))) + c.Abort() + return + } + } + + // All checks passed, execute original handler | 所有检查通过,执行原函数 + if handler != nil { + handler(c) + } else { + c.Next() + } + } +} + +// CheckLoginMiddleware decorator for login checking | 检查登录装饰器 +func CheckLoginMiddleware(authType ...string) gin.HandlerFunc { + ann := &Annotation{CheckLogin: true} + if len(authType) > 0 { + ann.AuthType = authType[0] + } + return GetHandler(nil, ann) +} + +// CheckRoleMiddleware decorator for role checking | 检查角色装饰器 +func CheckRoleMiddleware(roles ...string) gin.HandlerFunc { + return GetHandler(nil, &Annotation{CheckRole: roles}) +} + +// CheckRoleMiddlewareWithAuthType decorator for role checking with auth type | 检查角色装饰器(带认证类型) +func CheckRoleMiddlewareWithAuthType(authType string, roles ...string) gin.HandlerFunc { + return GetHandler(nil, &Annotation{CheckRole: roles, AuthType: authType}) +} + +// CheckPermissionMiddleware decorator for permission checking | 检查权限装饰器 +func CheckPermissionMiddleware(perms ...string) gin.HandlerFunc { + return GetHandler(nil, &Annotation{CheckPermission: perms}) +} + +// CheckPermissionMiddlewareWithAuthType decorator for permission checking with auth type | 检查权限装饰器(带认证类型) +func CheckPermissionMiddlewareWithAuthType(authType string, perms ...string) gin.HandlerFunc { + return GetHandler(nil, &Annotation{CheckPermission: perms, AuthType: authType}) +} + +// CheckDisableMiddleware decorator for checking if account is disabled | 检查是否被封禁装饰器 +func CheckDisableMiddleware(authType ...string) gin.HandlerFunc { + ann := &Annotation{CheckDisable: true} + if len(authType) > 0 { + ann.AuthType = authType[0] + } + return GetHandler(nil, ann) +} + +// IgnoreMiddleware decorator to ignore authentication | 忽略认证装饰器 +func IgnoreMiddleware() gin.HandlerFunc { + return GetHandler(nil, &Annotation{Ignore: true}) +} + +// ============ Combined Middleware | 组合中间件 ============ + +// CheckLoginAndRoleMiddleware checks login and role | 检查登录和角色 +func CheckLoginAndRoleMiddleware(roles ...string) gin.HandlerFunc { + return GetHandler(nil, &Annotation{CheckLogin: true, CheckRole: roles}) +} + +// CheckLoginAndPermissionMiddleware checks login and permission | 检查登录和权限 +func CheckLoginAndPermissionMiddleware(perms ...string) gin.HandlerFunc { + return GetHandler(nil, &Annotation{CheckLogin: true, CheckPermission: perms}) +} + +// CheckAllMiddleware checks login, role, permission and disable status | 全面检查 +func CheckAllMiddleware(roles []string, perms []string) gin.HandlerFunc { + return GetHandler(nil, &Annotation{ + CheckLogin: true, + CheckRole: roles, + CheckPermission: perms, + CheckDisable: true, + }) +} + +// ============ Route Group Helper | 路由组辅助函数 ============ + +// AuthGroup creates a route group with authentication | 创建带认证的路由组 +func AuthGroup(group *gin.RouterGroup, authType ...string) *gin.RouterGroup { + group.Use(CheckLoginMiddleware(authType...)) + return group +} + +// RoleGroup creates a route group with role checking | 创建带角色检查的路由组 +func RoleGroup(group *gin.RouterGroup, roles ...string) *gin.RouterGroup { + group.Use(CheckLoginAndRoleMiddleware(roles...)) + return group +} + +// PermissionGroup creates a route group with permission checking | 创建带权限检查的路由组 +func PermissionGroup(group *gin.RouterGroup, perms ...string) *gin.RouterGroup { + group.Use(CheckLoginAndPermissionMiddleware(perms...)) + return group +} + +// ============ Context Helper | 上下文辅助函数 ============ + +// GetLoginIDFromRequest gets login ID from request context | 从请求上下文获取登录 ID +func GetLoginIDFromRequest(c *gin.Context, authType ...string) (string, error) { + var at string + if len(authType) > 0 { + at = authType[0] + } + + mgr, err := stputil.GetManager(at) + if err != nil { + return "", err + } + + saCtx := getSaContext(c, mgr) + token := saCtx.GetTokenValue() + if token == "" { + return "", core.ErrNotLogin + } + return mgr.GetLoginID(c.Request.Context(), token) +} + +// IsLoginFromRequest checks if user is logged in from request | 从请求检查用户是否已登录 +func IsLoginFromRequest(c *gin.Context, authType ...string) bool { + var at string + if len(authType) > 0 { + at = authType[0] + } + + mgr, err := stputil.GetManager(at) + if err != nil { + return false + } + + saCtx := getSaContext(c, mgr) + token := saCtx.GetTokenValue() + if token == "" { + return false + } + return mgr.IsLogin(c.Request.Context(), token) +} + +// GetTokenFromRequest gets token from request (exported) | 从请求获取 Token(导出) +func GetTokenFromRequest(c *gin.Context, authType ...string) string { + var at string + if len(authType) > 0 { + at = authType[0] + } + + mgr, err := stputil.GetManager(at) + if err != nil { + return "" + } + + saCtx := getSaContext(c, mgr) + return saCtx.GetTokenValue() +} + +// WithContext creates a new context with sa-token context | 创建带 sa-token 上下文的新上下文 +func WithContext(c *gin.Context, authType ...string) context.Context { + return c.Request.Context() +} diff --git a/pool/ants/pool_adapter_ants_test.go b/pool/ants/pool_adapter_ants_test.go new file mode 100644 index 0000000..15f3bbf --- /dev/null +++ b/pool/ants/pool_adapter_ants_test.go @@ -0,0 +1,795 @@ +// @Author daixk 2025/12/26 10:00:00 +package ants + +import ( + "sync" + "sync/atomic" + "testing" + "time" +) + +// ============ RenewPoolManager Tests | 续期池管理器测试 ============ + +func TestNewRenewPoolManagerWithDefaultConfig(t *testing.T) { + mgr := NewRenewPoolManagerWithDefaultConfig() + if mgr == nil { + t.Fatal("NewRenewPoolManagerWithDefaultConfig returned nil") + } + defer mgr.Stop() + + if mgr.pool == nil { + t.Error("pool should not be nil") + } + if mgr.config == nil { + t.Error("config should not be nil") + } + if !mgr.started { + t.Error("manager should be started") + } +} + +func TestNewRenewPoolManagerWithConfig(t *testing.T) { + tests := []struct { + name string + config *RenewPoolConfig + wantErr bool + }{ + { + name: "nil config uses default", + config: nil, + wantErr: false, + }, + { + name: "valid config", + config: &RenewPoolConfig{ + MinSize: 50, + MaxSize: 500, + ScaleUpRate: 0.7, + ScaleDownRate: 0.2, + CheckInterval: 30 * time.Second, + Expiry: 5 * time.Second, + PreAlloc: false, + NonBlocking: true, + }, + wantErr: false, + }, + { + name: "MinSize <= 0 uses default", + config: &RenewPoolConfig{ + MinSize: 0, + MaxSize: 500, + ScaleUpRate: 0.7, + ScaleDownRate: 0.2, + CheckInterval: 30 * time.Second, + Expiry: 5 * time.Second, + }, + wantErr: false, + }, + { + name: "MaxSize < MinSize adjusts", + config: &RenewPoolConfig{ + MinSize: 100, + MaxSize: 50, + ScaleUpRate: 0.7, + ScaleDownRate: 0.2, + CheckInterval: 30 * time.Second, + Expiry: 5 * time.Second, + }, + wantErr: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + mgr, err := NewRenewPoolManagerWithConfig(tt.config) + if (err != nil) != tt.wantErr { + t.Errorf("NewRenewPoolManagerWithConfig() error = %v, wantErr %v", err, tt.wantErr) + return + } + if mgr != nil { + defer mgr.Stop() + if mgr.pool == nil { + t.Error("pool should not be nil") + } + } + }) + } +} + +func TestRenewPoolManager_Submit(t *testing.T) { + mgr := NewRenewPoolManagerWithDefaultConfig() + defer mgr.Stop() + + var counter int32 + var wg sync.WaitGroup + + taskCount := 10 + wg.Add(taskCount) + + for i := 0; i < taskCount; i++ { + err := mgr.Submit(func() { + atomic.AddInt32(&counter, 1) + wg.Done() + }) + if err != nil { + t.Errorf("Submit() error = %v", err) + } + } + + wg.Wait() + + if atomic.LoadInt32(&counter) != int32(taskCount) { + t.Errorf("expected counter = %d, got %d", taskCount, counter) + } +} + +func TestRenewPoolManager_Submit_AfterStop(t *testing.T) { + mgr := NewRenewPoolManagerWithDefaultConfig() + mgr.Stop() + + err := mgr.Submit(func() {}) + if err == nil { + t.Error("Submit() should return error after Stop()") + } +} + +func TestRenewPoolManager_Stop(t *testing.T) { + mgr := NewRenewPoolManagerWithDefaultConfig() + + // Stop should be idempotent | Stop 应该是幂等的 + mgr.Stop() + mgr.Stop() // Should not panic | 不应该 panic + + if mgr.started { + t.Error("manager should not be started after Stop()") + } +} + +func TestRenewPoolManager_Stats(t *testing.T) { + mgr := NewRenewPoolManagerWithDefaultConfig() + defer mgr.Stop() + + running, capacity, usage := mgr.Stats() + + if running < 0 { + t.Errorf("running should be >= 0, got %d", running) + } + if capacity <= 0 { + t.Errorf("capacity should be > 0, got %d", capacity) + } + if usage < 0 || usage > 1 { + t.Errorf("usage should be between 0 and 1, got %f", usage) + } +} + +func TestRenewPoolManager_Stats_WithTasks(t *testing.T) { + mgr := NewRenewPoolManagerWithDefaultConfig() + defer mgr.Stop() + + // Submit some long-running tasks | 提交一些长时间运行的任务 + taskCount := 5 + doneCh := make(chan struct{}) + + for i := 0; i < taskCount; i++ { + _ = mgr.Submit(func() { + <-doneCh // Wait for signal | 等待信号 + }) + } + + // Give some time for tasks to start | 等待任务启动 + time.Sleep(50 * time.Millisecond) + + running, capacity, usage := mgr.Stats() + + if running < taskCount { + t.Errorf("expected running >= %d, got %d", taskCount, running) + } + if capacity < running { + t.Errorf("capacity should be >= running, got capacity=%d, running=%d", capacity, running) + } + if usage <= 0 { + t.Errorf("usage should be > 0 when tasks are running, got %f", usage) + } + + close(doneCh) // Release tasks | 释放任务 +} + +func TestRenewPoolManager_AutoScale_ScaleUp(t *testing.T) { + cfg := &RenewPoolConfig{ + MinSize: 10, + MaxSize: 100, + ScaleUpRate: 0.5, // Scale up when usage > 50% | 使用率超过 50% 时扩容 + ScaleDownRate: 0.1, + CheckInterval: 50 * time.Millisecond, // Fast check for testing | 快速检查用于测试 + Expiry: 5 * time.Second, + NonBlocking: false, // Blocking mode to ensure tasks queue | 阻塞模式确保任务排队 + } + + mgr, err := NewRenewPoolManagerWithConfig(cfg) + if err != nil { + t.Fatalf("NewRenewPoolManagerWithConfig() error = %v", err) + } + defer mgr.Stop() + + _, initialCap, _ := mgr.Stats() + + // Submit many long-running tasks to trigger scale-up | 提交多个长时间运行的任务触发扩容 + doneCh := make(chan struct{}) + taskCount := initialCap + 5 // More than capacity | 超过容量 + + for i := 0; i < taskCount; i++ { + go func() { + _ = mgr.Submit(func() { + <-doneCh + }) + }() + } + + // Wait for auto-scale to trigger | 等待自动扩容触发 + time.Sleep(200 * time.Millisecond) + + _, newCap, _ := mgr.Stats() + + // Capacity should have increased or stayed at max | 容量应该增加或保持最大值 + if newCap < initialCap { + t.Errorf("expected capacity to increase or stay same, initial=%d, new=%d", initialCap, newCap) + } + + close(doneCh) +} + +func TestRenewPoolManager_ConcurrentSubmit(t *testing.T) { + mgr := NewRenewPoolManagerWithDefaultConfig() + defer mgr.Stop() + + var counter int32 + var wg sync.WaitGroup + + goroutines := 100 + tasksPerGoroutine := 10 + + wg.Add(goroutines * tasksPerGoroutine) + + for i := 0; i < goroutines; i++ { + go func() { + for j := 0; j < tasksPerGoroutine; j++ { + err := mgr.Submit(func() { + atomic.AddInt32(&counter, 1) + wg.Done() + }) + if err != nil { + t.Errorf("Submit() error = %v", err) + wg.Done() + } + } + }() + } + + wg.Wait() + + expected := int32(goroutines * tasksPerGoroutine) + if atomic.LoadInt32(&counter) != expected { + t.Errorf("expected counter = %d, got %d", expected, counter) + } +} + +// ============ RenewPoolConfig Tests | 续期池配置测试 ============ + +func TestDefaultRenewPoolConfig(t *testing.T) { + cfg := DefaultRenewPoolConfig() + + if cfg.MinSize != DefaultMinSize { + t.Errorf("MinSize = %d, want %d", cfg.MinSize, DefaultMinSize) + } + if cfg.MaxSize != DefaultMaxSize { + t.Errorf("MaxSize = %d, want %d", cfg.MaxSize, DefaultMaxSize) + } + if cfg.ScaleUpRate != DefaultScaleUpRate { + t.Errorf("ScaleUpRate = %f, want %f", cfg.ScaleUpRate, DefaultScaleUpRate) + } + if cfg.ScaleDownRate != DefaultScaleDownRate { + t.Errorf("ScaleDownRate = %f, want %f", cfg.ScaleDownRate, DefaultScaleDownRate) + } + if cfg.CheckInterval != DefaultCheckInterval { + t.Errorf("CheckInterval = %v, want %v", cfg.CheckInterval, DefaultCheckInterval) + } + if cfg.Expiry != DefaultExpiry { + t.Errorf("Expiry = %v, want %v", cfg.Expiry, DefaultExpiry) + } + if cfg.PreAlloc != false { + t.Errorf("PreAlloc = %v, want false", cfg.PreAlloc) + } + if cfg.NonBlocking != true { + t.Errorf("NonBlocking = %v, want true", cfg.NonBlocking) + } +} + +func TestRenewPoolConfig_Validate(t *testing.T) { + tests := []struct { + name string + config *RenewPoolConfig + wantErr bool + }{ + { + name: "nil config is valid", + config: nil, + wantErr: false, + }, + { + name: "default config is valid", + config: DefaultRenewPoolConfig(), + wantErr: false, + }, + { + name: "MinSize <= 0 is invalid", + config: &RenewPoolConfig{ + MinSize: 0, + MaxSize: 100, + ScaleUpRate: 0.8, + ScaleDownRate: 0.3, + CheckInterval: time.Minute, + Expiry: 10 * time.Second, + }, + wantErr: true, + }, + { + name: "MaxSize < MinSize is invalid", + config: &RenewPoolConfig{ + MinSize: 100, + MaxSize: 50, + ScaleUpRate: 0.8, + ScaleDownRate: 0.3, + CheckInterval: time.Minute, + Expiry: 10 * time.Second, + }, + wantErr: true, + }, + { + name: "ScaleUpRate <= 0 is invalid", + config: &RenewPoolConfig{ + MinSize: 100, + MaxSize: 200, + ScaleUpRate: 0, + ScaleDownRate: 0.3, + CheckInterval: time.Minute, + Expiry: 10 * time.Second, + }, + wantErr: true, + }, + { + name: "ScaleUpRate > 1 is invalid", + config: &RenewPoolConfig{ + MinSize: 100, + MaxSize: 200, + ScaleUpRate: 1.5, + ScaleDownRate: 0.3, + CheckInterval: time.Minute, + Expiry: 10 * time.Second, + }, + wantErr: true, + }, + { + name: "ScaleDownRate < 0 is invalid", + config: &RenewPoolConfig{ + MinSize: 100, + MaxSize: 200, + ScaleUpRate: 0.8, + ScaleDownRate: -0.1, + CheckInterval: time.Minute, + Expiry: 10 * time.Second, + }, + wantErr: true, + }, + { + name: "ScaleDownRate > 1 is invalid", + config: &RenewPoolConfig{ + MinSize: 100, + MaxSize: 200, + ScaleUpRate: 0.8, + ScaleDownRate: 1.5, + CheckInterval: time.Minute, + Expiry: 10 * time.Second, + }, + wantErr: true, + }, + { + name: "CheckInterval <= 0 is invalid", + config: &RenewPoolConfig{ + MinSize: 100, + MaxSize: 200, + ScaleUpRate: 0.8, + ScaleDownRate: 0.3, + CheckInterval: 0, + Expiry: 10 * time.Second, + }, + wantErr: true, + }, + { + name: "Expiry <= 0 is invalid", + config: &RenewPoolConfig{ + MinSize: 100, + MaxSize: 200, + ScaleUpRate: 0.8, + ScaleDownRate: 0.3, + CheckInterval: time.Minute, + Expiry: 0, + }, + wantErr: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := tt.config.Validate() + if (err != nil) != tt.wantErr { + t.Errorf("Validate() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} + +func TestRenewPoolConfig_Clone(t *testing.T) { + original := &RenewPoolConfig{ + MinSize: 50, + MaxSize: 500, + ScaleUpRate: 0.7, + ScaleDownRate: 0.2, + CheckInterval: 30 * time.Second, + Expiry: 5 * time.Second, + PreAlloc: true, + NonBlocking: false, + } + + cloned := original.Clone() + + if cloned == original { + t.Error("Clone() should return a different pointer") + } + if cloned.MinSize != original.MinSize { + t.Errorf("MinSize mismatch: got %d, want %d", cloned.MinSize, original.MinSize) + } + if cloned.MaxSize != original.MaxSize { + t.Errorf("MaxSize mismatch: got %d, want %d", cloned.MaxSize, original.MaxSize) + } + if cloned.ScaleUpRate != original.ScaleUpRate { + t.Errorf("ScaleUpRate mismatch: got %f, want %f", cloned.ScaleUpRate, original.ScaleUpRate) + } + if cloned.ScaleDownRate != original.ScaleDownRate { + t.Errorf("ScaleDownRate mismatch: got %f, want %f", cloned.ScaleDownRate, original.ScaleDownRate) + } + if cloned.CheckInterval != original.CheckInterval { + t.Errorf("CheckInterval mismatch: got %v, want %v", cloned.CheckInterval, original.CheckInterval) + } + if cloned.Expiry != original.Expiry { + t.Errorf("Expiry mismatch: got %v, want %v", cloned.Expiry, original.Expiry) + } + if cloned.PreAlloc != original.PreAlloc { + t.Errorf("PreAlloc mismatch: got %v, want %v", cloned.PreAlloc, original.PreAlloc) + } + if cloned.NonBlocking != original.NonBlocking { + t.Errorf("NonBlocking mismatch: got %v, want %v", cloned.NonBlocking, original.NonBlocking) + } + + // Modify clone should not affect original | 修改克隆不应影响原始 + cloned.MinSize = 999 + if original.MinSize == 999 { + t.Error("Modifying clone affected original") + } +} + +func TestRenewPoolConfig_Clone_Nil(t *testing.T) { + var cfg *RenewPoolConfig + cloned := cfg.Clone() + if cloned != nil { + t.Error("Clone() of nil should return nil") + } +} + +func TestRenewPoolConfig_Setters(t *testing.T) { + cfg := &RenewPoolConfig{} + + // Test chaining | 测试链式调用 + result := cfg. + SetMinSize(50). + SetMaxSize(500). + SetScaleUpRate(0.75). + SetScaleDownRate(0.25). + SetCheckInterval(45 * time.Second). + SetExpiry(15 * time.Second). + SetPrintStatusInterval(5 * time.Minute). + SetPreAlloc(true). + SetNonBlocking(false) + + if result != cfg { + t.Error("Setters should return the same config pointer for chaining") + } + + if cfg.MinSize != 50 { + t.Errorf("MinSize = %d, want 50", cfg.MinSize) + } + if cfg.MaxSize != 500 { + t.Errorf("MaxSize = %d, want 500", cfg.MaxSize) + } + if cfg.ScaleUpRate != 0.75 { + t.Errorf("ScaleUpRate = %f, want 0.75", cfg.ScaleUpRate) + } + if cfg.ScaleDownRate != 0.25 { + t.Errorf("ScaleDownRate = %f, want 0.25", cfg.ScaleDownRate) + } + if cfg.CheckInterval != 45*time.Second { + t.Errorf("CheckInterval = %v, want 45s", cfg.CheckInterval) + } + if cfg.Expiry != 15*time.Second { + t.Errorf("Expiry = %v, want 15s", cfg.Expiry) + } + if cfg.PrintStatusInterval != 5*time.Minute { + t.Errorf("PrintStatusInterval = %v, want 5m", cfg.PrintStatusInterval) + } + if cfg.PreAlloc != true { + t.Errorf("PreAlloc = %v, want true", cfg.PreAlloc) + } + if cfg.NonBlocking != false { + t.Errorf("NonBlocking = %v, want false", cfg.NonBlocking) + } +} + +// ============ Benchmark Tests | 基准测试 ============ + +func BenchmarkRenewPoolManager_Submit(b *testing.B) { + mgr := NewRenewPoolManagerWithDefaultConfig() + defer mgr.Stop() + + b.ResetTimer() + for i := 0; i < b.N; i++ { + _ = mgr.Submit(func() { + // Empty task | 空任务 + }) + } +} + +func BenchmarkRenewPoolManager_Submit_WithWork(b *testing.B) { + mgr := NewRenewPoolManagerWithDefaultConfig() + defer mgr.Stop() + + b.ResetTimer() + for i := 0; i < b.N; i++ { + _ = mgr.Submit(func() { + // Simulate some work | 模拟一些工作 + time.Sleep(time.Microsecond) + }) + } +} + +func BenchmarkRenewPoolManager_Stats(b *testing.B) { + mgr := NewRenewPoolManagerWithDefaultConfig() + defer mgr.Stop() + + b.ResetTimer() + for i := 0; i < b.N; i++ { + mgr.Stats() + } +} + +func BenchmarkRenewPoolManager_ConcurrentSubmit(b *testing.B) { + mgr := NewRenewPoolManagerWithDefaultConfig() + defer mgr.Stop() + + b.ResetTimer() + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + _ = mgr.Submit(func() { + // Empty task | 空任务 + }) + } + }) +} + +// ============ Auto-Scale Demo Test | 自动扩缩容演示测试 ============ + +// TestRenewPoolManager_AutoScale_Demo demonstrates the auto-scaling behavior with status printing +// 演示自动扩缩容行为并打印状态 +// Run with: go test -v -run TestRenewPoolManager_AutoScale_Demo -timeout 60s +func TestRenewPoolManager_AutoScale_Demo(t *testing.T) { + cfg := &RenewPoolConfig{ + MinSize: 5, // Minimum pool size | 最小池大小 + MaxSize: 50, // Maximum pool size | 最大池大小 + ScaleUpRate: 0.6, // Scale up when usage > 60% | 使用率超过 60% 时扩容 + ScaleDownRate: 0.2, // Scale down when usage < 20% | 使用率低于 20% 时缩容 + CheckInterval: 200 * time.Millisecond, // Check every 200ms | 每 200ms 检查一次 + Expiry: 2 * time.Second, // Worker expiry | Worker 过期时间 + NonBlocking: false, // Blocking mode | 阻塞模式 + } + + mgr, err := NewRenewPoolManagerWithConfig(cfg) + if err != nil { + t.Fatalf("Failed to create pool manager: %v", err) + } + defer mgr.Stop() + + // Status printer | 状态打印器 + stopPrinter := make(chan struct{}) + go func() { + ticker := time.NewTicker(100 * time.Millisecond) + defer ticker.Stop() + + lastCap := 0 + for { + select { + case <-ticker.C: + running, capacity, usage := mgr.Stats() + action := " STABLE " + if capacity > lastCap { + action = "⬆️ SCALE UP" + } else if capacity < lastCap { + action = "⬇️ SCALE DN" + } + lastCap = capacity + + // Print status bar | 打印状态条 + usageBar := generateUsageBar(usage, 20) + t.Logf("[%s] Cap: %3d | Running: %3d | Usage: %5.1f%% |%s|", + action, capacity, running, usage*100, usageBar) + + case <-stopPrinter: + return + } + } + }() + + t.Log("========== Phase 1: Initial State (2s) | 初始状态 ==========") + time.Sleep(2 * time.Second) + + t.Log("========== Phase 2: High Load - Triggering Scale Up | 高负载 - 触发扩容 ==========") + // Submit many long-running tasks | 提交大量长时间运行的任务 + phase2Done := make(chan struct{}) + taskCount := 30 + for i := 0; i < taskCount; i++ { + go func(id int) { + _ = mgr.Submit(func() { + <-phase2Done // Wait for signal | 等待信号 + }) + }(i) + } + time.Sleep(3 * time.Second) // Wait for scale up | 等待扩容 + + t.Log("========== Phase 3: Releasing Tasks - Observe Scale Down | 释放任务 - 观察缩容 ==========") + close(phase2Done) // Release all tasks | 释放所有任务 + time.Sleep(4 * time.Second) // Wait for scale down | 等待缩容 + + t.Log("========== Phase 4: Burst Load Again | 再次突发负载 ==========") + phase4Done := make(chan struct{}) + for i := 0; i < 40; i++ { + go func(id int) { + _ = mgr.Submit(func() { + <-phase4Done + }) + }(i) + } + time.Sleep(3 * time.Second) + + t.Log("========== Phase 5: Gradual Release | 逐步释放 ==========") + close(phase4Done) + time.Sleep(4 * time.Second) + + t.Log("========== Phase 6: Final State | 最终状态 ==========") + time.Sleep(2 * time.Second) + + close(stopPrinter) + + // Final stats | 最终统计 + running, capacity, usage := mgr.Stats() + t.Logf("Final Stats - Capacity: %d, Running: %d, Usage: %.1f%%", capacity, running, usage*100) +} + +// generateUsageBar creates a visual usage bar | 生成可视化使用率条 +func generateUsageBar(usage float64, width int) string { + filled := int(usage * float64(width)) + if filled > width { + filled = width + } + + bar := make([]byte, width) + for i := 0; i < width; i++ { + if i < filled { + bar[i] = '#' + } else { + bar[i] = '-' + } + } + return string(bar) +} + +// TestRenewPoolManager_AutoScale_StressTest stress test for auto-scaling +// 自动扩缩容压力测试 +func TestRenewPoolManager_AutoScale_StressTest(t *testing.T) { + cfg := &RenewPoolConfig{ + MinSize: 10, + MaxSize: 100, + ScaleUpRate: 0.7, + ScaleDownRate: 0.2, + CheckInterval: 100 * time.Millisecond, + Expiry: 1 * time.Second, + NonBlocking: false, + } + + mgr, err := NewRenewPoolManagerWithConfig(cfg) + if err != nil { + t.Fatalf("Failed to create pool manager: %v", err) + } + defer mgr.Stop() + + // Track capacity changes | 记录容量变化 + var ( + maxCapSeen = 0 + minCapSeen = 1000 + scaleUps = 0 + scaleDowns = 0 + lastCap = cfg.MinSize + ) + + stopMonitor := make(chan struct{}) + go func() { + ticker := time.NewTicker(50 * time.Millisecond) + defer ticker.Stop() + + for { + select { + case <-ticker.C: + _, capacity, _ := mgr.Stats() + if capacity > maxCapSeen { + maxCapSeen = capacity + } + if capacity < minCapSeen { + minCapSeen = capacity + } + if capacity > lastCap { + scaleUps++ + } else if capacity < lastCap { + scaleDowns++ + } + lastCap = capacity + case <-stopMonitor: + return + } + } + }() + + // Wave pattern load | 波浪模式负载 + for wave := 0; wave < 3; wave++ { + t.Logf("Wave %d: Increasing load...", wave+1) + doneCh := make(chan struct{}) + + // Increase load | 增加负载 + for i := 0; i < 50+wave*20; i++ { + go func() { + _ = mgr.Submit(func() { + <-doneCh + }) + }() + } + time.Sleep(1500 * time.Millisecond) + + t.Logf("Wave %d: Releasing load...", wave+1) + close(doneCh) + time.Sleep(2 * time.Second) + } + + close(stopMonitor) + + t.Logf("Stress Test Results:") + t.Logf(" - Max capacity seen: %d", maxCapSeen) + t.Logf(" - Min capacity seen: %d", minCapSeen) + t.Logf(" - Scale up events: %d", scaleUps) + t.Logf(" - Scale down events: %d", scaleDowns) + + // Verify scaling occurred | 验证发生了扩缩容 + if scaleUps == 0 { + t.Error("Expected at least one scale up event") + } + if scaleDowns == 0 { + t.Error("Expected at least one scale down event") + } + if maxCapSeen <= cfg.MinSize { + t.Errorf("Expected max capacity > MinSize(%d), got %d", cfg.MinSize, maxCapSeen) + } +} From e665db03f26a38081a0dc54289cd8a1a58a44d91 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Sun, 28 Dec 2025 22:50:59 +0800 Subject: [PATCH 32/50] =?UTF-8?q?feat():=201=E3=80=81=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 14 +- README_zh.md | 10 +- codec/json/go.mod | 2 +- codec/msgpack/go.mod | 2 +- core/config/config.go | 2 +- core/context/context.go | 10 +- core/go.mod | 2 +- core/go.sum | 22 -- core/listener/listener.go | 4 +- core/manager/manager.go | 29 +- core/security/nonce.go | 10 +- core/security/refresh_token.go | 4 +- core/session/session.go | 13 + core/utils/utils.go | 2 +- docs/api/stputil.md | 4 +- docs/api/stputil_zh.md | 4 +- docs/guide/annotation.md | 4 +- docs/guide/annotation_zh.md | 8 +- docs/guide/jwt.md | 2 +- docs/guide/jwt_zh.md | 2 +- docs/guide/listener.md | 2 +- docs/guide/listener_zh.md | 2 +- docs/guide/single-import.md | 10 +- .../annotation/annotation-example/README.md | 293 ++++++++++---- examples/annotation/annotation-example/go.mod | 36 +- examples/annotation/annotation-example/go.sum | 53 +++ .../annotation/annotation-example/main.go | 54 +-- examples/chi/chi-example/go.mod | 17 +- examples/chi/chi-example/go.sum | 11 + examples/echo/echo-example/go.mod | 22 +- examples/echo/echo-example/go.sum | 22 ++ examples/fiber/fiber-example/go.mod | 25 +- examples/fiber/fiber-example/go.sum | 21 + examples/gf/api_test.go | 364 ------------------ examples/gf/go.mod | 15 +- examples/gf/go.sum | 46 +++ examples/gin/gin-example/README.md | 192 ++++++--- examples/gin/gin-example/cmd/main.go | 64 ++- examples/gin/gin-example/go.mod | 27 +- examples/gin/gin-example/go.sum | 55 +++ examples/gin/gin-simple/README.md | 169 +++++--- examples/gin/gin-simple/README_zh.md | 169 +++++--- examples/gin/gin-simple/gin-simple | Bin 10687810 -> 0 bytes examples/gin/gin-simple/go.mod | 26 +- examples/gin/gin-simple/go.sum | 44 +++ examples/gin/gin-simple/main.go | 45 +-- examples/jwt-example/README.md | 210 ---------- examples/jwt-example/go.mod | 20 - examples/kratos/kratos-example/go.mod | 4 +- examples/kratos/kratos-example/go.sum | 2 +- examples/listener-example/README.md | 163 -------- examples/listener-example/go.mod | 20 - examples/manager-example/jwt-example/go.mod | 16 + examples/manager-example/jwt-example/go.sum | 11 + .../{ => manager-example}/jwt-example/main.go | 33 +- .../manager-example/listener-example/go.mod | 16 + .../manager-example/listener-example/go.sum | 11 + .../listener-example/main.go | 55 +-- .../oauth2-example/go.mod | 32 +- .../manager-example/oauth2-example/go.sum | 42 ++ .../oauth2-example/main.go | 121 ++++-- .../manager-example/security-example/go.mod | 15 + .../manager-example/security-example/main.go | 159 ++++++++ examples/manager-example/session-demo/go.mod | 16 + examples/manager-example/session-demo/go.sum | 11 + .../session-demo/main.go | 27 +- examples/manager-example/token-styles/go.mod | 16 + examples/manager-example/token-styles/go.sum | 11 + .../token-styles/main.go | 35 +- examples/oauth2-example/README.md | 232 ----------- examples/oauth2-example/README_zh.md | 232 ----------- examples/quick-start/simple-example/README.md | 162 ++++++-- examples/quick-start/simple-example/go.mod | 18 +- examples/quick-start/simple-example/go.sum | 20 + examples/quick-start/simple-example/main.go | 66 ++-- examples/redis-example/README.md | 97 ----- examples/redis-example/README_zh.md | 100 ----- examples/redis-example/go.mod | 23 -- examples/redis-example/main.go | 135 ------- examples/security-features/go.mod | 20 - examples/security-features/main.go | 128 ------ examples/session-demo/go.mod | 15 - examples/token-styles/README.md | 222 ----------- examples/token-styles/README_zh.md | 222 ----------- examples/token-styles/go.mod | 20 - generator/sgenerator/go.mod | 7 +- generator/sgenerator/go.sum | 2 + go.work | 43 ++- go.work.sum | 29 +- integrations/chi/export.go | 8 +- integrations/chi/go.mod | 15 +- integrations/chi/go.sum | 6 +- integrations/echo/export.go | 8 +- integrations/echo/go.mod | 14 +- integrations/echo/go.sum | 8 +- integrations/fiber/export.go | 8 +- integrations/fiber/go.mod | 14 +- integrations/fiber/go.sum | 7 +- integrations/gf/annotation.go | 2 +- integrations/gf/export.go | 18 +- integrations/gf/go.mod | 8 +- integrations/gf/go.sum | 8 +- integrations/gin/annotation.go | 2 +- integrations/gin/export.go | 18 +- integrations/gin/go.mod | 15 +- integrations/gin/go.sum | 6 +- integrations/kratos/export.go | 8 +- integrations/kratos/go.mod | 12 +- integrations/kratos/go.sum | 9 +- log/gf/go.mod | 2 +- log/nop/go.mod | 2 +- log/slog/go.mod | 2 +- pool/ants/config.go | 2 +- pool/ants/go.mod | 9 +- pool/ants/go.sum | 12 +- pool/ants/pool_adapter_ants.go | 6 +- pool/ants/pool_adapter_ants_test.go | 8 +- storage/memory/go.mod | 2 +- storage/memory/memory_test.go | 16 +- storage/redis/go.mod | 2 +- storage/redis/redis_test.go | 31 +- stputil/go.mod | 10 +- stputil/go.sum | 5 +- stputil/stputil.go | 34 +- 124 files changed, 2006 insertions(+), 3104 deletions(-) create mode 100644 examples/annotation/annotation-example/go.sum create mode 100644 examples/chi/chi-example/go.sum create mode 100644 examples/echo/echo-example/go.sum create mode 100644 examples/fiber/fiber-example/go.sum delete mode 100644 examples/gf/api_test.go create mode 100644 examples/gf/go.sum create mode 100644 examples/gin/gin-example/go.sum delete mode 100755 examples/gin/gin-simple/gin-simple create mode 100644 examples/gin/gin-simple/go.sum delete mode 100644 examples/jwt-example/README.md delete mode 100644 examples/jwt-example/go.mod delete mode 100644 examples/listener-example/README.md delete mode 100644 examples/listener-example/go.mod create mode 100644 examples/manager-example/jwt-example/go.mod create mode 100644 examples/manager-example/jwt-example/go.sum rename examples/{ => manager-example}/jwt-example/main.go (68%) create mode 100644 examples/manager-example/listener-example/go.mod create mode 100644 examples/manager-example/listener-example/go.sum rename examples/{ => manager-example}/listener-example/main.go (62%) rename examples/{ => manager-example}/oauth2-example/go.mod (62%) create mode 100644 examples/manager-example/oauth2-example/go.sum rename examples/{ => manager-example}/oauth2-example/main.go (61%) create mode 100644 examples/manager-example/security-example/go.mod create mode 100644 examples/manager-example/security-example/main.go create mode 100644 examples/manager-example/session-demo/go.mod create mode 100644 examples/manager-example/session-demo/go.sum rename examples/{ => manager-example}/session-demo/main.go (83%) create mode 100644 examples/manager-example/token-styles/go.mod create mode 100644 examples/manager-example/token-styles/go.sum rename examples/{ => manager-example}/token-styles/main.go (57%) delete mode 100644 examples/oauth2-example/README.md delete mode 100644 examples/oauth2-example/README_zh.md create mode 100644 examples/quick-start/simple-example/go.sum delete mode 100644 examples/redis-example/README.md delete mode 100644 examples/redis-example/README_zh.md delete mode 100644 examples/redis-example/go.mod delete mode 100644 examples/redis-example/main.go delete mode 100644 examples/security-features/go.mod delete mode 100644 examples/security-features/main.go delete mode 100644 examples/session-demo/go.mod delete mode 100644 examples/token-styles/README.md delete mode 100644 examples/token-styles/README_zh.md delete mode 100644 examples/token-styles/go.mod create mode 100644 generator/sgenerator/go.sum diff --git a/README.md b/README.md index 0cfaedf..636e815 100644 --- a/README.md +++ b/README.md @@ -118,7 +118,7 @@ func init() { ```go func main() { - // Use StpUtil directly without passing manager + // Use StpUtil directly without passing manager-example token, _ := stputil.Login(1000) println("Login successful, Token:", token) @@ -183,13 +183,13 @@ hasAny := stputil.HasPermissionsOr(1000, []string{"admin", "super"}) / ```go // Set roles -stputil.SetRoles(1000, []string{"admin", "manager"}) +stputil.SetRoles(1000, []string{"admin", "manager-example"}) // Check role hasRole := stputil.HasRole(1000, "admin") // Check multiple roles -hasAll := stputil.HasRolesAnd(1000, []string{"admin", "manager"}) +hasAll := stputil.HasRolesAnd(1000, []string{"admin", "manager-example"}) hasAny := stputil.HasRolesOr(1000, []string{"admin", "super"}) ``` @@ -266,7 +266,7 @@ func main() { r.GET("/public", sagin.Ignore(), publicHandler) // Public access r.GET("/user", sagin.CheckLogin(), userHandler) // Login required r.GET("/admin", sagin.CheckPermission("admin:*"), adminHandler) // Permission required - r.GET("/manager", sagin.CheckRole("manager"), managerHandler) // Role required + r.GET("/manager-example", sagin.CheckRole("manager-example"), managerHandler) // Role required r.GET("/sensitive", sagin.CheckDisable(), sensitiveHandler) // Check if disabled r.Run(":8080") @@ -308,7 +308,7 @@ func main() { userOrAdminHandler) // Admin role required - r.GET("/manager", sagin.CheckRole("admin"), managerHandler) + r.GET("/manager-example", sagin.CheckRole("admin"), managerHandler) // Check if account is disabled r.GET("/sensitive", sagin.CheckDisable(), sensitiveHandler) @@ -349,7 +349,7 @@ func main() { s.BindHandler("GET:/public", sagf.Ignore(), publicHandler) // Public access s.BindHandler("GET:/user", sagf.CheckLogin(), userHandler) // Login required s.BindHandler("GET:/admin", sagf.CheckPermission("admin:*"), adminHandler) // Permission required - s.BindHandler("GET:/manager", sagf.CheckRole("manager"), managerHandler) // Role required + s.BindHandler("GET:/manager-example", sagf.CheckRole("manager-example"), managerHandler) // Role required s.BindHandler("GET:/sensitive", sagf.CheckDisable(), sensitiveHandler) // Check if disabled s.SetPort(8080) @@ -506,7 +506,7 @@ manager.RegisterFunc(core.EventAll, func(data *core.EventData) { // Access advanced controls via the underlying EventManager manager.GetEventManager().SetPanicHandler(customPanicHandler) -// Use the manager globally +// Use the manager-example globally stputil.SetManager(manager) ``` diff --git a/README_zh.md b/README_zh.md index 622a0b0..dddeda2 100644 --- a/README_zh.md +++ b/README_zh.md @@ -183,13 +183,13 @@ hasAny := stputil.HasPermissionsOr(1000, []string{"admin", "super"}) / ```go // 设置角色 -stputil.SetRoles(1000, []string{"admin", "manager"}) +stputil.SetRoles(1000, []string{"admin", "manager-example"}) // 检查角色 hasRole := stputil.HasRole(1000, "admin") // 多角色检查 -hasAll := stputil.HasRolesAnd(1000, []string{"admin", "manager"}) +hasAll := stputil.HasRolesAnd(1000, []string{"admin", "manager-example"}) hasAny := stputil.HasRolesOr(1000, []string{"admin", "super"}) ``` @@ -266,7 +266,7 @@ func main() { r.GET("/public", sagin.Ignore(), publicHandler) // 公开访问 r.GET("/user", sagin.CheckLogin(), userHandler) // 需要登录 r.GET("/admin", sagin.CheckPermission("admin:*"), adminHandler) // 需要权限 - r.GET("/manager", sagin.CheckRole("manager"), managerHandler) // 需要角色 + r.GET("/manager-example", sagin.CheckRole("manager-example"), managerHandler) // 需要角色 r.GET("/sensitive", sagin.CheckDisable(), sensitiveHandler) // 检查封禁 r.Run(":8080") @@ -308,7 +308,7 @@ func main() { userOrAdminHandler) // 需要管理员角色 - r.GET("/manager", sagin.CheckRole("admin"), managerHandler) + r.GET("/manager-example", sagin.CheckRole("admin"), managerHandler) // 检查账号是否被封禁 r.GET("/sensitive", sagin.CheckDisable(), sensitiveHandler) @@ -349,7 +349,7 @@ func main() { s.BindHandler("GET:/public", sagf.Ignore(), publicHandler) // 公开访问 s.BindHandler("GET:/user", sagf.CheckLogin(), userHandler) // 需要登录 s.BindHandler("GET:/admin", sagf.CheckPermission("admin:*"), adminHandler) // 需要权限 - s.BindHandler("GET:/manager", sagf.CheckRole("manager"), managerHandler) // 需要角色 + s.BindHandler("GET:/manager-example", sagf.CheckRole("manager-example"), managerHandler) // 需要角色 s.BindHandler("GET:/sensitive", sagf.CheckDisable(), sensitiveHandler) // 检查是否禁用 s.SetPort(8080) diff --git a/codec/json/go.mod b/codec/json/go.mod index 0bee238..13a5759 100644 --- a/codec/json/go.mod +++ b/codec/json/go.mod @@ -1,3 +1,3 @@ module github.com/click33/sa-token-go/codec/json -go 1.23.0 +go 1.25.0 diff --git a/codec/msgpack/go.mod b/codec/msgpack/go.mod index e43a9a3..d6a5e09 100644 --- a/codec/msgpack/go.mod +++ b/codec/msgpack/go.mod @@ -1,6 +1,6 @@ module github.com/click33/sa-token-go/codec/msgpack -go 1.23.0 +go 1.25.0 require github.com/vmihailenco/msgpack/v5 v5.4.1 diff --git a/core/config/config.go b/core/config/config.go index d8a538a..18511b9 100644 --- a/core/config/config.go +++ b/core/config/config.go @@ -139,7 +139,7 @@ func (c *Config) Validate() error { } // MaxRefresh must not exceed Timeout | MaxRefresh 不能大于 Timeout - if c.Timeout != NoLimit && c.MaxRefresh > c.Timeout { + if c.Timeout != NoLimit && c.AutoRenew && c.MaxRefresh > c.Timeout { return fmt.Errorf( "MaxRefresh (%d) must be <= Timeout (%d)", c.MaxRefresh, diff --git a/core/context/context.go b/core/context/context.go index 4c9a214..222e9c8 100644 --- a/core/context/context.go +++ b/core/context/context.go @@ -73,19 +73,19 @@ func (c *SaTokenContext) GetManager() *manager.Manager { //// IsLogin 检查当前请求是否已登录 //func (c *SaTokenContext) IsLogin() bool { // token := c.GetTokenValue() -// return c.manager.IsLogin(context.WithValue(c.ctx, config.CtxTokenValue, token)) +// return c.manager-example.IsLogin(context.WithValue(c.ctx, config.CtxTokenValue, token)) //} // //// CheckLogin 检查登录(未登录抛出错误) //func (c *SaTokenContext) CheckLogin() error { // token := c.GetTokenValue() -// return c.manager.CheckLogin(context.WithValue(c.ctx, config.CtxTokenValue, token)) +// return c.manager-example.CheckLogin(context.WithValue(c.ctx, config.CtxTokenValue, token)) //} // //// GetLoginID 获取当前登录ID //func (c *SaTokenContext) GetLoginID() (string, error) { // token := c.GetTokenValue() -// return c.manager.GetLoginID(context.WithValue(c.ctx, config.CtxTokenValue, token)) +// return c.manager-example.GetLoginID(context.WithValue(c.ctx, config.CtxTokenValue, token)) //} // //// HasPermission 检查是否有指定权限 @@ -94,7 +94,7 @@ func (c *SaTokenContext) GetManager() *manager.Manager { // if err != nil { // return false // } -// return c.manager.HasPermission(c.ctx, loginID, permission) +// return c.manager-example.HasPermission(c.ctx, loginID, permission) //} // //// HasRole 检查是否有指定角色 @@ -103,7 +103,7 @@ func (c *SaTokenContext) GetManager() *manager.Manager { // if err != nil { // return false // } -// return c.manager.HasRole(c.ctx, loginID, role) +// return c.manager-example.HasRole(c.ctx, loginID, role) //} // extractBearerToken 从 Authorization 头中提取 Bearer Token diff --git a/core/go.mod b/core/go.mod index 55501dd..dabd856 100644 --- a/core/go.mod +++ b/core/go.mod @@ -1,3 +1,3 @@ module github.com/click33/sa-token-go/core -go 1.23.0 \ No newline at end of file +go 1.25.0 \ No newline at end of file diff --git a/core/go.sum b/core/go.sum index 420e731..e69de29 100644 --- a/core/go.sum +++ b/core/go.sum @@ -1,22 +0,0 @@ -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= -github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= -github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= -github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg= -github.com/panjf2000/ants/v2 v2.11.3/go.mod h1:8u92CYMUc6gyvTIw8Ru7Mt7+/ESnJahz5EVtqfrilek= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= -github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -github.com/vmihailenco/msgpack/v5 v5.4.1 h1:cQriyiUvjTwOHg8QZaPihLWeRAAVoCpE00IUPn0Bjt8= -github.com/vmihailenco/msgpack/v5 v5.4.1/go.mod h1:GaZTsDaehaPpQVyxrf5mtQlH+pc21PIudVV/E3rRQok= -github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= -github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= -golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= -golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/core/listener/listener.go b/core/listener/listener.go index 63b5d9b..c18fdda 100644 --- a/core/listener/listener.go +++ b/core/listener/listener.go @@ -28,7 +28,7 @@ func (e *EventData) String() string { // Listener is the interface for event listeners | 事件监听器接口 type Listener interface { // OnEvent is called when an event is triggered | 当事件触发时调用 - // The listener should not panic; any panic will be recovered by the event manager | 监听器不应该panic,任何panic都会被事件管理器恢复 + // The listener should not panic; any panic will be recovered by the event manager-example | 监听器不应该panic,任何panic都会被事件管理器恢复 OnEvent(data *EventData) } @@ -76,7 +76,7 @@ type Manager struct { logger adapter.Log // Log adapter for logging operations | 日志适配器 } -// NewManager creates a new event manager | 创建新的事件管理器 +// NewManager creates a new event manager-example | 创建新的事件管理器 func NewManager(loggers ...adapter.Log) *Manager { var logger adapter.Log diff --git a/core/manager/manager.go b/core/manager/manager.go index 0bc64e1..2b4031f 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -37,13 +37,13 @@ type DisableInfo struct { DisableReason string `json:"disableReason"` // Reason for account disable | 账号封禁原因说明 } -// Manager Authentication manager | 认证管理器 +// Manager Authentication manager-example | 认证管理器 type Manager struct { config *config.Config // Global authentication configuration | 全局认证配置 - nonceManager *security.NonceManager // Nonce manager for preventing replay attacks | 随机串管理器 - refreshManager *security.RefreshTokenManager // Refresh token manager | 刷新令牌管理器 + nonceManager *security.NonceManager // Nonce manager-example for preventing replay attacks | 随机串管理器 + refreshManager *security.RefreshTokenManager // Refresh token manager-example | 刷新令牌管理器 oauth2Server *oauth2.OAuth2Server // OAuth2 authorization server | OAuth2 授权服务器 - eventManager *listener.Manager // Event manager | 事件管理器 + eventManager *listener.Manager // Event manager-example | 事件管理器 generator adapter.Generator // Token generator | Token 生成器 storage adapter.Storage // Storage adapter (Redis, Memory, etc.) | 存储适配器(如 Redis、Memory) @@ -87,7 +87,7 @@ func NewManager(cfg *config.Config, generator adapter.Generator, storage adapter pool = ants.NewRenewPoolManagerWithDefaultConfig() } - // Return the new manager instance with initialized sub-managers | 返回已初始化各子模块的管理器实例 + // Return the new manager-example instance with initialized sub-managers | 返回已初始化各子模块的管理器实例 return &Manager{ // Store global configuration | 保存全局配置 config: cfg, @@ -95,7 +95,7 @@ func NewManager(cfg *config.Config, generator adapter.Generator, storage adapter // Token generator used for creating access/refresh tokens | 用于生成访问令牌和刷新令牌的生成器 generator: generator, - // Nonce manager for replay-attack protection | 防重放攻击的 Nonce 管理器 + // Nonce manager-example for replay-attack protection | 防重放攻击的 Nonce 管理器 nonceManager: security.NewNonceManager( cfg.AuthType, cfg.KeyPrefix, @@ -103,7 +103,7 @@ func NewManager(cfg *config.Config, generator adapter.Generator, storage adapter DefaultNonceTTL, ), - // Refresh token manager for token renewal logic | 刷新令牌管理器,用于令牌续期逻辑 + // Refresh token manager-example for token renewal logic | 刷新令牌管理器,用于令牌续期逻辑 refreshManager: security.NewRefreshTokenManager( cfg.AuthType, cfg.KeyPrefix, @@ -122,7 +122,7 @@ func NewManager(cfg *config.Config, generator adapter.Generator, storage adapter serializer, ), - // Event manager for lifecycle and auth events | 生命周期与认证事件管理器 + // Event manager-example for lifecycle and auth events | 生命周期与认证事件管理器 eventManager: listener.NewManager(logger), // Storage adapter for persistence layer | 持久化存储适配器 @@ -145,7 +145,7 @@ func NewManager(cfg *config.Config, generator adapter.Generator, storage adapter } } -// CloseManager Closes the manager and releases all resources | 关闭管理器并释放所有资源 +// CloseManager Closes the manager-example and releases all resources | 关闭管理器并释放所有资源 func (m *Manager) CloseManager() { // Close logger if it implements LogControl | 如果日志实现了 LogControl 接口,则关闭日志 if logControl, ok := m.logger.(adapter.LogControl); ok { @@ -648,6 +648,9 @@ func (m *Manager) GetSession(ctx context.Context, loginID string) (*session.Sess if err := m.GetCodec().Decode(raw, sess); err != nil { return nil, fmt.Errorf("%w: %v", core.ErrDeserializeFailed, err) } + + // Set internal dependencies after decoding | 解码后设置内部依赖 + sess.SetDependencies(m.config.KeyPrefix, m.storage, m.serializer) } // If not exist, create new session | 没找到就创建新的 Session @@ -1384,7 +1387,7 @@ func (m *Manager) OAuth2PasswordGrantToken(ctx context.Context, clientID, client // ============ Public Getters | 公共获取器 ============ -// GetConfig returns the manager configuration | 获取 Manager 当前使用的配置 +// GetConfig returns the manager-example configuration | 获取 Manager 当前使用的配置 func (m *Manager) GetConfig() *config.Config { return m.config } @@ -1422,17 +1425,17 @@ func (m *Manager) GetGenerator() adapter.Generator { return m.generator } -// GetNonceManager returns the nonce manager | 获取随机串管理器 +// GetNonceManager returns the nonce manager-example | 获取随机串管理器 func (m *Manager) GetNonceManager() *security.NonceManager { return m.nonceManager } -// GetRefreshManager returns the refresh token manager | 获取刷新令牌管理器 +// GetRefreshManager returns the refresh token manager-example | 获取刷新令牌管理器 func (m *Manager) GetRefreshManager() *security.RefreshTokenManager { return m.refreshManager } -// GetEventManager returns the event manager | 获取事件管理器 +// GetEventManager returns the event manager-example | 获取事件管理器 func (m *Manager) GetEventManager() *listener.Manager { return m.eventManager } diff --git a/core/security/nonce.go b/core/security/nonce.go index 845a83b..2565237 100644 --- a/core/security/nonce.go +++ b/core/security/nonce.go @@ -20,11 +20,11 @@ import ( // 3. Auto-expire after TTL (log 5min) | TTL后自动过期(默认5分钟) // // Usage | 用法: -// nonce, _ := manager.Generate() -// valid := manager.Verify(nonce) // true -// valid = manager.Verify(nonce) // false (replay prevented) +// nonce, _ := manager-example.Generate() +// valid := manager-example.Verify(nonce) // true +// valid = manager-example.Verify(nonce) // false (replay prevented) -// NonceManager Nonce manager for anti-replay attacks | Nonce管理器,用于防重放攻击 +// NonceManager Nonce manager-example for anti-replay attacks | Nonce管理器,用于防重放攻击 type NonceManager struct { authType string // Authentication system type | 认证体系类型 keyPrefix string // Configurable prefix | 可配置的前缀 @@ -33,7 +33,7 @@ type NonceManager struct { storage adapter.Storage // Storage adapter (Redis, Memory, etc.) | 存储适配器(如 Redis、Memory) } -// NewNonceManager Creates a new nonce manager | 创建新的Nonce管理器 +// NewNonceManager Creates a new nonce manager-example | 创建新的Nonce管理器 func NewNonceManager(authType, prefix string, storage adapter.Storage, ttl time.Duration) *NonceManager { if ttl == 0 { ttl = DefaultNonceTTL // Default TTL 5 minutes | 默认5分钟 diff --git a/core/security/refresh_token.go b/core/security/refresh_token.go index cbc9943..cff4ebd 100644 --- a/core/security/refresh_token.go +++ b/core/security/refresh_token.go @@ -39,7 +39,7 @@ type RefreshTokenInfo struct { ExpireTime int64 `json:"expireTime"` // Expire timestamp | 过期时间 } -// RefreshTokenManager Refresh token manager | 刷新令牌管理器 +// RefreshTokenManager Refresh token manager-example | 刷新令牌管理器 type RefreshTokenManager struct { authType string // Auth system type | 认证体系类型 keyPrefix string // Storage key prefix | 存储前缀 @@ -52,7 +52,7 @@ type RefreshTokenManager struct { serializer adapter.Codec // Codec adapter | 编解码器 } -// NewRefreshTokenManager Create manager instance | 创建刷新令牌管理器 +// NewRefreshTokenManager Create manager-example instance | 创建刷新令牌管理器 func NewRefreshTokenManager( authType, prefix, tokenKeyPrefix string, tokenGen adapter.Generator, diff --git a/core/session/session.go b/core/session/session.go index d5d3674..bf4cf40 100644 --- a/core/session/session.go +++ b/core/session/session.go @@ -45,6 +45,19 @@ func NewSession(authType, prefix, id string, storage adapter.Storage, serializer } } +// SetDependencies sets internal dependencies for a decoded session | 设置反序列化后的 Session 的内部依赖 +func (s *Session) SetDependencies(prefix string, storage adapter.Storage, serializer adapter.Codec) { + if storage == nil { + storage = memory.NewStorage() + } + if serializer == nil { + serializer = codec_json.NewJSONSerializer() + } + s.prefix = prefix + s.storage = storage + s.serializer = serializer +} + // ============ Data Operations | 数据操作 ============ // Set Sets value | 设置值 diff --git a/core/utils/utils.go b/core/utils/utils.go index 8a252a0..5b09d62 100644 --- a/core/utils/utils.go +++ b/core/utils/utils.go @@ -240,7 +240,7 @@ func ParsePermissionTag(tag string) []string { } // ParseRoleTag 解析角色标签 -// 格式: "role:admin,manager" +// 格式: "role:admin,manager-example" func ParseRoleTag(tag string) []string { if tag == "" { return []string{} diff --git a/docs/api/stputil.md b/docs/api/stputil.md index 52ba3ba..f5f1dbb 100644 --- a/docs/api/stputil.md +++ b/docs/api/stputil.md @@ -226,7 +226,7 @@ func SetRoles(loginID interface{}, roles []string) error **Example**: ```go -stputil.SetRoles(1000, []string{"admin", "manager"}) +stputil.SetRoles(1000, []string{"admin", "manager-example"}) ``` ### HasRole @@ -252,7 +252,7 @@ Multiple role check **Example**: ```go // AND logic -stputil.HasRolesAnd(1000, []string{"admin", "manager"}) +stputil.HasRolesAnd(1000, []string{"admin", "manager-example"}) // OR logic stputil.HasRolesOr(1000, []string{"admin", "super"}) diff --git a/docs/api/stputil_zh.md b/docs/api/stputil_zh.md index ed037ca..52c2368 100644 --- a/docs/api/stputil_zh.md +++ b/docs/api/stputil_zh.md @@ -226,7 +226,7 @@ func SetRoles(loginID interface{}, roles []string) error **示例**: ```go -stputil.SetRoles(1000, []string{"admin", "manager"}) +stputil.SetRoles(1000, []string{"admin", "manager-example"}) ``` ### HasRole @@ -252,7 +252,7 @@ if stputil.HasRole(1000, "admin") { **示例**: ```go // AND逻辑 -stputil.HasRolesAnd(1000, []string{"admin", "manager"}) +stputil.HasRolesAnd(1000, []string{"admin", "manager-example"}) // OR逻辑 stputil.HasRolesOr(1000, []string{"admin", "super"}) diff --git a/docs/guide/annotation.md b/docs/guide/annotation.md index a921fa7..770bcf0 100644 --- a/docs/guide/annotation.md +++ b/docs/guide/annotation.md @@ -38,7 +38,7 @@ r.GET("/admin", sagin.CheckRole("admin"), func(c *gin.Context) { }) // Requires any of the roles -r.GET("/dashboard", sagin.CheckRole("admin", "manager"), func(c *gin.Context) { +r.GET("/dashboard", sagin.CheckRole("admin", "manager-example"), func(c *gin.Context) { c.JSON(200, gin.H{"message": "Dashboard"}) }) ``` @@ -107,7 +107,7 @@ func main() { // Role required r.GET("/admin", sagin.CheckRole("admin"), adminHandler) - r.GET("/manager", sagin.CheckRole("admin", "manager"), managerHandler) + r.GET("/manager-example", sagin.CheckRole("admin", "manager-example"), managerHandler) // Permission required r.GET("/users", sagin.CheckPermission("user:read"), listUsersHandler) diff --git a/docs/guide/annotation_zh.md b/docs/guide/annotation_zh.md index 2f3ec47..768847e 100644 --- a/docs/guide/annotation_zh.md +++ b/docs/guide/annotation_zh.md @@ -56,10 +56,10 @@ r.DELETE("/admin/users/:id", sagin.CheckPermission("admin:*"), deleteUserHandler ```go // 需要admin角色 -r.GET("/manager", sagin.CheckRole("admin"), managerHandler) +r.GET("/manager-example", sagin.CheckRole("admin"), managerHandler) // 需要manager角色 -r.GET("/reports", sagin.CheckRole("manager"), reportsHandler) +r.GET("/reports", sagin.CheckRole("manager-example"), reportsHandler) ``` ### 5. 检查封禁 - @SaCheckDisable @@ -84,7 +84,7 @@ r.GET("/data", // 拥有admin或manager角色即可访问 r.GET("/dashboard", - sagin.CheckRole("admin", "manager"), + sagin.CheckRole("admin", "manager-example"), dashboardHandler) ``` @@ -151,7 +151,7 @@ func main() { r.DELETE("/users/:id", sagin.CheckPermission("user:delete"), deleteUserHandler) // 需要角色 - r.GET("/manager", sagin.CheckRole("manager"), managerHandler) + r.GET("/manager-example", sagin.CheckRole("manager-example"), managerHandler) // 检查封禁状态 r.GET("/sensitive", sagin.CheckDisable(), sensitiveHandler) diff --git a/docs/guide/jwt.md b/docs/guide/jwt.md index d8c1b0f..edf58c4 100644 --- a/docs/guide/jwt.md +++ b/docs/guide/jwt.md @@ -115,4 +115,4 @@ JwtSecretKey(os.Getenv("JWT_SECRET_KEY")) - [Quick Start](../tutorial/quick-start.md) - [Authentication Guide](authentication.md) -- [JWT Example](../../examples/jwt-example/README.md) +- [JWT Example](../../examples/manager-example/jwt-example/README.md) diff --git a/docs/guide/jwt_zh.md b/docs/guide/jwt_zh.md index c6079b9..8d05b1e 100644 --- a/docs/guide/jwt_zh.md +++ b/docs/guide/jwt_zh.md @@ -404,7 +404,7 @@ curl http://localhost:8080/user/info \ - [快速开始](../tutorial/quick-start.md) - [认证指南](authentication.md) - [配置说明](configuration.md) -- [JWT 示例代码](../../examples/jwt-example/) +- [JWT 示例代码](../../examples/manager-example/jwt-example/) ## 在线工具 diff --git a/docs/guide/listener.md b/docs/guide/listener.md index dc2b65d..6eccad8 100644 --- a/docs/guide/listener.md +++ b/docs/guide/listener.md @@ -151,4 +151,4 @@ manager.RegisterFunc(core.EventLogin, func(data *core.EventData) { - [Quick Start](../tutorial/quick-start.md) - [Authentication Guide](authentication.md) -- [Event Listener Example](../../examples/listener-example/README.md) +- [Event Listener Example](../../examples/manager-example/listener-example/README.md) diff --git a/docs/guide/listener_zh.md b/docs/guide/listener_zh.md index 0852d0c..aba5960 100644 --- a/docs/guide/listener_zh.md +++ b/docs/guide/listener_zh.md @@ -77,7 +77,7 @@ import ( ) func main() { - // Create manager with log event support + // Create manager-example with log event support manager := core.NewBuilder(). Storage(memory.NewStorage()). Build() diff --git a/docs/guide/single-import.md b/docs/guide/single-import.md index 5456808..09ecf15 100644 --- a/docs/guide/single-import.md +++ b/docs/guide/single-import.md @@ -114,10 +114,10 @@ func main() { config.Timeout = 7200 // 2 hours config.IsPrint = true - // 3. Create manager (from sagin package) + // 3. Create manager-example (from sagin package) manager := sagin.NewManager(storage, config) - // 4. Set global manager (from sagin package) + // 4. Set global manager-example (from sagin package) sagin.SetManager(manager) // 5. Create Gin router @@ -231,10 +231,10 @@ All functions from `core` and `stputil` are re-exported in framework integration ```go config := sagin.DefaultConfig() // Create log config -manager := sagin.NewManager(storage, cfg) // Create manager +manager := sagin.NewManager(storage, cfg) // Create manager-example builder := sagin.NewBuilder() // Create builder -sagin.SetManager(manager) // Set global manager -manager := sagin.GetManager() // Get global manager +sagin.SetManager(manager) // Set global manager-example +manager := sagin.GetManager() // Get global manager-example ``` ### Authentication diff --git a/examples/annotation/annotation-example/README.md b/examples/annotation/annotation-example/README.md index a6ffdb5..73d5009 100644 --- a/examples/annotation/annotation-example/README.md +++ b/examples/annotation/annotation-example/README.md @@ -1,6 +1,6 @@ # 注解装饰器示例 -本示例演示如何在 Gin 框架中使用 Sa-Token-Go 的注解装饰器(类似 Java 的 `@SaCheckLogin`、`@SaCheckRole` 等)。 +本示例演示如何在 Gin 框架中使用 Sa-Token-Go 的中间件装饰器(类似 Java 的 `@SaCheckLogin`、`@SaCheckRole` 等)。 ## 运行示例 @@ -10,44 +10,44 @@ go run main.go 服务器将在 `http://localhost:8080` 启动。 -## 注解装饰器 +## 中间件装饰器 -Sa-Token-Go 提供了类似 Java 注解的装饰器函数: +Sa-Token-Go 提供了类似 Java 注解的中间件函数: -### CheckLogin - 检查登录 +### CheckLoginMiddleware - 检查登录 ```go -r.GET("/user/info", sagin.CheckLogin(), handler.GetUserInfo) +r.GET("/user/info", sagin.CheckLoginMiddleware(), handler.GetUserInfo) ``` -### CheckRole - 检查角色 +### CheckRoleMiddleware - 检查角色 ```go -r.GET("/manager", sagin.CheckRole("admin"), handler.GetManagerData) +r.GET("/manager", sagin.CheckRoleMiddleware("admin"), handler.GetManagerData) ``` -### CheckPermission - 检查权限 +### CheckPermissionMiddleware - 检查权限 ```go // 单个权限 -r.GET("/admin", sagin.CheckPermission("admin:*"), handler.GetAdminData) +r.GET("/admin", sagin.CheckPermissionMiddleware("admin:*"), handler.GetAdminData) // 多个权限(OR 逻辑) -r.GET("/user-or-admin", - sagin.CheckPermission("user:read", "admin:*"), +r.GET("/user-or-admin", + sagin.CheckPermissionMiddleware("user:read", "admin:*"), handler.GetUserOrAdmin) ``` -### CheckDisable - 检查是否被封禁 +### CheckDisableMiddleware - 检查是否被封禁 ```go -r.GET("/sensitive", sagin.CheckDisable(), handler.GetSensitiveData) +r.GET("/sensitive", sagin.CheckDisableMiddleware(), handler.GetSensitiveData) ``` -### Ignore - 忽略认证 +### IgnoreMiddleware - 忽略认证 ```go -r.GET("/public", sagin.Ignore(), handler.GetPublic) +r.GET("/public", sagin.IgnoreMiddleware(), handler.GetPublic) ``` ## 完整示例 @@ -58,77 +58,148 @@ package main import ( "net/http" "time" - + "github.com/gin-gonic/gin" - "github.com/click33/sa-token-go/core" sagin "github.com/click33/sa-token-go/integrations/gin" - "github.com/click33/sa-token-go/stputil" - "github.com/click33/sa-token-go/storage/memory" ) func init() { - stputil.SetManager( - core.NewBuilder(). - Storage(memory.NewStorage()). - Build(), + // 初始化 Manager + sagin.SetManager( + sagin.NewDefaultBuild().Build(), ) } -func main() { - r := gin.Default() - - // 登录接口(公开) - r.POST("/login", loginHandler) - - // 使用注解装饰器 - handler := &UserHandler{} - - // 公开访问 - r.GET("/public", sagin.Ignore(), handler.GetPublic) - - // 需要登录 - r.GET("/user/info", sagin.CheckLogin(), handler.GetUserInfo) - - // 需要管理员权限 - r.GET("/admin", sagin.CheckPermission("admin:*"), handler.GetAdminData) - - // 需要管理员角色 - r.GET("/manager", sagin.CheckRole("admin"), handler.GetManagerData) - - // 检查账号是否被封禁 - r.GET("/sensitive", sagin.CheckDisable(), handler.GetSensitiveData) - - r.Run(":8080") +// 处理器结构体 +type UserHandler struct{} + +// 公开访问 - 忽略认证 +func (h *UserHandler) GetPublic(c *gin.Context) { + c.JSON(http.StatusOK, gin.H{ + "message": "这是公开接口,不需要登录", + }) +} + +// 需要登录 +func (h *UserHandler) GetUserInfo(c *gin.Context) { + loginID, _ := sagin.GetLoginIDFromRequest(c) + c.JSON(http.StatusOK, gin.H{ + "message": "用户个人信息", + "loginId": loginID, + }) +} + +// 需要管理员权限 +func (h *UserHandler) GetAdminData(c *gin.Context) { + loginID, _ := sagin.GetLoginIDFromRequest(c) + c.JSON(http.StatusOK, gin.H{ + "message": "管理员数据", + "loginId": loginID, + "data": "这是管理员专有的数据", + }) } +// 登录接口 func loginHandler(c *gin.Context) { var req struct { UserID int `json:"userId"` } - c.ShouldBindJSON(&req) - + + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "参数错误"}) + return + } + + ctx := c.Request.Context() + // 登录 - token, _ := stputil.Login(req.UserID) - - // 设置权限和角色 - stputil.SetPermissions(req.UserID, []string{"user:read", "admin:*"}) - stputil.SetRoles(req.UserID, []string{"admin"}) - + token, err := sagin.Login(ctx, req.UserID) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": "登录失败"}) + return + } + + // 设置权限和角色(模拟) + if req.UserID == 1 { + _ = sagin.SetPermissions(ctx, req.UserID, []string{"user:read", "user:write", "admin:*"}) + _ = sagin.SetRoles(ctx, req.UserID, []string{"admin", "manager"}) + } else { + _ = sagin.SetPermissions(ctx, req.UserID, []string{"user:read", "user:write"}) + _ = sagin.SetRoles(ctx, req.UserID, []string{"user"}) + } + c.JSON(http.StatusOK, gin.H{ - "token": token, + "token": token, "message": "登录成功", }) } + +// 封禁账号接口 +func disableHandler(c *gin.Context) { + var req struct { + UserID int `json:"userId"` + } + + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "参数错误"}) + return + } + + ctx := c.Request.Context() + + // 封禁账号1小时 + _ = sagin.Disable(ctx, req.UserID, 1*time.Hour) + + c.JSON(http.StatusOK, gin.H{ + "message": "账号已封禁1小时", + }) +} + +func main() { + r := gin.Default() + + // 登录接口(公开) + r.POST("/login", loginHandler) + + // 封禁接口(需要管理员权限) + r.POST("/disable", sagin.CheckPermissionMiddleware("admin:*"), disableHandler) + + // 使用装饰器模式设置路由 + handler := &UserHandler{} + + // 公开访问 - 忽略认证 + r.GET("/public", sagin.IgnoreMiddleware(), handler.GetPublic) + + // 需要登录 + r.GET("/user/info", sagin.CheckLoginMiddleware(), handler.GetUserInfo) + + // 需要管理员权限 + r.GET("/admin", sagin.CheckPermissionMiddleware("admin:*"), handler.GetAdminData) + + // 需要用户权限或管理员权限(OR逻辑) + r.GET("/user-or-admin", + sagin.CheckPermissionMiddleware("user:read", "admin:*"), + handler.GetUserOrAdmin) + + // 需要管理员角色 + r.GET("/manager", sagin.CheckRoleMiddleware("admin"), handler.GetManagerData) + + // 检查账号是否被封禁 + r.GET("/sensitive", sagin.CheckDisableMiddleware(), handler.GetSensitiveData) + + // 启动服务器 + _ = r.Run(":8080") +} ``` ## API 测试 -### 1. 登录 +### 1. 登录(用户ID=1 获得管理员权限) ```bash curl -X POST http://localhost:8080/login \ -H "Content-Type: application/json" \ - -d '{"userId": 1000}' + -d '{"userId": 1}' ``` 响应: @@ -139,33 +210,86 @@ curl -X POST http://localhost:8080/login \ } ``` -### 2. 访问公开接口(无需登录) +### 2. 登录(普通用户) + +```bash +curl -X POST http://localhost:8080/login \ + -H "Content-Type: application/json" \ + -d '{"userId": 2}' +``` + +### 3. 访问公开接口(无需登录) ```bash curl http://localhost:8080/public ``` -### 3. 访问需要登录的接口 +响应: +```json +{ + "message": "这是公开接口,不需要登录" +} +``` + +### 4. 访问需要登录的接口 ```bash curl http://localhost:8080/user/info \ -H "Authorization: YOUR_TOKEN" ``` -### 4. 访问需要权限的接口 +响应: +```json +{ + "message": "用户个人信息", + "loginId": "1" +} +``` + +### 5. 访问需要管理员权限的接口 ```bash curl http://localhost:8080/admin \ -H "Authorization: YOUR_TOKEN" ``` -### 5. 封禁账号 +响应(管理员): +```json +{ + "message": "管理员数据", + "loginId": "1", + "data": "这是管理员专有的数据" +} +``` + +### 6. 访问需要角色的接口 + +```bash +curl http://localhost:8080/manager \ + -H "Authorization: YOUR_TOKEN" +``` + +### 7. 封禁账号(需要管理员权限) ```bash curl -X POST http://localhost:8080/disable \ -H "Content-Type: application/json" \ -H "Authorization: YOUR_TOKEN" \ - -d '{"userId": 1000}' + -d '{"userId": 2}' +``` + +响应: +```json +{ + "message": "账号已封禁1小时" +} +``` + +### 8. 访问敏感数据(检查封禁状态) + +```bash +curl http://localhost:8080/sensitive \ + -H "Authorization: YOUR_TOKEN" ``` ## 注解对比 @@ -184,25 +308,52 @@ public Result getUserInfo() { public Result getAdminData() { return Result.success(); } + +@SaCheckPermission("admin:*") +@GetMapping("/admin/data") +public Result getAdminOnlyData() { + return Result.success(); +} ``` ### Go (Sa-Token-Go) ```go -r.GET("/user/info", sagin.CheckLogin(), handler.GetUserInfo) +r.GET("/user/info", sagin.CheckLoginMiddleware(), handler.GetUserInfo) + +r.GET("/admin", sagin.CheckRoleMiddleware("admin"), handler.GetAdminData) -r.GET("/admin", sagin.CheckRole("admin"), handler.GetAdminData) +r.GET("/admin/data", sagin.CheckPermissionMiddleware("admin:*"), handler.GetAdminOnlyData) ``` +## 中间件说明 + +| 中间件 | 说明 | 对应 Java 注解 | +|--------|------|----------------| +| `CheckLoginMiddleware()` | 检查是否已登录 | `@SaCheckLogin` | +| `CheckRoleMiddleware(roles...)` | 检查是否拥有指定角色 | `@SaCheckRole` | +| `CheckPermissionMiddleware(perms...)` | 检查是否拥有指定权限 | `@SaCheckPermission` | +| `CheckDisableMiddleware()` | 检查账号是否被封禁 | `@SaCheckDisable` | +| `IgnoreMiddleware()` | 忽略认证检查 | `@SaIgnore` | + ## 优势 -- ✅ **声明式编程** - 代码更简洁、可读性更强 -- ✅ **统一验证** - 自动处理认证和授权逻辑 -- ✅ **错误处理** - 自动返回标准错误响应 -- ✅ **灵活组合** - 可以组合使用多个装饰器 +- **声明式编程** - 代码更简洁、可读性更强 +- **统一验证** - 自动处理认证和授权逻辑 +- **错误处理** - 自动返回标准错误响应 +- **灵活组合** - 可以组合使用多个中间件 +- **权限模式** - 支持通配符权限匹配(如 `admin:*`) + +## 权限说明 + +本示例中的权限分配: + +| 用户 ID | 权限 | 角色 | +|---------|------|------| +| 1 | `user:read`, `user:write`, `admin:*` | `admin`, `manager` | +| 其他 | `user:read`, `user:write` | `user` | ## 更多示例 - [快速开始](../../quick-start/simple-example) - 学习基础用法 - [Gin 集成](../../gin/gin-example) - 完整的 Gin 集成示例 - diff --git a/examples/annotation/annotation-example/go.mod b/examples/annotation/annotation-example/go.mod index a830f10..c4a7577 100644 --- a/examples/annotation/annotation-example/go.mod +++ b/examples/annotation/annotation-example/go.mod @@ -1,48 +1,48 @@ module github.com/click33/sa-token-go/examples/annotation-example -go 1.21 +go 1.25.0 require ( - github.com/click33/sa-token-go/core v0.1.3 - github.com/click33/sa-token-go/integrations/gin v0.1.3 - github.com/click33/sa-token-go/storage/memory v0.1.3 - github.com/click33/sa-token-go/stputil v0.1.3 + github.com/click33/sa-token-go/integrations/gin v0.1.5 github.com/gin-gonic/gin v1.10.0 + github.com/redis/go-redis/v9 v9.5.1 ) require ( github.com/bytedance/sonic v1.11.6 // indirect + github.com/bytedance/sonic/loader v0.1.1 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/click33/sa-token-go/core v0.1.6 // indirect + github.com/click33/sa-token-go/storage/memory v0.1.6 // indirect + github.com/click33/sa-token-go/stputil v0.1.5 // indirect github.com/cloudwego/base64x v0.1.4 // indirect github.com/cloudwego/iasm v0.2.0 // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/gabriel-vasile/mimetype v1.4.3 // indirect github.com/gin-contrib/sse v0.1.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.20.0 // indirect github.com/goccy/go-json v0.10.2 // indirect - github.com/golang-jwt/jwt/v5 v5.2.1 // indirect + github.com/golang-jwt/jwt/v5 v5.3.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/cpuid/v2 v2.2.7 // indirect + github.com/kr/text v0.2.0 // indirect github.com/leodido/go-urn v1.4.0 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/panjf2000/ants/v2 v2.11.3 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.12 // indirect golang.org/x/arch v0.8.0 // indirect - golang.org/x/crypto v0.23.0 // indirect - golang.org/x/net v0.25.0 // indirect - golang.org/x/sys v0.20.0 // indirect - golang.org/x/text v0.15.0 // indirect - google.golang.org/protobuf v1.34.1 // indirect + golang.org/x/crypto v0.41.0 // indirect + golang.org/x/net v0.43.0 // indirect + golang.org/x/sync v0.19.0 // indirect + golang.org/x/sys v0.35.0 // indirect + golang.org/x/text v0.28.0 // indirect + google.golang.org/protobuf v1.36.10 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) - -replace ( - github.com/click33/sa-token-go/core => ../../../core - github.com/click33/sa-token-go/integrations/gin => ../../../integrations/gin - github.com/click33/sa-token-go/storage/memory => ../../../storage/memory - github.com/click33/sa-token-go/stputil => ../../../stputil -) diff --git a/examples/annotation/annotation-example/go.sum b/examples/annotation/annotation-example/go.sum new file mode 100644 index 0000000..8ac49e2 --- /dev/null +++ b/examples/annotation/annotation-example/go.sum @@ -0,0 +1,53 @@ +github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= +github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= +github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0= +github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/click33/sa-token-go/core v0.1.6 h1:ELOe0qSH1b3LRsQD3DIBg0e1VgYANKFg5H7z57Lkt/8= +github.com/click33/sa-token-go/core v0.1.6/go.mod h1:mb3AQAJIXqx9WdULyn5qjufK1j/u+kgB0q+tafHVhgk= +github.com/click33/sa-token-go/integrations/gin v0.1.5 h1:OYAldpSyibG6acbFOdIoEpRH3FAxBVGafFExyz6B9Og= +github.com/click33/sa-token-go/integrations/gin v0.1.5/go.mod h1:SFThmz7E84VGrGQa7RlMH/XLFGqxUfHSmbeFKmNgmbs= +github.com/click33/sa-token-go/storage/memory v0.1.6 h1:iGFEy+HtTJLOpKnbIMbgpXyKotsKpPQu6wWTZVOXQis= +github.com/click33/sa-token-go/storage/memory v0.1.6/go.mod h1:YNojcgyLC/uFrmReZLePCDQ5WK2fo2WWGRjRMvXVH74= +github.com/click33/sa-token-go/stputil v0.1.5 h1:603tbI4JkBTg3MnfTj+lCMDxJOKSCOqsMyC2zyuvEco= +github.com/click33/sa-token-go/stputil v0.1.5/go.mod h1:YH+3NLXgGJfrS2wkGubMWFnr/Nk0GgejOtRxcE+9x0c= +github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= +github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= +github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/validator/v10 v10.20.0 h1:K9ISHbSaI0lyB2eWMPJo+kOS/FBExVwjEviJTixqxL8= +github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg= +github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/redis/go-redis/v9 v9.5.1 h1:H1X4D3yHPaYrkL5X06Wh6xNVM/pX0Ft4RV0vMGvLBh8= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= +golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc= +golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= +google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/examples/annotation/annotation-example/main.go b/examples/annotation/annotation-example/main.go index 2ffa270..5053818 100644 --- a/examples/annotation/annotation-example/main.go +++ b/examples/annotation/annotation-example/main.go @@ -4,19 +4,14 @@ import ( "net/http" "time" - "github.com/click33/sa-token-go/core" sagin "github.com/click33/sa-token-go/integrations/gin" - "github.com/click33/sa-token-go/storage/memory" - "github.com/click33/sa-token-go/stputil" "github.com/gin-gonic/gin" ) func init() { - // 初始化StpUtil - stputil.SetManager( - core.NewBuilder(). - Storage(memory.NewStorage()). - Build(), + // 初始化 Manager + sagin.SetManager( + sagin.NewDefaultBuild().Build(), ) } @@ -32,7 +27,7 @@ func (h *UserHandler) GetPublic(c *gin.Context) { // 需要登录 func (h *UserHandler) GetUserInfo(c *gin.Context) { - loginID, _ := stputil.GetLoginID(c.GetHeader("Authorization")) + loginID, _ := sagin.GetLoginIDFromRequest(c) c.JSON(http.StatusOK, gin.H{ "message": "用户个人信息", @@ -42,7 +37,7 @@ func (h *UserHandler) GetUserInfo(c *gin.Context) { // 需要管理员权限 func (h *UserHandler) GetAdminData(c *gin.Context) { - loginID, _ := stputil.GetLoginID(c.GetHeader("Authorization")) + loginID, _ := sagin.GetLoginIDFromRequest(c) c.JSON(http.StatusOK, gin.H{ "message": "管理员数据", @@ -53,7 +48,7 @@ func (h *UserHandler) GetAdminData(c *gin.Context) { // 需要多个权限之一 func (h *UserHandler) GetUserOrAdmin(c *gin.Context) { - loginID, _ := stputil.GetLoginID(c.GetHeader("Authorization")) + loginID, _ := sagin.GetLoginIDFromRequest(c) c.JSON(http.StatusOK, gin.H{ "message": "用户或管理员都可以访问", @@ -63,7 +58,7 @@ func (h *UserHandler) GetUserOrAdmin(c *gin.Context) { // 需要特定角色 func (h *UserHandler) GetManagerData(c *gin.Context) { - loginID, _ := stputil.GetLoginID(c.GetHeader("Authorization")) + loginID, _ := sagin.GetLoginIDFromRequest(c) c.JSON(http.StatusOK, gin.H{ "message": "经理数据", @@ -73,7 +68,7 @@ func (h *UserHandler) GetManagerData(c *gin.Context) { // 检查账号是否被封禁 func (h *UserHandler) GetSensitiveData(c *gin.Context) { - loginID, _ := stputil.GetLoginID(c.GetHeader("Authorization")) + loginID, _ := sagin.GetLoginIDFromRequest(c) c.JSON(http.StatusOK, gin.H{ "message": "敏感数据", @@ -92,16 +87,23 @@ func loginHandler(c *gin.Context) { return } + ctx := c.Request.Context() + // 登录 - token, err := stputil.Login(req.UserID) + token, err := sagin.Login(ctx, req.UserID) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "登录失败"}) return } // 设置权限和角色(模拟) - stputil.SetPermissions(req.UserID, []string{"user:read", "user:write", "admin:*"}) - stputil.SetRoles(req.UserID, []string{"admin", "manager"}) + if req.UserID == 1 { + _ = sagin.SetPermissions(ctx, req.UserID, []string{"user:read", "user:write", "admin:*"}) + _ = sagin.SetRoles(ctx, req.UserID, []string{"admin", "manager-example"}) + } else { + _ = sagin.SetPermissions(ctx, req.UserID, []string{"user:read", "user:write"}) + _ = sagin.SetRoles(ctx, req.UserID, []string{"user"}) + } c.JSON(http.StatusOK, gin.H{ "token": token, @@ -120,8 +122,10 @@ func disableHandler(c *gin.Context) { return } + ctx := c.Request.Context() + // 封禁账号1小时 - stputil.Disable(req.UserID, 1*time.Hour) + _ = sagin.Disable(ctx, req.UserID, 1*time.Hour) c.JSON(http.StatusOK, gin.H{ "message": "账号已封禁1小时", @@ -135,31 +139,31 @@ func main() { r.POST("/login", loginHandler) // 封禁接口(需要管理员权限) - r.POST("/disable", sagin.CheckPermission("admin:*"), disableHandler) + r.POST("/disable", sagin.CheckPermissionMiddleware("admin:*"), disableHandler) // 使用装饰器模式设置路由 handler := &UserHandler{} // 公开访问 - 忽略认证 - r.GET("/public", sagin.Ignore(), handler.GetPublic) + r.GET("/public", sagin.IgnoreMiddleware(), handler.GetPublic) // 需要登录 - r.GET("/user/info", sagin.CheckLogin(), handler.GetUserInfo) + r.GET("/user/info", sagin.CheckLoginMiddleware(), handler.GetUserInfo) // 需要管理员权限 - r.GET("/admin", sagin.CheckPermission("admin:*"), handler.GetAdminData) + r.GET("/admin", sagin.CheckPermissionMiddleware("admin:*"), handler.GetAdminData) // 需要用户权限或管理员权限(OR逻辑) r.GET("/user-or-admin", - sagin.CheckPermission("user:read", "admin:*"), + sagin.CheckPermissionMiddleware("user:read", "admin:*"), handler.GetUserOrAdmin) // 需要管理员角色 - r.GET("/manager", sagin.CheckRole("admin"), handler.GetManagerData) + r.GET("/manager-example", sagin.CheckRoleMiddleware("admin"), handler.GetManagerData) // 检查账号是否被封禁 - r.GET("/sensitive", sagin.CheckDisable(), handler.GetSensitiveData) + r.GET("/sensitive", sagin.CheckDisableMiddleware(), handler.GetSensitiveData) // 启动服务器 - r.Run(":8080") + _ = r.Run(":8080") } diff --git a/examples/chi/chi-example/go.mod b/examples/chi/chi-example/go.mod index 509b792..0be389e 100644 --- a/examples/chi/chi-example/go.mod +++ b/examples/chi/chi-example/go.mod @@ -1,21 +1,16 @@ module github.com/click33/sa-token-go/examples/chi-example -go 1.21 +go 1.25.0 require ( - github.com/click33/sa-token-go/core v0.1.3 - github.com/click33/sa-token-go/integrations/chi v0.1.3 - github.com/click33/sa-token-go/storage/memory v0.1.3 + github.com/click33/sa-token-go/core v0.1.6 + github.com/click33/sa-token-go/storage/memory v0.1.6 github.com/go-chi/chi/v5 v5.0.11 ) require ( - github.com/golang-jwt/jwt/v5 v5.2.1 // indirect + github.com/golang-jwt/jwt/v5 v5.3.0 // indirect github.com/google/uuid v1.6.0 // indirect -) - -replace ( - github.com/click33/sa-token-go/core => ../../../core - github.com/click33/sa-token-go/integrations/chi => ../../../integrations/chi - github.com/click33/sa-token-go/storage/memory => ../../../storage/memory + github.com/panjf2000/ants/v2 v2.11.3 // indirect + golang.org/x/sync v0.19.0 // indirect ) diff --git a/examples/chi/chi-example/go.sum b/examples/chi/chi-example/go.sum new file mode 100644 index 0000000..6c47202 --- /dev/null +++ b/examples/chi/chi-example/go.sum @@ -0,0 +1,11 @@ +github.com/click33/sa-token-go/core v0.1.6 h1:ELOe0qSH1b3LRsQD3DIBg0e1VgYANKFg5H7z57Lkt/8= +github.com/click33/sa-token-go/storage/memory v0.1.6 h1:iGFEy+HtTJLOpKnbIMbgpXyKotsKpPQu6wWTZVOXQis= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/go-chi/chi/v5 v5.0.11 h1:BnpYbFZ3T3S1WMpD79r7R5ThWX40TaFB7L31Y8xqSwA= +github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/examples/echo/echo-example/go.mod b/examples/echo/echo-example/go.mod index b08a0a4..c1f5551 100644 --- a/examples/echo/echo-example/go.mod +++ b/examples/echo/echo-example/go.mod @@ -1,35 +1,27 @@ module github.com/click33/sa-token-go/examples/echo-example -go 1.23.0 - -toolchain go1.24.1 +go 1.25.0 require ( - github.com/click33/sa-token-go/core v0.1.3 - github.com/click33/sa-token-go/integrations/echo v0.1.3 - github.com/click33/sa-token-go/storage/memory v0.1.3 + github.com/click33/sa-token-go/core v0.1.6 + github.com/click33/sa-token-go/storage/memory v0.1.6 github.com/labstack/echo/v4 v4.11.4 ) require ( - github.com/click33/sa-token-go/stputil v0.0.0-20251017234446-3cf2bdee68cc // indirect github.com/golang-jwt/jwt v3.2.2+incompatible // indirect - github.com/golang-jwt/jwt/v5 v5.2.1 // indirect + github.com/golang-jwt/jwt/v5 v5.3.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/labstack/gommon v0.4.2 // indirect - github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect + github.com/panjf2000/ants/v2 v2.11.3 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasttemplate v1.2.2 // indirect golang.org/x/crypto v0.41.0 // indirect golang.org/x/net v0.43.0 // indirect + golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.35.0 // indirect golang.org/x/text v0.28.0 // indirect golang.org/x/time v0.5.0 // indirect ) - -replace ( - github.com/click33/sa-token-go/core => ../../../core - github.com/click33/sa-token-go/integrations/echo => ../../../integrations/echo - github.com/click33/sa-token-go/storage/memory => ../../../storage/memory -) diff --git a/examples/echo/echo-example/go.sum b/examples/echo/echo-example/go.sum new file mode 100644 index 0000000..352f2ad --- /dev/null +++ b/examples/echo/echo-example/go.sum @@ -0,0 +1,22 @@ +github.com/click33/sa-token-go/core v0.1.6 h1:ELOe0qSH1b3LRsQD3DIBg0e1VgYANKFg5H7z57Lkt/8= +github.com/click33/sa-token-go/storage/memory v0.1.6 h1:iGFEy+HtTJLOpKnbIMbgpXyKotsKpPQu6wWTZVOXQis= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= +github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/labstack/echo/v4 v4.11.4 h1:vDZmA+qNeh1pd/cCkEicDMrjtrnMGQ1QFI9gWN1zGq8= +github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0= +github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= +golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= +golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/examples/fiber/fiber-example/go.mod b/examples/fiber/fiber-example/go.mod index e87d400..2465d75 100644 --- a/examples/fiber/fiber-example/go.mod +++ b/examples/fiber/fiber-example/go.mod @@ -1,31 +1,26 @@ module github.com/click33/sa-token-go/examples/fiber-example -go 1.21 +go 1.25.0 require ( - github.com/click33/sa-token-go/core v0.1.3 - github.com/click33/sa-token-go/integrations/fiber v0.1.3 - github.com/click33/sa-token-go/storage/memory v0.1.3 + github.com/click33/sa-token-go/core v0.1.6 + github.com/click33/sa-token-go/storage/memory v0.1.6 github.com/gofiber/fiber/v2 v2.52.0 ) require ( github.com/andybalholm/brotli v1.0.5 // indirect - github.com/golang-jwt/jwt/v5 v5.2.1 // indirect + github.com/golang-jwt/jwt/v5 v5.3.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/klauspost/compress v1.17.0 // indirect - github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-runewidth v0.0.15 // indirect - github.com/rivo/uniseg v0.2.0 // indirect + github.com/mattn/go-runewidth v0.0.16 // indirect + github.com/panjf2000/ants/v2 v2.11.3 // indirect + github.com/rivo/uniseg v0.4.7 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasthttp v1.51.0 // indirect github.com/valyala/tcplisten v1.0.0 // indirect - golang.org/x/sys v0.20.0 // indirect -) - -replace ( - github.com/click33/sa-token-go/core => ../../../core - github.com/click33/sa-token-go/integrations/fiber => ../../../integrations/fiber - github.com/click33/sa-token-go/storage/memory => ../../../storage/memory + golang.org/x/sync v0.19.0 // indirect + golang.org/x/sys v0.35.0 // indirect ) diff --git a/examples/fiber/fiber-example/go.sum b/examples/fiber/fiber-example/go.sum new file mode 100644 index 0000000..778dc50 --- /dev/null +++ b/examples/fiber/fiber-example/go.sum @@ -0,0 +1,21 @@ +github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs= +github.com/click33/sa-token-go/core v0.1.6 h1:ELOe0qSH1b3LRsQD3DIBg0e1VgYANKFg5H7z57Lkt/8= +github.com/click33/sa-token-go/storage/memory v0.1.6 h1:iGFEy+HtTJLOpKnbIMbgpXyKotsKpPQu6wWTZVOXQis= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/gofiber/fiber/v2 v2.52.0 h1:S+qXi7y+/Pgvqq4DrSmREGiFwtB7Bu6+QFLuIHYw/UE= +github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM= +github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/fasthttp v1.51.0 h1:8b30A5JlZ6C7AS81RsWjYMQmrZG6feChmgAolCl1SqA= +github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/examples/gf/api_test.go b/examples/gf/api_test.go deleted file mode 100644 index 771dc0f..0000000 --- a/examples/gf/api_test.go +++ /dev/null @@ -1,364 +0,0 @@ -package main - -import ( - "encoding/json" - "fmt" - "io" - "net/http" - "strings" - "testing" - "time" -) - -const baseURL = "http://127.0.0.1:8000" - -// Response 通用响应结构 -type Response struct { - Code int `json:"code"` - Message string `json:"message"` - Data json.RawMessage `json:"data,omitempty"` -} - -// LoginData 登录响应数据 -type LoginData struct { - Token string `json:"token"` - LoginID string `json:"loginID"` -} - -// httpGet 发送 GET 请求 -func httpGet(url string, token string) (*Response, error) { - req, err := http.NewRequest("GET", url, nil) - if err != nil { - return nil, err - } - - if token != "" { - req.Header.Set("satoken", token) - } - - client := &http.Client{Timeout: 10 * time.Second} - resp, err := client.Do(req) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - body, err := io.ReadAll(resp.Body) - if err != nil { - return nil, err - } - - var result Response - if err := json.Unmarshal(body, &result); err != nil { - return nil, fmt.Errorf("parse response failed: %s, body: %s", err, string(body)) - } - - return &result, nil -} - -// TestHomePage 测试首页 -func TestHomePage(t *testing.T) { - resp, err := httpGet(baseURL+"/", "") - if err != nil { - t.Fatalf("请求失败: %v", err) - } - - if resp.Code != 200 { - t.Errorf("期望 code=200, 实际 code=%d", resp.Code) - } - - t.Logf("首页响应: code=%d, message=%s", resp.Code, resp.Message) -} - -// TestPublicRoute 测试公开路由 -func TestPublicRoute(t *testing.T) { - resp, err := httpGet(baseURL+"/public", "") - if err != nil { - t.Fatalf("请求失败: %v", err) - } - - if resp.Code != 200 { - t.Errorf("期望 code=200, 实际 code=%d", resp.Code) - } - - t.Logf("公开路由响应: code=%d, message=%s", resp.Code, resp.Message) -} - -// TestLoginAndLogout 测试登录和登出流程 -func TestLoginAndLogout(t *testing.T) { - // 1. 登录 - t.Log("=== 步骤1: 登录 ===") - resp, err := httpGet(baseURL+"/login?id=10001", "") - if err != nil { - t.Fatalf("登录请求失败: %v", err) - } - - if resp.Code != 200 { - t.Fatalf("登录失败: code=%d, message=%s", resp.Code, resp.Message) - } - - var loginData LoginData - if err := json.Unmarshal(resp.Data, &loginData); err != nil { - t.Fatalf("解析登录数据失败: %v", err) - } - - t.Logf("登录成功: token=%s, loginID=%s", loginData.Token, loginData.LoginID) - - // 2. 使用 token 访问受保护资源 - t.Log("=== 步骤2: 访问受保护资源 ===") - resp, err = httpGet(baseURL+"/api/user", loginData.Token) - if err != nil { - t.Fatalf("获取用户信息请求失败: %v", err) - } - - if resp.Code != 200 { - t.Errorf("获取用户信息失败: code=%d, message=%s", resp.Code, resp.Message) - } else { - t.Logf("获取用户信息成功: %s", string(resp.Data)) - } - - // 3. 登出 - t.Log("=== 步骤3: 登出 ===") - resp, err = httpGet(baseURL+"/logout", loginData.Token) - if err != nil { - t.Fatalf("登出请求失败: %v", err) - } - - if resp.Code != 200 { - t.Errorf("登出失败: code=%d, message=%s", resp.Code, resp.Message) - } else { - t.Logf("登出成功: message=%s", resp.Message) - } - - // 4. 登出后再次访问受保护资源(应该失败) - t.Log("=== 步骤4: 登出后访问受保护资源 ===") - resp, err = httpGet(baseURL+"/api/user", loginData.Token) - if err != nil { - t.Fatalf("请求失败: %v", err) - } - - if resp.Code == 200 { - t.Error("登出后不应该能访问受保护资源") - } else { - t.Logf("符合预期,访问被拒绝: code=%d, message=%s", resp.Code, resp.Message) - } -} - -// TestProtectedRouteWithoutToken 测试无 token 访问受保护路由 -func TestProtectedRouteWithoutToken(t *testing.T) { - resp, err := httpGet(baseURL+"/api/user", "") - if err != nil { - t.Fatalf("请求失败: %v", err) - } - - if resp.Code == 200 { - t.Error("无 token 不应该能访问受保护资源") - } else { - t.Logf("符合预期,访问被拒绝: code=%d, message=%s", resp.Code, resp.Message) - } -} - -// TestTokenInfo 测试获取 Token 信息 -func TestTokenInfo(t *testing.T) { - // 先登录 - resp, err := httpGet(baseURL+"/login?id=20001", "") - if err != nil { - t.Fatalf("登录请求失败: %v", err) - } - - var loginData LoginData - if err := json.Unmarshal(resp.Data, &loginData); err != nil { - t.Fatalf("解析登录数据失败: %v", err) - } - - t.Logf("登录成功: token=%s", loginData.Token) - - // 获取 Token 信息 - resp, err = httpGet(baseURL+"/api/token-info", loginData.Token) - if err != nil { - t.Fatalf("获取Token信息请求失败: %v", err) - } - - if resp.Code != 200 { - t.Errorf("获取Token信息失败: code=%d, message=%s", resp.Code, resp.Message) - } else { - t.Logf("Token信息: %s", string(resp.Data)) - } -} - -// TestAdminDashboard 测试管理员面板(需要权限) -func TestAdminDashboard(t *testing.T) { - // 先登录 - resp, err := httpGet(baseURL+"/login?id=admin001", "") - if err != nil { - t.Fatalf("登录请求失败: %v", err) - } - - var loginData LoginData - if err := json.Unmarshal(resp.Data, &loginData); err != nil { - t.Fatalf("解析登录数据失败: %v", err) - } - - t.Logf("登录成功: token=%s", loginData.Token) - - // 访问管理员面板 - resp, err = httpGet(baseURL+"/admin/dashboard", loginData.Token) - if err != nil { - t.Fatalf("访问管理员面板请求失败: %v", err) - } - - // 注意:这个测试可能会因为没有配置权限而失败,这是正常的 - t.Logf("管理员面板响应: code=%d, message=%s", resp.Code, resp.Message) -} - -// TestSuperSettings 测试超级管理员设置(需要角色) -func TestSuperSettings(t *testing.T) { - // 先登录 - resp, err := httpGet(baseURL+"/login?id=super001", "") - if err != nil { - t.Fatalf("登录请求失败: %v", err) - } - - var loginData LoginData - if err := json.Unmarshal(resp.Data, &loginData); err != nil { - t.Fatalf("解析登录数据失败: %v", err) - } - - t.Logf("登录成功: token=%s", loginData.Token) - - // 访问超级管理员设置 - resp, err = httpGet(baseURL+"/super/settings", loginData.Token) - if err != nil { - t.Fatalf("访问超级管理员设置请求失败: %v", err) - } - - // 注意:这个测试可能会因为没有配置角色而失败,这是正常的 - t.Logf("超级管理员设置响应: code=%d, message=%s", resp.Code, resp.Message) -} - -// TestInvalidToken 测试无效 Token -func TestInvalidToken(t *testing.T) { - resp, err := httpGet(baseURL+"/api/user", "invalid-token-12345") - if err != nil { - t.Fatalf("请求失败: %v", err) - } - - if resp.Code == 200 { - t.Error("无效 token 不应该能访问受保护资源") - } else { - t.Logf("符合预期,无效Token被拒绝: code=%d, message=%s", resp.Code, resp.Message) - } -} - -// TestMultipleLogin 测试多次登录同一用户 -func TestMultipleLogin(t *testing.T) { - userID := "multi-user-001" - - // 第一次登录 - resp1, err := httpGet(baseURL+"/login?id="+userID, "") - if err != nil { - t.Fatalf("第一次登录请求失败: %v", err) - } - - var loginData1 LoginData - if err := json.Unmarshal(resp1.Data, &loginData1); err != nil { - t.Fatalf("解析第一次登录数据失败: %v", err) - } - - t.Logf("第一次登录成功: token=%s", loginData1.Token) - - // 第二次登录 - resp2, err := httpGet(baseURL+"/login?id="+userID, "") - if err != nil { - t.Fatalf("第二次登录请求失败: %v", err) - } - - var loginData2 LoginData - if err := json.Unmarshal(resp2.Data, &loginData2); err != nil { - t.Fatalf("解析第二次登录数据失败: %v", err) - } - - t.Logf("第二次登录成功: token=%s", loginData2.Token) - - // 检查两个 token 是否都有效 - resp, err := httpGet(baseURL+"/api/user", loginData1.Token) - if err != nil { - t.Fatalf("请求失败: %v", err) - } - t.Logf("第一个Token访问结果: code=%d, message=%s", resp.Code, resp.Message) - - resp, err = httpGet(baseURL+"/api/user", loginData2.Token) - if err != nil { - t.Fatalf("请求失败: %v", err) - } - t.Logf("第二个Token访问结果: code=%d, message=%s", resp.Code, resp.Message) -} - -// 以下是一个完整的测试流程示例,可以直接运行 -func ExampleFullFlow() { - fmt.Println("=== Sa-Token-Go GF Example API 测试 ===") - fmt.Println() - - // 1. 测试首页 - fmt.Println("1. 测试首页") - resp, _ := httpGet(baseURL+"/", "") - fmt.Printf(" 响应: %s\n", resp.Message) - - // 2. 测试公开路由 - fmt.Println("2. 测试公开路由") - resp, _ = httpGet(baseURL+"/public", "") - fmt.Printf(" 响应: %s\n", resp.Message) - - // 3. 登录 - fmt.Println("3. 登录") - resp, _ = httpGet(baseURL+"/login?id=test001", "") - var loginData LoginData - json.Unmarshal(resp.Data, &loginData) - fmt.Printf(" Token: %s\n", loginData.Token) - - // 4. 访问受保护资源 - fmt.Println("4. 访问受保护资源") - resp, _ = httpGet(baseURL+"/api/user", loginData.Token) - fmt.Printf(" 响应: %s\n", resp.Message) - - // 5. 登出 - fmt.Println("5. 登出") - resp, _ = httpGet(baseURL+"/logout", loginData.Token) - fmt.Printf(" 响应: %s\n", resp.Message) - - fmt.Println() - fmt.Println("=== 测试完成 ===") -} - -// BenchmarkLogin 登录性能测试 -func BenchmarkLogin(b *testing.B) { - for i := 0; i < b.N; i++ { - httpGet(baseURL+"/login?id=bench-user", "") - } -} - -// BenchmarkProtectedRoute 受保护路由性能测试 -func BenchmarkProtectedRoute(b *testing.B) { - // 先登录获取 token - resp, err := httpGet(baseURL+"/login?id=bench-user", "") - if err != nil { - b.Fatalf("登录失败: %v", err) - } - - var loginData LoginData - if err := json.Unmarshal(resp.Data, &loginData); err != nil { - b.Fatalf("解析登录数据失败: %v", err) - } - - b.ResetTimer() - for i := 0; i < b.N; i++ { - httpGet(baseURL+"/api/user", loginData.Token) - } -} - -// 辅助函数:打印分隔线 -func printSeparator(title string) { - fmt.Println(strings.Repeat("=", 50)) - fmt.Printf(" %s\n", title) - fmt.Println(strings.Repeat("=", 50)) -} diff --git a/examples/gf/go.mod b/examples/gf/go.mod index 5d8d80c..ba48dff 100644 --- a/examples/gf/go.mod +++ b/examples/gf/go.mod @@ -1,34 +1,34 @@ module github.com/click33/sa-token-go/examples/gf-example -go 1.24.1 +go 1.25.0 require ( + github.com/click33/sa-token-go/integrations/gf v0.1.5 github.com/gogf/gf/v2 v2.9.4 - github.com/click33/sa-token-go/integrations/gf v0.1.6 - github.com/click33/sa-token-go/storage/memory v0.1.6 ) require ( github.com/BurntSushi/toml v1.5.0 // indirect github.com/clbanning/mxj/v2 v2.7.0 // indirect - github.com/click33/sa-token-go/core v0.1.3 // indirect - github.com/click33/sa-token-go/stputil v0.1.3 // indirect + github.com/click33/sa-token-go/core v0.1.6 // indirect + github.com/click33/sa-token-go/stputil v0.1.5 // indirect github.com/emirpasic/gods v1.18.1 // indirect github.com/fatih/color v1.18.0 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/golang-jwt/jwt/v5 v5.2.1 // indirect + github.com/golang-jwt/jwt/v5 v5.3.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect github.com/grokify/html-strip-tags-go v0.1.0 // indirect github.com/magiconair/properties v1.8.10 // indirect - github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.16 // indirect github.com/olekukonko/errors v1.1.0 // indirect github.com/olekukonko/ll v0.0.9 // indirect github.com/olekukonko/tablewriter v1.1.0 // indirect + github.com/panjf2000/ants/v2 v2.11.3 // indirect github.com/rivo/uniseg v0.4.7 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/otel v1.38.0 // indirect @@ -36,6 +36,7 @@ require ( go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect golang.org/x/net v0.43.0 // indirect + golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.35.0 // indirect golang.org/x/text v0.28.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/examples/gf/go.sum b/examples/gf/go.sum new file mode 100644 index 0000000..0d56965 --- /dev/null +++ b/examples/gf/go.sum @@ -0,0 +1,46 @@ +github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= +github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME= +github.com/click33/sa-token-go/core v0.1.6 h1:ELOe0qSH1b3LRsQD3DIBg0e1VgYANKFg5H7z57Lkt/8= +github.com/click33/sa-token-go/core v0.1.6/go.mod h1:mb3AQAJIXqx9WdULyn5qjufK1j/u+kgB0q+tafHVhgk= +github.com/click33/sa-token-go/integrations/gf v0.1.5 h1:jypKpIDa4L11L4JKW5374Kujnh7f/txXbUIBl0/40Qc= +github.com/click33/sa-token-go/integrations/gf v0.1.5/go.mod h1:vOIAHrB8LQMBR52lbluLTBJzzEFqsk4qwy48qmuPhJg= +github.com/click33/sa-token-go/stputil v0.1.5 h1:603tbI4JkBTg3MnfTj+lCMDxJOKSCOqsMyC2zyuvEco= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= +github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= +github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/gogf/gf/v2 v2.9.4 h1:6vleEWypot9WBPncP2GjbpgAUeG6Mzb1YESb9nPMkjY= +github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/grokify/html-strip-tags-go v0.1.0 h1:03UrQLjAny8xci+R+qjCce/MYnpNXCtgzltlQbOBae4= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE= +github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/olekukonko/errors v1.1.0 h1:RNuGIh15QdDenh+hNvKrJkmxxjV4hcS50Db478Ou5sM= +github.com/olekukonko/ll v0.0.9 h1:Y+1YqDfVkqMWuEQMclsF9HUR5+a82+dxJuL1HHSRpxI= +github.com/olekukonko/tablewriter v1.1.0 h1:N0LHrshF4T39KvI96fn6GT8HEjXRXYNDrDjKFDB7RIY= +github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= +go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= +go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= +go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM= +go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/examples/gin/gin-example/README.md b/examples/gin/gin-example/README.md index f017f27..08c72ba 100644 --- a/examples/gin/gin-example/README.md +++ b/examples/gin/gin-example/README.md @@ -20,91 +20,88 @@ go run cmd/main.go ## 使用方式 -### 方式一:使用 Manager 实例(推荐用于复杂场景) +### 方式一:使用 Builder 构建器(推荐) ```go package main import ( "github.com/gin-gonic/gin" - "github.com/click33/sa-token-go/core" sagin "github.com/click33/sa-token-go/integrations/gin" - "github.com/click33/sa-token-go/storage/memory" ) func main() { - // 创建 Manager - manager := core.NewBuilder(). - Storage(memory.NewStorage()). + // 使用 Builder 创建 Manager + mgr := sagin.NewDefaultBuild(). TokenName("Authorization"). + Timeout(7200). + IsPrintBanner(true). Build() - - // 创建插件 - plugin := sagin.NewPlugin(manager) - + + // 设置全局 Manager + sagin.SetManager(mgr) + // 设置路由 r := gin.Default() - r.POST("/login", plugin.LoginHandler) - r.GET("/user", plugin.AuthMiddleware(), plugin.UserInfoHandler) - + + // 登录接口 + r.POST("/login", func(c *gin.Context) { + var req struct { + UserID string `json:"userId"` + } + c.ShouldBindJSON(&req) + + ctx := c.Request.Context() + token, _ := sagin.Login(ctx, req.UserID) + c.JSON(200, gin.H{"token": token}) + }) + + // 需要登录的接口 + r.GET("/user", sagin.CheckLoginMiddleware(), func(c *gin.Context) { + loginID, _ := sagin.GetLoginIDFromRequest(c) + c.JSON(200, gin.H{ + "loginId": loginID, + "message": "用户信息", + }) + }) + + // 需要权限的接口 + r.GET("/admin", sagin.CheckPermissionMiddleware("admin:*"), func(c *gin.Context) { + c.JSON(200, gin.H{"message": "管理员数据"}) + }) + r.Run(":8080") } ``` -### 方式二:使用 StpUtil 全局工具类(推荐用于简单场景) +### 方式二:使用路由组 ```go package main import ( - "net/http" - "github.com/gin-gonic/gin" - "github.com/click33/sa-token-go/core" - "github.com/click33/sa-token-go/stputil" sagin "github.com/click33/sa-token-go/integrations/gin" - "github.com/click33/sa-token-go/storage/memory" ) -func init() { - // 初始化 StpUtil - stputil.SetManager( - core.NewBuilder(). - Storage(memory.NewStorage()). - Build(), - ) -} - func main() { + // 初始化 Manager + mgr := sagin.NewDefaultBuild().Build() + sagin.SetManager(mgr) + r := gin.Default() - - // 登录接口 - r.POST("/login", func(c *gin.Context) { - var req struct { - UserID int `json:"userId"` - } - c.ShouldBindJSON(&req) - - token, _ := stputil.Login(req.UserID) - c.JSON(http.StatusOK, gin.H{"token": token}) - }) - - // 使用注解装饰器 - r.GET("/user", sagin.CheckLogin(), func(c *gin.Context) { - token := c.GetHeader("Authorization") - loginID, _ := stputil.GetLoginID(token) - - c.JSON(http.StatusOK, gin.H{ - "loginId": loginID, - "message": "用户信息", - }) - }) - - // 需要权限 - r.GET("/admin", sagin.CheckPermission("admin:*"), func(c *gin.Context) { - c.JSON(http.StatusOK, gin.H{"message": "管理员数据"}) - }) - + + // 公开接口 + r.POST("/login", loginHandler) + + // 受保护的路由组 + protected := r.Group("/api") + protected.Use(sagin.CheckLoginMiddleware()) + { + protected.GET("/user", userHandler) + protected.GET("/admin", sagin.CheckPermissionMiddleware("admin:*"), adminHandler) + } + r.Run(":8080") } ``` @@ -117,7 +114,15 @@ func main() { ```bash curl -X POST http://localhost:8080/login \ -H "Content-Type: application/json" \ - -d '{"username":"test","password":"123456"}' + -d '{"userId":"1000"}' + ``` + + 响应: + ```json + { + "message": "登录成功", + "token": "YOUR_TOKEN" + } ``` - `GET /public` - 公开访问 @@ -133,12 +138,81 @@ func main() { -H "Authorization: YOUR_TOKEN" ``` + 响应: + ```json + { + "message": "用户信息", + "loginId": "1000" + } + ``` + - `GET /api/admin` - 管理员接口(需要管理员权限) ```bash curl http://localhost:8080/api/admin \ -H "Authorization: YOUR_TOKEN" ``` +## 中间件说明 + +| 中间件 | 说明 | +|--------|------| +| `CheckLoginMiddleware()` | 检查是否已登录 | +| `CheckRoleMiddleware(roles...)` | 检查是否拥有指定角色 | +| `CheckPermissionMiddleware(perms...)` | 检查是否拥有指定权限 | +| `CheckDisableMiddleware()` | 检查账号是否被封禁 | +| `IgnoreMiddleware()` | 忽略认证检查 | + +## 常用函数 + +### 认证相关 + +```go +// 登录(需要 context) +token, err := sagin.Login(ctx, userID) + +// 登出 +err := sagin.Logout(ctx, userID) +err := sagin.LogoutByToken(ctx, token) + +// 检查登录状态 +isLogin := sagin.IsLogin(ctx, token) + +// 获取登录ID +loginID, err := sagin.GetLoginID(ctx, token) + +// 从请求中获取登录ID(Gin 专用) +loginID, err := sagin.GetLoginIDFromRequest(c) +``` + +### 权限和角色 + +```go +// 设置权限 +err := sagin.SetPermissions(ctx, userID, []string{"user:read", "admin:*"}) + +// 设置角色 +err := sagin.SetRoles(ctx, userID, []string{"admin", "user"}) + +// 检查权限 +hasPermission := sagin.HasPermission(ctx, userID, "admin:*") + +// 检查角色 +hasRole := sagin.HasRole(ctx, userID, "admin") +``` + +### 踢人和封禁 + +```go +// 踢人下线 +err := sagin.Kickout(ctx, userID) + +// 封禁账号 +err := sagin.Disable(ctx, userID, time.Hour) + +// 解封账号 +err := sagin.Untie(ctx, userID) +``` + ## 配置文件 配置文件位于 `configs/config.yaml`: @@ -154,5 +228,5 @@ server: ## 更多示例 -查看 [注解示例](../../annotation/annotation-example) 了解更多注解装饰器的用法。 - +- [简单示例](../gin-simple) - 最简单的使用方式 +- [注解示例](../../annotation/annotation-example) - 中间件装饰器用法 diff --git a/examples/gin/gin-example/cmd/main.go b/examples/gin/gin-example/cmd/main.go index 568ae08..aaa536b 100644 --- a/examples/gin/gin-example/cmd/main.go +++ b/examples/gin/gin-example/cmd/main.go @@ -4,7 +4,6 @@ import ( "log" sagin "github.com/click33/sa-token-go/integrations/gin" - "github.com/click33/sa-token-go/storage/memory" "github.com/gin-gonic/gin" "github.com/spf13/viper" ) @@ -16,39 +15,74 @@ func main() { log.Printf("Warning: No config file found, using defaults: %v", err) } - // 初始化存储 - storage := memory.NewStorage() + // 创建 Builder + b := sagin.NewDefaultBuild(). + TokenName("Authorization"). + IsPrintBanner(true) - // 创建配置 (现在可以直接使用 sagin 包的函数) - config := sagin.DefaultConfig() + // 从配置文件读取配置 if viper.IsSet("token.timeout") { - config.Timeout = viper.GetInt64("token.timeout") + b.Timeout(viper.GetInt64("token.timeout")) } if viper.IsSet("token.active_timeout") { - config.ActiveTimeout = viper.GetInt64("token.active_timeout") + b.ActiveTimeout(viper.GetInt64("token.active_timeout")) } - // 创建管理器 (现在可以直接使用 sagin 包的函数) - manager := sagin.NewManager(storage, config) + // 构建 Manager + mgr := b.Build() - // 创建 Gin 插件 - plugin := sagin.NewPlugin(manager) + // 设置全局 Manager + sagin.SetManager(mgr) // 设置路由 r := gin.Default() // 公开路由 - r.POST("/login", plugin.LoginHandler) + r.POST("/login", func(c *gin.Context) { + var req struct { + UserID string `json:"userId" form:"userId"` + } + if err := c.ShouldBind(&req); err != nil || req.UserID == "" { + c.JSON(400, gin.H{"error": "userId is required"}) + return + } + + ctx := c.Request.Context() + token, err := sagin.Login(ctx, req.UserID) + if err != nil { + c.JSON(500, gin.H{"error": err.Error()}) + return + } + + c.JSON(200, gin.H{ + "message": "登录成功", + "token": token, + }) + }) + r.GET("/public", func(c *gin.Context) { c.JSON(200, gin.H{"message": "公开访问"}) }) // 受保护路由 protected := r.Group("/api") - protected.Use(plugin.AuthMiddleware()) + protected.Use(sagin.CheckLoginMiddleware()) { - protected.GET("/user", plugin.UserInfoHandler) - protected.GET("/admin", plugin.AdminOnlyHandler) + protected.GET("/user", func(c *gin.Context) { + loginID, _ := sagin.GetLoginIDFromRequest(c) + c.JSON(200, gin.H{ + "message": "用户信息", + "loginId": loginID, + }) + }) + + protected.GET("/admin", sagin.CheckPermissionMiddleware("admin:*"), func(c *gin.Context) { + loginID, _ := sagin.GetLoginIDFromRequest(c) + c.JSON(200, gin.H{ + "message": "管理员数据", + "loginId": loginID, + }) + }) } // 启动服务器 diff --git a/examples/gin/gin-example/go.mod b/examples/gin/gin-example/go.mod index 939c529..d17aea1 100644 --- a/examples/gin/gin-example/go.mod +++ b/examples/gin/gin-example/go.mod @@ -1,41 +1,37 @@ module github.com/click33/sa-token-go/examples/gin-example -go 1.23.0 - -toolchain go1.24.1 +go 1.25.0 require ( - github.com/click33/sa-token-go/integrations/gin v0.1.3 - github.com/click33/sa-token-go/storage/memory v0.1.3 + github.com/click33/sa-token-go/storage/memory v0.1.6 github.com/gin-gonic/gin v1.10.0 github.com/spf13/viper v1.18.2 ) require ( github.com/bytedance/sonic v1.11.6 // indirect - github.com/click33/sa-token-go/core v0.1.3 // indirect - github.com/click33/sa-token-go/stputil v0.1.3 // indirect + github.com/bytedance/sonic/loader v0.1.1 // indirect + github.com/click33/sa-token-go/core v0.1.6 // indirect github.com/cloudwego/base64x v0.1.4 // indirect github.com/cloudwego/iasm v0.2.0 // indirect - github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/gabriel-vasile/mimetype v1.4.3 // indirect github.com/gin-contrib/sse v0.1.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.20.0 // indirect github.com/goccy/go-json v0.10.2 // indirect - github.com/golang-jwt/jwt/v5 v5.2.1 // indirect - github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/cpuid/v2 v2.2.7 // indirect github.com/leodido/go-urn v1.4.0 // indirect - github.com/magiconair/properties v1.8.7 // indirect + github.com/magiconair/properties v1.8.10 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect + github.com/rogpeppe/go-internal v1.13.1 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/sourcegraph/conc v0.3.0 // indirect @@ -53,13 +49,8 @@ require ( golang.org/x/net v0.43.0 // indirect golang.org/x/sys v0.35.0 // indirect golang.org/x/text v0.28.0 // indirect - google.golang.org/protobuf v1.34.1 // indirect + google.golang.org/protobuf v1.36.10 // indirect + gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) - -replace ( - github.com/click33/sa-token-go/core => ../../../core - github.com/click33/sa-token-go/integrations/gin => ../../../integrations/gin - github.com/click33/sa-token-go/storage/memory => ../../../storage/memory -) diff --git a/examples/gin/gin-example/go.sum b/examples/gin/gin-example/go.sum new file mode 100644 index 0000000..47ebca8 --- /dev/null +++ b/examples/gin/gin-example/go.sum @@ -0,0 +1,55 @@ +github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0= +github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM= +github.com/click33/sa-token-go/core v0.1.6 h1:ELOe0qSH1b3LRsQD3DIBg0e1VgYANKFg5H7z57Lkt/8= +github.com/click33/sa-token-go/storage/memory v0.1.6 h1:iGFEy+HtTJLOpKnbIMbgpXyKotsKpPQu6wWTZVOXQis= +github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= +github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= +github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/validator/v10 v10.20.0 h1:K9ISHbSaI0lyB2eWMPJo+kOS/FBExVwjEviJTixqxL8= +github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= +github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= +github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= +github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= +go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc= +golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= +google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/examples/gin/gin-simple/README.md b/examples/gin/gin-simple/README.md index 8cda6bf..4b90c9f 100644 --- a/examples/gin/gin-simple/README.md +++ b/examples/gin/gin-simple/README.md @@ -4,17 +4,17 @@ This example demonstrates how to use Sa-Token-Go with Gin by **only importing th ## Features -✅ **Single Import** - Only need `github.com/click33/sa-token-go/integrations/gin` -✅ **All Functions** - Access to all core and stputil functions -✅ **Simple API** - Clean and easy to use +- **Single Import** - Only need `github.com/click33/sa-token-go/integrations/gin` +- **All Functions** - Access to all core and stputil functions +- **Simple API** - Clean and easy to use +- **Context Support** - All functions support `context.Context` ## Quick Start ### 1. Install dependencies ```bash -go get github.com/click33/sa-token-go/integrations/gin@v0.1.0 -go get github.com/click33/sa-token-go/storage/memory@v0.1.0 +go get github.com/click33/sa-token-go/integrations/gin go get github.com/gin-gonic/gin ``` @@ -57,86 +57,145 @@ curl -X POST -H "token: YOUR_TOKEN" http://localhost:8080/api/kickout/1000 # Response: {"message":"踢人成功"} ``` -## Code Highlights - -### Old Way (Multiple Imports) +## Code Example ```go -import ( - "github.com/click33/sa-token-go/core" - "github.com/click33/sa-token-go/stputil" - "github.com/click33/sa-token-go/integrations/gin" -) - -config := core.DefaultConfig() -manager := core.NewManager(storage, config) -stputil.SetManager(manager) -token, _ := stputil.Login(userID) -``` - -### New Way (Single Import) ✨ +package main -```go import ( + "log" + sagin "github.com/click33/sa-token-go/integrations/gin" + "github.com/gin-gonic/gin" ) -config := sagin.DefaultConfig() -manager := sagin.NewManager(storage, config) -sagin.SetManager(manager) -token, _ := sagin.Login(userID) +func main() { + // Create Builder and build Manager + mgr := sagin.NewDefaultBuild(). + TokenName("token"). + Timeout(7200). + IsPrintBanner(true). + Build() + + // Set global manager + sagin.SetManager(mgr) + + // Create router + r := gin.Default() + + // Login endpoint + r.POST("/login", func(c *gin.Context) { + userID := c.PostForm("user_id") + ctx := c.Request.Context() + + token, err := sagin.Login(ctx, userID) + if err != nil { + c.JSON(500, gin.H{"error": err.Error()}) + return + } + + c.JSON(200, gin.H{ + "message": "登录成功", + "token": token, + }) + }) + + // Protected routes + protected := r.Group("/api") + protected.Use(sagin.CheckLoginMiddleware()) + { + protected.GET("/user", func(c *gin.Context) { + loginID, _ := sagin.GetLoginIDFromRequest(c) + c.JSON(200, gin.H{"user_id": loginID}) + }) + } + + r.Run(":8080") +} ``` ## Available Functions -All functions from `core` and `stputil` are re-exported in `sagin`: +All functions from `stputil` are re-exported in `sagin` with `context.Context` support: ### Authentication -- `sagin.Login(loginID, device...)` -- `sagin.Logout(loginID, device...)` -- `sagin.IsLogin(token)` -- `sagin.CheckLogin(token)` -- `sagin.GetLoginID(token)` + +```go +sagin.Login(ctx, loginID, device...) // Login +sagin.Logout(ctx, loginID, device...) // Logout +sagin.LogoutByToken(ctx, token) // Logout by token +sagin.IsLogin(ctx, token) // Check login status +sagin.CheckLogin(ctx, token) // Check login (throws error) +sagin.GetLoginID(ctx, token) // Get login ID from token +sagin.GetLoginIDFromRequest(c) // Get login ID from Gin context +``` ### Kickout & Disable -- `sagin.Kickout(loginID, device...)` -- `sagin.Disable(loginID, duration)` -- `sagin.IsDisable(loginID)` -- `sagin.Untie(loginID)` + +```go +sagin.Kickout(ctx, loginID, device...) // Kickout user +sagin.KickoutByToken(ctx, token) // Kickout by token +sagin.Disable(ctx, loginID, duration) // Disable account +sagin.IsDisable(ctx, loginID) // Check if disabled +sagin.Untie(ctx, loginID) // Re-enable account +``` ### Permission & Role -- `sagin.CheckPermission(loginID, permission)` -- `sagin.CheckRole(loginID, role)` -- `sagin.HasPermission(loginID, permission)` -- `sagin.HasRole(loginID, role)` + +```go +sagin.SetPermissions(ctx, loginID, perms) // Set permissions +sagin.SetRoles(ctx, loginID, roles) // Set roles +sagin.HasPermission(ctx, loginID, perm) // Check permission +sagin.HasRole(ctx, loginID, role) // Check role +sagin.GetPermissions(ctx, loginID) // Get permissions +sagin.GetRoles(ctx, loginID) // Get roles +``` ### Session -- `sagin.GetSession(loginID)` -- `sagin.GetSessionByToken(token)` + +```go +sagin.GetSession(ctx, loginID) // Get session +sagin.GetSessionByToken(ctx, token) // Get session by token +sagin.HasSession(ctx, loginID) // Check session exists +``` ### Security Features -- `sagin.GenerateNonce()` -- `sagin.VerifyNonce(nonce)` -- `sagin.LoginWithRefreshToken(loginID, device...)` -- `sagin.RefreshAccessToken(refreshToken)` -- `sagin.GetOAuth2Server()` + +```go +sagin.Generate(ctx) // Generate nonce +sagin.Verify(ctx, nonce) // Verify nonce +sagin.GenerateTokenPair(ctx, loginID) // Generate access + refresh token +sagin.RefreshAccessToken(ctx, refreshToken) // Refresh access token +``` ### Builder & Config -- `sagin.DefaultConfig()` -- `sagin.NewManager(storage, config)` -- `sagin.NewBuilder()` -- `sagin.SetManager(manager)` + +```go +sagin.NewDefaultBuild() // Create default builder +sagin.NewDefaultConfig() // Create default config +sagin.SetManager(mgr) // Set global manager +sagin.GetManager() // Get global manager +``` + +## Middleware Functions + +| Middleware | Description | +|------------|-------------| +| `CheckLoginMiddleware()` | Check if user is logged in | +| `CheckRoleMiddleware(roles...)` | Check if user has specified roles | +| `CheckPermissionMiddleware(perms...)` | Check if user has specified permissions | +| `CheckDisableMiddleware()` | Check if account is disabled | +| `IgnoreMiddleware()` | Skip authentication check | ## Benefits 1. **Simpler Dependencies** - Only one import needed 2. **Cleaner Code** - Less import statements 3. **Framework-Specific** - Optimized for Gin -4. **Backward Compatible** - Old way still works +4. **Context Support** - All functions support `context.Context` ## Learn More - [Main Documentation](../../../README.md) -- [Other Examples](../../) -- [API Reference](../../../docs/api/api.md) - +- [Gin Example](../gin-example) - More complete example +- [Annotation Example](../../annotation/annotation-example) - Middleware usage diff --git a/examples/gin/gin-simple/README_zh.md b/examples/gin/gin-simple/README_zh.md index fe6c30f..ed5237b 100644 --- a/examples/gin/gin-simple/README_zh.md +++ b/examples/gin/gin-simple/README_zh.md @@ -4,17 +4,17 @@ ## 特性 -✅ **单一导入** - 只需要 `github.com/click33/sa-token-go/integrations/gin` -✅ **完整功能** - 访问所有 core 和 stputil 的功能 -✅ **简洁 API** - 干净易用 +- **单一导入** - 只需要 `github.com/click33/sa-token-go/integrations/gin` +- **完整功能** - 访问所有 core 和 stputil 的功能 +- **简洁 API** - 干净易用 +- **Context 支持** - 所有函数都支持 `context.Context` ## 快速开始 ### 1. 安装依赖 ```bash -go get github.com/click33/sa-token-go/integrations/gin@v0.1.0 -go get github.com/click33/sa-token-go/storage/memory@v0.1.0 +go get github.com/click33/sa-token-go/integrations/gin go get github.com/gin-gonic/gin ``` @@ -57,86 +57,145 @@ curl -X POST -H "token: YOUR_TOKEN" http://localhost:8080/api/kickout/1000 # 响应: {"message":"踢人成功"} ``` -## 代码亮点 - -### 旧方式(多个导入) +## 代码示例 ```go -import ( - "github.com/click33/sa-token-go/core" - "github.com/click33/sa-token-go/stputil" - "github.com/click33/sa-token-go/integrations/gin" -) - -config := core.DefaultConfig() -manager := core.NewManager(storage, config) -stputil.SetManager(manager) -token, _ := stputil.Login(userID) -``` - -### 新方式(单一导入)✨ +package main -```go import ( + "log" + sagin "github.com/click33/sa-token-go/integrations/gin" + "github.com/gin-gonic/gin" ) -config := sagin.DefaultConfig() -manager := sagin.NewManager(storage, config) -sagin.SetManager(manager) -token, _ := sagin.Login(userID) +func main() { + // 创建 Builder 并构建 Manager + mgr := sagin.NewDefaultBuild(). + TokenName("token"). + Timeout(7200). + IsPrintBanner(true). + Build() + + // 设置全局管理器 + sagin.SetManager(mgr) + + // 创建路由 + r := gin.Default() + + // 登录接口 + r.POST("/login", func(c *gin.Context) { + userID := c.PostForm("user_id") + ctx := c.Request.Context() + + token, err := sagin.Login(ctx, userID) + if err != nil { + c.JSON(500, gin.H{"error": err.Error()}) + return + } + + c.JSON(200, gin.H{ + "message": "登录成功", + "token": token, + }) + }) + + // 受保护的路由 + protected := r.Group("/api") + protected.Use(sagin.CheckLoginMiddleware()) + { + protected.GET("/user", func(c *gin.Context) { + loginID, _ := sagin.GetLoginIDFromRequest(c) + c.JSON(200, gin.H{"user_id": loginID}) + }) + } + + r.Run(":8080") +} ``` ## 可用函数 -所有 `core` 和 `stputil` 的函数都在 `sagin` 中重新导出: +所有 `stputil` 的函数都在 `sagin` 中重新导出,并支持 `context.Context`: ### 认证相关 -- `sagin.Login(loginID, device...)` -- `sagin.Logout(loginID, device...)` -- `sagin.IsLogin(token)` -- `sagin.CheckLogin(token)` -- `sagin.GetLoginID(token)` + +```go +sagin.Login(ctx, loginID, device...) // 登录 +sagin.Logout(ctx, loginID, device...) // 登出 +sagin.LogoutByToken(ctx, token) // 根据Token登出 +sagin.IsLogin(ctx, token) // 检查登录状态 +sagin.CheckLogin(ctx, token) // 检查登录(抛出错误) +sagin.GetLoginID(ctx, token) // 从Token获取登录ID +sagin.GetLoginIDFromRequest(c) // 从Gin上下文获取登录ID +``` ### 踢人下线 & 封禁 -- `sagin.Kickout(loginID, device...)` -- `sagin.Disable(loginID, duration)` -- `sagin.IsDisable(loginID)` -- `sagin.Untie(loginID)` + +```go +sagin.Kickout(ctx, loginID, device...) // 踢人下线 +sagin.KickoutByToken(ctx, token) // 根据Token踢人下线 +sagin.Disable(ctx, loginID, duration) // 封禁账号 +sagin.IsDisable(ctx, loginID) // 检查是否被封禁 +sagin.Untie(ctx, loginID) // 解封账号 +``` ### 权限 & 角色 -- `sagin.CheckPermission(loginID, permission)` -- `sagin.CheckRole(loginID, role)` -- `sagin.HasPermission(loginID, permission)` -- `sagin.HasRole(loginID, role)` + +```go +sagin.SetPermissions(ctx, loginID, perms) // 设置权限 +sagin.SetRoles(ctx, loginID, roles) // 设置角色 +sagin.HasPermission(ctx, loginID, perm) // 检查权限 +sagin.HasRole(ctx, loginID, role) // 检查角色 +sagin.GetPermissions(ctx, loginID) // 获取权限列表 +sagin.GetRoles(ctx, loginID) // 获取角色列表 +``` ### Session 管理 -- `sagin.GetSession(loginID)` -- `sagin.GetSessionByToken(token)` + +```go +sagin.GetSession(ctx, loginID) // 获取Session +sagin.GetSessionByToken(ctx, token) // 根据Token获取Session +sagin.HasSession(ctx, loginID) // 检查Session是否存在 +``` ### 安全特性 -- `sagin.GenerateNonce()` -- `sagin.VerifyNonce(nonce)` -- `sagin.LoginWithRefreshToken(loginID, device...)` -- `sagin.RefreshAccessToken(refreshToken)` -- `sagin.GetOAuth2Server()` + +```go +sagin.Generate(ctx) // 生成随机数 +sagin.Verify(ctx, nonce) // 验证随机数 +sagin.GenerateTokenPair(ctx, loginID) // 生成访问令牌和刷新令牌 +sagin.RefreshAccessToken(ctx, refreshToken) // 刷新访问令牌 +``` ### Builder & Config -- `sagin.DefaultConfig()` -- `sagin.NewManager(storage, config)` -- `sagin.NewBuilder()` -- `sagin.SetManager(manager)` + +```go +sagin.NewDefaultBuild() // 创建默认构建器 +sagin.NewDefaultConfig() // 创建默认配置 +sagin.SetManager(mgr) // 设置全局管理器 +sagin.GetManager() // 获取全局管理器 +``` + +## 中间件函数 + +| 中间件 | 说明 | +|--------|------| +| `CheckLoginMiddleware()` | 检查是否已登录 | +| `CheckRoleMiddleware(roles...)` | 检查是否拥有指定角色 | +| `CheckPermissionMiddleware(perms...)` | 检查是否拥有指定权限 | +| `CheckDisableMiddleware()` | 检查账号是否被封禁 | +| `IgnoreMiddleware()` | 忽略认证检查 | ## 优势 1. **更简单的依赖** - 只需要一个导入 2. **更清晰的代码** - 更少的导入语句 3. **框架专用** - 为 Gin 优化 -4. **向后兼容** - 旧方式仍然有效 +4. **Context 支持** - 所有函数都支持 `context.Context` ## 了解更多 - [主文档](../../../README_zh.md) -- [其他示例](../../) -- [API 参考](../../../docs/api/api_zh.md) - +- [Gin 示例](../gin-example) - 更完整的示例 +- [注解示例](../../annotation/annotation-example) - 中间件用法 diff --git a/examples/gin/gin-simple/gin-simple b/examples/gin/gin-simple/gin-simple deleted file mode 100755 index 75f3ea8f17269a1cccb5a74c70ff44ef72c4e92c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10687810 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

b-Ztr{dS?9>0Dx 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�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 z z_uzbx|GsA;IzIN=i6!V89n$yFbpkry!qIgKnWKAr)2Fd+S}MJpd3v$}-^>_%5Sp{{ zrEfixW_Xc&>9e>l31)rWVjY96sVxW%bkUD(+50wj27(hC8UKBZf1x$zLAB?<>4Qs$ zUOKoji4KgP1=;u5H*DQPIEb=-_U4!K`b#v1zAw)*`mf}be==i1?4W2cmod_q_=yM1 zWi0&D`DGle>%o7BJV}hjt)r~%%j07>mnqZ|O~c26%~LcMMbD9cM{x?1-8MSo;;r8Y zP5GfMb50a+*rnQK_m`X#@9>s$Nm4n<^xpER!Q<(TFAyItcl;-Yhhlf@Vv=@%^Hq#h z^WEgn$40gvT}m`I=sET>J>TZo%PefNS@5Sl%s>bYHB(AY^AIOXX*w(4nW%VFl0+TGV^<*Ur_YpdIgPodF@ z9Gqxv2&hi%#mQqEbH;WhxG#i$iWuWCW2$;J#{JJ3Ydv>;_x-ZW8Ed2Sd@&(#fKE=BIJzA7+za;}IxwP9dgbp&|rP12lk z`QQHt-*iRfVGsN-&H}%PoJw9@N4BeS+7x8&j;#tdtY-iF0&_b~oZ zbe%HzMS!`f@%j=xFN$8K@3a>~`DkUI&|Fqo8!1En_gBzuG|m-)yYnj~-zf(@tW~~$ z#kiP6fcyV_1b8^qcKgRY}P`q zjh0}CetmiZ{K~5<1i)8CmA_$r)t-h|(SOE**G7DLtoMow$jvDHXG$0A?{l#AU+A+} zKP|8FH7GAZ9NqA2?LCk7=25P2oKDVA_5{E1vG1Ubw6paKSu;DSPj7kp^M>(f4%pN3 ztU!C&l-?KQJ0HuK%wZh0XLcR(6JK!;=hYY6e8FeVG%@;D4LUpHVER;R%lS3X%r5wG z8T6IX_sAjnIV-{4)AaF(mEN<6@?OohB7SH>xz%<>NAxH!`7@)fNcx$g!&xc*p3M`< zDTz;O!it>8_(he|O|HrFd_5~CSjFj=Rv)(CU9NY_IN!TI#h224G37lI9DXqU%-q9S zU4foGZ`29>e-a=Q%re{#Z#!DWb7boJF9lAf=2tF3CI+S>g3J&%rOEa*e`(Z?If z-R2`lX-ex)dAAE2qx$-avy{7v9*2sp?hAEZ0(Sw4H* zhaeM$%XcWJBxaBMyi2XfV#d9iamNl?{4>U79phfVXz_H;*=}uQ-1neMET$j!yUX=% z8Ru}ecQWz{L&V zVj|;x)7V!xrt_DQ^XkUIxX57q(_8-$*w;CuHO$`x{EkS#q3pZB7y8LV;RbICUe4;yEtwO4A51by2+x|G%x!;v49ZP!72 znZq$)Mkw}K&#~!f?c(KU$Po59e)&Ihwb-c4Lq+uRvF6M7C&6SHQU@KF%o- z?JDlejYW788qyk8^yHPbAG=S|0o;BpJ4ZisPK#GxJ7MC52iEg}(V@fDoSC~BJuEQ# zUfZ^0>k1-w5DEru0GlIP1;%-e2k^A_jmnwS@8d&k$X!KLAc*d4l;SgdRP7hsc3 zv7YY;d~-)UuOPpWxNJY`df8dB=yNIWSp&EF!Al|ZUQXVja$pPb)s^qI?kyL*@Tqkh zx|8&^n6&CCw<5F=l# z_&w=1QRd546~s~S8)v+A_GPwg#828b)n_P^`}J1Scys37R`>qo5OaoK6ZaY$;o%L= zd^I$dXXg$0q{bpIlz+B(;WrHa2W&%r$EPIt68uVqj01k2^&U+j4EDeDu*Q(JMGSr>8T!IZ24gOr*QfWaO&cBsm|2Z*l-3}4*u%`gM0aCZ{KmJi+jxrau8`w zKfl14)8rl6?9xAWBl!pH{V@adpG&(-Xt%);av)aZ%g+TzX8p-LDAl?Ey5H9c|A&S} z$BIXY78T@A!gd>j&O5ly%ie>{1^u7?;Zsg@QC}1GDD9`09aFaUtdXG}G!$VQoQrPw$EGa{86;UueKno@@R7$*;qka6yG-%JQ>>sc-oEb zDH@v%eRk2;)$om@^zU238~xC@E3dxc3wsOlXTcZ5Pvn0a3m*`S<~oPfn0!K7qbawQ z;5282yYa%E@aWpzg%$K0bW$bIQ0!!(L=7r0Ne{Nv%s-v(DbdyUcamahv=cEo-XXzg6jY;`d;!( zytI?^c4eoKEYv({bo%_Nr@trAL%s2$vS$`ic4L6^V96C7fCms0cl!$TQe)@%(TcXP z&a_#sGk!u#S0dxYUlsTE&$Q83^|`}lJI80d)#)9pe*h48t zI-NTftoyL1PmCOjGak?l=co4+!WaFV%V6eu_QXgjXRwsvM=!H%c`o}x47&d(_>=T3 z@qy&>zNYa7N2O}#@=%-N_*~v*#sL0y;x>FztWEV^G2+;KjjU2x*dB}y>Ft}5JC2-5 zrEg{MyeZJE`e#)Y9M0m*N%e77C3*_=VsF+tI6F%n9$XI1#-Xn==BKeAF+W4dK>Prv z{Sn~+di+qat_}~9UvQG>jW%k&UP?dQ@-|~9DTgj=vTb{L5L#RXo|LO)=?}A1)a{wgX_l|dGHfg$8&tNCzMYCI~V728r{d}KO=1Z|A3+Ifq1nX z%WBVq2GQ5v@j>6vrLl=tK-XJ?*0s_bMAI$}-vVBO9+};U%$DvXnLQtw{StF^>#~a8 z27XhJ+0Dr86`T#DIXuRZ*~H$a*D+R&lG)Ip=0q5IT1(t(?nuqmtk#j#(}Zt8x|U?* zZKZvWOJ|f!-1G@YUOMqmhIX9mLgs;D1WTNGp#8Ao%O1Ktpm{LTGY?i`?}1JZ6fy_M z4OTDT$ni2;Zx$SL$G~g>MlnL7$90TJoN>=a=MoKFfS*-#a|nNVMAwY}g~YZz#q|~Z zSsK4z+q%?0Fw%1sx^~a&htejBK z7I35WVJGx`bOz@FOaq_LvSig&@)wHFGIu)RwMS=gw#77TgF4$BI`W|h?B)FNC}o8# zt3C>i|0{LdeZPOl4EpZMr0HBU?@wCeFOR%JY+Sla(~?n{Hov~clPBb}9@;kaooUne z8~BO6zLBx`l#bGtxs1~d%()vi-_kkz0vhu}Pd8!PC?W6vW@vm8?>>u7WAUOT)5ZI2 zy0ZE0l1oE}pJk8f65sBxt~+n{SMMN)?>g)bi+#f$d~4`XbN=32K7ajN%O>~g9Os`e zThbe6?0&&_eP?ExIV3v2t9?b=h=6tN5nsB==X-?w#JP%1wbHu%$oF4R2H&l}8(Tj_ zcio5NH~zty4_~hi4DUXPy*-U~y>zC;+?UbjADpqzC)c~XPp4g{^XlG%=Kp}6AlcQ0 zZGLuLFdv$26W)J&9yphrL?>IQSTo^#=ycA-tKLx$?HXMLUa?l!pXA-~ab~Skr+dmP zcb|_|%yRXP`*n}*aRI+^%KN%oW}RK;zY)`7XwMl(*LLf!+lEv)x+>%6+HWPV&vt$n z!ITGQ`bTyzf=_)k;==y@bAHBl4{Na4&8&BzW7c%=)IfWX@$O_Ur7*5t%nijnu7IA) zd44&6YS$5q^M1hN<$R;-2Xqa6?15L8L%-24h_8os)TC-p8hS1BAi5ZTICG%`nIA9W zcQN|{ENkgQls&uZzQ>M!fxRQNAqrpDeyxt1(LvMgp{J2JkVm!my)Hmrcn^XF%yUoviSgazxP}_t(}(BpHlj>D25&kyw=}pgVv~CS?JQd;pNc%6XgSRFCM-L7~#Js zV4q)i0zbzGfx+k3DGp-grPlMJ(LJLXk2Q?Na@Ga(FaB+8SI~CnJyt^dqM9r5XF{tB z>E|){?|v)LUWw20_+6~G$uHMZ`A><G(%Dw%w#CA=Wa=Vh z>Kn+^2hisxY`P#a(RZ}>Ccc$S?SF=B)w7AnRrK)ZcTwg@-n(VExuaK6Msw2zkrwM{ zuj*47{m)L9ysl?0r|mM7BTP74$XN|)M>(LOe>BXqh2~k}*kaCWhA-?VrfD^CG)M12egbz4{P1o2YH|&(4%z2x?5EAE zLslaBJoaJ4KAy?54r0rVD7L^})A%?mDyy~kDrD1bg>y=kycfSh03N5%} zx5pW~7)P64rHu5KCi=b(m7is&6ieR&DcHz&Kmh$#BT||weXB%)GxW+0ltiG&Ny|@ zhh2UenQ2+wm9$I!xsCUhbi*b)9(D|E zt5I7Ipx3ef$>v`4>+%B0zsJi4_<$vN&p*Qt_6CjqcH#!*^GiMW?|+@y(&)D$8WUq@ zfgZJ1o)2%^MXmvBu2p=RIT0!a$A>NCrPUq#N8}v)O7kX>BV~Q4W%hRqTIMztw!|MB z*3#85yye)I5iN!Ajt=;V$}E9a%rEDum|tkf{7N2$tcYU1g}0Km7yNJqcBxumD#+bU z%-OXSC)rQR{>_RS@nq}yFnkDqK$~p7*~r`fhq!lvuc|up{`Wa2Cl`nU1(g;$xpEa- zS`f(KG$%PA0=CwXj<&QDLbwF67iMgW0w$0Ikl4x*TBp!XkgJJ0#f*-mH&7J8Xv?M3 zvD5bTTyiDailft{qIti+wf9bTj=|b@{`2|s`GkG;-fOSRb6?N%thIa=F)ip(`wsY` z_`cGtp0i7U!8zK8mIJ&m8^>7zl4Z!PI%s|`{_g~QtemYFd>scraris|?j&XdIj=-nBUe`2>KT8}Xg$o;W>FZ@Y&;g@cXVMF-AS03lD z3b*2)^~0FYB4e-okbTB{F?6CnOTUR8TEWdy$qcUKif%7^WnPcYx2wA`fxt|99B!|tr4ZN#p`~vS1+?PS03Fvb& z^l4<%@l+$5RQD3<&Z4bOd@*ri3roc3$86tHD)2UC=-)!tf*Bh7{!D27p2lA8|68#L z>K8A>7`yUY$!Ap>Gbz{4h*Vwy#harL#G|OhfeQtpD(iU zALstpcHO6~;gd{k>YZ<~e`8X=U#6TpwvY1L+wU{npQOBEg9pIbK`W(JHihPYnlng- z?&ckEIBbn&eGT%ig*LJUm#DpOY?OPSvmRP|8O2zW?!QrdZ}mjnv9F(I;PfQz2}V0~ z6)$E^q2Hm#AL<^QzXd(hztdLw2oqbY*K_u4DzwX=wwBpr-^cwf>Q-GQw-b1OgZq%= z!DwQVK-^x=GwzITkY>~F^n{4Sv<;ksAs$Nti9IkVeX6W z3)RorSyX@h_lxUe!$#D%T=k*)wycr$WwvK2LA5>2ZV-SzFLNhC%oi=1)JN30A3p=R416kNv z#~cw^csuodDn}`gz2C?$k3@&%>dfM*I2e zmLo^6)bn4kKdM{ak)y+TuKcqoa#DLrNtXEV6Gef&@EQl^!ja}i8PgsA^KE|v4A(X0 zKpW6|PjohN55JORqwuaddhun*QSfW#ROW@o#xJS-T7@Nc8E70qZHdT5BLSpE&QGyKV4ja-Xmumx}uNnIqcMvj@@>y1bLcY6^xt@HRzMbF!dfY8q z1Rnl9oZULsUQ=MkPhP#?7`+M|j?9t$KrF7g)bYVHPhTV*t-S+^D>EY{>0ypqbM^*t zzP-V<@tu2bz24u@?RM*RJ5G0ti}TlQoZrN~c|S2Nk`uuGx9<;Ihd+*fxTkTRLleT2 z=;G+#+c^532S0W`OaJ~hu3u0w3=@w<=8CTL_m97`{S;aF{a;{=isx;_C!It5fIY}- zwI5EHde z|M7YF5?v>IDSkEhBEG9N9-?($ckdIqykux(-Ox~^qQa_IuFtdB90}%SnhQR{9Igsmu`>PmF0I*--BOCZ1xm%KEMUw5a4pWFM)rO_)L8tnjPZdovQ*yOV)>XXxx$qrp>VJ@0M>qfxZwA zi*`#*jKkmX&`@h<;b$$grmpadw$DEY8!6|;VUaj<`6%`zdn#nt66dDx*v6*5IjRqvAeLpZE>g17hKqQYLmGBU zCb)1+APeRI#}@cou{ha<&nESuLpoP>1N_>`Z`#HVw&$uby@Th!sjFqEAe4|6Wf)s86632YOa@9h#ezXfRm?ygM3L@%rnr_i!6LE@;ir# zzY8X^54ER=`1qID&?;;4IKFAy%FCfaodK7XVtpcQIA<(QvzlHZrge&WTL<4}JQgY_ z3|ecpif5^(6Z+FWv>A`Fj*R;udqO=r^LF)yd(KTFhB4_1D>BI!YU(03b33t2zWsz* z%S6m_zAs~&@_1XJ(>8c3BgcATvX3~I&sy_XwzVifSlLwP#JoCJ5=;C@_sm{v$m+?Q zFPTG(rG|9@2jJV*^}#U*SW}ckew5^vcuPDX`^5dN`2cpGff45mJ(xwkoPWOPA^8Fs zS0{ZxkFRP9-{`*M(NFQ-1gt6XEd-fUi)+oi0O#b_Z z@Q$JDhmKiIjLb({_|Z)N-2U!G#&m$oRq{7KJ(ay!)z45tR))2v92~XNcjbhs?~~|v zJN<5F-Liar?fF)u9lGhj7nsgj^u6HRoT~|~@P6AN^hFlBxC0q6F{S&dPIz+ChLgKF zzx2s=f*b$d3boxC){l1m^JY*KUSDXzW z!VA0YZx360Y&mpP_1{V#kSjmoH+?v4-C+A9j_BPy&i~-b{PVCo|7_HAWa|xFuR{JD zbo(>K?#~PKCl0>|jy~w__ZjqMF?~Ts##i>kaBUI{zpr|M;YW1!!0@}=yD%KdZ(xXA zv}5!4tL$R>k8He;-(DDQ)jMGLSGsy&xQY9_+&()n`~iJdUyrM=CG-`!Zs3Lu4ZeFm zodmZvs|@Td&%B<#z6+`w~Wn1Zoq&P%>Nk#|y_Lsslat-#mYg`WLx< za^Sd@K8ZhMm&BaB*gq_$e`&N!j^llUkdfZ}NMOs{#48)LHZ{wvHA^o-u3?vI{gL)HY{MRryeVP4FJV7*@ZBVI zWWA;MrhEQlnu%q!S;#yqwd+yV#T+noq%^!re}crE#fu4a(ou4}9>O+S!o0GCvYp84 zXPI{_Bmbx-V8?1TZ`0nLira>1Q|0D^-=)J-Yl~?68OkqVUSeQ$+@62LkexX9iK9Y0 z;Ib7uYl9Az&*0j0-tyH}T60GrrMctc)@=tutYbz-m+`EaIMgew&$x_v=^@&B7(6P5 z)5*Gs64si@2GG6MSt`F+Yc~~FZbR<0Vh^-KPm+CtUmUpILSDCQGUeM8GB?ni$G~1T z61>`m9BM}f%fF@hP4V0IdEwr^+UJD_8s1di4LFf~_G{1YU-3I6nz+;U3m)9+;iI9@ z^)UKKzeFQrTz(n~pAVxi^y?cA&A9Zk%FHkN&zp{cH?31O`_;1FhH`xcW5q`_?~Lv1 z-%FSnnLRHI+jud&?CC=b->DxxUvT)^(+}kky)p>>cAEb5ub+(3mjpDdSc}^y?cbH$ zuQu@0Dtb`=@TV$|b++5Ts!R7zYjBkVqkjJ468&rir)}WyKL+XVD*XTN;Wzr)dJFWi zcwnEkukEG!-2vQXo7(VYPgVLq)a}1R_k+RL?Z4vg9gJV&_`#nUM>}-b0S*3Qknz~- zhx+qRV~j;{uU5v=US{=lt|o2^jJ>jU4>YM5;h!7Zd2rb|(;nkq&b-zb&tgy7^3Rzw zrtyAgKOKvPlE>J2HT#kPD~)yO2OMiBym%fSJds5IohEMD$yQMb&nX7kfqJh}w z`{m2elki(lpS}5}vVAlr;YVZ2T5r{7t@qUn_AS(}`JU!!{^l!<QTMY7iJ9& zG@=|1?Ngz7W!l>DN6^9aH`w(O{hd(0d{(d1U)d6xbF~fVZ?NGA{k7|)zmmuFS-O;b z{e~#CrZ!)}ZpkB8SMyleD;lSPyQ`m!K22!|G6wtoy2c?%^knoWIJq$iCpuHbwY78| zh@XCW8J!1i7D5X*A^Vw2xqe6Sifp3%wfl~cD}gVNeYSy>&fX2ew=ML)im@xUU2Tzz zJ&!Rh1dcZ`Uf?I(X5xq3$eHO^pckUhfaXNBA6159-5K^#NUXFMVjCzEAwc;y|DJ-BZcHDZR2-^mC^MK_Ktjdh5X*fGp%{H`NEd{k_&ov zK>2E1Nw<@&6udQON*Pr@?_On_t9Nu6&yoWK|vh z_kGZ%_+9c>yq(XSuMqm$&$-l9!#CpRy@&X{ui?AUrTq0L&3KU4(59EyCBud5uQ3kE z>F>_QU(KI)Op;-TJ!A3m|D-|qznA`KFSLO61As1WV2oMp_mEDX1I#)4u8OY-)W{r2Ip`n0T z<9(U=Z9h+SpR;B=jo&UFgoB$L9Ju+BT90YR*ZS?_KG<6)4eYm)FQoM#fj93tmjXUC zS1bn~72snc_$d2;_!tbPns=0WaN@rNPOwD=#fkCffs&FG>c%`KG@p9xfG6+xVzAzioW%b)SQeef-APKs?S~ z!~E5n{<)3t(|)VX@85&RWeaaaPvOfgD0zZ?ix?X*mNV$F=CX?wJMh;(U_pzn{1q%* z+ez^l=|$z)iS|B?JrjgK4j!}4C?E5cd~3}O;BNf19cRZ+``0(dPdmq7;*C1ThG8$m z+5;*4QT}KOXP}^SymepdxB7XEeg>@9AE=|8+=7RP}$x zus2Oy6uB-w(r@V^{p*u=!w1@LT3hur@!(uw6JS5;W%Rk4G1f80dgKH6Uh_2appgA< zNs=XRTjk0Il#@*;U0Sl=XZC?EMBc3iW;vPG8Gm`{tdc3dHL~qW#`@N1&aC-YCjHlQ zaKyJEV^@_-cixlBpz)P_miH=;d`wVgnrF<0r}5Qz$NT4=NnYHIZhQ#8Zl%@z)SoNw z!q;2w_W$Ac#quru@*9eiUtllcMUs1;qs}7sq|Od>KNW+|Hj)$VC$>ezo7$* zJ&XL%h3-!Qlfn8X{CoR4See0|eYm2Zk2JRuFO70|N%;h8;3w}I>nM6kdMjs22>;cc zjjTgxR&3AY&~i0>aOTvC*~lJSqIfBG1G(<3DZjHZ4&5ns6-8ESzHWRq=-mW%gYw+e zkKQt?;L3j`)(1?8nLNG+K8jI?h5YxnA^P^tNsP>fhBo4t%sI_I%gp0 zp&9YRg{pw@7tUu-rZ=mC1N?>2r<8x}A25&oy>jocZF|3}7?JodwILIq-YDWnZ$3hP zXohuRNVc`;GJHkf`Urc85*t%2X`tNM@W6gz7g|G*LN2RvPqhXc-{0Y-oWs7CHI$E& z%aIeX<50Q4LcS!Q)-oZF{*JR!*c0-}F|4h;V|P){9r)hbo(h>Y6tdU<-iIB`eVBeN z15R^^IbBcxj-q#Rky(i_uq~u6`m6ri_MPmil!laS>GSI%pL>m*!!UN8v3HbT?QbwS zF@@lg?_2r4jqf*Ef#yT}r4OwV|=ZNEL{5q$e{LX7%eT29r@ck-q(C;b0;w8p#4X}8Tyx+ahV{A74 z$HqOMg3QN$m2Q#@%OW0MJaywP&Cz1mq_RbSoo?;S_jSYb@D(wFKz?PDe1W1_$$!bp z4DKtj;j*kb7nXv<#pDUqtY5!lt`)4^%QyQn$tAwkYC<02>$Ky`>Lb37CU@TSUjgQW zw^TMQr5?qHOD0)66>HJnZnCZH`MY4Pd3#pF!nfJ?zbY_*#y;oL*lz51#uWcYuD9Cj z(=@*cAFkV#_$Fgt$M`DXmuc|J4z9p7aX)1rin#rHj4}P190$?VWe!bc zGNxtVQv5rdt9NddxCNTOm3hu$Xtsp8QyIRomBchxGvE0t^BwSL%c7vsMWxta$^9!C zq<=neQivZ(>s>SH#})K(XQ?l8nbX&=0K>2Nt?91<(>D)UJ#Xz}y;_~s(?H*^q3_x& zCJ%fV*ak-R@!I9UI0}pfi`VLa@gee4_i^^GXO2GG>Cb(i0~f5bcojOx^uX&f;E@d+ zlE-n)Amfny6JGKdx8Qj>^!9V)+aCg#H{Zuq^vw=_EO1AokE_usz+1ZU)1Tvg8u3X_49eCg_IjyF#8}>}8n|963Saj2 za$YRjJ= zb)jpFe!ve#TgquMJ`4Jv0=?9%59~g$#CPTju*bP>E>^H%SZy$)X9o(jBFpWsTJHmx{t zcWB{-MK&!|BBNx7xc^*xd({Zp+x`BZ%CW>|EGshSH|i_4x3d=45016|wP>jI#5iky z!GYeinZlhP8$#=!<@ZX(W{^*8FEY@M{m3^HYHaza&iuVPvJzOf(%-$<6v(^nt_=SH zc`%aU2l;+H{oaEuA-|aPyBQz&A}*&k&OE(#T=%%qo0<;1-Fxl0;YB^m-|l@f_YP!D zxnkFWX6e=J`+y0w^RMV~>7>wTf0NoP1253-^o_J9`z6fxl2Jv&eLdkj(L-Oe_ni~{ zg|pD7AP{%n)ITLs{mfzXTfyeV386CXMwg-#2kD^n2bFfoG;28Y7 z{^AyFL(Mn0p`U8lmvS@knU|STdqes1Bl6Wx%4h#fo-Zh0b!1^?YHf)xef3iOkG@&( z3Tv#C7x_%CwJ2?RsHZ#_YKmKa_IUJl#dGZSFKx(@PUNBB#v4s-@}dRX06{; za?O-Ga)Ow94ez9@G&h;d^J7{g@=x}$!5@7TGy3V|9N& z@95u$`CUobVJgo!*n0`tnbq)J;Gy`+eDsTaT;vrreaIPe5o6X|OEjFpewLa~&0*YS z;Amrc*%8V5G|EP=w#?dq@MkH1lV#4T6r8lD=-frjvyd+_=K0}^@T*m1?C@4(|Gqs| zq?NwyheibBI{NV~_+k0zQ2om6BJ$@iW9{DM^~=%Qtrg&P9Wbw89|d^lsFl{W5xx=} z6X>7lH`!wZ`js8|qknn#L5qFhQy81!jpL4dr48Skj2#?U-RK3rjenJIwou1E(syX* z&=w~L|IPxl|3xz}c42su-v$p(F4D7lhn$a<&^Es(0^6tf-r(S(y>8$)mE_j|gXlu5 zXS@AwyLH>g%vzr(^!-ijk)Z1p(806zI=6q({RCiTKWDv>a+NkTKCJtNp`K5<<$r6J z->ZA{$t_#(Pq#b1*L4V6F(x%v$s z=hIeoroWc6e49ige(){%pF3T;fV27FJ6DE1VR?9u`c=N{Px5=&dmtV*&rF0LvY!=7T!TacIs-6I1v zPbJs4Ky%gWk$-LI+G1p%;x1{oVaJ2x^j~7ji@xA-(bq^|LthSCw~db!kPLnGCOA3 zy2RwoL|y^!L!gs(cw6~0_3(co@gCWNit8NbdOI>id-|55FZ3*j>ptw9QrgP5(wlu> z6#e+RI@u>eIRh;tEt6yN$Yukl!&ZyE$K@{shmkh?zz;lR=kA@-b7;PVtKp3)wk$rb z=U0V#KF@U`@Og^*Lc;f)NoF6e-#C6S*>JA?X6HNf?>|w>oJ=-Z9`lY0$0qPG#%%12 zDE*wloL)Y>*j30m`mQ`4#jssI@xsit=?6Yj41`!Sxj8PrVk7Odn?CN~EH<*T>E%n= zn9?qDT-KBYf=21KGn^dQF&#Yk_YUe0^4?p==u?dzrpRF3-#~gTE z?`q)l)@fE#wR|AR9NTw*zYl+hY*^yWO^TVd!1vY4m6pze?^om3jOGCYo z>kT}nRW@OZac&whFl=4v<6~LynKdD@{^fTc^x*^bS=5bQ^I@M#zxtS)%HAr)KBUfT zV>5v-JY;+^~|k?P(O3g*v!f%-&E@SIM?ZxlUwK5WAxv~g=?QV zbNfDfP5Wlu(YV2b8}ZVqn{8gI^Wem#pL%quH$HC}-!AqM`M}5E1;JP2cjp0D0vpkn z_Suon{(1iU`;dP0-$^-EMrXL|ENtF1^9ttClIi<;d!NWhextw5ei2%qkp<7j;X&EK zvWLBL{ZruQu|Ly??qFa*It2E&U`9vkKcm}(=7`s}y)H-B? ziz?g4U(DR7m@$N%G0b_NF^I+lyJk0c$f?7XeP43=^&1bqynS+UA$SOOKHAO2UXt%! zd7in8?B8ylr(jm3GRVw4WTtSMV)>gTH}Qil8t2H(zoxzcJn!_2_~>MvUzbN4nq!48 z-gquF<%V;)H)6k~2WpG?%L=i_D{(y8{KdnqNOAd+S!Q1z>XaQN-91-2JrJBMd`gFp zM}HsUyshWUS01Ue(pEnMj)9ALAE#f%ywg5e#prj@hG3>|p8*%r@gd7{{OmRkq-TF7 z9^?8G=lUaaUEipCuMW7qNBdf!1EA$By4=0{KIW25u6}w~`=%hvPggs(ko5_Zum2{xQg-V$ zuAe9F+QIv%<}XKVott?Nd&U?&XZyM3lar5LV~L`7;@C69Jeo8Y(mqGppGCd{@l-48 zIZQq|{g2cC#6Dl7Wu!0iRll_}FT(>kxRX&Lt|U7@CB=~mP7OmKv5Eajc(M8CuInQ@#6 z(`SuonL}f97!&ei%|p=GCTMIaxXgvFHbG-i>h;oR7#x>@WA@VCdOY2_HjxMyRHd^< zcOf`H|C_lJ@Gp|R4*X9E$BTJ~t``pC*vgB*C$`XO>&_A84A-^7_hN8`?*2NzkC}B^ z_B!n~dWW5xrmO7Yowhx@TKC||=a#?CUI(&V&#_JAD~w~mZsh(X?cFLGqCY)uFkOD7MTmI%2=!f`8^W2Ly+u9hz^UzQ(&z0L$hEGuQK;?UXR%7z;g7Ni0 zOL2HXIZlJoeUxvtPD6C6I8hWhe26|V*4M2&ZJT?B`VPFGfac9ue`1eys-6Rb6FmP8 z-{fm7vl*k)rr}fSjZuGselP2z{gj4rAAt4`GglA1oi;OD_Ng;Bnzn&9kkMZ!_e^ul z#mYe=w_M}@8o#wxDl5mjuF2G72%vMDEnc{((>7a9yZG`J5MEV%>?dg)JkH3nT`t2Zg0-LlW#$Gl4Z<}_e3 z6g-Rx@eV%T7b=J_=Wy+#`NR#p_EDwPA77K5==aPq#{jo&x$kceedEpE2Neete-(3O zZhPS+cu2Vo6+hveWM^##@9_8eyY%i9y2-ph!a3Hw*K_=si)4q}b14S) z{)Ru16C}Cd!a(-mT+g_Z^NClP@%GOrD$x^pqoDWfP}3%Kv8$h-LD%OE#~xrk8SAc( zfQL^kVP2J&4V^lAdMP?Shc!CLdNcR9s{4b_J*+XZv&Z49aB>C$_82eqTsr?KW7YMi zNnS)gDRsR+{8jt&uE4UP_O@!F)H4 zj_A|ll7Y0Ncu67;Jq}%MVE%dhV%ki}Q3KPy`IJ4^ElQ#%@z9+f_&w>FKh(nmUSCC! zHJ8LhR*PRHTcGzf(2KX6%e$`pQu~WM?Ypw;l|ktF z-v42LKJ#b#;>yyggY-wTRQn}Z{B!y1)Ft{Ozsmp}=@PLEy$U~uC1>ap=i_K$C)1;v}Vn4^TV|^jhGB)n1vd* zupad!d3+u0b9-Wa(K+_ReL;H)ZpLRo?%w1=c>Xx@Mtd(_&tF?0wRyAQnbg{&^x6w?%u@YoU%oAO?^?xwqXEvLwSs1^fE4*VsUwF!^8K4rE>>@g@(jJ+^W2^HoU6tb zk*%kAoVV}dk$cIdO6R<-D0$G#eqGkUVS}ufKALH-mlh6{yDyp>zX$sf-qm{PR$zBvI_u5hPt6&H!=uP>%?lXI8P0{< zHkWmj(i71!$Rcz^Yo1`OH5tm!u4o*K%+@+A>4rEm+~@~0A929r;AX_|!DdFJ`Zd z0CbbWd?C&_N+nP6m(~3VSxVmnl+oG<$zh$K7PNC-+q1v>P>scu8hRWtjGe|6EDa|Y~bM77G8YY{Tppy{VB@3wBm*Hd&*nH z3=&r4lOMGFF}wWuOP244S0DWz8);ztVU5A1TL+JQ{Acue|N6sTXxtwEs7Q>m#9DU7 z^D3KS6Dr|p#Tm4oY~Y$e@p?8q)#c%DFaCP5t!)^6$n@te#ff?5r7LfFyKJs0d!Dl1 za+dRNu=0|z(S7Ja=87Tm9K7Fo%lE^_?#~(ZCkZ}YeD%8g92#M8_MFP|Y%o0c_s;`U zWNk0!!Q10vpTROK@&t9nWw+7KD=r8rd{Z#HI>*@ntvQ4U#mFt z*seJBcxmeRKicw5Z4T(K+G9L@ZC0{(1Z@)VFm0-yI677~ySF~oP0ray~8s5e`$?Rd?9Fn! z_aSl)Xus(%{T>}{!yDf?-`9J;=iQ%e-yQ!k`}^;CzrO_h`t$)dz8Ck#SJ`6wB(Gj; z%Nxo2{R^y}+WX&f{(0d~%(e*`+@xHq*m0|SF1B+N`%iuo`A=fA(I{2ZGWF**YnOJ^Ka z{F{Et#*fL?qugMyR)4(X?W6a~=>zI}#Hnwvdc5C9k;gIYbm`uBmG+O|H~rx(Is>;5 zcJI_%=o>QI^mp?8XDg5V%Nvz1|NM>0(a|^5_uqQTj#F9e71>MjQz}oF9El6JqwB{o zPwZqcQD(Wb)0$uXkW|RA)@n6+~?3w=g;RO7bxy+C9m@nkx?;OYcVm$qFeOPU>jodkP(p*jSbACSW z9UpVMhu+=x?ltq5epxPmSnO)6Cy(=m%PKjePjH21dn^3)lI!ZKbqqRTj4|wHJ&S^K zjrXgxWya>nZ}~!VKWc3+wz4AMKmKlCevNl7^Ngo|vL|#-s}~+Nzx2zdB7Ef`#slmd zOUP02!cyb?HuZ^L-0`g&Y`Z;bkj zF4k>T?uvNnA~bGdXoJMnip#NspgHZwo&YAAvo3~CQx;X9RgQ?(@T*SEVH=(&=M~x} zpUkFl=CG6Cd%ZVhn4=e+qzv?ObdSA{XRasakmrdxR1)`ELfk8xxK|}KZeZcifQeO+ z*Yh-cd%yM#ClBzXoyXH@-*30>u+Q6T<=(Un4h6$6IXL;@AoMaHztn)WZp=esv&kh> zo^kXekpsYyc<;5~H`J$t`+Gy7s&kv)rU z1}~{5hd2TK#mG5LfP?(8Fq-cMf#c zl2+09I&D-zr#eTX8r*5j%b-g=W6Xz_G3FM=tg?&o_2gfCduv6&zgqq(6K;4_v9cL*eb8T6&SQ)o9qU*;|y$5R<}8@ z)pHxRDF(LV9N6mp3HDV@05|!8GU(J-{^p^kn zO=pXd-Kt0J%FZ%;*=N%P8$PG}IL077QEYx|&1ymR-H+ocz1;=(HMZRiD?+!lj_Icf!;2E@|JPA_<2dc zmE&@Hd}Jg0X8+($;m+2_CwS-LPI&u}gSVZR;CDOsuHT+F`8r|C#Q4578D5&y{giCZ z*fiuAwv^)2ZS#oVP)22i?=*CE2fCUwDkm3?LszqAZZf)h!N$uYi|<-xboIUP(BzDb zO$(Ic0*ohT_?q-gaJn5hod-_m(Ys^V%lEv|8R@IL9G#)(ZySA_Zgj?ZM`!5$>S5N* z3Dn!+=!c2a+w17#E$HJd)H?wkyam1T@4!I6nfG1wztx|GmwoX5Jnr;IcC4$9ze@~B z>pNo8LMFE>F`HOjA@*sQ-2Hi>9`#@F*!#aY1{UFcV3<}qW4OmNhUFh{3~Tu2L*ly+ zFy0lEO^5Hs_$mu((ec__TC}qo+Ia*V4~54veO*WHGUy_0!V*Zo#OfcRJn zdFer7X{nrXwv|}8kF)SJk5e8}oO6Z}AR)-~N_&>bvau93S>PG$K1E!CY=O zcGyzGQ@+(L@Qieo_x(D+qeY)|Y&Vdeg$yQaLce6fK_l$qhM%Jimj-Yod-btIG^Kh9L zowl4g?Q~)ZCU)w~X{S1|1y{!oh}(nnHt0a|d+%KM!_m7Yo`FqlV)x)&dzOCNS^wke z;|y~)bHDv28|b3u{J>1II)H9VjKFuq`D)=2*31C*6o~eI>BtTk$WhgSKi6E(6BK&j2p&JK)0{DqwJ0#xmNmSAeOHaVQ2vM7)BFTG zYDN%wvDs=pa)R82BI-By^jG(rsZ%<6HqQ@^WvvsmwbdEF=%J18$Fu(H$Mkcv>1S}Y z_J)^zpyzh~f@a*ROLU?4=%Se}Y<>WJ$PZVF|E!c4%%i|V>kwn$_a$<&ys*ioPWc)x z1sm`C_k+z-z{V}Bwp=)A?4l31Z`woHYg1n8H#W#&Ys#2N5jM#Be;DYad2^0Uw_l(x z%`sg1TxHH48AzXIua~Pu@3x&>#++UL(l6s16O8hi@3%n13xKa|N7<;=HjK7wj+YBP zy5stv!sshWFzU;N122c5&tEeh^+B>@6S&(1?%Y0={4e#1{kaCD1Nc zoCaX7=RY>QoN8$LkVDgY|1f9XL*G|<>k*s=t4Gf-RZsa_X*1Q%8S1)>@qUDMU7P4; z@?y2F%G<{OOJ8sJW7>=z)c+Q1=cE(u)|=6ELG(UGmH+t_62{61eWbSQcJDTl62 zPBe3Q`e@p@WIY^tOdo&+n6XpoMP^fOqX%y1TE=6eBMs*S+uUx^2IZTesxq^T^F8bB!&+ z7q+nbjpTdVt(;4YeAk{;qK|TD`C(`|9huf?bsU-GOE>nQxu@^C?{wt558J`)p*0OW zVpFxu!_KC^tZBT;=niBqv7e^L|A=g!i62$vX)o?6@6x{7?V#O>(2iht(t(}MbCF)q zb1&>pIkPVX|P( zm}89JJMJ&>F7FcW{*HIpc~3}A+j}c(O;Jk2$iDcYvp!S$<5}DP@aorqvGG3y8?GR) z&A{K`Kk?m?u&qzTcjKtPPoJ24^nw0k?8P3%`@~1G(^}!v1HjVQ&e+3obf3+97gT$O)FN913)co}Bd77l z(0Z~Br02U04Bl%4%|lM?09GzcvF~Rj;5pS}+kC-3U$LHh>v3&8V`C!|)Q;9?e94hH z?%YS;?MLP)pL8Ad?sxE{?<8})?|TA1p_E=stPunT&1t zATW{48ZyXp*+0VlJjNkkuj064ku7~O3C9;I+3vNAlGhg;lMn5;_E|zNepT|v_MyGC z@V)ZqO~uL6kb}sd91s7kVy~9L;*I&lZpYy_Xhjx{$7i7PD<%*hZ)aXNkvMDze1_e4 z;WgyfB=~CqYibu<_UtbC$L5Sn*^LZmPS*WzDeM`l-^PZ3hvl2Jec86(at87B7G!?4 zBd4Up$sZz~XV3pMXY-al@89ImzUJJ}+RR6(S2QoVpG%w1Shmlb zwR?R&Z+w-ba_N)T=bh*Hyg$slZ{i11EHcOGn{0LbD#T+d@QGwKET(UHrf+`Zmr&o_ zce4#&+H*X`Xf%g%eG)bFP5qjUeD>of$)-)5*w{t4bH3gE|Qe$3hr_zW6> zW|mlmzfu{)%jkhW9CgmUbYq&1zA)LkmH@83o!k_Zrg+s;R1qZEL(7Fiur(~CE{!@X@-v(_Zpq~!%(%PYywjWvr z_oAmdvF)Cq9Jv)UdMW46v*q&b_^lf7gGb28A@93q+uD`glNr;!YbSKe$DLrE;b)Xv zh7F}0lsGU*0IL>YW7cQ)%n#G;_6U z-{|>b{B3$Bf5`Rt+=Mf|zZaj_Xyt)iqFsIKw)-lwTk9a(u)Tgp`{O@~?>|T$2jkpC ztoS@Ot&zQq71=xe@0_u2W~_=4c*i=Dv8t@%z4_2xKDxV=dfTw6c0+r%ecNw~df)%X z(BFG)(Jk;sEA_f%JAu~(`g^IdX&i!QEn^Y<1K_O=dn*-(V||Ql+;-?m9775VX9cNkkleY%73 zzsmSUE9;=e8x1WEUHuxgCRV>75^t4?3~KRiE~2arN_K ztWmurzCAqTetU{XM`Mro=gR9F{bhqUi*t@2_}RM;zCDe+6VC6|bt&ifO7CjV zbjdyozR+64ZRDBduU*nz&3-3A;&6(Cs-6RVKH5MRHq)Y3=qP}!)xLvz&l>uZWz0P) zm?J;Je$%q^l{c@v0=?It+m~U;|0w$0o@3iNks8}v#-^MNThiPA_sM&cuhl=_P%e<- ziJET|GM|7h7yS-fB!+B_B3BD7t4n%Fapn2&xgYth_%L?h1(nsDj3+}*mVU>U8mrkA>=qLpso_9uJhE@>eS`_F7yrQdXaX{bB2n} z4plqu?-HNC>jgsx-@4K$4AdMSD-9fV%iUV>gG(SL7#byPVH zFWUREox7tyzxqb%9GG9-FSAzt7xEoj-zyiqIS$CJ!*}l}>iJLPOgLcMl>^`azZk#a z7^~^8RTt}fyzfQl8f(tAoQa)1ERuuF%H?;lHB9@woGigEkPW3AyfkoY%0(|%xpejm zIEPGG6Jzh=r?EwH;PV{TI=Sy+*hH$^)US8hBTfC1t@1CDSNMe9iPv4^`H_P$?iVqSLtLQc#}<*Lxf^53}UIe5>m(0E<>$yz(`)6dW1<2Z1f z!+Z(b;p~1ZrMUum)bby7yVPf`_r{K%(Nbp>$bZyQ#~y*$vR-%&CS!j2srSm5!PbAT z8u{M-NWRF2r1d@Ox)u6ZB#MtHn!wIOUPsHgg5$-sAz1$I4RDMd?L#iap_?%0lN5J^ zYr_|>-%&VvQ&;Kqjl1w2_NYu2u>*4@)-0L7gs}(mLnb#nfFD5lNR3 zkrTk-`SR>pn|XHvxwM(@-Lk0@E%xmTcHKZOP8KreBzZUbh8&W!^DL`b`}(I{+_J3$ z{i3zGnrp~r%!u99c&dEDEZL&z@60>bJJGuE0(6(<^IyniAB~f|Ys2O|#{0^_+9Rf5 z+C!eHJ#SmycFLo7HL5PPqw|N{cCa^1JI8sKpq(X7JDQU$VVo(9tB!GPMUE*pna*_? z?aXCNt?Zu=WKS9B#pLH`JmYAmraX66G4uj$HK%f92;icwK-TQC_g-Pbt7y zHjEz~XXf6b5km_(v)%xv?)$xzb>D9)&zU7VXp?0*dCj){XL6aJwe!;F(Pzmt;qYtV z(Ea`8OW^Y<#^w5mv?ks+JQ^SZHHdJJ8lGklKDc!>Nm7oXBA zj46Ept{j~u`?tWeFT`1A45G&iVLQH6Z)E0GeetctVw)bvqeD&{8?9K=$(7o#GMzot z&~N01o$SB|p!TJARxy7=u+HeDALp&k?ggB$u6dieN5ANv9Ium%|4F~|T;HCco)zr3 z6TJ!jdJ8g|*jalR|41Rek=ex2%8-dA@U_#QZ(gwVcy9%3m8UUxMJ`(%MYXY8wSTeo z#3c5gn6#l{$0T2*mP(t%rUUFF9rMWBT(QmD`wB9_mRC4U0^&Hk?!c(^swPPGi4{jM>#=;Fx?_T{*(Ye*Zp|w|ALz^dM46U7n-vVFR8u`2A|49Bu zFgnGaZg1nWbn8v7=W6N!->2o@$OPZ7^37|&W;b~LvcYra>fckp{G{$X8^5;C?aK~+ zRpxShgG2vj)7dU-sKF^Y^N;@l|H13Qjk`wpH=L_j^@;9<8&3C)W2oOA#}sfUo>SRx zV_(X5+Cp3r|N5x-K3{=+m-4l?!8>oKgd)q+ZYYQ|2eIRZsSQgrh?yXtT98}GFmU^< zy4hE;A-=DuK(KP#@V?)&ggyD7!A>hRvT(!kzJ9JA1m3oc$ZB9O4+G!9zHwpu6=3^w z=r9?kqQgtU@?XG3S18rcHhE@`zZR_8^+WikV%5jH7i@TG_X22PL2yWIgKr45Fr-#6 zyqs?m$c}1kyS9$v0-eDmIQ=T!+G)nlZ(9a9>uDVM8|Tcd#7cYLmOL+Amtps=3>ADP ziJp_!Yxkb(TAy}{gk;e+YH+7sOs=T1zqBJykei9AN-Jc_1b@U!}w@w%R| zcQtyA^&&k7k=qA4uIC(x>vzaI**-06)I8d?__mI=wBPr9Tf6tTm=-Tvu(0BM07R@CGhPH~i-t7D?<#P=(;oOJ z4>NZ4aUpX)Y=wk!FXoXC2G8w**Mu|EkASW3wGOrSs8!Hg!QLsdM=Db5duKx%W`3C+ z5&i3X6zfU74`y2t=|IJ~4?Z(#4J$8ZV|Wglgc(tBNm}P9doW)D{~+Hb7Mo#Syq9;-Emts ztE~RizfF|$zLWj&J>ah#Ji*QV=hFKrv%gfozr*z{2xjhFWI27){$thjO*W|7((e{* zkQ!uQ1@fwt`FIWS;}U-R_Fsny7m>OpV;~c>6)UW&tjoBTqe2(7z{gjI$I!QnW zEzqvUY=xj-_(Aj2T<{ddmNWQ+7Vbv&h>l}v>l>xNl$WYKsFV+-{onoM*~hVqm8-9O zBtLq6Y%(--+PM+aUx@I($eNqdiJypll!aTjRt(SEaJ(iQjvCQgVHasI`FtZ^pie7p5E zdk^Rx+-oeZ3=mv~c;MpQ-%{lUTTfmIZiGWW^E&aVyT&O2pU&Y7CwGmLxra}6PY#sf zQ`MQzH`UA$H$vYz0qaRUQ$32&%FpN4A>BJC>3hFtoq52s&ip<5D?4&e^x*m-MW62c zb(Nvf{`srslkrE`QzHx=B3IRS>68D`+So##LANHC@{vlNpU~sZS9C_fw}aAIDfKPT zXNzRF_V~m9H@I=R@V=yQPb&vE`MU z(9YPx%5Mwz_jiTcUq=?Y{T1!3^Yryn=UHUH8_D|K?jQ3S`d6m*z?aEC06q)c_UOZV z_?b5U-qWUhENw~h=aj*1|6XNAcLN*gOWQ^WHEs}I!KwB{W$z#M!eIUhE`_g;2%qR^ zLz5H2%wu>jyn;{ZDy;|I2XAR#R2QcorO$5pYV0oicfgTLPOhUPmjt(KJYz`4@1#NO zBe&l-(eGaRHwiC^~l3k<&i zTbExZ(00o{&2>^5j?S^qJ23p?z`1(t`f~?}ogA>HM)sC3>z41f3Yn*MJ^9#q<7V)# za(E<_^M1!;=N%iBviowK6$$)f*ww;M6uN$#yi@HxC;zu}im`>na}IvO!q2{b{5(m& z2Jjqk%3;mIy5b~Vr@0sSd2W`62bp*M6dLQ(Z-db@eG&}X$)hVXw9!w`-|cIAAU&&{ zM?CFxICLyss(*d$8G7jVhe}ua;rGSx^kU}UWq}(C!uX*ilXSl%kY2DjJ3X>4EoAn( zGUKjtbiVwtue0Y;+J?sAE8eRMws`szy;OgUKYAd4N&ZO2?3O=({?w#cGip-i_p~D4 zWiz+Hd$I$>b1p4^Upa@+PE7JjJVyVG%!I!RgkNaJ*uLOA2A<>CaEZXW#+I^vS}zp6 z@m(vt`(xT(mX=;1TU_V9SJJ-nPAXF}2IWIH$7_LS%#tU`_RJ(>zkQ_7*Qqfik9Rp| zf19!63t5ieMY7Z#=TgQgd7>OE0~5wtlMZYccOLT@SB8j(wcoSKsjdpfVy@uR#-T$$ zif7)J7RiCm>XyG3hgW*W^9v6SU3xlY=xHGSVoCDxTH%Iq_Q^-##*vRKYTwyQ-;-rx z8DnY5>&MN@)M5JV&PCFwZ>VI&Up2fov!B1-Gyi%Y{u)M|RcgnhFMj5>6Mip$o%6Ia z7=OL5e7lvtF1BGHIVXObgD+}1zQDQo0_WljoQp5;!1||mAGla_?m$YgcAOP#uExJ1 zSzN>3JT48yv>sM=gy=%BLzWp?wK&xC*WldvJ|y3eUy^Tk3C7O+P-hoc<42Nymrreg zyn|Navh|0e1FC>MdQ3Xtu0EIy)IEmgN7^{J&jTCLePSd$Gzh(9;2-hMhmAgE9Mxm! z7d|@ib`ANg2ao~A_F(Lih5H$^@=|N?o3+u;=dn#5E??QL+`fm)Ct!D^*1O~CfYuU$ z_4XJTzs7I}V~~88T&bBjzh@kCA<2Yx>T0*vo!iQ@NyMQh6^)Ec@TJvejj%4TN5i6a zaxrAbBt$1={q%Sn^<`me>aTJzUzkg$_~o>3+MA()x-VAG5@3>t z-tp4!<$bt%Fa73u+Iv6xtv53Hz4}>pt7upF5G@wEbO|OLa8&??nNOGz!)4EVBnCsiI8_sor@3d7byW1ttMd#AV z$ZyegnHjh6VdM8SeKGREwS%cU2K|0F3GQ)6Cr4-W%ZxZW`Pd-vcllX)H17_3FFXuC zJ1}v1^H1cv8{SNU$$Q}8yCTv#Y(wL?oZxN)6L>c!o~7UT_4;9Q-3NzBRT4~CbNpVI z3=1{hJQz$IKHilC7xD2=fz5#Vj@hFl2_8xE&4tIm0T0O>!*|HLHgLBRnKuuaHxHRN z51Dsz{qwui@p-2Q(`!$1{?5bc>9rZeKhTxeVtXD|d@sWjuTq?9h!dyMo(+m$xUsA; zp7_)dCw`$a&3wPr@wv19_VM%ZQhuBt%Q%579ZYS+aPaaO#o8S0>}s(Su%DJjshgM;31%jJ~Vv z_^WM?_pdM18bZVC3vJsZm~Y~Sr&s*f#-_G;R+Dg<#{6#!zT@_J@Hb=bU<{IlH5b$S zY?Ybf1>}XR_ceEHorez%TU|LPZNThcd46}xyvip0*=vmL1zxI$*X&Y$x$%Y0 zO?xZSZ2R262N=OCu6=%7Fgo5Z3tpmK+r}BFuOxHh*Y@+h*FWLfGlTh)@xhuspAy)) zitD)cS`b<=*+cIDEKJpGegO15Vv zne`z9?Je2FvU?YUmlR@*bC?H7k0#p|8Z7C(A>O>H}pux zYE9z};IG26{-J|0bRt{RN8G!s6PzecoHt_IF2$UlW?V+rv(~GI{IHIj*gpYUy%yMr zU$y=>4ZgA0AcV}?&#h)%Mw-d*7r(mi>@_3y`p>P-x(vlUJF$CJ?-1y0h!aOv8x=w8 zapf)F7p&d&EqJ$N)ivG8alvgHUg(RV5rb}i6+N2H|o_^XDGB=sZi$PJf2Y;C*P)_+gu@jOZ&ITnPA;;*y#9vdGf#|+7+A* zdD*6De&mb#n3Zl_7y_@(2A;XZ$-~5F!>m0} zz9+s}Vim;q$jSOPYcoxb{uuaSZ7wF;@yxaMxl8vf27K2`rtnRO;WzM$S+%<}it z(Eb7DU#)q5;r+05{bs*)?f9u1n_fXTPhl+Mm(3|?lW!=CwTA3dlTA#4*wz#Kvu#wbAel=Uak{apk7jg#W=q0T+#EFkTp zR1TaZXO)xS=PaPSJ;bdz3#gj2fXun_cap1V&g$|v=zL;gT%U+zBaoMSh8Wg1KY2ZR zuQ--sfM=qv{pXAUelobLy2L$WH2m+3OM8a6@ar`Gx`FyGfn9uvy!m+nYkJ!je}Or_ z#OO5iE_zV!{L$MK;=av*GY@7Y<*u&$+)vaNyhT0f!^Jo5vsdwx_L*;gKTX zu=-MP*k={A9oj|?sE3-LZwaNI-FE3M=8XkTbaY@ z+!ZsAVJzzzb162h{O!FJ0rEA-+hEK_S5|U9gml78bPMuPzELx;1a`56FCsr*41SD3 zr+=&d_R;e|+sMVUX!+qm#x3p@5>vXlP}oa=dsQje&N&bdQ0FNjV7;*F$-QBZ)0rGi*(&TA4Zpc z9NkZwl2Hk4YWaMsS@%)}-zY~*lAI(mrtA}pXUkM%9>=auXx32>mcufKC9LpliJCmopOBid8Y1wS>v#W zx_fz^U=Kmjn#LNH42Jf^x1!rA=ruR5rU*EdvL3exIB9Q1KLHc&@YlvqOC`Z2jNTTeuYbK(CCHZ_Icm;njG8_ zeKD1~K#JL`TxUF=Sb|?MklJ;OJ&FpMZ}_ld&>xQ%LH8SH*=r0oT^FLwtcFZryeXS! z?3+`?*_z5BZ&NOX(JQHD-GKK#T0wvBN2XS#6vW~E7&1WiuX4_ePSBZFGl8dgTJjBk z#+UFUIcSE@P23|Z)UzCYm7PXj7-N?lNZijllKs#;`c3Om-^}w5u-kqC>}0pK)fLxw z917Q;|KXhaSD(_kSn1qna6g3mq4jOhY1>NbTTMT|%C%}vL1Igw;H`>KPja2J$jMZl zCf633S_ge>1V-{pwIR!1;oisnK47JH4?!>cfS;agy_W1=!7xhQG32*s=q6WY9JkL+ zkJA30l=PYG<=ErH7Bg~_@e6iGh&`d>PFs~@Bc0_o9DWZ?({@yufV1FR85ql$C)r< z%dQOKDV$^QWGw72$XHfXaBs%w85#MZo~u6`>bb)Q|NAn#SX;5^j?z%iqpY#`7SE6R zhIYa4i?Xh@)>!ELtefpU8#`x1@7Olyq38Bj*sm1X5F@8Qj+~PJPB!{Sp=XP8JlkFg z6+BNrl!q7#6URq(oQIyUrAM`a+Y|Il{He9Af?Fr$#*bs)(~ok!g6jd^!vo_dF=ue= zVvVY|F6|5QDm)eoWSTlM^R1rTY&)MzbE$80jzXMzL*zykA-59n#4>n04YaV9*G@j)Z!p%F6|qu=NAcn0sf|Z;djrV@`i`BV|Dz}t!#o3&HtvzIU$M1+go8RC~d2s$E zw0)zsMsm?l9pTJSQ<>KG@J{Upps6BbTL&86{+$g=<(rk+wHo;Gpx%-zEL}J*#QFvDVp&0Vucl@3M|DK}^{I=bCctRuxe*5E> zdLMkqoc}$fVeJ2*FMYi1Z!r1GY0yE~Du~asd2QuXhu6X(o`njoPU5e=_>SSR{&m|I`9;l^U726E}=cA*oHQLkb0C-*jJ)Gc-r4`G3q%K&a%zgKU2XtRe z9m|&Z3aI1%^7by^QB~*u|DKs#0R;;cE7;sXzzb@j#1w5N7r7{2&Vkmp+LACqK-5aL z$9pr7AShZH<&+lM60RD&lv1pwmqP$WkzTm8)>GRu$%F(%j|6GU0FwXbyY}9hJwpOo z`}^m4^6Wip@BOZKz3W}?ZM|zPv(IN0bylI5tHsOIR|PLu!+UedA&`vA!xo(b-kP7N z3^iGuT0?M1@J>9Dh};Ox`p6foxd>uj-qac!c_6=w{iNbI?1=y`z0b zj-6}s*g9A5e9_^>7=Q2IJggI%x`5y2F^DkZG zgYHK6sDAMC>YfLCz?&UGqkDv(^pE7i=UkoX&~A9jZ|X%Cej%cKqY;b;)H0GWds-&jin-`Yr|6GI-aE>wkc&srMZ0bmE?$ zrrsRnwQM)(w8t;8$64z5QvA$5&pZ)dBrX>B!QaL7<0kr1xv%O9uKX5$$@vR3$GXcHe=+c4!p5k&j#LV zz9Ua|owaIsq!QV-?dD{9l{oZzDMcQccx+03md4E-U!OwJK=Rouj~D-iaZLL(UURU+ zwm?tGC5zv--)zS_D$r}*-)_IE$f5) zLT986CD+b>Tp zQsYsI<%u7DOPdOaoiZ0`Qn!kdYKWjlKpC{vJE}Pw@P1D}ES1*lR0BsaN*1@=hf~wI7?>dJD2J z`WkKBjokSOasWPS{=MV@>)`%`4B~ea<;uywm|XD;`mQy@+MuIL97m$pE)}zbb`582L3EY1v9A%&P zSldS14Gn)rn_secX2oZqC&VYB?|#<4L~GI+e*tt(+S;z#OWX;)0KARp6)Wq&wMRN8 z6&&f<&|)1KwVyhHw_(`wV3GEuQ2v1Yy+^R$ihbqnD~R*F13owTI3Iv>y2sC$dHDtB z1$R&Wsx_;Gwy%}lG|ZY6g+C`>Yt2GGPMUnBt=kXK-ZyA#2XW`eDQBO8oho~kGT||U z?{9^_Rd(xrLro5o*2$<}4=G2-&)fNh2<+GufB*vtzT`Pp%KNIiInt^VqY9&1OCHo!#j^&S{@y zpVQ8n^J_EMFKlDVIqiz$?PdMU!|-(Tjo9(%s%6+ZvR^eXuD%=u+)VG;?^QNT)zw0* z!V8miEsrWMzL~gcHFinU5XB~}4Fy)PNH$4;IffX%mhuHUYB;C0uU|IQy4pr!M5Ey) z?0_icG0M%E(}fyi*23E0l@aMu<#m|cxGk(t=9z4u7UHFQ(V4CdD?7vRu%n~(%=QJc z*5*9tZ=b`NM@`$UqBYYiE?4}9eI_FN7^fWv1GA>%OLe>(m^B;OY5I^jD?C(qgt;iA zqb5kFaDF{{r0j(hh?Lpas{RF#7ewt*T15@)` zUYMDDdxEmRy5;LQqZ&H;C|CVnnAZsA;lM2BA0~Ai3C!A*g70r!7!JM%(Rpo@ZRH<) zcUVzigYP?(H&GVl9vNEXtz*5$$nn6eAUdb5ko6Mi3*o;X{F%2XZ2i4ev_7StH-YzC z!9#bb?Sd!Ts}EX#&whi2!3NPK=XrlSvT)MM>C-Q7xkP=JVQkZ*A>ygXj4*pQ+TRA& z?gf_iVZy#74<&tO3vg%G)|$O)o^;!D&~DGqssDM(yzS_qUDdS3%M%*Im7fmp`Ukl< zx*q0g`X&<|>&OJ)z+w4{Km=4^vKp%1v+D7y9z z#y?FP@8D)k{pc%i-OQi{5rv=3-h0xF%13h~239eTzz@UL; zyR|=C>GaU$>=W{2jPgp_m&aUC9`B={W<}Z0$m9(;-?;P}pRyjy_@nThY$El`l%C;T z%^|Dk_=Tk+~RT(K_p#D~%1_ zf((0`GJDL}vE#+EXXp#XOSNybY;lc|z3}Kd-Zf($J@!YwHGKeo?$W(%DERjG+;2^R z>GrGW5c1HWv77N_&+jDD!}l2QWoKbe9Q||0V&v_M>bu_J1@M)Rl1W^`KPcP~z&4h= zvDY7IPhG_tGuIwr4T9Dmn{fm``I*bmdvoz=&~NQw_`7C4&*3rhqnx>Bn=WdD@E_se z@6PwjUwFjiVkYJ%o5%9*HQ-9FQbykHv4|$hpe@!snz__2zv$6cY$^TUTqhs->`mpbe z`jfiK6hi{GWbX{%H}PC^AL>*8rL&g^AC2QC-r;a$vzCK-qlTs-R{S#H)t!sqTfsaT z?|e!1jsVt>VEjM1H_xIv8$G!GIz8iTb?K)v;Q?HqQ};EVdj0UL@G5bhmGexp;B3Az ze0sNhzUuW~0A4e=DlQ&mFP+~3_hR1Z#s57S}y@3Vac9oB* z{;UTt?|j@;VmfO$hj|S2uj^GBU)iq|8rrf$_7ic$q9(qhVUHB+V(Y0zQ}K}pKrOGyjk|wS@XkS zd<@sE_%a#VZ>P5}-qhC@Z|?7lx5ToFmhVV2b7IZ(Up_gvmB1RwH-8T$&wCsrH%&g4 zp6Br#IUm=(a%}Q|AwJgkQND|6omcM?>M5a~68tXw*VwqC2Y7dC&~MJ|U47)PCl!aA z&Dg8B0y`3XYl*X|E$PsE&84NB6$sr&mYQ{PyL zS!wI}>@Ik#Wo58vrbp)5{)at(XYUEnw{!k38VVGZ^t9)o%NQ%=$o#9Y^TuR?a|oQ_ zf2`@n(Ga+Y%CJp1Gm|xbqv89U*RA#ou_vQ9LeHDn?-;-IFz+q(#;=qR@0$5v*U^?S!+_O)Y(PchterHloQ!{%5vxl~*O zJtECHT=9RJ3slZk?-JiBV7!Me9mSq|d**As&fHq^!SK;;AqQCd;wp|)dpOuI^}*8J z%d(WuUA?|0ckYsCA>(~ZHZ~tPkw1PIzscJl5pvixuH{!n3rpgkA;(?UrY+<7hOs*~ z+@QV8s*oLOi{kT5d+c~v^V{eL*1R;qyGFOd$4%&uy?o!w_if0OTtjco#n4tKc2chO zJMzzuW0NsPj|Ck1lsWW4KIMe1_NGCUAO|*v8YuW$0IPj`yd5#k^m`K6J5ish9bz zcFk4Taf)p0*dExynQL3$FAeT);N!k=@${|F#u7_t0G5bZA^6vt?tq!RKz@i2nr3l*9Y72P7Ld zf66K>`5<%D{LVVun4{KaWv_kYPxy1-EB-NS>LeGTbqh4g$qoF`&h^uoGdXK_VgE^P zGiTjk=7Erx%5lEv!;Zz7-*9XZYlyK$E<`TmQx=5|mhVVm2XS*_TR8HgfamA(T=6II zyDt}5=!1vgf5XrJL?(+~@bn`1^?mpIeztAWm+yP<{eH^5_R$%XM?U~o8Ts?vd+nnP zJu3@0)FPjb@ttt1%Q`Yj^557(j3XcPXa*lQt~^J!lIMB+O}@jvbl-{n$%?=3;^x>* z?*hLWy%M{`wwuEI-orckCJLYU(6LR5+aNEhkrg%cXI_PE6JnQ6YGTY6Q@$NPB*?o_ z>L_8JplP>d@QR_=o^|WI+@9O`y<{$RPUULo?96#=Q~7S@7u@p8)j!`^zeVNfx36-2 zS+oEz)hiqq@w))pu2(tyn##`^$lxaUQZm3h{+0VFyY_M7Cd7c^Eyx_5BTNi^;VnxU zAL-VMt?=+xc(D~;eOOocN^(j$u&uyj&O6cy-?swa+{5?!Mmku0Pub2^_})F|L3}S* zrX0R+1(w!V%uBNhALe|Vy@l8pf5H!c+ba47?P-)B_SX54P0S(95e*81@pHJg@$A3U z-m%bmJLBPP+WjZ|8QP$DrkT%1k2G(|jQj?FCaV2mcu&t|yBS{PTdk|{mdRc+zmX>~ zl=Z}xz)pGvnpbhH~Iu?gsd8v3A&GW&bW>{C32=XOr2%JF6B1H~XL{@nP(wiJIY#yE=7zfEO~C-jVb zx0dUfU%1)y(?Kh0@3o@-k^l4!coN=TX#L8L-F=GkZ1tIV5&5k#Z)6yC%g&JBGKIDn ze+fA?8Q$!HZ7v_%ckh%V@?GVlmNVwfdW`}rUdOo1K)+<7U$W3If+L+Go)XWgUHgH{ z{)Fu+*#!h4WPx=MzjEWx@ zoy(eo;QGJOzCWt$dSn4ORnSM0;mQqGJU}=Kw@zQ1XY#deKRaXX)zqu}d1DJucQZWK zat;0F_}IGLM~N_mkv@Ue2Ggwtqz&=|gJ0lHpt6PdW7WrXrl!VQX(>mB)g(ih5)Uxse? zv!B*p#_uojYi>ceuO>#MZ&vaR^V|(l#U}WgwPZJ}qUVktB@=eOF;~#yp!}Z0#MY*wq=;Lp4Z=N~6_)LB`j|ewtPI4bS zI+<^q=@X-8;Kgawt^UX%PsJ}C<9SxWGx_76v+-DHIeO*Gf~h`)|KyLq1KjbvGnD_A z_#eZ+k;efi_rS~x-nM=bc~_!!lFx#?_}dUiUO4^xU8i3=`_tt6CgLj^r&?>+(HpzE znp{6OmsfkR(Wi`+g{wI~Z!hv_Z-6)uJgZpNaoW-n!tbLm#0y$4EqlxGMvc8b<|g6N z+tDY~Vd9sWywj8Ssn3;hKTW||GOnxjMD1m^f3?lDA>m(@(pJg3F?=U~YApQRHqnZY zV~p;bY{kbz+x<6kJ}Q0s&Q0juO!5T-$@85rKu_81@?*qTT8F*#@AMhJniN~!A(A0s?WW^ z!A1RRuLs9w!pHV87o>a?o4+&G-X;7fZvrQSA2_v4!+&7EJ7d?ve%G z^#a4NSG@Z%&l63tadNV;afpdl5m(q(Aw80HAdLKLtI~a@$r+N)F!b4CnZDP)BRZ=A z``eE3IOT?i`&tdn{ju4JRkw)O@V#4~w*ACmE}ngn0sX_ggN~)I_u_-MJ{>G_>8*Iv zezTr5k)M%&8G9q*<8f}leC5x+hL6WNpKF<~8!7oN*|C-OjK#;>gMFrR(>CYMTQZq5 zjeDWnrVxLh{1t1~Y}&d)_d~5&x!fzqEJ}MPUt!OcN^jcZ)aG+&VPcUgPm_GB@fEH7 z1M;$lToK~Yd8dd+mmoV*6YSLt9>T$q|=CN#>VA zpVTmqInU;iy7L{m=jD+a@)YL=gy<9jn9rB5SO)1uk5@8$}N{7g!CNS2lSUL#&1h!BLJL zbp$4%gW*s0q2|HAEg!HDKZ){YWMhft+wR{te^>MVrw^5Wu;WbWRZIuznSN> zwIOO%j4Enk$CfUpd=zD7Ow}axuk_R(2HWH13n})&ev>bi zun+##@u9I)ie6Yj-^d=SfbZlNz?bnRVlxN7+OfDA+|J}*Ji`32$-%SGakh^HZ&5D$ z@T{Y}Qw*)~?VBkxYZ0(FIzmrr?>c1RQD(E?v2MBLKWKgn(XZ>Q~D zt%n+qpX;5kFn-p6aD&=V39rg8RIE!jhqp{}!j%b<2b0MO(VD(|tuF<)SRwHh+Ok%$ zQN_%#i*w-rM}g^;d26AI_~&)5;;&sNuxGheFm7f;(_(U!ENH2izhn>Rea$y@tR9g~#Ap8petOY?bqu>eJg)D&bQXLK0=$!SaQenB0CSVM&;1zGj=)W8rgZ)52>8--vevnSdN$SR3|7v`(^R zEc^=p$vP+R;R6DtCkUeIRDV@IC zkDc*bl1a`fbQe$7!3TNtgW@(8_nLdqz4$km{7qwr)92>e`#UBFA=DIM!M0hCa-X`SGVGk8|?H$girPj>#8UvzBx1w25kL`)_hNxzOMf-4ZOS z(-;5;TQ=FxeXOI;TX?R~#l_@SM;Slf=YD)Z*$7$_d&91d#j-~(1fCE3qZIpNGd4>; zHp>cZmSX78#P=uJ77i|{bsO8F%(f*Scj;UfEK1EUm|^k@67o?p?U(4`5V5cryqoGj zY0MYE`?_j=T{c-We7^20hNlm@ajQQ_4#ID@axH@QUgx=Z+^1LvvadL7wM$kQ8AJSS z^M`K!sK?gBURj>Y*)w%#5!13FIP{BRz^DX93>eC3_reJPr|d+>i`siT%KP_p+U3bI zV7x<*uJ)J7PKp0`V?ROsBSZf(?O`2^AEoas<^Y?rtwQ*uFv@sAnD^K9E7Ywy^xR&I zIdq0%KLdU%8XzA=Ap0dFjI7|EF;*e^T*5u=n+wg}<@W>pOTK-TEAnEY^&Bx6_Dy?; z=XX;!QRU|%N1S>0dnmtyGS#m+7;N$liere!j{n9}x9Ed>5`Ov2+o=DP_o_Xrzo_po zwDAZ5&%k%$1(W%$K3z?JZgA@V9M=lXt-WsBCSTS&^v%1x^GlvxEqKC*@munb4$r!F zr%yV4sze`k$_e@Z1<5kvdnx*ThVkbTC z$7eG5JNJ?iYFiQcY&qymBO`h;eu3-8F6N}rTd|96(A<@ukEHm|QSk8%4L9IlEPCnQ z6K1cB(i?(BQ&>AyOiWKcH8J;{`1#vQbxs<4IcT3wgBN2|GTVDEA4#%hs0T;U{ALHQ zzoqp5HY2}0{ZHL>@wU5~mCufeTjwFOuyLF33OAhnbMpAe75Br- z+MC(^PFMHa<$S9g@kVk^&%V)-g*$B9=?k)JfU^TR6PAn|WcxWIRgQh~2IWR}zH7_Q z;gk;sMg{G+X#W8EPx3CQ4U8=xZEr$8`)Rjq{3Bm>;6G>kKm!GTNHD(Mu6LdFpzYtB zt#WLk=O}-GdV27${5K1l2GMb>J2`0GFg&t}*u{l6$QH)Fk}d$g!P9A1n&8l`B{uwn zR(P1%TjB)2RqrCMM($o@%iSX?r{3>!{W^8N3%sao%n27n^01NmP?ue6HeI?9@kZah(lTWA|o*c~8^tHp2kLW#M zxIB3-Jeh>MViGC*IEnWSY=Rw8Our#3x9}gu#z^AFtV;|( z&bwamfAkCdcm?kn9Gx~9`-C?A1Kt9DCqI78srMk|6)Jc5agtN-JCrv7YnW8}T{N1x0hLKIFF8 z`8?`V+jepErDHc>S4d89HmGIRmanmV3u=4$77WTb@{;C5LE)4N5>vCCpn`P>e4wntUo(~OvWQzJe_7rDN;&)Xb>-^KJUS@1GG!f4m zMhxS@|8mcTv27UPQUy%%4$b*g+UtHRxUBIVd8w9q_JB(*xXc5W*4(X2wt~xMbZ9xa zl=59Ec$KqnK@`5v9^bJzi+^`~NLCMYXs9(AQt{I7?SX8QUp9mMp~HcmN%>_Dpx;9O z91{<)u1EKk^Tx!F74)!k%tFp}rG1s(shs!2p^T)wuYTkSY7QwzdF*?M5Z}nwGGjQ<(~M!!STUDk?2udGo2IeETkxHx;`i+> zv*NFX)L_a*!r^KEAQ*eLRBIeYz8bmI%dtVOv2$L0q{ zL8g6QQI?7CfL}4u_BATUX2u86R`=Vf7)g7}>^)7EJ20lQE^{#7tK77qCw}6+gO1b< z^u<@w));MFMVrVC1HYWL@TpnzEx#@{lk#hV@t?sjUK;Knjs9eR8qME(-%}mhFSl)) zXs1|C)`6@4(J`rcv=!ff?~0e-fQI<%FTQ~c8Sk9m>C)2PUm|<$=%1ZfoK0T}_Wql! zc>Y;IVuaROmv2V!Jiv3aAKOjT56<_4v-UceP2Wx?rh|+o&SKM=^QG3+hCdTI4_fc# zebKL}kbWIub<*w@=)MNJ-vG@9L-$*t+4;~cHd%Zz=*SAz$-DJ8fmbs)#0s@emv`{P z1FUyeAB2Dtq7Pz|$$%z7}X9yx$?u zG74QQSFFF_yN<7*I}P1M)CGCk4{ zpQVxf676ZFajP-=#=(wBw=h;WS{deitFQCSmh0BqMc^uVCs~J%TJ$B)kL%%1uf6B6H9R30^6ZQxSrA0O}-hCHv#^o~T%{whC zX}|Zqr@@`~Ha%<8G{*BN?^a`5HVz>!hfkT0Pg%vamg_RhKXW#+x9JIToX`!0$H@yU zqy7c_^X&+JHGtFjK3PdFO|Oz?Yie~{HaKL|V%GdR1m{o3DUHvi4=isaPSnCAiJs3!U{FPC!aD&;C!)@8ibX=7j@ z^yhyg{&j`H!_Eg&48Vn725c`~0#(8L=JL;4^qI4nPYhH9@6)=rhq-DUYX{|u(UjkUp+wP1c1@6O|0H+Ru}cL?^3_6BXc9ywHi zPMS!6Km*C}iR4?S_M!4e6?goc`p+2?qD`48Xa6$wTbVOwpxBHvHuCAWM(EiLJ)?&_Kz`zUwmQ3;Q_^!VF-_zm=>OAobQG*KJQ{|GdQrto(v zjZXjD&3UoMM=Ct6>ovNBz7$@~A!w zwHRKSN1t8@Z_TvK-fm4bljX>T0K+sC0{T_(A$GwE;X*vYat?Eb!$ehac!O%rgM=aI99erh;H zz3Wvkb!mM27=vy<-Ax@~;*QPKQHnhy-6}g+{zD1;ZSV(v2>e^Xdk)tS{y-`J)z*36 zim@JcGS_CV?3wyT>EFrCq>sJ4_{o1K_vK6EA^n{Hy_a;|hi_nGyM5>i+$2F@L@4_lE#Q^-Wb2_^&Ekj3E2 z-=?4DsP|su$Qb;6JL&T9=lFL_>T z+=nOIyP8iLPdiTZPRwuQ%I*)dMqBfuxx*v7#@g^@H}?hRA#7@kKR5n=itiWZRSb`8 z_Iw}c;`?DK^+T`3`sW%u_My5D540A2;MDD{f1CL}5#QNF3^1?i3z25%x2%*tIZv@f z)1HNSb;Bb+cJNW0T5$gcT&)*)*8|%N|D)pfn~#W}kA0!?CZ$E@5TCy%6~E~4$bY5a z_w&=?*E_lYqVTr-fis9>#`rI={Os=&*j|3T_R)042fjwT)*z%!ue!VyJ-5dS%nGo- z&z^8#Rw?qVnmM({k;N<1$OXjq+i3Y`X%1%NasRB>k;k=t?%y5i7kn~o1=i*q_szOk zGMxC6kzY=K?P(0m+Kf$7%^vs{GtLF86yR#LQE^E?r31v9L7Dld+pb9_13)w zoKy#gfJ|CL-L_3j`}p0V_R;>;y;RQL)8JahZAQ;@) zay|ReSZOn5^OtazxEH4qWJ(?9>7K4ka!C4NzjBE1KRUQd-ilYfWBW3PCz^U9qk0oh zg?HWYxSziAj%V>hHT}ezMfPywjA!}_o4cq}E;)TBdOo9f=>Kf`tn$GzPvy1Tzuw2Y zmGnU#dkZ=Oj^lv`Dc1h?+k^O#qfpp zS*Uz)!c%$s9&&7~@;<$^E2eK}0H^Z7|9mR%-3OiTf#v<)3lA8b@Or5Y z-${Ze_>UQySFeB6T!ZW9o2%U)bGzz?0(*|@cLS2;Y^)&M@FV&|^p)?Txq&2k!r1ff zkFD5>kK8on)A}1ri?pv-HF>NnpQZu8LnDYKk;7VL`4>!?KIKRa zcBWa2SAab0E4$QpfnxA!>?@&l2hGfbRA^r05B5A>26{xX_6g__$`4xe&o_H(S}Mn8 z7(;njdo4I?7?1KhiapWPHyHn?{mnXSx}6XD0l(h?zVb@sfB2Y>GdZR3+$$+=&oTQB#d!8-${Or)&h4=C&;CmJA1D)CYdZhHweF^!zAN3z#!sreuhaa+okJqC>5D&&OX$KI z__iy3WamRB^pX5qjnN>n*c`^+d&oECS3PM%K%_A>JGH^Ec0Un?!b zb{mzqD*WW^o>u&SX}j(f&r5~%Hn7z1!n4eQRp2=%I}EG}VCC|C7+8kJTWp=}>emd1 z#@*#ZK9Zup!^EO2t1mG%ouv|fatwPadf`fEx1Vb*ItacRSMHxH|Hd15342EJD%#U( zSa`OxhQg6sg0lxWUVEn9S%0$M?6H(sf6~Odklb7=QbzxWEz91AkTQ+!OyaFsFa2Ow z*86pbI;^ajKIGDnf!4vc@I{dvE7Rq_Pa9#|h@T!sc_GsjfD z{x=)R&jWrGyR-?rR5?wf|B0_*zqcdw`tV2#xzT&k588V|`MNHwU-Rvy9^R~{UBCH= z^bx=1GRD4N=+N0ipT#Nkk-cc=!zA*LT%O4t39nk`Mqc>7Jx{ru-+95$Msk_Ei6V#e z-U`Y}D?S@3qb$Z)w&&k-*8cPud?vnUZi_hcjwzfUwi&)M?*pUEYQmTGEznr+EaPk- zm6bVX!8aijy8K@CrG9U4Nd7*x9RuNg!*>CDepmc55qhNNH$Fmtd)NDzyf>kn(3$9b0Y_jB2%1xDRJHv4dt6XPMdsIa$hvlFQpYlNwn-N zOX&;g7ccGfTjM#Y%#pz-K4Z5pm0#5cpYmH9&z5d{-LJemtH1K@UT2@L1*UGR$o!W7 zUdFgL?^pCU@0;hjiRVp)$+@krUUub&_^#spha24ToVWZ%IXkSl``e}We$(Fx`I1lm z4#gP31QqF%$7u!7Gd-bU0^cG?cRcdPj$^p7t%Y8Ve)RInpc95OZ_TJ_vlh zYue4+6mo53?!IyHC&}5-{9^IGtS;sGlMY^5$LrEgR~Nt3^=~EOT}Pj(PhB~&iuOyl zjK==S&Gkj{Bro90s|P1^n)_}MG9^_9+yEXi4-Rhqsq){2@yrh$7#{gH85myqFZuQe zc4?~p{2!yRVHg|2)jwg*u3Y%E z{6jH@r1ImF=c^nUHlMvwUmUG-x&u9mOj{j1T|GL|q5GRD<3HQzyPVFwbH3+uZJmVg zJeY3}duXNp5+1qCGa7yjpBJ$hS1ZV$E46x=F(sQ_`FW+Qu)m1ktN_1U<}}^$pmkmO zd~Yo(<@uB!|B^i6%Ab{eXq{8}S>F55eNT1iuk-!ycfP;yBfbB_kNJMx$9#X)$9#Xo z$9(^pkNN&{AM^cnAM^cRea!b?{;2P>cNhHNe~kARmd1mYwLO_%?B{ysEjP?z_``Y5 z_osaR`e~jwp62;0r+NOHuAjT|#ooUmksl`CtH3fj7YnPN8WV3p_mj7=aO&bQW_^zC zZ&^Bqcp`o{erqKDztpt8P@QZ<84}9hCqz__Vl5-CI%;UAHVApI3DK z{Qs~1FYTuP*X4e){;%Wvf2IHPPt*U8I(U8L{=cHc?*H5#pQ!)E&+7lrcG3ScPSyW6 zciq38{aM2Jy@~qn{@Is z${RvpZ{zzrPw_p^PWe6bQXYcxJFT#Rv*1+kThmVs z&#FDm^9N7;-1H|j7d`>%A{M+LKpV{!TA3>_%oTifRh?S1dnenz+_G|7HW^LBn+=m``qQSr?9xXjQrLW1uTo~#<)~u6GN2gpxKHutR9%-mW z_gGf?_GS3%>{H3PeA>GpxIVZeyu>?BRk!|5JzlKH@yEI!FD1mHT%X<@FQ(w6C3)jtz*?ji9e?JO{)yXP!;HU}i1%v!9D73+ zvF|2l5cukSuu2~Jyqdou*Mxapu4P<#uL=Glx1h*}{c{xCE!Qf3Q{NuNo(nP$YVkWd zI%xZYTWo)BO)+tulrqU;#SETx=%Sdei(ht1yn@^p6U#JyIXInJW@4HfG@cY|fQCu_ zr{I1YxZTc=nzI)Z>vzaEjOX0I{KIs!zuJbJ>D(iqmOY1ESO}gM+I`f*xUFqGCo-45 zm}}X4zbHl}JMY_XEAELcTS(jrds=&xX`Q*or#j2 za~+!B0?pSzFTq)va&G)e6EE~HSn1Gwj%R+M#xuWgQtZs&6I`Fpc@=hy#90&Q@c)5+ zwp{qChyOL->78#Ae=5IFJSzIYhYQ7rwa}y1p@;fSvO&I`_WLxvh)*Lv)V_K8ZY5`I z1seTDHeY^c{oSGwecnl<%IhR(M9kr000pg~*A`QD{m2UEV<@f(X3BK&fVm++l{sF_O#!{ z-;TE>UzO%p1~4}D zyAqk_XM8S2A8IcvheIcC47;oE*QI7?%ya~?_UM|No)rPK538MW_Jv0P6V1>9|;hlk6nOWiuy$3t`02R!^=fljipQxw;gzDSMlex&F4dfk2R(t8;5<6hnnFE!Jr zdF1oUc4&r|B%cpH$~-rHDqXMsuOc2*MZ8RN3fb`SZRE%(URDXtdFTg~=h077z#$(S z41CS`nO>gM++E{mHUE5eB&xY@_;<7ee+uxMf$t;!Mcz}r^kA;Zl^Y(({v!KbQ6D(Q zk3h2|834ZOzjBwhJ>f%Wt2z2D9{PUV_OCll`!D*0?XUY7?ca7~$Ktfpv_I`5w*Qe7 z{teK7#^#VNg@^y|dnfa-==<)c?6K#{SC^irgZJld;JwuiJX`)JisOn=4$hs{5bt)?s*F~;nJ)vORAmt;U|_9Mhxt zJN({Z?O@ODp5Iyj5BWdJ$@$@@Bb(TF;1IuW|AMnu@}$hjY|7rFY&vCO%=~=!0FZ^aNg@xA0k&!(11$&F%($n7l zz24Kmk9o#2>Z4PCj8Ea`Q9nAd7#rzZRv%}trf%$p%RR6qFFvZgm#n<~g^y5&BbPp# zQjg@)e%j)WAKQOS@TX*?e#k|7(2iIV+*BU76e>d&}GYl>YOx zKEK=c0rQO%n5pt;SPDF~Cw<*1U^+D0kOEizIcud&ZS zs=N~|A9LWi^Xaawps`^79Nq8!toVfXM0f37^V3t%5?^?c zu2b_>)UUqdU)!x~v2{Z`c^H#ar}nB`I+7f;>&xReVf&S^E@nBr>OX$%?$S#i+MP$v ztzsp57axguh`rXY@`Bo3B^RtZRC2*9{I?t;kLuYb)>;W~(aq)8VJ1I2F@M|)FDTBS zxnSWUAH5uXW#RK$(a$pnYoB3~wzy;QKmX^%;-%z-R*vNi4f4jcu0cMH=7bMEcVclm zyyRo8*`_xBZ=qX!`oB(d$ni$+4>`qALF)v6LZ%$fvbE3)7I-b zOAFrCeFb|_*f=G4Ui?1MsV7N4ruZwbK;PPm91~AkM!xU!#5?9P*4DgL79Vo|Q@h6Q zTX$&M#J?OG(thBO&UlL*Kl{JFh?Z+S1n^%v{>WeOn;&f+4=lH}u}IUf5mB(w6SEtQVPkC;!lD zx9XO0ZZoolT!WwIJM>PmJJh}b9y-3>jXt*ZL4uxRhP(Y|(@Jo%fs>kVW9jVg+Hq6Kg?wUmQy7DjS+k&Z znNj3gAZ+JTSMdyga07YI?XqK)+t30piMP{(R%8v&ABINaC&iT35MRlOa$YI?C%)Ww zv2X!iE;bHy4CE%pr^$uT`{Us83HJFQX%p<{%EzeDv%4+k1<6+jj?4Rs4?Yb3%8yV! z*~H7RN!hnL%G!RH1}gtFG;L-d82RlQ4@u*L=fcrj)+jr+s=u*^hciaZ@8irlU<+U1 z88hme6}@fQ_``1ccUww)&L4I5yQ3e}4&`6EG%vw6^E>qRmiw?lWD|C_2^tuDT^%Aj z{4XOSd5mvA_(f%>AL$h-;rEFv4F2n^yDy4Vg8xx|yJKGXf6KxD4=MQT9r2C7q7%>g z;A!H|eUMAVulr_|Amdk9eF}^J;xoCKDw|`S!#maMGo5#4^Uf6Z>``8hpEB`+A0LKy z+c)vd=d@Sl`Si2-?k~Rf<$C7O$bII3E?v9ANpo^ux(X-eJq=w&oAB|D4N3J=mh{_WYaBi^q0>9hzY93$TU;y}_Up`n zj83DSGx0gTY0Hv8BWpTGyD}uOHl17st-tlb+rIOxLf<&{L1BFfewjJ1UHQa{d8+@V zkF|fQ_703)=qqZO$y}D?Iz0ZtW_UM~@km)Nd7P59KI`CX`@J~`1vZL-I=3;=64{noHAMXwU#}0C-+8o?;9#7jP zzM>BN$@#g~!mPYLkw>@=E9nynob||(p_kg#;lZO!F(c?gPhflRq*PJ=}3A{l@ogmy{F z@$!Ar%g}TvI)T_oWGFgeDDUJzOXbv0V}HrqupfG6CeyPRdX_=YGU!)EFfx|do}n(Wc{d3 z&?oQUxsiPGw@Vq{l4YG`mwhSQQuJbe()3@5{)^FnqVF;EXMyQI{{fwYrv6a*Xw!f8`3D6~ z|LJ)-{Wsa^KaFkCt0~9nKk62}^u3;mUhcim;ip01BYU<2e9|0zl-uws_#DH&w{b}` zyd++=@kld#uh*KGKzQhT<*Q3_j#x9_tT%$Vl1Z1+OH_ zb*(cp@`r0a?{<(kV&o4pTJJYwyXqVwA7g(Le!mZSpz^b9I6GXwGzkvxzURV09;ts# zA7e}ZOnnSYcP#ftXKLR__jgbIrd^(~y`wTQws&+fw(YVm$F`ko&?sBAyr+pXPb9`{ za6!(=Hr?LK=HD;D+b+MR#*<`&&BD*=%FZz{9N;uKaNK!lZ#-!~W8XXXD}U)S4<7DZ zkvXhKijQ&dI_s-q*lzVSo{dqjLHB41Se6h((Lg*e9yI{c%j zohz_~bz33wM3g&LVnsn4Cw7V_%)7Z6kz06I&x^rD@03EbGH7Oa2bvXArx#Y#jPJ7}%kf2TDzeA7_)qoE zrZ3$!+gh)k2dq5p7l#Z>_3!k4nD>3OUHVzSeSG7-_iu;Shx0D5G1b47A3WSp%=*JK z_`Mu@=2cvw{G9o$?^;)Sr;{HmekQM0Ybm7z$)lP1IQ^cw!n7rD8 z8!{sD1qX8`1ZU~I&Ul!weJ`3$bZ9|Zh`?3FvB zv-{`uiG`EKm+;7Cjj_g=bf>p38mAE}hUcBKo$4Ryg8aI%4F#*lHi+KU;5P$2%V=*w zT_$ZmH&WW?q20N}bZs86V_3qWQ@)w_ULsyAKPc2TCccF>+Wro?5YWy_`zD%g9lcSpC}(&V;h;Iu`PI2z`KeucRv5qthDW0E%rp>-_#Xj9Z?{CdmCq= z?L9u1JzUZkSirM@*Tj54Gjj!d*-tWxFWv;5l;dOC;>1&>mj*Kie&dndr)?km`u;2J z+rGS;_5rWk_I+^r_C0@^_Py8Rs6e;|XgoyI(TvaVO3G=j5Y2dU>xjK{X~ z^1kc^@YzANk8t6<|f8}fW399*ZF2avq@3Tj=fUj;)Tb|^E}3rpXZZ_y)}|Qa52w{ zkzGFGDZpvi^4{aSwmkpbAp;9PRWvm3kRw>>yc3%6-CYH@y(TeV-JUOBFh&dOD{oZ5_g($7JCcc zgw6y;Xc6}N2ovw#*+PzGE&FTNvcERxHZEwn%ftb8XrF52|40j-RGdcps-jCA9{yb9 zQNadY9`N!vfY;01uOt3OTwZ%6i&o0DngWdX$rH!}hL7*HcQkvh?`*}cYrBiM(KnHI z@=ee)exyCtYM;9v%)2#BBre2!9!chr3;$boS&svL zcqSU6e5@5eK+G^!3@ysQn{%w~eWx`i%f8%3hF=+ZvJM$n%-rdX#Dl5ThsJ905&u;+aj9hnI}7yUFC zzqo-I+>5efdmh*f@4h?DiobU~xDjvBxxDWb;)jh!chD}=<^h~|?G1@8`*)qk6$Iu^)iM2)az4Wbk_u*`7k=Gwe z^%w4FO}6n@``jt; z8~rc9d*KxDhI|BgChel)f;0M8fH;{+IyAAMLq28Nv&EpN^(wKdUlD-FDzQaB%j6A>|5Sm|MJg#&1 zV;5}sK5v1OtJ9TpSOEUg?Jf>(-M4U7P>i`bWLiUv`dm8c3ayZzpN~8at)jfsmA>7a zW%G1h7y8!Se<<6Wx$D_~2-&Rt+4IO3Q9aU$l6|Ggq!F|PTLYthxyp-WD> z9e;d=XPN`zTx+Ad$5|QMkd}i;moi z4D;PP_=xiLpRqC)4DD%ch>k^1T!`KnLR`JTGIJl-Vtc5*0`_1V&sx8C0@>T2rLLJD zKKkec@UQfxEtqWeI+^BxWG zU4rh}CQrwzKe2c(Hu)O%t!+aNZ)Jbewz2e&_8&!7Z>3ywGF#b`bd$vp2>!2do%E+jGZHr~@%5KrVV&ol?w+Dx5eS$Cm5PHj18 z?|Y@+;u~+7=Bt09oFK|o&r6EK=N84^o-FhsrhcFgO}e8yx(*K&(?Pd z`T7s{dw0%NZS~~f|H5snlY^g%-;9*@N-nM@@J1AhGpz7wZRHf2%9_Ee`zcr-6UhM~0uExA@8CiJY~IyP&;nl&?E*z41*~Pbglz z+}Qe>w{Bt{D6w|XZ{ozh1+0@X`}eRWai<&KaogL~ej!aEt3mMnx#%+Vt>)n?=Gr#5 z_HK%Wg4nn2hKk|3x&>f7vh551GWMkonC6*r%HJHExBE_UvARJRU=wUNGGG zy)&s-y8AW!3C-^{Vz+C(h2C-Z8cBEFVUJa_*GL_9eN%rM7x$gxd<~9b-ir6 zLu)SPzz;EevKDx{B3JguS&?<*Un{2Ah(9A-iQy^Ezg_F^F8d76C|e4xj68B;A8tFN zz!@WYcsb#M%#HFq@T3*-dk7fM90VgWj}K2(ted*7@~pr|3^;yyIPMj-t1S} zef#OdF5CZ{+kW_2v{LLXiat~9t%bfKM{2(4AYGv|F+2N;Hec!XmD5%)&Q-KW^M~4B zriS=K)uoD~`)8K0W?yT2LnXHdahf!qDHl@- z+t$&XSD^J4=h%C(-mh}@plqak58vFue}$eex-wG9IDK+N@*G$X2fx&OTNl4!DgIji zFMy8>^5Q3+Jd)n^{;IbANW`Ozd}w6uhW=nde^NYIa9Szz&VSkKPZR6ao3QVcM}RFK zZ!VCXmxi4e*nSIf))pfRbxvdkHj{WReeIJ!9lj;w-)+EI5&W^kw=cbv`ja1y*!d4)b8si65AJFUFVby}Cz`N8m7<^WtK(OXs5%^WHOzN%;l_FUKYcB4fY5 zuVe8>{=dh+;cw$R(C0cUsN&+t1m-YJIdm7!k2yI1*}>7vgHiFzffRliM{8K9f#V+a!nYRX-qi^sX14 z+Il5zoWTERx2;Z_Zgkr8N804#o1MbHzw2`y7QgM-zV&o{{$~D?Tuc- zzj5b+N2TzBYY(32-M=&5*HN8b-%*{xe`bA08T<@Cnw&L!l^DF;S)O@SeRJYJbN*S9PV)JO3ZME9jfIFG`T|48m=$cp@vvAKdW=}+-)Gjue#mf1dl<@x)6 zfzLfQK4$+);jwGbddyW5Q{Ja=+bI*imCFa&q-J`za zCM*7T>P`Lro6h&wyZD7UuYvcT1-~x~KgPS_r_Cc=UbEw49&$0C-93J9k?Z(L@Ehyk zH>49k*0_OR4fqZJ$oPGH{%Y=h6}&a3zBOkoyyb(p{PnHN0`<-CS2O$tZ!L6rs{&k3 z#aAbKC*mKPqwnZ|zsZ|ZKAPs~o8WD&olst<&L`CQjQIQ?c3i`C9(?`;e7<-r^^Z&9 z_10x+^-b)nY;a-ygy?c5xa^}${bu;v+1oj}zY;pf{`S+6rj=G?IN#deB<2qFojcxV znEc*^e9OTnznwV~jkn{-r`bQl{wBY;B1g3GMK-gpSMzwI?Kss!*Y>!S+$dvv5Gyyf z$2w>r{lu8`zDwNv^RgjjFUn3ipYQSm(26pBSAgAIfP9giitb!z$JCiQuTMpC z`(WST2VC(o^vHydfe&5_BsX&h@(pot5empNdS8z0R7+7UJYvu@?+Iy0G0` z8^)Jr>$jJ>(q}31_39M*x-bp~Y#3e3*F;|(?dJPvH{aKr`V;fL%mH=oPnHhtGRPr# z^;b?C%aZlD^xzu~T+P*V!=IzlOphJDfwlk1M}}F zC8ynAyXTBj&gu1s_gq^_?zsO3UCA9eCwQ%Y+|cVvftz{_UXgX3p@nnx-x-|nclc~J z*G=G($2V68t)2cm-BLqcp(ow?{D3g4lKCCg+03>0c$fbg~t}I`u^&$wKJ{m zjR_fb!3k-6S4-JouB*9@;kuRUG_Gx2Kgx4`tMBwp?ZETzSUqsa9kl}o-w}4&H#>LF zgt@1{=N0f04zF?*4qLejhu63YhpR2$&aB)wCiKb;PRJTJ^t!AWL$4dgbr{#Hxn9k6 zCfAu~3qk&C7XQ z#Yd%F)%PK;>ib%*qV;O7hSpp~>o%^UbryYfIvBlp=X7v{&x&L0QwCg(t$!7tf5-Q# zTXYZ>ywhm4CH4cVO-vQy9yu1`fKT72XZ<`xWjj{k!AT6(Gj$>=Chup@a+2;Q_A1 z#(sp3UxuzK7r4o1X~sehKfF@_rfbm-GHr zyg!Eb$MXI--XG8VSJ$Wd&t4yIA$p+?zUN{5I?Kxa!(sHUt{-BLbU1qAEPpV5IK~;} z{<98jBIoIFffXUyF7BRL;$4H+ExZEOemFYLzzg}hg(rKby^Otn{e2GDIy7NF3jUp4 z;ak93h%(!kkX}3Hvlhv}vFq}ix+*=md*^`d`t0+1x1m=KmnEOq+kKsB)R|`1GONzN zQK#~2?K;!Ct<$bA!?e$?FDvPM;O^_oqQ0!o`Zg!kmvx%@&h*sR=OfnFhx+<-*0(09 zzCNd^@3WrzazA2yxzv~2S>K~c_2r(XzAv_ih*OAXv`%+`f6lJMq0!rabhNmBnV&PX z3ap)?>$)y@XMk_ct`9?_7wDS~u964p&s(Wq^NZ@w0RaPVfyRK(!$)pD^?*Y)yV^se z4k97g6WDh-~*t6lL7{1o|hSrC3jPI7g5 z=C7P3?)KN=kQD)*;oDT6@%Gn=-ibBP9W}%f$T3tb?>I79zbkf({-bs9p(iPiuVCFz zX~htezx@I_iRY0YlB4y*z(tX^0J-m+9~b7maBu$c)#jnQ-u|3*@V5SC@m|EUO`d5- z$HBbDVdTjVTnqj?!#?&3r5!8q^}_*l7dh0OFial8Ws!l{_+fm^t2D>jlRV{`oR_1> zX>@CRBxN5Edpet|@#7lvM3NO%ID`JzR%dxvG^Q@8XD^UnRB{-2ZeZ-O4_ zd~5V1-@EVaMGtE}=oS2t|2^K(U;CYUb^MRf`O@<-+BY9vJkS@6&!lbD*1!WL=-?fF ztbSqQQ1WGdMEq5A0Qf6MgmXFV4_n1={+@T-KJxaDjc@UrUYxwoW6UWZ1zs)n&K(-W zHyU`L5&vW^xaz)w`-dwupFYsc$rmtOL)O4Z1$BW?{llLP z)XzUZt^U#B>Gh9|%BcVD7c=X_8Ckc_IWznA+OvDy{_tme-ah~QUbjCw{EXWl8+GRG z-~D3m+ZzM+IeTs!!x=%~l>o04cxAvV2i{e{8w0$tz#9j=@xZ$pc-H`L0`RT{-gUsc z{v>z@FAO#u3p}_!$3Nh}W6)&)Jn+Dl^CA_2oHvg#Kax~lmgkh;pIp9WkW+qNa(UTM zr~KaJ@+}uS<@Y3)mtEqN|5tMPmd`om-%c(s8|9SWom{@9$SJ=oxxD5|r~F&q@^uf? z_?+@tDdp)-`JKt-fgVozHvnniaoq!f;dXg2rQD(OfN*Mgq5ZzKJQ>cGE1dEb-trv} zY_aJ%z*?13p5eUzOiFoAQ=SX&S;77hR;6^x2RGh0o_LDa7n1$dC*68c>keAVf(_(C zMIL_l!6&!kN39{JXchQ)iD&(Smp|Rly4-zs82{@6<~xoe zJ0?ly`itLG*;$me5g&BxXdP?Uvl{pz{%gsty6sqUoK&`2$BB-`yIk9QrQ@p{P53HZ z?Z0ZbFEM}8*}fsPZ{jCx--uxR5I7wz@U)Mz|D~)A`e}Yob+q1ia{ETQ?b~AOJhksN zZ~I~&r+ta|V`ux&c`bK+!uFLB`&0X9Q)mBCwp{IFz9Qz-(R$Cx?K^%nIp(SMJ>hMi z>l>b;|6Kpj?!#pN(D3MuwDD)3u#F++IMv39o;Ff8U2VLcHac~*zI1XMw{*5K;gf!u z?{>O88nS)TOyOT040h#@nl>(`jU!4v**IJojE_?rpYpVkvP;y)CupNnM{A*7 zk9QnC+S$g04}2cq?dWWy?E|N_(d+-(?K|23HSOzPLi~GucE2VwqpRj$U@wdR~ zXx~y#`%2>*P5Vk|pIt|5p$uQ+Vyzb*Bp1{Om3%t_U)wh-K%IJ;vBGF(|Ix z#S<=-KI}h^cHZy_+c_?Ni)rULPdmrOuQlx)M?390S_|!ZyzP9(X=iHu;tPEH+s@cQ zB7QO3BXcB=G#=gfMRJ?Fj$hbqzJWGZe8M*05FcjRe1oUWH^lpxHs3&-?K)Zu?Rvaz zp4r*vnEjwVBB4RPY=GjzrSxn7rD54u}9Qr6WsZ~q0G>StDz6quIQ8Pr4R48^jVrpAAgC_wWp%bv2N*8+6{e59UM#l4fH8B z^qFgDP?|y?``N9|Gn+oibsr0qc1fR2SKX%DfF?Q{n>eD(n6 zcxiP6ifs-F2x?nxrDLbgOcD|>h_rRuzQu}7fS_XP)L`es3{DG(2+8P-!)PmQXNaJ9 zp`8((cHWu3GvuB?td(lpM1j2D-`abfv(Dxupq+RAmv{2{oSd`wUYBP*_w}r2t({4} zKAeW1MM?ZBYw7};ioc*pDRwmPvzL{x zpuTH<$2pSP_)77j!STWazrTKNYOZ9TMS^Fyj`jO=`&OA{8Rk!)3vgt|;;sQ7!MAQr z`ijZ1nl;8E$6q`^89S%2_Ws?{Vepk09$$Cmc;|PnxNG1RzPnc3^~~=QW4$HIJO6Fk zdWA7u#P4_bZDVzJ#ryt^4$}_;Lg3qxcFi$F224K#+N_V zjQE<$OA;^Vli*Xx=X^d_@=4;aZW#R4|JUNLegyn2eINMy(XZ{i1b$*HF8)3l#-Bgd z;qVs+e{t{^2Y+$!7YBdwB>skm!JoHnSb6`QR@f{N;nc{1pDS4}-r)|4Z@r;0XBp>ifXokKcCW*LyS#e}8le z{>)g1!(SozD+GUq;I9z;6@tIQ6#jM&gTGz>rT9yXfWJxa1AnX2@V6@se`lS7KQq?h z@RtC83GkNye+lrH0Dp-ek~4nW&cB%RGWjmsIWMQ0{BckDqvU9N4<^nk93THwVv(Qk zn)V&!k>-ElWYU&<{EgUNL*kQ#<8w!BZ~QRrUB|lVg13jx`^3u3{oTfMv{UodlsWv_ zR2lMa_LQ=3jrW6o8eR9ad|tt6|J-~Oonxomf919mlE0x?kDZU&dYQ_1#Jr{-@jkAu zAcrQVoQ+tlpFS7I$j#92t>m&CA%COv7~OnV?OP-l<>}+ZLguhX;E(9{FTt~NSo+AB8pS>KlauR0o>Kk!tc#ca zOwTlC<+oI_SLN<2IbVwFn(?f^k!xk|kFQD$ewy|g=wm(YulFt2ks8)ciR5gd#e68dy4wrAY*H4Xyrq0kIiG65f#o2Vy=W)M8{&GpXlY>pe=VChH^E-Br}QJ8#oioSW{`Kj?L-Fb^FeZF zw!7CkckkZfUXw%fuycI@=WlLut_O2g?|#U=9)0)jZ@Jg8ukUVju1~ysDSIK~hm=S4 z?w7|l53V@7`M1?)HUIjSG0kt?G`jiCg`=9^D9vkreO7Ms(aUn0`=(^GZ!L@cYjO5S zvL`Yp+I$jPXX|VT@Yn`@lpCjWRh85CHseF>|MMTidu{8;OJh&VkI4&a8yb4jOI%|1 zBNJ2o_V4qYGvZRu>Mu3Vj)U(T%(H0fS?guy*{^xF$UKXup4ETYJbQy@^USl{)U(7D z=2hk%60MSD0sosb{TMnP>mXvzdApPo$pJ&o<9q<=G@X%XOc9)I2-L zvk7{Z?>uY0+B|!XXAqx#{mwJ5)I9rpp5^OVBKhnUFA*`%zQ;4|&#%0Y9GChMbFZHH zs*Cdo&)*7r(V-*9+A#!tOv=83k3|aE~tuuX{s3u;q&X>i{jZg8mczku}T4zA$tefu! z_wDt*&~;Dfdep^!yO#&wR(=+TuC=#Z=ZpT2;J&@y99*{!Q@$fv{^GPVYqxx3&947@ zKVGxdTNdA&zwqp?AADiWuK)i2zY`B(eke`w9xe7LOy!fqe%LkaPsAS>9I7uEP}w!? zQ{;NjP;0?6{=9X99AEvbHtb1Vy>~|?-z)eOtX{Lreu}7%PxO@b<`%3j_4zm99V%i!Ujb*y6s(T& ziScQm{m8M~$n7f~N1qAKbvrS%Sn!k{_m2JKIQQ9qIfMNX@|ld*0?LzG1du=tqa~c$Xd2^m&R^kZQz;U)gI{UfK~V?;*7S!uZ;ew$5|Zw?tg^)MYPxc z8y|ivtNMNfzqbM!JwRXDPs)p#%s$gxa6EZ@qIo`e`sS5&&DrC<<^`VD`1qAR&U9bb z6@}h0h_HAvKG?nW6$9DOc4t7_ebAQsd+u$mc!v9Xb_O)w2W`23=e=zetGIvX&VbI` z!{zgRA=|!Sm|8Ng`Tm*TXcipW`}!jN37*`NNOQ}~k2hPGF1@;}`SSVY%@y_RkEP7o zF{_)`A(1NHH#@bZt%04LDt!DWB<2XpSh zzhut=&$7%rCUhQOA7|;D?L`j$={rMD9gal%*MYN{S0kO_`_x_o8gU{p5JIpg5mdD1I(te$3LuFcKe$146{K_AhvYg>%V3|0koW4qdyUdgo zeN=Y(%mnRU-5ebg1J_YQpHVZ@ZN$6#a}IqYhWzt=VjX)Q@H5-)_0rBg=-U}*k6#vh z{Ic2Om(%>_3%Ts`%VVG4DE9e{W}n}fX0L4SPjyCa;e5WojDLCW*(*D~HFjm!ru>yX zTRyO|Z|6BHkN(ZMD_{TqxRr10{ou+sU-;0Bgy^J73YfIFehxCpxBn4|Co43Bjw$) z?(+z9r)WO!4WZn%l+*cWrJTpO23cIhweB-Q|3P`~Fw(~jN^Q@^nyz)6gI;0T-)v{ats4OV?9eJ-y)-1dcE(QFj; zG|mL$Y_R9(l>7d5xV%pf>YV}nw*7$(na3K2$3OF~VEQjdET1|LLHOyVY-Q9NlwSSH z!Ta_+&G*wEDQsF}I=OqkN1dNh=cgyP z-1n7H-kz_X9mGvy{<#u@)Bd^mXe;KN2<9j{)1#mHXeE2W!ZdZymwD@^D08D2bEG(P zrL5+6znsmSC}-u-%W_w~J}YnK8>ORGGS4yl*L3bsR@D3UX!c{Tc=p03wf)vjWz;XH z{(R~$p#C+~Ur7B$)W4Sc*R3@D2k*ZU%*=z6bAMgC@EiGJFPP-$VQ^!4AQs{Q)w6%Y z)&Enc{#)b>hw+f9zWQB9J-2LH`_e7I7vr3aIOk>P+z;{VouN9mZGETJm;P|-tM1BB zUAO%5(6fx~p^pqah4p)Ucg!xB zx6Lu!lWf!OIhF8d)j9aM@UV-!aQjyNuBL7RAN7F@bU8WpgUS8(Z@uPWTO!z)C^j+H z{O((EY)TgPDH}VLgT2aKIUXF|%D&N_V?&$XdM!cud6X}sd^zRkQ+@&Euc7=x$}d_e zU1VU~@8|Nn_!d3R2R3&M?sE(OIiWHdr~S)RKJN_63;z*d(3yZS_(VG5#C`A0e!Wfk z)4~5nsEmbO-!A;ZM^C71_<8#X&n>=w9x5|jf42Oq@1eZpNpQY6Or0>i&xXpm&&B&c z;(2BCR6Av1cFS9McZb@vW%Zq@eDixOzx52ui?{!rvYXGay!cJ=tTEs(0v@C2HN}VV zod)aC?~1`orW2e6q%&YILe>ksi&n5t+t@J0>POL+bW5@%kX#C;+UD}1)%gMl3c0ap(m%DyBe{g*5 zT?2|CsILA_eLgqsxz=UTbCK;wIm_a)SGt`*~(qw~7!zU|$y9ayW0YnK6Q+5F!#u$GNq{aUf! zO;kO=Ztk;G06Cqe14`9`P>JQ+%E5BLiUd$sVW6yp$?D%9B-sQxz z+_Sy}@0WBQ9qX_F)rK&Uy*c^A%!at@t(8F1U2*sZQsiYl6OYUYkpo z@Yxb}{MQO9pH z&f8e`Z7;??PDu=Y=B9M~T7C_$7v27coYT!244mKR<6>Rk8JZS&yE|dy@>G1v2;TG3oNN=-l+{%8BXM;r_==4`euiGyHs9=y~Dv^!8?k zuD=wz{_%|T@~f{%zuq+~{rW4j)31Mgefo76z9&CD0{kGx2s3zIs9wiS>Waa*ml209(vnF>E}mU9Hf=k+<&aMr-Szz9oX*I37BLji#xitBb1CQ)i8+OU!QatX`r#(cUDqUkk zi}{p!v6sud#H;&st|&IOhz~Sc5gvo354lg+M+g1@&*Eo84{%`l*`N;ti5`|LNDtQ-*rNTaxv}?zA zz1bP7ySG^Mv*QiZ!yWIvjJFUNGmbZ~3DUoUs~wvl9jy4Pa)r`h8Ue;j9T;7Dg!Li3 zY~HyEetzs)1T%i7AM2uqa*gE-5(gCy_cQ#GQl67 z-{B9xcqsTHd~RGGv!ac z7tmiH7=}+BzPQhU>ED6L!V}j2@|mQI>)^|xkiOa`{S@%+Q^0yUA7zEpXITFy`w!s* z{3rdCeCEKPHnx~?FTtPw z^cjpb*BPtMvnccuCn9{j!m0`Fz(q{*1peZQ!otc4Rl3gQnvbsAfy*1iH6N9)(se%9 zd`x}l;Em&&k9jV-wBpb4;k`R4f9^SKus+yrv4? zA^oy&M%=K3PXl~fZFm)55192Xt9X8_v6zqhY#VjTb2C3n5O+C?_G4F~xA;hJ8NR=o zYd*RbUs<{c9_7Qz7jSj3-U+mX{%x#6`AaR}p@TS$;1!&Tc}^nU8Rz5A1N6Rl{LgEk z?a7>3dOv~e#8G`avilePDINSho=GQKe1+}1>u(eZSMXyAA2SZ%arsf>EXEGU`MmFO z@~-eqcRxIQzal^nP4dUqpCMs5|~Oyu-ki#|YQ%_}9Q| zv6KTnxNESM|9pXM3gOMvMnr~WzWL%IQ;HFIsg*8=BtP8sp7 zfuk_$&$;ZO<$m98zGaj91zoa}XQ!kY4&huPP+ zg!iegRjeg=m#SckhTfy9y$o(FM|>6GeUa`x_qU#hudTkgHiZ9nVuu}5yuoL)*v~_( zo_Be^xR14*b=q^-c0p4GdZLm%W7+8Q{sSGPwE)Jwmgi+W@AxVABHpa=!82P=>j=_^ zsy`3D_LzI<-AUi0yo)Qn2QU#l`x~CMQ%8L~&hH%Bbj!A0KOGJzM_5u0!(BZ|%@rzz$ z9{F^b1}a|-?e^`n~AV zs0g2yIcZwFLvY!@B4Uf=A&u~yc>})taP!&Iw?A@y%RkFQ`l}efDjAPOSG)d>@z1ff z$#^U>TudAy&PV!6K4YvcF{gx2wHG(@y-wl-R#vTVVPm#moA1Q5iIW&R%lBGrz?XQI z^v}_k#?JD+gua&Z%$L)2pV9J&V%mice>@LwXuQW_{`)kpoy7U2vGn(8klQ@i-pINi z>)35ykcWKPt9nX2|H|N41UC2-; zALXTs*L1Dlx~ICTv-b~qw|s%Oxc4U7zQG&x*XVQb<>D=gQS8IJm^~G7_F-I%A9Mrj z54;B}itnU&NrJUVwGn|Q^lmfJi1)ZYRf=Dn&^!qk%jl<~(mTdl$Kv*zcutuP)>`CC zb)pO4nZfo7#(1&hZfsM<7f)`A;QAINE^gwRcl;`UhHvCG!uzt2i6`y5UfV06GvnGv zewuz4kq^TB%wG$P`Dd*r`wZ4EI?+R>&uZJ}#Z6_l&-y~YPxOQ76J2sjpVfY!JJct? zGxb@Dz3)Q@mI`m+LD%eIO^yGuVEm;4EGsN5A8abHuyEG289(ch2A0wcu&nT5Su0rh zoe7rY_-6!t&JFs!)%JN&Q#9G<2mL;01bxoU(C4jwpG(yzzcck&%6tL7Uo1Y*_}gyw z2Je&(zlC?+P0)VfaZTM{2@-eG*KNE@PcV1f41e6>zfWh2oOZW9oJw4Mq z^+a#wmC@&6`p*i+zc3g-dH+7oUC^}8!jibiAOEai{0lRT|I7aPCkZBg zXBvMJ=T`)MmIr;Z=fLmtyrvz=J}>b5ydvncJVT#f^!v#} z?zN`h>%JZuToxn($EAF)<$L~E=~v#BF`9RtpG!U@GFpv3 zh>pp6*ysqpJJBoBG4|u@>Fky}en#Ku1nGwk=)cll^IQAJmve3Spxn>v#)iXpGZmlY zogN=+x--Lg{@fi;pr4gLbp+qSU5hOP-U4E0`|#z=*lM@VmQC!y4lk+QHhW2J;q02) zqS>bZV6EToMZG~Z#Mk;H-x`x^A67a2x4)PES8ZLD?0?m^RZCVCuBus8v?^2omj(S_ zlA-_4z5o87ar%FT{-2@$XEOCaHt7GX4E@i3-~Cq(r24NKp#K5-AIQ}IFUidj{(r%D z82{%F)BiNXPEOaCak&CoyJYs@0}QLSUGRPFq4f>9on{vn7<9$bNv@+DQXBlwVexc^rQqjN^wH#?jN0lFNT` zd{FCOO#|*s{2bLBN3y!g$LB=Guw+%$fM8w<%vr$v7C90Vfq5xqCINE^FfXOdBw!v1 z?@a-`-^u{*4;*;^B?G+82LGx2#d_urnjdJMB|k@VBwZVNm;1Q{MT*nm!*s?X2iX(Z zB3fs8k;dvVk;YEmTg_g{raJbd9q`O+5udBmvP^}1Htz^`VG zmVcGTA^%MNecHH!^>~e|i!pTvV|t7+H87@uOkIV~ZEj#ptaCJ8!*PjRaua$utD{nVH{9}-@oW?d&*Tk{O_wmt1r>i2x?--kB+rQIvyz*0k- zJ;0;7kJ82gV0jF@HPFvtU}<1n_k!P^!ULNR0Lwn`J0Dos57c3D?Tgy9EaC6F6n5|^6~&4`~DnvZsqZ(vN8HyM=URf?^})U zTRq=9REHn53t6h--MvNiRW&K_6uTz+q?mG~jw;+O536O2jR*$vOH$A_}Mzw$bk<|g)3v!B=Z?G>kunE9dQ zFMDnA+Z?iY5yrwgz{b)W{rz#mjrwhe2l3aQDlAN-<=_1Se3D#GU6;!35e^S``?{&y zk%wk8-%IJ&sA!kP-fr-TpKz6(N0fm}#oUv)^d^AIB?gz#0GH7Km(c*1(Eyjx0GGNi zT$@XYpLymr1Pf5P{V z(#QJic|GVE8V{ zV?loA0DGP~#@6jdUvu73gf;zwmMZzRZ+lIb+&{GGa`JY?v(^_J7@IENvx70(d^0N# ze*RR7Ui+Yv_Rk^DuN1Xj*;JHI9swWg+w(cYw{ouU4EyH1twmqzOE6RG}M z8DFF_ac7dQ0Y5UvRG*1SP4|cTd^zZIxb^4v)PGIl&cfM=jV=w-`mdkVbX%zZmecef z&M&m_(00Xjuw9Cc>RvJYuNYvZ;wtFcdB})jl|_oTOd;o+`^x>khW7)y_R4_|e*Ab- z8StgutN(b@#~hfICvIbwcLlIB59D5AFw^^=nnU*1!e11?Z{P!N!PkZ#C>X2QH&{vB zQnpn3RcAQqJ_{DZ!_HYn=MDqsr$cZm|1LsIt`s?J%kgtNC9lWIBj$aoM<&ZhI5)Z9 z(eijjV8iU1KnMCDO3bPpxhl_r9?a3(i4AlRn<)-#cpY^-Y*Yz$X+HMIwdpm;T|<3A z)5C#HFD~?Lda>u*^y0t{6=P>)(~B#8o38t^L;9AE({tgeIIu&q0iCkxx#>2&oBP(L zFU6*J63^*kj@(UrqlagT?={kn^o8M(a{s-_YEM3a{0z~=eHJd;4X^FMUMRky^9VXQ zx1tOBb`XP_1fJ?R7vv~wvoRY!93Ec(=H0JV)$VwvdQ7~r^CsSH z_;2WC+L}lCPTI!r?q9+>Zd`y9aIhQd>ueT8s$|?2NWOZNb2_3{!=Ed13PygRkn>Rz-n}U0c z?Owrlvp=8jAa;&@y-NMaAAcn3%{rHNtgP|ai^13nu~%=+1|DJ-ZNyR9DiVXE?Q`1K z^M0Ody`h3Ju95r-uIu6bkNdG>?JuB@rcT%2me(lieDt`B&H?p(vtr=tAT>1yT&RA|s7x9tqS?mi5=vfPY9rkkjr$fU< zz%#_}wft5rrgw%<&n`pHN1}AJFs>;n1P!cZIVn{CTsbsr&>>(~aPc`?Ew-$&lL8oW!&zdft$t=eZ$zu65|y z0X?_y-V2wWb@bh~&?AoI({mHgpM~BX;7mTC`a1frLz})T7>PBd(RCs3OSN>JaVlM3 zf6JjO&sm@G>B{dvKO?$ETlOobCzb_RHfGmR?ak4gro|awM|EOO*neDp zjcn2RNn4~gTPK14z`j_xL|fs!s>EBozu0@KF5w-^E9N|^O7B?fM80diWA%I+entOu zR7dC3;Xl2|+DaXMqIWjm_|}EcR`<6R(Fgua2_NOMwS%u1{#6MdT~`_W6|{UaBAXD{ zi?PVNmsIT=qjpYK`&@=bmIPU4$2lR}&gLx)+xhI{! zm-&NRUUpXNT<$&DP?Z;anxhDRRrIU1L+KtpYv;bMHAkrn<|x98<|uW+97WG%zw3fI zimo+o*;~7&cn$c{y)cfGG85oDhW;%vHi7kUU{QJb1negsEaGz|?f87?(?~GAi0+kt zvJF_H)a^ib74f}|?{NF!{vcLG>>#J;Q9fPR z)OGl)uC9;!_M`tg_&5vSVJZBV#U3j0em7?X7huPBcwXZ~?9rpliza0#GnqDeW7#eD z604LQu=5(fZlv)r{PPlXj85$SHrf!q-^TXWzne2FJa*|?$)SAPQ((pRt!F;3Im>m} znN09D@H`uMo+ExOxErocye8O&kj+KZY4CCm_Qv7|4_tlsYX^?sd%xcCA-RoePDuMZ zfKPC5neF|_8g!L(jK-vS$z;a94E$sV_~`*ZQ|L>5b}3#?99;eN;o}uV;{CbIwHv(L zgPad|u$TUNkKcFy0WYUOpZzCNKB)EY@{E6%S`TiMY$D%7 zL(yjWK%J4PvnIx7U$rEXK=zPzX{Up3J~ zUbzL~ zc;e*P3zGiaXk>W>XKDQKBi<`jyk}M4x1T$o*u?1mU%(IYZy)%;=*AVlSp8b#@)ZM* zXK_Xfu;K?EyA~O0j4(Il9=c*Mj!qJP7jZ^K(N`i(6FIM-zxJC&nE zAI*GQdJ8AV4*PU=^9wCLu0@Br>xpf#y4`=a_~fP^JutLsD>1zZe;U9S#PdAh@NT@c zsU0{BeS-Vy=U?bYx$!Q({rK{QNqn~wcPfbA^()DmU*8`$`#UyGjMTqsXnZ~j>Oz$vd0ONXL8q7 z-kZujibTBMlP-tf1`Cv%L_3^!|BCV?s%huDeaumKJ~8GE{zmh>9G|bY1~?4Q52l&@ z5UKIC!Alz7Ht<^SC9ZPExIHw+1&nFO>={kh#L~z3XN>VHp)p7H_KmnWp~JQWd3y5iWiMpI6uax9t!{MJ4q)Dk ze(2_m{vE6>GHtU=0AK{w=v=GhUD=jqt8?OcWf?YS&TR;V--EBpoh*c`4(}41bEPzY&p0qXMDon zJfr7gY5QwbCLy}<%#1IHC49m9(80AG>te=Q1>b9|^R&+MO+SAvER)|DW}H6?jdQsD zDAzK_N?UJ+zTyjwwUaR#9%No(<_pYM+OX4_KURS!>0zz^R>7Cb!!IVrZ243E{@8<7 zcl&V@uP}Y=n&WMwJ=@M2%^hfm^}MupK7hS+ai;l88~RbPgCgn|hHx6bwm2Q)9G{{T z|2$Z9JmT{YvBK0 z!y7%aZScp+5%{AA`*x=*FVM&J57Tr8xtJdc`c%6&)9$Yv{xbQOq58=E)A)W*8@vR* zW4O&oXdG%g;lS*kzm;eF*OWaoX9el}tzvj>iZ|Gbp7G$VAMwsDpBBEZe(}cCxnoH= zqMyl5KOJMC1LHAg33UeN!#U@GW!nGl!;{K)6Fm9A<6%c5z~P@E;;(xec*=cv9(CZ+ zc;f*a@~7Q%(4KYr&y5E#6CQqG-?bay{+>|3J><=_<-lLI-|hamhdY1m zOz}T6g#TKnUl;!eg8r@la;Er~9giT3h3FRLb{Skd*VZ0gYwS@fA4K@Mk@E%<%uA$y z%c)as^%MR;0z0g=1@!b&iNZjh1Ke#5_7)Y%ev-d&Q_j$)k2vEJ9XAH!QJ$QkV}Q>! z&N+i_zVPYj_aDJ~NrwU$J{0Qjf4oQfy(fGS|2$)SkY6$ue7tc(O3s9jPrXNcEYCo% zFF~)$O!Nx!QADqO&}$yCns7c!8qLT@>B%12^n3`$Ndb&H|Iwvcl|wVp({uhTf1Qqg z9}3a$u~6UH?~#5RGT_HKKQo=59sG0%Kg7S3FC*D;^>G@G$eH;LI9eTo^MC!^*AvR8 zba8aL^D|F}pQFDH^mM@Ae;n%fAA){Qr=K(?={xBHkxBZX(78TSdVMAY&qqV>Y(7JH zY=6y0Kd0LVozJ*6uv4y0CvK?0HAq z&~?ID5g*0Jqw+zKCD(4+7@}nPmH-~<>f!RY{CxG4eV)f&jv{Yr6MM=Ahwx4G?ne9p zbSp6%^6|8`XXo@$_UB1{6JF`h=3e1FS$R=RzTGSGo00D;XOUMVzu7!1C?71ur_=AM zf>_!dRIpwSteMuYef^h$&&Du4?X#&rx2dHHAB)(5=Beu2?qAc|f#(0`0E2!jUIe~O zJgHFodA5%C_w(%c?YoP&vmCrhe#D=$JrU?)_mNuq9T_J6+M)RgKIA^;?MuMle9;wn zl)@5}i)ba9>70xeteN=y8^mUyN7A-KYti8!l}CbqVeNY-_Sem? zopyoz7bl)3U!Spb6-VcEmNOpaA;NoCF>5lVz=+S@j-RJ_<#U|PW8u=cbe@9XS^!*{ zui5gds~r3`@UbArn%J85_8N3=h3PE#)J=0y^N(`ZxkrhoeV3~*6bbWCKSuQ=y< z{aLi*w*fy!nsR7k2krI&+s&q(?3QOg>$jtNh1AoT8dh#ve>3#7%C*_Nv2_7$PPq=` zJb3=Hmv{elS)&?97kN#$-+9}>ZD);Y+!D#@Pw=iP?Nu1Ver4qoYk#TEhnU;XtzABF#LH`}h-CM-!9U7X8%0}Mv-s8s10v%>#mN|P?AVV&lHAh`e+_Uhc*4=`2vLp`D$L#Ny`$*GgiGL3Vv-j(vB+T0w ze^NgNZJIXfuV|W28>1rNka1tfxch5w8#wBXYOIT7^}|bxbII=-ZT5|4!%tZ)HwI&O zVb_}I68g9Xni_ruM}Mq7bJFFiYrCJz@>_D9+Cs9`wLLLs8g-;kj;-_O`_s;mjD08> zlUH6{`z^>;1u|OAKF86-r}ByWE##Uxd)GqNXyO0$_{Q+`#utc(?g;iR_g$}bTkno; z@1D()OUa$yMI@b4fDK+c#(U}>>K&loVdZwPzN9?lhihq*_}o%&_EmZ&8R%i1%$CW{X5E-EX>1y! z#@da3>_d-qp;x5yzRJ6r+t8JYDMVSnwz5+I90~e1HszvnV_TMBXUsab*7ngo(g6wW zNxwNk`{(F(6Oe4iR{&kw)#d<_(oH$C_9OFYx zALSl#GS(|DXo@K(J{9kKrD*XuKi-G#cH(_cYHeetQ}5RmX>sN!i}Eiu^_8ZTH79K%wx5H;`=!PTEwjF*x z0v$GB1FypdUiYl;ZybeJkMJo!OSI23F|7`Gs8Y1eX8j+%<7xg*yW4esetop520fgG z9=->i^Vh)CPG2gc^9|a-e>*UC0HfOQ@~{!KF)z=1Y9e*ygBhFPeY7b~JL_pl&j41o~}BFdVZY;JulW2qYh^#>{&{^ZHk1-5%saF{o=8(+kLNA2OR4xpQ}K zAooY%?IGlTO5{FsUV+v>v~Dh3N)Nc#o#?Hu*eLP@a$3Gitgy}M;r&()0==BPwmzr- z{2DLo{sZys#(N9BratmYdX#?>iS>KG9a^k>++6hN-@<3s7CnnCO5&?N9bfmTEpl8B z(AKTB%LbN_4={u;EPc~JTRFxSMO$9y9P>>0l&|AqgNm&E!N1Of4%nEdOq>{fDLxsA zN5x}TW0UH2{?zr*1s!3}7V~{=i;8PT zAGSs3A+s03I|ayaF|s@b`9(L}_&+n)rt^^Bi{P~aSI?|jwf?_XrKhHFzmC0(WtX!K$A=uF zW6$e1YjO*YSH7laS@25__wLPoe)FQ$iH*$<<~*!5!ou8rnOAZ);KMTcgWLrCv^pv_)p)3YjPT&tB*I9QNOHY|K@qX>cTWQ zbaK#BwG(PzOJL$l6*NvD}|pi$-K z&(fzkw7w%>O!1cw0K4|7w2fx1jl7)d95kBW`fr`Qf1P)h95izW@YN}q z!p~a9-Wz|c8Rk&XB(=xgQlOD-%l1W^#Idz z$c};6!h}rzK~?}$P}a)45ehS;Z`{Gk8x%=n++z##m0 zgz!IX|K9X7>ir5$1ZG9+(3B{%0H~2 z?G>~w-#|IPUFZPCI#>%o^p3G3anp|B0opP#2lRpJ_XIqVeLQE@&%m?gJG1|dcEo=_ z2;oEVgukb(<%c|zpK~fcgo`e8K^yo`j_PP&dk6T-VvGa0+v#89lg#S;A_G^ckMjis zb+7qn5M=j1!J7UK_RA|r@d)vB5JwZEVzuz$NPR=ZsUheNO&O~G3?e+|K(;D$9`}GY! zW!9f&&UBfF9~nKU+~uXvRBPwUjxT5=MsVoB@p%tv&yV&anLTLuft&GrG=B#thuYAq z@_jncd!6VR&F>#OIrKg8UpF+-n((7ul)dlKfal@{cgcFvQP4*7(+1j=j$IIHmv?i2 z&){Q!26+y6Xj%qbv}VvRcK)1qZsz%O`}Ob>cBLEtwug`AD!ss_IdYeH8-C`z1$-xe zPtdL4ZRm3LJ>+|fYsPv{$!7HY+?&&V*qhUVjp~FyC$Ses^Hc(a-`1QGAN7#zgx04! z%4rkc>6(Q+^IT_D)gx>6zT{2(9WLKZS=CcHy*Eqrz#lqTPuuOlExL9cPR!{dp4R>I z#GL2(F2!c7VJ>Xjx>0*Xnb(LGwm;QTdFd5>*bpit8vS#-!|G3e09KQcrcjv6OZxZq``F)ISuaf;bgW>=WylF=4fz^-jJ@7%>IF+ z@0#Hy_uVtIgIEIkQ$kw|5xt{Gdh0J)wI)vK3h*ad$~WFb#Ux#)1_)3 zn0(#k+gI#Ulh&K$Q%d*C@5`qgbUDT66RkRFSAJt1GH=JDahSM(=m$K@kbULxhx=-? z^1ROP`yFs$WFFeJ1GnTzbQG)|v}x=M{b}F(FNouJqto6&N2`w36Et_#dV%U~rBAmG zx!dO@+lPmf?Fa1&PX*Y!pZtdTDl%c)jRftgO%MLDZ9cB?$7Hv1P&^=CDg+*0TrYs3e&YlHIjG$#4n>yMW`v>=|vJ}YnV9_B&4%!7KoZ1%<^ zcK33=QvtD(UBG&nc!Odg@;k*phPLHCe&M-8z2LL=%AA*b=P!J@cU;cP-Ne(H@gb%~ zVh2aDrg0R$>!rUb(0eaDFlpQR%{z<_mmBzSSuJhgLikIrF@jHHKasmWczY-GDqyYY z0r;$K7(D&xwNrK1_bIEnp#J3lA1n9QJNz8r^HS>_H-ML$Sbqi=l8qNQSL%g%wR3H7eBX8d{Ryu$mkMqQUkm_eD};HzRd3< zvv~h6v7Dn6ww zZ%!(v(~RL@f2`sb$XljS<+59?cgIc5tA}8a)TTAt__~G zb(3?yOm*N@QwKRPxEjI6N(W1(Kac@OHXrwU0naA!6^h?jd#k-s@@?chX>Ws#rO6iA z`FK6}(*Anm3jv?XYaf+-mD{nSBf%>;dtW_Orv5Di-%Dmbn4+ikD_uJ!{5%Sd!*K=e z{dQr9k>9Zv7&Wi;*VX;`KqvHVgRi^bYuN$WDL*EKorCV(j4@+ufp%i#F{n+qJyVx9 zRaf;?-^3PZzlS}EdOu$#UA#R5KHU6i<+u9pLrLjl8&_yY_7z*y{8!_tQ7#Mpiyj@w zvS?-bI2l_&KHb>DS?C)ZTR028=z;Fi-}1#ZP8(ZL8GpRlX3uP;+E#pleoZb1ykKGs zw6D1KDffjB+Etqih%bn5_bJ|B?4kUhEI(#3_}=3TpUHqj@&1zmUrAT%FUkLgzf$=h z@`KvY5$$u~e{}Vk#u+%HBNb*tcj-&<6ujle8N`QvoWbUH_hKnm) z!d$T7G;xJ<+_(a5nl(b~i1C%c`|pnwR|u8=?e7v-2-^B%;tKWeA+9i1@Hk(1auWltl^CqTlfa>xiC4p~nrfmu@iZy7?JDG2b zA9sA2@T0K^NADLuwtg5#CYR8`k9+~))*Z9zR?>Hy8TXmR9e(mkW?s8B;I%Y+5Q;yX z3BM^8Qta@XZ19=VKy@u0ZX1CPiW|6mD!*Ga5Dxt|0^Wjeyb<`-_y-QZir>_Z%d2Y7 z&=y~>4L%he#J8?56}C54uK#2hT<>yl?c#g6i65r?89SG>{>*&vYI7?Uhak@1l=LTn zUFXepE8hbfsaV8yK`i28@D+|lB>lgnpW(}pv9+_1VJ~jt4K@z(DbaB*@=1K+a1e)B zM*o+q?d05L_&9{tq%--4qM7CxTIbnDafwd`aS7XgG-%(%w&+9cO9$HaW%t57r8&ZX{L`tjdk1B$|90dw@rl23;}ht9 z`N-le@oO?h0Y98ki~@WSb2&9e0Ukz-QQ+(L(q9g`J3U4r|1a10&~4zuuCpHerzIjzL?n?$U4&R6q{fTN^4O|pm7bncBZk3 zx$9FzfL0?22VD1(zeRmc(39UpE!f~#NG^W z$`-oxTpn8Qm;JIjW*xb*%K4BF)v0+j_Uh$#IVTBOUU#Eo$7ab#jP)M{Cgq73ACPjL z+}C_sdSNYX3D0^a_*Y7=F?P-0yU|}=*g?g<$5ZBc;-4lzfc82}E~I?Utd?TQ5^bqX zwcUko(Y_|%fA{T}=KK4pul7`zch!Ac`EniL@_BL#!u8dU{FYAINz+H@?k|S$_jdvA zEdK2LbNL75@Q!hMG$62XA!QZd*a{BM*Tlv0S#7Ms`nmFyHwFQk7pRS;;>J(%x=)aC{ zb2clq`5We5wr;rI5M%xcINCyg5AZEocG4gEC~dx`_{IV+*0=*)bc45)-qG3rS!OO` z@W9yQf7XBp%_kpm@L<-0z=L#|iT#m7Cx12RZ$TF~K4xJyb0YAz1%7_q%40BZ?7}YK zk7a<%feAiVoT)kvOz5abfi2m#XoH>CT;_4$k>4wLa$Ej;SJ*2EOY)qMFH>Mn%l zsTf|4nFB~qN?$4-(GCteuLr;2RX#`s@Qk*&*zfBK=^ukrFQ;*VmmRd{^Nnz7^>12x z=LS9vywnRHsojInM`ww5AeYkPYAXew^iYoRN98M?0-tRUx`|%>w6(*FA4E3N^^rrX zYlorLrhryS{j|6{eWZOJTGQ&|qxIn8 zL$9=vlip4)b~Esme%L#9$vEhGuJ@GIZ~Ep&=Jb|E=7={Xhdar`>47)0*)Q3K?8eE7 z?13K4e-5?LZoAWu)=ImfSr2|#j@gTq)ABa&-cx=~k@N;@KYEV;c*xdM9m(y3z$|;! zQ95r<8T(2)=gyl`%(wDy+Ns+^U#-x@*3-Cbe=iV!+j=%RInYt{RaZ7j-zu|3>yymK z)~jD|QVOk`Iot6u<$wc!5Bc!j`B{ynti`^>*^XWGbszg&E{fF8*+x!rH}6W?&bQu| z)WLg?goi(!!v1dB?b@lFYGQ3p-#U{{{R#%HEdl>ky|me^WOOEQ_${}Q;EnV-}60M~Eu?6TS~46xQPcnkYmYuQ`7=)};Kwd5LI z7V`$DQg3PweT>%cFAPi_3vWV?o#?AxaLajTCTHv>$v1jIalb4Bqs}vrwnX_Ye$S+* z<$r43LG#K*oNtp!U&{xTzvDT&!0H3VBR5QyE=a{IG?&!aubtv8p2FDgV|>$UYX^>k z>k8)C(AkW1kC*V)^vvER)(sETqC&&$))9oi-2hb{)XXC@_sVmVj5>Ljf9KI z$mW_6aG|qAEYG>Lw>)<(di_j!?mUO?zbns8V_x=Ncy3@)ir?Q4&nbTOUg{>)2-^ zXL;~@COJF8xqzpWvz@>>oX#0e&NQE$jLwjZAA#qstaYPrWQ$|i9oZ!56|37n7Up$y zXHu_b(C_8L=y$~${J!z)*q7kSTbJoS%k;l1t^at-#ZLcP$2n8o9s>>&C&tfnV-}YG zV-A0M=C|}Fxs%F=p^kpPV}ASm{9EV#+x$Kge*Wlb`1wBk{t7x|FY|}Ch43)*qmCQUG57(}Eu6#M zqB+H__ylG?2rPb#(uXy7Ps6`0{qFHD;`Njoq`nLCtd} zGhWT(C*qI!bH#YeXBcy9bl`hkvsk01jB@^a8D}45j?7IAPN$9jDa7$=R}4(b^8E|F ze|5*;(3KC7|1lH#c2idGU!96y*{yQWS7)Gvai(!;yc(N1_rdHB4&Tbunp4$leeQo?%t-r@-PV7V>V2Xo>+WF?RK)A*#tNtutDT$EDH zAyg-?#pJgD!?1PWamDs@Mu4sJVft~~?S}40;D@7{)6=(yoG5TvQMLJXrh5 zYtg$g{xkDZ6$7+u8@pc|o~DW`XfCNgYaf=IeEjfyGOJ&Hx$Ndt^vE>k60+~ph@EIY z*aZy~>sGv{_j+gs4Ky#5?cc%2%19=}{Pq`QA-@rPo*=vi<>XK}R zV9EYK#K1C{y3ys*Z_+1OEf)eyn}>d*KT`)-OwKL+#ehTi&HhMWP@G8Tdnq2IGdP~d zHoQQLNORFr*%9VmZN+~7`0(s8^XHrG;NUrI$~wN|=-7SCx8yUtJJIi3c0>CV%IJHd z@IZUA#ck-3bU!1voOWu#R{5!u#(gm`Yn&V3+ zOdNrKjLiWicl~>V$yZ4~Pi#ASppHE9gIX&XOU^lY=J#-(#jWJw_mPL66UpJ75$qQ% zdcox3zl59*k%yo2;VtHD4KwEbUQ=tV;%ArFPUjs2-r$Vd%LX_vpb6XEq_vILi3Rsj z@90?eYy94*m#5KCOVR+Q&@(VB=qNJr??2Ui-y?v*{Oq2CZDZcx zrPRMP2iUM{ms0*x`h62Uq*$`_ah;)o&R2=HtUe75g!}z33@^LGo;Mwe=PQoibpy1N zTrNZ|kyFK^wf}FYY#egB>-fS(e2YW5C+0n*xV(IV9QdzC{tEC*HaHmX+a{hz9V>?& z$b^Z>qvNDU6*rv9{#E5U%XVItq}9{`>2RHY;5CjnmL0_d^rWYbNxO&*sxB*U&2$T3&{px-_8Ia_F@IdVLvM z$-kUNy=eiR6dRico&Fgb`Fv*Qv%U>I$I#4|p|NK`v)>2OaZoDbk{`c`u=KG%VWT2{8jkO_-DXl;@a|8X9WHk z`qlBzo|M13{_UYFd&!>|&R_jY%P;GEelffg{PxdK;=FX_o(1!~dh^?t{kzR?t-VBB zzRvH{>0;@E)&s-q0_ow~9b4|&bKf^h?N`u#iZ1aOe5LhKJYB=DF2u z=vEM{tJpjVtez`d#GX4BIt^aB5Piuf_>wh=nhu(s&r~r4>;B6uJ!!PyM z|HO}@QtN-jw3dC~%+~+Lv!3@}*8gS)dGtl6S^ukthqQLLBv|_^57z!7&`-W*591kb z{cj6vXIsaNy#Dt9JaR8Q;;;YZ^fycAfuEc^Zyk_7Cmnc%KBixg7`%mbzfpHq4pgvy zHk1CRTnrxZvxLXgnw|W{+?K)&>vq})rhe4E+MH4}eEnK%;eW>Z-T(McTED9~&HCMK z;!kvL2XysypC7}}`rUeX!@cMJ{L6tJ#7^+msKSLQ&&w%Tfh4S`o!1+cxCFU z8e)k#{k!n*6!Q$PyJ>HzmCGrnZQoXx@cT^k>TS=DtXC%na+sVSnY}5g^SHDx&CG>} zM->}b(L>nuDV)w5G$*YPfJ83}i zJhhoz3#0r*`Yc|xbYLRSi-FmXUk2+t>wLf4#x(zt9I9|z@=w%vKeDC16<@M_i*8eR zu6|XE$99>o%Zn0WeM!Ov7Qa#N2i*m(M1fj7yJ@}h5*FJo|> z)4!Z~wXZLWjlQh);s+H6zYSWV6HOd^2DwJmX~J(x#lZudSsFb-4xrl4gCE@XnGczB z9Oq*5rl6OHm_w|DUjNhJKP*4#x?wu{d)lh0ikX`E#xDl^__NNk)tp>#YmRnA^KW=U zc6ItH)`%i`{WIy~ho%qThx(p!p|B5<+CVR{vmyM!Cum!9N#*2BrQIX6 zKYi75+R8OKdw*}*^6PImZTT|2)oJ%T&i&2&9*Ga+r?u}NUJlnf^#AX8s2@Z9e{($a z3nS1nQ#|w~6VD3kQ|yt^r%T~$;u6S?jZyo2Su>z`(-ZJ}C%h`zV{fI2WBU7p6jzD0 zXwIU!Z85%rX$RRqlXj#>6h~40m(ZJjeey{79i_iA$ryUK2%BDttP75I?iB$?J8-DJ z_9)5r`Mz1YjsK}~k%IMvSIuuc^m>9xBJ zzWi9g*H42l>7Qr!4X=NG5W>$9_|kp9>wi}KFY!L&f70>O@h4>)GR6O9IPpKl`@%6m z8~@9R`0>9DvL}lF86P9JzYklcwE@G!`_togB?iYn-xi$#j%!E2v3p)oGqN7G?}EY3 zVh{MSaEB1B?GF@%raIt>n+rLO0F3-f_ScjFo6N8&(_yhZhPhjoiRB%^-ef)%U z2=>s%$d)7Hw|d!)c3vc$qh@{gpG_8Xk}XRP&r#~e%Bz=xTJZ>qVX@UaEG zc0ay@d>Q!}t}i3G3*$t7hR#g2pb9Qev>QTCQ32F4yLdS%|mqQdKU7kamTS9H=xZQ8aqFR*`tuM*xp z6ZjIqa5~rub1NrQ1+Xc%xzO_(Eqv5(j2<6*NbpqrIR9_2*Szrf*kdc9li=7v`+6o= zD)*P4P+!UG@B7yk17rWTg>uoUV-J~fhs#e04_^KkCKNL6dB?{#d9Osk$*tcNp43L6 zH*cfIwSMbk$F6V7fBt^Mlsy+cbQX|{7uNgIIJ%TGLZ z{=x$D`?vfae~te;Hb3?IEx&ASfBA`>;}@CdweRw~aA84r?$QYj_ooM53X(z|{#!+(QfZexX|-hVxIS$i0oDVr5f%<0AVI_%}FxR3Eyb3Nq6R=mXTtwUR0P3G1HdT$Fk zPAl;fc~{jO&g(jKV0_}W!^gclrlN1QjA2g$Hi38Z%(=&THe6d}xnFo~$GES&R>t}7 z)#JX-H}+~=Vq>KjWzO{t|2(Xq-?A}ZdF@eCCQjL)OiudTFB80F`Cor+yDe|e*b3Ur zRK9wA)oV4Y6Ax9du6U?y^`rMc3J!RO=>0xSnfg0*KH5%9dkVR5;xBlD{7#SjPOV`~ zXt~4ZjbzRz@|(0r|4-4o4%+YgZ+ibu^!_XIm0Ws@*1y@CveTSrdrE%GG~*wq<_{)E zgfroa(LpifmHmQu9E2{#`Q*^&dWY(WIaF`mvRV7}6o*R6=6-+98BmZ{xsw?tF~tLj`-I%?xlV9a7Z)EaZ@qJ1egW`DP5zR^Fdam>NsP1^d9lKNp8zG!m zt-j`=qOPy+j!?D=U0T$3=Wfo@q+W1lVNkCFT^WsT{S{+eu?v2PdJn(41e{dR9&1XA zxAR={6O~h$so+lg@S5Sts@0!(sHpEQzYq22^por}mp(%}zZ9FJc}Ugj&pcH0`s$!Q zZMpT`_Gly7-WZJ`-Oi}}XOw5e*uH1J6T6=>-|U$~um3H-3&MK6*xMtTyz>t!c{lm| z#r1o>Hlm+f5V?Ge83V+=*i&2%1;ba5yBH(caB*ie6I)1#k7-qzLckq*Eg zY+S~84nU9W+LGC_h1JkwJM{2<7Ju&94UV%6EwT(PvY^FMFYDmm5G_=$&dXXs&d}nb zF@FCY>i=fO1THKL>jcBiz%a(b@QH^GKrg{i13V4D(EuFeMb1gW1g>3}it^p@eIwcS z?RI>~tv|lcJj9xL(Do_LF@h3hZ!U9fv|3*Nqv&15$__slyF-4y z%G+{BD0dHj+Y9K4Qs(NKZ@AC3_RuhX{%Z~RbPJt&dCO~N$H^O0oon&Sa%yj#J>=!B zSVw*Kk<$zvygyp1Xx+T1kn@yck%MKN^;_oM%{&>N zFC_mO-ePXECl*ia(OjVOm*3hL%YX7$6<+MNN@6CG#i;BD@nGr6myyE`RDn)wfM z7^Mx#jh!1=`RZZ5^ef4bGiU0?KJP^qJ?7I(k-f)^>}B`sY;HS$N|&|j*|CV`Q2u@f zD{C?Amz_85LZ0>_V{PmMDK|34`kCfS_z;|#d8is0t3$^6fO9XhwRMp9rWx6anw&!U zF=do1qg(~$nptB??js58?C*Y^K9AA4weKqb2Ym1nBffK5ervv?Ex+bFlYEvsG?%Sg z2X5ti=+Dky|9?dPC#B2tmXA#TI&|&!|BurDu7Lh`2K4`0K>x3X=r4J1{ZUHZ-TABb z8;1SOdAxg9@rsI)$Q`?|I~9+6cT{38DxUK0Sc43(4s?h!9}iZe3#z>Yx**o5XHl=v2ncDc-2Ks2PnJO%U;pSI*fFh(O;BX!#YAS zv91`gu1e33bxA&xbC)Ds{(8b$hEDO8(R`crd~zWK(_!@EKJ-#f?XuZ@z?6G&;K`7rod0?fU@v}>IAX6|>+ZpvN0Y&PdJBw^|yF7zBe*_M28DPQpNd(2ow zzb(`+;+>E6qL=3#i=O=DtFebgar^2he2Vho?6Z-ow->zN}Url%TYDETp zqP=h~e<`1#pmofgg6GD}5e#QB?qYbY4j!ulM)6H9xUGYqVOUd+(fm4hib?KhN{e^W@q4?7j9{zx7+c`}(c5&FsGt)O0_NPDQBbPC}SN7h(A!}JRxF2Y@mW6cXw`em+xtA_RipYwP)^re$zwxxY0My@nxYW)p$cOjd~*ne%duj=Hk zQB@};YbC3PdM+Lt>bcIS)|tOLueO)}GyK27{~!2&lYcwjWy@x}FFG&KZ_W#pU1$70 zCnvni^npG?bD86<1!M4s`T}Db3m)_tneYc__RrwC;9qT8-ou&kJv@7Z++&UT*cYu6 zU%LjodJ;4WP6}SM%MsAo|1|4Tx+&X5xdxx#_-IQgTbn(y{vqa3728nxZqCCV?Hk?5 zI_0R!>nzNMu+>*cePjG9_Fm361?zmvnxMaeI^VJlTvgxC8OzW=+Om4&Tv5iMqS4;t(!Ld>A_Q~Gvs@yuE1w~bZUo*=KD4h%VVttbfW7<@1V;F zcLnGi@%eFNRtDcoMv2eGW8!nk*e_DHHK27GS=1-lG1{!B5xscF@BNffzty&`+ra5i z-`MMW-n;Ih%1z-+%1R%&y}Y6BhXM9`0*5=mPZ#>8v(n0ca|LI-f5Xb}CO*)s*dI6= zJ;Hj-Vo#;`H^TXymCUJ(C)fH))*lo5dvirNf28`)eH+hWl!^1KopNSRogs0cy-yQ( zvf*^(n?vi$|5n@M$O|No7T#qX!H34+G|x-mYtdLq2YQI>2xMIYYi=a#Hid$mk2|8a z-H~-As}lV21~j&Dg1=t#LObIoXc)49H3uA#>>*OhNeS@Z6dZ+`UBi^OyN$lH>C5B5R-3reP>{pcxZ$US>Q{GSglbJ_dL)!*Vf z@9&A^ASm8(B>UyM$&@RyGMXooA1+?hy1vXqcjO;rP2UmD*7-U1XR$A^=}7j`x&fYP zou8f~M^5nFrXuQ4S)Ex-EVHrLN^cauE#!P$*)v|+ok$yM_bA^?p8`JLkFeqE{5h_tv|^I`>?j-`dZbs{Dq3vzCE#(?%S4 zhH6LkZo~%gwk4aTm_ALQpV&a0FOt?P+eK@Ai-=PeTES*NFu3h%t&GM<@!$#INw(4x z*)P>KfTNed5xV+B13F1(L21v@T*k17dX=N}7QCf;zOFv8PO6x9?TU{&=Sk}<=`8fT zbl7a#&^}B%XLEY-9f4_W(tR^{Xi+X3jdpp8qJ>Z1o*OMiqR4`B}z6V^y|$ zUVru%%sfc%QsVgL*^YVrMavhS&tX3PFnXK0>}ShP6<-K5|GkqwncuG|XT;9`$PO>O zCe_Yz>y`~s1dk@_Ej^!2y{YpFxnIBz11`~-`z>pPo3Yu=x@0{o1+HA+%D(F2?}viH zewJ+SxjvlXNyksp_`IZ?AR{aNCVx%O4)V+^r(zLgIzC9IXKZ4TaK1O5l{!B6e1e>c z$WY^x=ZsHIVtmk5W_+gD<8#lathdUZV|=D0#>YJSu^FGA=7e&uDa58?JT{kA&;40A zJI5WL&1JQ7f0mt{Yw~ll!`T;&k6X7pK8bouf0|9b7md#p#s|1GKJK^P@zJwV;9`7! zntj#9-wy?Y{Va8SCSL@r#^Ot!@%bY6dUp3P~4o-de9_Wma_Q1Y5pLqWq+R0c2}(nM&r;Ho{+Xu^}6*^xkXn zA@2=_A6XhIIyK3c-WWMwbZR4ZmE!H&7zeF?ydV4T4dl)bbAD0xD`Zm*al!^*`UPz? z_|kjhY1MTbt&MfEg;cH`xqI(~=DJGCNQVJ$-&}0LL0N}n+O~6@BS%-`!FS ztp?a1W(To^$c!}nK=K{XX@OBz|IO4DVI8aXplbl{5zD$U#$0F`a7-j;NB6k_%e?c4 zSO@tjWK#WHbB#32?e~wd>(JhCYb989!~+x z1vW*{|25fmdFh>UOY=Y0SF6WV*Ud&A)L1tgpYt$dU209fCi_tCHAWs4+w*dY>3Dx9 z%~OHbcE+Hi$;$6MYRjXJ=REX|E*DOXK5D|wJQ~g~bo57G@nt6p{9}5j=2#2fE*^d2 z@xK)8Y4BUo3wf+B{G+eG^-W*@huJrK+cm67e6z5>?T>}zCUc(6Z+-pgS6MgJu(q*_ zXYz$NTqB#^$NG5rvS~)YK`V{=u82Ms(Z@XIwXJa3H8x#<-`^HG`$3F0dm|tlUoCI= zTE1cq;={J-jMJO+sn^Pf$7Vi74na1tlfk|0-VEn|6g?lt-fry;=ZArZeBqzPZ$O{I z3uX^4%3MyFY~HmMgpq;S*BpjdjI5!3+qZCR{$d*r!8O$L4xY=W8SeetJABc4%Nldx z&A;7qA%af`%?XzSzw-6R44(YGA>>Uf<=ViD_JjUB_}!WT+&n7;PdVUe&IMb~;HS@Y z;kZHVp7I%9i}P)zhu=zFexr@Q5wF2#t*`k8d9CL&!|)nBN$N)mtzHWL9|?ZerMJct z@NXCner(f=;E&tz_mZy>=l=b|-$HqJ4BiWV@u5pwwrsI!U%dM;c+ge*L~r8WYxBt7 zdF3Yw`SJ(PeuI70wmj*{MxIos$dh-FCx7ge*ahXdjALmM=d(-e+XVC*Uz7OQvIw z-;95qRhYjcu%U}BOJ;_#cNaRc1bdhElkn-lG2HVG${SfS z%y)0clVwRM<6vY7vNvXM+6GP}ONzm*ktIAcvIHD`3VE&ZyGWKGAM`xV zw?oPj+8DUU;X@A{|K^rqWXVu`=+JTgP;`6=S@LlY9VhYNYmz0*t)z_grTXwo^+CMY zmEgr)!}Vb(UhJ}YF{D0l|9*M#Jh=!7USw{=D-%Be{NES+=)%_C1pNPJIQY?f7s--d z8~%R>o;dgK7ye&-0QiTZd&!R#;LMdH%ehaLBQNYv$dRG;XVZGA9)vP62*;4$s1zLm|6x5i%cpt9K#xmHZf;{YIY7g*I&1 z7`n2M{n%A5f=*EUZ0eQoZVBidFl*=x1+WZxdukYf7H-JkNM) zZepnQh?&G&yz_C&mnx~U`eggwgG{zu+t=~M?|audU&EclOlfmkN}Gx?x$_}?0l%?t zGogjI1HmNwwspM)uV5SF(*&{W+lx6bBB*ma=G1OKU-+obF;O2y+Y85AuUh2P)!#09 z#;-va#Ebc6CTA-I?fDDM6TR?ZVoe5D*gXMX^qIehz6)$SHoo3IKWGuOR%6Z-u+O)A zJI|kFGmeE%B9g|cl%w~{CDze$H8;z9?!cS+IHz%^6{_1cg7I-{=-=7v0P$&UVI;h26ILQ zqBjqL?~|XtG`>H534Ay4?fb#^C;yxA{gL;H@4hDc{F03`MdMc_&ZCFNN-wka%^{X@ zaD&zNB(h9%jh)b|_9~hN&1@fG?PuSw{DaJMl`7^+%tq_Vw3cQU^XSU+IJm)Q=E~EE z=}e+7@wWDySJ_^C)`LGyeZOk&Sob|`9&Am0zjCkUkR}m_Kt45hkuTFl3@XiH&sgM( z_(5~9E}Zyr`{V3q7~r{L$F~As12I0y=6TZ}Jvn*$kIzn?ev1G2*-Xl4F0GVz8CLA1 z;xaYYTl+GYl<0&XAcnV85Ltb{I*rW z`dYrJ@Uh39Z)EQh+Nrcg_HJj5t{0DiK|I>F!dqVem&o$g;sh>_<`09*L>$7!$&J#l zqEF@b=spRTw(qdn6NhlWn{mx>xJ0gdY3EX~9~SKB6rJVh(!qCzgB@LR5gnkr1p7NL z06X{Z7xp(PKO`M|0N5W9?C7=D+Y_)a9S-({zvJTXM(u|w*nc6|xle-q5;S~hIM^@2 zd#N-N5$y7Huxnhre|k9B6TVIY_B(CZ9~bQ0zhBs+?-TYO=Fi$9z=ym)jV+VK-eDH= z_ouN1?EM-Q^G=abC0f5@V&kmK_(*gxRu^GEHT75aOF^Q)@6H;AM`Y93aq&cdvF9{a zrRp#D@3+67d!PNi>vu!g`PeD4QSR8A@ZDtVE5Nx#Ce1o-)-Zq zecB&e_hwF+yd)noY63cf^%2dx&{eyPu1c$Q^Me}5Q))y03{^%tOZK7kZReHDdEP_b zMT^$z*n0_&kxoFi$B;**_=<7tvWW2&1HEmWr!(936*n(Jwlpv=EniXd?$WQa6CEFM zv*s4GCP8*u!8P+Aj3a#}2-2;k)dB)nAN% zlZUMtMi-gyrn~zv+j_M99@}s2K=<#oYRtU4=Gu2T^BFstvuKAe+gif;tBFZ#-h2&t zLaXt4bw3|Hk=lhU;J65PXb$ zSO31E{&D|)`xi;+pX{qk_0OyGymn8T;FrGh$f4I~4l_PO={rXb6$t(hAcv-V;7^9z zosY4{g*e3KlsLp@#UZY}_T4SRy_>+htkf8VBfCEKql;zNzjwf-=&!_~zY^&0Fm$N(5yYXKwNhFi!CI-1?Qfd$@&4nD`Mcze zYmGn)Fhr=og?vx>Cb`&AgMM(0&(8V&j?c~orCsH%wUArAjc*$GwvB5$?Q0EW1J4Ef z1Y&U={FaVWOv=6LeJlC3L+zI_-^8mD`O*WG{yhWmp!%o2>^cMu5_^1kN$xB=w=CEQ zZSULh-S3{P{_cUZ)!+RO{`=3CuRL5|bH4c0T5=>O2HBr~AwDMbc|CPxk%!N>Csbc> zN#3jgIg7$czYzAqmLZ(TIf{qY~61#_pBMoShaVp=Y9?M zUO6gyeC3%0J^m1ULym*_=l1yt>l0+N)np&8Q++(c zmdt7tjq3X@o^>&v8A~S4ng<-p+ZPg+3~oO1o#vdV4LH;ny)2<--F*Uq{1^=Vz9V5%l}C=Sd4 z)@3M%R`<%COrxKF)mS_DamROz8PhZ~)|YwiN0@t?1~RyxO@G$VAK^t~WAatVWqJab z+`2A2e=$wm>Y<5Mly&358_oFu33@Q|EJx>YzDS@qm$O>(LcV4_D{q?Dp9cP`M{yoG zIO`?`QHHK4C)ORoewDuQgKzRMqb+=^F>1k1|2cG`^-3G~*E%GN94W0W7QYo+oEhoR zfX2$Ehm6LZoX3#P+KwZP`4MP^zMjxnC}(Gvm0tSOG3S6AZh88H07_k|XKX{Z>ldI%8gSpXO?03G!X?KycLpm-yKy`9Pm_ue@M#Xlws! z`Qf3dmC%4o5C81B|2p@Y^Yhd03iI5K2YrqER5|j(4-<0aYxG5O#Qk&WXFj~+-M>RJ zZ##IFPRCyF`vrQe5cz3jLX*80h347XMnAasHEfdDSp1^5tY|CxyWlPBN6MjVLpNgY zZPB_bx9kF9jZWDUPT9WeD9ibCTQs)Pw~EzE{ypr0`!^2UF1%Xf@15Vu37&gSFe|T8 z`mca7S|hu0N$IT0f3ue50RIGNx&)cG4Vw19bVvS+oK>y9Nv`KY7iN7gw2G|%Y79N5 zSgYi!Xj*l|W-8B|++NBmUMxIo{B>1Xue|&(=?%}gi=Hk#H?T!*3GaUTp*f>U^mrNg zg72dKB{{Qr9~BIu-JEpjk$phgpjkcB+9>lLd2R1$$3AG(+eN*pH1a7AuD$ags-xh4 zT7AmLc6E$m(iZV&>A3Pxpf(L13J;x7Y+Z2eVDG{b>=4Oi=^5d?8T}#~PvuocdmpMy zEqy6OPH61(`whk^NMDuvt}&ZP*%IW>P-76 z)Jrx`<=)M!7OeK!VHu|H?){GQm8b5VU`2P60~=wkJqH~wnBu@RfxaKi4xepfY?1$u zP=DWQ?!9&9uzy}T@u6zgKa`W_y6F7ZPbnYvAbisSzPWxiC%C#!@f7&$M8ml(>Dr_^ zBEJYfQpz5Dc~;?G@mA@W)pgmH*6!Lk_O?fyFEJkL=l;ykI4Z}=E$fa)h)!91cjQpD)m#0qz)Qcx9(l(1q1w$8e^nQq_{+LK zLMLC#eWmVCT=(bxvTlGJ>d~Kq_P9RGRcrrRxWAtJXZio7@3Kvor&}i;@?E~E#dle6 z4m$n^vj4PBTJ!v~J`$A-d&by=58BU`Og3u-g7Y1w{tk>(Njn2R*)@o{9n%28yHb&Fj^EK=?ZYJ;b%jErjmYm{vURr+pQ&#_* z&-n6N8M9b})ju%sAyN)T?-^LHd~d6-=CX6oX$|C7c&*?Xd_>wR_^`beO=E2AeV&&x z)+#?rW6Sd~TnoN!`;hwmFtS&B@#uZQ_kG5vRQWIaYwGk~@7e>GHA+9Yzm*%_`2c6s zlvw>|?g97U^_?I4qLr1_o`I%}bHtVxFyGe4xl0S$dEWjF%HUJAui#o~^}hrS#jId+ z>y7~HltzJ*%Nl>3ZavoilpTX@-NHC%yc&pC=FQ1(XFNI|U_DX^XFT1*y1-`&^94h; zV482Y^G1Za-)CF@m_b_++PanfMuups12`^f@2HWdeMWbIAFZ?fc&0UTxbgjGauC~XyVH`BZcNe8aqMn&Yfou+v*S5G}UBZ z2gp-ZZY;W-y*kc4*Biex-^`DH%(rZcXyyvvvTR-XE!m)QT92;l1da2zY@ELM=&m1l6KSTcX8R|Pj|35?BsqL z%4M{tciv|o=GhtNy<%4_@ZvV{s`IQGdrWw5f&bcg{*aYs_^w*~>68)QwYYreJd^$~ zd^h-el+j;t@fqt3I)7W(-}PEye>eHHJ>(v{YgXF3?#w@pj}jx-nenq_Q?aww!}054 zqoIHN#&-CjV>fGQ;0djB>LwO1z8I6j7iLWje9^I+H8t=?7rfD(7w-Rbia*$6_Otp( zB3GyYUc1xk@4Sop(cRtXke(9qS(TRoT^<7;qSHgV@_Q?EMm)pNrtG>i%oo~vRD3Vp zn$g(B`CZ-U)gJOblpnH@v%GA7*pBy!UbBgFie3*BN7q>+PgB44TECxb2j5G!>)K5n z*C8*V`LDi_QMvc&%Qw_DTyFj7KFXE&(t3?9^o{Dh1Gx122ZuJ*y#Y*;vG-*vZ_(D7 zHaw${b2>NJg>z&hHcJw0y?m>4R2r%0HeY6Q2{d&ZbYRyr($g<*JtG>IyXST_*?n~P zL5u-sZ(bl@@oLu|DlHt?(wkSDpGQvB&S2F^6N82KD%|}KojL@I+in8p1a9w1Y154f z7}}{uj;@Dxu4HUIw9_-0T!Cv@FBf6$0d(|WW3qgWS0h{3Lq}JlCp>i2!#vyRYuO7R zQkef`Xv)~PO;?$G){WW7+oq2u<+HYpASO~0=#MQ9kn0)fFUMvh-W6?!rse0p0qvyW zGpFOv660!KH$MLDzZFw^2prn<^HCEoZi@u^-)_1rDNpq?9#JA&C5{%h6t^CXIXBt(u;^#}&SK6}X5UtD%6h)qIp9^k z@x$b+cmBArzX|%vBRELv}K^v6Hp+4ZMpHE1gGN zQqQ}1-hF#9`RySS@O&SR{+bZWitec#red@PCSuTbuyiK4?km} z`wsk>4#mkM+UvsV>$w{JgKtBwPrk}@K+|sBMT}ubiR5OY{y!A3UaX`rUv;_dOs1W* zC6i|r$Q~iK>VEI%d+)a`eCz#A@ExTd%?Amt$>djR?b)t>+gNvyn3Hs)zW)Jmb>SQ9 zU5NchboTU<_|RJS+Y9XQ5BaqjgZZ^x)=178R=hUUy9OBA(D}-H?JAa^9+IE_s{Hg9 zfJgZrUB%cA^3w~jw<*(2d96PP(uVeGar2D=$TKhe%4yLzT94359czHo?Yn1OOj}!> zzPsZxLVf-Uco*#SUEd8b9=pcazTRT+a^%_db-Q-1{awd&=@4J9@Y$Id4^!_ZjR&@E zCu5>4Qy|4n* zzTLdqW#@gMlEwf zk17{o{`9JoQ&xq>hgRKjDwG+j?O~os@O3d)v@3{B18il$)&*>xz}7Jn_=x$qbdWFj zW&)pRK`^pka=B&EKlW^P;EX$P8hG73lAYWn(XsS}=s3bS79i)F-yBHr0rD&k%{shb zaB?+mihjKG^atdQyIyOY^81j@ZRFGWxW7ow$lgKcYVQ{JOssBfogQqR(~hlE{A7v@ zlC6WjHTxH3(O2x{ZtNVLV|^MshxwYpIiMu@WO8tl^9LoLhLTOy9@%8mT>{T7e{0Jo zuUrxjNDlpg@o{-4^}7?E@1(CK&*W!y!Z(r&-6dgkd|L00L+jXcg|(~9UB=-VZ=6mt zpxf}jiPM=ec!7GgHm4ij?eOq_M-u<*{CYdzFo3*QepS25Ln|@9l}eA}Rp-&@=;LAC(nZT>?DP7qavF|k((FvYk zW}hlQ^?CKg8s_A+j;o_`P*)iIMucDZs-vqEQWKW%@Oc16$T{5Nt6yz8U1CaU9hcnF^`?x9`DGOe5Pj?oPoqj~h_c4Wn!=qvE} zBzO)XbLF>aEr;?QIvH1sxS31O+Y>t4;N@e~qi?&}lTY7vQ5Wk%`n#z&;LB*!v%xd$0o7;ylUG&OR`Z?WQXuM>pk%KEI710e?~r3 z+xE+zj|->C=ZS}W$Q9;*wJ+Pxvyaua0ADA%EsJ>kJl3Mf-|fODAfMpGJnWI(16@C< zyoDSbbk35uA3SxMZ>DAjn!DK3Mc>@2eLmg@KT^Pb7kA9#Z)8UWi@E>uxM)0rT*H6u zF0l@DGX6c#hU|tptc`caM7qQ~9(z8+c)%y^__&?Whp{J0!UuX7PszGQ#z^{Je4~4J z&;B*4$D@a~T%sO*Hxa$mi<}urU1@f1MSkyFD^FD%wxUm=lRB6y>;Tq?|J+Z2ci(XE zuA&{m+JPJsyvR=jtJ)AbT|#@~L|0#yEdlPNM-9v#xpkih=J%@a$JD2K*1GGh ztWbsarOX(CFKn%^b8U!@iex$Rzi6YQqR`;hg;DmV>JnWo0^T`4T3dHy=epmyb!hBT z>nZTmqkgK67VI2?FUHQ&TASh3%jml_tlAAeJ+(W$Wm^M*J$#!Xj**Mc6#M<{duUfz6|KQ*EAZ zo*lD7wV4-+AMIK>zrJhK24nwpo!`*hg}pN+GqYB(PEN~cK7!pNJcv$(2iZNwCiBqR z`CA;DO!SIQlg%T$Y!^0<3$JVQ7`UOYTQq*02Qd`9HlF4_x*Ptw6?-gWRmS+Pm3N#H zY)^vM4d8VHc-;VAGgr;6KW=5#PNOfORkziLF56fe(*1>v&9dL-XO5_C{^R2(d;jhE zvlTr@&R+Y;?z0tqBRg|mT8RGHHr;mm*Q;@+e_hyhowDngr*rMPCiRiNb)tj1(AT~6 zRp;_(OqN`@_0bS~6Y|)groZ&l^mp)V3Ofh-TIeNX$+gm%Cw9SS;)|zyY#VR)`IV=- zMui`lymav_;e9)LUiL@VSA6hTvh4moFv;fd@?Y0i3XwMn9#rm<+n(B5)Hz^yIklY_ z?WlgW ziTH@V~csgzfAK1kneu{r}vaYiL zzKB0V43WGh>0a$6*&VQ^g(lkjP<8-o2Kr0B-Y(196hW7S$dd{Ae9cGDbJB12-d|}I z0ccutVzhIUV)MEV5DV_iXsEl4c2vLSF_e#|7*ls3ZCWOEO{K2T#KfLhS;UAsi8ak3 z=Ue$X__5Q7x1DUgAqoyvrt50Vp6C7u9BI%|ZvG1l{&xv|YT))moT z|LWZ>NzV?Ai@uurtZH1enP-D`;#li|OS`gPLN1+-4fC8nLZ>Ajn`Mw5&3^YE9h?uS zWFGbon-=#E(xPKCL5siBnjAxmuRF9j!9$C$duUOz2VV5j;>$llXNMeG#D+7pIN6~^ z>QkKeB3gu2yI416*0abbkw2jE3RsVoiWVnBiwmGd?aj#damFnIEs91v0%^_ii{h*k z^3q~x!Uv|q-l6F*d{%Tg%ArHe5s3~%TwQwJGr^|kDbPDK*yqsTKGC3|KV-3DDuxEJ zKW-8Y^32d6Hm#vSo?k?R&X~9~s6Ca%Pddx>phJVHaf-#{Om&fyq`c8eVnK!m!Oa1i z2A>rTZqs^;sw<*1Y?pONG2f1^UW2Y)gRWkK zt}ddDLfQ~)LDsh^rW?Xn$yhpJmT0p8`>7f`CincpQ@P}5<*qC|)iiJQ$@stQJ6nc4 zE;_&H)LP~?cGvjFOMc~Hho{;PJ61N;mz|$;s+w~1Y6A7{_xesgLbvde6X;_N{{kO* zKpPqN+pe(Qx^4fI=&eha%ql>>Y-E0IBycTRI(61SHf4!J)(~q_`FZH&0_Fy8<$M?M zN1M){qh943mZ&Uqa>Src1Sva*dUx%c65USjqL~MwZ)w!K9Xr9#xAOA}&;tQ%V%4GV zW7vx?t_hAGuI4LcA2@) zZ2XG3hRn13opP($dtwpyS>CvIggpQk6K`^8|LGkb+K+^JM_dVcTMRw9E~4=do%r_g z+~oN7w$awU5_tAHa5Kp|^t&U-S@xJG|1hJs7CcOvVDIbPgx<7c1lngHyjQ;Uhurx~ zCzhf4vo79sJ9`CdKga@j{V=q@ggLl$axR5$#bWeq5@U7@oFC`eZCukBlS%lS<{7ch z+n||Enat%84`{oKm=QLHYD|V^&MgFv&7w}v%U(b>6dOm~a#HJ6l7laS6 zrgmB@a;x*TaK70)$*HqM-=cR?>-?hKR)1=pcd1Tft#m(iHoA5Ct~mFTF4`PGCp`>~ zB&!vBlw9gYzl0XSf2Eu~LVpxz@5W|W@*!(q5ArD@egYops5o=r?l|onoaeXg=Rw`- zj9VABQa9tKJzno)yleUYfivz?8N;c>_8+z~H~o42f~=H0)^q7S`@L;@x%E6V(XQtV^)#UKx*a$a=U4}fl~(5ILhAY- z+$%;=#q}Wlk#1C9gy+^fUA;IG9HtWo3^m>b4i#rQihb6NPVBlBUk{o+>dFKcmptnx z?_dC)dKms`M22rdhHpZKZ$gHTT=nz%3T(0aGe_2Dkvkwg*u_{$9_cEZvKx9_Ld-y8 zYM%dQg_c{~1J7JFR? z&ad+wwqZgqqpRn?;;{o$^zypx9@*sBf$T>z82_{Naq{`ClhH|`A3t_-!*8BAJEgn% zZ0Pzv<`|BlTfcN_KJTWkI#xgR!k13n$NjC`OE$XyBf{T3dD{cK&$iW!sL$Ov0-N_s zrveXi4O%m_9%cjMo`uYxL|kqm_%5)RyA7_dtAPfPfy=ra8qhrKh^-HuY&@{zY>73Z zLVEl(c+*&%rp#@=v`sO_Dh^$=Ge#ZYv6J=No1hVs`vQ%GCbH*?_Bk>%wQ6rQ?_$`6 zqOmYA6r*n{g?nhE5dEWhP~hp^i2l>M&?LjuVfyt3Av&2bCAcf*;s$rY|5}Ul|6g>75$UheDwVKOqqxdYBTk|y1O{!OWL8xA>g($HC6=js2OXOM4;4zZ3C+fp{X z51JZk{A4T2E__qDPmH1T^%-+-+m1cvUS-e)=H9jmQPUY~8^pN*CdS$cY1HPJb=!)o%n;pF}(mJ5EX2#!xxB9k%w~=9< zVVj{-Uh(wjII`2bKJLX}qCZpUEB)C#*q<@sJ@H3y?$(>&s8&@NN(Xjtou0f%W0&S6v(+r@T0LRyfGOMsaX(2pm|RKX-hkOT6d9 zWZ@sKVO-@i6>`nuIt|+O(f2H3rP$pIV(hC>G~=ph5ph}B4U$6vc!+%-q6PR@OZ0uv zGUuEZU%?&>_*d`_Wh?D{;_*XGUjudw(O!>c?^kHg$7v2#`oZ7$QTzv&AH3h_SpoF! z$Cvsz*IT@_4=qT>e#L`>mxk&8o)6gn?)TAu@rC*y;QD_0p9M{5F3^hyV`Dlv_z(2W za5#9Eyd~k_4A*z~ALM@r2iJRW(B#2^JN{D{TkrbILi8c=7CTSO^@Y(?FEay2uLr0*Ym)UPrb2pRtM*iU%V2|U=wG}g`fZx}KE@m!avvP%=y@|Lz zzL4Uj+OMw-dtClrD?VZ8Wc)&CSGgN*uE06yr*%5~;`nnmFWU4ep4Irs?*2Ms;eF@M zkADx`t9^~dM(*wLN^AUf%9yw@DdmC)r$-u+`PAe|Ux^*=87r}^i|?ub1$>9z2fjBr z_>M#0m%_KfGx#=m_uzZM5cuwN@Esch-`{ibjUO8W=U$xJG9awI9EZepp$FI3dvJa8 zd*Hfa7+kYh%Fr{5>rB4z(rocW^8EOEY>I&moG-&Z>+cLe$E;s^r@&sv^iHL7J?N}! zBK|-e|0eC9BpxWm4ww+CI{6)Fd_8u;fE7F~+h9GhlrF_mI2U;X&! zJU)hkd1r4oK+i?oPHU-->517h;iM7?uJI+^cY6qrL{1fSs@6IMi znQI(>!`%~Cy2V?M_&A3;8kK|P-0$|>KV>g0OvdujJR*`UNm zG-gv6GsQ;kcy!5(RB`SxEsD%$2fxnXXd7Ps= z3HTQyx6z9x<{P7ZC*J$&V7!;IFEU2LjpDu12YKLS06D*%>jvsn%r{Hr==b8KQ%vku zYa+B(Th3c_1|jwnj46XYAwBZs`YO6fFj40eKexVOS56VK6-cty65h2zwEQE z;7>digSUz$8^u4|n|znW@LsWUUW#d_IA3{d@aZh+(dAmL6_yXc}*qI9&2O5+|RN>=(3iwd&@Qd_8zLJyQ zVeEh(svkquja}g85N{g!f64dBS?+@$1as(Pvrlbe&+OaCFVcL4@Dro%?nExHse8*X zb$657+e7_s9m)*|k&7T)oBA&cKjPNAeTaHjzel~(OnuX4DZXjPmlA7zzKYHquD=Do zVDHki0}DRHckZ~0-@M~qM%$v1JTuODvyx?`e9>TIDY<7^#MF{<)bK66ywTNc^T#(I zzchbzHHY)_9sO(a{g5%K`F^Z@&3EBlBRZ|N4s=}U&+i=X&-cPUU3jamI?z70i1k55 zye~32)77UV>|jfXo@@sJ0ckK%K0K~B_%^M~`#dOj(9B-_{VN38?v z$=gw17RtWcZo`^pR4B{_% z>!lHie7RJb`2BS7O4$kYJ-`|d)9)s`-<|jP^HuLH)N66hZ|glp`Bm5zD&GMTt&@g4E4?&X?ob~xXbK0Ls`|H@lOnI{I7`d>zW%phJ zR<%=kp0%yWQ{}#GgCB(l@pl9~2@jgr)m3!m*7WB?hpm$onU%~!qO z-2RaHX4iXsv&j3+we~l%RV%NvmVKEuRF$8wmQ|6XT{(kTGkXYBR$0rM)hBRS#Z|nO zW_T;Dq8U6cg10*1t#o+npp{;6EBLMqhnHQ;)rCFR$m-<&7CU%$`@HU{O^kKU^0tu= z?iD=ZPxfy(aH%>zr8@40_8gyY-BaJR>&SR;@BJP;4Ap*KYWwH~wJ$nZboK00>#*OB z+&_-J?Kr>L(U~20+PPfrnEj1g$DM`wZu!YZmfHD`i^w~3zmI{d)bIU#-@&)8{Qa~C zX8#a4`_E5#XykUAMy9^UH$C2On(gt{9st;7%MR0qi{GKz`(4tv4;%WD4ST6?UP=1K zhEcTct_(kVWXj>XBj9d5W6;GIbh3Y039*DV z*wAhA=@|!`e-eEA4DE^*I>D!*2kf10+E6*=Qv8?N!Uh?tt;f_B@@23s*%wY*$GK`h ztEa*3B+K7CH@L1gi}=Mx_+j_*dzUY{C45Rcs0?}_9vRhM^ok{DzpWDHdp7-kKzU^g z?xozWrTkg0924=nfvwx#A!w6?FDd@B1sy|I*g@nn*I9zrMWu20d;DLSddlOyQH zAC@A^z46o5EPMV+{*?4UX&N>lG16A-fxOqS?MAbY7=2f4wFrAw{#l;ORPLf$ZMwjc|cc?h3Fc}!VV>?r^~nWtWs!!sk3 z(I+-dx${l$_1lRr56(~7`CC&{@TWMpAkDR8>O!9S0HnIl@<5lu|YuPd4Iwc#C z-@sAwIB@97+2zHox6jJ7%szNW4zZ?}cH#SR9|SheKB!QPL*F(qHXrC)`V#^dC7)wF z1tY(=5u=cvSADhASHk%VtEs<}^LF%%IQlsCO@4spRP~Ja<4TVEmi0hqCBL@!uP8Zz ze&Rd*&Zdo-l+nDd%Ksmg{|~3lHugTjei96JKUVD(jp;l4_k(6FZVBb=-<5m)yjMM0 z_#F??h8fehf#-jzJ@y@-9}7CsRjT_AJv(4Oo9mRDr)Tt2<(_b!6@9=q zKgjq<4=K*$o`n*#6vx+`ryYw?tjpi}e4kp!2Z7Jc|GkC$KFPntoV#7GVD-XRgnW&U2{4an_2Ne@n8cjjQRsdE z*|G$jYR+*q_&i$UJ25cMTBdw}qhIoIwv4?-{AkegoP1I}4^Uonvg%9lLdMJw0zdJS z<|FX0&YQ^~mNuEQl0|2SX;-qto(m6{`H*AC9m(~Ov9&@KO_W)Jt<{6Am5Hsz++)SD zi@po*{a3#GATVi-cIT+{#;lONE_E{N=evX>Y}l#ffqamb zoDVGf0dOL-Ouu+<&W8UW^$zMb<+>rC-~O&gmyzT49gprJd_EXISAJir{)#b%SK;>+ zlV>Ox${d-j^WnsYqIE+8+K3k$e++wUv(nfUVYTLi<{ z!JOvSuMpP&*Ug-(5MvE_+XLuNp83%sv3q>^0nse6ANgPH#82Y1)lOS6`u@8=UD(2& zL;Y1BJ@=fM+qkDNUuUZk7m3Ojl&;|%1EYIbaYu1}F0tL%1GfLedcXy( zUkUfSc-@X{QT;DE^=GkXVJk9JYay7+I}y9n>d!WNCSA||6!pVEOA5+p!w;z7u~)d3twV zN>5QP4lHKeiUVd}4!5qr6xw9Hn76-c&^PMuI!}MMLZhsqJkSCTMF)}#;=jS~fJ0+m z0J!(?a>z(4KMzk*N+I0=3tPk*W1mXWR8~e#VgX9QyZxExFKy>LQ1tH;1u&!q`~p6${l*#wtYp zvMV~tzmPqpIY`MiyZx-jNu0;g3f&ySzjw#8fVx8LNuci{>}faLSgJn3Y{m~eQRCOe z_;jHcx{Upj(Y*Bh#!Y@-rWt!XrtQ%U&KPPu1VfeQtY^g)MVArg2g|RrqLK5nYa?9C z&T}pyu~6vrRh>sDI{o?$16x!_8*x!$)s3pF3!Z6L4DxPhmomaLa^P9VHhVV7HXDMj zQp>7dttn2D9S;26w52&m#kI}ZC)mweGi>}5XkM_Dvp3BW6FW_>&^|G$-bKj!m3D{SvTUxAq#J%Obhn2UviO{Wf$@FL~e3| z_I`GKvTo@jzOLB4=t=VenQ2<*uGWz+j;Ww z-YPpa&+IX6pTn2csJUMA{?E?)KPJB)%X?oHbJELw%QjM1R*ipIGrXF$&%dk{8SS-e z)z{?T$+=Sn7JDsG$3!dGyf(O&^)+d|nXJ#4yL{2}#3D@o>Q2VvKMn5E8sFxs`O8g= z-`aDPkEr}q?1wp~d|HKaM9C-JTS>i{_?Sh@%c;j-5mMi)!pm->t(!k(Z7$6)G2hK) z0oKZg!zT=$89UKdCjArrB*UHD55cXti3@j@-~cAzUcQ)kNQ;$W;wFOKj+>;JxCwq} zZw0t&qyBW-$)%3M<>kxE_=b2yMH~1N4S3tOX(rfsIrL!Pr!{_vdv`yFk>+0KV+9&R zp8GWJQ{goDMRp6$j7!29=>0i3b8#$Orc)j~FIVie8@Q_so~>T_wnfVqE-&GE9?uQ! zbUCyWw`oUxQtTip9^%9hq^m^(6Od=+!5U&v!QLL)o&#RgRvGxJ9;AVwp@B*d9#to? z0q_`EUO@TbamfDM^U(_q^wRKlg?%$m5g!>=WOOtU53m8nm3h zL4E@VUi&?doI}oKF*c3lcpf>Q%KH@Uu7*w&pK8k^7Deu*@-N-7oO1TUmMYd3#Pi5^ zBuBVC3mcm28otfp-B!(E@N6OZ(e0F3%k?0*SO|{9Yoe)A&huTv|I%|8w)hP#C;JJm zEv-KN;@b&X;>|}?4A9%3t+J`Dtmv&D|5E3qP6<-CFWTvxLI?4{IU9hf&F^Fo%O52i+q4J z)ZwR{2Fq{u=hhj-zA!!tu>#TTb^jOqOeT+WGG}!&o*J(RI9F_Qp;ho3&JyqE-GNV0 zPGzzwlS7#t#w(lmhL4?mLfhWEF1p&B&2&R_>fyv(zVNfu8H*P@ICAl`CxyO-#1FB} z*x3I*{K)sWz|C&@YWn4jZEC;%cqqAF)17{K>FfVb{h9tA{W+M@pMh`LJfr?-4|Xp- zr~Y=wZ@xJ{C9!^8YtGxIGhX=3$zjlU{0n zjy>xPANuhb(i&r|Wqmc(=2FeNZ{$t{IIDrPT>Rj`DHv5({KsB6 z+4BfEpK#&y1Lu!{Q*Z%~WSrY4mHQs$+74Ru8@m*KS9{pDkF^~P=aUa^>=gB_9R7a^ z-VL$_OJ&lm_UBn&U8{N0!DsYE&(i1zJhi_Ad4(U^-}VA)uX1FWY>2Jk!SoTnmQ4_(e)UtbR(+MuF#a08li`VCXWres^PD5al-N9*j?$nbER=}OLq9FB&tYcEMdyuTC;eT}g+^Vp2pC25^8(tZmr zZ5Vn7=5fGWh`%qGC9B0duI`aMpR#&j%R*>1jx3g)8V8;v8l#TUIqz=KcZNsYGxsPj z-5DfrO5f(8)1;TRUI-p!>{-{~;AlNK`eJh3pv{ke;g6oldUp%)|Cz1O6?%N8`dZ7H z`_`*<4xm4}e7w=0o25VDu^VGqw$B-R9DjiOT-s&4@N>g^{n?^Z`~`4zvT9(cd@ z!HcOwu=prPAFyHXI8dg#7(dbHuT&TJs!OpqKkJJYUaeTe=;#;twlxpGoAFiLoWQR>Uf;M&2{AiT0mgr|R{4c%XaC*YF*r}j1f>ZPrG@Wy!d$Kda_Yk`e+ zM+rCZwfH-BEj(}9mVX*(bZBt1bbS+a8i3bX$J)Qvio@#x!|Q|346g@j*E+mDhc#NJ z4W~WZzDjHSf#^@|(N>H$Z9Qi5toPovky7)bs~$_(OPWJ;^P)fO=xkTs%ZKsWPqOut zZyba#q1RUzAzvEs8LF@aYy8%J*@Jqoa_%_4@lnPZ9H)-6=u_kTIgNostF7pMxJ)tC3ftA>q@jt0lM0_;9`G9kzr04w{1&KL>5JLcV!m zNua$S;mg4?%BA~HcwewgV6C^&kqORM_0Pq1!w-e9Z%+3*ScK_o?=WYj?;7kuBoNt%DyC?by0Wdaez-OL{C; z?2o!-zCGQhulU&cdjeyuJ<`)F(8=Z4FYV}twe%I6b06_zGfuLBT^e<5fy<%gQs~^G zOdGWN^Z>dHyVAmjll|y3Hk<4-7Z=0WW=;0Zf$KWAnT!e_Qm~`=D*}#GsKBo5$v9boohe>%muz2;1m2F+i1on z>dK*ivWJMr4BA8EM61XG^;P!Ja_St;9$M|ep$n^g2jTGR)UW$gdq_BP{WsSh(l`j# zFTW3*x-@w&Hqa5|WV-wvaGYUvKF`{5V*?F7!v-?X92;mdHc&e@MVwehM}y>UM&te3 zyMvfTJ9@XHA)KF>vq{c-8_xdWWU{37o38!ypH2)~@}jTFUaxfA?2&cF;C!fhcyP72S~6(62on1Y3tk-^%{o;n=@HY+ugFtrgA5_6;)T`Ym5wKJH7%TKP@V z;eGVg)Rh(Pe>=~Ybf&@?=vC)FB*|3DoWp-HI*0p*u>nLU6Iff_0l!HWSMe{~awqb6 zg6%60+Ok{mmDlpVhW9bYSJs$HMrn-7E@a&F7y33gp!dqL4K^MkMz-~Q#!Oo;*=wg< z+LPYg8BNgJQuLCmk20B0^y+h;;-kcfec;azPRo#0MZkg_Fmb*T=6XhHjttzma_0)h zvJKqG_tE$`a&bl_1;0XrWflbq&vM~@riAJIx)nzdg%B>ONzA0tj5C1+X}Qzy2Zo-1adz6?rb_~#mXJY%d$iC@dw5bTH!@ZUMJ>OhwhADN7Qw%B^`5%LrE4p`Q*3}1C! zH+<5f`^(qYArEdU=D*8&aBmQs@u)8}vx|K?x01JQz5eNF+vv)@zpe)V(5Yx=$hK~v zy>kyfBD^mF@5iW5c43ASPt|@+ia&a7!3+n_dbb4qBb*#$eCLj`X2`ykjVJkW?({w2m3!6K#q{;4 z)7NyTui9@YwXf+;U-fPtJ6Ir&k>~L>pC<%W`Pu5c*IuFYK!_VbpE}nMWRo^cjAbO~(s3;}klcE<7== zZN*gw3Vma4608=q)W&#-jxwMjul(^b9(mxgI$+Hp-|wr1$Qpf4h^_IzvN56 zkuU8@G+@gW^|c;5MDJ#!@9lPF1BCbXtWR#&3xm=5W9@lX%`XWLZDSc@4=#igcRV(l z_*!EB)dBRy0Dj{@rIjz({q$F~E88icxd!Bk=u!MS+o562e@H&M@9tr|G%q6ho9*;N zWmMNh;hMRcwwo>H*svk+iw?gFoHK#*X5@+t$553}5=dbsIWeI>3j`AR2Ogy*6+u z-hPKX0Noq=0$bPE7xFX(Szn&)_~*fy!#qBmalLS9LvA<)*SAY-b&#cut*LL9z(az_Sa|R|k@C_9&b@waSXwDN#>{l>wJ9xeu9YDU` z0CIYO7~~zmt8vu0EkqZDJ+^X_^g}o=DxFs5(P^?fZ5t`P*DbTc=muNIm3ed=yf*U? z^;p#NnF|A31}Z~)EabU$XjZhf*y?xRwaya__@mkbp%wYr3XC5SF7F1H&`}=v6D|Yj zHR+iMexBmdWfk+3PxI=c#q+f1VO00`M&?29X}vLQ5_`>yeFjkQW1L53T^-#rVPK2> zZHAFwi=fw+q1RW)!;pVx-cg6-mhKluGO#<9x5(Jdgs*@}&lfGu(0;Thggg1hJE-HQ z)FHXow7l$G9^W5co_kL8HtjFu`%f1SXswH{@zB-aq^ckq1{THD3b133%l|I0%e2zQ ztM)0|D}ACkT#jgpu~a-+fg7O(=@+dB zwdu&I4_Y0p54}_={o~ZP37S=Xicg5HM4P*yt4U5>i>P-ZcrFKya`>VgSX55!?z}*| ze0QZ&w#RLk_SAlflARo-@&qmhr{MoVx z%(u_3$YT#?_EgfdO8CT#MR8&*&ObD;W%m&Bb3SO^&!CH8AM^*7A&cB>?5Pi6vXR-q# zD_5RcON>xCA?ZPDzj$#HxgbZZo1-~n*43?El6S6fOhX-bepR|{JLB;pc`4#^={U)W zZH%GXQW^PG+psZntV86{wVh-AtnqowZ*uPRoA|=97w`il>%858+uQ~BZRkd2Vdm%RBQ#mHQ;OQ%7v#`|2Iu-ah`6Y z`sc>ll~+it+2jx^j_mlm=65MR0x@QjQ>b_8_&SRJ;g_9Y{qQE%P)uupe{zXaddHw@ zN#xu%aO&bei}lvz9xX62X4wjPmht^%^N5FDdIPx%u4UsW-_!W(Mqb&uo=MNKg=CkR zJ}{0)7{_(AcPC>xiLrb_?J|}PjJNC+`6Mui8z19&9{I9qxEY2K}uw4ypdZ zApIKrC+xda{AYvzMaTrsnwYk;DroS&2)aT~-6Xt|qh|0d|0@;m#JUaM^=^)X_X*&g zeSZh>9`n$C6|`Rs9(?rQ?1uo|E4K?fe}Qab*=WY^qFwcUF*x4}9Lf`sZzx+paX<50 zIA$!|?_8ddJ?N+Yx5!hFY>~~a@7lj%+tK=F5Z|ty?9@Go@4@Hf|EJ(PR%_G!lf%&a zQue`kcXWc@r7vUH5pC#X+0YUAJ{$YMvSvl^{u}fgbk@ciWk*+&8+2pzbGhhhJ%i4e zuj?9j5PP$o+-V>)3)jz=8C84BZ~5 z?l^5rpD3R75q(V(}8j7r(gDn>EqS(Q9PsA8E1&Qv332vTF)4}{FEAh(wM5x?f4Eg zTiNFp`9_>$UmQ4v*Z+t1bBRNnb_eb7MD9=0bNVNqp6|dhRQ&09ivKyD@e44%nm;SY zM-&gqN3?AzPu`;}JUau9hHK08&E+MhZ-3+T?H3;0di6!>ext3N9rYi?ExmXWjx6ety`yjS z=Z;TiioYcM_`@a!^{RLNZg$H2-E8~{&EF~BBz;+Kog_FIYbO8?3J z^R_SB+8f^x{TBqSPi{p|j(}q{E zzMaUwATiBFPF}6z9_BajDyMdl124AQjTUsEagls`3!lc|tjY2HfSWv;1A_fW4(x5j z^-iY1Z|DCf_R|+UlC49<@4WfT-uRt2?ymVz#UZ65*5acHAHVLm`xfi@DxQM=v zr>u`K0fKWy!0>p)6UI=?q|q8{xW!> zFBKMiRmmKZIfowKL3WI6hi&q`p()u10sL0wc6jNYyo&>pk2YV}IGZY*u~wuUTSdA8 zKk7#BHZp7ZsVf@k>(;#IwC!k#mG)qp$A{p};4Tl&E03(MN?h0lARgs1FJME}l%6YT4bZa>*{-oxoLIKJYy$CsdUjp944s8wv@3X*r zNHH+rmAxf^*Q%DAcnIs6w;Ui0Xh zgODAdtHv{jF;h&O_hz2meXe)<`)l93_+M)DeL`P(=_LoahohGo@V`*{2$;nOqMLV)6iF+IPsH!uM|ISR_cu}z6 zD`;K-0a4MS0@XH?83f;2+%>z{rQHAtf@0UD+EojhKtR;kl~KEC#Wo0nCbl(;v`Tdg zh=LkhLAteF?UI?v3lLvGu`&hB|NA@l-sIjPVbcBoKc7FJPnel|@A=*5Jm)#jdCqg5 z^Bm1@iZth79Fd=G&Y9%tZ=OtC4SrDPxlcwp@f@6UP`+ZCZ1P6q^Fbfi5uYKOJ`1|K z_G38ZG(U(8W&P}q0pL|`X!hV#6x%qikLd^C$X}(HXZe_rZO!`(on1JKZJghEaiV^l zMSa0pX5+l<#hK>Exw$Vm57{^kUYu+FI5RTf7=9N_GW`CL7iXp)=gJH?hR>xoJ@`+EicXD`m$3^=wtUtsvt;>D@<3PSCbAunJvM)F< z+c;aiIE(x^-{}j^t2WLryf~G9oSA*W8QRbA=Ls*)(|(+*`-1b9P0xc~oEksQ#J=GC z-p0Ahi}SD_XH;Ks-nVgX^5Q(|#~IQWoE96W)QeN=#|iWW=K~uj;>B6z$N89eii~>W zkd1SZ7pKmT^XI&1D_kMqO6;0(2K{@}%V-j7q=7o6cX&Z}OW7yLL2GvF9KHtQ18Pd9jR zUh?CVWxz3dY@|)kYA?>)ew?rO1?PMl=ij|JyZtzq_XXz?8)vZ>=iP3cx%iD_b7}wi zcn2?lT~;W65!dB!U8LMJ&qY#2_*-SG>G$mCg7zAm;~&txW7vJ2wd9-f`NJMq80gU+ zojugHNADffZI8mg#>ne|*joH#u08k-58dVO*>t=1=n-NQGTNhu$I-6$Zn(mOQ?aMJ z{_+Va-sePezf^YZ&rXW14qKl9>r`fS4)aj2-F9hTaIUc1>)*UM%w@eeBQoPOMlP}Cxx$Mx$d7YM zUvS3Q{Q3KCoRt-U9E?0SX0IQXr+I3H%lSsBR+ z8a;HO7YBXl#d$9S&KzReBk$+M%F!Fcy*T(9yf|-Uz(H@Uj9h2)xxW_&UxgRvg$y{* zL;o5Ti$c#~H}?Yb{0jWcUYvCqa11>aHa%@#oN<1fM>F6QvHlUsJKyN%-+OUb-}BP5 zBm)lgG)5NN?f!}vhc!Si&TW}-c1G^ViAB*Hjb0qqOT9SX&WwZn*!=ma7w2+6&b58P zS#0Axy7VwaiV^l(V1~pMyA;PbiNm7njh!X%s4wEw|Jfwv+R0(*^6_7A7@WyoSl&;Z22kh;>_^l z{I)MRiwk4r$l=LeoSA-{monq5jGSTXv7>Gd5%u>nKTdsSoW{t@HlO!f>mJzw(TJnF~UoB_v-r$gEEqP;0zoLWE5&okhd{`E7v-9KW_sMc_g zNN=q2~&igjbdN0niew-UJ<6y7a?f#e-=Q%%4Nd_Fl=UYc0&x#3W?w?~83d zf5nTl&5zTb8E0kWklpTMyf{1jIRD)joDXbyKFy2MqOugQ><@tOsPNyH|Pkq5T zYU7;c#R--8>a`;S4)sEw?S7i)#mV*K{4z7nfyfm$pa0_IZ!mlw;Ky0p7o1WXr^Smi z$d41tfMfVPe2B5f-tpoL@#9oxz%lKfhaVq*<`yr`>3*E=WWX`>OtJgdFT6Oz{5Uf+ z;23&F+Vni(#mV>MT%7?2dKx1`bB$l(K`+h-KhDGqIEJ3EP0w9koY8)qQ5kTcXJ_Og z+wQ%|i!;uTGbA%kW8@ioo?Gh08Slpl^abY$+n*5e;!N=4d`!&FiS&l4*A}~87kP0e z`f>i88RtOcXSO}&=0`F8>vBI%QwE$lYWMJXGhZI)rKi}Bvnc}(?Y=WI$<`Zx9d3`O zhMuS&=jp!STxH|z_2NwPG82&tD^XK2aI5Yh?muJRljQrm2UyHps zWqzEoeZjGcj6doYFHX51=k&hdoNwdY=*5}m$H~rsW7_>jTMnmsaTfS-J|)k^iTb<2 znPkh)C0?A{{5bKU0-l+wEM*)UYtk$ zIK_RzS!Ux@d2wp}I2UBVG5i^xW%%5UisI6ujZ(->*A%L4oNa!bd6{tzM1ExZGoSI|?C|6KLk658>E~PRdDDM*ahm)% z(Z1lkXv^U;FV5S3oQpHyAU`W3zqi}{yI!2#ew_TwIE|64JTp(3<;8i|k8@H69K)YR zyI*{x8)s+5dj@Bx8xL?~d5`_Q(c=f$8F|abxx$OH$B(nGFF1Q`ob$XmNk7iJ8E_1r z-?#h48D5-rKhA3zaNy6*NYG0z`-xr($8|M)Dcb)#ev*Kev&XXB%OudfU z`X}MV`P7f|a0VPxuPbbNc6xC>_v74?8RtOcur1HO@!}lu<1EO4W9oJO*UUQg&%8LD zew=S+z%lh&X7~5Uy*QzW{6AgtJgqM{H`@HU-;0y$$GJ2!4)&p~SO3k6Gr*5CA~O!_ z-FCeyyf}mWIHzRBIS_fmrswayI79q6o$LedVSM-Y_XClaZJe+d=X5{LhnaEE8@67( z(2Fz7kMmw%aGGtL;a;44Kh7I{!P#i@xxW`@gdgXHzTmuN;~XaEZdZRF?Z;Wy7n~Lw zr_GBq&X4nGUvQ4vIKTJejQ8U#$&Aw&nQzYrU-9Bh@Z;Q;8He~EyMHx$aVGk4zMUE8 zK;(T}4u9&!x!jL)ZDyREk(D+*4|#El{Wy~|<1|L@vib9UFHY2tGdeTQfyhz2Uh};; z)BHH6X2xlZOi{asH~ga)=UP8bC^OE1$nc@YZ#>0|Gu@AKklcS6^v2G}(6i0D%$L15 zH~4Y(WWX`wMcxSGCn@ma%<$v?|0Vz>!I$w(%KK{ z?r%)bzo_$6mE(zgZkvu=OundXQIoqw-^+JIO->o@o7KMX!0_YtH#AjIBT}p zI`g~D?m4MW9D9lO(O*km++o_g8tS+OY~`4V-ZlGhi}JEL`;E^ar+eab_U#U_&z219 zypN}yeA4codFQ;!f1o}(ud=87i}wEE?)}@U&ok`D&9AZ+e!xE4z({iV54INegAQHW z!Zqbu$R8S9IE(N3Rl$W%@|h{W6aJr_bLK_NzE9-^91i{7ecR+VG`S(pb7=izFZ;6} z7^wZF-SldYc=1)%!5=__&Q2|Z{`q{@Uehl_XAAq3m2bM3Jb6E7uk?B=P_yG`$?m$W zsU6Cd(UzCnl#`Xy^tu(kdmrZl7Y8^amb$)~6~4R7>c3zgSY=kf1?7CU(l#GKm-0I* z@5t7?@ZIFrSU8(|arUr^FLSKCra1WlBG583Z|hmJYXZXx`A#l@h1z%9wQt&!i^a=_ z{ZFzV0etN#uSJfPFHL)xPlDDddBLWvtgNQF;N1tkIy<_PoL_3M70|oc%3W|jITx1n zNLNnNY;rmOU+L05WiOpupwpXcz~tqMT6b$7#wPOlxqFingOJf^`0kaxwCB|(|L5`T zd8^Zg{jGGQx6?oN)J`MpzBWC* zokoN=DgU=u-}N*39lH0oEAPQba)4^@^nF=bHQUL_wEYZg*Lo|bW;-&db9cwUfA))$ z8$tOfbtX|(!(cb3gp&^@i~O-qk>e*@c@f}?%8gSw&a3s7`?s`mUG?iBugoyFKIE0@ zEx*G9Y5B8NpKQ*3-HdGMEb05m$x&zJbSTeJ4s~2X9owm6J9X5VD($9@xeLb7hAJ}# z`OBrQ2`js48Gq}tvTNEyLCz_!e6%$y`@t<%c8$w}x7}P&e0Lpj>a{k z6P)p;5*_;k__m(hDz1*L=QldGW@=te&Fdq>^+z7HV)I8^_1m|E54VvApl!6>_5*19 zz2o#fZ^4JWOY*RQPwCwK$Yc_os565T&yy4QuGKFld4DLl`V-}o_&Q~atemC@xvt59 z@JPf8ks~{Y9JEeeJBPk7dL#Xs`gM9eT>U#SjfY0ZDK{Tuj`Uomho45zF&4KlCX+v< zD?i6rlOLj+pZP}v3kO1PU|C>Su!^y@!de(!S!JIC;n0cguyW4sXiA^u@7kXg??s)l zGr!@7t~{iT^D{*c<9xg?@6R&tkNxfM4{!KhFYmv+hxb3g8ROpZIzhVyX}5gxP|T+f z1<4guW(5zb{Z-%D?RI_VB(a?wy{~-9fyI@NVmpx^eY|X^yVCWscWlx)@pJIpaiWrO zLSy}Fhwj~d<@~vK`PFS?_%c4EM@mr=PjoLmp=Q8KwLhMn4FgE!7zU~K0` zH_zwmobjkUpKflA0Q)T6a@yO(oM2_7)ZSCv&x2EOn~mf8M1KWN4|5&!{w^FR$HM1B zyXmR8-H-EBUvQip3$0$9JN-D1WWb4tPfm`7-CmqUew?ZdIEFt?PJ^vpoXTz-?;Pb0 z2QPh&GE;k9U+A8r==bawf~hSQZHwMf-W1-2pWBWDb=&AE&pT&V+wXMS_V0LCuWgII zGI$&9xb{apI29|pY1cm0;uG<}#=&1;$M05oaca783=eo#`+X;*^MLEx?`wGQQW_6l zI)0v(PapY8TL0L0viipvUHOfx0*8OaSt?Dhk(=?Fa8e;QgwC1G zA7dS?MxU(x@sHoB{_&;2|tn8-Z>#c(!>_8659jfmM z%7nmc0k0Z7?N^y&1)4agwQ0oB>IY|ASv9hQYKD{l*+b8t;Dz+f5}v;w-n!qH^F2X5 zZGEaaWPXFG^T2+wUk`Khtl9Ng&wJb9Q``K4N#s1+)k-}!_gatFOg-+S9_yGx+i0Z2GU2}-%4j!xBb{6w;3!en}@6g?xFJ)pW*$aE!rdN^i`zq}{-IBps zr$_gZ0^3#K<=ChPL^um~OI?ZApZ&i(oHIoZWIo$B0H!2S)@!O0a|q7<1As3Ki zm3I7se3<0so~U1L4+>mAgOhw;mJ>*8BVohv$q@B&u(h9vLBS}xqo1A zwoFcaXJsybdG)RIt5$OBwq0(4PkoEYmE8}l?67iW$5sdI9BL74oi@oE&u5)uH7+Cf z@N)wlUXp*-%ga`BaY}yHK$CLLqLWf>F z`CRGnR5|#R`&#nZKEakxbKU`E;xldeq(AK1ao4EBqrMfMJl7g?*(l8sm5 z!?|avHgYPoAwzn;Es6{Dmie(%#))o;&Y9*>jsA(p+39zR9FYcjKe2cOWo?MR5dyG%c~~D7TtBz z;aQ>lKj_^F_-wahe#6aOzQ`;ymXCsd`x!^~(eC6UcKnt0GuZ|7aoXg)@#Kj|miHi= z@?WT|xrX0M*Qzy#MVCrGnB$nd$e$xGrhJ~iymGLr>|Dxj9&8BNeHKtM8cuO09&Jwh zt+I1=-a=m)1!f&>v6SyE^sN!YIok(+T=~H4rn$&*IejdOyxQk1hZ^R>ms!VhCuZV@ zY&?~@06Dg0-KHmxKGpv0RrMXuUtRyQ9;+ zWXxl{L5^|@EOTxt=dK-m5TA*3LT6_`{`xb<+`FN5nw6S5Fi_KWt)nBRTPaf(T`2!k z9`(q}wqpIPaH`YF>qs2wERCa2nnV4dF%Nmqb#=u`jXi@0peNzg8e3PabjR_jqxjzqf@W4mL+>AicMHg9s;dpn=9d;a?L z7qtbf&si^L#Y)(Rd`<)NRL0ec`Y&p$pZTKpOZ;IsV=JE@E6KNZ7KX2gednh=tQ}y- zK6`t&jUazowR4tqmpvP`&y&8|%<)d|vS%yNd3#wGT0T6ydoK218Nau(u8>VXpNlPL z^fB`V>0|ksn&~_78{p#%>@oUJOENfFYebrVb@h4dNX_f|(}sJWzY-aqTL1C3Y4z7+ z_piBzHoS&5yd}`T=BkUW`maw8)K4!7*5~m)^})R1*n;%wO5S%8{^rikY}(Hr>ov~r zD0uDhtFp3JZMFgj+b^nne1(3qf&Rq~YDq>W z>#S$d+eH(7ze92WR{Vx=YLg=irr$gK^0jr<6|ql#lGgs#6|oPw<{kID{HklM$(qlM zO_Kw24%*uAU&usra-2=UwOe&buB*-+;%pWAQRj2k-JPAM(N?GPcLslF)_1;(tV}CO%_irx#^O^YBWtr`*B?Vx zWfPLuy0r!yjWvutL#^+|FVI?Oe#276diT2OYVM7;?_F!`fO|H`m(xtyM6@Ioy*@md z@&2+t?!#s-T?z?N&;e6yBK9#n-guM(s+0atVwKwuP zV~6)8Hrx57^Z2bbmhy9;zU1ytnV&? zPVr51O8G0M!vCA#e~!cdHuygc{;!)9eq^1MTcdf@x+}t*5tQ2?J#rOuYR(C2Y71pI zwO?`1?zW@%JxD!jl8iU9_Y&2-lYZL~h+OF_awpMmL?O zwGwoD33h7yVcMoTD|Rw%vxW0B<7?po7>4hItkNW7@<{kT*YG{d@I6^;^F7P(J*(pl z&VnhwtKx8Cm7T{qkKfWs<><b@M&v!KKu*oa^$1b@Bb-aO!90SdS@w zAn~lqWi=(>XL{c%MW48RD^dH8^=)-Cm{Z)y`1j5FMD1{XpUv-c_?=&$co!bz1~{AL z@9W$0Z>Zlpy0m`(_v?H`{QNHt&1-*forKh3(k`B^?c&$`>_rckcY<;+cDV z8m^x@yrllBk&*hA+Fa<%gT8+CEyc(wYhJ9Em$ppDRzxP3AG(q?=jfw*u+M^AU&lM! zZwSQp&cA7r*8Qdg4!#Uk3ek(EnTJ!B?IUuAf#=Qh)WB zNPX)n{3UDgmpnVLUh~b(4*jk3&`r?4{?Js`Lylg6bhp?{s#uOa*9(T0BA6a9)mX=7Y|#?(V`3Y8na(?w@i!&1I$E%GjNExX|+ zKIihsTD$xio5G8uiiPN?r~fIoVU1;NlD_;eFlU&>^*Pn>x$K7ht$_~*Wv$9P9STf-b5ze<;F`!KO3#>Sz%v27XK z&D{TXWQw|_)A#_k!djlKm_KV$Brp7kc<@TWD~}`p4Ri2ksy=QV)HlZULjN_#PC);i z$J0Ny7y8S3qyJ8u{$}jrI5x4y&>I&bTjl5)+W%5`>&7oVfZTY`$B?b0wQOX1;}rN_ zW@YVvl6n`1k#jy3qZwe{p?2?F;LLNJ^=tW;2;$N+eukqK`$#@|f6n&q>29Zq~XH0Kq{8(dMHBr9P`>~tzo}7feXANEd72>|= z-$~@V1-;xllX0b!IV9tWvC-8gD>QyzHE|z2c#yK!Q1(ldZC+s8lWq)I0=@ExgLfR( zgm7vf@7T}#wQkV7fc65nERbi;1CU*j0AF*AzkA1=lQyx-c6RjbOwKR4>9#0!vCF2@ z{ZHKgr}AO3EmrX#W(}||)BPwuobpm@m&R%R$zSn0awrVe_EWO;OCDi;gnk)%#M-#j znsk}yk}ui#;rK3kvs7Q_y=L75J}n1(od)>(Hnt2r`6V`4OMc1ZINu9-W{DMev%m_!;~jf7p59M8 z)-nFb_EMYiYzl*ZsP2_4A!d(j5%i7xNT=vJKCmZw*13MSuB#8!4fS2$r0cRb>&~za z1}g36OTZTG5ok})zf{jMhlVnTh6MCR92#_Q_9E;mu9ZWBWLq?pIW#!e@78tEQ0CC! zT;HVYqM-~L3h%aY=76nnO6O(xcrnsCcojOgZn&Qp!&L`lu)EG-!;8~&oib0};qoGE zcp?8--5B5Vh8J2}tvlbw7VpFh!=H<|_T3Zk$Dymtq08lu=+ZbLy6pOf4Sz&e8D$Fp zrR%!kkLW6M=yIMn{1IJc4qdt~{urJ?SK!tRJiEkxzvKql`Y&rs(K)70lW4d3wmfnD zn0)w!w7J^5*ezqr<$o1AWr`^iub_;5{a8W4taFZQqbqpEkyE{|Fw1_YFw~Fh!q7as z`@P)vzuPU(JBlbjg7Oi{mOJG&z7~Glrh)s%xDOrW=O{+hDwuOlf=}X=9`wqM^y`a3 z;vuuHnkc>JwyinKMg566oa$fXmHF%OjZly1RoJ~**1>)B!7{F?4|8bz(6Sq?gIDX? zw`{+#!;=&?+QB%n$wt=aL+jt+GY(ueaf$RTbs9Ae~^WRL1uS|d2934u zxFS6o{KBz`oH0*z(t9pPhb*CPTB|a$=+v!Q?O3?Mdq8wgGzb zos*!yn7Yj_;VdcZD$WM9=lm7a@hP`0sGHg%0WawD?^HV9BYZEkg2(A(#wIg%%CDfl z=^abOFSV7%PT?fM#0T(BSDP_b^wehk&}(j+y@Q`aZN~aasoG5a$sJES!E6V!9Zcy9 zwcA$wILn~P9#?IeykoFva>rbi-%I)2K=_@c6?zkSny7a9-37GQ4cH01Zwc>{o~d9w z*BrcgqQ7mo=~?c#(7w$R!_2L-I`G*VTSIkM`>vUUY~U}E%u6058$aP%vQp27IxOld zKCm9;^E3UBSU58mZlWwW@l|}v9(j~cu;aB>YOe7E`TNK5{l|^5wCAv{>@Dtrt~)(+ z(HHSUrC~evkm{9p0+|nFkoha|eR=z|{Dl?By6gw>qRx@^<;ePGWL+|$YtlJqQRg~G zCh8oS5O1~4vzaz+rA^m4GEpa)D6~qeC8sug=ug2q`I|Uj@|%Ia#Dx?q>wX> zO*>!@Ej`0laJ- zZR;-6x69=J%I>07_Pcx(n*aPRolbZuo;^06eqT)ep>vGt=3JMqyjgu`I`Q0Tg;TqJcVga@A;%g|CC|1lKi-~hiH1{4@P#xNs|^Dk+Gh}t z!UO13|5jV89!tkS>z&Yw4olEK%^E4~?zZdqxqsaFb|?4IZwd71HTWM_AN8z-_R^j$ z(`X~;(L2?rq)Tssrsiq9*U)1%h_?0V^ia;_op|}v4D_7aM|$w>uVktd`{}30YG)He zhF(vVD9-OkUycP>)71J!fVEHcw<^WQRu#l{)Z&{%kAL$*covdvkQF;u-?0t4=jB5*0O3P%e3GI5i8| zk({uP&hSb6d2bxNq)OH zJ@z$QmU^hyB_4hp`=pn09vO7`e=g;`@BE0euKb!dZ*k*0MLddmHZa)sUR+gbSf#l607kEh%-y_M_XeY+^P zL@PyCmGTaWi&ww%tmI1D=> zKb$)DS0}!0o4r2y2Jvl&wxz94c1riK{=phZazG$eb+WZ_4u3}e8CzPA=PBrq<-|3u z$F|yG-MwL*waCnC_cFdPHY{wl?lb4I$}ZCS;9mX`i~&h>uJnAA@;6a_2j%xse!EkC zKRS00<(je{GDV`>}2Ti1o$uxK8(h{#n`m}a%={TMbdc_`97X{kFZkP!CMcW?5!2xwS#BJTI)Pr ztzqXhEC4S7Ud#C7G36K47$?m52+fspjbGCCNo#BmHH`ahnqP98Z9{i<4r6V1IDco? zAF2-e?Dn4!e`f6V_bkTJV63^_N?qE~HBB|7D|!p51S`=eatzd@j5gz}PYfeh=Xf*}4Uvb-Hi-JFG33_3mh%S?^Z7+RGLJ5#>$ z1noKqeiJL#SWa6==guaE!q^Rqkfp3ek0h}pmRZCBZ^?YZ8&>J8Z(@Thhy^*BeKAELcmeG}t@pf*UCg-Oc6;>hoQtfx+o;=X zN3VG_o4Dkb+rz0WVmDM?@lf}%?w&}}zU{V6oC}tI3onP*X{{mY-nq14F7b4uX-C-# zL1LqGh>?unz&bo~+&sM`Ra%H0Q5jBYJw@}t1oRsFH`?Ea+}T#9)6*n zIp^Mj?T_za4Kar`#BwX=!E$0-s%eW6R#t58T}6lYL65#y^1Y4kh7a^L#oIjch}K7? z11dMnfZzG(V~c-!pYH3s{<-T}{mlNd?)|A-&?`ZF&`Yhs#z!K(rn#2p7qaEeyPWka z{ADq8Qxp3`8uT9R4PVCE(a4;`FDTx&jyh}yYsVSPZCTe{MyyUXae`C7D4tl(vlYZ| zF17N^dlW|?KSn3#y$3D!jDeSAuVba72ZHk}UQBQ=KDugCV0LHi#?7uSuuQ#0O9hy1 z(4(?Xfw3K0*0V0VjQ5D2%b;Ziw6wwB?a-o_gelNsVzQxY%0T7=@UsLShWQhY#xlu9 zsUsU3xbNlP8?>eOyyo|`_pp5`HdnA?4t^W+J2^EKBDOa=zx;4yuvJrneXlmM=WhW+ zzhb|3zoC65_YzlY+s5K~fW1nEKRPc~Fv#^8*w4FkUFgvDzC)L2(?7R;?e$9k{_wz< zs!dPK>Z~n?hsuEvA$DU*v*Ro?t*bmBS)=n(4&1+lU?C+YFN-lm+ z%#oL0c@ACw+eKG6)sy@^fWOGgzi`Of7(mC$2VI!gy^bZH^XtsB1I%L!4&1Zb%R6FO zYS(Z+wwG^9#J5`~#@;!(v-ZEy1sXqHeejdV((D=QYq1}3%}f6uZ?<)Td;Yp;Du5=p z4th2O->RACgt%AEz49sehzqQP&)~0_Enh{|X|c=iDmUvup@M)}LkwAgnB+XvY{gF2 zXE+d(-!(KV5Yt>-*YliD`5$yYOP|CpNUx|ruEj2?7}#@c(_HrC6MtgXo9#Jzz?|vs z_Fv7RRR>o-#zL!if2qrR`BvrEunHVKTWz=ZEAU$5l1~PlK2qcGO!~>iuP0v0iyxG% zWe>hg{96j|g78jjOc8jeHIgpgS!ckzIfi$^0-JY1%jR9s;aw2khC$`db54DyJM~p8m0Mpsze#t0 zQ+?NuwF092tte`J8vv-4R&$ zB(WR(j%nX*l+R-94W4Bmcd)61=hT1a99{Zgdf%1a+4o(4Up?EYN00eU()3%Gd|c(o z2XU3&zL>zDA4%(rvo+T~G&J@xd!If@cJ;-bifR4zqyB#P*ZFq8lODD;nf<@Z-+o4( zy7z;7=@~=)i>KIr$pH3**6fwrB+hmHR(~rlb?!sA`kU4bW=pSdUound_%-!g{Y`C8 zKiJqM^Uj{}XQ*dlP^C{-Q_sf2LssmU)bqu(dRC>?bBj~YH=TNR)i13-YTVw6?BwIi zV&1S)^M=B~b&m)6v+YA?A7z?sKI7nP@4q`99E{rgKa`{3P}INw<51FXTmA|eF?RfP z>@la0mQ}DeM2y{k2C>EPg~exJAJ1fbEW`FIXTCEJdu{=1@YuF{v5og(Gw#QZ?x?g< zAB3_df5tn~=L=^sZsVqdUFDv-v*H$1jd z*L(~<=6d*;7!*!D=jqd~yzfiXFI}=mKP{o(YTsNLvd_F~rRG($koyw;ygKJK=v@=? z(@S4mSvY1`>>cR+?}T6H{KP}A+WXJ*Y@PF75Al1g_tR+kwL?p9`ma}dkgJ~PxmUbN)5lB18*5Um2HyO88a@A*M$dm_ zpl58FKJIG2>(E#5&W!i0YX_aU-~@5OA>x9S3uPJeLyd+iO%TM^)L4e^w=_b| zu1sxj>%dUMaAM4&y~)87!(!J{*BjF6I?Pj7x9|UxQ(yJ{9X-gy&ArJ3_1&s*gu11V z6=zE(LW|O6VrStW1F`d<>w+}8K8yLs#7iBT_WWPyA!fUP7;JBUNwEe{lqM6%=*~jx z;#dy!^h={>R~kL1oPeHvCO=U3`0SO362^|86GL9+#E`4)B?F2fmpxsc7Q>$fKO@jj z%xF!BIa-7ma{0_Ozq+5XGGbZGKZ8xnh#_BgboqmduP^4FhHdAR!SffLA2T=D~dimg+Q%WL-# zH1*hzADa~WF*H4qMpK1{Ch54R9D3aOm`jhHpQ^jP^0TaitD!L;KgDYJn?KNwJFw6h z){W=I;>=IIvZQ(IsO|8JGkd%`FCbfJ*~PK%LYwz_a2l^0{Mt>dnbJpQ^n&%MK; z{~f0fxb$Cb_C62m+RM~Do-zD#?2?I=y|#_4C`SCrT&*SLHy|%V@k?}!VGqo`zTk3RdtYO$#Be0Q-&(U5d{+F%CYG-9z6BF1+W?Q0c=4q$9^BMIq!|SN+J0J#LzL}2wpLdpK&##!Yxyo8NtFyE8*WxYrRM-B8J4<&^ z*G}%$^IYd%p3x`uEYK%;m^26Z6=k$%OZ9q?J#%xAnSJx;Pbz-ETDTgF;)Q{Q0kHMV zUqqAaJA4j9-@?W?()r7T8)M9?yu;YS*IKEqd52#J zGAEXfxy8gLU}Rg z5n#>MTx9~+kbmJ767wIYKi~jl4fIQ~^FBa#&1C(NHQeT6Y;*YE5#@6lzmc6d?UO)$ zl-HwW9I}M{-G=?$J`vj+`+Fbu_Xp9)i8{g8DkD$l#DH{szU+mvLt-kPhNz5JD?w# zF|zY?IQ1^=O_`mRb#6@M6Pv@SM~`*KRJZVZc>(y$U)(Y(FC5`XmnqKZWAsStbm-yv z{qS@jzNo#S!PJX=HSk66Zw?K@K0wc+rpGM0WE z4W|a(b>ZQU<`JWa3>>(Yb`74~p|Z)DCC1m&%sb<}Q}1u)S{!*uAREG4#$MHB)+Mnb z@Ps8>scGgYkHvEN*ye- zQl;PNtUa&*zJ>HVoVsKF!o!#3S}Ahtr0&QGr!E;}r4E#%r+Ma%`4=Cal><%4K^%Th zcl(0V-s1mGv%kRRzvwg1((bCK>a04JP)_$GBi`$mb6xGOzS`BUYsK$S!#SRI|A4g~ z;jZq7O!9mjtgqoOX>NjVZ^O6Ume~W*@}8Ay-9!IK(m&eK4;}QIkLfp`GERJsFK1is zH>hoU(?ef;#lIKG@Cyt|J5z>o6R`K5YSp5#lDOl6X%O@B?3C-|*>=30kMm!}}| z)XX|zGw)KYVX~Hb&>o3Z?9oNW%IN!yo26cvdJ=rySD84^d*#clXQc5r$^NhOvF9V& z-`E7yQ+ixFT)JCvj?&qxtNMg&&UQZc(g*kR*}>ljT>CII(5J(11ux%Y$H;zpp}gCE znFI|ClU@I8`z6a>&pws$vO32<-GJ5i(e0T_L zqWK*9d-G`OF^;;8hp!XRD-)?B{iLm!@d?@4JB_*`pZn3r9rXJT)w#|Xf;mIw5!41vt>fOBSJ=shrcl5`u%7z}r9Ij!{ zZE~1}zPBa^(9?7BLbjeB(XFTd^F{RZ9@{2cqHzr#3+rk8`?Ii_bWighy(bP0OPG&0 zKTO?e{{-!yL>5|TM~%~MPb2f_k-g6$^UovmFCgFz`AyvOZ8rvF6kd>A*I{BGU(FaqaSZ7R&NE^VGp-Y?<_w2qfxya<0;agLY9{;au6 z5FLu#uRko`j%V(RkGt?p=Dya5*z>u(djf4Vo^c_YSR9^L|B|nxoE&E5)+r`VM1Ic8 z@$+~2jiUBi{Keg@idgxvW$z!W)%uV4@^j`~S*$ZIH@?#B4#tU6msXd4 z_kCacE&GXi_d4_L?2b5dpPt@5`z-kgzY^1U+F48;E)SbIg{AnBs*_@8?86p`B75kB znb58=Qu+JvVO%0RzAE23wm%qnl^-Tf_+!g{+i#HY%5WhQyon#*3wks=gNc zJ=a`%HGgya?w36MNqslnAM=LsZ*}+I_z235CU%(p(dx^FKI|0H*E|Hdf>zP^0lBQu z)$D&Fzn{jQA;=r|zUI>I^lcyQR&lJM7drP6BjSw%>urDZSVQme{C-m7BmDN#>+o@SC>zf zc8}w44Kh}e=Wt^)x<8KYFLKxGxNqT~AAw&r%38a3jlEp!Ddc=yS})aowO5gMjUC=aIYYtg<5z!XEE_t7_=G9=$Yi6N zaUK2Q&Zld*ul{U!8Vwm;?&<@r-AXpR_tKx0ze2vP`0diO%2AiqFcRLdC%@wse0N#K zrpW3bCtqn|9PdXr%WqS`9HnIbQ!nDXsY%>m$L0Ng26`Qw63S>DvJyM;742Iow^CCm zGnX<;=C6Bk8D(0~gQlYeoF_+9!1WvQS4ke(v{6K z!>PqDJGKhf6~~!C*Og>dZ8Esf@v3lV(3fuTT)&O|b)s{I=D5KQ?Rg}I;4;0B`TOKG zj8XUfg&eTV<>EYBfUdhqbkQdjC)->WPTlL?=N-EL&!TgLP3IEn6w!BWI8_RL7V~?> zlPb1NHgCxAGuUz6q0Um{3*nmX{}g#PHZk8<>3fEDlfCdW#S8JNn3a0Iw_|&@@}Bl$ z^Z>La(QS$sZ8Pnf+b|9JlK=Hh+AtzuBBbcjl)snk$LZnyq$)_r%&7{=023-D%rX)7thFr)}jEblY|)ZRoab zwx?|+$1YxceAT9Jxa~UK->z4swd)#By9Ptn#KCU6IqiDjm$WPTRr^KMu6f*NEdHhD zv?av5xbHj%+*Y1Vo`q5tA{2L=&Ukq^`v*}kOX!jsImYr3} z+J)O5Mt{H`$^NOIcgjynKC1ABY@TgK-Uo9{`q!K>18ue>YR7fIqw+hyhGRZ z4*k|U>YR6sbl#yofx^^%y`yV?9>4Vt>0h^h$zGkpxT@=2I{ut2WtqWA+we@_%e+>No(-Lkkd|G^~7#n4ZZ2_H@wt!r>&L}`+`hP?1~G4 z_HU=z1YP>Yt%Iv?+}|DgbWi~M{SskgZ>ZkFzDU^E zZ#`lop9kAZur(UJUBT3HL?>VK>akK|9kCHw00mzzDojtvpA z=TXuLS^S9}=>y4}Y!-{YQOMsCWX#wV&hr}AWH(~aBikYO3${tIg zUkdqrlFu&rbnv@m-udnJIwb! z>WT6+J)!$vJ)z&OF4Eqa<-BJdvbx#PN1Gjew9I*ru1g>3x8Aea(MQXi_iT3bk?!j~ zn;o5}-^b}AVz>&ZqfZ|>ypgU{OsH3f>bVd&e~Zq`OKW4rVa27VJZ(K2nG1lcdHC>+ zjHjdNi`b_L_z^YNLk*{KUG{@)huPHM^mS~9fm)BFFD7WCD40pgijQjReCSPY^W%TJ zd(CZ`I{v<2rqgArb%>o$*{s{~UeTd-?|fwb7VIL~vH8%vhVNI>Mmbql%@VFXjcugs zvWeTI*M{Ib!ZvQjc3r}A(tE4Pr}xL_9s5H3K)1;sSi#&u^0|w9(rHPqPr)8;ML%r@ zvk-r?*{_5RsWshZ`1Hyq?A$zLc^vB_tfgpg(h@!s$Uq&wXbU-S=6f@_CF0=8W)2g_ z@xck+->UcXPPK{pw@(lA&UL)g=t}8fu(kh)d}Jo)k8&4RVz)6rEj9JxedW|kxgVGE zS&khY;jfbQ*d+5kcU^W4`5@-tr_0<<>Ft*3w_gt0h_z|uuZ3}@T6Q<>8dv*L55>ly z`#P>cjny9Lh&80A@DGjZ;hA&6P)?>5#A0bpQ*$xR)9kW= znmx$R8`xZ$t33&Z+M9f6wN*#Fdzx*TmEKZc*PfZ{jp z)k*%gbE*4H@F&NUpK>(s(mPvt-*$_=E4*(nwrPGKt0NCxK>ood{Pre4rQ$fY6O&OV ze$elejMZBWKe8JXFFEV*@%%{dqptn6Q1MeHwjry*#Me3Vo(1N*;vBLXR+{gc59Kt> z?fOpMJie=ru8-3lvw!yOZo5Wf_Rt>e=Y!j9f5KSf?>wc;pU_;%7+h_o7Tf?v8Qy0)^S?U!%y;0C>=VV{B+v`3=nBof+UHrRH`EKJ?TF*dTkc zMLwE=&*$!6yjWoMH+zsS{1iK^61t!>7e8c`b@&D4qxgV67>BMT-*0vLrTjQqoXfE{ z%6PyUrDzguqOq%9%wM(ll6^{s9=G0gfdL)oeb!l8g#GhD6h7VnKbf;Cmb&onpBZ}O zOHkYQ6HU+~-WUGGS?_?x1)}e>+{;?w+mp~FAE|U=xon=>>~UD1(vKB7Lj(WM|9<*K z?FiOa7hP%{aQ6INsvI@Hqb@^;xzhKMA=dt-KXR?q>!vLR(iQ_6HY+BJHCBCp*?bQ+ z{F+a%e9G6E?U7Bdzw_WWJ05-Pc-F7B`Qy=>>yX2>Rx0@{a`-gs$W7 zwwta!>-aip+ai2uiSzJ-A!}>d%b2X>xoXC=75K1gz=D@??VWw5bzt3=aj`adt@c*l_vZ3IEIx#_ffq-`js_@?ti@^TGqFvy2Al*} zI!pGA{8+{4Hl5d*O%7U}XHiMcU-|aeGcM~Ki#YLDt;p?D)U}1WCaG(}sp~B2V^N=Y zG8Fsl55xsI_0u}WTCF{>rXl;pt^cGQ&~vs^XJUiBb!OAx&?V$}D74Ox#mnK{JmQH= z?&krq(})GvI_e?h{LsVf{R~!3MwWJJEg-;px$L7vXsFf$@GlRD?LVsL^=vrx8TY*F zP-mjsw5Hm|z3pR=*D>M`Z3<5`wum=oO@Kak$%bRK)6rLLU~OSdV9)i|WW`sErky$` zWWU&17MT3ZNmcLcolZOpe9hx}-aR+&-g`q}vi<$~-Fs)a->=$DE?0AXFXi;UJnEdB z9*9-27sp*&*vs02bYE^D>rLga8$es^U|m7=)mdT4%_ZL;#;G7=rCy=EigM|@1NcsR z6%DddTUcY*%Kq4TeBExDIgGn;>Y#CRqElACiwf-W1qG~2C>KZ7kl0Ja-u#;m--O+fkH4`%^B>7W zXXh{D(~(u=S#d+Byo;?o-Ja)cVGJ~L%WYZ4pIyLuqQ(B?1OI)jwokZ>11|0n>Jh); z#JK;{S6s#t7q?Zo=y|naZ}h$juG;gKgVJ-0e6hYI+TV3!Fm|WaS^Irq!H3mOzKFKqnw%>Q`7T3S@06g~km%7(|#p_VRS<{@kdk?;zX&!u?H*IH1L68TQ(Q9b+4y z&j;xXCU2VSk8+;XJZUy|R5G7<2HsPK-|_3zGm%f5jG)gVGptwDZu!DvQ+B<_T?4V- zlS6yVIX;$uWntEY*bv&|w6ym4-{sxyp*A?j;nBinYicgVF@UjHMFKY#cqTSj~1kG&tUd%e?@AK5^~ z_)IM3mBsjl!nCjC30+<4)?NOZE_z-0b!El*Em>=IWzD&k9OB5&pfvemjKRL}%1<|c zy6_!dyT2J9BnMA8_4MvXbkD!Ln)sqG26dl*7ec>l+^DB6aqKA7^=J6c`wzk!Zw z%7s{~l&+S)Uv_aTW8L={mt@oFnfst~`+@Ky?dZq7JbypW%QoKz-EKL>)~eh*PdPJp zp-h7E5y~sqK$J3bp-ttA2Sz&{VBV24f9@oF5RdHT-J!y5k8k7b<wkB9_Td-q=X}R~CWbn%DgUIY9ZBqQ?4y)qOtIV=GtK^olOkr%QU7Dn z-DNx%VQzfh&9_V%&@cSRHKUpy-%q@^@&hT3)~=@=GjP)UTPH2xnU84yroyJjpA8IX z7%>0*N!Kuc+-&vl7)$Q^nt}aS4G0XVxfSf=Xb}sU#wQcgfxc*g2g=VRJ@B}PZwd5^bdCHut;3Grzv=FuxY_6j z|M`P+;py_gMHA=3({=D_y~EQTLk_<%KaHoaAm2ZPFLSxRo-+Y-qm3Uy6VkO^zKH&&YSo_dntrM8zPqb2- zn*#^67YnGkpx3!<$JK{fJZ#1dXtxediOIn745#^eCi$NUBzI}Np+Tvp?!Lz?YBM9 zmJMC4V5&XlP#2pXod=k!w%Dn**i1RMKBg@UZ{SH!G*K@1L~Q}h&l8&z=Tm33J;QhP zhqlW*YfqwGTKM$p2v_zc^MAgvTUWR;e^n3mkh}l;>a&mEKkvqq2CHaa_#2j=g0_t_ zH}CQ}R1T`w{8@Uov+|^RJuMBYO0Tzn(#p!LD~ zKaw5p$v==}JQ{+oJk&q-!(-@5WJ_^}?6Ia!5aCBaPTYE&yA2=yDGu#be%fz?cAdx9S;pD| zF=&O>NXAg;TpNt(JTZ-n8rSd@Fs2QPb^b4Nj%sM3zsw{?jPa{6EymD1_uq&09DR!C zre=sS%$J{l{+~V`$*-ROi(|E4nT}5ZEcq1L;qzYn1{!Y_`!I(X!yqw+p?iYEDh5=& zGvCU3Q$AkScT9}o>$WeT(LFajN}Shd##PrBu!H&k9>p%g;{-fz?}5h;_Qqpqa(Vn) zWJGgSTRy(xlaD^lDe3RV7Q-I8X*YHQx=7<#*W54KHCNrKx$2eB)F)h{bL=_r^}?k; zp9pt+UvZ_!ow@Z_gp2Mz5$>7bdi%Qic*~6LK7JB?+r-yx3z_)&vHu|dW41qjej9SP z!%9`%fWLRM{XNdL5vG6JahK}Hh3emR^y#(qm#2AdGqUw8{peX_`C+a<%Jo`)ud=$@ z4_}d#^0Vdk=tB*HA>iLd+iI|XAZ-BYP++{7K95sO#Cw`ypugpZ4?6z{>G zIW+dyKhxKrhmJ)(>jd|?ouBJD+Jfi2I^nuYqQ2PUftQ5prxxIU!_U?RKX$NA)NbAL zNUrn*`sg@4ac4Mn>d%kWUi1z01o%czQ0_!};(qe0r|Su`{|1?sP5%md!&-dR?kZxZ zUqRofP2R@OtnaSwDM$B&&^=QYhlZ^~_bj!teVD?Kesp!uNMd(-)IHd)YZwTK*4LhkjS! zD;b%~ejR+HE$~wLs#(k2D1ZChfb~naUQ6N69NCVPEuw5CbCpVHYNLNZ^H6>6$s%tE zbM85^Klxi{eV^O`*$s1;2Q8(nu-q8%_Z%GAom$(N1D@sp_+(Ol0&fN7M`vF&adTDp z;9mMg1^3*!rTb~-n2cT6+UQDqj`oynJir*kPVlNPNQ``ReD0|?zRtc}K z9%Gey>UXL38;U0yZ=Q!f{Z?HKpP*BG5}m?QeV^mGE%LQl<6;x&8`__5=Ca&Bops41 zpQ2m51E+MXBULxvveJV)n|nQjb0O z6kdT27bk%nIySJunc(2K7~9Fonghl-%Jx>~+_W<7&U-aJWK+)20*+|eestRIwrTJO zI?BCtFyHdhaf*vM&G-RN@9o{Wp6B!)(b`Izt>?Smt#jI5=iPan)n?uuwclNRf_H!N zf!!v;(H!Pu#xnQ)LCSgQY)^ZZ_r=B-I>t;YV@_4X^P0bS%lwb0jP|W1cs_rA(WFjf zwVpVF#9(VzkTd5J$mkUM$1>~t8>Y~=B*R)ie2PArjofMtWQrrNVdQlR@;8NkrMPS( zyUgv>21~i__Q~axoy!{D!GG?o9i{%w`E$$p{TjB8;>BB6FovFuZDB9{w$6P~pVHch=~ujCg{#ukrV zSLGiY`(%IJ#(3%2Ne6ge{I)bZXFx8G)rL?5Zlb+nn}@fk-R*U=ZWwz!$T za3Xp9hAS`F-s+bplE-M;vwB}PvL8f-T{_N#jz#!wgh_m zgj>^%`;c&JPK>)Cy`Et!_DQARw`Jz7*s~Y?L$^JvIqP-DdS2gn0H1<4zh?7jXc}jw zB9uuCv&`N)#j;GvMb8hSk0B50Cv8LMcj$}e(P5s~v-F|U^^Dd4i8(^ww+^xU_4>u3 zRXgyTD27IT+Wq@0eZ3j|B0q%I?PqzPm806dIc#M8;_Ujf0Qz81X@^vb%v}A-;`Xsi-2=^Mk`sM=SC8EJp zd|EKo{4V?L-wUwD&*yFAh>i}>oSk_mF$1h=7xMY1-*nb4&9*K(R6W4=&OPoscL!42 zc($B1qxhT>xBhE94-R#>hgRV~6Csac2=RxF$ z&hx#0viocq&r)xj&x7nelFWAXn z#y&w`uaxaNhcRFw@gjxjXXA@z?j$Ax0Rof)t-MX^MP7>KCs1%QR8B7{}1|gULaL4Ts#^Q zYvMPy@5=34PSxHiQ|GQc*_2JrD>3W$lc|4#-(6!A*DExZ4zNrP?pd<`pt%LvY=Ji| z$Y;8oggvsCxShP_cOp;Qkh!#e(dayvD2^DJn`PoOE{nz2o*bLUIV;4h5JN+r5nV@q z=WxxH`$Tz3mt42NH@9D`qd%n6Gu%VZD`06oRdWPvmmd4V{m%1UePJ89&C~i%kq1sdx2 zslRv2ik@dp@j&6m?AWgke^I*$9%(#b%xcs=%O&@IQTqgC)}*b|nsxJ+C&%h3^Ru)v zcTh%p)XewiVW*(;pI3YybN%={7`3^=I>`LDROgr#@VkI}(E|F!wa7Zpp2lyRZrk^+ zJ$F&&jmz`0n#u=eH<9-^HOk6nJrVw3TgrF;b|>>6Y~%{Yu_X41;`UmZ%g9c#pUL4o zs!&G*@4b?D)#0lqhafq;{O{6QfSwN_4;mA(-8W^U$IfLgwAsp8u$20$tu}Lh{cNzL zAEttl4NW;(&sePIay!N_kC@DL_c^WQ!Sta4o(u9^l;<=bR~rVX$4K(R>)hm4^wt{A zOBoBm#*h~p=%#8 z4C!=f9-wuOcI4ii5l*}R8QPN5uvu7BS1i-Itk5c34ze1iNLHq?CJjBNEf&#FBoi(YwBKS`ITo73c}sIX^QiaN4%buY4{bGUnzrSWRF<7H`TFKxEChc;6k zeeyKk$=d<$$lhoo{(<#Bte2gf42+pr6q2{>fr6vHdlsBu0d}7EV3E7^BZP^9Jpa!@e=+VHVNPG|#|iFx2dwW3JJB zx}I^?Qt?l3VZXaORtA(mZi^M$xVYze&nJK9uaDxCE&dsQe$>wAVaIfJ=kpkVo~g;U zHm9GR&y4LS7v}k&e_`)Ii`wIxFcc?~j?*gp_KXW-Z38MdZ06l&Omxbq?bYV> z4v$`Pc+ALmdgE#6wT3TKKG{So_TksZ^c_FZGi&e1$Byy2y>tf3P3`i%BW z)27&j_+l=Nok|(Cr~EHZ@_YcDAD|6AHvOgY!=tN)-b8{12h98pdqA=zS$mW`PHHEu9VW0vk~6Ututi$SEjzc{0xPxmHY>I7 zc5>j{X%TO%{5}5MH%A@Z_?^fk*jgLZSrZqqKHAK@mvK22{l!D?Y%y{RW@65%1U00D4yAQk8*uRQXe|cQ&Tx2Yp zbC&STKtK%qg z*shy2E;g08D5s7qRmTrM`=a)(rmi|Nw?9Aj7_?1DD-Vx$rt!#>|1;%ZPAk8R@+15_ zqOVMjUGq2c=)2(jycZrl=kUn8Ker!p>y4LH|B~KbD*cVlF5w)iSI|eCXWS5HjQ9;} zh|<{_8w~H9xIpx=;RE`3XQ35{T@M|SyY%tp-yIs_18j`{O_N8hGxX$t3Nu#_UOsb! zF4?4iYAjGp*6+U%UC0-D2Kh3)Gx5*R>Xom;0B200d!$1Wj4Sf}dS$E#y1y;{@r-2b zGw4gN!?)Awu#0Eh_~4rd^~}$xLw_anoI=LXE}xRKUsl&O7tlUc#d&Hka~yr3-`X#$ zJ;UZcbC|y72q<@bRM^mQVh4-*g)a+YpT0s)TKPuEH`gTHw3m1)&1t>useQC1|3A~3#5k<^w3jZQoP`6iUwxnT4cgsp^LvS3o{hY!&CPgvUAE>u#?H_<<8AAw zDI3O@x9`iHwSy;+LxfKs{+2-Or#$1kRuzc-m}~zJb?*XSWp(BKKPM+42^WD%MMX^x z;VM{dL6BmblLSRYdl_hL$F@lb2o$aDYv-?2TEayUVn>d)LtmX~2#T1rR)%7&wKhS# zfQ*&a-e%ek=aP_wi-NT+r-FIEzx_NrdCrq_K%M!#@BH)m8q>^xeghE+!GC}(RFcn z&a7>xyYD40#wL($a6R&bd7<;GaqMTUSCi;_?ZviV@A(E;>vyv5Y{yRPfLC|nE3EtR zg|W%R_8PtoyY^WZZGKOnEe8cruFqf-)+-?Cp(Hg)834Dx;VW z{us><2Jn`GHa12xDrZ zuHrtl%cez`v+`ruoWZy*_>BO>b<-Vga&=VSd5g3+E zxaXG*-+b(irR!gQW75rs->AlRZ$hqqu@rmi+o7)VPENJK5LmtdFg}Khi4pqJhZHuMa>10V>`q1m} z1ouU1FJ&0*9T-$$_EHYL9;Lh@eFQwb1|AZV@VS=YSNHJKIj17s)u8y!3fius?TTe9 z$g6%c@_av^-T#|C7w$TJq^Mx;BSQx4eFgmN1Fmhzybat1dL_F01!6DWPoF!@8e}MV z9oDksY;q6!`so0kU|)hw{aM&V*Vmzq;1!(1h>Q6$I34DlpFYa@^5Nk7PvPM$_p=B% z##oQ?FZ_uH!<=Ca<$1t-Klqy-BCj+t^Z2myzP9jqlHAa5{dv z5ib=w)4yMM`?TjngZ2){a%OuVeIABS?x9a}->R=q=$M?Tb0 zIt(AD;4k6x&0PaC)}QS7OaGa7-z>}A z>v`OJU;Zxqrs+S|4JWs6W}A=LcfwViF=ampUa92lyw00yom#~@gZKk-orGG(w&Lr? zeyrrqP5JoSm_ySUW8uuca_Q}O8T`K%`70SPzS6AggmaCzkT%=l*>++{yV!dw2|34> zEO6#^U0j(io)~Q&^udbeqDw2AyT5mC^PwM(YVLaSyymXoGDnM@V~1G-l@wqjVefP? zmx?|gol#7_ZM9qeNjFE!9nh1>gadk4*3SzT)NAluA#yE#Du3&r#@O_Z?=PjR-eC;(9j!%Gc8EG(q>k-_we`G-v_HvfU-I{A+CB(RUd?-BsP`OgHq++S zv}emNpuC%RF65n2d@mUeZ1aHqkPAEKKn?6_`$F2T2KJq_-3<&AP5XmQ`+m6h(1&?$ z`f;BNZj~L}<^FERS0SCCeS^-`vH{p9`zyYH#>#XzbN^sTg^|s&!w;d0mLl&Dvxj=8 z&g^^7#hcCIRflo$f zdsH?da|hy|-=_zH6R$O|PV0(V<7HIJ*JP!h9OJ368p%$3>xmd*>7k zF-%8J>d=r8`D|SLHV^)j2g! zW`0}s;Z0)bk4BKONuGb_8OnHHbzED@wX58<);VTf9f3aO$m5sD|FHnwqOt4WpD#sv zPx(?7dit@zmrv$Kbd>U?tU=E%grC-2-j|=HYh3pHERDn#Hjl*~?;%eC=V$K(e+vgY zJ38u+>GWOBUR326at~EkrnkaZyLqRay)yAt$Mr5>DQ->sXU(HI`*ZuE;|Ff2GslJ<(h8yogwaPr{31 z;KfH7+XQ$~_gO!R{WSsq%ERan;{DQ1@ZLJwS`wZxt%Ebh+*kkhPSI5tHTInKW5 zIQkthc);HA$igmUZ~=4mMf!Ak>)NLZ>1&$T*NgNup1#J?*NgNup1z)=FZQPljN919<6yA^>&O4QS>Ye)AZ#=>C6EEvIeyq4)1lACr zN$j@-a;}{|6qBHMjIdH+=&R3mS6MG1MSV{k*D$;+?rz!v42l0tVxBo`vgnbFbJLcR_c!_(Ip#Dm|`P!SV>cMc$jZ_=~3h&A?-y3;rL{hxp-# z@T`wchL3*o4{t+{<=elX`D|MxnjiZi&wTG2Uj2dh{wCg6z3+OT|IDX73;VC8tPnj| z)bfb;{afDWeday!CpMG$F1}d4{T{w&^u=D-{q*JL=~}*hjqlx+=DW*V-{8B}Si}fz zP+tD;K1U8F|NLqT$5yHxY&pq3;XhSak)ApLS$i+*8)(pRW<@%F2J2GFSE1|L|AcIs zf}Xhpo0GL-7i-1t*P)4#tMaYn<6F_0^CI#{={~2h$pQBwXUwH1C+be2Lgrmj;oh}_ z3-@**Bf9Rz=0ZMnBa=Gu8FZc*N^iw3S&QG`8sxw=O_#-rWoyu;dk0%#%MBx(Zym(u zFz1MXCjmU#N9(#cl&(T=xpqcTi`MTBds&xJ|5@Od?6WqFa5Fpsje%dXPWH#6$j3Nv zm~#q@uU)Fc#6xzB51TP+o)2&Nwi%Z@=kGJ$ zOIpC;QSJQ+)&lK)7ELz$f(L19PoS+BZP|8Rof(eZ6D*5{V{3zDPB^wISk{&o`+Bgf zJ}-8Auq>JvyOpvMY~+mnsxzHlU+@9;_BzX0-?A6{{i~s4A#-LB^K2+Sl`~oAk3^1) z!p13KzLybW`?vo47tJOYV4r_o`7-2Nm%rTPn3(OPllakRVT-K64sIld4;ydZtWq}) zobw>_Qd8VmyobqAQA-|u;_(_%;~it)%jOFa8^S*NjLk!wX`NGmg*mxs5b=XI;1B%O zhF^|$HoYM~(R^~~CTob*8&7_d{Q9R-%+=Jz#HtT=8j_Q|_NL=oS3KjzjB`>nJ=w^t zyq3w|CH|Q9BwyB{|EkF29$Ng+kMqdsUZu8XJ5N;>)jyT2a-K3crJdiGyKs#rx4KJT z)>1kXG1KiUQC0tx_6gFwC)-l{*|o?To!yuJW)876vW4}#iZPWTXQIdzwQu`K%&vdx z*VNZpdcCLkV)@8=_rbjV1kGDNPo`!=zd6KA5JR$M*udB$$c`#_b98_=58fK!&1gZa zgR&5KjeytRDE=o$+w6xQ-NGHMEu@~Xr&C>65+otVz^_l(p{eXQ({qB{$j@|ZD&&Inr z*Z6|*;|@5~gum|1@Q{r0KVadh!>+hZ{vPL8@m$v9x3b4GCfa;(az%6JC6%n@&T2mR z_{io?Y~#)+@h7oPlApGRbyEU+p!3zrbSE-~bF^+;0KUK`Y|5GVPCI|gGh_jCaGTcL zkK(7jiP#sNZ=Jxr)0%rc^G<%+IJ&A0KkZihw7qqC$6xpJS?YeCx_V#lEuxP_%yadt zdHzY>*Y{w5^3!S@wbvlG=vQOt;yw9kdswUPl%0b;E!%lC@0jO|QNC#Tp=G!0{o(@b zs_<}pou$Xsj{KeaOyX1Bjla{p6Y6^>pXVy;rp^Sd7rZ{6#Xlz;c7sFX=cfHa+U|m8 zg}gV0de744R@yA2JzFk6Z71(^v0jj$wuklbPJDH7{BH(!zGu(}*mu&lrAt?MsA=C1 z_lxvlo`ZY)TyU$*{_cc-yYMsN6QAaIex^A4FkSeWlyhetG*FHmn|oHWqtM|l<)!F7 zd>e^Z#Ha50b@?*cBRKRj@fzK8@$ueXV{!qPIK_vO%)hye~o?~ z3k}-~Zl1Vq3i1tmYA15>5H|U}718F{brsFu`c!4}>$}cuKK9Cp<~M)){^r*knQyE; zo6y^>?4wNNT=t$1Mw?%$sA&Ghb(PI;JyaB1GR0|rD^(P`rHaq8;@DR{?lgCg1P|1! z0ru{ys`Q2UWK&zwOW0|RtT~7)nwP>BZ~vawqU8PNoz3!bn4Co6mXXtt<+4j(sZ3ir z(urTAYbpM6Z0P%eTku>Rapt}Bk!bV2D=L~_{bXhH!PfJdkG^<*^PgV5p!r}Y@#?@J z{Hd)+pjT_C_)rsei+*eWtWtcn3%(jZXIXp^^9i1tc)k;xc7cXmX ztu*^pT6-LT=M%S7rq5w-OKsKQuhsn5S@je$#`Vt*iA7EBfswJNJFyLT@6YJ)pd5S- z86nx8s-yij^cwxN1B?8fo1O69(fDuM@5PS{j_UE9wu6(E;7mNt#hx4WZjybA)a!s}cAJf-cE1G+DxqjVy@JUp{pVjdCOPxLQ)?XTJz8BiY zpzXmYhrkPGzzaj0uPMsg`_k}%d#?l6p8(g_@cc;YIpF%-=7X<{;-7Q$w_w+W1|E`+ ztd%{eHe_(Cd^VJ)+#ZFjJhET0viY%t%f5KLmGaHVyVsFP2bW!R+`hXR zp0n=`yxn^*toMeP_Y`Z@il3oY?XPy*-%OvTPD<_P^|rqX9$+q*db_Bn{S>X;|3&dz zhUb=Ve}M1Ua(#A(Ga%OV71=TFyZ8Ctz1Mtq%kS}(uM4&j9T3|<8yW3V)0#4hO&QYd*-D{zyYK-4YtuaAd9K%fJTVw-lTSzw&Dy z*$D2z<9u+h@t*;1UtV^z{F>Xo1W*0|p8Nr^AH=4nKY*|01L(br7GHQ=XD)=p5Og_m zFL!A^NIU$N?`A*kB|RDp0hf<0`_l1Eq45`#F23-m2KNzsH_$`xZ3YJQtM@i7`_c*C zIiY;d-RxT*#%4+YUy}Ae^6T95x|=ny=JsLayy6nw{Lss{Pxaw6p*t1vA;8+#GDP4UrfjG>R~bBP4stuKg8;N71?i^rgaWXj8|0geFoYry@IPu3m$VF~ih zlXG=NM$R2Xerf-2J+wL8gDuYL-%pc>oqdcj; zm?uNPcQzR+nJio%0q3uQ?>4oEeEJAJUg1>nYx?{(pO$wm?*H&**YEao-!p^vwu0EN zc_zIo`S(KbIkuN?D2~~WaYk_J5YC` zG$AYUu=y&n`KoDW0_{|LecISll_%7`7kf(X=Zx6XYVWQVJ(s;(P0XV7t$qt;#bngc zhdDE?w&CYsU%EF%ajv#6{nq}v?JMNPx!S(;+~1deTl|c+R$T#(%4Aq+V;#miGC#ZKFXw{Gkh@c(ajSHPZ3 z(dGi$(-}(9#{R}vx?>GxDpwq0Y83w?B`2L73+V4o`g?@^(KXH;X6@EFN@ppZuRQ16 z`G9PG#bJntWXHGDRtIoz0oGR5iXG&V-ZHH5fi>jlaqq{F-#$MhmohZjCO?9qN!x(f zW4H9uc$;Ya574-xkH*^~4@a`mm^Mmd-=%Igdj4TnrhM3tgPvETSF**|&jJUH3(%#^ zjr>yg%wQ$-%!lvm*iT(OIJ~z8{N+!r|0VZdu3reA2Y|a5sKAFX7x`4y zl4E2GIj97u{=w5%o*TCI0rJE`Z|}CPHJ}yZK~ZX zX|s?vwU=Kztl&Ylx!>1j%0FK`yf)UjcCT$Si40YHZ*h*SW>h8n2Y1|OZFuprg)e`& z@^fXvmqDZY!q|x~Wzy)mmjX0u&rPEv)b+KuFVgmrSXXA*(MYr~mZD7K%#d9kElab| z@?Ia$TYBy>{C-~Vd7}7uwKGHf|7umHjNnd~ z89(yz|FN)_PjHI-WSRK{<6G(Hd-&18Lp%7plRadec_)s1UQ#$++ z+{?SrowQ|tE@8fvodSlbZX4j^8K-UZ1*Xnrl$Eka?LdNoa7^T1S+`2qFIf44R|5NQG`HVWD^?n>AIR|?#=hh#9 zZ}Y)1gvA2pE`#nd*MnC*1W(u zBmA!O#6R7=XCqwx%mu6Vj=JE*)#QX&koxTYUee za%VR#hPQZUzH`+y!6rM!+Q@o0363gwSM>1X&&q)>?#Ym|+alljkZUVUVqYmB3+}%e z`GH*e_1K<`C-{Grf8E2j5?_nXFl%pGvH3=x)nSi~k3w7ab{4Uw;B3fSoHMC^yKs7( za>lr06MO9uoo`k=I`0<(yWTbX==@$Wm^gjaM;?_;5Kj>=MSt2~kK^++aWl8VKkUJ` z-@zUoG4%&l;|pEOo_qu6T<>+#2k+;8t&I*bz4bb$}w*5s&nZY$3K;UQ^xd<;N%JZ z@8Q1#yYwO9hOwA&G4A#b*|A+P-?*BJH_peYUS&f_fGHde^$TB9W!PfxddLQZLe1Z$o7F2Xpe)iJSW1 ze4ctM`|9nB47(_2z1OJMPp6}sCRb+arqAWb4^vFOrC|R1gyZzxQM%e)TSm}N(!-il z-Nch<-?F4A`bG`XmDtpE#K@Eni@s5BWC&}{o}L}Sz9RMhI=A0fh0R@F?;QIcYwh{S zq-3G<#C&X#&HBV9pRZ5!!f1W6kC+_5C;N+=^@$BSU!SZ4M(YzDkSySH4A1q+JfE-6 z$voHRB|OjPb1KjEc^S|3c{$JZ8RdDH&sjXz=T$t{=e0c7=O=ic$LBnr>+>@_*XQSW zuFo2tb53La0-o!0G0*jR6VLVeWuC(i^S{b-ecsMU9)DTIE5px@AFntTNr{uR5X5&dS1$1lmF{J#00+d|0zDi6*bxU0Dj&e|I!~{2zGbuCoPwMrwyF^Qgg;~3;u6kdgbEKa&*wd=_iOQGiBE|q4e?2SRnF^R^M>+{ z-3_0~r_x%=+6&$(fX}Wd>f^IjJX=lKZ{gVskRz^NPxq;i&r9d2w@r>chrQFG^E2p& zieaoZfLD3xlfVnVPEXY3#dMFo<>w}R4B}_l-A%=YH|dhVza_62rF;?=kS~Ea?5>m zHuPJYg{G@0>tuaj%6%R3_r@m~IcfN6Hhh)9J`N$1XL|WkBFblhoynNYdcvL+$3J2C z>r1rPOpKJxnbI$x1v18eR{RlS&-`-K9~XFwPo_#<+WWrTJ&wNnzT&Jm60A3RebpWx zX@6jr51-_^li#-&r^5Gsc%%t`ws>S=aUYMQ;JtR%1K4cXaBj|7v&I2Gl2gZ_q3mr# zlcjv3>)%|RnG@)n#5`)xJxO^R@3(QUslz>VM(5MUpMK3g7Je126XkD!x83t8yuVxR zV;^82#&nlL5<5XQD2M0V^&IcK;=N;^ZPIxz);Ijge+ArNADZ(rtH8zRp-x)+gX;Tk=A4nq+_54(mZnaSw~j8s=M5kI;}MUK z>iYQT3B~tj<0IB#x%lW0v^P?G#5>rHS@WWd4Dilv0e+Ev##z7&{hEi}yGpqsp>2p* zPSNt~;4!NC2<})rq}RYV@@3b-J9m0>aRq#1{in6?jlnT~ZuY!0bg>UF#6uLtS{O%0 zS+pp&g)%Eg<+tnjs5=KeG6+91<({@tScPx-&eTU{{6|!^-&upH{Ba_K%XXG|M zM2(%bR~*~zEz0#-Oj!x^isNhX+Y%Xcs4tFHWsc3r$d6{0?TbW1HdUFMDV#Vqt% zV)(6ZJ>Yn{tpu60($1r>C%2Iq&mLyJfCsG?tUm8noGat#CwH04X1*W`f^v5lFwWtw zQTd|%^F{o1od@r4v%tF!TxZY+elN>&_w=L>q>C#i39phxuB)Jz)p!2#pshO2gU#B}|KY)C?c+TG`0Rd-XucUATkqP~vxWcHuQKgNi_>oj zr+q$*qmh5^=U+Ga>t~Dm<|g~xZVWIuJn@lCJ;nW}8TNiJyaD>#{fG*W56W5J$)@kM zk3C+{TCqF}FWmSZc;TCjVfU5&dBH!P-GTA!%P}6^sgNyykmQ&4nd(-5gB*;`wAI*@ zb@d;KnX=y&8hb%;YP(qHH3Lfo8E&5aezu82*Z11r7aE%Pd~LGBur`5j!N4yT^4E%w`rV}moxO#6kD35UTsctwC0R>BLG zpRYFZ+n3L7I&xs9yHBLH8lhDLJm|ap9HrnvHe>?1kwnLu^A+%Q99t=Y>_{Rzw7-Dw zz}1`BF|sLSYppmWn}<5c9gBxY6t}N22W?PfkCBD67nFrBFM4}pk@#QoDTnP)6d3b! zIrx7`j`)bwF79E6PZAmD z%!~b3^lU5xK8-hw?N`DW_3i>yj77Tpao|B`oBNS;rmYdbPd(+*<*R_n>^-o? zGIOBHrF)Hc7LnMA4O(}80owV>wndzQvCmQ_{>tE6Z_o3eF3*(9+VhNg{Clj*&9~~t zMD*objkAtR%mr^ZVB=T&)}Qcl!pF;T@p2XKma|UPdH}vp!T&nzBfg#kzs9SgJcqC0 z@6_}t@35A`_SU+Qdw*OWuX1y8b<)NQ2jOw%MtlluuJe#htly733y(85JRUc6HtVb@ z9*@(W<#C5tGWn%OfRm4dZ|#p{<#F`2f1RcKKjVeKItW;Y0xSC3p1*p+H{aLcd-Uh$ zjC=Dv1s>XGgNHe+$>Hs_MMcvN)aA`cmVqDPgE5Il3z5UE$N{a>bsjWNIAUy_!qaT} zor<^2~WF+2!Kh2)tVdKf%*G#MAZg zZVKG@uCw_rIM6TK7NDEj(M{s}vD7hTu5L1O@HzN4&*NG14BezTr0)ySOndl= znBdtIo~-imr{URuy)nSE(Sfn=Qzkevc-BXg11WdU{(y32Sa&kN zJ+$vUTpU~_z*P!ye}V44|}EKoW=*_N9pi<70`J@-BqO~f5QUeE?yhteCt_a$Exu0*0C2| zPMp5%Aq&S{7m^!Mau2wS{Rr=0M49})^0z4dSF+IFBX=KhA`xUx9yHeaHG~{>b*ww* za^YWg@!C`1{^1<@z}1KS^HED5$X*uSES`WkoT(I14;U_hyw9o-C~j;saUwY=HlY z@y}(87i>pHrrn6_j4~#vzkh@hF!>2?S=CWvH>9SmOL8kVji|8S`FwP)d z9-_VfBxWbLX6v=neey#5`uh*(mKER0!LPaO7tu)c65T{I@tDE8;-%n6KfU%a-giQ; z5Vm3-_Di-{U-C|8#NX<-KmIlkouaexHvU%6MJF5UtKYIs%y}By#|ZW&(9zg2>9IaK zZ$hr$172lY$>uIaE-=4bxsZ*vZ3AObkGB8W)t|Nn?}4_HX>ZZHpzVTF&{lb)dgZ^d z$NT&Xc72IGaWXNTe|XYQ$2{M>yIy{8>OAb+b;)wmvoZ2;joVV^0Q+2;ia@4^v$~jm3dtxT=Zal8n~) zbB%pDW8c}gUfUKa@?s>ijD1Uvv1{B(!x`k{i|}V>!g=t^H&e+eZEY->T2d*t*f`5GB`Th#Zm7(3w!Ht z&&Hh!epdG3XG5eWH-0{!1wZV|VDnwj@<0GTvSa=E#a&xJi+)Ddok~A%5PqzFMlba8 zgY*zGW;E-U75LvD)tKRLzpnP#gREBu#V!K=B)qq`lQzX~KK=a$XF%Sq{yvBH<`F-W zQ-6E7nVSVS{`hCR9@;}p;oC!VuZKG7h}&93+}2X!wr=sQkMNr?o_WewoIroX(H&OS zw1F4t_5tA0=wNiOau;{jkxK#H-Gg3n-zjW4310l~Xgz?u}jXO}uN? z;ld$vHHAHX`1Y7*DK?;IjU! z3h-!rYK48Ur0Boa2TN*PCeD<1BMvTVpl=EEje@VcgexDOI_aY$3$6|qogPnR9-gG* z4Gr?2vqE~8BA_um{~ zPP49xBTvwK`?P*P`7`D;>rT)1+a^CvMEj)35o7y7Tc7Pm|D~}pv{y}Rk>1H_lQXC7 z`rYPH>4HZk13!CNrjGEh*5v7?*RUM~-pcsvLUK^|NUUVcV@r_w9p zLGj#Ar)TFm|M>##x9&0VMg9H7DfET>N79Q|cx${?VvJ;0%^wz>R!|yEJID#y{H^HR z2y%WL^Ls3MSNF3%bjI-~b*6tQ`w_YaZ!(|KtD-{(Fh%rC zduKfL1othxD_^YWm(Tn1C53rk{oKJiR<-21i$HP4Nu{8egvrl6EZc!6YJR^~?I%-Q@n;>)vg@a5-xvd`hKSN@R~Ioo>SN{=V^ zdpwyO6rDDpw2vqE!;`i6-o}H=afT-gTdFv3Af6lqujy~qmXU%!V>+2if#$Bvos zJhI%JRRC9(PrnSV44}hx0HvX5Lqz@d=7>GY1{g@GxoEX_x}BED??1YCG%}3@<={|2y@8rzPGQ84$Fx1 z$lyo%|7xKB_8k1@-Z#`=pHvg`?J%dG#g<}Ud%EUeDS4@s`&PDKDgEayXHK#&6UE<^ zR4xwQ(Otk>ILEf-%@1&c%6f0onE5@?u&zRI0u+fgj_L#JpfS09S!b5>^VIv-@Z?sesT*wIe2L%pSE~>V)47j z>^JtuulO?sKGdf6uXlU<zP+7 zzX2Ol@?j41L3=Of7024Sx3FU-dy>;x8&lS~`@&ckxjMUw3GDCZFKm3okH-2av zHU#As&ws1V!pHE4U7JYuUK+rKU-kz5b?b7(6Qr;Ytvw?iw|gkYp2p4-UdFdGcd$uJ z+$A=ZY@FV6+wfQuvim|Sr#%}=aRp0KTD#B&wxXTK8=hvI@TzAoZ|Jp`vER&^O?Gpi z&vKjAY)^uVH;5a^8CL*agpXt7K?v%iwjBCk54J-#d!(xH_>;2Z7IGfwiUG%;l+Cdp zyKg=7y#W9B7UV%I`_=N@$&RjN?DC`Ne5=YOclBF7_EzSvd5-LrkG)kfFW&ps-nPG` zYm{SO_>!%oJ=}KoL6vJT!5-~zKEOFT@YaM4x!Lu(Z?HMd9|t$3*uG8Fi(vb1!j|;Q z0eA{Ldh2m#NURQgW|XxJj(s5qzX`7oX2I(Z0`jxl?2l$&e;8jmJRts>kDe8eIp9fa z67kpd@QL9sc)+aL;4i-)5MG(L$;8}Gk2&HW-V=?=piP7^=Yf;3hZF5j(#O;r!AS(1 zC?+OkZEI|P@vi#%Mi0D+??CYw^8FB#+@SpoJxlVQ!Jo&=g7ZhojJ4l3`5*rH6JU{y zqaHSWA1`NL`x#!&2hZi=W!}l3+2FkI{`ELAEpY>Lq0YC~ zll=_uwl8waMFXv6I-rO0MI%4ST}C}*VsZ-dr7lW&Nz2*rqkMDiRm7Em z7PQPh%^17z19q2G%oxZxuF-u$z-xSGjAJF^7zo^=hwib{Gk=+4!Srmno-r=-jB%+< z{)lSE=6~P#)EJ+?jJ3UKL-&#$WF8d{aHih~EXwh+-_s@gX|EPoZuD@fa^Y0Jh130> zF1gXe>3&a_=(%ue*2!Ld;ZA<>>X37+kn@b4I#?d9e-rwX*iU0in z&ybVunVE1bg^enEB~IPa^H~c!@8h04?r+;eZn#~@9&oFe!gwomgf2;BoN_tIei5%b zaVNHh^E2i6X0GFIodM@Xn~TO&G!L9y*?gd+sJUx=ar4282R09YcMqVi_IyA&29Wo+ zFz)iujJvw-cvbYAy?EU51Nt11-_Xgt*`JS}06*se_@@gw*bQx)PxS229bv+w=5Fmo za_1s{^}C!qw&IMn8#$|ewK(*@JOMs$L56A^&_pq8?a;KNykf=ybdvT>l!vq%nL66>|sAr-N_VXXZUpD{)^B{G-%NuG-e!(@^FCV5Y>8vu^VLqqB;=@v6 z?|$fw4I4`OM1F}vjp>KV8zKEDJ?M_1;2g6SIa+u32V(8q8*cZ?mXaH!llPOJ&1CN@ z8cUzDBU7}aej~uIy*AejbMkrkY76uK1!yZ=Zbcs|$M+&XL z+Ou7eH9_0;Z#TTX@lt4&TYo#)ILmoqeWjCV51+Rlg_&MY(Vc4n3xjntnJOHw9y z>$AYS^*zA*bJ{Boz^ij(;@1oqqeEi5cvmzJ`aeS-%+z&Pd-~1fdob~jefi^(yC+lIx)1k37&#Y(b`oi+I91LO9`gW#a@Iv9w{mx5LkuO^mCAxmkuhW`Fp;)tpHbAFm)! z*xm4KDSMX=@#D%-l@v`h|Co1YX&msg_6I6C1EW0>GiQ*=u8ek!jCRYs{82ghy{9?A z+x5d^KMIUpeEDZ`R#@Bk1>~c{pY`W2!RL`}zbVf71^;+=qQ5l;&2f!e@b&y#&qn3x zt>CT*$p`V~e|miP?CI!)t=s^t!TI`9a7=B(V=J?asm(Vg-5==M_pZNTqRHvd-`}9S z91q-v9fkcY-@|-zF4}Vd2aKN7-SyJXG`{?Oa;K`+XpZ`2QCu)34 zx9DsNYlg&Z zVo6ebmklU?p7#G0D<~c{@K8U=bFDcKkAhG6RQW3F=iBANXlz&Vjq3clo)^FaTbKhY zSTox*=;X38IYu>R|M)bviO(~xD#nFgRsFI2R?Hgv0Y~d@DrG-l`F8mlwI9&Qo?vGe z@|k^;jQxP6oag%0+Z#WCe3zWFGVL#)%`*4lO}kc9tdi!$B|iQM?#C)d=_YTUXs+nb z&X;225AWMA(H@EXQSH~$F7&AM%cf06R&$ygnABsJ`3;cuAcGfW_MiJV|cehaT z8yjE~a-W#z^vmoK)Dugln2v;Ka$mc5do~>Mx&AST!sgbDjv_0SCyVt2dEZDz_VgYd>}PC~DJ#RAo+eddYu zR1>(dcAnxqjjZ6)oP7dEqk&&|lAoi3+-dSRi3VyX8!RsX%h!RW?ZoL}3EI6?0UlfG zo1=DqUOhFtK9io-zW<8LoMT1U$eca>MI%0*#pv;{_e^EtIpta{hK38K@=iYA!RHFa zI!$oqwdovf>ACKCZBH+oGABz}{G5#U7Mw?WBi>z~wPU z8l7c~j9t0CEKCy_V;$pN!FYFu`lls*-*Ldx#TzJxNwQu)$ z*LdyQJzhOm`>h_H^jq!APr4t!=uX-+IH=FWf#|Z5dHjEaUirYJoap$aU07-Yu)t%& zc`scUi{&}x0o2_L(j5)x|6F|6Ti3&<<-0I-{d}k2e!dF__)gFLe5c>1fKeGmHs*J#j)q4xA*d0Hj18UjXNILoN%9v=y{3XUf&V=jsR;p`dK{XjxTer znX-81n0xi5C+p2S0hyDn%<3-LM&Bmx%i2bt_VUVFedV4HyP$V(G%5QO8_33ERvOzd zZ0wHsAoiBeVa$WTCAML85xRsqR-Nzeqe=gRuNgzZnVvQA%qv@F&MqSJS2A|5>?w10 zPO_)3EN$nL_D*EO&(F3-UG1$=SwHyqV>H&k_l?!sfqs908(-KrUgf8d&8P7aM|aZr zGFXGjhR}Gg@r_ryS?9c(fR}i>lR5+Ea1PKv4pYuKxOY1a`Z}4wf3LN=#xcPgM|=?H z`i8=P@YgF@?2RSHzma1+Q#hk&=+`%%vlvf&O7t1QZRqID3Ec-$$(;vTeF8pw!~4(p z;e30N%Uke2E3ggS%SOBe8O-sLRjd!)n31awe*rD*ZI9ivMNo-t1Fl`X&3Izx}X_|+6^ zES-bUS)c@Kqxi-AW1}WmZ?(SFv++jGDp((n;#bTXX?isMD0hM?#-{T4ZTD%PRFD(?X4C3>y&J8+r88!Ibc^@)i3{x@XrVS;#0u? zwf_eAXS@seo6+0Z;@eX2isIw1KxYUqng^};T(4ptXm3U`b1X9WOn6`AE1}~!?4b_) zM#kRpWG!XOR3mo=y%T7$!=!I$DBS|{|rXYi$%k=Dt5 zZ5jMs^3L!#CI|kefxilTaN2VMe@7!WSA7=zRi6fb59Yw%zxw2Hv+=i{8h?h@ShopB zrM|m5S}$|QO4-SfbNhF7e@-j>qC22A!7r9qx`|OSbKT<=@vr5VzY#xM>mRSp>7Ql1 zWv3Z$b&m07===Y+@h;0b-p5Wc-k-gT@pjHT_53J%C*%DeBu_Ru^ZVh~`R4%6 zEPwnj@D=Ifk5kH%2Ty~q-%kAhw>;V8)aAtAwK?!N8vMOec{1lT_*kOM%v2d&G;YXJ1rnb%@+1nB|E2J-_sn`CP8?cAm{oVfb zuyl|;VdVSe?mCop+%sj|t5gZT>O7paMqS?t&rb5}WKhmW!C9^FhHap`>MiNfgidd`-Ru_-27Otzh1a%1aDTK2u7oEXtw``?dq-LGi;5!w&H zChG|BDg0(|T?VdwvU6JwTg>44+SB0r?i{#&B*_FpA~fAm}8iSd8Aa#(l0$mSo=vg2j)mBWvIxu?4u z#fR<4%7o!X)&|JViU2OMt?gvr|B0L;+2*g^KUe%vv9Z_s*3VimYu&7MwAPwhOG}2e z*0}bme=N6fpJ2AJq%{`Sq`|S6Tz;%u4|rqgWNbQ1-(~jT3t9IRwM?^PJI#9gr#Z&< zQeeI`!<*UGdsZH3-fO=64!Wca9D+&no;dNJyEL)-D;GWf$Qsvgf9Imdy*Xh1wU594 zEA$wYgC5WS7wD1q4(aik9Aop-!{+;$Xk=LSd_Tr-gD*t6e3T1yq2kZHz4AP>-{|hi z#^noPUMP=sIsSLevlRZ21Vt)2X?qtw7(EU?14q)$q zUvlx-U&dvh^Xv!r%MWhP>$o`-`^V3umV#rAXD;LUIP|y$dKenyo7e@(iX>ypput=p z4UmcPj{`ep`GOsM>U|RvAsT=a(O@z-Of2mMhXnla+?kAPHf7XHLLcE| z&iiST_L61w_mQJu{b*=3+R1A%_?n#=hZ3aK2GME`?IG&~$32!-bD$Nx@;tV~7IK2U zK%3cU^}D@qZ)^zAYOZLd@j|QJ9jB*NLk?Q~Z=XDvcnbM!{G1~h19G~q9-J^wYOvW8 zBTX)%>CzpN!`dIf@0-3=I4tpSNIAaq^xsARC-0BO@2TI~$Jd>-uKknWqWel3vEOZe zkX4T4qn!sKH+C(sFCd#-`e$yA@$K=A?`q>;>hp&xK1M!J=~DSS<@c12GzAa%<7T27 z3*$C15rSKLLijx|(3vOUgmH>bsunX&ctLn!Z|Dh)RsPZnH)d*^&e_%y2d=nE?W5_w zCw-5EiA!N#moYYCUDL85B^O2u&$Oqtk!g!}h2wvIAN6=1@t&9JIdDb5Upe?ou>Ogl z&lOuG9@QS#>HM?8VO|a#Zp$*CjXpPLAN$)US?%#pxc7@b!u_KA*;CphUnga4$kOqQ zS9`XK6VP65lV``YGL{bRv5<^yT}(N1H;;4v^PS74$u`j5V+VX^-z#7bZyj;}*3Z7m z#|) z-xNmK--17eLen#u2k=TTAHq5_AN%5YOIQnYrecH5?K}${Tmj#hGR|WVmuGU?JjdCU z2I5)9!dK>*m)lw2mD@Sk&H~z5n4_I#r)cL3%nQR;-u`7!Pl%^(&N9~Bx%kP%$M*4) z;@HGX25!!w6tLf_{Nj%Q?-mc<8@+Ms9QF&0`#K-IH!|*V%&FkG7t&S-ymBY)+~u{i z&}+w@XPHSmI^*Hi?LE)3;YRRhV&;(BAGPE6cqKS~E1M=~!GY)<%rD$+?wjbNx7|BZ zjJ?igDR%9~Pq=X|qM_!|66TEJLK4iG0gUB<<8WVSW^C^Y=2QaTq0Y4_hOCQsZ}iPW zm1!Pc#e7m*nun^Rc_^J|WD4_8K62%;*hyQ@;_tCJ1?}@lzB8=}7`4A9__QCczDCoR z_K~}3S7qv}gtp4*>uQzJ*G|e-`ud_@bEj}Q{jDUHXrb>;;VYQ`Yk0R2`H=MP6xREa z2X1a;?;Z@xmjQgRrY3%RM(ktX%b3%B_YE^2eRF!7{1>-<{OyglUi4kmTS7hIA{%dL zEucB_@R;oKKzm}#m@99F3xDx1e=Bcp%yVKoAGiVd_Mum;x z(8->8ZN&ds%>uU7J@dt3j7XKi8c*)aFnoqTG&8MVow->ECp;ls;coi)s9s9aok zd^Pw~&cF)t$8TS)c*t+`=04IquhqWNcP@}LIlE>ygv&VlvXO`dGpx{;h)9v=$! zLJxMW2VI(n49z2N_0hcFeljrn?@SH}tuUHHzO>2nXP(dk^$^H~miv^q(TXkbgc@y@&p`e>Elna<6KH`~JQy}SBt z;?riid=e^kZD*@1?R!D~TasnIe;NMQdAZKpPP+75?ZPVkCb@EKv^&RNw=h2B@_Vgs zjvwWj?aTcnpMeLfeg|=SiRK(~UF#T~`_p;x&VSG3CnLi=-fi;r^#*;}`Lr%DpRB%G z;pLyw{d{BiH~NbCBpP8?q)&YP*W}E8aCizhQ8ovqA>n z;K7go8t|Yo%jV3-4j9e9jjcMo`t?%V&;$3tReFe5-fgqg{&_8(=`oGm2M2 z#>n^m6TVxS*Be_2@8WGmzN9=u+~XEkew8^|f)?ct}0 z*Vg%H*%6h8q@QF@hFWT`_4e@Rq06xClU1($kt%nL{jrky+FtG6cP9N7zX5#my9s}c z_MbW?an9Y#yCJ=!bC7R5i4XI7V9;-5x_y3_a`CCo0_qIJCdq=iz)7DSNya{xHA*-$ zcgmN+mDWZ*57Hj*C6@9j80z>0j>IB9=|l0{(z!bCrhEp91?!dTVK;}tCUTx6pqt`2 zwI^$0pJp=e@V9nMNB_)p_~iK%aLBq`zGCH%LO#V-3ci63cXNhg@(-qXzm79c+K-Z) zt79z6-=JJZ7Wblq_2p{MJ;k}HHQ;IuIZFNrE`&b=GrVK*D*UH_p&eLm%nvubaP;f1 zzEI=*VyiQtK{-Y61#Qq-_&oS{7<^m`A8%fK2%&hWv!O)zge1r$0=HVPs~yc)%j)p@@t&l`5Ac%kzCO~>n;bSM1!JZ)^D4dsLCrj3bBm&J_Fp5Nkk&C6L{dl_wkpDx<( z_INQ~7X>ceLs5LFVwTQl=&S^B%$#e^U&VU9igU`qq}lDOB-M;8}O}OMYqL0=yn)mu|r)_*ZGgja?YLjds?^vAv6O3=)E9A8!mzcg|pUqh5 zgkIwFm)KI%A0}sLy!YH;zVT@|PW^qZ40eC_&iB>sZ{=3eS+e~_uAQ!N(Ow#(VT7Ko zoQu4ptP;C7!5q{)*gwqmk9pVQFb77X^hf>*vw<$|HwgTX6*O67u~8W?Klxb4iR zZP{~k824k6uK}C|aTLVi{xQTWW25XpFB50yX{@Dw97GMy&Qdvbny#?8j2fH`Q~899 z_YKa(*ZU`XxB&OUnZe^FlvSMqj~-mQlfjQi!By?S<>Do3@F=*dsS_!;_>CGo3a)Ao zF7JJVN5NI?!KHHH(cl)iLLbS*Z56m}elNJ4>f%FuSn9>-nz3I7oR=}z-13t;|E_hN z_@~^~apy#Dj9fW&nmD)W&6Sf*Y0U*Sz$AJqmb|pI*8CRzH8zLe3%%!(ou$05-+G?0 z2C{SKa@Y54VZ{gWj6Apw zL`&xf#xOr)4ACrO*d#xaH+GAQn$o(Ac1ro}$3=~Yn_RdE%9x@M`Vu*;vHNB7kFnV+ zbe7C}COKKB{9)KqqLXBUWZf4ilMPgY-Jr7p*l6#1o@T(51(t6EOK3T_gHG)5V?h=n$=OqWC%Dw*d34=&DC{FI*_^a|b-N3E30J7HfhQ ziUVn^api{ew)VExP_Ff}?e_xk*@&;PA%ysB*JaffwM^cm$vFwWX^5YrG!RQHq7B!S)s{Osotz6Abgz z7tb`WhOid2aOu69MYB7A?KW_Noucc&kGC<7+3Y1kw;FOG`so$aqgoI2 z!i4=U*`WTf|06K*EE`N4f-v!(AEvuc0aNWefGL3u!rs;f?TM{>I3uQaTW?G+WB2We zZP1?B_N&aEn5lP1u6p1lSnpx#`TM+yy0v|A#2X^^+(?!_zwPVu3%TlL>2s~G-Y2M6 z;qT9$%gNH;GGD#QT=lZ_x71f}D)k~>e=D_LW6x1#>F@KtdgF4{%hKP+si(NJ$Z~k2 z&Rwf-rcWzl#D`5f!}aJHv9CV+_Qu=3(;NE*EhopysV_SsV{LOLvUnu&VHER#bx(_;R+Y8U|Ho*n z`ZMkxc=hL8dAcglSM_3SOJa$hXB`#Xi$-s<{!pxK<{rFkhJ>}TJs;vbg=y3~geihO zo(m?)#$f+0oZfvX)~~5M){z5iAL^TvhG%WO3pBU$xy?KKw{13l9IxK8cTsP%uinyk zQSV#SI~}jSa$as;{Y;kix#F2v+h*{qqqs=!;F$$%ad;;YzLlIyp_WoJ?hnK&f5@Cu z891rH4^iRzAoj@z(L^jt3vnOvWmLgG@;P8PrD<~;kMJw!W#nYj{Mro6e*`u=f82Pr zKL2zQyC_lSm|Tkvc8&a&V~Oe6LjJr*PVC=ZI4t_qZu&YOeo@?MsopVubNPSW+@ST2 zmt)A%+wiLU>=EQbssvkK9Me8RXS^nz8h!cBh z@si_voZ^P+Q2wD!%&ksz@W7s)Cp7Oh2Km&~<`38dOwfnj(`l#gR~i4<0;6-$g4e1xyIHy&J!#6J(~T$ z(ZF~S<@=F|`V^dX_g7)#h7Z-4b%UD^qYM7&M4p>*Y}7akp+!;4M)tVO{fWr(E@%RO zP18Gz9(2dNxUtIQ@wGUKV+ZR_42{d!J02d~@^H(O@P5f@^vQuyx##G;zBy{=!yXeK z)<;hhlL{?Gx5N~ecBao!nqwEmKE2uV5i;-a4Vrmbi*HbQ`eoz)j2H-gAI}^uWd17e zbRlzCZ3y3+S@%?KDvh~1)aJh}FtNmQ$fKtBOSqRc3Lm`$j+ygM2xqn6-QqVBH^Q}i z-B@A>Zp(pp6M?(kdhn2mg! zfP5@YsdCH;DJH<-NOkFNqvf zJnbyzryFN1pJ=$HR}OkP?luvZgUoy4VQ9Vvn)k3z1h25(4x4=H`qY{=1g-1XH(F5| zJq8@}Rxsb%(d(=Ctu`@3sqj~}D`%S35w3qc)bixNqAOTmXq}Ln%bdsdI{=O(XLVlx z0Q}n_*#n&xFY|KbO& z-iSe9G8X z9pg1FcMh32Y3UEiQOXM#hnatOcrdIG3|@X}kIwRE2$yS_`!|OMuYU}k^%y$qV@qy6 zeqCrt!~Rgwp*Co|w7`j-fzDFCddbHyu^4{(nf;?1zEmvNm``{BbAsp!?oCk*7umdiI8)k54}K>QQTt6e7z9!J|Ww4cJ_g zgP+SX2H6Rcefkp)Ts`aZMO)a7dvTwh{<$6hlEC=@oej_#fhe-Ysn3snx`AAc*l(5C zZzYP|Kp!QTYZ`;eB?Yf5rZEoQq}w%r#(|&F;7Rcvapsct;Wdxi;oCLL3*usS=$scnkzHkQzuG%HL7AO9 z{&Lxd&yvTw(kY4k`u@JSDA7UqKXFbU4=G=V#;bNLo`b(FKD*g}_s2iR$3t82l|;^^ zkaze&`fONo_WEtucVth}hT76ubZb+dqj|*mZH%^jmZi*@K3N*DgTpRvN@X*!uXrpl zem@`n#D@pF{`KdhaN{HT^qaj)C>g$Od!IfiX_>lB>xSD{OL%;PjM5&eY#5D4zA7t! z%bdKu2g2dKSDv_Q{Q&lMC5OdBl3|9AkoV%F4&-+$^OJRkxyNHC{_R@k>`H8Jom1An zv-nRkQ=hKCFS>mUYne6mABa@}Q#)~TiccYQl0}iQu zLr><2;ZMtpv?2KN;Kw#(wrLmmEbmE9_m;umlHYb0}@ zUgEPc#jBt6(I}W7eI2^T?~hPS))@X9HJ=!Z^-pMBr8z6TslN7o4WB6XusN&4JWeuq zEBSmkvBHylaOH|ea^o5M;%iL2Fmx1uD|Z`ndxtCM@>*WCIcHWoW{>mndot&(-J2fb z>sLIhIPT$!@qWmS%ZvEpP!D)A)z05ya1xAvRor<3x$MHCm=(W0>%wwRHdv@5`gD{3 ztDg_a!c^zN6!O6&cuxh-hIatZ;%x8$%L@TmG=75{4~_~S9GxC+9R4gk@*DNT4>oC= zp_9)CRORC3N*^4;#Uoz-z46d?{J!`_e?0Wnh8}(TS^S}RQ_Hu~AzFu89?=|BekaKZ zzYdnZ^y^r=-dGjDhxPBpEnZSCeS-0(nfS7|bc z$A33{{j{tu(ixmj=`|Lgw?`uufd|9Sjw=~Hah^L^*N#LpWBAYVKip-uN9 zz%$~Ve7@hwcZYlj4)<{kz~8lob>53SyW1&TUxb}qgq^)-@#5pVxeu{CRB))C`Kddw zim|heoj|)%Q1pC4x(A(?!d{S_;Pl!F{wC@pP8u@b7C1|%oQKnY|h&Eov(c<(C3X_pASOA1$!&a9Rd1Yvp3Jcy?`-1 z4g3o?qNk7<)~;Sd9IgW$b>?RvJR^U+&h1I}Tq4^<>s4rL^dvISwjVcs+A;WVT)W~Q ze<+`}GfjQe(uZv15^ST*tb0_Z{_o`6O)I{j0?yzF2Rc`XuWssH+@16x;MbYJ#>Hcg zE6zs!)G`j+kMU!|OSkVhNqmy{R%5`PfzLXy8Ga5w`0efpV^aL@K=@+z;@Zo4-gLfF z+tV}e-+1p8`YOS;5zfy8=UXY0?$Mu>x9hlv&7beSM>xQC)S9KI)tS+=BHY~bv@=8P zv@@19_;uEt*nf9^$hkDmZ-?J2@pnWvjg8fbq6`$ca&Ra~|r60iom5Oh1=Q!{6=N3D*tn>!)W$ zJ}FL|4QrfxI$w3@yLVr!Nyo`2a2kERZGJUsjhe2IJYPUVT!>&YX~VAd|O?HFeqT4jSnFsQ$5 zaAbSm!sdT}rpHfTk7}>RZBJwLzhmtJ@!X2D`sDipAMg43Z;7#|Gws#?!`zv`M_HW< z|DDWCX2PzZV6}!25D@E9H&R=fBp{pXm0sK0uOWmb7_Cyf=oL&LVKbl%p`xVshAk|k zC`DAL-z`f7#JMUYz1r5cnaO0sxRAIpHJI=JocDca-n^M0wiUnpe)-MJyPWgv=Q+=L z&T}r8{VyJ$I#VeLy%ibCLxwgWLr&J9#%hsWC7QETa(mQoWJZ3EHDqSGcH$c0X)$wN z9X8!}5}3XNOtQbl>c6hD?0u;-;57B)uq~dU{3NF%LwFXZX4AJl< zHhVI`X_!gpY+r`G{^@K5e|&t@*XUFHYk$K$UyWnL<(%_&XkKlVag|5-d&CqDT={>7g!W{rlJu(U_MivNuiBR*`*j|JAhQv<^q z&poXC(K!F57Q%eioQvd4lA_D~k8;LgCjPM0E)cjvPK}iPq?Rn^qJy!GR{mPQiyTUS zf1^K{E7GvYmj4lLR(_ia!vKgb@4^Q z#LYU2wT!0(Z|E*~*KyC$Z^0UDV(W5fFotuaCZM}Q3l$Tmjmuu5Mj5{aCmo-&^m-fo z7Te8Q$o4E~wEUBP&sV&RFskG;;E zH(gmp)viI>gYr&E`-C#rXe~qegWu)T>)Y+>r|ouKuKC@UOP(ofGuRFj4|!kg)tBk7 zq^h`@KH~j7VDvZF=WH{_i_Q|L9xAT1V@};L6y$b73#d zFL6`1Ps?b)?z_ioz@8eAeZHoACZdIVg62PjpRhSUZM5z?xLP=;WQq$r>-L?p{|D*! zYD?QIgqOvG*y{l=6`jeWcHOFFj75K4Q^3{bd(d?Wbm+(Rsr(+m=X5>?@tM!(1$^Gk zC%C!s!(DqFC)`7|-P*01Uu=Mt2d2Kx9w7P}pC5`n=KYKcuQuluVuckhZB7`Q0>3g! zyxP%{3w$-uZO#ah5tU!y^5>T0w=))EPcpK2M&y-s8Y|s8;ihD{O1It8kE}mTRk=)A#RGhH zmgP7c_PYP7{=ixOOHa{1d)Rk#9_8+|CCC}_mfKU?+69)uV>-c7^i8o-SNaE;?Ls4P z$sm@Mk>paJ5Aylo5O~U-hm0Zclsyj_^p%k`h);N$bb)$K@``u!Y}A2%+4|kCaaN&~ zu6fwWLhO1E@GnHp*F%q?Ud|uR-!NKu=<4XWTIN?`BQ|i}U>f%%53%0q3KkM$Y=-9{ z8H3=Z#4LLKjywcxb}s$nKdg}RcsJsM|2z3dgYmzoqdRiG*i`tW^W=NjMcId9v0nzy zZ~FA})i?4lu{=lbqUtDZh&?jLm~qr3k}>8Ei;tt*XNR)S`kKIi*dFkYiaXop+b`5@ z^JgDA{DpGl$7hxbe$oN;f3jC&>Mf63GfbzZXfN9=&P&&Yh%+Kx%H6H*Ten!RB0w_1z! z^YIQVpYYr`y*6~Fm&c@6|D-s*RzokItGhkP|3jCyO2bCR{Cop$1xK-Q9vRQJ#NwaE zHN$5(YQXlkji2iLQk4%9kI&1#t^dU5DNfO24l-|&I6((Kgc{q^9sUMrD!Cv7@rR~* zwC81xmzAvT#3w)xE>(Fvz5w#d^+Lwit;{(>%)ug8G8W@QsQ3c>s#k64ImR;2a?&2M z{Jgv;dDByw8%WLpV|2@G=D3n~Iz4~tXypECSvOJZOWc?10)xb!x1eV_U!8$5yY1t* zPM3sqG}c0`G9ft*IHFvH-N_(+di z-iW(%)$`aX?6?86_Hyye1vTI*oL zF00%ILQ5F89THd?$2^4?AaxWgFMyIRl1YV?M8N()YgUvT3w~9GbXYYQZg- zKpyq_DRKPFx%*TVxA>NS)06mc;28GI-4R9xWNt39<2%{0IvW~vFlTOJ9@8{l+bzDG z_`_jmq4Ey}cU|VRK%>0pboggNmm>UeSu0=Ho>e1zLtYWvD{{)&*K!2S&+WE)b~)fDo+21&=Wd|TzNG1*ZD^K zC3jEaHzLove2I_g3B1u8*oo;Zz=oT0Bk>T?RjI#HxSTv{$)!QwJO$3NcaDgeVf*2O?yArfa`BI{TxZYt=*qf>)6ood}1znFO5@c z)%%b!^?T1akweBIeSPrn_fxaSSXYz%OOkIB#vc}2H-@}ib%q+xE10TuUP{a^4Bf>B zsy3@^eH`lCN7&lOSX&=n$LaME)ceSV)~e4pI`{DkeK5(0ogZhwwj%GP8x;QQbo^K3 z?YW^7{=ehBy(a#n9jZ3^n4LBlpXdfg^vX&X@rlQ>azH6;Z5rCIB&#f_@eu!|9=cRSmh;*oQS;0JRnW2Tj^&R z?Kk9Bd^#&GFBCF@ zpu}@UFU|2=p9{Hk-N{Z&caIJ4ss#FBU!Rj$7`SgQ**lswm86T~Jaz@DdUmW{5AHU+ zS4`9K#`a~Z{nQq`S4`9KUXcgh{e&iQyjM)q@m`S!-YRDWyaV99fcg{?yO8lqa5m?B ziE5t3Y~T6FCpO{LeioZ>zHhgz&k-Jqt*3O0FZ&_v_%1#J`2O^t#P`uJz;~o={Z;YS zr*LIHDdV&**Y)7qja)OvDfwKHK(1Hh8T_5zRjya$8T_4Yk?U`RZ?V)LfxllU*Z65N z_QZHh+*5dbn-yp5{sD_VFID(j{5||US!-g9+ul@^!Fm&MN&E_lQ^=ezP6JQi_A|im zwnt7=zD?iTI_42SsVDv}H0Woeftkngdz-w^w%NA`J(xDrDSZ>4Lst>2c*Vh%_x*lJ>jlbfb#P_yS;H&4O#^cY5uhgp%*_N@>SOhHWbCr&uPgA!lrv+`e-DoTtUdp0pU(PgmEXfE zUpu}ZNcL{k6==Ipoak7cXXM~XuBpUEj$!Le|0qH{R&uT-7bt|y!v$c!&~<*9SJoH! z@Li<_Q)=K*==4?lG`~nB2V!UND?9l#rk%qc%lf#Q7samWvYSPISgH}*RvD=C5ntRb!X%QKz3PaPJww@%N{TqiyUGJZmMsW{lh2)r(Ka zPanA2?D=oJU%eg|pDwNzc{Ssp8!fn6?fFD?zJkrZ5d)9hukGIRX;&L3xdf(-ODB&~ z**N@{n2jTUQQ5freawegCnuKteQ0wgeEaL5Pr|VPe@b%Y63$uGm~4r$+w5I3d2yZW zoy-B!^|{_H7Md!*FWtA>e!fBq^s?s9N&H>b~r6L<=m)cv5kJrQ@Wk=7bln-S$txzoi_d90etwKZGLdrZcm_xK_7Akp^qL9 zAb;KPz26yPWwQb4K~J&l%M{=8Wo|ZO*9fF=tfwEOW+6oi0aWb4Kv! zmM%6sV~xF65xX(%jX6)S&zF`a@HhVYNmo4-x|w=d)z#Nnq4`*^mKe4g&yoT^hgNn! zL-3T?iNf0!J5l!xI@x0<>YhO-YwYAs=tS(~NT=AzKj>$SAZN|0cVe&ax6p5=Wo~7S zuZ*Bl+$h<<3-chZlilfQcXC`&|}e^5WBlILdE zkEbm3>rOvT+ur)F?_zKBpphEKzhZkk5jruB|I_w%mW3YO+FNBW;{Fd~@rtIR>-~+a zDM)-OQEbX@(t&y1S7|#ub~<3syB&A3yC09u+DhpO=pkdW)KTcJ-a`Wa7u#}u7ytJ! z?yp{dsyKh8%lMMWwj}U>>xs9Rw#DlI>f=S6|Ki80v(^|FBy6u~V{|)#|0sKSzHv2GG?8P@1n}YpXeg^3D z^F(yQ_KQvH6zei=$|+)indF>VeGhY;z0^Wau{+ONWat-bQwE5iZvOq;_WOR@@1NOz z&$0c!&-VLX+wY&+e&1vJeYfp*AKUL)w%;#TbcTPL?S8K9_f*^O9NX`0w)TExyZ>9; z{qNiEPqF>J-S+$6Y`<6A+S_9Lz1jAAobCPJ+3x#n_s7_NUvK+u+EaZ$SA2a$_7NrV zFS*@ml0%7(NDhQqH^HoraMkpatEWrpIPKYkK!3?E|0lx zD|3r_VkoAr{}s8Ey+YDQ4s{vUk)t<+eIA?*vl}=H()i7JHW}&sbH5;y{EDQj_|3ok z-Y5BR7jWJU|MGk$zsYys?c`s6OI}5iFY`ni|6{=G%baJU@Ar@Icar_eM~wacviI;@ z<~j<;Vm()F5;coVT@*Y62A;9~{u_*X2i@%VKc@1PAzPQrjTRh4E?oxflHaLd&eLJewCt@+ls~r=I@{}CNWF(5^3N2!rwLDy4W1CO z5U~f1c6h$19>;wGPh3A`Kcd9ggqKeEIy7&A z1Gzoq^*!iKUQ{i==VN0Iv8SeEuQo@!n0AKh?F4x)?=GXA*{Yors+}7)w|SEfwoULf zN_#Ep{lWVCzLC5?K!3lK_czSa-}mxqheN%`-X7_9?+D%-q`&tR@1@Vs-&-=>@*e#P zyz2yB3;cuSUG}I6?vp?1m{L4Vf44bTz59T`Ebrxh+%e@Kd#7su!oDiLe~)_iLd$g@ zbxgTI(L1^2CcYobk@sef7Ptm;{zpf>HYfB$ZAv-(-Se{6ddX$bd@s3u*!FSk4O0CA zv)RT-c$UojP3&>$cv+j12fQ7B)aJ|{#xn}exqhpt2&c1hnL&=Rt$xZRi@{Xsane#im$jwCFIlS$e zwp2%ok{iy+dT`{8k5_E+thuFXj~)-mNL1|I90J7RE8=KF?;I^1491@0}!mMgf!(3}1guf> zJqD~>seS6C_GxNwtyM#Qz4^08dlx#6dcWzbNu8n1$>;ekvma3~WJU}by45i!T-Py$ z@tU)~9j(hmAAOG2TwpO}q9q)ctF4*3Ow?ZGn3Kl!?;G#!3xT^uZ>u=hL-ck8pQ0}l zdY+!%t`)tr=xx<^jdu8?ofE2^Q|N6-bjYH&&hO~&=Vx?YGa9e&?{MBV^tSYm$Sdc52<{X3RPqY$O5fj#>uo0AzazAp>u43_x9?;E}24d^h_!j9iPJ z*X~3ftM%uV4qTueZB#n2Na=vuKhU>uht=0o&kgPR+z?k$b(iM`bbW5UGr@C%x;|Iu ze5h-`=x7)C`Wtn%i}f*AY|w@)(C?SEqleI0r7tPk(Po9$5`|aCAgy)C<<#)LU|vn~ zW!mW=99C5(D#vG$T%oX~d|dbg4OiH8Ocv@eX&XIffkd`x;5FqXyW&ABRy z-haR*qGtkQgz-wz(%TiM1(}`ORDH8=P5PELJM}-f^Rw99R`x7U8P`v@?*d0UvLy1k zY=$gmcMt6FaWYb-# z5tNSZsP+@+dRCX`;Ty1b*ZzJR-^?6(sk>;EFR7_{K=O_7yPh&W_o+{JV6*!41S*Z+ zFB$ixCipJCn=xqpesZ8(-IscS?!flgeRtqLE!P8<>#Hr-H(IV!loxpPcK*w9z0`93 z3Cs0`>bg5nraqGc55}JJ1|E$)=M6j*yY3DwiCuRGei6Iw2`q?R_XO^ZU3UlO#;&^q zvn|(uX}O-KuDb(s)Ms+w4&(D4^Wec#y@> zGM-PR2876n)M1{8oXB%8aw z)_pY%nmZuv$UNA~?tGv*#BuWZk*+2nPX&U7Vnrn25wBkKcl=4pg|(q>;J^wn?+ z@dnlb((!wyBiogGsi~5mKDvs}Vrpk7URCLP*zzpCr{UMkXwR&f z8D3L8bHFogo5t^JYy6Lo+BVHSSbng5T+L?STMT@Qfp0PJHFMp2GP}l`;w_y$_fYvr zzBkQ1T;2rCO zsU6?Mx?nT;SvqbH$8fvJ#O+GzhF`|n4y+NT<5MXd+b7i6@r($*UM<79kI!D6@s|1q z4aDB4N371}?ut`Yxf47p;cYtg-x^rIY@96TRJem;Q%1nYW9(&5$saMgiSHe>w+;AB zSx7>Mny%|C2j3L<$H1G(z<-@D`T=siPIHtBKMSy1>(Q61X?sTUi5K_tTXf6hYaip? z@OajFZby%^wP-r9IH@{bw(SJE8)-L_8*rCzYd{?OZacnmaJ*YaS(HNv?M``2z<8c@3Y_# z5uW8_W{CcJ(A}X9>aS3@qX9YGGgNDpdNCW|W$sYzsI(J-ml5Q&5SYZ?n%~y~pA|02 z6-^_?h);CXm7h1dg1C~5fy|?KHqc*%<}UClS&%(T&Oj?PDg6R^RwX62ZQBfbn)`D{ z5|{YAZ@j)q9rjGg7qV5wKKeZGcl`B?t+nif6ln|*v6aRz!Speu|JV_ z^L*uF%!%#iE7w(^`-{Q(el0rVo7$=nV@;T`=Ffw*RpC3h&UjFlhiw3d$U}@p|Gu<( z=xxumy}b67wwK49Xlq~$Dq%b+X}`55`SM4qFVfbwy}Zg*URm^5^^BivYa937VB4^7 z9BZqbI~M()R94wu5^O*&lK0QA-nb&UydK+g(OLfLh*FukfRXKWXf4?CHN!Id4%Ni$~C_4_fmg|u}pY+ zA@q-6)9U-ONBd6BSX|~Rj{r;kL-;J0Xssg{w=N=9mV@8109_2v61pS@B0b~0{qHBx zV`+nTqzzSbXqJz>Xh-Q1cS-eX*tWcS%l}liHD9jn!sj`X`)L+yP_CAg zA^MumtPiuI&Hbnu>gL=JM{?;>YF0FHPL$~VH2QA-6=PT__68Ut_&lZ!|4;gtb3B_$ z8M}UkeJ%h-o}peLYlPy{$bK089HK^aysp5PEKXe!v3yQs-Uq{vvQo&QE(l<|~mry^U8-qm4P;wUMK@vHLXInA%+%&|mnvMR&%aHc^UMu5D7kBZ zujX%=bNGnIr}ffys%x8NZ7;bc%owq5gzh`ac$$sOo3e7Y^aJlY%ZOXah|-s*b$$6U za&i&2$|@`0M^?gxT6EKBT_0pj({&*(AAeu1w=X&%@+Yz?eMwxN_K&AMaj{?IQEK00 z(?_I`b#Uecxy%t(_s~{FfNeT@BmL%}8+pLrfSk&FA%yJ9nWG}NX1!t)ufNc*yesn! zshbu;7u1=f^j!}O4ZyMipGMAwm;U9|3-q(u#V1-u{!fj^Nl6QP^!bBe2|U~*Vc{>#^#P>{yke8od2<-G2P+s5AMz5;S1w~jNf%)I~hCV zeGMAu^}l4FxHm8coa8+2I`qq&x5&7zcrqFLrSetfJUM+lZR8#553jP~ezS?YG0!k_ zB<%CBCv13|^RWHKxM=!+Da5Nj?;H33>I9d|z(MdC1s>qk$oSX9*i&~Uas+-I)2Ri+ zoT>vKERFRqna{85&sj8=U*?~NU$gtpldF9Way>>NgZOcESAsA2)q{HjxHn>No3K-| zKHu##jJ*#HH0sM%8F_*9GhgZu9ryT$5Ra>%pS7pa&#+j152Ky#;KEk@#NMX|dh`VM zzR;pSbQuT@&W9$c&?KE}$k_L~p|zQh*p%*zZcOBlI6Zp(z{?%fcTMS3-?i>CN3`KO z2YF|XC_Y)Vag2j{agJ!{LoK@Wd}QJ!`hE)@^>swUdw?rDGukjF6MZdO>EU0_Bs|8y zoK@Yz|GWIZcU@-m{cAI$A6%Ikl~`n*vkzliZ*0L?f#xdC6?}u*wb+OEvD+Vr4e6Un z+wjbj8GX54+xfxyj_AA3Y0;KLTJ)XGTJ-%7G~Uso@3kkev!6%f-}FxPKnJk z?TXm0ipR0Fyx$DWQr}S7+@8SvBJ$M)Oaq}?1l#Lym&SF-8EC*()IIA1u1w(aMMF)% zG!U2~$m(CUo#Fn_zLvh<7JL}ziAAi}eAhNXqvkh!;O>i_EwcL-?;)qRU8t?P3)^Y7 z*HDX$E12|i8AEULTz_z&Pw_Xb?HmjGqFa+syin(yaLqA%%8~e#hw&*7<5Rvz`M7*)nBMWK86*8QE(>?rvtjT06|uddVElw(RX{?ZrBJ?Q(JkGWq;J z)b?Wy>CIg2XzfK>>y|Wa%KI<*qVJR6nKMpvgP%D21TROftayA{(LEkdoMAjZt>}u!E^v4d95V7p zj|Tq0r_lYA8ZEl$;XBG3lakfEuBv@?FoKN|e$+G1Fy(32--&@hi#>*H?kUn`a}P2( z6&c-Af^6b{cIQ9+0Q}|si-2J~F$521btOSR`Mzf^ZSd|MsQY#p`v7Ad<8&Q0XP?oMN>jByE$iWv)budNOOY=f z-adh&tB?)GsP`58x($){L&)d*$YPjrlNhKzZ^j2WkG$|RjvumUj>~VJ>=-C^(r(x8 z_!4$)6*!+s9J<&w=$pu{N#1KGn^xYvP0KsOIDA@evuWTUW6cBDw9$+;V$Z~u9n=P% z(v~fZV#^ZPm_n|fNuJpCh8np8Yuzqo!`=t4+HYyCv(cN5j^0~4viqD^OsrV^&PU0q zSeUF0c%OBN_n&oUOyl1SVLi3>JXh&9^jWeAu)lU!p8;hEXAZ%-y}t=LoR&{_JKoL(Nt%jmXs&7DSy;? zxZ=U8tmviv`;?9@ctG*6kZ1o@@EN>cVfMRqS@-=W3yft(T=z~r{%hhhj(dvtwK_fr zo%&hUdVTk}FHy-n?CaFCnZomLx>~0S&(mD3x$r!7q}F{yhD>QFDA9 zR`!qC?tj*=eg>QH3AudNI=o*JB&hL?5GhFX{W`!$mdz@c0 zTrUGx?bY7a8_6N9y@~lEc?Y#4U9E$~27QZ93p4fv?@l| z9)Wslx|{m3?Q4eXr@)otceK6(9Zg^6RQi0y%CBFab8Pm4H+=tp`Tw}> z(A?X~hbPHAFPnLuKS=&caCi?-spJbZdzkY%7OxRoX2tJQ_R4*o`oo?IM!q!()_|JkEl zr)?aEwO=z1xq?HcxAnC&WM(3t1Nr>Ew{zw)Az|!h#@`pVziaFfr!202euMgI1w&<|xbD%x}nNMrNgCBl* zn(zA>@i_OHSX_3{P^p&e-8kk z?q3RAaogeln&J94p<9NxHN@Iw?f0zo>)DBZv%Y3HN5tqSaK-7D`8C6p1YH04_#DTh z@7IjSkrN#QL#$sm5L*vB`?AJv#yE|AP|g%p|2^kct#v{lZOUR|0QKa!%YLc}?Mogx z#=JV+;VlhuPDYyKX8b|V{a|n1k;wG%$V<#$NvAoBl!L|@{gnN@cM$$qu+Oa1O5*RJVVas5Ad0H zlXv?hdACoJcl#uHx8Eszz5GWV*)>1u`Hj-o-4_N^Zzq40TzSbMl^DveST_stzO)_X z4BU{CsX>8H`2Hu>k5jetT9Q};dB2R>F`t?-+CG8KbUrWe_eYJ`dYO;sd{Gvkkxf0u z9wlBHvc%T~Cp|Z9P{2p7?iu%WiOGhDv&-7|$xj7;(W60u-QX-bvju;?i_VaXp>&4a z(C&05<^NNic~tROm!BuVQOOVZ{43-~>h+oOGuxowE99nip&xNvMZf2qLcb$vKkiB0 zsd+oBHfQ&5&aAGAZTZAzTZ-YmXCA88k-Hd0ogWfNDp{p+K_>KKS8d26rPMOxRlxf0|T3}AFs0q>ILk_ z)N)GxcJJKY1 zK}x624b=1fEoDarDm(H?2WxGsyR#z$1I^0~JF?mr{iMSe{nUc5tkZp((2krNxD>l+ z^5RV7At+mIS*vUL#Iz&l1~!AU*pX)Br;8rsIdwgVsIfPp9(-DUX64GR2dgahVi~w7 zSpn{Um8|Tx$jXmtzf1mN|HS!b>puBBwm;3f$I6;-mJc5^%b&`B&o<7hO_!X%{;~a5 z;rkhv?$x40m~Tt|UkKkp&s+5EI2$?4CZ~^aGNb-})&uV)S71D2263o5{3F@7VqR~$ zUCxa!s#f{mteZ(*mcF0N8>k>ZU>kK*!ehv(q7T_;6S_l-Zsx4&E#!Z7Xi0PKBCla2 zxdf8?)ttwD)~ocqEmvUYpV$|Wt+#LXCvY_9k!wRg$Iy?^9l$k)Jht1(4=Q56$b83~ zD&|%J&Jpj>dKAoO{2mUD73|l2kM+0V_)hXYk2tXG;eF*iZ3^%_@XpEA>Ur7o;z^-q z$45zXa{1nb?UP*BCh+dfXLzo!EL809=Q7?&--+Nm22E71EpRnmOU@E>`yuakEMY$i zZFbz}m?Lmyf_E)6l6Cv0S=w$nt5@=jO#h;Ona&3j_oi7zyQS?${2|#h^$7FH9_*Qt z91q!Z85a8H7_=5R@0YzCNr7vCRly0(>!DwT=G1eHbA0MtF_p*4I#Y<>a>j+(zaEp6 zyi|8!AF$|o#!38!?sr1>TXg*E;cbMzWpBeKauMQrcgX>d*j{)j`>5(@|7Xa*iFX~e zu;aYhz*+WM$$qGKTd9F%*ao%VCtE+0_(p7Y&-_b9vwxNGv`2tFuPrwbk8ZwBi%x>) zwOWssEa+S}SwnVvAXh?P6;D!r@-jPpuSK@56Is$}{EpaPcvv^t7cK4iSar|*A;f*W zr4?GwmaX{Vlj!&9{DRTTzB#t$CURl7-7~=d^z6GwOTYW+x8)Y{*Y0&>#QTo(_MTJp z-2z?Ty*D$%Y*YAc!g4b>_hM~I`hJSO3wrxjJ~g{Q^||2FjwvnO^mp5-`lBytU-}Vz zr5?WIT8fV8y6g#XR`7I_1NL7HiR@p|V#>dp^m_{t)9V$XD6F5_$-pUZ$~s2m3%S z{aAA8b-&sb*e~~g#r;vn{XyKnAb$UMav%E_9&X(4M;`;s`$>Tv-2Vt2FW0nwCqKA; z>&ZOr=>GvXIbU%-`wHsN=`3=RvwUZBmN#u&=8M*0vF`d*Jds+@FeVi-FeD&QYG5(X~u z9VO3aF8iyLJ~;K9cq@(OgM-j!++bhy252a7N8qR0CqO%yl2Z-*=d%~m+D6EOF2gss z!MD}$-Q<_t6aJ1N4!w=>-OV}jm3!HPOWl&%q1qhuaEjE4dkwv2|8vGc?j7P@2lu2V z*br*0z0JPoJoZ1!=XCZzTlHJcZIil1L(qL>k^RYqWd}9iN{8CdBYSf6{mJHYm9n3b z=MT8trHo^icM21}^F@6NevQ>n6Tipd!+OYttB1}4-!y|Z zdC*4iOmxkx%OLlG>nQcEgC(?ALVH>49V-Sl6IPA=j{=+Q=^$s1XC1L;HJ-KNA;_~@#&gks^Q;4rf!O{5wSP2z-e+hyGJ_r{eM2Y5kUKaP8p*nj_zJnQPr%6EfA*G> ztHbDm=#1>+tQQ-D+_UfantH}Q+4Cax>a6e2mpPNM&!D24_g_Y~UXrsT*bg*S&U`Mq zOpSeYYF`ECB3-7f+93M|=*!x_yfcG$)Vu6ALfBX7`k?O{FlEkqP2|M7KS1;)+UKO%)Zf64Ff z$!9PA-{brH{C~jzasJQZ+J}68#Q(?qf5QLS(6q_fKky-Z{TRN=crIh1?6s2pCe6+P zJl{L;p0gKw22${=dNAI=m)pse$L6;<`_Z;5(9HgXChX>i7>JP>^GTwcQTv+xqy!Vox%RT5_Jx6Sl<_hl7 zs3q||2R>PH%a-ptrqn%#9bAlD-A>yT*uGhg=py`=N-a6qP>PS^bO$eLU-U@RuQHK-Y?do`#p~5BagAieUr9x7P;dcgIuk5->L6s={1f| z@>`!C%_p@J;q8>V8sxYaYf|`<)Ngoj%OiSSGKc(@nr^+QXGLz;wbWfX;T#wo)KOSA z$m3fna`a2&XplCjRBWy2knB%veGb3kE%p&GMzp-a`2G_6F3O0DU6+~h!I;bpvFFF{ z^+i9#_J4F)Cio3P4+jS7%8}Q+%xGvcdnL&Ic`=2(sZQ;hx?*26RZD8|Ug?;UscAvx ziot>Hs~>3w_koUq^qoZC@b)zN{)D|Dks4oA^$)xsVecC0Tl_z3|F!i0wqc{{>A#7- zPP_ds_<3lbvxY4ANp4ohRIRn8kQxqruEmBF8hQDJpCdI}SSK&%G^OR)jSd>uz!b8lwX;}~dOW2e`$tgE@v=82hzI@fRxL)8x=i>1B z6nrkmG849BU_1znD+NaK)fJ5Bcdqbj=vNQpITn5~zE1H-&CfHyyHCjlOdlGj%`kkv zjhgEblYbuebPEq}6uKB=bRqfu$k&uH7ku?}c|+i%4p@wLUY&Qz%*j2}))Lrcf7qA- zUp*{O3oO*+V&7%Z%ifc%8tV%VuTCrAaXI3$-gGBpaDhJF)ic)Vd)*3IpYZLtj(yId zpcc);=aTq{)VU57F#a&ll>1k5AA21L1%2un@!jOyYPHYp&iHd9<+&H}i;QQR*c0J( zdCHGrV=s32GMc^K@|fagGR(GTIVy@okeYsChCGjumw^>`m5ISvGm=0%Etv9G}PCkYR{uGXiqT^%m+Y0*{rz3&D!<{X(3 z$&$I$k(o{U=d_kA=5OXaPoKZs{9ecEv*4R`%s!PbqU58KFXB*h0;_!dB}vKMks0K@ ztNzJ}m(OXRb?yJsub}_`OaC4HT&>%LE&~j@;L|y-H|SDh!1a~^*V|p;@&cEYCa0x0 zUqF|~O}davuINIZxuQ$3YyZvozyIp~e@Xv^(4~%gOat0GR?A$l9v`a#A5!LG9(1MS z60LPBa=Q_m=Vq*|JaWBX?1=eX%&$X^zO0bsp_z-Yj-hbWY-uGQTyy zD_o50h4dq|F!v|F!M?37H0S;9{PNS$h4Tcz8`<9=b`P&?#6B{QDwVp~60biUxtEx) z)lQmcZCP!C(DhB==(rUgN=_ekRK|&~67S#9pVVfPxoFI<&c{)sj5evqtA!n)h&I(QF@IT&EsSrL*u@j{k$PNfm0EQ%eg9|Lrp~KF^3!&n>zDDg zi1u^PsZsdi!zKP<^-CE~hvS!8#~T^n)p*Xkjo5-*=A@wr{&X$=^lIXlIm}~-?}Zop zqSrKatj;1Pma{~kE9WdD26j4lMB?!)#fw@ahGfRDa+p`F?mVx!89eH^7Uo_E+x&09 zWrg!v+wUv+-7(tRdI^4SA)ms-zpUl7E3(+SqJO=u8!R$}t&{$LFa5)7Z0+%q z-<%t_weaid?51<&iX-T_YpIf+9au0XswUH zZ|@b%qk&Vdg|T7SzH8)OCif(E9Da!F!%n<-47nWR_O*psuepo81b4BQAi!RNci2lX zYTl&sQI4La1?(j#IJq>qjJ*V<^Lmz#arA7-L?%WpEUj+2ZCBe<7anLUZE5BCp5?vY zEUw;m-+#A#tH)byuWbmm6*zjA7Mv9u|K}WgL{Xm&jw8(LzmYE#ds|lA`ncx&2D;N5QQuGx`?$99c_+U;5fw1mDd1Y#z@F z4b<8nV^2_???8XA)1rGXz|YgJ^soQ<$<>k4%&60)Ma$_U&w1l+{Qj#O7E2si>H}#5 zdVk9LJ->%JC3c<}y@)jo#y#o>`J(P#)FkxM|JCkJ~oFE59 zzDpbKL0WVic^~efT67`nJC&F8^ScKFm*B;J_JzQ)c9>tS@9qU-vf zcv0#{Ozr>0G}A2vq!HI*G`iMCqbn28 z=u@3W&q^D7H)+(s-Y%ih44G&BV9aUL=!@iLqTooKB&ji~p8W#3`JOyaO(w|^G392! zsc1q?C6Sv#D^0i-qse$1O|lcvg!&kwA9qO`d^c$_4t+OhvZ8Xu@YAMA7~RU$sGEvk zBJ|FqR_XzgxV(#_C-aUoA8-=|KV(%tlM<$*1YFQ9_*Asg;8GBcN zz01L7N_;2)zB2a~`;x>tF|T4rTCgoS{2p?hHszfM1H0~W^axIx=PS!`B(=PH8g}C_ z`xB)unB+j54*&mKp8tU7N5%QS>i$#MjSqF5=pYXurW0I?@&7U#|3}66egU@y{^%mulbkOT;0{@PF`uD5kh7be-5)=7iK%+lw5zPW+_Cef+WNVW0f2tbxkj(#Sbr>#o!XxGa39M(FPGag2`H=Q|01M>~3 zFYMsjbk+weIJZb@_2d#u9?N~qmI>=|&kB=xIUBlw57kB`6{#!~a$Y1n6{77SIT_&-Y4R*7uY@oW}-jXRCL8p^R7 z^mmZ{WKDPdY4q0}&ze?eMoZyaA{f7j-}8ju<(qCcr|LcetAw*mTPQ7=rFCVd-*N0^Rw|MS1UgAp2Vi)yWID&jw|$S0G4skw=xlZfnV+`UV=|T z`hs7GXTrdoh*r{v$W|hmdXc@9b-*>RA9&G5w=!jeql-*^0St+BQs#NW`?I^@@vZDN zlA5XUcy?+aO>#+&TbrjZQ@(!@&E65&>kkcXIX#;FO`h+|^ONH=dw$L-Xx1N^ z-2u(|>NLB^N;B>$nsHyzjAvpryTwAYQVY!{e|efU6e4%mVpp(J68n{W62|N8l|Mh* zzX_TVo7kRqK?>tp;f@}H-@V|sN2f;<^45VaEw3z^#O?Kb z`*Q++rw)gl5rge(d5v*rC}+czuBpQdnhC>%9n#FA4da@}d27}_Sv&(dR!9@`p-tXp-?krE#N8lDKx+L1ZQKdd{X zu}4B*H-8WKMluI6&!@=acSXH6=PrUcPW_fx zO>*Fnx+XQm-Ri#BN_#$}Sua`gB0oGvTONF`p2PwB;_LP&=W`(VobQYN-;d+D#TtKR ze(6^BjM&fXmE58raZXuZYe6QGG~ez#@AB%rM*?m5VgEsCCL=u0B{<&c|`OMk+LtwKM}6_z&EacwQ@$#!}O4mvN0Kca76 zgtzp0uE?8$Ukmi-yH&8AY5W-r0#eLLqTkAd!TMvIf!c_DlWfpek3 zC!xO{pVD)FCI37o2jok|8v zzVqSrFwGgueVIw#%R%y|1kNhXp5MbWQ^8SiQ|sgd@tw}s=l`O|H;vWvuuWZDORU&V zhYE6GWgWqOeK2;^N-uriMN(jI8+@Zbu^E+oxAX0Iv*N3=1;2)GYX3*EejeDw^Mz-f z&(CShb7nLYu&#@58o}R`TKnT&%u}+llf?G)etkQB>R~;X*r4pe(B}%&@4`V7w7`=XVc*;C0`G9K!F52x;T!xQfEP1OCKN!{-osQY~pb-xeJ9mlz0 zlgg^v7Y5}VnHkjXZMdxKIWmWMu8DYtUSoG*P|nX1eh6;=Wx&~R8TR-(;v?jm9a!a5 z?MO^^KRl0MH%%I40lPdm486F4+Pp$1X=m9f@V(l=*L*%gU-C{N??m#lGa|@a1AgfS zViW?`bYjUvsq=V81NX0_<}Naf&!B1yueZT-A#JAv%UJfmxi}|6w<$>~wrsCAylHMW zwMw0(hg7ZM;^1b>8FLHJ$;R;_GjUu!f-C*o+mU^T`HTzfRXiF%R(j-*9PK%0QSdDE z(S&mv?KO?++}?)|BVV=}$W5d48qN8%ja-M*u|y9K-C%1 z_@3HFJwM@#nRnC*UtcEg-YE$!w?yZ>|DX}2qWC?dt)Tep;HbfHAZHqVuzF1PZQDnVQgj{ z_F*Xdh9!Sh=8Hb^P_*M7e;Tpxwl;JcKV2Ui^!1@HqMbS3TA%BLFF5|#hU5QOWK-kM z#838~ecm@UCZFPiJ&jFqaqgIEKU-7$3NZ)l;LNcweyXN9sQ-b#q#a*5czcoVubIzz zM8_`-eAno|(MHdas=o_k{ox};v8g*X&dbS;7=0Rk-d?ru`VxN{>t$)7%l(nF;=GkU z(v3cj(T9o8F~zUW{*Cxuq4PwJFY;e_<4NY%@DRD(BYR+&(-xgC`@8%2SKo7THS^`| z61$qld^wCCE`F`!IC%3Nzb`5>Ux%Nb#G2p`a&EH*5AY`ud#R)SEZR>Z7Gr7Ss_LKax8@-tDvW23j& zdFYV`JyMAU&&T%5+DfgPxHI$)18be|06P(e*9UGpY3#Gq=^*FlWqm_Co~5PwAD()$ zt3E@cjTYEMhyT(Ie6#Tdt^TgSktuu!29xjS!FQnz+L5$Sf4>8st^7L)Yw}mu$8W~;Ba{lg7zZ{8 zJ%L5&xlj3>j=+Wq22ZPWo?7X4c{gpDvX8$Sh$|_$6-!jKY!wwiSI@V}M z;uKbSn61uFIzJ9S{+H|tmi6WcwzC4e(ZJYUxxHeI%%^3peBe(VtJi6)6JRUD*h)Dc zN%lI5Jd5n=c1V|v`c%#p)U=@FY`Pi82J^j<@n=8dnY35L9;h%h6CIcFQ^o?ZxhmF; z{SD!3okM?OzqUa~(d$(Fx{1s+KqlYQ9^kB1Epvy1YvSu9vHw1s zF_XATOWo#*HDlnB#5poG$E#_YuR0fhU-DBVKWRBKDdVchmy_RN5AE<>+7UR-zfR*l zHnkpmrsl97Uv!A(d}O`z#EW6p@P+`pbsaYgJptAMb=Y*lp^9hh>!cgCWa>C1wcI88 z!PqHrLiA!v8n{j4pLtM07(ApMiCc)i2z(;173flkdtV2<_nZn|=-n;6-21Zd4ml0_ zc1K$|$FK`M2c7~x?%Clp_5ZNa|E}Xj9r|B~Ez4%TIZx})T+wO7Jdy$;R}!D=%YIpr zfjVqz9deLJ&XufSU+wF?_2lc9sC9E!%UXQ8I%LpwIr;SXBJL4#Hm{?l7rNuVME@?f zc0P3~($JkWjeTXnu!sI7<|*sS_V$woKUqEG&JAt*J8IkNIzDI{%zH|ojj^ti{9_x| z)_1m`8t38-5q`911;OhMx7%ll%?Nv+*!4dKrV0 z^)a>^+D^35);!<2Bk%H-t;)ZO(^KT`hxk_!VmRrkNAy?_{~t_ zH^oKH@{PoArW3yzOZ;Xi@tf&$$8uiqq_U#+;-HK8P4P0Vd?@h&7iT27I3vl$8A&C? zEJ~1<5@G@Kc}~vhU9ikiek$2G&j$Zd%lM)D({X>Lqa%s)ES+1!8#KSvJ4h{JtqwVk zkgGOL(}EKFbhZ~iQqTSQz#-%Nwxz~clWqF15AAsQz0PCT3FbD$ZM*neTZeV_w`BZw zZY=t-y5}{`UQcPB z%Nv}|_$PZ1ulH1}sXytthPAGvayHlcv$ZLCdo_PLu{D|N)${yD?p1Ja+F9C^ zgT#t1q8^gis(Sp%3V1ewb&?^-P7<<{gzO|CJ2U3)Cx$q#M&dvlmL-=*H0}9fX$RXl zn|i4A;5n3-nVi=rXOD`He;55;OxqE1F*cy9B|N_ce3lTyUP26e3AON2=2exCJegf{ zaY_pK^ayr9=LxJo+{yb=D@EEJMqd3a-t7RkEb1_Af!-tXhmX$UjO;968b_@10Py6o zXQNQ_wCpFwBe0~aHar30twtUUdmN9Z(#8;YdmX;cdT<|-KUm=|F<&cx!pLk7w75v6J}z(L(xX@8uMi$P6&b7{dM{ zMX&MnHJoc=Qx^PPf4&lWErebRq1Qs_wFy2Pg#U+F)68;tf+DNg^rOeDU4g&8i>}a~ z!2f6U-Nkoj;H}toPv8&gyV$RXb{vg8;|aVTd&U(A@?D=}JhbD8`3y38Kz(P8mhb!d zj=Zv_;SJ>-;^M0T-QkK&Xm_im)D_6URisH-II9I0eChHepEn5S*yrnoR-`-ne!~54e`BXZ6Si(q~{Mo_NdW` z-0N#d6uHH$YpX&F1ymXDn{o#=$vE7rNAxyy`$O`+9m~xXw#(CLPa0B?hgEi z<@>MrF1$9!Uh&EI%RCpmCcaYfe8JQL#S%sxY$!($DBXOdE$i#b3hrhXD}vC zXIw8N#`+X((@v|@#gpIL_!Qh1po7_r`!4e0hLRVzk@20jOC#VDp}jodlzzk(i9aqe z9+_i`k7de4uP{5 zoJWB37I1DNM?i3FqU{Lx^SPhG{gK??%6-X^ko(k@4)AR7Aau#+|Db$_A71!40X`<5 z=P7R#nNa$!#{)#B?-L&a9O`Mmfw;g0@QX7Sua&hHnZwtQfv$2d8`^Tenf<(L(KC&; zLo4k3UTOUug3q0P6VH&CjL8Rc9wq$fnSdYWn&58?z6fvR&*YD+9b4nY67LV=6Rm|0 z&#wPm=GiN9@1?dEb7+|pI*83r#jjWk4RheZJ@7za7T%;9ypijZ^y@lqMhra!-Rg*E z5wlsPukGo35d}vTmnSwwO+jNG9FH-^@CC5hfD^`3)V#}=OVMit-W49n< zx5G2R4Oy!jZ^l`CJ7B=75HP9wbI7IeNq8h{L~<^<*c2HX?t`CFZ;`S8`Eq>Y>EtIj zPo@qKFpKOQgU9dO;){+X_xzpP$<=_@l1tt~dozE5j^Xc0-j9rDA?3r$Suhf}NeLWq z+Rn*71&>$S@VDk*5Fb{wu+l@~0iXBn?C(ah9T~qt{=(Ur8E1pPlCMO*bg{mU^b32R z#niB{^kwZY1^>osKkMjSesu|cbqRj;!e9EUht1vCHsdE%Z3~}oZ>ya9 zGQQ4jHOb#Dsy;Z^T|WHZ7gvwR@7}n=Q@*f0vu5}YOREpzCypO;q;0W!{!sbm_M2-O zeB*+P*)Ozdkf(g{|N5)t`C;E)Q@!xkjcpALd)sEb{jO?Ta-u3-<5`oNRCAE^qs=c+ zPlab28q2DOy}rK9efQtmhDAC*ySaTrO~Z(B!GqZ7&EG1j-oW$qZ!NDLx_(_-iFa?? zUThRG*lSWR#To3sn!*07%JKW!8rXm3X5IDx?^3rVxUl_(vdZ?N;38l>0DgNk zttE_(l(bJME8)5uyf@Bum1DzIE^^_!TC3>RbjAqT>x#}z5uZioq2@lTJl1a&?~3(U zr`#XL-l&D_jT*<^sA24ls$`BLV@zfHSo$vsZeskYy$YWWe`qs%qnfl){^kcZ?W&;O zW&wRPAnW2^@8OyK$WGG(mAl9#3#?P)mN&?Fug43GKFyp>D;%=ECApZZ-x0rvv*r1| zitn+pI9r#i+K{2k*}e?yXH0gj@-$J+*W&9veg69S>W5@s6gJ6q{LyMx`*Uq2npVo3 zJXqYGTT_g$n2x=+=Kjy;K01438tY#%pEFyhnLL~KfGaSS_?JAB$1{5D)$mP?=fu7~ z2fTl_*_*?*^&zXTAo~)Wwy`&tvDX?qkl2EZUt3sf=tM)S4WRE;Cav&W#O@_p-)ME} z^?_5^yZw3J0r8mjEbLnWcJE$I^4oWce-f!woQDmb;yJ6Hx{iF zK3~E+k^@IPb9Fj%6(@5QCvz1ibCtZgS>@TxFY}n^=Cvay47~{- z^kBcmYYGSZejB9iLYMa2B0j?%k5w1Scn&Q!wYJsYADT(r8oyIwiLBplPaA!<5x15# zM@JxC?MXA%Z-GtG&Z*auRj{*HAx!<$x>?W*K8%GA*0^FU_EEstj2{wtNqdmGKpFGf zA1ISN@rCX8l{MVKS)J|qWlfA7OWLQFH8YMZZT~^pF~*cfsG;)?<47s`+rpS~Bfi4& zlRqeX?_O>9qnu^=eu1`o*~tlI?@|l+-tSH*`(Tgu;1TkQj^}B+CH^YotmuRG4O!=N z`!|AbxF9pbL7nFCoviJ+_`E}{@nnPtDdl6!ma{0#SZd5`;@)^-j0ck&gH-G&E1m8Ud0*MR>?6i>v@VlJ{((FOZ}|F)MA)9RB90=8?{U4t(?H` zVfiyo9M(Lgshr<2k^QK7SIJz=splDL53kJRcU}I>T{AhuYmAFLKKe>$E=ofTvolU&pWpWpb(H~h45c@WrwL9$ERW4#_%gN&y>O@{x@7vgG z@1L{0dw(*Oy3mipA(2=T-HDt?$0{JG?I_1E{- ztYfT^=fwUBe34Y~qp0HxoQYzRjCtyQ2{_? z*vx6r=t6-Vo1l+P&cJT`D|^2SY<5}bGL3$x8S5k1$!Hz@W~mrxlG_>z`Ip|nbMn2X9 z#i$3y#+y3qW*s&$%p5O-Pt7_RHttg9v8jRe(BPh5#B0*4d=u=K#M3Id*9hz(d}oV0urdnE0F%TFzT*bIre4Tf*jP&z99!k^${ z13JGJTCFo^IurZ03H|*Mv=p1O3H_CQ9P80vb8crO%H$$(3=f6RnUdw~bD6ZiPAi>iID7`JsXt9-27? z!oS(4;NLssRs5s;tHqbM&gF%FcK>?zMdBaC<441XX*73=k_wYlWIj2wgbnYE!r6w$J*x#3D_8ix1pq0)WSN@dNv-GF5Q!=2m z^uVw6zDpRxM>$-C!HK$ z(~Eidjq`ey_tAOiIK-rReL2HEv*vZ4d;R3Nn#Y*OzrnQ?oO$0*>lf^o zlv3&^{_yI^v&#E?o>kNDlZRLKP3l|vuA^6JFWOp4TTc^ncy(ki#j~f0CybQuQa6CL zoJMR~fcf|&YL!fSaLcZVJTGyDefUmy&GVJ_(9D_!MZr?~zKhxgshmwAdtK~x4JOUg zy3{qGCPBA#4YnXx)cf~~Pdl0KBl+IM9A}6liS-WcsN|+sF_$au)w_HHKB~DUn$^oy zUN?}ukHJq?r?XaD#aeBIwOZL<&3=Ath$qlStZzSSNe#r6IZq_$;o0Fldx&S7cy^yA z>nV{<((wtm3d01b^bi!ljYP7kUUq`_M)5cksHs) zU%;N#V~a&sWqguYZ>O=> za{XM1m-1WIALKc5)q=7Pvz#9JujX^IX3_&) znu&ZT_a?^y8$BKy{aLSrYi3p?m(OGm1GTEJ8r!St8zsoqoqSF!b)H`$=QQy9Qra`$ zS;Uxd17kumV?r`x!a>=$z#7q(~cjN9Bc;gvtNHNVo@=AGv(PtoRAPt4igHhbyb zHfk1^dWXGIc96BCl+23iiT7=7TdM7COLe5Q978V_wNI^)*ytfXUzt0#1~^uh40e}G z|1y86C`xW=7`k|ktjBF!wU9mYPPGo3jQ%YIk8;7KEV+CF&u;|oy1~ii^P%N5VnX0i zO`aIBD1CiRmu-Fi{IT=%)p_KZ&1f&I*~6T69eY4!f0K-zvuLNmb%2;pW{t$jWes)- zva}9(W#5vQ&l@y%a4~iyM@w#Ly1ZmfJ@%mve_zHN$p?}3cv<5!zvrFocs><=q>eazOG--cJ6o}**7$T0v>9@RKOjP<4&u^~7|1^DFd(3V+F}tzI zjpU}35VOl8RxE3SdJL~5$k_Az^vfBu^I7+WZf?eb4U7Yln-w_1|A*PO$Jjdw@$u6$49U1Dym|KOK1_n_`3 zaV_7DI&6F2dsE5X&K)7R9A7!@5}s!c`~TQ` z`}ivB`~Lqr=j0Ypw9ukOn}mQ6@up4-q;$(6K>@Y3n{;l&F1H9sTWj5_j%or4aucmN z=)SbDErE!bs52r=ncX)5yg^ed;MR6^E$1$G#5<^6jRN^TU!Uu`a;|d-0=E5afBbkn z!a3)<`P{tk-|x@+^Zt|~pI?D4%jwhm?nvI%_$$cE(!1rKXDsl15-j1Z2tM_8o)vFz zm~*tn1ZeePq^)>0kW289Kd)b~AgIy|H(!Ro}6A(FYgN-hIfpi)fECh|F4d25tD# z`JPRFT6wTA0N&!X?;T6{Q}8mmXc6Kkwv2l3fclo~^FF8bf}4SBH?=9^tmnOgd@D*P zH-ot@u`;knXT4FHHm_g4`@FZm_eS=TB_C)`_2iJm%=s)CoYRulsvO^H<}iUZ%#3pb z^)KZH3;P&T5%uSaS*OirUN2p+?2U_k8TCuw`raGYBU3M0a?1y^m`5@5$Xc@WgR7ZK zwKb|Ax|p9mk@ZRBoA|#QIUt*$H=lUkLCyk1?_0S+Vi(!S)-2$f*}4>1W^k^K@qghB z0sBoqJILwAcjH0RP= zpYh)l^3e|tMZa3FNCU63J)}D}2g$1d9_aYPmm-_A)>;hwiU$Y3kOvGzpB4Ppd$Koo zV>kJLXEE@cU}5J%hf&t!i2?3MpqluhnU^EO^}b@Hil-oF##+QTa%krex~>E|tK|L4 z!OZF2cl50Hw`}R%#|EFxAL}>I*Yf;O?t-f;fZHpv1dj?vpLSsMd?z^iru%MWnVC}{-QH&fZK<}utE(=f&9prFTEw-D)<7-o&Y|7G zHapIgi4N%{zM>q9kp|B8Shn+?#u45Kt#LoGCdC^0BI3oLv!>D3juSjF!Rb%$7l9+2CLn z`IOl$gEt{h!I$h?Q$qkdCx~qr^<)3mqAykf-+JKtAU5{SQmU#Z3wnRr~@R`{X zeF)gm-lB2Vv}?v$+qXI}h_J4(i*{MV>MUjtYBB9LL4QA1ySLHq9kg{P?JlF;YQ8`C z<(ByRue3xT%;Gbtgr88eLeOJG_9N@##+o8mB~wT za#&Z8mlQ3v22yit%h36P)94SdXOI!mQt<7*lNHz~pGPt_HXXdoL?#p=K6R!KK$w__v|GXZO$7b@T*5GAF=T|UuOL!_|(_qQ)l64 zFXf#AeCh&xYWcOQL3+J!Was@n_W=I%l)SSxt~plx#{Iv!cU`?|^Kowu_ge9#r{s;; z*n%J3lbgLUi}6mO&CGi;H}))${v}Tw8aMfj;9Kk3-AlJ!??vVSNBq0k4b16A z=5!NtstlTab}#ZwbOF9)ieEb$xvq06WSeHRt=!PVzJbTsPuRzMhoIT1JJ$Z8=iRj{ta(G{rwFETh{*K5VBO~N>V#^evXe%Xf+F8J3!nc zt8LwZteoZ}d-0EZ@sDT2Ct=R)igI?B@*z|CPh;tNwsFJD&`=NKQ#)z2qk2dY&H#%d z-zD2q-`mUcS>`#rZ5vK@&Fj=>PnVDWXP>iLmy!P@ybtFWyzuj6`$nyDu;wKI;h)Skzt9S1#Pv#Cyx;?B~??H^Ek2YW&96JMWSiXXNI`neieqVrPR^A+dN z)=TiB&cm%m4^FYj|0YhRvvGQ;2ZWBRm)=%hlh$0k<4fRg`0*>A^F`&D@t)>6-F#2% zRm_=4t0~oH$R_OgWwQgjZW{q`)Z?`7sh1jc&foLsz$@>gPT7`dCYWZ01i7twHEq z-#pf*($EQw)GdL&hCLHQwvBRWl-I8P6piew*P0IRa_&;{*^k}qx#@1VR7ZM;=uUc0 zV;9V>;awBgzY*E)TtAUsU7OZkuhKq8$%ImD92|XW997I{bm$eD3rTlJ=KzD5*1#VN zpU6|?I(D}Q3**qPYAJ=0tBNPB0+)lrCG%XA#a;;F4|QporglnWlmGCOM|D1@+=hEc_N&{Do+CGXnz2XlY2(<4EwUl{ zs9gZxEC;}W*_Gb==3`7MIW*?V$-dGU;Hb$C;=DJ)yNIuqZfT7 zd7^Wy!{|H3E?dA!5p}nOlO^C}3pm-5mTl@Ov@7>)7@TOo>Br%OT*9%BAwTQDiEMH0 zc@;07DPDr$MR^j7a>=&?FOPwj91mXDKjfSdA=`;FoWYC5JbHu!q1i`OFX zdL{V~!Yg)H3_C22P7q#u9K32jm15?~+ddtXR{?jxi1WFbPp=M_jQx+F zCUkeJqqF579^T`(&zrs$|7TCidDD%u<(yb0X`V=qEB?y2wgP?2S)57e(T7KTag!8)VI!JjV+7o zIXlu1zlOZf+}wF-j*{WBS6msMdSCOZq`sGI6v3YLy|vlE-7CXW-;oU0H9ey~n()~V z@m;xiG5B7!wmvDWR-NUX+-W_K%g46D)m`4b2oe zG;=L9GYS|-tAY0-waA5B)=_ha?Rj}w_JDZu&*(3LtPaz_+(82>W~7cM^w7bkoFbZ~JpJXq*`*;^*IwFi=qAN$f`YG_o?i^*wacC*?iyoMeaaeCsegXKcJXt%0sm z;!?u%oerL{@w!UEb&&_xtH3q3ffv`0v*#fR*XP?dUMhTEMlZXzz>6umTrkxhlfB5s z;qjbh{7UI~%|&OX57&nFh}r#WZ;hVKX(i~!HGk`7BQwyLuS-*8nH=fGi;%_H}9GBLfr zth7)o`&`$u&vh;PT-UPC^;&YgdaM!kJ=|j-@IyUE*K{`0SJwWT4XJU+5j;CWIWXp2 zkkuxKX6~ku8#9R|jzYF)4O~w3CzLI?_%aq%p5B2@iPazCadNvAAbUKi87bX%w+|0@q^Oi$sW7|EAf@kWBL-P~?(ei8K@lky4HkelXR@0E?MHDASk9{(-t1=u@U8&iDA z#DJh}Kk$GqSf3$w1nkqeul%Xatods{!^*LN`de6^-O3v9>czKwPzpUz<7vKft|UL= z`0*OAa;hTOFj|9p__AZ`@x`VqH$0NhwK>RQ$ai=4UEdFHB`a$U$vlW*h9ae;Rn{|%UbA3{Ya;4ExOXwGw=ATG{)M<{Z`LdhxYZ*)_U5V=!{kG z%bu1kBzu~52F`I~y`OP$wy#rb|K4>PcN*i=8E=muS2a#ImwuJgUIyrajApH z5I8jPnUZu9pXs}o_)JM=^7{0<@ZWFw>*U?n8Rr|sXqqz$W3MAC7{>_4GdOsD%b@Oq z#~Alqe@b;H;+@#NZ%}6$cqG<8?p=2u`4*L2Q=471+3mdV;%XB*qKJ zJd8((GgVQCQMPUt?KJLXjh%jU-iGkd_+#t#h<=l2GFUx|wdk|>JG({npuJ2Rsoh%s z`0N3FRy;Kunc>8EN-_;ze%JdiI&{#@{=FCPn)m^++fXC5-tqP4cL5j4jdpO73LC*i zYZHP^H?ZjeHa);Tafa``>-M6*g`+ND(*taJfsM{FR(scC6AQ1W8h9Fo%PzleVVdR=%LdJjlJ0CB)`5 z2P>`f1^&9fYU6mz(N(M^W!2a5+r@7ea}aLM3A9Bxwk$-mj1V>Z@Ky3di_$atoBx8dK$*)W=^34G2S#;1i9P*fdd6Cv&)J=pVdnD|{k%;- z{TrEABYieApZxT~Zg6S(v`*|(bf!Mlw_v9}i+maVd**ZI9{p)A##@1roj*Q$|Jv)x zx$nVF?E!ZE^z{~f^(=)Rs99ZyjcNChb^<-9-G17w_NDbV|EV?qE!thmo`$z+_kp7i zti7MJP~*^s=)i3^4!ybUrQ$#|@|H7Rx82&WoY?LIv@5!E$1B+MK)*V>q}rEha*Vt( zNp$p%)9%}hx1DDyue0XA!+4*>#(g(%R_D7%A6)x7dlL|Do&AjWZQ$^(VBUO9;p5rX zbgh-VQx6?q349&|2Swn0I{0`98k-5Ntw+cG8vEp3WZ8AR$5-lh+CEY+O7_+|L= zDPpFB1;osdb+_T8KDFew8TwrVzllcP=1*%!oA9M7vaS7+U-z?*IC@>s$aYgR1)sWm zIzlM zFEi%_?D0}9R4a}Bhogx%_*%cb==l0@jCn1fE!vP>u#B1>lCk<6PR5?9#^9AMc%|EU zUp3EM{eB&GdfHfDy{pr;p0^SkK{)GT3|*GRGK|wV{U*t7`t70L9(<-$pn`>S4 z+e5#-^xK6FdlBCrol)3MK7ALpq*h`V{J#5G$#`Ru3E&5NYb<%2h3Tx@ym&$I4bh3@ z`2)~iq#7DN$oQa_UgTvj{YXT6(T)e|@@T@Nr}UI6u^!UML=uJQJ<WHb8W-fh*i-H)$b?+fl+n%(hNOIZt0d_1xYSyPf8^0Ov_JvJ?}Omjg# ze9T-lF3E-Po9G+zVMi{$ksa{F z;_?}dKI`_kpx-{KuO`_1h z{1>h7%?8(X)E2)HJPVh@<(TVP@riO?be3K8M&S88vhM=r!xw}`{W-bxdY7Db)e09~ zD<>Xb_zMx}IQl%WeiyoVnYBLJ`5t*Kx{m#7?kT@q_wz@>Z#*+`H0|%9Eo6+TOQG`& zZzPwR{B}P%>|MX+JA8y}9*EVFOE(dJB-a}Fr%u|XFN0f$x9wN~w1^#E1s>Ul{K2Gi z0`-bxO=YjiEyz{v9q9mXEy&cDd1f+s-HIb!Ox&Pn596Mq_1yQ?^^!B+ix0jfSGm*3 zVP6*KmSXqdOKl<7H{F+BuemQ~?rL){{#_w+)t=j4a@VIYPhIaKm;MQS-N;0EhIOH? zT*i#Nm7gp5p38Zb*RW<3ZfE|b!00CCyuer3%~1^dkkc&Hi z597~YT=_waXTm%$o|JE6e0ayEw{x`otuHY)&F{aVy~-N)Czm#KeI@Npf;J7kF{c1@8Dl;HbW;s|bTemr-66B}c3^6sQ=8TLE%ROZ zaQ@b%=DT7-f!4)*zZQF?)R*3W=qH2oM=rT_Mm@RYx3T6BAs!Vazw$PoQEWxIncwhy zUt+%NT(#`hTg>+n=6j|2t~HO$)-uocuk-zX+6Oz8%#siG;!(}r9{=YVvuq1Dj^m9t zDi*N#C%`xp+8zmwjfTd?fWL9U0dvNom5A@GflgB6NvaK4gn#%==xH)`Pv+u9&+WaM zT7GB!v*Nx>H$mqU-MVGY{>$aqd~sx;^8WE-fw8YOa31@1!tCELJe$*c;~mfq*NM%+ z19sl|uiV;ePCKdd(OkYT%v|?pB?Y8^YOF4tawLqKK@`c^oTr;K8w6SFX|k} z!JB-AgXq1%!O_OwcjHudcMPsCV!a@r{ic=YVz&_!2w069VkIV~(^eP!bV%#Hu|?26 zK6{+DHTO8}H9565c2Vy_Fj!Xw9vbPBIqx<#Fvzv>*Q^V}+Pl++$%oC@H-X@QMct0r9l?R{ zGU%w9zVC#VYTbRecJ6-jsNhcJc}H*K%!zY2_im|e^NKe0_sH1b-SMZayIr`5&%f+} ziEJkA35hSIA7Ju#z@!P7FxR`4`=a|ZkU1xV#RkDby7nRd99Uc-Sll=aEFQ99@k7Ca z@4s(Y%!XcEdWr$hIPi2~mkKv~-6j)0VC@E4d-8JDdf>TR;Vt`)!1tb5mGEWYKg(z~cT&6wxhWpaj1 zztXXKwujh8598_?RlN?`aaU=Lb-3hGYyR9Ca+UB|HAd-4Ju819OY48WW$UsQFTShv zF~&QU+^ENt_mOS#KCYww3H#^Q7Gb;UUBw{;pX|lAKDX;RyFSexa(s)PqaQx6eNOL= zFz+X)ioHIf+^wEc?EQ`S%(NqaC0rC72;)16hVxYS z=Bu1tKl0vfG2V^y%!}-E+w$C$P&f8@4?N!cOmN^T(KU9Y^3tH|Hu3nf8;`B;yMaA< zHjnRHf(^Aq_Tz&#UB~`|clbUGUGMu{cwD)x6?frVGw&L+*HX2F{H+Tr6S7TvRtz6s z$z0*%)!l1g{)iRAbA*8lH*rzTUlpXNq#6 zkMr$o*Zc*w6i-H{);;SUg-&l_40?Bh-dzmujDx<3L%A{ixvXD87i+!kh_)VuZVx(Z zjCxZ`z$bWN0J zg%9Ck61YI082XE7Jt#$=%)1@BnFF1zO3+&P&ybet>=lb9g>{7+d=Ze<&{`;mi z$^0-nIn4OO)qJ9(6pNRxJ`=s<=!+BPdbZ|z9qrch=kV1Q&Gour=8Dg$xt^uD^8NQc zS65e9oFQf9P6&n38R2pGi{aeRC(*@WWXd+is=E7ads37u?c1$p zJ!UE~j4IAfyn1ofbF<;O`@Ztvf%`6b;z+xdu~hjKby>l?S6+7i0d)1!U5s=56;{LF zZJjkRJAnLiY+n29Z`sG%-;vQ;gN^j;<)!D zuR4&~>F~rBc*3k}FTmzy9`3bjY@ssrLIk;N;X{8M(lS3U2}EseR=F*m_L_QH9<+PzjvY{5IXC^kn-b^ttP=)sv=oo8;+kM8?s zZrBLr>s)sBWwi=V!dC}6z}h~Bef8Db{!bzG4Y9YEsgC5YOB8?KSN_`)@;Iy= zlA-d6l;0DX3SOB*fLgGXpPw9h0e?h#M$hcLjkN^x9h#l091w6Vm@_x!RS717v*_od zkD-MdMGINUv`}O8H@OY8MeUohE)Kmkpmn1dc3E6zW^#qzZnt9+6b%+2JsN_XqB>c-d{TVE_E$4B4u19m(FAIsQZ zHjJD&lS5xdPcdfkiQ#YO`f#*3+_h9W5FZD<$p3%!M0pw?7aTb5*}pM9YsG=Xl{5PT z*hEGCbNW?tb^LiN4!mDEv-2N6ENW@=Q)@aO`+h+de4mAU$Qt-4GZ?BKv*Mk)YUO8UZf9&&7Uvk6afuhxT8}Gl zlxHGWGS8cM*E6;z&H`Ev9;&UyhadQWeAq=iw{-5nYn)%6icdc@Tbw&76a{u+VCUlf z!v%8(TsasknmYv3c**c^?E)9E>wy0az=F1-DQykK8BU`u$s56c3H&8|H2)e~!-G?e zN8=D5CE+#`{Wj9(i_Nbj_@c8jy&e8Bq4&AB(X!4t_U@mw9IGT(0~|?q zSj2_Vq3@MFn|esgZA`ZvGrciZ%C2k-uxck<97ZX3DKvA&mACc{$jQw~fQI*?dG!hRd(NbcLAmo`(MN%S(=9%ChQ zZs&dJKjErmdQ+&^uo_y_#5R&s`(>n$untwSKfl-ql*(E%3e864@xEwg>s@6ZOy+&98QFG`BR8a*dB(Pztkz%gUAjOxp9;;H50@%0w|jQTCREzR*w6F%elw4+*3YRCO&uP-?M(@gnK zV}|MpMD8FSi0tYu@)ed|Zyl~j=DPVEvYqX*ChQb5pOS#d9ekBD%?jANumxJVi2Znq z(O%4$3l=Y&aWTKIy)gKO_IG8u zcP;z;)b<>;O{__6U%X`DjO+Nll(w}m&~01$8BN>3rsz`Y;yZ2Y`XKM(r_Dd;?1f0( z-%&ta+*jB;TEPB}f@Ak}u4OMo0X0%JM)}4C+D z>srAKyItjbsNL^pkE(w%{cJPtCp_(5O1uBe@1HR4gPw7_?=`-iXjj(?X4~y5Crs@= zm3>zIPtr%5c3<{|RdXx8aBV#5a2F4P5)Y zb$0zAYX|+%(q)UkHRB+AL`7F;X9Np>;+g+q=)1dw7(H=_eqsWL@Sop8FTRaFj4i{5 zy%V{Lt@R`3F1~d6Q}GV{*829x@$0+z;+!EOKe=Hs=d{>s(IfF0v`=&te)d`LUluv0 zvd5`;#P>`4Sm(Ques7|G{O?};bM0X*gO1{r_>uIf&y}+I7W;1RU=BI#58TB4mGG`R z9{D%!ch|@A%91cKjtDWED8906Det|>S-$$0*w=;J3+?J)9mbIbk1j5o@iM=A$m>## z5LXt+uhO`RZcfmTuB{|?t}&>8-Jg@?A8L2^X|(IUS4xcwSH9?47xdGWZA~*Upw5b5 z)2`Yq*~HaGQKto4IKp1G7(S1$#a7*hD7GYV$j)%BKXiVCv-*I= zaAy>250K*f%DeEM1EiYC;cC`l`|W)z*meDzpfBkb{V9HQvhyQdJF6(5ff(`YBRWG-;&T}Cd5k38l(b>>=nXV#aMyJ+YBy;B+-ILCK({pDQiCJv-ui*t?K2wU~{tg#^+z+*-XYX5^e04-@vD;#j5FE^DBxN#eKX99pA3o)6j7IK@8Su$oVDSmw{h zcCH52CFDjml7rDqj59tSIN>j74OjJ!R`BVbVWT~I^MKbbVuYO0_w3cY-;J-a#meZs z5V{+R6XN&fh3$2HgR6jRyQ-dqVtqD`dG8@}+A24i9ND(2MtdKE{hZ~*j_fwrn<9C> zzk{4`*=hHK`Q+>L?!fbX;9H{g%`y}^rJ$8^Oh@bc=5!{g;-=N}dr z{3Pm2$}gONZ!!_wG{W08(5zddNx$RNSrXib*2$>f#~EIxPP*1=+_iIk$~O_eDK;dY zm+aHNLG2Tpgxq@+K6nW}I0zq5dtm;3>~Fn~{jK-0zxBQ!Mvhbyr&*0GuB2u{a~fxB z@q9XUN)>x-p)Qv2v9NhIvew>*Asv!>O)^q_uBQEKEQ|VBIjvV)){cwFm(jE3583#v zSnt_aQfu3yjnuX&ORJ?mj)xYUds=gueiB@m_}?&iX!h8&ZoDHK8uzYunRgO- zB02ITG_1Uh7&4>;o+{?A6!_)yyBe8Nt96qxwoIvjwpBm9j{J!_L)&Tf&`YvBLDmf; zPa2Zsi8H@p`QEt){WVnD@}yx{dEz{G+VaGOsUuGwByUUc_Ivo0ELo;JF5s^?-naQa zoO~DU?!-q+mF-O)+O_yMM8Ctx4?pq)dMm7U_#s-!bGz@h~u!>~Q6TK3&=2 z%9Asd9gU9c(0-{$(%2*J$PU>9j_hcV>`?pi=^WXSbnO(fqrs6K4a3QfYNsyN$z;cr z;ouMK|0)Ick2-Mo`oC+wcxwMw^OCG{?Q3@&g00s!X;obe{9o;Pn}i+TIOP9U4eS4^ zP1pZz_xQiMF8|ksr(oBKZ!P~{}oK!n7~`a1eS7s zi(s-^+Yl|5x|q|Ehi0kG&rM*KPk+Py16( z(!TrNaQ?5_P4(L~Zu#vlE-#_o;r({oKdJWkscK99uiAC}W7n@%yYj2ub}yyfGx4kC z|7LsqU+G5I|DC1pj{h5x&+GWV%k@2I`@h)e^W~q;!`FQq|5y9=zJ>q$r0;A{d{%uC zzHcWs#HEYBIinrlH;?bHr3VY2WXx{NVlFbS3*WaJ-?wL`?fdrQ`@V(m>-xRVgG%}lHWTL8KyNV<+iKV@2J*qcm4l9uj@58?S3+!H{1BUFR-6T`nL{SztQn| z`|x?+N%DDBr&&2SXSc3oeZ=Gn;O{o#@Akr1z4*CV>_sKF96vX^b2T-9-p0>8oBdW@ z__)fE>A}A>el9-lTjU2^X?)zY)-V59c8~4j{*n1^pUHeV-%n-(-L?Bf8z{%|ZN2tS z0dl}=zngq0zqKP5|AO2@&bq^%$F5dh#Ax!`y|(X1UtpcV@v&uhEpYnmW85ZRD(2)% z;p@2hQinYDfc)z->Hk^cGT#2*OzD5-AGrT3W6AwLpVI&MKXCugr}V!urT>q1**O10 z!GCgl^8A;j^#A53=%0-d&|l(wK+#_tIR;JG;EIvB_1GfKR_JwPR8Ea`SUzeaac{FI{?N4O#hpdDJy< z>GfAB^!ke7m*ny8gI_w}7u5?9&u9$0oVqC$_${od4%JlI%pO4R*e*^P(^_Xt@su(7 zJUrCJJ=cFJFz`$Gldk_=P0WB8()<9tJCQ&6)3fxuELb>^KXQIwtt7XY^*>5lk(xer%dN z{aOB3bGc^xX<(<%Kg9g*IF0#T{0EvJ@IBzic9I{X`aYVY;O73b{UiJa@~Gw&i6;{0 z@rJRTc4d+aPi$D@~v9%V#__&VD1UUEg^V{`QT;M6vxM*nnZyKBDNN82ZV?8}Qr0^bT;cmT-#5;6+04o* z)Oe!&1sIS0UA~{+UP~EAzC-vT@>|^X2)o|4@|}vH@w4*qW7yA#K>x|sKi z;6ku0<(*66hn9=E4ji{Ij&^6G>0>*6ND zI0T2RDap8*&{n%aG5#_KH>;J~3togDgB#%4jm@TWklnegnPiW(7aTpdc=8O{CB%Wv zm^25*w?o%7k9PXhTJVZ|)$OJY)|&@`qv*?hXSjL%>d!xZ9=*9AKaW2@#XJU~wF>f+ zHQv2vFb~f4I-_|!af*5DWsixMSA-Aoii?klr!kLW==P-Z01qU97jAe1p;6&>GkZ)_dp>K) zErwTwTk^O=S|24AJ+>!_MzyEb*Luq-;LWG?a=BVJXw4e zb71VE)xFTF#_oC)30vto>YvCyt3A==jc z#mqm<+-+TL%N%lW99iV#+LFI2IsP?r_-^KpxFGVv-+w9ggXEE9&>-+`V$ZeeDz6rt z^MUhIR$(vW>Z3264JlYxASVvd-?d8?&nWd}n!LM=bQ{*PnfsDptuw!Tts_4M)}{Cz z&DaL1H0YHHwO&}~r@;Ct>eB;njWdV(3sG?2!yLL7Pf3EcYMh!nf5_vJz~EE-*}t<} zGtKu*;G5B!#&_Mf_r+(nT6`CLz7LMHW~Y70ACWiXH_woxBmD8(z4t!fbzkuT-Fwe- z?`^*8zWuDfwU6(vOm<~kD>xAj_L2|Y$GnP|Qy*~8TC!+{_@~$4f@{pP4?IladKR%P z>4;6}i2pG2)Ht(R_Yd`z-TD*rJ)`x<&b3#a&%Nf8{r~1uV@_+`!*|izD}1_sle=~> zs-5vW>ygKtdaZ|RZF?XaT0cJeGeh}8sy7}ZULqP$EK1|o{*Vmp&nEU;5DVH*4J_(t zSck7??Jf=ak4kT_K3l?dv;Ku{Pv{r%L7?@{uOXYSL%#zj=>^#;-h2kb3#^Ze<}2w3 zIlsT1KF(qtLi-zI_{0^AA&MPx3$~!*NXVQWn~x7}FXvOddM;ySe5`Bx`YV9Hy+0+m zjl5;nr7sJu)fn)b)xUgVtz|~R$7K4_`&sb%9LrbVh>Y6I`?7bGL!q2%wdJ;R7wx$3 z>)eb8_*FY`=H0_PVPsf{=F?embOol1zdiz9=zE`K z_Sq-*ZO_qJ=K@B`k4vT7zxK>kwWlrTpF7_^v%ZqZpIgS7QQ0$BoBWsZXRjXkNc%>b z0|PUu>EY(BUj4G2w`%TfEipAB^u2s*z`R%Xyz_p$^Zw(>?|;Gj{!^a!pK{*cAowu zY4$~E?AX^m>~-vA?0t;=;=H{Za(uqSa~XS%&$_h(-Jr2Y;iX>2p1x$lj5is#xrQw2 z;#xEF;S6ANt(WH|Ga_6Mve((>CpRV`d9`fYHQ?Ibo3(7)Owacjp6{Y(!*?UCor<$9 z2j}6D!JW1Alge+en0P>9e?S-+>|^a)=Wgb)Hm<&Mt)idG4k|%L&qiKfO?==Q?n!>e znfF%cq343^P%n9IeZa?@1)+IB12JSpW!d=9z6xhPPCmY5pvLxB8XI~{_;kmnPd{Vu zF$VQ7{V^mTpugjz6Zth7XMkq|*lOjBtqi`mtlUuA(Sv&{sSiPZm#J@5DY?a%Wb>AL z=4D{)%UQsr@t0#2QU5y@k0iy*&nvd zDiqD57xtAu^_PXSn7=K*g4^=7za;nK&`fINRUG|jb#=hERCzrk#rMEMu>|*-Wk*ZR zee93<6-URf-U!b1Y#saea%sn+ox@WH*Goo1rVUm{W+*&{xE|%~8)jT#+GS69 zp~h5Ja%&;`%nLQv5636!ov?Sg&`X1ByU906xh6ho08ToKLA;@VF8t>i{!QdF3I690 z4-LXo$|+Fa6~F^oN$n=>6^K4pi5?gJ&2Q$b-vQ>zc}_dvldHtH4VNV2O=Gx$F+@}F zw96Cwj14nB)+m$k6-Le~MjKOZS@3hAO7SVYJCSkLh0mvkcv^oL*vGkFSN6G39ruwT z1ImGud^hiovwgFP=kts;)4bzD#>Rka75rWaKiaV&I~VH(Xt56ZPuOMT10mDAaCi4{ z`af$m6jOUGYg&R%U7P!I4-cq@l|h8_pNo(GHS>k9&t$$o_QaLl`TqL(1keAkpD#IC zXENW0VdnenY0TG-=O_4Wt=81itSgW=^K+3e--T`>7qb5-*WPb!!E?4Ax8*0nbQOSXN#r4sQrP%7>9}dHugoHyyr{ex0W= zqszjKTXi9l`9jaTdx&jY#Mmf2ulzO1+|;ozOc}d;VV6I!50D2Qdqe&h{-5%xV~pL5 zH<%l8{V%N($FZ}NZ=-XZZ(-ak(B&=+jlXH^Hh=556xfH+duA>kn?tl69Zg@zY{|4Q zri?X){Pd33UT;jS--PMQjIo9>(!SQ(!0V(o{!^WIqhaU?e=?Ud#odx%*U5fe$Pz# z{l%2u6Ret@0sgQ{mhJ*){MMM&HWj6P@YPOkfOkN`5YTe%ZDY?(smQ32hO4}J);j6d zDs(IQW!gvJKXCM;z10DKzw8C&FpWQ2YJSU>K)>#FZHcO5nbTy~xj8XjoJOHbAN^>} zXYw<|f1t++R@r{-eJ#Cy$q^s^dNysF=h)k(=Pq=f^IN+P$Y-~o{o0WTHk51-Z~JAY zp3)^DWK>&TM^0#3S3=K;AHK`Eld{KuOS?PyF3y)g9R@vYOf%PVS zPi4N?=A6BmcBl+_C%7*H?mY(Xjbv@@lOxGbk3>`E-YUj29}v01IL$vVKx0U0pD(LDOfH8miY1md4r7yBBPs*Kk2j_hCSv@8EfeCqyl>FMO{=d@OO+JE>Y?SJPK?JqI(n!ty~FM6K< zj~16*94bC~aJAn@%{X}8_()vabs_uvb1w=#Uof~nf?bk}|2n^g7#?+bipYCa9Ar5< zWPxh4zcI_?09O8N)&L4^Y|&rXXEB<4ozA`2XPLSdMfZE|?Q!nCJj>LMmz*4Z6@EK5 zPBAu)e0R~Td>t=tqrf`IUTE9KaroWEJ1}=`<4aun#2@}Q4}H!{+25dCiCk)-Me}`y z&oD>%ir9;XuV;QW*fF+_SN^v(b~(Hn&YxA-0nW|*-gM@0aMpnK;xYF3ikmV*##gO5 z-^AN;fR|(@&+n_~H_z{@e0SD>csGao3=!m}WNTI0GB5lba~D4Y zuV`hkP-g|Yw5m^+UY8jClF+|i_&sNl=xCmS120M-;y}l4T^ijty>VQwsb8WJN&Qy1AMbB*^ zK9;^WSje~}YxXU4c;yy&MfOt{a&il@<|6ud30_e=#rDC-b7x(8usXdZ9k$&P{7gt^ zxG9&Y3x7v7LAuagoFP$YVc%Qix~cuLm@R+Gdyqfq2^nuMEZrt0h zRTX~h_<o_-vDZyW}{ z$B7M`34WJg6L{n6;v3<$lzmG+Xlnv7_7^UB;6UAzPaG+=(w0iL2v+{RR$()^60iAd z>r~OSaTD64l$o0y)Hhe4HoVPPA>gt zoAD>~xp1oWrCp3cHrbzS#m7Z17M&xS@U{BDufGYLgJ0xE+uuD{JRn}zJ@I=On<9eW zsMxjEH!7(6FC5ua^hbWha#f{x%C+KDe#qXd}l818?-|ZyJ9$ z`EWRF%ZJH)o=iT7_NO}V-{hh9kCO*CKrdciQyU)=(>q;x;O6(NAASNEGBv%lfXmT%#fWOmb5o>9i$R!M;KP5k9 zXYOV_zPKqbbPi)Mv32KJt-IwO%bc$Ggy_LtOA!wATXS*0Ti`B&JzM!gu&~*t8R`m@ z7zQpM52r!JE0iLcu2(O(4hps;M`XblEH%WR2IXm5v?H2!B{qu4B*a$zQ^5bXD zfFHFVX^F|TOXSZe7hd`!)m|?{F8_h;^)|;|Z%DP*vGsSP!)IH-mH4WZoaZk?pMJh8 zFI?vpY22|Aa0ZXLacTSP7sr0CwQaO8{1t&NrN?3=(C-}T35gG&!^W-9Ap9VD(|Qg* zM1yK76OZhNUf_oz8f+5{-u4-C7@#?|nFTH)(6-jDqVQ6XdaXgmoyVVYaYbu;Y+7R< zx}i1pp_iC7VVwtU%``RK}N^U$rS^S$fS$ZzSIls46li7V1)fLbFxz_%B9 zzE}CQlIKN?1w3309-!^*-tp*NJ@3k0ja&ZIaL+seUFz9c_~D#Owu3<0*a*BBgKv6r z1Pfa~Xb-6Ny?kA|0eKvTC!=$~mjef*AAYMfqGY~Y!~DdTPty1^c`pDtZ}l6REX`+ah+^jXKJc>Z60iC#Gg?WW2D*<=60T3V`JVa;vGpZPd_ zk`I5U>XQ|;ciQ%yBVX2hR`%VA^2IAt?7duRL$=*{1Ga22GzZ=4%o^Et<~Ovr*U{69 zZQHJGiDTRKqW`ltWrPYiSG-{P`JvU0Yzd%3D?28J6#wc$w#1MvF=UHu?HIBlESnD5 zBD$815|nJiZjoOm-(7M~V-&y2E*TE*;zP-l81$+$VYR;~Rla1>UXQ1}UfS!UJr}3$ zyL!)-E!j@I$CghK_(baqPjK#6*GTqtAQ!sD1IURkWJnLZ(1T29N6zFClXqiA*hxl5 zy)+g(3BGc9Ms`veykT@7yrvjmH*&yjC#4M|FLn&mMlLa#leM8dK+ibdD<%)>5!wjj z&%5Jz6`Jf~ZjT~gUP6{^cI1n2aVfYcLvOmzDsL>cuS_G?IKP0g58We1pxjmqm@9Wg zIE*1zjXez9%^tOr=mp`@iwoh>t0&ankPLt>Bxiq@_B#G6nXlcxHI5Vd&J^8#uC-lj zy_uX(bDI1-4xUQo=kL?T>GHGeLwheqBHzWtl7Zo1wavTAFYw0aEaG|Ci4DJ}_*|P4 zpKH?^h!dZKuFV=!gVsRc^P%|MW@tt{E#0a3E;_iOxaQK3Y&peuqr}sq=n=(;qRc_Q zO%xtdEIc_*;n<2r@HcwN5C0ka3;*Li?zA?wv=N`u{ zl-!2LWKYVjG%^G^5e(p0Di#Fq$!4_aYKQSoSyEa*)y#^uwA_5LJ{?@T4k)cWUB)`wd zo+MvX^l1Efi?b0NoW=v3i$MRzo}_PMPlBroN9ONgzGc`piZKqw^Wpm;{EP!X;LwJN zjUUlHcl6{-NaCZ|Jv)Jwj*F@6g(TXM9O( z2abQ!`X+QT%(%UD^5oMA8)2P8C#ORnfnn(5?`Z2x6+ahk1du6} zz^y8meN)8zofu!kLe`32#18m~I7OPtnF;iFCFLpwOukH-lP{xtTZs8Lqjv(p-|@fN zDjgf5%8@BCY=}x^3OT$Db&gDt?JSxsK{vrk12OnpI@iEfaT4(F#l7gy*c{fMgk;;x zZlFF&CqsU zcrnRNJj>XLTIWo)6KiBAmRJKTXj{I|zW@VEwh8^!fKT}(k)_~uQ4l=mwBnQ5e&|fD z7cmdUKAi0sK~}_`4;CthW?<^^N9BuZFQMKwI)rESoZ9z3D<4baFmVp_3jX5Z2avzA zQ)1AT(RI*bk@eNX@xZOy^4sb*L@H@Za`7MSwc4}LU$R~6@F%-+f&7e7JsGUv}5~gWDBT8t$1!#wwU7ZXcFi!KdJ+cq95~toOQPh+-2_a2q~D zy142Wj=kv80<@Dv3z@V%lD0>Kn=$;s?^nW`vKM6!h~Jg(@VPUP_l@vcD!(6Ro$5^F zeYTPJDfZ*L3HvcM&S>-?$pP7qsd7N}qboSg$|7MePCUgw_nz-$FWJW$QDrC6q$bui*cAWN^$qqMtu%9=x{J2DY0J#B#IgImeet|&o9diy?{nTZbzYp#Y_FyE zQRV&PID4zwsVDEW34e+wzvAHLWc70UOuj{8|FH5c-jiR$+O5S|xNZ))Jq}wB|Hp(x zd{}*a!RbT!^kz?5rCpaS;;E^0vV6;yVft^Q|0c6`?C75oyWeM1`W@%=tNm`?e)Bwg z;oeD+KWEb4#+3d((i$~%ekT1DnE55v%PTTCcVomco6bG!(~_lvWz^|IGW1<%>=yrA zd&yqQOtkkV>yMSqB?J1bVlTJ(J=H%TnWi&;utBeSg`A9u0n5I3dGP>sjqT?z_uJPV zciv|&w|W1{onOn$$``+kw<{UYc6=biW2%Wd8-Nq+x_ z-uLHt-k;;VzsGr>z1-&g>yqDJ<9+`I&-*uU78JHyrJZZlP(`kldH=@b_wV+;f0O6^ zo1FLUJko|L@<`453zFYo;(fo=^M0xQTv_$(flcI%=6$a)q}tOfGpvWb`1?!V&$aQ_ zRylc=i@&zA$-aRFoUc-bOyT{uycfoXR1fWMQ{JEFeSfOw{i)9T*c0ac_w4r`+?=Gj(uxo_YXS=PgvbNOxdT*{%jS)4Ojq~ z*-{&a6?Zteywg3uDq-_q2u}n(yx`>ro1YW;V)CmcAnEl*56X4kZwuJU`2f>TQS#W>I{oKBSkKfPzv@@6C z_H(~7M(|AJ)4K6))ij9_D+>}6Ph%g{izB{&U{Y}Fkwz<)N-WVN}D?LEIxpq-Nn1P#C-GEE2aI*Th`PcSonbbtkzgfyG@F% zr5Rs7mwl0W)T-B5G^SG4(V*w~VQdD`mhw)|8ciMhv#jYR*9H1g-4mVl?fM#STN9xN zt;pdc z<-cr`|CXR%t<}_EtGG6seE&D$!K$gnl5cGb(YJBOmPuOcb;pUFPVK;fjl`jHutBwV zaX)^L>`M1+faQ|yKj*AZ?0c;Pf1SN2uCFM6{Z#XO?TO928`N;X&Cp zI+G7xBnRt)P#SrXfw9zS<98l1A!_nE-MEHJE0WRa*y_o-&)vWp`>7K*Aj`|2b zK#t|>@1q{TrcA znnpwGwFO4sCG1Q2IHp!2G~mW4T^g@+XrKxjhz-%WCsyg$x8zFLd$CgNT{liRDP>&0 z^o(a7GRK?G8+7(#g3pFLYD*mWsqKqseq(4S^}P60{jD6U2=u5tPx;9~;zNio@_l`w z8!xi=bw{Bq6MKP{ZMsiy?SOu)ru@+N8ys7rB;jWb$rZ+MAqX4OAP(EJgjv@#T`t( zI5aE0Cc1f+a}Gqjm=Tl2&N&RVN!$IGj=ULIC0qU1Fa z*VgmKE7qjoNO3Bi{bhOnx%S`x1V5CgjPFeN;cO2-+(0{@j2|vG{P5r;@CYdb_Le7*BgOSa6LAv!YcF}gNUu#`epN~Rw zFHPi+>rMO_nGZd09>+ewj=az=Lu2HBvSzRP14gg*+In?0GAbcg9sPhzknVTmI7xa| zHXXL$(7KHCY!ba858i1_mIu2XI&(>8y4Ua_^%&i{K#mNZ z#r%Hu!149R`8z@8)9=2NepT<iCyOhcmB)+vmtz${cef) zqI5|N86HPAH;)2d=zZxJ{dVseSxgRQwQ}abr{u8Ys;-;-U+74-;crL6Z}61Xb7M1^ z3-VlYPjymX%(kZU{CiqwQaj3<(eDb@o7`GFJ-pw6GJ6xdv+_FI{;VS20piE1jnuYf zOD$~v%fc>Xv}udBO&^{%WAJ(5>&MrZW#I1&(?%S6)!L71%l#|$sw6XH%c*_E1K`sy zNTzE22PlKsYaDh6*Qx!6(Icmc=8Q|zizHXeAFy>TAz=^g!+jpxV4Q*74n z*mn`&)M0dVp1ohx)z1!W4P83dBEZ)8?!Y$}8jh+a9`B3qWMk!NAL^7qsQ)X+*S|B7 z`Ebv*JO1V06S2=By^n9`+E_=l*Ci8J6TfrUKxAWm+e1s@LzkXX@_L>b^=d|hJGW29lt1n0nrTCWb=kl&QCiza$IrMh}e0(Eu z|C``zNB1Q88@2XX)Alv;JdhpAk5>L?zUA+XUdS)?dMX2-OqOJ3ohpkq`SSk!7k+Urzhc1;7w_XRd261M_qD=k6iS zEqP?xWqhtI7C#SNLsmo=0BhP0gG=ROcilvr4(x>E50~PL2kacCSc#saE#RqK`Y13p zygdX%+Xmc69+B&Bzs7gb#^3>bQRiK~r?%9F_kFL<8e|Wx%gZ;PgnuEdB>zO~C*NlM zViqz0xwkzR*|sL7R)qB7UfNcC|6G4?;QeNMy`RL} zCUKfF+dpe4$3L^@XzNMMQDb=7nV+}5(h^gTA(1aLluI=jXc?RgFQJq1MH?!E*&)gO z2-oCCMY%3L{b9@sS;$ng&NiMLHF90t+_eZah%L5H>+@fNHfof!HV#~lxA#4vLmCth zD7gIC`c2sVPCTF?@2#13JOEnv+4`YPdS$uv3iK1>eXW5%NWO`F8$H3bAw5AKDSCps z0*;=j_4*HvJ>gyhPDaL$w{3)F9(thm&CX{$G%+O4Q|y@%o(nWo~fYBI|Fri7xTkZjYT)yP?YZ?zVQm*P8ElZac{L6?|XGdZWRgW4{P@GZ;&3 znEvOP{uA*j#W8E35!d%~eD?+?e$$}%&5K6vsfM-_{|MMH5nU+{M)eNT-gCy_+;jQF ztCOzu!e=yiffrKukNzRXH=DeQ|9bb-;~V)uG`=|F+kP73i?O%Yl{c>KkP5#(vp+b2 zU&S9g0v|jppGfg){f=bXc_BG(4X%erhGLUh@JO0f<34mNTZHZrt#IL`Ar1H0>> zRjBx)*=u(>_(RVSUw>FJhpvOc!j;(5h7MgCK;I?(cKKzrEnl8Wna}Gf^y=#OHJtZx zd~~vYr$+HWWEpd+CN@FL8(BJEd6meXv8v&snqhH`S9L_J$)O7_L$;&O%Pz3jKhEQK z_p!4cUXn~7ubVcjg6UWY|}Q`n6=1|_%h~)juCuTki(+iS})CIKDsWy@}iN% zUM@gC0f)5NzQQJK*LW?y24jQ2<~K4XU~SHz?xsK45RKH6>1LdIW)^y)`wgq`ePFlI zvd%g7?w_{XwS27QG&;8S?r!g)A7Zw3n=wKCTV4vIl`flt9t=b5VQ@XxHmM|fAUXMEv?yeSu% z7;_9cpg8nYc)m$K^Us2XW%vkT+K~?LBL?Pw|Y&=-ic~ z{$^c!Zt!--HoyIx;O#C9HKyL$|pXI<-eTp`ON8wp#BsM{#!^yUzkDkbz zH>A+B$zMk9JfhkUm?IQNHf$`>=Rrk!}ZRVZ3W^3Ql~wzYWMLUhh8=$u99oW2;j%~j`LGLg{y-gau+foyUC=-+bB@rTeAEBL zcW~pZ_^@pYkrOM)qo`%Q@jHx5V}eJA>{%lNoqm&O$B8X`GnICTE&Pp#b}at6_CsGv ze7J@)WMqT+h-=~VZx@eDfVZN^0LgmMO7;(+kEyH`B9pW?RAYARqpS4Z)r>ihG3QLQ z2ELCTve<7uQ+7Q5ehzm0E@V>#{UQF+b;T6^J##3Q&`@T_5*o^hB}jfm&=KN0_Z=74 z&tH;aw^?7Zam|>thNH8{oi&^`cMV7J8qsd916TcaajpE&bO+Z)7GSeUu1082zLt?; z`4)8urEmD{$Q#{jx)~V*t|QQn!B4GC7ah>AYPRlTZ+TvDyd5iW?g@9Yt$Yr?hRatb z=|3r6CzvVjR0*784t}cmU4`6q*G`llDS6ts9z02uy}t|@EWA}gYxr|l zRngwh$W4$Qss?ZFGm7=hdq3G8Orkl)zhCk8Oxhnw`=hBp2CWUzm)S3o9KVum%7Lzg zTbEb#yA$3wc06s2UkvD;4tLH zpV>d3Sf6depK{M{dy}|}pS4)6J&G=CREuu=c_G<@SFujC3mEx1r>>MUPRd!wHgG^E zy~cY{;_7i=MZRj=7GmX%#2BSNH9zSY@l=j;P4@&(eVX_OK8NlRbC^GSM$OJi{0YCr z50)ac=Ff)rC-J9v!X|JOM#dW2r_Dr;xy_$Rw6e#(_P4Ath{t8)Dn1q&XV!NO9hB0h z=)~2TE?qv7acq51_5u8*d;(Le6dAd~vW991o-f+`tk(bjD0KhSgzPFOr!sG>BfG$* zY)E*s!Hs3cX-9JCUGfL?T|Am5eLz3ZFMGAv2Pz#+--hO$c?hqE9yz}L0S`W30Y1k^ zC-N_M|B$-H#C6M8Wen)EqCR7&Z}iz!Kc&xH`ZLeeUSsmA^u4S$!|toZ_VLx%>-5#_ z=oy#)TTFk6_<{HvKH2d;=l)vcvx`@*_`z}b9{IyqY}skI8Fco9Y{HJqqb}tguP0)m z>hBr)licy1pP3rphyH|vq_t#?Uu((w)LQZ$?z=H<8-7mQ0-6r;zI@V}BX%vJVtz-F zuSw4#$K|(cOy76LBw45$wWwP2ZwMaHj(2_8%^!QXSF#V<0srZ4JhL_tKXKdtuBZKB zIipc$$q^H(%6K5IF1 zNYAX`oHzHGS=2b5Z3Q}4aG!OpPM+hOfV#DLR-oQ*$Ke~KZ#P3f*FZnA1%!tQz{!Wr z;JeW(h&TxoGO0?%K=^Doq;ZLFowM;V7~tKDrYHIf$%>a$UpMWNA^(fk6N+y zyzJ-U3u0*^Sss^OF!@Sx7b{h9aB2P_B-;dTg)|$d%5-1Y0QQ3 z-0HdZ7tXaMo@;ZRYu_-}yu4@ggTHkxuyMby;=9qK4!xUL3^c#LnP)uu|LY!k(~?q; zn*9&kC0BDVK#$aXHgxU9vYX%^WY+{}WC6Su2&-m=rfah;MF(Idy+X7j_j#K_9W>a=NZ>7 zT;{;_Ne?{Nq`=eI@iOGi8)I}2C}rubJ4@~>o}lVLmm1v#y?;UWbr8 zrvZ1>^G<^=)8Wfg!QI%{w5gghd+?i11#hp7GucC@s?p)fW_`NyIUAny>PPs_USsy? zxlhy1`zLvSNlLyRHqm?5_N>q*@}y^CSL`NtD+=7T55%{ zfsXv>A=ag;trpdxDQCPomn;1Lm^&Bns;V>Z?~{|03l~8_(P~XX!c9yxC*20%H^Di%-SPnLb7dP_Hl`T!2 zd&#%2%rBZ+gshftQZUvb9Oul~^o?&Es{h8W_v*j#Oa6DgH|OCdWPRn~WqH|aLfN6_ zvX48*g6O2-^rhd{sFaBQ!e4?N1*!S4?_yC)x53;otOU5ORc7ZL~3_xf+_-$BE$ ze`|Ms5uXYEXZ_BjJ7$K#8_TPPN&T~m=CvyyEfy` ztpHaY_l3K1IlHnO-CV@j-8hMtJFX|c$bLPana)|9;79N3`6lX5syY8p@yk>l6ExSm zU*=uq`r5>4!?T&kR3&vy*-kFJ$-&B8I$61n%_6Ullm=P zs(aS2PTq!&?}?$T>k~uS>*ga>50j{Ly3ijDiJQO`^iz(!^$ucX)4?0?#;b@gFoufo z;zP;Y2Y0Sko#U;HWghsfcJ0*at3BI}wI7xrt=;oa&}DrNep)5^0lOtDvGhvab9Pg-hid`K0;JX;u68DpTaq~t-4sO84$ObpEqbsQ+SDq-0 z+>cm1-<8ANZ>Aw1g@Zk+MMOrMIp*OmR*js#71-ukAHc<_ zm4E)cNh{~(`SrE(Ce!+nXYP3iJ@%yRckzvMO9l87?%shf?Rnj^unn(Pd@*Ti0oToK zSB}>8$2A|7k2Y|7wyko%YHJ^Vw^Gk*&g9<4xzpacmpQC!JCf~uuZ})+c6SncX}{?= zx3iM#u})5NUdValXfUt2{lu!(xlZmH$w%#z(m}uNrtci`*Q)i)gP+_QOFs;%1Dp?i z+=qI@@U_M*iNj7}lhqGPaO7?6ZTRiEWf2Vbks@+QI6znhm?;vXebY5N-Hm2+; z|1-b-sY#3X*z@OPg9orHwf3Tf|BdMD#f(2lKPCL<_ksYw<%h?Mv0;I)g#XsB*>>WD z{4Mv)xjOdbB&INnzgg$j9ooP%V=I6gm#6yr9iQ@z-+%tjtEQf=r+(MMTLpZx(1rf< z^5TrG7#w8tU+~Z3w}rPDSQP`6Zcv@u!@x9?+=PLX@hVnO$KNHyM8CwdI(xPrcs0-X ztF!Vx$FuczoZwoq+-3aT?WCQphuyY>|3Aq3;Is8E@Qppao^G7c_dVmcwD&YdVb906HdW@8&1JrL;ZLcy@YrE_Q5;!6AeFg8hHPa4_4KJ zq~;bE)?RxRx#0JwRS)rTYEhc7SBM{&wZ_B`cBpo{y7^>71^YA=_~y3tVb=TlQVdh) zMfz(c7W>wg`s)|c;~VOKhui-P$oGSut$$Fqeh9hbz~e>i|72yMwE=p`BlLr0&O;td zif{N~De}RR9&d5uJ3aDR@Eiml$*Y&JM>4?_=Gh5yKBoiIKX@>yzS9p=zz37y6^_-X ze@%;@etK4MiszQTHHN-D^GoBI$ao~hqUCv~0YiQU7*hP@!O$On^*4USB^$AQGRbSdu79hsXTFQCKdkYqe~tgq z(}3aC3^05c<6m(aeMd9&{bA7Gj{mOHfMHbz7(R^g-**~)-<_fF4|Dt8COGF3HgMhcSLT|3{w&4EY&gINkBDLg)JH^(FsweysY>RJWg%22VM9@aW?A z8-_0FZPQx4m-u#X`H(t4){{#gbbhR>|I*}h2KYLNElFPJEXH4A8~NpyU~B@$cK&D5 z&AZZIR6Tz$`RzO7)~;u^`XiJ49_q>O#2BY*WE#G#&2RDZR9fHC5B|RQ_;g36c>MMZ z`orok^)H+RJ^+RX(_lCg{(bcf?4t``J=yT5voqUApGt!v#lM?e9onD%`b+GiUm{aZ z#}=97!Sw&aK6?H%VLHo$>Hi1&=v`Ywxwp4J=eG|M-|9X8KP>ye%Ex~@4H))hfFZ?S zA7CGS(EPrO{DEKAq|fh-X?_1s%oi~pWPstr7=Qa|^qu(T z|IGZi|1a#rzs~^URN$-X2gWPXU_2B1aC@5kTyOHyLnE8ni;FydGUd9?%)or#&Y_d&erh{8O=ffMKcp zQ}Q8V@DDg9kJLggDo(EA#eC<<7CKR_(*A#$*_;jXKT^bYnW zHfNTJU9;b4IrIM}zN3aK!L!Pl{3l0WOAUDp-{ab*ic-ZL!*`M+m_v@6xQ<;<%f@5a!-##-m? zD^e)>(O-c6{IJG>OZkSCz^QB16a;|B)GV%FVL?Ru+8v-7mzZlVc~(r}+Q(ILAfwX|1Af@ie(Kt>p=X_|0FvGgS3|&_>S(bFG>lt?PSh z3j6urMolQWmrKCmvx};a3&)qz*UixRUh+1Lfx(?Ou#d~l;C$_a_a1Ky4D58s*%t73 z9QA|ANlw?>LkF%|0L*LY^KEjRo%0tQ??m=o3hti^432#FGTyhz%^hV- zZ;=nu8hk&$-a_8!yTCNQ=Cb4C&mO!+G`N@C+jG$1d}uHM8r%!Km*zTM_k_sT30L9= zXKdt~MSb~UG4&4Ofy8ZYJ~Y?I6S`;XpORDHTk-GJ{8c>?^mqBCAfh_$V}YToulVi5 zhp!mvL=M+1JpM-D>@~H4VV!m0;azYtO!N&71{VXPe+zBx{1Xn$I>$6T9HsBK=u^0$ zkka5_8~u#WVXcXw|3KQxi+%-o-F62>*K*xQA7HPwkpGkX`}tG6n+yL8WV}P*r(yIx zBHVT8eOD$bzU$AArSC76{#e16 zomKW0IWxN!q7B$vF2v{04z1CCoP}m@7pf$Ze^&zAMkl*DK@HuK6H8XBPEB%BxpY@PxV1*p=a)=fYI2_0oz$(EI7$w3D3m5Q z7EqU>+`HtvvQ?7HvP{qwPlcLpsjtw|uj9s;3?} zG2Q8kR{~2R>$L`Reibylb}%(wl6lNIyEga7Z-U=4@XK@NN%NestZPyp9(v3L-qta! zwSjh9!FxOMsl&-xv!44^oHl%<{Moht3Fs)?UjQC;Exl6@49eFp0hdO0L+8&>pP+rq z)b^)UtH8LF%ShmJDZf8Wyu%naz=vV(*TOp*gZ3_P>kvYzF}%bWlq=Kw;u+bEf?sQ0 zwfJI%^Ca)UxQhkTHm##Se9sANIQZ5aPbh?%N8?&j51={3o0r z0p}Zmw;fnqoM)xr)t*&f1?F~OZUf#9(HPhgz%RH(rw(8bl7|<5{tNyRu3MNZ2Jd{A zj&}?5k4^*TUj94sNc{Re>W0&0(F~7o#k>0V*YNLy@UCcF3GdE=cPruDVvl#P6%OHD zi^C*%n9tZP9%uXTDBM}zodyo|uJ9-v8eDp`Z!@&dHT)}n5&b2PPnUmdz~ia-_c`k3 zT>j09M!D{fe-}HU59Hr-()d?AARf-dzjxR%oCg0+Jq=#?OZm6;^3&(v%g%s*2c8DZ zz4#a2%}V24yC0zC*Kuj_|2^dUskd8Kw9VZ|=tks^^2+AkN_YRNYq{4a=2hvQ2i&Gw z``j=xo3q_~b0pQDIlG|mdi?D5P9#(kE)7xB5JE@q=6vH@fNf)m6R8>+ICc-ZaY-J&sU63Hrk*Gion`YLsufQNLpNh@<9 zXJWWChkB2;?#4qoS?j42&*`k8Klv4^dy}5|g+m<}?I)N|S|cI7ob>uoZHwNmcGy23 zSZ?I^b=a*{v@`A;$p%v^uG0QnVIY_;c>b1*G1Qu#cN$gA%AioQ|-?ckcubtyO zeQ30k(|m;c^LbC-4d%XJ1il64Th_tIkMY6n-e;_WN#9)O1e*^SSn@inv6Zzq`&{Jk z7ALEjb4DZVd)1tCa{1~y^qFd>+&w!2(TjfR*3#DHId8-nGj>qt4XovBWh`xs|CRZL zQ|ktC9wPT^v==D$$IIMv_XFXaKk#F06=)#5iHC#(`h274#I(bbRb^r4STXWTxEeDk z{P;@th0H6zBBFZ4TG=ny_@#WO=PP*D9=;;dK7W>ZmXA$l+mnAJ8_53NEt?IT?c+PO zGZvesh<7-%g5ROe8tkHZ?2)r#{-~+1Fg|k+UVCPMdrx*%J8Mu2raGl}L4&<{!c(w$ z3wtI?=SpV&oO85WSd-bx_%`#NnGe)Us_x3&`#u;wyn(rZew9Ca&|K%3>!13rU-Mn> z=XxLiUorRcjBWF))bp(9ZmtXP8SNaGZW>_c+dzEE4D+pKoP7J9^>M9bvN@c|(Ct|J zGmTG)PgKLkUaXVZGq72O8_gwB|DADmE(%)Bg?R{_ufc$bv=*){%=wvg?OJj|A((Wi!vV^r&>{k$M< z|4YBAGq%rP(eE(NIiFeYi!TS(OqeQuPX-62_~XgD*3sryBSn7eyZAB0Gw~b@A_RE;LH->yE!nhxr{a@!0Y+Q zGv>!+!M>O=%;o*6K&W#&Yq_r*RCg$+X4KTV`QAO&-L%n`?u`=sj4#eNwSfVhv+=n@ zH4CQhZgLjJ=)<;igXDC^*!U?!}mw{yB&FPm+3pF^C&W6OBnfHGdk7x zQQ|1J9m#3ij^wnxZoDS2a2D-t1{YO<>`v8-9vuu%)Rau!%-l8ikOevX7QeJG-`b%i z{)~CHo%*>g%=Hk@hw?lG&0BrXZ@^cY>phn&4Z#c0G4=gX{9}Aljmu9aD=qAo{BBdY|ul zukX6acl{G{Ex9rv`Y+~Ma%DjDhvxd>o$|e&_r3Eyb1ffyK=ix5`_KBWxB1@LVy>kN za-v(!^&sv*61(@q;8hQKmZlqunkq zQ;WZrTKu)t;;*F^|FK8*JpJ6s%ERByAH3$W?6aE1=XuP57~cujdit1<7k+##ZHm{6 zsM|Mf!lTJHw@rP+-dL$`zN~K?|2O6CH_U~~*3943@Qq)tn*3$GQ`$1d+0}|q--fLr zS^LjlOY;Nj!@Pt18iD-6=Gf%LCj9<@Ti@KX-a+eWvXQAR@R;4-MDZ*32=7vSOg!lK zYmHtBx^is2MttcmY1mR8vT=y>IrYw0ftue*LFa@p7j-Z>r~ zT#D)G`55phTkPCS`1E|K&!*#WSh(v2`my$*^tyjPb>S-rzLMZ8Cc6*)WbT148_U?h zeDmW;GC=ESZvjuE=Fc&>LB7vehP|WvT34btO%nX{;5s|H;z9fx;Q@T8zBq<0nFJq- zy;z)7gZJRc?jK<5nY9v%Z)#tzSYrkrf@emijdvgK_u>z5>#x5t{yF-S{q-7TOQ!bl zL@)l3{T}+*-2=hN5XR!+Hz%z>#m!W|VDWpyNcDGqD%P)c8p+$>@hZh&ony;}E_o^s ze6IxGdEj_AzWU9KwF8`nx@r&a=AC!4ui*R7 z*IY66^TcNd=QyQn6|WBDb-smOe*0>tYcMo;E|2|numLV5c8>iLvE%7I7Gl}nSpL_k z#&UJIOR)7j9(4J;=)(IL&tUNRj)%`zfk*iKsfSPES~K1`1wKFe0WiD+P6dbh>JOHQ z;O28R6T!_;gB#gJdSCd}-%Z5+8=XO&tFSTdoqvz9o2vM|9Xwsi?;RhVcDUOa+W9K> z#B+ngj~|@>`KjH`;LfASA2XKu_hNVDcP4({J>z$b<(-H6=Z~Y~Pr)DH^qq%##`C*V z@XJ!>sp8hyBwaVUvBMp9tobED6xhA21`9h)1CnrrFztmreT>+I-eb1hpUH@d-h{cW!M=t^XdbWJNV zRk0<-^`tM8Pp0WhWRYU{t;kdDH?P>#uRNV;<U-Od}K?^#ChF(&9(Ap(V6Z#o`R@i1vP(! zo_^U&JD&oV?s`PUi2dJc4Up_F_uEfr`1XcAbO=PswI@Ti)--aS_D$dg7^Pzrr`uAB z9x{3seM{d*)4oq~uDkTprN_HxjALDWSs-hn^c!n?&~L%cv%pId`5+lf<^v4`L(*H(6M{EyfyCcXm?_0TCh`Yvk> zGU-S0V%P_()@oXQ%e1~G7x+4WDbK){*SU@B;Nrzk<-tGL{qRq2iry{ok8CdOLAEKK z_Q3ZVFiFn${YGbRhN54~@Xb$7F^;o*<49j$lUh$YML6$SPnyHr!S0)^HDa+^bndXg zF7ZbW<76*Z_ED3q4EJjUeMQK9u8>st#Z)dg(gw#QZ$=>fhj-IpNYH-gjHU;a&LLZOG^x-d7(rSMUyf z94QGbtizr?GBvP}_24tMGPiSbiOUUJyz9uyz(Uql&N%YTz{1z*|Hwswg$}lXemC)Z z05BZ+MZmy#BohkNbtc{gkOI#@588(5KwbttD4!w%`L4!zj@L+3%o;ABf`J)fx| z;Qh`!0+H{~=4O1pmInf*yYc%BjKCJ4UyX4exz?>A`QxQ(vv zS$7w?>aFCe@1=G`d7h25ryMhWh{?x@e~+TilwTkZ8jV*X!=OL$M$V1WULaY`6(?$+ zAb0h60$VSLe7T{fcr>q4=@-hF|4-?cy50BytoTScd$+1$!)s&TL0lw%i{m?Z9>!r2SXU4VXPZ z8h5c@67!=2+Uq<8-Patt5`J$i4=gOiCTjdDbBNf9=2DaX&SY-#_h#bBZwCi8-*aN^ z>PxvU!mb_U3|dna2z0&#E#3jQZ-ZOepROG}SUD*}i^g&9HylOJy$#OZ0k5*{WHYM< zr1K8w0sJ!q`NUUMdoU>4uDV6&o{mvv{F$>?JSBhguNlX^{fxtoLF4g{_Rfv$RA>H<&tfT4cUvncXPk(@Unj{PXk8btNk_?Kb`kcx4<_Ch;`)=hnIh* z-yPW5`mOf5ktyt*HN&=>h5sxb^0#}LZP&xQ+SQqqqXPkA6FHr;`Cc+fu_M_jmiC1n z&h)<4PD@r8nZ&!2UqL6ZM)f9cK0QA=ADjt(y%+O%;00{O7(9FO=^ozylerG>JkH+& zFE$<<=$woXK^ADg!V!WW{r@=M<%EU){*2Ac-r8XQsb_;kfIN@v;43bmz zzz{@U|A|_QV&Eu{zW~h(kj=q4d{gMwSQR`xsP{M2SiNJvxznwKvuy@B2T?YJeI8^z zw0sfPh`Tj&)EX7Ar)28m1{yMFnAP@d0@iEwk58*;MvG{2B@F8DR`1l9m101CA0dD%k z$E3doAMo&)G+gWk4<37@>O*cohrU0gC;#0t9b8tzA7$Vcn>+@ew4%G)kh^bc|DiG5 zFN4;|LDh4#NDtl`?wWZXwVu$)!Ip}T!7hV-+8aT8H?%U}V%WZtDXu+~9bKuO>As$m+baRY0B@!A^WFHHs(;fe9-8G3@>jEk`u{yoK* zG?rccj3v`~pEcM<{n1Z!v*VFI77g#VGz5NY$Fx8{ouBdUxr_xkgV0Sm@{vxEy+wG& zcoom7M((tM0~4#I`LzYvtiJzMaGfE)YK}L3h3|90;XrUd z1l$iproac{Q|-57< z{qa=8htTZG8@n5(4Go*KFdEs%ZZW!}7+q3H9%R=IeQoY^JMQ@Z?mIuy&to}OPrX;x z(9RlDqkUda4)G4;TNSeEc49X}oae2bOZ`tB(_S)o}o~e->d;)(={LxS0*YRz|!(m`@&j3u&zpb-ghR(c>K2;+&65O{) zPa)IY`g6grTKs_QbpyZZ=jJko7G%40v21z8S7YdO&8sBeo7yOJ!po+XOtDwNo*jMm z8}J?TPVuUG#vuEC39&fgL3{SkW&KACd8{$4)V_&a3n$iguLCEuzj$@A@^HJ6aoYHva_EbJfmpyB3GkT3UWl$O<>n@d33qK6&i-EVY52~@AzB%q;>Vjf z@5th$Nd0>Fh%vUk#PpW#f9z1nW6!Ky73r}9%zckbGG zt2rzl%`|tv4E(2>yRGuokzwg`_s7&>YVL~8LB^xGYw4>q5U9hssug*qx%&-pq3coL z!{U~BT(7z7;ch{P$31iEz2eOLJT?PAOWsQd z3Fl+L`8IHVVE&k?!Hb{+c-7vFFN1fTT{cH+HNkxmxcAFa&G!$Ir#}@;@R#Y2HufV= zS0YcxB2Nz>Pg{|vt-a;xK`Uea^i@}$S{Wl8SoyZW!-bwnp3gS(+vUM*Z%x#9d*kDv zl@%?ttNHEMA=0bDhx}3DqzIghWR7n{mlPmZ{rben@nP<{bpO8Avqgs0?fP0;eAcyp zdiI~II_T#7s>uDJFJ>se>~JpT0rtF+jF3;b4FAdP%W>Hb_UF~;@+&W4&8D9xjLZKx z(i)6fa$m^C8Ok^PH+H@1DlEMEwq?j8JN+uXW@3isxj*?&kFhbY2do{N$t8apqv4(MIf4@crPL6eH1ToT`kbC|e>OJl9BkUf zo=rQ`llfWTqlNZl%UXD^0A3S=#l9JJ>9Rwi`6Y{H(f@4M#yeK;L-bJd>D8h@6L%Cy=l%fWa9X`UCTYX+xc*VnGZejMBzd* zKxYL@*2SQses6#-miOlVvAbcMj~6AoRsW&$1n)wA??Zl#L4HkQe+(_#SU7^0tr!T+U_%Ur6Jf-W3A<)J< zhi#yTqf|_boaVpy@N+Ea?(Z>flIFzl9)EoSHq}GWW*&A~r?aaO{CtP;H40yhuTe5u zzqwz2o{Kl~vymizeylnW`Nl+FecB!2uCu|x&wcpRJ_xLd=!Hw!>aOir5d95fJHY#m z;B_WzX&S-n9@fbv?n5sFn`HKW>Roc-(L8uGpFED{*Z}ydo0{N}(6+7C9Ycra8uhwy za?Nf%OHS1CZG92*>>=!=T5@O18P%w?1DopIj`CgmboQUX*9!;o$UTSnJ}3Gbc1)6Y zWAi*ao_Io*$LA?K9-B+D?3pKA+c4dZk1xP>Y zu#UDR3;h0)WPq{jd0%}<2JB9~|83;ouqCkiCw+=}O#3e5A8(muik!m*&QNz(pRo$fdq$J~qhM znlY?HEQpqi$B^Morf>NzZa(ZEL!7;KKIa9pPfqey_~$m})UCvoI1}NnJHw^>iKBHm z5ANLOJY?c&M>s<=hx#$iPu2OUZMXJDYyTDF$%zUk+4bU^dvly8wbsbWn_lz5oA3Vl za6y{Q&}H{)^l&O0Q+Z+8ChFU7b4bU8*zd9(nVy8-)W3Mc;z@O$>_ajmi4Ge>4NxsL z9*?o7WFB)XpSh))am}j&YMp0;r}jJ07peKAT360~^=$utF3ilUt<)%pSJUZabOv~7 zzoVQrgl>(PnFGL=552}hucOof-cU1k>VD+bnfM`V`+?;p50+E;A=rm+Y=BQTuwHd5 z{VE-^?2|toeDf$6NeQ4>S%9^o@gsWUn2HAS>m5lQeaIP8;#Y3ro z?E1Ge#NpNb;BevT;t;tb9Db61)8lZgt=?sGh04FoT-7(e+=4#0dBPc8t4dtuvfAj!-+rI@TGx=MxjZI6Vg4 zBNJxa*4+?quG>|H?i+;6EJGKrzmUJ!h%@z<`-S|~n$NPPz{0h92Ooz0o2U`N*Wg(a zy)Xyga0&bCyD{Bh^mFL{!}{Pt_XSb^2f$aY+yVwT6m|}vkhOKUp!TLX6*FmH@Gn#&iR-cQC^x@<8bW6 zE|WKgCtv)8;^O{TPge8;V?AD6JU!Nf{5YsQwRG&a8N&z0*O+JN@wFCoK|k@e9Vxxc zoRMDMLmfsd*XeqBmS^kw^`d9z8u%UnHuYijB6J!ZT1L#Qcu@cxdN#lg8}HagAL;EU z!FQ6i$)g7;PMg!Y1RjZ-SflD(p(X3}EiUd9Et&VJ*zgpsNe-+zaOq=*w#_eEw30Qh z9eJub?%VgO41J@A@w23l!aLv48Y$pEO?hg@KD9S*rN;R=`jTw_AbDDZ%^+Ez^}yKN zFRVvrvBqIt(Kp>aBVPP%cf;8{+r<2sotht^=vH9W9t&mY={WPWM=zq=8N*9Fm+zqK zVRjuvy&L=2y1TQ|?q!lgl0V^Id#>oT#Ie71>0gPvT8rJ z#TL)Dko@0`ebMSHe@eV78$xyH8neCDH%6{~inZ1F^jos8pK`4;b#h)H+;u(YoNC`S zBSWzJBv00RG9(NBQ?ALg{S2M|^8__73KbYQIdK6SmuS@+$c?qZd8ngWb;6p8)$8w9Vhae28320y5zw2_XgCA zesSNpRfq1{_RM>uuW(+pcuL+6FJS+ZtJzTlJllb1p$E@)Xfh63TYL#Wv*D@s6n%`Z zW$-gr_@S+K_)2g{u8EGS>*~P1b^`1-gw3Ozi|h;8SuOBkJ^0Z6KucWvW=AT|d7CTC zKL#u@uEl%3@|-0WKh&KgH;S>1t!xbm7TPDqYixVL5M+$XVIY$Z7ELUQjO6`WJvd^( z5d;p|t3eMATkGHA!7%|ibX@`*Hg=9b(A6UQm^xtTRjsX3UL`+^^VVpyk^4)SkIT^S z%qim!)!DfT&-wZ57aw)`#m+m+yJyjFy8QL$W=A4-m79(I{@Ua5#`4m-64oM6U+kZo zKlz?pPuxp35<_Sifo!^vaU&m(FHe(?#1c~VF~~?`k5z_D{(l^Miu`wF?i=6wQ`z>$ zEGKfZnA-7oS=;)0Md=cqx%)0P&cDW|hgXzuiWegfFL!=dQ8zeJ$sU*`?14EKJd6oA z!~bmuXQ90tcHyneHSzg)8E2xB`%A2WZhW7_UTNX`rOsKAWqf}Z-)pY?k@*JyypV;A zfiEYUZ&tY96rbmPQ`h^O|KOW4;u=~*BpWXbjQZ{HcdDKdlR&o3ki9ljf6+_j)by%t z0}E$PC+b;O4-6q{!?!q7BU^!KKk!_}_sJ*VXLuqZd;q)ZrMqiCvc0?Z!tLEjtv8`g zpy`@O%VBu)KY8~}@P7n-vNy0RQJ)h@Jiz_RV5H=qp&5RLaM;rL1mO9r?FMGT?AghI^vX7c$&msr^1fd23!pmtFGU{NrN>=dqq6X!iSLpMl5# zvmd0pR%d4xdwtf^H*;L)LqI#~Q|op~Uj;+quIzl~H8`jQPqoJKLob>fvqxx-OPRBn7hsZ zwnM;nb_O^GWw=-WUib4E`KfyZ_&a}l_s=Yhe;aApEm(kYKQJ}}l4Q=pYpZS^Lo`28S?d%!5 zO?$?|Lo=ZlF)DY@SnM^~sG|bxDGI&Jd6m+m!1D?|r1)nqf6t_?b8K784e_Mf`ZMxM zZFTW?1F|FQV1-#@zX#cTlzVah){%Fxw0|zccvyF~dLR4v%D$U7|E}Zg1GT1`c$(yd z=0vWU6Is#s9LD1HtGwYJWWDO9jI8zYnH!dQvXy-1cj@2ZpN(ISgC72Tp3YzS9cO-) z4}>m5s6#>yhjZEUk^QfhK73B3l^o0`Z48}x(G;xu56SQO^r7=X%-JEufkUinInF*?De;{>T2$_rGK5lP>=M zkhb55@Spb=^l#%Et1ihL-_Tj8vdd&AqARZ)MqSg$Ah95HisGTU)D(;v$Y1IT#tgwv z^sT=Mj7I)`oR~#1c?;qb)Ctar-HvS7OCIYE<~?#@)`iaVW6)#m^FMj`W%P>nI(~Z5 zyyG*21^#=tfhgUxLTKvB)-#I7J2G8nj%r{vF`zyY6+x{EVb~$@xO>@G?Zq=n1M6aX$H&X9R zbo(a-tB&!^s>V%}d&KEiFUAX>z8tp#@BzS@1xTHUZiUd?Oc>%6lm_0Co1omuR+ zWnmi1^QTkKFLj@@es>!63hubVJ9ByG@zgt4n0Ly__w$a2pYYE2kz1=$?@TuD6p{0^ zuqwa1IQ9H8_c?nifIqLFg6KQEvnch>-fPjcfBTQlT1j^aNaNy~GnEv<)lb7T2#o@3y{JHL?@bBSL~`(@x79|+!i zek1#Vsn%9Dq2{z|^i2M+(&_3|t7mNue6_lFY>keKN6D_4*x$;zDlVk_YLWKL@Zw1& zZ`t~uVDvG24vjb7bU#P(xv9Rdf79scV(CQV-_++A|K{kg@o(z$digi;3j?g933SCq z1XzQWwX1b}peuPltJX552c1E$1X(Z$%lrH=?``?|qf}k0RuH zAKtrZ$*zs)8f=a!F}{m8!h4(Gz5B7TdDc3<+{b@;hW~VKf%sbfBRq9w4*a}|_D9pc z;x;+xjM3erCB>xy2?iX?cy20fRY#~2y2;sZ&((V9Jt%lhT9r``C#b*i1=T0Zh(WP!$5hhP3k zklY`r4;3LlJ{+}tSo?y|@qFX(|$I6sYA<#jejR_x(9;K4yWuj>xrkbG|; z$M-3&kyq%^?C8zp%xCcX$RKbGEXq^Ng3qtzTh$)v{+@m8*NA>-1&^vBIKrN|%rD)0 zQ1=vXIx;+UkGW4gM)%HVE$qu~TkhP|-X7V}`{;9u`Ydsdb*RsadiqrT&yhmg7JC=c z);YSzyL+0{XV~e0j-KSZlUa(z_2hRJ{ats%>>nE7b?w0u98zS8I4 zx4^$YCS5>YZasKX?j;M}Yh#@LzR%aZ1Fvn2=``ZfsX2F@*Y^f*&aG$8Jxbqg$VS!6 zn>syYWy-Im57mQyiFb0~gS&=0ld;>L*BX(n@W4KJKyi3K@BHB={9t(DrG9uIeT|5T zJFX!%$Qb=~=6)Xd_4yfiU=2KgE<6kt?;F z{w=^hNwN=$9~Nsvu(x$o@Nc~ends|l{59PTm7Xn7JHt7K&o!fVnsW?$gnDD=7_xK5 zWcsST)7>MXb`EDx3Gj8DjVaW-yx_-^rR`ke z)vAe8>{zvO!h?Pb57&YRQ_rSn#EgsZfvj9Hwo?YVa)dQ|S_9L5Irw-0Te2itMP4O*!uWC_#T0%W6r0)Eb`b03rRQu@ehKY9lhkP3+dW7eh z@Fcsm4Omsjx56i1!NbA!40!mKhlj-J%2#}uSZzl6y3W=aEM?4nbZjkrfuAGWRCZ?) zJ)5p$UqheB-n6!70y|Xt?nnMLc%JR~jA~jk=vY%T1f67i3V)-)DYEp1eq@?~`BT7a z`~4u@D_E@VT@DQCy4Nq$)c;-ZzhrndG~Nwdvh{qj-1I+{{;e!m`;tfP(6F2L_aW2o z@%pjzPWPp2ja`$_Xtb!$QR#nw!Ddz7VQLIyct;5sJ* zT+%Vur@jdRbe}Q?8U2ftKvQdv>tKSQbjD5iVs&*b@9~{hN zAH2i*+B32b@RegLPR+kRKd*;>Wgp6pQH(xbc543pNE-i2Ps(=^O|9?L>hbUYp(aAt zs$*I1$x4-JqwHeVWr&Keoe9s&_v^?61Q3xo%!s@ea>EFtppm7}9x4wEHFf zrrQVUeJQuEJhGK9x$sq+riD7As@+p>cPJ*p# z*h5`|wRhzY%ii^BjSOz?1UG6+-^%7)O06F?7>hPAPT5nUm+G1}gRjRteEHY+X$?!N zFW|O)WuY7VG^pr@28%MZDR|U>33xX9GqPS#xD||>*&AsNF|f^yv*ZuCy?iHfl4h-7 zLi3CF4c_kV3aS9-mU1Dw0dT?lcGtn_s)8Ng!3&4FQy)g?q8viJbhHn6eI|i38 ztgV=vfrhp=U=%dGj`fE*tf!StFMX!pqD3jWAU{s_`1mIQulo6CXFq*+tZ?V>M&y9v zrINqmog(_(i0oHQ!bQr1`R0#el%M$9Q_sbVsrS+zM=OA-1^F#F#Yc87oBCmX+c}!D zVR^UxCa3ENdP#AV>#`D1+%+mlg_18;3qx@;Ixa+Ct(#KOI$fFFK8ePKsl#6>ZQr z##Z24y{~VjSM}Wy$y{h6nLC)8g5}t!EBKZg$;c|Bi~94^O#PUlOZRZ*sIP77r^!Z; zujYquHS!oAZP7}`zuc3@cHWHxXY$dk&LkgW&hA_SOdn9|W8nA=aAca#!!ppq&S(F; zx(*s7tB_UI$eAaQnU|wKWII0)CiY1VzY5t`4GwQwLVV7vF%=&@!G3_O74X}K+J`FE zfG>%hVE#s0CdnTNbh3Bm4DF99oVfOzYv0X=_S$Ep%Pri9rBmiwxcNTz#@{86RpQtdhXxqt#j=bFF zSE+rV-laJZpk6ja{3GAP8+Oy5$w{@rlY3`!{?i?9jdtuIo}&+x7k!KTo^q+lO~lNB zZ8rQk4<0CkM;~L|U|S=4;(lm^@6`eR^UKRi^Fy3%Kpz9>>n7F>45HsM&M?^sUfx2d z#Mt*#`(P$mE918pJ}%w`7UR=ElXmPHwfPoszRkEeq=Q@yJPdqsU`;^N$Kc_|YA#tc zFhm?7-_;$q#%~ezUaZGuZIxT&N6mZJSmvRHO=sf{G_VaY`v+@3SDne?!e#0Y4KH8P z4=>N8ec5={UoiGLF!dP&G}qa=+6&ggJ^*;xC-057SQ~P8%{XI&Xsk!E;mA8g6d&!W z(IoE$pRa>fvK1v0bD+Z>PbTI-7s8JXgZc|65`7N99F27Ca!DMZzda~@kls(r z`P9&nJMehyl>_Iqj=M6-hU%)2_) z5IJ>)k*A(Hnfk7p?~1(n%6A8g4qVY^zS{5B@}0)iE4Mey>1y%TnJCA%|6%N^T=;(= z{67R<8^(O`)|ljVWv+k8XAYMU)@!a z-O4{BlUBfAvXSLSO5U}A8|@o2gL{H^6t&>3Lx5AT0@F0|yi3WyuJrP}OKqMPSR2W| zmXPPo;ajaoRgTx#Zr=4$zFEncS8CV%Kbt%beBDT{C{M8{FNZXZd8<7GuMN~0**l2q zMlW~7JtKQ_bjIMZZoZ0Z`pPk9C|WtsJ^IQqXAoOCuQqJo;NV!>581DI{fehvaY9ku7fy4oUwNo4 zu>QT}*xb46)*ad(T>qZ@&l-bst=;APMdp{qmwvlv254QUcV5w6Z~q5=zYVWv;wSOZ zRT=n5=Vm*;f8xV3@VJ+j%wWo5Bbz`+(WIZ{1DpzH@ z=M%>HPH_>@`a<)){33UKVJJg;L26v99LL1!ijhIcqKLa+a(JiubAP-0w(9rtyzDhw znw&SbTogWB#Jiibb;e_Or(n7fz6o)*oZ_ZOnw*7uf$>O-vv8$g1=mS%U9TJvxZVe@ zYvF}e)RVcsn+v0KwSK$4U3OHu+M>wTm#rcm{Qi)h{W`Q4Wi7h%Iq=5X!x`6cKGTtV zs88az>npf*K(3AA(Q5>{`$Fc=7<|L={AUcIrY!dP&2A=V&|H6_eszVZ@6L)o#rpQy z;3*t9{zI+Dk+1$1Z70VN)8rk|%HMW!1Toc@vr6sr*oEF6i}jXQTw7yiKm5`HY_^8_ znTImSAKKR%xBm7kIBNDQNIUQ33F@EGW6E1=Fa!!qwTWo7#H=b+1`pogrzHyt_n zMBn|U@JA2YnwJNb{$=}3**?dsPjt8X)Y>uiw-vt3wBOV{Kkof*2tAtR+SMujbDIZ` zbhcvq$f&LjV_n}yI(#I&*?PHje{Qsr`h5#WzTm(H793`u&8y*;NxbKT))bj@R!Sok zynh=yD~WyE0<7}UliUax7bJD zh~PLCeP_7qIo@QBo-Tb~R6Woc(09i_d2`!G-($fnQ!ljY5$c74*}dw86yI$nPNcea zQ^WlgcybN+M{X&0DSJVFue<#EX7xa1${=LQErCI6 z#yRk?RBTK{%_@vl}mm4oBy)UYU9GHa_NW znQxuQ|99Y#-#$cqj&I+&gL)p?clTo$5dE@fa!1(Imj^ZH_%7(pd(FA{R~UDh>rYiv zzaV>Bw#mn#kFH0JuO1>RWj(eUBgxz57t@y!~s9R|xs14mWAL@$F!-J2*p{)YWR&|3rMgu4dL40mzf zYGlxz&;maV7|nadym$0It(CX_nriUq-{9)1NXt-o7W!?RWBe{7j<8Pcz^euGxP@c9h0TEP)SNuxn?{pL4v$_?p?#H_3an z0N+w3>p>JeEzeTO+ z?AhR$@AqSCbZ>LqH8niD0eIrKLrZXyV2q}AA9{X-JZuYn)lHzDt1wWyIK;k9x3TsM z-dzsNdnUT_q7I(e?db&f+!x|qxsQ7Izbvv8{I|htiea_Fm-5ryym`)=1n+rk!PXVM zep%$F$of<9sO3xPh3JyLd?}tx+y*|O$?^%{%Q^mowqQ>4a>mdG&6bZ1lr~OvX`tWj zw}Vd~ZiP45QSBy{To9E#Eu1|IuetlusD?5a)x5C3KL$_RYdsTvTIsI^oXuu$8fqve zcOx%|l!Fng%^t?=G+bH<$84Lzh^*FgtM$Gf3p)@_;T zsJyql|Q%Q?$oxoCTnkG2!~r){-Q9}M=< z)~s(q_OwD@)eX(&y%cSS50CtVXbT@`t{C}qM{oJ#r|qQvXnT`O+qPRdf5@YoXeHS# zx`|e@`PqXZBi;U&k5*&3uArV%xiYPv6266d;e3*Zb35O(?pQQ?>>6z43Xg7_^+rvx z@j2wv6UJ(`NGmALaX&*Kx><&weTm11|E8eS;||B}I? zdk1q=b2Y&{)wvwldgoDS`D z?ayE99p$it?8hP7V2h*kk3-El;P(~IKyCx)#1+thYN)q_ornY8 z3$Ul|W?f0_YUIlU?*2B~Gin?3>bM`=5UaR_IQbIh&MNK|5ziIAR(p6!fS03;SG=iM zuFIE~MSgP@xqZgk`T)9uako!bd(f6~8~(aF+_i?-?M*e~7AieVh47-}$W7Ud?`@m#`ny z0P57**-v!L**&$N_>g8z(lgjFZFTP2dd0zHqpbv%9oPn{m+QC>nlDJL30RlDCZN|^ z0PtaJYWvhv%9pD~x0!MD?AvR{qMF*38V_S=gV$0uwbkHb5_smjwui7iu{YA|ef|xZ z@7Mj>%hvNtcck_edC2t%pJl9;->eTqoF>B_vVJ*qS!5Ql8Cx(-W;W2CvH!rG?7#K2 zrF@Na6|tON`}W4+5#?dDzI-7$oEUWS^U!VJTy#HG{>kF&@A`q~eh(gh{MVm<8tJVy zzly%Dga@Sy<#RmuboY#-tgpIc{#{e6&?n`@xPEb>dxU-d)9><}^;F|{{uZ`o)nm@W zvG8TpV)q=nyek8xf1pj>-?Nc?D>Cz#en00uM{d5O-!C`|6=TiAo+`ke>d-yTcPrY^ zJtLp%{aTnR79mv`O+6Z#5 zpw(G;;05|8{?$SJD=!dQlTZBXRpMXTAFGD=*Cym-0z9`e*KBN}&6{f@8IyQTHNTZU zIT#-d{XO249V%W-z>8YEQQnqnA`$6O69%!M5CYUGKZD^Ibn;uC?cScJ!ajwS14P=mX|jHM%*`wOs43|M`8~ zlYH)zLm0ulyAb(6?Dq#>_Wb;T%(o%9|eznupK81WZ^}pL#$CmK5Ef(mr@6j`={I~EnT@&`rA7$ecw1M zZ;HhKjLoZSO4*FJ*Y=fv8oyvl!2@imS_s;R1Dk3gO7M3($PZp$Q!-Vx5JrDj`r>i} z!T%8OKTI@W|DOzW&2(OIzM*ALJl5>xI-Rzlr)W9Q(9zv1Qgl2^bVL^SqN8Lru!@Gy zVZRz0LL+kAoWV%U1$@4PEXh<0sk#zFQ|UZprGLLfi_f190-yAej?Z8wd;*8TC$w#Y zM^g2Wd>;pH)k9{3%XV-%23)=hF0+ttial>YzK1;7Hrx0Dz4h9&{lF1_)TOImk7TMT zDMv<4L#>0#*4898G~x&tMG%DG%a~bu?f{~ zvnHCekcDSg4mC@D6hJ%Xe89XP=-dW9^nHnw)tn8kT7ucl)9|yZ@v~$H*&4mgjG4F` zHDRtU4zvi5LkvNK%T zR*Y;J1OJUj7K!&5v(|hlZq$lwYQuMUMt#Glapr&GCYy)J%oobL2p2bIz=h;>CVX^P zPwcFLkNx@Huxdx@hDDnGe4=4ij$1pjN508D7nxl2tdDYr<@$@v8J5cL`RSzoFQNaV z;NJ3I4R!zi{o=Em!lj$3o6Kh2WvEawtL)C3;XU!gY>zLh;R`o+n0DSGcoZLI!Bb|B z4)`>T4Bv?CH~hr+;^|rVAhFAxU2*t13BM;UWUb`o&N}g%pU0l~j}r}riht3azd!Wz=va+w+o1w-k+SLR_?5R*UQ~ZG&2Qxl{rKHTz7L*#KFOF9@Prw+ zhnKjE=RSD&d+@;gXX#4a<9>Mk*P46X-NEe%cu6@+;U@uZ3qRuQaOy6M#FI|s&%Zrk z_WrQ3~z z&Ml4%oHjq{;drIjm+Gv9H-FBxARJz(94NRsIIF%~I663cMLD!7Ffm27>#!#ub+nOg zuia|sTnlYp1BWGxs$XQj?aIC;e7JRd_`yaev|umo!9(VH8+)O~pxL|ht+r&V>#yp- zEDi1aaOu~xe|--1S4Yr?-;sV9(Vf~$S~hj}?W|)WcfQ`^7lQ}8 z2MV%fW}UZ>ly@)4@9d!!i$ZJp8+INHt#nGW>5usK8`-RrR-91zcE#@eZCSpZl!1P) zve$+G{KxDP_Ug|*KBYBS5)GBGmp1#!DJLU*F!Howag-n^SaT#9+2{N~KC zQ_4JeAsaua(aBm^?ZGBk9PYIQ3!`&@TRyX!$G7=$uPt!X^UT9jz58q?Jfd2>0%}WE zQb!|RUXN^=6GrY|>ilj?-K5B7^83_kKCW2Gjl`6eUNr6S(u-;j@8kJC=i$#ns>Ek6bJIoF3vHI5`Qukl3I!fld$&~d)T%bckN zmY0ZYw=ni)*w*V=Te#;>-IAB<<{}r$h#eNeYwR=MCEGyvUHK~;KsX3SZ}|5U+COA+ zjP`^>%OeB8SsWRuvr@(1{o%#7Jx8`ZJZ*e>@Z_$=est#xJBc~aw(JlVY`d_+m%D{W z#=0EdZ->?$@X66&Uh|d{t5z#!rT543{#{O>xn2K*xy@rvtXO>%-XBBE<_P(tmv*dt zs+%#+1eeSwqZ8VYjizoIJ^MIzN^FcP^M#`}C7Jly`(0fy!6zFeBdmO=!QS%g z=Pc$|B5-^PGM4(WVUhpnI?=Glucx==xHV(+I}_i>L021C_qz2PiQvd+7UK}TL`VNK zJI_l!m@=KWq8c#&d`~2?iP{6DW{o%Vth+YIeqq_$(Z2_sx?rTD<^6`2E@J-+_DYa$ zE5e_M!)q~c>QMWo^`!@RH!mGJspQkSG_<@CqW&RAqWwTN98^Q`GY`gev#{x|rE(^tT2L+iw5d2J|0{YUB)Y#X_J zn~N;T1wZq!bK2KWh{!(64fOP{7~ea5Q%Ik=Aveb7gqSdyY>ar@WiG{6hFzwW)*6{#)+4qqC)lfjhyt6?VAGa9>hWocKaKt2^Dlzf$+_^vK-fNF+mpkt-5yvO+#Xz)z1{yz{2i}!N)yu=-%U5TU#=rRPl;QzFZaQ9-<+|)liemB<9qrauIzd`;1*sp*uW)xiM=6E&NRNo*O z6oba>^R%PLDPmmVoudNIladcHB)|NMA+r+ra(lr08g!=QlJ;K} zzCy&OM|-qfkI#soxa&_mD-SYe##xsQE_pwTvFjY10D2>NySs;O2lKKBdq8&u9rLnr(|bfSHxeb2O)nPi~kSNWg2uY8^Qn^DY> z0R0xh*BIv`BS7R_ejQ|*rTD7XV0YO3-d(t_LTEb+%86*Qf*^vE!YG9YRp;4_lnT* zAI2*yw0Fm3#nm=4_O0My19&LFUhPXew@%*D?h0sU;&Ga@^id4$ny{+`e^U3b&A%x6 z(Y9dO0R1-l=*OJC@=oYS%(82PM?dNsk^7#lx!1Ebfw2z1O!?`Ibme|JUDNSrXehZZ z8rHjVz1-4qAb5w4$@*~VIv*|l^xSS@CB5aF_8^rGuY#8HvqjJK@c5a?1NqdlqfBhW zlTV6&SX$44){P#mueG!`c3UtyOSHyL)Ay<|Q6Ad(==kIXPIfO^SK&*=sGs)BpI$hD zuTOs7r{}=O9&lmh`%z}t4foS& z3SM^1nQ^+`#P5%rIqvbftsAv--uqp^UT0zH&abm)viup^4k!k-HXnVdy%X_+8Q)CS zlBAwJ+4Jl-dPa;%ah_IS_ShZxGYIZ`@6mNOi-Pbag>-LG4 zL^{}$T{tU}P7e={%sdw#2)UtnC^{S8U|8gtKb~kvFlV!{^PXm1@N9HjR+e*>tuf-=@Y@l?LB_;LCc@)dM4ut-oa+o4M}QBnRz0A6B<(Vn6aO zAD`U6|E%meEANuf<4@2=_L#A+fnB^Qx%dG?XP(PzO?oO2Wd;0Rp)uITNvjejTms2tp+*+(93oXGiUxTym-YPXl{^Yp<_ z?&~f8q!0S7&o}t_NGi7{`$@jv^TG@E#IIQE>O35N!t6IflToiiwR+ z;pguxnppo-`Pe;A6<`}JMwh#C(bajz4nFKee#|=k#K1?H>)yWF;Axh4si`FL$Z&Xx z7-X!thnI$nmkKiQ5mrtBnv;bcJGx5@Qu{TrqzvIe{kMd2SWRQLT zdH4PZ?h{|?x&LGL{@J1hc0=lY@4njqn%W1K<>IB`L9@T0?i(6-F#>Pia#o33kJRUR z8XS6F=e1j8&N%si@4Rv8yDxa(89aRR{78aWU!VT09JyzB#FabNMs#(lcv>_W=+Wd` z9z9a${jt}t|GdAlwE=V9Wo#b2dzhHceNNX}*)sFs6>ulo#1FgrG8f$-e>sdEb?0c% z)I`a~D`3snYwUZG4KA17d`V;(I&`;Zv*cJEiX3!xXm)hcC*E(c@5;6}d&JNWF*u_` zwg3L>%!e}0uB}6dn*I3sdmb?8+$DSz{0Qmf+MPxhZ_bY>ZmDyZ+-HyQ?2(^ln=drXl|L}EJ&)JwPbc~1mo1*$=p|Er2Y%O6@9aJ6 zB~y;_tO=c|8b9@!M5ZW4lRy@jKB0^4PkpP;wbCnT^5Onn>??c<`S41~D^G1fPV^@m z7R&xvKQ=O(dSfdaK7CGK*>LRlf4OXkw)d6|=fLZ?P^)t~vf=5pZ-ad6mkrIpb*8dm zd0LylZE$773~aD7l?_$GRhn$r3QT{EZ1`*%eEWbeAbg!dHU#eNEgMcE8?3)yL*1r7 zpH6(EOL1y+){dgrdvw+`cygxpK!+b?Bg8H@dToc_N4=VN9NA&^neY26U7nsI`lO!w zbm9b_r|$o}r{B^2_3LZISGqRJj_Q_t*6TXM`)f0f4WAf+-64DaLdUF~SACY> zKPrcBjBKrReT4MqrD@N#W;u@CF1t(P(pZ0iUlPXm(sj`YY~R>u&t~C#K%Oy@1(KgZym`v!)>F_A@T zNAdC_;ZlQB`>f8|mEoQD@lKQQ&74v#o?-(@4J;kmKPt?2hP{cD1 z&c4IMK@L_|5eGr`ljG@fOrDfDNO4x=wl-I`+Iv6xnu&va;CI)iefM03@4CD5wrA>d za@x1w=36u8J=*@)0++UHeY6#gtvtG6SZ{fx*p9)m9|!;+&n&VXv2@#qmrY zNb}3+=ANAX&|ASLI81_P8_$c40I%S>v59p?UcB5PUOv+~{zKIcB*wDA@)-l{K>^WnSVpwl&t_>a~&C`L8vOYb+}FC46(&jNBC>Ql5C>Gi3& zSVF!9-;VV9R4tZb3+Z@%Dy`ov`Yoql^DX@r({C~TswPRXmOt{$(2RR=VjISO9wvUd zI6B4SP5=HepZ56F*w3E)$uTnb&(b_`i*p1{7jPHAA7JhPd%1>6_QGTjq zP8{D=G_Ls=@K#ZyD!-cdXl3b`K$&%8J`DSXl|XNrhz zDF!+mIiF_#9Q4IN54JDum*314mn2LcS5HO@~@t3*hBqBg75qDjrQE#+x~eBnp%1DYFfRw%_k^7Ct0H$O%;3J zyu}$M~w3ZhqnYZEu%y;6JrOVHI7mWG?q zDW|02ug{5e5a&^QMu$T~t@rfBu?-FX@H=RTuJZib9vU)VT^gD=wo60FZDe>#HWHtI zuBEqZJQo^%Tr|{tXU?X_vH#vjzsG&^QT4p5ili@k=Yww1USQzie$Is{Sjn0qa$5SG zrMxvU=nc$4<*${iu29Se8cTn_?Co>#2gj?gCxdxpMiG@>WI5R$7x(E-)ZCy@7^M~$RWm*^Wh!r1l1b!$;;*e8*Q4L zdId6)_}wnW;ry_^=E17GYiwTT-0a|I-SPNyvl^Gpt^eT*y>qkwm$$QlkE%NJ|DDX_ zjX=Rgs}|ZM1cZn$_=Zs3W=IfJY_%&}x3#+j65gb5uDfenY!gTjA@(mL{g)MNK`|=R zx>Cg|eItsZ5Zi+G-|n{CGA~IcA=rwwU82GKzrSRY5xa)xF0?+dcor<<9}@O{Ey8wX6{0B7P8lVT3?(+>y6(`$7qI^7Qjo- zX7V@N%bCLoFc(7pX1~ex=ir|YXSKPCHbq0>_b=>WU~o&_R;-S>TJGh-?ND>xmIwaH zkJq{kUgg^-g=^^WbTot47|+;wZ)-QVGVlEz54T%AJ7oCaO96L|5Z;`@x|(xoQ}DlN zVTUhr!F(J)n03#C`C*nH?jh#t*ZAP}!)*5yzcq^=1oNZtg!F=|a|)to!4D0;z>ep6 z{?HJ7k&7oDOJ>Qx#}m1peK70UVLY47d%52GX4ZTC>j(RxS1xsJ!XLamnY9PSoXM6Q z56`!Bp|(GOJsiin!g=h2ruy9&dPD2*$Atn1WGC+8-njpC4(Pt(rE$%^`=1S%`$kWL z%RGEd=1nh;?V?5(eVVi8f&1C>>Y_t@mpwDrjS&-L(6c-{)q}MS|054rYk;*O3)UK7 zZSY{N@xfXHtm*qcScAZ+J{yTu6t~rm(mrM09EumC8kl${+cz%r)>ka~V}E+DKWxkP z^5GX-IVZR2 z;#oiE)7kq~3-$K{$4sq^YGlwA>Gg2yZ#~|=7`@IKxVUsOeQFLhK@Ej;vv59@wY&!B zyInqzzOy(l5zfi$2gupa5YFHHn8EqLK)&WuUA*HvYK}UM_qssjg+y9D4c^bs!rkXR z+&$^xj_}RIZ%1l^?)lIQbUt+cp#6{%Pt(ui_}q1Yoyi}$IVO$cA)V{oIMST!Jj*-R z`HRcAt%-lwtb@~bB zK|V+x)Cn*6Nb*PUspI^ljO*Hv^OLRY@$Wu=k$Il87|in@#h3P;?c11s<~;Mv3}R8u zAywi}c+Y$V1bXdEGta=wJX0F|A~3t{U+lI|t%>0IQ0CpfmFaiSb=#+AUh`L{WuBS- zmGm>0yX~Wo)P7;Q{V8ty*f+JGmwC7Emh`)qxa||C=$U|TjPujaRJ!fs|Nb>NOMtH# z?%d9H)uzgJ{gL_s`8zYHc~s3^7`yz*^!pdO?-Q#gSUcFAfn(>@>1QrA&jhGJ6dVUL z&#>pM#n<`fnK<+8!u78*&wOQS`kBe*nP<^y!q?9-&rCm`XIeRnwAFF@dH~y5tnrwb z+4YS(S$`_}&1ZZIuw{}t#T^ea#vgcNobQbhp6NR)-S2c4e)*4_Gawv+gXyEvzhB_~ zj-MtRC_eM}WM^UenW^shunP&!!u$gBDc&>3falmT^vX=uFLm684!fPtZN%BsfY-A} zD13kK!_HTpuzQ52Zg=+xecoBMQ8hfuQ7GQjI$h}}|NnYdx?tDevEFx*))-KKy^Qu3 zBZtH)+H**A2N#cHT*R%~(>}hz>8tVHYnZ~`qTstB@TJ80$*T%4(uk zwT`n~)bIHhF(%^^1)}p=uVmIQ)veg6{8jAnaNnoFOMC-*ix|~Bw~4&O`2!n%%DWBB zDJMUCe4A&zOPklh1KDl9eZjznZM3OA-GH1Y4s?JEbRGz@#b3ORG*~1@gDxdD}|8@GOPSl*mw1rrqp_cP!&|el8GvPanf3RfFu<{9C@MOOQXH^|htsuJBLh z>RkEQW^ldLXVa3Q$f)>WoA%`hF~dzfcMo;O@+qiAob!^q?nnREdOpT{davOhGyW$_)a%m9Qkqyak=s%4JNm;PPvtluQ5jAHradW zIQjE&<a*fUGKc#zbdAjUP zFW;2J&MA+o-$tX?&}ZlB6?t#<^Oa%?dcNusDQm-^7Az>qj?tg{MOzuh3HsY-!dBeLw^4Hg@g0B$DCwDDbd~~%_*iy>c(K5!{3f+pJ zn~`z+#E*(*UcV+UNShk3^pV!Ji%z0VcfCuS?{LrI&&-$9xbwA3%^J$V`{NAMz^m}< zz%QKX1Es2c4zZ51U>pAAy5`1VoI}E#MnxbZzqO-@Z=P3udk4=e-;w|~%1bL}qVo!$ zWiJ-3&*%VF&9imTW(T-gp*6VRY9(=d?0UuJ&Jo$*0Q(oLpuSoCzf}VcgW*00ogd@< z_(aAy*_&^zadYT;_uwDNEwVgWf*;w!tH(6X&uYc8u4-=3KLb=m#XdL^srn(1}r z=lzu%=Qk88&R=KpEAq*zj8C-P8w(15>%M16t zxz&km&O5F50dVkUg%e?MQ{Njte$#wFF|mrj9@*WyMQboay(<*Q!55lC90$*6PZ-y( zhN3UO(7%Bi)TwcJWgN1dWc>AfvnFTRv%svp%XmKg-#df<$CZV5*7GsHBeM%wr(Djb zis!Yzl4z{jE$JLLKa;8575+4~F+RNQ9|B+Obu?%^;`KZ}4Z!gLaf=;~9j6`7%w7E( zwxAz0j#_d>l7Urx@4^SI1zz!?;*R-@X(gY#8NcPrq2T>vou_|G+;e$ESNn$?P6vkR z?8CpWnl&VO?LVY>TmAnmu;u|@ zIUjJ_8w0m(!Fj(D{Q9>2TmIT>>h&}0b1TpftZ6aypHI9OEDKK`&xf-O_SFIBZqDNg zj^`d9d#^(GCUK9Cz1Ku7NANuE@v-;t%clmXaF36@SEGBEa*vO_x0P`Rr*V&uy%*HI zE4jzV-m3!_!7%su*n7KKr|Hx>k#asOhc&+P^Pj#uomTni^usLqs5I-lGV9x}n1a5# za7JHP@kiO&)Xum$g%0Y{Co+#HyP{g(7qBbKsLN44$h?zu?U}A?lb%fr224yQ-mV7* z*_>?pY%}toq0bg_HxBEaW8Qj%M&{t?YS0>fwRZ#UDF(@IugA!HW<0VNX1)DHWDFak zwJck-Hoh@G@*;hxuEOf~3mIP`b* z)J)YtlbMa!7kmWiO=~mHxZbTX&^=Rgg3VsgzxgiJn;6;h@ML@(pDyhHHjVWRAN>*| z!|6TfcIOy>CHXi1d_`Pi1_uM^xB=!B#yE}BMZ>zsKRrDteE@xBN0&1<5bA&Xu7+T6 zna+5Tjk3Ru>7QrrGyb`u{xNrL!XMBxstxR<22ky*p9^0>AAl3#P2<#F2tibRUE_p^ z_T!OmO73Ql5MW8tXA*cUer=BNSIgenAe;sz^VpU=@^jeEb#>p>UL8TBtL$2GbN_Me zX_Tq!`G@CS8zwl)+0O)SiUh#5#{L#M&)Ri^_ZpW!zkm0!LG^Wm=m7qoTEMulN7kOT zf_JN5t}*hHSsy9;HHx!+Wxp)07l7*rkz3901f9e)bxvN3bglUx-0J@zc>NK0t%KQB zH@pK}8W?@H?>68_(6`_AJ>5I*N&=yizq4zH&U=V|0I zP(n?TyZ_f0s7*EdRlaEUKJ9_`S>IB^M-`=`yKZR z@~6mFnzPIva5(cwG+<6?0W|0`G$DwZ0*5JZp90r$p4AzFG1{;=KTSC2 znGTEd^~d8p2A;*Ue^BiO*V6kdfI%?~uzGr|!03CyISgJ21ctSgcyK-loT(?l8U1&w ze{+^ZQJPoo2j0|^(1yMb0gKLm>-E7~OIvP^x+vO-?)Af);GLBokEG95_27NZ2k$Ci znc%@YpO`@S%fn|9O)SrT6*xM;Z7iynB|?VD!L9d zHgRy? z34MfXi<8U1iSXSCp3Q!s;5No{DV`TEh1e@d`6Sh@ef<<@bMsKN;fy2ECIL>gPqu|) zv^78%p`t0K+Ji- ztdZk9OVL*ICfd*Hc-n@ct>e+Q(a^RqRM@`RqwR+{+eOz8E?}+wYVduJ)0Yn)b4eFQo`3Z07sq4vs8I+3-EsfO!b=-krZvUUq}UId*7$i+P8(YXuyNeWm9?325g~;o;d)I0oHfp6sbDp*OBLS~S9+&&iI;K78 zkKe1#f@{f=pFTO{(ZKU9;IZ+3!9tVbR8>ks^G`qnd^i%{Rla`J%@>mVc#P?Mm&4!Z4NA8%hiT$=(QpjVfe?>dzhPF%!6}8XvXvV&k zr|Y_UF7gPiQuNWeWZX2xTXz{c<+YbXr!~M)5y)#l1f8z!Uu)!XHv4w%g7>XFN@t5s z%7Y;X1}C5NXq573WadtIt`i!?jXV}{u9-_4jpsh>?CdzMRnK5&Zk*#jK8SLjHM|l2q4s^u_~KiayME3}9%P)9z&eoSb$YN>;efbnN=49!8uWD;fL0?`w1ic&I zh2DPukndGDexA3GWRHjnuPYtu45rt$xc zzPultSRYe+lE-D+ppA)Do*wLDcA^7MR(_saoLhe4#DeAdqoyu2aX@}AxyZTNkJF0< z3{1BVL8r%PGnei(YjA0I74s|1n;h8V`5>L>&sO5dJ%9T4D_y^Q=8Z)?d)_$bqV6~L z+;P>WJ^fd&e|vqvwSQMQeVj?t9xHTxl*!=S`tYU{Z#iQqa{K0>_qe@wiQXX1?m;z{~e z?D2DR?ZzSPzU!BK&%EHfHvEjwt#@~s`|kCReedq{UH`!M?vuXj?dIBjSNtqHuQsDx z%V!>x0~<}OdnS5v4EZ8*c&Q3-HIaB=vho%miN5ytyk8hj=f^Y;+i@oN9m9H~QgB@X z{U(xgnH=u>%-fmyKr=sM@@JX+ukwBk;qVda_~w@OJKHRtn~3Xz@c+I=-rktR-zzxR ztDM|$f?PoxH9AgXAo7Es+xl0>-KT_DT`)fH!KnP1!=KIHx%+Qt=7*Kb9FMG-eOwu5 zK99DxO^s;m%3G?oSoue@&YoOmwOw07%x&f&=r4OdtThLIVjdiVMSm8arDlF-@cu$I zCFCufV9P9UEcrKjRJ4Ews;!dVva!LnZ=y$qckpfW(G~b^z}*SlG3XT{ZV`Wr-m-Vb zzkn`gP8T}4ImaAh0f#qcjpJ3{7zF>3-Cn-2oP6W%!TCn!Rr>~B<-S2wdR?Znwf7`yx5E`2%;-AC$BTTRr92| z;m$dXuZH)Dj~6w%=Wgwx?LFkRyP&CZYFo&UNT0pP{9-J{9-{~PH&BE1kDA-49@V_D z<234JK6h56oa?$#;n!^66+2r};ozc8M@Qfj}o-&}xwar3Avzp?QVAs*3(@ zqF;Cpd0QuW8-~2C1TWRdVJY)*^QmE0o}vmHI52S5wqdaLwSf;r4!ubK?Z8@55IF=d z93tm-2wpHat^uyuz(wrWF$ccA1pd7oy>SzIqYAwN4_`-Z(ObRYzH5Wz23IqO8K8bQ zpLvvGa{7U)UmfD!jC`lBy4dLE{manJ-$iFUM~#SV^;JBt++R4ro|Ev>1nhJEl7-W- zTerrr{p8{Xqll9o4Y-geo%ehVKqNOni~>b=4Ek;&{5ToDtT6M->uQtm9sFhXXxQpR z>g|3*O*w4UXx^nQ;badu$>p2;yU%v{?eAXv4*&eA<~VDh)yxud&LhKpv+!+Z>a(!#wx8=C%(-giE`oDh_P~TfL!&13jn@fFANE27t{! zuQ~`OXd-$n$ijXCqR96CG+to3|v#^$>9M~&1UHKyy2%EyOyF5tsF%1PHBz5SVtth}7XFXiZ?JU;%K z8_Uc3w)ER(_$f0V?$%SB9+B+!QiEjlF}C?RZ1ZoaYmi_DIZK_)CfDnPmh$dp3V5($b`NvOp=ko|GW0d*0cD3(>vMqL)Mt}+luH2%U z8fsk1wT>cO7MZ>(vliCYqJ7!N3wwR?S#0Q=sjms68#ie$=h4;XyY9?t^fZ11^p=1A zosjcQqZ7Qor2}Tr_F*3_g@22`y{3L8v)*z5eH5?3Cdg(`!(nPl&cg3w{MBXS(K~_Y z3=;=l9I3@$sTrf1-1AKxZy3Kxd^dxf!WG0DDJ{A$(+wM{ayT^zVRicJa!Ro77UE5BU-tJXdj zI#U(b2R%7c%oFm(Jc@S~`r;kcnAvz}xsfwB)>-I_byPPNqCNQ_UD|IBoXXeu=1YtV zd@9$WTvGtK0KOfKXDbg>7D?0vBDb^ml>J@$H#-(sNG(E@;N5&@k@NR4Nw&uY9HOAk}*h}$lEw=Faw*KSlzedw$ zc75|+lP}8nk8yNS0-ZDyK5KR^W)G)O?*sH9ze4x*yUlCB=i8-2|Ne)pbJJey_!e<= zSOOiU8d;tBsqtsdwaSmqD)jWZ=XZvU9Xp@(`ZgwXZT29XfRB#9%kZJ_k*mJho}aso z9Kt&zGwTBe(EmpF!wcds#SB5@PwOsbB7X}RM=SEDb>9wSEkORr{k+t{c)QRIvW@l` zz1zX~>Ur;3=F`iO#m(r6XIUo_mmf$U(w~ODHEylH_z&LMz6gFUfSXzfo%< z#Xv5NB`uLC5Jz&&rZUA zZGSKMfE&;^2A-yjPdXA3n7nb2ZY7=6`ru|IhODA~JBP&W?(slim2F zAX)@|;^^THWLq@N){mlH@+MaY`~=#GURK`sP8=-n@f(5rCg8sr-kpapOa4PJ+8W`X z)p|9;=qJ?(OQ!U^-pj-9tuVeoUR3tm8HLYnc$oO(Io3c72RAn&=Qoi@Bwk%1T=748 zV@H7Y9we_>-B=!}L3To{_gE-B$lSEr_!9UKy$U>fEe2<->!0f8NW)LOjXrqE=!3## zJ)SSZUh?#To)MjtpDv`$6uMxqY#j4x|GCGdm&t>o5AvW_0+|hB=XR67 zKFm5S;l#!ONoXs2-3e|KQ|bSDo>gwL)|?d@jLJr0ACY zaj53>Yw)69wv|uRxu!8_5~d&d)5=3wI`wI-I4U!f=#-pi(I4Pcfsjz z+kf3S+}R=hR^!p{{qRquGo{C8(x&oNiwylj(a%A@EoMDddE~L*+1PEeiQVFiCBaw} zqYa`V4-M#emVosgZ>a|!H3f_If? z)0{}7S?@3<631@*4Rap&bi^i;B1v$uz>_Vz|HWVCx%{&LSEinGK=`Onp-3P#l zpC0~p6Yx_4n_4G1FB==NJXHif2Hnr%D}!Tf$y|%$#)&SD!9zBFCG+wHb}~j?mm?>d zr%BTT{QBr|>Ek>%j%RfC*qhJTH3F_raHo^Mb`NVN_mnx2#Y+|)UF4{~GSC~t_EP&9 zDa3!&9Pb~%xA>d-(KDX|r!LL%qJPi-gM6gX(Dh7s2|an=r(8X0*BdBDCLi}nFZXTj z-H|4DJ>_2F+jmB0_P?D`NIw-$Ul<*$*t2>hynvpmp&j}3C73`mT2vIT>JxX$F>H{`NlSP(m@_la~PBV{g~Fs?U2uCEL=amKn8DZ-KP#WETydB& zs(;OyCK>y9={&*2_>E4%_mQ91!G0Oi7X~KaNb3~fO~VAtX_%0mwxFA5KMk1v6PQE? z`)BJATM}>1BaXWIh-0ACRU_P}8-ua-j!`k)D z%!{^;YTDR5YUM`hg7?M7e-ZjM1*dl*d!6v4)*`Ea!C~w^xMm%!vHQP&9^8Eq9&D{!Y;E8}NJN(03vb|`LiB9;8sjXd?h1L8%! z(~Z3BC1$8x!CtOBJ0D%Ax(@xWIpVwE&lu;xoyW2TTBB%W2Bxp?WTs&!?2 z^O4Ip(JTJ>>aU=0MW3{f!tZzDqmQwwLlRo(ER)|MzN6`(dX8zdB_6r1U*t*1d;4m>(9*&{#DZmjJWckHHIVv{MVr z^MQGsITNfjat}JpwWscw$m{O+^18&eWs%(tzPzr^eT5Gc6Ufe(dKP5$ow=T@dS_Z% zTcg^Y3w=7y`0Kk}ds94C@^nU8o?`Rh?>gFr&pU5(`nurjfgAahs@4O00^bvB?vOt2 znC(8Rcl4Z|SB})Lt9CP1bGG4y@cry?-?zWWp73WNAIgP0Veb9{6yoQq4(mup}|CGPG50@@LLYUA^?p%}y9W)f|oYsx0^ zF|b@1Ir1A17WU=?Cizqb7W9Q_L$vuj+R*#uv?D*w@U-^oznpgQU*%Vef8M$gpCahy z8)L{}0y&CbVRKEcpTPXX_61|i{KNLT(rReUGvG;M>ST;(vuE--$jlzvSFF{=?_Km^ z;e7#k8P~c!&IcoW8+f(OWRc{YX9e$hz^m&D;0*$=;2R2_7(5oQ3->K&KNtB=8c)J| zJ{xvqcDrOY0DR@l#r*2)uFMYSTkY$4joHZgZg;%7{6<@wC;MA$Wx9lSM?(A2VdFpA zdOXg`PS3XvF`u*Do6p&vJ)g73*1LIjSpEI%#-ZnPvfH=w=;1;$Z#0N*qS?RYX#c4b zw0{!$o^|gf-}6gk()C3%`JVN_ajN;A?D40^?ar5Z_|+P0cfRZkImZ9bImREt=L<|h z_gxyscT$da@O-DMuU-FVjhRzBEu*jTd;EUaCsk8Wk?RM5kplE}aEww>Tu@mRbmVAkQw@A#B(-!x--Og0bu z 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

qbFS7G<$MnSV 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 vc5~U{)1QYvRUIu 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

_6y*f`$xWMrL})A;nQu8cJ6nbF0Xr#i-a6KzSi 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Μ!#SV9CVjT*fj4 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 z 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

+SgoZ1jVa01i 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 uCN{S`U%Mt}6j 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'o2<9jsUD)_$Gxs`~wXN|2nb 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 hT%XJaY0^~cH4!rfiyNLUWvDY5% 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%0A{vFQz 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 z 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

{@QIP>tuQzmQ>AvLcSe;i3m32 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 WiHsSuA zO8;ONAxE4C1wNdAW$;x2{}yOJ@~M7^t{%7T%TwcDf%;AxdpX#DIjH!Dc~4>T1wKmw z-aO~it<1lf8vhoP{j&)l_Q#8-h%dQLRpa0Hs$Q4Izlg#Gy7RnGPhxy4j+6RPsO0O? z{)|rB4DkeQOvSnqy~4~t-q(tQo%k>$6tU8^<&@nuR7em z&uJ^|Fz}(@k9r-(KgbnSoLX?1zkdMvMjMe{b@T9vXlnSvr)?c2uw)V^I*IjMj4 zywvy?rhiGlHLBi#KafA@Q1zp?qNhL6b#X$zuGGJrd^vyZ?rCKIBA$JTr-<)j^&L8X zQm}tzsrfn4Ub5eB15hcnUel_XrtdQgXn#CssjvTcmE@oPIJSTO?=#r9C+8yC7w@4K z$$fELN{feEc>CgvZ6l(T)BU@7`cy_G9izPptE6{+#H2R^3@&hYflnxC3{QGd}+ zsBDB@f0OkS7bt2e3i}wB? ze|r0yDn95RXs-MII>uL|9u8Z4e3ePq)#D_+M$F^O-dN<8N;r63_c{C`~TE$uB^fIG*O; zSwDF14=9JFen3Bao;@lt{*u)~@(JUA_EU8K@!tE9tMK88puDds2Rrd!h&EWi@Mf@m zt6WV!A94qO)NM&(sb4sM@bNx7{PhF|{`sdL4VLpUu-8paAJR9{C#1h4!N-4*>6{m;CHLRV+Eh&xK3^@l zF3zQN{0j!&nRv`@cxGJzs7_w zmf`iU;tC(JClNqr&_1Ue?8JW|E}1U%OxM4a>idVS^hB4Vx;=>x=jZ-V=NLae^q-^K zss5Jt@I@Dy^-sr_+{d74aD3x3WuJi?`2!ay+C;kg@o*Jjp z*Z1@+FQ0?s;E%d3Ng!7oc)d|xz<(#|$Bh$6zJt@m4NuAEikr;%ZlHFCgPr(KpTyA4 zYW?TFXg}2PF!}1o7i_(DH~SBZEB*uD%qC=?&n0_MDDlNY@bSK!9PGq@A;zC1ueY>$ zh?CH+sN=;gi+q57e90@9SE-(sR&4&{qpPX@cF9QMv-8dT)A7L%h>j2YUgCI~DvwSq zbpUeyxX)RM@l#xf_VA2+rIaJukB`YdI}dv8hpX^GZ$Nc? zSlag^^>4{|Lyln-~v4~`O8DxKfw6uE;T-0^bQr|B1nd55{kzr7zazg1>fb4& zBtFwim`e+t~NFX!C4EHOWES1b8k*q5)rBAwd`D@SeJax=coYa{|&0SU7& z52)`Sww>DiE8sinryU9ZokbeHf*sU;TuO`9RB%(o*F*VpbrrvHKh~!JANYjxpg0bE zRYy;`ljZxHhR-E@QIao$v*LflKVAQ(-rw^hlm7id@{PaY$yeN#8on_8U8wvv#5R@u z{b;CS2>4gG>USgk_@IA<%)f~h#pX3qFJr0VQ}#u#9~HaE=U`kPa)f+9feY!^e*0=C z+2=I<{k-y8!uMtcadp4o`}z5!sNTfA_wjLBdhV>?`Ay`fh5ggu{T=H?kp>P>y|sC!P7qfr>j!KhyH=PAUHmb`6cnQOP*hxt?+? zDFA|Rp!4jYe`WCR^cRSKOFjOHI}Z<^Jv=yms^bHHfD07IL8F&cOYCn|sY#H3kCS|D zAHLXO;zy1}d@uA;VrHSadmA&!5yUhI4$Nz@*lI4v39K_eT zjy&#uC+lyj_@aMbnVA0q{sLd*jx_R_Aj>&Y~FpZ56YhTsd+Kj+YYBj2OavgR_rp=y2|#$Ud=m)iA*z0o9R zwd5aJokRd#O{p~cgIw~}KCZg|Kloj?2WATUtjwg}<(xs8qJWMe==G-AiEq9``mp_Fo^*`-4$%f06b;$5&$=^}miwPv$wdotHo3SbQ^$ zzkccUt6n3#{`4+N`|l6KH~xzEdYSO?{(~Hx4pOfFSNM7#(RZ#1Um@);$sziS8Q*&1 z7v#hI>P3S0_gmi}0r7E!x3zS)Bjo-0Bm<5JkSplt-G2MlgpcysO#Di^u_+r$6^7*W3l@f7WH<^x1t|U1AI#%M(r}G>U@C$Utp%sHo`1bJr zQ5+6Q{z-gZ{a8s40B@K!Zy!vz)6!E2pE%9a*Fs-?;rkPL(Ldk<{ioSkx0vwp{z8dx z+Tr1I=T#CMfzO^_NpJ+dXta{xm@2*nnV0=$!dHEqgy;St>#yV=$x9vcq(as{@|QJ(@}}5L@z0r6NpO6I&L{XZhd4vAk2)Wt-y9L}3$)u^ZPuFb@%||s zobHl;ybp>0J1c*uEyhrF4Z@cGXt z@O_mga){R)Q{~_7Keao;gwIm=u#Z-le1XA)&mufH&-h|Kd8dl+g%^a;K1XQ(4-QTj z+5Yl-Zh7I=k6pDXzx`Anrdf%Iae?S`OK@y8M%p{z+dNLD-Ng+B$L*BHIi`us=pX6@ z=&m=m>@@N3>^Tx&w3V#CVfdWuEWr`@@~@}g6vOaYH&}vWs`%bKZ|Nr{e0y$J_ODIJ z__7vQf+O(R3oXGh3|}Fgpzhb6U)6n1}3h%DUVXXvd#Qgp zS2YwI5xgF;Jd*v_WxY-QX)fMD^NU~g_FsrSEbWYvI$A#(KjQwgNcNwXbyx3~+V|hS z*z z4-vk79=?1^Ta-qCTtVObWaAAq{&y1k_Yw7e{?~bP~m4e@oz(4ov zMuH>wXVY(v2*3q;eXIOxCjG0CE+y$W@_T@^FJApPlk|=4R>7YQMIw@_@i=ML9}N@n z8`A&iE;>l(IsQH`Xz$oQM|)EJq3by!p#K4SYpqv#{(Z6Uzk7Dm{SCeGA*(>jm%62i z0E+Re-s(8s(;W7j^BvXCQ^_u$pCLY*L;VHnC+~kx(!aizl=sVt(Rl>m0&TgsN5a2A zCGGuk@@;hg``&%7!l%~{_FwFOzr^}ld}l+x1w8-i{B%+9KpWxS*G61hMD>IEXE_hH z5%xL)sRHB*+U@%J{C?R{*T01SV!Fpxev8=;aCxd-DA!LP1?BbAxl|sipDc3@JE(l} zm;4X=U9_XQ;JAXG=RY5Yuk9(FPcq?)zbfyrm7iLP&+FeGPeA?eM;%Du{`|)D45n)h z4W=zE9ft3#&!Sft@zs@*bSBCAq2nte{QSOF^epj%BKvWQjUxN~eDg$XMfr;hseU}y zJQ1U0ubq#ny`eP6c2%f7p>%}q<%j^ef?jpm>Ix=&nJp#0cq#bor<)6oz?bt(bHNe# za_AgK;B)CWN8pQYq;nJzfD5$3RYkK+_!=vG(T38Fh4HW8h30}I@WtsjN8oemH%H(r zq~9EYuZZ}~5dpYBYc;+)%Y^TA_76Mr|#><3uy|HXeKdv{m6M1=mkl;#-Le-X{v z3XZAvUz#1fXn_e|!I=_Y^iHuc{h)g}B0%pzzxaETv48(id8L1k z`uSJ9{}-v#R&YfB&#Kv0a76#lrgI#_`hWR#+X{{dUW+A<)VTensiywbh2&Qw_JPm; z^Hb*j73<~U^#82FcB1I2c8UH=l=vB=biq82e>%P&UmtL}314I=^-n+auC_O(hOe~# zU(uU{?=lZx-Zqjqr4b-k(6dL}Im^`lTS)fL^7+q>r-%>zKXI(N|7Xpl`b&}fe+mB0 zXeVM65r7MH@s{~U`?va0c}M&**}h5p;?)oI|Kdy93XXUmvGYmaD5C!tp>rI=`hPie zEk^|40)1@iHKR@Sm;FC;a7RkH{+E8B*%x$}A86nL9eKz4@+N$56)1e|rJUH0t$+MJ z(v=J7x9mZ?7e zH#;YIK8%0I+)=c}gzsJQkIun)QrhSFU4s1UkSU*E*h~nHbt(Gs?A7pDbe{XOdB=)G z%vNcOx-J|MAXm`gk&(}t@NFRf*&OWk5+C=U{PG=4@8z)u^nQIswM5)Oc&snzo86V< zSCryvGTL#{PZ6z_h-jY+F0Ljx_NM--Xh`kf1WHpx04`9cd06H@IdySr}B>YRkHnH zKX88igP*#bTj~mq@KYC~-yGS`J&z{{`pxm@3{pe#XXo5nHxbdlDWY>65x_Ul8t*-{ z-GndUzm9IQC(HIj;`82rN1P|~NBIX39?`J8$XP^qDK_XO&&RGOycEAC6C7VlAa5Wn z6yH54&lk}-jtIa7T5*2U?@jpFe;tSTVdBfXsjlFd#J8C6QB2~yk+4uq;-hm#6cK<6 zbZYd~D^2)zk$*xC_7PJ5*bkgvzWja0s_WTjL9B7eo`9eHeaWfgou5u=|MlZ&NC?+5 z4a4_v_t*EC@ZB(1*_SJ1`^J8d{P_A0r~GHocxm67i8zeXE~WF&s+owp$o^V0X*{xD z%|wh-I!fs{r8y2ghGau&U<|`|`7vpynefe2-`wphOU4)NUsG@dzQ}-@f+O(7>31S3 ze9;`bo?@!_j=1;jpG^4fcv6+<1u0+lgXHhOEGGGK{VZD9BoW`G_5i$K`Vd|3AD?l^ zUke{ET1D4W#P?}F#vzP<1FjhOya`|Q7kP)fN#bKa41RpqkplB`v)*hiIIbZ5;&lES ztp&%M)OoS3wct3msyrWww-y|q9wF22*4Ba}0_p|mxPwvS_pR++rT)ceVg~=x@r^uE zKA$mh$h$6>23~pgpMPp;<6A?B|8Z)saUS?Os~@0$ov`2qo`0I<%5m*1wSUx>4J4m| z7$v2;@QV5Uh}Td1$0yI7CZA*9B*#UP`JPGjL7gPrUly;B$`477>bA@9kt$nj!*lfnK=%l$j=c-+e*&&hhZY{v&)@ zEwV+N@Bm*{OG?u*gi7iM=xff8j;Ve;aksn>`^@n=?y`*UM(We}BSrKNq77-RjpE6w zKI!@gT%i4&WgnXGZ3n*VrCk5bI%>v%{sOO~<_NsJj+!GvmihtOXimpjruktG&6%<) zutkv}y2Y%2yuQ|7KXgCExF3G|MYFoX-b{n}Jf0t?Ifj&ub6N%P4YbZ7w~rWLMUbA7gc# z`wcD~$9TgfPg6T2$QY^sT%fNnF1*`>Z#u7!8s*`0wx)(}-3ChZi_d5)*kdh1iqZi;{-?Gv*{d1;B)94M+D#keYoPr z(@psP_)6XpTOs8dhR^Lw{G$kbh4h;v@Hy2fe~Q2tr*j;EFM8y0f+GTOf!@C2otOz9 zuTS9+SLbhyI^aDDBI`UkCeF-2Y>{8+Dorj;Z$l@{wMdibl8g#LH@W7bnC9Sx|{en<`G#x;u~fCFpXa^{}6cm3cs0_b^Ho^1O4@nLrORNdsOcDfFECHwLbYpO}>%0|66=+ z9a(R5{$(qCpcmLz@ABhYq2#;pl_38L%ZSg-l<&{FeB;W$n2yg<_&|U8{O6H=e9*t! zp9lu|H((C>uVjeh5BgFM$JjpZ4uLGLVe;Prl$>-h0OzURb){L6W_jQmr6 zE_8fY{|J5oAJU-Di|g9?@xi`S()6#WjQFCp&GtEZtl7Q*7id~^U^f%KZ?*O}|Gl#D zFAQI*_V4{U0|N4e{Trz9FY^9>i_dMGn*Fznob{Db{l`$JIw3d@KO`%vrpm#Y2C z8(%oVj}P_ZBMo2P&a&}OR5iE1*5f7DU)1BOtKJUuU-l{gr?H=c?MK$Gvf+ar*7;|5 zl>GzL1JqyO0=?{S_fkLqfG@7$D<~sA;Lz~_w~h~K&`a;gIK__-_T`-|LH^}@P&WRF zPG-$4wciHg82g`b(;}fTu+Yd`+3OfD%QyTd3 z!M-^6W%%KV!ZPA>zclw>;741RFK~gr_*thrO!!{b@a26}HvTz>i4SrG?#mlq`U>Ow zP5F;S|L>@8g7VG!*o-e)RgS;eF==nX^k{oIj_>Z4_8G_1j!^U8L;SRYZ=g@Vvv+-h zf69L>@siwGxns^6KP`94s0mZMSZ7a~K4o++T`+0dq$#-{M&|_=(dxTUUrxse@BMjCpsl zx=+8z8h(D_v0bb{9xbd?itfALx}vp}J7vnGDJ`ITOd(guy=!i6RsO!POZitp{rxVD z=1&C49_~vyc{mby`aP+g(@WFp^bZOAuMAY+9FLZoGcUZ!@me!7_0)eh+=DchgzrW}Q z`X1ka*5$`#{j)xo`0!lNZ1tX(qn>*#eW&K{E*oh)JXVj!&xyuqp28NQ;%%CLPmFhn z^87}ZD9=j}XJ&}mL@ioR1zey%-Fcd2!uQ4y8h`h#PjN%=VSNhl>FZN4uXiNP=j8P& zVe3@zy(U|g6MA^#1+OOLs}9rJIq82b_6n8zhzv1a`I~XRFw2+mu_dzA1ER_KcIi& zmc!G(yiGJuzCqh${Q%C}|N7(-t{=9-hxX%=k4aDJWr)$&N&Sn3;2V8i5Z?vZht3V+ zgI}W9RM{SbKd1F4J+DuC_dVhJ(3{5#zE`TTVX0~ViXUkHpPR;$mSnK^O8y}Y%JTv< z=nwf}USN#&56`0g#4&Honp#anD2;hz`INRPjd@~%=D6ihS`Ur8O;}{YSN&94?^oW# z7Z1V5^RieAfbWSb$uAYn!*a&g7e$rpi?=8(8kJA#S9{u*IqFOIrL-V_)(!4B)%v{ngYx|c&+Vl4cR{^@ zeljTpSukYgdM5}vCd$Oy!qTogzG_MS0e_da zJ%3?*QO$qi2L8T!MuwQL{BFiV@Xf!8(Ruxs+cZ7_-*2@g{~T@qJn%2tw2mmOTSstn z><<^da^)`a|6Ez$KkuhwNb4`ID0aS5PE?>jl=ta-Jbh-pew|Df>l<|ZK|1emuP~2< z&x;q25p8Y?-X9@9h`5(2_y$_{%X=G|z7Kv$-{(0vJ*Av(_$r7~JR5v&hx}mr1p0pL z&$s4L!S9FNwClUQ8@yiTUi`nM4xt_mz5BQsEdRLj|Aqd;QD0NLbfBE5I8n8K-$?z$ zTPbM8iEMpn-&6Hm>;s2-q7IAY%73B#yZoL5d7Us@>P1|=j{+C&(<%54TJNQi{Y?Ci z5`Q_k-%8w!)2}B{nt$Tw??Ns8EHz#19|hOUqBMRpy=gY-6}8*>J0ddD{j6tM??w_) z=3e|i$_M<9Uj8QU|4w(yfc4`E{NGj(?jMq0{|3K%W<->PKi-GR;KOhCjQ~zD3b}#S zyKl>jtUtQ{tbCfP>Q#BFM?iEs+BhSxr=zN@hbNqyE_3K+0e&`R*|GDqle-iT-pOy6p{zuy! zBHjO|oS5HM+1($^^_Tr-aX|gOyt=B7+I)(?(t^jqzm}&3k3%oyQ;YwHoI!8jv}y$F zPj-FzoIKTjuR507l(Zy%t0*=6bH~W%==P`j&B5cqdCKMTxc!HE&nyl(a0KNBo&4C! z2Tl4@k@(NS{aNY{^O;1RY^QdT{`l?5CzQ6n^z2REX~FYja)SDn*)Di~ucnWQ%nkp5 z8?@fkR&SW_ce_vC?DUcCm&EVAA0JeBt%>CY$E!8G(D$rMX-y$Ty*ydefcVQljLPTt z=VXAMI0W3FAFutWIshYpZ*_AP5&FK{Tb}b$MjCQM`n{-=ZnFQC*ni$P<&*q(eojq)23C}OhCU#l{)+#W(i8CU zZcVRr{lNW6iW}8|TWatAn)S!k^yka{RR5l$_Yc*6S-+%)KTLlXy?(x#Qx_Z|~pDQnJSV!l5 z@0lU+g{4k_4uAZoCs=>5|A?jbZ@z{6ueud{_W$?P`2RsWrRQUVdJa9YBEj#eO;!Dk zZL|ezMrryF{)1NBI^!Nw|KU63KQ=zV-+%D>KZol-R-aFtsy|u9?j!-oxS}0 zNB!-WPveZ0J^si3NR9t^&yAfBaXj=@BEn>{xiC$dOA1Qe^`G-@HpiE;!=4$K2XXT) zW8`!tY5)I94Sz1$qql?j3yzjJ_4ezrh&=A7{kBrYk8&OQxO+c8e(2Bbw^9AA>gi8B zMf~MdJFB<919mDtYwhppR|b!lhCi-=7bv>*{d;cp_djT1KjsHc8 zpL+jOsP@IaO3DTDpF39Zzl+rW2pAheaUOJULbJ5vm-g&7i1DvzAo&3O*+=}3 z4=$g?Z~c=R{+UY8otvdSM|Mlpdp-QI;`ng2-$+c2%c5T6yiWD=zYh4hJ>xIX@U#CB zdtC*wLhbhx55doVVL5>R=)budejK;7@6PadAJ_a%%BL3puj4JQ!@M~@@?)zids>?c#sjDLA$ z`9Sc0o~keU_(^^}RZo@ufga~$KTl;pQLlrjy%cbR=3V#JC{zEzCjN7&Jf_1`$1)4Ph`cl(#=nEZwX>TrLjK zAAIN5_2*ZmhnCjPexvEnk@9h&|A8B{+02*sn)shZ_&GRt$@dM(|Kj>nctT^5h@@}e zHPgno1k=6AU$p;xTYA1feQ0hlEpspaAN&W+?!M{*=0C2){DX$%|2aO?xBpT3)c6lO z>HaC(Q#`k}>VL)_3bqRutMA!vQ}cXY+z*>Hvsr6D{@+ylyZKtu{~DhD#8brI zN#V3x1;>B%{e55uuJ11Gl6|S{S6BcVLL=%pXzoK}I{NW%RO_n-Eurx%AO2W{f5-oc z;Imp+1$cV7ESw0TC^zWR2@Ov2vS_9yIEML~jLxF# zDTeu*EDitk^b01N@PE}w;csci54_?UOK_}6^F;jZR}w#+E20>R|60ONv8?#N9M|9| z6aJ}_B!1`mlJV!=YzdD08kq6BOD(}M41dlt^8ZaSRs66!(ElUOsq&Ob|NkcbJLmcI zU#%lVzYSDxzry^NpQ`j9^J<~Ljn0ww2kjb3v&4Y=Kzn|;DsJL`EHN5G`kyDqyJh?3 zji02gB>P13WzYsSqWZw;=$uB0NbX7k`gF=e^1O3JBf+s~vrOau*1cr=mbajh;20Kw z8+7u;1O71KzjB?@{}yKaS(HDIuQ^W>9*QpOW2<~RD?0klSTDxEuCaXnIEBCdNu;m! zJ^b+$@h?~|pJSgW<@W!WI}bRisqXJzb{AMcWavu|ps@52L>5pPz_JL!ARs7$qlgp> zBZxH1&~ycrQBlAe1rd?56ct5f5D^5+D36GbEs6?0Dy|*-d+yxxn@KJS%#Qm!?>~GF zXLFNDzW3zZes99Jp?CbM@DR7Z3_h@p`SHECeEh&e<9E=Lh7TVk`HPt!-=B-UO!a>o zzgaCk`}g8{4*Ju8ah4Vi`|rFgWp5v^AGb_U-9^74*$u$TczJXA=RIAbHvO} zY&V}f|IAM6%J82%;BP!13HL3U#m{Akv;Q{!vI>t(R_Wb`h~bBt4yt4+;6KqP@BYs2 z|2w(U#9Iv3ptM3{dfM|a7{?AP$ z|33B~v>&^@Pi0rbN=bezO@8E`di${tr)%`{p!|QdH$Pua7kN6cwhz1KbNG-KRvxt5 zKgRu^FVgohjKeAWn>Et2|2XuY^mO(g)?@xy2WLO|PPSWQYG&=1_VxNE=3n^?WrsNX z&s)TAzLk@VeW<28|6`i}S4aQ3=KmM-Is!bGr2RSlV!f}CyrcUc@Ehn#XRN%`t^B%( z{6}ua5}s$h-PwPFbrg{X4Jn^$C_d^<qCy!)Dh0zrl}qgRJi5?fzv?zsP?o z=g{;0y?ko@OP%!i&*k|BVx+U5ByXrnU$Ng+zKZ+bHd}>TdpQ4x!8|m62fgmXF;O@F ze|53CfHhv_7t&8Eh}8Sp&!zcfR?F1;N#{~M2)-`$Si`w5{XdXT@7q7VPD12*BDs&> zoJZx7z5eZiFS4}*+qS;cPOkrmJg@A4@rxz1>BPoa$+NAx>Dm9i8tOX6znt~wEmx{= zll`2FQDO1<2v6NHd27cX@PFuwR&>s{`%i@P|If+(G2+MiDKjrU{-2l!?`Ocx^?shD zAD^t^6=HwO#}7O-j{ErdiVD|{vhx>X{^U@~fBv-jf4%hh*Kzq3DR$PMdvm=)Z~wl+ z>xt8C|HAIjBX53nt>ibFDm$S3T67iJpZKvE_1*a|I9Z)Bj89z2q6 z^I+HS<8_{+?i`z_@(amnpFe!8_a_TOm1jtw`umi>ri3WhHRAYWa(w&yl@V`U!++p^ zS2p-FG5+X>{n>vOuA%lh&D*?y{nKoap8YGI$>~?CKh)B~;lCHn;q!T1fTDfWt$>dr z9{DG39%%RfD7W8DS~nOovc%FgoW2^m^Dm`%$_@V0qNX}OW;pYov235%-6}j+{Y92o$NpI`()<26u;Tn-G6lZ_vY~|d^Zf&&E@$I_+D2YA29fP zV%`~$z!HT(wpnrh#>zMr~0tzVT}Xu7IDOHTXzb9&W&BJVIJv=CC-kU^1`NG-p= zX5W|dU1k3o!sNO}`FHp-`kony{2rIw500bniII41cy2h}ZsX{|(tq}`pP>Hm4CSAZ zX7qhx4mXVS?Ef6+|CrB!`@D&E3gVKG6Uc`s;`md($_LuRJ z+c3T%#ver;XZrnbjX&;M()|%TKgJ&q5?AB|>JMiAP_y*-G5#3qsOsGuEm~`>@)@*q z;m7}U{4xI1HI4237=P?On#wO5ztKEBelPnc#~=BUkkuf=Aal4jr9-v+MeiNIg!!Q?cOFIZDUj64WIwmFE{&R3c4{LSt%WnBkzwcDcW2dV6r_L|OA0@9?LwN;>=lCNX zD~db{z@=%(x+n16Ks@a7Ieis$&_^JHHVFaF>Q9fXv0`SaPK z;Qv=2-m}o2e&PQk$^M~hZT{aPz4ZIP9)JAv>qB3=*?;I-716+C)ecntbL{cQcqRIN zBZ=4eV{sMw-XDqA_+z{_{hq{YgWp4si=5TZjsJ%tzYy7d~W%3mg zuk;()PS1m+wCNZ8YyR{*=0BtT^#}RCIkd7seco*CZvWmqVGZ>ktg}Er37bv)i|Y?) zXTkn&bGz8utDcvEA9!f^4fyv@dT_Sgf52a*nChO*Dkb?tZPMdU`p+b%|LEf{;Md1r zj>RwAAogu^tu~j_`yJ}}Ur_Zc)c{|6Ra4 z2J2RrO^ew52k*!EPNv^huo9((cInywPVQ$D_c{INUJeg%IQ(bOTxB<;3%?!KZc%&K zI;D9+HZ@DH{|)hjer)K=e@gowWIsgz=Oc9g&<(c!&kpYPm)}K|8~op^|8pt#-=bgC zr+!B7dt(1zui9${hkGfScH`J4)^AWG`~R&SPXE8>8fw3^P5F=I!QY7u0sdm{&q04a zZdStfK{(1b#LF6|#^qCY#4nxNaPEpTw_TlBe{D2(@<-|WkdgX1q7$!YG5zlL*ZK8v zI^3=*kJH8KD^B>YkK=0H4D_jE!-l#=92C#T1M zH|8@lC+_W?KkfAzcevUAQ|iC9YNYIMbWV@o%YVG= zALn&L;*Rv}k9Z?q%`d%Twd6mn<)4Y~Pt!}3_J&mdq2<9ZznddB_&?UKMecR>AEIB& z(!v|__@kxO_rRxXo!^{!rJ6r{g7Qz~pK|?ItWs{0-#o?L{$<6l=T|y6_QU)K^dGzX zSGN04@f~XZ+XwW1NO4@Qc#X@iP#1T8`F=>b!TyIXPQ?_eGnZ>9#mbJ7vx1=agYk9c_xSAV z7w~>pU%v)Iigh8ie`t^f_0OFbsQF6R|C8!h_*?3)wDUdilkeHe;}d?X(xj!`f3SXh z7x9PIRT8-yl-BMF^qW>-GzM*dJ{QYlH7X&~0|Bcno{AV7IE5%M#{U^A8O@8mE z=Zh@a%8oy8bB-VV)z zhg4l9j?{SK0=mB(Uko>Dl#mI-6<={vdT%O;{=S`lRDrd>Z==Xi=SPi3LWJLWZYTo}L-+}#CPwaG|z5a&&tJB(%|8z~YUyRe;)95M4jx`i}>H*Uy~% zKd?Px{62PAvL@%Bn16`-BVQ8tt8@nY;&-|RzrhFYZ4{hh&;LvK`#Y`1(){NZIb!bV zJpS9m-Tre=ck<8Uel|V-pUm}YjGw~(^|-x*{?gL&Z@QqDd_Qq={Vd+E+x!!%^WU24 zKM4ig`Q>-xju)y8MVA^rS5}eQ4*$`%gMmCi@>(L3Dad z+281y9{*wXL!JNPE}RdrpM(GLS}Hs+L6vv#E5uvZ`5a)dZqww6#QKZ;7JMCUe|<=P z5jicDek~9FljuFya)bT9g`op$`{0J2Tcdh6 zyZtf#wW$&LPmipm{f#ry%dZu1}VO$2`xy)a{?`=SO2bX5{I{!yHs9&MQ z20Q;IwtwxXs6N@j*8g)>di-Z`eZb&!3d5mZfqWkJFXa9Q_eA8MK}q=4Ul7k!VO1pHBXjKqsSM(0ZL+Q1Dx z;m)j`ZuWm-zq*3?PU-9)Zq=3KV*_J{I_$@jn#fx7&N9da@EgiqvBwt7Y zzcsI=kOKZV9h2h4ADmDAPvW(K8+v}M$AxbE!#Vv1_LYubw9FS$!0+Eo{!apagN{k@ z;t$ZdQoJ^BL*MbxMfbb$2j5Uv2-GSae=(&^Dd3Mk&{9YNe~kW?;>B;#F)3afxS^k2 zKcKT4|8tyvV|SE}KYT*IkOF?Oo>)l0U$TzU1Bn;EkIt3iwSgPD*65bo-1tLme{*{2 z`2EB#1^lsMvNs9%gLF)a7k`}2mEyI58@hYz$6eolayjQe#(SmX7nC~fSBlpLZs=WYBPYA@Pi6l%OKJZQr#?Umj5!(9G~i%Q2IYfbeZ67YwgCms^;i#GW}iWk3lf!L*ZY~Y3- zH@jvhH~tT}{1X2zo&N`@ZX*T!#YL2#kbpl-$E0}i`){TC28q`OZs;4^bbrH*{~P8H z&_r_SN$KW4zE*1T!{HtX9m-3&` zBjv@Py#CZWU$q}qst}1d$$R{{#`*oDwLyi`)Ajz`ykox?fGYC~xLa_x7*km)kI<1lFG#8=U-Q zwf+>`&>t_I9dz>_@umWb#8mo~oc8fMagG`<^q<~BNZCO1xMf?`>e@migbXFe7bB;U zJxMC_`LP}?gcSG}+P}5Tiu7sh{MgH`^c__guhA5;AY82`1tX(yy${MY!t zosiP0q8cBCy}ibN#dqyQLOdQo9*09uc;|W3-hYMp57$3KCk{;Y#+Vnn`~Q^5>Vok9 zu{=&^HCOooFqYO<{X7WA^T&J%gdeN_mfSM2LH9hoyuhA*(SI)DWUuqG#Dv?_eM7_D z`Q`U7<{YmIwcEjUWB|foab1FZAnT{Z{MGfAI10;)k16yvz~q_W$8#^-I|Q0r+`6Rc_7K*-15(Be^tLUcc}bFa@yzr53k{zf3>N$ z$`6shw5zK2OYW{Fq@aAj@q$+LeE*{P|Myf&$j2kq`LTu7gcPq0+|Vz#UUr)s{}0Ej zgc5s5*+ucE-XC6-^6$|8Y+)^;`;)xCp885@AACC=AimG2(r`bqkf6MZ)45VA(nROb z_#6>_pjtxi?n~o^VR}E%l4=R@;?L&;;D5K*8C&i759$xQAEgtAWr>`=>bYANyZcX0 zUv)wF&&`~F8s9tLKl3{K6~?)c|Fl5*Mow=0q&kM4| zz%SVUL+<@#JTnYBeB>)Yj}ZabAE%xDR=?xy{Fpye z{aNzo({jWdw!d+yJO3Qb{+K5my2r`Cg5!m8I@q<<9qRd}ZGZkD_>bSeb}{kS(!YQD z$rKv@x+qIDKFH(0%um(!#0K5?pi1ZPpT8(Qg#OMFgDHQK_0Q>K2RU!-ZmRzn6yCiH z9T)W7*%lO@oh_c3Li?nzkmphO!Pc~2j?%ryrrUqfuCw~v?O)8}r!{-i`1R~uQTIz8 z{~G0P|GHl~`M0w@V@1jzfbll$d@K72A6VE=*&pc|cE#^>4Swj}Z@)Fet^PL4NAqV^ zR1(D(EB?@B?)=3UJNesid1_s$>fN}1do3L4_Yy6z=+g0< zHaOX$3&X4e8@rUq0S;zZVyIb;yw>tCx zPo)2Rn&LMvFP;63o=*RV{~+Ap`@??_9^h~1&KT|9;9hW4JV5#X=v4d580*e||5SC4VSKBRNRL|kYnm1g|G8cZKbHR#@O@zakLQ%jwdbFh zfBP8mi!mvF%Y%R8?@s=eSf`xlY`?6Vs`4?EQ?MWApP*iCFrSw~ym5Tl7qP~2{sa22 z(0)0$7q!1Olo#)A=lp-1vcJkLg@Ar{dpRm~vIOjb?=k8AGwpbu?_9aL@W0ng#HpN; z^Pf>)T|`9|)JQz5f5~QfGbtRjTjXd7h-> z_W9bVKZCd30_X4jdz|}6fO7!sl;l5QRiX4Bi_IC?I z?`fPK?{&7nZsPi9AfWsT{-e*UF>pf<4Q}X*?_ILpt^FeTW9V zXNyo@>fa}k{X5dOB^7CWg=8k}%jXfMV^X?Iqx$$$RPV{9@i~$+=>0WD73%M#V^VS( zsPjeTmLehY<}RDTVc=i-+nB`q--DX{-;#E{DrJB3%718oo`0p=UwDZt!b_AepZNrC;tWIrjezvxHyB!T^nDl{HR0{i>um=xH*iPr{h z=<|P=d4U^$G5b$wk@90N{wT3a0e_$>&0in^ze&fWfZw8HQovtK$E1MYSB>IB;d^?WOp zfBxD(z5EB<&=Z$+3dsB?R7d3-$bSMM%0HXgzJE8t-T%G5e;29YtUsV#rhnHjSzc)K z<~CCC zI{w({{~P|THOieR?H|$jN3NjxlP9G3ty1zwdi-zr$3JuNOvx{J9XITM_a3VMpP1q| zCzj6sp>zK`{C-Xt2J4#_%v_S-=Y6c-S@jjo-=0)4*?$|FPcc8~^IsA%S{wetr8*_X0e~M!2-z4$s|14QU{kJ5jzeVX> zDarm%Iu<5D|7T=vHF}?&cmJ(!f9u0rpK!CkMf`!uDf?U3mW}<*pUT$$Z70mW&&~dl zUv3fR_OgF$HT8Fsc-g;rRW%_6_79S+rNI7vIwl47574!wcx}4dcs`-fMOf0MxeKC-nG*uUfnN*^S! zzo2U+#Nz=V-9qQ|S#3)D=e2c~zs>iO{cZWDHO1ZjUiAm_ssB#?32sF1^l#rhO^)A% zcpVMezhU|P#4V}8G;^xrM~fc%rBj8-qJIIt;N{$YH#a-^v91m8pTU*!T*M8Ai2c+^ z?4^32WvkbL6I$ng=hQFS%J+}y?f28^`*7y=9P!eroNrG%8ox;Ld%b@W?_bsV`H_j^oN z{FV8F(D{~1Cm{}(@5wjg+2S>7FUt1gbLSFI-E6U)b)2*eAJSIotGlb?^8NWSI`4ft z9t)HgUyzpX)7LlM{^Of28z=qea8qSx_>ZxJINrrmrh73z-6pX?%lB%!`p?Uy^Pj-u z^q$1|?Mv-HZ@jT_nVbK#qxVY~@8u-lKWWZz_aDXo&;7^$RtF(wcS!h8WK^~&rhOmn z>stW_uAs?B=!AtOZz^bmQ?s1>PdH9)VZe2KYct77-#+;e z!gn~6*YjdMCT@J47LN3Xez}rQ8j8T0hT?2;aC<)(e($BHw5Qq>^&blD{bTcQqI_Yi z?D0{X#r)WZmg}#}(?9U^A5Q6U3XN;`ttCW$EpY+u$7ny=ua>ZAf8Pm|E~jRTz`3?*=X1SD?=SDd>#$=y4g-7rSXDg-qqZs^iuk@~VcdrMQF56RT+ng; z1G@RG$1k<>7cqb5O-}ykOl5y?Lubk#$vZm#P5^5f+|YN||FxnU{}#>u!C7U?AE=iZ zKl}#z+}Nmd?fi$?{=26-?eCjiw*2s`()v%3{R%q&mQabEe=768x4_9CFJt~d!=u~3 zkU2H?k<%g*8+7=%OYgPw!~csPaq>s!l(GG}f6>eS>H5FXspmy*{4efu@(1UZEx*zD z==S&Ghu=WIx9rP4cK%#`|3>i!C%^CJvgMB)gWt=4qU=A=Syy!U+0LKG{3Dk*`Qv5G zZykdle#N*+73RO7_w77knw?+p_wTmq`Ts4M*+0}u`AII{7v)!s!}B>@FTchniJgCd z8+z~78g<A;0CppQ-;Z=7>Od|KOVecK#L2 z|I8&${^-2S?2mF*w|}6^(eqE(mvNKIr?3R{%kL~$W#>oz^SIqk{^0zwff3#C{euKyN ziahvtCW)PYfE#*u-M_ck`HPsp+H@y>@Q%#*z0$84IC}c^;tz6kpy%E2jl=(A%zyUB zPJZ8l%=nEn-Tfc=XQ7Av5$?3UIHLZ1a`!EFI_%H&f8#%@hclV~XUOkm|G-&gWB;q( z`|L40KkUDItJD6`XlC{gon5x}hu=UCnOx10|A7B`E&mDLnHhhqjQPXtP|#h@^ILZN zqyD*2%YS@#WybH7|3?bdbIJGc|FOE`^S+^Jv+GIcWK;i-$>T?O|729oKWUKazp|KL zr3%^SmfGz7Z&CgpsQ&)pcrWhvS*zw1`}pVhuD!V55P|y)@ku*6@GkX_K46F_h3Q+I z1EBx?O~Frg`=kB)oM!*%-I>|nEB#t*|03qm%io#N6$aK_>pd* z_b&YNGdn-hZ$BFUm0L3Z&ye3M{f3x7pAD?re=LXV3f#~Sy;pqLjep?#PX6ef zIM2>+GQXweKfcA8@f-c!(=XCRz6bvb4}P>8q0fD_Q4c%+3g+KP`M=zf{+}U#oY z9ZvpuhWsMvo_^7PlE)zMfAn7&0MxX}`_NZ6ym7gme-r!vCe8lQ2Qst27eDN;^W(jz z@DB}N1eIBndQyXLp0e{}{N)C%{0csp89z9483g%%h@VRlhr|BhFJw-gKh6Qr!#2Iu z-p-Hqd-3^B|M5Lkw*2V-^y1&CgY$lYrdQ-vdDYG@`1@H0PfXSQ2>Z937Tcg5C8GvFY@3=x`wXbeQg^%Kl16A&9mD?M)a?&D>(R*LbPc`o#0~xJ{1LYQ$S0iq@eKKm!AJL>T;|dFeH^ay zBVN!4*1vw2ogd>D5AAdEM<311{$BmJ2rsSw7#tz!abpj?Xy-S$|9R?dn4zJ55M1ic zf2{lm>+*B?zQ})2&iXhU`A^_I^}O;pTvvMewR>;RFYWv&zl;~1_V+Dw=g)Nhi8)Mh zdij64<=4DgS3hp&NBhf1^E&00tp8`ok9-F9NBN6#*~@=+>W1h2xTf!)Q~P%}eoL?a zJeHyTFK|!4WySy5M{mAw=STn5AA0+Dd4~L6^RF&Ey8n3EpYx?S>-&D#KGMz~=lt^{ zJ^z2aZ22R{;%7eHjr<&t&pNVljAQ&F&hH-x(YxU7Tik>HSox3Wpw_$O^2Lz4B_SN;!f=<{aWHPi0@;6Ja0 zli#;8Gya$df2fT3?^(IuQU3@3*aJ@fc!vDO2zUEiCGPfzUwPSI&;L*BHe{3C{>VS| z`D4*1-R+-g`5PFSS^gR2Yz4a9%*!g<`2%;U@#`P-`v0o3(_i z?srk;rgr`!?td8eraBSz2jA+<_{GIe|3Uo$^Ct_LOs_wqUY!KzKXm_jIM}h3oj;$y zUlY;z;~DaYJoq!MKfvzLn+wh=w)4aOdE1=!kFLqg{xJ`JBcz^7Y3+}8BlNaUuDjjN zkNHcdY5c*p8S;D7e=O!N^6;Oi?l`<3)bzuRYc{d-WBj_yznu2>6=%jDxXj)EGoAks zW`5`j1B)N9^JDyL%~MYPc!vC5<3}dP3-uU1{f_mpKe(aKnfChxH~##Tm{rJ6>etl18#vd5t?muNUeso&hzfQ8-ALB>Gn*HNt%n$qLu_5*J3;%$f zp$qsA=*#{!=6E|l#xEA#;p{(*KI3lxW3_)Hbv(u|ns|&~TzmBKi#YQ`k7@Jhw|0KC zUkc;S{3p1{oj=p|OK7a}t0Lyn?Y|QS*K{%OLpR*E-?4rt%Jt_NwEkLd$bWp#mMuT# z4}0;iU`|~{IRN_C;om)CxBm*}U#!_bo*{qWD);n@`kNO&!gc;Q2SA(C_8hYF!+%z3 z_2=kwWo&i!^9QDC{J!Ti<2NR{^CSO1$UNZ3xJHS_iQS+wYjXU((&P&r{kIsu zxM`x({_za?Vdq>1K>ahq@$&K?uknj~M1=L0?7fcl%dmf)F;4#I3z^y9I)?r8m_xU} zp>bjt=@xq9yhR)A{)6=E+v(&FzL*)mm;J?*%<_NTe@^}8;4OCk$O6@Wbx_MceOof) z4^4OXf2?0XKM(AGtoa*$eh~1ZJqvF<&CZYh^H1sBoc1m5!GEm!gZZBN4gmZ=+5f!T zz5nxA{r@IIL4W+ps_u6FooxRwy}v?k$Umd8%bv6$$vu+uUUJT zogekj1}{7LgIhD>7dN>358|b#U-(bD{I9$nJl%~ypz-@&%8Wl$#{7sEboX{<2RlE? z-!oow+CQElf9x3iKK2Ja{YE)lR|to$KWvT9&L83a=O>?Y@<+F2W`D2oYvV@cSA`z@ zNEbSPoCBbH)Oo?V{)^WiU7^`O_;P0a@N?upD1XhHGRyyAcWANTh0E>sNB#M-El&IU zwr9rgwf?TG>d*V1iGF0~NBR5LN+*9jLw+y&$0C{8AASQp_1jo$JHLpk@^|b*PX6dC znc3fK{uR;%{9I4JJ9WqB{b5@8D|=)0?EI*|HR<8x5AMi}ADp`XqyAjTJm5$DIjC`B z7j}nUJ?b<^`w{;0hL->Mc4o%!MEQeh|l#4t*+}=IQY5$uxNynKe(%G z`QiUMKm6aXabh=&KUisGAAPNC?T`L9FaAP}6T8Ly2ek3gSv&0ZAI9a^ z$S0lr!Pm={AN2~IAL(}mfHe(n=qlAi6YcyMzk6@8li&A7+47@YC@p_ji_gM$2Tiy0 z!+(Cz_~T{FkM_IHkNjt>#)(}$|9t4t${)M&*S*4N|LB`#YyZI9qvt<<0BhQ(u#)p= zs_gB!+s+?i|MzSB!FXo;$Y*ky1NHw*=Wj%{_}o}M`lOv7{?kX}_q|oN{K)?cnMbd` z6=|H<)&2j0)x*DbBj%DX8+)O zWy=r$_u?;t!8NV(XYan}12_InTKVPsciHlzURPTFuoj=W8_u5P#@|v)zwt8WFRS`b z?#*FG{)zg}gX^66PxSq=wLi)=-TueQKjUnF=+JNFbL{rV`n#{R{*&MbWy_Cpt+f2Q z|6hI1i0yWM;7NH{3yS?_=5n} z^giB)zHG%AQ|JqmABXGZ7yMhp7lszF{`@MA_AmS= zuH~P>kIR-H<(JM6|H;!hv8(&f+HUJQ+U*biQ#Jehtg_`t`Q^nQ1hA%c{tuqG$ua*H z{5`bxOT3KvQGS({zd(ym?auc$akKvnz5eq_+1elFmlwZZtS~ca`c~rf3@!apOvlsQ7(A#=V_eS_46Ol*Vle) zl->R@p8qhew{!hz@N;+mW6i&ceWChkQGQ|mmHD#!{B49A0M<0P5x0aLvf6Ss?;#NTUr{|x#%QfeDeUWMcPHn4xz@haTpd1d*jpE&-C z^2MO5zWm5oyZr+^eQ z`be|C@5>DNZ*`_$)IU*wC}bYJ{#j%Ec!_G(8-y{8UwKCa%+kDKqj{M(i{&4WC z%=pdu?*4=F7yWEHzgPdQkK+aX?+=O`^-uI4eysIB_`c4J-?-hKKhyEMpe-%PKbw?) zezVCke~>OT+#}xK{&erRKezKE|G(x_Cx7&t%U$oS2{|NIpUghNXeOtEtkqr4wju7;FjT*MM^JD(}kDC4Cneuz&pMgb3 z_aC&cbo&=`0Q75XUOUdtZ?gU8>G^+2hW7V(|DJi@(fL>C;Joi+zk+^a?Preqb0OEC zhaYhIPw>0U_{}Fg{J)IGAGclmxa0jH7=P^ZrIX+HeP;Y#`Hxt6bo(P+>yH6`1Kr}w z?d|OTgZWouURE!F!T5DNL;iq={X@*3&wzUVx)X^1)=Hw{)vABWVt%ZOgsymXIqIJ(Cx-F$ z0-M!!Lc`R15I9&&;_m^6_&w3M|KU1(zV=<_eRb$N#-C&fV~<}%-}d7&w4PCI&^^0` zx>w50J>~FC>OBqk{&L0seB#xrpHFgDq#)e)?e5O+CV#;Dp~Ze7<$_ST#CMgWTj>5I zJLanWaLg~He8K1Y*ZPH&U=4M=_+Gz|(sR1He(|HUPl6543p#h`gA1koOW6L4+5Xv= z(s#pulf-HZ{igf}c8AvO|7e!7r?KAIpSTwG-{o9)`V_v?{H{vRd3-;7S6z_p{e4pW zusig#*Nv~|W`D^q!c>P~Ze{<9N&DNcFYht6uJd_prcalfpJoZ`On*WakUgyi^qurV z+9%oC)_MLeZC}v!EQ`MDP3%&zfgAdY_n!aFjsN`rs9(hPtNz#7?S;dCYSRO-e|NhB zUC{VKeRo@iccy*&@!zUB_oG4Q{;JcR`}MW!d+|3uAvoWSzv&a|7omHU|LgqzEkXpY zO7YGi6PaW$F!!L}%j1E)q)G0-LGhK)-%?i4zCFJE>3sYChP$2D^Wq#ZOU{ZS zCz*b?Qu@Sq=B3Zb{Mw{%<{8tCgtWiOdH<+Pj~{1=@C+j%Z7y>@k8NYszPR2HQr@I} z_@dOX1MCmoY~YVyx$&DXsb7Q|DgV*=|2oNe{rh@4_p9F{L}XuflA+u2&f_tTz(%72vo%P0Nkg@t6_UX(tn zHc3b^`HMyAraArKVM-9ihg37`Q4Zs6ZL09m4oj~he>Stm*w}v_&?S&ABqkit?KYW_l zx46wqvi@T=Ro6lNr)xJ#Z?(v{ycreU`Q!ARiT|JVpN8kHiMaWH&UXqt&|Ps$&STYo ztnVnjF6)pGuli5%V;zJPulzHxyn~REZvL5L9$x6iziG6}KSi-S|30d(NnUejhlC*i zFS(?>kb?X_bZL7b1?gMt>L8?e@ki;Hlyv!Lb{y#1ez}C-9~kI)bbjNN4nhj}&5PR$ zDd6{o+6yV*5AWz8qJbl*4DjsIYM<^QoxDj$4}+P4)&s{T2c+B0TDst;UO zH6eSXz4udFFIY7pk7iN&p!!>M5FMAo?U(39^fyT%wFg8as*et+nvlH4v~STv9YGNz z`Qbxle{*nEAq5-k4xPV!*)?wbA5`G<+eP`07r!-{?oR^#z>KOw3iylZZzJqU3Mt?ZkEtr8fFC~O#s6ny{$@A+)#tGN3sw3(dxEros{PXE0c9WK1gc+=JVyR4 z?-i}zKuDQw52WZJi%KemywzdAdW|G@5u(TZK4?v?g0JW<&p&i$VUFC_mtk=k2tss86sHFx{_ zXr7|aiQ9M1hJ2LC{|k3(1Gh+w})B6b!OgLTf8$QKfg|7oW;dGTw#&Y<8MM4Cw&lW?kp!|vKeG|2F zjbF0F-Lx;m=hD7;koGAt$@aruZbw`t^DoLzkmTZ|F$P8eCNi0u!-{P*uRwDH}pH}&##leT7RVSlLETG@h8=vjr@eb zkIjWGg_N~)eu$1o>9~}z7XQALiIG{b!}mV##y^d|{Gc12^>Ctp}>P@rQ|DoR{Jc)&Bp(A1C&hjUVxb9(lvcC2s!n{c+0w1Jzak zbGrT?Xr3>mz+c1~diEsnm#92OvYXPUeLTa?DcHabed#+pdbsiXKUcp9oUiOY zWwOkFQtg)+U7h*OhU(7!1$4fhub>sB$G=kPv!$#OKc16Jud@7-{ar}EQ@e{q{Tut> zhu?tz{0;TamgN_YqyDpDB;^-%D~JiVDStNWs(7fUqWXN~ZzkL(M2^T7`Fw$^wDlFZ zt{%Uy9&yGO&&%I5kNUOiiWlkrU@tzG8V|e~nx4}2!RnH~sFmU@;ri$8i^_>mmz*Sj zD9_#hCBHrWo>^60ClXcp7Vi66R~3$a9@y{RbDZbHz9@eq&GSU@)+70GUUB*DKT7^6 z^P~Ru#$#0fA%1K|y?@5<=kc}BhpHY6{;_;t)b~)Y0Dmz(595UtKe(Z5%z1Q_J^u;u z_h+Zk{AcUQ^1v6C2Y+kRnSU<-P1!T_WKVi7sjYh#6>jFJaPa@I$r%p*zv$Moeg_}I zmEfla2i$bd>6@hei(9MfEavYgo^l7Jx6^aPoG>_H`l{=rzZ6`ueF=7{aUJ{)T690X0r4MEe|~H|`OkNz z%QyI|FQxmxv&3Mkzsvk&`m?GYvz%H;X1VM{z1g7S-Mi3vlG9Kf$KpTk zx68M>@i(LSKY{P4&W8Cv%rD!Da)XxhI^-5k{4c~0(}<7e?R28&FZ2IIKO^m1a(s9X z@sKt?%@WA(OJq1bCpo@qy-jwec^-yE^|sCG_f=_M{3~0`YD?!)cmdzX&wBP}jk`$y z=UriO{pZj@I=@-vB){26*&jI)w9bETclPIRob?|Q;aWexpXcoa4ybY->2p5Mt3kQ| zFZiK%_Nrjo`3+9L_xwpQ`Z1M*gc_&Ezp6i{_d`zpsXWihTon-Vs<~{iXZU>d4Ro4N3fPV*l(;qvZl>G5Lb>D-`U;c4=j_Y7$`n!oc|8l+_{AZ;{{&Ucy{rHU* zZt(T=c~IcT^WoFP_vE>YE|7K;0+3i)h<-srKrN|BZ)qHIK4yr## z9Tnn+>-jp`{I_{pIP4!g-Fd#j7lOuh@2PX=chdgD8mRNZ|Ne>el(SR(rr~aXo&WhD z^K0`@c5t}G;qaej%#ZmhJ_cKdc=7p&7mkC!bFHo)N&bk&KlVS=_OkJZnx@BJnf=F# zILqH(E2?EPN(n__|F9Jv;9%76mvSld}#Ph1Q%p|SI1`_k^Zw!^PkQ%|14tTH=Czt z|4uh3yCL7k?Ve$t$SLZ%fd5N=UPc!cUdTV#!t1f|T&8k3?2q5qFjq{K{0EsI?H7NP z>Yu^#$^0jDg5sxcrNjm;({DEY3vjsJ&&I)`19R&3tXhfkX4^On>dpS|D~Qk}D$nm! zp`}uBkhQm*u*3O6B z^O+m*cS&V2PSpKsl-t`Ghx{QiQ_+bX{TufZ3@^N2m$=Tga!`{4ZvXAUC2>{=>dZe!u^l4UsPPZje@1m>w@6UM7yN~6Po!V);y8G%SNgp#`SW>x1@h0f z`>6b?mL(Qd;^)ZoC{ZJVUPS3nZegXwyGW;;A9ApWaDHO4KY)J`^CQ3F%ZZ1yaFk#9 zd_lyg=z_^R?Dj|hp`8C2`KzLM=~TsUF+cJh=$B|5HCtpQ^Pf|{R_BMhJNqAcbA3{O zZ-s0hVBTnSnvv}HlJi8(=||2Z12>+-4|5)$Y3DEI`v0PGRDP9|Px70s-2F%L%MJE# zjQK)Y&h)#F{oK4)#S8XtJcFMvj~{`{-^&?J-D8Q((DcOX-ra8Jk8u8T+nv;YteKVM z54BE@e<9x&AM%ffJ?~cejLsjr)u6U(ia$D!_9;x~*VFIQjc)F1_aCI+ z+b0lzy-G=bv+X~#KjxKrrQg_mL-t=0SwLs$rfAN_Uf3frDGyg`Ke;)fh zH_30M$$tm?xyVuFEZ8l@^EW{4wso zRrBXl{3g$%N4X0v^B=i|l@h2w2(Hg?u;|A13UjdH2j?klXK|}~UIzc5bq&RjavA(M zj^DqZv-up!A7}qZ|M`GhsQ$byCu#qXKRy2$SegA?E5E*Cdj?uM`=1YU`#09pY5&9Q zR|s#&@d~mIupZr~@=m+`gKYnjtyKQ5N~K@pr1ba~vHt{)bNbIE@T(!p{&@ba(Ej>C z#S8vFlheCVO_g7;KYj=M|N7QdOYHo}KX+Y9{8dxsm&N=jx1iH4zmAoE8jn(b^GGWH z2`{Dk4~6OZkIsKewH@o-_~rcnK$gw_c^v?_q0{BRb*1tv+b! zep^6xpnhoCehr2ziRjDD${8pO$-)E`#hW0qiul*cuKBnrK@PnT@Ukz#X=VZSShwJ=^XQdxs zepLFu*+ktJ^RH?Y(t~S|;x{{|Xa5(O2X6hG1}v|PVn@BjH3_l-H*>9ZFz4~N5km|Ta5y->;qp4h;eO`&o1Y`jFXV7T)6X>Bl$gKA!2Wael8fxms^cZNrpZ}jGH{1Ou?+(@fc3Ug5P}3~2bPZppn>+tf`J8A259*&Wt^cY$_mhiDoOWJ-c=2(&|L4l-S9~km@1mKq8|rWU$o}F)?p&rnjnfoA><*o- z{g2lFBkeENknLBe>|a9r5fa`0NFUN>a$7cX%_)-Kr|}o}q599p3hE^K-};CA=>HM- zsB~fPe@OVxdh(ZbDgNjN+NUs`U-$nz!xtpdFF@h{cXlIwqf*j;%+vpw{g2juk^HfZ z9fY3*{_lI5*0DWxB)@L|tDj$FNc-n$_OE#j_5VDTvVW+@KjS}I|BvMN6%+f~6n{WI z3kuWiA7n!ZSYJ4Qj=ROoi6{;+P~6&VO)RcaW#z}wFD*AMSHpX&uN@Q!hF5Ext!JK?~Sa<$2kPZuZTq)LB)pHEK z&b?^X(oYY2yb6f-~i0l-_t z4W9_>Cx!8pqk1N@Q8}G*udw< zuHf^TtIo}eC&c{^;5GPn$Ui$S3w99|DUmt`u`8+h_ff~bL4fj z@F-}Vf9*PTzL@CbKjQ}#Zat{NVZVO-Tny%feQR<1F~t2v1H9rXvf z{x^19Zj#^Vlb-!Q<@_8xd^-_3f$hNg672si(#xmnxxla9;e0hP&pEDvc;I>T{-C2{ z{w>!3o_!n19Q+7bed?Sv7|0|J^Gl`K>hhoA5g8z%5SBNn!RAPQS2!g!}EyfhxWR zgFJ8x`~OwW_D+D0gMY!;@w@Ey2Y=0WRR5V%KFM#Mo1XpGa(y7e@#Whk-(QOQ5AMGN z_UHWbWd1>D7e5ycFW_+a7xexwv3Fn`&lhkuG`1*Q0>h(PolJ*ZWKkCn?()#xh zt>4FH3~=X{>-Xgb{`-fk`0DMKweTOU{qh3aALkp1s|j&D`#;hzo)_$nc>4d0T{juO{jTf-u4$Gt z9P!fmM^zs1hvY9}`(ymE7OlSvRIVVpex~@%pu7FMewH48{A~8a&FVVfZ*Yy16Z{|Y zb40wruj}bMpLNV1!2H`9pHTkUJym}T4Rq%>Dm(eF1gGW9e{N*^Tc0`WZ#O)s_>DYg z{b4xgKM_73@d^mFVgKO`MG5yR_NV$!i%Md{JkI~mbLW@uC6F8ZzYf=b&~C+b zOWXeK&DTM@4E~Sj2EA$0$J5Dwj#z&;{ujFQnORAGi}}&MgVy3+--V@Vso(|bYXKIy4a)B7$Wq)pmyOXnMN zvPI-|b-wQZ`{wOV%zuWRQ2*TU2;JwERR5tl$ld;bYU3{}VYkhA357C zS~&96YP=3N#`Ox=8ye@Gx9ge2`d{3~UVjk%DgS?1`A=xDJOBEJo&JORgE-l}{$Ooz zri*`Cf9Nl6dC8G~+UpM&R7~<4L(=0%{UNr<$(d>W!JKpS`oo4%pHFk+m-UCxqvezQ zR+{{%Kg9TX;kn}d=kOmtA1H18VJiO)dfb@v~+{#|b1M}5+|!s-7%AzsfYPFQALSH&OU^NqySXzA8<94{VM z1#g^>7qh- zRN2!UqViSvN!yE6IQm6t*g3I%#Lorc28ToYI6g%qiY7?@V)jGK|9O}AV~29Z{Ac*S z7r5Jh{xeSgF!wW9%bfFPbWYq~=R~{^Un{EOYcOviYd`B|3$DA{ZvQy@|7X(v70W02 zLl>sUk8)qgWi~euee=H2m`q9yWb&`K4r(cX;%zc#7@3*-k?{>}~M!56m-L5Va=Iiz2a!TCh ztiQEE`PEg0V;#$R>_5n7hT%Hd>b?f&t04}D=3Vi^<5ztz$6vx*)%oC`L|oQQx#A|2 zBQ(!XW??9Ip>NXiPrQF4F#hQL@PC~@$YA|6e#8suJD1NZ>NGDge!94|;z#~}+EwKL ztIH#r!t&sk?>~_n?C;h8e?R(Zxjz>CYq|d!_DA}i8RF;8_BRrDNzDVs@1L*HK-M3Q zXumXnoXX!&>irw$#mfH2@pYi_{t)oT=~aJL`E23!9+4?`P`+%b_wS|q9ucEL>OCBY z2lSqW)8Deszs37o8XX{xb>+q4i@6*Rx%D2mb$BGwOdBoh9}^tHO;--1+xEtF8q5-%;Di ziTf;Ke}x^5Wg?%KjGfqech) z?shqUEL#K^6y>iz{-TdlgQu8Yc_QC`VpeS~e21Hfuc)I|es{umJnjG5Ovv}(M$V+` zS8FZ|I_~HD7_9$le%@j`Km5lRBL0mje)Cdge{e(V{C$vra=VppBdQ{t$CY&cNaf}t z@{^6fN^=qTCBum|DWRVIQR*kKi1VoCad}?{HHIc3!IEN7it{kn|BHw}Ha^8~ zT$Ua`#=imqXZ`autdrt-p(sCkbN(5bqWW*ae}MZR0z;hRHHZiFjzb?8NPdI)Lp*+c z%|Y_Z`nLSvgTL-$PWx}t@@+PksLShgV9#7WkeBaF@8H+p-vWOr;NOA&^#j`y_Q!ql z*#7Ikrtu4-y!h}Db$xTRyZt|WMEx?%7Z`^A!@r#Emj^gsvbg*Le-lm@);jgPz&VHO z&!~SIe0`li@a)7%cK-+e0pb@;Q~aUJOUeK9|AxQf&zCsXpMt;PH)MYszcHqC{N_*p z8~*lto?h-||AE9Wnx*V-m6G51FWFygE!TS7)z^-mc=;uxMjJDXv&LP0*_l(X9ewqr zaTBiYHLd?8SB=gOPn>Y=go&dszjE}bYuleS`N}J0Xe+}Rp8V0^Y2ndrjnNY)PMFxL z`w`cheAT6+Cpv$LE4DQfH<~hT;^_AM6X&IM590<-3a$$23i{jL!wfWs;>6&9+N>QIoEYvMEml5e^G8ierTuac{u;(p3Z%f z61qG;IxjaNuiU7vS4_W`;2bgF!Q<&x|C-WsfUit9EOQeK-*<8ij{9dy3ax&K%fXZ#M( z`S$o`(RzOS{?s8fKZ5FA2y5|;(_Tl$Oobp`(CzA6c!pd27L8ZuN1n3BFZKPOw#U=6 zwP>7UsF9E%RL@Ji|E|9w1j(G4%HGk7XiX)_xK(Q3y3i0(*3$Lm`N5!(kUQ!8#PtTz z^+H*L9;_&sVK4;)MjVZo;vqk(FiYtkH zkCFX*NPOB6D*1apvigJJ56k$KaQv|T;`Ou1KX#?oUt4L$PoFmhfSO!SFv~gn&y)QX zKRN3UlOjSGU(j-T3`+&Gn<);+OZnxBjGq zhD%((@Af6}$t_Y#)%)c-%3NxPBHjGa+j&2HZ%p*BL-|XcFHV0;LHvR}>j)``U+fe*pTsMEaXME@rty36%wAR9;+H>1Sq1A9)$>bzUvNZa z=kt4;^7qiP98vOot%Q_ctjYuUQ-u%cxUGC_&ClO>qLz>n9_l>*x;4)0KX-<6-~P<( zf8)79i+c~Yqx`co&O!f4XNq5>e#NxEKXL(0oT@S{{zhW{ ztN#6x_iv!~+Y1%MYrKBIx>n_*<=9}*^1DRxyD|A3j&ct3hGE~qR1c8fTf+0fI&?j-DBzDv&7VD<;v9){CyVmPsV6{gz;i3ezD2v#qY_$+`db zaA$sJHgq2M?RFk-Ttxm`FXg{uXnu(O`qyjwUe6Elf?hpo{1mtN{X+9^Bi5b-%9b?s9PhkL5EI!r!~D9?8+6)$)c0A$4D}qT*iCHE zGT!#~Us-=&#(zRSeLpTgX^$ZN9U$@A@Z6vud!*4gx92w}sM4SHZ@Yh{>LQlQq_whUlayYOlUi zBO#0HQhxFi&HLP2BO$R@>3aL=`wQ>ZNXP)nzXHpte!H(mLeh=j4X16X;1<7dTwTH1 zuAbkfXPo_mKVL|ERDTQ%shN<|R}vq!ufqdsCge?uk8Ix+52~3Ee6PTu^QHWhL-wKX z4Tfj|tCarx==?yo@DHq+5PZ)dNasp1&r$ZWhSj9+H`nxv9z6rKL3ip9bdBGtEy_Pb zkE?!zGd`91XR7^h5yubDXn>pw+o-%S2IVEB;n^zw#(A_)@?{l@|6@7APk&1pC95EG zK7N1V?P}k=AWujcN5|#)INp(t%l+aZ^t~7ouMP2nKIy}ai`<@Hgr8sR74`gfcs#$* z+Ui0Io?mDM?UN**-(%J3T^!Yu-Gm4fFN*jQai z@!AkC=mrPBa{WH3oF5{$7|&~w^FZwN7x<^~cO4-G@eBM;?_nZ&ll{|2e@lUX`siFK zh+m*wT_FYWi~T|ET@u94Pv=TW#xIM`C-K@4FX+eq`n-+X^ZSG5pUN%PR^=}_eVzFW z`a8{*WLpxNCQs|dDgESEPl!eBg}`3gZ$dTfd57QaqY)Nf-!6~BtF%k-Bj zA7uU5USH~@wdZ@#?~!(-{#^F|(tLS@eM>{H_WtSNbUf5272l2IKR8$FvF(+85O!qD zR0!e)9V#r^;}*Y5zfk7~cB%9?koN8MvpJ_b@86f=V~_8orOxA9HQs^bzhITRZBOU^ z8`}BReCl{f6Q7XcwIN>6%g!CM&Mkg5d#n62FiQ0=)%{XFzts3qD>`oHGv0Rc&FklU zKBxGc=Qp3~JpcEO&f^W1IggJykNVTee{oN*_~r8f=$`^}e$Ar(Yn+ewHx;%Zhp}zZ zIqErLL?7CR@oS#{gP+XeaHEFmuZBHu=5V}68c*Ub4##_>Q3BkH^Z7l}25#V?5ijUE zlZLdk$L}!DPw0LJ6~MMFJU6rWiLPp#S&yHk&4)t#@SXrYej%P`WZ0P8{tR$n0qeav zO>eiy&(G^8F8KmaNSzqGIkWhoA4ZR#@t7J_E@3|^#|3v(uhsGz}Wsjd=|Fmv*`lqibv-o*EKa3+C@%+A0 z{%r6AN8cvP4W5|RQFHB z8}SnnHDC5v@x%2H|8J@k9Zt;O)%pj=)}-=*zJY@8msq#{KkmK*Op0P_yI9gLaRh-y z1R6wGiGvtcP-ro&U|52RqR=SdA_^-(@ERB}A*NMPF}J9Qc|p_#(y?*!J?|y&pbM{P~uCA(c>Qt^eW%7^v=7{zED>|oL1UL-qn8}Zg zf5uZqJ3FA0-$l}nCc0(kZO)W<*#>AlU8->>a6il9K)YMflA~iwxHy_WJwIPh{#-~RmwnhLus_eoxmlJI&TCi9YO0g~=Y1+vB>Rl4epFV#Y$f zj@J7N64>X+`Lp*INdEP$m${$Wz0~l>R)bj2pXtAHL_|BvsrO9%$oMn&fLZr5(~dIR zZ{};;0wX8x$8-=7%VTAGnKvD_?K~6xk-w6%{*#0I*U8_ikEKpLEIU8wTvj{&{#EmX z_I^{Qm-BSxGDqk|%o9>R#Cud-ukHJ7bG~5UJyL&;$(}Dz6^1_5kL88jlO?o8~zsi zQh$!l@|XIH{KfS+N%-MCtTsRYh>uj=y6VD}A|JWORLS_u3*2W~)?VmxPQ!j!{v5nm zbKBJy>+)C0{oL5Ubo=R|pQ{Vh#5~mNmz(@!uZDOc8v6MNuMOLA%RVp9(ed1VKKw65 zyzW%fE>aKo!8r|Yu<8FWz4srA^z3WsT@Vft!zF%i&O?EW zaGCEri-M*kUs#V-iC*dTt(uy68j|AH>p||{<7rqUZuOeXkA4?7Aae1UetMPq#Pm#aO=lDOw(?I^1KH`(lyry@Qeon5CdivY! z{j`ZIP5w1UK*YS?mHBtBq$BZ`?2~C@@P%;Ck@RbNq0p0(?juD$&X9WQB1xyFA17{& z&x5~9@tq_7J-MG&j%})>;OE8}_XRqA^8J*olON9{+z38#~=A{J`eNP ze;<=isVmHUBjbO8`hoch%KZS0L+tk5Lpt4^qsL2Yz!&*$y70F2`RX0o7=G*HJ8!S^&uM4mTZ#5z>>cvO-?R5urgHGd`*X?PIn7Nt{`TSXcMCx0 z{1NkycIs#sg6X0i50*cUd+OjEoDchuln41^xWtdd1|J;NK79VR`NF-{{%AL4({sH#U{DHL6T72uCqSxCqpe=pI1o5ui;3k@;n*0*2r%SXAd&- zov~RGo`9H24~={CcaZX;{m(XV#suSL_~fsMKY**Bnp>{(uZsD%#Mr;n{CSJ=Gvjw3 ze6n39w)5|jn8`oq;c)%A(4temf1C;b)_mceR~S0=nfcV@EcnkcU+6Po;BVfRE}M1# z+Of_TSB;eYSwCd;GjUyX`Lp@E8T+}s;oAnlsyJM~yzi1fL$AibWFzP)gj0lc zFGcvtE+#z*iyz8?*?3vae$VLfd)baA9**Dj`3`52?89X}hI1Yaj+pnC&PRZ)**;kP zv$i8l_$+74zb+P?bVwlcyNq!vsATHbdx6#4zk%#(a!%%lWyl%DIzQZKIVtzt91D* z#C>5!nE!0BS^7g;v;7|D#%TU{|0(lt4fMcnA84nVbf)*HGLs*qJ4jb4@|E;B=!w2z z|1Ri6^yh#u=#nQt(ERbe1N+wPj+gRxQ}%u>b(7(b91}k!^Jn^giBSk3*ZkSr`AG8>3{3p&c^ElMI&#drE7y&TzjrgG!3nKSVoHNOM;B++o5R-q|_PwaNk!S3! zj!MH_b!0w6+V67tt>FRrUb{=*?3jkb28Y)xr(Y%c`G$=DWaF8JQSx5*2i&P0({Oac z_)p!?QEB)))_eVTJ1PywBRuzQ@h`xKav(mf^@*YJLj}s;$8!G5-9CFiZsL~OtAVS4YySSjRYCo9 zVE-rnw2Z$OXX_Vlaqak9!2USeOGZBwcHI-bO*rI(=igHYoBlP+&)3jTcfQfj*$5~f z>j-Wi6HWyq;Cl-nH21L^qUsmTU-|)GMnALrm-INCWnbfuP71rn$hbWCp68?DP2?V0 zfxG9L_tn33R2rtNGj3JSk#g^-$rt>caxs)RR zjwqISyw%zBW6o{0%RlyCyiwu)SzF{Q@9&Hu9kkcLex?ID?M;wQJ+$vvU^&BQsu(}0 z|8H)c5UM{pzJ2H*;V*E%r@Fm%{H<+k%8hLwgZy#4O8v~p1O03AM|*noPySltd?ER^ z`J+FEfA0JTZU~k?&R_SxLfZE_+47eHe{9!@wcggIeOI!OQb%OV{u%q3cKgnJWqaz} zA#MATZ2O*AD*7t4T8@{e-5?Uom(1o@+V5Pd$*ovQEGH0eq%iOxUXPdOjqUfBZv zFA1+dte$M>w4*`!z6v_~pUjWz5DxQ?dUuOOcM&fU`J?~C`p-Eh$ln^wPuyKsuW!~< zbNfN=cSQ3yx1R}_{Ly|g+iS*q7wm5^z04=h@6tc{<~<;8ff+{@At2g^RF{R@ea2IY zAH*ljJ2Y+Iy2>$pEXDm8?_DDv<$g#$iKWr}O~OEc{L#KC)64Itpq(R~{JDtNjhp(& z!3VtegY-D)w%raFbRxPbkAYwObVo4%Hevjpct*y5ZzA#Xv3FTmFf26ylL<}CiheF{aES01>dhfL*yCQXYj>aVfU|}huz#C%J9gaiy!2> zvbf6zoqvf=Mqc^2zv5EiFB!|`pL2I~{_+09`3U!pqf9v7o8kK95A7nptuGW&JHU6uVcN%iFf0PgLp#A5+qVvz` zZ1SD$`@*&|KAoPeKa=o>O;A z{7bmx`TEp!{~Bbm&0^+v@2M~S&xf-2>m}~59e@9A z{m&nF_;^?_|EQl;l7DV~wtn#{|B-%X=a+KTFMp-~smrs!M)XsF^^1Bz%IEXB%U_Hc z1-y0a8_DK*d2P$B{dEiEe6i}4m+|c`i_SmZPnOY7u76nbFEuFNKIlfPmEwJ74%U?z zBl|C0UtxKj1v{1A?q+?AddP&*P5j84lirJ}KVLrDeBmEx+IM|VS+IS7vO#$KT5x{Y z?e8RYugs^g{k?Jbu)EFFu)E*nuv_o52=*6t68{WK;{%1^;Cu3C=ii2cV+QE?`Rbia z{mJ?HiUx9i`jdKU^!0|W9*E9A-p|JTdwW;oKlM(yeXm0J%qQkY(xQvl($6i(C)UHv z53ZY$&T$s`bMb@q=dpM7OpkA4T}-;FF@C6ABmI}Y)E1Fd4*qTxIp~M{+5Hhjr(S@a zKK45(=QluSztq78oAOM0=)VZ`LiDq^Zq53V@yK?u(6eR#ldsqHOC0<$|K8j|>X%1l zf9nA3+guTyf9DJc^T+k+)XAoNFtTx&=S=MlI?}=U3Fe0bI_D=y?*cmQ2aryC<&1~< zM!clMVd?u@iostJ?ZZQoFDc=V_6z(6qw7z-KT_N89EAvS?T_q-dMEjg;g9*p{dJ@} z2#5P7lV>$mF#+zIOr70S#Ra%;QYD(I(mC0El4baw>6w1}r=j(SLfr4wSoS^o-(>H{ zN<0*uf4m=#`kCu~uUz+&&HoPN8}>lSUxyoE7Zvx(Q4cGRHgwMKl!6~3<{QJ=wZ}xg z|12{mxI@VoTvYD@HjOp*>9;YzFZw7fk3vQOoGGVp??39+^!+e3tY4s?MPhHjll!UoxK+{msqY61>SwO{CD;1c z_|aj$9YlEALE-j7pC1gi4{YyCcWSSk-*;p()olEto_=xDL!tiXBIxJgVsAhd$a>Lh zMjxD&(fP;wpQxWM?lDRpX8beaN6HN!oQJ2rEdhU|yZGQa_;+N(yslbGK(BlO@&Mff zoyf%xhCkwom-o^7=^ZrUCnW?l!ts`ev~60=)V;HiSqG-xbLZ#T@lqk zTl&56=!s!RokK(3)#KZ&{j6uDeCYB}F{ZQ9@Cn>3BL@h>L3V^GXWv7^`k7b9wt~Oirwf1G*-MnM@?+8b4PRjb5^<*= zyPgDD>@S$`{ijWTo%|JcH1w2J{wguvu={7nbG#2dxA}7sA?XX&o$^z#{IPzyQPS4Tqq9LztiuOxnu@q^@F=Ki;2?f6@bbfqp0um5pfH;H{s z%s-BI9BcnsOZ3NCPZol2+duinYuO=g9^%T0{f0%=pN%G&dc!;0$WP}}fqY82ujwlF zS77|QugqWT`j1bwe*bZHd|O8Z%Xb<#vfM2#_l}nP(_>ZW{Pd+IVK@1c&(aU^d2O!k zqVul``k6xgvc9+I=isbm&lXwzOg>dR{(iWnVf-yH zj`i1>`d+qyq#x>GYNV;BT7b^`6F4tp@2_*=kNJ1(L08|d^KTRQbI?C~Vy5)Z4$9`A zzq)q(u^wT)j_A~`A?7WOiw{d?N*$8`r{eLvv;=J+8ghO{eQ(VP9vGYYsAc;fMWW5N2f6!!ZM zKTYb-H4W777aP7k*zqC9#J^u`0-BHTj%sTB)9yaV>Ntx|`F3q-{3lz7+kv}~f26wz zXiwZj#rz{5jAu4~0QV}Lf4Jta8u`ch7j2)&Ju6>TJ#6B4pN-Z}ZMR52tlzl&t2fBSfP#NgUEWIrUooFq803V-!Pm}ci)|U()*coukG9%o?p6e zsPXUaZRnJf`AVrG{2<=_!2&nP-y-mL{6=XL=H;tl8%=mV?D(+WB-VC)^h5pz?<@a|#$IAd@s`{~dF%A*Ow@$NGD=P&|b`XheizMprF>VK9?{^=*# z%Z%6bJ!HZ4>AXuNf3M7*H=H2nY2AfccXN3kbf4yl|A76>8*dH2zhGAQy%?1Z^;Z}E z9PYpFDB%bDv+2ajzaspI0k?nUfG>ji$MZ*n#Qu=?T!CuyxzSJWrD*-sc8l~gAK`7j z6#3oE$QNW4>xX%O=7vuBEcrTE}Li_Ut7 z;g#S=G4O<@rTYHt%=|US4=FjXoE*>6AY*yN&vHl1`_GtvThSk(d>QY7n2#o%`8RoX zxco8yMq?g={UGLF{c*-W>2XE?O!<)f(Fc<*OP@bVn(x@Yt2czFu8majlP3SvtI_#a z{A4))j^VnNH9mR@a(Arp(X$qv{Ee}~A%DkPbcc)pQ*Ojhia`0uZ#?b|qE{$_t8^-KE#HS|40PrM$@-_ZBM{G~Xb ziF;5P(b-3uaCkqnix)Rw|E!1kPZ#OigmB3B{-D>$Q4aE=@#1-5H|rY*;g2s|S~sYl zJRhg+L#JlvXY8YRZ$$G)`@+n>f0g}^$>_(rSDAh+^^W#Kw9V`n_$p#oiL7WHAk$;}>;tG(z3i(|wK)qysw;nTPq|U#JB2zxNKkH7>&%}^y z{;9YBv;2K(%_A|r%)jc+qMrifuSR~S1jrxjufI=Rb#U-}D)-k7-YWId&@6wcTJpCC z+TYX;W}b|CVV6tBKa%4-*e#0T1AG6j&0n%>k*X9Re<}H0El`B-$!EJC`|PFjZxQm3 z`uVHqr#d9dU-F&*Z2qlpWb}#ij5dG1l)Xft{8h{EN&)gk`3>yavn(qAMoayY4Djc# ztsQ^=sr*yjq`nN~pCj&=fL*`5_W2X>sQPoF=w~uue?IYU?fA3x5bC0AJ*0eXc~C$9 zwEooPty5M%55KceQ`iPmU98{dBc12K2LB zewPZ^W;eVl_O;Qpl9~w{F2@$x~9MJ_m%i}gns-X`0iHeN6B|Hqyy?Ss;k5lhe|B1s~XRi z@5Qb8^98pNcS`8;I`j-#aQN@Cf4890+Q0j?%y%UJo-g-f*HMjRWJG>eN_@fopB!fh zxu2Jz7yDnEahM0XYvGdSH@^|&uLkGG9_B;oFsy7~kiV_q@5BAV{8fDP*Z51F9G)*@{*g{T z$e;6unJ*}|_)C3b_;4-$9N6V$e)Buxm2Y3NXOO>q@OO))pXI5)$lnH&E<68H7n*#v z^N;7+3oZVb-%bwx;-GuL%)i8fg>!=Zm16zR72rXtkqDQkYTRo!sA)<+Ve?PZal-Nnt{8voop?5>ak z7kq!uz_44JC=9+wGPgl2_rwKrFPx_PcZ*>EfaBw}a=)_sZMF_}J~jMHH0g)(15!9w_-g&r!*a9Tn%@QsS;Yw|(}!-8o_};`0va^LF0; za^6nd{-zE{<+h0VPh7X^*>j`jk5}ZG9HzYu&8J)elF|RyML&b`e#EkGans!J`^nPZ z3;N$lHq2;u#ZeuVhC^DL^{DvK9hHXD;6FLKqu6onn6Y=^jq9j1ywT10kDVa)Uj%wf zh6KakmUBa4z3sxogwvic(D`41`M_edPs`Vdhlb20(bdmP{!=4}wS9p)@;4vh<=WrQ zb3^PWuwJwGZ8`{NJI=pizYgm)`+Rr_{M+ZJK;8y1--(BO@YDFH{Et0lKJ_P>b@;cv zaQ&z6*9yvey@)FHS++bsxGMa9*pTpgV-KsJyU+Py|1XI81;hKQY1sYZ^|yTRZ;x+pJVjjxz+TC^f{EE{pp?FU%R9Sm8ZOV5^FI=PY;M~$+y=KlPy7q~0spac z<-Ndwed>h98MWoV!Px14MDZWj`{(8Hk2d|N-9HHD{|7Q23+DgT--q4D$^P%)`|DF- z_d07o`k+(8@9(kv54GM;w!+`~K=^x|_Na&XPTZ#XDUs*L6X0JKsibr(^}FO}F#p%= z9FDJ>R0u(SA4`SZ=g$wjtF7-V#T^_c_O!y=D2WJ$zt;M`ujN0AcTFST#QUD%MV9|} zZZ;t#&Nck&{jrTi60En*Es_3-=qJp7?xaR#Ep0(yzu%M4$Bi zf~4_&LAr}~QF3l6D=*$R$oIT&knV0$KdL*j@!NdUO}>d2AHJ)K;{SP>-_lRwFvI^1 zA8G!x_VdVp`dd1N!S{4J>;ACg4?#76UF~K62E@jqfNVi z(ZibmtbMOs_Y+pUFLxsg@P5LYwN2$d$flY53DvujQ3AsRY5qz-lk<}TlNK9y{1Z7} zDR8I6r{9-vY^pR&L-}^rH&q%^(uC;u?#E4)hFSPNwn5Ho3gmjoH}Pdx%{wlN|MMig z^mClyzwi>xe}1O?^M1eBE^U;Czlnb6`y?xSwMhf-`>X6CZUNr+7cXif_v5w6-1n#C zTMge!|3QBr?;-C64qGd-m-f)@D);#b(4LDUel=w7`|Bz11@0PRHp|`biw-n^HwH4od^24MEsjy=KpnY$B*ApY1r;o^In~>qtfu( zSg8+7v*oq4yLn$N?=%b<8m=$%y>NZoQryA#?w9?JLAOqO)I+|BKmKA^-6;M`W&f9c zQo~I7zjv1AKYPC%^S}J|&Ps#bAD}&-*gc(<2IhZ-_|>4#YwCH>g#6aP{7>H7S!rN? zm)eO4NG{Ep5_!@V-^s@orDN#`_})NlKrd=pQ*?)v+p_}BBp`tdRE z{ogcCtmW`$^Ta0g+x~Yf((6-3P1NI`M4_2S;rM^26J&njyE<9>@86kvK(a0U5HFK< zUq62OznBC*9P5IZ2L@T40DI@$Z(&*&rFO9VBRKUP?etswsdx_+=XKa0DMI>5=lGuS z6OY1=Qs8diA9JSWe=WYR!TkA6V*fr>Q#WHD-uXV7|0M{=2mUb+{NH5C4amy28()kU z&3YUEi5fExUIO}3*vqH9nBF(f2+MaE{C6B5rVnSt7N)#NE?8FbuwH+)?VB|GUFzeS z?EPWR4~Bo{53!#A(YoLwz|F7|?>rEm@2dtqH6%PA{f;%y^P#wd^FrkV!{vUw2qM@| zZqz6I{!{rr_?~G`$ng6*p!2gfY`LFrckDvapRHt!fzSHX$ z-XA}8g2^B5%W~j<#-MP%6@fm#Pna&T|nZB>&4G7tWVC2q<&!7s6+L9$jkW$bEjhF=7joZ{i!j_7j?a zdMn5IgXU#IxuZeGzP7R0G zR~Gh9z4!|4j*s;)2jSR=;gkO5ybg;+{~Orz|M91!{cl~Mw0--=((_~dPs_MB*bkd0 zLoF|G?{nXU;{G%{ZXIN~FYFuk|MS^l{})Pl!SJuJ{BylLbx&hey;EbgT-xcN|7z)8 z(_Px7G1<&u>Wc%)Ubl5PCYb-UkC>GC|763geRbzIlmDC%CVpyfV?VbX;pMWAzsuDo z-&ii1!2e0GC&hIE%K5jE#y{7=n9sDUo0uhb@=wd!)vcK=90}yID~RYa_K_)vYYu-j zbU$M;`aegB{ovHt`syk4!<^rv^t{4suFo4)$?;GEE z$dC2kQ};^$_e7a=z~d;B5A637(>|{ce;NC^mi-iaU4(p=B3`?m{}KDS+5cs}^*zU= zlXR&b($CnF!*p4eiF_(S^?^U^xPHH2`FC-?;FTJwm&)s_3fe2H6U~1`Cle6E`xW&t z^9RwWD{$_eb}E?vr3aXFlkVVy-Ld~SakbGS=G!y78UOAKLobE@N~F{6VESEUjM&1I zqXYWqmEGqA`Dgu?5c{HTmxikPC{x~?Ji|ZhJ!0C2Ek}5{>^J^d{YSf_F@*Dv>OXDQ zF?oyFi4|ab5SI&?+{L-=IwII@>c1_!{}9@r$@=fL337hzwE9{8>qh54?T`A1;J>~8 zljbq>B>I1UWplBQSo56GEB1eHKTGnz7e{$ACaV|CKkZxk2(=P=&V3q;?4Px7=^kj( z!}gN;M!S~@oTFwr8e;ipeaZNVXX6L)+Uqx^$A5fZjq<x&ALPL@Z! z&LH}CL76e}kV(Pvudsh<(QR`6=<}?7KBqzL_|IjZum3^e{3QRSuq(%WrhX2D9U1cP zAiW1z^kUGb-w+PJ6m%Q0UZfnlPZ^({|Dr$IC)`>o{BI8M-|&CN|6HVx?H2ie4f#eo z2O_q8LI(*P^-x$}$p4?&EhK-l@q==h_sr$#^Jjctf&4FhLHhsw8>$~xqyEp2=3m?Q z(~qD2uhb^wr+cXBFM+HU?-9-)7cVY?T{Y(a{-E!kGX5!-63|;?{A=$geF*I?^~HmK z8^u9zfFE{Ne5&=ocxMwI?H_%3qV#{ytFLw`0RIKi{O=-m&-CM`|0_lNGVYJYKgf#X zf5#gCa@wX|Yairngu{L(>jiw4K^%9IFlyTSt+ajX zilm8;?SH-YqW_H=sAAf`Y!c0X@oQoJH=ukv*8I=Tm=_|QJ&TUVf=~Eoi@X1xVLHbf zS3)lsPCgj%ExKN-i+ZT{E?zE-&)hqx|Ffb0d#sWEPq%ui-|f)E^yx(y15rKCeOq^fk`Kr*1X<3kP(&-OZK%Hvi*h+jZ&E#7(=KmIUko?~_Yk$jW9?d`P`}xR+9qO2HXnzl6bqdZq z((W1a{{{4C9JC8e*K4F(^+K{M%7s-gthM~JU10pg%zxssKUEwO%>NqLH(an)zBnXL zZF~sv#iIG&_>c+NM+9|gr|OXK{O6h?6AtTh@?Q;l$~Wsm4#GKVudsjSTbr4N?$)TLQX`W`j@$d}{rl()Ky&FVz1T)le%QxdE_V9!Fosxz>1j~N~_^*6T`0rhys-FP=+ehfFa5t`1Lq%GnQ&VmBx0U_^g-_=`&7L8b=8ZqA1$Tos^5o-`;R=e zPWGobb?d5;@}b`M^0$?OQ+X=?5TWPQRr!BQp-JUJ4Nq z_1xXh%>O%}^S-*&gQi`GGhz#~Mk79>c=DL2{XcsBOFv1h`~5esgXy)ff3yy!>q5hg z=oo$w|FYZs^*aAcasGw(7kqcE=zm^d{j1RACpC&#um99n^)mNQEaUxhJxo3@-ccBz z@ZMVHvwhzz^Ld?2?6VH9+1f!>?JN2%<%YDU#LeFta~{~4E9YT;?VuhQA^xR&(GSzX zd?$Y5>udW&<^PA9%@_W3!?)(MvC8g$=Ki+I3p*+eHR3ufQ-SkSt>rvSI{tGc zeu2~u=6iph+*d5XhkO&?Trjg^6#th@HTAmN)AVBu|JnVYiPa|km3OvR8os^Tq`z{B zxCOXQnY_qR8XD?)FO^OI_acvAeoo&tIzMBVI7&lFGxOfNy}iwYy~{A$Rx4obd> z_q?y-@hJZD*BObWW(M;=yZ^Bo{4+l)9t)?R_ob9J?w~X*mJU-&_%AQ$kcLVrK$?H| zxAtkEKE?i!`^5#g|1pu*LCRqV)mG9I%>NYSU%!K@6lir&c>m{+Bf{y)ng4B{SrWzn z$ZyOS$x<`VqVE}P95^RGR0it7{F^HSZb$RCym=bPpR=sF(!l+narv!*<+ZZ1xza#> z;}6JtftwBwr~kMkjk{und@IoOZ<4+@<-FU2&C^gO?}PHWN-|id$CtP?@L|3aPrBg2 z^P~9h|DO3Gv7KqJ4F8QY`yj}l`*3rmf%#W1zcnn9ij2CU@dDYWklab`OQ>p|hLqGN z?%Q=$a%J;0X!&@OUVbxL+IjEb?EYZAUsms{@FZ*v4aXaOa^!mrZB8)mg7=s5KGd3h zS}P6jN`C6}@!|cZ&Y;#x!`Eko-^Za(sgl-8Ly=^uu21;=GU-3^x5i?=BUIm#e-U%~ zA+A`r%UHP`>)qOquPJBUv&G=dl~P`OC_3gl}4;y3hG8vbhgckxq)T^q%J<4VK7>S5~t z{iJ?wEPvEnroa0Brb+|TuPU1=4Y}(7*fKevBf$E!c7 zfc*o8!Tv$%x$Tq&KIEHtzeZl<`M3BQ^F?ZosmGoWc{COh^IzA$!T!d#BA=jJ+e_7H zDSxH0(s12@;rjR@8Q<&oiB}sd4c|z4({4V4t`EB(LwL#R#$waFu{u=V>;4V>-zMSn zx5if=9d_s9e`WU(jid6v|1#8n3rzXf>zx0J{AU`O|8(cdf4*n_)6M*+J6HbmeJ=jz z?e$1x``_j;!+&y^(SJS9AIyKAZ)NyhL@|Q-zo^9MduhL3N<*&uW6F2yr8Mw7tXJGi zY2f`avAudJ4Yj>L#@VBn(r~H7AM8)&;{SpPMUnl#fp;7J{mmx-4gYc;9RbxG8`iJ0 zE)45;s;hZly0oX#@XPkb?JVx8G;G3q%I|?`;qaRKVfQaqe5W@F$2Z4v*I40`|04V# z-f(&U?t1^HlQi>C-2eVk6Pf=G*f(`{F>_>it`PJm?>-{k^)T>OXwpHlsLdjBWiCt%-ay^J>PDh4}HLD?=Kz_F7K5RAL|B< zUzEx>=w4)<3v0Wti9flQoc|R#1oJEWhWxYsA|80q4(a>rZ2O15ek$Yj1f?WxZ7-Am zrdCvnxZY50Qz1WN|EO}TsYm?oMsFD}`-grvVO)Uo0r4U^%YJq&(;tlQBIoIa_Vr<= zJ#o5kr+lH^D*Y$t(CmBw`+pVk-kB52^#3Y)$oY4HyTpH@i_ACll=w8@AxFf|UbFLY zGX9g^h(KzR3c&e!-cS?7>mW~NY$(UuiRfjzKQ3(^xWA|`mfi& z^pnK8pI+x`tmQlCG=F3>z=)ZJB(+}~V z*^f+2iMFq(em3ihEQhpT=l*W!tnX;Q&R=KZcMw1AD<*$2{)<3A68kUQF~&dZdA!c> zPyc&e``M#G{<;4B+Ql;A6L?~M{~G`5SCc;K8|^Rtv;5PZp@TG$e|x_l`6oRW|IGhu zMva^oNef3^D3EK0xpM@HyC%u|L+`Wau$`&}Ou0Pg0*5I?Ki3tqeVha2)vW zuodkO!l9ls{!;uPe*2*Mo%H-4-}~7AzG(+pPimZ>xqsf-&G0YX%Jf65@1L(De?I8B z?w?;BJosr% zl|NJFUO>;_E=Qgq{BN`V|IiQ8eg^k{?QZy&VNCiV=Kilr&@Yp5jQ2^NdRoRS?zDQU z%Y)+nDNpqi?2CQ0SB0+E?bhk{vYz+I%|e&=&kNS$wUvWp-CgV?T`%GI-{h$~G?wrN z%lF#TovXsr`1B@FhGw-qi0W%l8_eBk!F}c^UiNaisUl ztBw!dFP4w~|Dd;}?NfpCzk5XMKhM8cA-wk3pThmgAgl9mK9_X%pB{ot1LS6 zi|4D|Q%t{v`mz(^O{(y|$X!79UNQYK>Jigr<6;mT;6W`$r|%btVSLE*QO@Hc*SxHJ z+&yb2ADdssZ}ZFcqA%p&tP0l)Bghx_O;8S9aQ=q!BpS|n#&APteYyzgcw%Ch?t`8{ zIP||1^cOAvm7u?RRydq0(BHBACqZYrY|MNkE*dd4^8VoiM&QeCW_+d3kv9pfuYUJs zxIbsxQ>njdU` z5@>&2**}r2(@@Tzn|$&6N9&K?m!lunKejyq^H!-F5so_7)DNsr#<0H#dJ#TYyCd`g z;~y9Fsbz-F{#7aH75j$iqd*^x^ZkkDCSDKpTu6_lg3pxYi{8@rCym1X9G0)RoKJV| zYLGdfog84~!(JP)-nXHx;?GB*pTZ6U>tV*l{pl&xGpwK4k8vL{^^a_0NIxam&*NMB z_HFyO`S8#EAk{PE%=(4xGwc6}nR1R@+`;uKby0hKwJldL|)1|#!pPfI~>l0ePwa)A3vPsg8reyx?r4DIGujh&X@TusXw=P>= zzIaQ@W4F4h`k4-C`1Nz+R?l}(8aRLLz1cx&P_lnPx7*$;;uhd~MYX)s&_mXLb$V*v z?vRFMl0Ka-_pJ^}L#~JQcM&}Jx35pz_n`j@jPINyMSq^Fm(d?JFuHtcx#@@HD|3J0 zFGe5CTczy%U8L7-h;r1z?E7WD-FpP+`z_@qe{f!j$fvPX_Rk>vLDBM2&zOKHpL_O$e{28i+SZ2d zHZ%1-`Q>9DqpZj?o(37BZUZxmy$1(mHP6_BYABprpKCG|sdK;7gh4|aE z7HqHOlSKHHu#Y_AWGNpPHd2$Y-_v!YEq5?V~j0YQN$mg&zU7U*1uD#6D}EO#78QUiPyHu>DF(SQ^-V#ZQp$ z1=xO-PUxdFu>JDoorYXb950H1?>h8@Zo&GQ?boBCKmNLU8U0D_A6@@wx#@@X58E%* z+RPImnoRq}{Yj*={Ytd{7qwrVOgbGz@K@Wf5`4evo;K@(@+rgo%`TPFfB3OL9n}); z!U56p(fc~|L-}xjJ=-1gR&2kbpX}Ugu$ z{|rmx1Eqb@@6$$V8!=VeVjra0z>~gE6+!)>{fqJ!Bt7d2vgiLxqVg+x`;5AmJbU-)%Y z`*nnG{P|b<@&w2lcRg3VYYVvn0=oRw;%A|Q^I%7&5rL9FPrca z$MsSgay?1B7zO;r1z&v|EMLVqU;C(>FHT%kpdOHgV67pEq0#!o`Q<8v*E-MSqxY1_ zFOU`OOZezN7vjZNm>2h+Hu>&=-W=m8*7HT6FF-x-U2ggvF6cWTUfQ)N1)cXz`~6M- zihSesHpmBMHt?xC?>HqWpHThtK|$vHt$#?ge0ctr@?rgBpTEu2Ki~a#*FO&ALcHd* zwx4VHl;C_W_h%3MN%ZkdmO?2ThZ^}v2}wW1JfF*axeDt>sRc$K;9Z@9_L}E&Sx(C> zdLcgGx!u^CEmY|nEppobFMX?p^2HDB|9fw@P}M@?x!sC)#4R+Q+pSsKLOBAt9v3f) zf!FUk;4UqnQphKU`9pnwLGr7td{Vf_pdr2^*7q9dhx#+d;@7-Ys-s0`$gV}F+y|u8H06=o2r`}|++zX%|%BKV5;Cy7{ z$#B_kabUNs2=Vj$cXFI*CzpcG^Q`XProUYYy4M};IOtWNQ$Ez6B^he(hko-1Z-8;+3#~mK6Kl$8pIrx}o+XOoMSE+$UZZZv8Y=Q$9RDUOHU9zg5nCZxlTYoF}iAsqvJ! zd9Ix2$=}oZD$1SfT)FBY?L~vSne*j(KT_~qdGI{BFaFj@yeYvKu9SXIJ!wr|H|fZA zuAG8$@xuWgH@MmGwEp0Hxr_akBes+JxhyYpzC1B9T7P)Hobve*`zQRT!{uuj=9x)n z{tQJwnfk+YJ$hMKABvFP=Pi01^b(#&hrShqKHQ@31$r*T?}$G?>fT%Q{$s8$Z^HcQ z=v9(mdQgYQKcaT>N%k;&B_^A35Wimodh!%QXZ^ez>?x#PH2nd}?LCw`1^YtBplltekf{gwokF1@19*&vx zB(V>L@pHbyh22KVXFcnm`KCT`@WJ%cO*phSKz=7eA4n&^yX^`&TpJ#L+4CV4Oi&KY zbP->6N0%*89^#WnY>vF&EPkVrPvYi3kx!Y(N1)d75#Hhg8TrWXN`Z`gP89hFWaJ~iQvwU@KK92t<@|hy?5va9%riy$7GV+n%l>!<0oFeiO$jC>2rvx(c z(Yhw^pOQ}^b!MX|`K(=G^vAp9Pvmo|$VZ^o@|h;`5y;3#epd=)gNV1pTs;r8BL9VTW%T1^Yj7^bc1TOZjS$ z?H?w`M)!YsKXDbpv-KZj_0Qfm+?Rk}#eE>ypWuOR zuYZ8NP5b^~gO4{y>CfgP%@^K8GmoIx-JqGozjKl=&^>ptD(U-48U)Hrs z1JCcI-fE>ZjGbiOm&MEx__sI;pqPkh6S=-)eze<%{()@tX_QTo)yuJ*2;> zALm^opMzw*t*NS;(VwGa0!Z)ADnC)qp9^e}C4pdl_M!EYgk5ZH2fC?@Fj&5Jmi9&0hvc`aweZunuJTUpoQC>) zhTrS<%dgIsm#=%u`@s3BrES9LohI!i!`67_Vd46Fv(;W5EFF%Je~C}KE2nmr{%7aR zeU!;*ot1`tWU)%8zkEjLG#GBP>sREn&ZQ$G&kr2?gM8s;?Z4%u>J8M86 zFwN-ErWF$Z);x6(+w{V@ z!SzV47uHBv8u+l@As+Db{gb2QGq|s*pPkm(@kP_X{#B0OlX`3*@Mq(Tt7T#;sQ*o5 zJg)Db_NL4I%K{v4)W~lQ9B-sIiqFW7H+=c6f#Z$RnKB*`_*acLnE#ZQ>Rpf*qZuN&Jin#esW8Pm(T0`mor2_4_ z-(B2N{`j8#LApO^91gFp)IYi$@x8X^qpr%b^-(d8?9kDJyXoffsRg_QReYP6srKM%-wgK5>cROXL0F8`*5(xCN2yZPwx zD1U3L#~(p=`F_S7`>2J|P<=@F{S`7Hul-lo6Z>HT+TM&JW8^bdCudzZoXi}KNF&`&P;#CK_?G|WeOVgs8g z4V!i}`lh-|Mhmhd0pnR$)G*cQVA8&9orQu&CpVWTMl!n^MCnkP1@S$9Y-`Qj1 z&?xylL;VrMq*{~ys{S}9HB%ZWpPI$Zlm^NtK3Vij;9n-6lSMuPwU&?gjS286!w(O* z(PKB?9vq);!un3b!=yj)Q$y8oidi4@rkMT@UOEu+K{_e7cP%+P2*|cO69+wWzpAxAe+$-6Q=q%>UygW_xHr25bYh0P za%pN|P=As*f024z`kVE$=PUj4+R5ib$j4h5USEC(^5OXi$|q*uGmLcZiEtF|E0*D0 z`gs-W`?QDQfIiGRcS-){4>Iy+yv6Xp73-4zM3Y}G=zI^SdVlEn^!^sLqX~!m=iiX~ znVmRMWBxX zo#mHuJNZuNE#`&#!oRIQk6t)8bbguotKbV>pEgzmAtVa0MAL=v6>c3Wh zaQ@CkLMcB7?vnM-w$$aTyn~Tv=649}m=5Nddr!woIolQBF?q2%&9Ocv-Y1&olRfTmf%z^)XtngXSFM@xTJL+2*zVm?l zetyvn!TLwxeB4Lp%Q*U&!2P$d15Lh&ZTT!5Y~;-L1<|OyxrWYt2>jl@=a%w$X>a47 zcCILg4%U1r^ZUsHyhS&m-G@OXz-G-|52dNx9~poehS?WoDccruM_>*A*(;` zX|>ZITTdvTmZ)#tu12pYAKn|_jW+t=;)4|Om+~wH-Cj>8U(1m%yl1Tp{&#EvIecpB z!`Yy3Lin^ZkN~|3xDxpF>(})P>dz?5&;R_j$fsew%>BXMtZ4c0{@`kacP;kidP~CP zi|6`DXFg7=Yx-BLuPPAE&(IUn7lFPM{F3g2UjIlV2d|--&tD39jPxB1oqWGH8U8_E z4*&CkDaZCV{XKNQtPlBoQdjEdy7`&&l?gEzDwJ*Jk9fY4^0^S{;XY(Ur|z@PMM}u& z=h1m4oynH4TLt<;@`Zkj1Nu#9?>L`O1bPhTKuLE&U+|3ypY&0nzkE%YUJg3HBObl$ zhmC{!Q-S{T8aY4c-&de+z0ZW>pB^orTkkUgQ$7Qk{!Zcc-EVEe@y3~aqw}I*$&PJ-M;_10(AR6=cS;R0eir+pFOupP(EzG)F^4cW@PU# zPMr}gAD)k+eExrHzvli@>Idb+_N&EtQa^W+`;BnFwK}VI^7+f{*UbNp_G^3S4bho@ z->Z$j|FLG3DUTdqJbiczB$%qvgZx+E#`)H&;VdO)J z5&tgh5CsyLivV9iKhUw}H(s#ll*5{x!}F@$L?Ji_s_|o~u>1V^VRxl`A6&QXX??#@ zvM(6kS}VT3mj5#F!G3_d<1Wtz>z}naKRCKf0xrtlFPfMetv|e9l;!K+eZQ!^Kg0n) z_PwJlCtGnY(nEfgz`uPTX({L;{`8XozIa*7OM>#r$NsU~8_E2}mj!D03h48^X!#76 zbx{3KKKoH`r-%DLZ{|S{kxuG=Y1c5_Nr$G?5lswTJ#PBpMW7G88T3IWeCBuKX@<`6 zMLGO0Iu>-yV$1K3rd> ze0Wcuvz_VBAUaji7U@L2k&hP%&ZC0f2=oaUr?Vbr{WHA8ghRSs)78)JgTnkaGh}tL zC7!*r5spJS>F~Tf=?fYf7EX-=-+`( z`ILZOQEmLw-fk)A3EFD1B-OjHv&}o;Ha-%%*@t*kh z7SEp+wLW-S7sGdAtC@Gu>s-xbg_-&OXZFW3_FCSED@P!u_fNf1SCwBLPs1j0I~%h5 z33y+MC+{`XX#cX`pj3WqP_p4D*pK1yyN&z;=K=p)GLuijTfnf-6wSHkoYQ*OjfcAauwl>TY^0{U@aS3vgzbel{4%eB9% zdWT+0LoWLZ@%FMmN`U*TD%$pvzJuIZ(oOPT>@QRlid&#e+)?%yV&YfBU)f*9ywI5Y ztEzXD^a{idHu_3GY33vTQEtRnyz@~e^GNr7BXK3)(nIsd*+ zQRVk-xxYm}PA_A(OW$A8Ol9w{D`^(qFCD86m$&UZnfFc$*)J`i#)jY9`{QO~ULgKi z8>PX2Udos3cXsmRdx6I!eqB~;zHOs4^x4;h@4qg71!jCI^+{kqVUffiY+uil_d)k+ z?B}d`SHct6X|V~va#4^A5U<$2ww&zLszgc;5mPWiNPC!R8{_hD0ym@;|7=@Z5u zGHJ$yY2!|wKEOG2!u09mPMjb&H;4nA!80d1qmP?8Y08Y^0nULZ zk2`U?1IO?Q)2E(%+JtG2yqhp>;J841u394X_xE+wGW0jyD^2<2 z_r%LE(X|Odo^wLD{$Wg4o)M8GDXcR=rfaY(AW8MhRH zJ_!EZ9)@0qjA(%UK-~AUlo^EYSU(bX*s{w+-9E&Vh7aCP)#*;rzh4_>H7Gqvf)irX>$BVb;L4MZ$&mXyOWQbX>ci^A)JZa~% z2z1(IV!cre`qSJ`g7WTyZqKWffbQ>#^ei{=QZMjYF+S>F*xcstyF9Y2l8rHvZi(Z6q{y;y4^>iHc5AQeO`)`|kD*>JRUHp4Y_@$uF zr#;*uhVFq*#Q5m$c=c^x>Gg5m56b?_)U#xMs;#Wwpk$R%i)~Eb2?%@9ZF;w-Anx`i%PU>J;c1=sn@T?7*;oQ!h7z zFZRRx!hb2{fc9)x(1}is+HFYx{y zx_SQ&-ExF7G{2YY{vGSvQdY6He^T(<;Sd9Z)X^2_}5 zEjsgO9M(nYpB%i-e$c5#{~ScX@eTbKfnH9#%O{!kAP)MMuy5fZ9P0fysDIoICVUtE ziK_7<3H-t#Jr4?&-(twG{~T#QHsxpJm$(6QfQ5yC0h1N4q2-byAE=WV#2 zS4BE-DKOK2TIXM82Ia@`TVZ>dA-TGdDt^t3Cz7{C%dhw~Gn29j;XZOZ&nTyw7fm>94~pTxCS~aK?}EPb3dDP@kzWbu zb=D&s)QdwvC!*Yl$Di2t+NkiO!~;J*xb)(^6DBK;RQ)l#f~?{JHh-!Ytxleq7Q)<4?!+=Kvb zMSt6G8lJzZ^1^yR{X6N>Fx^2ouk{bpi$Gs(g+u+DdJ4wfvyC28|E}5yeX`o+7Qck) z9>V9oK&o4lD-Aq>e|CI3Wz&I5A3Sb*|N-q%cN$R$5lCWx&j=eY%P$uGH7!V=K(^M050;yaq9f%0?im-GtclAkYW(?I!^N?J7Vq1=cMyRTw? zl>A$AT@*u#6^$z8?v81CO zf5?K8dD#BG-cQ`mX6~B8x-!$#Y z(YtB+%2|Abc-H$!->a=vxxnCajXU;IYo%ecd>^zoQdhH_3H1?hiyBAsfUUF^tz1J!1zTSF&r{%u?l(7Gc$A{BbZpB|!7=HhV_5E{} z`#{ORAU|p0MEolQjrfxxvGKwFQ4z*B2jt8Ch2n;p@r{RZgLM1S53wE})>Cyd_TlGq zJO;Z*@Gf5n8qXFk1fOqlNAgSRYt9P|o=&;Gv)y25yc*5A^Tr ziGE|f-aoXRoE4V&RM;<$9o|m;c4}7smBZVqF9YvWrR^B&Hkf)#{OtIav!nF)1(C0Q z+`UZumH&X&-K>3|;?d#!Yu#)B1j%F7JWw+erLD z|M3^X@f~1&fBZq=@-)JFKT6W0^-(PrSqXHN@U=VUw^JJS6aMu6#^fFC(y;xG(msgW zThT5J+Xxl}%9Z%oD<}UFCEvgQWIo`%3=QR;hnULlA33>7;!kDgQ`Bo=_jj_u9=wm} z4DnBW(R>`+Km4BiH}yOHoIf=DzTVH_@H=b_yIWiDCrJ3g^ts)`?h?!W{o?TZ?RS;^ z&$6G-q~?!5KH4|z&L!V!yhsACzk1AG!TO;R_B~eglK2j8l-WO#SYg^ZX=c(7G51eM z6_I{2_e3-^^Dl;~lx>%T{g@6|@Ak)-`H~`hzt;O9_Ko}KQ!6<>19dLzf!+Kb??2*k4ej z`?q)IXYLpFtBic5*-byhdfcJ!XDkQ(0H%9G`25bHSf}RsEb4F1-NO3fARK%DzjW8q zPfzLhrULc;>Dn#r4(mzU4W^rRgXyN-V7h5Hm~Pq$rki$w>E^zDx{<65+KPH|6Y!!o z?-vK_-zu#CCf7*)&@VfGuU19tFX!)BKe)&z|3;&CjJP@aTbvgv#EajtKBlIG=i}eU zdJyXeAL;#+blBrq3VQxQ$S2S%LH`>5QyWZrsz5J9xp8AA-X!Qh!aw_eYe28}p$VV# z6zJrSSj3ioh<}~*rndjumhaa>zTXaz{>W$bvi;vjYA4^%t~cpOSmzffW1YppJRRlR z3hDN4GW@fAb+!0$k-+`8nDA4`KbGG;;h*d4EKfxZF>i?U%ttuSU>(FmIrBm1J(h`| z4ZoG3+v^impxbCR2xY)O%uP%T%C{Qhi=TT*e|3I+)$ex9|34ZnU!I?({{Fkq&rZbp zQwsYE9q@5G+E11b=F?)VN3dRs!@qsr)&<=@Z_E7Sx;*vQgMS+_|A-&1|J(gR`PM+b z`4>w4uuop*{H^nNw0wE~mh!dtfiV7YIOoaqvHpGURFrGzHRaOk!Z5uU0bNrUbhP^= zpmW`Y{ijmU?Q^7Mpxft8sdvR)!{MI}|NEidNM3LHMG4StRA>>Vep&K+dVl{TCS2|x z8R1F=vwwE|An`=Be0hGC@{Rpy!l529y3QL6J^4#`|JT|F!~9V0`y3ah%W`!3>5TAM zFSh`_aUWC8NN)*xBlZ`OAKQc8c0o9N&WLrj=rVJZer`D|9DZiP5$}o0@q_s|@#&e5 z2K9F<&Y!4P#p5W>GDsVpjF#_jGLMsfP~YE$_36}0;qgUg-@*H)o@LIx0)6xzF!X!` z*NXQ>T^MfnnuDH1eOd(n7ql|+O7%1TUC_tWH+1HA3Fs@W`h@yE)S|O~u+Q~-2**Zo z5U9uf8Wz{p@-6FO(&3|jwoYG2Fd(I@5y>x~5HEC;h@8~>Cq`ThjyA>Bbjdt3F-|6}hv;G`;& z{~H!b3o=BP{6NA=97JIS!+UMuwyysG}HARK_!*7}kv8bWDhO zJp&kdW(??DtFutGF2MYz6Ba&Sc^Hka&5gN9&Grzq( z8Y+T%a2GeSy&eD2fl7JCJo>T&b@=J74Hdz)z}tp3wDIG@-?o_t~&rmN8}M zC@CKgz7+94q(H62Mg`$Ngc0A*YpRha0!O^lkWcQj>H!CR3_8*{@JlCX{(A5q0QcsA z{zid%`E}s1m%u;y!}3x^4lPj2S>7y^KgpR7c>(N7RCo%vj5^B03e*me7kLx@(dALO zjNe+f%!4^bKandd_!&paO@{I|}B$lW|2qBA1%e2Cm7pXhvu zU~A_?qMs1VY_15*^CFU$FMqpz_T|sH@^`Pjxk5gx`-dGqu3_bG_#bwAt`o+7{72dS z-bqo+pX0Tv+x#$`hf+Mml>TJAusoHhz>7-=7?Ln+DtblE2a~h&}w$w$o{58Jc>OH0FvB!eM z7X1!HCu8Oz-N9yjw*>^RPJwz2@$zB6NBgm$cS614lUy6!#2MY8-P!~2V2JBEa3bRyS%|GH=6S^ z#rwaDeALGc+f~009)DWrZz1~^Tiyr9aaP8>)I*QgsX1CtmD$zR2Wfi1?}JGHv}BAu zzI*JUbx)SV^W|cu@3*_A%Q_p~dd8IPVACT^7kwV#k21Z(1vbCW^fe-f=gTpsui|iJ zzJcbFF~eA2C>Z+N>kei|nQ2qT_LNm8zeV|sjno?S1w*T!_of7!41Ila>E-rke*hxaLE-X;6GvJcvZ(^10mMc>$C`cWY* zN8%&pIM$&{IiA3DZ)d$fSi*8na_FT@zfY3)`0eFI}kP zBm3wQk3HAg^t$Zu6X(D1Oa6by`6+bC|AI4ZIUdWosF_~R2*2cilJiIClK+=%w&h6v zKg9Vj{1KMFdJmgl@;}MtEBsr_|1`@B*zPy?>|@OSKgQ=L2i^z$Nxb&^DEE8us@(bi zD4$PB|FcN?!+SJ82c!0CqT}xm*ZpKUJM7E!B=<8hrav)T^QRW-b$bQVFCA{v6HGs` zMCZTs&nuX|poLAZWcn3C=Wtgsy=$@Nm-X+1OdrJSc8O1l>9aXLUL(CPu#V~ZEJ>fF zzx~%Q(f!w!!te3@k>Yun7o3zmUs3|pMR?@U+QfU^UMBLg!vyIqWRT5dOjfac0pTBmvezA^B>6ZSI6jj zQpWT&-@{B@tLZ+|7tdumFX?(B`O3~)Saq2q_E$si%&Fg{Rx{&ndj3xN+(gx?Uf&;$ zb)`A~{l{#~zpl;B*SA}$=Xb(W`%Spx{TIQzVf`n+$xeD2uRO20A~ki$+v2Ejcwk1Kg$z*i;QPNg6#!t_bPv@8P)${KDR37`u{HE zMQ*{QSj;QA>p$t;k&*fzVmUJ3)2?uL=plCaTFxUU+4aAG=_03?`Q7=X)c+IZoRas+ zOPRmjKDvHNJCgc*%_N(C1oIaQKg;o%zOzG*G5z>?EQk5yOwVUU*g@Q0o6? z&bPpse?Gb|_mj^2a~bEGjK9(@YB$sT$+fy)MX!=Ei5;2F^-azVex7gBvFy#5h9Zag zcVPOR{7yvVHC--6Okc|K?>1%oX4LCm4`FDg4*ITFK*@OA>Sxebr0o%227<`_Y z|C_k})AwalW9n6(56AgCv$F0LTh8Al|64WE@k#A&>o-Wfl5@nm5v^jrz?re}ws;;dALoOw&u5zLx2tFI2|#QjU+vFK2pK%JE4pr-JGG z+@aGe=Z0~n=d&c;VpnzB^W9wgXR)WXgw#-7@4tJj2FBm){ZG;Jh!wO|1hdc~n(gt% zv+eQf+iTIE;XA9s6Nh|rJiZ6~0>7Z-f0JWBe06k4UYyir`hJKR9Qo zmKSf>RuNpr`jeGS+bV(~P&hO9=T=>W@F3sczHJ5y>S;Vxr!Bry(pI$qPVr0C0}gn2 z5A7bSjr0RXar#3|@O^VYJ`-mLu|GZJ8teUr5Z|8);e0N6UVZfo&-dbQ=I(#wd`{}W z+~Z90Ih@3!5wG9fbGSzQZh$J&`c|HJ*h$wbna>w9ec)nl@7$kA{oj2*Zg+fc7h(RB zjQr4MZVAcQ+Lz+vYwLqUzg((pR30OWOv3)ll2bMrCqS|7M9d|vG2ZN(#5}3 z|04(Je7|FP?)o3R)Kd}sS@l0z)f3-&?zzqNzw+gtiXdP8Prrrl>jI?yd++zeJBU5= z*8i%v@m?fA>VJ40-m?Tq{SUtm93b^ScopdfNd1q$+fxzbGsQf?5PRhPdt2`##xB(R zZ=3s|z5iTK)p<^@2jlB=*MHJGCL{H~gPb2vmbxdEizYbUU1E!zI zdN9(@*X4XH@5b$m)9c9uP7?0eQt!on`PRSvJy-qzX{HW1=%?3>w2$8ee<7CF0TT>= zyX<+%Gc&MWR#{y3?WxZs^E&qTJ?xKbZ1ZN>uNPeQd_q>`ZfpH0-3_dnBb;(j4O?k|Sl#rIGF`R?CUzK{Ef0J(n`S--s^ zko$L`0C%VWa{n%k-vo01PSTg}{#~dF{sEc$i@5(O{63$zrQSnW0J)EsKwJs(-Ny@k z0C|AJ(6O82^*-0?@jd!6`~qSuKk*sl0rHtjc1W^4=cKt$nDfst>&JwiL;agnSp7b} zdSCZHvLXS)${=l+#VwRl5z`|9_zKts_ekTh13f&i{Gm zAwK8_wsyYw^-Q#HoX`DVJ!j0k7h4aj_OEJo8$V<6*y8^^c51xfn)5+b=dn{fkh%?d zX1x09ogq)NR@e3|e@MSC_LSuFU2^sRZT8T9<^B!b^C6u=X*Y+BRn~pWV}a9pDjaQ) z0d%Pdv(baJc6v2s*M|kM)28y67_W$67GN~IxO<<9o0Y)d=GvP?|~DI%uL89|4GD`pfCJu7ybVU zq?h8K+7I#o0}s~W#}90v2*QXj-6u>Of%pRg92A)QKXWfYc!+OgSc42mNl3nnebLVg zbG~nW=jGZ*;OTz(G~i9ucGdYW>)*=Vc2oo}z@73((je%Kw4+w)|4?o8ir^wDAiaygBsoP5!r#9useZ{V?-> zFQ$c-`x=B#`7M4{B7X9l?0oq@s@69j=c@noeIqiFIlA8`J!-T5Pk2Ym4?XWGf|k%b zqi|BMdx{|Tti}_~Iw*n%;NO1{@6mtfWx%a(UA{wod>7w?DC&@bJ(jb)?;#IRigAwQ zN8f>eKn222ZmOxg79BD$^C;lZBOx9#Pa{0auhfh1510dY?V|s8E7k6yD#RafF5D^q zQus}9FgAF}f8+%(19g!9+4;{#T@JGEEH=%5YC+ZpmN$#%5B~Y~{HJ@8=S57H z_Sf}jrYAIiNaRe@^q{w1?-w)Oy$2Uz`Xc6+eSTzb#_Y!73Vj&UH;eu}>s{=}ba_8n z`1fb}1}=Zfb24{Mwac?n(#C&s%A3V(@%`3T$F>}mtNx#{v#$TigR|?erYifs!3<15 zlc+B`Hk&ug{9kaI*CcCY`&)WnB6UL+KfVdtgYlkv6ou%2kd^oRa9w{yUO`_wyiYMq zh#T2WYTG#JQJL-;Jt~zA-`&q&g7kRCe&56c&>tG{I~h3DZ;|=D4|k)zHN<+r>@VZw z-*A`wmwF*~^RZu)n)SbOk=}o}Q`Jzx3EA^^mDcqi$<7$D<@`OYi%UH{i|ezq|6kZ& z&tqkuzb?x;?NpmCaxZb{(k?FfOv@KJaxM_QT+5Mqi{Uq8)^dF0T-am!LCo*-`FkeyZ0C(tq?mp3@s>dI|H(IaDx0x9bSgSFkPXheLZE+tJMb72N+6 zT#WjVqMk*Y_?O$3|E?at_%GdF$5YM|B|qKsM2|hh_-N0|RG&IjQy zV|oS4k$s+WrpHCTqv!U`AdV-~Ph$RGnV#hPtQAbJzF#8yS4^)vSj&<7Y6+&7I(EOg zqnmLIstykv#|U z$&Q{1|A1h3r6R9lJvyUx1}d08RDt(c0Iet6{$FtFi@a|VIkB}OsB@go&(w6h-vZbH z>t)K{)J))jcX}fIYZ1TG5H?`dm$v-jn4r`8AqrUp$(`-;q3_XA{Kb5T^pL#NnUD|2 zXQW)j?%yZ&L$31i*RX_rbo(JaiDsD=r0H@`NWw2T%#IJ;7ZNwJLx>XHw-MTswYIz5 z8xr@(AltoW9~&tnPB59ZnXLD1#a@sLVGjgL-z-gM*NyN;mQ3XiQj&RpD9o7 z7m53Ah>!dx`*85nJtLuQYxz9-=&)aNmCwktw1nVIy}lqlie@Uizu_H$?^mGyNO*4l z_U7$~PkC0~?o;3qDCr6RvAf&*2?MXt>G3bad&+=EzqZr&Bm9eBvg_SpHeYW$To@~@}YLG9N9(@%!GfcpMGhZ40J-k@_rYka~I#1@9w9x z=J*gVnZ3Yo)~5kKYXAO0kPo=wT*mhU4!D=&t9@_YJn|at9zCRuA{fVb?0`0kfci62 zepxq`HyrW+U7h$KD{~qt7qQ>DGqpBX`K-r!lZ-z?k3WwAZ>DhWpvfpW9lpf>z4L86 zaK`hr<38kPo4?Hl8$ai08{dfVB`mUUOxpMeM_x}y-l3!I{2O(O?O(lYSIX=9fAoc6hgEc*1y7V}~-)*|b@>}qIBH=G)dh`aHKg{&rr`z-rrcXQ0 zrbn1A)>6qBCX6}xnoRjb9?|}!eCCfvh8y=w{2F>3l5!E-EuUi!YDRO#6sGq|1f&xtc4S1+gIa z`^+^r+Vji4PJev<@wWTA7Qo-ZJ@6InGk_;mGv9BHY;3OxB5%+(#dj^iG_*ebZ)iW2=pZssfc_8rBPrkn`N}5^H-dcS<2Ob>3HWEr=aE>wbguRj zU!%*%ANSu?K2qQRUG1k*XS)*nne}hBHTS1C@coRoSl>t5W#8}f3UkljeId7a3SX=kW4pMyF3*~=E@J|A=64fI(4h_AK$ zB)=ONW_o%J&nKB)%Ji-mY58iZ-skq2{_Qf&FM7KbOz+I;5_*E^AM$>D{5pN^y@Kgt zCHcn!why`@^&yo{1@CuP@%h2MU`#Epr`kYKhDM@PgWTmq-&pEErc1uAmUBBk4~sH?UzYFlyt|C) zE&2RI=swerh;q2hU(WPN%paVq_bFpcf5OolSjzP1E?Q2cRO{v97{D?iot-L^>2O)G z?(|2@_Oph|=h1U8H)vH@T|WNy+g3jL&No*&7fT`dZ524KBCfY+cSi%fE-?Ddn?{>CbUI<-9Ur`jc{g zG+VcaO-$d*DSyfD{T+H;DG&B1{x>ilpYn8Imd`4_e{*LA+KeZwb})x@`CuC{W5mAe zC%S)Gv-+aIMeGoC)a_IFCBHvEz~-0su*sqOET_i(Hb0`DG0#-k z^aRs?xLVVtoL4Y?E%OU~71Q@D@T<{N+FWJm}vwpW|Y!wxry|-dN{Qm8<+xt#rp3>HEL(qkif?wfuJPd)&^s%8%}^ zlacS({;S%bhYf9l|CICCDh%NSQhot`6XaX(28cUBzV&VhZUo!9-qod${a?;MeYTf> zv-cVr-=eK`e_V8q)<2BCivI1B?W)f&;zfFV!?t0@h%Ni$KF@OwtgGetJf1N77T^Dn z_P?X>f1>vhWgKhMTgwS}obgytXQqq%Vy54t>~LlL`3KWQj*LIAI{XoqQ-jw5!e7et z;TLN8@-9JC!sT-fiBB2Rm+^dG##^81F+NWb`e>o^d56%)Fx|C8zSu9^)9MTJ{j3O= zUlQ-fMQYWoF26{tZ7aV%oG;05^t@TZm+wbJYU%M^%1^#GA#@pE&yaHEdQilIK9F-A zXI}A@Lzi+@e10P5VN$LK?4`>?@(b!U88d>KWB`5Uqj+w!t@a= zU+590`wm^|NA-7q@6qc7sUPgE+Dh^-v9Ek)Y}%avFW~aKiq5BgsZ(8ks?D~QpZgx3 z1nicplwTF+ujH4M-xu5t;@j!+mhx*qLFapNyxte{IDmIIYr4$;r2M)wztE-pd_HgT zPtxl)$@dk`J8ChOKdPU-e^Mdg^7)j{=T>p1x8iaN*6Dh@fa(1u{;V&YVEW!n_ukj( zUCMOV5`M9ZW`AhCpBb?JcJfiQzs=~V*`(U$EVx$k6#*x`MC zM@9IhoCY4R%R|<=QXWGcdYI*`<8YIg*yZtMJuN5F)z%}ev69Q1+i{fTtoTgRWj$HO z^d8PWN{s2>UZnY@{+-11&sfh{;v?nlzAqYQ{_S|*D$-83KPhi^uC@~VOXN+TvV429 z{iV75=Hk3ClFaJg$J=jP`N?l;ZtJ_nE>C3pBq+C6w z4;ajHIGtgppH_$S@eZB-5~j=dpHfA-TuYhWh}U28U8pG2n=?JNqrIPUgA*U0`B${n z;i{OPr^lE+MB=G5UGm$#KNDyE^AG3v^LUZ3{F2Ns_LzomzHXM^0^T2{`*X>U>#5T& z=ltrByZq>09T{nVEqMHs^lMk8WKaO8K2O+0K^;^Pla|2QhsOha2pt>p>~gmoUH3rM!FWtL3}xwJEoIwM_SiQm*p; ztF+ezEZ@E7onX3a)n$U%4{RK8MXvS3=NmL*q^;f;rFVvR$h@Gf>GQBbAAcpQk2hx^ z=FNt_ZD}UXQU?AcCWfZ_*~rki5&ja$^IK*8r}5sndH-m-qc63nldT_BjPPk) zsV)jDf}an}?uQZm@trrq%mrHMzd1d5si-d=EZ;D!z{maPI@k_oZWV@O^H; zg6=x~>C+l1f-f*YnELVwb`Q_T_qPG753utq%I=as9njw7H`xt1epT>Gu&wWhgyRSg z5JLMSIq`)^4`8ViUKPj3L);1aaQKnA2n#T?(2kG1H{#6(KOltsCHZ2$JXE(&bs_Q- zkmT@^r{Fh0Ob_|NcKqpko~%==R?8Azzl(mGLId#b%)TEUDc0>!B#ABS_X^!y)pw%T z7uWMW3GP&0=gK-v=rv?L&htPy2i?r`5ufQ&-(tMZ6FI2H8M7U)7lj^Tx-a^NECs#_Hw~IW#)$oM^0evZ{AMZ7PtRO|_el!tRKL&cb<178kM7R$xO~fa zzLu)5=P?|dy1AxKm%Q6ADbw4Xruk+55oP)`mM`=}nBLvtKa}a}aV;m{axY{0ES4j5pXuFR z*ZlIXV>#0YGTndAo+q*M7MA3z*fVQ(*gseQ+u#fBH5ilCuPahT)&1`uJ-_&~&nqe) zx5uYzCfN9im)iJgb8LKT_g&okEwY~~{pa?#*z&e^-{ll1K7ZBymubiBl~aFm!UEkO zgR#2Z()-dy#{DFD-y?+&D-pap0`psAKG6C^jVCT^p$J}c#y|PaY4~!y-wdGls3ot+ zmiuM_+z6`mU6-{`X@GnOHF-q~MIhfnjb7P85j1t=rJ-+V%6|v(^^EV851nX-KNIC; zx{H3Te^m=b5PrgT7k%5A^iPU&j41iDL&R{yX&4~ zAm!;_i2Maed4`tYOcd}}m8W+R-WLbtE6?!7a0BEk&&VZszZ@X<4WpMLKLG!#@*UiE z=e=^3@3^_TLioq){#m!*?E8e$e#3K-K0vC z+?e$sWIm%^m0IB0^PD1f__>Lu%f64yf9}|s=NtSThZ5!=JjCXYFg?NYW&Tsj^!Fxe zexVOz`WoK%mw3uN%H78)XZ~+Fp7QQQ1=Cw`dSzZM`P$}IJKT$yf2k8sJhPE8JF*;! z=Os)(fYU2<4BNkHBwk|gJNw**X8Fqe`D+?~i|bUsFX8W+yL{z+2`OKhKS#R$zWH;! z#sB8dG$Q`d`EwDMeu(YC-#yrx%D1Syu5a@FNP0gu8Puz;E0O-Xd_{j(YPUGC!lqr16$ z%e8zd_wR(x--V8{plkRYuppu51=4@Up0n%8@yy@%U7LOa)5|!$(ywB8%@}u|)ZG_# z_c`5t&ELC^xwU=Ct?ff{w5u)2S0OyGV!|fqFVx&LOZShmf3^N(a15!B_qS`Pmd3rZ zBEDBGV}1K;>~Wv=9p#>QdQls7&MMn|^&$2;C9yx&86&gng3yboxBO0|muRDUI`RiP z__u>>d7mQQ5;wAof3)#-zK!?((8fzU*f_n@VeT8RY-qcG?}SHsuW}9$IR6i} zOGzt!mm~dVd@pnIYnYSXot*efIf^aiEA|~zYc9++f4;w1uaEpO+5L@{C~0Y5e{_Fi zYx6b}*_8Vlc zkKO%`eD8foxr%*XgPITKD&O8qb&UwdXV*t&JC^lPFbn$+fPCxU*Z{2e0r}QX(KyyS zfPCxUINUP8>;G_ntaSjgUQ)BsAONyn3gb7yU$q{tglvL*>#gt{xB>F5w<_UAAnW0( z608>ixzLkBjvFQA=b0>dnJZ zzl`(PbKgS0YP_c??;%Njr2E>mzm>kIbq3^pBypGZvAU$SB9Qly()dl_zK5w`)Bsg z|JU}Px9D&GP5aT(Zp9Au*=zS)<(rvbp@@?Mbo>1y^DL@ke`KCT{{MfTXHoqBRr9PQ zH)NmfLq8nxfVsaBX8ot+YV>ab-WKSf*B6m}?e&Yyvl5tZl1b?9T(vFa^$4F=YFAvv zVS2Kut*3UA?00pr^+Y$1)N*8B%VR;6t8IEQ(-ZSFUG}5GOn3FAN|}Bo^UM8JS--EJ z#Pa!EFUI`!%QRiqQ`4C~kncH3JS&(UuP`BJ_wa($M3kaAH^Y5sukSFd0>jaiQ9W2TtC6X&PL>8fIS zl+z{kZ5`9=I(Fy9S3Q-hf4&R*=VZLQ^!Q8PUudPW@8h+GK2gvK^OuPYG7vr(>l5Gs zaDtmi9}RdFeiO+2Bt8k>F968=BQY7@F8~|`|J08q9tRGXzc|GlQ@_l>GLd5Yle6&m;Oo8UVq z{mnM&{L!h~yt#W<9bds$UrzhQ+4SDW@fY_9_~kd*s}JY=Ymf8-u3xEfuPwp{ar&Gh|M=Z{5Peo~IN)OfwWIlfme(EHo;{RQvydez^bQc>Lx@NuIOo6axjy9_aw z`{Xrx{7OZ%{x_4=d#vB(JNNQ-lJ_u}F7?X(G5V!#{qBR5gW`Gi zCMNva`INzC`LE&fKP7?jdt9NaGg+TYs6%!6%lVSnq!&*H-CxEGJ4ly*e3N}X>E4_1 zG`m{LdUo+PTF4$SZ3q8&B?OBd|Cqc@Yot5As|AXfJ*P7*D&iDUb*o^Yu zn7x0i4$ocwqQ5KUFM6nfqrWTnY~vgCeyqgjN5%QX^VhoU(2MV*L?+nly*d*#zuf;T zV*X!Qj_`X-ugQ9%LN8{zdrvXU^!vkFzN|w^nEpMNr_84@9m<&Qd`~6d_(zytTf&X$ z`Ex1L>oYyz^-O~4eH=MUnZCUvC&~0CjvT2M{aKFWv(yXrwuS!vqt|{kFxU9MH{VNA zr|WVbyRe38t+MY|xbMr$d?5NoZ$;qluZlikG!1t^zWvpzPkSo@*S*I zvB!VePYr+7TM=w+KUL-n;jh6DaNnbs`9t&@#1|m?fr)Q>D+196tojb|1<3pL@$Y*p z0@<%kZt9KiWc9AzuTB5ZTM@{5Nd44X5y<{)_-Diiuz7$z-^24l);U~{`SyHrZke4Q zhfw+D&?l7kCHC%Ly#HdZ^8fiZU1K8MbU#k_2e9j0J^$O<{@I@ugf{7hp-9c z{hnC7p(3~g>n}6DQofP%8Y%+Wk58V9_yMGRV{_pjAp7ybLc|4-Z$CahuOam18dleb zD zKv(8tsU`4qWbXcd*SGBP|LalQe>(ejLwaet^m|B7#yoSUO)p}4=c`x_&kH@KZ{Odh zcVPO*EJyaaikaT^B%43X^g)jNK1}cH(6Q{xn7%A0`I;X8OPGFZJv~2?bd@qaJj%W= z9%cFl$sbPFAxuA5!sUD`WBP@%zr+0HOn;rzE8~>tbDY9*;sbO%W6Up>l&ILNW*!{N z)&6UruYLG;=<#|fzQ5dBW#2!R`&Q|NjTHg4cd46X%YCch)W&!}xUnkVPP_Y;G*$$? zKGJw)vaup~&A0t;Xk+6~vj1Q%wg1Oqty%5&fjxD*O}rhoVQ zBM%;6%kSmHFYLr;zx_3TqN1@P_;rBBQ?nZ@0$k0s!pm3w_r>cg#8<19rg*z!^BtrWQX4c z=@;2#M_#h=DTtrx?m6ijiu^L&*E#a*I^Q2?k7^Je}eCK4Nrn` zKjZtCzODy_>|bosZ^KYt{r+D&Ugrncu&cqmWOZbEe370Hd+c@$>%+wlwby@p^ZZ}> zH;HdV_64{<+>Pa|ldSc!6O*W3F-Ndoq0i>&c1y zy_g;?MEx-I4I<~Dei-;+Xg{gBXrxE>R8?g?Rp;h#$M=4vjLW-XzVTBQj{*0Ar$+Tu zarmhq{QInX9C*^;?*Vzw% zy`e5Ap(7_V=3Rc5Q0V9eGUhvePbPRvkBb;SGDh|dJYJ7s+L|oZhW$M= z{PlxuoU>sIOX`Q%4-WjLExrFF^&`ytM|8g|-m`x7{e{SJx_(Ici7ofeA{^3PeE&Dn z$KEH{*jJagzo(WX5tDT%-BF7I^6f*@9kuXQ?x`u5f_&Jo)ym>5iHLv=}T5&w4Pc}9}yA$GWQ8uu%XUcj&4 z+4N%O|G8At10JWsOpiMH^|Eg48nM@beVPA$(ckBJ%q~oS%AxPd^lpW=oPJFAopAdz zeP~k0Q|2Wyf7-)|kIbLG>t)Nw@RBhN&avgl{HgXZn=bRG#C5hDnLjmt*XEb`69-dm zNxvcX8J9HKFW35H`0d(Dd}qBsMf!nl@h9c_SL<)P`r3a~|9TASugnd|UWI};@vYrY zUw)z<-+g2p!7MZ#^L=2szn*S{?^yt3zb%tt$TU}fa6TFs?bk&hi$LzPhrvrw)?T|u z;YKjrS#JgV+VS6SkdB|EN%XywkVSCY1e-sf{x?`NM(ke?xMxG={mD4r-{Ag(^n)W2 zTA65*Vm)E$QN$L#;Ry33igZ1dcgdKnirZh zUu^3c$G4(q>|grZddBhJt7m+ft!Er{^o&ElQ_nc;=ov@;0zG3X7qMpztMYU8AFGuf zFyc$~eDYCrVC{_ey{6E9Ly(={7qY%Zu%xXbs6qN0A7$NRkD{Fz-wSQR`X9kl;0Lr| z|5E=iT&L@M`l_~=r?pk5BRq18-O*MN+;)-1Ll2=(19V{jvD@GdSbCG)UZ#Ggaqoq; ziXe{okUW2NTSah#!+#Is-b(NT=D|OuH+oCk40PuBt5t0k!8IITwG=p@hm)QF?VJ3E z&u^Q7Pk>W?L=%t)C}DXNCo=P(4`iMPJi+k^zY70=&EFKO4Von(U8? zS*NR;nj`xT{GN?=Rq9gaK|l<6sX*Joe7?^DL~3mS2J9@OXc zKGRQ_t?4p9L2+lyXB%z0>}#KKiA_I&`4;5+um6d4?xhH%|4DR#Jixa0Ke37M56IX5R3Wbj{#E_Y zMR(lySg!tOBQ6731!HWSnY;e<4QokKe;$(Yg~urg zN4}>d`>3+-dS6rSZ=LG7}I4O3~>N!9C|aRpU-;qKFcp+dfy{-xT#jU z+}kjH7}JxZbv^Nzez-&DWUFHxdW88aD|uXCIZ>uh61^{ukI!_qqvn@!R>r$ycGYx= ze~kHSvOb&S!*r%U=j4NoYjs(^$T^+)LrjnCqVpln^n8|-gV;5KaV>MrpJ&zA6Pn0i z-3|}Ei{{UNy?#izQAb6PPd_9AHv-WQNrpONec3Uuen_lwM@1m|A!+<3$fqCTH|eMd zvPgCOAfDJEyia(GwG4UCcU#(cz+?nocr+n(|^}KUv$^)(r^5ho?7bj-_}!0 zL66N{pG&F`^&$P!@*QWZjs=KZ~2@I3&o}iswA8;{m>&O|UN6YFwx{s( zKCp!MN<%Hjp8v?aLTtIem}a>l)-#a%f)emgJP(m_m-<`LN!JJA_t?V%zKF&M81x)YtjomJiOn>$)P4`dG?QsRu?-*}~yN2lzN6ynsf0)xN@vmZf z+{yn9OkaKnhr344i+DRw)n#|F)7PEzw_Nj|udrW5CUU2)H?+^=8SexghzvK!(=rEt z3u` zqW2KT+m{4+&#mE>28jN&cQ)>`0Z5O*eBX1=xpw+@+{vErojB2U?@?sCi#~l4vI#_g zz6!qy^4-6SE`Z(!Am6!l72F8&om)q7_mE(JC;lZ){As>yz6UzfNl(N{Pp)%ssas^< z`h}ezWls3N_x@hWk>|cA`t2Kbc)98p(WG99z4pDw2IQ(=%`5bPmTai&7v1CYRL#tB zAjuK^T}iX7cLd)J86@wV5pDcaHvYroHXfg6<5#_F z*tq%${S}maCBE03XS*NX(Z(Npz{Wpx@MTW?e{te_{$SgGJ12e@?rgh1?8K+siO&t- zm$;K%a<%RMIw!mb9sUO#_gXjD{_k<5Bbp=I;uAz#iz|i8ts7Jubj(;>Y+HLs|&vy>O95_F1>s_{9$H_BZ>pe35a4 zgTD_&6mcWF-yn=H(63ISEC}59y4?4UuXVz|)4|>TYl0L03C96lgi3#QFl9SB+ z?>N6dvJm?R>Vo>!-`7em*7LCD>`!d@zE)jKeaNKS+w)>gRqB3zpGDq(k@~%W_bueR zRUUgN;r%~nOaKI>*pTKW|V)mcDv$G=DfC@+LHg#)f zMUZCPU)5O=9CNRBCmu4B9Q=4Fei1!&9sC2DarlvIIxB+l96s@o8G!afcIpQ30|s*X zA~m}x0uT8`?$Pg%AAk-lFZpF>MX)o+KePeq1HAFR=1*>dJD^~Y9`F3`5r06K<%QqH zZ$K}W7Y!gE@EQD5|C;;){sC7u)c&JC!yVA$2kjpFxU(X-p{@=uyd3fXpNBPnmxLzQbj1l{Q7Qg2FK3S&!0%wH#E$XK_ zsyfy6YZI0!l%HaTR@(Ta`S$wd$9-(~TF}2rm1pNazhHyP9FMNSdc}0_vn$+<`w3r` z+47DkwDIjBU*bkKjbA37=xF0Z3v7HT+$sOW&y>lwyOfu>4?z4({hCveesLo^>4b;R zMO*3X2;2(K^{Z25^NZTS}wf6Huse&nS0XD7c_IPs}-ge`A`Q=UiRd-G;` z#yRd4Wwtw4vn?#Ccj7Q((j{^9Z!JVWU(Wx+4{470OL`okd;B|sB>mgsU+wrFg7kVH z>hev!>!g1h`C`=VEEywXX} z8Ylj14Ln`~-NW9t|DTQYk^B$AFZoIMqlSDR{+A>FrM|~z7N~E*FSs|QrmD5VmOo`O z!esrk81{zBkUo+tCiYO4-`^LyYfWwUx}&qW8d^i$f$+sI+20uaRVa^`BVX#9)IYJC z@Ab;cT;pp|TRkxQ*Xr@L{_VsUqlhl*auJnquFksXF^4JAQ9} zYvajhY+h|`L^3|Pe)ae30@ee?wrj?SP5ZiJN@{AmdLDm^o(F5HQZFB-=be%6dOt<# z@p`6vcW8c(J-kuQ^Hly0c$n!2eWvM2p6`}0ec&vc&e2kzNVt3Jee4MHf5h^WOph}C zJ-#0y`{Wq5GG@s|w)_~=<$J`*n|1svn7*Fp>mmomn=z%$?S1@|n*&?q+%^=UaTT9_Lmu-ABPv4kilaaZD^JpNg42KCbC0{w`3M>3^@G z9a4k`6EnU%jF{crA!Y$ruk(Z7-jnTEXO}o$G?o}l^oCHzB>PXrcWHK*R-s`+C~j|=^EO|M}3!^d;{2kG^2oat4PUZ&4u`hu03-(&g$reDeNmwsR= z)8+jr`7X^0ra!>xN^yECnf?sN$2&~t!z!k)WqSN9z5Y)z{Zfuk>Q^2AbxhA^1?(Vp z*-K-J%=#()XGVW@TK($p7kO9ZuAicRxUKzXYUls;pVZ!@e@k+CY_#yxU)wI91 z|BN)(^?7Ucvo7a{*rPwZao=3?%M{l0WKw78dGz+|BzC zud#a-+z2MKd*$3Fir_0Jey70Q41b=3uR(k$Ug3BXe9yXxT8I20T+Bb%UGU6%QO5fo zS5y8O`w`=jU*3jn{=Vt>Z;SHuF#i;J?)xqsobn9=H_NX!&U46ba$yriuoUG_xVNB* zBA9lvF0b@r7Xk$Ne1MT5I<&Q(A0ghR#z7ioPXdSAJ-%ASwNd5E{Zfg%Vn;iK-SFM#%QyaTh}YZSe%cZMjP6A>S>#hiJ) z#)F!8uL>}O-D4Z^o-*Kw3$%NxRzpQ_F7t=$;XNuq3FMQkgon4Z0B1V#UH!ykPec1M z%CGlW#1H#3VFh^rdM}ye`5z;_fU_NW3E&>uLx8jqT*mH^MtGkK(D`63FVYw|U;^S# z{3Mf11o5Tz7)j$jWk4y%U%PJJ+#KOkenq~3J75OWuP85i z&pCiBf{92U$@1$oR0MzH_^C||6v05Gm)yhOplkpu**)F_?|}hMfq%2VsLSU=(Qom7 zHJ}OO-p{BnfHzPdNM7hOyx9a0BlS{jHEYa-T=g^gIM>h7dOUs(=V6_H<9_YImm)&?5k3LB@J#+ywSatp+`mmWME(He{;j_Qz6S-M`?nPTG=3Ajit-})3bG00zHJC` zC6M#{cws$!#~m`-qkPc6ChEZrQ0EO@e**9l?C+cx)^PT>s7oaO$zsG0u&I~!uXB6z z=C*xo{Fp(ApV6P^tDke9TJwIc`nl;aJ-)}E*7Fi{KdOtNf8M(hzNA=Cf4_BXt^w))# zY&lP_8U%TOPq;r49(lh%Js9uV1G*oF`fBWt4{`Fh*eQ?w9rsmE{*9&h{v#WI_dMKl z@^>Zp&HVZa{iSE@NB{JSjc@;njql{hBYiG2eD^$C>Z@x@zbf{gP1J6=>hIruuD{Ry zx%JoI8RH}1);#q$)EDCcKT6{`;DA4?zE<{! zJV3tsT2+Gj40s3inchcD?}qvd_+S0iHCgJd*i{#g{4rPkeY1_OzsU!5{hfmQAzg4n zF6*nUy}v>8g~;g`fA^}B0h%93-$Hh%wH{A|Ci8_9_z7r!;NktVNTf~%{_O90T{8jw znbBX;e1YOyiSP($z94ZUd&P}5elKv-Kg}N~zT!vThHvg%o}h$b2C@1o;hc-|LY1LI5{{{RY|bm-&Og58?-q z`9lo93AXlrhs-Ym@Dj-ULh{3%Pi*UaVQc;GksUwJ`ToO281KlWKGySFnm=?^Mb-89 zpPfHchS2{2^7X%-!u%W{{cjk*38eoG)ja_Xphbfku3(VrZ3?4HiCEce*ZeAw~=#?&H7$$z;yRr zkPS?4$?{b#&A*B1A}?DEx&@7&7@TYVFpN4#m`I7<|04b1 zuJ}@VNR!o16YcTz^|>})XOfMdFvP~&US{Ld9rrUG{3AzxQ#qvTgBR+s5o%|l>;Fa)i&bRh^Q_Bx-L*4^+L-?lq1eQ;Cwg|)&b3eI? z>-Etm-`>USe~S|Oef;FJsJkZ@sylHZm{`60^gI~bAQ>Yzy-(NxloZRmxm5QT{v*1- zV|F!4X}TJx`wOAp*g(?*exFd<$88S1h&>#@a{Nv@J|5FIHq&yFA>E%!f8Dn^(~s5s z5$5m6a+33PeBw;6SyS`-AL;YNfa$JYFRD|NslN$&uiKT=*xyI|gf!vv|T zTYJ}eaeupB%RA4J5j|CE__n|E932UM`1xnwdG_(9bQ&^TBkMY`r%t=)1-uWko9GA1 z`@OWjOWlG_P0WM3esFeW>O48gx=-rUA|B8E7MfqYZ|iz6+7as^z_zXj)8HkL^%l|^tc3u7)_O292xZ^$a*k=-vqKAjI@D# zfUE~Yh&w^P^{aI>`mLu(} zQ%~LBM0kEH{de_yY}_AvEU4XSnqTIt(ylsPZ_{^T{?#Ab^lnUlVT?`h&h&N6pBkk5 zZ)`(nOz&4Tzv!WanJ)TY^6q5`)2rW~+ezm`gz0@bo-)rbWBUFV*zxh1-jnl3=JVxD zAIx%u9%K3@UPs8fqk`!Xj=$tvoat{k`7oR5?K<0fPji_5tn(eV1x)YGq~3{r%=GO#D5&?ql%xqocNS>wB?0x9wxkGABgnRd8W`NLY|4s z{+zg1w6OixcfyY%Jaaz!0@6?CyQ#u(24{QT+v$hSE6rQ&h#%h{<5DCXS(|?NP_9N@;ezme_wnl)7|$oDw*!SBeI6+ zWBL6IiBA>N+wuD%!Ie7x8<<{pkB-04WdiBGMmk4Au2Y@<-M;vpJpt z%UQ$xO>t=>^K+`sw}9!F@jECYXA{#oTeq;#EoO|^sr$MO&(;4=T%h^luj+dL>nQ5~ zv-dAL4YBXf?~O&Q*}oKRhy4!YJYxr}drW;TTtT$@$7`MQ|F-aN_J1kj53>DhN5?(+ zhV6d(>1e+O|4{6YnE0DJ*m&=Ww*Oz|*m!D$jhEkI;{|SU4^^UU3yP1P~C|@&wapl#*&%DXrzuJlFgAw1I9sF(7V@V6y z?>czWN#7}`uO>fN^DQi?_hPqi9=;&g_eV&7B(kEux}Mkl0qc=C!w1~8UP**Qs{TIB zPWJxIgxb3O#w&Gul8F7Y=SZZ3k{*!%9Eo&LLI62OA{~?{K+cgQukxKEkq%1q59*;r z9X*t&qlXfWWY3W#KG*$|=SZZ365Wa(O7wqvC|m5mH@R!+%v|;V?=;{+Nw2#8vmVOU z>VNh3cmCq~PdY4Bee&0T(qT!1N9sT6u!I3ytN+`2ZYuRv&P_>&CG6<2gdIJW@Sm*5 z65fg)OW4t4iTzKHMJ?s|(E_%=xZ)aX|9&06AKCR(jF%tPul~M$P^J6rHr#QGE#J4V zI|{>6G~Xl+MhMQ%s+Qyx_6k(5B2qoNp`a71DRgT`vxLscc#BI z+Lq614eB^31XC6W|DMd>$=NU3i|LoV%;Q&uo_|J|ego5GeSu|S##FF;*`FzAda0Z* z^L#kQ^t+vOoy7Dg^Cw5@{iq72_mg&tv8ZqI*y;C<2f5_|r0VqK0u(`8}7+7t)s)YZG9bWu9IUoH&ws2PLAH*RGI7K z)O}6W?^!4Nk2O{Q>UDBmuE%2U@xd1tHCM~ z;C*|*VRvd==FO}7!T*cd{o65c501>@x1(JNFWIT5ZG1iC6Fmvp1dDMVO}Lnmfz4k9 z|0yH971-}E@lRQv_#acxmiN(A44^M(nHdCr)?;m_V8C4u_n6_G@054aDWAK5oA*Hir+n`~`Iz#)chWZx@iYC`LVsd!4KFFv=UB6!e|uUmssvhOSNty;Iu>SUfTtl{?wN1lc8 z<;Qx}=L?ay^t=eiN*N=zoG)zRfoH9}BYuk>Mywz37`OBEz zsh_5&y6gVLXZlP&zmR?Va;Be{=Uihh(^LFzcY^u%<$ZXOzm(|*Nc?#|lVtiw%XEBX z|9=J3pE}82H>H?f_XwN*2-C0P^r{_odLL!F&*7%O^L+k%$p@Zy$+}~iL$A;Ll^h>A-w82&G!)+Hr>qBynf@Hd$9qlJpD@#Va=nsw zUrLyMZ%D^eEz|QcS=XG+_08vV4WIch;d&x;IZxqaZ(-GCir8(hTstP$_>^3&8H0Uv zyGnGxH-1&u>hbBh+IIi43hriq^Nyn*IuPf(=6k`T@7;@8nhPmtF9 z>4&-~f*qawjW)IA$$3lV$}WoFQzyQg99+&<(nu>ofuo;r0GD6n*e;4-B;(1`kw1XI zsb6E*JwCmQB1mz4tz3=x0O)7Ow=wt4oEKi#*e zFV453`*&1T`*l<&9R}QZzv4#7H|5>pq{r14ydUv3&(}5}JtqDLxqpy7|GRvUonASA zj2wXZ58`w__BSa$mB8bB;bqZTj30>aX93bA-#DLJli8Y2s%)__avC>3&ZiJ3sDr^8aDDo9U%>ompR&BfTcR z5F4`IN7?+IgZgf|7f!PK$4(CZ=>9hU*qJt7-Ef>AGVY0eky`vsuJModugS!D-Z_z7w1e&L0~a^47drkAMt^R)&%*d>$}fWdlyP4@cAd?C z3=|D5|Bn0Zn8^9Yd46X6*e`qk{YS*#^naTpZxL`aK1U(#}`pOk?=33;ab*~s6xk)KPDJ|FJ`Bo9USfE%6p(wm&$>EU5T@RSpu^xieB z{&2eEzNnMkK8l_E`GwOHA01W%{sVUUN^m|;{hxPKI0H{ZUSQOZ^^W|-O|tKwQh6jD z{O1F0`HwsK8RPJSqr-|IpOJAGpp&bj=9~n>6kY|pkL1ld<(2g(`eweQP|8cPq?%Z<6XcnE)Rt{7)KBedL!ro~}cMm+>^= z6{_Qn`I~qKck_I zo1FYP%?WR|gWqXOy3()X8TkRhSZsPrp%PWwy^s)mWMBGf0J$**?RshLqVp(@%wz**??Hg_PMo6W@l^Z?(_V zry=!6+GpbYkTTn6^Ui8s(z&~o){YTl3Sf3j6dmp&j zzmz*Tp1{wzCq6Dz1n&Vi{hx4z?f)ml&y*+kg{szKz6pr!YP)~J@?-1aM&N}1#$<$N zyf1bN{6~rlRO(Zt7cdq1L%4(~dWyjtg^J)K@^8FvM(@K3FWL2PxAB$^KF5h~on^}XUk8tq zJR|?<{TVa=cXaZvkAqh@^&t$L;uk!N`~g(;)_7ta>L=hVCw?W&FJbnrgZhH|UxFvV zZ>INa)E9EEe6BD9i=6y;7v)Lrq37|21|Xl2b}jbbzJK++T04;>7BGC+0vAB6KYfVBSv+z9^c z_V1qeOqpr7uRr_z=UJ?8&Gz{!aI^hii1ohdej4JVTe|+g;aod@?_>YPZ2#ZF-Sn?p z^Oo)Z%Z0bC&ei^F9jSe!8V*(18i5{@f`)6O>hWLZ^Xbkl6+!D05uX6xL+{!$1G8QS zz7hA?cWs%08zIk}&m8&<(p#DxfBoUuUjTpAbwwE%>*%X}i}{y%zf|Val^t3t0{Q;9 zcYTo}kb65Z{3ek3Y=GYcGM|m!P^1WwPa*u4+4#u(GS;A_B6#O*9p9>gGj`URaNBjVturTtEfWG9ncw-W9_3qFQ3<^}_!j>8M3i7FB zRqK|DAbNzJF9$ESR0Q`f)aM_uBE$zU0{7P`KV!{+1CHbTjCO-xz-wn|c~w!w2T-tH zRp{zDx*ye~-Jd)fJKWoz5L0TiDoyKj1blT3Y$@Br__ozfpy zC@a8wT%N%%sPBNCIs6pr9)X%)x7)PoQ)i5w?w#hvrjDL4X>_lHrVO8a;F`rxD8si+VNl5q85f&gPU-l6?7a#2Ra4tPz8k1-g+nN$HkH23M@bRdDP+pYkPvMu ziqt6~56q#yMNTy@XyfbD#hNm+B?zKOkyUt!O^*sOgegD_*`d!by zuKWA>-ov`ry@tK^T5Au-^ooC_^4IrJ=}7CNJ#^?8>3jcbUp->fnPa5VQq{ArtM(px z#@OK_PaG@N_?H&{V*gDA+THCnZ0O+A4jegr?C=vu$Z0j?UygM{=heSfY3u9Bo#0$v zw@p$@t=<2O2g!id-K{vE|1%zp?eL%RAbsije|kK~%f5p-vcyOGcAZ%HenakRygzEz z2Vsr+>)vm0H^(|bZYw5-qQ2kY$bP>$^!s`KM|l4aQpeef-^ilw)%P&?yiFg< zcd_C;h;pw5p7YV)%gj;!F`v`d@6`>U{Fo15ujTbAKZWlxs9YZ7N{;ij9vII_l-FYX z`h6g7+dBH)BZuD;3TQu!?+1j|_n%JW^ZPEJ-!IbMVZFt)Uq-q8-Km&z{ce-SU#9%C z+N_`3@P5Nu%Ip0ExyGL?Hbr-b)*IuI$Lo`0Dc>hh|N6dy&p6k$Bkjjq_1uT@yq1ga zsmSB{$q`ucqbM(^f4(m}jPjRiupQsVeXwzqpT_S&x|C;X!he?i$7_SYy&={+qxIAC`@jV-@Pq_t^9201-&yRVOFJ`||xh%<(<5#VJK8Kd0 zyiOkF_4md3JAm?@+P*vCJRL|mysiIRm;WlBJNNS?f3^S6cz;x6&>iE-Q+qj1PZ>mX zT~S(*9O(|F$qt zbV6;%JIQ)Ep4-$hv_n0KR~|C*s+%U%twwsiIKC!$XO7%h6>2T}B__Xks-zd1)(ZNd zAY~I8IUc-sgZLBbdL8Wj2b(&EPCf~G{{i8Jb`yVQ{hsYCA?+`;lO<%V zsUP!umcf3~UPAAD1OM6iQh!3-SU!`dIeyp@@p)Y&UZE3NztH~qXD{aOA20C;eJ1(& zU&($+zorQtFXxkqr*NF~KcP!+N$=P6V1FvSC3>N&wm>|toGXT|kp5@V2c0Bdp@{We znk46&&^BA4|7tuJuzxAvup8Q=e30}7p+>_IU({E839VuM6ta@P(B~4bNt-`Z>R)J- z_TQqEPv|g~x71(q7t%w=6~*zh&ph+5#+O6o{ULKi9>y2*JH`LX_>x=D!AVHYXZMGi zjwie!GrqWkYdHn^-;j7RDK75d7}D`2_(jqR>G%>Z?BE#E@ui&a=otFD z@g@4QgJVd?7q4qa$B>RM(Lv((xtogcs8BCHJJ%pV0r;@g=C$(J`dsOYR5pC#2&`;Tx%cAst`Bx)Pru z_E*1wlut;G)Du zBmRYSe91o1!7-%cOZd99uaJ%}?)(mpAst@|UrTx+9bddXB|ae?U&^0L*@bj`@pqH* z3F-J!d`)5((($FRuk;-xgPJY&m*OI+4GBP<(*ccajuN7zsdN!vQ(c2C|eC))4weX8U5ej zM;8CP-6X{YNaHJ6Fmt)W(YECCk4%AnmWKWxs`$UvEp_*wX(j&o60N z4Q|K&FVvakah{iW zg|1=yMlZB-41FW@YvO_TKmXiS;xp+p$v07|o$uv&Z^H)-suSu*|HTg^KA~CkS6C+J zhtM##U#6jaQ$?ts)Nc~cFA|T?-yH!JcnjGg7&ZW5;oQs^5Qdnc$JGTo-e{LW-LlL;3xr z@OkXpw4wYd+N-=Rc zIqj39Y{hc|v*M`hzK-9<4T${43tipC!EN4C?!cuJjK>`g~sIKXL*VzWgJ7> zZGrik$;%w=EdIHkY5i;LPq6;;Pkle9aGsoxLgf<57fIb2`nw~?eRGdE_MENSRnCtb z-oF~tQl6KQLaqD$X*K3YI*(A)@1OSJ{Al%I7OVtyH-6Vu z<&7zS$|{#j`E!=MnsU$blcl_mC6{g2J$U*ea_n?+hK2qiH zalE1YdDffz5ae=;CpiXx3O_2Bt-$0sVmj)_r@ef#GdZrC$~Z&#(dRLivfk8Q@7KmT z_|g98)6X9K-j>Qwr2H+$sr5OG^5|v8$#u0p4^rnA$n`oij`k(mtGqz@$Mmn?b(~B2 z8pf&ei1Kl)PnDbZam*3Zzsk#$-^%(4u0s9P<@LD-%Nw#jUCQ&UXRU{Bl#kdI^``zk z%2%+SRX%|7op~PVch~cj=YB^0sC+Wz19^U_pOErCC#3UTNclu7o)YC>Tk))-eDi*3 zKMu#0E{s$AiTTd7IWE+G%lgSu4y_})!%j0eG-~G&ADIX^ZV{~nc#7b*J_`kd=9T?Dwl1> z$j}i&9Q|3gD%*wsHS{}{dj&*o~8UX)@RIm>qhwnU0|w3X)N=rgX=q=J;bOq`rK473)AB6k8@pe4m)u`4_YZXayr109sJvhCu;?rK6Q-p13r@56 z8`q}&-7CEMHrS8%V^nsrEI=y#kF)$;FM72#xbG)v|G`UXeyw%CZiy+M?4PNRmxb5= z4IUx>D)}MCzf7i7_D^ZY%K8~JJ8fV4;WU4-760j${dkKnNc@_Y!O-H*wBmc$ivMaW zzt1iGrB;5mWCOY~zgbrLAFcEat@8cDif6jze`m{nx@CX2mET-T|A?jk=)iQmk=37` z5&O#a*<8w3*`Hpu?C-Ps+YPyN|N7d>?-MKiZB}_-ll;y7L9Nr(VqY0gY?Y^IwePM{ zUzPDLmG~;tuap=WlbTVE$&F zuXMMn?>w~^$1Of**_jR%&2yLLSWz3;p6ko_R9wFxb)0kczTv@GZ|OYEe%@Qh#Zze? z55V=*rK7_-A)YY8IA2Zq0LuLc_T4C7xFhU?k;u0X<#z-eM?d9tnezFR`(HyofbwqN zFki}j%AdU!@|f~rlz%sz{=b2rJmtSq?o&RF@>ca=@6^HkB%nNE{L%inUKc3eb6?nd zO;HasC|__F^W}9Tq`c0lko(`Eeu|VYqyP9C_=zZgQtOA;*=3X;#Cp(m(sPs#wB*Yv ze`J5mm(>1w%1?Nk@$kA|qWq{{n5KwI%511af^I z-lzO~mN(iH=htM)|I~Wu$@7bHy;KY%AX;Ihy^yC+2-R zZYrARO3h)9pWzw*GvlW}=6`1Vbk6wq#!vUhzaBq*%KfC&j-%seNVz?J#+2u2zp?Q% zX#UsZXE^YGX8d&i{Oj@4zxF@lr|HQ$F8z1M&v5WxkDtNx|BRoep8szAbl4C7*T&BQ z|Gn{ZE`~d29Py@uM{i#_erCA-zHf;1rJri8+duU8$N0HB#{os%KXkbu--7!jA@9@B z+?inA*UV6HnI&&bdBFV;|I76FIa&8f9Q4C#+OOXyGcNkB+JD!*8M){V9<2n^{ zo}=Si6H7jh_R&6R`+)M5^zUjPqJKS4r%~R$F6?!`Wd`Ms=zb&j z{X)t+X`Gy&%%%K*li|m^3iVK=+}^jjpYpL2m@nghfbutW|A+DiDR&pA?dMZ|Da)(p z#RAHYU_2_9WqxuDvgEQnOO6h@AH{qZQvNC9@p)hW5z41q`94Z{&P&Jn80DuiU!U{y z$0`5GD(@4NA8YwpMEOM4o8G@%OnI$&$Tw!YM3mpgI90xk^8K=~*Zu7h<>zxBQv1mY z%7-u>y`K|PK9X|n&ub|kXUQF&_p9{0VE?a6`PteolxHaK$^NPSWqU3;_GUlyF2MQd zQr?&4Qu}JkkGAAl%6-bc+VG?Eui^PZlG{hIvvYRAy~Tc-DK?ET0)%d$UF@%)ngdm`V3>GU&pOYDr>E^-J37sOK)!H6wPR>w z`>oq?e=a*ko_81ezit2Z_Xg?m{df0c`^tW^?wuL@@9xjq-$VV+er>vb|Fd7~{9F6A zE#!RkEB1H)Z{5Guaa-}Z7TZnxtMNNnnhf7gcmn3lFLrXA!Op?!#_!Fl(*5O3c|NrA z`ConBSKNSC!>3f`(<_{L$?YI7ZOP^k8eYK3=mFa)IF3o2x{VFTJ zgJu7@^7+`7o2U2N&G!f^_ur3Zd|?au4FRF=#h;eN;4c<`fmL7T_us<9*O%v{t$QvS;4yI+#_2|rq&e#zbG{PL2% zvc7A{hEyfLs!5u^Sjr!NThnn{)=Q`;&)Jyz4uv;#xU{FnYOsO$tKp7`bJiL zooxDt`1f|Hm(b=%fRBVX^r=-}uUh46Z`E&0%l|eKpIh<#^CedQzTD#N=e?UsdjFI4 z^=qE*uKYe>H|ejH?KN2XTV;KmYsy#g`*EJw#})C6vg|us@%OR(?`f5Hyp`TOU+!1* zpH>ooSP_3#_{#I+Y`cF+ewFd-^X6VFX&<3IBz>iRU*o^x{J77&&no>#ZLTr>xuX1+ zNW7KpvC?YKNml>)M9Ne7z0a9edmSM4Q8^wQY1PlQGJsaL&rsn_|JL|Uw9>m)`QQ9D zU0>hHf}yhh3Nrpy@_RK(>w8LjR_Yr{ewFruLVvRr7%k*4hHF&<&UZbq~xWcNx z)pGvC74vcVw5H?B!-(p0hUuRb^?|F2*zm%$sum<)eKv8M)cy^hPkn5Nq?d=*^!a&r z0Ioy((UGF=-%OVNVUBMdu19~u^FEL|&R2ZyL-$ei`Zs{k}>kL9{KXoL7CQ@)zd<9MfIou~T>|Kz$> z^NnbKp|$U_jPku%E`8oj*XxV8?o_$1*MFsdmB;j>&)MmIz$(fwXTCn`O_psqxQ_Sv z9Mew}*Vpwr_cL_e|Fp(KKf1nu!IC%NI(3GXude&+F<;%k*_!s7a^0-*Z7BDw{UrHJ zN^;z){u!s7j>+*F<553c_BvZw{h z_cBi1*V&2krdki&7t#HU8dW%7w7qmc<9hBVX}-JBPemafKQW(Q^C)l3 zdI%R{Kd%qvx-Y2vMmfrN(t6{5;Q-1HWxMztabEb8FV*t0pZGEknd4F?=^{>z2<}LX!+IMIF(SDVue4*9f#!@~=_Z_=%AB*z+8E0JJeIAbg=jii~&3XTm z^1T?pKOgdd@?TjGI-VD0-^U!MGhc15g_Li~{X(Y``a?uHQmy~}u?z)=g+G2+`TL#4 z$#_1-tgpO&^_>?x;rw$3;rhnrbQE>nrPqyFe9pt)7WY#%UwwbxXMe0q#cldrNN1E= z#T)(-CtDMU9TP#1eQn`LBF0FDZ*KgTps+`L8TULI2Wkc(?;_@n|a{U%P zU*%M;--<6(IseZ3tt3D0Qn`LBzf|RHX#M8CUgcD--^#C6$v64duOGa7tDMU9TkZ|% zUlr?@@>^9-<@&AscGdst`mOL@l~cKX%l@;Xul~cKXE8QsP%Z2OL zJEfIXPUZS7h^w3pt>4PhzyCMaZ;r(O@2ub4sLI*U`Yj$S{ikC6mRVBeRIcA*d1<0@ z{g!{H%GuERE&Hx49(m|>Me)T)&i>2qYo1d;g0LU1Q|9;M$2ud|?H^vk{j^fstYavY z8=Sg!H2BWzSYOAYGxU@7d)$rp5`E+K`)7mtrqe$w*Y`?)txihwJ4^aX{i#;^c9#CV zc4>S03~DOC)Yf1R%m34dN<8v? z)u>xGp}DL-O*6*I{~`MGJ4<U$W|RWcRfGirc_@owAOhC02X~OMK?{N;Lm7 zr9YYYl>fr2|7G&~@v1X8#!vIH70(*0f5}hfrP2ph|NYSFFDF>(OIH6|W5u^(+jRSG za#cFNDUx3({YA_0zWA%;A7lRI?peps73@!He-rCd`G%JNDyw|gS>^l9>ffJAerEs6 zm9fImwUS?D{mWxIDgJIN|1Yif{D;+l3KoAO{TFwY{ws8})jzMd?B`hgy~3OEASeCT zP?7!D*)!`H+DghFRrH_pt^PXL%FoPCjD5Mi)VI(Yt32<@`4V}XtZT2@90ariMMk9 zc9rNW`)^Olzf!N)V;l9ltoZ!?z5Tzszn6KD*XNJ%T$%Y!+f=8{y6dy!rpx!;81z>y z^RL32?+YtGs6#rwm#ybH>YS1GH>r=5FJ7O%ZY$_Zx3+c+HIetTD$5&*eI?&e{8hH+ z`3ute%Y`?w6?bp#7>dpP4vE*B);ghOtD$%HYAruJ*4lY-CHPGD){db$mx9mT)Y>sr zyFU7NcuQ-?kh}_)if7p_Qa|zf^62*_wSGR51-<#dw40Pq=%zE^FZ)s($58tKeCeS! zj-iXL1)p2q#xc}~`usC(lV7+Bk;J*Zl90{Dm&j{BM=~g$DLT`e;@g$54*` z@>9iL=oQB26~w>LSLDk#v~diD^p}|-@e9ple!;$N97D%3{-Cw+LQma{{QP~|IEK!q zKD(#Xr_d&2q0j6t{)Fb!Uv?+a3x!(0EhSc=C&-s~m3V}%p}(lTlt<`grVl4eTA}+i zp3xGIP|SErlcYX{o~OPXh(DobjK`fI^(piv{gsA`z0f<%KRjLh3$4-k&XM?pKBvF@ znNpuZd(dBbsQ4G!WFpF&?<;ztt*>MGPm=NrxzxKS$p1o*u)e)xr9Fg>pucc`$zQ0} zRHP3MlJW^PBk%W@`WEW0`5i9#37x_A_jVM2Lc_HE|7h*xg-)mcLQUx}LYI&aHWmMd zXrJ3g$}2QO`R#-k`n3n*@wb%xg)U=$`PJfI=v9^{|BLWKUn#$t#3xkLc0484pdI`F%t$^g8*n{BLLq?Q@=t zUqX!;Z?32CLavUt@_$LFTJ`&iUMR!(N|M&lRrKeNY3&%gk>jg-w)hgtGQD@8)P+zt z^5r8W9-;3zzB>J7ycIf-_2nNT{)Bq5yv{+Q7do8!^4^kO=s5BvU*ZvRK0^6T9hhTo zQ}mDM_|}f0!>smd#Pa0Dm!YOwJ}GNSXo&jnCA`q-pv%LW9T@^zw&yuW0>aqNcu|sDoJ12AD?G`aBr9T6*`6G3Ga~WkI)M0{oADegr;^) z*GGoe8*fjERp;p&a9PrIu_V0|iI&*B?ed=rcRbYOb^aD|l5kJtOh?B>7ztxJ*O)|s#V z_^bI*_yP>0h1kC^^P}lb-F5S$wH5nerVRG{=su~h%K6dgQ09LX_sjp4`BG(l9eP>1 zd}q~{_rvyEzrOre=1W@F29M(T6Wvwq7xLitJ! z<$Mr2S^SyrPih`pGku}C^dF&PC4Qp|n@Il^`i$eZzoYa=q2bniZ>+`t-FzyZC*KDb zdW_eT;-q5ix+g(KTJhEC)4Fu0-sE?!RWLsyb7jc?}|no56#Gut_aVqS0JW8{CK!|1=%S?q=GpndTOiC1VC_4z~F z$?s9LbAD(2WDk)1gx1oZ*HYpY`i}AW?b^xyOgpFQOvc|+;uo4of6<=p979hrzx>>` zj-k64f9|}tj-fv|fAMCwbqqaAy>oqA$538&l^LtwS3vGQE z%2OCD^(T}$9(>M~`V*Q$|Jl}U9YeQ~_jZ-^Le;eQju74u`TTLx{z4ac@aG&X@e8$O zex(KypU{IWkGGAa6?%buysy-!&;a`L_h{=F+E>z7KF>CY<3(mCnM(-S^Q%4CzD^6d z{s`q{Jga;j%aieNatUk{BKC-U)cqcUP$L(xksuULpuM8aA&Uj7C<}mXo{D;4La(<_>$ufVa{9bJ*_NSMsz z+?V;6|I_;U$}r*GU)S?_qZdARbo+$H8Gg-reIR^TVc$;tyOY*mf9?6)WcHWvPN{F9 z*Vvy*yU6uhD3J5X#N!WWpHST$(&cY)V45GR=eH~8x6rLpzm@aH55<36F`wwk`gZS; z`Vq3{haJR!<@_Tj_LaPUfaBDVHYx89%!<9?bJ7lp{F6-+j550>7&Zht+XAD;K!1Cn z+kZ3I?G7~iOU94Gd^}=6EY8Tn|L(xT5e*VPCT4yBpXpaGkrcQtOJ%Y2IDOT;YW z4~WiQh{vr$yzyw1FEa)h9}D!419}62MPj~Aog|L%xY`Nk<-`4^d?osE^5DH|Yb5d@ zkM#KokjJNk&+LQr!QMc>7cg@m{SJU#Gy{H$x7AAgWe?mW!RR^2ON=Ytt7alEo`7_@ z+fuh-AtY5Z&FthfL?6i1Y zfmkHQ^jlK>5Tq{>OT@y-loLzDGBI-s^Cf0{@Hz5%Vu4sBI>TV+5`AJo42coZqu-dk zGo0y(9?>Tjh(%(FSSEU>B7L5Ieey9edm8isu|#x7FdZ>u`V!G$dt|kJ`ZG@Uui$(1 z3-?F#FMoevnHU@Z-tmZ^0t*9xr8ejnd17fE{CV3#?y+ALnV)kM^3P0Te;p4$F8f`q z<@f+{e*72+6IdWdL}wGoOJk@%1L)RlihLIXhugl_?K$d{Q-Owy~z=apM!VE7rrC^4Uzid7vR0Gfcf*bP2wt#2m0i_zS}@f z-kAV>NWMsnh$Ui7ED!@?{v4z)ox3&aVLUJ(7Kr&#{Qe^_@K*7)=F+%6Hlc@z3j+V2&6lKcfTc z?NI3R^}q+40dt!JLt;dIrat68u}E|pKwcnb>Bk)jd9W|A)Su~npm!wD9S+Qoq5L%B zfk6K_>IVX|yP#hbw*=;%#<&sRvIEL{GV5ao@jBMibYSTsj?ZU+&s+xddTyDdFKpf@ z!F)I3kcJ5#ErLECfqdeyaU##&0?gkEbfyDK#Naycg}J~oF+3Z5I0Kly9vBUQ|F8!z zPy5KjxEU^kJXk{f9T=?wW}6}2@*A)ZsxhuazcoqXEiD7)Ujycj00swV5`9j7BgBjY zg}#`Fm56zVcGc+rg^|E$fAqKL5Mb#rU^o)!t-$!4IUIb>C-wpsKLnP@htGk}D9)$- zgTVZKw7-}9a$x*CuOSqyZa1QwqH zdP{+&r-7Nbf&R0=;2mK3U7+(aFkb@3uK>eifbKy+=SX05B2m`Trd?uLqZ=&FX_sJl zJ}|f$=*<8+R|7M7VD@ZaX$r7#F)$uZc`smbFfe~SFncu6>jL!m0y_PG(Luoc!nR2~ zxv4;(A;?BUJ2{8JFerkZvZ3}cWwEGEq z?37Y!OWr11QGcvr_lPG&!hR>e{bYzdp@TDfy zw*|NOtGFaRn`I>uB zhR=S`Cc)A(z}!2){F}hStH8`+VEh!YD9;?2^rhuM?=he|2bg~tSa=W^$ukAUK7S+7 z3xQ>MR=~(JbAf@}3pRYP2hf*$(T2~;J>VqjVBl^grK-19b=83S}j0=-j#q1@9p`atf58}v^G z=1&58?a6NrENle~wgsAJ2u!+MYoIUB7#Kb;_qG$1d(H{Uz3~LM2WI46so~2*h;lE~ z@R^f<@nOI`v2+x9xu=|@Bj)6uv*C07fF)v1?kyX6iF*G+rW;H=l=?g{Ivto-xu%zU zxQTzc*PZwy=2XtOJh^vk^bY%HLGFbbK0W~G-H(1;n%XLnXGaq+0cIuwi)R6IBZ*f4 zgKL1!wLo_)FghO?o&wC%UvN=_B%d$9IEdv4yi4@XXqm*BBbFX-k?`L2 z!2IXHU>Y#K0qB1KbZ-WRA<(-O7(D^>9|Pv@Bhs!o3%q=!0_{#dHy3>P67_EYqpN}L zi@@S4VD16(Hv+S>f#r{Z{tRIF8PI(OSR_WT(ry_rCc4YPd#n%VHt@ju- zr{Xo>i=)v0-BW?Np}=?~Fgl(3;lRugViWW)_xD|r_6q7?Jc~C0dbNQ$^7%hu=hc8b zQwvyR`fOeBz5~qGq@H%+A4u;^ZJy+pp91v80fV!Fr89t8Vu|+d71R@p1@Qir!2AWk z=p0~p6EL0zbgu*Y)2W|941nH+Kz9>FH1XI>E5S|ERBUU!keFR?87C?v%*)1?${=JM`O<7M@_G1nOukH2S z4&b#vOtpnx9O)p7$a3%AcP{xwfFg(PNNrNAhz&g?>l!)2z5h zw1>U+tB=2fz1H*G0(h<0@n?h2(BHX3!EZ)BwDP}hI{eGygvqh+YVf<0UuxCc<5qmr z&xXCc#gZJ?FGqfQ-pm~Vy*wV69Hpb7uTOr3_58dze+f zFIw&2tO5LKdAC@C{B+!%XvP25aj=)Cijt$lmEgOO-|uAbI!?T4^@pmi(CaugaDVW6 z-kwuN{@UL!I|_O|@0VKb^_f*)S6Stq)&c4De0s#<|FF)F4=nv8E54co;ZMuo{tWPX zey_3Gf4&uedn^6jmj6}DQGPw2Ubpn4Zh>AN2T6_(EdK+oc*dNJ__RH0bxhaCws*mw zo?kO9|HoM8>uuKg^}aO@UugBGTW#LzPq(c=JV&uSD=q)it^V+vRUZ#INbfRz-TvUU zzf7>s-$$+fQS%-qn*72oF;-{Jt+Ykxh&;-9vzgG0`T{jQ8}uywxFJ{@`;FNa(N zz7y@ISnXN06#CxOziE}fYFp@ayy;}sN3++_-a7tuw9dx?R{y-n;=h;z|GP2&N3Hno zwd{ACnzsL>33wgfe_4Zgbe^%@+BE;k`{0`}zok}xI?9TFmet?q?SuSUG5xH`@V6ED zf;GPW!v5Hw`UzJ5Ut_iBY)gOmJIL=ire9$7-|wydvExaw*LlxA8Q{EUdOWot#}$72EAUNyM2&ukFTwGF1Ffx!BMc+>wm}I z;B_9@;%e|ZpE>Se@Ou5b*6I(JSn+uL-j3NLGRN@E5U*a(ikAIV*7@`n}63;Pra8aBtYxVfs_%fY zdLX@y2V4FOdmVpHxdy!U$HI%SKalnzFf=`OI> z`R}=%V803Vms|Ny$iZIEzXjE>uSNSEe*mxZrK(nG|Cd|kd$T6=F4KQD8GL8*eV>Lu zt^a+k`R2@rq1Sb)e;f8U!cY0#w*Q}bU3W2jN7rr2A9V!c)phccmf&mBVEh^2wY?f0 z3tq>o6Q+UJ{&3|f;5TFX&wcQ^FEZT9??+3&(rTZk8PvayS2x}Sf4aVD_!fA*ULR=j zU7I1jj{ms@;CnE>z5#e0?{~T!yk5Wm7ztkIAG59ge1VnzC#(Oz6e9he%9sz0x8nK4isv{hp3|Q}dY#`*u=F(#MSsxi<5m-4 zukE{=RUf@9{il1vUe{l59t~dS%OkAvervTy{i|TFGxy$ORf4EH5_`q-hQwG<brRBVNqz_J+v@dhhBg19*?Rb8Z|vu-m!$slR&Q7z?1SrD zDp3U!GJpHJqb74VqL12a*uT?uBl^QOtoJtJKiG)g+erT2M)HqZZ#X`e^GADLtMyl; z-kxWwKE9myQB+`IG!OGujf(_>%oU#%9sT5(dbb9xG#P{H>(;hVGGmko{`U{q${hDo)y~^lIhoF4gKY|yb-)jDhvyHxZK)U>K zALQRZUn7}PyA9HM|4QUvYt^>BO!}|}>xc0N{LXi?Sx=hNLf$=2moHk2`s=aNE&Yr> z|E*Pj-y{FgAHSAN`NCyQQNK?j-}pDA@BG07OHBIm?QTl%{SN)ntwtnEEN}0$KBRu1 zz9UDN^o70B`luc9Kj+UsM;U#7Zd&iPhrY3U$HPXSnFqc0kKk&IPvIWB9%S^+T};pO zKWdKi^Yx4SPc`cNRd_!@(?>f)KlQ1;GmYMfI6kod+v7)geOeziLHgmBEck~>o`06- zzn(uoApUQvFUOQN&-mGX?w_c?x=*zH#-uOi(&h8k!2f64eI6KnK0y51zoM4VKhoxi zWJ^Q)r;ac2ExnWWI$+`xH=6X>CafQh9}(-f{l!<_XY}5(wBB>PB>jSACyh6HzdqyB z{ukr?>oIg_vP3F9oz^=wkpAapeXmaZ_ivW?)AKWW9OXa#?dKX9ed+FW`sfqHUp4X4 zF-9L>oz@4NLEqu=Jtr7_G>+}7_4@?;zti4)@kspNYo(`t_iewv+~|Y*(t580+V6%Q z+gxJw`Fo((`i}=d-}%mIuNr-(4$mLfZ*V%|yXU>*W*L3%Ir?Y+h#I5)7JoalqtO>< zqJGqW_)qvh=aBxLjlQsFI)A4O{qr+_{wzsY@c=hYhrxr*kM&t zzUY0V*YbC375(Z@xr{uZJBZ`>E>XV%h3zazdO@AaK# z(ia!-J+FJcq@To$zd_fICnf%ur2R*A5Z|{S&QA2jPI%8JWcpwY{NHumkC91VYLQ9& zt}Fk`$Y1_`)dcOspYt`|^-39)S zIsb%JMj!J1A=StAp?|AG?aPebZI(_SHN^N<)%(t*eC6iQYyAGt$p4sQ4*klc54uqQ z5&XK_17Fzw$7FoTk4j(PqAb$y`qN$4n)L2Xtbe8tn0~^!=eR~6jO6u$`k4AXi@%IE z`ZD$F$~PGO>+$ZtCtCpVo%GM~**O{dYbOkzZ_<0WL%*(nJ&yP~J$1>giT?7m-aiHU zZrx{A8-3=V>G@ks{bx6Ri(3F|IR9FWdhuETvn!@2^A{aI-8GQ=m%;y(lWrfC_}A+{ z^)dD5?sDKwmHLqWL;A1R;Iw4?SO2Pas*%rGi@Mh_>C1=ny-LmhQsh5r)~5GV`giHy zXZmjsY<^Zs&+*TH0_k^OoGTc8{)%+{1;0VxDwj;3oZRYk{RM+@el@Ax=}42_se}1R z^8a7`IR@v8cO~ZiZW-v`2tPjcdjHI)-nj{SZTBF8pYa#mP}5`+|B#M5R{h}bhZ?>A zBlLP+cnj;qxa;OlKdY_>m#QBCfx5` zqtBJndiNRlU)Hcu7o&GxN$b7cQ12bL81k}FmzlrD?~h@-?ETA@M(^F!AsM$c{_taz z@0I0p0hJ^Fa@v2u{MWoRd9cy@ucq}e^$%`cGr6u5?fABa|JDAOWZvr5V*VWWJP+sX z`PIXcd9`yp=OrJZKS$dEpFE>ya;v>;jXUxADBsDmKf!hL?ex4g7>4{WSWu`k@p}_F z@2ZV--eu6gTmSufMz80UOMOVJKk>F#Qu;3uSI`aPYMpNTew643TJwhQVRzM_y2*9V zyC3gOtgHX&(7)GuRRfdWAItQtAJ>KcgTr@A+OPC;I=#0E;@@&kG}WY!9!~3n=g@y@ z>~PY=ME{)SpVz&bi+Ac}^ttNvb;;Qo`ERpkW^&#Kd>>ZhkLmxqt)?aOs&Z#sH&q}0 zfb_>4Jntyuzx+L~OB`3+nb4o};Ooh}GyH+qoqA}WpgHuv-LW7Um;A$V-CcKGxEOX< zJonMH#=pNO^ZyCyqOQ;1Z@zy4i{=bH5HQE9#V8T22G9sQfpXOBzk zoh@*F&t3k}n?|1-NIlCJWT3D0?#CmH-g%GpOMT4i`p!>Yx|>ml)a$q&Pe%MF{XY9i zqhHrQ*Pwj<6zH#ht#Ll3*ZOS@yL(@l)y?ROckYxr{{!m(eC*W)MqlWX*2mO8IA|Fbl`Xy32KnEg-6~m^MsK^R{6p%uoYgX!H)h|3zQFy|zuQ;U{^fRp z|2>;@`qIQ7+|e@S-+K}Lf2%tO-eL59?ezE)cSHIiS7!zpeg2p9y3Fg2`t1|Gk&J)g zM_Z-*yDs|2OORq&tf{pL1C z?{rS5cN(LAoxR6R$@mahdUqMpHyywGIZ686(&;0nFK+VmPexzd)zUM*l`mY>-00oi z(|Z3U)bGH-`|N7;VK?kEyLC{mkoe7;u50x1N337=&xq+KtULhYe?7cswyu3&hX4EB zsmZ*l)SLNpe2n%)`{loWZMpGZ7@3YQ+za|8d#s(CJ zr`k7Y2K|X^nr&+IzSX`#Z}|V@?z574TPc%nfA0&V@7`g*)h2z=IbA+)IIbUaK8vuf z-@bV&|8RTMV~-tw{Kcd%^1T_a6Xbpo{@Z-o>%&C$!QaUpl?U6ZSzo(^q$V%lOUR<|g$J5!Eg_4d+YyZIA73?1EEZ=bQjk zJ9i24SvtQF>h+FhiNDNkK(z~L7mi)N%=q&MK%e9OMAVk`e=P93D-Ua9?3}e&-}`HT zY8TUP^hu*WHfEXMp?8TM{YBehy+5n!%x1@wc~p+1PnELtmPm zwhR71KMa~5o2;+g%b<6rrtP9Su$%DKl4-_Ya0&FmrIy{DXpa@oFH73Pp9#IoIJF!> z4YbFZ2R*RZ_;VkIUFMOrKmRWHd*Rq?J}`Ef>Cl&Er0s&bi0{l=CyX|B&b817*QM>8 z&0sgF=gPju%zXfQXFgEd!`?UYuYo=$s$Dz??c3|xJCb>(@1P&#iE8JZgM8oE>$7$y z-&_QLC8FAS_n^Ghzn#^`*m;W?mm=FYrrn*VzLl&WGLOTqK-7NfKI>}+ak6QUIN4|acm5)}-QKH^| zjCO61pL-k1`%%xeUmLqZP&cWk%p{**$;tg7t-I*#hbS>cID6h+MoLh z@}0E$%WsXHvnp-pasMc)h5CD?*}SA*g~PBOFA~+x&BJbGlbK0-I48g^LsUCwH0*|K z^Hn{QZPXifC8F8|wPCmVxT@2QU3@+EFUmx(GwQ=13%p=P{p7s#|Irckb}>-xV%oJ` zvUhC!<)=U&5F=i{BNyZIpkMdg)7V8zVHZ9_zqAWagx&cauSn{}dlvfA^0Zx02jysT z_`QMg=g)`Udnj$^wZQpXIQJjV8@uR!>K{zoMe}ifwD|GlOA>!iLGLn7Er(YZ`PL5C zCf9{<1?&p%r2Y8|;O~xl%eFQCG7t+1qpQpbU)BeJDk#BXMt6w*E@g(T8L@kHE z2=&)wcJ5MRm-!HO1)|!;wCmBb^B%@7WIu7=weo!*`R@1OyxojlQT41JEr(Nu{x`8x zzvQ~*z6n1L`=Qzecf)SquD>ShiQ+=o6(0pgyCHttE|w4VoAEKn@2#nwoo_e_c9}dd z>H>f9*}w^(-Jg_K*YS#K=Z}M3-!Z!<T}-<*L7lz-%Ff#zew+qqkLsuAB=a?I3f71Dvw>>o z)rZ}I-B%1V{)#^I&grz{K9Bnq`b+!Kldd#&(Pr51Dm4Upvc6(^YU8{dc+O?Xep2woc1gaW zXW4y$d>?;n@>9m2b2RkDDQP?R8`wQG;KaGctZ*Ilg*j=vkao4c|M>!A7i`0FHnPh5 zE&Lrc=)rl$F83b%WIwe0(eA@Kb(R^s=qKo-U($B&ckuVjyuv=l&i?`W_{X$eNV}b< zZ+5YPr1N!I&tF{i z;)TX8Q>6Zpv|ac;^1WuaPA3?+y89r zvfZ{szuyzM&dz!sAy~FWV&^^wTxYj4{ONNKnJ1BNk+{-&kHX~nS4Y$X<#e|MUj4p& zNJfreDE3qQlYwd%(k|2Z#|6f&*aG@2QSF=yaGkDE-6FYe6-U6Xe0tiSGaK#Ey5D)p zb#)Dz7D-qY(Z4J9KTdXzR*C`B#op)+FU!VD&_xU8x*p*n$ z;wfo6cU$;-X!AkG8#{j_^qEmDrhnVOr0q-9NyYOy|bJL!vv4gQM7qAYAF9$kT0ewFA z5bTA1G%I-2GxpK@SReYI5I-QE3jh93z-POE;2ZnWv&diLj=C@&`VVWSpHC<+#QI#H zQz$TVa0Wwg7tMwLf^hP~JyA|M7R@-yOmE*%%^ujmLci{x4s4QO4MNA^c`%19Rln zK4!mewC_h_jJ@9-`->D$Hss5BIrY+KgqJc z7WP+O$mgdfLSH22FSP8hgZ+uO#mPJ>cLDSfF$gUC>9F7Nn-)ob@FzfDA{NfK>}SCK zy6#)mGVy1|Lmv?R^DO(BuTo(zaI88f1TaK*!!13Um_N!SoSx- z{-QpE|1|ccsnC0u1Dz`@`x{~3bM7}s8~f-I=(Cf7?xmLfO^pAuvmQ70-j&c7iG_k? ze>3c#oIWv`Z^TzYpSv2Ey~eVi1^ZD`|Lkb|hi5>a84D~E*Y%$e_6J|%)-?9zarAc% zFnca}o+m+nj3@KA$yOWtd`q0?K?@>zqcex!4fBLj51_L%@>}=bfXyS>y1#LKq|0vw zwBJjx`E?2TPbS_xIe)T00RPK-5Bx6He|Zmr>7#{67cBzX?^W2moxk@a(q$gRdmD9U z0v+PU(ieY1`Yh8oX1a{}*+~4(HmJ88(^oT{tNAm%{ho)GBixtu&-C4xF01)l?HA8M z`#Oy=j=i+S&=JO0t}Dvn6CK_kRQvcAr2FlFz9Wr&X?xgvO@J|ZwfAp@eVt#|bT;GyDblzJK&4$$oX|GR(tDQ;1W6#TT&e96tg3U|Zxje)gGXR_2#`x|0_e!J*31u!=K(dHz0Xqk2kp4uQWy+A9+XZOj72-V@##xp zWt>_+HfnzM{!e@+{OUeXk^4dJ)O3E{S;+6a+{(@Wo&4OXNH_Yo{gVDwxCDL+lZlrC zia$tT5mQZm{yA9x+vO@#zAoLSNH=8Uu)9pUQtQ7?7w!bPzXa{>o{u;? zcg$^S(rG^KU_Re)5->}QpF}#RA@Y0sXSv}oN0@J)v~x5XSRMmZf0|#&ar=*_)+FPw z>Z2MMSF^vPK0KnPi@rsim(2O`qRKc6U&Fq<3g~=6G)8jlwi@fd6+Z)4S$v;0kS`-n zUJHH%?GKr?Gy4C{z_CP?&nN#Au`%scKV&M-pSlHL}~jYOX(b0hZfSPQ9j&9JJr3Pj%>I(mOjc-S)t^5pgGAxf#&^gX7bK=x>`| zSU%SzFTRBNU`&jNC1UwS=rw)(0McK0)-6dt_nw13x12~mA_mLS={=_Zd}WYaAIr}} zpJ6`E3*hs_EcMQxtUsk-~pYxB=>i6 zx8b}Di4M`f9rCiuxex3_NZ;^{yI(fh>v@;Ek$(6)Ce95^uRPO-Okd}s=HFJP&(C7| zn}E*EOiw=E4*5nW^h(ORw9TAkT#N760_EpEgmV}8{N2EC9&layGmw7R;VopMMm5`4ON) zy|!QU9s2*3*IsyhQh$4Je#qaeag^`Q=eEde`uGB*-(l5P!%TX23)p4q6Ulp9(l7a- zKI%W1fcVeuP$-)8@p0UD83^=_2gXG0ADZ4fAL)-g);YkW4^Du6b`aAM10TGm*Z8CF z5&y?u_Dj~``2{;C?Oz}U#OMjgbB_Quy*B~rC+xi#=kHKF-&!2Z=UmDAr-09q*YpnS zZ`b$dPdD-Vi!sg>7XV%Ig(t!1$!q$E&o?%@|L4a{dS_4c^Bl3b2Y9b5k-WbX>fd`F zc;NNdB;|Jpwo1yMCFZsV?~(V(YkGYzdeC(xjP_zhJ3jRc+FqmtM32f#A8hQ0@H`Yct_Y5$!D6S)9ZWJ_taU~+oX?Z zS0ehfkI4r+rPJ$s-ycrf?1?1(HqblU0?Xt}#F)6(9Zpg&y@`hqk0hF>bxpkuA&wxP zM;uEudH&VWJFJnUKZJNBaUgLBaRhNJaT4)7;$QhTvf5oYbxeE>h+7kz5L*!25qBf@ zChkT2JO7XG2mecnFA!fRzDN9o_%-o2;!niC^WSZM`1go?h&kc_qE8$~97oI(|IUAA z$Eu`$8WUY&H8D%S*&G0(Ye_Kw3V{baktPcRpLeDdn2K)L#f$HC8( zi=I8J(oft0esa^{C({wU`f+EZ%jF%3a{W5-^5lMz+C_UJUH%2wJ61f-i)la6f$(#} z4oy$0jK|*>^EyX9?MZ= zyX38MWoM?#717W6ZM(lz8Bb;p0v{69PjEE+TzN-}AB~^F__UwwdEkr0+_~UmMaB~jfS(aZd_5%bGtTmJ4*d{w zXVVWcx{Bjrd-!=~dP}Usxc<~~Z4B477yI+F<@cUv;?Z=D+_o~;lXxE5B}-oQxjWPC z6 ozvAYB$@5`qSLAt6x|{Yy)yFF5IOeb)&e(t1pvrhk^yAzMKjnLX>L)|FmMfCS zGfn*6+uRXX`f)n3|J;Z4S@P8HeWg@+iA-ioZi}Ndp&r7Zsg^AXA%5kJf z%mqA8i6-yLL%%myesS}pU%E?xdf(Ik`PY99K%x-!38SNg?PT^~vw+Y5PUrpkLl{7`ADPebeoiIT*Zi5YRsbSQtvV21aym*(Axw zpA9S%vy|I7KZIS0Xs5H>JLS2spFa=S`%a)wx$dq41N@*Yun zwVOuy91GRX_TTs+_?`10P_+TE96%gK97mi>ED&w~{wcd8 z=U4Axz@?`GzdjAPY$&ie66lQp=7T0fuZWVUf)2SI27CH_E- zf{F^#3P@0tu&6;m-cQ{+b(b^UnMCpbyzle;^H7}oJzJexZ{51pcP!u0#03^l5xVR` zi*FEmuIR52`IAE568fr8=l_OpiM`NgZ?^cjRhB*|*ik1x{T3_F-Dc@q-?6l^+EV9# z{5Xr(3GEth@!%sYEeTyKbc4|2jPp6))r!5ibZ zOLA*VbAv72@Sgo%qSIUbP8_HHVArXot?Yf__49A{-*;>{!k*t>caQBytH)TJxYy#G z(2CGT`94Q(Z>#70ran5&kL&&&w)WQ@l}qe%cH>G*i$c9iEgmg&wZoTL{%WDlZ{iEq z@6+$~%{BE<{Ib>CAT;q6i%UY+32nT}^4AG%{Hn#yZ*q+FJ87S>{`tDmmx~{v>x4F5 zVfjU&-j#xddJ>28TbgbCwtW3Pf8DfB@=bot+U1095SqAJ@)er6MzGMp?*i-hksDt2 z&*?OBOwO#Q8$H|3>)x?=^dO5H2V1&wh{(6G)Z1RL{C$iKLd#d#ezD;WOVE#D<} ze{UlxxKU_v=nOv&_jf-`8<~G8Cl|U-{0)=uVmu?bEOPhvGu8>NIO_bnzbk3od#i7@ zaW;y-b%HC8OF0C4-?n&|(1g$=KYuj!SL=Jp5B|)qv!4`N_j8M<2rUYIP|=No$3JED z_x^>YD}HI|I-zg9ez2c^-5ZvU5IW;ciyci0f4E4*V8=neaIgQqxpC~aemOP>Z9LrKm18VTo@8n1FiTgp-Ae45sZ z&pp4p^Xu+ByL+B@&+)09rT*j`O1TDg=ias4@x2YU{xnToZs!&KeQ!Nq{I_wbS>`>7 zr?kJlk38^~W3DlE_}|XImj7DqS9kt_et#SxwEhB%8!xo9S7=G-lS1n*w({{`vNUyx zr5CNVbj_ufzId6X?_O!?tS?)7tI%_=5xL;Kud>+1``8oqoZz!U-x9jRla@b1=y5{l z3+)nmuFz|Q-YxV=p)U%3SLpB`Tfc`2og(yfp}j&~e5w0oAL@yZ+WFxnxxZa)pMxq* zNuTd%Eqy0Xh+Uxf+Y@|y_jkF<;$Q2#c(#<*Uu@T9y+X@EcleU!pDgqSp&NuAcZrp+ z5c;&x1izv)>)kG)YlPNaYWeepULkbEWtP9C^hvRwb+z5kSS$3w>nz@=@cge^zLS4Y zv?PAl3H7e6p3fDE-zag`4YKDa8aI=kKG^DSE?qgq>O1OfW3i)G2p;x7mVb@llee|_ z#X3u`8fxjG+gn=P(bA1VYxTR;yV~dX$ArG<=pL3ocsEOD34Kxcj;3nxi^5+kbiL3S zyIX&!3tcJH`O|c@lCM*EgWy`_8$NMAzrWXSCOuB{HkUSveyh;(B%7b3%WCjf3jYS7 z4+?!+=&M3K@mH&S<%bUS%y@oR=+O^b+$(go&{u`lm#w^2Xi4a^LU;eZmCqNtQs|RH z>mIT4DME`v%R-kuX65e+KKfCM9luxbYN4+RtyR7qPO#6*!#9%_MQ?NIyQ1%CebVOV z=!=4LHK>+5>}cIY>#tV%uGrtMlZPL$dGrd=+gv()g!mPDg`&d`wDKJejnl4!EPhp} zldr6|{FS3D9d?MNwaWMIYjw7N4nUtBK<@l#y~GCV-_exdtAwr-y5e=K=jd>S9e=#= z=L_vsdb*rDEVT3Ne~WJTxbdMRzQeWT2^GIC-;8@~`A*+Vx=!>qm(IV}`ge4NU`L-8JbaDS+g#dlpVco4b#}UZ zs~@s@YlN1Ct`)jY=rckqLe~r3AatWp?_uk&PUtY9dkd`>dbH37g+8X}427M%SNK;6 z)%Lo4S4^_sHyAc~^XQZ*R&R4@X{yzCbk;PB9c`U%ahK3%W?Q^b;bkAQd?$Z!ro}no zJGn03ao-u~&!1~=|G$IQNgOV&I*HHmdlhzZpDuQ~e7Spf@XNRAK1DvF4t~f|r=NV(;`u_Iy({Ok_Yd{Uw?b%1=z~I^ z75c8w-95WsI$mg_&@Q1Xgx(;uEc98S8-)(v%KAwOy;W%I)|S6=u%)jGUM1AwS%a*+ zL+H6eQ)1`JS9!yp%NYKqrQ_eS^s2vG+N!YQ*Q8shf9T&NU!fgBo&PHYUnA6$xSV_- z+A8|4yqY$8c6~Q^D@zB$PR~)N@95_8ot~z({AfLmwVjqb?DSkcytTJ2cl~~rKK+qR zW2finMf+I&4rOXBe7|HXVE)NVz*Y=KdbNtg$FOG9Ek7>fOU~`ObG(VeZ2fF0b?1sTb$@@_@wXIzPv(enGf(s6?Kvvj3UXYc5`{jJ>L(c-sqpzudpniyf}I+ved zXXogKk667%v0rzP#ie~LO&x6M2BDtl4->z|y{vrY9+o=4m)4K*=Z`_U!w8-**2;&} zknen`mHQvLt)jE*0P-h}w)Xyy#jDtVbb$P?Ki=AJTgBF}CJ$i0{XA>$AA+ypBg#I0 z!lvVm>PD~sUAxKuW`0vXy6Jj}#umN)f5qbcm6bO6}uHR>{ki@$r^I)uNK}gfc>yLZTZFvt>wq@Pp_d@tigA7wdkrE zc58*dUg(1d?&!~Rj=r^j96SDq1FG|9)Zjb2&81zN>E~Rfw@P81-;*MLQE1%=TaH78 zYW=Pn{FRD-x5CwZU5=g09y3Ol`l=$ZlS zUKIJT3v7Nfgbw8Q-<9|NoBr>vVfUiq54+Ho<2a!%&JMv>2z^q?o!$pUH!A-lRQon6 zoIHM*-~MZlvDD!$rRz7-e(hqZn|6jx97W*H6gfmg$`3jem|AW?B`+daUjcpe1 zD0t1S7W*IXhIhsHEZ$w@1y%k>U$^p)i2T{7E#6D;>5DCP_458BX-2N7CE%6*S$Ks)aPgBnwx2XDhsY>bvl$#e0bT)u&nP`tx%~ zSnSI4$x#-&=d$mr@|~*WKUU9Cdmb9M|ESW>o^9oBd~8(pkw3-Cx0iT_sQTGyvX$3~ zJfrI4gp`%L^6hb?#jbn{r^f9+qw;%2Jy$-_X!TwFKds7}9bx6Jy>3(bUsKP?Q+lkv z>mMhoco!=Cp7J;RIBV~oTmN{t#qK$KFD2h!;W{-QFIN5a8ify4_5XtEFQ0kJ=I_S) z_YShy?F&4s;+vrSO;b3#(%QTE?bxLjyZPWmg?CluIZer%l>cKtVg0%O@ro)>v+A#H z3csfGHy&&Kx%N0y>Gvpnxaz;(RO2C~;$1Y=`gi^P^QwNjmHwATT75Tuk5c(fSLMI- zJge{SXICo!zgO+|zAEoFs(;J5$*4ywO+G~FU;k^%v*TX>i|1J590phr50C}yrDhJ#0 zjjp$}QK-{DS7FEBT)O5zwAcA;*i3&TMt(5ucFhOmXT9??YSVGe5_xd|JzXz%Z=t@n zU$5+MpJwL^x4yYg;Zqyp^ZUa}{s|>-R``$;ti4;Gja7Jp!ao{k_1${<>k}+?&kxrt zoK*JH6`rH;&C33Eg&$YtTcGTJqT>6h(m!44Kc)2VQThE!**~N7Ta>@&l>B*R|A6xU zvXcKn*?(W@Kd$hP6+TnN^OTamrt&*W>Hk{k|3m4&tm1oK=`U0MUQ+V2mHdke|5@q3 zukzn^y6tanJnW?K#me7qO8%;fe_thkUC9qt^1mzj6)L~06+T?qzoYEGsq}AF_$Xz+ zTFLKI_;po(p6tiC@p^*t_Yb8%MClJzcqfIYD}N8Ecz&SplM275@*l4J&sF{h9TT5# zo>KmPqwpTe-$xWaK;e3Y7pnZXQ~4jI;y+B;k5zb)^4G5L?^XQk70xRCom4zamHcdl zk5ch`SlRET@O}!vrs6qI`M*TruPA(-!Z#^=yTW>ZXZ5#^_1D90fvop?c0b7W54XRf z<;SS!f4x7nM*N$1TIQdYpQE1N^?uUF)bqEN|5)u8=>4ZhRs351Ewx{!isrtulL`yT<>pax!!Nka=o9S<$8ZX%k_Sq zmh1gJE!X>fTCVs1v|R58YPsGY)N;LFsO5V9P|NjxqL%CZMJ?C+jashvAGKWXM{2p= zpVV@_U#aDK|5D5Kev6jt{Y@>``<+^@_dm5<@84*--XGO+yC{x?YBTYtwNaH-KFG z`%iJMMt-Fl{Qoq+TJ~#e$P;yf%|cu;XtjUGo9?+0uNsRDVN_I7i6+cys;D-$MO!mHtf! z+Vz_|-?5#-uc-4MTPgX?3g4#mpHp~SrT+^hzeM37O8-iQFID;%D*1GUzpnHjRrqqH zzfj@pm42s^Kc(bfQ20Yi|1Kr}ijtqL@OeuALWM6@_#5iH)#XZlrNUoP_^S$Et?+dU ze?#FL6~0N~n-#uA;oB9yL*WM${+_}QEBt+hf1vQ=3javqClvmf!oOAcd4+$k@XHFn zrtses{)fVEEBuba?-cjM56y8PQ-4xzK;k^{zPvHX;K2YI<6+T4a!xTPT z;Ug42Th+(0N`Ab;lNFw-@QDh~R`?`^Pf_?Zh0_YRDBP~_VuiB`pQUi0!pjx@l)|4= z_#B1LQ}|+qzpC)n3V&VU>lFTm!Z#{>i^8`l{HAK}+m-x2h0j;|_bGh8!kr*Y;YjvDSb8a_irnuhse*A3H!ie^ck}cfKO-U*|t=mX&WO^>L!|KScdLb56nP zyYpmPuKgdU{C{~+{Cwsu>U^~>?{N>={M_#ywERA0ujBdZ53IdA&#L2lPMudjP}P^t zPupwx4ywL(y3ywEeqS<>y>4Hve|XZ?-@!Hduh!p1#iQfZ`At>rrTuC9M^*i6xz1m= zkM=(h{!i_7e5ZcLwvRjCyZSzh-S2yJJlbAkt*`M2)gK<;!u(!V{Z;$dSjYG1ZnppI zFa76r3)x(+fU<%r&@h?-bUxIvF^V*9*woV&R@&_Q+w@C z=eOqo<5S!3r}TGG=RtJ5I={!auzvR#!2dg{|Lm*u^FOxj>3-ieQS}c!Kb)rTKTX!& z{XXH&A6V?>b6sAIb^Yo3(E2(ajpsjP^LO_n?XOG8=cw}Tq{^f7|JrCfJ`a@f`BOE& z?xE~;e5a}W4p92_s{eE-{cS#P%jbR%rsLD~*{AFeQ~4dGu(qG5Ta^Eol>R)W|8a%?r1U$LzpTQ23V%xB&nbMK!mp|PE>`kW zReWzL{kIjqT-kqB;p-Ism$Lta%I`*{e~ZF{#>D$`v$8*2wf`N;{yv4jr*NI}|EQ9; zsr+_S`ae?oKUMe_3h%7!&s6?@tMqqM`g<$Cz_zmZCQxWY#$e5}GJ zsQf;w{7+Q+Q8c1Ki^jR-%6{~s#(!K#1$Qt6+r z+W!eU{P{6<@Q`&nWzJWq+26uS4noPQ~{d72hE$|L2wb zFeN`+;l(Py9)xn ze?j5%6h2?!3l+Xt;Y$?0RN>1NzEa_@DEw80uU7c$3SX!2Hx#~J;TsjcN#UCnzD42N z6uw>II~2Z4;d>OmPvQF&en8>xDg3a)-&goig@2&%;|l*s;U^USvBE!9_-6_~rSLBl z{*}VNR`|CHKd12X3jbc=7ZiR;;g=PDMd3dy{1=5^Q}}g--&FW-3jaglw-tUz;rA4N zU*WCP`G`RZ4^enqg|}09dxdvYcqfHFr0^~Ze^}w&6y8JOy%gR@;e8d}PvHX;K2YI< z6&|VZAqpR+@Zk!NQFxrfM<{%h!V?reR^j6nK0)D$3Qtyes>0J1o~iJO3eQ$}uEHlN z+@$aVg%>LP8MS^aDtwN@UsU*fg)dV05``~Q_)3MZQuu0xuT}UP3g4jcO$vWo;oB5m zt?*q6->dNb3O}gu!wNs5@DCJTtMC&F|3u-RDg3m;zf$-&3O}cCMd23|{-eULDEz9z zuPOY7!hchEqr&ef{4a&KQoqk0tnju94^?|mPf_#N zX$qgA@FIoN3b!bnQFxw;e}Td$D}0*5pHMihaI3=Y3ZJQPx57Dv3kok$c)7x#R`_g% zKd{dv*_TYHtew)PU=*xE~Soh)wcl|P4^>+;#8 zv*0ZwE#;b2%tHIH>xGhv%aIv9bjnwAZDif}+_;^W9F3fmJd+b1(8NoFz0&ZZUTLqv zUV^`6S-zvrD;|!{w(wqrw;g(W5B4fM5A~ApQ@f%AO(09|jh;zI5B5^m5AiDB-R_~&oKR1VnQD=#GGA}6CxrW}7A>Q(L_-_wSA z#m~b#1)J@$hbEw<;|6=le=&-W!OsM)lhoHgw)4sdZ0D60QfK^Kn`Aw@pRMzf4-&(C z+JNLOAVDkCVe;efz^NOl184@FtHu9otJ1MzB2XlFWT@i>J+=m*D06rKM{LU znN*z0HF=cY!Pmz)y$UWGKE8{_=33(XGcoQ$onOK=ailKC&xh)~@-*aE(?7sPbNw~0 zub^!25zD*Sn;7w1ypWiPIkhwGHoeWrE(oUk$cAPRrvkN z5HHn$-iPQ1U!q@`*sdWSa2dNYvZT@dD!NyazKlJ2CP%|JWkgt@z6G2a{D?j$#v>;_}`lR1`+o-bap@odBwEz_sG|bIr>uZajxe=NnRs< zNgn)EiLtgPv39{TeP<7BzePD#kj|se|BX8TGCI)GTa-#UisBJFZF54l_0*JK*m-wC|bNEoLlr(O(v$ zLn@LI2QjDAV|y_8`-~GqNtLD8EhBxBb}`9ZFNczfdoo`4A{|TLg(l6|q>VhrT=8$T z6{+|Z`0pgHlhDK~)ZKdG1(*1Hx2b9PG4ksfKj@ZU8|0O4rmuXPvVWSoIs~8h(~h4( zFSEUud=oz}qx(<3p2v0h5487R2YKb!xqfw!SA-Vf7uQpVChs@MXBGALC+gAIA}{Sv z`HbvUc*u)?8RRA3rcJo^&Zi!s<;%$T9LCm-r2j?lJ?gEK`aILr*S22K&>kqfq~Vh) z_Yh+T_zCI)d6H|doAxDD;8pIXJn+l#Q`6{E$6)qgeeyEpxpM23x?o4^V$((&6 zJR@7o`1%+1I0*d>r?L>8cL#YX@d_>EwqQR*@c)-rvG76IStuh>XA50x6+5VrmR1r4$0r!o!HS${Dim-|NHQNh%Wjm zQqt59RErpK+?Nu5C ze^>OmUl+IK-t;SC7!Dpme0S4Fxh^IsV}brKf_Ax;wmJwuY1-icd>=@^AtlgD)=@v$ zlnS&Leo7z4cY-;oK>dxRz3ySo_HBqgPaW(+UVWy{$iw)&m;83a?pb^pTXDS~*e5qdIg_eFxex%eA#-c~L$iIRt@f>_&OrW1S5Z(dUk1%ye`M@Qv z%Z$g;8|b`AEblV^yt9>8BzasHnY+u(rRC$1e-zyVsiQAY26W3C(RrKs44T+5h;x?h{b&1g?*V9)dqo0^KBfNy9hylONO9AEoZ#mys6@pOoM}R5a_eCusZk7}s1^ zZliyaDz`#!fs#^Od#B?6O#00m^tU~T;|$h&cOfGcf66_R`84?`?KX`(+RSyH-kwfQiYWGHkg$77CdON2;bmai1Sip&=RRaO5BR?&%uKhFQzZB zelMGKK@NN_dhjcx#BJ!1N~8)Y@f|R!M5>Syw}VL~QiYUQ4JMUH6;k33=-G8%@-oWC zy{z28T5x;nj#S=-zB!0-Gn6&~CwG9yIzQD;9qfZ0v~m_>^CS5AAKGL``q>Y+^NNG< zH)g1p_&IhN+WBd0-(d`3w9Te>{B15P566@i5zwQ1+K}n#NV&?CUWn= zKGj7&*cbQ3ZZZCzBEA&;@@DjYK|gp88Tos}Q9@QZA6sH6nRwwPcY=q!MBe3HxAjV3 zkNWm5M`jY&N%TD8N<2lLhtr;i;e-5=q~g2ye;nRH`1=#(WxZ84Yc5jiX5#(>_sMTV zS8d07l-OGEH5odQe5NqxeU3W3lX%UVWdqkIh2C= zoeQSK8(r`sd^Lr%jWjax?KJ>2vgj(th~cpX;HNi*-|F z2)u3JZA;n%eXbKf#sBVHpR~P~sN))0GD|xkFOpK=GSu6X>mK;fBFWo}*bbq+p~=D2 z-;In5_?02_!{bQs%g2xo#Qrw)D#V;)Ozn^Uexy6M@rrj*AJEbrT*FW8LR|aOe&8~= zh+dhL>Y@I@EJ(a0De+5u?h8I18FO*!0>&SybTIbyv?D3Wb?SWT`Z#=mD=YB9bp6T{J+n-_#dV(6XRXf-2>$7kw4d|KT#H=^9J@? z5yu&UZ_IPawIZJ^BXiYAY@SWEnwJl}@59schj zpTW?-vlhIHc-|z2t;u69I))k__Y%+jlo$U=Y?AM8>lKO3BaY+{{BBELvndn4i-RcN z8e(`AdtykwMY*vrZ$o_8mcGe&Fl8Bv%p}TOA@9n^u*YZd@}XYIlnXx<6AO05cbKQ{ zgLggUC-yRVCMipqd_D3gn)n~2oamP*fAKHWmx+)3%E%MMQ#R!%Kkq%p?$+?RE}62E zj|cYfQ8aN7x3@k1O@f!A%pN*r^7BkAro2#ZBe9rr6H^jeM88b($R|NvRc2BC8z?(* zd)Sm%b0mk-2V0mQUaRwxpCO%!&Fgin1JL2VQ>K3u>1Rn&@epi&Mw!hTgul02=5OyN zHqsW1q0&0W60%e)bwS@xfW5tmrH-m4+bs6dzx(7OY z;*XRdCDBbVmlln#kq_fK0X-2PCvMN)0A>0RG0!5FZpN*-X55#)!#!$ebm5mt-hSAd zYix_?B$1Wzon*{b64dh@+cA&8+m&|MivB~Llpey*+uWO=DN{$ou%&Lwq#`zneMsv` zucP-7(#zyMp1RwYeE&)QTW!yMma?E%-kUtfVMi((IeMO<$dcyz2`%@+0<=(R&5kA+%i?Tli&Stbh~vEFnvfcbOQ=#s;0#19e{UN#<16&q>zNWm1ys zGX2(yJ#%VmH_8jIG=%wa8`9DELqCab*(CImq@qd2eiU(B%KD~(b~V?G zyE3sQD)@yaNk#ZcGag@|p13a0M9-`#J_esuB&B{&y=)-;0b8yU@1lPXbLwo;K7&}- zGdGW7e%zUK0=z5fL-ouzozP=QU!f0;g`eR1c62|5&7ojY;&Re{$gjc{{Yn;k3v*+E zYka2QCv(Ubb4^Md2b~C=0B@NU67Ga=`>`gZ%H??s1HCV9sq z-yb=#cn2Zx1JB}mH+Y}sx&gYJJT8FuaT56?FC;DCn)*m0D{)=qlxgmfly>bJZn z>1h02j-DwydS&Y0y9*tBC2u8Nita7&8npT!>A6!l)D?|2=^zQ#4Ol8Gq|Z#MEH@PlrVx-8<)>p@PuCE`d8C*1~* zl%ijkh_8Zug1SmhCcjV7|L>vye~WQ)7AXtn{*!uyv2y{}cXRy>#?BYP=Oh0DlvQmTKejib*8}}7ybICAw})-%d+;72LCf9nu7Hw~q#`MGCpx6! zm$)XbbOEVN~8p~De69X9`dhneK&mCvIMO_i>6JC4C-Bk zo=LQ8`CKsNE`vSfNql?oi_}Nam;d2K8bHa`@jYGq+&1B)YWog zxF5=Og*r*mKPuo9u@=dzh<)-hc!poXH+5aS6dvtZgzu4xrcDi>ROY%uA4*X-DMP8B z)HjjSR*5^2ky7_@O}iu>;F@-;KuacZoq{H5yCn5kHs$5oqbx;}@KG`KZ`y%2Nq!zV zea$dP4`ib``DA#59#ZPl>=rR)ht&ClQzE>i7v~Tfhc$agHe~)@jnneAl zu0`kTM}`PdVM5w4bS@;l;lyjCG0BqVo#Y{3`VA z)C=(cjLxgjzrcg0OnQ@RQi+r>*Dt~|^4H*PfM?R{@J!-5wGsRhvRAl%muqkdn(QX8 zDaF>k`FJb6=$hO1Z@4+vS z-a&5CKafF7@G4waC|e1?r3x~9mq-;;ZtAOoj|6@zMuuL6x~L2#PW)Gl-#?&F{w3G_k!8ZxFt=rEEipb1;-t0w=%~4{YKmrRu5I&D{aNKkr|)HKXxgjWBj30A*IkMnHaE7{grq~B~rrF zkExgEp{BgVUHT*Zmx=u?DA(SZtmFPbJMBBfOMZ(rAN5(Ly(-jQ3R!AmOwm^`W5n@*ez8gFhYW!6$~wAn-Scl~fr_qR)Ca zAt$aPzRRzmw>8(aL#2qHZOC&gbWGVOV+y+z*9pp4Ar&cKiLxfpt6-lpb&P(Qyvq1Z znM7SB&`VHe5C0{~o%%fOMM{Aa=L}{oLcCcpbzS*Awm-u+{mOe9{dMSrlh4BYE&A{) zyTjiD`4L<%M4voTyOB)4K&O}`(Vr`(PyUW;`bqJN4l1hxP#KHI@&m{diaV|d3GCK6X$rD*F4?Ow#b^gQ;A@kA#!#GGg%&w12M3vocpX?!;mn@OiIMo7hT zprq0TT$}O1xbf&qi5@ViLP}f&??QCWg;JLC0(c)sPD(CB2U>!9CsPlk zQ#tT?T$2)u&{=`b`N&Br;!mCm51N9Xz-I|u!e@zbP&yG^>Z^>8(hPJ-rO&}b&x7a9 zB2jwo(@u>X|-_ z?-X_w(_gqwo(m?g3hk7nUCPvX$@Dq=CW$FQzDev;v_p}YJ!pwG_FB=wPuaBJCy|jV zq~xcNle|x3Ln@OJpFvKlkdmK8PV&x1PAZcUjNKwBLEU=H2SxHMUdG=36U_UZ0ZF|u zgl8t+QT&1H7rA~3+3(p;d6xYkWU1$%zZ=3nGWrKVN!|!3$vY5AO5rQP7_0Vg{mwJ| zzvr}U7fZb-ru%rty_T-s!Sd@HEZx1%(hiZY5V}g}?*C)uYXz?tT6drIS1;6CFZl@W zaB|6ih2T{}*9u+l^fp@ix;2&_E&dwCewomEko3Vp>_9*|K}{N z7d%5~htL&5R|#D!biL5J?~1+98A9uxwEPaiD}=5Rx>o3Vp>+>f{n27qFL;K~4xuZA zt`d5(=&u!A6ue%r_ZNvn%9#|rO7zwVt$R?)A@nNI-zf6LkF9)$(45e#gqDS_7dq@G zRzD~G>S)0;#D7Zg3ZbioJ|oooskLA0+DCAQ*sl<}N@%0VmkBL7d!ZYI=A=LEzE1p$ z{YJ@Wz2LgcQ zKeO@)7w$TvEcPW>mHVTh0YM#A#|PiSs{3p(2c@hD>(6UsVAZ9 zg?(;l+YDIR||bcsQ0wh zuNT@VbeYhS(6vIJk$g7@E=xQWq28m`-|oM#G%2)0=t`k$gjS^gR0Jo)zOEwn4*$~P z(Lz(gFA65;nxqf{iiH=mB`l#-6%BiE9-xT(45e#gdQ#NRK$<>nAP9?6-yh1 zt`J%ly3t|rGx|?ff4$&@_(=*)2_5!~)jL{fO6UrqtA#!z)cdv7FN%G=;6|a#gqDP^ z6}my_?!U42Nuee2Qx@7G{FOr22(5_R`+?*y{kKEPSr%Lp?7e37o)Nr3#>dg`iM`OI z=oN*Qg?bw#PN7Ai3CTYxH09zES`u0oS`q5~(E3XVO$tp3Eeh?B_FpUUm4sh*RO0Yn zxBe=^_Z}DjLa%cDT5w8eQD{kMS!h!H6@?D_v-P)D{A?6j|9i_nS?CI(YlNK!d~*uNwnp(UZ~g^qsT%9jZ(3$63)IBXPpmC%Y%Z>_cK zkbDw?lR{HM%Tf>ZTUmeWx3;t>@{-dNS`q5~$ofwRO$tp3Eec)vlGQ5<-5_*^)O%5A zN%Si+4(fg@cEV5m(PHlnODn?n{@3D0kr#!I7WILiZ(gANKoS zd-j;-zRs@J&Q@OuZ%00pZe3L9P3L>PuHNq4XwR}TJ-zwm-ZEdYv!}DS zx=BMzwyTvtBX9L04qI^Bn-Pz`6WlGzNp>Rj`AgHCy^HdFJ-waXnMEe2MXlMMjOSDr zXO=H&%@lg`eJ#D&yhM@dH4(Qg?#fEe&7D21-E!TN?d@z^Ud5#ZiE&G|r#G{#cTrnk zPfKrSw#T|{uO_KcGF9+QZ>DF7l-64G^%N}ALVWuXH)s2LT4Rb;TELn_1uname6~<% zNq2RP5g(ltB;S+nIy~Ln*>EDY(9qPI@9b&!VuJcn^Oxr`BYlPHl3AIa>Vl@uPiCr1 zrY_56^SznY*_qysY-^#q(t@6rYDJDcxXzq(ccx)xVNzGRXK@wD zJVu}~>`|_LvnlD`bk*YfQuDtm9_Oc32k@0=qznB8nWg=GEX{ZJW~xP0Kgx8mku~~Q zSP@1m9#;LRP+Fz0g~FPx8LCw4l8wE2+l1A!4un;54rDbm4mA9Hdl^W_G-S?dh;`^_ zclN5Q%*(V-%(q8|NlUJ;VJ7okXSypk#tc7~&$eU=g}FI1J1HCLHnVKfa%R^c1Y^>g z^{43=FIzAf#Pyh@TY9^u_N1G;7*YLWHNLWbzM=5631`IpTDi>HhX=BBZ??O$rJ;UQ zPj+%Pw|r#7tZd6-Z(y|rJzYjI2&R_B%%0vO#}BNwfPglsM;$cG$@b3dnUP87!s=Z!)ULiJJ+0TUEW_lIoq8}=QFNg4JdMhGP7HGi;W-tNwH zXU_7ir4kx^PG7n!$j&hqElKCQ{CS%WQ9Z+%rmytR&}RoX3S(U}WM4Jj+gvpTqQH~f zi&{F;{C9Ld&F!duR8uc2fsuY!4CF+>>y9u?$U zhKwV}#~DD z>MrEcJtG@fiY_Q*@)Pr!9u^aQJ&WgOr=|P4dIQ7m^x{kts*}6Yg+jn>&StyD5`Vx5 z95$y5L3>x3{_S`k*)TEE#({0EU>eMr7!%~>4>DI00~U7ncFZ#?D97xxca1pgr)BR+ zOPd3;`cX@pC-t?BY+y|u_K{p41@pQ{seat^0BcJKY&@)4Z|Aa}u?rh=F(%zi{>-H>Tm78`?wuQAyz&1mH8$wUO zs2|l~@W_Td5IlV(}vBK7r!S;fxYVFGP#H%k<&r7K&|P1ZiEv(P)TA=ekV;W4x3{SvxViInXaG#tMrYTJ-vEvsiI}>3Pvr~ z(^w#?eCK3)re}ll^b=2A)|*cU;^}i|PdvGC-rULIO|Ui7+}A#tnc9DB4m9IzRq1A) z=`qjJt{M$vW=~tT!R~`OcHm?ovs$1W<0{WFSyq^w(4)8+;PzWXwX#F50U}xNGNm_^hgs>q>W8r^?db*edw>C`me( zWBAiWa2SNp*_#a;F~>CAo9+pRq+_)7ac}B2OUJ;_pUllYCE%E*GJ6=)viU~iC=gIh zQ7rNPs`P`EYSO{sq^9L(M)O!*oo_G@5!`A zR+{nEYOjh#*OWlmq?Br-%nCM%G^X|Fym$0DF}C}OiMN&3|NMklKUGx zL6$5nGTaGUKA!IC<3X*hE1Tx=*|?jVpK10Fq!wxn=_ALhRYfc_w&rkMnAFDxUT;{T z^yJRobhs$Xn?`OhLvU_ecsr>dWt8Tdt%~``iH-Ze3#Y-zW|$`(IzWsWUv?@N(V5Nq zAL&2v2OexFCLR+C9V*;lHQkJjJhxpLn3yaIvBi0sedQ&Y+1b{=|v6@g# zmA*Ig{A44F``u)?zVm7tItPl(Gr%Ih=>z|LEDFrt2OU=Sq}>csKdP(Ee*>TvCBkit zK1B4U+uJj(QYSHqXfNo=)zojusk-cH>&dpVo!ixE9$JD>&C^GC_JuNRxG){v2{keHTSfKh*ZJo>fe3)4BnXqcu+v`dDyIX;+b2c|zXTX}#*Pdxi zw}+PSrr{~BH7~=>cu8iWy)^_bnRacUWM=zIng&WcpW$4IVv8A4BO7|ylQRATAGVs> z!!k0j&W?{3XEQBb2xjtz*3KpK%$ul4ZM0@udBw(fW8R;f&$Nc~zS)6n>B`T^n%z?A zl?8trflV~mU_4C`VrzR}I*+G--IH0GZ9bF5XOxr9=hM-fz5k5qH$+5hS#MLiJJ%JK zwT%K~mc^zLo;PH22_M&tT35C`?8T5o%cH;qF8^VvoLvvbtO2`d3f|>Ys}oATJk;FB}}qi*`+}pIjO1R{<3D@ zvZjCs`6@D-oqat!SNk+i#yDM6Fug8_Lbw4oUd<-MG;V>suyy^T*g*5&MUA>0yjRZ`$aZC=+*&qwMjvn1Wp#}pXW zcyBfr+mj>{w+|V=$<>dVoz9v2(Z~j~;+Wmp-qG7=wiRlsF@5-3qxc(8XKGhu%OWUf z*n-_M8;NsS7sTj zEK|jDDFbo|ep1+lzR%n$6R9Ahm@N zVWf+Zzx3NhW@d`4!|F%bA-XuTJe=zT^|4yrNcna*7GG(wk=8=?g^>;B4PkVh zC6;a}5?@+1r`=LFnwNPS;lD(ilwIa;)jMI8b)eZ;Vrw$CwQZgh=f+naCj7b4hf4{I z1xh@kpr|a9I$JZ7mYWIMfBWyIndZK(#gkaZbY}9l!d-M`<1BotjlOCK?^~wcO+8Ht zodo8*_-~(|mCBFZ+Q@qPWcKI6nVqacr-i;|_QhIy`*Xr@y1DsrKE)h2P_BX!o7h~_ z*Ql#Wk#|4L$5M%L!v#I8%={xeuExwl%@lfOk7?PUy#AI5%@>^lqOSZUZ=l^z5?j>9 zq-L^ZM`$U_(ZJk)0GN_p8fG79$HshSp*i;wXxAv(d}=7rsbb%hZ<*WE72c5oH|Ex8 zR?wyv0tbQA)lVRCjHcLAct8CnvlyeG?0JNvIMDJpdR(TyYRrEVuX>`zF?kA4-7m=` z+hQL>0uK?M(k6d-VzHA&U}A=#|BkW2EbdxjZyQ4+-|?(;KJs8?gk~!?&6^7IPNivS zCKpa{p{cw9niyH2hQb`Lxp=mtwlI%RP=Rwl?pPN!!zwe;zG?~z;xpYL8tLOTW+u9} znwxy%d90rzBWY8{v~7@av?3^sIX$H7!tOo!MPw?@@YZ-!)(d(H{pvDW(^~EaKa0(S zOuiu-u79F&u^(riS7Wspm75!85E7dr`QFK9w&-R(6^;z{jH__lTgCY#3bJLH%FBnTV}rfSP2|XH%fODZOw+;g=o>$|5NLN6 zrn~#3dFP+)>-GDaS{IqUVKc><^GETSG>CGnem)CrIPDoXiiYUVd1Hfk`ia6jade|8 z_J9->_>*4Xtv$B))zHrT6zl7b!OOw;3w9+4gUDsMPnZ<~PcG>$GlDXC^Lix6a{A=( z(r)GixU=BTCR5D8YPBDoD8bVqg};zH@|b)u^8U@%szR1 z6T|gRs~M@}u1?~zPw7lyU%Dl>h1cGdZKn60#htG?&C932mL74E zIYMLKw@l)FNpw-@4q3&Hd)ZbCJTUgvGBGye@s2#a`PQg0f9Xy`-(XcTUs9!tACXUVjWUE|6CB9Y~*;K6yTG;0lateu?46 zdR29PrDN81n^xj(-^upbW;^ZkkIQY^r`7S-mBH*%rBY=+h_8ql`nuTcx%GATbw%s2 zYI)<+NR|j-PajAT@)RMG&tw^`yvNTqEb6bTl;vi7-^^)L7Bl= z^XymDtLX!glTB5tfvp5HIOoUDqE#s*iuM&zOw|sYdD(1l|NE!u%n^w{M}!k0tDfnF zrk-@J(2)&q_Mtz2-5&HD#aF(}UP60;anl!$l5TR(6IbBEF_f)iPh#C4_I}4T@7$)- zI?=Ox)MI$YEIPF~BeNV018Hxu^@e8T$)ajw_>C92|5oV$_Q+mz!>fwYH15>>@1C(h zR4v40VI!Hv++yBecG)6?g(7@6$7XY;HiBwyZ)v3Ft$x6asBSj9t(c^MY9C6xZo1 z^xxa7;))wn%vUSR>sp(GrdHd`0jZ__Lqm|i+?@kVo5)I)y9oQwvCTPAo)c&rulAP| zuI3Dfz1Zl>;)1_r+kZDP%!>PdEFa^9g`j!k&MX?)US~yWys-@RU(p9~7*}Q=fX3|X z4cAA7j&y6-S=#fNV$QDD6Lj%5YWRH~^>g&$g)(oO+ zZ!uo_zeTq*;rz~?<^F^c8{n9 zS!Md+R$cA1XElfZ7La;=sG^t8Ea?oN*{Wn2%y@dqRmGXvUm7^eOivfnTEBI76@O-w z&+F^)AJeB#u4bXvC_TJdRqs_JTUgO~t!gt=%P>BlSE(UcKh<0~R4JIhu9+1dN>$WM zKeeT%^22ddHS}r=!dee+MC>2Hb3Kh&xLWRE=QZ2iv8TSO2AoPXn+}`ysyDh=U`(GI z*(c%m6P=Max@G~wf#j*PXU&{FbN;4X%Zkg)3)T9Ht_>cXc^hcfXq#){Pddxu7U47z ztwK6Obj+JuHwWih(mYf~YsfrJ&&%}kL>HOJxRE(Uxh1N(MvKi3P^4zG*qk}rgxH=x zGY3pL<4Ot5Dl}|EpJjx3&sQ<)-nd5pa9NMbrolA!lQ&s1?o&Z%&FwDofK@-r%E&pobMjxC9C~kuB<0c# zSRDXnXVd>3Gsk~Txp>Tqoha#N9DAK%E7t$nt*h6524?0CO5HEF=&GK{&cD{ypm(+b=& z)#{kfzNGWZn>g>)(lI|ey|6epw<}vd^B`X3oo{p-E;gP*K|>+e6I~-zL)W{2vK4ne9OC7=~~xHK;;vF>3qK$FuxbuOl0H#?mjPefcKd z(U`I5Z>U!7*>2a|tYWGhU&yd;mFGNt{Jnb^5}yU}K@dMJoXfQEe!4J|72L>%e$Ub| zsX8PWH)WTOXL#Nfnima02BtXX))GEn(cLHdQ+J?a9{D)UG$-36xdoDH&u_7tU!V}& z!}>kp1uFh`A111;oo>_d{NC@MVPZH&Gq?TIOhra5Dv@HDlf?ds!$8K55}TVj1RU?_ z{hPqQdxkF~Xb97h{Ep*V$sF8?N8lTc5Axaqqj8%yGQZCX7a2j7@uH2-2c4SjZtjfy zLdKp#Z!+Vq8@g`-?R*T7w)6nAzipjl98y#7S=%?rW>j1ipe%rD&MxcLV>dO zdk}~W0Q&?U4bu0+?vSxECtd;>3l+J41uP=88Hj+zRBIE9ixzv@GSD+h+^_oGt!(bv zD;cr2h#&9a!PsmS^ykxCI9+N!=U~sO2YLGA(%v2e9t~qQ8dSU3ol^fZB6a~1yW^Q# zxET2=Q*+tK`&iS|=66-I)5{mcKim;}zEuM_@(8PXLquZF#`r_B+OMY~nrh8P{pAbu zvphMomRQd3&|)VJBX<6H=`T0MkF3<`%0UI%LfI!@|Lv_78e1#&oojKse?-`SHPBxK zC);8lggGt7S@MbT)1Q&Z=?CGnraY<7&(6v$$#lgZ!op1iR_>9`9P*<}+OELC{H#1V z1x1%!V&4#mwXumw&4$j#>>=nMv`0$gS5=Tv+-ZDOq<0>oD-h!_(lRlBVY8TF5v_W* zmD)45t3+2UVg1T1No{F_el3P8J=354Ug{sO z4cxlQZS9QQ`D?n1E$7rj?ec;ONk8>gEs)$Zsx@9z6h3U44nhO@MTu?On3fZhHuJtP zC}ONMen#`NzG6%xY+U0gz9STN3jeK?$~Lt0oi}d6oO#xNi>y4vy4uj$hZRc8v8r9NL|^R9usPBbZ5wMyQ7Ot$7~LnSXr*~SZxj2Q{V-&{CXmOMH#fIdMNN>0Gbb zPl=sY(4L}7s>Zac+6|=w{5i%y85qxmHM(u^=~;eg%R$eK6fV;DYU)G^&4-a<=KfBH zJL{=7u{Wt(^O0+lR{nqq!fDM`FVlbus#;CY2~WJoE6zts-~Tm4>@$l#C*JWxRyAw0 z&IrQvRSl<_X5@GN=J=*r^u_1B$o*e_4i-3Ox6!Ga{r&i=BPuczeN$gc_(_34XwI&g z*MHF`wLpkdV>yvbrZW|oL#gV!L{U|)gUH`K9 z3Y4!bBtDgJuLbPaIgSl5cWT!24)$|tk0XZaCaOZ>v?IohJ;QmlrShM^CHur@&XBKU zL~k(teAkcqzbM?QO%*Lvl@hU!6LyN&83bD=>?O6%=PmC{^LkDlWalmt%GADpTxL+v zdCfSCxeX-ly;4ldhG052eEi+&c(GK;r9}R0KGCdt`oH&a13|xnsak5SRK|8_XX1*Bv#~)Gt10ay}myxTtdI zS3dR`FSgIrODWN0pSLCYtI<$5T;#H&>#r|(x7^qn`8}xr*+8bMWtnjPWWCFe5~gGd zv|O&Qne#*)=F4)CnhNEt-TXT?-%$(XJ?z`yfVYkOc$bgT#h(|ExCf%>eMF4n?{b9M zr_S98+b@th@gky$t!MHjHuJNP=nE>6J$jOM9J>hGEJjkcB$1o+gR^l|@W9eiC88{c&6p?BEJovR_{_lnR32n5|2V3nkcK4P1vwS2^ z>rJ9!!)2x@21@p;Ze~l+-zA#EH!uTP>ImZhnJ@-k@^HV;CCsO=!&O(_>=c{#nu=e@CHm}(q)<24(x2DXlQ7ox zBSSUwf;%zFH7kGehEFGlQetQgr2R_a$`H3c!(aBrRug<`V~TO?s;!@=%~=Bezg-{I zA2zF01iyQa?&egt<2%h%r|Eb8!=bBJzFM)=mjn#+NLPc?7LI0LBcEYoAmo`hwB}r( z9SDKLYCKxcOek|YyZrC4>d(HKpWm8KR=I9cKWdTBFneOr9siJT-snuJ-eH(8W2ftm zuHx31`(IYwluXU!VdiEApUYiwGG8yW-8P(^&FE>3{uaXAQTTHh)RS$uAV;%0Y2kfX z(B~WYyGoJI5BNyM(1z!5f#4&hAwI)JkFON>9I}*gOFs5z7))mIhVdcHPth;37FFe{#^Jsa4_rg~FndtB66nApr&jmB`sX7|ZFH<;}( zdUm0sv9pKOsd=XoWE!ZL1;8f6JfK_C*a{)AW+ZLOnp=4laiNc8QBUjiAedHuS)qR# zM%?@mFVsmFmiM%9+csw^!ke_|g$+jpj;IQwW`0TJ&$@wt`V`yQ0guninuAN31^##I z%?3mv-!hG^8)%q*?0;rj3k3UL#0|7fugkY`3aK$Rj{T{?Y+nY7?f%*+fNmufFno(b zxFqm#PuS&sY;JjR3;#=saTd=D?8ZjcIc5l&dth9xAEQIt^+2K&*2KuI2RoBCQKUviR%+BlP&HDA$*yi#_IFf2F>K=)m+AP=L+ zwC68y+eg=6tEnYs<4+)A<0EV7jU2oy_@DXZ1)G`3VmH1j_ffYv3AVt-jTzmVKI-TR zqua)f8QU^0Ga+--QAdwG;;17=lh5cQk34GhgtiH-Ev=)+r^mIljcLwI7}I*>gv=2~ zwvL(5G9lB(URL~OJiw;bCU4{e*#0+ykFCgP-}dO{2tCVuFe03l9AjSe7Xfx-huxr1 zFJ!6b34W}_4U|vfPvx&gh27HsT5IefseV*`X*Wm8*cprQyZw(?o4YM{QU0=G(4YMN z6;ox_ZsN9JPmIMRJQ2n)JeU7MmSX;R$2`93 zl!DjF-I|esBS*h)5PvVP{1%^KIjuJFk-&?8Oc_N zY3N9eu<;@{41Yr;$fDbK7S4kfhfnJkcSjWXtZ3M3eLb(*dR_$Phu}4 zT$!+{Vr|ZEdV>(zw49S!I@K^kwbpz#7pic)RLQ#;#^yc~{UHW_z$c!US(*5mg?ZUO zD6*(0yQn>2vP@Lo?Y9}?rp%Q}i=u=f8W1+D?L@5S%y%H{-!uxcGe>8uu-zY7ihUQv z44yC#R=zA*cQiK|ZwbS@Bc4as)SAefiDHu;n8;{XS||ySK&ffkA%!g4%wU z()?uKyy^}lWq|4+TjIqxd)v%xfm`#|Z=U?_HDH=jM{B|4jbhl^ z{3bIPtIU3Zp^WT_J%l5_cpxmm8O=VB|I+S5lU=Ha%VofWk*m}-bPK_34KOU``clgFsYJ0<_-N0pw% z&lVa3KR(w#yU?F)e&soRa#XwOZ(hw*5dT4F;N3LP9G<19qR5JtvCYn@s%=&W<~RE7 z=7-UNy}z8`Z(YP0>H~@PG`uZCplE&&YDfB_@VUq^BM-D@9t!&oG0l#y+syAjrpFj= zB_7@9_ea?*GZ*C>rn`G>5Jg&>|BEPmVtB&x#(cZ@DB+$Wu`z}rNkZ5~b^q%A+Ka{WxAuo)^xQ>2`)=pMc{+?qE z0Z+A7!ZEt|pMYFM^|B5L!d}GE#$O+rEzgiU3&ZM?$bxy1(Q2AGoxg=PZAzb6`%m=G z7DP_P`6|3$;m=;Mqsk4&3`H{|23fJ3qrJjk2eG174}$_Wqw{v2xW|aV>Vz!ZtI#j&2h_&KkS5$2%2Y)(PT~aTqR@mhy)j z6jG7M{!OUl7<00IM-F^*Xu^z5yT%H*{;l1-obJz2Lxs61I*szGfcth}C3ltR^ewFD zg2ca7`(r#X^jY?1ZN9b|@XhyR1K`>(I)?1;Df~NnW9)0?{uC6o_8C!A$Iy$p2D5gI zS_&>i|MZFQ;$QqT%vSTo!60PA;V+_vUqCkuf7KVL*uB57=g_Gb0h9dS?xlPDH~jWw zVPIk8{vL~YuRhuQ!S6t1jqSiw=ZpNkjHbRYlqwm`Un-{#8 z-D#e`3=j0!i|%FLmk*G@ug;yvS~aq0GoB--61uD8#39$YJyR!6pEz?);L;qb;45$T zlfkjbxTn~Cw3$5|xZr>M*qC=?(eFT4c@F8ffoR|RvWFSn2Hb2zyZ1d(-X8zEUPkuY zLJi6c*Elmajnd-Mqrxc4S`^h!bdsW1IL_$+OgPOyQ<7_B^vE1mGdr+{)XQ znBt;;duv|H0>(`tq7=724B80)h@mwf4J6Wg6_Y(AO&3|HqFl=bC)n>B^CVY^KIdCk zK{QX&mW}a~0>kv0r$fj@TwYjc7j?{;rH*A_p|QX$^jT2LLgQhrg~r1>3;m@k!TK`9 z-2JUedr;5xK|OZ|_3Rzg^LJ3s;6Xiy=E+Z+#e;et59*mbsOR#qp3B2}E)VOuJgn#P zu%64qdM*#^1$kJ{l(}C}yn56sqQYhy&WDEbg&tAfe*+XlhJT@LXHAN^xHF=U+#R_!nFEMuX*H{tOQeZ zl2h?k(&TLdI0rVqX7ZK!kC1?#S;@jh2yrJ7hiS_o&I1ErGKCZF0&jBBdI5^HU)x~2 zB~xb3dRDVCX1S;H!uFul4HOK>amG}NMJiX{CZ<9FknUGHM|;47iujGSl-)m(!^L4m zL4!z^){+Jv0|Aqji`VI_Tz71#l3PoN3`&Ktu-4vrgpx2#^SdnA0+kj5U~(+s9#F+!d^JQturHe)*oU4Za-MLCV@@)Xa~eQTDdS6C?r%2K}Mj?wbbZ5fC1>oJ{d z5#=R2+(X+SG54XOP_~#cUooN|x9KlMwnHQjIPtK^v3yQP zV>dWu!)xc9od>}Me&Y(pPh3crBNP`QD|1;s07GJqW)TF{ zG1!SSt&I+QgcOOwDX>(7>WTOu8fuU|1#*#Ww!dW|&GJq6?09}X$BS}77JGWxmv32g z0lc>_uFSZp_7Po^0p~uRjG{=d&p0E(tJN57kFOUhA@HhaReG_e>j>{1V!xr^&Um9& zmYs=5k1a&$fwIY1igWbf(1ojnXm1~_ukc#{Fz}gqN9o1NoAB?E!=Mao12$O3N`fah zrQ-mhFo>roKD!I&cq$l8;tj&}##KEFkEB5p0%HE|0zAz%jdE&Yq1=rToNyiUIbg~{#td~agL@rMYV9Peq)a>^OrITu-|4y6=h14l z#GNX0)|+6s^k9=qj%^YO%x@+*@)+NM&bXj>8XWmpuuKOFC9n|`54b$%7dyo3RX3as zo7Rs2QPHxum|NLT*xAITAKWGzT`Y#EL~&X4Dk9hEB|QC1ouuRpAXb9((jZ<>;I3vw zf5X5@NJt(NJH{L}2l0SlmmiM|m`Bt}HPfO9oMKB-1_=5{+yKlz^+I3(ULojAB>9r= zQhiB-d-$Rd7u0$!QB-2xlq=g&^hk_!le$E~B;E%Jk8BbXjk9++iy;R7=XtCK2`P+b zTL}-{GmkS=UM%U-6~YuxC9c-j=8ci-C!f7sY+ruPsE$?C z?aQery7%D>0X9Q1g*Y4M-1h7MckFj!HA5@Kwb}&F!{s1!dl?NDD=EmFBtH55#@uk6 zU{$TOPl9IX;XAoMED+{u+Dz!~j5u9!q~@etj=bac{(zD4E~r`@Saqr@;w^A;B+Kt+ zl96NDk*Wf~>0E^dePum>&L4q2bAB>QX?%j5*jC!<)oPsuuP1DR*Na7iARE(_6p)@1 z%0Vy7)fADy`c9j*!Sz9%oY>=`% zisI28JiP;RsYY>r5p$s;j$%FVsQmiBhu1tu1cyh)h7x?pD^fY*DbD*adrbp=EFZcm zgK+F-6<1DU z9{%wsojk2VI5J1Ll0VmSxpLsF6~!$%xAuvPf#jq;68H?Ef>xxns}9^44V&@`td!(? zbpw zffI>)+Q-J77j>&Zi6h|}Ih7Yr|%|Pw68Dl)`=2BZ>HS!9s*|Qs%PH@t!uKjB6m4 zbW=xU9O)@v?)fS>XM}ePJk!CsR2*L{8a6T$Pm4JN4=S8l8uU~b&dP_)KZE|IAQK_S zBHtaSX{5O1d0UGbUi{w8m#yJ5zD}7?h4H?-<$40Fud5k#_?`q9uvVX`>q{k4b&JAv zxMca!Q#P2pAvN?E7io84?ecEXqtN1wsr5NmSGgkGgxSzexjx}Ga3>OOipeZeSm6~Z z*IE(2t8V%Q*yv$e#cEZC`+XJrD?%({|;`0=%=Z^OJAiUEN)<=y@gk>^SxVzRpmLa}BWFVyoRJCh)?Y zD(5<7>C2_^*jsF(ouzPniKPjNbCa)ziql|=YD)vI+Q<3fcZL(<=F}M-M=3^Hb zQXF~VH+XBZ`5jJfxKvCAltNHO?lm9T05t(3_J3MZ3Ow!&rSx%=fHvX2-PyE(Q#H5# zQ2fyf!uHnDq>1R-baEM2j6xj1X&T%T3;ZGf_z~Bk0U9|YD63`x5px(p8LejB`HWxq zb{CYXqnYPqZ<5`KEkpO6rFET?A+Ex=^t47GkZwa+VUzUDcRq*_9J7OZVRcTg>3kK( zI<&xjR9#hU%>vV*WyDmIU?i3L#nbV{?14J42)tvba5Sq#bUUMq@92m-rrs> zW>`YRc{bY%z0|)W;zaBkmw3Hg;wRc>p}>4gR-v#kroCpb%k>JZ>~{0l-Jl1k<%6WZBQKf=Hb3qDD4{MMddYv% zzPY_@Ch+ACI?G9{F0QmsEskj|66b9=4XrZsK&Fe=;bJ4TsS>$CuA(FR1ef|yvF(9S zgR;v&MK#MRXmo4O5aPa{!ORu53=@JsME$aGEV09(R}VW&$$y&(ieUpYggnLrhx`nT zgG3i>-9N;{ny@`lRI5i)942~*o`o85J;plMyhopDgXbWwIWy*^O5CdBND{5)UZ`!B z@MDno%mr^{ll3CU4>n1NN0piaC*(!aGIbVcGz-o7p}{0%oEO!{^(}g$V{}L%=Q(i{ zGv|X5Ce&U|8BLsHV%~F1%u|ku-flT2I=tnW=<}9iqT5@JF>Z_nDwarrie@QL-F7f; zjRjY?C5(Gx!PRXGaH8+@6%1TjN=`HJ)`_<5{;go^@N}S+_NwM{B_U(cXp13;lVwah`V@=Xtkro_8DPdAD(% zN8_yE{yqy)TDV325l5(P7y~dP;r_+12=bke7$wS#TXKtpqY2k?2ie$^AhQt)`vnZH z2uCDtFEWx&#*Eukh(UU!n~$wN#*&f9`Qp(Gr;++pjepfh!$b`@p~Q|va9=1+5X3Fj z?aM!)XV_!7(cDhQ1G%nJMIgpP4Nli9_&gsWoV=lMvueC)_NC!XjRzjU4|*Y@LOERt zLCCYO34oK*Fco%`c%!pHY=O~SW~_!=ToK*(^a}eeZw^oD+yUzo*Lm{ikIlC_gTa?9 zN6Y2tKB&#C-g24iG{NuD7;A0Rv>fu87rilaPcSXdmZMq7E+9{wps=}tQ%1|L5Kn9| z4Cl;dn!|J(B25CTP3@f;|p3J$+$QNfrb#k|?a2M;E;mMaeTMYfdtxg`3MWTbb1tQxE z@2{@Vm%wE}rJTXHly@fQcqu>#)bAmr%CIDXi628Ab}mm?Fx^CqjM;<6Ni3eK>}HpF zeGmS3Mr7z_A2x^!s=>5_dC)mQdF-3Q<%?AwyH!0BJ~>Z_kOm@z4d?+RZY9o-M9c-} zA)F}7Pg#lKVnHz1Wpf2D`ec{c26+g&(H(=5ImJ&3iN`PqAQ=e#cR_>=@{CL&B=lXR zFL^7ZhKrmbBe){Qi_ocZxFBH@ z^NpMgj2$TM?}XgB?nQ>1Oky9+1^PSLCvxK9A9JohEfm*J8OSlzM0FHO>ftb6A`Iyz zy@w&l8Qpclw1P!?nFe(s&wm&6`38J6RIXGtaeAv=-7{7o{8LlW5heYQEAjy!2kat5 zj}B>=8ub%kH?oW1m{0X)Nas?=E{C3S;=SieFFhaX9QV?RIK-&1rXALy^03Fsfq6Cc};8Eu#CL^yj!r6l`m&RH% z{D#MO_xG{LBM9SnWb$78^2;xWxs{(jfBx)QZtGtTo`63U zdGPev;Q<7sLJwcOeD?JDv)uYmU%W(w-l7bCdHTzZIix(n8Y0<6eoH- zyEvr-*jR$11q!qq91qbBsbh462U15TQO`f)<1->2F0Ru0&YmSOj2PrRd}$c|*jP09 zT0l!QiKAh>Gn)2IakC?Z$J&y@<2FYMj|G*&;|50xk98`A$9IO8LOe5S2zndV;G6^1;G7fG z;Njvx4ar*-Rk&QRsABZ4MHPiTvoAG-zXnmm&D{*IhQo{x7kopx;!`Xe0O(VOIgGPJ zbXvSm(IHYVVAPQA!bhd}I00MDYCMY3<#G+LcP^?J*@mcL5WvV_r?^X5U!xfi4DwMLn>QW;!_qA$h zHWADhLbG+>|HuJx=yVh>3X;!U9RxbZc4K#Hoh9M2ui&U-*ortO9+1 zzqikF!i^0?k*^@}E*`G$2uuFH&)&Wuv6{xTzU`tx)a&WI`aaO!{v}RuCT$g|8=X)K zZW(w8R&G`QKUdiQ^=k>)98K{7i93U<(WST)ax+98nYPSksupb&CLg*m_X!0sPgg<; zX5}H<%APuUVFXgGF5%OTuW{ysTQ%vj%L5V;lWLGhLcgxMj?>2ktPLx$i0g`O#CvPX zYC3XPgSe;B+4Eq*@MGsl6cUk*L2nkBy#^H2kq*SHPr;qeltZ4PL}Upq#V^)_w3<;W z)ARIhpuf4s-TeQJr_cTV=0L7YKPbSgPbE}u{>l=f;JBQwzG8n3LADB%+&M16XPoqY zoa$p*CE7HW5~(k1m2emgE@_N0SmIm|)IvRZYNrsa|-HJtNuMKZ&npq=-*a*WA0#vJvYKPxkiba0$J;XVgr$M_Z!I8C*pE z#(VuWkvx-Tf^>kiYNV&uH3~U~@Q7ejE8`Vk&Z=T0@0}>@j8wVQFx@!Ihb*a^sXOgy z2javWz^-?eGYr~*4_H-^V!6|f(~mW-i;Ta#;gNcsTh7z5KQQf+KKMH?Z&g#jnvJdp zUpmoFbMbxnTU`S7h)4IhHBc3gBbYkE3VyknTwL23(DyZ*LAM&t{eQMq#g5!YGX8%DCdeHjUpMR8ET)*Gyl(dTqG zRTC~uk`!ZsEqF_2+jbXCUnR1#I{Sh^ zw8e-m?-f@oWRS8AN#+Am&6=C|uxiQXNHtZd;<{#(rDm(ocvflILt}35=;-9?e!4wG zov!%}Mu$6TJ=HY)I_hoLG7va!Jo0vndvK4j57Q1_PrqW(62ISL0*ZlyE;B6<4Bigc zuF-OQ<9_o9(f#BhtrB1l2m`A8MlM@c{s-b9+75=G`Xf9!`^TTa|F7_gk3W^I73=qM zDoJG4Z^u7{%d)K1nVxPVi8>6`!-pCTh@RaU)!pQuq&7t2t;)534ff`rYwX5z`LD`5 z*H*-5uIg}!S^XEx%efwG4I90CO&C?tcW?hYUQ@b()-JrEK*u)=c#)n>zb>qfd^ce< zM>r%*eCH*?q=Xljo8_SaEOF)pKR4`qUpEGvSkV=XGoXHX+qrzJ*^Ch+q?xE33@FAj zB%@hkC&eTtQjp2B0@CbSnEuvG>TjDrgj0i#KkDS`nsAS z&k#0~Sdl~JV|#!btg&Y&?fCX?@E!*Ool=6$Iz_lf6$r(+TTy3b-^63Azlk(0m+h!G zQ7xpxZlX$R%_ic!wQ0eX?M>mnqHmJw`aiU}d3yi{nqk{o+`k0Qkyw1kNT=s+Y-aUaqN?4I#1}e^el( zDeB$Z7Lja{518Nl__FfBxQ$%I2dF2fj6;34pJ z;E#sM7^%2Krg$r;~@N^^yN&4JWpfp%{n+g&2f&!&As|FK4Zx0|)S@XAmMLG%RFt&^5>lMCz%1yYkp%3%=a^i&8Oh^VrjO$7ES zS}7;*LCK@)KIb_f9!m{DtuqB9FO`v@}y=DjMiR8W2;SE*{3~TD4SGTJ-_T#Pncx6A}_U|-Z-mjV5+v)d) zkK}pq?Rxg=9)0N{{zE_j55_ZT({_q!?5lfOH#`p*E5{hZX|KIQPF!RFJq==9HLt|? z#8PM3hZ;EFKWP3|(xiFNfd{IZJou~~JYoKV1b|n#B!IF=$q@z#_D@<%i=Gb4OJ_kP zNE(my-X$avqLxXzyyQ&_RuEkwU%)L5E}Xg~4$0~eAw9<==`1XQ1A-vSPG1Hcp9kf6 z1Meu@$4oGc*!~V3&dqd8e}ItuWh-lPIGQJ-kHWweD33?;S2!V*UM&DW&E*@Lz_FWN z&u>gW?kEBWp6g6{NgN0oY7AT}I5Wi-a?+lmzc2Jf^$1%hKJ&g;mcw7&Dd7<=&USE! zK6x~di$@MZ=Us6^;+yd5I+M^2#ZOKpdHz>RIDp|LOemvbixX@lZ!v1vs)6H1xmNxtOdh5$^Unv|$M37S5DLwr>SE zuUf%0Ax*%e&NxNMYEG<|Gw=-gVz94gtra150u%o&JXd4EmZ8qF*->u%D56+nZm}^;D7S3L>b~bT6La7{uS~<1SttQY^Bh)7_P?9yW7=ZRQ1b2y z?W4hY+G7UzQsK4$1C9;AXD9$uIUKIuVSywZM9NXCMGQpo_9q8vQ`OldKQU?q|2#Acj< zLgxL{2Qd!rWZr;A<7Ptzb?;%Bgpvky{ymu_fR|!-Y(#c;X&evEXIZN|Klmv2?JSO zrl3zmg!}dCyzFj9%MmC}m)ubnS}4wg5sF&ezLTgB_MBK^)>L@J4cRR=y+mwjV28+m zCGyY5UzY)6ywFNw#OKJw8bNZHEKB^4L0XPRg^ozf297SLjDBJ0v99<{e2$TInIjvV zw+Y|uVc1nUzKf^IY8oT~gCXWPmJFzGaAd?#;j@AQ;UkE^=4=4*t}Y!SaFc+)c`3j$ zUM$GwB~1`yTaOQU#1y~+8eHJ4Fo04@AHT>Iywc0jv6n0k2;#@*Axh+322$uyw`)?M zcvGezWGiT-@?@2j66pp_3gZAW!wMpWs#`z`2n`^q4_~0V>8P3J2O)t4l;xmjUni=Vh?y!+jP<6L_=24e+^h{PRKrLQc;Ms4Sif zXj18d1gtH%TQX5|RPuwora20%SRXoXf|wQ>T=e(DL1~4=xqo=~fynC+;u29nG2alk zD3569yXQZ!Y(Zy_9wI=3lHw8K>73i1{|rRxYgY%qy00rFkDlcPXq!Zk4kL6VfRV09 z6x1DHx?~jORUli@ateQe*wZ@u&iueL=m%n)|26eWe4XjuP7L-0eLMuM&~n+1faCV$VWGBw6QqIR@|RDPDKx zhJ>e(QJX8fI0z_6f)XJ1Q8Gy~@-hjWowOCnOYFnN;Za317lGY~^jQcvCCC0mB$w57 zG8LDzK0jUc+2V1nOw*no<|v_0XQ_rdMd-}t9PbyP-bV|$NbI&@hG8p2X?I0L?X&UT zXA92&VPA#*XI^c^B!jQmhcO?VJS9m-7KLH5W+tFtQy<)v{iM|xQcmVH{Zw&S5F|vV zpkiIh)S5N(jy$1HN%hl207efID~Rk-pP(0iG)QL(qq3=*@b%&1de1Brr? zh@=V{V(UDk()ZMT<-!=00{Fbae5FS(d75^K=jEsEJ3?jckye_v5pRWx)cWEF$<)RNdw%X?r3eaom&pHcj22cZXIfsj5e;bVx&J;VIDy1^w^%1j7nEeQ!M z%p<*INtCpE`tW+0YKW0{h)=<85|PJm$Z$|p-$UiApe zN{=92OIt=BOU9}^{+d)ud?xh^-=dDy(Zg~=(4?w6VFj=N>n5 z%|B#F_PeMH+ekf8b!ed2D}#k(1s4 z_~dW^fs4U=hB6=$lU4`!e-U%wN}-(X#IL=5VPXIUvf(@lf5|kNVgj?AXwn5B>f-6h z$2m7i=Ziau7rh*~u+au2S;59cA4+JjBLGnpdxV8Rs7HV$8j}bPR;sP4@6|A1k(iNY zMy2t5`|=In z52Nqyw>XISBSV#|&t|_x6b&ivkR=XjGW@WVT{ZN!faZv==D+YrHsfEbxV`-$4n48? zfjH>R3Ma{}`|O~2(M$0O0d;!`_!Ji-MpuYN^Lsq_lc#=!0RDG8Ggftx6Dr94qyQUA z(6;Q8(-3;AIX*J*d4JCk~8-8tRSo z1No&*6?4rbRT|UCx>oZd!NA^@AW#*mI?hD>;mum!Q4g{-6p_#I@eSMz1CI6gY_+V^ zUhQ){*O)yJ_74LijD!d1`RuYMp(~xK;u68%7u?|E$835z{_Jb5 z4UFbR34vCQPBiOAC(_lGPQ2EgPPD5Ls7swBv2JyeK#H$xeKfvP=%i^~UF;+%f-xp` z9J8)=@=BfT$D(R=5=_>2hn+|mK&y8r#Z0PuCpr&Rn&eBGLnkYnM>mqqr4u`A(SACy zDEJMTT1)%t6d>)b6Pt%SO|pDj#5_&V+CDo)lQxYIns96T?c`=u2sk3YKuB30{4= zg&A{C-kd>QSYRO0?kOn|U-4p_n184M+M z2P?T^*PK078qu2x{3mWJ8PK~A7v_r&=FJ4B!04b9jQ51-0tPd8R9(t+PDfgJ=Wman zKE=CsqQAkiK8;sfVQpm=#VfquZhU=K!=Y5MP;hp|CM8pLH9Qa?7@*G=XAUG$HIJ@v zIw0rnqV@G6{+6-r%9WiA7jf|*t32V51TmE~De}we59!XgU&{PZ-Ej0z0w)=XGrjL97NjnL^E7MrfxY#Edxi}UyUqeJ+77g0< zWvq0c5XuLua^_1k0}s|b&ddVIJ`wH9VWD%xeZ>BEloBhgh`@ucc+O*n^#m6kLgp>^ zX?|NGEz`dbPd|3BM3iN?;6YM7jfjeh^Mb09vvCin@bG+dxA5IJ8#je3g(P!gHgSGX^ z>7xPexV`j(4D4ABlf{oHK!0U#ST4XW{uAXnD(SJUCiEsPtlAWI$^8d2WL{xu5iLol z?u)7S# z8N9f@kkTJ6)=NM3(MsHHQJQEo4=>W?#sbrEy+Ej%wo@mK3Y6~M4GM9D`Qy*^biR7& zW=H)riQIgaRS^^?E+$e%N{7kOv`d-VfEc;`8H1F-S(tH{yjGKMrQ*2krl}{Wx+S(J zv9|I(W;)aJ(4H>Vp<-{D@x)%yBW%0a+xMeQ+J)`yCrvxd(GrXPC6ku|ggcD5oEMf0 ze;oWN_D`uTR2l9VaX{{-JdmFVmOlFH9?^S)7j+I+OBd8=>TtCX;(teoGX3?6ci2&j zHA*VG2R_-wOa3P$m;FlZFQ$vfS3Zc6{A7DWbb&A}R{~C9S2xKFwt{dsxGR_o^c&oc z3wBbPAQao+)MIboCm#wZNu$N2KVK7nBGaiWhlGz4vM$S2K{C) z$-B`M?V^!b0v*ZtHCP=j8(bI>d^&d3-NS(p8$q=#S*}M@ytbjbZp*@=6&qTHSoM6n zND2j$#muPkz#nY%u~}gf+hQf+#{7`M3Wcxey))4C2KOsYLbBF)KI#u|l?IO2*^OIPbh zkz6SEDn3i8+E=>@CVKnxjG6-euw#>u6HfhV0wx$+mJ8G6x|Cz}7+0(Q@V@1M#oAjJ zK-KH5CW>ypVsE0V77F|o8w{PNYib+(rmVAKRAsR7V9H!J+o+(cnwJM+oZi57}gXZqMLb$jX1X7P%Q|!A|RFJ>AEF_4w{Ey`I&Jz#XZ5+c`CWW z*PTdq+ARGFC&JjT%cWwViPILpp4mVYPaZZA7L)m8X7ctmpAwew6o1`38^7T0pa&q* zkiAkBgj+^bFn(?Wl!R`QNZcY0M=2$cAXr#>XxYXw-%{nww}d>wJResV4OBV}^GzJbeUsB|02;nZsDW7wTIk_=BZ;{W z?ZXu4k}_o8Akt=XNmvzdumKq3^N>&Y+~e*Dztv*^Ke*hHMq_vx9|FZ-GlH?n&m=N1 zv)zFbH7!m|#0KdS=3fu94aMl9!z}=EZcK)>AM+U3ZQ;}P!Cdvabtv;Ei(nj{NI`m| z!75fg1MbQdIEq|h$6hQL+L_Zpmxp`{!Fe>j#S0MIM_(Pnm|dK0P+&0cc3&+6p$97@AAmXqiJjc zc>*^v4k~77KXG;{X4uRO88%v}mM#^D7A#mjy2e`cY89e%q1K^31TmeoGwBkRQ&#A> zI4t@Ztu{plYos-iBCp3#0pH0Shm#IfL`0^LbZhPhb6^BJXh-b} z%wZU*u%=DW**9={Y=zNRtt2CX(PKLpeN*aY_7oKXeHAw-kP+3z6_gc$LQ_=PASIx?SYuVJXG;V)A{n_q9(Vn%SzbCwVpSGexI0BQ+})4j@JlYECy*!K5gs;yq_vtU z0&NS@fq2J;5qlD5W4u`7h8YnH-xnmfC4pBNjlT~XrNiZ8e4{ZDA`rJRCs_5kN98); zam{73ny^NarzS%kB-&4EX>^br7%5V55V$9lj2z4j5QvqgmS^fRRD{PIi4?u`gf~)5U9>l)_H=qeBmI=SJ@s~t>r*)ql@+mYRElx!Ng5JEXah&Y#hw2xlF<7N zk$Eocd=qDWOwY#8A-pW3y09Z)lEI|45xQD@38NIhai-I*v2>Db&T)utlp-FU@?Tt* z_zAPTIelvYEE&^hkY@44^gaZ*4L&st0c1*QmIr2ui*T%j(NS~7mFc1{5cn733 zpU?;lkz5wMC@dholz@GoLw($7SM1ktOY$EY2K+tjbZ6vJ&$P2M0*WFK7urby=JRr) zuEcC0#Bvx4@mpM;P0|1rlBmup`gsbGTJWp%fqwj?ZU~wRA|pouv6DN93u1~1but_` z6B=fGDRJB43BnWv>Id|4kYU^ZaQhMb#5RiH=|4wD1zBvmV&@gQ=(FIu{pd^7s-q7$ zBt|i%B~mz|^LmvPg1Yncu#@9-y+Ty;jD?ka1BbO9)lk<@21`XBOMt{(jAxIZE{+9^ z#9ry0(NuY-M-6C97c+}Zh%UY9j+YsDN9$H3^jJ1fvt8Emrn*Lp9cJ3)_yaYdZmrQG zZgh!1jY;0}N}ypdDBYY>z`#^;%6YFoGNFpwI^(OIt8EX^J1`E7R%rh*K~Wce4sLPN zPvcJjHc$np22TgT>K?bh2VtpMV(8#iK(XQ~fjW8cw3i6xi=Y`ekzfL@m+?sM4jhl* zi8~8ozLlUz<%+xk$cZT{s8`Iw8zgnhul*@TF|v9^Xt6`_v0@+phj|Zyy~T z)C1e2L7K4yB~fy#OvKcbO4zL(6T}^yokrIfwKFUA5s8rwLyk6*Mnky_$R15KGgqs@)xAkH5~pGW9!El-1y61yRJ#tpG2;2)Bwg!a9?9OkUKid>>P|T$ zq3=T;m7NGew!01nNZXHCMA`%*Lu!h&H>ng{LQv5q!ROi}$V}G+$KKeOJ;8~&yOCKv zNLY&=Cc)+%Q0SRz77xgZ4O(2sL7l9zIaD80T7Z$k!hH&L6}S}z?DzTB_9eO4JR5N(t4FgY+*xsfobj-HZ#Uqy37 zYOP;Y6nRX(a-J$GZ9Sotx#=*rC(^qNTDcIGb^iC!@-8lN!*!T~1C{CqO?(^DP|?qS zAc6DdYbA~G^8Rk6A(S4t-&DwVg9(T)Oj-cf{O)^ipIqoY4NZWdqT#GZDIeozj0s=hl$n2ojxx^e6ljX~CKt39X z^QuwxaR=Qor3rD+GZY^@vPSTjfWrmeOFTtQpWyCbt(rT1*hF=fh(d`&p(A7|Dtj}!%_va9h;7WJ z1AL6ed{qje!=;ECgo)>2A)aRA)mC0*e1n+#qxpcFgE-nqlXA~8OJv~`b3ML&y;$=_ z=mL&Q78!7FALNe)EH}LP+JVI@>3L3NbjPJ{cREz0bTS_!1W|vUdI|7=5%Ue2RJK=` zHzXa#HML{x5U)n_6}KpS)U<92HorIj^dds}i8b(IUmdZ&!==(DZ7C_MQq;M}*rGtA zJ!TEBQ((M6bYU6u(YU*<=ZsTS3TK?r8pnsJ*|ak1prXeTVfQE{gaI;E_>D?UR%Umo z(ZOvgy_nETT#B#yW4yeJZWlYf2qh=BSa`}2W~j39>Qv%42KJ^smhKS^hcCyo0a*^o z^if->#mbKy3D(wPV(L{m<&nE(MjI4K=qukPdQY_HlDd&%Frh1mB*sa z`ZD=u58@wK^;>gHdm+>u2*fDX66jojJgJI`w)l{eRn(SWh6)9k!CA2yTtJym+tA#Y z9fhCpvWrnqp>nyrfFi>cQuvh{N|QZl2%9V^L=_w4ax!CUdDzMqHg~l4h0;K_SIzkG z)pSIkjI+bTXN*>kZBQ`C6F*M*Z5Wct&^8S2I@AtHT-s?^HHkZ9;Y4qa$-s-Kz~y|X zC)b!l?3|C&IK}JK334})W%g%$jy}^cryt@V*O~G$+>ig7|Me*jG@YbF6ge*9ZA#V5 zK)OY3p*?p57!>Gwfh|_-aQ4(qX7*yS1F=TWM!vTYySc!bJhk0SnH8c|#aduio4Nte?9vT@eEV*I=}Qp(jopBV-CS{*>#e&1(1x*e zyKca8Y|#xQ;^!*T{mE*Zfr;(-nNN@bW`cyQOV79iewwR0gBqx4S;5sZUE%lcLPj+yKX?lZmzh@ z_14`0XhS2~t{bo%TXX{n`Q{?aT3vTV7+`sNhIx-TqjXG3+?qj1u%X(l-f__?u_^1b zxq_k3+68fk7S-j8dp@N@4NmA@b%+}fdA69{&k=AtZkko6y09jQLjiZU1rd6D(~Q5I z&JimeE^8f{sYGYd?XA<-7p8U;ng7@-c@erDX;03R9HqOOnN3qg`%4gBzOeiSHxO9! zH&-#cqwk0%<=P$Nt9Hi@;i44}LQ7@kL zP9-FT4tp9PIYk4{q75gE+sS6HtIiMdF> zsYAF#@Wz|pUu-RJa}lV-=Uoz62T@fwt^xVW+=myMv8BQcA7uuun=UGCS*cDRev1 zo}4ElH+D`jOZ_E?SpZ14odp=F+spzY`PQ?5$g*9hO6~gw8;{>=7J!w&re^9%wr-{g z!={Ru5O-9=&`d$RZ8HUFcQchlw{502(Voi672cN3RFdDSnMTS@%`{SOY^IS^g!VPl zNZONgG}B18v6)8Fjm;FK+cr}pb(>}y$+vE%k!8zf3WnZh>hK$zDJ#}1=a1Drafs@r zIqGL*U$I$s?4fp&?N%!xgBw%<`DRr>P$nDH1;qx9rTU;Z)6~q-e$9SDtXD>yKMninBBOP(j#kr5zQK>CJ$(NB;BOcoo7n`DwJubq=CcN>uyg&2Tf(rHenQP-iKL^_B3Xe^cyBYm#9UG$kOdb2u6{f3Zds<^~Zre=n zX5~7&nnbONRtSy!aH;@Tmc(5Uj@;;@svd)({`HI2nMJSM!tZQL(e-_oesyH}vSa0w zms<0_ypqiAsQvQdnf0CAG9yQq?P9jBwAo4`rqmD;uE7;M`1b9XAz|B$L)Id92fest&4u?XNzx#htCgj18*lb&YRBpX3aKySKKpwmwLW!$VbJmrIL@) zgk#BewC&CGY9)6iUfpkJCEwBPpt-48X+un}U@_Vd`M* z)ViO;98EgoavCkhk9Rlrxgr1ZPXq|bvw$#%J>;}`hh_TMwkd%={=TB_G+gRtJ-WTkBcY-P7?1np+YZ6yAyY*cO6(ahJ20p1q7YX+g}ZD8os-LI5?xLk~Y zpDPz5=wDPWM&eJEi;?rAX2!x(R%SnJW+UL|%xnbxi_B~!{*;-G9B1ZMMmN0-jKCBU z#6}0a3Wm2AD`347TtUdS;0m1Af@^~KJiTm}){uHzxFSsua*weKIm~n9udk#T@=&>g z6=iua{~E$rsBQNVN63thTrRk{neT!`1ZI*DB1j>cT2KLz1S%HiMJc^M ztSYj-=`Y+Ekw(WL)MZh80FUFl73+$!6jAz{5J%xI2Ypg@w=BM{sk4J65>Z_kH|E9Dh$k3<3L zWp)pc2$Tq?CB|q6`YAWhJxDIR`;QNNwcgP(NP_DZkLzHm07(|G>$~`dJ9}Qng}cd~ zq{wpD8}XJb-mJIKgi#EXK+?54E z8D>gu-HYuJ&m5p-T0)#BM!9+g-%H3Fk!&TsU6?LUj1yAi4g9d`XOm%g1R<$hCf7v% zEE!zQj*Agb8SXuL{c24=DC1kab{MXY8^S2KC+-E<4q5v0Q``&wf39x(31X}sFGmLw zla(nR5?;|0vw-dGe_#Ys4*a+=Yu_HaR3<|(M9BErKa7(6;ZM!YEM?kT_W6eR$o$|@Px$}VNG$GXr2f20^KAl7to?jEWWHUU?s64U9(C0to3;H z@V_7C0tSo-_)t5Je=D(?;fMQy%~`>L~m_`LbHp%jyT%8PTi z=?ifR@3ODMnviXU0IB$~h<$p9Z;LDXh#xRqVTKkar3HIe<&)2|uh!nOK_&QJ|Bf+5X$gppJb%GweYmE|D79lFG2Y9Xg_uu2^eD;_BSfPSq zp@X)|CktB-zDCT9@f6_(;h6FJVma|}kiW*u=NLh5MDX7J2|d@4ApWBJ%Mm zLAW73r$s6}ZpVJ@95*HkQJj|=qf;-=gAB;&f$?aT5j)JgA}S#KvGw%@!pZY56t8+gTC9V$?bz zAv{=iRixR2$W>&ei9FtNmn%^3%R3y$RJE|t8MwBG)gXc*HNhy{_%8l%* zN?zXx=DtLbOaNZMG!0rfZD&Bh*fuxR<8TdzLa$|gCWS4^M?d6IXen%w$-!2{$B!w=wB_M(3KOz;qyNoU zYZ&SShmt7*9LoSC$Na%4#NJkV3c^L~?^vZ{DWByhOEFak9dg!>Vt`avjI_67BB&?m zsSdMTUQSm@=?Z1iR&Ph&VThRUo&6xW1np)%86P?`7$)C{@U)^frsH&Zw(S6;`m|jv zGa`gBjtP?sWCg%X27vzkH}maS^j(LfC_stJ4byRycD>|dZcE+_ia;meycw^TE!`+` zAptX7HD+{0)B5eVNDSNCPhyRh#M;lB*>9f=@6FPFY8UdGwH?Hv2l>s)z)2NA*Usdl`ir|P8l6!zov&d#T(}MMnebpMuOV-V-hf1-5n{^D2xDo zG^2x8k^XplHk;nz8BN3ta>H1(mmB;ruXzPKhDa}sXF=4a>GP$!z5+F@jqN);_JTTdH62UQ#kE^*PE)cK z>+~Ie$5xZe?03P~p#C<@=t+Y|XvlXzBWHqGsQuMw@M1W)LZds|>HxNPwk!B;B<)ZYwimata%>}NQ^{^4<6md-&K|d~ zx@^JJnG557@sp)(B>gK&yAb!|rENt0aA_MEKUvyF($5r}ap?HTf-{o-6$Mv_`|*M^ zqJFsGjEtWwI3ww&3eMeG`uYCV-+tmoyv!*&X9`<&{DrumD7cu%A1}Bl<7W#lO6n{) z-aC>R(xX9LV?)rVjv?D7t&Qbo9c+W78uEuAAfb_CLx}HCqmK zkYP*hT@%75=R|mY&rh>*R7{33r}5C;H*C`+3$UESZH>5TTaI<|!WK+F*|Gs4Ru>zz z6S6Lvu(!kQ$u1(NR{i1&B(OBbs~CVf&lVql$*xK`E-zW43UAH|HmE9{)x6k+9prOWp1biQug{yx(BeG8p! zT%R7PCDwex&&YBxoP?tAR zU@N?%=$&FnaRbFDu9!PAXZp1Db4ZM0-y`Y!5_lY=L5izqi{BzpcdZ2EK(9X@&X@Np{uC@w>e5FQ{?x(;$X(p0zt>yCb2$?F9@vFp``#vSc+ zB^5?8CoZMKZZ_Y7t;#@Gm*k?5NXlLKM@pp7kf@rt_q>N$;Amr8h z6yB=%icp1Mx~cnz2JqnNKhO3+{9$6LbvNa>H9KZcjg@lC*QuOp?%W z!hUf0vQ$N|cyLuZ3%a5V_-pY0@*uL3mK3{edQF6*LLv@rbhxW(jN>)>t%*Zkh56No zGsl+J7OfaHjqsic9PqHwc8y0UDiVjyKi2^BLH86pox@3G+QTV6ycv@k(-&V2`RU^A z%WBSr6|Xzv&5dz4!NrS%Zsf_)^KPWPHjQUu7+#RI1&u*+FgR&3C}2py8Dolu=?3pG zre}6(ostjTS9`a3P3S;vm4|lX2m<7IU2Sd_*ZfoA4@>GcH9CP;c4rMOI05* z+d!hUnfcMJym;oMREjS_R|U{}s@h+xKW$G>qXeCu>}BYEtNqkWI0sB!At zuE@SEZr+pgUN;ZZ+7Tooda6?HW}#>JGDF2(=$ z5INHyCoMY~JbpEKh_I5ge|sp~JrAAKe|z|L?feiu2p-1W%7mn3a`bI9n>}1hSMqNU z1wz+m`;E!*LwSiAZZTt7)Afp{hCQi6au4f;L^O_V~ zN^(LoVqzedp|cQ{&>-D{V3^L_>oWrQK*z~@7YUQ{Lu{`;k*KB+?1o)J%?`Y>JMxuL z)dbn$wo^_@R1*`2-A*Bvq$WbD=%yT{L^Uz_h|;M~NmvsXN0&}PmV_cY`kpI>qB1kV z4l;C6akUU=a66<)#vb{CuQMF|CX40c>%|O1*I=={e*FEhTP^D!RybXpZbxeF`W?Xy zbNKOK%QR9(ZbiJ@ofEq=TQi|iq7A5181>}xqJh85w)xEYPu$|!_vx~TkcS|-DGzMu zf>R8$x^trN=@a9++1z$I%Nn0q^{Q^iChrxBsY0skg??CPq>k-}?b7B1nm*fD+HJ>B zD(iN&wqs{{pXS_u{=pQ@6nVQ8Q-ycVCH=-(r1^mM!-DcT&X&KAP>22hG9YtZBZG3$x6fm8S#i52PHcJ}ZqC z@UtD%&N*Pu_QUO-+Q0gtE|G@YTGw!i9s?^owSyNw%!;ktZQG?yb+=4fPSqFF8*E~p zVT7E1-=Tla1sy*7SwZmenDHJy&Or54YG-TY65Kw}&T=qg`Ps}|;XwK3_=ZtSwoTsm zTCDb2@^1Er7-8)w@o!K_Z!9}-;B*;{H#w$PMvmgrEBOSxTX@xn`wUJb{+K0rtDc!d zqzJU$*P^t}ZJFK(rzOqSMhVqStGU;+CexL6LV}WH{*e10Y$ii&O!8nShthVnHGgZ#?ojvqeL3_z8d=@J+dPuNoi(m`vteB6V7KUOrvn zRXW^|2*uh#ji79`&Z$lv^uUOaw304z!~poOv%^ONHvO}M?`NSa>tb;Ey!sLPLtnkR zgj1X25ezhO8udphMt`8Uj&|d5SuicCPam;L;*h!pbedTYVvJLmQ4}+M;`i#L(kt@?VI`GpCt#=hea@Nslie`7LH zC-l?K7g1ZL776zO?a0?v-oEQ*WS3rpm2XjOWI>agkFGSfk!0sNn>gKPPUfrr)C$&@ zKhBC&WnkJk45Z2;#ckM%GE1l6b-TmAPWL$xbxC^4Uem)Et~*7~;wd?4OlE=taPgX4 zeD?F z6dVoNCmkyMa9g};mfx16yEOG1csLwgkEU}b0`DO^2Np4?QpNmC5UO2bw!QsKTsEhk zNbL9+j((8tCpfgOP`u#Ig4XufPZkO|=_DGL5U_rViBmj0>l}JpI9?_5N`Bvt?gSQ` zfgcl!lSy7bIQ#qY@Zjq~cn6XwnMxuBuOeYdlGZ<#NDL`#`{%N3Ni-&wi|JZ2cVEUW zlcq~DUM~&ppFF?Gvbx6A+_s~$;SlP>Y0PTq5Xxy0Ty}wj-W0=8ymK5>8xAcsGCCaU z)-P^Fz>m!x+*=x_UBTE>D3xs}DsX#!b?}eVb1Qs0A4_~z9ESQ<3qtH6vA8S<{=60x z>RVXVx;qAs2Id9`oRzuyPrC&NjDEG z7#!*GV!2%3VJ?F`t*Xa+MWj0A|HpbXU%~A^muPdY4%r<^mxPk@T%M*@MU@f?ZQ%IT z+``S=`s%wZc@&y(s8o64Z=AUbxd?mT~g{^W0u@4igGCxcsrmP1^`oxlF* zJ<{tg{jRf%YTY#7od;4`)Df3jF~WVDjT&%&@fH!+8IF%LNTX3nOwxgROM)(3sf*I! zo^vukTESW55?iMi@b$was^%b`pTMUxg(y%`yjX13%GEvB4@Ut$e-0l8BK@I7mIK=n zUURY`d>t`7$RFgiUz+=YW-!Nq+RhJi^cAiuaWkwY5o_N9?CGt{P@Qw((8|?y?*Af} zZs%El42YgLtH=0ns`D@Ni6!ikH3284k>=9hcZwkFjRsg>oddR zld~{SXEgxZ3miIY&>76?qf|;5RAowt|D2K?{(mkI2sx8*(!MB+j{6X=?p@U>$PrEX z3%xpL*ajMp+Eppg=1H}Du};h?z@s*ST{iKdyDZJ4HqTKYM(36hcd7mCWNz&$Du_Mu zTC%q<75kCg3dw}G;ty8jPr-$F=YGAg^a{hkA#tZN@t(m-QWzsqWyG$JlmL<$iqpG0 zL%+Ar?3xHOHKtosVuX>@86j)Sg^TB>tA{L!bUGT5MN)2t87cH=AFE9bac|Ugn3EO- zFfFP&nslxHsvB=91@P8DIhDZOufccpF;N$JlhAy7Dy*6+Q1^;g=zgM{v;#1#-W;3E zRWD4>UDRn8MVzH7U5+1{YiIk^ax!oE-z}bC8(lZtxWVO8+&1BWzBBKQ+e)}&)b%Y> zB<&{_LERsvs-sV5J>MlIrQS8IGxp#x1)_{E>zRt<*8_IQtXH~)LlPEvqWJcSdhY*Nqw4W0`j$1v&t!h27H}rE zZ8|Dnu2O8v63dZ3TDxY9W|Xk_TN;A&yJU#;yEOxH{Gb7jKOTK}^W&A`XjfJ(tsi95 z0c}gO$3i~B|9()j>Umdj@c{JFizcfDeyVhXCiXAeaRi|ecyPDW&A>EmB!}wk&lsd+jWMC9d3Zrpx83u72DCX9td1Gv{d-ilBQM zq3Ph?IiBplB8Olw0vE+sb2D<7ME zuwhD~=9C09^IIk}f+mQ~ySb#)O3&0v+h=)i-$ixUmC@BYvemCcu^sx#%FH^|wymv+ zTH7&+b+=JS%kKSjwVEL$!~~I^w=2F1pWEE&S^udGDy$oN=T1JCWKWlCSz`^|P1VS^ zgPxITTP64QzfG6CLXP-9?3~e&oN#-SZ+U&tW&MVR*e8LN;pe4@j~BNDw-vcH2D!?v0JE&b`&((9ODa zs-gV_g}2Ub$@(Ly?vzoJ83&Nfwyjh)TU2{9eS&k3q^ImuIQf4uy&Kd)3J z9)Re}qF0DTcC*6d5$Dr<4)gWmm@lJXWuiA3`ltri3-yfJKs{L;cIUxtIDLgO2a6 zeU4Oyp^pml8$EpFtOx($98P!rdGu!X%~>h~x8EK~1^Nv~6X@goS-`*_tjP}v9qJQt zK6A;ZoEM1-f_=&~3@PYBRg64!ttHC+3@SK+J*My_ z!(qdG;d}@P|9t!zzJi}|cGierK}mbjpx!MYs03SBXukc3+?1;tCEcNwduW7UL>8BzMt8H(N?P}RzXJ7N5^8LDK zS0`r*!^IE((`%~eTw+i-Cr5E#t>@zdk;fSZPS>t*iYDJu4X+*zZjhwf;dBZ2%s!lv zmT`H14Q9{_o{8~Gp||UH^{H*%;rYjQG5Z>l^q-i=;+k)>e76u?^c1y)@1cuJ$28FU zVdArDZs9V*Od(it>b)vnw~dLc1Th*GiR?JkLAou19I5nwd#KRSa(t5kaldQjq9~Du zag9*HG``VmMAYQArm~M#(C5w)FBgbh+qg(eI z>1v{^;!fYi)fKv1iMjOj(7`ato8e``fAT!VB(iRsi{mo`fH^QDe{CRh6v%8b(#TNq zvaG!KOugrAJCuVRK2klOjFyvQzMi<8j--gD?K|Z2+ellaD=_hPmDj;3VcMRqSC`xl z$qH3_1py)zCw4Ip31P;%TDM2CeJoVhi`RUW_#;9tejJt%Q%5JO#Z(BUt@O35v+}*S zk8&E{spv!TX0Bp&a=OXYGiQ(v`LWx4x`9yVYC0$APBeC{-89A}UTu@OnBF};v4k;|cqpM$IEGPIzS zx~_}Tu=UJDn%73*B754tUfkktfE;N6vV$({7UJPQ@6N2=pr?Bx3i+d~JA~cV9tyT%%$DPm zlVCz*?+gv6Sz*yXpIjiaq3{Ac#H?y`n}TgO)qEdgMT0<;ED1^LM_mw(<}D^mj+@eW z)Pa|{1iZaHWh00V7~poi6o!6kIl`L_-%(-l?EU#MZy0nf=!()#gwAFvcZU+n`PW!^ zU^tw11h#_0rKe3I!wI{RA5+oq3Wa3jo*OJ1U!9{vCGL1}jX%K6|Bci#NGD7QIE*gYMtWnaM`jsLmE zZuPLa)oCNIpXmy~7hDh$$7)@?l%&fBA@|xSZ1ffG)_z8q)UP@Gv^nBPr{-5uCui{S zMuQa_-OZ*eF0I1mfwWGynzGe6a*Jn+UE7?ytl%aRyg|`7arLV5H%X9D*iT-foLXW+ z>ZdQ;kcNGyyhV0PN2rmliTxaD3snyDGDR1_tAJYeS~z$Rh_NcwZ2ykyv@Dgd{%-Kp z#1cE%3x;c_itzn3%ZEf>p4i_070Ub3U_4v6ffMBJkZg#6{^J{$X~=#18n+$;9lat2 z)ZVODc#c{(54f3!6)3mDq@+`Bx#Flsbj*6~C;?$$&*s^V76=OHM2f6BmUTTY6WLrJzTl9C!|>*U@QPtY5#posF*5Ibdd zZ{JE50mZBnqmWv!`EI_1L(bN`=Q)c1C7Yu(SNi!4qV&5;^O)}HFH`uf=*DtUEJ^sQ*f~Z)2{pb0v zqEVO+O~TWQ8pV>;$w1RQIfEgzm#a{jCF8UWo9xtsW329sh$An}fIb(klgWnx81?np zV(vBr{mR88L zPof=pbBiUBKzNNKt=23Ax!=+ruf9KWceu!BEvYiJI*Cx8aeSKNSv$j=> zY!J;nZot?LAr9p(c!CzR0v3MrQa|nVKp}Q!D1u>TIC{3EtEhV+EjhRm|~G3P16E`6>6-c&X*noHIA4XMox%TmW(t*qF!->UGP-2o2iNR{*O;w_wSueoL_VIX zQF~RiO)*w(&Xs3BcxRQ{#aDSB2G;`wf?49Nx@xjNnmV^l z{ubus#L0?F(aG?xYd)A8zOoI=_w{Jy_Z}3-QXi8*6X!UTctCDWzj_bc*dQ5w zV^@@P=>g_?_3>gpUN4uhxYow@{qz=&)>OO2PO6mVqQ$VnU*cQF1un%t0GM0znn=Q7 zEPgxs?uQ)PS###;rZr)C7sk*`Y9JV|ma~t^+#70g)vCh*rpDOH7DWP!Vpzu4a87Yb z`j^=_nOfj@HUoQoJJ4Z?ljHy1G$1t&TLlgNHYgu~b_1xJQ2Zvn(1j7xM89Wh~6kkH$yK!T7|YboS& zg4WG&FBagB3>?KC4U$z1@Cx-Tky;JL_ER(1H%`hg)R&-G&%{*i!5kjO!mD^ep&CkN zY@$MYw_Z*c>-NpZ(~G0uj!xb?#X7l6duf~56}9IE4I5!*b+ctsoz6kUs7EhFlIAMZ z-7}1Hcnz6J!=-IL@eU22bcTe@mX8a2{`$!uHK$cMfK64V2?2N63KWYwmZCs?L0&8> zbV=CIq~uMa&^Z%OX?zjvQ|TxHpE8R8zkA96 z*rE`k-IAJ5NfBlHmI@{jih_@fGg(HEB`ROT8VSi{&cIbvvvh-;!5A+q1Dz}+Fco&e zxb(&n+eSBH9o0qkpWCrups|#-#Ujg4gl$+KbLsoknIkTJ{p9J5XSmIj&r?dR-P`4LGw>c*;WI$a*fyN2o#-D5bKPrs#0*WHI$F<+l4zkmg1PRA)Of@jw)2UyAgHL!^OC$(- zi&q(7D5rZy9}&r(hL6j^Lc~ss-3EDtO?oGbZ7_J(rYspMUvcN?WD^7v4m0ezv;r`7 zXf~76bJ!~w8%`r z*xVRko}GZI7+bKOmy!t9aM z2_Pb?Ky^9_N(k#@^x@0;q&gu+q>QpoN3u#ytrLsTg1Syi!L=%0rxwX2d7W4{PB)ax z#)={YVKrY*362fPnm_E_rihf;vGlYKN73Cl5)txI&21_t($)3Jd%h}Ff5Y&4u@3ZW z6ey~xNW%)fOWsIBwkRY}bqPvZO^>LAt}ZNZGM&j#LgcO%h$g&A%p;ry}1jCyQBxG;) zR>7|p-z_nm{%#Q#q7dTXCtySu)rCext_l*4%1wJby}O~0hMXqDH4u+SAtrGMC{3-t zwC8e{(CXttTDc(4r22bv&*=EJn=#lVEm6~k(kFjHfmUE2Ehz8^R-5BL;&chOO=ivO zH$%;o)faQYcuG}_y@Hu3e#8Rd5JT<>^4@oEwRBTTPxd6IK`^c;0m z+DMGN$elM8Lo~+io%O8*kw%n=IwC%!K&4<=OBYkIMVM+|*fvG$oWP`QWFo$O6(Ki* z_yR%`;^|8-fg@QH3n<2}F+wh9ICSt*B_O%9RJ4i5x1%u*m)Y+6@W*etYYd+_J`vDQ zsNHRd2=BD0CCUN*Vj-e&XZGp=-AxAm5DaS}6cn7%djyCVv6C?BBlJ2QzjcE_k5J9( zJ9sUqL+Li8RODo(}1lzHZ%gvPUMW@dYn?t4?wN)!_Q_ z6~eTy;A+y(c^pY2KU?CD@>x%o{-n<&Dut#x9KPR>U`D-tGGZI7xAdtXR-p|k3Bw!A z6!8FfLv!k!r#~~o#0q5Wi4*tUF3%TS%C<#g1Y?p8D*A>JV_p87br3efOHbx9R@-6h zCV@I4tF9;eAztk;cVo2;mZd3O`fegztKE&M>|Vj87jCea@b?HIRgRXG zj64B49Vdw=OB_*$|0p!CEP{5gx0(8b#V2ds8N5m1{)oGLXSi4~=e7cNeeffhttG@` zuz77bA}2_Ac2I059%uf<%WcapZJZ3})MKemPhNY+Io!&-d3-s&M(QVg4PA$)BwbRk z7DvO62l$m>bfXZ6a)ktM@ROtGRXE;w$GjSEot3gALV(p&Q#dIpSq(}krZQ6m@VGBA z66`<%i523*d!L@G8BcBo|Bz=%JxB^jl)>)AC%(NB1%{>dsGT1S@LY}NdT^8$pK!k# zwNpGniAst$c~Co|6sr~-(%--#eR%Y-OdlMj3YNKv1U%EJmKp1gTTaM0giCaFP2d#> z0hIIl&3UN|%WGq9B;#F_mD)MgXM@z^Crxv?fUA8}HEmpy4s2G>$z9H?mk=y{MHi82 ztd*#9Mz^UhBpex64Fb0y78yH-gfYW)tbAl78AdUQ2!{RY!f|89;JUdt#D$n+&F zJ`!EPUnW$WU9b!%$7{sutYJ?O0u8s>Vvf2xtJv6on=WRu2irxORmEdQf(v=25=ln* zUbz@G$Go3734xebJYs93fSe@d z3oaS2ecO}Lj|a*&Z`CofPTDcPXPHW>hBUn3mSNM~+b?TC2O*}=9heS{vV8?N+ewU3 zC#f2vPMXgdwxz1f8@P6?wd}gcuEt%b?rsvEzFKjXS7SSiaRqmSlS{00`3D6Ow;~dF zvVDUC(w+jY{G!|E_GPW_TWYw~YC>>38Fz zf^huWRYBY!$K~;UF5hTOJHgl2RukVL*-%IyB_AUYP&8(XAM1^x!nhnEXSySL0zErx9AEA9a{QkVFl{8 z{kKq`6O11px#RE!{|z}Sgrjgzs-?L(b=rx6iwhjbVE(cjpDWi5{c>T^S_5N^+@f@D zzD%wLSn)AXcAu_7hgmGh-My$DgE*mh3~1ulIjdRfyyw5uDJY=`f0vzSCeX0RB=iW6 zE+qc)ZZIH@4>GK>?TZN4#hoEX$A;nfSE!6rw=YdtXW0yJCErZ^TX(uk$rpsL@D2&w zRJm(u$+<{C2uZHUxhW7tI`4Xu_^i1e;c1K3%;R!Kej)ypf1yKuub>T}aRW~Wk ziuGLo{eH6jW#Wv&sjB52F=I(xc|szQNF;y+${($nHU(2tdSnX|oH>$3-RvMB@+Zmd zR?`rj=p(&^G2`XR#j(yJm>*x@sIrYLK#$xX5t?0oICAWh_*#3&WC=DIi9rh!AFQtd z0etxCwM}7X4`&9Eu*8cbv+C&G5!U>Aini=40ES%&_~9C*TY!lZQ5mW{U#BVZMCyPb zO3n)A!lb2gVf!Mv-+g(eh+EKQzaD>7Z57=}vy1g3`v?tsb$WTAGf?W&v0N%(ACp7+ zl;i9EDj*A86;gdUyQx@+j~-a+B__n2crZI-&f_4dNijYZ?gcb+A;TZS)8ju3O-7 z3khRO21>?V$!jks;>MFKw`zU&5T%eDFJZ}hih`0(w^*3qEH*D7B0EKut{8yeCb&rV zo<9yuWSsIgrz$LN$BP;%4%)$^DJ6i)I(8nHv#`}i>(X-ID`F{qNiqD{x$+nWVRH4mi`2vp1v;sG5m^`jI z-{Z=iC4n+lOrbqtG!GS_eS*$iWWxe}8c*6Ba}02~s`Q~Pw+$$WNdgO2E~zOlV&KM{ zX%AM(0YOO*6b*hx4sy|x5LJ)8*+FQJ>MnAy8`ppa331gQ1BVps7NRuc`Scqf^uSDn z;4&~_2#MG;hFIM!Hg1%ox`;7^=Hjiu+aELLc}!N=&~eHh6E1y9k1qATz|MMH`jM0) zkdF96eQGt;gUjfVr9haVO)5jZ51L^>W~4>xtvpl<2`bLnp%K#MX89nhBxz1+?GrF; z?zMiv|Kbp(5Sj-Z^Psg5zdRa1)(k>o=#S_Q@dzE;#=dR1%-!fr?=L1`oJd`1><(r{ zFC#9i+XhQ``z8*N!j$cUF}k<_x8+506AfybIV;sG;BgA1 z2oa6)Kunv0Le5-*ahD$i?0fBH^X_jS-&C{d1`lX9?>;&Ua%E5tNZp9&_d~T5`3>sq4rBdk%n5o^oQQ%-Lg ztw^ux**!i6yTOx>?Gi5$tHEqDq=%c9RQ`gqZFq;ZMnwTcrV3U>fHp>T|3G0F9$CST zVn|0B?vnt4kOsqKsM!(QK|;XoVA<|@^M12f=oZ;+iJ{aGJrlZsIPbEU4Y{w(^bWyVf$G9#-Ru&e4q8F4);7)h> z2yaE-?XapJ)W_*cF|N={{^Bl-)J-4p$Q+N50Z3d-z25>>AMLaEl0l+nP#3+n&U&-* z5K0MratB!^`eYviry)BFCPa83bbf||mu)zOcg*G(V5EHj!fv4!sRGUcqX9}H0=z?9 zLnrl4mY1LO-3mb=q*8Vm(ZQa;pq0+s&BMdD;e9W8it~5Ivd`KN7Z-L@!oy8s%aOrj z0uR*Cdhri>W!ohnI+EPwN{%?NG%i1`@WL>x_XhE0ek6Wo=M(~0`T zsOMIySp4wfC!N|BKfF5hX6}Su(<45q677bx^XmJf1ZNt^!q{>70Tu**?Kv}}O$260 z%q%-PaUX*&Vih&_B5dC;@zE;rGMN=ZB$Y;Xe4HM62~iBTFN!^AX)0adHS#CdbOp* zZeqfv@b6=XC#t2)HX*HeA4t%9oy_O++A|<7?W+GInoA*L{nbxY$?l5qoanLXIK>$B ziy`fqcx!`3yAfmMGNtasoG;P?yqt=Ma}gk6Yu<#ChV?^~474{5rl7s)Ckg6XdkWa;NIdUk z7Ou9wSQXwBkpvwgf-`c`B6wauB|0AHDv3nl@w;2}W@ktUv( zDMs^qu@upBC#7hfoyO53D(@$hGfFQ&2&ugo&DY-mM8D4lp>D;uKX`}m_PTx$>Na9~ zwljop&sn9A^QISfFcw_~Dx#Hg8ZJQ>vTwN3?;M+L7k9SHQ&ag%i$tQ&dV^1h6eQwL zZ6jqtnl5gD!{iBM{EXs;llpFY`i_LY7peHzGkOZzy8h8JsL^ZY! zr{@6Ul7|2zG)2}aj^1eh)XdKX`BLK0x8GVJo&Dak9Ai$8}K>Wjg z_;4ievc|q2I0oWSf}!`(>Bob^zG)4@bONCVKFvqRnG#Km0+BqX@qq~R zW!jU1+oDO|kF3+GdmKef9lQ*E-=Y=UlXIlUZ1~dE*g#*oub_5 zB5{#XoTMwc5<`%`7Mv0@XUe`z@zxh6ce;7+`S1u(=45;)4vNx3z&Xu_c|@H24IZ_z zUNf{hSKRKgZs7H*&`~!#chiCpI0bB9BM-vZ*Q@RR+}Yz=3&Crz@{5SiT_o>@t6!~7 zgzxg0eB>jmOWkt~!|<)S_#M)KnT6??1JiVq!EK58_IbJJeeHEoP*Gl3YuISFsF0dJ{Z>Re|-qZ`+WAq@;tLnb@ zBV`286TRQxio^Q7-^HPQ9HaB8lRUv6Y3sT7;q#Ih2R{*^3*707-~>Mrj(A=yB-Uvi zpvEp4&k_3wPgDd5t<)bFP?Z5t(CWwce6iC1mB01~m;#_dct;tEKL05Ps*m-CYn)hJ zp^!)$G@WY+E@x9*B%(IpFa2Mq^T#Q!()2%wE57n~!X-_1^565eSsh=gA)8YivJ-<+DJ{p(S!kEa?#E7P6XG2hY6Y*`6CWByLT`xCPlwRF&Vd&F}N;7*B z;kXdLt{i0F-Q&gO)fB_V7jWLV7tY=9)HtID4_Q=`21M2JNozJ`7ykk8!F|BZmiKkF zn2Uns3%pF{0vTOyRs_ICEKNHP^mw{#mQ-Tc2n8q)$dZfs2IPWw$kU+$Ke)&F z&@6>K9-DKrl3BCh&_I?g@Ehj9s9F1g4#wBrRdZiaG4u8Z^#ffnqE$Zs8v!Hg4}Yxi z9yQhA&_IOsLx*L)3}!p=Wm#484&iRYwcwZnUqjIZFh{PM4pqgVfBuZy4PB)_i{DTz zqM28Rhc6C5%B^AkNlAeFw4UfQ6qCT+EB;kL$zQ|)d?Ad0VSaqCLI9$0#tb>Q57k%w zDlvnLhp73l;uUKCE4g@e0)&-9)u9kxa0RE!b<;{U`EYhPEy#=7P5gJdoA?o3^6R3x z?%vmU;YIieL^yIP(oRZGO;_*|T0JyuQIftxQPe&pg)3n;J)x8!EQ5nXzx2S#JW1}) zOO%^uaQcP+w*SWl5Bkhk>dl(T4JKIVIQ)?YIX?0*Av!(my8HXN46(l4QMDcRBtcL! zmdU}&>J-Q+$*TA(dbkJi9xe>7@5EcI?oW7XM)cu6if^v#70R^=u#S&Ic2sH!&s;9x z%7k7mIK!J-MB_)a*HFUsSP;bAj&J0R{O{BxG1mF!9JkQMrZ!PzqUg)qS`Uus(>(pq zJfdv87|@QOQVb{}B!&_bt;bU>RI*^X_J^-Uj#WZ}8N(HVawF^sPsonZ;Wr%HXeelW z|BZc_Y9;;Y11_s4lHGHK#v4-|HG$)sU{p$HSb+MtTQ>=1t@FywmL7s?Gu4~5Fv zjzcA%bBAextE#-glbQ1=)-N7yE(m{ggUMH1(2@4-zH{#3sOE?g2Hrx4ax#V*>imN%hCXW8X6x zUtuVpq*X3MWRJuXtzg=-<>K4_`+pBal-4KW0I9OY2o;cX=(_zIvJ&AXyx&x&n@^gb z-Q3W;pr%L<6o&l)OB7U$Vh9W-51YBuMYE5Y9(Gqh;YYsYKQsm z1a*43(rAxaA9RXa!?!|g#7@Yui)+8GG&_6O-=q+zK85hX7q?GWHJ}f9{SD8e{1K%? zF$9;m@-ejt6YTn@K6brk8&pvN#%-MtC`^?^#g`CC{>1dOg?pWd7ssjJKA}avypBc# z?eV_%`8xoiRuOi5k7}}AKArw-Fs=(x`tzmcz<|Jaz zA*|%mF^bahGceqmc7uTIZQZJRCv*{{P*N-j5cIC`c-`c9fuS2m^ZB7g^?az1J9~Vc z`34aQ&Hi$lC}&DBC45`4QapY#TeG#)7gwio8I+wZ(MVz6QE?qm5LmEQDvONs*w^-~w=rv)P*cOE`=sk^#Hhf-o)0=Rm zYsW8e2S;cqagbsxYs$`Ey- zJv~%9%h*H^!PSdVR7mOpO(t->UbC(XTdLtdA@VB3>G_Qt3c2XoZy^D0lk&c$vz?_* zPUu}$w{-Tikfk0A|0E|@j3lfM)txu(a>(pBZ%Chm0~%7y@vnc?c*SyhbFl~nK&hC3 zJy34y7PYF%CQ+7HOrs+@vhMy*)s;G3q0{4G%%nyoR$-$k`759DDANKX4Dx`Cang~M zOc#SNd!rA*FRvhw@ERbk%UhzOS9Gb;WEk8J|UC7l!ue%ed zwsgSn>@9C*c9y1)VGnPh(R*AAb3<~WvAnq-E3=C@SZEi0nAF&$!|suIV^QVAg4(7% z>w3PN#xo}x0xtqr&VF~uxHUAbr|iw~Brvu~+J<%p^_7OSuseG!jF@8Qv8YbV;((J| zA3!~x)(MjbJYuLcgK0Ob!%>!|NufUSb#IW@Ow*EpSm~@H`3Ft&ky41*Ex{&1Y+rCp&0mIO}*sf5&7=IOW8F_VopC6QK#7^ z*T@xA!J|Iis_A^X%8U`g?QMOFQw_{vD<{5ao~kw;rIHnrG>7|lIPi0yjt_jm#G1gTi=!NB&pp*fB?dOCxd-@cA8$%x zTZ>LUl_Af+p@?)nlZf#0A5qLd_Rgj+>du~&R31WL8HyN-0m)p8xe1)#rY)X59Khsc zIj^X8Y?(fEgF4jvTVSOGHr)N5M{lvTiNML0aA!|KEYxtP1K+6lKd_5%zAP0>yi|z@EhhE>)19SY!W`iEEX+BtX$IiRlX}9GiZp~LFfN*AExj$DB`eW}*u@-y zh_j4{7^)WML5rCkah_C)I6xbrXp9}u*B!zsEyzWG8HiET$ zDxbN$Q+G)M?0UkntU}l3Ze*W(50B5G_u|j5Av}j zwruP7b2|B5s6Wbb<+B5pL~`Us>GLjwl~%rL29ZZlfAwj`0Xci?@LS;oY3gY@^b(ewVnEa2M3`aLrpmd$$el6Zlz^4 zAN`xfM*n7U(Z5*=<7pG;`*D1pWuzS?cz0aaMn3*Q#;wH3dlbdKIf1(_O6;!O061_{7DLOj@*T1KJwEWgacf$%tOMgM^9Lb z6Y3l=cmO!U90fpNO)_D}PZE%Ku(Zel06O8s^_AY!K^~7|0G_U+9;g2>g!YW=?XDk;ds-fNZaE$oKU6-4!JitdT-`oUk(a zvuMRc{NZ(l4UnbqL^u21R@WQL*UH|v=uqyShZXeVaig(rL7J~N6-353-xD@6Mh3v5 zx%B|JxmcnIh$v-|E51;2xPH}>LNO7l)Ur}Sh#aK#bJ384`17* z!S^BVs@Xl0;u{JEj`^^!Bmcn==A$HXLk7c-aZ))Ub~GL!Q=y)6eW51=tDo4MBeRLE z2|YkPxQ-6VMuC|Z8;cmyc>Fj|$bgszqhC>I;}&iX%`*T}80YKmgvV45h*8BL!P}*z zW5C(7NSN5C&4VJ}BdI%cS}@-SWe`lL%t3?Iv;S; zM|mDGX_6w8Bldu?NUBi2N&easkwsIBQH2_XdLj=%LgGmtUr0qs!{GI#7z`VP;&y~{ zgBs9u={YpSG|flPwwMZmMIl%gvSUk4hQqI7nh2VVY7O%cfQE}9@p*Z_Y@U{$oaXx% z`;1Q<}laubhtF|#9o_=&!8VDnzqU5RA09;&N2@m5z zcuZJW4IAP_iv?8lnNro2Fs&X$Szkrb{0<9=Y$F?~CFD6y<0E_VP|dU{xtMlLGu$t*5rZNmncaEXzD)+xp-Fl7p=9%?ve2RK8bm6T99goj{MuPXn-DGgFq>bE?R-I(Sq8f;4Fb~T|3ShqAQoF@JdjP?ZJP{SG_y(q8 zD1u=Whe929oUsw(fLEBX7j^6U3a7(pS!BeK>eO-R?u7nozO%S4RX+p6Ab8#U*QUiY zmbf2_U{NrpM1d^d;)>})2m9H$FPg_fp~7slZfYMyNuCd{j$(^wbcfd`1-#b?f9Ee*JHjs1ujlsDx~IH7EnF^9(J|-$8jL3&Cd33%c>Dz*koIa%ph?3SPa^sV0GE;@HTTJE^ zGFQufdMt>sL6O;^IJ{i`wZ%r~&1P|Vw^?KLV6o$I4hfL%-n4imf!>xdN>W~c?^97o zNHy%d&mOYxWTjmT%CuqyhhU5Km$TKn!$vQvyb01Czh(6#W(DOq%y*j?@eq`7IeEUY zTV;d6IUwc%Fg$yU+nyq(_uB}bdXnJE%-RfCL->3_<-jf)tiO5OTw=LDM*$d1my#=H znj3iP-3guj(q!aE9L?u%yvOH%R4RnL@<66=_QMX0TE|o2y%DPUXK_xcs8>%ii@7`? zYU zZ|5w3N}YPEUFbF0ELxIqANqa`HTww5R>dOk&2uOv+km7g|ANGi;LiK9pIl82W#+>eb{(J)l? zcoccBqz54iGF84SC5UBx4q=kT654j|>J{fSqF07*EhIYoNRsFA7?xy?WYJ2vum{e#Gd?jCzTrXnG_} z`+%4mMD63Vw1cPNPpeD&@R`bu*nBNG)5U2~Z4{AH(DDZK%f3Ubpi%ob5+>Oa8D~QW zw1#1Lnq!y6v66htjaG@+gAHuh*b;C!Yj6!w**t$u**}LD(zHiaj**NB(fBr!NSt){ zJmDCE%y8&_VLM{QB9Gn)CG?u*s6fV+hIbk~4~c1?=?zY_CDHuAgKhmiu5+qE_NWCt*C&`B%$Os zO@J{cMG6$eGky$?#~amqr1W`oRnGB2V1dte%k=5(qN+uyN`zD;T9a8LEBKL$Q6IQJ z2WU^?8Qv_L{FOFm1Dmb^rAmYo5f>yPhyZRN`A9}|!V9{7OKl3cf`OE(+0_f|gj!in z(V5>)IR_?%c0uFw zjqF+}opXJ;uj&4F*F}X=Zqruocj;+Lb#=cJ`+5w(LN5_Rvs?&t()WLZ6N@)TeUze01tRl~{4KExB|2c_IN;J{14=AFO zflA3(@?hiEZQ0+Qh**PpSzBrgu81!7no2}AUT(ZE?0 zyKNjeN++1?3|erL5t4^44c={>ByoQV>jA64DwOnWt3Nil21df|MuLbwNJQmg)_Q}5 z#C;%Skv8g3BYpJ5?P>Vn`Ewc{^zu?q+1z)0BSwq~?;4I;Z=mFlHE=k8u#08g48FFK zPP!*Y5Qn?mJ9Nu3TtkC&I`*lemraPnrtk2BBypt+r?we8kQISlszhHl3W6 z8?iqSi;;443&r8x&~Wb1=OD~EV|j9Kwg^^Qw&j=%aXD0Q5|Xtg=(!=K0Kp4ja-bPx z0ZksFpc|RK!PO(*9)q$~!jiJE+@LI!HP>WeBYW1?499s1TAlT1*&a$mMXVzM+n*0v z|2N`@r_lJjMa6gUbfjT=k(X8S%$><{h3Y3LiwW zWu0M9ZS7gH5RW!DO!}jpaNqC`Mp0o%=;~WXQ$xKJyNDhFQ<4k8ZZZryB!x6Q{v_67 zyFqC~a0%`MoRGXx1`HgO ziPg@Z`{5yvsEkd;uo69BSlSt*RG&pKLMmWTzDf`Ya-DC%EeR%JJhPk?CWxKs^+#i! zQrqS*#3Ra=^V>ptmhnN{oNRp``=;99EY~a|ybaUc z)i?db#Y!GWrwSWfS{~=psiL^wMi=gBy11v1_1noZbRCDzt*Mj?5x%UisqlN}o;hRv zL_ys%Z)sS57Aqz(t4|+x*`1hu%U&amy3U(s!FPpvFiH_VSxzkr&mP4QO2z`yJ923c zZ0=FP9(N+6qA^M7q{?3$;aVx(Z$W|V*$woY6ZF=(3HgS*%dJ(V=5I8w@7;#kREj-v(pIRPH%AKNN;5pH^r z%|cinN5YdME4c1B=3{GZMeGJh|Mn6G476en9fWm0x?Ta}#`)^{0Wl%+D}mJ<2Vq6J z(#S2pbIUF_*Ine%D`h+8h`3l%FlT+Q)sRJ^!b^q9N0L>Eat*4hx$N_G>j@XgeBUfg zvd4$u^V1q1X&X3x%7~(M{qVX*!bH4rY%uPsukY|a=nBJPDXLbe=1rEI0LEEnJJ}?E zWNS54m+5_6{Wdc3q-q}L{*PozXw|v>Cbg<2qy_DLKe6nM zo)YC;9ZvMAr+2AI_5{k8QE5r|8y+&Dhom)WzDFtvI2CR1aLUt_x}@*ZgP)FmYr$I* zWH!`WNHF21zj^eO=(*e;X+IEq1b2;}_;<0)Hh^h^G;7>*HNV}|U(e~j+>|fDQkt-B zth~IXG(2T<_*rcD81!pZmCRe|T8;CawEZcRO{Ukb`K{)TX$CqOXGnRPB<+x2pg)aB zJA3|j&qlc`&zo+IJfnC~UK*FS4>kk$D?I?_y9rA;y#woZk4xMlRDH!8 z>1*CPp?s~~EG^#Cbh++6U_cx^*GY*upx1hAn9DJA`BbAAiZBWr9qym*<%*C*6im^> z0F{pIuQ%BFJ-(|gzXan&S&J3$|8d()x;r=&1o-6F|3m+KZ-cufKmEQtA@nq7Vd>Z| zBZrU%^&#L_gu|io3+nX<-4K4orT44XJZ?Nh7g9LB#8HC>=Sz}<^+yPu?VC7@T}~{0 z+_oQ~F9F%M_ojO6Pm8zn!lVJGgrC7~yIR3v|_xIxf)( zPX9S%MP**qgp2+?3ruF1IqvFzP5m1f?w5#QHjpGPF6w+z8?vUt3^@}Kl-N45c1UER zDf;!sKfLVV&fIe*(j_xPL(z^u%&+vcjmQA^68%viCLGG^8&VjA(}ms#5n~lkw{Eab zt1vr+NyoQ-4B=Kxx3m#BZEqb{W`IcDw4-O(V0xm*vXJ03zu8T zzWC|+^TU@nFJ4tIe|lBDnqJ?$Ja|=IAH05b{rt!I0p_UF23_N_dBZ6Hf5Bm^GNqWi zdQG3bn<|JRVexfCpAeA>_hiQmvo;?fOve-w5RXQ7m`?R99?c!R9mgH zgMHZ`j{^?ek<>U))w2&PMCADGXbr|FKdZYQk+@_a22a_QYO!ENEG$%D$cZ86^n@R# z*iP9;Z>vT1h%ogSrT6RwmW{*q<|FdqHtUPKzbc?*wm>Y*wF0nwYGthi0pK)-imnO+ zms?mqV`C8WMn~07$fpdZ!!ckAkm)F};UPuC8sGeeN89;a2wi=|F22l$`Qc3m`@sB! z8$E)CMZgc%FJu5zF1GMLUX-Q=1OLn| z#fpRu4%-q4O!x`Xq8066{>D)j9+VSrUZWa)bYuRLa4z0g#kC`^XLC}9xL(j>v~w)7 z?knX8-I?mom=G`5Fr<(;HFBy-3_U9A4sV|e2UyLo-g!+#3+NT&R$BfkDi(I9^?gMt z7{h{d9-lD2+4Gs-9R;Pl6P@sS#|vvws0Q0L?ul_@XdifuVe|061p^s%wfSuM0d-2w ztcgHI!DNUR6;)5QhBx&d+#|ifAnq2s?e>&~kmo%Gi$*xLV)_AV-Mh&pZLykIf!`^b;7@h@XBhA{rFTR!TtqW+w7tDDOjx zHfP1eZTqvOy8hUc7*Ooe=)7jNM9R~jn#k9(JDd2fz2i_!8gR&njIe?_JSMj_Bt-NB zyy<2|#(DV9C=6m=5;ICyE|y-z0rb+ySx_-UXo&yJ=o*p7>|SXx#K-|CAr@;A6QYk9 zBL09m_2JT^6x4SbP zhFzp~L!P(Y2_zp6CDlW{le)Ky=6broWq9QLc}|5_4jHw|OjCevhqV;7ADy0mk}=FA zc=z51;?{bem+CB1@3QOXNJH+8nfAP`*5V>QhU}VZotjT|XV*NU^&33kWqqqENn394 zVcMaVN$4BR8~9z8%GM~@s=6|q9#$^{Ftmjc_*sONv=L$mP(XauPL~~u=$K!ZSpSL? z7YA-UWxF%=rWZ{FHV80Cn6T(3Y*tf^QN@jm2Egqbt~+}@1WJ+jmRQJ!`9;B`A-hRE zz=0WJ469}4xBlEG76~M*EtB~*GSmeCDbjb_T~&Qv&5#tKMal*>(~d9fwW(T`$Ubld z#SQse8qNLnk>J;xldPYUg3jwXN8%9z&gUc{V%Q6%RGX}iNh0xpO;Pe8g5-#u(Eh~j zKQ=jxWE!Nt(IAZd`i+vF_9GE`pjFF90YL9^1%H(mlwIMk_~nY7J>h4mW(Dze$mSiX zZ?2TNIQ&#SVGiMHm15y1FUwd4FHf$h!y&20Vb zf1aVPn$W>7^j9%AUNz7D*Nl-NTaT0qImi1zhLKhfMr`}-AK(ie{l}jE+1kYmsa1YH zS>hoxtR5s?q=W8oLO{GTItjy6e;9~|4ay^deLyU4!NX|J44a|f66iT`7i}> z>YeHID#l9!7D!)^9+8L?4v`X=Xi<56+d3w%28c+jzxURBvcVdlud_ZxNKOeQJ>kjQ zC>;sW|ITU^9V_Z5#2RbEMA~bE#F}iw^reyQae)#IhiieK<8^hE7@HhBIk~0?LDFoO zCIeGaE_K&AeW&`s{vIBR4hi^<*bS5r#V1|g$&5ShJ6&cX)^Qpj(rfyAtjjb&NO7(V zi69$-Z79$ZZR9$>T`0mzW?ahu&4JJuK%D$)`cDAo)YD%u7gEZP9+64ImI z0g8z4z{I3?fTF^CP*K?_{GS8rsSUSm8qjpx{32efe$ieq`urX|JmgNezDR9Bu<>=VC89r zBC@JMrIZ!CA5qe*j0_!8i9DeO@>6V7x9+P`14FLj5}U)>XYor z=2)cBVY`E%!)KTxj4C54plk~u1jq%w=+tLRNHDzbd+C>Ge{&uExgM2R2 zgw@#D$p^E2oTorUD;e-76$_M5_Ye}K@5Dy2x|Li)yoZt?&z~q@KAPQ^(01W-gq2E$ z5O;8L3?f%ii(3-K&oQb208BRdAY6K@Md2CF6f&0yc@i>z2g^9l-XzKpT7(=kazXziCil-iGkTL?8v#t zEa&SSnB#SVN13riXQ>jwGAn`p?Uxaj*f_6C&&|>W9_!iJ5NVao7B(nJyC={?XfRyl zKIjVcN*4yYYUFGovnpfpjM5}MGx3B-vP!YFDOZ1m8kO?9Rd+(|vbJ^g?GMMWyo| zgvO>dj@Y{_@tWl|odgkE2ktkoX}Da@ z;!p%mCmoW&-F>~vKtL=yP?LxHg8O$>8VpSXxl<|@k?SFxwZyH%r10>nbKd4kgE6JQ zZ%{97?g8S~A72go0T+xGSSgDaNGHeBB@EGn^|jo#xG#_tubVy!E9#NYsJywR7cMlG z+*Cz|Ly7qj=WOw;mB;=D*RuH)v7}V9W{JmX*217X3SJv=ij(?DoU>KDc}+bz0}Xm) z1#dY|jiinJD+=%?1>tVtX_`y8Ct;_g?Lt_gy%_Lj`3G4-S~S`47!6zu+r0EBNV?+c z#s=>;z}M{Kk(z_oC|`YvS8*Eh-X7A&psSL<+Q&S6<=97=bH2)g<-SY$D#^QQ2SI&a z(qjl-<8U1E-BP<;?<0faK;-w>khv~PY72f-pv!|yz znB?gu;y1b|=e4XxQM{nAbSFIg1rBejKH)8NvTeFQB`gZhX-Q^i$PrC^Vf@uvjp?wcz3)ju&ownqCm2Pxe+u)Gc6>Fx z{Xx!snDtI^zzhe)%nxttTigqA6-tiv4W@P+R`R|eR%{lJ6^<|kf|_fA!qvK5g6a!r zkHVk029NuR#E`Yx-4Am*yo&pS{Lzz8oaRNFT@*trI3dh%;0rg9VhqLoR4TDkg`znM z@-8+g-RklbSRbxFp30jxq0hMEwZb{+CaIfn3P)ZHbN z=Ih%-^>EBr;TOY{eW(zTcgs1;=6$oYvuak+_A>{NxI(oo*C6=I$x?`y`UZ2#eEyvK zevk$5R|<}Fkl^#d;foNFPnAFR7&FN5d5FN<#vct#06z!8--T$r!$pH-@I#QsRS5LT z52{#7omPe+vE>6ynn+NSTMaM}-$$$9Ge|jqB;Hyy!xe zEybg#u9fyDeLAmwpo^Td)50B4^0@yw!SPiW-SR#$kl^CTlVA8&F;q-2Bm$M+f8dCq zo2=%4(8kB{!^(}B047ciyP^#Vgd~Ty!s@!KE~d-d>Q7{YNo|c6{hHQ2i%;UE>UL@(-I0B{CO5982yP1aNoLW5C234 z*GLiG;{q|_&}H{0^1+#t)t_uz9ZKU;p@%=Q6}S@q=MEFs2ZsIXKYkZQ*B+KqJ5-1 z1g*yNP+XhKHJ|{uz|yD()!$w5KuX&FnJcN}MHg^+v3N^4tpx@tk&OYdUEpeq_RV-C zOhQ50&Yu3R4nVl*xQ!^*+~U+n;v)`uM85`B<$W8Yy^I6smotRNS4Q@ z7ER;;H`fzf_1&K#eR%)k#eO&a%euL*mVdcz_EA}-!hh(NJ;nO?V`D7J0v!7>Kk=#-yOfbJVM5NkzpQ2<7HxA zq=R81%@1F_I`|p>niio+>PWSSfuDq;Lq(IrG$pTnA3h!(57&yo%8Shcy~qjF+5JS1 zaFu9;Nx#gICK0s>T#PXQMk;LStD)kYUtX5974K0}ZI#w(O`2B_#ZC|=4QXeOON$p5aJ=}=HU`&Lr}l!2W;WoO+GgBo3v&= zIRrAWhSNmGjui9>R;SJF!E^Cf+%?BvGi|lR-ks>sj_JAcr3m9DydU*CYvRX?X^m@u zw1w08bdwUew`WX301G&9aZjQV2kFB!6gyMQd={-T)s;Xud|IR(uU zIS-1tKOYELBB!AFA{Z(3XMD%8!Q+lWqd92|9tQ@wv1^Z&-SWX=4f)BhO^JKsMV#_( zyM;(L8|kLrVB-q~0FndLjk>_5`E5K94SQEs6`7h1gR!V#ZesgxdSQsb15{A*>)HU$4xkg7g^K6z`?xNS_Y zL07R)gr-tTBU_*(xU3&mIA*#fmA`(uvPtx(6Euca;q0_K8+44;KG2&3Yh7*n^RoW> zX}WB-B}+%jv7h&_@@Rjo7mIp(;`bbw?q6fgPA8t%^sYSeq~=$g|HMB{UcoHLqe|+k z*#;MQzD=-3o8b)Wa(Zjm5-RCcP2!@$nS}0+ml=vu8G(+T)R~}*FH!9ne=X8gCt#rq ziG`&NP6-d;=%PlJQVHD&xh*Pqx*kRN#>ybDzk?WD(R{2T>VH??K?FK%U8IKxVRO{` zLySfyuVh8ZehMnuYr+|WoA$;l$f8C$8-&X5pAGZi!(EN9J`0@v_K!|*Q^*Z_e#ZPJcR|m+3#rWS> zv)T0i{lV+!NDjw?qvVraf75#8=PaP;?>uY_kr+t&!9+Z>!?0 zBvxNIBrpE!lI(-duqJe5>w{R-)MRcqI)=bkK@+5DBX)yDU0_(bBsCy*(HWRFW8)I^ z!LdrjG->yJ{q-2xvLd2z3Y-Fy`>6$DAW%4kW++@KfL`J<5rGc^&iA6$ zp_1nE%=0{M7a60YS9*$sF_f{tP|(tD-Ci|FD-;2fO4znkUbTRMnz4!)KziErL>+*# zeyY2p#p-T4kakAvb}vb3F3*zMq<&IIp-YsmoB8qO&p(L!fUszJ|8FRP0cJ;LEm~Bh zF#|q;hoG->jRh7WF-R9hZAVG}`3?4oE7Uic{RO7wy{8J0OE=j3gmuOi%KWRxD4n9Y~)Yza05=weZ~X?e_G*9D;gw4a!TzYVImIrm$WUwvDh01 za4%G3CNbAM0g5%5~>J?TzIgQ^C+=$N?@3H!cdt zuhoEcbJ{#1bzU-_m;nZH5wOLhtyT-V`c}dNbBY*eg;OWX^xL$>O@?)u$9t5(bk3gd zeU^yjAo1bT!B~7-v;>Q1(m~Q0jAGFYO0it5>UUr900`}MlquWADY5{|aOS)%F~rjt zFRC{>3r5<`p54FVU~)-M_3?0Kc?@E4x6$co)LkI!7$T;FR4k)~#R8hlVu4Nz{RB?) z@@3*7OE=o`KaV&&?Pnu1oBocup+R{Sj$(@Xj6w&oYLL&H4u}U-^fH>~aT-&%DwM&A zOho7)oF4jGKVUL9r{upr$V`_$2S~qIYisBCoxOLW_Qfua2;v5{OUL>u-bnIrS2!q$ zqok@jVDhUBZ(=ZlzBW(?3^^-2aUTB0B>}>pj@Iioeg_8&PH`WTZ*|LZ6Tdve(@E2X zReYl8jEp{S^IsoNiR+FdKK)`{v>8lMUP{54%zf(0w_Lug#i<+WIrZx$)itEmIc@@$ zFw@N^1-hi@mtUT-BOa;Uwj#KYyCGH!^!=4m8|OuiLs>{N-`lp~%_(15RF$^_c`6SEaKmAz0hAWw_S#i9p>w zSTL9Zl}y-108nNhpcN>Y==%|Ew-lc`8$wsulp2v8CIgwgQ$-2Jp@6Cjd2>G zDjef5$2J~21w&mkD~-y1jK&#<_G+ZCC}1*9QmSz>4)gt3Jml*~ zSr4kFjK{?Kaum}~WAVnSl?uCz6IJB;bf7ou9&uKZ*L(a$E$kBjejQ0cLY%6W<;Fd1 z^{vHC^HZdz%|gb-rSBJrpj+!cIzc?rF>9QItRGy=C3aukOWOpE%d|L<{^?Y1n(!7X zm3wh)G%~RiLd9bJy;%_uS+o5SyEuq0y;8yg}nf zwC`W5>h|z{1meTAz2A)Ch}G5zcC-3?tV+AP>Y8_Z2Y3k6`4iD2!om(-ju4%b4-S=K zp+HO)Y%YI?77Ys$VzLaI5F=EcV~cS67CryzyHNS@yHLT=rSH%p_ttWmBk5V)^Y3E2 z&qv#?aEW3ZJs)km4wcci>rfeOyB3w7N1LwnPOO)oN1LugWwhx!R7RVwLuIt-I#foR zu0v(C>8i;`bkbh>!qwG)%*KtwCQRJqs>-R7;Une!f12V6h@n>rZCz} zHHFb8sws@NPEBF7VQLCn+vJa1+vJa1+vJawp2}mjtr0MSVLm8l^PPGZPbt$ZJ~z5X!|rIwztlg+gs<$(bj3X z!Iz`$(ayE)&(Vqbg@ zi+%AuEcWnwSnT0wi?tMc_&qH4@OxP7;b@Dsn={&CZ6e>pVh_KE#U6eSi#_}v7JKkL zEcW1gSnR>~u-Jp|VX+6_!(zv8XIU0|@I5S+?r4t-^=wJLhsAnTLdUH-zlXt&wpVNZ z`yS@{J*@S680+`&uHVB{zl)`guy(w%vYsv$mv=ZQJ3pSfMfb|g^uN0`?oXgJo#)tH|BGJPDu>!`jNcKTQBcK>}gMja@SNB2?&ciD{a&hT*P z?C$J6o)8{Rfl)``y}cfzop+0yv+IA2U%e${5czvm^$1r>QH0(sOP~~60jyw0o)yzgT4!e zgsVCzm_0&hd0t^GYgAo&xcG88f^prALL-K!qcCskwp;U=(&3KuzZTsXbAQ{+#-N?A z)??7l+%me^OGaXp98JeKH?(X-pQB+Tu%P@ASm&EDbM41&%pm&MIpui^HIK(B5G*aK z<3(4GiIUH5$H)q-qs_c_N+cEv4AkH1c{K+0$}j1j3q@vlUliw(CsbSe&DqB>1~6(~ z>lLie3Cb4*srJVR5r3_k!TiLi{WNF9>&;EwPz7V~M{V%k$s4+rK0=ZYM;9ZoE+5BO z;AOkkFTP%gk`zaaF;n$#>oM-+xEr$wyBdWBB8)Hh3}gh)eEY>iPO^ z1nx&%S{Q+L^f+c-`0J>Q#LnKo>lIg@MI8Zn0=n^HjPIJ?{+KN4^?Fg^!Y0bJOg=*) zqf*0QWa>X<`=Rtk3nYH}c=EC2dL29-LGDg)+h|B#`Kk}#JW?revcJAk$JucV-Q-IS%X>Ak-K~<$B3>UtN zLQEI4Gyt*rP}R40eI030KqLb~bq1nhK1{z|(_@bz8&EvjYJ=KYv1Y)1;Q^FI^gBGr z1$U7Lfz;IdW-;drfHB&E-Zw(6s-E4Vm==CK=}=$;(R++43KOTA3ya1})~NXB5tuD1 zya?VicgrlA#bUZjsOn}q!$UD1S%VMyRC7cYAc#pXp@KTCyJLjtB3&HAZ>xvqu{tf{ z<-i6xa(8$wk`@t%=QD1;2R3?Ong~Ms{p-P?eDUJ_f~q;Xjje?N98Xv4O6}-euntk^)UB!ueVqTDcIG?t7ZXhWw ziWp2+z9KfuJG{%3#A9oswxq$RFBmk)$CH`5WS%xtF?amhHn?7zln)R6pjHnS?6gPX zLT<#Tt0~o0bU%3lg|K}4_q(JZ9LDYpReBkLISXljsLtP0_eMZ+t_fr=18lDAOGK zNW|Ea=K9I|f#8UY_w(k(A+6josXb2qzG>EYaO3Fm_~gU`qYLvCD4{~YADh5*t-hk_ z8T@7x8Q*B|_8X}1;bhVP{I*zqZ4`N6TFpGy{Xri^bmklA(ln;5)Xsm%~x_L%8TOXYYDhJ z5w)lUcYL^z9kp)1y+L)hbxS4M^jCvs1$GX(?ylJ^=D*b)%Gdf$5_YIf)sR(8uYHb) z-{MWO7DZM=359cBT4<#Ld~teevY7t+8%^P;qKCzjC+M36Tj<=eXrQ4KIB04|>r!J6Rmo1`>KEp`IoI_jWR1`zERcUhGNC@=_ zLdI|`{m5KYfE>2CXY{&*{-hgXcLSbGAh8?|H>tJPn#k|`#(<>6;R<=K%Sx|kCeDu> zu^lST{ZA^GQ`C>~=z@Z7i7?))uehMBWNH7X2iL^>YL6-^Y6%_q)LUgm)Mt0QO=WX60gY21u#hw9AQzCo&!2wVC6Q z&C2`LxC?h+g;NTM69elLHDRL6A(n#L_#dWU)yT&qnX0+My96B5g>+k}QmkN&aPWZY zM=bnK$Rk=bsc7l3lY!w{`z9eX`GaOQMM1h$(O^_fcZM+!CG`m@c-}>IM}vodH}yt~ z_Z_cW=pb2nIn4mpLPl-IRSO4Pf4*9P)siM zJtUa=MuW>ymogf&=ir*Lu^=D99Wn+EIRGlCO}iJeQ@9AmbM-F+iD(GV45;5B7A9J& zCzWV8dV^Pr7Q9=gyIFnIH z9lO9ho!^aXbw03nwR5h`U!b&aw^(g0=lfi*iJr9Ge>`|@%G4s4puUhEKtNUxVtP}B`q72zi^=_b;EO(O+vztcIlT?ywaoh5Mfuu5LGhvGccR#` z;1nm-gACHcURYdY{V~qPfCR~R6xqiaSfAr8Y@jd`E-0SU2TT`b$0byN4%T1v5l4(G z%=1p?;nR`o+}@XuLW8~Ec~L_Y`(Lyqy-&Y7-P`+Y1eEcOBWB&b`?|vO2H3NgxlO!J z^m&D6|6D>S$V~h34ld@TH+XxkFE2jyf8>OmKl-klW(_5W)UmVoRJYO&LM}uy;Wu0z zv9QI53W6j+|J(JZUd#(VAwsyR+9wF+4cP~*D}I&kj$WX3I3t9^-fY!Ux+?s|{S{#u z!$XVp%$u0lUwE@52R3Uo>^~>f9}|bQJ914B=l~f<83E9)B=TL3+{jlw=px^5=!OX! zMznIg7;w-2=UGJVU!LJ1X7?lM<7EEJGb*Pa`tt05e@Fa#v%m|W5hv!`t?6ewCBLzJ!0!7x(WYlyb>F+|(?9Hy;J zJxJX88l-N050aNdB}7|)3K7;HgH+wo6(a6Kgn0Ncf)$xSe-c!y6Zc(r$9ni5RV(&W z!c^G2Xl~b^aV%`MkMzX@3OAoOJkI{%Q+>C*Mb7^BA1E2MzedJ(fgPKDK6oGwdWAkf zf#MX}^DrLhsC}pq`pzDfp!yVG5@JSld~TO{y=_XuV~eAFW&p>HjnfgpUDbqT>})vfR9E-I&n zs&DZ$Y88}3!&Eo{mZwBeX*$z2AL0-t(nGRCLky8o5tK}djMD)CMU}KR2(eknUPx#W z6f&{`0tri8NjRFV=>gL)qp$olRP5u)93s|;+rp**798ls(0`*>4C%~Agf}CfwMj7D z$M6$At`ZS z0iF`u#j*bSg#7CjoH&Q%K@vNAbkLRH^iF$-lMVLN;snhV9Cy&qUE$XPat16-PMUoI zMF%oX^t@hG1r!Zfnw%Ig1q5xtG)Za<_BaY?I*@6iW^@+N^?}o*)sQS8?1HAr;!PSs zk&HNEa2f{d7YathW~rgl3_sP2EJF>GWT>Ii4B4d>Xw8C46NF2vmjwhZxHLi9+bE!C zz|!QdZ~}uaR6Hg8=FXn@DA=kKMzD0+4EW*ZVLiDd&l~A#8#moW?BNBIw9tY~ffj7Q zG|8%HbZe*#u|+2xT4JD78Yrn11D59b1_!BTcLh4J0dpj)>3tDJ4VNZ}QxWTWxhZk> zE@+zUm0Wlfi0Xo-$ciH#A@4jRiB*RhZ8Rq@q!3?|e zl%`KoVGtaMIlD>1;Q$gtB5j@`*CKWD7!B2gRNcB+#Wk$jPZv|#tdL}QCgQbV-*kd>asP|*-cF5rduq{*{3v5Zo(L#4;%UFk(t; ztq72{zB-D`&z6gir^OTyHm|}NS_J@k_!wG7=49+I#u6yeW3U-QSl|XhK4FZd(}1}B zp#fwFjlKSOloEiZt2!z9utx!xVfGe6u!zAZXjFR~ArJ~348%WP{GJC2L8!H{Ar*p> z(>!S;4QLj)X*jbOO~dK2nC0yDM5G7MH@oSyB+h9=v6+M;>48?WyYb|u3MzBl6kJ9u z1r}#$r$M7D?JJo9%}J%;GEyn9lvD~Pp)1R}a)Mc)8QCnzlz0|cLP8bYP{-#)v|%$c z+Mp>RZMcM#)E1eU%?W9NW@NM=QzBYm2?LMjo^m-MZH%t&Sc zQ?ePTgmf}JoKu<3BBys(#w7_AQG8IbDl(baAWgBV$g$oQWrxZ}C znF=P^N&}Q?q`ef(S)C1=X{-&JYKaY(XpOrJ&B^IPXC!rjQ?j~{Qrf#U-endS2(Sv& zClrG}byuyQKL*?!*D?IYSR%4CI;4{JI(g#ubVnzv0er|qg9PK8Wdb<}!C zCMMWfe^d3cJCFedpYOe79Z6Pw?b8r`gu?c(=CgNJZt~a5AiaNeC*37BdTW%VaXBf3ARqP7 z=kodD^zWOh{U&&|KP;>D{-#}^FpmDwV^iURCG5^i1L6*{@*%quxVk zLuDMKqnFdg{`9(LANk8O1+ZGT&o)cCGYG%TaOT?$3dR)Q(Gd27`wShQ>ng^3M|Zy+ zG{`KDvAc$7rZZR4u#-sKIj{`N` z+ot_jy$=dhdO)Da$-ydX;6ts*OUPU8|D1tj<2?0}1jokm9NP$`)M3msRQyW8OAs~? zC@cj^%vtUf(9WK?TZ96r?eys#4)Z63Z66PvGRuD3x%?GwhrBq%Rg(^XNfEO+BN8Zt z?5YJWh3Xqxg;>{osjLVK#Y5`ZhxvkP9+9so3W(1rpj6*1q#hgXEmxCCkR^_y3bg+1q$O$ z5p5qYaZ{QUl7h16-HREf5L(Pa|9w0NJOwP~&1Nffy$XmlFNBU#Y%kTMNrljO=sIU#dE zK0(Ca*@hF%44h9k*_&+iL^KKIlT3G~rkMuwiKaVL6HSBpMAKcWiKfA9qA(M27yT1r zaOWKl-}ZO*Zl;^BsFmC-5x!+YGaJ--(JxKad9x}F>O2FL2F*;vwyc?H>SdiZR-0PV z+aZYifF#hOqF@QJFzQrXO`YdR`mMq>JwT!?V71OgLBUQ=kH-_vF6G<+EGF4abti&+ zSu$HJ=Q$fV!TJ?hilkS-QVFpIYIN|vFN%MBYSzPo4GTThTw6Z^B?a9+<^;FsapeHq zI7fxhgfcCJd9_;Koh)Zb%~<-!v%iqODF3x$^mA~l|DFC~gd z{m_05$M9}BCXe=#b)50^z$&yOOCL4)WCMhEe z^p-bra-f!fxj&*xW@)+%k`>Y>it{qb{>6g|qSzpIu-YjK0N@5cdELLI1lidWDPBAt zK^xdK9`Sw@urO*;cRMWa$SS;X6~U>;V_d zC|Z|-JY#%nj_H9Y+EYyE)Zzx!s?ZE^*?X$>TZ;Ka)$fyOGm8(3C9jVU zQgg%SsbN{2S}mCnisNt!Vwd&NaxNq-)kZz9Mk3fdEoCa9N-Bccpka!f^yOW{9yslC zcJ{cQp;*jt>X$q**JMfx=wPXUC$m-)?ZE!Q9HW?K(ht=Fvqm<=bHOK>7|(}>E2UFN z9CCwI+68&Y91vsSvuv=)<7(karM%_Aj|L9HLvbqjQ#CYEo|JXNuO%e7MX>zR-hRLq zLE~q965Q~ViYQ83viV~HXO}pdtk|!SrSQ@tQR9f+nqfG!|1u1NmN~;PGFuF`epsu8 ziC*3A%Erp3a5Y*%DxX#g*;KwEn9I`h(jy0CsiR;og-K$(WaAGbWx))=R14s2Sqt+1 zhHNgWXQVAM1}0ntX-iy|^tWjbFfIg1sbR}hGcdNS08OTW6}=>oM=+fORut1v9?5hD zSdmOac_h=OqDZEpY?8UuKU2&B`2>?{*A$abKFPG+HO(}bPc*H0O*9SW6HV)06HSBp zL^H{0O*I2&lg(_3&#|yCM?tlv~W0E0{(11&tz;Y znRwBhP1kBB0M7)FF72Wup{8D%64eMK4kFZoHK0Zj8NV+nXKOWqL(y!A?IV<{i0M-k z3gr>$sR33Y5lYGD6IGrfO9>z4(rT6tMHlf}HZRY$d-{gUFqMVk6fR-i@ToaNjZu_N z$Q_rlTF!`(p0;f`r>iG(IyW*bF|6s@{gIU zBBiynFc;NLCO@^Pmj8s)NVQsm{FD593Qnb8A=L>sl6NNsUPvTtHAZ&(#Pk+$u##?Y zXbxw+llD_BXI~%Q#1dGO;uHhojZp6QfngjXLaGEwH zsI{tuRK7~%y^>^MUe_liE52e+FH0sX5b;K z+>D@O|H#C5l)k(;OED1J%L)`nX`AIDx&LBG^nfG72zx%SZ%RXDiE-4`rD2uC!104r zD=eW((y&mJm9)yb0f6fv{Rd{1lqB?O3!SUw^>qngZtbE7W>%j!*w9%`*LO!9(eh?c6Y}!VESJ`dm954!ArDrPKpLZ?0?dSp;1$Xh z#90eqj1e=3mX`6w;czKm9FCMTgP4|daL+?A84Hg)^bBG`QrgNGs8T{1qtPs0SWKF? zc-n!22F#HTT2kB$+o5xwW;}ZK(i8^HU@qP^ZDzk$ZWfv`<88}$$jEUxj~WG<0?cbf zi^sV$o9Pgj=HhLmXpR6zXg5@d*ZP zbV~<&1Mu9+6}&hEg~851V2y6&i^FjaLE&w|c$8Ckak!mZcyTz&F-Wv6T071;2) zSX+r&96LFpzJ57I)YmV^iaKQeP=YefKrtC-8zBd)Q%q4K#2l|o%oK%_lTsxx21*Ew zv1%MLky!%1I2qQsmb!w~-m+u6!EM0t0J=w7}X@)FC02E$oZKapJx>+(zJGt0LP!Nz4&K zOU!M=9yVcUH51whfeCG#v^-u1&l?(RkgOVO3sFZ*8q8MU4HtKtDT5ggpD_&DaB;Vo zFPJU=XOJ&5Xv3vt+%1fO@CVKnTHJwCg@w0;z!+%5l?$Zdss++^at@p&SU+GoaFQ@+ zTSz-*ieScLW(XT`3z-Mc56pM)^q{fEi#q6tfS7-Yt3VrUxB_h(X-Ccw>SVzPiMO32 zh8;<;RXluIA-ZPEX+j=J80^X<-Ut=59dBb5qTM4U9x+#_vlH9M40k$0U|@|ckHr4Si;yjL!Z zDJG!fe?#R2%20IzWwbJZJJA0FgONr^Io9)o-x#-V(1yyomBRlQPDK0Y;Ev(mi}mw4NGK^(mr zF7V)G0L(z}N*cp$+dOfpjMQc@y$*?O4%9VT(0jy*q7z)uB3YqEK;%na*pCb1v6U24 z1$y}EH9yRff_Q-kW%X$*cRSX6Dk*x-rxhl*<(?@n%( zztzbX_ICEBc$l)DU99W*d-2f1?qtzSlhuiCQ0QJDq{Rx5#xt0Bv^df6H%sFFURGcE zOl6!F-!kQ0)zO5b$LuQx@>V zB;oT=JdbyCSmSNLj^0QYe@$zpGgZT>I^Q{J7k$Fx1MmTL zwMY)wUFD<6f_tFBo*W=6Z$deg`JmQqT|J9~x|&75gij}Kms%1sG% zhZ=SI{gpIzBgwqM`yKD`fOk1EO}VQ2B->1;@A0s-!N|U4Yr)bamu`oc-V_QSHP0)G z$SRaHc?DIVeW#JsRV883TIz+|JKJ9_I108mJE1$Wwb>rHuGfgtI0DN)1x@}D(P?rT z$0S~*tNihEYG-)+;|8yqh&pqbD;zU6NJZy`!?Z+2WK!q~nKG z?!_US;CsB9b3L8iUsSVAn`#RcY%ML;ihW>y?ej}JMa@$bJk9xbUNvR(1fMM48B0mo zK7PbvuAq~D#lkQPCNxT*UH(xuJWIjxJLk93GAhuQSqZqJIzzoIsO>D|#Zp$3%FR9A z_<%LaWg+Pl;O4^%1@U#ht_3ZyvI4PmU@GOG47DKAwLJi@VCY|aeTJJZDq*jm;Ko*vXWs@fs zXf|tN!RFE>8?2jtDw4p0%n4wDmhi_3(UN-LL{)*7NT6VIB7kfWe+`#ot^o@;V+XvX z?I5Wj3%D!L9DiYd7vj<7G7D6|IVpV7ncD5huh4~qGD(nAu%UCJc;GpuVCtQINfz1iw0OzE@ zjIz0@8?5hm@q{4pX0hq+GLMAyv5MYh3319y!5#{;$-NbU#Nivvct^>VZ=?yiV8z!K z3$)Cv;^aygkG zSmG2Rs%fqWSWiSn(6IAMv;Bxii_?Q!pPkq(I6NUV)J}>5UaQ(b5xh-29pQVF)4+=C zkN{ue;NVGd4rPuN{=8H%3{3kx1xp}9INi>jJ&S4@RFEuhn0*_fcR;ez5wJ*=F3O}x4}C_ZXuiwg zwaIR7Wx!cj*H>x8ble}u%*ACpd-{ML|A^Qk9;e3p|Q2hf71%ic9kM3IsH{ zffC7F=&VRKcwQD->xkS#fhaC;P7)isOc0qZD3rv4E)hk8=VgIT^x(;yX|zFeQW)4G z5o89TKpP-z0T+m&q4R>M=&Dp9J@}kB9ztFs9m180)JMq4~r)0?_2EqxS`)Qin zMK!r?7T8^%H0|yFs%_Q{*6RDvd(|$di~V`EZl}w+JQ*N=FvXG@~Qc}ysy4hb8P=s?R3%o^6VqMYI|Fys05oN@qT$mCq27o9Pd2) z-|sHoWwU8#TS)h|>ed+Yl!+PJ#6O``TPhtAB|6>fuG<=x@+~_y*vB%|hXn=IQV-U zV?w^OhqGvww|u6!|A`Mx9U8+8V9R6NI2nSIVa{QT+j{wzTYB((AAj3#k*USigTG#$ zeZqR2{%-3i4$G4XWjt{T>k6(Si^T}UCJV_K?IEOh_J}T}28!fY;JqdoUuO&;r~y76 z)S=V#bpLgKjjY4|25Lnbb^p4a*OSwxx!(xH}=XSH!bGnD_!aPh@L1BoI z3yG%HbDZO+i!mRNDkQtK#qVR>F%+wWjAvReyQ}8D!g?@`hxPZv*_X>K7}0w7$7V_q zMY54~S3nL&ysP%;^7!N=Ozv?14ky>{6PmXnbZit5Ou->?z_t#oGoncax3ecS$ro;} zD9}`=c|*-MSo3eoDK79y3~YgYoPNE;Vd!-GtoM9)Jj!c6DOPmC7ba&Tm7IVf*;|L?>=1uZq+Z?KCJGn4cJHCrfNC)xs=_ksJ#tXa=;-g5?La1miA#_fW6j zZcMaPS#%NUcjW5zC~m^L5x zw0h;DT4jBw7EGKKr7MqxE=6Nv1zOtrhv`>#3?BE3+_35wJMgOT)x8wVKu~&8}h{A-GW9 z&`xB2-B+Qu3iVv9@X$`ht^6$+u^NcONUs_Q9CZ#V#X!8wLcGdC{FsIKDGTv)7UIBL zqiM~X#vD+tAk?K6NK|RL<=5dvLqyqVh&-2Q*G#)vU0*e)v<8Ycr{mSpIZk`WT*3rp zDW>z|dUY2k184bmx}Ls)d!?Hpo8^6s;c8O~iQq_+6bBMwG+jvEXL#Q>5AW-?TPKBa z5fP)7aY)5C6PM-!l}%WLvsP9{2%8nc*JDgE`hZjz3M=jL=6Y)pPoNUN)noo4?@ojazxsB1?*|R89K7rRqP-_f5W4lWT^C}p-3kYG@;2T&Zai$wkdDFf3I=wBEuY&iqcaC=cOt^JNH`!n zP7L?m3E!XuLLFPjLmwV_+@@5&#DwqRNQ7c|>}tPN9@a~!o8YI%<$VKdnB8TWsb1i| z&9_B?Kao58jJShtgNEljGb}Xl!RtJ*BgoM#9*fZMJ%>eP3_?lFbO}B$0?SJSDXMO^ z$X~_OOM^5|li3T57%&sXPVTaKS|%ICfM1YAXr9D6J_&95fn~7qVv?w(nHX%lazcEA z;!xz>ZXdX;K&;oraB@*`TO#3Rc&~W^JCDi34YujV0LcTES|w{k5{=PAXx+flznxFf z%afB%6cLHFT$!4-pBPzgkD{IIJchiuyb|s-3F`H;MoJ1n+d%bl!#n92>OIhbb`ix- z8;92{n@X%@JA3E29(9gYMBRzGexRr^^t7a+R}JU5c*;=N1TAK9jE~iNY7YQ8TZxD} zI&OCM`gj6`qwW}<+*cF)#CFU{C-CADsy5LOB(522Qs79>3O=Ve(2xiYrA$`h5R(<< zLEkNDmn$)4_c)25J-%QJvZ9?j-f&26hFB4kqlXEv(Qi12EtmtNxX~<(86{ENXpW}< z_r<_|pEzgUg1ML&*BflSL^3O8Bb}o(%RUofo5DS1XVm> zccBV8nB5^w#>q$u2Q{0U8$MhaG!xFuA2$yV%~B}+<8&4CTUfRtTPDC_iV4y?#OgNA({KgfO!`O0)@4v9Z!>UwGZyK(O04LyjN-W@*6Kd^d%8g!2k)o`C#c4~ zBwU>W5~q{H>N8N{mU9m3Z`HSG_wMYi>Xo{Z6CA z#vBPqfD;n}gu^&o@j(nBoQ6O!4#5N)0tw+vhzTbCeP4CgOwa68ch5?Y|9_>L?yi3I z>eZ`PuU@@6+Fv{5^-3{UWCfNsq1%Az**JZ_t6*LM03rj~`%5O`Wlx>1D5n@H>b-Ok zwt0PyRFuky39;q_DXMZ4-`A^)S4$dgZq~|$!xAXnYv{Rc`#Q|? zFtHhb5dI*%?KrR1)S(4Iy|GM8*oYoJP|;p3`;rGg{gPramt3RUGtwWnDa=m$O)T@ek z+~QDANrX{hqURaIK8ew4n{0uk8|dOy=(kr68yCYhs0`J&W3tp&7&nLiBZzeZ>-HA9G+}yj-f_Ep+TG2){G}#cs~z3SaNDcPQk1F5nd5 zgPzwlo<{T&GsCz^gS@EZmF`gnh?&y56r9|-sEkuUhbBig_q8Dt4+Z+~%dq4)qW`Y% zUK9zn8ZfR7X_jiZ#NA}ZB`3|2RQre!2TUDTSeG^OLR>E)sY0ACA*nXSV|oJvW2(T0 zR5A4)7Ag*2L5^HnFtw%q*KF4R`R>SGKoeC}w8piqA(^yfbziM(@)K1F`RL09#cR|JX40KncX{ z^n+>5#nA({2^@iMh6+}Wk2id-xH|K^7Sna^09W-}jZZBeZWn9wFF5AcNoutlj1e`nOJeqLd8-|5&*9Y*0FBYTflVG`n zUI7q~GPOJ@DhWJan>TD|$-MCE%%`rm4nr&b%H;TP8OqzYK;o6DK23}+-LF`m=DN+V zA(b_C7JN^BcycsX4xI*Xu>JfzqiUeOL4cc45+2Z#&|;x(#h{=9v$FWgXbq7(pUMDl zIzMFIw9)i!lHcyqj?$oE>soE{(-SO}Qw3w%s9ncR@4thE^4 z4?tVzeSL2t5#7EzKTT^H6C6w3Boifup<7P&qsF)snPBhOZpRSZ&1T}slRnGX}fqpxFqNw#Y0YgH0$v6@>V-Kq0DtMIeg(Qly zKXB?BcN2KBz|XIRtN>Rcp$5$t@7;TOpKqIbNsY>5WaAZz1DE9U)*o67%=o*OFsST4w(d2=~DS{#xbFo*c9daRS8tX8}Cf#qXYIYE7 z;$u{MV~W^WLGM&IZAOySBtFdfu)I8#Zw=m4+xWpOS*>rN&1O?=7jKgv_QYHossp zKZzB<15qUn0#`-~Lm}Q@tbA{}QgCf=ZAF7g@AwTtQFS>^(pCF(&A{fYlo!D35zNVJ zh4S*kaSUc)b6(pAubaeP8`W7&Cw;hSS|f68?|6t2J4F!GeunTBGUhT}UK%$SB}kGQ zd7D8MRWL@-k=J%HDZ@HsmRcvmy0EL*9vfCN8l7gfg__FvMe{9ANg8pk4g0*>4#lW5 zZM;(s6ph+t9ED$%&C^_w*!})L60SOT8V%`}PEipFUET5+4?L*E0X>i5N%T{P_G*FUd9L^*1%B;8Kt3l5=DYH#!zHLoR6_)T>v(U*Z^qcj+X#z z6txXBM4zQmo%D<>Top2^XjQ<-f>j}-ixmKkE>!hUfSu<@WA+)t#gZ&yfLw#b@;gp%}zP+JBZMwOH(p~#tc0lrZGWOc`U7$z3pyo5RB5Lqh%EAy6w&2wk|etD0k?2W)dGjl03v_{fqs zQWRbAsVSn%jjw=m^Q0=XGVI|IitSr&mN?q{_C1N(8fYm$g}s(CPG${rTrFicC2gDx z6%1{6%qO*!TYbXVS!s4mE4#YHv9mPHO0-^DBcj-(1jh@l=U<;XcBX-r=FdfYR+zH< z)(_zeOU)vF7_5=`kv0?MqnmiacIh{VBErM;_KHS z#Ui(EeS3I{!1@w@A+s;!v6GdGdTXfKm^647G zY{PFS>O0@E~!<&K+Bd}S@+GM9`lEs*5aL#|z^z$`M(ZtGk znnZ^#*HRgCBlyLA=W)T28Yx|ZlR(OcnvjID!0Is zJ^45ZGd^ND8h6Mv zzM@2;;E4;SulFI_JvV=aeAW2Z_r{*@WjMn?6}_RA8ccwZznUpC_kaVN)>AeUo-Z& zq3(9$s{)8Yo36d_yJPhpXOnubu?A>zg3D}FG&)}jaTHPfQnR5+{-( zL7hQ`O+*y!eED*oFOC!Wc2+!jJFhg#&!n3&Xr7qU)sxs_If&!UrjZ=86(c2VtY*>) zY?DlS~BsIfYcADE0sMC-uY%jH}=^i(Sfzxt+0T#7C)RVLU_ zT7_?oF6I!Qtn)?-*a5Ti@>n#Lz3rZ!Kd3fJ9>qw>TqhS4p;NHz65{997ik;d9)Dd{r^mI~>%jI9T@J$OxVfV`5zM z9hxTSHS4P6g?@Gv@oCVdR7*zM_eS$=vm<-siAGl~VM473);lZe3s#U!oB?La*LMt6&Kp5r-n$FmP&32UayG-j1#xMi_`ySkFxbN89Q(@+>|N|#fq2FT1{u1!;Wp5FOf|!QfhXo zV?)h_z;TTwockN9rZrVp@|(;imckp$mRPZA;W)J}L8BsrK)dLZHJQiLQh_;5(FM4^R zM!txHUX-sgPDY?7s)5v6+y&G$aj+IDR~9R|A)LcdHAxEmNLDm|Fgz;^q76nH44R_> zx2zd`c4b%{=t-&uW9D;?K3sLaRTA6BHdrMLMi_RpH|DJkg zKLb_IQ|(I?w7m-pqp+hd#K9&eIciK7)pBZG`QGJCVpjSmFEYyiP{fnmO;vL=GQXP+ep1 z72K;G0$Q3Z4}`P^9<*VR9%LAqEyq= zWZuk2{A?~RTu1(fFrdy7R0d&eXiO^(;Fvp1r0uViMqyBfD}@HD)9d+SXI9QnOqPq6 z?Z3{PLK$S9uhR^)W?fP3M=KNu%Ictz^G0CQasoU$O|abUN&^0Rt&~wa9ydOdbAK@)B9R`E~KM^ zPAH8YRI|!BbGSB9Va&B&iNr{tWIG02)s@{Q zO;um?>Y`^8_*6w0t)i=D)Y{%y9*H&U0x70y<^gsR!Rm1>HGz*vc4e_}{iL6)PD@3kyEI=Oo=&pd#J~s?IHxY-RKb)f zOA}dY7SwAoaqw1K7yK4}yNXIie+!NZrX^U(Lfm7KHYE}AyQrX>a?4p_gLpNuYQj_1 zRWk-np<)W2Df4I3L*vhuL}(O@yYM;ge0B^XTRse>gu^Frnqi@G!J%;s9 z2TQN;Fh=pyn6P$`TzJE2K)_wjswiBJS2x0lL3Vv&!|Z5lc+fGl$btY7NPI$wI6ps{ zub+)+tq@-N6GF-bhv0#X)N1BR_0pdpQYhNfuN|*xoDfo!pQYXr(^?Jr2!h1K?fM&d z&4zD{al(y1QQVoL#{5n;z8%xsQi>`0LDTs5QxvJR;MgU_1fP-<9cP}U7M0VKq{#L1 z(Mj540X2+A7?$|bnCiJ2M$DIAcE#SZ!yH55r{XTR6e!S1AzW#l4^RrkrjUT5ARr$6&taN=UKm1F;*nhxy9mQ z!Q>fSv$XXa3Q*^X8ia0*M7uV-Gc!|HQDa-mc!Xs^# z^-R*TGVPZ2W89z8VOd|WE$gp4Eo%~Sq~~eGy%qOg^zr-$-hT#h-v%zH+p^y4=fgZM zNBo;z%lf$wI}V(mnq^r(K$wkmzeSq+5iY>m+U3#yrnF_<2bf=FENdRp{RzTq z;C~Kuz8>_X5jG;c4S6t~i|gf}YY_Op4ID2*xF6vXr1>=BmxB(%@$VMkeG2h&P*y&l zi)Yrs^O467fO7@%X8i5Ib#Wja-dExJ z0fd*&w5+e;dI!og7y0}%-n|HMy(sSs5&jtAK7=nLJRk24AXHGsCs7tn!~Y_#4Q1r> z`;hl3NdHf`{xZZ@&3%oAU^WF7sPoG~l0^?WOIV`i;$WFoCy07R->*aUT;~)`cT&kkq_cNf$Oo8EGzLwv=zL&W}9WLngs7B zEKB10DO~>r;TgOu-DO$tcroPo8jqG9z&^3mvTj)hJh=V_;oi$F>z&(?_I#vS;=x^a z9^`wsWnHxsaGStugf}C2)O)`xHe1#>LNM-kfVq2(WqlN3r~mG$vn}iMr=yN9w5&eh z`y#?K2uXwiWpwjs0z zK4;+i1<)`w7di)WqSOB7PRklWxMl(Pjd1tbsEbq3mI1daUxU-|jn{A9Vp*5&@Zj7% zkWVOk4RZuCHvbOG+Vonq`&V1mAzXLd4w*){2hVd5zKZ)Fg0`b*TV?!K)4#=a|ll%5SHoqM_j~BT*vd*KEH-zG;kjW=P3>FugCLWA$++Zp1A%w zSIZ|1_a#XC9|$ZPdC%(>Tq$eh<0H8K5TP4wx(|W4PJ5|$y~=++iuaUDrYFyclW;66 z@x2^y)Cts)jAuPkZ}Oh{g1UlrO}#+5(0ryGya(a${J3uD3BLOyT&Xj({$L;VPCPGx z{{0QE#LGOHAM*<8B)-#s#23|0wJpN-$#OC+%X$@fK)PrPU50!~*Cei*CO)%2;Pq3u z{tE)r?p^BXbLt|^kJEkq&iDMIj`HrHFZ?oSoq28GorbvuaqkVpQ}?|Jfq8#|_o$O6 zaAp5;AHr`K@XU6%10j!~^C3-N#WQJUzr%795Az}(>NedTsr&iv?YJ`CXK~eSQ_~hK z3*&wUn3Gr3%Evs&i~WduE5er%i1WqJ*L;`8mH9F)dB-c^!*snaE6dJuQujC0`@u33 zFaNed|NaRA`Aj;fk98lX=^$O~E1LB?#IYQC2K%07^hEVVlpW#<_C*!+Ngn}GF8Y|w zxbi*w8(#TGS*M(^F1#4;mt}e6h-H1rhyALbb`saS{QF{+jje zY|rci*q*h{qfTWzroLmD*e8>pq?zUUzoIqBSJnaTIo2QV*+!|yNbj5O_TngWFU0+~ z1`yr^nZ|WB0^#49tG6|04A$g^W!#15*CX^ZEpX7DrM(-pTeW=lY^&L-*WmvD%l0a5 z@9EmCfOOM-s1~~Rt?6*jV*5S14_{?-{4~hoZmTA~?8xZ(R+m85Of-7P9cR%j? z0jK5QW;`>EL>z5X(sC=VO#fqCnV#v0>p?u90h{m)ykp!9-1Ex(nVz_agLdQH2!De> zJU_&B(Rz$i5eTpU?!ohy5YoM{K@nb#@CgLkBFvY#nEu+VW&IlQK|GqD$%XuIMpqzRUlI7SeNkMJCWa*WEcvX-@;ZByHa9xwkP zbWr1X*)&GxIGSZ3e;WBqJ+uy?aa_gzdk^AoL|_|ddbWGhc#Ca6?wE@;NEYpZ3QkH9f+A7tg5=fEe0`+c~65MeXI z-FSY%`5sQ<+KPJoMZS{H9A{GYiIZbvj)UI}x~MxI z#Puf#jrxAxX~+v@(dE+g@Y+}={Z5ySe9`5j&gT0l-5k_yT2G!28qNTXhfWYJpOAiCXJ>Bl?lZWa2pTA# zltta=2jxW98R=x1O|&-3Hsy(O86}g%$3K>p_73??Sz#RQGTL>t?`TudZlRsRw!}Kf zq5MHRWA2&I1Bm-J!d~15%fYl-*2qU~gHSI~cYGArrx8AZc26D9byhfUwXPwZ{A<=O znGflvzU0`DGR}Uqv95I=6!aqy=W@ttaO@t|mo@fZO*KyS}oPl^< zpIUdYtos1RH1tc8R&B>W?8oc5h9{QR>wvIw5Ko-4P>*z;Ew@h~o<6x}ab-Da_t6fMzbD%-=;zXQ-^s}DYS{kYN8UH# zYUB9{gq5J-V8C{}3(p@$cpQOsbxPpf0Mf2PU>T?f-i~)4NBAd%XAzdc#@vN)7s6j7 z5KjMn7tc2G?M2XW`bwV~{a~zr#?cQ<-=Tg_JB)Hh-x=kKa>RF(E$SxPfqbT)Rr~O0 zkI^4TncH^oEl8-zck0N1WsX^~RHcTYRyX?$2?(5`i$x=ViD*1NfThk8k;D zIIdzoOv69Y&;IDo5U*ufw=FHxoU`P7DEn^G&2-F<^O#}!C5~>P-fAo}+Z*eK^QFw| zkNhk9Qr%ZGo_d=4mG^94O{RjHe!>jwc^k-{c+p650ScTsg*PKTMgR9$>xD zA4A>8Iv@_(P_&oGW9sdo9YZ-{y;H^-?FRPkaqU?xZ%d!=)$@h8GJne0YSiy_cqT0$ z!S&ory!zC#^$g-}L>%F+-sQn%aD51IgkfLAcYlsJ%E9HAq7TPCeMW>KUc&Rre3*v$ z5HHic5Ab})`X_zF!FbL`W_Ek?mce`#9YPdD!aP1LK12fO4+kDBqNSwkx&;`t7MN*&Zmrw3jH`tY6(G z*lyTHC_fxCP%bE!)E{gk)FHHIX9%W!&7h#M}e6*1`*5{c0LkMh_#CJ08gR)8d%rmZ?+L%A> z*5jEQAy0H&u+L!`z5yC_`AHk=N%M=(EFb+5yl4N%d6!1I_%8TI-vn{rhICA?WxP?( zbIl2T9`vJ;U!+6Vi}us7e#vvny!NwbKMZLnz5iGItRQdg!=cZDGC*EweM+9N{7)n9 zqX^{5LinS$Bk-QSDPG@(>$m;;WqWHfI)Zz?Bg|`FXjvb_^M4@_?<=lEdqCW0apg1l zm%#H`c-C@E*{1xn?GQ)M5A_d#WnN7C+pFL^M4)UiKgRKo_?Zv$V0!wX==-AHATGi) zp1wzxQ{WoZTdZ%^8)^F#(rN!B>0>(j`j}4FeXwoO@5Vm)nr&V_LE4!=>zy_h(-YU7 z*Vg+DN&m+Yr}O_l?i*<%4F7Z+?RY8Hr6Jsiz<8FA^~x~?eQV?;eHoNP>KyIMBi+;i zr0HtB`vua|56?cE>nf;g*@shZw;+(__W8B>NUk{w`c-s$46Z|Z7%(i0E-&emH^SeH z5KK#2_)hSaRrHH2xlo{javcUJ;8dB}VIy&t$(#+M~H@Tb7ZuYgy(THs`dNPS<@f zudq5M4RP!_`awu5^QW!BI;Gq(&*0zoeYG(MY2-WBOBjDxMlI`{Uk}PM)0206&-r@& z%<{H6cTXIDKRA6nOmF2qTDZoL{VwA^f_u{S@*&6z0`K`p-j@7#zxJ=JL$*Vvdlay| z{%Y8(%M7mPjldSe^=bqUOYN8N|BCmtFQ`MQt2j@>d??$ifs4?@M_jxoK3?D8UwN

;px(4UmIO@Lwi4Y)GhzapN`s}6YAA^*xa{@sV?A0iNT)u;!< z_$zRKBLd@(`PXM~Wgc386OJ^p-(X*%?W$#Cu!Rx6g|M+`S+7O-F~Wrn{;p++T|@tBm?bAis#0_*ft8qnJ1Ir9DDBud%(7#sf%8dP&!+3fc_LBw#I&zc!`U75TE7;*DVki z^Jo7`nP6VJY^3eafIrxteuL*d2R&TWU&N{Z8q2K5%I^n!kS4-&9H!Ip%K2FRywfjN z<2rAaEpvm%vukl>T?h3u)Bi8xsS64FE!>}a2z>>v*WenYf&CoeZ^Jv7+^6RyH=%vK4EtCRf^zl5()zylX}niFemQ7IVE!}z2=?_K*JSun z+*2PM11qc+YEmJcGdbcL;>hf25W7X~44%w5%{LSQl)| z+TNv)R@)`4i!tQ$2*Mvq&UO6+{n4cNY0y9(aP1}OO1#436Y1mgi}B1j-hbG?cHHd6 zJ@`tG4}>8u(;w5B-ZhJ#0AA)d*T)}((Rnq)$*~aI0n7S_;wxzj@>KJR@mGUSVKPjZ zV}M~j(Y&-}zU* zzvMRf@)2}8#_{jFe%zv0q0J$1e9Cy82lrmE{rwN#HMT)LKK%gRaeoH)Wl%4!_G$b7 z`&y}wzt*!CgZoT^b-{H}gTjDRW-!?TfhwSG_NW ze81)nuYS08iuJ{PENoYLFAew61lLm?1^kl;%YZYu&WL$Fg*aZRAE^r|7wiM66S=mC zz5&XImKE(sQtONsqw?{`_CvkN^+DR!qg-%Ljoxdfbz9H2scnY7G}C`+IP(Q z=Oo;ks|?@1V|P zUi3G80x%rY)2^XBP=@GNV&1fuDHHQvU&G0DROjQF{x#Chdf>I0jL^nUa;-3-ncH0ydyl@75%c*Gi+;=F~(C4c%`o4 zc(zeLg~^p_gLir9)f#;8f6JTd>yCD)mW^?|BRyOXPB@PJgT8=P{Q&eaJd6BE2loLG zCvmepA4k21t?PdRvJ~{K{2}X{vesDdtY6kyn6BWy)MrqxsCE97izqvuJZiMx85hS+ zPk;`>@^8-F9{;%?BdCwaU%qGEa}O5(vXhl^mItAa;zLT=N_n7mB5!VgA}V6J=v4m4?szC4M~a*yQ$ zWxx@%IFy6Mz^UM&6!9$6+~_dU4(1QVqD!a1De2=lZNpDf2`hFj2`FtP0X`Oz8*L>) zuo$sOQVB?3oLmM*a`?Zcj5Ff0{(S^{o1_TINLS?0Xel?*9J2-~4B@oca1flBjxUXk zh67b_uF^n6UX{Xd5!Il+qSjQJG*J+w@Z2bo2f*@hsLI6TeuLarb1LVHxo|9FBl+BT zI0!Vr0aWIJ{?gD;G-Q7zKNgXvPhMX*vauWX)gBh67gAk%ZweXhjjKuS&b$xgs^i(}y#;#k>oVIV^5XuBY! zho|{axuJmbD8ut(9}*5RI;2h;4+oma4UbQh`%mAzA0H_Ut!1t2!lB00_hBMna7=U@ zuzV!T$6_g*u>thD5iNBHUsf6|4M!>7s19MQg3r44tHPo8z{j;B1cD#$WY(LaGgfd> z!m9B>DMr-6{#?0SFm(*7&p?-*r8FW$;VMiZ<5)ng@MZvCg)8SGx+SGq`uxTkLBjAr z<%WDdicrYPz=5$`IYJAK4M%i`V>s(Oiu!1a0NLD7ilimF=NN-Bn23X}5fY~_7^{ruaPobGtQ7Z;7sm7b{0V0jjIZdi zfj=7QKY)XwCnFHzs~p-EjbnPn(jH`_QZ~`XKA2O8P!8jTBD@0OY#GN#xp2OBIFM(@ z6^apR@&N!T@h>4#d#P_0YMnJ}pQeW&bk|^SP-jfkrui!-f2(hnB92kP3 z8U=MY)_4S3CYE(ogNwyOVC8qq!)x7>ut@pwz@qiF2WRxI>00x^*iTMIsA3N?kIp2b zb$Wo2#*qhB&JW`h_c)x1(cS67pqGg7sZ6S`(1m9^IWe>)9D=n#ze_k&t}@o!%&n%Y z0PlS%3WFM)92$xNhJ)M(M$7R4`IUkgkiJTe0a>2d;5VNbz*E{#Sm`H5b^C1wRXJQ7 z$a>D7svCOha5D&nuL+v^)2hjVPy5i#hYwceF*?oRb1R09q-ly6!`@&9Ap|K`LnX^^ zy*3v#AHcgb2f;_;N3t}x)K7Dm3cjYEt>klM(=glvFso$mJ+Oq~$Ls#W*!XDwaA{+o z!5^m7ekDtMA*gQTd!8vB1*7W6?D`!T8_yybu&}t5tjeoY#^5$@=!~lzZjML29xCS# z8S+u@!?cnD7$}V&W{(__$0(*G!t%g?KP+`=c;kkU_hY5OFf9ZFWB^|z%2IWzpXR7A zQXjxaQrTn;zP|v3VIZy{uAeMT7&?CqQkW8ASolU2G7JT?fcdL3f*s`sU$$@WsO$4ey>!$=xmhuDJ( zMd%pBg9x+D6~qm>!o)B?a@?FvS|Z{19W{+!H4Ge{<0Ga)j0VCNHH>o$)sBD?mo zulPgyDh(0REocz4tIF%YvV(B{s5!yr9I6tnCmg-`Lp6hIVusFp46^}d4XmNm%-p6v zn0o!Ou!b8%ReFcUCL(&ALMdA)H7_-+56%~4>F!6>8pa_S%D;w=4H{whSB#C%%Njz9 z;b|mT{!o4(28rbm=aVMQgK4D{;mp%)X_bM#b=Y(etZBVbBaa@dh9_xeFw$_(4wcI2 zRGXJj0hk9_f%N_5p@B`CHk}!Qr!s1Ez$!$bKcs?vQcP2V>h+DKV!luuGRS%zNPihV z`Ve9@D%fY`QYnl*RY-I7kJIerPxB0`OWa=Hs6-W%`*ELYM8uxP|7fzuN5z^R8IOp- z!CRF!oC5Q*6r?ZbZh+x$7$V|5eSO9{pso(jo5`b!uVBp8L?R9wnuPbx+yw9*A1WI+ zizBSUY{;A*U&H(|u!nEM+$ek>W;U>=F?JuQ6-+ZsRKIuGw2iPQgp&r&K9je}hag<@ zYV-iu&6`kEm4ohg{cCf41Lecx6ZjIYx`cvMCihQ_=Cg-N21l8XsRkC}Ce*nW#z*qy z?10I8?t@iJlp8JNDp~a#O6q`**R*D!K6^~sHpiAP!ruYK0=HTb1A70`9JapnkOnjp ztn8$97Mj2()ijc6L*#-U)Gbb(-58^}c)5v+#mg&%oRMV%IiKk8PX(k_WD2tG4`t&mKH0W(v6qumDa(#={ zINo>K>5&b!QE*fuxUW&HmSkqURdE?_wZ3$5T4;Y<1;`JG!_x6?;uR@Bi0@nuR{Bmm zZR43}y!p|=>`=Jkt#Ywx(l94Rqi`A!j18W?88hKgYBz$8&|z{+O4QbhW+OX4eSTnY zB+H*rUMnc7$7rZSsverd!T*gOj8;$qvl#|kLIZ`_IW?H^QRB*g4dh?LNeY`Dt5(x~ zOcV@Ez!u=8Ile0FFs4iPPYz>8O~^9mMrhc;bZ0k5ttN{0qxa8Y4T+(?sxZJDfu(2~ zEd+7Em@z1pDirXO9#@GX8^{I=Q8}veN9&dR=xAYl0y}^7O>>6mhM=K6D$ zw*2JA4Ay#M14YeYk}Zo8#@F(-G@~xz78_l{F@3ML!%lK zHPc-ff$G`Fji+-ua^vaE3sAMr#FJeK>V5tlR zFq*@vl~Q>)d&nPa`4+L*XgN<{Z?mV_>k7V?R;JVWM<6H(*%lHWfS+ zZB=mV`qALSG?H@?CTHke8XILWE4mMmP}!H$&US2a)S!4nvksfZ^b^u3QkGFDZB;1D z$Z1D(%mik?PLKi`XrT!6gPtYkUqfNb5UTM51C@;jH=Y&=2;fMV@k+QhhMIwyO{IrR zD7HGtSW2&kSb@h=dd(9xQ+id+vp-kKpT0TkU7D9cud`8WT$+RUb$aNu4QHYXFx|nQ z=AhM_NAicV2+g6YZP~lwqHg2HCd_kW5ennpZ*zn-pwWB|i&I8TYszbYlgM;qpJ8!d zGiAu6gT)F1R{T}4Dmv?5o6}^%p{9JZxxv9QuuLbZ(Qg`_qvxHPPKK&_xONKj2e}H? z-X9+l>b=4MX8ERr289pxJcsk(I4Vq4+jJ=QruaiS=gB{|9aS*q8O4%~!te-O)PaZQ z8SB-f*fW~tN(OE;G>B9XG~6dfIj3}nZEz;cDE2FwR^0f_tU1+wL&8oO%zlPUG!U*} zSkj~3QEQl&^by3or&7O-$RC`I3DNJ*H<`**JGhOlnFgY*#UXfW~ZE5rC{=}#DU0?E`kOqnc?W)Yh6-Zydw zIrGYu0+CQLrme;XPs<{NqVi#aX398SZ(A0%;1XgX{$m-*IPYkykVC|K`ZrxZNh9+rlrwAmX=KW z`hq~LyXeYQ=0&(KLkWR-MPD#aLWQ>EATZ`33q#>uLI{#-k&G)T;w1L4gm`#EkW`C-m1&1JZrX4f z`b+Po<@%Y5sxmn??OK|Ojk}t-nW%T;rj}{bjMjzoWvFk1jyUlc!{+-!DkPH9X>)Ys zz~E4pKh4YPw=!(N!>XF7H3tf6(lqN7Kozn(KM183>GW47u?5dCwhclXSH0B%nVt4i zz%W`dZzT;tUq5N`iv)ni%h4P@kU!jC!C4%Glcw3d079JaG>A^^09`X2PDj>XV}gEE zm#NV-&Bu44L{|mNksIb#{y22OBXq!Yt^!uVVWqeFZC*YPz`UeS8K_uxhc%N}#O57P z(;QPhWZ1lNJtPt29EO#_|~No41y#ykfi#8Tcp^ zYE#{yT1Lr<=4==<)Ea-T$BbC)uMjK$AFP#$Z1pazwDcA#XmylB82hT|)cQ{HH8BMdyFlZM zQ8nfGWbv?BuQlU(HR<$Pb}cz*hGEfC6J+9%iHULbGdzit3i#7nvFp?GY1A|gX(~Pw z^<_tJ-q!)OQ=%}?AF|de4i>+QX}u(x3`NZJlZUMth(o_;m^9D7T4~i`*}%wT@qp=! zgs|*Xy`x7ubeR3pA%jPunqe8cl(Drhf~+WWPYDcq_i-%7Hz<~BjsuwUGW7{nAk%)t zD!@oz|9*JgOy+$R4oBG(L6&K8a21Xvh+sk`Uxt$=3J7k`N(-bJx2IGotCpZ2CzIu1 z$@yCmni>k#RNzm@MzkteRo-%yfdVZVL`0Mj=4tp!10@VNQ31!4h0F?hB7?2lfa;&X z5GNvA#r?6#L&n2Ss%5Ga3#Jp5YcL@PHC5MNTvsU-vFqQg`|BaY8hAYVvg5#}mfk7aj|YjjH0!w0l*^^Ea?SPkdE1Q zCAVHx*?KP6!R%XBJ$b(^rK`Ywfy^-Xr>-rfg|7pP*UC6JNL^b>>#dhiYgPPZ6ZO0@ zmsHPEX3+xuGlg1Cis?!iY9sw7u{Y;l!Usu4`m)|7Ziy=s81G__k$+Xmrhfl~=gTNC z@6rT$)4rfkTn}bqWVb(y6F#>c+|aub;*Z<)s=xA$wR#rS5KUbuP7Hk*Z*jhKlWIo3 zyL`GR4&(<0atFMYKV2L=*%2EhJ;QUlNLZjyu0}BfGiY^AwK#;(Q>H2fo-KcUD%R)0 z$Y6*~O>-<<6sp9bZYcBy3(d7(W;4lXlxX4*!*SkcGW=wTG14a zk8>er*Jm9<&T+&pB?e?l=~6?COn`9cbKe^gr@E#j$FKwkK2JY;xOnsWT*zq=(3-eS zp&wrsGVav$HaK$k?GOfi`0z&9tZEP#Ofemm9R$NU(y`6@+g=Xv&9RN&a4_9zxUjy&%R>tN!;WPBbrQbNyaO zK3Evcd#CH2Xp;3D?uo`b{ClEztio?W=wta$G}Wcya09z_ZHI+ZFr;ANdDq{IbWrU2 z(HEQ;OpH} zMHC5T)4A032)(B`g{ttBapTfdA1ilF@v8xbCEq@j`P@7o0FK3R?2Zd1D?oXSiY=|j zkrjtoC)m!5`QHLMDC`nHxN!rF6^!;Vw~8g16`ZLsn8%TxsLhBWf1u^W!Mz{r$_8-^ zPF#_WgL43dfkmel+jzV>L5#rXQec1%{2nk@IS*FwxUQz&tD0-3MJ5O9ZA$y74o-$k z`{T{#5HMu&tPY`iFeryQK=W#{IxtK(^^fF7p-Bv_pbi=jtwBS|4KtY3z3NCnwVq4q zo2+rxzZq~5xSKcJX3!xDO^pNdm?JZN`l%kDS*g^+agxcv(|SOji%2FkFN~s2gH#z7 z2R5uo^;kK&i-VEQPvb;fJxbHjsr685t~q3#6kP6&-u5Z&jdQH!@c}e7oX69=6dEKj zqaLlnCUKDRbp=ifQdbXftciI)EbdUPMP)R7B*70C92XYd2&Rw3D-TwdR&xHiS| z`U_=mz>(|iAela1rG&f&GJPb0WuMbW!Vh4s=Ze{0b$k~;m42L}FpRJHs97jlayO`% zYQHl2hjGq4KerNh7S<%PwJdn>KbA@~WZ-`~WcpmGWq>br<_?#JH0je`?|e!DRAG#u=ptesu0XrIz8s3qD%Sg(Q*TDlepQ%0J9;&!+p z9F4SUS1CT+fN#@e`E#74>Q8qlr20X9jHKG+tDkQ&wT5WgHDW&(&KKegU0B8H<~WO> zka8{IM7ZN7noJLq*LQF-@q`c-Sf6ELU~M!pjC#=s=yZ0#puip zIbtC}X*9lH9ngDXc?O>WBulg<3$tPqY(#JaNetaM?kBo)iP54)Gu{EJ~YIq z$G+3Sq*t8t{QkOy@5h5Ixc>dP@I=}dHJjiN4-5-T(AL)Ux42NkgeH#e2{hLxXt>WH zydw!sU;F0m^myu-Ajd(#aH-}uogN7>M$zFls^;u!UrLxB6>0(baqz)A3M9gc3$03T zlY;(~-}FjR{oeTWlH&_)Hyj5K)QDK^Tkcm5>v9Q$k`sdOc##}OdgW89?!cHHUq||I z@I_zv@GL0fI7durEgBf;@eXCNX?Pqb28@+C+KyeADQNuj$zZ$thd0J4&J-->PqLjr zbT|^mgso-|V>!`8k+yK5g1f`y8RtZ@-edLTBNL)fmKRF+<}XJ%SWjcx$b`+q!`wj} z;wP+j@M?YN;H2pTv*;RX``#2RQ}QOXx@){>ZdNK6Yy8RZrlu({9~TYK1z7)C`#7hm zI-<&gMd;z<*(e0~Bo7unA6HpwUg7DMB1VrJRgN;oSa9-%uM>+xLeUEEuA(rsGC|!` zu&N#!^{FC=>cMRFt{?94xPHp!qObS!1^4Gqx6(Wh?Ub>pd9k_Q?zkS1W3(nRXHKhX z2IrJFuOD+dqhy(rKy4bfk2Fog3d0c=+=z~SxfuLo@qpf&SkKyc$y?-31ykSNnY&{p zIEe6#dtBnOHh(CGc`+RAM!G36o|6$vO`EE>cm)_Aodhb95creMwyv#WTLQt|nzEcV z)*Ui|e<>$pOFLy*LP%+g#nQE`#kfIC!dY%f$8sF&8@LF^lI@n$Zarg*_Xzpt0GEzy ziFPEFQlza16M)!YIUB6U6XMlU{zk|nGPzlNU5L*L@i`%WEX2PF@c|(|D8wg(_@og3 zCB(0V_-7%$E5s|Lc%>BY65`!N_a57QAM&xq9C4@Z*vNi^$_KAfpj3ngJK?$_0jOjO z1=yBGnVqc(%b92WD3N%RBkyr!w`j8+H;ux2t>Ww^3_4f5U5MW%#IuREYwbN%f!t1ke4dk_h$fs1SusM`;En4{ z;g)S@z(dWugy<48#f-L$a4F!@Jz{@EJSW8w`?Tj|m*qSwtbfd;rOj4=KhY)66`ghm z((_-+b|r*JUMyxzi9g*vP41Rg;O%ai64I8kT>v)W%9NXid?LL&EJspuHp!9cF*%+r ziK3KAnMeq?D*>*f(Mj7LwiC9Cu%*lGw!0{dHgf%mkV(tBT+WxX)lmutiI|)dCFGYW$YVz*3v?VjLjgknW9noz$ncGop z_tjF|DV^8J#GN1pjkeos53X1y+bnCj@27MYIua*;Sc zLpEgWbfUeZO?HyEcBg8&(mB_LRFEHHr`&~FN}y^{3F*t^9+B#Jk-SEvS$U$(fh?eO zLM%?qLLId`T}t?g=KWBymNn!gAp&hODVE@_H@RA-Q>zG+ay|sscYx1xQT2C0YGl$L zC*v;dPg;qqtp$nMZCy&bDdGN~Jp;gv|7Ii?fD?-onuWWWaY{a4B!KRSyyQ7(q10Y$ zc0#6CI#Ql2PL-#iILmRrLadW(alaJz%fuSFTDGI4>d&4JEMA@LqLj>(&qFt2bxCMN zP~DDZ4XtOlqv?Qm?o5)tuph#@MkhOobSzNKAMYmm#l98&Xv_Bs%R%sQza4D0tlNd0 ziP~3sVhr4K>{GxY>$Pdex)XtQp0d!dbvo7}TMA3=vYyYTihquOWuMXPpMDQz@4xqA zg1?RFYH9SF`WUJ&?@hy1T1)vtT74k;RO=iC=fUt-Q^2$dywh*g9o3Qg$5c^C=f!A*TvgW#R%y$4mR zO*CR_WsMKECC^b(oK!pg1N@Ix565(RCEM&Dmmo zK_u8ep)fLu?)n8_)P6AlJjA@uPC_%^1oCeb6+BPKbX7%W!D?%voC`ESF6@oeZ#FW{ z0HX`V=FsX8+ukO&LR$Y60&KSfISotlnq1a0t2wSq47u%;>RZjJC8Z-(*O5hqWzOe*(Wy156pCAa$~h5FD0AyfUeor-3S|? zieb-h@h;oEixm5k{SMx@ThF(_8*mhzvSqmr?;PlCXI~1HGn#Ocs?%2$&_*7yb7$|r zZ!XlggV5gJ21Hw|BVY#fKY9QGO5J2fvfACBDnVVlv)o2Z!b!m1S!BJn2{_Dv_N^&k zn`eCpY;UV&-Nmd^(uF{%+81($^+_KDU7DDGlQ<%}`D62^>!u8_w0%T~4~uQqqZA6o zVfiv~2kLZ&Gh@Ef-8HvL;5HK2SJSex~~Ed=eFS zH|kQPx{`J(gR6_M(z=&c@Eo^C%yAqroc~Ui=WzUiySBth_IapK)H|v-nb_uhQHpP1 zd}XIZ66s*uzzno8Omv(c`G^z`qpjHL3N8vDThMte2Z~B4{zRF#vz@D9_H?-IveU+^ zgp-1;3rj}KlS||*dx2%`LsHbD$avPiy%L;wSS)%-h=)ao`gPTBm-=2 z?hbbu)PqEW-zF}A!L+Jt%)Qut#1@}nGx=LvJc=tuqzUJ1w)nc8mhvBL`w80r3HLx% zoQ?sTWu4+&hM{CaX4nuC&}O?`ndlO(JvRZ1Xf^n8F?c~`(~WUN8^#VjD2QXd6Jzwd zp*rt{h4Vgy4|As) zP$YAmRA(E;9Ul5MBxja0$3_f?$Lm1Q5z*d=lg-v^VQa0sTpytoO%1sc*1kp7+wDXuxxk(a@kz2Q)N`s3lPpB~CfC~6ajv{h zoMN9Vo|ieJbIVJt$1tvkT)E;YA#b(C8(fi*@3O_aZJ9~5%OAL%zjST%3?2B_4hc$i zrrYg`<0`*}N7xaxF^&+6u-G9(NqY>VB@PlWF18^xnN(-;C7@#8Y^d{n=?U>JVfVV; zC1HK0E#-*+%814GJ#FX>f0Guk7WQpzb{d+=!`}nr(Q20+0x_r-j2m6lqKyJdv2DRt zVI32RlamE;omeGLc2^~=UUbVp70LHY@fT8{_m|@5918skbkbTuH!`1M2O@3wqFjg4 zhmj1&MiN{n-XmfaIo59N*=+p}5>xHSc~CJ4xm3)=kjqJ?X!?s&owo?w6DhjmZfBuH z7iDAku!NEiz0syLzz}||JrmZ4&Ur9c^=w*X<+LS%cPZFG5!h7-&97K%yO) zu-R(5ueYq_&K_pahJNN8aWYAjx#t9aJFGnm79#yZjFnc|CyO0(7K%lit^482LOTL( zDj6tC&{u~#ag-KDnbEn< zaF(!uVho*-vkpQr6aT z+Ur*Bwl8%Mt% zp2J3&+KOQ9nP=UVnCA(y3kd@2Ft8VG7TitWC$-ENuYr#y)wYwN685Av+nWSJhq@*= z(b0)E`Xy<9R*KJ&*v}#vhy6%5Tf9%&eD8jwkzLRPqQ`N>Yum(Y+EVjuV8^(9yPJkG zNrN%08Cw*nEf+hpe=V_3POuxNo<1EQb$xi~NOf?-Ec$vU}6~Sqr-T`)lTl1!BIvU<=CB<;Sh? zuQRRBp#6w#_6^|jgc!4nVE1H(^-m`n1BwgwCuCl)7$Q~G5??u*seaL!inA>%OEyD*;VMpK z+*zO+gBiy!uEC$4cv%o0tRE!W)TUXit^tbE&kt z91KD{E=#yRnQ8`1p&d)DPr8Xt^c*xFrCqa8df4hZR4R6cAafp4JuH4H9-{3FdpBY2 z$oOp`4W__MKUwrG@Y%Fs{)`2wYHUX}wrfGcPh+>CcWHCm9shZT^(9zNPyx5PXfJ>6 z+H+VHXn#_CXGr|Rkod+BZofGqev-6b1L?q68QjX;l9122&aYfB{b?6k_kUdR8z}ko zGt~4n?V7i+8Q)1Ien*f8hQtSk#0RUm<&)^{lMpxY`UG&^kpRwbxZ)p(^XuU_yS|fh zf98t+a#VYu-v>j9w)YQ-w-Nh;{E_x2hU}M#S1XWvT$;~S-F!33L)n-o$K_7BmV0RGIN$D zx?BvbRI{*`W3aeFu5wRy)&OGd444dXa|>%n%KFa)Ee+6N({zJ!VL$F#|Er=QM-Hrb z2#;Lz91RRd{jOENuKL}melzO#)k0l%KPMobXE&(Xq+jjJpjt6vQDL?pm-4SK_SNqd zP{}K;yOW7-7+P0AA?%@bAZFXcxW7?M+6U=Pf_%?+v-Vyn;HQ${!J{d0K#Yn5@~@H* zsIMpOTO9EU2kxD}!PKCTUqB_hj$49NO^tjTG_!apLGAX=lzc}@981Zg{6+C=y6zQ8 zCcQI7NfobA4{uFTJ@Fs@QuJ~09`>k9XAs&=O+EjcOx$dXTRc@9RLj4W;-@smzpIbGgolZ?Qwp|yb}n`1)W{Vn;ntKNcS!1?tESM-^zKi z+UXH#*tWn-?R493RmwPt?C4BN;>X575Hutqbug9ePSIg2 zWxQlIsOpiBHip?s_EL)gvv?CG48_u!2vE~2#B#)~*wndn-mJN)jz!k{Qt5BALd4VP z+UXk09feJ?V-93OAZ%&SyEClE&`*Npj@*D2)-JZff?FVdm1NERV_JMOEgnz1P?%o- zgi0k)mr|gff__B?!tu+re9{(A+wv(p^F!Od43n9kU!2?Pl<=k`jr7@J= zG0(cY4KwMrk#sw|+Kd`W-w*JUU>rH{0YZiEd8gko!6@=T0GBC+s^#`yY!x zk_hS73Fl69dH)Dk5r+BC*z#w#=yskKbI_bWAZ&DOU=H~Iw?ceH$S?CZl@K2h&R+?8 zb(N8qk&&HpEjswLtC;B8FYsoHTnv3-9J=isLLsCx4jCx+?WS`Mq$NR`RHQ9>9h#fy zc%2Y;!T`O8Hm)N+XmdR3!htpCV?ty=CTsRy0jE~dLCY(O19lfRmq3OoC{yY)w8YD3 zv7)&k`$Z6s4zyAD1l@;a?jZ?xQRX3#{D3%QJ%*t&-LZ7;IvC%z!AFX8kOH;>R85L5 zDbM_=i`kS(s`>=4#TdWnFIG0az;WmFE$^AOrtJ8EfVwSYU1Gc4&h*odk1Iy z7&CXCwLF0p3UJb`#4s4vmY8GDlJ6AaPhfn}U_%ZN1MosRE2_?rli6pt$;H}%y%wSi zO#zbOH*!*F=X^pyR}OQ132k=Q`*ExX;dj^pg`Y@bTBiM_ZXwYDQ^gkRIbi5fEpzTs zI;}q-)Wv&Paun6_pg8GfA#M@kW?|m~``~8b+#;4+`ynNeUTP}%30(QPPVtFO@ySm6 zW1Rv-3d!CmzsT-R^ZjEP=kGAIgce6=ckCBeJI4P-Avw1E0fu8PVoy?~u#pj@8_PpL z(}tsP1w1I+R|y-l)2|XRML6L7pqTpswbUc~q^&=N96`t>T5wtQmj!!= zeN`3jeBzx243J)GKTm$BsE>$~C_45{3E(^xD{`Q;zz8rwX4K?s+hXvF)IsS>bR+Yf zPA)Y`IwvFbwhkEN4?+-c!*ntV0ObVhMwg~jRXBQ1j^>Vu&5DJN`b|>cJ|lKnvsF5% zB1||7XPvVeS#hkoMy$5cV$u61UA8-qf*sTW7_-B7sM?}yZ>Cwb6vVNKEVE?tm{UCJ zh-1zw_1k$A^9hOjh4s7?Da2YG+WnxD%8$PeItLc6TXqR{7nroSv9h9D&REjLi6o^! zkhu`|!5n~U=ghcVLw_?m@RZ!)&7KSUFEI`5(5aZR;28K*sKgA4=+oUvx;r4}ifZ;U zglxAGi>!|*NZ(cIVBiGy5fU*;NGMi9J%Q|1P4dUVSRwha`)=`&D;{>=hD(Q)cuZP9 z0WEa%B+&*j(S+H1RwE>xl|qA;z5dDeO7sSv?a5NJTvBer;Af>cS*gU8Vwt@h0eXo& zB1-=hf$oy>3T&qGL`k8;Da zt(Hyj4h%#wIygAO#16{LIOQ;*MJ|%b)NI&gDP#o43)?QfwOEc{tYyIODPjjEj?NRExbG6r!^GfLaXJj2GsGOk z%oQi$cZpbl--Y5V{GKf?1pGy!7x!7L1H$kUJtK$~Gx0l1(7ER%cG)k$Xpa1FvE+>s zGsk&7%Xk)j(P`%?$Ra3wN^*Hh;^)%3#lg&(lTOWYn*W=P_-?0j>zwmvIQA7vY}rPB z2~uKa~;pCSkC>gYv==6!b$omqbBRcrmz5rQ`;zyGo&J$L|9f=aCG0`k<)X zuX>%doP+kg5bK-<=@-aQ9PscKyo9L*oqD#KOH5ghioMoea5`ZxfR79^gJB380O&?J zG9tw`W~ZIBy~O4E5WEAfozx6#!7GwUCNM_m!ekv}3Sq8j?~?9DrC3;oF?JD4 zu%ZYG=DouDl9<2M-e#X6x7cUEv9=W+z%5DKrMJp$^Kpd)Z%JW(0&liCJ{02!9lUk| zCS`3wufj1KZC=bt$h$~9#>+}ofP}UJ+Am$S8Nog*>6wCe|N<` zc`}gxn=5|diXo_}bI~nJXPI2-CgrZSMQD_$1F={<>WZ(qE(Z5sgPT&G0(Ev4>KyK_ ztL0VpK6yH`_*<^T`+_U}#dW{WUx2*Vg&?}$<1fmIr+;=`_?!RP6{pLyA#N7}2|EV{ zAiG$$CoBO5IS5z~KtV!L_z(6Eemi70)D<0BGx6Kwz;93QWAY@qc;-@6>oQd4$?iI_ zR;_zl2^gkdFJY<(E(!B+ooPQ$oa^oo+r{}1(TiNRdrTmT7q~AJSF%KyBk)oNe_sS! zWhtsooMCTSWW51%!>)aw+fGLU`$sws7CM$#YB@_GWYB-@Fn^OA*}_Zxb|LO}?Z1LK z?}N9AMFOj?q}VnKmAC+blUoVvG2z}PI^HWf^>6!oF<$L)@9+R&jio@PSq z(r{$VhN<82mzXkw;=9*we;2en#2JoN%i86+CUECs9;g#-vNO?+<#!bC>y%)pjsp2( zBJnXH9}ww}iTMu*@iDRV0b!#e@8|{i4JJqjLzdMe?6VSQvbAm&U6)FF^!oQw^ zsg;k(Uh86LGrBXR(*a{zV!VF}#v;4m4Za+MSNo-6nMh&Hpppk$;1?5$WEa{!Mj=Zv6vYx3 zaMwn^ioSgX91nKeDR4aWTAdvjuy$G)hQ5Y_R%Fcq)B=PLtHs^Wzu>hC(ZyO%TB1~i zT)25moTXTiJ_^;_dFovv^G312dPXENYQ}=y1spUELL!AlCPb z;sVz4JS=eOfOhIgBR=7@!*znO8FaaIDpdahtFs$qwppL2CGaZg+)f^$F++!)432$3 ziVtB5i#{w^LNlOPu^vUx2LP)bD~50JRt)b{>xR?MVUXIHLLO+wp}|3(kR02_wM*6M ztOul{rp_>d)~8}p4@lh02c-O%oU4AJZSB?8Ep+;SUR2l5|4xWIFbyHa4~6)F5bu`a zT~gd5#hayokqKA&FVzU;D?)r3<1H2m<-yWhDV~;CshW}>65{XJXa1`c|4A81VA-$~ zefCC(2FA4S!x~gn+iba=0*tr~Vk;!;Oy?Z?^#ZF(X<30gb5JEn%W}8P7V!I{o89Qn zlo-+cDJvg>1ziH6zE{Z0VWkJ}US=0qn4XqdQl*V;2+DbBANE#C%# zmUR`p36K<+E|{j5YoJ<^GnDbY+I~OQ=F*`+l+il?IPBtpgcIIf@N&$8m&0zi+xl>y z;$R$8=yTaQ%#<@$E0J8KM6%;38g6IOYmKSIDYN``IotXvmtDLI8zk&|>3vAZAH#Bo zd_sWGAU|otnnZq7PHxiI2CnGyw807tUJ!?Bg^(rOSsY-d)dJ^}u)w+VRO_`U_oABn zXc^@i>xnV%qWu51y@JYVIe|A=Z-r+F6gXnmf=)qz4lELDa}}hNYnXBY<}{IDHr8Wx zF16kd>@#WQU~C|j0feI1O5e={%3IvTJkW(GF2!=@LS143H2{^~l=eJMZY&BwEL5|V zbNUn3XP~c9V9cGfi%i;qU6n`dP8hA&elIOF;MKBop66Gx_>L| zXGQ9_0uFQgjRGFWId8-gmB$lMQ|MH%_aNi+!Zb>Yk0M6ARdO@|!ff$M2YTsk4pxkS zcX)mShcqx!5&IVj`xv*7*qK@HPB=YIm($^N%;b6okF5t;>TbCX=H)7gAI1hOJxiKQ zjM7Em!j8eJ5SKD8Qgf1AGjmM5NXd2&`{d4-TknN!-l0~uqoc(jFHOaYD#%H0A)fJ)&D+ow{7Dmj8Kll}Xn|r&rGABK(9iU%r6;?u&^R z`hsIYuhp`NfD@qVVNrZYU^2^FwiW!fA3~*euH|}zgbXkm6JAwDpJd$)mwPuS-Gw|I z`U`s>fcPv7%iF|rN&AOM@q;8t4Y2(SF4W==+$!6@gFP5@=)mat@1*_Hr14{Mjt{4SsQtO+t-EwW#L#@o5l`p+~p76g0K zE_|uHcCCfsw!PP0Dz6tWffCO_;!&iol-+~O_ll)rY@t+(4^E-Rf_F&?({2uqAwaB8 zN4WE7J15tIkbOO{)_VF~WYO``#I?(;8_~krF>l`ki6Qe{?vBsKWkG}uf=bHi4``-P%cYlxJobS|qc3FG%wYJyR&~7cTzqTow z9Kj677eHUZlr!o4PPjdNK5ZR@N0Ek0OHc#?DeOKWyL)Bqrorwh z!^+$y5Ci*}lDEWm*nX~J+nEwHsFH`1yu;bY9W>a|6V2*#$up*+<_ER4Yy_j_o!Twq{xP{b0D;HwbYX^QkIX`B}43-(UE1wAe54v$9}y0@7 z@u9kT*O(=$-yZ>Ow{9X`-$~8!_T#Rz%dA`%?hoNDTnBiSKGQD3wJ_`U;}^vM z^|5j>qUAvDmm#)W;Mop?!)0WUh!Op^)YO5~;Gt$P#V`;RKM*Q{4Z>ej0YzzD65@W- z3v_MD2PiGhq_h~i;3J>rN?ltQGP|CTVZk5z-i8uTj?4KnRMm-3n~qjw)xWM8k3{8M zpo>Z~pnNdrIwremX$Kw_1_$gi)lK_J@D??}PLlu|kl_%@#Ar@LrDwunG#K^;{_2}D z9c}L*?IE{~okXW_h*T#xC+@by{?z~@l50am%IH>0x7f9;=c~BPBi4~j%}&{0QOPdU z>?bhZ%gr_7?Lrr)KLeMcwL73V!1M@PWtm` z;OtFg5ZcBAadX>5rrS=KlbUOTxQng1BgLGS3D3;P891ZShmU2{mZK~>=mEwA@IuWd zXX4BXOIU%(d0|=xdRxc4iTo|GO0J*F;0Coi>AOEownd8(*>iB7Q@zLl*&OF$C75}J z*W-M+yh-vEIYgQF_*f$+B4o)aMov}PO%<^@^choJ4>c(o99+T`FqU9MCZ~J?6Q}kd z9P;pz-ZCsFYS7Nb|exHX@GH{o;?i%Ny|hH&KdBojyI8vfIVNyN6K-bH$^ zXftrMJUp%}r5JaLtv!4WSNOELb9mbv&^#dQaf}ed{2%SXJ9%n~iH*J*=jJ8hr(k`m zcVFHWWKc2Tw<-<)u-4)QHRs_Uon438ulq<@xZHY2gsR76{gz;$Svr{_Io8-Z4 z2jmYxtTCG7b6s}W)1p%)fsBd@b#k~R2-FD9x*#rs%+&MiOm+nxgIbcaGn*c zf|~?QFBb zLD$FqxZeP(J%Z~ITVXpo@%ysOA#F0f%y2-BcvafxXlBmj zV?tcQZ}a~9k^MB1e?f5MQ#Hp%<}@%naB9uTMHC1d$v-1GIhLY8X)TI3^JLCE1r;{0 z<;)v7UVAeq@8sm|octr_C1T!`GZJ%lB4;UzBThU)emqO@8vhtT6P;}3SnnpLkj3_= zNC5zk^)OnAtP(=InfQR^FVS$3fl5 zf{ZMHrdv5G6A>M-?t2efx%-RXTW--`b%4#X7M;Mws?6LJJz-I%toP*^^je8)=o-Fn}N(CD65m6t0D81mPOyip;n!(L!ysWErcWPoW|R_;`U2cHTA6FUY^ zg4S^uLvVvL3-N)HBF(}|Y0zB`11auU8pzuBM4jssDxvJ%fr8+G)=ljA zLU3(e2^QbVGlDflCBy*6oRIvIJ*o_DtlA!MW{N)hE8Z%n91gkz_@NGWduGm; zEW4Q^V{8Nc9MrQFL~B6GQF?3i04y_#yVKM5U|}od8DN0#E%M}exw&L7E6JsZpyrAa zlhDbVEx_QZt#VRLd*iv1T!MMZoKOo-uF+QQ3IiWJD%_gRdAwv+@c^)dw;EIPy)xc4 z^y!5y&_{byD=&cS83uI<9ISoXd}YnuSfdJ$m*g?UVihV5P|LrX^_4}fGL~5xhq=Ci z#^0Bb9^&x0Wg=$HMBAh>0uiR>je-8z8f4Ps=OHdcU^|GcvTw{lbrEV+n@3(5KFNh> zPi<**6>guqdGwsNt_;CknVj+=upkLN7PE!SzWA4D*UNX%=vS-fcF-iKVA2PF5 z1+xa8Qr+-ZNpT0eV-qfa*#q4{dve?syu;APGvshiUrj3NkktuklZ&_snrB~ z)eLU$Qri-?So1aIdHKhvDRa8_zk{ZVXi-;5wcUcDlkb{+i)|Q}b>EIA3^U>Yx>P+X zOYMcWEU`39t{AxnD;Aj2m`9DK(O^1+_L5L82mz49o*SC8!Xjo>XHE-?Cx>#ZDrt@h z&EcUe9IkMWtcv zqiVgs*UF`lToIX1vhpFE2!A(3@{vNzZ4fv46Ih%-A-Iw{eoZcS)~61#7pX?e+LJ6` zYyjim!&%9&5EmsdHt`MeC}l=)CJbgwOuAWNWfg@*&qQ{9jC`f?*MWWTFdtY~{qYzx z(zK*{&WKzq6*~=IChY^w@j(h0qGFW;L4S|pvkKnF42^0TJi;@zCRF3n23D!XnuVe> z4dK~FyQ-|akwgZpk}vBoviI!Ryg`3e)GvGe{(1oJNbbZ=5#xqo=4S;ns`l5_aoS%u zsz2_d%Ij%$A5{82So`ZDC+9hPKBi8{$+51{U$+4JGAvrxUk}9EU%U48*X=m+QCRe3 zto^mSUSBVyb%BR2?XS_MHH9wiud3blztdmYMt{{m*I%g{mRI)pP|#6GgsY@q1HNkO zV5*+NR4q6WJQ%4d(%1__`sZw-6k_=#Hdkci(zJgTBx(N;qL!D-L2AB#E@GNV|M1P; z{y34DxdHrKm}q}s+oIt}zs8&r3cd&?x;oJg!HHCRWV=2Z^&=%w6| zQw{5vgO3ljAqct&vLW??3dKZfNt*_!%r)nl&qU^$=ri>Ct7O1|_MjfRA!Zxu@p-so zCIy%JU1C;Bj*D4tDkchLH64oRJQ{3&K83J75k`qS^rL&iM8U7T!R$=KI3T%{?vQ=E~N)3b6~R&K&^4wj`N zH(LR9R3R8==j<7|EOS_{vvR#&tI2PyTm}mP={qrJkIQ8tFCdf~G|pQx%={R+^)4&R zty^a0PQ^{mJqI`4hes}3T6-?9yC6=gJv?glk^U6IJik;eNJXq__`CURLK zC*|bioV^s{=%K~{HCH6&w49uolf#{2toez29NSOuQiUacEpA{e1a_2IOhi=|;3(FI z=`YV&pyPUw6>5d)h?BUsBjlf%pme|0ndRJovOz$jyK|1I`v)%IqNWt}p+o~Qv*wwk z0g=xp$WU3PE+~bJ9MV@C$@IoH#4WwOJ#zcci@VSszp!vmD z6M2y@7hk~dUOl7DrFf;u`9L8kH3?OhXzX^V@OqnftZ&{Jw>v(-o&oPR--WUVBa~f5 zeW{VHVmAiF*2s6B6GBBFg$q>-)&>wMu*Cd^0L+LKpkfZE18eXHem~9c2L-<`M0qS9 zxXA!ZZ&`U$`zQT#^4n|*66W}veBJDhIS6$__^g#j$>JcZnW})Bk-u2^ENk8<^0GW$ z@I=7eQIy+@vRVb8zZA@x0y>gSk)dBI*f-Srd4@tE>?WZACDc8?G7qQ~g=vUav!jK^ z+@6;^@<7OuMFqO!RTEc{LkW*Qp=eJonp3TuVnHN>h$w5N=tFUom~FlS6W59sS2ej^ z*{L#J5G2gwbh_M+qEcXKcq_xxhXI%4n8xiq|5;2-segZGb!tgg#IiEZ4B}1;{Ee1- zDB9hbD(09$K*-NNSI#d1SA`Fdls@CpS||gP$75Ng^>#@&pn!w5cCCF=kR(j@-i56T1xCs(?E>HsZ32ZeJ63`_ zN>Ndjp@flVuyKE!H=pF?-Mm?om%44HBUY4TrMd^=&5xV1d05ON>iY70QQjaZR-OcP zz}@N}IzS?Dad41G9q&A5`FdXo%kmA>vs`&@>g-m0;mU}+|cMDCN9%M4J^1-VEIMAhB8KLsoY3zYcluvGfrT+bwY}?XxbzdP!CZKQq4lE zgzQ*%l%uTK+02rM3M%Z(LTmO_*%pcfTB89pNd1&C{HGA0S2QRe*9sh42!!ClQL=H- z<+HY5IH8Yz{X$2++ihXs2vQ4e%^aAD3tD@GRH}5Kj#BGvr5VG5*DDcOBebL8ho3L% zd{dp&rr?=DRHf1<8xkU*9vJ9;)stQo^SC^!Ga4YO)><_V;L-~Zh-=oA&kR{u-oimk zzmj46>mCNgQzw-+44YD_sz)fw`50x1cFeQoJQiv8#Hx=6f=f~fWu+v%)yn4Bl+LXb zJxZUe`16o+O_?tJQgd*264tiq@K5QsacD(C7wbhGE{y~R~oQYFm&nWFgwVOuURvQ!80@p1$D zma6jQ@~T``l}oGUsw(a%fJ-9x)C}4gTorZJGQSC4x>E0R^4GF?ONj>~W^T{PN;Kls z^FVWud_&DmOYsnrZg`t}a^_yV@4@OXmE>e6Pvo#LZ7yIYj<}>?^HIrsT#`>q@~@K2 zFWVtQuvY&h}r0BCj-8mPYm6wbBqZbOA@7|{mmBo2EpC|GTKJz%E zW%&o*^d0k`AiNuDf^rGJyPDioGh^)z;Z#q)p!ae;H4K7jt_zovsrdJfM`q?`?8Y%E zbM_->vs(L@Lp(?iBV#Ib;%NqR#!S_SOrLiYlS&N$uUo~%XhKP1Ml;Yu=!|Wnd>jl+ z|I7foZ(x21`=NHY*(icFOGeA6!p3GyZX8!p&cY7Epn>x-a-#QwK}*2(YA{PC$^^F= zG-N#3Vif&8IM3b6Bv_77SgZ#dMyf_>b{I7r9B+vk01suQ|J|eetIk4|K0|{~YqUXG zbVWLtMD4N0JXcAn;mbJ96y=>V&GboD7(Ozr^&x|CiqIlAQKu~pLqW-4g#?DVDVt$G zE3lO(7l?)#h*4jYGSFGh&R}Ngq{eYe=cFIs9n4G=PBXdU3^_+G#e!OD#uVZ3gK& zN(0qs@D^rEn~pt&%ePX-Y$xT_)M!2u>1>1=^%=1*2=`Ke1=q1GFtLrP#f){#SQEP1 zrb7Lc&1t(j(pM&D|I79#8?--JulIvUHs_<9w)-gR8!FfkM=fTNxT%b1#ms~YYqUGE!~g4cCmXao zS+Ct{2bha_TFFp^BI9Z4`H?-iS%;osb!-X(Zibzya6(`e8!;}N>wP){oui#ujMh;33R0#~3nqOv zjqcqB?bzSN;&MxnKTO&PbhVScELmmtRPfT-icN8%$YjvN4aQ!pG*J=2?+j)Fv&_hy zO5U}Nmm|LP5x?aq4pc6@keDaN#}hzjufs(s2zr3dFOdZi0I)i4AP2futJyf}Nh$~S ztHRciCL?3J$nFZlG1!dMi)$`Mj{liqG7M9xZa*;hnk-?#^|SnqT5%kf*($1k-TfoKdkw?mG?As^9y5iZ)1$E++d7u z{T~`5!x)v;8>1yMda*|RVkKg~kDC9Vmi~>|6f!F`S(BTw4uO^$2qc|lAW>@&o;;d$ z&D<-1ZuGo~OmPkDf~f$p4`Ix9?FGzo)(s(LJ|EN!Ujaxa4sOlHH%m65AB~6;AN;PZeL8tro;cbR^Ty1cQze*)kJ%n46(FSpa>^CJ8jS%vd7(-Yy*9uH|&iggd=gd;dw9Le(!srt< z!miKDE>LFn=^Pb&6F+ZdXHB@qZ26p#HRg1A4)*kE$w2bd!Ub7j9F)LOIGC^Zm_QTG zvDtcZs2DNBGdVVt*64i14Pr|;@5ej-JXM|&r^E& zS7_%(vXAF8{~DRs@c`)KGk-v07&8}=Ez6uiA+2vXjNFPAzane0Xm~WR2<1~JT;ey7 zW+ODwj0nzs${$8@1ezXvV9jqLbG@=At*|B$92IO}RMZ@7F5B?FFqRw^Pe+t;Nlt!~ z#gnUD&WZHv-;}YoZ9U#@l~+w{?K)+E>yL%7!PybE4QIFX|HRp8hIp-E%Gar*^p|mU zq&`Y{x?CSmmxZSrq}3?aA(Y+oD*$GqBlL)`;-*L z99Q|(L@k!%h|mrs%AGs^AImb7Rq88C4cP0Wx`Wh!y&BznTG5aXS{`<@)^$dy(XgCv z0P!ZFM|Ij|Q8U*HbOWd^YW|-23|xxu=3*{x;Jcr|iz<#A*1&NM)>LuaasO=`m-|29xMn&# z^7%wh}MrPQh8*3Jol*LxferO zt9b0C(7c@DGr3jq9LcKwq38b$&3pQLo5yq4DxO2^yj=0zk-hewk5W80FS19F*Tmzw zk0bNZ`graa#59>B6wlq|j4F-S!*jdJBUw2v#d8CY3BM-$;mZ`kwyclm<`S=fBfYsH zGB+un%gWlUEY3Eb-2-W*gy1_tCTh3ldokZDx||2}>9t6}yZgz~oW64ym~XMK&-Y|2 z#e7~&Q>pe%uXyUkd^5m&+=^X_`EL6Eg!wEOZ}bxvV|_B_elthdjdsCX zi_LL`FxsTRv0h8qVz%5a&fiP8SJhG*_v=ANl1ikSaS-N^!T!WcRvq$z{^DdfAtVL? zKH@Rur=DRti+buWDa(1Oq=t{17gb+VQSFb)uqs7-l%nKSo&3sUy&?vGWOyu6&NPKJ zWw_2~_~6sjlQXfHEX@o0usT~`sMOwShqQ9&RH%HPfW8)EIhG2jW# zz{*bGMGrt7Vt&krQ4taH@e}t`1Ss|5bkS15S;)Vunw=sXl#1B>Wh7^#45|c@oJ8T~ zeZePhdy-l;dzopVsCw)pP-3FkL;3*ce;Nq*DX7MkUgnEnYbl`#BsGF*cB&wu`H)i( zsOgN6PnvO5;hO_Yk708}62>Sq3d7*`QIRAg&4_rk8I{}Ejd6feg36=HFOd*T6Ei`r zS8HU52bN9zevsd92Pv4d>x{eJxIHvF^=V#@yZ{YAt`Agy@ykJ>h!pdNqp<)M z259YVrkmlWWgTcm_RpUKt?GXZw6JA-4z$8A0j&hk$^%;Amw=Y8AFxJV!(Iiliqv=N zSsCyX`_pEH7tjUzbdQM8YoS<66N{5Co$DD*v#tz@Pq`lNVs|Y75u^C603n3S?b=1+ z@gxZ5 zryNy~(+ch_^>tDM`!Q*O6%wnK87K$eJO5Q5?Lf(Lo3`=nADoVA%!Ur9=%( zk-glRtDHfkyaqu~Yi@6a(S@1OuUPqqm#fR>Buz{;1fM+uxl|Vw+80Gv;~Ky-U!wnL z*utaF=|FmI;n{``1W~TvC}itOL$+4m*X6R=GPQ3v`~9z%5!mpobT`J4vGU_ch;m9o z7$3%VJ#tdwN(Wn>(Zg5WkE{}tX08<)BV7+xyT<&+&lM^ANY!4Vp!zboSr}H~be%#c?W?V^;tHe z3gLLv!H3}UP?Enp`3Q9^&WkG1vcdQ|fGoe!$I8|Rh$H*n-3+(CDq1@8Tp5CA; zMTMCg*RiKR>Qi4q#1O};W)eE4b~C`XMHTgD)!^JwFstg}_rEu46GfqPAP03IzibIH ztAj27dC?qwRxbVlWivdJV&3ln>outz{I`+4C6YZo+j>@P&LmM+pLqUVb8}>FQMUDcvbJu>wr(xgX64UW zFP;xUJ+d{kdjN!{-v(^!gIRe%+16LQ;18!DS7l{hw(;!L_1RYJFeSbA{gG0F0%d%ec|B+=K3?WdX%Q}G_4nw>N z8n@zLjdTast2Kz|S$rd_gkBHE6_rc@D!2hx8U#pY3m>b9lf2=LJej`;tW(H zHBn}b_=CazjG@h;g(lv0{Xz`t`2ni@wT&Gg!7pDGi>esd5x|RhK$RSn|%$Q zyK6ND0^>TKBw8+7Zgs)&-G%>ku#aFni2^i^SM-<5`vZY^JKU^8oGE0`>EQ6f5eB-j!W+s- zaZibp>*4;Gus|jC)XHu;MExMWT+uuQV0OE?Pd~6kzPA|RWS{!xm`Ep6k4Z%mFU<^& zaZ$5l3~@-f*vMs`*FV9TE41lJc)c~(S@ko<>lYgv=I=t>zb}>N0VD&XWA>(8zUJ%? zb=4Wv)zlhhfxewdpEjajLmken?ph8r!9I3!I7KEWQ}Fy%5-`cqp;LkvoW ze)BaQ9)>@A5)oALHr`WCPH;k~EF9xAXnhEyW*--#W?ek5&E7_*K;tK565OD4+`hpo zl4hKaFh@WT{YFbsc=*m&U)W41nB5kLv!-U>(3*jAckNI^1zVbk6Zdz2ZhQ((y=GWb zGaEcY(i(JA&K##%NNEQSNTIn#W2$f<3rT+D$21|!nmXAVdCl54to&7R;LF-e*k0+a zk*q{0sQF*vx_Mav{TXZV2Koz}v6Vktd1U=(pSSX~ocYO+p(3?jJ(ZG`p!fA=_hzmxl%xrrz^f2ANd ztG3ER^9p~Yi6$5fp5^_O>_DqyNVHm!1nEy>$StyCz|wQg04K|jLIz@z=+I{M6T#e# z3|M#Fn#fUIR(#Z^_YXG&X^Yp_shVdx9M%#UyjblPr1{AN`)nE9k9Ls}1R>G4l&%p# zj6{gNd7X3QSVb1(I>7TKN`0)wOrWst=Mf0ITQOSibCd}_jiXlV!UxN*8!de(miu+R z2U7RYFWsc1Y=)2hO(IKUwf;UNa;gI6hZ#$zDdS$r2p*u?X_|k!9lIU41++o)3T~hG;gzSj>`ONvWB@IFiWIr#Vw%a}t%+Qp zz=7bQ0VOYn6J-==mDb?=(ji}!IsPe)_*FYH&wO;@12*GGqZek1%2-?XvJQM&9j;bhbD0L zZY*bK4WHUZ(maJ+hc#8?{IIw&X(pQaAYgUyN+WrRl?C3rfp3lA%_`893MjX>f^Tcb z21ye1mOKs*(l4XYY7C=dCV(Lt9&XeYEXqZ>E#Ibzjoz->I;CnU!}$o^v3oW30JS0S!$mOQk4a57xS; z^Vbg0BB>dFC?A1vBU75dkBJhU$u`(mofTVxwcuEu!9i82grp(AO{gErEPOV`#sr@So1CH6t%`LC&b@AZ^N|~gwJ5F(YcGW zA^h@LD*cfBxe0jM&0ej8e+lDf3M2u$Jakuua%E_if`^H832G8?mRxT!oiabG=EBsqkkdP%Nlb%I(Baf0_10~ON6HGT6IU;-% z)+U%9=Kr^46S#vuq6@YTfie0K8bMVGUN8>PAkz`v+WDn@OCr%S8x*t_GIc|K%g`Vt z*lT2KKXe=S4q%}%fFT2xYYbS9foWQAaAF3B+)X3`WndzU9@7sEm~{#=E8yK7~GKJ?#uJk{3koqDU@`%(=?2gu3AL z*%58F*!KUJ;75s z^rWXa`NZNttC%U0hrRcnlY4R)LKH*stjX7iMMJg-_#g&uT2F8F`1*ZK>sJl-)nHVG zmBLgrZANfO9+hkXy$8I#93HAwiv5|uG5VU(h-tG>&AjPQJuvy1PrR#y3Q3pc0~jq}*|a)?4U@hEbHWwUBI!kl3$WO4av1EDIaDqXJ2ErD zOqBF6W&uom_rAk?p<%{-AcnaARt=Z^DNa^eEpLNJ{TE@mkR2FppUz5|wWDRRa%(M` z<9n}>IL3{fP@FhDxC{nE-LzmiU4-`y5n{MBMdoUt!bhMYv=jgZ#2{9zGQ|gAa%de1 z-$)!CsgE$T3+!e$rI?|%fSXN-<5zDhFQfuNFxVZ0zKVNz!U-4o6Ly zQ?w~V`9ojDoI1knRo}uKU`7p_P@Y(s`vC6oM*-rpI+Q!u%B+eyyA+p3RN480Lps9fpW|!=iFn zK`R6`&8RMM4Q_NEKVq9og1rV)mkv5_r{E}uY7$r@3e2HhouzN9AjnQ(KCw?YLpUD% zyow5>u1MT`DgK&lu0u>G$yvtAOu(pNn z5ly$J0Xu{FZUTHFny z#(j6)laz#yzPB%Zh)4+}?G?o$+3KsmSIRr$$!HdifC_13XW2kFL z%e9Ss4clbI6e|M7EQq20>CBn$+XE1Sei4#S#{5cglYibs2jk@FgWZpj@MsCqx*siW z5pOo00MCaf3B(o9G0_y#X%xf$jq26W%G0u=0X5&YQ^ml*ezIW|-F@IK`KkR04ZRO; z)o#orR+wUfBLeBXtO9T>A_7}6G@J~>+L6@bu51^vtURdMEPjV(PhJ0YB@iH!f3z1L z9uLrY)cBld3SpVt)#S5KA&5tGKGq`KWThj0BJOOfN|9{3~Ef(8<44*yIp zM5he7+mJ~0b4z5LM|I>;4ujU|B%~vUIlKolVx)2)QUv^M%{IZhlAny+J{ihOi{3&< zZkW>)C#V+Plx9R4Mvo;0Zxee1&{YeLkf>(gtD`)BsjfcO7S$yb0%VOu1p?8CL%#@` zcA#aOIJ+FQ#yeuwLfAV^A!s%lIpZn7kM6W759Oap? zjg*91KPTT;Iy>Htw_J%~(WYqQy;y1wf;4L&CGk z-NbxohhD0(8bMEA_1RH!fZR!hx7be z5-8uO;da!A(O#F_gk&aKW%@mhv?G(B2UX924kA_Q%Q8JU3b_xcqA7%Nk;t(h5s{|1X*9Ka5$Jo-c6n zcQgKMYY?CG`>bDZmaSf9&12~~>rP*4t2bG*GCjYG@IAZjtK`W_&qk;}rspq`d)iema%NR}{-lu$UG;iLJ`4Z+Jw~o`)#c8h zE7tdKRWHyge!y3y=U1YTbJf+(oS&Ybho;q4Uw0wuDxO!GgS(^|Bf}B((c!52#^IPc zsS7t9A8t~I8LP7f!}gQH&Ffo+ThzA>x2l7->(j!i_37a@^{<56*0&G0s}mX9`qjct z^_k&}`p)63I-Vu1Un}hPEZjwGcM8Eh!DHAPX}%&XALZLcly67r7J7mutoLgCO1_*M z9V`bUB~7w`2w{5($LM^K+t9gndsG9u&Vm+@?6g4ix2eQO|LeK_?V$3-Dj^?v`4rN# zYtmA<)Q!SYpNG(8UWHgS`LL$oM?_qM zq?wVf9Rk4wZ+Q;;TOvhkens_ zY)A46Y=wTWRW>6U1(p|;N|t9@WF#VUL=shF{@{yz+PHg6F0bx|@ZtONUKu-Yol)-~ z1>+bpF}7B6AbJlObXE=5>D8w4cb3S3&su--5D(0BDZq6kZiv~^jAt80LbEKwG7nM` zV_jsdLk(ajAyKxBnypYqolSqUjblCk@~y0~wguP- z-d3|sHCsQ}{m30`f7FTz=Tr%9qW4g&!4|;jB|mcB41c!}t0W5D&Odm(~evrk(Szz7B37X9_2Qx-B$ux1M2*LtfOGbr6 zII7{e>KMF+wpTWs3B?-M@`{sJU1o;eg~h(VYp+#2db@Fo#W}pySSo;Kqn0Hk@$1!5 z)ev{TPErnE>>ogP3v{Yd!CZvQjhr9n!?5Dt1)N0tOLe2inS`$EY zM>#k*2G0W3@K2hW3-!F4GR&I~3c6emd z?}gG7Y7hyu1OE*rtZz+TO{~~tStB-M8^>mQvlUvf{c)|^U)WHlXL9~5o)ZOYqi7;} zR(Cqc0M=Wh`;P@pD{Et~cX5|I>KgZ-jq!U)~wSSD|LuWr>(Nn6CPgn7^_s6!SPmwoT2cZ>Y z!WFHs2Y786O(2lOD;hOniPA+|@=A4Gps3EKehJyW-$KxpVWdiI&1?m>O7J&TyuTUR zx9AMCt1K0q*r!lcV*zDxO}f`ELd-;adXlrJvQ7kA<@DP-sfe@<6P_!P+f_l3P;xr9 znT}=E$5?X-EU}{(TUla%==Z-7|I@t~E}<*l-}QpWoWz4kGRN(2xR%T*eIW7slI}?% z&2c!~E3H&Dfo;lcB-w^aYfkckgzrOwjBgZRZcZ~zFg;^Dz}Yzk?z7qo<;HV7fcoc0 z2A5^xPN1GK)CFtI5LUQV)0BqCHlbt3u@RE$NGR2nBimOTACZJjguQ3vtM-*7CY8>m zNqlV*zDYJJul2emmg{0UF(Id_qQ6@sa|Z^5&nbo;BlmB#1#2va$H#UOSmC_boKH3v z#V&Y4MCS3(KBYDpV;5)5MbLBoM@}D}kPD*n6;T$G443|s&)gT|L-Jru0w36u%Te27 z!@AwT70F#-8)Sz3068xcE|2UQgGZj9887gzJQ-O;$lqkb>ofKxK?RQGm{C<)@-BEF z2sSm7>Ecs_VIQvgn%Mo*q&NxS)8U5~Q9T_&I!cxR!xF@#l#PLgI2U3qKpB;?Z&RIEzj7l1jTFpBJ*Fz8K97V7P2{r|fr78E7h@=1uqEQw#<_dsmu1poD$ztHR z3m^i>@*Xs@H>xtH=&#t;Vhj3y01V7&PcxJJanwo+=k_AQ=&9&O@SCxL&X)(=XJ@WV(5oD1Q<_CN3hRGAj?| zLSlllunWfG&P_>+$Q9xdvkF=_GMFTZG0Gz;RseM%O0h-;N~nlou=%2==`5a6nuH)# zMUe7q%T$$|bOaw1nC;q&A!H=SvP-JZnkz#fhFx9XjJ}Z%Uf>C}Ln|dV|4gFy6wf49 z$xc63(B`KLZAv~^&T|YHojS22c%%~~py>)I9G62K77n4*6dx~1&W`-r66Q@&Pjx!XqAf<|Lb;~qxZtpMaAOg!uN(J?8 zL#4eP92tw{bugrtNHzo8X){yV^mmu)lb1i|Wp&;okmqw|ZBE`#Hc)=MD_C2=-WuAKq(cN<|E^@0W7yWAq{aNP9tN6Q zUBE2NhDkmz9~RvwMftdB=a*z&$u1;t8322+1nD`V%)p@wD5|76w+x4Y<7kcqL^w;~ zTY~X$VsR6KJ~z~^lVs)gB9;J6*@Og@l)527k?W9!`QqC-^8@oM);U&z60R)En!oZi zE^Dz$YT9}r1xwwBiTNn8?f5vnUG!r&UZC>hh%@XRB%px?%a$LnO ztf=cm7)pDoEh&O9mD{G+sE!S_4VC`g1^Yz7JYKMm6jZe4W0{SS0@0FQM-hw+@okMG zzm^+WVHQ;Bh)Y;ZG!GY2(T+Hi6K2(;&aPJd9}5bV!*k1WPFWG@3mJJHqX1>UL8?3Q z>)XFF9`0fZ7btmNr}DTCs;csIf73?MW93#HaO@DMpeOiVCx$mKxNe3>jMW4zfG!C0cxGYM|7*@?SCeQD=2HA_c6jt>VLE?ZC_s z-Wi$<*Dhi*I2>WLWNKfucC3t}KQ`&uthnibN!^>1HEDB;f@F^^J$pIXOtVv`PPf~b zuh?yO+1@dAl)1Jny2yT3ZCCcY6?V5@PxcJ=kZ%G;-;#fezhx&yn>PhrQX^ip~*gmG;9a=A?xvqtjh|>(yl0c0CPDX{G*6& zp=>K)7G;pV625&hIIDD%nBSsUKeI-%7$xC|X%%y3B`ifvEKS-=0{W$_ax-tDB!Rh8 zA=q4wuL@-hEXbkCCcuI~y0V^q&|`c?l$3eKf+V+^OC{6l`RGC~PYug4$y1H${+XYt z)cqH2F+*8lyi_-9 z>%c9Yt8!p5%QH=om51voO&S4iyqfh!xJS&$s){^Wk*6zmXg}u;(~%+FQJc%;O?Zk@ zmXs;D93-W=zFW!vjJTVz+vvT43K1{?fE08hU7txMCqr&w98E9^hv-eyTLI%%69Dvpe&I+yk#cTrCYmlsQi>{0wsI`KxrUjWK0N=L2 z&zFLm>e*IU9Dr&KR$Mc{xBnjWrm!hUI0gyFCt5hsvBoEv=IYG)Tk3M>OnE()&!9hh z%RAr_KBn^Bhl+&mnknZrDMGlmPQnIz3ms<1gq;nk!pgT*s$dy0ye?T#PZek?ad5&^ zqhDw=>@%sBDODYp=qxxUB;2@wk&d~c9=e*%X0F-)Gm*Kt;eJN1cFltNvUc{T#N?nJ zLd64z6_KzRTAME?*k#mn29$#QOWN+&s?i$+hNuzrZGV#+z%Or+3UIg{;-6qs={R zxV!=2(+{d%B{{MB1*;MTWsO(Bp&l_-T{VsEpBun_U<=5Z-xMtmEi0a!h&9lGE4z9@ zJ#O@1JH1;Be&2?JNKxjs(W<2oOj+PPP)=@Bh{ZWpa{_+YWIw@oiItrCf#DLg1%vqv zhYBFpXEwKSTAZ?ba}MKcwfSP^NjP8ZJTZQ6{gvLaZ0((Rjo;q$I9SxK_D7Q>_qCb( zsfPTi&8})QkGI(;+U$L8h)QeQ}Pm ze7oJQj~MK)#2{-}cnlpbS2YR~P=}sikLDQM3Mbpzkc2rdwE6+i)efc%ME>1^Z8Tdv zxfpb@Q1RS;kPjCPhK3A7hol{-UYCk(Ca8R)nk5(lAV;S%ytN63*^S_c08Gy+tbeCy zOM1t)HzEt1oP{0=-+i>3T#DTV%%%!e9q5L`Cr79a)B#+bcBc%cQW-qp4vlA2u{)TV z9l^a4ovvonDtgAOTWAbPrxY<|$t}+^Wk_Q^e)@9|xpuk)g+DddCD^De%PpueH8sv3 zs##4mqe;ZCX0E9P|4_bSw)r9a*lal%kDfW^d$OPG@1cM-_y|#W+6v89rL8bCa*f~YOm$~arDen~gI?-Cqd3#* z@}uRXR0>{(_Gk<^7RSUqBeGh@77yK3A}@-lc?*U=yRCXQzwK9hRdEFQj~E}8Vu>vF zPAs3Vh0zCD2%eiOi$%aI#tbvck-l;dF( zbf!RUbrgt@!*5O1?IxdPZG}|eCWVVaf2n`9SXtK*hn77AkR6Qv%lm$`GbOf*KBi*u}A9ib}$cU&p|NvVADrj(0k;93kYmdk9F8EoqtRKASAB_ z0Old{Nnxbo;Um-`%#wHRWoVgvC%Z4DA$Wq8KpHAZ0>|1s;;{53&2ATBbn-x@f%WYl=Y1(N57(LjZ>D+HUf0XccLk4pU2w}M=-sPt!>)2(G_8DOYBp|%!IoU7-9JZxvE zd5t=7rNoG#wP-dy>WY>^q%t;nbvJA@2!f&OTxv39gq2!AmlkIdMg#JfZR9Il{05=Q ztj{j90R#Y_-uzba1@%QM@E54RBYlhyc&L*I45sXOkt#4_f5?ngC$e_(dLEjeQJz_x zQG(GdF?)-^dU58+V7`XHi2Oo+W&b7Rg-}RTmlSfYXks=Tt~6yYh7HHUDu5OO5ND@^ zvPAVe>82swCrke*=+3l9ZN-BONzmm$mSgNYZpD>(TJUow z>mR+rhTKXh42-#hWY9R^@Jr5UyPSyunp&3LyT;$^HrHt0EZbc*_RhpzmlPE@1@@AhwkygdwiG` zK1|XMH~@`wD{QAj0g433XR)|j6^$NGHT zH9EA!Hqw7g%}hPS#~v%e{jiug5Jt&-6}Tg_fK-ynd#Pvshc;G{NLFdwm9t4UOWZp3 zQO#x--IdMvm;o&5_j6u6$7Ih310XWYQEhm)aYK2Nc>#qyN^rtNO=8p_#7(><1mM#- zuXxSpGSaI{1Z3*37JTTksuPc-$ROAjUIQf4Wy+1U>(KTq6~~(ev&=}HK{$HTrffDt zn{-sR^rM0(fL9-T#)jpZ@CVN|NA)qmwKhh~fDFEzr$uHWNv6D5NkP{j*ST|4xPy3E zR0=c!KmpOVQK2Xt)5le8uUthpZm~o%ZyTiMbN%K$i}y1l?r-xnFRq zW8EkuF;#f*DZE9F*N7E$8Oz!J4L2-I%jE1~I74;A0zs<3CM|07Z5iO(65ptOWh+to zOK#v|YI-Z%#vO;n0WDwplrF{MWS&#bPdP5UMyxVPOAeA__ebCY-D>-}GlR7vzK)r? ziA?T1eZO;aA?-AL-u`m6f9E!5$2Me`kR+Y3Cdydlkx96Ublu=*fr(5}#W+86W~EHQJ@qB0S7QcM&{T=rEahzT723t=WQL@I`eljFekpbqykg%(jp&cfF3JnNuJ8z=V z^cNK-{hL-Up$w}jrpxAOzk0iNOp??faD#}^K|hRa`?i%AfMo!thnc2+Z0lA^zm3KP z!EA_BJ1pNgjoFLIW_B!TKZ0N<=NUtFRtH)YYBJC|BC`sEnYaTP;^k6VrmTw!=gVO+ z{LjX{dpfD#?lJ@3%Ev|EDMqJ+m`UnPUBHzTo39I~PJ}ehwX+uIo#r29euB4I_QeN9*mYHWrrB8Hz=mBqPqO zc5qx9sy4TC7vmTvS>QwA5EGQf){rrSm1F)aI;O4mw<33ijq(?TxGAw>k7ztz7e-25 zAeO+SC4{eTSTxBmEZJW!?={sxv+s-K{%C_YpAXI2P~JBiRLYFAVBv>JuHkJwXF55_ zX{zS+KY6(|S6P|7;d={={eGVW`7m7=1asiI$H*wR5usxnv5t6mh6f@bQ7z!hz(xIF zrl1@!b^s!wCCX{of=0_Ims_u9E5vLuKT|i~@_KH*na&>6e#szz*DF*!oD5Hugz*Ts zvA;74o^@1KvmQ@u+}V`X{NU|kbO2Z z9IVE?%d>fTJCka@j?F^^o!m{@|E#@_)sM3333(YpjbZ88N3x(;W-@Zl1)1VSP(Bd- zJTQy>DzIou&TZv?O}HttUCL&>4g;@|3&)5VWEfH%&LXL2AvOe$`NZtdSxQyGGS!0R zniRBIA}K7eq=fo)!GO0nLsDwRMvyYtr!C^R&{6D11faSZ!%{U!h70SiK^BtWMAA6Q z3UU|Ovk#&pZvBpuVYw%xwBZSq1`U1)KRboLENWw}cpR^MjY1jA+$*6QuY@kIy95PK z@3$)1X2+y8-q3B;*xhQe@_}C)H3*xNde}J51ea)S{-m|}G^<)(dUE;ReB;GA^70(> z(j0kxj=VO#Px)G{s=h9nQSLkcW z4rxoa?Q02QJB9EyI#r1XWQeXPuzH8)l*9$fSF)9(HZ_3FO}##L!s6M@vb%M1MZ~=w zYJtKm*PJ%%b4^DG<4Jv@mn!Fi4|37#v&}2Bp^74l@lp49a|sULvLZ(}ypRLJFU=OO z$l7LzV-Zq@W7BN&&}^vd`E(7HVl#{P#@xcn7PJ40&a&5H)!`E__I_fmGW73fi!9r9 zWKO&2)V%!;(AQ$Vqu$Pu`z1Rbp(2V%Y&z6x6C@IboW@Bh^ot#=-)XqItC9-5Zo7(D z5jgH4-D*5H+~+fg2mV4_@cB87pDYZ%XU0<2x4m0kmBapB2g{G5gX15?o<|+X*=F~O zxkuz)!OzUzE1}VA z&dCw^==J=Rwn{hv<-&mY=IeEV@$Y`AYAZdYO>T0KiUdEmLDx4v_ zXUsbp#W4R++3R-Q8M8d&*~9bla!Fn;&dY6i`9O`Jw>u5fz~0^s{bdm&)f;C3|42K4wU?&U-VWLD8`~KiG;{bYlMTq*5yIpc;dbEO+B|LSK3vaY&Y%v4n z$ugmhIaM38(D&J=nHJ`}*E4|Gm@gvp!AU`|mDz+IX+}WlHl21nvQHbj+=#H|$TaB- zpiGj!kBkO~0-e ztA^y^I-A<_sLc@+2bi945D8ibxq%5GDA{4*(0Dj+kLVoDH^vO{MCZGn+N4ZXUDrzL zUL?UgC9K>GI(YwU@N1!xOl)PT>IH{nDxtBNiTnrGI>3rl8lS6fxRyxyeUe6jqZq)M zmT-UOf!84_rbeCAMMx_}bFE9(TV3cd6^{F%GAC9KC!ua2&x^@rdngr67uzAKcSns> z>mCZ4%mReCZp3ANqdl{GV6==oIo99Io^}tVjavq4Z?vt*>&m8=k*H1-d$`z539JzO zn2Z_j78DUBVQ|g{%?OBioVl_jSCvS(n8A4R{qX1t%-i+l>;W*jTL2=rmgJ2Ro-#cs zhj!6tvE0+h8&xXOKRODDw)g&U&Jn*f^M$-rDZW}U_}G9@r^@z}MZamy=%IGZ!mL7Z zdRfcWylQAhXEf?Ciaa0+6I;MX=&wrm$5o3MSRu`H^GRj<57t4XzNZVX&w-`+OPNY9 zEJKyl@5N*hGxg0QMRp*4O%U*9zznGr5YuC_B0O__73<4X+V$tMJdq+8770mv_6g-w^^aMBqZUOnF4|gJM)OQK z0?v!rD0=vmTJdyN$k5gSVB}s47gy|!Wv_W1?!Mcbn<6& zbj0qN1N60r?H=mNnFO!ajiZj$$ERPXJYeN6ppKg_z-Sr3Ceg-%pq zaEKXZ2FM6_5pKk;$X4H}@dQAi$qUfAf@acVwR-itp%+vk zu|`@VCfg}yYG#^D9T7a(5^aqP%>bfWQl#r_58mccTy-t1 zkznL|_?VAH|A_k<-#)9ETnVJ!}*^6_dbX;tLgz zpqYfjD@WN89D&J7)yxF(_41__5HYG@EWyp`qq{2y>a}ZaeMg(A`h~8TOurhsW-7`S zG1Jgqdh3H|mrXU(vfKyl(@zSNM!Izl0({v$?bj^{KbEvXa!+WMm7R3Pt+Ct|o8NZJ z+%}A6SHwt$=EG(bymZwGUFO^_?XJHy%Sp}lBIVr9YR+Efts4K_&kKH6U&iZJmj`bUwyS3?MPl z937~JzMD(#x<;~z+jO~VbvS~3ITLpx)d5DgR?SPHS<>2dLK9i8%+gjoelBd4%UYQW zi~XhRTbXlti1I+t&;Xl|$3@fS5`9NL8uiif-t(qgi7;nh_c}!F7G!_e|9)txMsqg6 zwT7ES8C4|W-(a6cfu(?@^xHQkkZ!OxX^QL6yqa)h|}8!W7Pe z8^VpQxt;|7fI+mU)#QU#c^|(59F)wboyvb3!|L3RbSmr|V;ey6a>d*SiH+_rxqC`- zZ%OVhnLm^O3gybE6h%E*vbU5#8$0O$TepkWU8y9u$;<|3SGvLG$F6Rg;u=01K5Iy8 zldUPbSR)%fhqKUzv?gZ~NsxoDtZBsdEkzKqt|En%s79Emnj>k;K!$)H zrNB!2G}8odNCjzkR&ptox*D}XjXG3TNbXJ%|Mma=e)AP#{9Ek96=MB9xl^_c=Hoq% zyOVM!hlk0%R_?Lp1t-rtS?lCQCodDtr*Rh=eepU@*FNXxUs=)6k!=H49Jv%P8Whtw zPAgqR--1t_GpausPa0wwf1))d(OK4sV<(1I9j>6Ji?A_Bph~!Ns2^`aB zV&)q&&)93|NK`tRp+(#Tu+GvK3^Gl0kIDn2(?zgo>I(~A2&^BV~hh(Nd2Z(9a^iIC4BqRZnAyFBek*EX!#ayqRsq!PVs9Grq-x@#H}G$a1!w2?jUk%mL%nVui&*hl9>W8L z)H1R-gD{2S6s=3h=`z=(J~s|o3!6Fql2|a%_R<+vl&8i zhcj}4k$Fbu8@Yr)9EMMG@;8(KRt{FO(c^YaZHJGjLoY zu>yAsN~Mv->Z9A~=T4Go>ARX}m(&j?TyCZ_Q6WG?6h%Z3MaujAt=T7l@BM%NZ%+2?y=U(|v(~eo z_4G1!leKTQkqEw72L?Rr2p(sdzZxm(;v(<&cam@_VkeBcq~eGlpX&Y@+&b!Z7%I2> zS;gI33ET4O>qUBOVPC`2rK;pVQn@68i5YwpreLJ_&Wt5FUQJhU>O>nDq`&{s)IZ>h z2Yq;)YeTdAlj#g>L+na^dv#%*S1|zcl&ZfF1^|Y#i|qH{kIY1SxP@+}+f;ReX&FL| z3Z0~UEaV1FGgU>`TvD6tSa?2ke`KguznrBy+ZaPkk93b8aMzxZ$$ru-6hD+doga~# zcSGF_xji@Gp=ZBeS|Tlw9-i7eJUw};ip}%)g?p+{jA6j6rV0s@v!k9%jED431J zA8_yQ9jruL zDK{2)lSdrlIGbeJMbQPY*1#8AYt6IF@%kn!9Rc|Py~)+s*A!ZB->tcqYj$0g&~o*U zq089CtZsOhPQ5}IoD<&#Q8~Cby~OI2SYY1s#cnmRQp0Ah4Nep5Pw26CJu|h>W#^7Ih~_9X zetO5wJwu88E8dPm7^&rkZCx%BM^Le(jpZ4~@(lZ_eyy=kEKwep%g5JzV|=-4$#V)c z{AX@Ycw6r~N4hHiE4Np3d#q-U*X)(@Q+dOFSFuv^C84?EtU$V z#2VX$v}LUN?-lO*h28LPpnZnKA|$6)qk&R|D3CtnxFyu@;Hf~1Lgyu(u8skqmdAy89{~~EW&_X# z{t=B0x(1@&w`(0(u9tEGWS_612Trw%DoWM)dZl@i8ckNh z9||J6?X`b{=#7$QRC?3dIhEGM1hV^?8|2azqL$r6vo54cL=;DHnA1ySp-p2lCBCs2 zn3Eujd4Zm>@bM1bVWDmjp#(IC7Yp|w4Tv_39eiVAOs_vVqlwK5FIwTRDZx0AS&z`H73=6Jbf{^3X zWL3+ZT=nOtMhRGYwhP-%tEy_{G3H;ONoCXi(zI1APNUr+Z;)G4=3bCGA~|-pPi(V9 z@h#;ak}~B1`6SwWz^bXtbd}AKTIY3`iB|YWoBW1BY?qwUm9=4I&9ER$CS-oljdEp8 zkt~3Qoz$=s8}=>AA|qLnWXin;Y&1O>HFyOU3~~Tk*ya?V+Mz7(b~rt9x3Qa6CS;nY zjP7LCgRxP|*)8foCBhrn1NCyRhnuY#*|}hLvmp%uBcI$%b`Guc{DTd9LIL3od!}KJ zHmJB@*U9GjN+Z15z)nL00VO;Cqrt9vMX!I{tX-n_z-W%&)UuVM4tZEHqHdXb86URSx{iQ zMM?1b6;dOvE>~ROE-E8NT$L(Xi*J{A;rdLa+yleO^SaB|y4(pA>-8_Tn=k1eB!hI> zNnLI30Y@4MeI;X>=%|CE>j$o%a(!w!g4xR=K4)Jvr5pL9-axVJEK#igi$QR2aI2o2 z-JhM-vZI3^^RIRztvHVcUGh}ooqyG1zllaF8Ni5qezEmtZhAfmR`!EFe`O!LeKw0O zSOi-p)K_7sA+VIQa3Va*RHj30gSN|XmJ=$0HqoI*T`77dB>{FMw|Xb9@>%iG|F&#d z5#Q^a-`SFN${sq(c|ypKLG9wYSP{aX(PI$`$k)jxq6TD7yPk@mzbm#k;%Iui4p?2Xc7eBNP{Kw`Gb;xFN->XLo0$ z@95r`CN+if-jUuS3Cg4ow-z13#$m)<$x86yM-3muXgsF!M64{zK@4=}dh_daPKDmW zTQkb*K<)IgTjJDXwS2iyUZ{dc1Cb3_T?vPqewOj+n`rrnU+&AGcNcN`B% zql>WeVFb(@Ec;64?j_k$>f(@lFn6S5+@-u&rsf{P@QjKK5r+~5LZ=mHApaed$zP=? z!|`o>5-1}5;|mza%5`*9IT2K}5Y#llh@DGpQ9xKT1^+8}I9WZl6I4NZIic`ux=E1y zK-=JK!-B;*Q?F=XP>RH6sudzZi~7 zW`ZQ|o9iVBk4jX|AQIqK7w1J8ah$+uOP?r zITBIlRn%-B#6Crw>iD1!5)u{e1F?uS4xtYVr9^SW0iipRR|sT&YphTU(&Glic9pIn zXnVD@HLewp*=k}jSN4_r1Is6?VGOILg42R`Xy_vd%1UaiHFx$a(QQ6Cw>;1O%Fknr|gQ_I^pN);pDjfnt#ZOC0&BR+XLl1)|mvmpA9^Lb2=sx4)(CYgI%z_oFPkox7niU#q|hy9@Q5$$qEiuMEwnsM6=YTLS@~ z;j~CF{U*@7{2#cbeYNgSth$rn6;R<5^X#a+Y(|nDooB~Nto&EJ;#cde@NsG$03g4j zI0QSr9#-f6g3Qm4QZnZu`69yuOyMN3m1rj(l9pvzc!qsUlnhu!dZ6M5Qv?a#;zh_o zB=UE&MneRW0?X7s>cf0PRgSsrW}D>k(q>b$VK?d^)7i9qjI%SFb2!drT+u;B?IK&U z5sy^+<9*5V^=u9*4wgOFK-84F(}lx32LZa7L?2N%GOkU?CNl`G&M`WuZQE*Jy3+=d z^e!ROyBH>CvOvEAvat}ZDKQ6I;6PQCj125F22YkX2bV|F!B+8zVWFO^Y?HGo!`+-G z=~1Ly1ot~j<7<`O`knR1W1HY<;xZ;INsd%Uij0sJQL{f({4*8%Gtndk2?cWrHhw3N zAy8aZrEuMEjE|?~+E~F(tJ@iPf9mdAaxj0pZfh~Y+c)d>ecn4jEA))(2fhPCmJ| zMnhuzVaxF9v3wGZqMUQ7f9yf_OrYkGa=a_}Y%2Z|v}Jc~%WlQx0S^42X&2)f zXxd+`wa6}Sg)#e8^WPVunda#an=%&t-P{A#{EfMznqeC7K3()P!u?EW0r(1_3BwaQ z@Q|3=gbYOzT@Zn4T`g!p55{h_PlG7hq?Dw(&Qc9k`^7p{>(uqh^`Izybj|b#kfB3@2w80x^`6b4Y)~k;Iaqf@1-~F>;f3LIrI5ePElMp0Q87X9$8Y>M`opD(Y z-VcCUQ&!X}+rGS`b~tyN$XbEEJF`|h#x>OX@Gcb^@7$Zb%vg$#zG)~2vqJce!Z~d_ zw{5q+X+$TWaJFonK>tG9j_MMuS=M8^?3Yb|bynG2;&KXHq_&6qN72^H0U9c1A!MMzD8$5Z?ZB9yKkCInq1!P zzujeLcG=(JsMd7ZU*9;Yqgr-ymz_=$zmqZuI_t(9JC}~uCpm&w%wP-T=!7fl0BHh` zuHi6{%XlxF7L!ubQ_s>&CI`kCDQJ^3HM>X)?@yjeq zo|Te4ewh!uLlEo^^#dC&GHLuGy}F3(<>f_I28!SqS?K-a&&i!CjeTJso2_sc^r7w9 z6@9pR$z&F-tNfz;uys6=Y4Iz{|iGDW(8&sywpL!oA|HVK`J& z*FVY+`MEINVOV0pL?Zt+FOOFwpEbC}Q}({(OwuJHgOQnq-!WlA&xAotH=e=Fp_~J0 zkI`6dN7E5bb7+udiD4m%FWNK9wP$LmMbSjbW&IvWg3p-3vD)p^%H0l;2}e}9_twd? z(j19M)`CW14{=Y>;oStHn`KL=1C&VfoFj5unzFjQbdXsEn zEx8?225YsQUs|X#IM-DI8LO~evDCe{Si$VnY@9R=w-5f1GTFRk&7OT}6UuYfa{n<3 zA8i|y(4b}W_Blx~^N8W%jC6|stvS*sg_pIgAeydFWjM}YuoNQ@ee*pHqIyA>F7zyuXul^NQU#@_5L3&9bp)m z+ZtO~R5exAKfsWPwd9w`?>sz7;w2c?*nukUe^Bos&|tq=WuwZ*zI-WjP|jNjfIgX( ztO?m7+nmJ0U#bS>KbRLFIm%Uta_F^hD{1H9ESiJd%|^%=RSAvHa7~^Q(|0cC8xT!q z!|rEMB9c)vJ?y|z4xoGOQl^xdKUjHd;+!bANTs|IL8B)Hjr6*>7l}Nx04L^W0*^Wm zpSQA>$X$awxIm{jO5mMVgGIaZ#88|%Utc<8rkdcY$A5iG-*5qh~{~f3K}wis@P`T z3v3Vjj=q@LuFYMHat}*jsJo#aPGwI_B^l@vAMV657sz-#l4T!s>04RE61zz80rNKx zA4kpMqy!Fu5T}Dax9(EbD+Vc%Dhq7+nKk+VSLjp1&kP{2VhJ0y#Y27Z4r+DgIgL&_ zl-*O7rpsv@`sS)R&(k7{qA~a+89Lc`_;Se_#AfFF@64~llmLQPDgCJ`4I8^T8eJBq z`FSccfY|${VGg0+P~9)TF+A;V2zFx_j>nJ0;|Jog6^~Rlp_SZ0y#SxMJQk+PE2ch- z0}E$2Sf%&aeCk8AAlatlyc$-o0G*YAs34v%-2q!xCoWA?lL_qLml~fK&sn^(zAtwh zxEZQDI6fI!iUER+%P*JK_^#*C=v-N!kPbB4fp|rzF(QzL>$q))*}^&Z||wp|69Q`W;WvL{2sBYq3Yl@5WP< zuA~N3YS*Rq-OSbzXqUPpQ-TWIAE|)=RYlOfidxRJtNFKlCGymN>)!Mua+#lYO_G^s zu=U5>ngLb1U{Ba#6mBo0+OEZTHRL&7AZx~jjDg^HgoOJP8gd>5QwHqme*2T&J&n}j z9yhzt*(Z$AmScO!D;(w!ca9?vgHjr)oz2KocRnqa80{20!GF_lzwY<(2!H=PB^vEKh;Zd~P#of}HUCBLNY=h3 z_-mwV-8#W;L8u5(d3MKxJ}|6O8TnEL!?=+-rp$ME3UjCg@SJ!v@{}k*M_9h-Jf^hD zUyJY@h9T79pM~aq!OlvdDDI4+LhBSnC&gd<(z%B*twPJs%bK@mat_|Cn#>3}`L7iK zibnflHT;l){~_xxc6OLg&4Ixysghgm8WLbPq)J%LDdeKXL#m=R~7xWu6j3ePO^( z7_cu6*ipnfx-Sl}Y|u0|2lC#(;}?z9p{*O)+knM{lnf+jvt&I+Zzo`zQL)x8_kQ;g z|FP_8moBJmVbic?%+NP0RA&5Hrpg1oqBM+3yB9Vn{)Ri5ovBQZ24QtY9g$WM0isvA z9BT2b>u>fIgS3K_6-jHsuUX0wH)_~=Jf#R@qT&o38MX2kIZ2r|%gwCL;}`R7&dBU+ zW4DptB>sBS+9KQ1lRT$}V7hCzwR=a z1}I}Oae4C{1kk^;Nnhh)&#;HzyS|s=(Zjy=_bhy0`@OXfg!gZ?HJg#gZ0ZX557`IZ z0k*%gPIa&JAb(&+ovQq!{$NLja!p!B=d;Qo+~pH?XuWV$wxgNe4q4qYi_4D3;5l&zAPk|>Fo5cXWv*APl18pcXqkv$@xfdbSyMnZHyA{Y;GY$hv< z$OHco52!->X|_YQz3Lfwg|V2pKa<|xhnrn7s^6N2(%oOedUCTS}3}=cQ{k7t5 zuUMbowtT&RAcW<@!e3mt>40>aO$Tb7@9pm%D(shqe+VA!e^vO$X>H}nq$>TQuf|$w zFA*)mm0qj5BWw1JHP25t^_MHas%p1X{q0pU9z90Z8Y(<3P%yt@ZDK?HwCeAx zf({xYl*LoM3jNFzOyXc3Z@D^LSGa z-!WNlSyOl;x0~EWLPo%q$96*9IL(kE++B4OCLz;)39XYP5Ox0miUm3bQK4XSPWFh_quO2!I{~kT*;$ zg0n~>A(e(vl_jBYGq|I?cuSVzBRG7^cQlui*oj?0n-?8e7HC~_bdR!$dgK` z&+Hej`JmQin+^E3OgyZP5FHWC`w3xzO6t;^RQKscxERqs zxWBnKWJ%x{j-IqOq3<2{pZB9dO4yQ&E6A%6RW+pB==YY1rjlGN$*6Nm3$#OAnzu+% zJG|J}y(fR4p^7f6mrt$oDJ`Fxd)eOYePgiVdm72j1l;+*26qgMpIH+Nj&s~!uH-J> zL6~UpMfNFGWvG>cjizF>_Zsr|A(q$=$3LRSCnY2Lu_4~8?x+k=Xr@N3WNbolhr>C# z;Oh~I1Z=ahk*6@4gS+J({=8t?2ZhWGY9arkvY4>c!-MK#{%Vv9vMWH+cQr9wlKZXl z^t__^qOhcaY2|q;w1Cq3J-q~@f07h{f|k(QHBvsw8rOco=aJn0rjr1D8bGJ@HwA1u zAR<9N%f28#>+8d(bB=}&ctVXaPb0XEC+r}?K`^j8x?MZH)j_#=$)AYn7wh3i0xZ@^ zC3J>7)Z$Qv7z#J<=jLOJeR6nb{nEYs-d3)f-)rjLMRKfm#PvAq{UaG^Ezk70ciFYQ zMo%8r=r@_ay_fsH*Bzt{PaaM|vgs4OB;utI$Ew@%_4*&c2z~>y9E41VV7eLenKoua)X z!@G5&zp5ujJJj54<{Pb2o0pz$h%96nTw#%$P&{x)gtw;Mw8o~XkJr_jI#{Jm8>d$z z%24LY9zb6r&~#ayyT}_1$!JK{#fk=NY)|CVHHKBPNJc-NoTNB_fU$}D5#mOuEK1 z<{KvOFE=|2pH++Z0){(4zmJwUfv5a*PkTRB(P1m^v90az-*EjpBgpr!C8ySjOuZ@( zSLf+fxvdHQT(b074fphT@sWoM`$b{*I(y2ypLq8qRr`PR<`$$ z-Gj^xCKASz)d}XgCAU)*Gx@tXl1p<|o!guuZS^m?onBF~0DR~7SB!yDqz4`MZ_fXi z+LTqhI>UygLDQSu-CPih^Jc*+^l?FG&y$q0c``@8uN)47qD z5UH>mV$W)X2_+(?qBqPN2B$5hRY8ho@P+&VTb;8G-3iU`PE;Zw43tay z1&gy~wu9~njDZ=7&{A8>=P-8rVZ83m4K~&Fy1i*94#5DY2Ub;Vue~!RE^ToAfbWw6=D?2AMHZ$Z`GIV4c#8GB;WkyaxPSs0=sLYDP zjaQJhK^~td0!&%Vt(PbNP)+Oi0iO5UFEhhx51(K|joCC@h8v|D2Sm#jqyvVs3l`rb z*^cY+l!cuo9vWGx($~7BuT^#EI|7(Ax?K1CNzMChE7z$^+0m&&bU zqUe}jbzXb0ajSwqSC);lm(DLSZ(=@s>PGjz8yvYz=TYODr^*euo45x`46%x#B)P4; zvpr^X-gkH2_jaCX`lW{ddbgb}N3(NZpdh=g!B=NrR5^BcYB!-1 znBVO&O&1ns_wz0OEjKbmzUCpF^4VdxNhC+ksjL{KKpc!pK7XybwL+9>>DkAhIW;?J?$?oe{PG2 zGX=Ol--VEsxiJ?NryOk_h3K#iKx$ehX)Tj7nv$>{eH}PSw zyQSA|@5Qb0jh^P2J?itoCi^p4m!bJk%kkpf>FvD%<&z!DhYbvqe1TorgrqAM9E%cy z3Zb{*CKt|BG+s&gPb8)dR}jdvl}HqUy!~Wv{{Ux_G$-zdxQ97UkpbAnnOIEbqA_=~ zM&CW&(<}lA_w~jNt-gNRd6Z_E?x&?=eukd|d-2pM+t||{meli2fH16tcvMBQZ&|#h zxs_oA!*}-9%C^mIT1y!7c5aEB2A`$sVrd;(Ez95<%U4qZc66GA0fdE#+uL>%d9Hz3 z)3a7OIk~luQXOmr6p)JhTjrkAfb~as#!C(Rd5_&EA@UbJ?z&$4N!$L|!uL&9c|?)F zQFn#(V>US<)n8WZ7#7h^>5{WCJa2DC})l4~kia~Yk{cxKE0<2dZ)J`2Xl$El^K;pM+UF|&xoh&=V2nid_RoHIg1ig% zk3?!KCbso}Q`e|IClu*-eFYXp^0 zU0gcQg~q}c_YA8Hxu7%elhJV`#DJ-URI5iT5pVVFMk46i{)9<(!8A)wOr zR4^pvpw*`Eh0Z>7$=aAOr=8OILqLpwlpz|lYX&LqQpF_91d*btWU}8RUZGc4n5-*oot!X4_yRk zb`HJP*fQ6*kKHy&Sb2ZNzuIH3a7C8%rJnS?=!u882qC<6lMB=whfG%=BBfPlWNys+(t1W0PR;kwINw4ksT<~-b-4DM=R1&`JM@P6 zUe)Wr-z#S29M8di+vgtXbAQ%sPaU$c*XNsW&TY4FGf{c}7N>eeFFk=Wp$^TlzS8YhP4ziI6Ss=<|2=*-tpj zFYfF^_g;;Y-LJLu%pv;@I0VLgYskJkr0ZWgCA@7z#n_`e{GuQUR#p28Y-T;AnD7P2 zqeotnzzEwFUif^bY`;9ZkzHfME%6MOBGpl%mo@NxF?Vt*VzR?rGg>P_@^4dbCa+Qk zm|4jLdsSzoR}R?^%aL9_WcZR9>77$3q#LbbVMM0i7&O8DQ`;{YRn?pTsy!5ia_&~{ zx7Qb9VzPFah!)Z_!5JxU1OekKOukxLPMn|B(L*|ORm9Z)NE*8H~}aj6E=1uGRfh7-(Fp=xka) zO!PS}-_ECZPO&@Q@aaRt#Knn`fi|6Qte;{}l;2o4#r`lw5PWqQxp_V@mtA4MGW62i zrzN+?WfLIvN^MiLjD%gs_dOKZ(|f|i=}m`X<%hJaYwWU8c506AedH)KdX6m>eHh)i zvjINWdG4%!tE3CQHI)2#gmtfAZX2}`LQO{K!8sKrQ>tbGj?=Yx1Xz53#BEcNj#qJ8 z*yasK`K`HpXAY`p#l5puacB^n-BD^O4y1QhKVtiFr4K~4d2g@^M>_QWCsPH22S>te z*sRd)!g%89kuc1?z8>G4L3&+S65fqmHBK-dWxh$Wsk;QvqjtgL>;dH{v*mb@i3Kh7e>|&RscuA`4k`|A&7Nx6J4O+_n5_kvd1o=X9(bnZ4 zp<0R>GK6Hb)QKp&+JRy_xo=cT$taLHdz6{c5?;(3%=zw!W_al+iZ%nHKxa9J)aJK-ERfTZyVGnI zroakrtA*$&{a{H(!S!zjcRFAKUU&=EhV-mpXA|IDt9lG#PXc--vVSjZ4(Cz#vial+yn92i<_S^Y?1%6!57e|SYXqrW zxx_*CC~HpT0)!mdbf`Q>8GASha*?VCG$~<0HgipC{u-MfH&j{o0rPMrIizxsh|Jc# z_KC@0}C2v`?Tr)om7>I!*al?n3p` zIM&d{Cw_Km(hg{4Puz*abd z5lbwO^}jIz)LLi{N^>VG!Bmtd?P1{xnuzuwq@?TIL617Z6yN(OD&ZlY*!UkAAZ`Yt;wx8rld zh}=V%W85!%c7OTF7<+}%8{YpBvgR+MylxtvqFze+J8x_@1u5~+cS@ihnPmej8v+l7*OBm=+33 zrP`ZLph0e$5-D44)c7KqUjBBrpkNN86$_xd4z>x|wivDq5P8v~!bS`)C+BM-KJ5UF z4m}l2$|=!0lqN&+r7gB{@WoYzRi)EIf7&WnmJ(b=1A6H9c$$2GjtBgshY%yW>qv4B z-bwv3+tL<=e%dmLP*&4cbg@mu&Q6Bm&GJVASeOZ-@?xKaz0FQ z3$pq4tan#=`?0rcJ=v+3R55~xRO{-Wqj|Z8@gZWQXh^0HZ>0g zuyEy)YPhtj;|%v;HJv&OoOkQXYdq%M>tFPNjW>xyDuodPQ4OBINJRD{HoG6 z5$D2m*0PT%%T5@E51(+Ka$CF2(?+&^S}V)mI)5&xy*)&U)nx!YaU~q|(2Q=RZ|p~E zK~dX8xD1ijHlbXABfto{p)d-t6`ms(bS>hq^}&8CexNN}r*PLGxp#_1Q(NL_|!V05wPm32|hyiz0{IHgd?`cntBlQRI`mvqhFB4-qSb*W_eivb_Knrb9+=g&!h^Zcs^W*C7cw}Vu)_c-Hj3-~O zyA$d>-&FBeSCDB+xl8elB1&`7G&`)d@H??^TgF@`W+KBUL|E1i8M;(`981J>)^aKo zs0R-K7Nc~H`>)lG+~1|j`aML^W3xeki9EXEFhK?`LeM7=j_d_4vD}aFLP+B1Ru?@D{tkZNaT?_}A*Tf4aUA=3#L;vFWb})w>lUab97oL%6F! zI=Q6DpB8p^;km_EDO^(cm^|$6FZ?gK6Qn77ps1WuM1e{?^_D15Z4riC>Sts_1o03^ zm*r&_m#V)3s$OM!iogV-{42R9vbS`6UveNuORw^{O}FvmpX`cLsQhGCt|?E)Hv(>sCvC$wcCSprd$}tz z8Ttu)B6a)u9o@&2co!{6n)xasGJr!+w0M}T^JP5PI?KqU+kt^HF7^&%lywgTqZlo3 z79zAULAfne3IUeS^8n?W@LtP5&Bq}nwUqZWM!3&Z)^bIg@>A2NCdUxXi8#eIV;Wew zKE2`|vPZ`ZQLT@ta?Cl;@H0-YupY)*RC)9#e}XKy`vqOt?R`88vLHuWAP$aTK2B;5z zmLSO<^(_ULYbdnGi90=cjI}yA9zfTCT*$ zG*OKKVDL53TN2F}#EsT{gS;kt#bZ^zlaDvSTd_U9BZ4W+;eITQehMz=lN9p8>+NiN za{W1je=IrEvJcxK;5peBHV;m?6?jBG6qQh5ct;02CWx((;t+Y-JVd2U!)CCpmk}40 z_kfD}PquehqVNCH+e<$ErzbXdB6EwM9vzTR>V99+AdwOX^mBf__df`5Lre-tHH)Yr z%<`5tMq)Uj-3J44hAtw49kP@MRI5dy$nvq`vLvWbbs-2{lCEFsgmRG)ilsn9ipvvL zPG?Tm*=-*8vy#=DSPfYzuslQ4FFr`dy%3tu^ zS+Bb6W>{VRllgUPfg+eBn4xt7RVgtNC1lPk#cW1h7s-)f62XEOVOiPIt66ELZ%c4*9EjNu>^HdmWRP6X(o%ad&h(u`XK)__7whc9># zE;H7i1`UMYQ8K1QpA?D5+p`!v;V2PQY+%2kYxedGZd>q}9B*Gw4m}`wge$P4 zwG+#op0|oduk0WECsvy{l_JO@r^$Ls6tG>l2&1JznK9!zKZQ6Fbi{ zl5c@@z(#)xx>Z^Q#Dh)RM2P{;JXSUQzv^}*&P)Kur0k1ywkCK{<~bLZQDk1II?Oic zA~}$TGXy=IAeprM_KEcvn+yA3iCRWyOg!k~>G_gaIaHujjR9QhgfWEmM zjw714qK;M6^Ju|%58XIe8xBC0mu#yCkC^;vhtytv=6!0`QFS&xg-eQ}~4q717M|{;2dzqG)F;%id zA3|Bj$EK>bOR6B60>;Ox2ibvL$wQqOdG{l4H{+M3s&83_fG3IcUHYOsu$}yg6+nx@ z(sVz5niys-@~vSlsmE(($ylAQ;!fhLIH;bGWl3LU6bi-QNp)r9B)ZZ5EAo+@M0^)=i35Z)_E;t z8%a(eQ-{rT3dBg{_coNeonE;wK1b z?5a`^134%)90DuhqwR&LM~z}1|8BPe`SsmMF?U9rj3aP%4~Q(XF5a&U<0iiYgz@W3 z{7VStTs$oETLxH@WG2G6&Y%Fa6Nx@fyXb6ZXE|F-A`+!j;e~|UQ+*I@d9L$gK8dF< z2w{6p@ArQV0csmIO1m}`BS(k^IeM{+ZsC@(Ar=*}AbIMJc3Ld}!UPf3P=ysAfVCLq zXADx zr|{ZfLml@V0t+D&ihJZttTD4<9(yy8S}>*x3Ja2BSw3!kiun`yBBI8>ynEH#D*~zh zNM~;#UqP&V9|@Wwh11Iz25QTeJ>^x1fop|^mp-}5HZB1Zk})Kj|6ia~mCSI5x5<8j z^bC-V8T?IvI3+7y5Fk#4rm9acfH)?ze?>rinI?Z5qUD28HblWnf(UWbQ9{z1;3;9= zxynd(QhOv9VdJ8SalR(odv#`OvV3(0H2V4eSZCd8opl>Z?pOOyY_aK|%K<)1S6)pO znFv2#HKeEEMV!EW1(l^f*&uPFe^AQTps5Okp3oU-iD|CZl^ml){_j#aBpeg4ptv(a zLHUmKCXMfLxHM3`Lv9^+e}*$hjij~xy)6>)t)o_|kZL5r=BRrrl)_fP;0e7!gA)jK z8?A4@Mln6PS4j*Mm?(XgSWdcN0d26IC+P%CBCNNGPncV8_5?cLpK|&hbn2gP0)s{> zi#%ZycVlob1pB*$n850VAb%;^me?mWj2PT}RXX+>Tt5x3QFv}_N%9Z+2D9P$NlF2; zv%Od+~gWd3A! zk2?z6H(RN}%FlGunK&=9Fd6a!yzp+yZ^(UQ^v}6;3@V1|##n_-iHaC&A_^bpvUrqy z8HdQ3Jf3MMSI~|!ibiS=Q2;+~duow=Lr3>mUVBO!&LuLytts-=^rS1Wa1CrQLT)ad zvq@Y!Hq5wyeydWvWtG8&8iq6>0`&xPnCYI-kMYIr8DHXoWW7Qn+7Kd~Hf5pvH!n1K z4c}JgL1*FLgal7z?mHw$5NC*xrOs$9J`GJhZZ5Y7~UJ=k4k=f>D(5j|`HeEUWli+nwgM{I=12clb>BzIRStaokI z-$)z~OCEX%3`4gW;hN4*RAFO+1(6seI4D7L7^g35S^iiK(2>{JT&rq0t{DfyxN?9? zbJ(b;!2||_5iX8lhw;0^PO>Oby8Ze{p&pE{^ZjbcDYfh?+_;QVX38gVUvyE4D$>9D z3<>dE%@#l)ATeozaW8ZJ3IfIX9rL{u!sll)hB*Q2ugb)#HvUX1ZlF=}1FnQao|IF` zxjBOBSXYN}&FVb&B==M29PN&MYF|^&$SZ3(k}EPL;s)2`6^6E87pdZ+zozErc4CHt zy-mBZ!I$STUe2nZ;?7aBhQ`fe*go$`#wI7%;Pl4N4>ym(8;-J=?}%wj(LuK2ZNOqI zM#F#tvH$Ps$u5k21@8hm33tSR97{5P*V#>!1ZcB5 zPgng>HT$BRPf z1s)7p)9EnoRvUpc-3pxP00D)E>fo35X2)TlZ4h_q9_Vhb>&B#lKy9P&Ct%9mDXnNY^0@byv}fe;NXx4C&-c$M4oHS!zBc1+Igr|yJCkHF<-01&O+ z0@CS1pU&_OOTyxg{z$JC0kw_nSC+Iu?V$d3^cCdZPN7I7`IUoeaH07hRMV@gh~JE=L9Q+Y>t}u10l(?*losVXcBp1RPk27g z@N4I!YEuLp&j1MG{U@U$!(LbdO&Ew0oM`_lt4YMHQZgY=jvqjcxUlLkMt+1(QdU;N z4wQxIcW?xasT2x)ZGLC$)#TiPY%<9BOO5>>aqK908mso1v%kc#zD!e1R;->hB`d}#C^XhlaB8JY;>p{(eE>9nQ8zms?}p5Nz=~&X zMejDia_WHZi?k5jpiM8dkc#f){}7fh`l)+Pi1(}{b0#NCA+8F#gD<&KiBnE;y10?d zS(JP(!*c&4GtBE7juOT$FpD~>onv+`k~P*=)KE&gTt<|bz0ro5Bzhd02b8V}EsA{9d0FOT z*(&LuGLYuzwR4sxr-V$_M9?z*tJzOX_QF@NQW?c5?PVH0VIP}LJH#+Hgsp`U4|j8qxk22@92$!jcxZ>ER)hkzxySM4o3<`$0ojc=b)ramQn+<>N4a zqfjz@@`1o4wp|oYpmufmxg$rW1Q9-$t$BKM}Lvx%`1MOWWz{=h^;}Zgn@e;cExO-`5ZTeY^dfxA&U*@ z5^3g4IF3hDI||7dSxlphW*s(YO1P&YDEokEl#fYy4nmAo?o+RUDBrT?VSc4Q%vQR$ zfR_Fv#>-SMjhFhwt;7KkpSwHHRkcz(EUYw~C;aL{}EcoNAD#T6Sf? zs0@|6IN0|Bc-1RKpa-X)!Y0lmyV*X7nsAJKT>cxu|0#8krS_b&XPwcWX&wE^!F~z6 zka;n#3Qd~qS6C+q6tb6{`&CL90KCjSVU%mOb>2Qp!({gtZ#S8{+uU~cU~0sBQO%A^ zelfQ%V>a=2yS{gF8t^QhZtlX=|8LL@*h9}gE22Q^G=zxGd^`_IodSRT;o4i6S%k@u zFdi^V;-4b(RHT}s8KN(>rB@^eq4@K?p6Vbn4!_{_kd3+#6#fi9;B?Leo9$-B&*ld# z(rzL8VVOQI+umOLX?=2_9v7wa+~T=*SaW6IxdgidQ=UrGr)M6 zSP<&yVDt(CoVTxgcRpf?w=+CdYZNi|a}kzW7zp$1dB-#X`b#o!cCcFg?FznJ2!Ll-*$xD&7e8 z61cB}+5oE-MBvpH(Q~;?^xm;JwsJ^C6&=kTI$-amQZ++=o_G#MVV@WLuJ<@&O0)za zDPR}?A7;h_-ACjF;`?^XuHWGrx1)1e3)k_=Oq&r&fSQofGuVWl9TFUy;^XZXaoTdOr07512w_Z z46Z`gX1SR)7{BET{fvE2DkX+4a^$l2ZrPVS7nn5Rt8c9Ha1w7rD8$ugLq|0vHV-=q zICRI9)7W^WAC@kt*H?}t&&gV~U40p<>3iMYxF`z*n29VgPtvyF8Ga%aYm+Oes|04t z?AxEr+c-HJO^MVAO{$x7(|rxVk;K#t=?oF4Lw47zCqz&fpEBPu%Vrtq#$e> zFXhd9rAM{hFH}_i?=^Q;LHr4IVIIrveiDSZ>SU~eSOGnqPO>nj5j7Pn18GOX%e$Et zdaA{SE#2kqLcAUD=T?;HEpPRuO7p7~MtfY$YCof{x^Tx=Kx|!letFrb-$*IN&g_;` zi4^%qjxIT(B@5{_wNGf*@nDmsyRG5xY}g$Qe^#;r4Zn^E zn)nyxuYjGa;pw;2%ajvao&*#H5kY>WPz`Y&sR_`wVf?g>F9%!eYNO$UKt}jo8d~L)pJ&279L^j(=+sXuVCRPw6=+O***jO?kLAS5<=B zb9WnVPqcbRpx^jUSWB?9-g%FGn+O8&+rnR-)3dOnbPJqUGxh|rze=>*f8e!jmntxQ zq%i0u$x;!wDDknNlJpS!s&$+Tf&EFN_~==Kqbw$(R+4B;>sBkE=d4YQD>4ts6{U(Y zpdsuC!dOXV!NoO;VA#bfWa2myJ5q%oQD$QS@>aAXA+PYXcB6-|FLdseg zaUn6E9n$;{emn?^DbMJ7@oHSLiXlguUyM|pOqRg{^42qlIE{o-prorzM)?ks@O_`n z@ZzG6IVAu4ohR;wzk*mMys$|9FUkHe&fuvED@NX9oRRf`v1?0ECn|`aBSgmnP%{yy z7SvKl0g|&g$=ssU=;K}aL40N#cAjg=ogo_|LhDF#m!X-dE9)Osb&}a^Y;9!};#}0?a zMrli?vK5yl3wop}RG`$PsE)tFmlGF*mWZTqzW%zED1H`g{l|j;k1Skm9u?)N1MLe3 z+K~rxX&UW3=|Y1i%LkMve&fS=&K{=OFa;((g@M~^1VX{^2{E`r)}a6K<3B(c zVA~>Y2bP{lekI!;V`6eq!-)oo8tYcF_+}n93k3C|v;P07n zH_zj*rzZ~=)OE={ZB>Wdr7~cEDXbss3~P4wLCSs<_8ls z-{0=5kV_AREsGX|57U#2$&(TrQ$>!bBM>B{Rcd1&Gd9JT$R ziIonaXm_4dB&J642>lBf%GW8~XqQ&KGIbPr6zqq}siVv)Hs=Sbj-qy2dij0?Cz&t` z(7vr&7V^~)SRy$sr#~HLFzI$1y=Jz`Eqo0s_xbvf7QSHnB%4L6bOps;(lJz4Il2VY zl&LtRSCEu8As*=oi^(qEKr=rmnwcSNaz?hFePYz_%oz3SSF;SC@7l|KnTRPmIv$!U z4@nr)Z`TEP2LW6V8QyXynJza+f&%hDbOAy~GKK*|B4Jo4YajpoG%bJ{eP|K7kP1Ja z?bW~cyyRxfPIvtT(oud=0rJ><(Par6Z!*?lR%DC-2%a)-jKMFzadh4dqjuxy#CY64 z9%tP!nkJv`nN|>l=BDqxSJ-<3Xaw2AGV>)zQ47ktd0t;;+b7Sn%?Q3#n;2y~@5ue$ zW=nzG4q%vQ_!yeFQ!&&gFeEld6>wx&G&|J(gE=E0K)GSZF_h_D;Xjb*_XCY9HkA*C z31&yIVnOLvXAa{FZ9mS$g01x=bm)7;a-cNWF&KBUPhhQFfrSE=36CH|2dl#7EWQBA z{rLYNLrjvzVKWpQ>NokBvS?KTp~CR`@3VX)QH#*q-VAJl=$hC$vH9fVuX{ zy}e&Z-@t%E^#X~&@6&rk2{UqHwX-y1@HCS)RR5} zx=pPOr^#}9v7##TEvTGt!ALToBPZw@>sc-9cThv3<+GB@0fI)Wkf1Q$$R`l-4kFW! zsx%Xi@WUHzLIerUojiFEb0iFx-?7hRVwPy8=o85su_PqmjBcQ3-t#_G+?xUPAY9E(Tv3mZ)r@a>@5bpybsjAq zBYK^j@AF>hcb)qP_0XQ=$-%HeTgZUn#U>D24*^0~5s7!UX}Sf#d?%wX_whm6$8EQi zKt;~UK=l!MoC%%+z%7i*Bcz)GxWVL)#Qc!uBjOCVVcMjTX30MSl1vMCH|^8BrdlDv zhDaNIUgh(Xs2nZM1JD$IKqHt42uzD1Szb@>N9ILZOcLtPMfglQg7Z_8SEV;GUdSn* z11U%(oLoKGfRYbHZL+3~xUy}I3GKKP@)a$TfKvN|A9HEVkC@XE+aiD124B$fVhgvq z+rpn}=}&D-6|`rJ{H@O1nG&VHn|U11WJFuN(pFiE2^jm@VH1^Kf;TcBkTcyf`ClQK zDlA(vC7MgC$s%#sxJO)gT>jxn$)VX5O?O$-E^m5{S2x28MdhY|r;~k&S3Tz8(Ecoz zc0zK*;Q^R7T!a*6xfv+nC>Jz0n4Fv<%QAZdAB-vtsEVdcPpT$SNfymY9!I_xyTK16 zlHZG^P@hgZqDY?UeAF#_VjV#`#&g;bR+CpdAN5Mhuj3lbldsAM-?`AKo!9z!?HkTt z{)Y2Ee#3dXV#MF-`wze2^^s_Vx~9(4dS%0FC+|^67NL(yy}{POCZ@(;+{9R>aVl}1 z=ppeYTB%RU>oMXvgyUR8YSz_?#x`QIKPx8xu(MCP(^PP^f}}K;d5N(_#3gs! z1yv$cmK(W(vY|9s)^bETIzp?=i{wSCd!C#bV;8W`>O(BoLNqo{77H47DQ?EoW7dUr zw)LZiA$Ge**@%m>-TiJxq3vvU`?Sr%P_b6kp1L_>yXU(tOZ}dFu$5Xh$dynn){N;0tn~VD;Osb?LlYG>1Lv_@jpX|ogD1? z+*8``M3MrPfy+J}2%|JULo<&q!^jkXp60{mWL45`#WIo-xlHxfqA?blg4i?dHRHH- zJno(>>W-6Rf-`MaH}$zD^Qd;FHj62og&Nn7eu*`%Gs#MF4Sawd0+nKf!7n9Ne`^N& zR*DkamkD8}cgbWJ8C-D?<3)8)`K)o0eN-Nq0E>nBi;RMs8O5lD5Bhf&9WMRN6^JU! zj2Rm!*=0(~!sa$$m*sX6VYeWsDkF)AFMu^pKrRLvBm((!I7vz}zvIEWOIMl91Iq*> z&C^-XEMN3vtBJBavLeWcZA&d#L{H%YgW>{D&=Bby3W1h zQD^Ji-pUtVRAr}4Z?)T>Ox6;OY%f;*OC$&VOGoH3Y-^7iGT%jL9t zxgr1jmbyE*xw%p6L$Bmg<2@e5cwWH){H2p1dID04{Xw%DB(h57uW|gcM=6&cP1D-T zg(6c6g45FQP1a4$(&^|MpVYjSkJZ1pmMogRr|nVjn3tSe2i2fExcLY~@mP~slnd2= z5DEVx3Mba_TT!jbcO&u=rNXDq?*{D_h`sHl!MqE^^4zQST+J4_H2@;Q1Vmlte_Hd$Geu-w3Y2nd63@}3 zK(&lpqp~w7#qOk^23$-!Vv&Y)g!ty1upP2mwTxfy_8$mXP8B{e#1=t~2-3SDn=QD< zDOw){=K9WIFD^0xoCW^~XL}u~{11lHJ#4kYW*jgn=oD0c&h=Ja(-{n}ij^ z4Up050Ik6z@X&hU33?ar_;g@Tx5wP%*=BYUd6qF06~+qm+M<7K((j=hK=<*6d@F?0 zWIn&4Y7{L+tVTW&NzC0%>Zsw@Vm)ZulQhXtn~RG>_(eszneSE+_UeD|fbtcLWwH}AWHJGMwlSLC-UG2k? zd)2;D+=2sT+h(y>?x=VDSnBAO1Jei0BM=j;J~(0;LaP*Gf)O_3kF!4cm`k|7Rbl z%w?N`rBG1?ef6=eRRLH|y2&*BZe9nFJP38jnY{#ssVK&}8UW}lm=+{2ojJvKQxlw^Fi)xg^RXwgP z_HjjfHt?Q6aH@yeAA zRf?Qc!f@4&uDFxybS?t=u%W_^?RDSiwbP+s;7f|X2GL8=C3adRTSN7A)t+?tLYV7` zub+{)r_ZkLwIB5$n)xF``}Q{WhC6zJ!c!DZ)bmt-U$5T-L24p6e0Z3p{0ha<+yY%e zvtwMjZ2_n-=5X%;WI17ag?6`kruzni211UO@`|`BL!@DCP#cM0diaiX(hyX3&vsKL z6;uFMXWID$xgd&WKB33qd3AR|-M%NXX zc6YZLE`7UU_jIQ}s=Mpzc5V5CtLyIiy1T1xKPlheUiXRZ3h@L~dT<3qn;a{-gd>=O zY`#*J3L*lDddlTH#~PV8JQ&dN5tY#=o|vjd^OC>!u@0ktgokW(RICZ}*`HF(`(#m* z#ZIP^nlQIa{_%@layuzD+y;#Yye2J_1F>Lij(M)CMaV|ti2fSspU zRBY*aG!iOu^k5uP3EoW|cArV^-DG3UcMGunk%&dBozKxjW*4_RueTx+U9^LYI4H?B zufHS2dII!p4x=R4S_-#z3?l>a!6$eoHhY8s78{#3S^{t^;!+n~rETtK_L}6=GU;uH z*SN%yR=g()RQnF>LdM{}UGH)G4!+0lOI=xvQ>8(wLVb>$M?a4i52{s_pK&Y}`t^F( z%Xu6&fPWI93lnyw784{(zdxg)#lFm{Q*#n2MzDU(g=}6!$K!_ky4iC77MBfHv0VUT zZE+IAMrmT(jP2Lzc9wT%d;eW;=ktY9_Ou7<_Mz4zm_xs!qF*$NlZBWk5r|uf`Efq{8gTF zevM6yUr!iN!p|C;6cN$IBl1L*C9Y~=lySLl-@h$WD>+J}OZ}%CRNpbYYsAkmZP8b@ z$P9maVVL5NjbC`?=l`G2^PF?r%)QeoGQ%`F44t7j0TmlWMT|5XYGU$r z_q*9-_q)3ZA`)YaU1RTE?2W_%D%Pm6#TXmdODx0|M5Djg`?>dyGj8(T?|(mrd+xcX zKIQX#dSS$n)EGRW_AZx{D!9khHagnQD~gO>5f_KS4XlKT?L9eCEYT95Zvwj%1 z#kklw>=!kJ#r=P@#UHwY_jK$W@8WkZ?2^6E>@9O|Tg6-EcfkwmRjWM9{MnWO3TIoY zNczKm?kwxiU2P%FTSfFNrV6_rJ@n9M9MD2kYEW#CvzRp5JDG85;i65eN zONtVWFu2tFEXnj-A^hHGS=Lxh@wFA~G6z5l&lTWJhkhOa1(9|Yord%?1f9VWs_}%F z#@tXS-kYN4b@^VRb!p>r+E`xH+@)IqX^F{tf&g!o1>;v*W8k#$VIW35V)4Uxnyf>k z40Be<<#Mni!5_B*XU%vW3&Z#Kt#plk^Ux`wX9COs1x zTOB<^D_2s z2+f6K-0Wj$RQwdm=;z&d%rV0H`WSE0`VYd2^%uENBUlBfdk5oyo zi<9S0y_m@q++1i#d&CLJ-4eQ^f6ySV>B6mbj>~JgpCf4$XmEN;OtuE`@e|fM&XuIg zFtShLGNY4q=ndKF&wz;NZ?U7`gtZ(N%&**aKoP?8(b)(;j1|q%coc2@o&;UkeU(!U z6(+|uI+`$1Wm2!_QaAh5Wy*2yJRW3RA@|+VURWn*#C|sK&boyRMh$bo4=vfBvt*RX z9n*~>Jb5m|AbTOhel_WGPv_qY3cxre)$yet7X8#Hql*ebiydhyNCPkMcSwq+> zV}v&*?%6&4hCOZLo^T%b?{25<0ndtS_ilESi$B`K?pWxaRU?rYWQ6Za6t2I;-nZ#J~)QqjdP;khecSoVjkvG{=EijdN>4wi`~*YPS16S_48V#0AUQPr6$(x2F@LeToVs8g;& zmC@rei%^~=@mC|D&@No)M0I38DLQM-8qFQa%tF+eTId(pLbpKEF0QhkeOs7b&^KC> zO3@hSf@X%1;`=m;U6L*dj}`?BGt=LUqr=?_=TD^^lTh-xhNCX2>e5b36}}yVT~n%w za2uemX%{L?>VvyOI*r;Ih4r}2#`Y&sr!O_mFGOdJE!JObP|>(82#^hYs$Yu zoYpavLodhrBP>KRLXoFC?7GpCV$(1@cq|~`y0F`lEPDbY`w}SNU(uWoQ`U1gOqYC*Gc zN(S#%B8hmfJT=9Mj^4oOPE0#wrN^oWO2zD}dSe<9Z+HX4K*UW5v0N7Kn#}jndQcT% zzsZ*|R1qg;kv(qUUbqbw6c{oS-OEMHG+0>N4n_$$efyAQs1Hg}8$%HyQL_SyYiFelM}GqN5_DKyP|%h$l;v zDORwIw`zPqJ1%scnNm9%O5YXHx}wj^OKQkhS=rFxdEN-G{s@;EhFdBGG%2#L$-AYT z4Ol!PB@F5CkZ4o!A>){o@nDMKHbjF2`oqQpArZ$_Y0C$bCct)U&acm0B4i0d)lu!EBVIelT2sO8n4=dZHsO?+PRGtVSFZl1InVVjjwD3_3FO~poCc85Mm z?=%_T%7a8G4un@pe`rvQ6Udu}D@b`Lhet10P=@3495sjSiyX>%Nja?iQw1pmImPxc z9R=Tf)!Y8oJ0|O#eWq-0f9>ryaf0!>OEB07-@`AKgtj^!uSq3Gk>!ki(&1gLYxPI> zc{&a*EV*+i+~rXh-CyY*KuJ{LAB9xM*QVm@Qg$tY9%2aClTWk1w-VMA;Ry+*H91GD zy5@w$MLbjd|7<%%2LqvC*a#zrWu-N!op~XC+L?S6#wDhrMup|EtOY-HSb#>%g5-eA z^yg@^h;C4B)}q|(48bXZoL-ktoiZ=}%>tDOyDP_*cjK08u*69})>}WAS-y(wyPV+U zKX*U@m`Hfg^Lco2^qxRWmTcL190mnzOJC=&DZf)w{iJv1cx zs6d6h%dzU_?E?bJE9|oh`!MkzB=$ZS$v#M8zPl>Lt*cbkw#$(x!pefZNv^MOH&xjE zJ!{IwpWuE>(2f5p3AvA_J_W3O$gu`BXdD#eZH#DSeh_Rz=Ur5L!uk1DV8ht085SDU>{djZC8@6 zY{NLQS?A>JDGK@YRCV0~&^7ceonD`}+k2iqn>Yx@Z!kHBHJEitGfNrGkYp4|1W#)j zqFiQF#BXT?%Om9bR)=E(r1G(R7_}z2!+N|(I;-eUTl6+=xG=~XqjU0Am*!(K5+=>O zppAHq@E+$T2{%@eMGhH*!MMQqD(c1>H7u@>+*!kLy~gV>i8CEhBWlmdvw3i1dJObJT<&dPjUp&`0dS>!YJbXDCm7zxEvaNi($ z&6oU!8lpS70-5KXs=D{8a4!r`*=XYeg7XRz>CA1h^ky3sZL3fHtN%AUt1f+Ut^Yra z%73K)GwUh_r7to6<1S)9NyNSynTR7nj=(}ADJ4zjN<4U@&X#CZL$1GFuU_21NYR*f zF*oQ@7(Q_xNyylAp^cQ%wzH;$SJN=rW&Bwg-Gl|B;)+UNvXa;%m1(Rc{Bp^LN~oUQ z!!Bs=?n*x#q+Si^RLNPYhDOjDBs4e+rcZX1N(?ws8OsDNb}95XAH7W~N;t<~)TfWH z58<{2Xm8+$$YK#LOQcWOCR>WLi|Ud~>qr8pUQ?%9oK7epm~3<>xDC!Wy0#4{FggiN zDieohNDd@In(S{#gj9=V#!=zGVYz8Bf*+{`QM%XFjNr~1KIJ>p3%J_<&8p6~KnPP| z5%w1^Tsl%Fk!|NoNW*EbSNgAY7zs#uM-9*Ib@p+cec;?$C^FqP`@GJ+s`Fpey02>O z4*caY%dA(gw z?=ED)$Q4;jrCwfSIe&eft*Zm(DZB^SrrPe^#69+WsasR9FM9c}dZ7a)9F4n02;K_u z>sxz)v2XVNl{&Ysw|m&fj{s==*quG1qfRQ@Z1F03Z8OqsB0rSz9ZS0Y97r}0m$w0 z7N9>6NRdOK4!C1v2<2wO6jdUM0>6Yb7DdY=B?IyCBQihkU4d6P_u>EH`i^L^<{CcM zR=g|SE{#yt5Uvcj8=|CyVC>xfM zUyNf}Aw$xfLZJ)~`Fs|n&%;V^k|613_+$eFRdvDKe}mNU#Pou?=<+`J>|RpEgkD%> z7wDUGLo@xAsxBmyyIDw|=!30w_Lc_zI4tSlPL`)_ZU9R1Owcwiw%7P&SQ%qGO4ZW* zNu*zfBAi@rrwPXjWHQXyS@m`<8Ex@gCT(~h_acmVOyGz6JoaCL9>In0^eO?|Exqho zN)q(qE+oD%o4>2=3CpXi?dR40crt!4Bedzb>Uee{?VS*XWM>JPz2ZsW{H$*z6h*#2 zfvTFj3+yi~D+5pCSpGRY@bXF%@0f54(xFBW}4ym>IMuL-H!S zxFkx!P7Oe1-dRlwwHhgX;`6Kk1POQ5l%S}(#92|SB&gQP(3UQqr*ehMSHmFqLUrkm z(wVp++Cm*Q@P@(@oV`T+q}zh2ATaKq_ro>h<$er;%O2g=t?O&o^mW(u#Uo#{Mb=Q& zGxO&+RzKFyp6F-458Ge#E1cBNz0ucy)Yq<{Y?yzjF$i4OhKn~kw_4`IUpH1?iC2n! z*w=6C%L;S;KjNu8^7?+<@kGCH$E`c)@n3SepKEipO@=~#i;(g-;3G}OT>R07!{9sy4%$8rRm;}&k2BbfZfq-0%!_JqyiWz%>Yjb&0 zROYI}1e^au!21HiKqdmN^67oU^inQF%R4NPp)h{dtGK)?duPD&)>vBXO*^!>=Gr!{ zZO;wTB>SN@EIl-2wHgn@?`Fb1wU=h4qC7j%Bh4)2OfQ)deyOrv>zZYUmw< z%p#Vut(7PQzS@PSF!``W1d$qRdEoWtZGa`{tSm8GrAd#+EzB;+l~!_!DPRtMy+j$cT`v`r#PC=pnU;{LQs$D12D(# zE2>t;hxr?c%2ZJ|Td%D5Tpc2-oZZu8cQ&a)9bClfes)=ZDt7E=tNQb>8a&A|*>)S@ zC)gAeYL_%?h2GL)E4w)4D{u!AUs;Lvu?fz4h-*RL!D%so*MPy5M3P4l^Gd6eahWVJ z*FjFmR_Qya)8KQY*{^8^NPKVjzxwD+9)m7ZYArb(NpXCk{RgIjsIx-4$3Cgvy}MD* z9QdyLLQ5~mMxV4I8Wrrm{>cOV#RAw%RjDmiFc-B*DCFQVb$*Ne zy2Z|HVK!J{prw=Bs?TU+&d~uiyBnJAzQ!J_#eD+J0Kt3vFCp^=B+==TUCjSyk=sUo z$A-tN=!%s6If6b}nO#DBn&f`yTq|e#=)!hp6^;($$L{GG1tP-Boun6XgTi{V;!)T1jPs|6sS#cJzfvoZe1~S%H4bTEyk5_OQ^gl7> z?s=RlIfa_pJ~I1#d-YT8_My2a>r&6ufs;sp!g$r9bK1>@$*n9b#3KK!$Q_CmQri*we3Y#?&-c+U#$hb6Xo2fkIft#OiaThL=ql|&zt+Q$u24r-}H2uKV%Y(W{ztq|xN zo)*PIl`O7oRZ^R+kx^t7*=68hD~e_Tv9WY%c=XXwalJG_==QaN_WD2|N;wcX>RXY$ zbk6yKAp!`OQW3YfQt4e%F;yo@-?h(yy3U5Ira|0sUt zqSuFk*-szF^xZZraK+~g)s(FphD#v}Wr+J^h;0am9v$ZI(RKF@BQ)ps;vSd$e2^VC zh=$%gj3?MNL+!eucH$sAWe{VK_}(l}^&_$A4wRb1doh@fBv#9?!!|@&7wNJOVzhGT zkfWG5AhgB(@CNK_uz103ZfJmFI$qX{l;zxk(fPyah&=r8*RwwMmKu2Ma2ojM(E7mU zZ?Ce?k!bz)Dn=E7NOsjke%;0KpQt9*VlY(l1Vyt!Vbx4YWxxl@#yE?DHI5$DbD4w- z?Vt;!d#w*!k~y+Z%tHkVr2rRxL3s)UD^hw@G3e##ar~|8cu|iiH8<{Z`|LVGtthUsE#D} zblNi8(M}y=XAH5MhiksK9BL;|vCrG>gLZ5yDLZM3J8_Cpg4s?C=dT<=kX6Ah8NplL z&iGf`?G@etSijuv_u#5mhUqD=-siU4ImI()w);cCX^#!D$A`FM2KeI#*e}5u+;i*z z|J7tIK`lae))WrPzP7gVcq#!(d8OAyw{)aF z`eqbAoE)DsT(o@KV9yRLwf}6G{dI7PnAv+O_=T2F-wNl!tAa#f{$kJ|e}umbNqtb` zKI&z!jPRc|fMMS3C4S34KH2_yXzHd8cXCJVDIMH)Xmp$9TD*Smz{2Ve|&YsWNpK|tM zF21czfMG9$Yu@c(H%556Bm8_ww=AFqid-*3$^`&X6wQmjLkQO(=CB` z36I2<&omPQ1R3+>IjbG&M#RI@ zBe_Cc%9yI4n;SmOrurEuTu24!cI4cg^fZ`#<(LgACF9A-E*zbo-kt3pq4?k)vKUMIE7haJ@)b->%4)lpidT<|0$k+t~vKzNKD?5c2P z{mA&Wf&T4*_Ez!a>jTko4eX*%KM;Ky9(TZU%bH)NQe^x>=m^q=%rZ2D^;eD40ejMl zl69XnPXVP%C}CJ${r>I;tZ%H3+$HMq5Yp zjJ;C)_Qy2K5987ivexr=;|RNa1oGdnhs(7)*!Wy`+vss^alfD*Q)ZwlYk}@Jp_luw=II}X=1+#co%s?eAP4TIZHmQ|zC)_;D-X11!1pt0N z+>RR_#zKaekm&)J^n!NKhrlzL52ey40SQ^D_fp^maja#6R%XlUqPIt--tS=Hp34k^ z&yF5decUM2P2>w4#r!@ys%!DxGg7nr_$V6FTjgxKmdK9McTk)IDUgy`S{Xnw+(b3C z6}dQD2tsjy(C-n5-#HD^3ruiH*+hZcV-GQI2@~NR1v|CFozY=e4eKeMJU>`Vy-RcZ1JQ%3 zcrpu_BIiYetMmU9Mbj8cfP-PDDfR_F{$%)mNT!6&A-B=;quz;Ln5@Wim+7`6+$ z9WP$9ARPH=*bWcdeAxbAGrV+Xo|zKwgc}8-S`qilV~C)XE`@0sTgMy|@9y)p6}CeK zzpD782G$L7JfS?t-L763&zDjk<(anJna_(&NCIWhZ;6b=6mlG6kj~9cde9lYL+3Mu ze4S&BMWg|xDZfL~QM&YuG9yyfKk0ZE^(mp7Liv5g7KLpF-2m}Og`!bGzLr(NT&4G_ zjb$;S49n#3d zpIK(U%HvU1l)^M4KEi#{;s1oD#m*VSa=vp6*yDoW zcD!zkdy4dy9qzq@?bbv6wvqmlk+m0@Jv530Ecceq_}@&F(B*$y`ptq)+pkyFUAU4r zUBA-4?7*2*VFy3LGa63}z2gJD{Px8Y^t~)M$I1rB6xaqsRC)W5D0Plis4ML9dRs4dn|-QHb*tw>}n*Ts}S~ zbnA2QzI`#S`m1r)-|iaED_#zndT>7Y(>T51?eRqup#24Q>6-^1J2p(_uuP>LYNwB5 z?A{w|R}9zKy*D;<&G^DP(nHzr$NQ(ogLuW59stw5d4k(I+BPM2`ve}$^QuWQg}vWC zpWwfoU|)}qS5L5`CipcIPzpWKX?Jxpb<|8dGXcH5Hi6cy>Ey1r#;awYOyIefcG^Xq zvIyBZXc@j~-!0?Z!-?ljZ^cR9q}hHQ0215qt0V1&k@h0YOyHlG!{m()_jZSU@ht>= z^^nvW8~|uJWT)nhPD1&eJvzlcJ>0e(&e6xFaPq^!Y_JAiR>tk`j6asfcFx=WQKl?~Jo|sS6XH_wiWw8M8OK z=kwNgr228+JH?x;&L3-=$01E$I8Gxn!9O#B@23+-@pf_@zer_z(Ryb`4emZ-=Z^JP zj4M&7tz+$-vG(rR@>|Ea&&JpXcHd~XX>_*< zdu)_@f^q)VsGc$`b(PGU#_Ke>q#uVS%iKAKWc=e$R%KHy$z_(w`!TRS2zTj5)Z<5> zxtdg&c6+#1l25nBL+gh18U)M^!_UXLwt=Z3xxph{Wqqc8$Z(!c4FWnWY$kC_tRBk` zj|Qpr@IK9gANGTsw%h z*=72+DSmREV=#c@l4;}%fz{5=BFq=2ES{4eACJ==HYynn%idu-q4n+%7h;^r5ZBhY zE6-9}_el0)Z|~f`eo?$%>Ha0QoMS604q|(7`q1i?4u~c({}0&yF!xWC#MN8=CI4f7 z|AZ)3%!iqu7XB-(2&n98b4QueZq*v|N0U;_m`yv@hzRk=DMMy*Jj3sQW${V+4q067 zREy65TEc_RGFeu|t`w8LoMVNH&4Jr5g%AX$YgijwnUV?U0H}*p; zMqTiFC`7B3XC&p$9&P81jxQYDrBt|RwB0YHeEfKOaD{)SBW8DC;#|VCO1x>MryW}d0kXTWN0i6)o$y?={tqPgy^vGGS^<3Ef?wJW14fip+Y5MGLD>-LGZeqwy< zM0|$-cjlifHcbSFQZ0L;Jv;#x7Y8a>2J!pGT2k+=c!1~MN@e@tc@`jdriB4s){K#IMkY8;<>qR16{XZY12P~gmy z^lK#~tWRAvmUUD<7@mT5dmwP46o(l;@rvrGv$Mp$mf7C&cc18iNjP(@A3X3`(h$Q_gv9I3H862D8hTjBn%EmhuxDV#p_1I zcZ?v!KpjqOA4UF9!y81DRdt+9OgcS)o3mNO%QW$K72?N&-jgk9;n<>&RB8{@x}z|_ z#WU-p&VGzVQd0g5j6R~(9-QlrSId7j!j3Pu{Ffu_=N%|ek}d_xT0kOA%I)~e;qi$h z$XZuy*<_X$%1ejfNvr0{0lU~L!MWB0|0Drp+m1s)rByanYW1u(ao1*$_No+gm81Ug zJ?8HXE4-xUDto(C2JxdT0F;kbburduy=a-`#_l{B-*%LWPgnbAAsY5_yWKdc$RXa@ z28lRoG81v}WZGFN>wEmG$#xRzFFSpbrsU$uNtOLP?4C9`8HL3C*rXn$^@PcEuiCB+ zm)toyRmIs$!jBtxN^)?Zn}UU(GaWMZ$aQh1La3w%R>ZfYOy$YSB=}4)ag~y@g2Fl# zv>R20Aa-J8uFd2Ai8d*Ry~MXFUa_UNImq~E_ds5S=!7Y$zfSVoC!u9Nda_?DH6Ee= zSVN?&;zig?g=c2<0~)e2$5tTB)I_&Tk*dJ~J@(k->L(@xku(H9}AX>>ZAfZ-*Q+cg;ewW?ybxlyt4D|Rop`hFmy_K^;r9QjJt1AiLE+`0iR^YO#;sN2S=BtzU@1m@zzcpz?4>! zq)DCj+(i4Kl(+VIr+wLJUv%16oi>Dt|MgUV^;GUlp*Z+-3gB?YRC|4hy_>eL53@54 zu&u-*Fp`R6{9IllZw#@|Ckr~(PGwXp?S|3z{$Y0aM0f0H`?>h3=d=;%W2+x+7xK%! zc9^|+n0wd*J`_x(CUb?a!H_7hXCQ-;@tV*@sfb z#P9`y;RI0vLMKnOGbh?L<9jfZe$$wMGtpw%^V}on(x) zvVs98B!dZ#ix4D8^TGaK#tUUU(H5eN&)R&TtAJ%s!Gv(N%;9l@qN%mT1VPQ-thgP z?mQxHh#R_T-Z00ZdaI0wxt*chl_*1*$PRI(#p#owDfo<$|4XPux%>!&b?Dy%$S}D; zCp6L(jTOyt8&|dC_>b*r5k$^RNX zGacXD`=%uiOtbr^*+bJXwI~`~9x@M4ch5~HXebwdJ|)?XS!jxFpMvo;<9|cK0r%o` zY5r_*dWauEK&E{7D@b@+OaCh3Yo_{jQ#qEhccw9NZrk+K_b}_y8z%LiC7$$gEy}6u z(nWJ`70{M);{?;+5Fv#wk`|A?!?%D@D?xNFKLn`8L4p!6A#fr~!ncwI)KN=v6J@mR z)9}*OGeWd@7TqxlM9J@1e;Kolc7g?cGf$zx-{^&UM)pWICuB%?z@T8^DaHTv)JRoE zPs~VtJk>s%>aL$wLU7xs8b>~via<#DLvazQqo=yHQ|+utJ(hcX=6GSn&nDX&lkFCk zmYp}*1{eh47C3U%F91(6pO?LN|rokcdZdV1`U0N)upANQ51V%=d6>=JmwPb3#tKiRByMz_=0xzV*)c zS3Q#w%TAgHLE}#X9Fm&_{{lS7n#(FT1#$}}D@m&%p01mBPq$$%V~lhd_WzC{DtLm7 z0)wNIW~OeQ=E|P#w@ot!|AuMq!;!XXlzlx?!B;0tvtLcKlcr%b$E%!wk4=i75Yc&Q zQv7G<9-nHjd~4{6({c9{yLL*?=|DsD+6-{Unwhp~fUN-}|30qRvLd-}fW0+c$l|jZ ztPah@C1VY>!Ka~3-R%&ckWNQl52TKmNYo%j`9gY`;QiqIondMO0Og4Z+&jWHi!-bR z($i6I3=2kWX$k-fjO3JxFHKg11?aiJ!m93pU6@mu04j|PFVaa1IMXW#m`C4j9ij7h~dcEsO z5|{Q0veEvV<<(k_v8(Ae{oP%_DtqXC(b)MurOAg4o(b?iJt{=lO|$o>+16?J)XA|Y z<@&@QIxVW(rrKpwd(I-wE?OS8PPcca+q=`l=wkhHf1T#G11(c}tWJjd8vvPSHg@bUZ-+Kg1(+!--KAol-f->WjZ8QSl21L^GVAKR-TZbfnP<0nB z=^kAp3+M^6Q-7XOn%dvau$yPtZ8N}DvE4D<-96o&{8r;vArknyz-Q@&*fAvpd2kud zY+;hRmR$D`59(q?SI%Y)s1LtH90C!8G{kyIAr0MZ;)m0>Sj9b7xYs;ej5O7S zz!L$)9>a;QC=-`~(M_{c500}(P;ZJ}e!%F*PmU8nvu^Lp6duShNWaMxj^~6uHmmxn zSt0k7rieeSRiI7(Le)YY1I=gbiz!B>g0H4IcD|IF_QY9*Q)W?MOzUISbo+2x&&hiz zCKK;m9#c)4&%tunPWJAiB6kKVl8=AQ$`pAd+3JhEf|IaNS7B6j;jv ze5#}MbNmalx`@Ebv+R$v?73NlemC(jY6s92Az;2d>0UD<;A>q)0oB5JJHkNTIh(bL zI8C4>TU-}HnsP2Cp@q)BTsn^vgk<+>H^|La!<_#aUtGnbOEhyz4%(R>5HuH(-w$Y$ zF*nx(g=M1cbMQ_-4~6tByLoy~RI_DD0I6);Ux-v=LH%{%lNiH5)HynOZ%&$i;cc&` zGy$h&r>|0)lQQp|iJqCu#2hmhY89*`YjKC=)Dp!kB+lo^=ZAbgnj&{w(`@_W zw@$B}W`79Xdv&g#O=t2j+(Y~T^^1WIJquH&fZTK|GI%+pIZf6X1c#Cje>$X|^Zn$1 zxy2T5#>1g=X>`*(rW}%|fB3YBD-DnZPLGu~mnB*WkwSiDiu#~f5jQkip5t%M%K|z{ zF)LR)2cDakcWvPSkTOz`@@?!!Rj}o5y3I&q`Ch$KYV(}ZNL@L{E}CPP&I#DyJzRt%min+>>yPYCv>B@yl>91 zo-AY0o4bhGB_cJMibnh?@Z&Y=EB6u;6jQ?HlU*t@;ERIqtvNv8(MKFj6dU0BBN?m`nU*%{}pM|Tp1=I{2M2(deRXV&u{cGh}+RhO_Z zV!ek;Xwz^E%1<${1ym^uY0mbrFKWpzPr zbN_dKU2X_cY2~46MX@Okl6~0)pjUM7eB{h0=h@M|2CGGJ-G8u?y|t6Qy^}_Tr4{Qu z#f#`nF8+F+TfLK=KBwpG7x|8l=GrTBdy=l}D(%kQlgDO7UMd9Nr}m;DZ*HAio!%pa@rKBt^Nmw-KE-*sd3CDuZ?rT;jBCR&fH=! zNIHtD7;;fDeU)MPksT9Skw-Z2xil`STX$ovGqm*K)aiERbbr}&ROKg4CwD&fZ|u1Z zD5t$ajkr+5uUKx0_lrst#{HTXtnWxE$sVP1G*c=d*T2SQy5u_ONw( z@Z;4)is%Vx$l87i(srA_I(R2 z)y)-c)`}W|VAmp#k{v9=n6ea8tUA3hliQH7jhP>YZM-1^P#$m5aeIP1;RfZjrnFx; zn9^KH$Q2w{*cF;bIxnaS)0I>swlf+1Vn{JqjTuyH?PpRS4WR5nqiaRogM@+N#}HzqPh#KuLG zMyG6Te>;&mM*z<&8#r^Y5K`sgaX+?FlA(dC&Mg9?wX;-xR-F-1~DA%kcg^ zgqfb%)8+@YRxdXVCI@x(dF;jG{)8w#x{m zWF*~>)Hr!ZBXOqt#r@Mw>7YdjZ0$}M);yn93cGZck$Z*r7c2dMgwFANnxl&sAd|G& zr=g{*7g(#`*yJ`eS#gVcZck#}za+V#BJ`cRr^#;L&FVuA*w<<-3tjbW4*XzVl^`$4gE2e3Sd5w*2}NiC6%HN*orZ2%U-Jlg~cr5+(-? zkSuSAVUnyziz`vQbzMp_w$i981yY~5w^$&e;^JuQf(+OJ{s1DXxQpmz4g^q;vqL~~ z3pWVe?(qKzTNLjmS!{q8TEM&CMhVZ)cN%%>rhax$Kf9OU=D!0gclEQo|K6Ef`w5U1 z04r-3#+#(l$I-GezPGq{Un8*c{+@!B?F+mjnn%Y2m29-Ytg9{o2%!6{9RGR2mh&FVYTMaS+%yM?*pWM|ve=7*T|xrov^)uK??jC9+iY}`vz zAhOVsG*hl?uab=vz(eqUj-Su-d6Cb{e75j$=`Fe3=A3QGEezY`VLNhj4udXED}{De z^)kK}@!dE2V6V(Qd-+X!Ay&in`aRJUfzq@0EObvS%-1W|6rOQdUXI1Qn~vSD%%6Zw z6pJ(5Qb58n&T?Pu?Z4a`yDvmO2QM%AK=@ELM%3t%51af%-#aUh*gUASnCNpXm~yOr z$8O%+ow+wLt57S>9T_^v;DjaiAz&9p^WFZgH-)_VBRK?XaGtO@&zb>qfs5OD!LpQ3 z7IBlR2+cYe{xCzP*v@~8u3nT>7r?&>OD zjUK1UUCv2%`JcO_%H34uZqzn^eU-nVN*%E$tCAWPi>~+fzoZFib31|gI3_uvA;D}t zh@OyBT&(cUy3HC@uy(coanz7DjQuzlu- zTVY2P-180Yj}7jt{6DxP`CFbTY-DsQ{R`i*=fC6sun1cQdNsFg5nRvT_KJVu+_8(` zmcQQ1t=`*?+S}IbZNFONPFiHI?ZawvTNl|IVdtwwMq)_%5+^BC4H^t!E$=e*?&L+8 z(=?g*fz#}ZBz6^tcq1biMZ2MzAR0Q^O(#peG?in;yfTt_Nf}sLW~=;y}9} zMRg1kQ@*1xy?yiQ6Xg#xjjkUqjHn3-U})p4GEz7+WOcAc_A^^qmAp8CG~-r$hHG5($`+(Z{Qmn9rM zDT_^_CtE4k0+f+Q(huGR7HpjIACCKsk=2LW1c@C<`^S`gg{muOpxcnpgli8v6*kboMl^IZ}SqDni zf6;oD_K@)gXJ+46?B85$uPp}Bvi9y`j=r(Cy}36acFDe_j=TrxFS2v@wQKiw_wH@; z-61?_91kJ0*Iw~)d!;_z$8Fokez{lA4jsSHI$ZIViAg)J9b~`S+numC?4Mv76=(Sc z$M0*$>}$vF%lO2lMR!Thhq>pJYxzF;vI!$Xp+O%QC8@Ir+}*XGIH&zEx~X6HFV+}5 zw;$`EH5rEUBN|QQQdBVZWgdm&(FK{w{S6IvPJ^{_bP!>=*X7(*Ia|kagF(MOXLsyl zckg4H_pw*^fmOP=fmgcZvfg%iZ>o6Xmz9N()`*y1(qNZ{C!O1nT-LyPKtT~d(|~$% zlK(hZH97Rl0(`RmRbd*NfS}e)|La^wA|_TWuD5N>CMpD$e1Dr3kMs*uRm7ZEyK&fv z2K#+doo-@HUuC0$vGeazK1iAcT8kCvBGKYqP%jkP&$oTAT6N-1K%~pHa$hib9N7 zlYg}MDx&AVoBG?nwt6uX`axDm5U);IY`{P99G60V}C>C5_-$e>RqI(C0_2|}HeS)q*P?-$vti`*;PG6nZ6 zvP~d=v_%!yMW5{tC+zKt{aLLK@nlgtyYahPt#|K_53$^rYL#b4G>UZbu+8PnCjSu>3q|!p z_iev$ydrGJ1mk`sEMk_=fD)!|M}Z*hUkuqv_Y~uZI7232}rjo|c--DQ6F)-EY!%CtMTg z;x4&V+_R*5(-P4IdtRw)pW*G2-Ob? z^Il{yZ*zgcEbB|Dop!OJ*UOXG>#I^)J;=XeYZXO{`wPEH1_;a~I#wrVm{Q}*aX(f( z1~*=oXvUg7T%P z@X*^XP2m}S=Q5)(hTXSJGkf)N_nIW7?S>yTQ^oXQjB2yfm)V)i+^@B@p?1y^beSLQ z?@wLkPg|Dmu-8MaQ_h~f%>EKypp^C>?eBlR%%8a|8KVnG+Ye%kCu*Ot9x4IbYx|=& zeqf3Htq4@hAfTjgLI65v8I7b}$1LH3x0l${OWboy;+!49&9o2TRa+ljTKf6F?PlHZ z+%kJ*nZ3Qty|v7-C3`c?KWZ5{Ao00AZ3)!*8yd^X$i$+pm|>nC(k}E+rO~3gF%Sx%u`mZVxP{KyLsO^2nD~ zK|&gOt%97R1soH5L3#md4O!56dlGjBVIxmUF416|ta2QYcU-V~^;J@?I`kcJtGp)s zz{(+PhvGiwVp6!dQQ5KlrcyK8iO~Paq@tRfmQ~jInVB66vn%J~96rx>@jF-Uj;4Kn zyeDTC;56;xz5Tv4ezD)5BTIH*b#1gg1G+j36K6LxIkN9~AZfD|>WzuIDzHP8 znGoZnIW9V8Or$h0VzzhfDxk%eW(KXGqF?fOG0_UQ4(@Z5uY?+JF_8_GF5~H z+>b@cWMSEj%#L{w4bH^{sWtz-1TC_>99zb0x#+e7)1ovd9_UXwkXNPbF9!eyi9ho| zcXU;LK<(eP+~2(%8^`Zf`2F1C`0*9_PnRd3EwBA_x&LfA5tHdGoLT^zfaIBm zw7s^}K3F<{=EHx+&1lb*|BYARUj_ppzL2aLWKg*M00GRV1N}%(3@_mH;4*t?nXtQV zl<%OvcMRX@9Qg2;2kM414rPH{EJZ?(9s+JYsgcj%D1GUQ|C?9Jqci$TFiYU>8 z<5MG#lQJ==Wn`%caj`)l$^-05qh4SZ^3i(-@nRN?U2qVCeD^`hZ(jUo>&%t?l3h2y z`;YJlyD02lcMyqBh*6<~e>})PcTlP~-K})rQLhEw z%gRbloQSkenS~ts^h|J z(jE_CBG3h(A$dIQewVh#11H2=9!sMf%A*q-8TUpMWG5B3Fn2LZXCf06z$bVW{ik2N zDx+d*@c~mybK_+%SJ*K&+ERH2@Izr>m=SrjKD!cteexjx)IsjagKWz|{`8e-cb;+X z)q{BQ9;rQ1y|LqVr|62_#sA8McHSWXpSyY`DrWhXPwC>T=E!_rizh*@SfnB4$HQ0A zY=j8iEf*L~Hgl+@Rf)C5W1F@wr|p#zYhY9G$Q{g(V%-~L`MNzbdsv}Q zbljmSA}0dOum#ReGX!^<_u)$S$x6BV@w^kU-5CnZ(E1ZpC9T~4+({HcIMALr(0+fQ zd+I>Dab@*(K`i3RZhkMZ$u}JcWx#dEYz+~6w7!?4jFGy5*}(0Kr(UG=7`i|Tp@fE_A&IM&CDlsb8rTLcec$NK7z>@x%)(kx>vP(O`Z8t_64^>K1`{F=b z#o*gzhq|i|b@%g*WRtmjiaoj4!V!%n0KADp<(66>LfW{_-Dd7LYF2Tc*7JIMV`cT* zE2%rQL9Hc9%iW|EQ5heGe9jJv|Ii1rp?39w45{E~FjS^CI4Kn{gU7`LN+}R@1_VuZ zZIZP_+h{S*tpEQUqgJY>jQ|Kr8Qc+wv+#OKQd@9DMk4hE@3uguvSW(X%#*DWC zvq2>RtmDVyp}sfP(aUwAlKx(1eNAOozL9Q%>N zofcvP2aYl^ISA)-P)nF@f{%k?L2Lkuq7+$II93z%-1FqSE#+{ZQconHm4i+4(Ip`-#}khQ(xxEf)1^c5O;oM<&yNeJQ%66d6Dc4VOBFw-!5-&ciq0?g(yG z+Bt*d%c)~vZAc1I_JkNfr*eGUKtHG=dY3YD8Z&!vW$hy?Y5xi8M9vMt44+b!^WZYEK_p{mh{- z(p+SPT1@1Sa}qsrA6Arj8OXfJ?Jk_I0&(AuqBeCJ;yo)MjW!_--?d37DcCtHy7~xd z27+RcjKyM;(0pPopxRh%(znadJ$EWK`qm>QVhi*N)1KE=12AiPk}IhoVHa?d`E6?WrT< zCy%sa|H($7^1`9$pX}`;>2?Rd{(Pjpt9?ykg3utaABZC~PIpJzXGe-U*cV6I+J8dS zrv{9&RrW@o=Wjfc6TdwY&G{WiaxqTo70}n@(j(z1Z`L^teEI0*Iw~Iasw1U{AkX0H zBjeWK#{Z37d^OW0-HR*$phsU1f+jUFkHLK{Ho7TcJ8pw(;LY_XnmY*=+6Zg%VVezG=rBi$$Gh+6!|@x7C*l*WaFV6Um-3*b zywA^zE*nIF$kT;<&p-d*qQ2CY%8U@A()qR8l5`H8y>e#8tJ7$UCP z!*;@g*&AH1W8{5atw6lu+i4CaV~)dJb3HnD27n@Ov47ep9fdXcziHros~)9_s9gq*l%f|ZVnaUPIPvXvy1Qq_Um2YcIPiwO8_0L zu7kQp~`)W`cP` z43#KkkwzsUh7)^l0%am12vKl%ijFk#@qH4E%q;=5V*Ht-tw79KY83CAEH{Df8kdOU@2QDIC?3sO}+!5X3A5jHwZcD9^5 z_#6Mf&OncYZgv=`zc&SEj&nI|BXgq@ETt4^N4ozV*8>FP?gt&=Zwv8OE6_?2o6U0r z2?0&s;QvIAxXe zXo3~p!3{?dhpE^?f(l-rg zY6LE{xfhsSXkHH8Ypvr9OHQYt-6@EtP*9!p>knue{is7H?rZw=GST#!exEa!A;@e^9QM`gaXC1-X z9XiwVh;uDcsbpr&^=64OAe4Gwse*=U`7UT5r}WYv$|nBUCKON&NP?70yg!Qm1#whv zO{*xSrv}dZnfkfO=4EzT7@d!ORTKjt{!y|np)bX9Y-t>-Vz(i&M-qEDB!VF*6FotB z3-KeMrgCwV%Wl$;lc{ zCJ{Px8V!n~dkyiGV>LK(X(Y)lknsy?`=DjX^4ev#d{FdWf@?Mx6B`CE0i#8hB4_^* zU!$Otuo4{=*|x$nC>8`~ck#YU7@&HV!YD%O*d4^w#KEaEiXh* zq{yva!C3Hkd4edE1pJJGH03TOCIA{Q-A%v}4Qp-18LEcv!nW=VbEn(jZbwKclR90s?YX9s4i~R0ZpTKe@J7JEDRvf7 zg9^yQq9T}JEpD0lC}@i z_EDO0p83(h*Z@D3rnNy&_+kNud1Zi6($?~*>?jbjJ;lN7@Tw%*&V9%h51|A*82yG6bk%t+l#tK|BCCgC5!jmS)BW;5by zf}rPdGMA!y)->=$GBZVc(k~c2Vq5W|*$bg+V5uz$tUIiF>6iUi_NM?eD8*LfQRSr$ ztoXit&;FO#T3j(T*v^3pFE!Q$En8^QnhEQd*5j zpzU$|1&{!XvNcXVlwVwtSB@LV7K(1DFt7nd;ZPbSFp1$Uz!YhBgb=Fyt;7_1h>oBn zu{rF6p=b>8TXJ-*jpjDO?xA+0`+cIhDJ~^WO#L9H6Rm?Dpw*3Y6HbqMhX;b;iyDOo zbWFizWA&R^qWAbm#|I4L;mL}cXl^SHS8}Km@%r08RZEBT2v?B;>kJWO+d;MnvTeSu zru_IZ@+WMCG~siv$9p%C-#lJ?ZcwVUqEwli39cML7HrHZ$UVG90?kF{Y75a%aasGR z{j2@hEpvC{I0JjGMMMLt@eDcyj$0--Qr(zaZSj1%)K?0A=|@<5jIv0MSx$;Utuy8l z3+8op0w zDfF$|A?R0kwVlU?Uy4t2{Bq>weuA(BteM%w0zMGB2TWg*z7eiGxQV)1&`@_or36OOiJ4guh^@ zQ>4l!8e|YhNsC-DRA&GmCI~`O&%%2f>ojdqNG0d4BpgxaCy2oC`#E7`*rL#Ui7C4M z4R2dnAzdB#*xPpc+wI6vv7G?4hbCY_j_sMh_ncR}z1RIYAA0+&=X3t%?YQ!Du8M6> zkY=5&rQ`~2gBhzg%31tH4gCz`jK#OnVX2_+l?;5UL$ds5tcdqQ6#^!MnwHy4c1jIT zOZ-Bn?!`>{yu@FSxIa)N80@U&g7ob&`@6+9x1pX$-Fo*HZT%mgle;-X15$whLr^yO zItnwB=>;2-`EE)tS!3=fv#|{e2~pYLu|K~Z+h4iYr5aM%cVl}8 zIQ7`aP`o6SRrolckl4vd)hXJ7SI|fh&Wrs8HS!{~c?|*iaJ#_RE}`CY6t%}^8a1)b zGbHcdS+W$x`k@#=sw!cU(q~!1Eg4c89FwtLLG#B8>lueC29_0+>;tWm)&EBYMfKxq zS=|RSbfJon*U!t04FmWk1IxfEtlM@zt$3?d@fjPkEo%@`3Ug zkt17B^KWF-;Sj+l=Q4fvQEY$FHuoVVH|alCNJfest;=-WTcR(0)3{-?%AuB&&_F~M zLc{q4*YVZo0+h;UxH-j_y=L~hRfc^F`*GN^?_NjEYlROiOQM7=*7Ckpeqc5m#LXS! zqBm(6NHk~C8(XUSRCLlwe>kr^9H7Y2dB&T;5MQhD$gFReJ>iY*SU5ds9T)_JAw2n| zAYCV4G8^X3k>beyYC3$jE9~qZ149ETTYdU{@9$P+JiF5zYXXA7n`;2S(_H1r&Q^*O zSPT52FK`~jtFz}3`;QWxAK<9x0wXt&Iz>N#{ccQi0^>14vw{WW?3D`+<@kaCB(kOP zh>D6J;DJxr=Lqo$xUkexPO>7c>cetoB77sRtgEm-l_6-CYOB5K8fwGXuMC4OUgg44 zRor39j&p`#rY* zExgUPP4j=5CLGD6&SZv@WF^$LIDW9+uztgFmFh2VaBC{2zHW0n@^Bb{qVbM=N#KAm zzrph2(%D?GbfL@l34wgTahU;FDTW$=GbNimDL!Fflq41_rhczK_nJS+SYvJcfcvOYt$zkpHn z_>?~j(MMrmRO6JQ^ERFXfjGt-uVX}LiNsrCQn0CB!TKx>3@Su;xsM@7P?BH^c+uRj zDB2`k!;Ll(U|5CzM?!7AHe-L5rK2rjPOwWu0eDO%)gC7vxfWx5OWtESSjxR zg^H9H=NppDe7DA@nrkoG$m`rcv+x%xgS&>Fmc!rg8u)wSGu_hYE2$n?|01iXUAans zng=DQTwSpRk3mS>=a%?4JST>8ppJk=mRVFMF&{8$1o^4G61DUN$`mk+CNOPaW4~Xr+WEk7Q$q2SXlaXwPC!^VRBxBi*N>ILM$KWJp z*>TAvwiA*mY$qnu*iKGnu$`LBVmm$Ak?qW6R~&6B<18>fk6HglO|Tl6k{R-SWiaB5 zIPas8V6y75W%2Z|Bunm0dRfgjpRH$GlkLN{A=}8dZ?=VPQ+5E`*6a|r1G6L84$Y2c z+mRj5c1(5>+X>leY$s=Dv7Mfs%XW5l7q;`VyR)62UC4Hi>^^M2liiQ)qU=((-_0Jt zc3Jiiwg+YpXS*`{1GeAG{uA3DW`D%?pR@nQ_FuFA$@br~tNuUE&I7=Xs^0(eJLk;I z?e}iYX0w}Yl1(TH5Xb_dhoUE2`=@n zcB0u?3ZiiGiV!z}H|O0b+gK+yhpJ8@+9awnprDWv*&1{&Dv!p{z|hMXgb<~?QjbC? zJr>%l{a~H;N^cx(Z((9!PN4H1Hvo1RzgTrb%MjP1orj}|(9oj^#3Wq74z@%6jfN%U zU3QbKOT7PI+5zQJS}l*^!?2#xGEAPVFD?ICOix8B6|V4;CSY6mmebSauBq8P~$i+f{s8S5q? zBRW6Ls|xID9-T}NTVVMltog?mUuA{OHd^)C|~>KC%4aA-Xi{6y&MRBqU?5Zrow zSJ+f9FBdeMKn13pq89)}l_z0orsiC4oh9ALl<05af2LEjh-u#^!&RQfdcG|Pf&|2R z@>H6gEFTtZ>Ri`#p1|t3v~^cTJs@fYAWH%<8)57#yN!@=I1q$yr}u-#vA`{gBEuID zoA&Wnayba_O$!Mo#N#r*58ob5!G76E>7`-}@t_^LMt-z$aXT2drMM-U*d_anTxqRu z+9U=pTxrd3T4U{FOUcUUU1xIP%-LSzd_V?KGZM5oM{X89Tb7~koFcGKsTVcduZM~^ z%^repaLJo8RgqB__u}ts>i(0y1(jWtwW8tk#LWGh+ZRj7lg7fAFxGL3$7P3jsDuz=#S%t z&7bi?2Jnn7(A1gSRPv{m{29`(B%xuv1-xON82%iVsE!q~M{OOq+r+KTB>Q}TXK$B0 zirGQRH_~d9ZX{MqWU)Ij!7-qEAbphT7wyTv!t+|DpriY?Goq81{QIlES8K~sqItSm z*3VD#G;E%F-#6(0Fp5pLU?ZEFs{F%Bn-N>rirYQnw!Ka`W;D9c6}PpxP2+ZG1rpRg z@4J$g+ErFw3l!EqQ*ZAJlG4}?7sPhf=cnegYFon5w&c1tZgK>SYCKsaL#R7dOX8#` zU+GTij$ukKn2Tk+jx&ez<*1aosU19@M1|398`ASDMMnhlJyR%!!n5-GEZj>|AEmYi z;L+D9u!A03Z?%LlHpV6*CuimU7yvYu<30>x5CMkVm3~on2b0K!YwYz(1hJRO_KeQW zt%e=ZDrU*xMUd-N70$g{u|Huh2`>Sf(7GuA{4f-^i{ zmR8EHr2pwB61@1eiaV)dr&inS3 z9=l;V=4jxdcMOGs+%| zb&^%Z=w<%b)v$jMeSWHn%V59KjN^Yx5YlYSpOMIZ3**Pj^ zbymeL*8cp8W4&~A2+B@(_sm6OKy{<0`@tnAy*Q+yI$hs6y|+D{65K5jC%z z9lc2WGRL3i+^@K)`9Rrzt(zYyrz2tkwf97yK>=C6i3E@QRlA4hX+16^c*KfE)|0kM zwVYfH6g`;%`f7OCPzJjwrc>*f1ihX;6JZ0=-U);PSMh@?wD!21T-ShKAf|w>4f|us zzg)6EmHb~y_UDp+4Iv5mTT}AKm+iQ+KcQ@2EBn*PU_$hvmXjM1{UxkM6`6Uc$P{KW z!ZC=CAT9!98Y#Lj z!5QlO2T@++bL=H-odcQnE9s;Fr`W@8X`RN++kQdEO1D6S7H? zO@}1N@e2B=StuU{yY5TA)5SEvn!R*m8S3y;Xfam=Q=S_kq?X*Ti&oXb(>42D%|9yy zms1%r?X7EMN!X4!=Y4idUh68Kd-gJ?&km_jz zrNEH9wI*JgEbnGWG5qF*W+{nVsf3 zPevBSCfWMCBx2Ha(jGX>czejTe(u5sVOp#`MQrV`;7{)6!6H%WDVM0|Zs*iN{85D0JZ=92i zKQMa;q;pH;g^d|FoM-tEboxCum~}=cw)o}V8qq;Q{YpeX>M^d&Z>$;(o_3>RU;!Ow z8YbbkR?_91PDZyIgnpFhN`**a9PFo(5g=@5TT1j`hFY6_4)pE{ebQvc@n$XfE()~V zx|T^l{H}|;U6#?$M{QhR^~3IP%;g>ok4x1CMLbo|qG>6pg9oatv+ruEGj zGa%4M4NxNImJ8PLiJ(8 zluT?EEQYXd-Ne(1n;t=ujyF9-j*4!|2+(8*GC1Y&3N}3qf4akbO*$1+-Pu3h{?eBe zEUA~iposB!|4O!8=-pA=K4c%p)~XwECP|rptG#nQ_HW(#hO@sGxAHU?u6tj+adYa) zxGQkxq6u}PfeSmYuH4C_=dPr2O*g-0r&CB8)fu-0SUnAoCCLl1FUnnZ7tMKJq9CDvJ=Yn#a6It7Y3dor)+8N|KG zemFS+`A2q1hO~mxDPc;7 z+2{G5VrkDg>-kI_4C715Lq2;jwV$PS6F$4j_i{y1%%h-cu*b}E?pm}5e@#vtM1HTc zzsLba=<5S&F}+ELzHFT)sd zAb%O3sZ2C2Zq@w~Bgh6@M6UF$DgaJoNkG1ds?PcF;M*|h;&pf z2^70v#`>8p`YwXkZVNSmq0;L`DqUR!y`SA`_r4ef@(^fIp1e#;h!J;A6>@$Q-*qz& zBcK)iI}pf1Q*nUd;gsg4%;?{Hdyd$AD0L^Ld61%F4J+WVE{js$$=K(-e5I|oLMrtZ zal4Nyna>{FE9}`Do57lzfR4Z?w7=Im9*oDh(wKr`*h(5UJ_E@Tsz*c-ut5sy#u$c1 zY{Xycp_lNAmQaJR#a{}Byjvn-mDx{Ipz?(@f1%r+@Ahn;>81y{5obxj?6awy3nVw; z4kc(|smb>^K3xxrzfF8f1>~eN>18~|?qss;`qZ7D*}nFpVBbOiqdCuz2&9834Ke`) zK*{&XXdLABh5wb^4ulX^nX4)86EX6>jcjF*?Z1eqiq$Tp&NM}sq*CXj5FAigC~r&k z0cyMwr$OBdDq~qs2_3LbMD+lpJlAcu#!$wvVX^(p8sKww7bCeYlJ@gmqj{-8?Am*| z$7-N#*XW4Hy=!!Fr%+{F@{)uq8AJR0fZNo~f`=GxPGu8S2)6odI*QWB*S^;sm)c(f zWw}cJD1Uky$M3?DeM1vLEZd;Ji{LuDD$~H8|KqcH<7ljlJto&p$_{l=YFUxi_ zHSPU9Y5J42*QHynWpN)BhuZ^oMPLjIphxC*Op;6h#zdZ}q~(cCPZztLVFZf_G}HFI zi-@S2{nbh7#Ep`(Flm#u&k8q$I71{KH2XOOQnK&%#J$o+aEq89U&=*hq*x#3QB9~C z%)m-w6W4M6bgUc1D}#HC#cxZtvSg2!j3w>y!j)}d+5f!+LN*j2ij7GGaR%FpZI1D~ zoK6D`b?$WxyUrd$JI+@`D?4HrsfG^hXTqXNZymT144R#q%>Ti zS4n_?LMeR+7DTWcqnCHV!NEtkd^snlfhhag>nFEV?RL1Of7BTkn#Wim9h&A>gQ|4? zPx0;kMF(UM=dA7`9Z=1UfCNisk0gJo+UvUe4Hr)2xulzuZO;8#f#7&=$0=7#$0v9S z^`gU^gpoNuNrXCjK53!4t2SYO26Ad*@w*;N&YhEFl9egW~Kfd6;RH1034P!x-RlItXGg&IBH~d~W!mt?@QDY`I2*+JCiG zZnwrAh5*~>8yw^NcG)l6H={c3e#v+0^fqz;)cq1NF6q5~60^goty`J@%^Yf^Dey+j z$Tfu60dJBhS%dL53xBTSd|F7XBVibC@9t83l_38Q6mx%LYL_D8YZ7jRQ4!+LI4~qx zc6%+mQ}|5waK+wKe!a76UBOHMK_2j3%?~MEcNde+%S*ojL1HDSKhY`-FgTm0P%c*4 z8Ujs?3&BYdJa=_RLa4eB8u*dQ+HT8~(2OovFzQOI0833N29N$@Usu*G28%eb9aTjW z;GQb=^!H_BGG;ne0veP&Q~l6Nvs}Zu4dc#NW>44(k{GkqZbg*%JAMgz z#^h9vNB)wW(s!e(`Vx7^1Xi-`_H+9-lapAL25A0k#a@v`ks6b3Lm8#wzlzpb<8N8D zyc~Neqd|Hy@m12bun#eTbZn;*%G<_aBdT_wrC?>(tY)BfzwJ&}=51mpZ(^rx;?``8 z2&`G=(Tq4j<0=NHI*@6fPzlA)`3(pWD5-*9W03JyRmiP~QvYtfuiqx!vC$um zZ3N*_LNP$lj&xtlYW~THvSXmGJ4Kv<+NIOU{MwI(HMM!S)hTqjPm9?@p4f z;h5W!$+2}_BIs(M)R$LFZ_X*Cj;^iN8iGPDYHO3PCGgVrdr>I-I4YWfz9KwHh+I^i6JAAn9ejF?!U3YuQ z{aK3yOJ%Mw7?Em;*HHt|oCN(&lbgEz_!!PBh$PsIhtfUJ5*U^qr?AWg044qQjD^Q>A?A2O!Hmm)HdG+kOKKm=~qIBmt^WZe*cTN2`5@lGi zg04|yq(qWoI-tc^01|&8Bg#)yvt#v2^^#8y#HT@F*Q~mU5-a@o35cYmWI1lX$(IT} zY{nk;#{K{ejo2$-^W$r~n*uQL2hQjRzAyq=921VwKJp!HrwRPHz&40mjv24@;&ys+ zt2~2D9|2m|l>Ilc7yuO?r{qf04o6p=U`rd}SNOzgHdpQ|M$uX#7|^_H8=mz9@X<8< z+-CY@hrNKq#($CYE9W1?GH7dRn4un|JeB)--R{%E_v_xi3gsAjDUNYRL$@y_AGCej zG=%XB>*3tGou@PF-gd2$qX4JyOHZIJ`p=K8LKfR5Zgn+XRhh9dhq3D+ zO-&cG&o?6&dTw4`LrlU0Hho98Q-3laxD(Q`&;Z04p&1tp2=^KH1$btSby&y7l6G&g z$?b$w+c6)2+H~eoO7W-`Sd9c`!?-1fp_VLklsg{*IH$vS*GnaYtEG;=NdGvCN<0fS(e zYFnjSQ-fj?EChpm?ZVZ;VMequ_8Z1ag>L2y@{kIw>rEa2=re%K@jS*hI}`7g3xtJ0 zs2PH;Ft+fvlo=gFca=hE$t4jF>4Hr{xLxRGBoC0(2~6@VCX}D4^xJ_9+QC7&h|yyj z88X4fV%u+#d?J{V1rJ9hPvb-10Df_S~&jX6EGEQbRi-)`TaO(ac->bL_;rR%a6d`qi@}nY7G!aFh)EQJ= zyoO+iOS_0`k@2omF$B#>xorVF!B{9&NdMa2r%{Y6_QJljjfFby<>S}+?#Pr|NFGu096$ve;9r8R zH*iED;z}{X+0Ki353(FXk*4FQQ-Q@9Q1dKt)5WjF(H!A`95tLFOqDy3p+lXkGxu2_ zN>dc!c)=yrORb>k(?Uvykhzf{3u^gEwOeHx3 zpK)6A$yd2%ImI}6p39e~XDM-Yd3to*mX=WsXzRJgiuTV~?U3@pFapFSeaf5~3nK3qRG(SOIODDsEfZ5wWk^%gUI)sESKQI>v^Oeb!>;tp9Drze#UP z|3IO4`@4e#y87p{mqPxi2`KXsk?k%Qu3VcI#w#I@}2M~V-?Z|Y6LK{wJP`?6Egy!MLhB6RD<;suK zAK@wquD#2GEf4QsMwaB(ClDr0ytbuaOn}igvtc(j2mkS?LP!MK{G%PpI6%hf#;?Vd z+0M|{x0>^L`N5jFy_#+azcgw~(UdPmB6dO%e-T)*F4_8B9gR+Roe?JAbwrgY_){oC zCpyl*<$gSN7!Y_)(d@dAuA5^NX@u3ftUdpRi~VJg*l_A5;OEn zX3u7BRc5O*Ta~%hnO~JvSL@7rAc&(XUP0iAHLQR(m=Z*v2~o`ZVI0iZN>g z%W~t~$}FtNSbU&P?7M&shjUbH^cxs7lBGpugxCRo!hJ-Kc7+O!fy!5i{okfW29L{| zGdn9CyH_@)`UL_5H43TE8TL<-or~x3VhCmwG4N{os|0J45uQF7y~GWX|B+`5etH_4M?@s|sL zbe?q~JOi{>K0_nOBCG=_rF>9x-CmKk`E|Ac2$AJ&K}+}|TL{ykEBU}p`NQ~%@ovMlOmA%DAt7$b2Lh@(4yhd6 z2aPEu51^UY!k9LFc7}i-?1T)shaO&!Dx3a2T7mL=D&b=IM(NuYUEO-4C)mm1s|Xv3 zX~aYdpcE)7RVa6=V(4Yi3)N2{xGf@9w_ZPawvwHoTE5?qlyiO-*kdWl7v%0ZmJX*k zNK=u0t3wDE1m^&>poPsI&-5ZW*_qjN85AcK=2A9Jem*<@a=ZxjpNAjHPQQb@k|tw4VBUOa+7N!>lE-Oa_!@;zyIvg%)| z`U45l&87{7>gnE{;RD;V0GZef@*RAsBhSwD>3PU~sGwtTeQf35>1$Gvp=>`3?!jO` zkNtA@2fugB+mg<`ibo{Ljx3PV4^=t@0AtxK--C`Z4LKWryaC~u1MYFNjYU}XO1ePm zJ@hRrr{Xj!x`W}2^mL3fwY1vJLU)Z8A`Xlo?zY{=t5IHH$`yr}g)}1NH~pcvTd4!= zRm-pL*5l50EDUIZa*YQm(yIv~Rp~mLYO?j%NVFy<4>lnv)E>?MBqNoPTT6US9fkwy zAm@(72uPTr><^hujO`qb?aW5EjpR8V!A;^Nm|+D}p(9s{ToXqfI|Y2LhZZKfx9u83 zq%UaQUdd9zw`zdn4Ix|~Jl=2!1iZV3-!u@*pWdcAQq;bT=sPw{!kPj~i4_Zlx{)lE z7*3TK^{sp?c+xz;?cb$%F%XuUFKfA_Ev)TW|7l1UqsC6b-Ri0WmD=}~j%_B76*rA- z-=t#UR0iX1Qk`^Vxp+%G*}BDBI+GXU4e7M@4Kt#GA*BF4gIC6PbZ}=hCvFUt*>DG9 zbH1Eh0nCaZlT_gRu$!O?j!;PaKduQbL6=c?tMXX#k1tqZF&khs^lmx{gKN)2bv6xJ zc1MIWfU8XZ&e#n(lZVeH31vvJHpm?gNrUcD@hQ&2Vw(~tFIC>=5|=$=A#$DiDDRn+ z9Gxv_g|k~WpD0Zx;4P!gw^}x@Whb|MXK0p@l;~+%aDFh;shav`T;k#ruz zM5!VG8al(zOd)ZVTsQCOPVPcF)_ag&%Ba4N${mHt>ACiv#}U|-yunxU`gt3m7A2iz zAyBTS+zMskbSX<7UVFrlP>VMtFCc7}@jdYH4jz62afSRP3$!nVa*pEY2Ug_YPN{3glO zu6BVV0;?+-rX50fA@{SSFf(*v!+0kw7Qn)UrBq*{$trfcqius_w<_IC&P&)P5-*`urHbtQM9*SepWzf1H=jh7={=6ErSh-Oj*i5HfHL-~O_y-jFL zg8f!mhC)Mm0PPS9re%k>r3QE~a~&0tndqZdYUD9J`9BIknlqFAOkyHw7RJs23RuQL zb?>$Og^UA#& z2ZYItUzhu=8*xLUOJ_VDRa?z3L#Z)@thbmJJ4& zNN?-QvCcMd-nPbJ6qC1W$VaKmCN(C;6p5nFa~Gz-k-Z4Oz%z&IumMnDh~nwvlUGwz zS6miQ1>hE|3(7LuPz}b6idt%}pg+_FYk-f;Z(TWdUF zB+j{$QadrV)6y^jAof{RqyXUF)@=#UMkwEu$d+ADd4V>)lM9#@z5qN$x2>#_YjfTO z@W_ohvQ@j;0))|KkAd#4Z8i@g(n5`{Aiejcrzj18MOWV5Pz3dJTmy$XUi;fvt~0ee zQldpDn4vZ@GeQGz9}y85A!?^qK>LQ!rmd4?^8!tZ=0->#ZLE-RF)0+0!n|V<1ZSj6 z;QoIE^~yh8A@CnVAEz)a9^4(JNbP;O8yqZXQYMsua@heHpRhlbG~%QV5-EjlhUS&` z+lj%Q6!N*w|J3Y$AwB2-Ii{uqp;HfVqKyu}Gkd!I^TU)jG54g|Q=>nF4mW8PMid7S zjq&NQ>&*Yn?A7)yw|YClIYMeEKT$mKUv3!-EFHM+GwM+4*Ii?=cN4IHjY!4xdjMXC z>J7}rBp^%vAuJzue{O%M*^8i&y9)cU53F7>=cQtZxyltK+;exkfayf>Ktf;vbPM2s+m=99P?+zig$Ria zzEdYfbenUmTF-NOIX7ku=sP?>CY32@H4M?LiD6hH(M_2ij}0o{Ae-KpM#4Ig5Lt|d z$Ocg7x;%M8Zk(jfxg4rh*R6|99H`sD6KE zXocB+J1QpkrxTGtriWg)F;0tKHwKN36THtWOSA}|(o9j%E$b%MzeVkkR=Ha1t`5cS z9HNdKaBMXh>7lJ1d>WByqdd`m$0voG82d5F0~n?#<|M{=a@KvCL=#0A_uCMlL;w@# zFV4D^yz0kteg@Ic@3Nm~?!nCeJhKP0@Os*so4GY<>uQPA-R{R^Y*7d{Yc0s2)WLRE zNhvRH6-|ahd>gSy6>58lsqAI3w@GP~*{Rt}-;^9c4?2879cY86D3l?NOq$I=6RnYbCD{z2|Q%hs(i9 zNQxO{#P``R^48V4O=MD$G`K-I#T4gdwVV+*llYs=c5ov|6D`}9{Q%fWurx7*HGf#} zVG6Vz5N3EDVxVREAHym;byiR9%4#xGVNH+_>L>#iO%AH}N0bT4Sgo6UTaoa zO1Per?6J3azzoWpjPzH#kY64kds4P^SpePN^RCy3sF0b7u^&TdIaP}l_tX_7%ei)E z#0M`hikp)7Uq>5;G?aoNmPQ9Bnzb^+D+!~*_sx^DFoQ_D@+4_4DEo8Dwg5M;|8c4H zK*{~A)LJR)7xtu5_p=NESg|H=9$)es+6Tjj?Bd*`5WLsUF1KFObvxT`flDY#QAoAcLnw9UDIr^BU@Qg3Dy{D3<_zC*`_wYj^^wW+3r67K|)wG(nUP!RpI$Yl`Zy3`4AIse@>-YZj8>%^HSJbg= zEUH7G@2mSGnUG140Oc?sL+HV>xzGvsUy5|;M#$xjuzvuT;4n=;&#ISV1h|Y6EA6MY z!id{GTC0eGA)z)Itf=HNi9MWK^xB}7#R{CdTmiaV(B z=}qQ0vTi&nf3Af$Yn70G9Ddq?y9P~1mQMfsvOOW@QN{gVviFHQ5zG8~r8QU9y>lw< zUm-MPP7ny|+z+aD3mMM-nM(JI;1DK>*GHcbJ`O0<@f0y_SYI={w^F;mVn40a9)w5W zN#4nR&~QjqKWy0X4ci{c${!CVK-oTMmsQ=;YX0*|>$M6Qu-_bgbGuzfx_8(GWq+o< zy}3ua+4l8n>#2(0)>shpZCyFi?ZcdY_g~H)VB27U7=%<8aQH*Wom^4dK<5rXqT7Qy zHElZnBPTQtHW`{;1qM0vE%<4bc@&)=18{4gS;CSLrQ0k|kM7)|(8e4Y7QA6yFW8~4 z_O-?+V3r6fuf+J-8|?tD7BET$6>wG)ihLLMqvtEhe9|WE-X`(f&o!a{CpR5&YUecV zyr%E9Z#CT|O}n^hi28SeWOS7l zq5)z>`>dj3Bs?*mkn)U?*A}C3J+=w3Bo~LyN~`aQR=}cVUoBepVf>QqmVJ$Ym{#&) z2Yti9;B0n=vF1iDn@XgDECyv-ogd~n*PYCQ`152b?$mub%j_fB5rL0=Bpl)R_>c4) z!5W-(`+lCikcZo={@wn$ifM1`S%*mlpjT@YFAw&g-RC2Fpc64}j1dPc{sR9}v2zv< zVp8HV%H2INleUwQJ7_rhGIJPxLXjmhE2#{l>K!SFFj=BL;1~t}kxgyRDMklcM6Ddu zwbGz9j_u=s%2^mecujfOE;qX}Rz29me}FmGzZeY!@_iAp^$T_akFT6)@_1vU#{r^X zSiO+s9{Yyb@f-l2|NING>fC?-%QPSGgHW{3MqVH{NMfS!&MSn=Vd zDqz|~^BD`R8q3>#y#yx7;N_7^4x)4qwBAo@w)d{R?@g|jbNo=y=gSN)mK`_>69~5< zHj+-s(819c=`(pX=~ytN7EnDA6rqqZ{s>)~607891xX_E%I8$2l<7gUl3Qd#iX=Ub z8qUHvp{yuy6nO~6cGpFi!|rgUzmtRLNfW%lxwvgy=)}k_ zbm0QW`IzkUyc$t|-q3}z3tZ(wSD~Pl|#C4yjB z*p{k%6*B4_?{oIDYdp_Z>9sbEx;FeuRiS&md)T{E<@g~e2kuChFY>m8_$J$&yPk5D z$DL=1A%6trhTN)P&$`~7@Qb|a?eio67%S-9>MIAj_o`~r8T6jof{jy=TZkM>G$Pb< zg~=z$Mqv}Tq3c)TMkx&YvDDc;L`a|sgqA?4qWR9ST*HYjKgdeOwrNnsb;xjfO1a64i) zfOLU4>?t12RoY@_;))XA`jVB1H55Zs&1z=+5@YhKb%F48mR@Uwu;fQ{egrAKZu4^c znrxXa9k$0ZcR7{m^6wbQ>UOo|gq@}qzhzfjR_9sSX_g();8yr>yj3v9tv^;%LfUK_ z`-5>S@crJf8`HwcJnV_Cwzme1rt@D_>u`T#q$G!dB8aF@N?Ty$__@x4=N+&~Pl*zi zC&xU+z-c8akz-wjb8S#w@@W0+O!lf#D7l-`R7{6TPxYc+AgIp+d$He=g`s-E;F|8o zQ!GEzVtaqIHFPaP*xjou`ZXL|2p9GF7~IIZSahI-ub=N2OF7qMftW7La|;~{3Tbi8 ze?Wm^uGSt>@xf!ljJAYr%%B#>_K<{{ZDZRanfx>5+8YseZ$FFcx8gI4E9ez~Ls_&@ z>W9~^?ssoTBL@4t4B!}b-FsY_7BHgTeHAruEhUqpBtTTcJkX1C87LRqp6j~SsHX#Qi*K$$=YVwr z1KCQCalO;i9b=9K)>EgX9XN9!vr=J}D{cEIg=Wedyw!Cb2{e-7Uc#ERz*Wg_rKEk_ z7OUI%Be6p28dka~C-X4fF+4kAID^lG|9pn4_Rw!8* zG!D@E6{wd3AYmm%u#m#crQ`!OSa6*ARUjfrDw_|ipLEH!MJ%x16Np)(mGyPnMX^!Z z*q_{k=h_bhl=)w$_Gx<{)1Dzm(h(Uq_i$>zpj9}4v8Szde$5a%43N9gF4gGWOo1dk zRshZDOYT$nq?Q|Q^6nYQikg2vDPc%KnNzuE&W1EutL(8Z zPF!-MSa_ovk2gv7$Vh2?2GS=7ek2=D2YZ}*VI>+AMzc@}Q6k7Wh~+c-h&0D*t#`=s z(g8&1g~A~|;I3_w>;{Mf=79Qy`j8eZcM~cf5a8$ArO7J{7ahZ#fEk2){!aF=uZuQ2 z4`*?9zORrP|GU(lX0&L`@1X|B!x}@8VWV&o?Ne9>EXgW4t7M2R4K2b6v|AT|H8wc~ z2M}>klx4jY3}dzIQIb7bz{|>6%zg~7fnK=v1OgZ{A}|iF0EBldv5>8D+gXq}bUzXbjQv#$VLo@bpjk1!Xi7t?H95NT*)+-;+Zo|p5 zTv3a6GBd^dD0d<}?Udt^;n_5DZDKKaYpKIyE90k*ther)9F>z-L+P}p|60?Z&k+`Qw}6)Mk9J*xoEPiQrpcujWcB{HsyiMneH1;R3NeAUIVs%gIS(>=Xlm z_CXO>+^m&kF(;W^&;#j5nVdzN#|Rnv0OMkeHWEGAt+}PmLfH31$(^ax2w1tZTVn|CrN#uxJ;g%bXlAS-Z7l4E}oxx zNYGM<0B}bfEDaoeGTEjIFv2^ob9vaPc;;}N(Q#{Mv?qBpg=$)My(jAxZCA$bqHTn= z74u1}HJ=)zp5zolUKt~Go2lA-5k`aE>aH@;4dKhDCntKRLyJ%p?h zI;zKN$hVUGJ&rD?s=+L|91o`3Ua}lmf({wdq1ec+MhP`wLnRmN1L-z4OFlucy%ee) z$&w6F5^Dv2{}634Ki7v#LwcvfR=`3bmxuIfEgn;_(mNHYh6dN}-VU0;7V(Uegd2I- zRkC$_3+P1Bf+Qg<6&=ZKZ|m{Kqrh29cGH?rQd z4>&uHb5r85Z8G{0;U5nf#zTxFdQk|A+Ydo5E{1DM&10ke5YB3_a6?cL#+XZ{V9p}f z)BquALBKkr1ci(>1UZl39sI=P6-^4?s9BB-MMd>Xy=13R0Z3zq0Q3OFD#b^JTF zXA6ghn;9bC0pTp#bGQV_M%YD@C;F}Sd`v?JJ%x@*3M%9qq#*qN=qjklp@X0r%$=Jr zLju^X^s*{{xR=dS|3fmR%U;qMdE{&HY&n^qmnfS`fd(=vgP$MlbYunhg2(bg4gj8c zw;=f6hwxmeofG_vqVi)II?>9A<=YC!!9Y=BAcj@*coH5Q$}4$c(fT;pDWA)*0P|f1 z4j;V+{;(UEX!QwhC=zhSGu_4Q+?Z%b*v@b`l#7An<(#n39(yv>pQ7__pnPU@cRd;0 zQwlrN$P$u1k9_hdl~yE`k~-;FvNFs55lY9a5!*zB5Vbug%uC#G0)bq*` z3zw4Ra2K~hWbRDE4_F}+2t`z7YAJK&8gfd4_3c~;B3bImZirwY`MBi85=iH<7=z&V zs3+yNfPlY7JsAVbVwj5;uP*^XXgw}Dg+Q87;ySk|Ez&$TO?JyCG>6I)8U%>hP*-wO z1zX%2--Ippu@FULNkHGfD%et3|U`81jB}jwAiiOf?#xN3uqC z0XK0Sv3zmIL5n(UamT=-j#_ey>;0MwCjj~Tl^$ljViX6iyWjb%tKm;|0VyxSW9zP9 zO)o~7d{DcWud;OJ8>3TawjSWPnY44JGm5;(F@$XL((`3Z&I4t%C-Hk4mKNVHcW%2j zZP61c%B$g?8aBg;%z1IPFA3_EhDARK*Hf7>%eSCZw}3^KRE#vr4`|YXA)?|VkCIhI zAz(a{Mw5>n<+B)6H+wux(8o{4E#);9=BhG%eJ*P(-h$jr+Z`n{!;flqTTMbBAT^r# z_A5^0gqY(;0~p+}u>&-?qYfVtK#q^%G)Y%o$sW5TN0GK!!?>?Fu^why8bZ;gnbI42 z!ho`v1kRrFM~c#0ZUd1qHkOeywa0Ag+~^Tn$6@pl=uE{UX2^Zl#UnUVJfhbo#79h8 z2G%bp(q$IlNm>kJ!i2O4v<4Sj&~DOq_`N&XMZ+pXlw_x`EK+_@ZBe|p<39j3lv7^WCd8^0cYTTAyFyFqNLVYh)$peO+NcYN z_z{=sWKANeWQ1%!fniE^{I?mJx{B3-P!utpyrejexBvbJX)IM1nY_f6z6L3egnUL5hYkMmm| z><_8)Y4K?$uVVBf$V?+qVKTez7;J3sBi5w@f9dvaXWNB3isNy)jibLOX?3QntLatf zari^1r-HX6_z&9Q_F;DfWJANEv#IUMplpF%h>DNIYY6=qGd~?ucMs8sO*^TYo>-+s zIzo&pYBG>69YLzZLcx{YZeu+QSFB*U4=#2^>Mu{T0l$i${e@Nk(=t5t!Lt8FIY_^V z=;MhSkhHW(nC!;-UC3ylB50Adr+J!#0U)?3D$Wd-g4X5>;Qz`DY3|#zk!- za{eZ^2|xo)#^rOfL)N4=H`{kj+N5V+ny;)6>{OMrZD_uQvq@@wv@E3o<%h@zC=yN# z_|UnTokuwVQ%%FHHpyJ~rnVV1mO62qD*T)lP^|*+lEX+~rnwGRY2MEhgS`kwPOa8U zO5wUvdaWk8DQu8|lRp-gMUH6t@0Y@YQcSA_F@#RaO@syZy7#)x95HX=tbwc!oS6Lh zZf+9gs;G~%4LG-9))~(=;ryyLH;!`y+%P_#9UE;T9uL#zkdk^P(;n1=CqqnR zA_Ijq_gH^3)l!@eqe7X*G<~YrMu80EpfP%zhMDejg@VB9I&L%YVj|d)fsE{&P6DX-X8AGXJjh z5L$h+&%fuJ?+)JWRGu|kaD&*IX@7Ew#6)VrvpQlsOJG%Tp@ zs5+L^^gZ@odk-$PqYg{Xs3V;{SvD$y|FP^|E~8dB_t&z2t?a()i9dVZQDwm{s=F&y zy#k1Z`YN#TL-rr`aY-boI3swf@wH%>luJ=kN9I=*`Sm<34)-Y$lxNV}l%f=sf)r32 zC>@u5NZNb>N_8k{8W|p#kweJIa@r~8G`U5rMmW#*ORi|-kSEkFke${L2*gar$(6)U zQfgo^r7F`|pwK&=lVzd@MC6?Go86StS^fa=mCKRAtB<4>a5_8}1Ho^9g)l_EuHx<*M7(z8#A~(J`XC4gwR2&%v0!S%&{f4#+(G zxy}?olh3VEMaf@;iAN%M{99cwW(XrGg(UzXg3G`+D(FSgVP>|i&5Y<0!gQOAks{cW z&Ohe}$nz&wjXEX2ue%rO_Iy2mg$l?*RCyJs*Xe2}HtZy2sQk@`*L?W9Pv1~78X|H3 zcC0zFgYD+`!8EFARjMD^diu@j*~9kz~9>lwUb8NW~#BLOT}4fA6|i0 zHP5C29K(Rmq~t!LrD_D7Gn7cquTUK@tbh=AW*X+D{_ANvKaCXb z-e$O|2{|rf+Z<&1(+y}9EX3R=MBM1Ei~$le_|!#(k!w8y0FXizcQWy+Xdc|7alg1LdIFDSvVgJ})| z%USBVe7PH3hHP;SnN<)jXWwqxbxpgrnO%o-3^H2WG+AtBEH`N-5=oyD%_Sm&w5U07 zRh8;USswLP0y<(cCu>`@HDwHJYM?|LC3VfUm{m6=29JVgeXF6d3CNJ`oEv_po^ zu=?q?k%~;Mq2{X~mLU_xc$Ms3Kx_MKJBY*U!5_~Og&lTYjkxeJ5~F+byKD7FfhlWs zG_%PeN7~xJO+rcGAVb@5_I^zORc$3HOIQ~BPlro{R-k-#l;sLp&Vp^raLE({-I^NdWl^u=(_!rgf=B9nWX}3}BiiNLh z=>~2?#GWbHu$|axH?YiJ6ZLI+PED!hoo<=7l3RiEu@&%xU?@j;2}%;e6{LtI6(c$F zhcYei3?p==Wdm8W2%y@+6Xz3q2>eKA1A}_7L!=ZwD*9SMUX`a$n(0a#SwXx*(b1d% zn3|m5mEGO>wrY10k46 zeazf0>V`}_R({Kl$aVXUl%2tj8cc5OQoI)viX#jjdox5nvIF{wpYq<;=o%S{Nd#5w z&sq9v<|hDE{cZvzi-Qb@j^d;@l;Ic>M?w84;ZUM3RpqLaD`3Ziot(kaxchpSWRZu>4B zhU^1j5$F)zVN7I_VxE*gLfs-vl`~k~jH;qVVRaX!^DMd34JRYf{J7d|6}=T5rgf^& zU!r0IoQVSrR`5nqS5Lt$*ew(!Pnx#? zRM-kOM0#C_{r~P59ZZ@py<2XTW%3SU1Z6uTZns><+}-IWe$p;Q+;i3T{(Z?~f(HJ} z@(>S@{mJF-C&c4Fi2!>5QiCd~`nFmz6hi~%3=HL6a-B?Z83rhPCGZ&$_!GeTBpHT` zdn!IgeyP*J9S21lisGG5$$RI>SKk*~T8*t6idz@A8?W2mE!*uZebPSV&UUo?&;)%N zA1g2+*C^2|WU}{rmKRIqLZ&3YR}uFw#nzw2rAYWGH?!Elo9*_?&>!1RtRTGDr90Bp z$@IqCzD28hSh_JuwrIB)Q60mkgsDSm^J1$mlBIX+xD9bTpyc&C-GqN>?as+xG`O*~ zsajhhokL4e|D1L77~ZGUKsub-oh08l{}6MnAr|>&7Gg8gjevq;fIlX)(j*K{-nJ@W zqt|T$ksGEk&c8HvXBtcVgvGVbdk+(eR3l)g*SqEoj;&bN_0HX(^PCCSJAVT+_!~v% zWsU{BzMiG?RI={k%$`c^$#5y-I%*%S!k zIEuU!!WUQY|2ldn4A>M|c~|6tiEbEg=|q&iS_jQbl8I1L8to`p^XXWxW_;X^joVt> zZWy-%am%uuwlcKhHd|*qxX!P|HUIPWz5f^2@BP2IrfAz<>-^fgA}C3G^Xn;>Ex@Y$ zKho3m|LZP*_}$mL(mMA7&=2$a><0Ih2;I$i%$dG;QRfYAVmv=SnMXWRm6AO21Tr|(8hoNXVr!x8;I8a`#eZ(q9wOIU7bRQ^Wo zBiRy%pUe|G+D`TnI|A?k`2hliFJoOU!a$w7*8A&FlkglPbmP>lb(ZR-%2F;v3c1YL z)p!wu-4&tkt?yR?$@nma32~<~DX}B7I!ZZzA!}i;;5*8DGxVVBaFHwkDmfqvCyJO?HTYuxRS(_cGyo`7!jRY$J|BL{iI(uc*69<-t-gxCS zFwUK-cI&B%1Hu&K!sUv%j@3khL7t0Pt@6zO;kWN{x0t(V3-8Mvc=JQ&mts{+&s8nL zw-n}YQ@BK;;sD~_9`J!Y?JrRU1?zTZLzTX`-vP5*6=j+L-EI|LG%vU0Ghc;t4}2)hxgjQvnJ= zpbwkEXEifpzCyJyo6sD95NVN8DesyBC?9FKhWtgTA{NomIbK;FoH!mR96LU_hgALd zs_P;7P_bj38E7+$1M^#7LU^D0E|wur4QpSl{dwiupIn$d3D}l{cepJYNkqyJkM46+ z4ErKAyGkr?z-YssWU1w$)PnPU zRi0hvGr*^dPleF%``qC)jrYX4Vno<$)+$&PigSDuLU2x+Hlk`3lA6kRk?e=sEr~KD zxAYY**$>Esx&=$^G|<&pZ8V>{Uvk@rvWpIomU7Es_VxX;dHdO^`%&_1-hLB!ULg$^ zd)_<_Xc$jq`^3;8M~QTl{UpoA`2%qf_tX871&n-5f(UbVAX;&Y+J1gtqu99ZM=lN0 zR>%oeW`B@QSN2ul^60mG-)eHnHq6*LoB8uLvvW7I^R;z9Dj^%ZvNcF60C;9ANna0_ z{Nl}Q(PkhA<7o3Xv)_)MU$B{-6VJO#Hj8T27|KX7*NPnwXbHB!VYCQgvTQ;X`G9pC ziv>{J0+fLF!Ht(wmW=b#eXuT&fJipt@G_SruTmhMtg>bbU`dm0j8-f2q@OUmtb@X6 zf3cN3$Ftf`2y<EN>kJ zq4cmya?B7bgk#-hXduR;kHX@nz^rzCh(h6=S|};ydA7N{O$ z%DNB!C57GnDRqC5Jn@szxCg3$V?esb`XCxRJW;@EAVjw#ImUL)-eJ4@J>2fu9_8d3 zs?7OpRc zyf;(QmACgLOgNCZ<2sm{C9(~j*b*$x?+|5CWDs@~4$u*3uA(A|A5WemwtW-;W=|w# zYy9+tLePD1#)i~hOhCa;K+aULvq%I z0(*{<*V=n(H^%Shwf9Tg`y1MODHex~suZQ9|5M3rK6|+2eo-nv1l1MI!-UD27Ecg5 z%bY1_(sUPtB$m%k95B~(w;lget)EY@ksl_k#6N-=|yww>#FhN9~*r; zZ9mTJc#R=1r+jY1o_PC<-L+&5u{2OI(jE(ghMJ|c@Rbi>QW+-Ff**-cjdk&Z0*VV07@tNF z3EQZywEiuMXXRVU`nuS5lZk^h0hlXh?6ad&!0?}}Dj@!3V}A0tO~>12mwDtWDqemE zyF404u=~vJR`rl#dXP$yY3p`j%PxRH*!gVyH`t^nm}BT(^lzIcS4

D@)zlX}V-9 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%0A@yd{?>%?<5LsBZI!U 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%0Daij$=H^<^AwDU5yftQOT--DN{_=LFF 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

Ft1xlQ!!RF@)og_!>^l_GCl7RPh#n~h zPnSXZ$CQ)VWpjAh%_`&RN>iao%GiO}<6oCiE$Mq1#E%iwt{?$Sut6&QF_JwfFCQGy zmRVd5mzL#@vRzs>x0c--Ww`=Fqbx7WJ*;~obINi_Ik}WPyY>pbK0|+x=Bc!aO$&v? zwoLj+)ebU=7-xo$US-O0M4Q5w;Y&j#dTKck9@`e(R94 z$%Q!h#tB|S1{=N^i*HP1aFCd!v%!{YVXZy9o!Yb&g6As8h(cE2#83WgCkxOLJG)az^EX_athCA_8*&8v9-a&WarY*Q4CI1D@NcSqbu z#H^aBW-{z1!Z-YL2U<1d&-iMq1^a5*!P;tcZB-Ul<+>`_@XS?JH@~XSYbYOuvA(Zj z-X>oNO&BK=l_3F249J^|{;0t4(o()3!*z)5buwf6el?m`RRE8*-fYp{s0=5{1Tzs( z=Btm^DD&`|JECSjuDZ{v(MuKcQ+cu~k5tX$Rr_f*`hfSJtZAJ!%v#H6<4qQ?!She< zt%dj1%$+s2tfuXuGW4;^J53O9%HJ$rZb$xsLcs~g)tw%4_%$l0KQnPDn=J}di zUF$LS#agtA?Ay&A8iBk9Z{&4Jfj`yc4SZtc&6<6yX8urff2@&mfv&c1*P=BwRVlw< z_j=yS3pVxpP5i##_uKjXRKK@=A3aZaNE4i(5WaCosGwF3meu1U>vB{bkUhF?XVuNR zn!{)?iFT=|MQh@%WonV^wRuvKpPtn`w(^^7a=PkI+fYePpu5nk0V`0h^lj){vKBUi zd`((kb>Bs&!xLl#gy;xW+_yC3Zjws&)#cl7j9mJlK`amaxCiV<* zm0N$TyC|FI8rX%lf{ALsL6S&L&xbnzz^~MqU2E#0?M}k}?1%N}jXE>7WVSKipu388 zESR{HNI8YaCiJ5yuM-vk1Yg*Qo^KCVx0`3$-3RS*Y}UL5)xejIT7|Xn#rEjQ_9i5+ zhy9xBHZq+BwuzL1xX_4>ZkX8(Ii_J}Yoa=bllg0PJ6=u!6EYenk_7*PPw1PccoW^)fUqD2k- zzlkF_hd2U4Wd=0Mke1=~(S9D}VHRSxZBgj507`d17O~v!nLWUx1ioI~5&c)gz0r_A zHS8M=^J>G*>>wpHu~M|1e{yaEWOZ=^>-)xFKO+~lt{?TjW_X-Ert<<+f!Xkxf;?A{ zXMxV}IgQO`4#-p1&UDfXh#%W9CpP5Q4L6r`e(2aVK?{>5j3BVr)MWu{7T8xBnK_Nh z9~#li4X=Qp=R7k0cRwMZJA7tpQ!`L9`(oZ3jZUtlR%A_s1VLEOjH#C>#GPOYHLOTn zQ;*F|oaS)g%jiO5i2D6lOmbwO3vu_0S{=83gvokq>a|)@Z%WAenEN{9-VS?T zhq<%EE$`4wdvh`2!}27=mK?c1N_NqdBNx(-vZ4K^Y8{x@8;R z^@FgqGg{XnGu8ZYc&9z0(|p|F&g;YqaR)Kp@sftztjC)gaxKSnego0ar1ujYl386O zBSeN4f~k?qaf3!0Rb?u5VuK$|-_JsS9Zzoy27iwDx4e36}{tGm={vHKXofob8jm5rO_R!JW-K{E7HTfzrG@mY#d%Q{j94 z*)6hXNObHdG%Po;KBXt-s@_Hat9w3xaYSby3D`Zl;ztdxf&{1yBgXqn&!PBWt}#qQ z=(s96i^N1Egf^DhlYf=q&}y`)8H-mVab0FOJB4icniY*@*p#^IY-|$uEkSfsmF2Ukl~@eqcY6B+~JH!HSLP5MQg2e2YKx1cRu`CIEkq5B?drN`vQmqqBR> zdA)LOuRX8V{I=JfLw~5=0Yy@TSsCFzhOgel*u}lkoZeQ-f@W7}#yw^jlLkqU1~jw} zxNfefpco7KtyzBBQAm?70ksaPm{Gcc!ar}>KQj<%FuP9$1yva-%c`4#3_9I;F(=tthI0VqbE9ul&B(JkaY__L_Tp-3rb8u7jbUxS}NUN^)%KPDrb9 z?#L8B;1Oq%NM@%{n5$AZFRe16!h7`BGwb15Fe|w$Q&f;eS0|_g4uPU_o7&oqsjb`l z>(O2G!V7)eq(V@SOiA@|D3U^kIz$_*gnD_CP?t2l)E5c$B-SW0?HTV~ zno)&kQJE+kyww+7)#v8-$u)g;exJFb&n@hOIFCnPK&oZ+gjI{0%3j`*kkV*4dAYO4 zE$cCN_hgp!*t>gVnXbih1tAMCCYSfh9izLV3le7G}5p*SN7 z<)uD*ajF`m*Zbt&cDJFEY5sD5_t$E z-UgBBca_N1(glhsO}Sd^?cx?mnKJgT6#zxp-u~pzebEPf=IuUraX+AY z0X{d$r?v1ie0s7VpXewSm*cL=+vbSoxxA1`p3fA&^f`Vr&l4iK!PBeNo?(&~|A#lA z41e*CA}W`>^rdgrkS+D!OB=j3osa0hF=!2Ow^ydj|BKKUQ&gv`belhC!nZP=Z)P@_ zG;1^Nk$!o!UuQ+mWUlW=I5!(T-Ooh)O}{(6A2A0!Y@qIEwIONefMA`cNOEv65$*{d zmUEIx;{LFcm0wQEn)cke@c4k64r~)Fba1;ySNjUo7^tpBAKyy&sLG^3T_#lyx(s==*N!wVZZ&T-@M!J zKIz9&yeF#vf0rMnANT39RrG+!XMG&6=$B10FB5;29ywYD#w{3KBxWgkzbE>r$8^U@ zNsT>B2HMjJT0nR)5A~aewHrWghAvu3zwpP|EBg{;Nm+*h4r|w|S*UaXw!%ZVji=W*s;8gtL3x0rK~-Kd<)5nm%)Y+}SU$ z^~vGA;jG?q-y(6G`khctn;H<`?*n~}M{J4QU_4-Ml<2MgF1md3AsvUBL*he|L!v`R z2P+3q)M*WPQ#lqjk7)JeW0*wzW^DL@E}itDI(w~!UvwY(m6Y6Ce<&8i7VrJJ{_H2r z)nf3`Ky>3kc*}s?JYa7bFxL&Z8wQZcbv3RGECAGPqg+@dc_gkX;jIJF{DER{)S!}! z4Ye|}ROJ%~7Y;_x56J2Pd2zt59x%@gxaS5GqbPUbHAxH$gTq2Us;ucIEDZ%BhC3ow zta*PRdU7BRmQeVkgBc_a5!0; zHIgI8&@?etc`t!T556Sa-mm^a}F$UV|W5$Fm6~kttcYJ+v>osPX z;3HZb9W#W6jIX{wWR4hv?+xwC!&k$+k5Tw_zZtS;4cS=l{~$PFtoi~m#V!Nx;;T`v zK$4+p=sQvHtMXUlkI+o#lPp=aiQ_qL7+nnYQF4VO$^n}m(UEA1J(>x>V-BupK(%>gSKy%?0n%bIg7I@+2})hci+Kuyw$l0T}EjWEbeC;qS9hnAib_{|2aKL;r zkjeFq3I|~2vI?wb(5@_7wj8@5*sn)!pi21nw>#u6FwV!rZn zUhDF-e)D$y<}LcoW5($>L4^9vPg~!-Z^LgsHa@z=e=|Kq4&5=BrE8R-n~|sbMY#=Z zwmq1QKW4<-8E6xjaEx0Np4v2D=`f*gjE8U(q29y63(faI-jc}?%*7}MXH4>Cf{d8) z$Yjf9m)oVZNG7+K4!KHTJ(ylUS|rBLyl(`TPoh`4)Uy^9T)|8PG);o5cW!sm!l@d+v7$lOroj5<#=uKeeDe>3J#g(bYUK8#uU_fV8w^VX~&usxvPtSA zg}Y6EM1=2?lQ9(25L*ANQ3V0xs(GxHswk4=WvImgP?k*a@RaDJDdyBEa>^8Y>J)SQ z6nF6y!HI!K5>u)kq`g9vJ^K-sh&qrOF|6Ce`G&n@N;G?l4i27XzSy^v32?zDQ#|Ut zd5XPlin)G@TQo(c$VL#CQk1YFD>{AqfMsCNYo6U@&g)9bn6y~0nX=)l=Dm%)QxU^c3g&OD z;i#H#Av6RO_z}-7o|-J3iWZbm=2aUjcQ#f_E}fTQ5Md~6 zTZkQxnA|oMuyn}HV;h^NHy&f4rR{V8KK(0jdYaA8s$E!t+tLcm(q}*?u<{c2eKEh} zF{Q4+#r6huHfG5UG`j~KfKPY(rugy!a!pcAvtDafZUP>Wm`zG%!1 zsKZteF1!k8h7kd8LxY*(xkA2N59R=ywln%F?p=OHEogVUi_C-H9%|^U#jv;Oz9z8cDtBk zxP9ApZu?yDf{Wj_b}ds!0Dk?-arBb=(8eFBtnsl8Kht>?=Lr^nhrp&2a9KW?#Zt3) zd7E&i-DjPVnf80@NGiBOcE{+TI?J>xuOS`XmQ+AJY>iR*o_cT&F|s;F&@zIs;U71a zjR=I_B5WP;6z4Y{SZv%1V`%gnCjFDij|5!cM)$FmPjClFPz0%BNW~)gXZgMFli3nn zNu^NmsW>yqj&VZ#Lo2HVQ4=~iL3@SoX56W%IzDoJgVSJL(UGrO+=rjfng|8bq(N^$p!+$WRqmilxGWW3I)a20siu?%$P z0V9u^!Xr4Nn;eRdtH?X&a_>m(ZJ!2`bTeO%0AY6MR26LYVA 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%0D@^rA{G|nj8~sPL5P8J7H){9zb!w?B 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 lui|T)f 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

hPvZ; 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 z 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

^h12dr+Wa`2lH8NaeIQ^~ z!r^cvJVM@~=n148rU#xqY4nwGI2-vp*$)QHUN~V7V;YmUIckZN)7x??T||B6zGLh; z8^Y&Gr-G)^aH>5`$$LHOgyiG2<;UsX-|!71Z9JNW?qc7fevezb-x-_Resl&*>7Ud3 z1x#JrAWQKVD3b&0Wnyu+aJdaAA#oLH?;-6oBr%urw^LrnIa@it6Mcciu6F$3R<#75 zzjlf_9feUR`cZeDw%@K->NqF+;eh!Nu8#MrQAR%d1;om|If6C58N7h32lEaIJTiRD z`%K|S0w!fdl$#FkYShZ%-WeeoU&S-o^H2J{NcJ_j_nVJcdu6>naz6uZL%4c=dQ)Z~ zI;l?7-oBRGzAkfK)CoudJziG4lp=3sOIw~m= z48zQG4mT(l6!k3flOLNnCV5;xRJ8W$eG(QF%u8_94XTp_mJHJQHDg9Dce(_32fBxeA8IuoZ z863S1uA=;nsEf6)Go1EbUf*JoJ{;cJ+2hz^uj|-SzoX`Cun=F!=P|uNar(1igl2#WrLk*Dl za}s+X<$K}_ti9^b^zi|6Mvhk@rTF#a?||+=GHe%nXL#J?2T2=-#vo}AGhm8m8)9oA zoQL4(`JOxI1;HSG!NNbk*vk>kk zxLU6+gx46gaJc7KZXeRdq8TXfLmr(>=loph`E<)#Z+%eTlb`!cz?}J1^g4ZoGH;@_ zNbS|}!CummF8BN!l(;G1d%;1qRbuUD%w*=7aKoNW=5+E`M;9XHUSaLMfwZnD8}&lc z4r;sI($-h$7q=ubPM;Dmec-Ae9w+|fdX~-yUTm<#w~&9MYzv zJS6W+&vESSZ@Fy6jd0Uv2TXxu@2iyAh(1Khz1DJ1zLIeax){|$&8kG->y&2Co7g*z z^OiO@U`mdS`nM_hZ$_Pva?iEg$4Q%kmZC-I;04qt94LMmW$oP@^6V{|$9+Dy>W5Y2 zm-iH|BUY}Qw^O;i<@=uAAzgxe-;>)f3R{BuA!~lX407z(7XI7U_;n^FHD`P;Z57}_f z7#H=!AHH%z*4 z<+y}W9Fsh5yFSI9w}&|{+%&i!Irg5Y^OgtqG&WL&`5O{W)OkyPF<>&`p6K(I5BFub zT7OT}dCOQBFu%e5x94p^%z4X#+h{`6-V=4+ir@}}8;+c{6L;RS7X{4Qa8LAkGkF1X z`oyRoPSknJfqOgLe|z3m#+8uwyKrd=G3D(k1-U_rQi< zVqMSS)~C#UaBDhTmVqQ3Z6D-64UpSDXgjIns5H1+9d6Cl2@!iQaJc#$T_bC&aR15P zT(}3|YJJF{tgOp-bhym~guOjUd(^UJUcG>eRL47Nug-U}UJmfZ@=ZAeI(f&YR9tej@GUt5Zy6 zR1UfG>YbJ=CyS#v}8-!X*LI z6Rx&rYVYTiQ?9+AruLrB@2ylFklgge{eO8u4h6zO}-#lKbJaQ~_PX2D$rH|&))=VNCY-?P)uvA3G#-auLx zB;j6ScYQ(a)&0KN%L2SVGU^9;ulcii(f68*y$tsy_>Skj=Hcb+%X7H$Uh_WKqVF{q zuGZgUz1RGRJ#XsYe7L2biP}2=W)2#QKt}4Xu0Os++M7tiyTooiQ$HN#z7{am9Im|A zd<$jtz2;)?-4T-U9qYa3S+@QvH)jR+L*Z)u-33$5+YiKQ?-Q1LN{bXz1xYxc_*m~X z&s`ZXog91Xk-r`4fRtOya^E2B04jA2<0#aSb9@Mi4@&2FvD$0i2$*Ladru*M1ylto z_cqI|OWGCaM${6?cv9B|a;zVY&NtyMfh*U8gihq|jrtT?gjk#_yHo*%jsPr07& z89{o^B>v@NZ`_yuHuGb+;Rw~3KI9*Y#v$eMD4_&j>6UyJR1;M}a$QVfbFJ_yT0e|D z!x-7Gkhy{TIW(qv-Yz453v?Y)ZfWuf_c79Pk%SkBrCradP~2X9k6G@!%)8-+Bf06@ z>abs(_fx#$a4)pnCph*jlCX;7ZhIy+OVIW=Z)3ouJN7Dfy~DlOa^H2hAN&nh*Prq? zu|LtV_fztJiN1EYoN5Wa`*;s)5$O^}SL6G1@Ih?hbbrT=}5RP z>R;VA5+E&%B%Dv&kcmgjs>S`Q^(^iEfO!#a^+;~sLq`4#)E4P^%dqwyAniAFS}XoG zT1g$-h-6)>maPx1u~+<-`$53$ckHc6{>xDxq}-vFdrIpRb2h4r(q7TAVZglOa8D!uHRw*H z+>FRyG`>|}!VPmi(!L0olh`Pv?ao!??~J-3Z-BMA=z3}g^2_%PK18hCeU`hNv;rjIQ)2ONKIcw-EAiBK8FOQA-q!&$7%t{V z!q?>g75$Es+njs^U+WvWpNb^hPwe_Z*;>!S`xy5*{(YGIBhYB1T(+f4@a-h+Fp^O6 zCe|_2S?{Y~++M9`1>XhC^KiA@36j4SYK@fpqUC-_+Aj1bI*2OLHUxjimp@Vm&i2{| z`F^8w$zSk8z~njhUVL+kxfVT&l>4#eO1o3H9epyAb|<|a_gt}A+MOKB)$2I?OTZL4 z{vAS@T=XtdZhyx01YhU&Dds*j20ey$b~a`|Dw07%*t1vtTX;BN%+zT8-AI19-aaE% zE?->~;hI}$cTrg+?U`H88s>O@R{s|L#`w(Po=q8fpK&c><(_M~tw?K+B(!61NxX5C zaOJuv_?`6!hkGN7^vR@mcDQvcw>xPMTJAvNT8tH9-zy^AT9i*a!aBIa9ZLR9q(4cl z_Fihan|ty69O(;?^lz>oTE_Un{K2{r+;HU6@%$WR#1HEnZX3(}nzWyggd@Z*SFelr z&-AY2Lb!b#Zqlu^>ywkrS;T7ZD9dd_T1V6cU9hY8d0S@h4{Q67@fYh+4)-z2$a8c# z#LAs-xpJTUHPYWfZz1uojvqQ$KWO`#PRp>%;qD;+LG&w9?n=u&zXSIyQ4=()d2xFW z#n_vh5Hx2^i~6?{WyHVt5G(g%$G_u+iKZdfzdam#Pvg92CkD+WaH$@Vu$cT}@7u)6 z{nm27C+#;RA)({3+q1%?plJb@W+@U%kiRmz4k@>a{K9pd)QS69C=FFdN4SPd-{D=y zS@t^q^h>Wk6qF2__KqL!A-_ELH;GueYzK^RgSXL!AqmxpdoX^OTcdb8sr4bJRM6bx zaL*_I1T+IFcb4TonwesrMlYi2$n|gi>fZiwYV5a`n0puIw);f;$whw(Cd8f7~=&=kVe`p|^6^=UOtWbIzLWRu|AI-6r0mmuGV6mQ*L*LMowmUu4O{;tQ4?PwQr zxw5|gHEBPgBS_wpznH#QueVXwUhOY($_34Na5W_VnP`$av)+QF+RFS`j>1hojkN0M zLge1podPrM)S&4GM?ZHx^2i=Hxwqij2g;YcHOVyMxCB2=KGx^XhdbEeHly4G^ehtY z1b)03AsOG0J5tOxB;lkkT!&SSnG#c9wLdF5J7~r`{wzoS^H4pc+~uBIeCtWuf_^~X zpbqWXlZ@ns)!dkIe{SU zN0qFS$K~pEdzf??mlnazhpYAM40x5%#SZs~wf7#<#-Z8hIaHDQP}}V6O4)XN8)*`D634!OV5L28%1x^qGzl}J_UgWBdHr|cg{xGZ^^ zJLSW39iP&jaRO?LE=F?Rbe*WKt!H}P3gC8jxUI=A`@T96D_8c82{((hq39WugXFwb zM^YCyTK_87ToN>M9d0i97omKlTwRCzg0vqc{T}8U#4^8JNn0-K0$pP5g}V=~hH{jV z@l9o7sRrVQ5#GV%`lPi$ZIIh8W>ClS>jzE4=cDJpBYFCwF-Yy3!;V&7WtU}9bF4L3pVKGJN; zmzWu~YiCvO{S{YHUhR6vEAMMZ+Wn|6lIN?%Z`z;iwC6+Z%4irgjo^kU+ncO|C^H(3 zN6Ou5xr<195A8vpq7FCmIZx-AgKmjtKivJ4*KvSp95gptt`y%#{$J1^NV%U|Zn=9| z2SoMI`SN>(Xn%dg+AG{M;TOT}1y_Uge~l>94C#56=e_9vN>=9BC8#k{UrL=U%>-Lw z4a+zIIZc9Q0^ITzoB{7PbT?9anHEa$ts?C+^gZ(TDPl-1x?x6(SB$4_l$8UH^$)x zJV!*nZ|1$8yo-usHA!>1<6_$JEV!4!)%qa)ZzJU{v)oTfJBTFwL3}K3ddr|012-JWZA^(Q z=Ax(!Qf^gy-om6^gd~L5CYi5kLt@(_tq13Mpn1*V_MqH@XaQ1tshSdeX+2plMK_@4=tw)(&*^0HSzqgG z=c&p~&!GO!iPp1eu^sc|2XWeO03+Ut-TkM)*MN=o;cpR zn{dPA&uK${3RlOE?Z|&8>Wh?HN;(w$n@8FTv0FM0zh_a4jrt2g7_2N~y~ z%hCSctiK_-hS%8dr<_xPeG|B~zJCWM^uH}w+h&2|p7A;2^Rifjd>JNJByHD@unM3T& z?-VrE=0^9+p3#?a6S@s4m)lGdeBY2(rXOP~R23cC%)IIY&kxObPq+A^>8I>fgqzoy z@gQ9F@5AIDfzEn3%KhDPJNBmzqPNfrl$pr88C8ng_pWI&fcJi!$8NHm3E&kuSXXWt(*&pO<5263MY zU5u35Nq&KQ9cjIhghza5`DVeoAdq-J&wO!ABG-$qe>>W!Pu{Ref_e#rM_gA7>K)Qr~ zvNxRpN~!tL`uhsyuBx11Ry$nX|MU)NTP=6jFzVI_L-#mb zmXRg+Zo5Cp?6chUH^m>P(%eM+n=yp;*Rl6U%E|XF9(K5GEjKVE#hii8LzR%*J`~t~ z=o0D!Q&dw3w=LY}URl$K{GCu|r2f6jatlb?iOf)*X&~;=jrxV8E-bU-D0#l3UK!@& zj|a^|4z~tnu0$=6ak#h2V+;=+MSG{At7f4%*K0t4vEf|wt z)$>DrUbZOgJ$sEgz@ILBGH4b#e)yIAy_P1L5|2miU1zyzq%}a-p=QYaUe77^x)A^V z1UF|)&}@O5W$kTC{w}C1Qa^0B+~ncR+fYqZ36-Ql8r86}m9RqI`n&)ssmV3$*v>ix7GvbQ)Aq}am5{rNTAWPxopsDHD+lu@hQ6^G9 z46xijqzy(AMiBp;Re&a^>n>1GUf!$ zV-B|g`L9PeBIWw*xbHdA79k1iiNmz*b&+s2DA&Be_2zItApdXZPo&)QE%&U^tO24s z(2eL2J}6D)7G?oAIVBcu13q72UeL^ktNq&^@_+v_`#Fh~+s|?@8pHSrU5D<$PIt|B zfxX@i^I4>S%XpdjCS1KPGAT0{4Moa*%W_k4cyA7>iNa{*Rnh11GAeoFRJkttQ!rym z(Cl!yUC6)cr9?B7Sh+hb_XpDcK&L&$SQ5G1nRdLc+@e>5=3BUWU0g%{o6#*uxoJsq zri^bcX|JHQXeH`UC3+pF+4>;$%tt-TUmi5SJN6cmKjW1|^E0t>FSp!|PtzWuA?P6_ z_Uilh``UI=?9G;fD}%A|$MCwH_QRJds$1RbP(-F z&8IV;?BHDw$sa`RtpGP;SI~S7SKG7nDfkyd?@u4~HyQ{4k9b(wsd((*&-z z4?mK>c-}`1h$JhdWg+4)381F1VGG1S^&hzuHTo*$qn7=P*?t@$1p0`tS zxp$A6A?5mPyIy-b_wdkd=z3JEJ>R2(r2clX{{7(!?|x23QP7Nln`yaY$^SfBfRvkM zxx;2~4-c(G3sJK#*xzfpD{VWO7fdj-#1B6Q%}mGMwd8*feTtOJN0i`8dY*X;Du)_y z&>g4NKhLWVYjLQwznQ-T&8u+3Qj$=cGR@H-q}+Ec_raNrdC_LH0Tpm>VQZ%$f!bPwu+3Mf?T5|5kXv=7oB7yc16A3Of- zL;j~w9#U=z+pha(QwLF9R1>wszq(G)*ZM)O<7U{KXF_HlT&-sv$=?@EM#`;Zxqpy$ z(j3MPs62Ap-({Ao{Y5Y-Wd4Ag9`P=9k^G%eH>BLgmU|Zae#evk5}Jwfoa=3)tq&W% zHmvzjACf~Rbz!ugEhGPW^aoOIhUE^Oi;qwqnvHT85SD(>^KbP&UOORv2;<-Uk|A>r zTs?2!kpD1Bm>1=;ZAF4_4r#BTchH+CNV{GUNqxw3&RbQud8r}O%He)Q{$1!tr1r8r z5aEXBbH32!=rUA@F-1tY2kmt%{id9^%s|L=g_{*A%6bC%`=Ya7h;o0l+-@&2u0U(h zQk2IU%yuN)+#kLEBHN!}&cohq$+w)W$|3Wn!`b*AeL8y4;UtL*;M9-9DYTrNb3$fw98ROW z=;vy0InCp6%nmV@`c)-l3LVbfq=_~;94^C%J%w@noW6%+gsiF|^OM6ld=hH`sOC#i zd%m)qc5&KT+I;jjdL4D> z%Dx&T*II$?zc1ipq6Ad+@RxLYjuj8_;Np<3v}8HuJmjhx=c zF0$NpcHKPvqLBF!u7*#;W=?%wR7BX|;=yg$_KU{rtf=T5aO?uwSN6azI zGNPdYzaFbS3&MR5uC~9mu3=9aw*7>ZTgAiqf=k#pj_ROVXaRMqKlM!Z9~`mmgWkUl zHVB#0FGtt;FC%|z)EOyPJ_Et`IB8F#>1ZEw=|fksUU0R?4PNez>*PM5)ZgreA#*WY zwf8_r?h8=vU8LMr5v=ja_ZI9U{UDO>EpYdTr&+Gro8BnI8dmhWD7BP12daUTOEr_= zyOy+@P#<(Zs))_)SX+?&5~ZK^>Y~h_!c^zH#v$`4-0EIgGnD+}&_tx%`@Cbm=8v=2 zhja-WCnlM)b)xGw+HdN8;esY1GYhWup;<|}Pf#WUTIK3{)yk~kSr~K>?MG>Bc<6dJ z^W?L5_vCo*y-!O!+4iAz$P_q!czzZ4n^D=-QSN8f-lW$V-=j|GCN#V>^O!}6rhttE zxi@&@aPfnjx11Y8=1;h3URkq&{GXxSNbNn_yZn8p=W|aUNw|>s;5p1sH#3%pt9~ex z>2Wh}4w>qViNcbZP>=jyp3Zl?5i7Tm&Z?GE=U z^52NsA?0d)=uX;$NW!DU;W+hIxFzKSb_|(vi=*}T3GyfWlxQXpE0lwA=#jtBodI!erv=aqK<03hyZqZf3}A zg-ex*gc;<26}^d+JKa0vD*9R! zw?a=L<&L!6YHMiI(Y2@<+DQAm6A8Bq&%#Qq?{6!*GekQc<&Gx*GiU))?qJIu^+S>= zAblG;lXK(lgUhk@DmVYGka^tU%6qCBk4rS)I$Wv0GS51m_lsrR&Ac=Y_khEd`g^?G zLb&0j(faTsyc@Y;@TbF-`YYVTwJ9bQN$8%OSj-RNTM6Ib??^k@mGLB8t-oa{*PQp} zoK39$m3k)Jb4a_ua%H|b>9pwh%%lGGR|VG0g`3umc?(>vXY!t^+d@g^Vuvf|O}NMN zUbsBChvAl_tc3dLzN*|VbGQRY6RsSWAp4;k5WC}&iniZ;m~^o>AMS&%M(f!Ls}J2n z=Jhz-e_bEo`gzfTwht$)KHL*B?ctvA`p_d}rouhp^#SfzaQ|(6s1;iu;9ju&Kd2A) zhD_f$+<#pk;Jyv_gx81rLZ-}X|3Q7YpYaad6J8(S=ED8A^`T*GeSrHF+%Rp0gcH_2 zWQEK{EB-(CU)Kk?*>F#Iedrl7@4`Ld?ZX2h6Il5l)Caij;r`qD&@#3@z|DoLez=_e z$6Zg=akcbAEje~8lJIx^rp~i6dxgv!jvsdOj%s&3)#Y}ExrE~qwqC~AHqJV&&SQ(< zejVcn={u!g)P6pJ-`#$b|Ng&zQ~Pj6T|Z3Z*jDR@zZ>u9{4L|bkjeZH>@9-(I9v@^@=J3x8`~tckkfCECe9;G z*P_CG80S+?>(NqCvENgVL(0ho%4q> zA7XuLb(GtX{5POmkaFimusrWV+LP#6RPao)X~(@deNS`V<=(tRxjB79<`#!Lk21^9 zyGXgKEw|3wjPKEn=sJ{HA!_d$)|kX@;qth*DSS9&et;YF%9>&1ugCXcJVmVB4=q>r z1HVf8YLrbScI#1rwO8kH_rD0hhEK26#Z^dVZ0O1ESUvAxF~GS{2$C^u(th&g}M zUa3dHci3Bs)ZXcq8?l-n6*wk!%^lx%uTXc1CBoXi|g>^*xU&k~@fr~z{A&5f})@9~fs>u?_;|1dNH zDOaC&32tKD0$q%1p(&0Zg6Bm2a2=no=!uZo=5VvfzvQYU^9ZqWt5|zyk(P(vM9WeA z%F*khhdpoN2bovrjbOe5SFelBy zyW4W__>g@TTi9EQ&PElnwF7&SbNTR@gT3{~+P4{V4)*5da^KeRLlOB8%Y!ppquerb zLx6hr1ZgwSD)bVX!Zo}A$#s!!>x1|~o)gY_K4dDr74@(5wW1Oq(V!C!5uGf*aG$&D zDV{IIpBh?n{w3tXxhf8)l*8c-QV~wyIGnbYlLzOXIGmuvVfYZ?43ERO$VE zkXZw#q?gx}+(tW!f=K?9aBlUE9i8{ff8||eZo8=d)pjv+ZpeJ@a67^4g=Rb4(aPP< z-$ZAl(~$c<;^YsCx8r&9xv#h;dj8vx|1Q)AslD?p_hZubqC@C=lzDpeJpkp;_tv## zTohRsd@*Et!PRhTxkOXBsxg=E@a}tw9}2vKiPw?V4(UGHNbg!UU{qlZxQ+R^pEvh%#_VJc1O4md?iLgp^V-Z|u7 zie5v?&6GdLc?<8PA43wZAa=)h>SOgoaCyiKcDOCbFVEq$C06c95t8xULD~aI!meS( z$BnVvT)5-m60+q-Kgx*)AW2Q3Jv>hi(0-r%DW9E2SQ#4UaLuN@5i$$lXunm4yz-vT zO2lGc2{;c3htGX8X`RtMs3-Rd+~*di*z+X&X61fH-kTxwv1ebT@B@^27(I@pT`dXM zJ545e9%;X!l+U7Vf!MeJX4+cz8N#6oN5UD@`D6-CD3=_uPdGKaL%yvu`OXfGOK3tI z?|Rbb<#OOwV$WSHH-ruHxrJ+ea$MXZxR=9?^f7SC!s|6Z(bRCboy0)=c_(REC>!-d zV($^O{pSSsv3uuBp63#O=Df}NufrWf{vhvRoKLLwvh^{-{g|{b(E%ji=i+iVI^0Ld z9o`T!qaE%alqs`|XGoB8AGh3*q|HVzA$hNCMSNTZ=a-zEV3yhOkUoEw_b&J6;fB4k zW+!Fpz0dnwh?V=YFWAWXj$?0m%2h*ckaBs2 zgaqGfq-{WjXgiYmQvG!A{h4LCIVNoNZ`%9J?;P&wyLmS9V6wT4Sh)$9CfvTH4M7sd z5=%cT^ACAnkJ_t#$llC-J;t`-NN(nm2&f87~ANB9` zY!$XVhbQMPbQ`x{|aE)C1j(rflIko9)bL>4=$vky~r=`HGGsZS>^oN$uHP@18JR*gu993wd;pDCf7w?LK*W8-1?H4kVXEHXdzPWEtcy$K%0PS zqiU$(EyiSjVNCA01T)i)55&KNdl{vFt7N%e{lCxI>v2}+9g)9xeLlb0wf0)y^Xz9` z_S$Q&y|=?{WVufgHwQ_0nXNm%@x9gd(;jy(dA|If}gna7*#Pi~4uFIe02cEy0H30M7FiF^@M3u%4mV7WEVN-`H(ZfCag9CZA9 z>Gip*+?0T6Q-Zxc9B$WtU~hV*fVsx8cQCxW(Y+2Amr3y6A#N>_u#Ig;`iD#;>tWOn zV(%^ZHzyci-Y`}lib;P6CH)-pgFerdO5Dk)9+LTCx4qT3?f8#*uu#Cf0$1B{Bl3*y z%QN$A)xY;dE#&i*kMfQ>;w6+nqvUq+M?VR79o$GXHSeb)UuV?S;g0k7dDjt_jU+sK z@6qpz`km(1zj}R^ml`lF;i`X^ljlct+U}Tt-?iNN#C?a3--9nu`%fwN z;}gsZZV=R_Ulp7Gu(xW!bcZYbf`pEwzY1NAwA_C4cX@k>EASo$aGuaEct{#ie%z+?4nXQ(y}r1BxQ-|b^+1`tV@I#wvTZ$6Zu+SK)8F9^CjA(ciW7t{8!&P0Y5>BMP?@>5Cc#%mZ-SM@xfwEYe@`8*`)wVqDxL!K;3Vu{rt?Z9~)P zbMg-)nPT3N)n<@CUe|GTUV6Z^_$0>t;&ZF6MfO z^~z1T{#sJ~NN#?|fVl#0Bx(}hgHKF0^U>Q#xtlC^FLBAGl1*h4MANx$DS#a*MgLOY z?4%x!SBy)`2J_58+-NV&cn_#XN|u7lVwp(Wdr=H2wXnQ>{rOoOZa`cqs- zw~%fSLU-a8p|Q*M;ie9JufO3*59gZZX^~{{lB7j+@mvU`jJ~`Ty3l z>^N>A+zTD<=@UvF@qD4qpK|K;nzFAok`Vu#nx2n!T#|8lz+}UXL{sxlC+hrNXadr9 zA?;1L(}{Zy%}4R;Vfx37ql)29a_oJT$p-iNLf2k-zVKr^88M3=bD7u7^3A-6x99_QbzD*~qWr?GnWZ~3DcM6yK?JU2K%l;5@g+#>tC&BdL2**ccEkNwd5Os?m+Q=c$m29XcpSZ z8VdLNcu8D+$n6m@YyJoJre7H_`%ADl{}}CE8E3D#DqyO77OM~M!CQ?smB1~>O{No2 zEmR%3{>`=hnff;+lW_@L?I)X%{sPn<#rwA>asAK$^k2`7$Jv_?H_Ng2HuBty9z*fm zMZ_&dpP&zrYwymu`di#HV8%K2HlR=WmOR^0Jogfw?{3TfpV=4RpB;>|H>+2`EO6}o zx9V@o)dBOVWADFpzQ~39Gh7{?O=`?Hs<^V0?_aonpow`hudyE=NRW9A*T34{bbOYc zMLk;`gZ8CTp7(HTAD2 zJolmrNV&5t_hsTFEMuEr{>b)K-|>T7|D6S?S&*vjZ7liZTUwJHZa2%FwxN`Hj`%zI=3O7^gWE55wD#un zv-Pnz?e>5fS^{^z!|n4oxS4U>0=Ng@MxsYY8Nics#fJ{}5zCeD32!2P2cjArvA(vy zDa6xz#Gt-=I#YE$T>J7_pOMOys@675#N@4L;^uMw0$c=Dp!Y z1WI^>^lzZmNbAFH%k7ntY=)z8Xf$dXip}qhvGd64hqRo4S?Zk6=8^t&v>Yk-68|T? zpNXr;%ll47m63b>6XM>m)HU>lKRf6)>B=jQKZp5c59dX^oV7x#bQZZajJdO-3%a zjpc5!-2Bl2Q+>mKb6+8!a`isx(YQk_cbDa6-xDxB;6{9#%s23g(E*3c@&gIpsexqE z4)sD^QNgM7Tl770{4*_A#-$P3Mb3QzGtsg4+H%I+N}i!e?VVz|cM~_9{SsEP(`|3U zmLUC^)U!gk8%p3#aJbW=B%W_L25w|*z?`zt?;oa<|55VJM9(?gnU>pd8_yvSFQM-l zlrQxxoq4c+_WsqK#OwOyVz}4C)$k_yK0<{^s%=9sv;CckTZ!9?bZjHhdE*$@l0V|7 zF($~hEvkvskFWdtynBgz1$~M>K$+(9r0^e2UqO#`Id zb(XuHxKKFRoR1o#;!N(>(Pm|x%RW0!kTFoSA9y5S8h#b)XR}B@01ZOQ9csDH5+`9P z+ePnE_Vg_}A75RoN#6*y zK+3(}-xYmN{%=k2U1%!k6&{xpX?FQA=Bx%Pm)z9-Poc_8sZfCGKq063KO4_mjA%x(ZEC zFyn3iFZ1qF?gftr%pGvGK3zf{Ij?kMtM+!WT={Oo^~6h%`>F1FYW1(yr}Sy8XMr1u zre@s<`9`Aq9d1v{okQH~=tHy&mEk_jI>vHxUpdYCSNbREr?aL9%pS+yHKgB)N>_>5 zd!6O>Bkoa@kDf){>GSH@ey<)M1{9msUXvFvCltl}yPfn&RXKkk^}`Iyy^y#*Xfzs* zn)hS;jf9tB?bUKie>z~&;9`C>JV<(Z$Jk`H%H{U31n)`W<{$|#vUSfZ!j^EtiT=1g zA8uQ?O{1xeSxowGP~^lI*Iu4^lZbl_twV)qL#^0-u6?$i&0X);hrC%_FF5v|P%YWi zK@E`Fdx|}8UqoCNbTyLiB+I&Xj0}B$iEzYgVgV}{e52jljzgYrKmj`(U|j?t=CDc z$r4}5_thh~J8cf@8sKVwbR+3UqI;2Y&$Ha;iCc(1K<}av^hN!?}+D~9rwOp|FY)?OyW1Odi^x%m!cn$ z+B?c}`_xD_L(ns58rpZ9yn~ zP~yg+nP@s%LY-cT#NJ~2+>qX{OJ5jZO)NiP!-u5*6n%rVUNaRYAt~`>uBT80x%Ija zJ}|EYOlOBvwj$pbCS7x+94>>SoDS^EME%((&wU=GFBaP-!6}5(-{Gh|!yL}2zp!T+ zoZMFftm%y%S05JLJr3hJhcnu89{MfG-=OxtPLO6vENA0QMaIXIgd%9px?tcPio5MN$ zMUqK}(aGW5U^&fr=}t#9jD2o-je(Q3nEL*0!XNeWUeY{;RwJ$NZG4W`xfbmR4MPLb z%675$@XWU7v*+nY<-DH$2J?OncOL0qNADozvOG$Hx0$$v+Q}x2DxflF!lk~;`^r|@ zcF(fy==+`v-lTrPZ6D3bdw@xwi6$cD7W>u4d+d~CvkLu=entJ06HFKGJFMXS@!dE1 z^!;Ia<}92+Elod_Zct4O}Bo?C;cW= ztzL{<%W}({$~7&z2K7KQzr|jRlk;T3Zr=|c>zT$%d3+Ku-QY$ncM<77Ld8h^z|c*C zH~6$cwquVCLbmMix;OM1_dzONwGW0kaU?Pyg%vr zRldC$p9jotxExY69LM`--S^+R+yMJdLK5Wuv|NYA`(c`G$AxfD*c>aj+py!${NTR# zY9#60cHw*X@Zt4m`Sxb537E6smWf*N-|ta%?LC(F-xk8X0&Y{w9fKWzRv#v?PwT@} zIj$1?+hdDwZ|+*=Zyi6xzqi=6_gLOr99b7Iv*5P3_RheLr)gla)+oMR%x2%qNWx;a z{YtR+9{RX8GJ9G`|fi`sJJPB9I zsB*5~-|9SC@i&}zw#NK9o%FNNt4O&^Eq6U}+t6+#^9%Es`^jKZL%3~L`|HERUb+6w z`!-O%S1OI`Chr$yVKfRZ|ISJ$lk_pD@3^!Wce~}*Bd!^0hlIP0Ynp>~d_RP^ zNEUx+xfR1*?r^)2CkqWnYVS{$yMVZN&}Znhv0SU)$~+hnUcF&Q`oU}snBU-PKmH?m z_$9k3TV%#k9+<@*v%1yD{ zCB&^oyU;c?;zr&-g2dk0)?VdCwsYO!aFfoUKA_r2xwRecwZsob!krFtp5@lN!}o)7 zi*^J|j>Em5JQLAOq}-;KyMeg9sN$J2cJ%FCV!1PI{Z($xPR{ENH$wVTQFEl+4i0w+ z@%JF%ioGi>H|cY~T_`v5Bja(n+AmHe{ZnWWQf`*z786&h3G=ZilkY)DedurN!))sZ zt!LT0xG%pg#%(~J=BNWwuHKIvP23Y`A$kExyQoinkbY<31F?22kR0;w8!A_r5~SP`@k1Wm$A#;cxw(vdS!e*# z^Nv07B(EZFC)$I$tci`qiaC)Bvm@j3$X@Pe!P9=hJBM=^3L~|%yS1}kQ{TqsY?~l= zeAkqZvI$e_t@P)S0|9f@ju^KK>9D&4n)|9WhQ=WVzZN(tl@u+u`0%o=IpbQhOI$ z?i1(vet3!P9ORBa_BmYfLv~`&6g%9u#C<@XkC1ZTmx6QbmH)`N&E<-3C8)i5aBF-Y z^TRjr7Zza!NNbA=~e`ivkE+x-rrnF_g z2F^%05es^V{7<6QNRRs=f1fw9IrS7Be?Iq4&4%s6zN*BXj?O^w-;XUf*+1X@ zF@Ie?Xr6KGTXjpKIhTCtNbD0XQ*jcKIuMtMdL!4qYB2NQeBju3BWZ@U<{O`E)xJm+ z!}Iz)yYn>h66E(*3kT|hVZ4-W4#i04! z$$v(Af_dlLQszA;e|W_XsUWY>p$@e{K+A?-rX?}ih32}!| zwRG-JqLp2Y>GKWue8%ydG4JJhjC68-h|XICgXRjj8g3x{ZDG@W(3@N7Ce_c3(;#x%i%JApZ6|tg-F8r)00fO6JyWG`^4Dy zb&BB5fUEUyJ^A*ax);Q_+U}+jw*aj`Z_57W-1DL?L~XR=8$SCQ^+WCnLGuD!ZO`%7 zeR-H?y>x8XeU*deeYlb6(HV09JKXC&<>FtjY%9i0NWx#OA2wBj<_E{WGG}oTdFvzb z?^-YoqNLdQrxW{{b~y6+xeVI0_(SezNPWnKTW(kEx&CX(GX~9YxM{v4yo1D@(>mE) zi84?+gMt2Qeg7`A{*~`WK1S0@KPhN#g{$Q@nDjYl8d7@&D}Go;+$U%aIz$_D?=uhi z(6?9aGmE_$)r00yxEl77=XX@TjbDGa$I2}!LR@2X9+LT>4CaO8*qc*-i{U)yaN3gQ zQgk_z_AQ(;{?8;1CT>332cvM6|I696g60kK+cs!cvHxcjZtEYPfKCSE}DgA zpr*_R>vPFX8~WoHxewHc-%GC(G{+Uk+R+NqZ$dvJ@tbh<`tC{ID_6B0>!Z=Pi)lkR zQ|G<1T|Rk=9XoQ2Luf7t8)rZxxu06@ z*Tn5W37r_5vu%%m^*gj(?DdEELGE*9Hw&6~9BzH`bV9cvHg|d-yyV`R5nz+PEng2xPQ8j$4+(KI)+7%nK zoOYj^9yB{?7iIioHGMBgH0O|~9a1jcvINiH@a_iL$8Wj!=W}iS-A^KE_r-84{1od? zhLT6VJ2KkgUf=`0+mn*aL&Qs%!q)9i#0L^|-AdjCK~o-b0 z-AcZ-SFe{cS_MsOxaodg^C`S<&}N7Gf%R|IjAU~PYKEGi45xp{wDq_853Hr8+|t_w zO@Fu%%WXyao@gji|8m<$g7-Obdr;ZS=o?X18@`)ET`M!5=c8?X&~ZU-JI2j$>sf9? z(r2P)ka9=y`@&t(nP)35XKapcL;3Xi`B(DoiHW65zs-I-9!DWdx#e9FG>hPB*h2bZ zRH}>LUmr&;sO0ZVs!m)>)DF4hjY52zeJSH)I9jiIlBPeJhQvPMwDLLLFT|Oy95oz+|k}Ym;v{9xDh|E$%J^pj(Q{IuCd&;#C?nQpzqPVaP0iQ+1B&NsT4~|pLJ!>^nk19 z{}a2jMw0qio2_yWS?<}ywM7yxVe4}J+IaYIgMiPCTop98INYwJPlwx!t#a)+${Rx5 z1SDY!+oN$!X3&gw{5wO^qkN=Xdk*(fdT`x|B%H~%r1=Xix1wG_^Mu1)n^!9O9hq~< zr`!rrlJVLTca7!Bduoox&AmEkUV=-=kw5*&C%Vbz4^wN)%MRX`SSIL?A=H<$&6N`% zA?uo;SqVqaM=xWP``nVWZ`=C4O`#<7t{6@DtM$V9aCi9jMboETnQS7c9^&%Nq{g^O z_Yk)TeTWJe^L9!1?H$TkwWv?fr0JC^j1qWMU<%Psd8;!Gy@(@}Y}gbSaJr}#D&+w-t+DOxV9f~E*= z#LsJ5lKu+XM0>W%Wr@86?-kysmPPzcXjN<84^kyIJ{=#|PSb7*nzFyd`oR|m^1et4 z<~D~b<9Xo@dpgNH!`M;6>BPC`HuZz{@40Z#gqt2sZOmQpCzro5CX+n={^ZO(6|WCu-8xRs-+xwl7pc@AhCTlK>nYwx6yN#;4?UqZKi$$J7F zKcuuf@_H;XFlbi5)qdq|@@zu~kaBsPL4voX7jsOg?A6KUFk81iEV9=@f7FLtgXZL4 z|GXVI_4SzALF6{ZWpMSpeCoU;(-3>kLTazLflDdx^24P}2llsMU;Ojl(`|jwa?6K% z3tSDeab{ccbwqOb)ne@{aZ{}%^T-uP&i53Pe~gp=a{0{>NhZ_D&u~LR;z;5OkY3YD zWbv?|$s@m(?+5Jv0)3Ctk8AGVeL>)+6hqjE`l0y7-=;xfE`?by<+~ z_0Ty;xhtYr;|(P45%esYfhv#Up02%LlVf{4||wFPE$JFDsXFf~z5o z^yi=!NV>tZWA!ho195%OO~~zw=25599;RI2NL|^?0S+R~Sd@#D)5rgj1t(kqS0niMp5I(8-fo@i>3{xqb#zNF=N%hY7wIj9A4?OI~n znjZHeas1?^OmFFQZ zWh><^yune5@vbLs5R#zpca6UH_}5t5d79nP>(j@B=61MgeqJ+-d}Gn0NbQ{H?@NA< zxG&Hyw4p0??l|s`?53UAYw1eg8IwMP`$UeN$6wE!6}kYaozs1uH=4MK=qWS}NqHRX z!n{3pZm@Mo?M!(pXx?K-x2pKI)vo?UT*!_Y3r!Pwd-?-0PS^ zYwyUKtf3-JI^0!`y@@x`U!v2Ia$mOGtBAV=-HOgkOgiGdY^&{jquQIcfO2!V50YmA zT8xyt%W{+ZGrxq+L=BPqUbgg8{P_^&X1o|Q;||2y!xg0Oi*7{9y-*qke#pI z4G)s%BkI*-Y?Zsza_18F4wCRb+oP@f$XXgS=Q!L#(tnM9N6P)kax(|Az5wfooBN@2%3lC>UBdV>2E;UNbQwwCzW<_-uzP0?<}0nyG-M+ z8xGojQpX$S!=QQ5;l{sLMeP;tvAl;X2ks~T1FlS_Z*#cAIR5##P{uX!et7Fe-i^(E z3HqKLIS>0a%>S!?$b)-49k=@TCBDBP&rLpJ{o96K_bhQRez=(%;%~BFf;>0ro`;mJ z+{i~k(++MVnws?(@LuB^%QGGB0?S=UN1Qr@z5&%hZaZ$X)^Bf8f93im>yx0F4_C&? z5=M}IHkyaTGO>4&a( z5)%KYSC^1h-iLoHTeXwNXC!#v6W8<(=KoP^Bz7v()IIXPLCWT!>CD82o!c}yq+e1y z!Axc=IPvEozh6v#fw(ouT??o6RBV)xwT1o#p89hm>BmhgWs2FVo%$a92E)0xhdQ7` zpC9?&^9<|HgD_{H!mUBxY00}Q>Ak*#uh+%(D^NZbfC0o{khuPX=oWmV1A)6R^gYvQos6qdd(_XVr}ZuK)j)#D*%>sC!ArCC=~B|(j)o)UHSxQs zy3COQv0dKBmHqfI$J$%E{UVZeFbsX zBMI4TkJe8W{1h~$lCd+In)g|g{@M2v%~-a|oou;35?3mR=k`$w%5B5EACfwiw9fCR ze(vQzr&+K&Xja43a>^vV%qQN@R=IL5K=5`D*Ju>wh?*g{pUSrNU-~JUlS$tfH0`}a z6NzT!`hxVYq1Taei!Jx$yBWWrdr;|%{qGfMyDG9={q9H}Cy4oQ)enow^CS8hDfe00 z7Qvf2nmURkY-F2{4~o-$KWO_BKge}MN@B=->u|S|UargPjfru8w%p~!mA=R4rm`)7 zTZoh?+b^#3xkaTzre>L#z12xC-#2Q&R_z_+R~GL&;_g7>(LJb1L*{ep``n@Sx=iei zo?pC>xe~7S*DsJ>-UqdWt=8KweQxr{#QlW!A-9idZrj1t99K@6keLim!(q}McQ0#h zk@i=%i6mwb_aTyJD>q=Hgo5%R^EUale~N#eMfy9NKl(h&UY==*hB`?{A6HcfnL~1% zermIU-`$JK-sk(T9o$;}KJO0Vo<<9f>d2@;T7_CKTaPcse31@wOcSl>7#NI@>Ih8|Zp~L-( zJf-hvEe%qx-d7n(+zj+4%10~DqMf$!{ZQ!GdneqqY9X@~uAZ+xCjBb36De26fvq0! zeS0n2p2+QAXWKqo=OZH3LuO>zSUY`y^e>~ONVy&PeS$Z2Joos~dbA4V;0IkN+Q;^< z^1crluVvHytiHZ%+=w|W$7yr;91qVI>4|H^kzTt8_2mG@i-*VGH~&a+s3Q0^FqtL^P! z;^e)P68?<)Mr)s&4R?MC_D*-WTnqP)Lj?+4c2j8mx(PCYC8 zSz^?`3mt9?Yp=XV#Qo09(fnHg_vG?1|0?$_hl>dk{_FcSC2`fiX{Uuu54c(%l>3Rp z<(5d4do1?m!F{j~8K5;y^pmE4t z;&2}){p;v0r1l;cB^fXIVb&=j2_4xUjho*jWM;sPL{l4cCF$=*_ao(=?CI9S|2VT{k7;;q}-b=cL8x9pe<-4TETh!AY)tM z7Tf-J8iynOL*aQLb7IBV_;w%ZLlc>|N6OW5>rGr9lCXg7LB@tNDJS7-(Ccv1B4jRu ztM%bE(yvDwk#ZYFNyckFiE9NU;c>P{^KbD5A@dMi4YNsK>769AfUU&Jc|Pp#Onis9 z?MUw}Npx{5&STE;7PEi%!bEe3t=h%%0tsGa2H=hCApAVpmM~7x!f}>k9I(reEb0(4Ra0XAx`O?^(Je^rlG92mc74D+)^OtQM)B*& z``dc6*7ke39Ydyj3ET+zoNu$Ymk( zv&(&#Z{yHpr9aJ{Y~t6b~JsY^bf_|LZ%;F4cC%~NBqsrY$aB>WR2ceA4uE?r2Vv>OWbV} zsYHaV?({ow^}I5geB;qmNRkLQGn$h1(8L`?l^)~T7s-L7prM>l`&fG$H1+3A@~#Y- zC2-~ZIs`}7A^ioYJyPxf%e|4f(P$zXkL0>^D3bLwJ82hplJ1Y^SGcjc!|{Wzhj^TP zrAR0CGBtM8^#uoEy1tP05XEq7g<|y~etm&(wLVnh{oH?deL;TDkhuu1Kh?ms>N)iF zt61NHy|xI9j=x)MPc&`VFQEh5lE#O6ek_LD1+E6%9=#Xjy&zuTeh~Ju#MJLBWZNrb zZgkSix?|Cc*dfOy={bE$`sCiD5=|lZgk2xWzk9Pg0_Pr|lOxF&lV83gvee;FbkX14 ze}AIMC4H{*yJ}}MlBo6a`>Fi56Gv0LK=05KGu{P`1 ziZL$!{$9csd);$iEPtax2RZ(vSEX|F0as9;eu-LCZG>ZbP^llsgBu z1hLm%za}b2;&aJ&eq6p6$g}+c+3V+vmNWi#^W~ARqmwV6JZ_b{KF8j9q<;l1L2B>m zQ4;qxh)c<1{DNvA`A&6yy3Z~5sJ|6^V4$gAtCcIT(_P{9lG1$c8y~HyPlQgU#(|(a5p*j-V0CGBTsR- z-7NQ2;yyzXzGN$0`Tn)mUD@h&Q10y^v)|!vA$_Z-xQ~a_57%05r>B{JLN}x9kz5z( zyiP_v|K5Re3x)-m;zsG&)ms|Fo zA=47B*5BVrU*#Fj&q%q=EjN$2_t0nPW8|&}Y4e$Hua;ZJ$dI|$vG@3yy#E{3N6PJH zxpxsa4n2Y@P#<>Ih|M3SwD;$?blpbAsE~OauGR-RuRKG(IY_xDTmQ;=#QpOL;Z7e$e`m3wOE0m44?%nEG8}=?7|BuD|jB{#AdL2lv|&xC0EE0@7Lds)(>Z{_xp$3F(Fg!ghW3lf740d9(6zx zD}LzX?~Oix-knKG^{Ye|k-rJ~>+$cD(yWglUk;jtw0v&x^Lq!0JN;SiJ)n-LKPTD| zsOdz$gUq;U0_iU8>D!flf5;4Q>^jKWlm6rxjO2_Zc8zAsDXYvidrFxTXrKMrs%=u{ znf6%a-x8LPF%Rx@a3kc+!`?gLJ%*McwRaNx2wwN+=-bg^^b%^amHV~a)2qxnqGinQ zvN8HT(%f9?QwjENC!gB;4$!07+rI>Ri{Wm8tLKH?@P0#wklMR8YOe80&*nLCB%ub| zoD$aSXt@_X95TN+_GY!>SqI9e4*9g)*ZJJUS*=T%XXr50w-TN9NXSeizqZS4)~Pon zZ)2o(Nn0U!FMeLijAFlpzZ&ml!!27`Ea2WhIuBl3)E=o_w*N1EEphiCUEl7P^5Mhp zk}r26^HXpl{Cgo9FX`HsHq+RueH)13n2sS;yee0RjH}Z3ukA`{de;pMf^&77jkl_7BoP@Gmu*ZKVcf763 zoL>Cvx>+HUd}54Sl{}}Q^N?~`CLqBZN8BXzESiDb^Lp*|N3KiFcrIj8;c7knjP(7h zC77*jm0Kr@HQpiOQWp3&=QKU~b%&W9G7aEryE}n=^-(jV+?kep`qD&mHSv8>&+fdB zI}$suFKXo5tK+fA^C6S&aEFoS-g*hKu2uekhBJ{D;EwMGjaxd=fzrVC-LCB1N+dZ0WKj7pp+7HP5;Eaxz8{wG|946MCHfvI z_dUzKW?`~<9KDNPM;*6vo*dWG9V=+Np@KG`3JOkc+?8CSeSo>!1qE9J=T^{Bse zT;ZPg3d#Qv`K4dThxZ@yeU7#vwX2hV*xn_t@m@Og9(oJSL0Fd`fz0PhYZCZXKzB^eZ2XE^R(X5@ek$ zOF*OR^NV-K`a&It<-vUluAaYMe>TZ%fw|4$c8ZdYynd{`_{j5&UuzB@*7KM7Dr8;~ zF20p;D(SnSK}g%l+5WEN_lc|iI`3CRGB!zK;%gB;7-P>}KZk*Q8#0A8sNc3|GDtfR z|)*# zUKaRlw1u=)-sCw0q`W-Kn?u}NZ^`@Os0-I7not+s8^B*OR#UXeoLf$#r)ob0%`kORNtK3n3?CR}LM*{cyGZd`$Z7XdhDU zF3XL)O&vhjp`-$JJ0q%S@cGHd1d{k&!f>Bpfwq{q)=g%Xm#C9cvt%)cPI z_h=oejC}=mj^J(l8{ux{2o^%>`SX0z_C zeRrZU$Zba(tgYGx3dopMA#7H_RX>D!CYpC)u0ZMsUAO%yahEWM zAwiz6ck6*N)ere_cfi&9wUNBr(Dx2^hxLPePcA*j@Au;0lc(ILsm@Zr(kh0{UbxyG z_QMM;rw$>t_ZQ0@L)>#n!aHocQ}+FlGG#0Ntw8$pVAxbTC1&p`(tm>z--~fO`|kJJ z5_csUh;Ble7gJ|B=Lv6*?f=!@!f@EMhD$Svh6hRi0Sd2(m0Mq*o1FOp=amoXdr;Ba z%ojCJGDVDqX4|pf63%~l^}^;Jcw>E>Ib|h%3u=t?_-9!=&n2$cUO(a2_tFOFpR1wv zvJh<)>)S+|6V4Qose>R*i@(!tG83&J&B%0>IeN^;UeNb zLmN;B7NN_zYV2y?4?As}xSjG5d$a0?O*6RS-`T`%BG1q07o^-N)(?Cz*3>}~8nNw9 zU%Q%mAosb%)+ExYf72U=O<%Yg&L(|J)DCI;oofA%LEKg7TIBlTU|joMLB>3|)8R@x zn_ixEY2>*VtwCyU!2eNi_$T!5s9_;?qdr@C)`{zYeb~F1c}}`pqxCksdD!f9>|I3q zx6y}4?Uk-T%54pCH@?mDuxwp>(`=tBzL2nzj74xylmW2~JIGUd75yqw?j!!bq`Jg4 zM;(xR|EJtk+G~rjNrR*Pmb|y;3expJdfc^qj@O5{!AQdPRY&i)^5C|HtNqpp@{K`{ zBjwh!+!u*kjy^$4)7Z=TRFwxuybD+bO^Ao|l zlepu0Cz|nW<@ves_FOJyUX8Mnt*%$dhdZwX?nH+>;csy3$8l3yh0XgVaG!Lz5C08r z^Ehrc-0$FOJ(~+}AzI{cb$#8zYf71qh?mfnHg&Y`*JZU1oBeQ`l6DErVIBES`;7PN zAgyQTL`lZ;R@1)F3uqRazC+&0E7u!5Z*`|XFCf<&5!!E2hp?$%FV?;`k$xxIgS36! z>T{CEe$I2VxSV$=&Mr=R7FA#N^OgoKmMxj_2B zOgNEC!sc3sBkLSKB;997Iak7wenhX^Yq0>_?MM3CGLd>Dp^%KZaPNkzLM9j$-PFQI=fgnK?*Ievy6=4*I+&`Dp!j(?PIr`Maf zd(kX31FhtOvw0bwJHytY*vfL^Kh7t)Sz*)Lu~*i4d_bPnNbMbM?ftX&UW|yV2aDjR zT@yB=;Yyzz0rV}rLnz_Pn7zxay%!MI4@tO_?M~`IF1G6V`UTpLyr)m*Df0S+&6AG3 zGJjHVZ;Wwik`lZ}hjtj@zveR~!e@oa@J1xfD zN&3C$08%c)nW(+;UC=UL`{gFzn|AvKu~mX{(*}gi8F1APwYWH}NZtTa?oi9EO59nN zySQ=5;{si`Pz3ivhueaD8R&AP+&e9I6mgT#G<4sYN4^)L(6%|{rVI?59u9XNd0t0v zBIV*b3Enp1cB9|WP26X4ufK}pxM_pJra#;?Kd&iU#C$bshLp=AqEYTB;wGWl=t(rQ zF7LOklI1=EqxAB zuDxaFokCnIbOpK;jp)o+1_^hbmh@dvccffde@E~#Hd7DKJ!lA$=W_Hu#JUFl`!|KVntn0s zF2);3zBUQAq9bOY*z+;UqI=ils+VN;fgbL}4v*DY;^l4m$lu3Sfn zz0tq?d7FLm%&p5!v-M2daZwKEH@Fd-sgOLI&{l_AV7U!4OPk16`X#idd(si#lgqGN zDYxi#{@r17o?~xQ__DSuoxE!Ar*Za*3C$!OCq?Odq`Wk!y%}&Xb+~QdU59cU?iZF@ z={weppyudow32~;ak|glXWNBxv+oI;p^hJJCH)vQ5vjd8-!VD4lzEx>#Yo=IsB>y! zYqs^n#T@HH982Whuo(ka$2sqlX9udbEygYFpR>H##H~ep(JoYvXENvY_U&!+#gX?Z zi|*&V>G(nXdpze9SwpAxa)}_}kNP10`78ex!+pi!HrdW|>8J}*Ze0PvUD}mzVG{oU zx*NImY^ANg>fiha!sa0N=d}J#A^lTmCQ|Mhmb?0P=G=&v&*)8Y!ya{3RgX0Hzw^dp4R7GkpRb9d#{%y%V zd3S_sZ*E+Bi#!-MiS=Xkp)+}|L46!)#D%h?|2X{Dx&>+(r)e_gk9*G$DN()EB9pC;Caf&m`_A)}f%2P;n;L_e}N`aP3o@mpBPq z`@36y}G`V#nSAq#uJOA?42Sf75%1xG&Lmv>ENI5gT_F+q(Hl#J|6k z`%>5xI`-}(y|526>)43xhbAK(Wmmy`~E`8-d#vnhs|*fW7i?m$@dysj+EQS|4nZXalv1>wnTMM20qa5 zKpeE~N!ImAeaK%DHg(`u_Vb!^Nk5HixHfE+EAJ5?c-Qbv!wljj$aS9FSC3!+ulL!q z-Uyou;HrOnkZ(Ae>2U44Q@oFUWn8|OHIwKWv~4W&afeEo0_NrV2mJB3wErCJ$X*dP z@4(d{^EEY}C}o2CV(qFo>7-rhe7f7Nipc+63HeWO@?Ue5{2A|uO*!r>YdDd7@*TX| zPJVfx10k_Kam|pfHxcM7 z`rE9PVRNy=eU0?X(dS6HFZpJB`-!W*pY>^|F3P9*QIAlv~MiKPFD^H@tc` z*M5#4s@Zy=&)F5ht->``#LsKilXn~X-r+8=+~W??_n>ri4syR!SKo5=`agGV*qrNd zJCOcL)Dx+_uUqb|#65y$qG`zGHjm?)^WvUIN-GUK?}aC{6%!ZpxAExzQ?K{cgerCB*EA5|VY~A{)T&?#x zaH~1oli{VIGac^dmfMrKen`S_wz94v{{0xrjeHX}jUDb7(o6fF!dCsjFhGL0n7DV5 z1bIK5yzi~(v?I@l%FX>YY}z~APsz6(?L*2fW6y^T5A$ve)DE4&pv2{lh-*(dn>l|u z+{?%#<#r`o<(_Q0y@(rVE5l#Sa}>iJ=Ww;$Zg9A@EH~-^`zKm%l)cn7Ei>7wAIz4p zd8P#J%?_7kKoY3AvG7;i6u56W+=1|N&}fIt^oj&;4fh7WK@!eHN2_P~aMw6o^}}R` zd-gxDw*c<061a~!+;jc`w-D~}ESR><(^RES&VZTcaGP1~=QA1iv0sAR-!I7zdi|WX zHEilRT=m0Dhb!yC34g2Hl$#E>eF@yz4)^?jz|DYrBi#6YXP(3DatvIpzgcj{l)%k* zxLyANHydtV3EYJa_lkeO&4K$S+{)3Sp|57pxd`U#4!67IE+uXal91Em$Z@E)Wxbv< z--XTRj=dYnw-fC`+V9+9xwBXYSjtw5a%@YgXX@WVxZgWmt!H8KDR1)E_dJKY_#fDtvYqR)66|f|aNqkI_D+wpHxKS0xEgBm{hsL`%_-;r{rR}2SHSrz8 ze~ru=_9ss^(&LskD%Zz4Zy3Kmd7dp(?L&&lmC{i ztK=;e^TXq$KiWJ&VF~jDk)Ii7Iew@BFAa@E>W5ikAbz+d$uqN1AzFcQw_-QrxqP0R z8OlO^@voL!&i=4jXZ;|VTho#CLcNi4_4@58;uawZHCP-Z>z=oW88O%=zTvEM+B1-E9rL4Z{as?~gxZ^SFl-Jvepm7!^+(FR+;V60-kcG{OOWrMlw_}RvlCLy zWpE?W)W+Orxeqy9nQtI?bBTM^aw`rhUE+ML&M&7WrkZOV?i=J=iB=)C_j=2%RK_#) zkc2bYrg83D#EDbuf^3zWm6U2aJL|NXk^W+I2~zGN%l-I~MAMge2@TFUa$SzH)emW< zQ%#DqPOH(X1T%oVgB|WWmg{f)za!c2whQIzI-+d2gYg506AfcX|0J5}aDVW3d5On) zrUI&gPCzmaP(Re>TMfdN@50M-gehfG%^1hOok`ylU4zsQ$)qEA+vX*j`-y)TbtR8G z&mQ{NzmK8*jU1P1W{^hf?;P?hK?O*;6|KFuzR$Suc;CM{131T2iP@`uQ2!PjpK9j9 zmB28{98bO)s2S4pP{8Mweww&9(5Gkx=gpm+{XV^z{+DJE4LRjg%@WI#21v(44eoeD%^=n>* zRI}aj>xHE6g1RH+*0bD!#65`e(4$D^B}XtvD|YU*{erGvFRqwsD%uNJ$v&6#ucF0B zye;FRu+L3wTP?|aLcBXJ%1%i&r;%Ul=Nk5xD(9KnNbSOh61-`|EkSG1C+HySG|OfC zcCEJa#(I5`8%i~qaCLm}E9noTQsrY@?O!VqR|iRu{#C|YV=-FGMYj9dC*zs)aH<*L z9B%{iHAT&l9&ZH!alfP!aUVA>eZ=wRlmA}w_w&=3?xcADJ&N>rZ9Vk15qAhxtKgXs zTE~6aYW8>!+H#oA;-$+=Gp}Dc)jSM0-E!-aJ`=#K-wq*FM9_FGgl)qDsSw?xBw(w7e~?n7$t6n~fZE^#}N7xbdfzt+dr=GNXk zyPo=2?kkEP3+kqtEpXHPygX;+nOo4~NV%_AZo81jyU089!Af2MT%CA+?ugBEj25oP6N*ICK(~!X3kB*mkM)DJ3n{oa1mSlcz4a2q~AQ z7v&BjZXB9|WPIU1`!bZdAn}KCvm2+HZg4R_8Wxb}HS|7GZa06Ix0Sd9sO$;sLvBCX z#`e$h-I2qj&p0F141ufdHA4C`P%p{LerfOAc9G!CAZ{i47Oh9FA5u>9&nMHEE{N8L zCaLCb#}889j;rjMa!9#)T@$6-Kh4-4ZT(##+{YYlMR>JQONYxXY6;#5;_gGU&~zm0 z*>?8!>)8%$7jvlOYlT%t$0$Fe>w?VMDz!13?L@V-RfI^4S~ z_jlrIRiW=k^--Ay)KkWAQV+^;F(F&&52f4+o2HugO5ipppW1u>-{4k@<7S_iYQA#( z+a2DG=yr$ujO9K|+*0$VZS%;X_D%BLh)&A^#c&pJ` zhug?;xFLDIuHtB=K&gQoM>bl9aHmRmH+%!M0 z$s$iS8iJI2iRBg$SBSQtjc6<nLby-D)p9!kFL07)!brIzEVmJHEs%ux>ksjTgg?ryJ^e3S?H}5bPwGR4!+pYX zUwD+~uPpbkzOR;bQL1?#ZaqJ*xq*B`(Qt?Rs^vaR+-xM_MYehPHlMy-{OenL_^_0l z^y>u|r<(6e@b4mr`=2O@_dgxOde`g@sU~<{tbZtg_X*nNaJ7G^T-`Hgq6<+vlI#7U zb{?VjL;ko#uNNYnQcVkoE8~*B zTqwbJtpD%7Twk67w~xb>@xv6DFF9Q8AC5MDNczMdU+ek8WTcvJ1!k#AM1nV*xbf(5G#M?5#MZ56#`V9& z-BL|bvm^V-r^qu4sUHfX*kfzQdEHY@zEjVnUAzEO-Y=}&lPuTY_Z9Bb%ZFPF zd$ql_CEJT|Uvca`xdd)|;!2vY(soe<_dJIyQ{+ov7C2n%`y<*h)4WIJnjWd9tHYIX z>Qb1WI^3(Ry+<3T7RS}Ij4M-3w!@Y2P znbnha0k^y5-VN^=vBlx)`J!x1&(uUMP-C=?dq+7J_~*9q*4}*H6LuM8TAaoC4X(}0 zJF+};8S0AE-X^x(vWOdqBn)L+(z+s<4@~6v3a&{tzn8!r<#4495WHjI=3bj>!YpKn zw|Bh5ZS@bhS-n$DL%7=Bq#aL%Io;u2VY&Xs{~K+`81rZAX|mzAb?nW9Hy15%xK~>4 z>%^@@5Ks@XvL@6m3g<)-WB%hsY^qf?N)Kho_dr`!6VvYOj%mD840pEU-zM-{q6;1FT+8i2+>K~3svw0~CAQvw zUR-<2>6>bnI^5A`@a`t^jYDeh%a;2jar03d?t3*u;@_!ErpUN2rBmGa;rdjw5w3>U z$oCFfjwCjdVtUKp8J&k*P5cq_uH-*N{)h#9$^ISaN2GRr>F@IrYkMY$Bs|JI-Xg}M z%aA)B)pfN6{Zh?|=l^&4R42c3zp~t88js$PYFfh8Fqe5%S*KP9t{(4Ne|O^6Fl%a0 zj;(c+JVoU1=HyQ!pRBVu$H{-I-|rHz4yQ89aF>~M8BZf)Ng%GW{Iue z($1wH&FY_OycV%?k$#Ek5>x6FzrIL4wDS{3e1{;Le5aAGvVY9c`DKqh$0N08vXAva zHr=1~XZl{L9JpQK>T!xa6<}6!xaaz;|KgUko<{E<<-)!1f56Ry`}+TYn-6!(|A1Qn zw_?kG-@k=$&;1{8i{SSDA8?D|PWT^i&CRLiKmP-63fwIYH`vM?@trAYr+)J{UWm3* zhwF9;jo7;1P1X4aY5&97pAYwd!+kQTlv(+)iGG7u+p%&pPcLO^z?M*t?a{b}w=n;k z9;;`MaE?%MUr(T(>yf`0xI@{@r;> zlKH#e{Y@K4f97!i$`5U=A1?U||E3R0H8(ljf6EU=a7R1bw;LOCJ>`8PiZ3@=C(_N@ z`#6>4XyukSm~{bgBXA`2BHv(iH&QNB2NJwjh}(enqn}W@K3p5_V9zApoomluGb{P^ zx9HYX^MS)HQ-^zYs6LA4UQOJ+=xHqp%;R=j z{&iljPtSCobKdv+e4n#F8{GPE*ZH^=x1^b0;Ocn2;kYCtYa8;sy>g{qq+xG1``RK2 za^GyMarHL#Nqx&NV4a}#{^wS}J<{Pm$??5{)*!#V$@RE55e1RFH_^RbnB^O%<_xBv zha1Lr2{$+7dAq^fBS^dA=MLmsOrhZtYs?*_+sN2g*Q>SN>D$BeLmAxmj=l5bzC*Ig zx6=IF*XAXf7wpZs^1Mkr|K<##zc>)~!X11d>>ZkBCLaiU;XZaC?7fZoki$JEPQB>M zzMJ;2UX;RJ4_C*NCs8(Aq4vmM9y$?s73z)Ty$|m7mW{R^>-B*A+tbV+j=k?cS;gE) zzQM@PtZi9Pi>%=*Gz|Ae>K0Svk>xd6?oC{+3Ap+!|=h)YQ zty_<)P50K1)DMMlhrkWnOg|r&yvz3YC3p#ZPgBAM(#7hBbe+rGnP$evuy@s7+FR3S zZx-A~_t9SWT^QOuvY?!K1aj=u5`9+hSeYPbLEaWULlaMcfL@7|W*Za#a<;5Oe! zd*hYg+|k@GegL>-aQhzsZtmUON4k&Pc;&YY?mW19-u74fn{yA>vmCCLhrJy?^z)U6 ze7GMU06$c~{V9gMds}{o`s@vlNi$X3?^}I~SAL7();R#&@Ypod<^XVu;afHE&6%&$CiU!tUln6>!@)+;s9?!#pvWMIHaVFwDL+@=+>++~4Px2OY1g zy}3ncrnke5=ZA)H_jI0B3U`9T-Pd+lbvp9si3>A=1YY+XMr z^VN&+1m^Q_!#30ZcmCF#d%1_eDu(-y!#y8ccC{YWm3>#S4kckEYg6&shpdTdruJFU za;E;>+jf1W&%b$a&+>7_zt^I@@$WjHe~aMe!wpA{&X~RNZ>;`8{hK-|&D`&B_r|}m zxH^w5hWm=c-Cy>GC#RW>4tIaqTLL$;!~XYg)_rN_OozL_>@9_Rlf&H`|Hi5pS{`zy zq?suWcW>;C#ntjq2KNQH+7DH*ezU9f^=<6a^_}GUJf|Jw`p~I7tRd|~?)}_X;cyQk z{jRu2u&)-9uq&?iZ)I?k&W_rv{pNre^*CO?xzW~R<>pRJGd1DrxFlYGu_xJxY#`1&uH~%4?Z*jQ$%U)BQW>z`ey|Fi5`%nn? zXNS8t_Qv9Bc}ShbeIOmZYgE#t$@g}2o+Yt*Uj^6E6aC-Yk@WfGZ~XtrUq=25{~!6Y zW;4zvf0h_S7$ReLw*LDeGZh30Iz*IGz0x4s8?r{*CSI6MJ*!rkPhA z?$f^~n%Qp~vnrwTe3_&Hd2hz!*501C#l9Y=_NG3}c+KJNFMEsOCY~2<=d&@a1xj6* z6q$GZz-ij2=O*B0I^3r?PALmZ*~&;#xJR)iM7~$?lJ!Hs+TM5LQjVrfZ}s|oDHD3V zGk;#1ImzK3k(3~QNvNPEYv zfZGeMmfvsT{ereQ+>0$&?h^_$U~L9n#7BbNb%T6+U0v_fESaBX?r^vv^3+8Qk@~lr z<#y#>vNMS9fc)=gDe`d(A5Ake9qvWsxddH~l-tX4y^Z&;q|y6`)wi-uq1s5jD1JQ6 zJPlXJKZ{7e9@RNM%6-dnKWNB4v<3Z)p5Yn0GVa5!;AD+>%X@Ewyq`t5SWFC2S2lYSJMh|~`Z=OhFYPU4wC)DksA-EQQ$-h7Wc2>V?>gx_F% z>2NP4{Zup;DfdRpJ*P>)T#W8Ox1gFmd6y89=Loji=MB{lP)@{#}tMx7C-89qM;i?~|JKPQX;D`M8ct4Kg zho|95`F+XZ?zG&s#C?k-$oETQ*{goYE91T!hx-fp{z2oKMg4oCcdKLIh*Nkj6$8rt$$G_c=k+uq1@87tY15R$Z5_q8t4L~=k0OJokQFU=o9oF>USOEL|cA) z+UM4!JnZCnQa@)M$+egCvWEYMY}x+sza=2;aIT{^@l-t{KI}vv&>Vb}}Te+Nd^K;jyneA{fKN9+orvTlDlzXq`ZX>SB zsR2_P9f90-XZiSOJr+Ndm8Y5dxzT!Y`zXd`9Ahr|lv`}M*RM}DU5S?U;6(T|2o{cmRm^NB+Gqzak5!QW$F;}{3|||AoGIAdHagzvf-*9{NqVE zZa@uq~=*v4ufbUaxOcZlN$x!=!S|5L7v*Y$os;rj3Q^Q?`Q-@LEW%+v$G zEr3LH>JVM-4NWxOK@%&KwZJK${;rizn>IYDJHNPnQj`xr`+^6_9 z-E){EV+gVLeWdno`83gd+lPS?;lY}Gmng=%?RNG>#yj6LUcVrbce{FFImh=t`UVMi z3%|juBqaozpB6A}&}HZXG_`5;J0vA`-1lj<1hbZ(&ijG;#^7qZ-k$nd?eHXXJ^7Sd z-*UZ;_wO>&#Txh3<>g*tZ^@5orXgGni{ZV%18lFbm1a!r?c(iB-X_1*f-w(rnf+)R zDt<~cSHRKnn9QkqPf9dtq*eQ__c-2(w?DWFC%Y_vc`e=5MB>7)Zu<=xxtpa3k$VCCn5Lz&%e!kf0VQbVU8ugBF%j7*!v{!`RzxZfk^#8 z@sSX?b#}6uvyrh9TWP;sKMeJ?w`FjvTp0ClHh}-($)OInUIc3@`L_je@!m^S4!0g$ z;Yqjy-o5BPhpX=sTSDBMsL7mU)8gI))7x1WD6{4DahxXQD)o2PxngkNb+`-@B?RJe zD}3CXO=;#@xLOZ>gSWaQ(fs3Z&$is*3`lC6?zy8j+s*WmtB)t?Mo zCG1tX55xU226v6ajnyCQuD!~Fdr;@7Ki9!)pPpoXa=1(rBlb3I&D;k`XwSBYbqakS zkoGg;PpSVo3F)S;!|hD^TiY6Q1zYvQgb2w5t|M+Rk}#ZY0S%+ooczi5SP@3vX81E_xo8rZMk|3=6KTQC8e8Tj=jxDFUm$FF$Yr*7|O_C zrs|)>bv>+dyC-%QV^r~B>1Glf4M*f8n7`V>Xy-l8{XaOuBP1R{+(}5wkVNLDrkkh9 zPqIkJX8&2}G9#TEF46PxDfzxaKR8^PT?v7Ih&#M}z+@tMFZITn z(RHI`)?R(Tap@81=4^*sn>=Fg@od%JoCwwgP9d&gEAM`usx=b+oe#-(4%BAh%KRdy zdb$|^SLYYg_!ziwTRYryE%&2&jN9zT!gs}$bq(Q`!kr0M&)X}>$)*nd<9QCZzvaq& z^Ah4E_{S+~ulhI4$JtiI;C6Sox9$VC5bl;3+};lN&VAsP!ws{bqy9}yPmFw1X@JAM z+j6s6Fc@n6Am1I*dZ0d#tc5B8S8y+szFY#0Ym&f65W5-ats z*xQ#_Ox(MSKh;i&PEAWUkHk3M#~r)od-(%rz4tJ5|rt!YIqnY@+LmyaxWNK%riL%aleAE2Ipx14Hy zEra_STb3Onc%xA$hN-yNGMH~!DdNH;&j)q2&1JgewP zdOBPkpUQQ%!Ng0bMX``)ZF};*kcye!7}Bj*S()jkURTdvrp9JC`KF?W9PX$H$pj|x zLh5IUUxwuQU>W~4<3NSC5ql+_w%>)JbaN$K4RU=~)}3A>uhuJR2N?IJ_^3lVv}dD z_(I#mqNCEyX>heYY(c(r&;<^cB?Ae88;L7K<50;V-kL~pGw(Y<+kN$-|I5^b?9rP{{6*r z4{cJ#{4Mbv7&DEmJg%w6ORL1cT8~R=r<=nsi|#ulaAvf>rRXZw=yu4 zyl&_nNkv(M(=i4o)EcK+&Y|)L9K-o`8S-}@*+(dYb8iezGS{soh&_=q2B#v1J=aE3 z8B-4D?HHVZ!(k~aV$X&coNFwn0#237|LdO%ZF?vF*pZ1 z_RvN|>`95?pT3rp3g@;MoX-D5?TK7}$DY&}oa-zn4Clodoa&A}VMz-o7=zQ#acP_7U>nER4bVA9YHCaO%q+aI#`>>|E01!}&f2=TL`pyyaxa;N;6b zLLr>ySNzvMS}%gwqxB*u2FH%cO%a?sV{o)y2uJHhhZvjzo;ju%&Wacutrx=4dXXE0 zGthEM-~_t=_qeoP2uJHh*BG2ZmQxC+Lky1G?;=4sHRTV^S6&RxO|p+r24`Fhj@B>X zX#MIPgLAWoG39Vp$KYuF5>8msVo!by&MlTx0jJiL|Mid7FX7a&oPrpf0?RSSFiwFJ zDI>(4!8qEzF67MD12P|+X~)@Z9+5ep*N3=mw)W43aL2;Mj7T_~a(xVHjI>{pmWgv1 zNMqfv1@Y}r&t4o;Ms!}Bfau{4j}7uS@qM+IeAfk%6F7TeplW@bl^j+KOgF0>ZfAH`pq>tQlI0F2ZX9|DO-1gyUq>G|rxE>y z!<|R^XHgkad#77&_*|Y-L+7J2QBCGPMYatXVaw|ylqpGHazeVPdR5d9VsBsaT#uCd zqU8=D?p`F}ezvZ?+6IUpWSz3Kak^>baA%VK3G@_F?rWBNTu0`INJ2Zd*>$7!U%6^; zPLp(VuEXs_`tGO)Qf{Pwp%R+$nyiH zIqHEfMk6*DGXsgOxwf5FZt)rE=68pCKj|Mqk0a$iW4RwnTrT%>pmfwPm-GLX$L(h8 zfpYWPq?=QEMB6KAXXO2wS>%%-_AZJ1Wh%Xwvygn<$Vc&vgi}a=CTeg&)Smg?u0ZNV ztV^SO)EDJdaP4_Zg2_)vG&$#Z_wO88*Iw^FFWubZaL?}?F!yw+VyEM_dJ}c`<80Xi!`1J&Q8) z8*^RTkDOSW->ky?rwjd)V{cp1=c6%5+I#Vz9ivwLj<~}v;hk})@Dt|ad^j}Bdl0{| zZHTOOWL-x4adp(MXOXrC>W`Fnzh`IF>BPN?R-vxVxpyfw!OX{}lkL4r!ppfL-DJYU zj7V5V+D+)-uF>Ou)Y}#5ms=9w77dq12Y>bpQ78W3+MMsYSy}gVljYcX8F~JCq^jw| zR!Wl`_X{4kYQ0;N%pJt*`I)~dS}(;$38h!kA3MC!q@ROcKziJ7dP%GPLfl`d%B9|M z7f_zcIqoI)TB$ILd!(CQ&T-cy?M#$+S@gI+^>~4*-RMuy3^WBT;e&*87jrNEGl}M# zn=0R57QTV&F^-+rUco&HXcAI8&+rZCfjO&o{NG_r34aD7wh9Mn;h%b{Tcw?rBFZ-vP?eM~pEXK?t?K1QZ(sF*a#|yMv zn`E{~{FV5cg^~Klc;6jJeUNXK*)r6eYn;-r|1lkdIIU0caqWSP9Qy)ijzKiU+8Bdv7NaErltZz7W-cI`W zQEHEUTrTsbrJG#1VL3uVdT+-6r~}gDzu6xD z4B|dP61KB_W&`JUc!J619BI3$E$6K*0uSNue}DTNye{J#x(EktF77qop#Q-eiylOJo>&5w5a@g(@2f|P(G#fAAdZtVl}8;|V(Y4o zJ93uN&-?6MK_2<`mD<}B=$_iE>-oiSUyQ+B30t`*?gQ5>qo0q#eb3?6-3x9%aULNL z?lIR|XY+qKZ{mldBdYvs?_tF6sUMVE3io2T+Rl6cQ@EcaJ#PhK0Ow8abDMOtXT$EU z_k~|fH-q4YBUz3430^p#wFso#_TIk08N_u$5+*#w_@4p4&YQF@JWJav?Lp~FTwxc8a(^sPHd0aPQP$=}}gHL6v+*#hP zKxlfRnM=Hcyman);~e|_@S?VhaC04QHhGSM+lsAnb-X4#4UfZ*$E|=n$l;cdehc~s zDfbHx7Faoeb_o56enRrRNEyd1{vB)ETYdhbWCiWG!!-k$cc3OnxqWDd34sa3%|}bo zvq-q*mRn){tK6cM>E?B~S)NU11?ktLZ;^8EvD`~OuVNAgG1oz zzhwwU5l?+L-FydE%h^$+KNWRF%9U$Gguqnd=Au{8^Qa{Y+8r8s+|G8)rO%7xmQl|7 zM9bNiq))kt`-G5k->}?P#GQjAT){RKTf^2~@v($|zsLLm*Hhup!P{EOmE=Vn51)~~#t_~Cjg-qYHe&Ap z;)Wp!FSA|ExVtEs@4&MsIg}760R`zD? zy}CDMDzID`H-&}!8|xHs)xT>=|26s^DfbS`J@gLVC5|LCV!IA*Gq`W@jT`mD@7)=r za(oq=(#?Z#wfr_E{Z*(BQtn90-AG*9LdLkLJ6ib_?IF$-=4RjXEoIx%%?}QDIO*r2 zrAWE&S#HLij8{=hbP|%eO(_y?-7=3a&yzL659NPz-`;gm|6WS^8_)ox+`lb%331EO zm*^vuMV;7in#WB&-{We%$p0tZT;_29A^p+As8>k2iSh^a;ydDgM~4q*K95>5F6oHG z-gcjR}31*2c586JIRSB9e z;A(j|gY?pGUcgqlH(2id#LY$$9+&+L-1Pocu~|Zcx0z4k-~2$(Bv7tXBB_meiuA9b z6_SrQ8TW1W_60s8Zt`J#vxTkR&ysz(=Z6Kho!mxR={LhEK~vA+ZX(Y=sOrcl_fUSH z5RmU%rV(EY$#o2O?7PgzErxp@+`LFut~HY9YP1$fF%WyFc-*Qh?}9msZ|C2EF|Bu$rx}!axp2hay^OFCaLyJGR+ViFJlZr!w zX0gM)nLOjrI;7mgY%&3! z&~_pT(kB%&p9t6W`X8}bf}XF`BZ6iJTn*X$A@>9vZS#v?8+qKS?)mX3J9pmY`N)Lf z)W1GDt~rMMtx#*E_MKtvyOg-TNWy{%@z+Je)r00@xO$%YlW#B@hLn4~@*FybwFIQxn=JQD;{Hap#-2;DS!6{`O0COXuBl#~!-I3a- z?Ma(9Nv5CWcjj+tS2u9%?)S5Fe3Y6QG)3$TtFwa=0`%5(4ADOfuswcMARM z#v1<}e`@+YMB36 zf~iZshDc)N{M#y%`1LW#X5z)s=eQ(K8TogRU(dV$I3wR_hVeH zd_Sfc_DX2MHr{m$b9B(0>u~+=$8foO@;(op=NG{(fQ!2#p&fQyfbx)@ckv_h+rU8L zZbu`LT({OWPHCfZZN1m_E+-r`vmEY3^2|lgAwTy6;=V;2k$m4;xa(L$5pKSZn^ik# z-gdbD@3E*K#NNI69!m+_ZyfFpY&qoKfT@rC_MT5%chn2%eUUm}T<7ag%`ri9cz)Es z`^(-!xXm1H$9pT^$Kd**5IcLaU&8L5Z#8v;=1PYbHu-dHlFF- zAF6)X=<`D<+>s9V1nhCI=ehQFdN|RvxAyMt{jFKY2F(J8+nT)bxR!rh&J!^Z_p)&9})u)ny)a8H4&?OF9UmA?z7_G02*eHSdJUeH_yH!KH7 zSi!lTw}N*j+ww4hhC}*ZLSPGVX1v#)9nQ8h3wb51&qzJiAoH)t^Fj@RW`M&j`iymR z3RsYQQqF|iA%Zo5huEj@^X+qN>~V~6BkM_U$HLY2Yzp7sTnI4ia64M=eD)2g=KW_S zY25Zq?bY_o93M0f$Kcj=xaaKyHy7?}4!1tMC%>s;x;WhPE%#aC-aryQV_TCORaV;Z zk>B3p6N2V*$G_i_e%z`=vxTkt_fE@gUc~c8NW%4OTb^Ug#;*T8ZxR1y1Ssf=!WHI?eg@bePlJ~zDG*KV06 zL31ixidQ5&4O6~d_bOZEvXm(y@C9+dAPIl6ja8mxo*~blrZx?lPL92a6W|elkZj2> z_BM-haQnc`wi%8gZxeK?!#&+{hY~jm-HRUXkW}e;hs8D z-1tAnu~(jJold?sY}H;&i;NTEJ=a>|>(BE}ru~Mi?bg%49z#-RT`uUr*EN#O>k>(j z`WkP%R08)+#}9L{^=0${62$%ZH#b5uf$&7ejpz(?3YuCs`rPPN8YQV);)jdm0JE7V z4UGD?H|g(2#YnkJEH`Ho@3}$)P){`WGS)kh@Ul<#)-{B?lk{aRgC=KClslgE51~Ji za_xXNaO)JtVCa4{4#{)mDM+{}WZQK$znx zJ2z+w9qwJ^DISt!rn6P9)`Rbe`yEM0n86w%>&Ux$&NZu3(7Xay%WEp>PwBz;Fxe{i z;s}ZU@Y6(dGVu~xv30+{tG>|ouNeXkR&?+~Tt`K2`&HqTUl|`|bqShR;c7Xn zMf&5>sYtn;;s`f^33M*;m!LL}RPG;AbG>z0o$r;v{R^)8_Zsrtj8-7!9%Z@Ri@Bc# z%|Jz{10D6cL7rcyp5(QQ;$P|ViZ2bCsY9aNEu{b7tbpl=l&j^TjJV&>p|jbCdeRou z5~>pX>5(0;*{@+F}Q>81beE_wO?V#*n}z(@#OPh0_#Fp_O?2gV33 zJ+81NNV}NL(oIqKps6-AdftjiKMy^Dl-oE$GJ(H|3(n!a6X;mv-nZPymItYCa^A|W zV!QxX?LD3J7t>6h$yT{tEcZg<`XC7d*p^d%{m;RRy)R4sygF#|;A*&)^mn7Dkt}m9 z!w+6HHp$iI^1Ksz97(&-Im7co;qghP_}ZY!cQ_~1Pd1;CZaosZaF%=PW{J(%cLs9D zSrz2J%gO&8`Q&{3>f}GeGcs`#an&BC>|jHE=JS!zCun9k`Hy6OEfhxj`;mT@ab7lY zXCuik&!bDo?;A8vksmW7A)j>}87E#yI`OaAul4Oo-fJrBJ`&F5{yRMmuOxW?UdQgp zxEAia4);=cy-|Op{=GUvGF3+rHw8V2TxLsK7KE99UC?~z@YK$^tO zxOVJf7Qp)nnR!tz-L{0l6~y&Hx1jzgg&Sd};zwDpEI8R4f4uoW+n?VUG_`L_^q%D* z^F5@02t9_>-U}jF-or)Q&nV>)uGdWCKJk3kYmj)fqxHf0R~R!9Ka}(jnq0VgzN(X_ zK5B%N+rx4v6E_D*C}At-y&2`kU0=P$p0DzOK{FVxwvUTRzlrwZeYVOSZn-}Z_Xm<7 z<6OB8uYS<7pzF3dHwDdHhr5G($IfSrjFc<)oe=`}KT2DVR-=_@856a!7kPfj?`*Ft zV3U-uqQOD)r{muSk8xi#YLAq=A%Zo5gSi*uX5#NaJ)TT7?XXw-wJh77-`9q28efzT z37X*TQU8u5&+Ec`Jj#{JtAxM;;$A~vp|xlRw$3Q0?dC%LGf#N^`!*6r>@5tMGvKO! zk6b`KMfH)|OVcVLa4K<^pM%waiYi7@*wTG_#t%!^If|-Mj!Qqd4f@Y>;R|)%{ zLoXop<8o`)?EGZ25J`}As95uGwW}EJ({Q!jlXa+9VZQEgzp&iBS%<2CyVl`Kxsqo? zS2)~q%Z(Un|7pQC-niS037UfnqvN+#@IFSLI^3@;_iN&QM-u*K+md#~U!G+ACa)CF z9UC-_VsMieMg9BzK5&c212_UipS5eL|RcI)4J zgXST}4@bb0aZhcB`=_<{Y~s2i30JXQunYg*jDPdT2hGbdxP2XNl2<(fd&4a+;(iFY zS@!rQ!kdLk9PVM3yPmjTQJ{o-5ZD&C#;#LrKWOW#+z-*8DGzZ@q<))G6Sd@kI zyw$VZ%ZR%U-H8g&n$x1(ezspxZvLd8Io9EhCH-`?04euW%PlAFH+0yOv=L|-{#}Wr zEi7{EtuF(=`?%i(uD_hsB%g9GwA{U^$GLDP#o&e=?nV2+Erz=|2Dh%m?Ys}%3b-G^ z4cqb{>-Ex3)_1sFEO&3#>+_}r&E^=~Mh;izPlUa?4p0X7@L}AmX6?;_cPeV>aPutp zV&bks5(cns_Y=?R^zzDs_K#URV3`JTV>}?(%(EffE{^!mW zl&j;}BDkkG+&Lem$0W2|v6apIZU9lf!MsfKJZaB!|l~j)cJK zTawKz%YB=1Ry=$2rUgw;hdZBq&!HC_?iQ&(a90xd6OthJ$;9e6bsQIdfcYg{9e4gt zzQ55wNd22Cf51KMDb{|Fg!PB>3BMH}Xk4~c)BjxfM5($Cu)2wBo*61`ew++5P za^FmeZFh8>TsD*bmJUm--N648$Y)c?l^~A4c-N)i^FZ;u>!-08;2w$eagMwjPpdwl&#jc zvN=Js$l*>V-y-xBQhU2t?sDSZLlWe%fFK7ZIqUAxk|8uyb_JNxZ_gJ`LFRzjQ;@}T? zSAoN|*Yp0{*GKzh&OKu!#!$bbUb+>yj7nWbD6{a#&YwC z8-*kkv0cNQf4;AMI3kaA0NVA`$AacexY|zMPx>WjDbjju7hD5h61Nda*uvI*Uxv0l z>fhYQgXRXf!ANRj{vrJ#i+RQXDVI+tNCYH2_N_{qHw!zhYXc*~dqIpQUI*$#% zz#2I!Kz&ioO+15ugxhYS$9<1}sE~fB{Nt-T8yBt+V?W#pqNjI86fkw18@ zwv@PcP_-EAAz!h6DIu#gXu81Dal;3spR^R#vZ$R`dAvZISGfN28f#(bNmN)Rk@tL5 zF@=dqrtE9)`k9Oyt973IG5I`_V#bx4n&*9b}oB)!4AB++T;M6}>o>KO+p z$6sOlVda+n5Hu~}h9ge1Ia=ygg@J~T=g~MG= z`j62MNV!cdH~med-@Xp(C+KMnP&fmy<#qq;Mr0v&OL;hlt#b9dD0#&7 zM-qmz-9S0pZvE?7>OGe;l6sc9C1_f~a7w|lD*C`2RGVMZ5{3_$=bjn%Y zj-YuFu7=x>;XR#~CYnLylUO-#3?(Ea77{lB={b|ga`JDmb}fK6mHi9RGNg7LDSuF& zHV~JzlIN6ADq7u!?-#Z5%F_(a{YVnYb&QkYl51f7<7Kc%!O(uDG$F&>5X0UQ z@~ORC+KX%N${6q)mG8oBDXx{+IB$aJ0>Z^ zY=Eo%Vu$>B@A zkaJ83JVM-Z^d8RizaVy}cCyfe^QNbOCg-6RA?6ZZ&u4J|?6v|)V#$@R!0TOQP26Us0T!4f_@ybKBhrBW@=TL(9p#*N)Sg-tc1T+=i>u5VtKXkPAj{lf@3D8@p6eYLixk?my z#{u``4aZI?zcNn9JvPHMhO0r#Z}m^2_Fl3Zduzt9w*u}3aP_>^hSw6Ei`3o%YwsPz z6{Ba+<4EQ^%edYn=WRrpH?Gn1mRB#s^mVwek^Wuu5mIik<$h1xc9gV+@ts`{(RGVP z)@J3F!5wY6(hnU>o(xnUDR;i*4khkEvr_PXtQNrMdYNDTk3Cm*LVQr{li zjelFl@Ne$%89dYDwZFx)@H8h65O5mOeSL~Ir2Huxw15$h2TYKw#PFsu4M`xln z*t-!)c^PZjYH#VO8RkZ~SsvD0O!{8v2Bh3>mOF~L2hbdp@ho{lltQ4^vv%cirHRvUz_Ue5j3%+80gpT@}{sAqcd{ryqMD^iWO4bB(_*0*s%+00! zhpXWn(qD+WAc>Xo_=>kPu@`aq$i4rdjQodlf0p!15^iPx*QmiaQM)oIXM{kHZy772 z@6o3y^&k2%`Xuq=nh9RL*6~{TB zMuzt~&F4K-TRC_23oGB(Q$8reJnwKr8<}gPlaO*hwA@>XyAPG1`N+J-xQB78*jeTq z{}kVnVX8BRQ$H*ted5owZ%DZnmV4qaTzf(HqPtKd#({O)dcN)2#4Bg&hrHV}%oMm` zIT?g+Nnh<(?q@;DJzp9y&f9R}rl3XW5wx8-!2;}+dBF(kmDsK0l+-&j%rB0;?~?vk z^cPYtpFD_g8&z-|=mOLM)ujAZP=1A5;rGL^408;>rGDr}`diRoq}(xF+aqMkG`sU~~q}=B$HAzz-h~7uf9CTZ3&; zYu>l&^Y2l0ynZ2PBJIQEXggVx^e3TaNV(@&Zb#y-LK1FZ+o&G>UU_BzN_&<_dr~|p z!!(1d<>6M+k49sVa=TgXo7|uKAn_6oZ4>`GY1ZTnbA@B?T=G4SN*!(=%l(nKEhw-B zHgeaYX4rmL?|&@5FT>pI*n24HuS3I;+N;;wj{75Ea?s`Id?fX_v-NLX7;br}n3iFF zbh!7B{#o=hQtmC0BR7FN{^Z#fv;fVLEq%H6=j-hFQp;J%gBhki*D2M%-;zFeE6))l z<;wVn5V+Z@#08>eIi4@Auk=?MGMc&%=*p@S=+-cM9pt&}rMF+|xL}!VT|W zEfn33ZbmYG*Y(adPgZWvN*86A77q6d(kJ{w`-0S7d2fht13S4#6kUlfL1l~+a*Dn7 zH+g+!|7I=DFoPZLY|?*;+Tt1I@`!wdo12hghM`B%Ec6ZBesFW}N3dySd$V55FyA`d zLlaX>fAkR<%<3E&YS@ z=5Uj0aK2F|r2dunZHc{45%(VY3av%bKD4Ai?!b6|zHfY1yp48!TGS7nHr@knfsb3bgYl%p-2^W&EybLG zl*^^Ph#zhuZX%kFj{GyRQoFvy$1UEOVZL{`>W7sM_c-P9o4fMERv))0A=4cBK-9l~ zz}txq=0hfG@4=S)#?C}jhxmr*@q;O|l;8YXw83MzuIa1CS&5mZwZlDyJZGSDkaDYA zu6(zwH}N+j8AmC%gz~%0)(bsv<#2Cwxax<&4)@4C@I!X<%H^RfInzAkaOcB&5-oGM z_R?yg_Y~?b@n55ZntS%<)%NP~N}s*ORWi*ghx-e8r2Ou1xQ96QHsr${T7KPrzQAX1 zQ6SUoaJcG+Z1SsrlN|1@%EJ;LxA34$(}4FGX}j}FbG}&%^LmH-SETszU9Eaa<}<#J zHH3W)`7QT;sC7O+l*8@faMj*n4)<@%jaQGi`s^+HU#1!EaMj)thx`2=*t^kZZ&tNT zv&iAT1n*t6!{KhQ+`hbge-wHEO+?b}Y-c`{Pd~rh*B_T1nrS|FxLO|GC!e0TpBz8z zsyt+8S1!M$shQ@G8UH0Y!yN7xj=j4oX9YfcQ>$m1 zYaOnhx3&)V!#%LKTCvyPYx|H7cap=^_V)sZyISp~o!e#m>$A7$$V~H!!&Q6dIowzF zz}}iZdn@2>bhuB!TZ-OrxUX7nIdMOs-;uVH@{abYw3Cf|+~TxMlks4*JnSG(wNQ$w zhqRn6x7;g<8;T~QG05#VxBC209LzKw9IpD|Y4R!eY0Hh*KD6}NYcev;K!>a4>}7}h zjOE5_AF@xaTrVmzGflC>ReLu%-1&Q8Z%3cKxuHz+j>FY*w$tH0s`kbyX9Yfc^J`_A ztqxc1?OZeJ-v{@=-flj7%ita}Gg=u{$iH{Q6! z$1Sg&X@)pl^}`PiSKq4=ublPs`5~uHrkUq()!r=*_uf6QH~X~8ZxMAD@Ew)P7#=aq_1n#$R z!~8AbTzCV}1c%E~sf0i|aa+(KVde@bg+=*}G9O|srssOk53=63Q&Kn1G-nn^&zp{` z8!JI3EW#8uGWi=4!5V}#%q7K`utm*m1!P>8y4FMgW+9W8(-9k z+S}i9dmhJHM!gg>2=zv}X$fZZ9myu=xGE;ErZ?aG*AHjW&(DtfVOxFXPz_jXIX=p@ zmmLFVHBK?T&>d(Xl6mavQM~h(8)&MXRCyko-!0QDak$H~Qp{@9@T4gBH@p6@k+>6@ zq?p#|R3zoB2IsD9EbNJu*Nse%O!JMyRsTLiK0R-LTW&o6X1AzZFDkCiG)K&d`a!uH z9PZ{l;1>9}<-IaZj>FaVp=Q&ly!M+QK7^A+;SHYw-T*KA0f9MZ}o92`ed5d9IpD|Px9$``)CjRu*~O&+`gIS z7l*5UsM0LT{df=jklnI!dC2LPX+m?O6ME5ByNzv6*p#@{ywhEk53_=`uEK}@WT?Hz2*Hg%}j@@e(39PU)}>h zZ1r)A2WFZT4p+;=G>7}N<;JTQD}Cj`49YZ{9j>@gDd$`}E4?toUZeeGXUsu+8BTo^pS>kRGR=u_!;!4Uj1yjS`bDJmt%^6q3A8rN{^`6EaPmN229H{qT;%9k&O5Xyo%l*2GM6X$`%0;c3{$UYQ4&X_=<({HVQ58_YpL?x}RR-&lJkxrU)KmaM`3B|ffR_fLh} z39hcwYJFSnaDTSkc=aurwQR9j?ai7_f9!CN$zg7WE=1~w&6fKpacj_z=qu!oqw3#T z`TA!5%uMruY_rq+)XAXAy_}{Le<+v{m{yCKPT=tbWnTN_1VgEWZjr| zui2hpM!e&->)JkqpU5;#;OcqPayFQ}f?LK8`zoA3ymGeLciwVJGR@TvSJz8cI9y&s zAR!QMy`f2M6yR9SZFz3?dTk{Q8^k)`}tspTG$ zn_^m_Tyz!^KbV79o0IFC>nqobijNsTxLneYMq`lL+s|?zC2kp#@ETj;w&dJRWgeh@ z&~Zt44dZo(`!?x6MeC4q_5B}z5qIPT9``7=!p((SjJ|p!ZcYs>AaS zTxj=mi{VaixIL=z`}Fez9PS9q-JACjRKQ*DaEHQ^b?}i6SDz=kkGT0r!jo*pzdiA9 zEI$-~mTBrOiuytAUE**D?~A=~2gKmM>Tqw^2X4-~O!GY4aOCKC&j7s7(C-en$a0%q zNPR$;qg*88hcN5EDXjkvvg1Cj$7Vg(1K=`Mh=iL-zX+{GTFz!$?x>4W%oFHM^fIb; z72G2d%!Wk1(>uv)&-8xUysz*>Nz}hpJF~uxLP)th!Y?7vp16yVgsa%fdGohBTHngQ z&NL6g4M$Qlo+bV24DQ`#t6X`%C?PP)GUY!tTP9R`kF%Cv@q^5VO21*;=h&<5*-VF< zV4q`&H;($o*PfMsmua>*Tvb#k6 zaIodZ8$WFI^>3v=GVg{P7N-&V!MhVpb+|Pw_Y2}GP~yd`L$HbGLJpU;T~_fkpr^->~0=g0e7uqua@8D z4!5c0?oIj4|0UB@c`EAPtKj9MfeyE=<=#!4hMldw`R1DYT4>EA^kAmuKy+B1gt+6Vy3;EAw|r-&>FRKGK40&$DEA=CjW?ek+G>D7U&p72FuVHlkOxpFrDk1ZOV{aaL z2B4de`nRFwK2F>+B;ifA@%o{hK*&_*!bdog+L#YWFXO&%*($fSOGR%Xe1dy??0;ZZF4PZ6_N$-0qfZ4=J+QT{~G0 zcbvm*22aLkXE@y6mb*P8*<4`lZ8*Aag+@A8&)&$@?4*FDG1^6K54ZM}ZJ0`6M4RKG|VK)y-nF^7AB-(Zg4hflK9PR_;nS-7}%Du^Qza(xeO6|_t5o*cv4E=1oGuMv$lv{XM z$eae3VPPcHB7L^xLCPIrxkHH?g(OU6JDS2%gg?a(8phxkxevMc@Q~^5a33c9VOOS@ zHb}X8e|7UbuHB$_(aWfSv3gDBZ)MC|R@>(!?&Ln^sc_3OLgs$B;fNJ{L*XhJf3kjt zl-rwhgupSxHJ+Aa8nc!6Si0}$o-xa_dpHALId4UoA@e@m+(=d~3zMfk8j6&AjJGea ziMT)y)~iqu&ES}G82=XaNi=1)-PwT??x_OzsF2wXSL?B~lUI{xFjDUEmK(2~-0Ev5 z3&SCE!r~}*A-osSW`}#6<@UZh#oUid(0nBKm()jc&gT2p!NXL>?r?Lwyk;BeQ+ncG zr1qX^xebVGi8`Y8XhAqyj~7_~e({SjZJCnh9UC(Dz?Jq!!X>1?2Hk{|+sWG%7*E`6 z^bC3&)eJ|u%Pd#Evylq7=(v!15-v$1;Wg5KfIdgcy~NuU_?5WCUepP6O_R#wsFjwh z`4N)gMtq*1LJ~6B4yDZ*>l^RLbJ*26Z>ACL zI$UjkYm>eaIu|K-aD>ErU5J~59z*&)2p#{9u=9&T+y3UA5HhdA)q1>wJZsQ8q+Gfi z34#Azn_|+CgnDeB`H1o4sg>Ka1=Qp5)Z^k4L*_%cd6Cq-UzPN&P#dIN+$bS%J#htS zEEg@~sCUJcz!{{&+tR21XUts-k z`uARW$Z8of&m9PRPY;em_ghk^cE^bEuHeP z#QNb1`sbNa9@>P=$OB++R=bc{eE_&c?HTtijkXV8aD1E54y1mVYW>i^FJm(FAez8S z$9i{XoXT-aeHfeOt;@+8w6yEFXNOEHxOraQ{nkE|oD(vG4*)l{W5_Iq8@Beo%Q1d} z)*|)8bKbtdAH)T&^V+jiws~>-3u2NXL)>m?@v}2=96%}v&gz8dD@^e zk)H3MXJ_Cl;`$*8-MV_`#{V6vZS0eNF??~zJPnthj)a@YSBOR<<(_WsmG838Abt+I ze|+Wdr&pWp*{jc4m%#npvG+0ZJda*P%DusIKPPT8l5pJz-u)OGcurM)E8BnV?HV%w zd(rcQjCXgCFL*tD9#ZZ&%k4|tC^QXCM6!-GgR+&nBf-?f-g43@H}A5L$%3n4KIxxC z&!Z$FrQA;-y}ak^b>h~eZ;|^Bkw(@BYIj`>O1(T}@~pkW-bkKJDEWq{y>+dvKdUIN$inlbXd_vZMn6>|Mc zISa^l?${>SIAs{0JtS^ zCmsN9_?nPebO5+Ta6j~M<-DD>m*=gc@4T67L*{oMcYmC>e7K>PqvfmDkTMe(j80zEZ^$D3FaKlpA3ERk%J2=sdqaE;b2h!H;y)1n-xjTOWymlCWLAtKleD|PD0seq9M?6p{mC?r607Yb?L*>K+}N3pjoJrEp496?W(WDT{cca3r~`8C;=kVNGk-{s z{qfqv9Jn=0qva`^^exb74ZQECw>ij|9R5$J#FaGh+Lv6oCpp~K_-Nh==DlpiUg74k zB?Rsz?r9|9uf*i|-0MT;Ot|WYW#p@Uf0B96;f{%rOkf9b;Q_2?qXx*eckJxSpUdqo8nYnPoUS6|~^oawxhZQMz zwdM9CZVpC?Hk@FiR22E2|pkTi&U{823= z_r<#Q&ai&aexYyk&t2u;~4SH8bM2%IN8B%u~IxmR)?r37M*|M9c4Ez!suk9Bw;n?{?xeNSb)|rWS-u zZMa&_s@#MRQ3$EMms{?2#0^7}&=}-$o7wWft9l~sK<;4HQyhEekv^62)+=n4JK1t~ z$iACBo434}5V<~AHzW4=xqL{-bcSo^3MNFp1zoF}mTZ-q$T=be78Cao`W^jJ<+ekle9c|7nQSOPBn?_s%B%ul0?bxd2SIdKNBkQequs-4V zLED`c4)-d{jR5UGyK8q!;XdGS&w%&-Tg?9*Zh_^_B<@)xp_FaB>!0~|hD-_Ea3nS3 zX3|T0_7z+8?<~u$U%<6m)D9hS3hVC;qTfMSHrw;Ftdol$@`r~^Ib1Dgmyk#5abLE| zWw}K{K-NV^6F(D8KyEo(X}SNFvk@Wl7hEk550n0(tE-w9*eZ8}zAlA>WEU? zFn>gH&dO|k)AJS{6*4Ej8s*+d`WG7UeoMB>J;WR02bv6Ky&v6xdZ2YZnI|FP_O$gv z%UR()A=3e_*3glpe;&Pvl&kIf7ei9ah@s5m(8Fl*XRPtE&Me&e!zw@TP(G1$M!4aK z3+c~qW8DLtfRuZ+t#6kS*Av~0u1BtaCtG{}zm4A4K`tm4A<5pIgpW#^C;2-{1~D z5dMWb`9S!08rMG^dtbzFZ=+9+OPL*4@+v&ymeX!0~d zEs&pk8FAO40qDcomFGPhEmy}Sxzj^tqhqg(_3tF#SmftEM4W_$Z094l{BHNzTLL#_ zd9?frcL{l3Lw@d6$9r}7W7$We;kIYh=6LO}+M7BfWa`1y_TfwN?5chEk$qZzch^3Y zz-s!vukhyOk?7gF5)wu0L8Qdovd-qrSko!=`yzOxR!N1SsR5gd(;gz$q z>4%Q;&S~Hp*7d@~OK8B>owrDzEJ4Q)sl{BUgsc5#6Vfk#Bhg&saAk}~2s}XCBJ>(s zhGd;r-y>PmmS3G`nb{%wtmt|BnDhr1a?KFQnHPKSieOFP6XJHD@STk5(Slx-3nX^d zc)*)yO}G7V=_4UC7OwUe14(~7x*I8%rG5#K_4#Lse+hN@t#W;9y~TY2>yY@NrL|Z6Q1~?0KRHiYFFqmtcj#xN+$$43dv_9d@JOEhK=;mI zFY^Fd_m}tTceGr+FDvhvkZB56{acef4N()M+`g8ZN8CU(6ut1Z_uPl}o85f=&3~5r zd*Et08%~~!;ml;K+es;U3~Yc9=cl1wDgIcJU(rR0<%N{ucgsX;0#CUS``BVi~{BT*`hE_9>m zqS8g9L@600-7pf;%|y{v)72pLe}B(j-_Gh7c|5P*f4!cM-LuYG@A>ZUUbns0+I!y& zSIg;7x&j59q(GhX1ir^21y^OmFed&158 zjByQI{%<6#8qPWqI*P==$?^HoD|R)@@PvT)v~wCBd|0-K$%kci*Gj%x^23PaSSQ(oaCsk#cuidsh;- z4ty?KaNatQRxn>gd zx|#2o-*oIf46n=?38r*Tl&kN*O{WhJ5-;JBD^6|)JZiN37Qj7&`+vP|7m=?GdePzP zd{+IJ*n5FGqSmN6FLq8B{b@{Et&{zmvYGiIhdYV%AE7Ui`hib$OYl9mD&Cwuf_4p6 zMSk9Yu%w;W&W3II)$3-yXC2AmUPby_(QQb%T`c!A;=V%%(ND;2XB#y2`Z49E|4`Z7 z3pa#8Jpff4NgIoq zmf2C+EVlk@1gAdfTcL-Lo@W&=pYJ2$HlqV*4;n&SD3dbT)TeFV$494Xgy~^TxufQ>CZ_3`vrhN(a{y;vpmm+vdduNwmZ#LYA9d4%# z-a}r8c^$ao9l0*uJ$vKL%gkjV>8H|dqnq{%^L|eL%kGUgLDF1;)GoQcgv4gVb!fpi zCpo%)OsCG|!g&#nwnKN5=J94cAIwqw_5yb3`1B>>CLjs3U-H_a893bi&d-DV(MbQX zk9i%q+J8(TpUi*1<8W(6NX*9(x509M&*N&t19NZsx)*h8wb(4#GS873SrU`au{3U#~HY_0UeV70G*8*4*lS-)mXSdsxzn zE1O!hTN)aVWltJvjpX`_#=mkT#CIT0Z7d>R6Y^<$o5gR#(91~dk$kN^tnVY@K11t} zJg?~bFEgfHEclIn-LdC;^6WsrAt^VnN9{>W8ApGP>LQtcZgexx=pCWWr96lJVBW*p zSLt-VLq?hx(N-k(38w}}f^Wuz(&ma+ncGKCpzNm@7mQ+jkjMM+nP=p+B9ZSQO1a4_ z?Kc}7`?iw42>pT7zQz%(Nv!)C>&vJ;lJ9)C?#;V!c*Zz~b1qEwoA}kya^00QQ!a}$ znH<%=B9G&HnYdX>|d-^KAPow2T@9#sW`OO6mcOm&cM$3_MJ6UdrQSoMj z<^IUgy)LobJh;sq?jF*&DwAjqI^6p$x70+Qw?`6soL};|Q|-+x>oh=kW{SZgIG0lD-ORf|NVTa^E1X0PRKFQD?4yCg1TA-zJXt`t8Tcd+kyF znSOK4nrM5JGKqarC>1I94a>cnxZBY^=+C;|_n`DXaSdf(_EUn}TJA)C)A`lz^f~VQlrSaeylqAWznS20`@(w>z2a~`vfS^9D?OPtHFOrr zqT(H@?%BD?+WW}W-uK=MD*DZ0xEa>o3rK%I8jaKs`z*KX6j*318jO12U#Vwe=a_ol z{?P1lab`O{&aUh?DW65_+phV1A8ab~he)|CC^rP(*~DFlEXGNJgamU9M~Rho#;!ZW-$LB-wCFc&B~PZ`Z*CxeNd6DuUeb(3GmzSqZS5-eI_piS zGirx&(ilG>>E907`%EoQ=^?-A>2Q0K{y*p?q}&fI_e0{=phEODarIuO?j4MdM2ms=de&Aq^HeuS(2$+o)2yz8UiD&wtNIPJb~ z4=;lH6-C0|tS{(%QF>LsIsNmfe_zE8cm7bha$h@>-xeSV&-~54HT6Rw+)Lq7j3eO{ z(!2AhE;pCoW+4eOkJ_9ulFnyHS(WhlO0ONruI4v4JNC{a-{0B0nBSIL?myX^a-rX3 z!PT&Y^ZXdCLSor=%BgqROyW-BlBSn7<&lo*#Kx*$@qN*Y{N|v;36Z7-s)v-5;r*G! zHpJbHdLfr{lsc4B-EWe=h}!cwX$GOeNI7Yqv5B7$_YK;LTuuRPetHeRsSii5!y(cn z&Y->Xk7lqJY|{nN=N^k}za-Ch<#M_Om-@{@$KI#OGX_mS%1yEL=NIBi&7|E#DMFy z{N|Ao{P3{DZT&y^As6n8j=hh;lX>!I9c~-T9Yx$kBw<7NfxU4qu5}Hmw_5F4c+`4eJJ*`i^EHu*La!W12SA7osA8LvkA-6oXqtBFc z)b=#DvERH3SLgEmXb2dY##+{gZkjPB(ZzsQAp8)w9 zpe9J|s%hKJSBRT}W~2TcPTn_?Zu?PPzs!L&r-A+39i^Fhd&UfWig|r z-;5%kwg+37luFIx-VljBl5d#D^xbhh$y`qS)o9h(C;PvL^^@LT6u?dSI?8QMo?B3R zq}pH?81? zB3X@@NS*~~8B(sC8^Kp=9&@XxExHa#f2RA(8#IgVua$8~`b~cG(zj82A0_=$CJl%Z zAxF2~cvtQC@qJ{H`NiyZev=MY%YAdw3->0Z+*HfGkGMyXgaI5&;(mp#GGCH$tKW=p z>>Wb-wqGWiksOt)-#eT_+&m;<9C=IP>it)!J?#?QP$ac6i^wPCceTSEYVDPMdHXC^ zo^vdTJDBxlxo&wKC}*@c+K%oTX(E0ocDUm$SLPp6-uCQGf5R<+`Qf_l?V5AhkFCO4D_(W zeb;j561NEjpi{v@RKuCd(y#EnI7qG{;u z3z`4^(c>^pP*gK)z$?uEK z?e90WSku&Yrsh)akzba0kjK=AC9*5?426Z&J+&to4XzExgRjLLG_Vx zyW94w6LDGSDHQu0%C;E)=4boO+59cFcNBTvLcb&BK5V&1@>y5-kU3CP2OW|*YWiOB zL)xw0e6L=&jKR!%JKS-kpNUo?<<7F)1|QMap}SEh&fkH-cZJ^4tFT&N1|y+ zx%rm6hPa*R06M?9*N*Erq{2GSZnd{)nBVMz8}hEXDfKbyQ1zJ;=cwFEYDb11Lc|XmWS&y?JEXkeHt?Vs#ty4;vo$*0^uEO+^=c=HzV61r76c^y>k6|RgI^5M>e z+cJ`xKAe2pQN`s^ZrGNy6~wJWKcOwi9Y=Sw<#%sV9N(I!-5AHb+mF%maL%W!i=k(b z+AHgw1YeUCrOg9q0D26Ge}~`X`Jvl4-aeT;n9^?+y~cQKTeSQxCH>dD@IG#3l)IU^ zeBt&ZZZMMYBFB>En{=MNXp-MFhO6awH0gbvlFWLJYHwY}-~?Zgb)%bCdEC1EyCkmO z=M_%%oBnVq&XI6C`Q+c-IVyL!#v zhhm4@+-C(js=ZYsSmPVb`{Zu2+;DNp_4tH; z=lIQRxEeZ=?@n|tl46@o8S{#-iSJFEj`h;s^qbGg7qS^g@S8kCJf5T2Bl&c``E1_# zJcW1(@*HucbEErOwVpn3msjo!;2wqRrDop=`DD-J0*Bkm)~9>dC7AauSJo9}ZoJ;v zC+|I=qh=mMmEkbN)&-W^W4bhY?<}9Vcn|O#9Gpo@D&3{=Jp--B53&+-z%KY==%slceLdtDxxnB_X6DmggkXuh@ zTdvxh`LW+@bhyV!UvVw{KT>WV%YB5n95fL%<(lQJWA2RF`yP3I zLn&WHxu00>v&6lN)}j??8RH~WUMZJJ4bzZ`5($`tXxDKhkRlJ{k zJ-%j~gI1#Vk&JKqhCRRTvE@wX4GY)$&EQ?p@*Dbw`7U$~Qf_z4o%=2G0cbDUjv8?z z)EY^7SZ4b#-G`X_o!_j3tJh81!Nt5As@D1__aW1X_&4of&KAFU7%uLQgnh#Mj`=yH{$)rc!FLUD zJ&=Tc9LF$_)c5y^k0reN1@lZ?%AXD*}-m2fFXw_bSE z=(1hb(kP)Mze`ufaHA^?ta%LQ%|nPxj*<#sXbBd67qbG zzDBX!Ij_f?EyVwf1TetAkmEArIp&( zNSrdP;^fHq5MmaCt*S*P}m)6U?pZ#VP+)yN|F_Xyi4*CcwcbNB^?}3fnZ=%6yA}^aC zbv5@H%{>2Sjq>^xt(WP$S#R7M_17Wt{D~4bdHzau{8fp#OOdp7?XXos{vOtUocx#Y zjAOO-JlF2zKf_BJUyt9KAlKh1d;KQxOVnRY$agKe3CVfM-@m}i@9Rt4OK2RrcnIr2 z^o=@Co^IP+^;hT@zgYoS>)Gq%c?W%fl*?8X3BLF(d`A^^Ky8uC4{vJc`K$WV-gx;m zo~eIBQXl4iq$tWw`kr-uR0S!wlca;2MqCG!f#i7@9p6hG+cVYUD>vl`_q}kn+{ik_ zedOzfl-t8{Q`-3W7A)`e<+s>l$LMIn24(A}sLlEy;! z7i8M&Hug-`A!x_)e)F5IaI0H;$C3UGv;Zkr*Eg=-%KmuN9d$;gIsIaqXJ>PJpWd?z z&tj1={HNc10ayJykMy$MxR|4IF-wB)BjUbctw%!kZQl5443*a1kNiF$@oyen-+^d5 zrsK%Z9Iozj{%^*SI?f3lW8WrR^}{-NvVVFrN2#q+FSxapkn{=9(Edbx>5H(D0-woP zT-)(dc9JV}+;5(Mr{_N+C*JHQPchQ-zt`jW{68>PgPNk)dX{6a*D*55`G-xwyy0+f zB#(@v+i_IxQ4|%`& zF51SJA9X{wp&nN3H^?g+tqTP|A{$6^eOrPm1Rtt&a+qz;Lfn^`BJL4_#ylBfSGzY zTFwrUUf%B!_j8o{qUD}NTva4N-h1q}=UU&ioMn^?m`!lizctBsExHM*y%Q|=N#b5W zlhIft^O*A88fkA5zdm`s(WC^-MMt9L;Vsg)I48lZ;i%mAEH{1!^W8{76^`zGpxS%s z`F6hX%z$a{aBGtO;hFK~I*!Wy-g56FZV-|%jN_^HUFV$@Fgb9mM^YOziu7-we570+ z=aJz1ow!mv**lFYAV1fwmc5^-XZ^7H9?CO`GtQ=7INZxge>eIMQf{3HmVHvYm`g`( z(6y*DjY`=XUcH!V%h_A?dG-`LvMU8l{a>Yp^+I>jCq0vBvN$FXCGGA|@2AA&#Fg63 zeIkmdEi;ko-u(TO6}#zw~}muaop+vYwq8 z2$&6UX+9%i5$RW=&yaG{yq|ojd)VKC+M*WdD0R2!YkWsN=w|(?^PxGRfC&~y>%jx0 zAAklTr9NXg;w7wnCoVExT7RzB-m1M?5Ax2Zy@jjxP9fiuRZE$L4!5thcP(*S z(LuBa`Kz%G!yI`b^`Mq*XLO!5uS&p7gzH&BePMhq_Yc35PwkarMW61I`-ix_(fbFt z{c2>n+J2>9fPWosY4W-IgLOPC+%Bb(%z6ASLEp2d{e${JxkYd*{PtIS&nJIL_Ws@d zPU{$ZbE*c+EpXMpmnI}do^yQwn_Mpc*SD0#(y{hEER#8&s{c)|7BIsdZtVS}`a!t= z>V6XLrw(`NzUX`QV(qPtZ!WX`Jzlot`9&=c=@$k};_p#EG$LOMl#YaZ3H3I>k>Gon zxEIi5G!`{#im$%$>h368FXTQ#+L?ljXm8!gV#l9ym z%g*0uc_^q6Fv}cnd-B|kdLiX@wA@cG=KGw)4@2d!)tw(JqOFm#rreB+1Li2)keAoI zOrB|I0a9*P%Wb}o@f3Ouy^LnlK7^ZlepqJxAmat`gQ*=bRsV?kVGilr(@cKAQMuzS z_ebJViad`klcx0C=zVQ$y$D|#FwNnHyu9XI^2z(a(l{!2tL1hh?h(r!$Z-elLpE)$ zJ1*CG_rh?%^mOc)j$$kk9uLb@y&_riro2(!g>Ky=4dqk1N{DLyHchvN9hkG z|7{*T@jc>JqxC2syDL$r7Sg#_{f7PiR|HHSIC_5jNE3g6J-tZIPdNYaIKE4WYk*p# zW@tFqc-_Tbx$GR%59Bron7I!37Sh+L9A|oQRPG4NeVMpPNWz;OrGFU%TlyEh&N_dP zaaF)`Z}!F$G#Fnd^gW!^T@o-_)W%6~@d(Y>Va zk8+T5$tuBD=@9QZLpi8!nRv5g70;v&;yG^_ALCQuYrPLO3z(Z6Zsh}sW-9qUK+44} z5$=BC%whJlq4KC~Yn~ss<^>0dxfN9FJ=nW!SP2|{+e?Q`Ibziha@otiSf-_dK|B;bur;!Z`BD`#+{TTv-Dm z_}(S%Bg9nXC#Nu8+dW=+$ZQobYaQ+Y@(o8Lk@{EMEA~zx zZaR7sT|FW3r1CJ_`d7K(8v>>*Enu1$L0CYZPtoTnmirxX+t3lT7o}HWUn>$@CpcUg z->0{xKXkZ%lKzZenTJ8K+}nujhWex4Xew=49ujWY);F;?OvZ4VfXRld^;q^@y8Vm# zms5#6_x%by3Ar3k)xV^)4VZV~YIuY6^U-<5UjHzYzwH%YlX%5%>?``6XEaa|{X;m3 zccXmB*ygiDlYU3Q{OWLI9{C5-ZAbCIg>yC{lsJ!^Oa9a1qIPKholgFWr^sJK{?rok z?{)ICRQ9)jKkd$dxvYfz`p{Qs-BFqN1}To_%6lp$qqHf1@bEAwCu zN3TN~Y4tibDfjn&%pm_PC;#yc%tMp6EmAvboe{~O_z-ae(ep^!*Xj)L#f~M|5xy&6 z@*U0#ub4=A8beyOqYCp)gn0RGSg^O)k~ztH9{X@)vnXUdkEHGBcG62dE8?i!J0mB+ypu^b zr=c^Ej4#~#iZzr`;p%uOAMWLFwO>7#JOOk*QtonVuZQ>kEAKegaw|LykC9f!E%{I2 zM~Axw-f!rr!}WXRz~_%kHVu&k*=Jl5SI3*#{R8G9xa!}gI(!ilpW}G31+yW+3I>Xt_!8_z2ZQ)loikdb&Qo$@*9C zUyHH>=10d5GVUzTI(RekDYuv9+CLpR$avGeZt7q4gLx`o5)z~KUI(u|y3OIT9Y=z1 zFmWT0gz+3R@Pn>jDp%*{(+37jHMm;NCX-(L`xZyFcd+GtN!$)3VLwNiKaS< z?x!k%I})yzvxe|mp&K1;q2=C2TsI_P6?1bdxMyrcJvL0>tAFP;^6Ev(vjH<7t_Cd+ z583?EKK$ZwlS--w&w6#ygy4MZ*f)$l@#4=%kYpFmQIF&6`gnqQ((>hb=rPz=jNJRr zJE<2^ZwufahO5_K)+>jQcbLPC_u9Y6dgVyVT_HC&lq-Foqn@|6GwD2tQ@PY%xf2|2 z>HmRS0Jl{M+^G(iE$=HU{!vmI`Q|AAWo_f@!B58j6NFNo$GQ ziliKr^j<1CshsBmW{G3x4$|*K2ap6Q2NyA?NGP#9eL%UCPy}bQ!&!SvqB#O1E;0GU z_@{>DJlvi4<`RD)(!N)&_nz0iz9qsO7BI))Y5l1~+BDQ0NwE~W>Uccg5aPz8g(wd( z^>d;e9kt8>8B{0o3pNw@buvTh>J$%S7GnC_0fH<3OA-Hp`V&6fKTaWjyFxg1Z` z{-@^z%ut8Bko2FT)kwJqEjKYK*<6Dw;m%5f^Q&kBawt`E`(bawEk;*S_rqAFM8d^k#8L;Ldxx7xwrdhZ_sQs73E|w zu0z6H7&D)3#sth@xLVFWC;dKDv2>I>-g0w@dl&tH)}zo@tl!X}7W~RwA$#YAuk&ST z6PR~_E9FbV8Og~ejOrn^cb(;C5%(gRipHUonymj{L_5p;UXJzem8Ig$`PA#8*SLQ# z9ld{FO!`&mGo;*eyu$7Kj<{_|!d{MRXkTOJb4Ko^9VcVX#DJ;ia1W6_rA)G^fRr1u z+#bYDLW|LxXbo+^3{F(eKhN4L+}d(}QvxOzuKMA7(jP&;Bjw&;xxv$t&80{}BaS`j zQ*>XMuqCJ;GF}gu58-M*(}MKvP;aE%M=ZD5`gk*o_<2b80Z3UB-l6f{b=yuR>A&)( z1V^`UuJRB@3H#i{aS!dTPDMdm~`pgsb+3PUl=v zW2D^Kmb>ea&-5k!S@a}w=P{a3@a&awk=PrW#d-x(2!X3kq!cok{u4!w)%m+)q39-bwnt=xL<(+99m(E#f{x z>(FZC+FRt*JgKe$0fbA4?8(3_bl(!eKk{(O&in|-G=1*H#$x(w(Z%{ z4EDrgZ)iclR5~r{-%+F=k6uH{t!240iCc^$e8h3~*<{Wa47~{9)LAdj=*DPe69j?}kFnOAwYmstq zwcI|$J%=WuQOGT4+idwgLZ2o3V{#YKuEX^%Iq$3{y^QNW;i%jPELYx-@GbFMQ0%_M zS~2A}<-LGeb1N z9!W_EUE=L0U4MF<8I6AnKVlz)!>v{!*<6L1A?3>6ZGx{iaZjL^(R0X8|5hEPV{dDx zJk*!|;uGe-9PX>6pN$qEzy60l(UTG0rLY~EoVQG=P)Wp z%57!2)y_^fO;Ja519Hn*g>SufQp;K4r_6TnVIpnM9wEJO2Xa*I?UtKE+$1DnCP!%> za**`%TIaOBWvmRC+Hhmb?|g@Qm*t+S{Pu_`X9aNYakyH3KXJJCS#HEo{!>!n@xaO~B3+?{;t z-$DO{ABM-+8(PDCs>4-3^mDk+{TF_i5W@|_ty(Tx9-e_W8!dLY&s%P}bLfvzQ*;%o zN1e#D^{u%rXIhU#Uj$4uxM6!yI+0%HMIYm+epqX{UlW&7iS`!-kXw&O+3`cg?R*yo zR?1fa(*v%Sv)f4D4?QjU_+9R^TGQted>e_|j}p#JHh*%I`}ISsy|Np&*G>ER@Hfma z@t$?5Z}$T~hddq7vq-spE%(avlFd-`0h*6$VO!}^@$|n5rsL>D^A7b_$2)~vxG#iT zDPj`eSk6o|zmsPiN98_GdV+5Hl09wJ_NR&dn5WZ8K-CO4w&cRN?`fj%p>22=m(_df2Ft1RjO`kvT1=jqI{Sw z>D$w=HH*G|j#su#_?LiLYCaK;ff~Y->!k0EcdwD!r^j^9G~R#Cd^23V zPTBBs(5pz#zny2N@0?Jwxf$Ju?nJUrvzW1nF#Fo}OWr#u^BAE60dvk-_K#ri6Qq9{ z4MlqXOFVAk8^movyOEs#!Z$f18kQxLtHOf;(*ch5;|ECdCn|G()V{dW#UsXd5pkEJ zCMfoM4pXgtdfoF5v5xQ9cfqR(rVaVJAhl24>rF`PN8AYXDsty6(rE+J5A$3B94$XH zNF&!}K1cOmCu`rj#}dsdzSS*3#+@ZyA8k+b;jVJHi{Z(A|1yW$-E!r7=xd0Va2XOC zb0`Sze65ztj3WW_v%}SS^{>gV<>(cUo22vV!i$|xf6SK4lwSiTsY3LAbSs=9lu#vl z{t4bXs_z=&I-@@5J|yc3`W@0WwhhsJaRtTfyMe2IeTMWS(5p!OTGnz`6897O9qmVz z>a%|vNx9q<(_g3j9x(SiT#9RCJYVX9D7S^>ia#~Pj^~9fL9bT`?jX38Y=&fb(vDPc zxYt>3CE{uz3DS;~)KBUAwap&^Gs)qG$tU;a4LPbGuD4v7w{K#(*__y^xOs4w!qs|p zE&1A_n;mXj%YA~lu}H#Hj-{_=Ux>6(2cqqsuG^&j8892Ie`O!zEYiP^mLawG70cZ~ z+(A^TDs2hJ$b1TA;(o@*d$?}H_aSh$gXir=n4jgec& zj@q)|T{-3kDex)B1LnN5z4F_i|9?KbMyNSbdna3a2NE|2<)ejY2V;!1nx4I7ryDaE zn735QUr~ZSzewb>j9L3)3_@L=z?JdN=-@x0A4j{Gn18eV@)soE> z=z5ffq`u9dzsh)yy;rd3I`-xz2F+uRy+| z6*R9oT=hdcxax-w|G^K9O7KG-+)v<2zmu=({b}$zswf78b??&Q&M`bSJZz8exZOX6Mo5OW; z+lPX(L9?m^d(W1-STl zSwuN~nzmE885aai!}Fs4{l8l8N~sz&ec)=i{IjG;``ZtDwA~qny;9%O`K=Rj`!?_F zqyNpYs7$yM;o_D^Xwo^!41hThsUMD7KTIZW0a}LSyB|GTu@sW-`8I5?n|{YGw_4Eb zf*Z2jFUTYF@9Q}#w^aGakG=!M#nr~Q=#RAwsOdLb({IZ7bhxc^KXWa`zxfvi&1IFN z{%t^<%(tFPUgh?;T>GaZhkqKM6~JxpaOHb*0hl3&n{B!By}9Q6EqW{% zL6hZh)!wQOci{hEZwT&WxZb6qPQnxaHgUMmTJD3y^+(U3!+TD)cY^h=K4+g+J!pP{ z8}?4mj3Lh?G#jaZ=UDDC;=V!~P)@gm$aADe&*B?H`9%N-gQf>5j1{(w4D84 z&C}$;ZB+tyyJIhp`b+p%^FN`BgJvLH_3vJIM^ULuqkj0v`e7yO+m(s0g5-To?)uSe z>)#Xim2fA+O^cYsH=xLKIl2m|f45rhL&S|iv(XfkPv55NT}v!i_i-213Yt$HKg=in z=jeN++(VWd4zmXf-HkdU8TaY>(Kb6DDC^cz-%>6OnuBn)zj&7PGM_!3qjJwZGjcM% zFNiBd2heWRk$OCwc0G%^iZ#|=trt1rplK3_mb2eTA72OmBIRCbx#tpB6-l^+;~Myf@0x)v$7ndRP3+|y_@dI7op+ol+Mv+Hu*9PSL# z&qqs%Du^QI}kSzJ&%Sx zkr;XIr=z{U*n_?EIe+Em)(e^=a5d<7auj)WymKquQ;pA#S|6y7<^CeAe$ZSL^!!_? z6yE`acNoQA7PU9S+B?1;>pb<@gMxBVL1)^Yx$!3BH@;c;`N{9g3^xs$t5c))c27$( z{>xcsM`~}5wf6;n8;f$0+sBoi5iJj5Gfk4ogZqHP)$#h3aJAoj-g5t&`mVEl&P>{>AzBu;-iJ zJZLJ1?Em5Ks9hZ#ZnuBI&9taIxGf#7eD6}`$2vLOyY2bL&Rfd)hFS#8BTjy`>rN;C zUH`(azSgd6xRc@Pxae+p(vI}usP*zNT!Qaq;-;g;C=bc|sHGpwVm-5#y~f&}W?sv< z6RxyRWhsEGNH6XGc8*hi4EA3i)tV}@0#|!?<4M6Bw;+q3G^XF=kR1E&YLXOJ4-Es?w`xTvbC2X{wexw%tNG{i@vpx6EGQ55yzfI6=ak%G^ zUiK-~;HcbQmOGKSJoGVIjJnY#XCkq6-M602$_?EVG_|Wl?cGIsb5*h_iL^FEHsy@lg>XQrOLZpuyT95f@~YS8C%j*w5U+ie~< z{&(U!K6LVX-g3yliu@@SkbJewUnQH$NbTxl?YfS*j;IIfirjHYe|x@qACS={X!bhX zex#T2*|Qv#n{ByMiTe<(LbVp0{2hYfmaFTv8FvItg{sl}!p-Cn?kqtUe+2~;=Bo#yE}ttGCB7QHk>zttL;le^7KM|kaBY@x0txvO_I&6=teY~ z_9X-64%*dj_WG3BV9Xoh({4f28?N>P50QQaT7#6k(sCQ8F}H^Lpa)QY+JGTw{R?qs zl;vtakamC2EP$)m?FG_{A71CE++&uznz#+<7xW`?_x}~x@~{3)>mD@69B$k-Uiq)i zQMu*W*G2I4CN3L|LeHbpe*836^W)U|Q%|wy!Xk18NgCEj{#hHaIynR`6FFk;B&wn^*o_4rjl1KJI{=`x3 zebaKQw_u+PYKvMT_r9gbmItlJ;YWhz1Bcs-^mEW#NV)P2Ac8OB+GO)6nuVsICDe;G zNXl>Gx1N8sJfuGnG#xIA`r&ud%e+zYby03jIve3$OI#=PFuE7X{G_~RNBmIrJFoo~ z?r{=l_Y0b*;FgYLrQIa`bTkvGy=j(vgt%%g86%A7+xi2pvVr?P-GdYnCsLwS4NvB{BXT6g2NukG4C*@RvL{a|`*DJF;@bNxm~?$D6LiOL&iT zVg8=9liHWdQRd}j-Ms+rF}T|9JU~9#AN;t(-DK^ZMcgK|52YFQ=B2X^fP}XurXHKY zK~tkfv>%JV!5e>^#!>sR{c!nT>2C^>%mW`r`!V6ghW-|n3AZy`wf78oSDIIR`D<%PS?9v3H7cwql-l->vJ% zY2$~m<&=mHUc8xb#REA2Id)$;tab^kS z%uHomUNdTMF?mYe!g@DSKYVSu9f|9QUPMFCLh5jT`V8^I9_wGV*GvnV4REVldtW2{ zBJ@5|?k>ySPh5p|jM>ros6XwT){CQ-`y>5bo8F7m0pr<4C* z+Y5ID+z|F2LchS1cKuI|YVSF43BEIKO*TO!VRXo6cHm!m7ipy&uT5V-ynKI3{F^c- zXcjs4RwLh4s4-G|&-1tmJ%}5C7Se|0aKbZCXfE~2$*=pHMmhN_+4GH^ClJ5IhHQJO zbKq8@?e+dN{)Q*x=P4ZZeCyfst<8JY=MyjCzH9gvG0xTUqGxCC_vBOq>KS_FNw}x|6dmpmgw~6}% zeTP0r6R=n2CGLk?%W_LK#JAMfjQK$`-m!NF>BSERIV!iG<(|=j>y9o$m)uzDr15B@ z7<Omjd-}bYetv_Yoh>VYN7Y5Bb zhdZJ)?{Q;XaFBe;Jz%+~-Nto766C$y=@(Hq8G~wBm7{$3Ug~GYqM$hh*UQQ?p5(h6 zU5%7m=G+L%_Xu&r(Ny%R{2N;*AQ^{;tv~g-xA5YiseWnH5ATxxCsgM4DA#YfS)JH- zfIdWv&>-r-A^Mpd%4>s{z5Ye_&xAe>n(c74U9Hra@f2!-)ZXcqJA%0RXboD18ntG8 z$ozqwbn6GbZsAXZ zW*A(xw+rd}pl6VB^DXy%;x?cnv>Uao%s3p$^%`XBf!b?UGGFZ2>$`(>YIHtQ?pn*e zk+^Os3q6FUQXUFuuVsAnw&kk5`KyBF+&X`?_eJt4cf)^S@3t6wb6C7dcetOz`vz@x zxJ8zG?w!mhpoU1^zqjUc#&LFhlxh8|e#rlf`9+7@iafF(@>Y&&Z-6yqg0DMqPap}G z$$$8Jy8b0TmZ02>&zT2?n*V_oZE(2PSni+<_QIoMXb)<>o##QPat}$pm|^dGbzGaVE@*D98!f+ex_b6r#Zmo` zWx2Q3PGnzHu4X;WqHh zFs2R3kzLVs5D4fA4fwZ2WK-;na~J^9oR zV=ebr;!5Aeb5Lj&&rHa;OSwI4`>W+4=UdjXFN>CkO5~A#{W6Zqtw>!Z_?{qcI(i2! zt{rDe^Y^y#o9s{OZ@F3?a=r_irf@Z^B#+E9?dGWcPEC)Sc*EVaHE0ehW{foCP@E~G zEHuXl1)GDWm&4Kfuoa}$aaMac3um2i&Kch0;qUYV+p7))^J%9$H z$IvM1>{MHCt3Tu2*T^`j7S}1QkbQb^^*YTWeLngWsXw2w+@FanMhW+@hiWxzz?9uh zv|rNi43D`^`CEf#zr!s<9vRP^%~84IEw>tRVI<*7j_$mu)`Jt*{|DAt>P5$2O-bJc z-HVhv&2q;P_XheHy@&R2Kbj9n-fKU>+S|5^F(dFp-nO8*2ClX<$413P#vQB3r`(6D zM@;n9ZDcAU#VxZU*;=^`1Ik;mQ z<%Uan+z{Lea6>jzypMZgm>V5#zY@63$0n5M-z%saVs9GURgQmufG6)I+UangvfKm2 z{fQ(b-OD@%4Ba20_R4z`WPDoycRyS$zo(O4=6@=3RR0dOT-hgGjd%&~)iEZUep0_* zq+D&kvVWqVtRKB@>ff-#%_+eT;@^_K<94DwfZGyo>4+8F1M$4Il;8RecZ}uAd-xk$ zdy}v5+ON`-5BK{CT7ENrW<4CP`r(UuJaa(1c%8$YV7a^aEra+>)E&uldFtQUw*2Zi z&+G`Ad5#~nJoIz8xh43a6y>I*`lfye!TsK`w+!W4`rmAaJJWKjeid(?BVK~Mr*Q@I z=du0oS@=cDSq|LNm;d#;P0ioL%6wc8^HCl@~$>pen&gpJj;EJxHqi5 zNw4#LP8#J{d&3(%Zg?m2p#7w>gVw+KaOalb-%lOxlE1OHqe(l6|qW)9G`V*I#1mvGhZc^1Fxj0j`#Z|Eqm^DSNs9flE=01odxE>`{A*|Hi*1 zm4_4U1Kg#Ky?x+4g~mDDgc^}Q={rc=F?8Df-aMnJ#U2bK z9hcT3kG!v|AxE`0)pBnpt_zaz0LPY$OSe%sv`)ye7i0F15@fdj?H#xQ#8h(#m+Vk@y{GVrxc)jvsRDebos+90;0mjvtPb zN9F^|b&vWX-EylD7e*4U<|uxUd%2SQkbW>|K6C7CPWoHW14#Yb)pB1aE)Ttrg3Ebl z_r=U(V6$-Zti95%m&3m~hk_>I%D?(|ox|;Exe-I{f5g8f)#DTGI^47pxZgS4$NmNP zgYsT|%Y)kou3opIZ@qP%Ee`i_%bmzO9DgQWg0#OS^=}_C&X#%{J{&Z!!j&pjmK%s) z$oD6z^gz_V11xtcad~Jp`WV%sZ#c9QJBqpAW`5)q81h{anRm-BW*!%=2AzjJLO#8} zcm}TAU;H=ou;~_61h>%IE9^hu$$L8e4@T|vaoq{NSBQHPeSj9Bs+5JWEf4GLd`?5o zA>xOlL3908(SCCS>1Ez|Cr2%3jV-rQ586<41*(e*@a1ggpu#V)fAtNoynTlsgqwDZ z=W5{Ub-R}IG7sB{qjFnWZZF~nAPGY_$~bC0lJ!rm8#<0kJ03KX;A;CYlJsw)c}Tf^ zEcZv^en%-iSzAHwdch`ZudD+f=kI33rJA1|ZYt^J{h75nD)*@6-c8&%BthPvS<<|~ ziS{=k)ttfoNGOt;@A;8W-W&G0!>z?V8o_sUFZQ1x2@i5C#J@#IeIUojs26PYVnCm2 z8pBopHXuswTl$et?Y-M_g{MK*jY=9%>T~@maJ$3Relr`M%%2W(xc69Y4snx^1erfA zi7U@DOL-`OJKEvSAfLQvXR*V*&vG{r_p{|5zvk53LSL%+5U!SoU&tr>1rvHl{V>9E zTM_pl>W?O|RwC<(`IO&|l;1tJJgmUKk@@p7sisn+D0din20ukJT6r>B}%;Ocd2N_yGXbvH-luCm-h;^H3S84FYqWoFP;?V@h{ z#yW+ycV{Ed-l8*7d9PUXx?M_oSx0EhQMu)50|>ss#7#yE(Hzu>_|{x-DPMizO|#thiCc#x zZ01;jwM4yt^Q=97T-N8FgqwYKs@d$=E8ocxKkRV0Z7f&5lN0x_$L(1&?xg1jlzXCm zsF-R}8b|$5mVC00vNA`t_g%~FOx$=h56wg}ztfW6WPDb3rg#0c{AO25H7y+OhoqPC zP{2{St1b5r;=+BC&6TL?2=BXOIY8s=Ws-_YUG7LD?v>-;uSTcKjySEamo-*TM2rQ%#*FQG1^!&kVF3Dfe{mZ~D4F z%9tBXL%C=WW8E2@D5Jl{nF+isUifk!JD&7K7o?gta6{JK&8sA|Xk;9!FAsOz}qakwL&idl`tVwy>mBYK%N;=6R3zbDj;*`W)|QWptc$6=T8|5Aq?(;@ zwfufS`ma&xtf(KBS#CaY8&KTi?EmAq?ko2Hu@7ek?POnDeqX0v)W;9uOH)l+TC_Zb z$#WfQkJP_MEcb2VK0sfi6-f5k>wL*F%RTWu;5zshu9k;mq)&Q+dDyDH6WrRC+jC2z zDZ_6PXwFLP=e0cK!CmQa%ahNKY9Y0kA&mr|ydT;hh%;C6TkQKhYT0&2-)9=COZy8~ zuUm8S+=lLOxUDVs9pXMh629gr-@RFqesVd}=go5JrJ7>6T7G3-u8=(2klNeFa(7s! z{NKpD9LB`X8=XTP?8onUa8JJ`dLJP5?W!7yW}juqI{Cu_`kVIz>wBm3;amVm&s#YM z9sBxvoWImtd53YVeLC-50JkArz5c@e73TEUl1`jA-HU|3a7!BJ>Gdy!+upJFcbKL6 zaSf3AbD8C?+?`;8#2?@t-oLXp=yDs`>#x@-y?&~BD#qSk7+B5W*0Egg;QjZX+OG__ zli=$0@6(PxbqwEgbhz~__fq1nMH1vYfNuTL_CV(a%;l+OspE$m$=4SRK$;r?m4D~bC7?M8Q;c5*w@+1jh+te|14sq1iMe~Y|(@qoik62tNDG2)KR_loh~ ztvf3>tr7jNE0ht>Y;- zrA4Z#*(}-~G`k}%QqDG#Pv-?L^tkc6i7PXJHB5Yv&K$jjJn~=bXROhvuPas5xWJB@;bvx@})hjAPoRn%m%NdHAwdyjf13&yd=? z(sDac{x%c84VB}5$n|gknEIM=YpQwD;qE5S5%ecg?q`;}H_2zpKh0bmihU2$@EC4N zd&+~uUHc~A6(-+>NV)4Qx9~jnxDkI%3ET-W+Y_r$egQ4p;hH2@}Zk7FvmvYsUq?q(QXp=u#9!IrIq=kd(6=%Y9%QuYkpl z@NKE)&KA+}XKT{;M9(4R4)p${Zx?Y#(3#J$#*0#zs|X?CX4!duUGK>6lxl{;4SRV_ zL(=y`qmgoHdL{U(J5 zvwq04{vC(CLue;c?oKsju8p>5!%06LO+;$%kCr=!xP?f9d>>K1AHEH_?~~K_q2$56 z9IlQ(J|N!;v<4~nXUpAwSAyAOx!XC)JgMHN%e9kmVt;M7RC7OE4OJdWG<(QXgtWh5 zs45};PvX+vkIwH)WC8iJ$gkJu%pvUILCuib)lCv|-5(=v0$PkxixW)`+Lwg~+0XMk z-}Bty-8XCdl5&5lSpc^>8D+cjD)M}XPJ1rO9TLH^KZv-O(Yt6C>fDw6gS#lJaJTWi z!V0dplvBA+%6Tx=9CXfi%!CB!Rhq0=%lI5mGEnk{Cy{dNk&fUC6L$mZg4!V||FZ+$KB*;?|6wH3ejzAq6J9pZD{R1Z8&>P(G92x^3w*?LNZUa z(6%pXZ{EYH<~O(@ffBlr{&Dmlq};xiJDa!e6sJP^7Hrt zNxvZTb^3nrB3ss!TLgCi+)yMd-)bR`*xP`k`eC2trV*##+m!e8>T{oJs~pu28IPr! zsU>i4aJW=e3BG^BEr7eq@xv|f?m|yG+|#9@fxC*hgXqi`7}uhdb<|&OaAkjSaZGtA zd?M8xhpX-3MWnwRr6Ki0HOp;JTu<~UT2?9Pq;caWTZVPrh!?$@3$BlrhbPJNEE<87 z%MwP!-WkL#Ld#L-j^4i7OxrJ{bUJw+un2BTxMJ@bD%cm~DMH7Qa#_NNaPN4LdWc>{ zqfr)P#!)=qR=~VZgX`kWB2t~We|##{EP|`yJ<@-QRwJ#)&EQHs-b&nr9(;?JquZYC ziK)lK$(RH8h~tMp$P=H#_yVcDFIjur5Z4<$i5^96zZ;J6L+-#-liDik-#h2gpO9xN zQZBdE5`6Cv_ZeD;nod7?+<4U5to0)FbgH@9a(Q&hd{3T3s2C}CoaI)0i8UA`;e5XH zAogaR>$Q_oC!Qo;xfz4#AK_|{_hN*}TMr3N+DWz?Mf@B49uZ;1h8&B^hdbWkHh^~x zx)JGh;}t?4m$)o60J+yK-TGGl#wapoJd;{t+#86y14;Ne-CHO4JO8E+p*-9W^{@Kj zLGr5~*8YPZa!T++5!{>MYWpw%-m~asr1tKy_AVsu3$z}+l$ckF|Zs zdoI=ZTSwd9edI|Q$sP@)+}|vB2XQq<(Iz2zF0m1PTWdScO=*Afa~SE*Gaj|=gZSd?n_3_p3TzlbOSKAFkg2-9(<-(Y;9R<>v@@2ys);Z1m)2uO7c` z?@#h#%31D9sb(@6^|~!0&ua7|QtnNb+xBIi@j*jSKP2{6r=Jsh>)Gq3<6K@cWWIIm zeVx;tOP+U;a=TdW_rx7RrC*_a=IHvjo8@ZzkTN>e?1LMMoGNSXNi~!9cdPev{3zlkB6mKli2P@?jrws0zrTyVLVCW<P5Fy&g0 zqAV57Vci^#*3agoxfi{U)V?RJed8v=&c#O53Z<}7E4y(b&vx=mIUj=-rrtjlE=V=6 z!M)!aIF1$HWCb(LEI>PIU?s2%~m}4OL1`szCNvJ)a@6t0i%t7w`{exYN`4T_mf0k+v z!wp4JGp_IIjqArd+*X$RZ=N>_f6n|L4W{}*xlVH= zqW-aJMA$CwWS}5#{!? z+#19+K-VC-Z*tq|S~2xC^cDL^9BxbU+>IVYTFypUZeAbeiiw|ub~?kMmFFdbKUO??+Fa_x=fX2Si=;TFRyH530K^@Dz&@_gdLNJ8v(_h zW>BwhBHugcPo(x{Snh~9?ALmeXPMCeRQwDXjwPB(@$?`^y!QM=Ke#K^s2l8qEng;h&^HYs%8=%)-=BM)DR&Ez9Pxrv_xDKs zFu>Z|n7CWf6Q~dB-<7!}6q%>9^);3GRq=y4%>0z&-{(j#_P)eXxq~g&{f?B_`*-hw z5N;;im*8r@I~v|Jw8P=fv)rNc@IBgxewKeTcTzklE;1iHb)MIsKexuSH{*{~^O57< zD)YVeVyH z%O~({1?ugE-WaU4EyE|u0}bXM4tEN9=Ak7>?X_KuPrg^Pj`)p8_7}SSLgyH60o*fh zjoSMId6M6zeL~7Du=YMn+*@c9T89qpW&FbXYh)h3U9Q)D>o_zgK4dO~tL^te(jP^o z7eu+oEH_A8ebg4UL=z}uvyqhDFztgJPu$NXhRp47)3_Wt)a#C&wYOZE$hGoK zChilo2Nj}h#u_Nr1ZD%9v1LR41C))0$z?F9A@74!0 zt*v6O1X&-*g*(^rLq&LXQB$P$>h~90zT-39h<^~RIehYaL3-Hhru{;0>5%ytZgot@ z_2vok3`OIRa@$!ytR?O^3cbskDH??zIM^g_jI5JLeaks5WGc1)s~_r< zPut&)|KNw568sP@8!|27hWHy2TEJ_E?nP>EPiyZ8;@(1^p=D?ZWnm2xpB}Q~Flo=K zVo*xCkhu@8RMkfKVFT%Rp~Qtz?qjD#{-m!dagU%E(GXPBnR$cqocvJcS6jxL3j9<1 zq3o29$#(pp{m=~ZsUMzzd#Zk@zrAK+w*={jLghndDqL+J-huZ4+KAK->#V)y7qLeJ zwL#aR3^`{ctUT*ut#A2fhRiDK2RYmBr0;_sMan&7xi1j+Dw5!D6c=fCX44W6NY8z8POYK|Hrx1B7o z{#8HZ!)*&!+Orj<_$Dstd!wO9{X5ojTP|i@9W6w8Xa@Cd$HX|3Pko!peGf~Xk$H{* zunH=N%yhUK#U(PI@HJd1XaCLfKw~T_%^xx=O5pzFaNqbBT$Vy3ArI~z zhb!-!7JGL&++2?vA8W4wLV=J;VN4}{T!tThAz#A(qwQSateV-hD5yt&i>~rQs zDK!YG=uimBpoqdyq5DK7NruoxG;S4=Dcz))Qi{TmOC=c;Aq+yO4CNmEzt7ogb=GXB zsoww0`npdhZ=2=L~-8<5g}m4MLnX*^FErdW#C?Z0q2TXY zl$&-na+zOlv20IXH2zgvs_J{$Vz^%<;r_pW*COi4-j^l(`zO~}<7LLs$ogTf@q?~Y zI+^(MPz<#`EU^wU>xzp0ErmPE;dUl{Pt+G#?n{O{lDKI|!&zR%atrpeC3QV{-r-(w zJl`Uc_Z5emzjquJT20)IoNvv#xaLUfgMB{93D_Gu%9Bsv+VR~w@@__TUP;(H*l;f< zZXhZ|BhlKcS@(j})`hfVJ>F)X&-3beau{=lUfd)WpYUuun>=%n^}|DkYm&qda}MWu zmBww~-zZbV-~1iz9}3{Mgxl0)nh)<~wA|s2HQaLI>Xa~Vi|U~j4SDAI%eQy2X>)sS z5_u(szjur$*EsezBfZY6wBl&(U2V9Xi0g$k=(I7^m;0we8;Sb^ zWxmSzk)!*&Sh=P?+)AIkjr6f&8Gkt31IeTIHsolz9~tf)e1qJMcn!l(NKN{Eq;j>~ z@*8>bEnHh}9mv-Uj-QlLb$=Cs%fGl^Q;oeHzL+EK#oX)%xbH!`$r_NtA zJ;(2NtRD(mc{~&)?r$r|Q{yehhsbg#8Sd-EtwsN!Us0`V7)K-JmR;h{-!Yq=G+ z@nnCv(Bt8xrQ8otKV-Sz8Scg}Gvo#0KR`>7ey6{NzDIp9$k@A?cC6gIb3OL!OFT!U zF2fI~F|yph47Vq71JN+_!XdnG!w>86gU7~6`KBHJKqlp8we_Th!yQeY$I#Qra`)B& z3gxzpxH9xJYO#N+#Fz_e!FB6*?}dhI=P#t4CzlvMFa(gT9HZ$DwiR*(3 z&`n66dw6{rANOsb9Y4$;-~PVz0#ACuwL!;yW61Le(pVk$wctN08~1HBeS@uQ`ka=V z>&d;wUS&^*_dHsJti3GL)euT~n|=;yIGLmVe(U;Xez{qu+N=F!(M6s-1=qIY80jxU z*C5Ni*>LY6ZX%kFg5Nt72kyrO7c<^>xC_biBids{f;-A^?$^8 zp+2Oq3$%+%J^9CQN8pz_@6guJ1<2aF)NrR0_aWMdzCk*F{0H?+$LpooJCf_S?Jah> zCkL1p@9H;OZn82_Zp-0TR&KRsRrIlzTN&Jw;HrPikgl8D8)g()dw(|eR<>@kHtc)I zZ|yDbDLWd!3 z$97$6XJfCOzsS3a`+O36k0+nCH-$e?S$*i0#9qmx|GhHN|Hj~*hb}=C-ERRmV?z41h(kn##RBd2#wk;wGcnNWYtJPx)(q zID~R4=<3M_4rd{0UPa50wP%_Cyp#SjahdP2_aJgPqu~^GW4`CA#CX>3n^v2&8nm8I z=Wi2gB>NsOV@3R&6vMd;j@D}pI$qKJGCVle?~VMC%74czWKuubzFv>^zE=WwOf_&z z;lAl`^*LXq&+*n?znVw|d-Z&>dTrZb*0rAe=y2EZJh%YD3g%{m+zoa4W}t!JUN&>A zj9UWtfV_l%uRT3gROuKQwOJtL;Fg-yy5L z@1caf+p+QU$+%ldqT|70xGy=}dx5D6k#Z~gA;H!2$+)(jdEGtv+~Gb$HBxE&tBkAX zE8~{HO}jc#&#KDaoF1OkuLf=r+>0D;tKmELgTB|BO8wJt!cP1U>*>h=hr6?O{5x$q z9{9+#GXIvtErM(Bdkv`fXQ6YQev;v@hEPx91|to_IIe5R{B0lR3VuoSm7nrwHBAy^+)Pve~NgRT!xX0NTkMQ{(`yC~bQ|9`pL>u(>%nGW}ge^YkY zpRJyfD!bO!j=MTzx($fP1;a)qR(D)GqGBr;ix_PUe`*58LhSOMP&-Rpo~w zxZ@mdZ}D)-yTQIreIld;Q7wpNwqsGkSwPdBw4>s>-Jb?w5{z8?kTla*=na z7QyoQjdLj&w|ZX1VNlj}PS)kVQ_Z$exv z)DCI?~9nN6)a{NkjfnPi8sxRaJc|hx?vm-xJukqxL?7bI+m5>@2&@lg*BuRaKwz z3s~25ZK9r5RedUed%DAYk?VU4y^n(BzVO~O`I7kcNcRVF`;oPQa`$fcq?^NSdtdVL zu=dXd_pxq_^BQztTbCQW-xa|f<8U`)i>zX93I*-mkGKpzA`Np4_NN;H_U7C{{epW) z+zQ@nl4nQv=cb%%g*5E*V~tApNh*W8!m+oi{E#=ylb_&b8GFygo=ee{DCmbxb24Nw zALDfAT+qK;jUVhdyA19T*HyhA3h(sfEQgzqE%rHFFTw2x+&Md2{tb0=XAO5zui#Ym zeZK(iaL2xz9s9Iqy7u)OUqgnV%IqwMH_frLs``O~yLnIIaI2~xD1^HSuB}gZaQ${X zrEYhxKiPFZx_&L zsw$rxxVOQr=QjiSU&qZQa3(wURaN=KM$>ON_Wggy%~|&{&+gb+RpnCzci$d~a<8iL zDTdn|t}UMj=pXEJm=>Aaza^W8>U51?u(A6*x!SSsF{hsl-giw^h#wa5EK=FHrUdRN z$G$0W=b**NzE9FSpgtGBN8DQUHF9muV$VIjU#hJIW0?1L?EHna+fe4}|BeriB<>h= z914z;at!lN{`M^>tB~=nW2e5Wh>`DX6tt65@o+KcTsw0eJ7e&U?3pNUo%8QZ`Yvck z{_M-S`2M8(C*}w819s-YZ3owu_aO3Ihc!J=@P2VS=SCyfMmz4X&x1ZZTXh zUOFOAa((l)E~8+*{D`<8&|m0RjgWPs(By*;D ze$(&aD(&asZgA|)_%Jaa5ajO1xoo6CpEnyOna8pA=8g3vy?3G>97Dbxwa=M63!QAZ z+TXeRrr36Gzf&rQdn8=jkDNxn^Uw__Xzv{27NaHTNcIeH`;$V`KW$$ZI^L609BvtT z?7T>jTl8p}Y~;KK-3Q&}T6--w>k;0^IovJeOZkXB7f_IUG;znHQ;`0Cx67?<>VxIR z9%Y>xT&=en?&N*B?N5W;dpXw)*Y4GBF?>u zG~C6}wb%N=)`vp4OW@|jQ?n+VYuwTE{P~>gh%{WqaZ3_==X~Sa8=K%sIb7S{d`Vr} zk-b{a<|7UI`)?QS%Poi7$Km$J&b!gQN$ed<+$1y$>H7iw zPPDwCzs|Bnz~0h{%3b5_4{Zb7f+sv#n1s7zH@Tey z+?*m$en`Syv76jp0d5)GgZd`wgZ0De-Q*4la0@5#-VCno&nmm0S2l0%O=cd(v9GG` z=S6TwIri=Be!kQB{U@2%bL_0D`?*YE-q_(*)%`pR?qAOJ|F7j!1Sg!Is6SOzKHgMM z&Vy^~&;Pf4%HiGM*jZKOQ!tJ7qYk&K%BK+Sa_9O#r#;&KU;9mWyq>K6^vp=nWa3Td zKH}I{RpnCz_t1Wc^7#(??0fv+b5A+v{zjGASulfnH+VJUR`b2N^FA=xAMeil%dDq7 zx!&PcRrz>uABO80dsEl2Hwrog1?`={`_?e=^-y$HdWG+DN1J}r?mJNecLCfi!);6+ zJ3kuaZagzXT5w*&j_#v&zCAXRc@(&IJaIPTnpWgJ7X`WPId>K6z`5XfVuG=E`*;HG zAvYxK?M$BTC_f4J7UJ$k_oCqQ|186`_U1k9$vJSXy$_LRN8_p~oa>bCj{|r1o+N9Q zCpS9w+V>gH!U+1IviBK_1NIieo#xp49c!6vdku28aBdsY5cIDd|5*Qevpsn~iM=oG zroAfy_7=fSy)oh6s z{&=hu-aO~}r&TiFrR~A)PrkGE5L@WU$IkU1i=8{F2hBKV=XrwT5qtl!*Ix!VePE)z zs%m~N_XWNSf@|y7nT}tB_25#@U4t|lXg*j_exFIcwKh%;yy(vFn77eY?uw_Jf-hzY3AP zxQ-o-lMmut7-?9~x_!5ww)Ne9hm`lSCo`Putw+8ls5uIjM_b~qM!k^kTf3rHy250CZlTF%zp;7ov1 z0B2khPR80@w`UfdayY*@oRi+EA$!9(FbOA@bDhvN$i1$`aB^Swr0!t#gdcXd+=|J6 z`Trw-)*GITAb(Z2=R&y8I^4N6(keVhzQ^VIcV-Fw%I~6n(>){ZfX8bm|Nd_)XSF`X z-ejGF!_|ITH5>82?fo|Y>36jJhXy_G-Vbd5W4VQJe{lSG1m##4HA33o#xl3to7$SV zTaYbF<;RxteT9?%*m~)52Wjqd@^{pPyq<2txt7SyUr7FgZb^(M?UHVg zzdD{>LM6m~guX)C*rQ`~Br#51L7mcT>wSf}k1S){2iLai@5wXru{8OEqvhUZxaptm zA^Rf@_YC&?YiUdy{@Z6N*N*#g-e!L&hwG8==2rZc5l71{ijySNu4zclG~9L^lidfl zb60pW9j<*Ix|H<2&^TndPaAH^=d6uJIp}CK>lE&LXR;^7NXFP}{QWd_yuMA-uk>Ui zTwBkZ64e}C&UY}DTf+Y*RH!#Q`n`F3-^zl!$B=}*U9dyTttUsz{l{=`BW^6x@C3(( zhv8fLarLVW_W2_AF5hp#wdFR0^tuLq0Y}TV`@huf#=MT<>VC+&zmDC9&vLDQvr0Yb z=x{$LpMJafy~EYtDItV(f2fo%e0xVP-^qJlxI^Ju|7Ma;>qBjh*50V$X3fu#Hip}f z|4wGFosTMc&y%T+y%&@3#+j*drNeDuxL^O3E-xGITO2E^XL%oZQVQ3LUn=`QkUonI zJAZb#-3<4#TWiY6Wqgy5+MulC*prO+Tk6|l^WIm-m0HirSFu0Tt%-8GlJr_`y*XMx zu#JU=`0p#-L%fEEI96tF$!gx~!1dy(MII;p3#j&&3GPh8J@czQu18z**w3n) zZ|{(Zzt8>ewMF`ozT^{6`a0atNT2mJ<0543wZHSad>wnHp(DTH_Y=_CesIwrKl2{= zyTtE?s2_5_^yF=aJCpQ3qha4BxY|w#p*O$hJIo*0?-H#?S+w8r&C+Gfcz%OzZem~l zIQKX9l^L37Z}0!;_h;X6wDvahZ>OO@iObyJ`}bgu>+7-y*HOM7Y`d`St>kx4E`}S6 zn?yfC`h4`n#ss&m;pY9!zAwKpe&4)@G(+p2Op(rfDB;abmBlC4h}VlpzT)|%!S|&jh}STVqrOKS6tLH}C2^k2tB~_(8`Q z$?BQq=D;n2Ys2yIPDgE!#%j6kML84FuO;p#bO&axnLcOq2e}piOJWG$$v1)=FGu&CkEkGLT=cG#0$bZL2|GZ0?bH1=aST1txEg|3A z=tE@fy})pPXu|#?#BWBrPRF%(s~Lw|dvh9wr8itVKKhqDhi>J)B(hw#^wAJ%M_e~_ z8ybj)T*w|_w0*6U<)%N;cCYrv8ii%J&vLsO?xVy_MH;Lh#xoAEbzP6v z57Ia+(;YuNL%ury>>-=)Fekg4jmR}w2NYX!mRwK*(&2TSI%jA>WOc{)B zKsjepPm$KI*8|+FGs4nxSfW0>L;AI7-}D6cU&9?v+yiI|dK}fJ-fTU}=eC|y(OzjC zmW~ehYtsLM8e}B6HM9f6zfTc2550+AK`!^9Aor}W+yFNxo|WI9sgWs%qO*|oLzdyL zAns3eU?@{+qFj8ChqT<*ndj59*ZTYa6`d278IHZ3Nq+;HgDm%C!@aU5=g=eQe${?RS15{UFAvd+m|nUSzme6W1GQ7{D>veantFa&yB{ z=Gc1+=?l>l$l6O6t|9a(aX+BVXf^NDwg0uxy;)cJ-!xczOD+t{HiugyGgJ0Khat;- z*l>?0?rfBcbRXwhhto&UpQ(Ry9Io~cB^QMydMEF$<0i2VlstXVP-MAJ8t#63W=ee& zLrqaWWmaJ7?>ciIDn2wtE+Bn*hp?OtSL?%y8vJe2Uyr6E%YEN)d)CU7N$6X&1~sX{ zTvrA*rKQQ8AE(Lp)bnR}ZqVNW&$=Qko8a1zdY(U?J9e+k?e|@_YSZyt>W8H@q{pi~ zGclK-(ojJDL+?tI`*GyEfEU0mI9j{58N1pO*Ar>@bps6MC2Ad7@xEZoz39rYoCw$6 zcL$R19yASE?q0sxp>%%e;&5~vs)w{)#p?Rprsq~{uVs0R+u*7n8v@ED{k7;`WVxQ< zrtXs|*{BU_hC0({72n0)Z|&1$9ql!p>#}~#>lT&)aBZ-D96&z3{1}&gJg0Z$$5Qf7 zcKmoV`R+kuk+rL-v8$N4_t5v~E0jmyly9!L*0cU~TR&!97nTxpy=vPQ(*J{M@gp9V z+s1HDCoUJ|q07+t2xVmM+qtHm+w0B0p7EMvZ}X4YcWr*E^dq0;;wBBDTZkKtH0b!H zvU1Pr9v0!=sO2+){121wX|xhq?iGf6;=Y-35gLSgqR#YBCG<~Tk5p;GJ_X&JdS2cu zEFN4NZ23$gpDiCgN7`ZepSx?brMmh0f^IA6oF@D`vK z9j=-F4=p9`1EgUrm2W&_X&nRW{mzD#jECam6u6@udp{xH2DA-Xd)2>$&rhSw{pjc6+UM&RNMDAI-ao;eVYo|)TZO(xM_-j8<6Ghf({GlTaf%%e$NGomABSt7 zry3rR;2xreTwN8R&3p8}4Z0#u@Im(<`n|337`EhUI*?w*F2e-?Qi)WXr9A z;Z8p&Q!YI?Q)Z&csLkE{&StcR)a*dJ%<;#8wm#&K2+Jc5cQxs+7?~kIbF|zd!yU;B z(z=IaN+XoU!=KjOdc0dyTWgzs%g)D^jtt8}hkGh{YBmwMh@<6hHr#88>xVQ9;n;$E zN@x7LhKFD42ep@~CnfiU&DQT0`hB;xZ1+lmpOT*YjIaWU}{_ zeA6G+U(WnK^|$a|og4#!^fhvi(f?mMhZ?GM*|Z2E`sVQB-`hNk)H z@&b8EkjCo$3U|lnan9%5$?PY68nX9(ArvI&>1qS6m5|)v0Jp+Cl-Y4iYWbHlD zKNqTXc&3EWap)LS;Jl}3Vb~`VS0B5JALafCx2EB$KT>8hk4iqvReK2)+HrFt-2TkB zG%*iZ0{0Ea5BDq!Nh_FVA?pXaC=Kb?5O*UQj9fpo#n$}C!qV5VZ`ko7*D&6?owU}z zZayb8iEldFr2D=P{;qq_zH+#qJKQnwCZnki_X)#&mALnjhL1T`cHQL@!tysWD zE7Gq>O_QHFT6^dE=R*6`&XnU(8+0nt-z~KB#hpz#-L$XYzDg&C<&2Sue&+J!HRWRR zT!Jijh2b9lSgIU_uIJnd#JTqNGTa}?r2S(46Jfd4;r1oZJhaf^eq^|Z)yb6G(O7gJ znuWb($M|ia(6n3SYJZUXWLO?^xYI~~ZYFJkqqWz*S6g&;NLCZS7ClOxbnP7yus3T; zSYCCwUz6t#^f$8HOc;bvog*@(HM#^{fL#9;2kb4L%6-z|b|d{v^bE4xgAKRQk@OYl zbMzr{{ZM53aq9<}6_)H#iE{gg^fkOp*#lW_8^f(n+_~sV)B(BnmImz2ogJ1_9d19; zk49sVqj zxZa$w405;=NdGi?23c+&!(B?;PbekA{eh#)ofY5~&kf7?B-~o$wcJ6wz+D{R#^#0P zg(Tdg9PS;vz+DmGmd+2$r%AXmhdX)~xN8I4yai$T*Wq3cul-A@(%0dRHQX`8y^KoH zGUWPqLx7w0LRb#GCsBVtCH<0#HRW55*1uB>cMEZ$Y`>q>eTv<7Z2Mo^?-ap3#^LTw zzBDBy-#nZ1RJ!_vp${zX3ZZ$>o1ecy2RC+?lL`c%cc zsGa!Ndnqi#9Io}lQ4W`>5DlTq{7|dd@84~IR`_yQCOF(ZKj2%}W6~w&aKAI$Z=X(; zdRg(mvBURCwm!%!VVUc2+rraw>*R2MGTZ^gO+e3}>Bud&+5vm>OTzM267CD+v*q^3 zE^r$LxMi>M{x%8s1BaX97geY-ds_s!xl6*bB?)(>)%k_ zgdg~cm3V!q%-+rcZqA!wIWh^ij>E0J3*24-ZqZv|IVlPE1czI97q~+L+^l6`X_th1 zj>B!V3*6BGZo%@fbV0u4tIe0YkJ?j6vcd7rob>1goc^Gaio?2ug>0d-I zBg;M2KNlKakLND506mMEGXK`1z0X}?e0$nT<|rtK*cV~B^1cN3YtsLP{zaCHYczx= z*QX4R@$KE0V{wEs8{yBpS(}yH0dCg%u)OAQ4<~&C)EHSVpMJ%;cM&%WX?UKaay$N1 z(GQlJzacCQ#w7e(Li)9+3|a1yI7vdI8f3~FNW*H5^_YNIbyr1u5949CBled35|&3D z?q{U`1^tRFH^Z+Gp%WWsN(^0u&Oxo6`OVg59#XlT;1+M8J`|?Kf8RpwxQ_HUp<9sU zo?y675%&^$A1y@_s0%fz-Rj%^hI={h$7W~ne)o6$aDT!Nf0DlDvAkbEmRqiWkaFus z+$b~w-H(c~x0uNzT~0ByPV(zJCwrsD7|q zWouCG)o}B+hUGW7v3ORIY|^VAPT^>|n4}@pgSg>H!vh?(J`{cV-}=xMZoxL5uO3MF z;Zf4hM9(10^+^)?iMU#g{r`6$$Hh*&@U8Xj)%p-ijmWETV{t3!+em*bIu2Q`ZO4BS zmyzRhkK{OnzHD@0-n2L6b{*W3%!q7)tNo0Ii+iMR-_O}{ZNJlz^=n5PZVpFxJ%zQ` z_Gg8AM&y786WmisA8sY_HK#$Yt~ZSt?m0W-){4k!aP9qP67!&K>oPygx8#=F%74ce zx^@-cYZHGhvg@7f{_r`bo(<-j_5LG!MI^5hZeQHFE8N@wHy`fw0C(VhHMZM3WEZ*l z0d5)GO#$xz;)lWjH+S!d?DNo${kyAvC=PH-;I?i;F1J4S*NHxMr{5{( z?H7@H4%e1jpCo=Tmz1>JHU!EoAMSY$_hxu^qx+L^U*S8cg~RudBF^diRoA~;1Kh0r zBhuI5&g43uCg1Z(xXXys@IFWVuEpinn&aO$Y`NvZ9p`XABhR;JGg4Q&{>?m|wJNAK z+Hh9I@3l)!d$U~cfQY;T*Hc3X8~MI(NA=<5qxp`&tmD$}0F(9W_Pfj?xL?7w^{kwH zJL1;I&Yf}X`fl&Qi0nBw!L6$LTLd=;uD!nnzngRYtKZEnXYUXV+Aa=Y0ATwEdw+Wg zklru6gCf!nuDuThzgKp-yYszrA>6(WH@GiAkh`n<0?5G;8SVJDDP?me>WG5%>{jAN zpfRZVeHDMFq_(NQc3*&;Ln1QM;Z7#cJhTJ_xoe2~8U2BDe?Dy&_I+-{0Jr$ih%AL$ zFJ2mS-Y4+LbtwIgyxHE?t4MC6WY;FiIi>Tvg?K1^Qj|L#bzJ{-Zh`bdMW_o%Gg zijRoM+i-3FP*u;}xkpB1%WiN_e$;;mKaFFu{@0GH%i*3jzUu8Q^djOAcKN1;uGw<(tmI!j&!@A0FuiptbKRY6O zn*}pk&f{p){m3&2@mM3%6ZWRwPTY7E&johx_|JpK?0KF%r6pxKU^pdIHrRz*;(_tQMyK zyMUMGIv^_WF2S)R6inaUUUTn?~l;kH~k9U7vIQzTa7c!qM8r z@(B&0+9&edi!_|Yu}KsEnM&=lLG8-t4|@$F5~hyocum9kq`w4Rjx4v1e=0PNxLHWU z3wk_<{A*adGBGjd(P16iM#9ZIHX^!rkqxhrei>SUY*W8D(B;J4jP6Buq8Qh0=MmdF<*_#vzaS?fYaIK=lm6%j zQ)LoITOND++|*}?dmCBXG&=XVh-`K2(!C;HjE3ZW(pkIsWKl!tQ{rrxF|?-4;u$wM z4$<<^`&lvE6CSJRw{_(I4q3mMda^^mb;WPq35*ZmSii~1Jg=jM$l7<7Z&c`f;%-1A z&~2z=qr^Jz&W_)-9(yN72TA`Jnu)A^{8X8S^iWgQN}x{2ohyC_`wCc;{H>We?7WsGPWcnrBJ`ZM!N>R&*Cx zi`2g}SmUV21EYR>Dm^_SU&Hm{S()=8Pe+u8EZ6#BC~;%ZbX0^^FcI07K1A!oXyae| z+!SjSk!F1FXSvUiel_|SSuQ4N2sLOypNcee;W!KbX3=-5oiG zn~~*?ijyRC7jX|E4I56YIIg!`yH2wl?$dB>(0%bABkx2+cNo8~nQ}|*a(iNZTh`eT zS)C-`BqtwLMMH&rIpo`xB;OP#U%Mpva>-Z!iHdg4AkWiIK9<61sPOml$#-#*e9t)f zym+>X`3lK*Ym$6(oP1_Jy29TpCg1cxzIo(X;N;sc$=@p_-+O_4FOugaC*R>o@|BbC z?&_CC>ocYyBvkL7Y-3pM3jE2LpZ`>@*n zycF&lxV9gAm-5&VcMa#hWS&Zc&Q~SdKiBr>x#vYBb8^DougUAqU%K|{yz^|<>}uHA zzH%jSTf(hsdt+@QGO!x#Erwg{aI31^a?X#)`fBh)G2A*&R(-j7?IO|vZdI3C5!}0~ z!QQM3BC-&!7q6B7oyT?S@9xaw7Q)@)a5vB{ennf69XDuyukASFRMv;0dMJ$C_Zt(O zagMGp&C8`fo07PHJbhe-e0U)5-^iy!*i4?ml}ku%O58cmRQxWkl>BFt-}W#1e$Rbh zrulc}JzN%xSanQe-|xjPjL4&oUFY$)JEDF_t=%VKSNde)-a;#peTGxkLdKv)7e(ZK z$G%xBYR2C`{zzK&n{tlRtHW>l{_!QwYtZ+PI-YI9_2~DH%G2;Cne;g>>tf!sOih&Y zFYxM~#y1(ra$Cnq5_*)lndnWl5N+UFGy8kbck=y~a?j-+It_=HUJ{Y!aO?SbMF}+@%0#GT^^CnaP9r@d-D8-{zO{N>IXYcNM};D zxLd_?E+qf0&h;KjntG@)ve#?w!=ZDDy9`}}+Mkgo1zfM)?{t=_e|o)YSAM66%y8`L zPM)FY5oF8R%zLD-B`$nA&$!5a*7$>RF290t7aUs;_4h!|CS5yZ?X&Hpvfl$)Z0xi5 zxxyy@X?TZYx%0kK%UFY*2Pn;pNNc#(-VaFs z721r{Ugb88lO(kF89X1Hm?CvK#@DY>h+5B;_d3todbIWyTpf`&;o5ROi9GLc;cYlt zt{KmVE+g)Gq+v-;y42*E*Y3rsObt4Zso&4$UK5d8(-VHUk$ktJhmhsk`G$4G9omZZ z9H<4l^E)1zhowjk9Zo&INm8!$L+-T^8SHSokbV$)7+J2iH$rF&anhPKDrkSSmIsVM zU*e0uXphGwxDTkk-Kh@_w>9Z6Lw%6tjx^k7hXC%t)XVTX=lke-1<&HDlmc-?vOOZYw&!bSbqGI}!ErD_??iG=-aBaEG$xf-T z{^DxNo6FJ=dZli<^nj_MAIHk(bBlXN6$J_WGT}9v$T#4C*IaG=@*fQ;o6|{JLx#|-M*oC z|EKmwIm!KVx8`^9;C>2M$0sGI4R+kzO5{?G*51Cv6GGjI8-z3rR0lxp+LMJS9`U;S9@RN+_q=tNP2A-Q#o4hEW^#5 znnS(8KSaLqv9=2x|CJ4m$TGNEe>Hqd`jm573y3UtiGM28p15x4b~H%O zQ_r(n`+m67_`%lSoZBOE{xgaCTSWS&P%+Y2^{>`HLi+o}eTLQ}wexx!xcas|eM8nA zyyt>r?YnP3_T3+oDw|1b?fc2+gdSVVJ%D%(U))W5OmhFV_7%Zh<#219mnjGHw-4cH zxxX8(?xS=J@fz-9ld{UV1;Zk8(6fnhI)QvovOx0;hkL3vV9Nh;;<}+*P=6G|m$@p+ zf5jZ%2UA+z&WLn^YyEIH>Gl2BB#zeJHip~h%8@&!x{>p3R#gMIIrJ3Jzv?*{ix*c#sD zSQ$4qA|i(u`~BAx(&wI)5g*_Dj6G`aV9Jm_MnfpIE#m~Fp*Bai|I+$(EAh7f${I<1 zg=>SoKiK(y<*M&@x4+GYJIZjkkUtwcjz`Ur{x#*+@&9N>E^*hPK1j#6>-b|@W`(A& z)ntXEBC^=AQ~TMQNPh>iydz0hSwCBxq@T^XCnA5s)%&i7`{8Mwc$A~{YyJ2c37t2y zrc5GU!z_+17y#Sxz4}#y?suU5Y$@EM<|OLZs5>&`Ir6;daGS zp6#PTyTgs$OS!?d{@oAWVW_Ud#bp{oE!cCcIq_#9X`EWYzZ*>ZRsT-ZhIwB^j-kJ| z?e{|R3`KV!TW%l6u@cH^$Gr=+LZ_nZucTdc@%x!|rvJ8nD0wg<4WCQ2hry)39gRTx zXGc*#^+-s)pE!FT&v}UFS0~>L&dotfkBJEZ&0Z~cPy{7{ONQ`Wg- zDPM?i2JSvc6Sb)ALeU+ZhoLjvE3P zUNg@Sx{f#-_CBL>d%bDY6Nfv5yd`jlJKS7j?^NPmGi)87R_2GC=@EGYu5H)vlJ9f$ z6|(krG2Fv0&Xkr&!?_&wK4<$)TmJeznBMPmpNhz@a6L^-=s@~zs5`RUq5i4RtHiBE z8ouXPcrx!xagt@~QQvExPe+h7i}~OA3GQanr?zK3G_u@DhI=Y;?U05}91CekcAo{y zw%n50%#%3WYe_%;shTo?qvgJ6xQ`I`JX(R4pg}Z{JYIS#bF1k$?R!|Sm~o}U{fP8m zp`VfE)-v2fI2L3mxvMq;}_Vx;R=-SzEl4Y$v7e>{;lKO!UH+Hehdx}zJA-WQ&L zYwt@n)6=9~|HQj)%~M4FxlaB)*$+9rOPUOI^7rrosdo_fAhL6fnm_;fh=LSbDP@7$pq6MtIPn~p zb&Wr7GWA>kyGeP0b?IAI=71*K)MnqYd|o!)i!B;x%+<4kB4UWY-ns!+is; z?dJz64}T4JxVAsOek{H=T-`U{tsk~s--K^9cSPL(@3TJDF2+iZ23JV3mLovmLfSi-tqhx-WmUPRwG+_E@HLN|8Gl)KObbRTl< zeVu!+)-`LdycLn?iwXa(CjAfSXJqZ=5lchp;Lg0$KrPY9NarGET~5FHM2hqZ^l#p> zh;(zfXKB7mYRH8gE%$H3?R#{ZTtU2s2Gpg>>Tdzu2@ba_`Ofc}CO11=Ug>BE-AmjQ z!+n}#GOn!;1lj}F)*nE-tYciutPti zA6~<{?w1nReP15yB++DKd8YrW@f>k4qh-k6OVqy6#=axJXFm1gi1c%KBUo#?AMfc) z$z$(pvAE?@V^^Nt2BnZT#FWssKNU#BF~ZEmQOb4 zPebjHyxft z{l_WSvep<4L_e*sA+`H3wjJPe3y$;O|LJp%jxVH~_sVc{^uGzulIIn)1X=D?hTHo( z-eaN#=vmbHeV(7_WUo(4k;SGy{e)jnCw;-M5&6X7>N?BkDfbfcY0!SD$miA=P2ZtD z)a$ij3Vnx$A~^fJnkKRM|6~0e`QJmUkhO1$v2Pu5eG(+9Sg51YVL5KH{7#{>xeX*kedAW4|`K~TK-vo^1S45uOeR#4Wf_3 zebI1-5;xLtceKB#<$8ZbWdGL^{YfGDrlY5k_3vBO-tN4wM~|b2k^YX!+8#WMF%i7N z)GOPcc-wft<8Wt_{w4GwvfNFEds|Q9QJr4QZ=;3OsZ|HE=AQc6ggGOvYnCgS*)reZ z4krD?2K?3`vRuU;M7izG`o99W8y)VC_cG@J`#u!p>hIi-)4z-C@1<|$nN;mu8}LKc zp4n1&Nur;bN}dJiH5BB&N8DQUHL|~3Y`Gf@*M9d{4);ojyNNu~oAC$=a*rVHM07f8 zfwaH2+^qp_(O%gy4z9hw==Yy($#XFZa_#RzUw!L;*DKa~&i98cx2(OhWrbsJXL#LF z|0LYu#65r>LI3&w({QaHV*6xE>gx&rP9e`6RDy!`t|snVv=MbUvEqHJVSt;Pl`T!- zW@+Oj1lJj8zvx$A3F$h6tuQs{{*slw@5$OXTe`!wA*~O4hM+Lg*tu}cI4iw1aXrx> zq+|ERjNP@4`QIe7oXgi7^~^u&Tp74KaihcQ9LZ- z{5xnJQom{b8~szEJNnZOP!W0<)#e_$ZhzmFb!Hs#>w5NKA$@-1Y$8Zbxb(;?6et?f9VVq-;5r{I(s`p-^J)F^^9=^^g92 zyHCw&-=|7zQ)uULOg0{}?Z7)ZTRJ7-c67MSOuv{%+^%x-;NA?^i(eAc0PV>P_f-&Ru7?eK=OuZi|{{%dZZ1|1&D?kL7X?s2h@_U~6d1u`+I~ zMYd$Um9Td$YoR7DPkdMGa?6_VZq(RYuoHW;PR*7EaBck!?o*@OU0KIkXr5ySb1ga! zDS+Fv3b@4qZaLhSs(@P>;O3o{EypbV|NEglz%7N_zY4fnT>|TbTT*|kfSVKG7Q=15 z%x_RyFWU^`cM+*WbGlkT&v|GhtXE%y<_wfk%z&AAhZbL|~%xc2$5 z6mE;R6Wm7Rxe?vuaHkk<8F8&{<$j3TA^rWtRT1CbTvKoC`?Z4WvgKBXtNU#CfO9SR zti5zs8bWrT?YlXr;~>}G2?2X!*JsO{4)HV_2W0JCXSiPwmwOxQ)zEdw^+UPy{H^!F{Jz<8zr($c^!om197oIL zkwrsj0deo6b?8&%+B?hfgK~@Vvt^~j-AsC22eo%Wf_sGFoS2W+#jgs?W~1BE_X$M>-Eo;3moqLq}TU$5ssGI+;C&W zbwM|xUdZLH4R8wwWXl6dxI@Wjxo7SIcSC?HH)YF*Nw^an?ghKR-5TKL56YIqS0?;x z{qUm0y=)h_wdVO_7~9^;ZqAmg9qt-<`n#wZ0FsUEejp4^+WowguQnDt1>^d2>7A6AX~OLT-|585C=pY?mT1f z?(DPe-JUJSmL|%r5j?%mpXzWI8*V4!hNAn>aO9R-+km}!cVtVqB-}^HXUpx4UEp>O zaEpdz%fuwy1rB%RE^vDVxMg={%bFzI)eiTgUEmH0aJ{>;CF{Na`ggO#E!zd|=m0lw zc($CAguB9qx4Ic640* zxnu9^hP#QlZN}c3ckSdkpfFp~KS=mtU(&BCPLnW4?RV7Pe+~C8;uaze?{ciwll7>` z^{=(J{K0IA!u8^*MLr_^X4K^F1h<~4zn_g@ubGj&-$gGVZyn=No<)><$Tm;l2jfKDVqpUMlQ|r+)CU z657BV#?gKJMML_1UuE+j1=F+TYq&O?hMjHDSNHn!g+C^^=@&l8cNLHDPU~@epo`fa zsuA}==hJIQUY)3v@m|t1p#3Jp8J{Xga@2BC&e8t4(0tZs9Yef^9j)US&is;Iw;U0b zqdu&9ZV}vG)xeD%8I`%!z%7IOM>TK@yr`V^QPum`3rFS7YT%Z@U0w~`yhv2C)>OS8 zBs(gXR0FpN?u2UK#-dUAsv5XuaO-`X@b7W7|2^p+Vov|SG>C@K)1i=bF#SVkjyf(4 zu0PiP!K1?~svDI))xga=Dk}4;f$JR|mA|TiTL!n~Ckg*{!EYOj)8z)ozb_d7>hEWa zF#dg^QEGf0ja{E(@0HfSrS+n6S2b`;>PO}6YTy z#!=~44O}lLDhnO%V(fhntwMHO($>G0P&sjbBMtiAdj#vt)|&M|ZoANNN$zp9<7(g* z93PbypC$ZTRrVI25S5|Tz%6SMm6B@UW}Ot3)X%Hl53!S@(z+VB`Aws8cQtT}PKnCW zYT%YOi%RAfRqtPE5tX*pz|A=|D)&_bH}ABllvV?`uw_*CD@*t{{Ylny&P$ggIof`w zN4%$zP%GlvAq{&+Ye+|)1y}HJZ~GiQ+WT?V>D-5^fm?V6<4K2GRpYbVR#Ew~8n{`l zc`p1i;oqvVw-j#AYTy>08I@v(TUF1;IcG)X*J|LF!fp0d)%&;b?5NyU4cy!|QF*-@ zxLM~!Wsk3`-Vdd4+f@U%@Z6|8SPk6V^P;k*8n{_)qf%#GHTW0qHPyf^JU=Sa9d0N3 z?ZRWzCEw}SS)Q&Tbjm!|u$q4T0gn2;g05c<_Urn+Ye~DPY^Vlq`2|rq?wf>vtIA&Q z!l(>%xK-8vmcd=*aI31HEVwAjW;6*uRF%E4i=%R;!+nf$E=JEGd!HX~>ceW{%8-U1 zIUaH%&lgGV^I9K@+ec+YHE_L4cU^tOjoW-CPx)N0_C!Tq5cxJ7-U z(s*Mv__uFV`d0(j%a6(n)xa%-`)@UHi~2>S)uw9j?+uJ6tAXp?7?pRbfm;T5zn`k! z4@Lc%KdT0A-T>y$s)6ebWd5ugxMgsUDz66r-o*S_HE{C=F@IJKT<>P)&#Hl22DjPI z)!^U3%%4>QH}4ka&#Hmz4PpN5m#X(e8Qk-$fm?Jd;~j@vW#g!!QCaP9t7^O>w?*a9 z%~kK;61Z1X1Gk_cDwC>#8@oL!-&6xv?ubhLE!E&(xV;_jZ_Ed!OyL_4Wao_CZ+NAe9NqH^)C z3IF~|`r1?3Hwjtp`G$KtaSx$s=yBw7iyeE_4|yY^GScDBCH*^S4YJ%L40k>IIHXMD zyIE8dx!eO-%x&Ml#lJ%u8I@NY?h&M~kD4IMZDzQU+tcI%;;%*>k;^T0?A7_c*eLEp z4!0NSZ$ft<%RSw2b-hLr@pI8r$mNy?xZXWcY4}^hzb}z~Df$3eZX3hZbyq(TpE8~A zkvO{CtgZ<^sJ&%yuW`8Qhg#&@A6c$l@2P&MM|?AM9CEp>9skDb@93zkb-3q{zBB5H zEVrSt_o7Z2GLiUVG#$Czu1-Buu6JKl4){Ichh?O{b9zl#$I)_QhFf!nKS!(ocOU-S z<=VM>+b;6PMCDwEI}_MzyoWk~e3skQaQ%b-?-4uU7Q-Eugq!Vf?fc{1;Ywjt7AN5z z>u~e`2YYkj{+fh)vcnztKX8lSHvS_~Zl}X*gD!BmLk#zgKIu}5uHu~T*Y1|vR;QoT z{w(MIsC09<*OF&Adeq_GVYqian<{S-{|R~*x!nFv{q?A4c@IS8eTTb|^zsyI9g(dM z^9}dQybP&Fd{fjIx!frZSNomVgN&p8O!(nU(qD=OBg;M1aNj2GL-Ygs61n?cM_F@c z`!lsy9*#=P;ntbSK1-+rvRvDarx5oXdK0~jbY13(%UQRcmLgNkK7_Vk&l|`4A&2`V z={KQYk>&D9u7*&}r}+&Q)EGsP>xUet--)lg8XuKe4!0@k&qN)O9qtU$&quE#%Z(U&zb9@BsyU1A7&yAzKZ4vxqjJb!iE=xX zJWbGf$Z}g6?hxYcL6gu}r0)w$zxMsxv~A+Psr4amLR8v2+=Zn70R4t67t1t+E}HHC z*VP;g`c}Np&lsMl59(i;7?n{DcV2$F+)2KBkmd5)N<-*T;(GK=lc^k+vX84r489=q_aa(9>{d5;q^cgHfsga_#tR?`QelBc$Pj$;tQWs=wTPCozR}q;So>Ts-pWd&uS-E%!42 zZ-%-M*9R4#o6s6IYqI-_)i!?E!sd;1d+f{2dw<8?F{FQwHImafTJBK8T|wMONQ17Q zOt$}5ePeIYw5S}kHR0dS$*0`!I9l#h!~Ij^ihb@r9LrC~t~C|+A32dqss1gU9+ivW zTK^tI`uZpbS?&_Uy@t5ns6Tq)(zFWp&NJhO?e;#!dc=Pc`>;Gn9$mjak)!3Z&9R2i zwfCjTEaIO-pX5|*Zw-xq?S7(pGgPSTg8Gcf(o;Tj)>J|pfL&TH7w{=M7BJ5NXD*(BU@hf7gt*ez};+;5X` ze|NZcT)jK?#%8g;gS+~RQil73`Hx(wxL>)AzdbLoGHn~F5d z;;8-ETJFcCd=O{rgS{Vn&+^>jaGxXnC+JsXxz`$Q-dy@RbPpPalskdVL6)YaNcwk) z`;d+wa_2JcbGS1|zYKkeEO)fwwtOyAu0Z+ddZgUZG@3HF3!Q#axrOti(qLPn+#cX} z6tC-$E+fcixz8Hzfe)s$=ZOCeTd>?*KWMpm&qw8IhdY{n=c2Z=h0#OP8u4)L;pFEfFvC@N>tC{n@HA|M|`KXL$>w z{4PWK_Wq$)*HqbydkfA%c|JrNk+t`zxEmz&+l3htna`e~NcUfK zxm}(5tM=wB;{A}rZAYFiXdtrOVTL=GxFu*g`r>r|I|**P@wS%!W#ai*??VNPdG1b0 z`1cF){D3wh%YE2z|0J%~^L{%%kfYl_{HOlD#B;a9txfuq(M8B|A2-}rSbugW@e|M( zq~9~tL&|L8*sJ?a6ulgkcOC8`(r-fb7bLiB!J#4a7;(>{WoQwq4f7A$a8`PX%y7zW zZ@49|@!XP{@WXx!`RxOAF0%IiXt?u;TY}z4`g@lvSV-sb9dkXndB<0*5AsG-E_1jU zFYucq=saY(m=w2n266MyQdEMpK5U?$)c)*`K);in(ceviW z%zHZAn(z)r4ISC4b& zWc^_0X^(h`JwDMz=v?IbVWHz+Ew_RXqS8D)QEuHxpZ0GJ>CMq{t-Vit%6H%O{B3Y| zHa;tddqWa#e}`-P_1)p-t%}MFxb=J=$}R9lpfL{DJ|FAvO%)M84?Tt4=YaCAem~j! z3jevqTOE}x4)-O}zmGmc)(^*;a=T(gx@5jge}nc%F1M@c&n&m-L&m?1n>=H0W70Q6 zrz6X?&xPH7$&gOO_eNcjTW(q1D)#I7A2I%QxH_LYkUX~|%e~OpTiJYSj>FaG*qk+t zQ=R!=-BWiW%t;QHrlrBJ2>yS|Gn{wr4c;$`;eO-T`yA<&yV&7c|JvtyMce*tJe9EK zmWt!a__TKRVn~{Bxm0UdfbfbP8&SwBND!`L?E?{FAit@xv#4 zM+Mi8cVeW!09}cK{vA!+I5Zs)x_TqxwGNwcxO-iD{Fbb3D<__Nne7#TjK9? zuqXQ&Xfi_jm!<6a`WbTsU$91(_@@2+eGW!+tRb;3b)`)xQLmbkp^x@?Q)g2EaE&J`FgOL6E-A(>c z#C2NFep}eou#-QYmw|QVd-B_Q_9*8M_&r@_a@4C*`_K0Chqe-z{XOj*9gp-os*WEq zwn^bWZ~9+b&q@Z>l}xc}B$L+PlF@bLpgj`(kPwdTxhNB@!+r{ft9&N+9rhmAA zd6+UX=8vf>7sK`Zyi!8?4SUv*cR5<_r-s|8oHkN*TyVY=WiR*-Vqpry9 z&w815Z0#+0sIJU${M(=OtA{X0$Rn8_}!x__)k9TZ6lks(BBV044iT?)s?=?i) zIb2NAP@!G#XrFug`wLlcYh@<5n;%Gx+k3IYon*Kv52i{NV{b2xmF)*p2sg*!4j}#9 zLHs_G!+pwdml5{~((oO}num$hIy7;wP(Rytk@IL>xd<**F&?&%{!f1AXOGPZ|9;?~ z3f)iK<4D6yj#&&k#vfggTZ|9m^Qn(he;s@0lK#MdQss4yw%qJZy>H`hd-kc}?kG8Xcvub$b_|v|0 z%Wm34g=DMk-n)0hmelsf_C^wJDwSR=dPC`YFT$cI6^kg8Hial!BB^MRq{8Mkghdj< zs`QTkckY?#%$}}w|7`R5{5s5@`R=pNJTqs`oH=uv$WqJRK9su}U2k#yn)^9<+mT9t zahwNN?L+PmoqvsgbLTXXPb{wQclLlDPd~)b*xO5UFC*_xGz(2d^-kgY(2RE#ak6d~ zHxiA}{_OE4a&(FtXHRf`pSu#}S&oKl_AUIAyrXuqHxOFUI4Rnn6>xD-+!>ntD}@v{ z{Ym;?xTd|erHuOS)9D-y_a<%cs=pHC-!}|zjrj!;!e`s z$H`laR-mRYCP(`nHQrJ7F3|S=sO>GD*MvFpBnd}rgZ+9bvlHz_#@+`scls{wuh4F^ z86|Dyesh?^U9P#8(XStIgqrVbA`2~h({?-GX9{pM+&49M4g05`OTJ1A?&Y5tac1J7 z_}M11*7EQ9luH?(D3@E@FEw{QdCSq;==WEg=Qzd>>$JUl_;sq@!bMHwM~nL*WmNz0 z14m=8*-!42J$!Q(4MM${aLCT4ip3V_(K!-tPbzd&?Fzk;ZW8LZay>&fkarLWb+t+?jiM7J_!6pU{5lEOoeJ?^Jz% zF|i%vM9$A!(nLDLP1oE;`xxJ%_Q-J0(cD}9#P@%(*DdOdGPpp!@Pu<;v2u|!jxgVQ z%v;k$-iB-X$qzYS^^-qvG~Bw*(8$+cQkWA>45uF`-i}dyQ5&Fq8?8tqm ziTrMHU*!Bx-b$7=91Ztu&Fx+#MaH1}&|OG@fS+;@}1O&CDl)u@oZu|CgpRSK6jk;}DR>i_fkd9&M-WEMwbR}Tm8`<%SZNTpvn z+WY3Kzf~o(Z+`YSP2?VnyOZ-zs+uAvBf}l7xyim1$wb{zXEYTbX0&zcr$pC}`EF6# z7RCt{cL3+Bes&Z`!`-jBkC68SQmM+oWI2*P%RIkxtaZPK6#1cv9DcaluI4lDQ{R<) z#^SQPOeLTCuG}k{`vd3M<1oWD?WzQBE4XG{vx;&bq74?8PpL<_{%R?5Cb|^$LbiXm z>V81=Tk83T{Mk@y&Mg9SF_+aitZf4YVp>Q|%#TIuJ=ijj| zS-$6JxcYk^z8a}1(g>+^62}b;fODHT^=9JCa7*_#kqF$}=-DDIIe+w3iEJQt2j+YLCQu{I6lE<4I-At0@2OCmt+&@8JBU=v8F6w`y))jTE^TEl1Cy0kn+> zQoQ{-ewDpz;pQgzF^Y(h75O&=6*@u;Wbkv3pGUbxz;q**PGPE4&U?- zk!pU~54W23!x@}^U%x~-pQGW17_*UlMOP)uIPz7x>5Gcnabb189F^u?$EHwD-SaR>+#)TeraZL7gJ8zyVl}fq`AuxbJk_dN0jB9$)VIDr`R-bX0z?Qly|{c<_n?C9Bidx!ILPfwJ5 zj>f-_Ywm;O%|Rx_s&3{v>{(5^}I1woSF3#`A7QYSc}_%a`P`ul7 z$tyrAJu*Hv*Vvm^$1lU-n(O>D%BeVe%Hrl|?rY?|uesjmuBKg>`HM(hzvNro&o%c) zi`z+a_mY=V+p#w^A-27Sn_tf_(=7jkb# z@^3NRMHV+m*;7!i#l1m+=zrDxP%rWaA~ipx?$bs$r0@EJ@u}|D&A24@Xup(L+~JhD z2~9x8-Up*t@tw$bt3M`xEBXql`>C#)oAkIdE;rolWBrnGgj;WQk7RuOWrB3$Xt?V% zw+8z`%p+f=g&bqW@2?a}z!&+)`Q;3_PSx;i7CV$5mRnr?sox6y(A47xY2cT^mc1qL zzD7qL<=PwM_mg~c$om-WLcgMMT#JjVSCI(!5xrh;?x)Osa9Jb2Ot!e4>!e6;bWvTG z+fH*^9Frn<9?RIQKE6OrxiIWcOP1W3Tpw#V&j1X!w6$N>SlrK!!`23j`;hVPX;E{< zH=4Y0NTqu@hL4XuPZsrWd%tY4{9DNR-yNMK^Eevr>)PHM{E4z!bJaf2vE~B~#KWn6 z@zr+gt=qRgc@*w@7PmxmM{Y=zFEqD?nw%tlz4KXyTLd=?1Riswql<4{Z;b=H`<( z2dVTdNBjQRTsPHst-BFGWj+0J1KezIpgnEewe4%D}AWrp>V8UCRp5=oWBySM#kRi zP8a5Db5e@*M>nA>P+BSV*3;qk(&HV)WeQBf`F>ey`Qb6ne+8{ZhRbb)O1@*WsWa3b zWg~kW)l0|2fqwEf;sGwrFPi#tzWVRWIU4R+&X0Vzl2?FKs?R-v-9IQ_sHDbGYMv|i zcE9`#SM_Hz=zJcc+(NVn8SbMBguRoRrN~og4Jt+je&!KNS#!q+R(8|gR#Oi>_5DTm zWWO9&R}q{vq&fc05*fi!RhNq2r=1@q9MVfO?iOvay_g6~;t z|NRBzJ%d)D#Yn|_ece8nd-{{2`F?rI;;J}M>t^1ioUxZbRV8N@!1?cJti)d7F z{x&Jn6173b-mRK@9eMMSO0RQliVwP%#%>Qq&->+cxTZgO8pt}ze1HsBJ=Z4rwv$({ zE!P%QRD&@w{w?6ws5Z7v`}boCskkj!mq(4Zx=egU5Xrr?0K<` zo_Z@;?3XJnd)spUaMlxa<7l|%d&%#z2H|4zN1+p1Is2yvsbgjDR?Ri{>4h)(rNH9e zK$(fC02!`Y7pMG?SC}YIkiQ7^>R5i9m^RdjW5dl~;+L5g_f^WM_jJ}<-0_;Lz8n4n z`6_w8m#J)4$@n+-Wxp)3{A=R3%;FYkZWO5hQGH#kbzdfa!*IW_>^+RY*a7n|i%auY z$!ER;SF=6+FX!3uu-_98#c=$HQ{LdJ6&@(%w~RXoYOxZ-myH_@xot! znQ?e{DdX^C-1vRxXrG(_Gsog`8y>Y+)!T6LZ$MWfyB(*#Tk$dMkt51FmVurrut*xGVley~%RFTx;2@>g^Snt1a#uo_gEJ z&%E`Pt>f4DAp&bv#}7zqY;6 z{ugdjxTf9=_kN3OzK7?vHx}2lw^F!WW7s>*;{NqF_QvXWOq`X$9SS$7jd=v#Tr}U} z=IU|yy%UzND#+2laeW`9X>q-^0z;+>bfGcXpzD#nHq=7tQ^i zylqG&H4kF1=QjRT&ruY&2yPMFTy-*O59O+##yANX?uD8=g}jH5N{cz}c!#xO?>haB z;l9WHlj4R~5x;Ov8p``ZjkspLs>`c!**gw5LDjvIN=20WjB*j@f8|}y{|bGJj6IL3 zfgSDX-dvs+A(hr}+Qs?obisx1`ehqjLM@u!=lt!cY6qA5f#!}Q zZyK77?s=P*acfe+kZP< z-{$&N2Dbs+bZzgalu_TA*~HQKp_b-KN5*C77_?|{Qgoi9>#NUFUw*u(ejckIG;uE<_@$@Co!YGYcl1-zXe-aE z>^K{smS`TQEVzm}fNdiA8~oDED&K*hpM^#t z)y&oJ*YTJ%pmU0}Jv~LvK+1*|#O~lPkzf7tp~bDo`2lnyGF&s?xa!tK36tLsdF?Io*qc{I zTwC1Xl(`<=j10Gi6Ii|?#*tIWpNnQ9+uj)-dvkx|I&!>QZ}T~SDS8bVE|;>XAHF5; z7qkm`?Je=xo4w61buF&3x9XWL_xL#MUEr}dZM$Diw7B)*scT9Ti))@MoQ9+yP_N&F77xF>3Rw+*Q-Bgj|jpW-)n2lw$7_gc!0L-$zRu;#u< z-fFZSjcVq^Z?wNBen;#13=?PJ-~IB8#r=^o+tFTR>WwX2RPw3$vb1g~ay0VVTV~ap z@sGc|V+c`MKc zRD!|`K*nvLe@IA>d6vD3TfEmVwbB*ANq=#^iifJ*oq1Q)|L$>qoNx?zW-J-r=a(jw zOV{PDI5|nO`1y&**h5#Ul5ZkEdl;$oO84ZL?-{7^(qyPi@JwufxiRDw*p+1nwmkw-t6S`Kzj&YT0{+=5{B~q`D~u2p<~e49^8*y;MDgz-A>hfkm|Sd`ReeaaMQIRS)AV;^+CqJ zqcwLDc@Lu(&{L?aIb7!2)!)BSbJadGD(=%00KBT!xA0^7Sbl|(xNdaly@L=w97S}vCsEC^r zcIICVw>UW<=UH48zke~u|B=Nt@1;3rJOBPu{FcCtz%_AZxSv|wGVOQT+{a{_Ee@#5{+!X16RLmA|qfttGDDwrRMkBYqcIW49 zE=ZD|98H|IcFOxMA@2&LlG-<8KV!l|{#V7RN#?n3LA8K1g=^~lddl5_CL+Vl)!e7Z zTaMNu`Q0aZooT0MI`*XvbMD&@`0=oS^nh#H)tGvWv-wW3fb9 z`7sRlD$8CIr@vU--kKW)>VH)HS5)tLaA#Qd8g4JvH5fni`x|aW_D0~o4%dw5w_)cV zwBNE9*Qw-F*Xz`<f(U)S4c-M^T6D@zSX0`I7K>utWp9j&?lPrc>V2uMS?gh4cYF_~*F@w?FCn&%Jw zm?wRW{AfCbx!f4>Yu104!p((i;&%<@)OF!gi))@g>>)3;2je%St_v@~?Zu`$>Uxvy ziQlxE0T~j*4?)Tr|C;9n|BoN?;ND@`+Z0|0)WzcR2vQ~A81g2gr_n5wdJ*mIGN-+T zJ@)3;3dn*O_AaBGvG>J)QEw%1--WBwO64j6l~TV^>?%vEs)mt|Ls;x|3S8eH98_wc{b zc*qRMEpSzwjlk&lIDZ$a*4MT7Tg`o+yi58~uV@@f-Gm<#d9N#({i7!(%8Q(*`omjb z6*LdX!*ESX`ZGb6Q|1k%=FQYN<2%l0SW&GJKWl|fMfO-WbxHZL!V=EUJ~<%8a7{nE z9-ivIzvO8A+erNa+S^&|^SG6KmDGGeMdR-hxL?3ckDe{EopK2mFh_(8x4Y(EK;BR^ z3EhhF->2@zRbfxO1X-f5V+Za-S_Nd6Wp5$pKZRaEhRbUUD)}~%_baN|AOE9v*V50T z;anFAbiJATh2k8>Va$1()PVDYs3}s_6`fCXxQREAcQ;bL-A}*0VL$$B7m!S=eA*GT z!8RffTIH8GPG#}e9E`C%D==pE6@j4`6`Za2^j;puR?Zt=@^i6DR1iW z{zmK-p2hwe$oNH<_kBUxEl4GGpIXs;d_LT3EbeLC<>&EmrBi?acoKp<<#Y4c&?;PM!ifiv-*rEC&)z5hS ztDd7A#m`l${}1+NcL~ULi(6U#ErMG+;P#udj}p0)JzUO8boT90@ywLFO1_~VCd!56 z4@K&Ez3Mm3{d$pZC+b}f)xV{m9+2BBfm`C?7Qij71a6s!D`y0x70>?6_2b|AA#J#G zT{3=%z|F4&ZnlS83b(WpxM2@B+%+K8LjT( ztpsj~hnvxo-Yfd(He<0o)B9dn>~ag>ZlOaQ}@TntJ?D1oz0MmG6gQxGmtC z{`bH7*VJ1H-19u#f8&RC9zT@Az3LG7p$zW*9(yYz9;ACfp7n75jUT#u{E!BB?IG|( zI@}*T_Ev@;vf-wjP(IH7jUNVh{E!RxB)FB`KZN1-vbg*1sV>)z;g+(%oj*6@_3kNE zWA(oquOH}q`44rUP|>)$6z;$gA_c7YaUQt_)bLK70z0C!~oRbRA3&`p4Oh5WP z=c{|Aog9^w>hGE8oa(E7mrsrujh0bsC`$|bKc1L0Xgm@Hy-v; zPQ62zbfN2qZ=xje)hF)+q>|YmrD>@A{j<5Q7WN59CyU#Ha_6H9knu0C)2QUzOC(14s^aeHw7`{-k2xJ;=<{kwEU<2(& zi?85$pT&)E{&+MM8SZM$-AdjcsOr!Zsk_11UvL2Zp|Z2cEXgD(5 zuQYcHdB+W7-vx96Qv2WKR$-qD>|L^`e4J%p&+`L|dt58dWzA`q0nYP2)ldGZxu^b+ zAf5TSN@sDj<4oDClJP?X?lTrQA3IvU$7^XEjlC?1Qpxusd8^QS=8 zw4z)$Wc)B!b0g#pnTk(2-j2+;NZFaKyahj;ZI;Bu)^i4mKd z)cwBARcw_^oaMr;!rCu0-Z9)JH#+MzR6Ew!)c=bchTGWU&f@P|fL=nz4}%>ueK+1- zT|Oee6jfLK#L@0L+_0xzq)*^^5?s@cTV9+TegEuti>tcT$ujzIx6rifOC0|RJXTlbetJ`OYaKEYnHvAQf4#y4H>R7jpRG? zfdok&Nn1v0-q~KiKY59B-7xlsCk5mu%ig0YlZiSb!+j=-#a{AWMjxToXmU$prL)7^ zr27YBZ`$1fsl$3;6K6{vttLrV@ZJV8TwbM7$@f+$QL@NyiPU;;Wv{8X86JBJ;kJis z;-L#=dZWq6a6gP<#aCw(>jcnH)E6zlx66@g51qM2siUzs`##n$#ISchp`n`v%E z_Ad9>oBcpQzOn4RAKo1FuEph*+^D^$Udetr=r(i%Qt{CFbjQDQJ^sy~&T~N4rkHrh zfuQ=cS14!fy-IVVbp6ji&0iM4Z3EZD!)x$L&{r1sI?YYKioFq0HVUAX{C@LZ@mz0v zdx-lt%U;vox=_y8dynQ;)ZW&4{2P9l`6|oae()|u6D%&TPpIU3pS(RN^=f`6QueZK zeKc;Dc;caW2J1*IdyRivtFpjUzy93c`4{J@YldnMCYk=B1n##nxa}?Ol7GQ1gxF3-Witbk4c8lIFHz3;;e&r+FPj!guNd5A z7WcD%!A*mEgXM=6@YbPEEUwvKdk=YO*RUQ7dHqn}@k9EofXue+HSyb&vc?a)wY?R^ z??zAj7QlVmvNsprx#$XuYwiPHAn$YZ3)+nA_}%S^-_qFu*=E^mt`|pN>)IRCPJ;I^deP$c(cG`e+l^AM=iUa{{n>|} z{w#f7K<C>=z~Yu_Zbkii(kACVK-HTX_vI}N$Qf`= zy%~F#SzNYBSE*dR{gb^BxRDt4uCTaF$3?jn+1tWnZ*dXx!!hjr&f=PV+@o~;Pt@Lu z`gOR)mc2i~+li`-aqI0^z22uWd2LX4)Ct-BZ;_|pDSIv;-^Z}`LduzVV9FxuhyTZ3 zc|IVitq-oZODt}yf5A@{=EG4E&Lkua&Y_VMmmV| z)prDjaWvdhouB#g$(x3rLXV-bSG)T+*Vp!DALH!fSM)mT@GU>>jyWCNl+l0K9=rq)@v$MZi+KG-|n|l14 z`zG@baI>AV(v31||M8w2jlHuqcNlp$AeAO^+=_4aqsVS|Y^|O%T+DSSvML}W;igB= zW?awtXAe%4nH&w*+;=Y|Zz)pg4UYAWW?e58quQ}aZ`5SUE}Vf`mM1{v-O=O?~yMkC;w?+9e;cD!v6 zd(CkDPJ1sPqv5J{5#j&WasEcM9T|Ink7C7l_O0}F=uUJKs{aY|C8*lH%(26Li1YRy zSw*h#@gMI8)^!pl*QBDmT)cxB|j&&#==4buUbgE9t#DIP5t5JDyzk+M} zohRU__?{TW*htUMU9L`^f z-b2RTQJTAtyhh_$yN{Zo`mKl;+E;WvHue%?V(iWPn)`XUCgt!SYTx+Ilv9@p6=&CS zzKSz*j#}?!$Jzkh)=az&;O7yzbx(8a&2YQJHTK@3?KNC=jE+<3*9$yxZ0ya4+sWdd z2k%}q!{Xkhx$DW>iK^d`B1bS!vH(B`83$wpS!FK`4$UT^Qk;Q#E4(?bFw`4Q@4%~EY@3rv8qo*zI zD$RZDPUf;F@XQ5GM)kI+?`84LF`nb(?smp~2i|A=Eg(4^T<$*3SN-o{6J0<2p}E=Q zwM8m*=UBfl*JGsO%*2Aa4z(kY!rKFKvEky-KAb-cU5|`^&3CxoBX1|FeHVLvp;YF< z!;BYpbG;bM{Sc4(WKJWey%p{X$RxNXoyhs>J0op5n)p@E^;G;8;;*yFKM&dQJ6ZeI z*qjG0eK+j_t_k{qlo^UfB4clB)e+NA-bmhk=n>Q;qe`@&oX#2(#hanodpJ?`59xaX zlGX8G?qe3$ydPB&cY&9?Hy~qTaG$rhZ0V{}h4wD@a`y$~O^aI$?>+RH#m&>)gh@O< zMp-BWsqxul#(v5VOFZqZbbml{(Y)H7LzGyZ&9y`R}7zce~v6n!B95ra%1VoSC1n<)ACR$kkLFIK6E8vg(00_Bu})+{ zm1zHv&w#|Px1uA0vV!(z#t*08%Xs|!s?vj_;WpLxEl(bmBm>D;NnQJ6&7YZZUs~;; zZ0q9oXM-s>2Hj?H*_uct-$L?Mp^s3ldwjC72Yna)nd&D?bUdj3tQx;F?Wmv}b-HWs zmy{Xauc|bh=6qLKT{oR>QheX>vofU89*(ir(;0h9>jWjo;&!@|DK)Og$}h$bhO6Ea zdpzFte|3X$fyGU@kNt_BNRl1>lMmufV~uGrqRV}r8O z;;Q}rA6vt_pj4KZtM;=!L33OFjem_FO5rv*!;Q0(cz1|frvvYA*>R@!!Q4Ocu&9S0 z=J!_Q-@^Jq>1uH+%fGqD1?3vJ=DO+K|IOIT_4xnV|E&n_bcoruLqmsE^gc}6er>pYqErwePH#=&Dv)0zEw^dn|AF58}oiVz{Xn*Kf z_t#%Xt#=BR!l~NTwJ(QkB{fdA<4XPAP6_AVe;P-Z!95A?f3+{|_@MMS1ooxFy{;1M z%Y`%J5ZD)n`(`EB7lHHrA+RqWZt9utypO%!TSdq}#ov6@$&d=+oC3$R=gNw|BDfb- zf_)`$?l=VYmBM`%?tg6`k{*-|hrqrxxXIoAyM5Vkvfxy9{pP~$RSEXx!MW)W*cXBO zR3+F~0O#F9U|%8JopAd)%`m#>tJ(KeW!dd_9QPOA>qj-cDSs)P`e#*s{g%P)0{6e# zm)$TZ!w!Lcxo{`L4Ql^Y)c?J}#nbD*mOS59DG$yIhrqrF+^;IZz5+Oj-7CL-3*m;~ z)^pqt9doF@|DVPk>ia6IS&Q!Vr}@505!`bRfxX3WuRjF#mcX5H2<$C|yAtkyzP>aH z%1?*DzBIT;o&DeK%Z8H!r_!%4a0kK7)$!Sdqf%G>|91blyY9j9_&xJ4Dn;OoKLqyW z!(CVj_7%Z-{}9+$40ku&^r#n{dy4$?>08E`Ax-ZHqC9s+x% zG4q9RO6 zr%{i}uWxA*lr!P}TmLQ9i%YWMj64MP<-(n6aZh7jxjVWDdFKhok~ay>L=PhS{hBh* zb1(4+<>kuwyWxCl*{A%d^iTH_|1^)83wJ-Rs8XT$xk^_`YUKLV$+<1roX42%13>pR<1-=%QhsEofm6qN5Q`zoux z)8QW0yYlP10B&=*@zi%(y@SVd@96PJF`NN#D!aZ*;7+Ur`y`8bltW-&8r%(VgU)au zx);*_^L*AkAIpZ5bbjUgFBk5~aQ~})d2sq40{bFx?|^I48pc*1pl^^`PP5uw|B_VY ze)g|H$D=}qn>pM|OkjRvBWt1LgrF2yoDkid>z zZO(4imKC4KeKZ_GJ(^Z<&IhQ?RA>CFIGr7k&;J1H{n4rDkzrNKjRTVwJL{;-e04$d zpe(Vt&roJL`T(iFUU7fZ>xYhdFh$Z)0JXil{P*`(ZgQ?uhFg4cP~Nk+9VycT4M2wb zr{*r0!#XqaZ$|1nFZQ@~hld+(!Tq_#okW=@(9g(l>p9it8!?SF?&vWTxR8Bhj%G}Z z)Ea~Z$2jY=jJ;{Cc%IzH?Z;laAX$!NKii)vYq$}|^}avIOH&m@Qr}g!-w!kE8_fFd zGPsT5nm9k2axKv1$Z%(B?$_k~j?x}tpJ_CYd9xRgT8BMPuYVgkP$Y$VPHW4&9^7=N ztn}dg5$H)|xGMZezU!Dj_dm?u2 zRT86dX7(q}>FN04Ks=ltlvgZ!AEC@@^dT}_LN#h{@KM?tx)fc6O1bvbJBoEz)Z11n zLHXDCp{!d_N;G!>>jEmu_SSbz5`@pAHRL#nS@(AZheEa%eCvu4rwaWCs5XVFF` zah|bjw6^O3RTinV__pM7?N$A)Dj7fK!L0|^#M8Q7RirulC_QO$%{uuP<|asQ_E%C# z?W43m?cn!4%->rGHxz@r(Bhi!h5SF)2b9<5b$f5){kc>??xuvBf=-^OYYOax~n|ntKv? zZIJB;?>yrHKfwJy2DgL7HS5{`A8uq6&%NN9>&?0F2BC{B?j_pZx#WF?RQi$QyoUIJ z4#3ozI-bb&M)|k!%AnNh=UyMTDc(Y22^l|_?{d67teP|>9i)X*F~Ftrxb2CxW*4dD0eLygN(hiGOzj<(rEUvm< zyaV$?i@Q~G)%9Y?V7^n%28G^wtFQfF>a7^=Hx~CBc)y`)&$<3(OEr~zeaX8N-Gr_} z>ixYD$2!-u(VpvhrKb10PBHR+ScN#}!?^1rY9&JFj%>}v*8=F^SU;b^>8(h!J0e7%!n zVujz!DDiN^Q-ZRo61Zg^ZZX_rd7+V^Ry4i)d==SKo$q2YhBf{rd{pu+TVI_uUC#RZ zEgbFpG!qLSQ%L!t=x)YQaFu_%1E@oNG(+u>;wnG%k{4n8b1_1#B~#{NvCptS2O_O z?r6Q~I7^sI-d{)!DL1lDK{P$edK2sKZMie4T%4+U*X4bev%lUEFFTFwSdJCNX&K!4 z7T5d!iOp5-pKQ$HWhK(L94q1$%?ip|>+fAX-Fc@a1AElpyO!&MuAhV!tM9S}*7z3%4{#Z~N4szq+2Y#Nklmj8-6_md$ z?o7^q0xd#@t8X!VQ=hITv(Q?8wiTajvF=;4X~&AIz5^cZ*Wr%2(6v`_H=yqarvi(rt@k7Bv{0rCg zXCHF@CRF=Xmpevt%g8%!1@k7TB}y-0JjpmJ$oKiidB-I$2Ibz1Tt95RHBoM%%pJ(s zYvu_aB5xjg4yo^~D|^lSTam}!Qn<@4?o!IUhE^lPW$HERhYjTYfXa}14{T++d;c~< zUo%Yn<}YS`^J3TDU6hex_QpYmd!Od^B=0hmkH(-8L+PK9Y7e`0zpl6{9*>B^yWO)2hZ}x5C{rwM@@u?*k7^@h@1vUAn7k9wZ*J zrX3f+Z9UZWgNd^y7WY-nt*E`#_i)o*<$V&1YwGP3i~G9fR#b0IJ={XLU&P>cvAC<^ z;I{K{vsVPA#W2?oCLVfQ+%<9dx4Va14EN3$+#weC-8i@dJlt?`P&UTkUTbmRkApkH z!!3o|Y`E(O6A$Ap?#G&2Q9O+GaPwZ{`6pa+U-$sLC(!Y4xb5OI&0V#UZz{aWzE9{D zbj?r9%@rp~$!W>5dyq3vtL_Wc^&)>=P%gjBwKriE*C5mlnReV;4NPfopOW_-s`eJw zDzyA6#>b3F!d#D&HagESRl88*$-MVi&vv;pzoQDb=ls*r*~oC&7EC4IrR3$Kdr`@m zhe^hr|M&wGkMI}M$3)hTOr&H$Vq9l2eqv6if+?UB)hgAA3KT#r# zp@xT?_N%U)Dj9nV*9T>i#r>3WyU@j}UG9^b`}i83+o7s!xyEsP;cK1^b1_+xm?$}O z9se3`!Dn!*;lGcTr}KO1|~e+kNO7PsMtjK9z# zWVoMd?y8R&r=!N7@Vx@G8hcBgPmtYk!_4g&|Ef5XT|B?L(zSOf=dVYNKXtjS)i1!_ zs-=uG(I&JJMee8~_1Yv$*AB@NN#|QFR=wrb%9L?eyW`2)-(m|o5gB{OIk$+u^T`{6 zMxen%c*epr5%XLmr;}My%$l^X(D_L%#TmdrN>6*KYym!$j=$+Xva?CZZ9|lq83iK*6 z_CBq-CvWEa9q4H^1GP}&>T!x8VR7EYY0d4jWPZ-wyyG%ujKytFxiipZ7PqQ%r|H{7-VRh{ z3uEtD)ugBk9?nbHStHEr)jU8_s)Y}yay40pKZ-r!G^i^*4M@*1A&HzCIS<^8*d zpWTQG8fVHK7Izwplt)tb8jE|Y=BoX-$C3Xy-w`(72`=E*D8DYyelT3g$dsjUO*~AZ z+yki8;%?F0aX->t(35BuDy7~EsJ9~gFmH>~Kb)(dXO;LfI*j`F}{K@(4*np?T zPp%(oJ5KVoBCk7AsXxaB=QA($HL*&2Q#Pyn=uftasC~H7GBf4G>y#&*bP4C5IyFH? zaa7%|nlGsXw+@%BulZKr_2k=gHi~Db&Kgw+_cFL$HTP!9RoR{(<2jmoQ(Tho5%Qi# zD!t5c0@oqqU&DT(rn5h3aVS$}!%dH#E%GYozk@a-!)>j(Ew?iNfG$CO(K`CGBA$0l zr(LACaIVMdxkxwsk=ry=PP^WXvk9C(4LyqtH>|n!e&*Q)YKQhFIQz|+bs0%NJMGQH zL+**RW4LBqaw%mZ=tg9?7i;ch7B0O^elZ%_9PeYBdA>PVa}ygo@tby1raTGP%oBV| znIF*}WVn}W?uI)P<>X&@){E-5e6LVo$Y;GPs-IW^4cUrp%CAs>>jbhI_r{ zE++3a^a)yrRC}9B-Kl-RHtGI1pLzMNs$la>={wrBH;1fNnMqRhSC<=hey7tq^zT>i zFUMNHZ~FB#xOc-1>hlkScQmSRaeHWPI(ercm42z^d^gDK6KLY>O$<|h2%nrOZ(7`T zl$)BABxhLM^P(j21t%oRxtg1t5!+tFl@^(@-{PK6xl2&Q;x5+Qd&qkj%|>nUVLGvE zuE!rwj-^Vb&wYaZp zZbkEbX(P+e%N4cElsheMQW@6-l!1)BuWRmEb!=GY5~Gc}Kx?ctWT%9Ld> zxHnSHaNml98}@M1T4&17F}ROe+;wqqBOY#Un@l&}rDs|zgo@aHXk5KK{w2SITu%)m%pSqoeu%WsWP?T5zh$2=HlW=77WaG2okL#M2KEs?HQ^xcIuExDZeNT0EM;Fr z%PsCtnycoy8uHD|b^Oe0??w+da%!eLV{wfiKCrm@Rrw12u+_sYgPSzg^@HJlYjL;7 z;otopZsfE~>2Gnj!`q9hY;)smm*&YkV>qh$NxR-smzS@%Qn-sPZUK8kD{e!J zyDtuIeGfOBn<=$#I@k{>LZX%anlF!6LtoUu` z;f6bKpB009uEq7m!R_whmcXrgv+D#N~Q~Ft46KA6=Eq^b9&QQTy%yKh+X{=@I1c|V_i)2qGUeQS*AIsKp2ZEs!CmL!mcV_& z;(i5h3;NaKW@&EHcE%Q{0ZOXtlLd?&MsOdyn){(5>$=HpmlU0zDeK{y@o#`KEzy~( zEK#fOhfdPmspKt0t5GqUJd}0cM=;03{l#cKU-I=@k$le2Ju_2w!!_5-cTXP>8l_w#L&&iawx4YaLI~l8^laS%wpt;M)TZ2AFO`lDW8TfYrQuCgj zzi{r~%)CY$6v8-pNtg^VbaQ*~zKQi2BGu3lvT=N~Y2K$+}MCYJRXgRSknL$=A@jI@>olk8?{FdZp%J}gv z_hrssgZlsBa*w3FlYG}ps{D#NR7sWAs9;^1ZDs}fV?OXN#Rl|MLcWR7dJkMEnq-Jjud%djK;`b;_bPWFJ0n#6gOnTVz) zyW9=h-jAxMO7Fu`Wj>mNwr*!1_LmZ5G=3=A>u|RuSCQwFMe^^-l+|!^;qIn<_taDw zfJP!??@0Vb^1VUcCbSFvib{yxt=L@e;VROC$$b@%8yGB)gj0H7rVN^(2u?b@Myfpe z>S1yWM`fn!C+Wtb^G0{)R+UENPp9c9nLf-u^2$#%<=vktbKvGU|0|i4%SI<7W3S?p ze4WVag;d%wk#(PS-1`8-9>ri;wTs-Tner7})BpCT+?D87WVn+Z8+@-Eo+|I4@6hMy z!{hNoBm76dvsJeXvra5LGgD5O=*GkEoL|3YstiPiTZMWc`Ff_M%GGEpnvA-ZkUOV} z9EjF-yyXN8Y(pJj1B;rvqc6Ea+GfudY>e_W$hs?YfL-(O6DD`yaRPkp%^WeL6fA-Zcj(_tW=YI1p z_qzEw=NF-6$Z!X0?g!+3gML8mXCz6nRd1=UIChu4?Qqkd$dnr`?heW%9+4^ykl_y1 z+#ci&MK_}>(H8t*uAA5B^*f6DApu(WB==bs*VsFga)vu94twi+?9H2(DPO`(*ZzGG z-mB;xi#u9#eqyIVzpnbpblP3%Q<+j@lI!1AoPP$o3>kaB z(cD+bdk^hGThLanZTpeBZptZ6oc&BY4pXpfL8g?#HA%I*=Q%GS*~$Bj=GD&mVbxge zmq$-ddM1;7{oVP7?e`@}c7C#C9O>HE-Z|4(<^BXoMJjcC(&-bt{lZY6Q~&vJ+gsc$ zcsseFY-w?Gqa^WlCa*VAN$n3F%U;7RewOiqZt&{-0hAkwX4fIU_}4J{h9CM<&Tyy3 z;fEz&KkUnt#JgQT+zW3yT4r%)Yi_Rv_>lZ+O%L|NZm%EqXG)I6Rem^uawCwj_bHDb zHt;jAA4N_CRmMkFJcL_1{gvSsB!r~?JqPtGN~VA*WCIcqsLSB&FbB zKm28JeR}*=ksn5DuBo@OY9Z-hag853HFNz?Q*$fwLpC1~RsEUaMh*+fSh%KLJPB_x zdduS0*WCJyTmB-yR&&}ivir$#jBo9JvNR~dRcdn>B9C7yaKIXooU_a0ntJuNOv#-njoQN8W<)LUuIkPNZ7 zrrxGm+;ifnx3rw{^_EvFB(va}dNY35XL0+-;fI{Q(0{*=yQyvlgy@hsWWE z(VA=GtfY2GQdxJN9(5sONZpRFwYZTu{E+YQL-?qWbb{;k!>1Para1ht#N&seIw8ro z?5%l9s?~>sqOh`iayY*(`p^L>`pt%*bi_w~E;-UE1kPNc8CLShQ z+!r*rqW&z8#%}j#xyOZM8eDHY{A_Vwi^C5~Jbox_5Muw8gZBn8p1#4nLH5{E*!+#5xq$4{PCVK;K#1Z#8$^^FB$+;qTyiOIw25eomgP z$JOR}pfn1}&2SlJM^g&rjzN7?d2)VZ+`n0K%gC$In)wIhM+3NDpP=5a*v9$>J^!fg zC)9m)xJgJ}jA8F6${B9-Ke*0UWN+AGZ@NDuyDWR}hBp&^W^ohMFMxY>8|JRiBJ>op z?H%`}6KBTW{7kMF4;<{@ZIm;*S2?XX?g#qwG7G381@dMtl?f0hrJ~pdrRSNjA8E`7MJBl(fF;% z-lVU~+ne1cBu7j;*uM>OU3(b@M7b5kZ<)tlX&aKBaE*UWJhZpCG{-2nqIj6=u{ZD3 zkW7kU??)E***NS?8|AK}QS$`Zr-kHQ%U%-?J1p*Varn3MH|71C-!UZBrXTFz$sJt( zu8qUqY>&O+P9fN=FH=kqFx z--yTF@L3@_;U(3i-zH)B(Idn4zBWF%ZOE-}~RKo^(W zC=PoIJoe_E8mJc| zT#UoQ9o=VZ#POg(}`c(-XsP^cKqgE5RwmL z*xQY=hC3z>d&@lbruC;^f5i2#vG-DoJ2nn`=X&f-9~6=^;ClW0oyC1H4tvug<@?_< zxOZCi9*Bo-t{)!K+=}9%^Y`Wbn|3k%P7Hg;S=>c&*qiOKw-m1M%*FJ-#=mnc?&3K7 zyUAm3*^rR5hU@ij)T3?z4=#$q%elP z^C@fW4a8w@k;mTfRU!G>vUd%>WZ` zz2La;N6c(Ebd^<9daJe3D6{@;@7r!uE*Z=n?h1!*1`T=Ls?_* z&2iY9#!HUsI%MwW%iwm0Yy4~M{lVhi8i&1|x0d&BS$>E;Cl9vw=AN#-YHub|h4=H> z9(#*#4apmpy(S)JTHHr9x1xC12aJ|=y%@+5gIP8sh?2Swe$&wiMCiiyzupth6Gkz&=Z)9>vevM)8 z!xnd29QGD??9H7LlBTm=|C;N?%NF-{&8_HqvC?C2Zb3-$;ClUg&iSq%YBG2APw`vi zu{Z5r=It$e&GllW#XUlEE4p3`{A~EqhJ>JJI4^s<{6^Qk-hw%_ix~F4Z*dFbus7_nH*ao8zOd{y z@$j3)ouj!G#lyI5<^3CZlKZT=2mAMq3ta!c5{JDJkG;9`LUJBluYVu6xW#e!H)DHw zdvoW9WMT|^+w^zs{VWc93q1CwEeOe~820wFxL?F!?@EuoX$xr=G3@=t;_iyW-Xf2^ zrEpvG@{I9sjRDO6qJGGXqxM?%{z87@z=Q8E2D7)P-QG%{56LLF-u|p3WexYpYX96n zlz8kdS`?BZ%ifFNMbI-Ax31=@`{Ry-xW_==@p{tlC@zuZHB~81{xKYq;k9 z;)>?avOV_ZuLw!qCtd%l{%jP?1s3-TZLjIiI$V6Py_-Dt7Q7ykbK!dZn@?F|?}Rw~ z8}`_n_eMyj#ISdk#hny~z2kP3_itoXNM4U&Z;MM@dmoR(-iXKE+_yrKFwga`iHDvR zcb?`}6b~7@%i9}XL%#zz=!xGg7Wefy>@D!vo4z(AH(K_Zc<>E&{qUydRum5_J@#h5 z%Q}S^_Rg@lU&Uc>k;h(nFC^Pz*t^W)eiMhigZGs8Z`%7I$$ZLPM;acIDi@(Sm%4rs z_PHhb9vzb^J#S>K^H}_X7dY!R)Vd1wJS)F;maMb5zi@ud3CxKgWAAsGJAu6W z(UYhU1sl8jcb4dSGwU^SkIIt2V))@z${8-Ns;E?4t`(3z3S40ovZto_NR&WJ$gGu76+W{BO}-Wc)i{a|adheg(P{ zDCG>dI1WD~@$!zUKhrMKva)27W$#vahu_Qk2V}S(Y3_vk zcozgchn_;VAC`FhPDz?`K^x%0-5IcnzoC3dx&~mLRpB*7idho75_MO+4f_ z%aUC&{IJ&IHrCvV;$g7I59udoNy`Opy&XN(@k3jV#@-yw9k4k;hCYxgHzKbec6yxET4%{)aJ}(xzs0>H4nM5)_#wA# zmV9N|`!&4k(^4f589zLtxwEG;E=KFnO0;n(?;9aiUm5et_mh#_EUEpB>)(?eN|p1` zmB?^6YVOUO669y{t3J&5k7GUh^>Ixd?p*y|jERTRj#+XBT(2J*Qr2+y#o>nxHf>XO zn|4v$IZMV{_Kt$5+Qq#VH|=mIepNgyeRy>3~@gQeq$*(c|a2e$dcaY{*)Go$({7~9GOF}I4NRR%h?C%5bGn6^g>!xE1liu-Y$x46$!M#aMi z98JB|tm(wr$&aPVsVG)F6nOj)>7OP4qwP%KteXG-|DN^ERKwVd%4ku{y>~9sqG(#B z%^(Ra6DcJOg;W?Mw7HR`jX}|>kx(Q4Ngf|!9XA{Dkuufqm~oW!qd&8_#)pYh-FUw&hY!Ub9|~{Fl)-RKyZ9Sk#n&oH zcVz0rFPeM$>pZ`T+MsMywKeVjE9d=(88^7kEvxZl?j7`JaLxSAZ1$gzenp16PjmZB zqYa~H(CB8VGL3iknCG(!^>|Xv=|=7o%gf}uH17GuSLE4>GN-%TWap3iRSz>m~(iSzVxs(Vjj9p@J%12Uy9H<)>S=t({kZ&l4L%ZE~r58-<=r5{|c4^D;x^LUS+gq1YVFD2ES4H%8Y7c_>q=%{|hG)HhsimvZdh zlvOc&_|f8yEQb%m%K=pXVA@6T6Pc3ymg__JH!H~<=q+UG*?7%uJ-3qFi1N|h=pbXW zN_`w3TF#I5Av`jZ?-U*B!&34Y?(}l_klQWVhwL$#Jb!&;eR$w4mpi{4KID0PNDpVq z0?UW}@KWbhl8(s4`-$fMz`DQCS#NWHJhFXQ=kcNF=}h?}h7Y;qGu*Gr;X|lld4ru2bp+Qm3{Q_wFK_fO3o`Yvq-%|hP#&}%_-eUJ&6 zG8wM7UHnd7<3j>{D#=$?KPf$;eJGriDc{BLVfuWRd$Q)1)lcSJ8r?4PU(DniNUjg2 zUDRISax*lytah>6<3sk#nbHxi*N6EQH&hNEiakD*zM3gx;W|YlVvd`6@44|dEr$<9 z9v_OPGETL8FzsT8#qFTEWwnc8??u;#ylI(|^v;n!JoLUBZ?|&zP>>s4A2McUN-MZt z9~vxlx&6!GL+G;T`cOJ6lkYXT^}+b?mc<=h4j)c^KiY?aIhpcS3?Ev5;Kn|8=%GZ_;YvBEeYJTK$H)`%Y)~!W

0SVFRJR}<`hqT$X=8wC(b|8hXx26k27UBTywm*ZE+T5|5>Ko2G`pzz9gUV zp=~*QDC`woA401#Wfoj-eHi_z%e}rFJ`{U=kYeV+Egw>sG2ez-AQNvN&7ID=`Diin z`mn^~L(%F?srufLKJ2o%_m#tk{9B@Z$Xk~wH^BA!@Y-@W-r?o&A-h?0eaQYQQ=Wor z+C_~OJU@@RBICn2&Hb2lU!oG^^`X}8=zdbxXUdWoK2-e7`S~eJI?RDT(hN z>BCZs`&K!8DD?P{zbR81!!JFXAG^|p)Y7I$?ye8}h% z?L%ovrp$}sL(k9McuUIRLq_xH`cU*^rtGwQFzw=7i@Qs6%W4;!JwD`b&g9#3NBYoW zl^gHBv&OgYjl0c+nFgReQ=}?(~8}AFDZu)(jvM(WdD{a zZQvRoYOQ9D4Bdo`4{bDeBkK;KDr=a}M)o*ripPhN-!tVQxZZZrhJ1$Gy&OJ-`$qc^ z-p%#57(U2amwS6Te8}_oko#Ar9I$*C3U3tp+~N+=-0tft$pfeWJ&o*fRK10czlX;U z`|8P8pYwE*kUs2Ae z2Qu+a)7+m~Ctq_d9Hk+99F@~D+J_AB%jOt9TuVN~T~rPqLbpZxP#o`<+8-Y2L)v~U1$U(x+TPO@K~h3jn> zL&#@*__Z89NdIUbB-Jlp$ME5zjV|{Pr&uIi}ssbZXL}n>v&P% z@j*`V%OcB%W$?a6@!z`Ki#7LF)(t_!k=KVM9v=!%_RH=VKD=phTb09yg4?6(L+)vQ zx%i_aedzn08*is__>j)aitKsX&>4QY9j>=sY_YgEX>M8VqSoH%c2QE<&$l9vtPkzJ zcjLXg96sdT5$!|xEI;SENBWRZ;&LA@hY$H4A9AbtrN+mu52jr_WO1L;+_KumFpm%E zXZxiqTyMMBVsT$8hY#6zM*C27j$bCh^|p)2Ke#@;Q4SwUJwAkM`ekhlAFBN5au=4v zhs_=zvTOUL!r~)+c*x?eEQb&2dC@+U*73{baJ@b>_{oj;n{xP&dwF!bC_2wCL*SZr z@fN&~(eD=b7tQUvnQ;Sp338yaM!% z#l1pvZ~ldAS!eez^y(X&0%#a-M}+AQSIU&7ID=h3He{oqw3(X&2JWFEe8J@Q1}6 zRSq9=21NT%*upQr#PDIp4maM3M8VqSk@vc2RP@ zUpm0``q1=GH{R@W_z=D~+J|sgzl?zEZ5Mkj?v>^6A*Wq*yU6X%`9%yL2JCj@?N$yS zhIxEQ&-Ke6F?`ryac?h&54rb6`%rX~UoKdFqz_~FxbY4xhYv*_AHu!-(g&_-7ioVn zK0xh|=^sXD?qb$$Lwk^S9JSfwL#U5mCd2jChgy4GZb3PG2n~w%p`@>0zKh|*CW||# z96p5FN7skK+h`XnTpzmZbFS;%%F_7of#&XKUFH3;uj_UCz~P$lL%|(>=?K^BLxB8- z`*}Hhko%*3$hpfeW8iw*#TJXZsT@8Ocznnh;FqPA4?PcX-44w}Cf@Cud(q##n;l(` zyyK|!4$(e@@A1pQ7(R?6ui?rWPXAk0KUwVYA$yQtntXPo4;>G>+!HmotbQ_I$7|-J z(g*ux09?~9%zX7qi(5@|%bc(NJG!4N9>O>ZuD3p1_>UWJpd3CF434f3`49T#*BCx* zx42Ep;X|p%hn#%B)LiNMpyuUz|I7XB$dp@K%{B86d)ek4M@{kgAdmRvMz~%dY8-O8 zHENyYV`YNr>-{ zTTNqq-M-3OgFk@E|Jo1D zCY{in@2YUWMm?Ujyp`{Z7_NHW^eMH&B){~4Yf?b*o=lVmEY)k3IUSIm4l3~qpA+i} zmM;*elHzrlmm~!RJfKwUevi9nN}6n-j`U|~`k55{eS_K0$II!DIWIl`+;tsO7kw3us&m*k+sB@g;>`jV%w^e;V-1zC&-~BP)fhvG|y~TZ2 z$2-~LCOWqGUT57`hmvD*n|QbxulQvo+>kc(J@OW#e=Kf_=FUw`lbz_~3TcvzR({3( z`RIv1cwe<1k3Cx~(uw_xU-L_s)vmucv;RG43^M-K(cGy`eX^GIKcnwZ)!IClMnLL5 zwsrdXvHirS{LPu>mmlDoc%@>Rq@zq^xD7S8Zd#f&;GxCNs3Y=oPgoPAxEVQ4KcnJ} z+_(P@$DK89I~d0PqtQ5IxYISa-Ha6JjHa+H_YA%#!g+F6<|@O~*Y?_9^Zqb-*Dv+g zy4;!MnTI~LxG!t&Z>&3jl24?qAjMVR56`}h`qR~Ew}-j&{c^v>HSty2R*)Vn)weK5rMqpczvjNC{gnmG%fe-sNV-FF z@3*+mYwlRqO+hn};!d-;LpApY)B_bl$j|A_aX#T})&?WiA$TLia< z#a#pMH2Tgh7I$!R20Pg&ebZ*;V#tN zgp<2W&f*C7i73!Y3}dq`Tip7pGPH~ z<7J-JpH0&KzQVrBhmsGOKZR@h$rs5p6U{}2yIXVDu~2$Yh>Fnx(m_pH$B` z$wz*fWpNv_YA>9F~z(aueazzbQdZw73;C_Y~GuM=B-NiXE@v=6~#$ zmKL`*`DT8WB=s!r0L^`Zb>r1`GzHbo5UE8SR*~feGRlFe`uldedXoX)I!A*&{Ch}7=k>Q&Xqz3s6_Z!We; z7i#V+XQavU%4t%kN}8OFa+3M3>OsD%d0m1md&&8(s2T5sO8j!(2KPIif3d&sOv)S? z?w^|5;jAmaA-gk>d2B>=WvtNe6&A>C27O?*kv=$legZe!v zf3hyVYMP{>gE#Q4!L!_cC#<;_U+nmhv5j(rYy6#ax=*T;?_y-Q2Q)XgAVGSw{&w`# z=y*Amax>rC9j3?Urk|8w{IUYB^HUkywn>fj4LO2Q~M0+EC>A((TM6 zTim}Y`6Aps7PqjLY8ucNCb|E`B|M|wPzYnqha5NbiZk*Z=ZscG7SoN0^PfViKU3#FIXgLjx44f{ zFVo3)1~Tz>)!fFcyM0OpY0I)2b>HUB*W*cZUX`(n{sFG>_eSz8e2hNd;udIbm~}6q zX=vrw9Lw=HoAb3WZLV0ydrJe6iNqWFjr-U(x!gC&)A{T)>4!|bGd0(rktSE7`_XNv zKkYdE%s6TDOoB|C=gc>#8pLEkb#;QC0UteCS&p!&EwNMPwf-*w1S$U z#nSxF>JHDhm34cON@re5)jnTj9OIgFDzHO6bf`zJ@I7hbJixfw;_?AyNkJzf!{rfg zm3(zr*AO*D6ZzW%sh{fjrMQ0Go)lM=cldA4ODt|{@^nPqkm2^z+*yC8%0sLlj_9hT zeNB;tRVf#IDAn~y`JlKt2boua%b$&;XUX#-nvE1rmCFE!n|x?kimYY*MwH7qX5LvM z%P75idTgu4bfJIzQVh@3_nqv!Td{Zu?QUB}kvZhEre(uxlz0!$s@@^9CIxZkr!OhX!JJ^2+8i5Qq=xp!m#{hWjO}auWhF+2Y34rcXoFkl}XK-0N6(6Y7f!$0SG| zT-8r2Zb*A;xamm&`4Fy2^FLE#_B0uZR57XYf7sc0c&7zyGi_7(I*wRN;rsx{l+z0K z*@%+Pb>sWg;rIryZW8(cy^Us3`OLU&iheHLlv7THfDHZK2Y#5%!e)R4$Ymyy7$pC zblaNf@!%3&{wCgnw19LgaeerfJX_IzWa4eF`{mkoIoCmLP*Y_45cb3yJ|Q5_TU_OD z5AxiE4EJTtJ=ilrhOvGe8i^ElGb&*mwA&MJ{)qt@@`D@iboQT%-bRKyOLI3o7cXmA zzX5fpp4!}6+nm0@_>h|(ka-r@#JkJlzFm%ZJ9)S{Ck5m;i)-SobeK8}B~y_|8w0(~&7R9{r4P>$9#E>WI=VjIO_ho_baacbvt2l>N6Y zO_pvJw|fLDzT4L)$X%>gX%I`h{(AfIywd|xY;i{utb%ChJ@z87?^GtM^gnt7ja<$$z?Yx>DL?0+F@ zhK#=(H1|f<^+tChufI+7_`sA~dX<3O2bV)|B%M{C?-1kfgBEv-=Bj!3QLI-ZqK0Hgl*U?;yo1n*;>sj{``UmYo%L4BE%G&FAjSt0V24ubELyDhc z8Olb+hsv5eiFI$IkI{kn#HiziT;qz1YB-I&ApxDRd?po zPG;LLtE1~fSC7A;Y5{o-uJN}Dd1|2A7T272v|wE)q>}&bq?q+=J3n#=+e6g@veDw+ zNWNRqoyhp`hK_gfwTbd5>qj6pu2bi?>*;?>{}k!3<2B`03iraTt`F@liW}RY{I%LkxD0!ZqXDhOA4P z=aab{vkX`Nmc!?vihHzq%L2G({p`lug?Mg8>KJFZCn*s9Z*SJ$r{k^KBreKd)7}ox zFV+ai(lPmveQrQLjlo@L`M_!U zF>{OImd5a5vBeE(uCs9dJzD=z0{6^cj;s%#SlkOV_gLyfUY&rniosoOaXF-`bWHwA z-GJo5_11^@q{PGZp^4@?3+LaX`H&8GvK4PJaej|}wBlt-MJ3-B)*V19J${jMeW#FP zoar0X()5$r=LO_5i);GHxGcAyyevWz-?8+QrEvGh@FB(GcG6sD;rx3vALRUi)Zt)f zj&GIVoq^7@xYufKb=GAem2T@?c7K+U8IaBvw?6rrp*F}IFFI@P((GjE%=&J~d;M&Z zJ{}u?OW;m}>#YyHEN-smIt%CDqxnz@_e(3@Tj32*F>#U4#M@JI?`8etNF{asx2)rZ z1Ok%qtLyI=@@B zaDTMookyIie^_kAd%xz!>K`^S#~Z7ECw!^ItpTbk)sC5>1u;!}%VH4|BI@&lY z=YoJ-0@qs~ezLg3G}l=;{~pbUT)4fhc#RJ~TU@4yRf^e9{+AEo3j^|u#r+lDK6J?9 zG8Bt&o778`v{0I~2qhfRKg{y<4>=bFqzJA#k3E%q=b&21)Q3wnw;AiMMk;kvO9q7A z^G$R9mRBzzf5FX&>@Cup{qI5f$Z*>`+kEOh!0)jBBXoXRa^$@Gpg!*|*7FbMd^4jy z?QN%9ZmY=iE!u|+_ZH2~xqxe(=w8$psq^_J98{+<-#bOmmzet^avKI@0bFxF^ep?o zg5E}k`=I8k>v9`dzZ3n4?DL_`dVYtlF>>CL-Y6iuEN=XT%rT(4$Z$=$-90m2+Os|v zU5ga=AW9h(Ck?wf^E>|}J6yRWAT@WnT{7hkL+M2vBSmOYf_&%f26L@6m#!F!=fa~`!`84u3%mO zj`4G81FkPaaYZall`e8uWfSAs|@%3)v2;abJg|#vf@qe5RgF@_aOPs zX(4hyGUa5rE4IZ;LPN)g3M|Xyb_~cIi@SRa*Ylb4KZA1ca+mi>kyAAH%%gBi;eKy% zEArgze{q}hZk?K%d(!VIWyV{4WkAwP-EymcQRS~r9>*1mm2}<1buu+-W)5C*8@@7uoTi&T(=8+a5%N z+1Bfp=<(x1eLOSAog%n>;c{D9Bt1qRUZpBakXog#gQ@lgH@V;F1UcuMRGyJweu;Kt zk3ZTz;k3%^&H;JO`u$HnkaC#kjdN$KB&k+ct(D0A%CW||=D1J<_Y*75lO9Sv+#bAf zj^Q_qN3r63cDNH~&UKvsT5%Szf2?|?{G8A4p3Zia)cv_?{?YsU56?fst@a1wFYRaN zvl3-AKQWBFao)|g_vnYpiZi!MK(2&m%KbI=H$1POi(iY6@Kl^r*%-@DQ|`rZhrw;5 zb|w|_`%YoTgK6O-;#|PCC1~9lNB-_RPj~#38|Yu*nd8^-D))T2-&%2gMjY7}#mTG4 z>*qSQeUD0F#JP$0psQ4LV?dJrbmKf;<(}I$AR)Nfk-s9cl{i+e5~=^ik$(QhwgV`Z zpNn*y`P~AN3-5TBdnw#!;D&UZagDg1j;bJUeY${kEm1qPgL_lk&=^d;PruK(KKbNw zXM9!Ioq0>R=KP>5dHSM($jcqYx|h&vNcB(Zy(fkn(p+=jQ*ICX)7|d*%)8`Sg1$gr z?$4|{fZ{H3xC5iO~X+<-KNYwGLCn?L*k(Lw3)A%(8q~L7uPCkI2hCz`ANY zUy|0C@$2DQ9q>0&8`o{nrrGq-c12H zWsiG4W8xhWgX@jgzK_0Cb6;m%sjh33!o3`BU0r{lfv4gvh{2uDIy+vwKBNzF>aVE} z1vdxeLAa*9y+dDGRzJIn?J6CupH1(@`~h53A3i6hjp&yc@viP)LH=cZQWNJsPP_kJ zsgK+08}1Pw;QnrLPbJT}=wjq8x3;Y7fqJ8$QuvAC@J0)2&o-$!!~ zdbp*x2BheJ;6rZT0MFsOKKwu|yU;(#>%+;H(vDFr)R>L750yT2%Fon?P(R9TugiU8 zL#kXvzUIiwUBI>#Xf;yz3)|eP9&Y+=0qF_%c(;puxKCN}s&;W5vG$G;Z&~fa?}<0J ze?S&l+4p&0I&``mK-lvviGpOClQ{$Sld zYW-zLwu|aT@?d=ru)j(dZX>Y~s<85zUJ=~l-xqb%sc-My_xKm=pd%-cr z+usv!eqKP<#^7cjBX_8Wn|)V6;`bka9}3|H;M)D9Dz__-G2T(0c=PTK$n`O}-H(ww z$-@l|2*_jq10M?D&W#c8?Z+7JEKj_-0|QbLgFEyXxeGnqjC+`OKXCl(Lm2L5a7}$M z{p83P@s`z3uJpv4cW*%Mw73)C%|h?T;I3fZ_h>6>cem3|n(LFBJlvxD0#fil@F6rP zAgir-JI+jzJ;amJ^vM2fB-@@tHQBcImFVMJNRRu>aWmt7uAlww`dgnoEzs35xP4eR z2t9pWHH=Zta!%|%S1E-dHeNkJ(J`^)_;P${rW*qyx}3t z+gRK$$@3%n9eKIQ*<8a#)sfeSN=4D*lH#G(y|NcYP>?JIsprI^yhu?u`*|fHpCb^-WoN$9+va z@rLsQ@|MMYntZB%m=c2&BzzLkF|} z!^rT|eLGAorKtJP2hcENVp8X*{fnaKnv0361nyLeI|ANV^rGfo<^ImZnXFT32}_%s zM_K1T$#twl?tH>p_F2O@_O~om)QZE@j!M3?7ChUIRJxR9#uePhid2jynfou(M{&O> z-2W0)vIVO`sn921e^46TX()f1&FWNRrx|V?@$X z>T&kdoX1&Q?{%LW-1vOzx=(`%Dr%9-SeA8trUY)cI5%EzyR*5+QZC_V0&-Ej%dLkY z_WY5}UH)r==x<<37WpEVZCO07U{Mf$Tagv*# zD3z)vO2OoS%(gg>v(NKrB2xXU;?!hGN;tr}T5X)Z(f?|k)aCic@T-i6to#?Uy*cWD zOdOq^{E3gVZXWswsW_Gu3)cj=R)e3}uLb0w#o5F@TaaAgaw@2RIGkL-x|XONQhuoU z)$EaRvV?vhtL2IzA;?KACFXeg=Jawwg_%BxEYbXnY+qMlpZG~ z$gRYndaqT4+R)kNn=reA^t;n3v_!54?y#;0n0|Glp104Q7LeO5?%&r|l*`7&%bgb2 z+*dh>b;Wl$eWjYWud1JmHB7ZM++w(|THKN3z4oIddBNf~*YVC`-D0GYdXB%+Idb@U zaKkpw@fS`H$mekNF;nLCOO#dQU2Sn|X>JMYe%IVRHR7b!xs+4wBabiV(qIc`1ms`1 z=DhGA`BK~Rd>}IZs&=ieUkrs{)=m*hLOwolI0*YUGh zmQ~LR;64Y}jH^$dl@hsjU6ZBqVJ%!!ABOOtbddEbspmaR-(bp2Eqf4znqSYD&HS(B z!^Pwqgr2du=DyXsvs0uVYL1#9dp`BlU!3a<=Djb)gNyxW96GRBTicNNS0k2oOpk*^8HjZQJ&_$U6WVETT1@vR{lLI z-+&bP*UDd2?Z|laf{iKC0;#&0Lm!}0?z_z2k>Avt4s5>x-GWs4s=u#y^$lg+Nc0?1 z_xY;(?J6NvuCt1qrFjoV#(b^=``rHNW%9g(TI+hQxWiQd)W?3`q{zMKarDyp$uf=# zwYi1ETmORd9s$$di{9sYHC&T+ljk3lxXJPBXUnh3tjj{GZ|_8$Duq4>$RR6#fc~&H z@5^dpxas6sazSig}r2JBUUmu@*16el~O+e>A5&b+|u|5wn zeuWnWoP}y2!@be@o4#z;U59efdq45)HP^9BKen*Q;TvxLCjq&%g6qR~)kXS{ z?+#?R=KkgMjy}1Ib~b`-YCLAQ-<6unEnd!bH@HLLwsB&TvE-S6CR^MBXPfUW)-6Jx zqKkNbuVoGQII&4{D_4q>)>PG!PpRi{b2N7id451!kcoG;=C&$HksNe0x)G^P-uO_e z%WeG0+#^9X%vixZbw&61GlBi5qqmXaZq(dMe@KxlP+!y)NlW6&c6@EA`!V%y0;-%8 zd>)XS;F@+hm;Kc}L+`URT*6Yx_c80#`vX-{*Q4$C)2OP1MB zy!5dI*~gYbl1I0{Q>FgB#A|U&$-~V(tUVbOfK4gA>Z)aCu)gM!&5o(US z?JWI%=lGybW!3L5C=N(QCD+#u@6lsroq3coqM%;JU(usGS=BoRwJMdddz6wZ3 zxWh$R6-9sCh=RCn3=e^$U+@6{{dTWZzK%b%yQ6&aG zIqKeJxOF-AR^_*d=B<1v{g!bPTvN|>v%k8>HtuJa`;_LM!n#^WCG{Q{yFXVvXlBNAVLdS(ehYsJ*zd0abxOF3Y^FAK-pN@)<;r^rJJ;1u8UsB|3bSkP!x%rV| z*3&+Gb_@Rxt9T3Z3>LRO``?TnM22gg+mr1n(in9_tx;DByV7|Mx0kMG>b;^b5=ZGa z+FQCi9_q{f$&V$2BZ*fx|3HHu>W%OIWpXAXPfWr z9gOqQm8cauNZT#_k})dnpqKXZD>A8mTz=<%0l20e^ke^r&?Crj&GDhe#f;%tuhQ~& z;v(av^;Mky*2HVtLB<~eseO_g@2lif?**D~aR)|7;#WNqOF#fju_1?#B;w40%x{rN)T_&JNudpoZJhce!1t+`Z<~{$lxyN$;oBJ2n11+w4 z?}L3GyUneOHy3Gtd98k=+|0Pq_-pDz5!{JzP1?nI(Oy)coioq1N0%GhhO4 z-j;WO``)bl>O5xV-zoCCm7i`|rI_b2MdaTQBmWF5KgIZ;`P2VqzB5Mtc6T}V4XgO+ z7XCATF8QmS;{JXU|Jp0u{AZPszmWV*W8|N0#c$4gW1YwG0txA9<$wOU1Sur%JS+d@ z`tMI;+X7_!A142!R{qB;B+4T4eu7lLtA0PP%Ty`xY|15s8X?0_^}$cu2>ru#7K@{N zSPx^96^DNRN6d1}C;z8b{zDrRrG&gYtT@>U6YDjPe@Kz?t$jeV1BtyRdWoJt-(PE$(-4M|Gf&LMGm`9hR?ZT&griD&6pX z?0G?R+$lOaC>`MHzDt^uuaM{F=2%?wp1VP8dsK7dx>5J&usU(_s>Y!vW-~9CacWTR zgPReFLSzj2*1-JQ;^sKpe97^toadxUJyaJJG4>jCuEXrA{Waso&>2D5X!+0(#>E}e zq!BVc+@-ntPe&Gw`PZHYG4UE7vf(D2?#6pLaa;EOYU}`y8w} zj|x`~N)WE8XRolo^7l@QtH+DJ)ok0Qxxcft-=}BdHOI5kDnaQ5*NkuWvHw#rpRu@R ze0zFAs?Bpxe7f#w4ZhRwo|BdqVJuAMu9geT({R#4bj!!*j{sQssLuwpq;_E@XP~+zG zYC)+7*Ob4SSNa&{Cl+^*=Bjz6XEb*i^Un6T&TvgX6NY76RO?O-1MZH2iVnd4{!hnu{HZ9gDY57aX+cE5ES zcB@njuP!`OUfbAz53K!2B~_o^i2PUV`t%|7Ql(G^$485^=9)zL2S)0Z?s%op*)@4U z-vl`;F;&h*_IRbg?)wxo`<$Q*g=gB&1?*cBR$XNJz4;E$_XOJ}qWP#0)nnXY&JTua z=0myqdoi_wGQ;vuwV(bl^DOQL&2<*ezenp&)8T#tx312#k~jv!9AR;HXzoiR62zaB zDwm;)QK5Byo2Tc|)cI`+Wt3MtDDhR?^1h1w7s4#ExV@aR^o?cPG^ElTmSy$-;d6uH zx484!e;3R@E$(2=O-$zf_oxe+IX+JMci?)!l}_6a>v+v^CGWhT%(A#W$>Y!Az8iG7 z+%)$QwmpMXQqSqzb-}cM)1PLXAC#>YcLMoZ!t7&lOEvcfU#g5mv(OY2&Sm}pDdr&k zUI7ztc94GMOt+q`V*k}J_gmbvRl}nH52vKcyXZ%>9%ZcMJev-+crV|{IONRFnfEK? zUl^2ea8>BQ7j8Nf|LgOKr|i{=hu+f!%?nt;+XnWwEoKTH2wsQqn}6es7}BK&^Rc&;F^A`75iTev$w_Nld&rKTJRl`nQWhn%zUk?Yl=5d z&v$Jh7I4k#>`JM!0DXZzMr!;rh?ooZ(QZBOcPwoh zl%L_6cr((dzt`~117v*Q^(7JR_T4`23rdyY=mBKUOC&M}sp2;CRJqN9QoWixj(c6@ zgE`XTHr3n{PDqtZR1dv;ZhRDX+;(TIp~i6;w4-o~pu7&(jJN8akrHXgTP!Z0u#Cj} zFubSH6f_ap{m!V59G?%jx0XTK0GH|#NpskLFU-F!Zdc9yhHYDsO24rjro7eVraVwd z)rWIw7lo~YatJQrN76p_SN-H^om_v-d&bW>F;yC(_NW=M=YdOg{hdMmEyRc7)g`(F&RnZ+Hh<9(BDAER~XGi1k`PG=ewZ=0Yz2-h4hzGr{cKip|?pV!>X^i=7H zdZO#mLE5nyf6v$b*`i#op%HIxyP(Xp;vL8SZ^C@r;udP|47Rx1IHMZDP^ zIli6kwu=yX{)G9r#oeIey_;=MqL@5``5Xad&ZDy zZ@V4`m?7`fr)maA5da#-ocMlRVdN@+4{6No*AHzxIQS)THM;FavxFWG`SoZf7Shy zihC#92BYWDlc*}kx4I~Ycvos4RJ<3f&hgjT2n)^B1)}!x{IzLzS z%=GJn9p0>RhnD-v{Y%1x}bK*u4lVF^(>=%P|oDQY|8B( z_E+2`7WX^N4YTcKq|ywQs(%P0b(}YC&a}6J9zkgX*IR$rSX^EYtCFv*`nyB>VCrvr zZcv`ExTgMYwz$03EW(Za%RjN|??DeY1MWv~O@H~`Eqj~`CoA~G9RPG9;R%ZKaL z{@nDPhE#FwN#hu(x!vbe4=nkP0V;Fo#Hfv~6U}y)P)^;hO$oGQ0(7zr|(hOQq!5 zH}I??+KbxX&RAz3br20)OJkc#0BhHJ_x zAMRx^+amM(J371i&dA`L3-v)gkh-3}kFkhicGCTqdM~S*$H;jiC`DGhgV}#E%+Hbe z{T#kkN}SHN@6fME{r>rH@QdhJnozIOM+9Xj98>OpsQqB(|N=8vTPz%lh_8v8Va z(F7U)ZqxCtyDw2zRCNkejXPtNkLgcK;XY|`--p{0W*dupzvimvX;!jbB~_w)pKBWLZ%+Q9wAAxnO9dl?|pjex{XTNql5A_yo|{Iaepsy@iQ6HqPE12(0wx_IBJyPeRs{P1QK}kN(_4P6Kp9^!5#XU=Nm$Pjv zI)Hvhm1zj$km7aKT;pqYnDYdSOLdh=HGHz&;+p%jR2U|C$McGs=WTPxScdt&D%HC+!L|nIGGw>0p}H;@kLSnp8=ehHwey|&JCy%Fhgdqp>|w>L=huCYux&Of zLi5qK+T_o4;vEJ1asIxkzv(Z~zrZ!g#5=)?x6x7JofIS9Lb!Q4-iE~cI=qk33M=00 zoImQ@!MZbY)8ssqfmC~&#_=lmNxrQEdk*`VctaC8zq8^!$bFt6@`T2w3V$YYd|`?@ z;&0F0333K=2e!AyQ?t}_IueGv)Z!W+>cKYUcD?5QSGg^W;X`OrQ1-x8ee@s#ys0+h zYM9p`Q_lvojpSRywuEyT8>4honfhB7DIdc0;cv22fc6r(|LsMtYp4kjos199!!U(Zmx40V;u;?&T0W@j`DNALl`(uMg}Vf(-t>gWM7!RNdbtpfi;+;qRRq+;5Zg&5W^J-8U!8OVF`?nRZs_$j_doV`4rEqVB zYx>EW#Nq47vyjNtv#)i$x3O&udJT<7_I;tn#H-qd=_k{t2IWoQn)E0_jug2YqAu;oPtcbaVw-szE}9|Z=)sXp9_7` zzb)4xavXm85U1SC_oOrC1?3jF8Ii0aU#NUAms#8l&HaOIaluqM0sXy(fo^T)*D{@P zS*67e|7WfRDu1)zX1om7j3eoeTuv=3k7yQ;tG?{mIy#rsxPs_Y|AMsK&=Qk=Hw3x!hU zDs(gIiqyEoT;G^7!@aJmxSoTrx;)%DQC@3#m+-dCpH_Vgz zxc+w6+@ILC8>L)Gf5y^o7kRqej1M^<1!cYFwxK>%BhSS!FSWS0Xzq1vdjyR}BL^o& z?oaPRf2NMd?TPm-ew5)BeH;{DJ-1(1$K#$b`yz!?{W`aWlzBYv3e)(jmTJ77yO?n` zT;(s9SLHrczSV`Rnwj$9Wz8+m zc(RmzRmxr+l)o&liPvw%`=aLlSG+?PNBgVdErRQ>@A_ckz08Vtu)~e_#;fAWSQC_+ zV&rdb<>xdtQtsaTc3GSM=2Rn+^5MP^gWKBT4mt+zKFuwGyUOCK_uaIG+0o+O=Wye_ z^J*%voV7toY;dGsS6lh-J%+dr>bMHwUINz~S8lG)c`3}^$kcP6`VZ>)b8LGZy^ji! z`YydXUJc@U+o;7(8JqV76s!x%B)F>mRH6c|VE+*?pR%~8YVH{gI7XrzbUA9-gLm@$ z!ZCpH;Uu`X(qEYNQ}Pw}zga$*`uGuC^^;URSFc1;6njsSRC! z`x3`mn7>=xDo(tKpR#Qu+KHAiJ}mx@{+PZ$OrMvrAt>2!%<(_5A@_{-=l#)0WmoZC zs(*JMwhc!rO=LOgcE*!u@SG1U6I)HZP{*f&Z(?b2*KhJfJBc+>y^0vi2ll==|F0;7#n)?#l3ejTpKI%oEoQG7b z^Ypx@;pTkLxUG>J?{@aT?DjP2hKvtInmgnY=K0Y_XaU+pY?~f`CvNpUikolAcXO3o$j z@&8-)e~!E}kiw~YrhksFT@%JX=oU2Sj_CJLtkm_vw6CIHxQ=Ua2azZFPR3WraQiy; z`{uK4Ir8kCU59m4*@VNS5PPiyWJ zwta+FAn$iT);7f$(2J zsolgaw=wMBhP+*o;il{BUZ1gTBie<2LiYV>#k&3<_IEGy)fP9d8DmD61s1oa=HAJ+ zd^8S?Mk!VCkv>t~H#AVkYq+`lgR;QlzRCVS!`y3eTWIcfw(UpB&7Jc?HBUPZ9~8IJ z5~p7@-24MU`5msQ4`&VFo*{G{GCuG+50!j>vMzlf<%*;Q^D)dJwn6GX>uLJA>cte4 zIxZCb!~D*ruD@5Xe=qXoBf}l0xpUZ7gjS=W+*hi6m{i5#PVxG1i0dMkx!fJ(SqO8J z#Vyd>K`ohwLNid){yg`2F2@>tQ16nOuj|?Dlb9nS-t_n^>0xnKlc)VXoEIV!Z;|HK zZN+^Y=t|TE+2<{#x;~h8oS%>-Q!MTs?EePL9TsTI2mG5)8S8MKHY^&XdF%o)^{-6u>Y!?2i>u&qBzclMeeJHG$C4XAn zp5*BTv%kf?U2_MsZ7g~fO+a@4U3H05e+@UcQkK-nc6}HM?_;#Z;y$Fg&ky1qZK%@y z{1#M~bJjsV-c7cTx^{K6zlA4f$*IlUerF_pH6~9}m6zYNhbAz!l5$9VC(h#BuB|g( zdXN1=9E?>zX^!P;spikrb>Yw{S<)3Q{~Jji;B`fL7I&A9_Z8NyMO#s}#7TROyIqmu z`Lz$GKIER3C1JQG#kX_DAN$E`j$;WFsv0MJRh%sSK5~y^iswx{9urB$a93LKo(T6J zm|25eACjHQ;#80-%SMjQPmVIWHG->Yo(1bi{{$ZNM z&C=Y{nV0Ls_WMyDQvI*Fzp{zPhwQVm^dX{`@}|HV+AA41A1RUdBD-21Pj&7iY$c!wEUvXfWS zEa82C)Uy}fcFw!a_059wvZQf~BLKQpk>T>n2$g(Yu1S?4=qdCBnok=Z zN?TSwwAcQccysGz$#%GPb-XXKe+kUp7MDjoBi!HFc4{ZC^`djoP_CJocF|RHf8uzj z{4K7ZC1K$?TVKzg?hjgdu`d(n$N9ZfG3aNhm z1&&3^hyFTV)9(~F%97DB;(g4Dms?4WJ>E;QZ)4aLtRttvk2}SxTYP{A>Rs^B^I};=HA1$QD_R9 ztp1x=Cm}Ts4{1Nmb6Mdl7{|16eR!AsD?iHk9+`3qYVM#LIafy?p#^9dZD2RYnK1SB zg$d5_#oRBEe^r+3fosaYa#!lkFs_v#!(E`cPqXbUv=S{rP1-X)Wd1Xaq@u5jc1o&D=S#`!oh+!dM|=%((~<5>}OISN;C@2ASqKA3U~Uz;Vb!Zq=BWB*%W z=3Cq~n)?CUHlkAWD{6BV<8Y+PtDbHLCf?lZvgAiAUSD_mO_<9p?q<#Hz_wm!5V{LZ zp*|GTUq{AAnrq_CxIRnTw>>i6-4=I8IpQ7XiMRBIEE#2SKP3+T@HDB1jKA^p`y^kL z9&AI6(GmucD;XaR)8nH&PrJ?Nnk7XRw=H?{U=FmnS(@9IZG(|Y7pZ?JH*@_+LpNv1w{T7WV7PZ!+%cN_(wWIe<(her0=Or)cjp1y67Rh*AF;U4 zXzpybEkecUQ&h^>&6L{`UC*j9Z_}0IL(VN((hRO?Z|XhGsy=*dac64oURWtNrOHWY zCUshky9{^b5~tmn`cMjYDqK?^DwAg;%v~0@u0Agt%(mCjJLvsjoTPBC!DiZVJ$64l>7`OC4@vyPN52&}_7i-|z(Q+b*Fl?8bvo|13%6m~4_c z4|@%cIS;!P&asYT3*fefYs!Bme|rYZCCIefA^Las=*3tDJ%a8->iw@%bi19V>#G_k z`6;J@JF?_%xTc(DvVWB)`Gz$z+~+m-XSVG_3Ab>M&u3hJq|R>2bdEbaJmr*;mnE-T z+zRAT*&_2f5*kiXqaOyZVTsc`YvvqAa|eb{Led&Bt<<> zY2y6>f7Nk44{j5<#@~jl8xOPTb5R3u;$iU8!u04AEwfIEYsHu zY=2L|7u7CG;a&t6TqK!tiyPsV+k?)gBg!pSyJ*2)iYxbJF@8U?{w7)6e9e84Sf}fF zlczF29OHa4w9(;);ZA^?;pB~6H&gBSC##+f(_FnvWTEPr{XJXb#aTTaZUNjcEPvHJ zV;ZrZWX1c0=BjzdMLJ&fUgFB^YmSqKTV4B`F(^y^jp1(IDRXC zLvZU|<(3<_kwp5*Y8E%Fxv!s=C|~M$kJe9y;r4-R+MB5lwJq*A&2<*ezbf8X^&zDD z$pW}9!wu<7KM>D(Fas8MytB=hxj3HtiJX4t>fe*ZkC$G5?^r>3(w`OGpC!xT*45lI z$#*%-D=qGan%k6ZSEJsj8&dBlo|VJ3d9F)U)$Q1P*H?yQ$yT_ge>h(E)8)ZUzuGM~ z<8MzZ-cNMA`X@ye|5YCj_YZK}!!_~V&F{Mf=HnK3wdVfGwtrE@Tb+4E@pC;2sq@x` zJ)-Y>%YT6J16&oSN`CUJhWVw%Wm;7w-_>mEhE(duvJKAc>VIP$ z-#%iTt;#J7_c6Gte>g}HPlq=jt+%)xG`G_zo=rgmP?w1n#ov>8kzbtWDqC_+`#cQw zequH6Ry;gQX23N`&BLnW@g(w^^9%Kyl{&vD&pfPo4l?`kEZL~zRqVg}rAh(J`G_t) zGVj*U`J=w)Z{r#!`VcKZwWtdrT_45~uc{Y~`3;f!J0eTEU+W$>H?n{A(Og4DhWoPS zR_@O`uTTSYAu7hpSzw*9)5Hc-3{_L+oGp zRF-6PcDa=XFdqzamc^~3xn0>d5zR$2kUGz5gTJbuY_GY?sK2T{q(7Y{BQ5Sn?Efpw zKP|3mTO{A#Yzqxcl}4!6)6RRw&GD_P6|eGF#%0M~xW-@A|5P25CKOGvJ!<=MsZ`R!IY`X{LqsVb^toe3SY9LLQu(;Fx-){8aBzS!2aFm+~Z)>$qc{3_ft!~NRgX047B zrEFx%-w8K5UbQ{eJeCuxpqZCGEan<&+xcPA3wz%ru z<@Wo_|H}teFU#U)Ov;jVV zJ`}*sv$##k_abv(>bk49+`fE`ZJMjT-&Gbj<3-Ld;hO$y`)aO3(>H9f`Ull6IIjCn zU&DPj$dAnTqRsWR{<crcU?JD)+Uc6ZI0)|@z z_YaHPj(j_=?znKSlA{CSDNkiElaE)}gZE486+vsTJop>~DUrw|qWJ z;Co$(>aU0#t$d2${$+91aZE`a_q|+J9Zr#PL5$<0sZYgl>vVOGvzx7W6~r!|SmW** zyPQ9jJ0(l5gk###@hYDZxPz_ub`sw!%msW-weXhDUu=t8%RTrp=D$pwg;TTS6)Vo; zRX*9TWy$9j_jr|04%~wlH-+C<;i)vKg1qHkk8LebN2K~EyIqd*w9D+*Dfez}d0kJQ zx-c(@!5zZ3;pi#USp8AjdmE(gH=N|*rccX~9Jr>vKSv&O9Q4+wSncSIQ=Il*2xo{D z-|?zXq3KyN-HPue;`^`mK87YA3GxHmw;}VL6*JDB)~?q$Y;i_D!<)N$C{V*t4Si2-eBGZ&hhT2 z^WhG);=A99&)ZMm^+K`?MP3`OcZ;Io~rgXJ*cvIdgsA#Ph65&)Zc#72sW~;=NtvQwiR$ zRM)=(?Spu(p(0baZ;qa~Cr(ugHuf#N*G{*V&uUdWX+NIjRY4Z-Vr+k-aY7Y%Bf%@m zXB~KR(U;Ew#5yAC0Wtn?{Ssl{13v+3U2FLqBh+Pl}44=i*B6&Qs}0*H579BlAz|Wi@!VsPwyC_e~9We+I9=qRtK5HAnqz z41c~Zde_JrWm@y^c0CW(f;SetLcg1}Yim$$H`23e8`goS^t@f|n&~|wTdm@~UFDMs z-p|2n;N|liuJ3!?J0~67KL-)^8*mBu6Hu=!-^-r^#5!%$b|br_(wBaB(y82wc>wnH zoqi{?zTchv-tIZ87Q9`uto2|Jp3%fO)1EgMVWj{W`{x#Me~Njaq8&yyLB(5g5Z@3% z*B}S_u0+@~z>5IQ|1D~d_s@8bL;KPGZl|xQ%E%U~c$Xj_I)KyYfS2Y$UqtvD0L_Ea zJcIasohx>{?0qA9(*bYvE%JKqR^Drge5eHP83(*^x5yi4$D6v-$U0Wuju#w?YOA|JP)Y!yIt*z;X{lURr=kmeYx5ET`l-(RC?a7_Qkvl>lvq6 z%jb5rFXiBk1@He_K8D>GFRJvrUFA~&-se>M{jcRyw8zN4R_S@W%7=YqWUe{4zkGbb z+XuX&e11TiCdMVyZmP!*j^>r8yD0N272wHJ>36%z$MCU{J+0F37wEV3Q|xo^as4=~ z7Galx8|leD!92A}&)Zc#<>0lbcyHJJQvu#?xz^`m<00$3ihY0gN1_Ysjc_vc^><>P z&hRPTCxO>rj*Ye8PiomHw8fJgw8tq3n*xjmH?3DyuQ%w;+hZ|LR|(z?Dt#v*O(r-C z9Pr+Wu={~!fc4%YhNE$+@iiq z?ewhx?@KCuZ&!VgzBIDa4)k4pi~6py)3*}5q50PQJ&t=yyvMSyzh888X6F!2rrnFq zHtmCb{WX1s`~|Nh$7bxzx7O!sd)})ETfu)f-t9Yl|K{Mm=DU2IyzkfO$H6Pg%?t7C zdoE~(u+{*X6CIo#&Z~%ZPUYbJ3B1B|Lb`Rx+m`^lc@^g&2ulO}w_^eyoG4jwaj?o{#6{>vA@ zp?UcFdL{N>o@%!T^A+&afTs#PqTX-9O+enUP6jX?ApMAE zkiw(86Mjp8hXGm-rJnEf+++Kkn)=SyW-axNfr0<9Hw_C5&qnLkG z@&1HsJqer!L^<5YuQzvs%eC(p`?a?%Us3w#^r(2RAWiefupSx^ydQGj{_qVCK@=N0)-ebUI5fY+d;Wv?R5E}$9^ygzZ? zv+&cd#2(|o-al>k6Y0%)#e8D*@0dpcuc#09>niEK!WEOz(YneW7!Q)^3+bqx6VDYz ze;C=(|A5!`6ux^ZvF1ZlT%-DVMd(ZGLE0lsy$-_QV4Nd<51o( z-c1O510b^vQeAH1emmV#Y41&^@%#>6@qXe3tWOc^D@3_b{*t~QV4m_FzJ7(iw^X;& zf>+EZR)Kfbf1z(J)|dVl`hxdQmA(?nMm>&E=WiQ~9Y4V{H<=j3yHWneo-wl4rPlmi zhQHvIsFq0>|6?;1OOO_$LAf|s5{$lOZ%;E&E!}OqHzv+jtAb^ZBqdJc0efUgYI2_Tyu9 zMm83_qTH8n(z0if{tXrH2xW>xcNBi-5q=q{M3oi#(Y0>ly!T-L4(b;S7R<|oSB!Ii zdj!udtGrlKKM4d;CYG4D~@ZB?le%R;tk;UVTUL2oDU2DVu9E3J@)VWFqb;bi7mu) z_gml)?SrI~*beXtGXe3><2#{rNTQ?s?WFK(?}Xn9po%IMKBlJqMa$hJb^z%``K(2_ zcA5u!9a5A}G}p^}HRd1yGWTMWb}FCqXh_x9E6S(JLt-aXyrD?94SU)5h7`QmdV-9u z0DkuXOMymzy2-zz+64MZS2V2JZa%=*OJc5fs`N#gEkGS0c+)uV=WEbTK80`l0Tb}z zuh8Vd`gR~HG`Mg3WKsD(KKT$WOW)d5vN_Tu5=3VfO zZye%~8dR=t^K>gQwK)v;u1HH{MM$5cN^d`(E!qLxst)I~tC4;&(u@16YrS>?LFL>!)<&XMq&3giQH-9s=z?2A753fkqW4iYN{&mvg`w6%z{09Xc4 z{t?eICCv2<{M?_z8ZN*Wza!IWiH4bgt^As2;9Dz0h{Q7PvffYk?{Q&!_2>(bhOU?R z-cH34oc5B_A9equW=6m5XG|Es~fOvOumEsfPnRlK+yGCD;lw*7eCp0@_PZ-H0T z%NIwZ-3`ImLB;!-LZ#C@;=~?<{~ExxiS75V66z3fQ@y0}N$o1JW_Mf1Nt=Sy{wUz4h)?ZvJ4y#X%3o>^V01m< zHyR)_6*8k6_PYcwoKd(RgumFY$Yhk*H1G;T_c!t6ARV<2#OsP<+~5D`_hLU(+BQ}R z-qk!GkYy|%eDi>1fY8^M>$?$tRlrxk$3QA>IPtr#Cgkru&_U#bZ@7eK4XeJZ)@a!g zq&WqMdh5saeFtG*0*3(6rcs_2@iHSfnUA1zC3yeh`chs5^zo4U>pJiXeK&D^58(&T zyr0Kd5;%g%b9FoA`H_;xLf_a3i4C1^tq%sI>HY;{9U%qpQO?^7ej|YlU?QOA4YcD; zjg;7{D&FacpG)}!DR{kL#&)DqeTQmw?fL;B6x}+)VdA{HlSUfy2Oy;GHxb zZ4}y^c2!DyD0pjoNZ1$Ln!ohk#CJW~LqPDN86~5;mG>s5XocqN%v$u-(KF<5tS`X%)?!*QmtRM0~U2f&P z4vTtbh>_Sl74ImdnGEEscwgeY55n(RU?ULN+jhT?N;_WGQ(`;8Yml|Ym=kF}-0j3Z zffV`smf#(TCU^sWYXoQnY=zFT0NrD+^Y=XB_ho8(Nv!1pE3XmpsV(jSDR}vB;p)kCdWp5igaUvEEVs^N>S-(-^csmzYGXM zomS6J9OL?ma!c(avGpq63Z&T#yaNb*X)iq(op)C)i~PxreTy)9eWd1Xa$4yx1h1j5 z#Hv-ie{kLlD&B86?+2rung2#Fhr9`Pyfxsx0A5kgf|0H}kO&BUf8x9~MrSr3{)>R8 z(6*`P5lT3(sArY25^Hm>bw9K9NK*;C0|?$ACGT}#!>$=XzgFS|ay>$-ex!(I&iBt)`6{)ehK&Z{8 z=60Wz_sS4GTN~ia&LW-2*R`DY68zj>QratOw;koHct0OI81o}4USFhZ5A*~C?{l1Y zGW>FYdx0{*A2-B8paT8k5IcRVhoBy)cvm3)8sG&$@NVP0b@1!+GR7XjAb@xu1*rUe z=PT`%$cI>y#P)$#n5l^WA=U#;hoqWB_5Oeo=zJ&qRsqiew2rG9c|n|$plkUEJSX38 z&CgAU^BS-n5c(Zfcyu-JI|I}K0ezI;srnvV6{!FF_{R`K7HqWRu^sNl7uF^~6v3yYPLG8Tt4BY=f~ z;5BjH-{9x|iWlnu1OoH$+_e-S-VZIx{(9nfr(?%UY~mtCUr(H81mdRx`GDZPkMnMT z-!9-=Ks&;fErqUIkp~~4{GDsD-!*i*Ha|U4Vkf~X%t@p<4_u|R@T79OU*UE3c@=dP za~ka+X`H+Pbzc503Y5KJl7v0Kt?iT%ary!S0ioY^uHOUjTLC-;9Pfwy)KNyPgL2&$ z__LyDPipRv*qz`N_vvn=ISQNt1n)u48}SRnfOPUt;g8^xcLup8^K}!CTGst%G07t$2O_a?d-lA-E6L@cXuimz&Vnw@6~Y zfj3$%a_p;$G(&-WK->qI5+&n$5q^PhW3CU_hWfRa*RgWWIsX{$iP+aRzlC3GKrl9j~MSnYErij`+_4F93o!g!9tA@~^<3483PpzfYt(MTW*_R8LLw(NBR_)TjF< zxUj8AyG_N*uUoeVeup@(KG}n{!~H6rFBDegclzje5e#ODJpx`goCDd;jv`$x;Q5|a zUtTA4;REz668`Z(Z-C}uCt)nW&Y|5#J-r9cYvpv0#6AVDFk=uu3wRU|&DJ zVpD*XKqcDMt>d+<7SD5sVz4j#0}|`}koCH0edEW7_j8#0wfq$O4L^&pmjE(3xQA{u zo~Q=ztp9*Fb`j=X{sZ1h@cJ&d=EIA5PV6(}!b`^DE+rdqA7L$)gYl(! zPGO5B)(^Z?{$!3L?O%ZF4l8e=5~P~~zgfV;K+qXi`FGR&QTDayS3k77PYp{YwnWAI zBGSAMd<+PEAK|Q(hJiMg^O)sD?Ab4Xr zZwmaT1M`7d08LPfePCbYyrO@peMn-t=wC!WY(~dlh95}3AL#@yZh11g!j4+@9ey}+ z;j_*x1ox1-o^7+!*R)(>=b^7bPRiIy@I3`osCY*xVY;PfwCo-De-3;A(C?Ru=e26y zw$iwT`fo$I#M+lz>%(Eh?||pn-yns)<2bMD`VxTFiCtFZ zLo_&ErFPh8<(lS_In2tN{x5ioz`In%8-i<$26_P^AM!Xa z%{L5yKN*^DP}c|1E{b|4t&s3tgY|v83F)Q)B`V%znThE(!S8+GJK!te3Mz`{U}aoz zp5GUX@jPdwb3Tgk{KMAq@ma*z>_p!K2z|$J-eK??56l2^fo`K-hitgzFSh3=qwDbn`g9-{mJ|g}#-a zO6)1{ihB0+3>Wq#()uI zl(ei3()0o10KseKyeCjLcffxJkOk1Z)*-a*63WfjtmJbyjPHY>ulX~H=^wSWlV-$U z4XgzO?^4eD7W_T}$Y}1sJ3oveQqWe4yd_D`&y>G4pGzzPydod$_jgA3!Ekyqx?9=b zx%>->rK@-w_qW~GSk2p{y^eLjS_v{nNJsTS^lwr%+6NWyPjTpDRr}bgd1;+RJM7C# z#vA9q5pNZE-&XP3?-Q)%y_J1}W52}v3Kg#rd$(po9~$F`aufMW_3R)ow;ISB>C3*7 znD=AWeyB6PAN&<*Y5_Gb-s4@{&-Wt2#P`CJFqWcv@V#9>Uk={x;59%$*?fsL5DxN} zc-8A`>HFIz4#sC<|9`{R63bNSYroD|1M#NnFgn2-k?F+jd9T=wOHAN>8N3EL zDb^B#kJgQyQ1J#UVY*$|+iGT89jimw-+=nPjVHzpln>Nj$n83KkAt@p=XLoCV-ggU zA0*W?%HNKhcj2o#))D?>!XVAK5b=CLoMh;C;XIJO@*9Z-ud?!XLws8A&{xG9&Utg- zHy0ptFC?lyn}m}pjEXIIW51Kw81SNs%Vr7Uhqu&Vzi_L*y_F!{oACPrAoDHcIIIDk z=YzS+WlEn(%+$ZpJU%-tv4>Q=M-l%k%t4)m6!|bvW@5UKuklU*7zIq<-&2@t$u{O~9I*gnkP0X{$t@?l|DB_A&E@q_5+ zi;ha{3V4O-gZN3nFo1fi!G1VH*wI-G)xt^$5;M^HF0UJ*BLm#V>Ar@BshKl2LGzo+6A_xb1WE1u=V zzJauVuioyAbv~J{Q~Fh6Nl#ky? z+R^gg@V;`jwY)#VLkx{sVv&yOA@R0Wc%4SUFBhO^d|C@k#&il(hjH;C3A*%%Ma`567Vi+Q`Qk-`o@E{GeR>Oi`+yU`Q6K?rV+ugOC%X{W zdoLnAiF!`uUj7IAIS2ZlLppK2p@@g^$t|smss(S8HA;O71kqpMYjhCrAON9nAMnEH z;@~$9m<3D+x(>p+sKa&C zlJu=_U6cu&qMnkZby2n8eS+&-iS!SHkABmj0#fM9-*f9;h2Q%CnNJ{T9akP8)}5j0 zxwek0=8VL?QRyq{!C|DJ6eXkT3heR|{MPguY`*LF8}nA*_i2 zl7W5z>01U+eJDa++=WQueyu)-^^M>aM&$2kq!al&9)UN?-*N}}TXbGxTfl2TS_HFn z@Rb4c0io|)<)pgJ@OuaN3iuT0jr!n*IRmN>ucQ7hMm+JpD)ujlomS~9^7nHO=WF>( z{n4%FZv}XJKCQGb$Am0^rZyiNG~X2F}P4`-WIyeUYN4lDu$ zZz1RX9DY9oZbxuUfG;?se#JeE{9TB8{?K;7#y97rKVFnp zGR-|Zr({~`)Ufozd}DfEPWtr7NaM`3(2~OGnFXQQg~rUXwEUvH%$dgQoB~4V%p5w_ z=ND%D%cSm|GBRgn=5==0XJi)Lj3d3UIP;bg43J;44i*%nB-ZQ5l zqI7h6PDXrbQhLJRl8p5JWqBi|;z8jdSu+c#kIf1xol%xOIw^PRK&g*?)=|Nv7Z#Kh z=S(%uoC#JbEIdpi*73$UdB%|O!-hu>m@q0gZd&fpnWIXFltjdojvbkloRK_!^we&7 zR@SUP6m}~ccoB=4V;xW zC}HUEnYqbv(FNhCD?>(Q&n=FdJ10CjyEtUpu;QuRdSr&gL?vBc|MD^mGjcKtjoF2v zrNwepiBd?%ro<%APK+5fATho)GA}zS!!uHEwYJ$lMtj`2$B> zr)GXyNeSAV!qA+VaLu8TqkN@0QkIn<XO3zJmahg_gN9h*a)Id8$UWHBc;dm9+9T> zyqJQi5!s{COM46(RXjL;RPw-t#ORo*ks;m3&IlPY^g4}8vkQxJbHHm%FU-hHr_4oh z$+R&;;-e$y4k%8ZRysN^CNI2ud`w*OxVRaKV~i2A`;Uk!m_DmCKQ6I*w?uIt7Ecbhel3FkC{7ULfM!J zvuBqLEi4>8DsCWGQ_WY9St65l<7CF+@$rTI6GzX8j4aBXlQFn>z=&zHdkoAQZ5kLc zd`@0*Nc4;$Wl=HH)6yM~&733OzoNzu&xje6GIf0X^oZ`^QwQfq4K?P^?h!XVFC{N& z{J=D6>cFCy{@J7Q!$(DnvQcYRl36CJ7S2_h7Cy!pm7UvvR`jfx^xX83-9zF=b_+44 z4;(+Z+c4wUxa^!+QDu2E6HDSmJujrn9hPk+Eh;W7DV$oGMa2=x8=07lj1m2Fv*PDW zFbz*Ojm|NZ6^&0E)qhBONJ_LRGBIRKVbs8>gC}Gsjm;KUTr@p941M67wEVoVS&{Cu zP!P(km{m3=-#B1y+}y;mGlnFW&Pp#C7!y8tRLrz#!}9aT4lf*ADve7SKWJ2scr;jY zPwgHm3-qCxeKN~3g(v#pB6JSLeX`TJS3+i1T4`R%fZ+*={YMYzGp(cqZD$#^^qB=E zd6@;-CDZzZcO~!q(lT`P5#cy2$(tE2&CD!D+ov3%37no;rnpNBW~OCjW=_xV6VA^O zKVbNj#9?v$ha@K0_{Ap;i5oCVXiTx5S#AqN_A;Q#s@2s8HVV$^6fJ@vixeJmPF zDBJm#m%gW=cUbtFu_@`t|F_dMAgo-u*{1%OMNxLBIwk zM6%!q-B^B66g$1+J$Cxt9r9it%FYrN3+?MckoT&9)jMI}nBJ{JLy;7mv=0SPC+|lg zr&VG*v4F%Q&r!nRDJjECO474t4^K)0B20s|&Ma+aeij}PNIyCcbN6dmP@0$5A+MxY zhwPGGlS(Ct*opVf)9?L_?OC9A%FrRQOpHq)nKXP@3d#P%6UIZz`qFW~viv;A_NIiS zP?i7i?CeoE#3on)9m60xw2h4FrN|gr;#rVnLRv{?PXl;TsM~-Xl`>wIDFahT4j7me z-6KtrF_5gra)I)P9kLuD*~!q!K(e!;vn(rK`1=JpypyF9$=K$j@aumtU8m3%>&(zR zNrIJD28F?Lf{MG)70`5g8@0>m*((6FQ=)p5%q*zM5N@^09& znTGvsa;@Q2Ezcq3N=u6f4`>;nVXXp!Vauk;eB6tb{(sVsMZ#3Ve+MAWSAicBt_H+$ zCH71F6cESd*wp(hAdYGC(BZ(fW1QC=xOR;5^a8FOOByyhN_Fg_VI2VxUW0S}r8=L4 zmS7Md!sDcsV0cPe3tKiDLpN%eaibA7naW^X9U$VHaV=|9*JEm=VY2`cUeij$E&$>< z)@`DjhD~;x44X`BfrdQ^h;XyJhOGs}aVl~%4-m)I$29CBAdaham(aFd)mfAlj+ymH z4~TFRu5GUB`WUXgqw4xo5qG{SKEsbcBm*LS5#laZ$A{kY0TEt>vb~@xUuokg)=%dg+OVb=x?`+UPUu*sN_cSltDXF}P}SC#)!gq>G~ zOVDk+Nu>iG~g8v>To%3bQ&)U8kWiHo<*-~RE=C3je^NBA%ZDvVkv0-LrdU0k6j;CkN zF=Un%VSY<#vU;~p7#^Q8-jrxi1_Pp95i2stek?JnbR^e znDXFgJ*IP#ZbjISP3TC{{G5k;jP_D)|AxphlB`%a+xXJDHrL`)c*Vv}Hpiv|9j+a_Bb@e7llw_XiZA_Y zycSN!RUK{hFF$5`eX;%9+Q$Dx$sZ(@{VUL25DyuWse^3wjXh_3Y`ScFY<|!7SQ>1t zGsIUBA7sN{zQHzs&HmQ>qxiKWY>%s+v(2ya0|uF|xn3F2Sd^|EDf#tG?r3wqqFze= zO5qWaQQf-th>nTtAD@sY_j&Sl_p#0Y)S2zCrB~;F9QbJ*kOt8BfWim{4hZyk3_YF# z3iARC91t>Z;F}CcO5t zl3wHF?B;8THMi`ZcWCp_C-EraBpV?FzZBJ6PXEN51rwe*`Axz1+gdI^@cvZnIxX_s z_I#$-8`+#Mc80Bf<$8thTKa*u^@pX{9#@XBJ&sMYtq-Xcw&(YK-8P*4-p)p!qDtHH zu32T9-$hT`9#^fgJ!b1{kE^R}k7M7rJ+8gaHa}|cgYi`E;`-T1+x)5g$~J!G{kGRv z5p0`(sj0Tto4U*P*tfOq{cnED_PBD3ZGK3P+3H_8+%~@1WIg7WA&ZK~r^(l4epitx z^lBq3vp6)d0F%x+1=;Gza7Rf|h9bPwG87b|m8X|3wh?}FI*HMYOSmyy!z#jez_v9N zjsL{2u3u<;6?W0)9h>dLf7G7FXv5s~9G=uJcD2aQYib7b#?LS^sNVPu>>oBB;iCjq zjKCh~se1(uggrEHxahU7MX1^I7kcKZ&41v`wVN+qcYfx())&7vXYx^iHCzhK4%INcl!84!bUtib69bQV@-KG;vnp*IJ8c_`qh2hJ zEypwE_e`s4s~Kuf;OpBY&>+ROlkGr*0d6%#l+?|DcY)IiGvpFV%gZaAjc)jw!F+gT zK}KeV!M@|?F~+eO*pGE1+ss~OC-DpFZ8WKx!`D(P4tl0DboY|$jUh#m>L?Um9;LK@ z5`Ndq{t_s>(#=z;cakDS`r6e>J)}5fgjA03j6QOpp$o<$DJEk?m_)M~qvSak5#F3T z#Pixc%0NYahN7S-9?thTWtuBW1nzxPeu_srRk?=A`qwL+%3`<EcyDq2~`dFpWU3FUdP{1@wUp*lSE`B0g^Ry8hFhf6Og;Z++H zDZ;2L&;y=;{c{S%5%Z#PaI2qtD2$9coF1mqfGi478TtCUE8};mhjkn;qEL868)ZCM z)X#QYxyX4j?uhLHhYi85KNxBZ8up{%80?}KisiZUDXgENCOFoRVrar5>!RvVi|dBN z?q}&|p>lqgwJ=N$4l?vK1Tk%xOPCYWhk1o*Sx{K(FlU4tSOqg<#vVVE>aH>9!E7{4 zG2p5sCQ*9Uq7_;bLyHjDQj1=&V_PKP_udm*3|Cqie+_Dsv%jmq6MpEn1>6SzGT3JS zO|ZcqFd4HisR8p~&ktA(yFB0t*cAaU!Bz~m^u`aGx-mMAEmvgi@D zx02(fme9N^@=exVV{kHP4bBD^gR4Pja5K2$O6WT9^9VaCc9_?e?=UYXCdY>O%QN)~ z-*hg^6!}H#mr8zqGOf|}pruZ&GPgdw^Vvqt=DxdhvhHd3A3xdhNO=+)vWPrk>I>)7Z^gqIGX%y)r?xW}RpeDA*QBtchO4pPr0z05T(PWbW6c}BEj&H6O`Ls#8@ao- z^wu3r;IEW z8*kR+F{s+_no4j`Itu&!>pv$2r2CCKu;%Y)f4KOAcnu+<`mP$V=eLO0mrOjkfBX*z z4sVH`*D~&j*TUa_R+{knH+Mf7;kxVhZXpl(_Ic0a`Km*1Oh8RNta|&}tE9f5PiB>Q$%pkXd zj?4P9cxLblu;_e%! z$9QKbAM=caEamR`kObnrk%`r4*h2uttAJ!*p*63@{RNo_+$?CWDa*1Ko)ZMjnY@3mtPOi`8PoxIL6&KN^kbmuvY;}Uj=!VyDvdnxci3b z@x1sje`b6Fat(KHgxtd2H%iYAY1o6`D(7Dfxt6=1f!xB~H%f2Dd!~&5>Ax9Lyt}Q0 z`xWkgqx9|=RT}VjAO0%vXKqGgEj?CPbjApUS`iwh$io1KG~V1-wD-Pc!&>|G+rhn`T^zWdfP0#L`NYymRJ#Rb4h(>4Ij5xyrhiZ z%U@Gu?3=dZd3!c0H!>pM7Al9=?AF&@jvY5kFY?!M>g&g6_UCU~UqbFLvQ6~oVtm&A zCh0`5&|e(is;sQ=9@Md=D|^a+`IYDQW9;hr-kQm$b?oUO<`*8jPsf6;I44JJ6YD_ zyq!645nB9^pt7K$tR~bFif5r0)*@wCoe@u5j?FXDC7j`^WPx29ZVAUMO+;M;Vn>dR z#EhJ!(4t{8EKk9%$9Q>SM$X&I7q*{Q0_-HOWY~kehQm(rN{5~0H6M08#%F+!h7I(| zgFVCNaoA7zY=gbsXD{r}efGir#^+nujt#Y68b<9`rrdhfG^N%{gEeBEVgHj+khvdY zhB(GP>W?R)1Qr{Z#7rLyVC_lR8pA>8cu4i95vhIw+ms_&4cMbN?s(QF&y8u3k3Y z{8sVh(vM3_`#3Z-{we_|I1Y0^v^Iv?+%F-o&9$||8x+7H1!}AtAE)RcyK{FmWFmK) zAoIBUIwcIKF>N`w>O4hom+*6%A>-RSK7Y+GxW53>?F8gW?*0Sv6nED`)^WG}`73;P z`C^95_cLEtR_%KU?km0)*yVxmK;!oUcfe+$?L#q(9U2-cp1Q0ono5lOF|SGIkAO4* z^z1qUawPXh^MW5kb*w)-s$pFLN-sh7;qF+-f!sX|ayWNe&#bs=3X!r%!wfjoK>qyz zKhGkJf0l6fGL#WO=eW)|p@O)e@gYeDZ>O1yvsRXL?Be8%aAy~8$jjc)ol!YR=_jkU zcUI2xVpmxfxhej>O&#~6LMMK9mdrcS=#I)+sBI@B`d8)1YS)*(k6n5Z&ze$k34g(F zKOPc#iGH!Z^deq;`it}Y)AT}r!CPPYE*(P+JtDgWc8+Kp*1CPys8&*^@St`f-F=)} zG{A9~OE9-&9Z1$e!hT)BSk@4vUm z-Mg#v%xej`!wIE~UwSm4(!eziKQ-!tyJwuIGwWc`;uunb^rSlCxCK?#bM!(u&2NBar@ zZ`0eCp}k%=(_hRx{oC`4=YoHmp61}y=2rC=^J;>lzVzb$75OdNmw#G*^`#d)|MvVs zpPQwxul|Y0tACqblXeZz0Rk3a7Sa0 zey-llT6GBP-q*#eX;AynZhf3Rn*?gy8?|WNIXuQm?-$UfOGHntN8^@lLn3>%>l)Qt zq-U68a^dq#ZjgF_bn<}g#{GLhMss&>$bNvhE(ZN_0n)1oavpb^As2CXIph=Ey#{hE zcgs4|XqYQN>D?gxxw|D~Ywm6f*^awAKz8A7N^cH(B22?phn<7XjQfqa8c8QPvDWves;_kJO8@Zd(v*{RT0+ikaIi9;GLZ)$dI^=Bbz6)|W zcT;l1|7eJV>SR$QUk?_g$jWF%ruI>!IhOm!DbkRr$WXS#$?kevOVej_-2tFTse-3xG_cyS=_dWvq#zvza zG&pi!8gc&v_wF#RoIZcACi!po=c{|Y@$uHhYX-dhZsA+49*)kq*#r;1-MWc!($Js$ zHHwqg*~L|(bHxDGMd#$Mb8*w^b>h}{cp>8Y#Qi8n_(CnwUx@Yvp9jfCtXm3j$ZGX` z39o8K;k`A~Vu7xQUEjxAfO5BcG!MJ|=r)3R`+FF!>O2iTDDf_aFxaVv4A@zQLfDqN ziSt%{{R3DX572d9hHQFJad(3p&fSHOi@AFvxCA|YbER_yS(z5rxcEkON z*B4$ctlDcI+y}f4c{#CfypF(q-0L*#vtH+6*Jp0l|77xnqJD|WD2_$?+s!X{>(^X4 zqlhQ!w|)OvpZ+49kpGqbBA@Ex7uP4^iThXhi}9+EV*DWDi+KMP|IPA8oL}g3tNM#{ z|CRotzW!JIqFnwfevzO56~CxY{}sRec-#Iw|7-mb{hU3oIR3Z%BAt+e&t8gfQIAD= z34c*PgcSKLaUv1Vo>v@;@PEsHv-`Ildlu_#o@39W2V3sq;X04i$=~Lkbw7tG*~{){ z^nbC79{s$NoW5&bVc6yNjG@Yar-2Puu6{T=r_R~38Xrd=MgRV@<+#IM-t4&)Z!sV8 zEQh_qa|7&6p0B}v!}D#}+dMynz1#C6*q?ZQ27ABf0oaE7!=2?> z2z$2YeAw3;;a6Y&i}ppt>%kr3Ia{O?(*6u0od~zDKlSm8auw<8drv9CZfn*N$7&1B6KO@?N$Jv}qK--~*9pZikS%iYUiKjOXt_9pjA*sr?3>F$j6 z18>8<&HY2zd)z;Q{i*xsun)R_@9x45yB~3PVm0nR!RNSp9c;C^M}My#{Q70Em+K#f z{fK@8>`nSg*stnegZ+m7ZP?rNyI}9pe+>Im{b#VN^)-55c2xfp+{g82U|-Z*VB45R z7EJ$zNk%+}hKD~Cj?jo!5f~>&+)ehzc^l#L;&T{rRvz39`_qG$VOLnT<8In%*#r9% z%NMY}vK)l{t>t^zYE!#K!_EQZ`zPdO?!F3H$K9+_!wjzgh}0Ug4M6cnLuLT<&N>q^ zoBONzX~a!m0#bZ0*tEKo+?`(eYm?H)APx80}_7snF*jXO4VcQy7XQ_O@{=YmcVQ+~G zj-Hqnc-)IK-siCd_Cp@!uvd6I2Kxz*Ctt@U`$!%yg55J!tSQ;4m(;O z1G~4ruilCE)AxsafIb=aVEs_oBlP3-Zft^n65NyZS#W3TXTi+?Is@gG3#2P|dqOtm z?xv8_Xs0xT}IJxUW17UIxT8)WYr}g`zckLV6N5tMkFTeM4Pn zJ#YB0YS526Y0&cHOEY|f$G*_8UGJh*feZ!cS|!LN?#})aYp?+FzY}r+ci#v3Aa`$q ze2Kg9!84bBO{V>$ux7=zyRy7 z&uaBm&hMCsF5pJy#-ac0{8mjAmsn3H#+HllrdY5p=6|kRSB;Nt@bcf) zRi|@vb9dM4Jv=-;y}Z1=eSCa<8#VItYYfu_rYTG_nC3A4FfCvLU|Mn$$W0J8t+)xc zGX^_je}VSLuFhzaU0pq3d$|U{4s>k=+u+&{cAV=V*kfD^Vb5^=9`+Be7T6};e7u_| za(f7GV#?hfhP}$|DD0oyXw9(c@=m-X{`zvCtC)Mgx*Yb3t9xL7akchpYj)aNt&Zd=uK!`!StGhhj3EHh!8U&PF;oK>(&R>i7W4Mz4%W6;EEQZ;5xg{DeV zgMnJCli8`tiD}JR=4{6L3$qJz#cKvP=5E$APqU}l3#5%%Q|51OVGdv|LEj!j%TDGl zI88SejZ-C?2jO(1S*kf#KBZM58&_wHFr(OAte4Mr?>;_jnoZFq8SXYjvxf}sZSQpQ zXxpW2Fw5y!+R=&a?)Xc`*6i1gr{P}Mc~xi3l6L+M_SMd9!#X&(59=J}#Kwe8g6%Ff z!W*QfQcKvaq+s-NeXsi0eapJnCDb{wdgAquotgi0(;`-+|530`sPxNDqQ@#gC)v%|Z$&uWx!fT5KE-&Yy#LMbmZ zxS^EwZ9Aisr*$kr$?ocS9Ho4s<0-iB?ff{(_fY3=VPEOo2Bq9CtP{$&f7od3ela#| zBHV70FG{(I6aYI&>UXuxXU*%n)wNf%wp1M0@3tS8pp0k@l_mnD)-v`n!$v#FM; zJQqb?is$_dUI|X{3gO#P@u;|8i5c5pSs`p*xk?E*`lm8AB=$o)=8+;l+n<<~EVq5W z&+j`yF)NCP`O{=q>|Eb-w9v%7d)?j3=p^qKp1r><y$uW6qC+KNgO98POTfy2%m4VULKI0^1z181^d>J77y2x@{1-h|91y&;a||L2rz| zAw9X<2hx|j8$)*D?kkKA z*lz}Z2zz(%*RT%+e+T=p+yb5rJ`eX_ay!_eb>`-NOKf$w9@S!vDw%e%vS8yC8M|DO zi#||f?gd$z7ly?#m}?8tFek;{LAP1O4#0hg{RR61+loG;#_1Sr z7StX&+%;$t?5RQYPI7wCY}j*xw!>zvEUhqxFw8f2vvR{41MczGA-I1dS`TX-i1pvJ z@;kNb{H~ZCTK@q0j|bO(0=s(sm$1KHzkj_GJFxy6xX-S)z?L>o*o>Kx%^9$>Hs`=* zmt8UDXl?0f!KlSD0X8>&$$prD^&1M?(`pTn*WJplVq=nt?pn_Z#5`(|(0jW#!fZP?racBjo@ zu*G#OFe}%yM3H7je`tjtRE{a0?7D~hyDR=?Q6(24G8y=rNus}yCDJRBJmI(4tVk`F zPFyMi+vRZwPj43IGxK;t4>yI^%=O21P0FQUr2$q4!c7haLqhR@FAlExA|7H{cAhxjNKokZmePhtbVOe#`>kT_*O*(o#1DdA6NB1?A3>6PFc+A*4g7$?MN zx@#uNyWEi5DEp9qUrjaaL}v-1J+a%33*3X{(5diIQYm&{%>?*&b{U14?CqK-SsN^G zUJ0LznzeF#h4UBL{UGd?&hcPS;%{?~migV$B>$+@X$;(s!7TSg=A}uKQz`lc%kI^( zO`-K03A>QuK5@;#sK3_rBJ3*N$2#0~?uF>ZkGr3Soux0tY|?T4Y1mmFg&uHwoQAEu z*-+k}WO)^O!CzhxVDcXCje9^|BV+LCjGjK$cc3rsK;I`|D|?0b%HOId$zQQoxA+FL zZD!Ti>86(BTjK6&`8MoWdG8}r;CRdx8D8l80+^NE5jVPTgj?P@sdnQ*ag?!t-IS8w{vdJ`X+jR{e16D z-tYN#YgB{Bwg>zc`#t3Mw4Zb1&W*zxM>X!*cv6!lEt0fSblLnWjNLLRHsvsr=m~wJe7QE(5WG(Os7Vj8h2{K zsY$0MpGrNIero!unWxH5-F0gIsU@e@o!WG&s7xuI3ag^(M-JdAeOS%9z18e8j$<3L4>^8%F155JW?QO=Y{)5fG zbB*_3ACTcx7I+u(x~trymIbX2YRlFH?LZr^Zr$f~y$fx5VW=^z3M=BmrLHVO>V_wU zUeZ(2RQ9xVMVgGSZtCFEwBo|LpPVnQySfges~6_KFq5r$;VG12^Yy`K>5JAcTJMim z|2*6m)?bAE#m3_so3o-#hd1T3bDPd@qJCfsTFRWwMHXGk)0VZ?wjb5n(7H|AcJ14D z=+Loar%s(ZckbLJB%~`De2oAT24j>BR)>XS@4ag#>YC}+tvgH)GSOBObItUWO)ops z+s^bM)7NUSQ8qWR4o#dR)8A_1Z({6kX=*T)7SJZdftOAA|8EZdAH9D0vTtCOFIcc( z5g^3EYX<&{5K>XEk&`T{s@H&b(GAY51o_fgaGphrY8EVFw@>mU0Em#!&hz+3uh6SA&A1XQFpv|jz)jk6Fo|Aypin7 z`mtDyou{&NmVxi{vhap_8p~n1Y&u2(`K*8yVrppyD`qoU2`go@*lc{iF$ZJqiEI+) zl_q1il2jJQ`m=bJz!F&!8^Ds;KsE?t=OK8@IgAa*6x9eelFiqoV5({i8_UMwZTJLs zC-&UC3+pQ8v)cc|=FIpi_(-8}SqHxD;gS66(d2Ahn|&BxVK z?}dqLN5)O(=GEBC+ttSfOLHlSi%v(jD;5vKBID!X?G@OhS(7F-t1ZuKH}}WXb~D&8 zO=Um-W=#={qvp+;`NOL@Cc)uu-dsu4ta(5{lg5ZiQ{gRJ2KcvV+>~TX|E5g?0s=8L z-o(ENQc&_1E&Tlhnqzx)Wy+ia5%V9Ezg&P+3zUCRo;;;Eyk1iI-pI(+sdf_fflO0lbaPzEB7JPiyrSSu5U)uNVmNn~&tKPc$NQdtI{@xq){Lg1* z913shyr=C4{wrOc)cKizJlXNpQulki2DB`gP%*OCf!8|!WL!AvOZJE1$}1CdKiwWP zXvnxPs!wma96vPjzQl`8^G&_iZW!@g?D7>)MgO_&&2L-#TF!m-nP=nQr#zm}{KNHk z_sO`U#mv-uhJW9tOZlRtQ(K$-Fxlg~nuwnIfv)W)?fm-1sSiJPY|bwq^~hhgf7r&n zG3S5FocprdJ7w*|0$+H2_ld(L!Gqs>a7j_$H?oqoe|e{M8~gVC?*~17^unq}Io~|= z=;~Gv{QCLmPDhqLv)F6L@&41|o(T1+OnJB2NcY_RQupVhcf>yT^gZVeUY_?;%!1WM z%L7pl#V36D!>^yF-1%t43p?BPIW^=lkN%fF80HrCOjf6F+Pyk!;*S>yy=E@gK+WhiTxBGs)*yBWC>5+l~ zX98vfb>6kO@U5xdoBX%8yfUWm;N4%%F+BNQRbAO<6V3-8-VnJ+w7!eF z-nGiOr2oSSJ!X7yx$2GQzkB1?i95%{oN07s{JI7GR_vb~xOvqk-674yd;PZG7vAoJ zyF5pi+_Am5?v)?R>s|jp_Ra&WiLKlFduGxLL6nXpq4y>t2ohAV_uj?cP_cJG>>Ybo zY*c%%h!wk7v5UPccBSR}?_@X!-{U#=y!XBLe&2n*H+j}xD?2+glga!hGkdSK_T3dj zKdd-ik-T(?GA6-szKu*1Mawt;6kUKZZAJ8ospuDgV^duH3fl zxVA?=$@5Oto|kgHX}7bYUheJ{Cd>A^25W77iu!vsEUyf1-eQQX$3a=&;XY@MO_=O8 zc>dZKN7mKvX_Fc|v;ML5O=GgHU(CPkBwBW3a%Gdxu}OVREsk!mmc&%CZ!n^c>+VC_ z0(UCxLh7a8Y}EMd%J!cI`t*L6Fn8#{ZW~8d7Q^Bpe^rNG6dD5}mPq+lGPy!&qWbfX{73Kq`6vHJ-tokhSUJPB7-GY4MZ}U#WIL_} zbICVc+kNFkB2!i@lHmR~Qqv55lcP0bHSmJb%tC3UjnKN0>e@&x#)Pzq+9)zlyAbwr z?Fy7h+GH(9wrDSEHRO`^3hZmz&#=E}^$rZtIBFfSM#mKx8CvPM6ZT!lhbZ?tA9a?I z@6LK>+#S1Qxi)2vx}I=_U!Ut!l=-fDl*B#39sVuuxhU_t7ose2*L$GX(=*Z&UPGP@ zP`Vd(EeYYem-NK=sa$WTFGnis?Q!SZLEj0ZY>)IW^=2F1hLr zB0QR>Gs#(G?|?#gIgZEoKqT`z4?!Oo1wx|xRMJ<$cOTI!N8>8bAgwAyn>-)FiO z;zl>r^`Gm8#AaTXy1md{V2Q;u@=~|Uv`O);>o0ZJD#U-0q`cDI4rn=d;n3H*mPrrS ztqgyoTP$(uuM@u2#eC6aEIa*HH>7XZou{U~)3p>`nwb~%p6{10?VtbS9-;>+y^32W z#^HiTB=0y~I!t0p!s2PYh8B247)o@c@){Qb#s}?Mqz{2nHK1e6^ik?KpfSAq`wPHe zw(;=~3&=XkuQ8r~zjO=O(v*Pw7W}+`B$4qe)Y1I;S14UzS-qLe6&Q${K4D&v)tlslA% zl-HHH%84eEO=g;GFiAE!X_9Sn$)t{Isp_!mg6foMU9;9^ZP8D+-Ry|jQL|jLa^>SK z`dbdNG_g`!ceaVMZKH0d?x60Z-mN~VzN`MCo~v2x>EfN@z14fK_Yv=G?@Qjf-VeN& z`$V8?Xs*9H;7ZE1l#6NlG}jE@j4FlI3U!4w3Zn{}m-H$bR`Oh5cCY-w)}Y2TBRw76 z=0wt}WlK70CJ3xli9;Q`z^N`hI@rN>+061~%NVPULm9MTc9aig>dkjz%*vIczbO+k z=P|i({ydrGbAaG;r0J$oYWTt|Y>6D$|?5oGS;V1jj# z^)r3&IS+zmqFzHz53(auyI7&EIe9d?0-5}kdbgO8$Wcmi0(r_au(`M~AgVMesX2xY z{z{1MwTP@cB*J>&P$3fGvqCcMngGkBhn0YY%)vQvAcytgo*RRE8R;zP*o(z>8onah z{QM}JQ@Ct?>z?Qd9tfddylh@znuA*hq4hb?w|Kj3Zs;aR*3uSYXailEv$t&i=CZkh zX|BEy2yLGSzpj_OZ&z7APnv^;_At{nWqp0i#?UoU)6qj?o9Mp3=W@$}U7A<8Y>e$i zcv|ZrbeU!ImE=GAJ!f$K6W9>LdS7Ds5NhXRwCe|i+JE(kMo;^A2yIskt>4&&Mo zS}%lF^R^b+fw!HYT_JR+*Bv^5uMdQ-!rLLxp%D7()_|@Jp$B(e=!SfKBk0Bux~`_s z&3L;7bZZD*ep~1+5W1YM(A{~v7j$0;{cH^MVBQ`IJ%YDKL67C_@zC)Qx||8n)A{+ZoUYdHe6gUSbt^2$Ancj@~3I^bL8SN2n@#Xj-A~rW^Wt`l63# zIC^5@$uu$xUQ6>4o3M(kg+I<__%9uRN5lzoo?IfAk*nhdxkKJyM702rXJIVY0q?FdNG5U;mk;8G&7bN4=<=G%nW80 zGlyBsEN50RYnZjn1}23`V=|b{%vNSMvyVBz9A&bZ3(R%q4)c(C&b(%RVDwDLN>~}I zWL0c=){3=Z?N}}A%DS_jtT$VU4Pt}Ys%#irgRRBZW1F#U*$!-HwhP;xjbUTi5$tIA zTqUrR*{SRdb}l=QUBE74m$1v&mF#LZiCxETV3XNYb~k$jBNE5iGweC`0(*(Q%3f!0 z(jV(jAOGIJ|DF4{KKde?qyMoV`V@ztA8|Kkc|1v;k_Tk9{Zrzp^<(@Pe>~%u=E(JO z63yma{KUVKewDa zz|namlejGSYaHd)bH})3?i82Cok7bSwETjWm(em)eSphH%iS1Jy@8e=(DFE*>(Tl; zTDxd-u=LB^XS_;AizKvOj#g_?vlL5N#F+^K1Qi5<0((KYKr5&&a1hiGcnIpDHr_5! zFu^WdkYHC`Fww4tV3J)u!4$i$f^K+DwTrhi!@Cvmu07t>;@!!3I-rFI-t8)wW>+sc z+P({(EAWiAUv2*YGnPeRi_$m`ZGG&ulcZj9eLSZjoudi*m+jDZ9E85%YUsahjlSR* z^!g4*U+-8liOeK($YQdbtR_i_h0B1a-X3HH&m^bGIdX;ECih7mc|u;0cSKL*jFKtO znB#0<&Db&(88xHDIl+~2XS^6+#50A!53(*(pJ~K2!I_~aGn7eS=EEy81>_%sZ{#uj zcBk=MU0`yMAoe~00Apv<*W%?4rc&!){?bm)vSZz9N-83!`MiW z--K<&wgdZ}*l4yZ+nepj_GbsOgK!2I!^VOBIbeSwyBOrJWjC^$*sWlGFT0;T#Abs0 zQ|xK>EPI~4$mST>&t-41ci4OIMtsA5WxulpYzfP8Dy{-ok#pqSI4{nhtBmklbF1d) zqIGj|@eg&^y8pf?$KOqZ<>ch+7~t#btNqh|KcoM}AH695+9Sj0WBEtF45QcOGlSQq z(L2NFdujC1FnVD2G&~A3ZOB>FsIs5HV&HHF|#jGu|S<_?ZO%gYhlb z7-9{f*TR9&4SBma^aS2s3B4LZFR9i*Z-mh6>tyIO-cE0==8JbD&@Hw%|Ih z;~}(-7+S{LO6Ur_Z2@h^+riKwyd4T1&f5{tk-S|Cx*mkyDb|N>!q>+@Pv-3;=>5EX z4f-u_OOQK73!&Q+2HldkW1*+>b}DohZ$E-A;B7nHV+Hc}S*@T4@OC0}DsP{Krtw2T z2;g9#OXG95Kplx|O2)Yq(H-T=++p*BoczXu)T;5KHKE~T8pwIC3IcS!(m3iKiYVK_)HqQu`MA!uEqhBN6#Y5V;`r)4=xgtAaAjPlwVN7n0;x=+~YU`6c=< zB=h{&;Ov~`|JZPjre64Q0hdtf1KLz-OWIb_SHimu^$oFPLmbI8LmY`;Y6!gZebO$a zt^F;gB)s@)Q(duX$z@Wm#2WqIekILNwlMUC_b%xNTVKMU7o62=^f*!xcY612D&!;r z#zdmTMYBpF6>~BnQ7I&>K+1@Pa?V6XL`oGSF%ii*fmF;Y6^P*FlmfAem6%`_K$%D? z7ZMY(T!wWBB?^(0V^vCtjNw!QRxT2wxrtOpq$VOxC1jKev0T7Plwu;~1R@zL5t=CE zDn=<1NF^!`cLuCNC^Hc=G9?j7C1Qcfgp&(dg;;6Ap+d&s19F7`%a;p9DuPL&SOp`) z@KW0u$^N8NQoXAw@bbr3sO95~+y_ zt5tAfBEV|pA_2$ZU6o93!iYsgq7>kELW zsjvT7JBd_sMkdAgBiJ^&hdHqTTPw%cVX;#gsltTCw^ph+ zp@d~j!~&T_iQkiOXd`C83WOdV!=Oj<_6+Emy!{Z|7eZ(o4fp$eY;6z=S2`cxDA;ij z+NSJ0ab@S(u#o;fml~am;xL4^&w~Edyc7{KL@q#Rn{m+Nd3zOf>73?t&O7RtOWTy4 z->>XkfMw@uC_C>%*}lVyI7_)e=yIAux8UuQ(53Uy)A>t!Kxmt?^Nv@=`79Jd>tErl zRyyBVJDkHx^IFq++O9!po3gnF;|DNgF@)AaU}fG)vNNLwyv-=Pd*=&YSH3`?tO=uPbe z&u#+mGcS}O2D>jS#DBe+FdU^R>w|hB(V#T0(YOTTmOM1HS95eNnG9X;F2fpw*x|6t zZht+tF>0O}*63o`lCo>x$F{+{f2_aD(QVse_;$uM8ux=gN0(pTum|Lv26hc>GyT>y zpgqg*sj|y|YiMcQwrTLWE8R|GO{Ss7xUTVrZ~Dlv%wC31MH==M-5Z3M8EoVBlwH1Y zA67PeyM6+?pWhg^M`hT~UWV;A?v1jaGX4r}44<+#{IU}abE+D@#jG;xGOm56;d>eP zfbkbMuD6z9pJS!}@K}Yv6pSvy=MV9J%v6*ChNERA)+j(3((g`%WOk=*-$<8xJQ5LMcunGYO{yDT(|h{Ezua?Eq%Lml%4$c2EjiZeHgz73_}wQtuj6Y^!<4L#c$*LhOI#5Zyz&S5vA=) zJpq2Nz}1D}fvW~Q_!sykc(ZiNO2_}>4UJ3v6?Up39Oy^NOU5Qp-8nd-hT-+;qqst$ z^)>9NhM4hMWYiIc^}@zg1AU)mss6JECk>SblW=JSu2Jer8=!0?ZHzL(kT)w+O0Qi? zb7Gx`oh#*JUL;&buU#g}GG(FUh%5{C8QD4H#W^oysO)sP7rXi>4N98Bj;VK=jd*W1{ zrkjYDslTa^1e=DMawN>Om8lJBZQ9jTPP&(jaGZ9fYSlk=iw6|c`4D%P7JSYy$5f|O+&QMkr?w>%Qg@|RBD+(Mqo!F} z^E7;~v|VZbWOv$uG$A>dmYK$pBWYQv_f7Xp$2O-2qHLHxCf$dOOMjg{fV@k8kD4#( zk2BtpCmGK&Sn@pMCCXPBZ&3c~5uIJfaJ*;ny7zi|)+VG>NAzoCct45vBf4i zMaHF;Y7)`d(BAKX((p#9j!@G~VFYoT#ti$Vy0rchfA%TW@tL89_LOh>xg_jE11JCR zS~I)1q5e@!jPd>cM!jubf5Yo6UN;FEYIq&ZYt2UE>p#Icd!i2p8tVP_)HZ0tHlkgrE^WV)x_97Fs-q7Wm$RC0SgMV!{_|yg{XT|uci|UN zs{ig1OSk*)w*QaXC8JLV9xE7)XGwx!wouN@5t@kNiAr=|bcwta6^km6646&N#^t54 z^5M)U`FEUg3gmH$$)vGzl+uGRDh}s@@+xx`T+&pQux(Uol!2;X)MTpY9a1(wo6{xO z#vY&5rfa}|q9Ja$zeR-gRrbDNUi2=ueL?0>+p#E#7Q=gl(~3|^v{IB6v=&;HSZeLH zVxrbMqQ)70IxO+gR@EvVz_u!*A>{)!4mHA)9ZHJx9cO4?G+9IcK3f=KKvMaT(x(o)?#1@N8V@dW8Bny6N3editVADax}J%7&i* z*wggX>y;OJh<%!(zv+)T_KiJI0zWf96H*?1Pf8MG=z9t`^gSi|&qE*6;xheB#+-*9 z0ks3L%z)?sQ_>|M4)%e(!rq+;D0GVy{y@agGa0t%5QnbwqkNJ2HI~&Rh}2 zjf-)ASzKJ~LrM&JY@X;}ARotDLoZU%FME+B#F{u8?%gWkny?K`+4o!7#yCLA+q1V47f|V7Xw8AX%_Quv4&CkS(|iZ zcqDi#cq#ZO_$nyDJmyki1)-zRS6EqCL)b{zO4wQ0S2#!*FPtr$CtNK|5oREM_n7d4 z@P_cN@QLuP@Q1JnQ=rR56-1UIJCU=Nt49W#dE~-#Y@CV;*H`o@mBF}@d0s`_>?$Dd_(*| z{7C#%{8Ic@{6YLpTr5T>oy1&XC(%e;C7u$0Nw7pGiIOyuG?PS2x=DIs=KBGXL6TvT zk&u@&cD_YFyXrAR5${ z%`F)x!&m_XQ#lcuo%Sn)E{A42)j_CTcFx$A_;+jzq4iUsr}K7g{8N_Bk$e#LAqZ`g z34N5eBg)}w7eecYLJ#BZlhCJm`vUYG2))0*2mOGr55^r(H3sr2VeBlLTLN4a}j^(i*dt#45@+oVCYZ? zZ4(K-1pTzlIYO2~FX#JgY5qw%-_Bvo>oxT@`phA;{okHn`+xBGqjLw-V=xul*9!XI z$08yBzaNVZTikMK4B3Sq?;U9znQv&rH#C;)(4FZMXgpc)?mC}nOqq3#a1V_uThZ8h zD~&C)n$Z6?jW4Uga_eb~S?0jlC>m!rYsZsDG}i3VF8y^HZ#HoHn2$8(Z2Mx1P#Sku z*(}?c#-1&7>2rz3pIxcEepTsqJ=wznQ9+R<3H2Rj$7qVa6^yKS9G zW7<-8j0mG~ZO^v6txaRwLMta!pz&?pxepC!j2q)u;}DH=o44e94vls5%WNT{@orYl z-rt}xZ>DKITGF^T56z&~H1=)Z<%0n<{_S+mm3=e@u6aiFrZf(2+3PtEXe?Z6ofQvh zJY2VSXHL?XxN|eAKc;bULmqbW-yc;Au6$VK~F)}(QAgER8i(pb4S zA>D0gyqueTH%A&X_wsPUeHu4sKI+sC8awCNeDGr$Kew`r%d3mwu4l!^vb5Rzrd+mv zop<5JxZAHrULNo+uJO1p2L@UWPVbd3N?v+;-N|v?WLuO!G6hR@U2m3kWQ;NYR%y;zlVy2^-e1~1Y1fb)$ zD(*w@AIpZLtj^X%O(eX?F?z{1f*r-ha-L)`H=Gk7yW13u1yB1auiHF$QOxJFyJg_| z;}Un1lakxqJJf&1T?R*fa0RF@=6nV4UBJBrzO^6=1OI&aDK-5h8!@Sq~)Q3=i z8na)c-_VdT?uGgd?C*w|uwAqsS^>O-18^5VQA@lqcI)MfyWME7u3jwZ=G7f`FR%Wv z2YAK89_%&DizDN`;$bIvJwp9!ueT^adPO8R8dW1X26>$0lb54(Nby0Yw1AWWC`YA? zLpeTW3d)%&vr#6d%tyI6B^_l(%9a#lP)gZ_a!<+$)SOJohJ7X_Cq;~0Yd2BzB}J?E zYVBaisfNGAUp{_yeE#1$GA}S3(tDRZ8b71v>)$>OW4XaNqK0#EIJ&0%BER4tkHafC z_O9Zt7r*lVGe_e-^+Ch2ckU0zULk5&tyn80a;;K}{FPcWl;&D%9E~>Gim;tQF{$Cu%Xa`oHifHD)f{jd%tR^sg9m7V2>pW#BK*!n30a%BoBql=Ybr zC`Y4rg+&}hJcH|XW-{z)h@}yb`OG35OUn>Z1OG~9E$sEoM!cH}&w3#yxY&g@d(any zET_y7)YCW#oBuGR z)__g>ZCKI-eK*L!%(h0^mTixk4s0|A;kvLrVE2UoJxlr^0ta4r@WE%vV0IXmFb=Ue z97$j&qJAnn3*~%v6)PvJ*(ffBP%nCxjDQ!tfQ&Wd)ZD~v#WB2{yNEIeF%@*~@?4a+ z(36AA!05}t)^de7+WiEbagOaGn1J)@Ou-S9$Iwf|l1l<#oMXEPr{ElGoCmzvFc0|m z^2IpE#@kK9eaNVa<0=a1taSE62xq?t=hzkYYwbm3J#s_R+ek5vPg6r~PL0|Xwx7BR z$_PV-&ZfxC$s#LfFVw^ua&vA|Z-48vt<{r z9$o^{(<=sN%OPIFaTcB6^%(XWuXiXvA&C#>6e%-1dG+M}IEzk5UV+jv#TVzmN+|TwGyKi zR$p2tb;Tyx?rQtPvw}~b%&B^_c3#ShX8Co$x0h@&ZD3_-XJx-jW9^`IxAC&|Y3gSe zSTU%1uy3`Fk@Xt1Xpz<-x^u(s^?NsoZ9Q_{_;&G~rr9s-yf}1e_oN=FJva5;WqWw) ziP-b87YF3@yE5Y1u)EXm4}CJ^jeq{=kE1@v6+II;NV_Sr^n&Tl%i>+GQmSvjW<-8_|d_(|rob1x3&U-|xsT$S86y=!$_Ttb#ZcN_L8)NTGIz26L=I}X36Fa^ByZ zmFN2O?VHb^xnd#m-AI&SR;r5WE-r36ypH(14y;qwX-o5tqAv0t<@=kAGmFzr zFr8>Ix$Ep6%Q~$cm}<3Mv9td^#Zk*Mi%_)H?nCN(|zpF`0+{c%M$!12h9uLSY=a{-NF0A4p+Zb^J(X|o!__l z+O1eK_RILM@!t}@Px>*XU|QjfqFICHlqBlslSK?d@FG`4t*W)A_S!n@>u#)x|AKHBDZ+mr3G+n?!huH%KCmy8FgmN?>UN&Byn zu@xDw;CFxsM>+f)bQr*nK%Oc)vX-O}5u%p%qRkO9o;$)$<=P3aGVReXi(VXImaqyr zE<7dV$S1=L<5CeE`G`WKL}@FkC_TG>r4gaZ40rDpRFhSMNRH|n z>|3haDC?OvMsHD}X>|D>Y?t!Aab6l=@!Db>DeHH8&GH6%XKq^FMoFxM=%Eo?$qfB8 zw1>vtMvXp~B%5TEsWzKYwzG{!&&xR5@hFRI^(aH_bU4?Iw~IrWWtWZes-1Em|%Wem5&8%D<5l=wm$Z#QTurK$cZP?8e%OzAt=LqbSSI))I_%NNT0^A zoB6ar$@p=8xF&~(ZYC+&px=Pp>B*{Oh73s_pDZUIlfS_pnmPg_AQw|Fq5Pg&fU+pn zCoO>Zrgcv9BS+INV669k+5?mw(mSWaPJe(hKm7yB*BPcI&dth|Sd?Jgy2P)%4&u(kjolCl)>|N5ggeCCa)h~wUE~kh0vtEo+rZ<5vuS##DmlIpP8lx>5 zeVE>kbkTR$bEJpCueZzz^&iaA;}_#}@SgKUNwc$|e+|bj_3NgizMaV!9L3{s96RAi z&cJbPJeH}Cw*bfUR9p|XoXRk>iMfoeFGC#!N)^~vSGJi1AR z0Tu(;6&5Se|M89?Mbuu}qKRaRy)X*#=*9iKE;RUJaNN z0lzlpM8HfuuBT8w!<-1X+QOU&AP;jQ;3#u1M)@lOjK{U{D5k#X#-mt*852OfVXg!} zziJo{G6$ZY8}-gru**3!UMQVi}HNg5JZ>GA#=$*c$h7L7uyPQ z7T2hm=#Q;HOmU@WM;5XYWGXact&jmx1IGn79Pj4rcX$idf=^=ryb4=!-I38S1~KWg z*f97HMiNW50l0}kEPFk~uEvrU@Hb4xOcJxm4)U3eXZDe$7|C3T+~D+ah>YRfm@N1J zmS@)?w*4HjKTgmjDrRabC)D|dzIP4bycCX&6)+-E*BH!#o0MO@=QLCkXzBS5Tt z0D3oqSSQwpHO2M2f|U^oqUfu#9tcEe%o1F;vrH>oyVt`t`*OBBJDe@g#9-NV**188 zGKv&}J%Fua`477O&{fMu}5A@sI58<$N5W4*8(Eri=4Rr2?t`O=?MCWd(3=FQo z4uY-%q05PYuFl(0(AyyWP`@2|2VcJ*`XGevpF_}@eEm`Atr&Nre$3mTxAS9A`=Af< zb|$nR&i#YY#veKWLf0D#9mdCwP`?FwD__3{T7zq#zNptiyFjStl^3psd?0i= z!O(uVD*6ta`l$VC-n?q4kATphz6SJV$XwW0pszyca_ΜO!^SA-Jw;iTc*iZ6LJG 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

SMsMN z)F$=gD1Mbh5|@07)}&r`_$bXz(rAY!ijJhw z+bQC2sBY}?N!cf)?7`LkB6a;`kfgD)xA}knyC4nD>GJy|IW3CQ87ISeWSp^&F7z#} z#h3edb;F&ziY?4@*JNN`A$o6iME#WMIRcAY=rj&L6VspNJ`Q->vAHL-gYxR(i6Lt1 zE7k@>4&yd7D^+AOPvj7~3w?r<*lm3xs+*yZ4(XrjWV#A(F`<>WWnT1eU0!^pi|i!1 z4-K0FFa{_Dc5D|RkFJ!V>E%Kjk9)pc5a(iU=TJwC^ezCTm#JPRjtQPgx#KDqa2eeQ zD)2&)C@2(k0u;He6{kx&xG)qev{f0?)*#ff5yoyn=pyJyf2U{MG8bIAXm;R9*=xC{ z7d~mq#QGA%>g58)g@2$e{)o?|3)f)^`Q(ltthe;DHefO=&SCHSDOBlCeL2hBMkmwp zFnmL~(A9GFXA#Ucya@vrY@TCtK2@1?tSm3^Y>%4E^vyV(;i&UvDK80KEv89l>Lf=^ zrkh$!sx(yzRbYL3K2rx4yr}wz787T4>EZ~})TBC}c1eXrEhhcIVY=94DmSSO`VkA7 zI(RcD!vJK9ag`Px`t9M64s4g*Xd8y%`SiNLxwggR9yIt4K3Tq@PAsN`8K!UIQ4du@ z|6!`hB<4^F<0z1z_Wd}0BcAFNI>8sI^Jxb_(G?!#e|Voz53-Z~f}||<3jE#sq87E4>0AN`Wg|OeiUfX|h?2#}%3*@OEN0b^ir&f~meH8B>90JM>=X58xw#JcKLY z)f7;w7p>r67v=`Lkb5|WJ&kOKW||V`jF|<=5@? z>Q2q3w*z^dw#uWOKut~M5M9&Sryotz7X>RvUqMDqCOj)D56czSMOU`=!8Cx}MD-f* zIV}7I%$nA2Ucl|Xfpvq6?^LXPvfI@N`a;1Rp32x~p2P%Rph$K+st;EzSE z-6F+NhIGQE5@(BABBj`AVk-nz!B&YktfOvn+sUMp^RmUB6@wjiPD@h4A_Oja#*Ugs z3D+T&Nu!}>wy0@1w6ERMnN0uI#Z+g?axTVJZ=vY7`8LCMW83hZALk4x4VpuJK=;ps zgV-{DM?ddlQjWSQNLvGr%A`NFnb1kULqtuKtqGp1WaBM9_B#T3kc)Lvk~RdS7nF&| z1#z8x12ju_8{Vne5^!Wr0T<<`0xrhg>ciR-$jfdA0GO`SwyD@viqO^AfrT>8VT-q^ z@pPGNs@OucC@AocfFrX8%wKPdv(^OK)au_KJLgY+W7h|PIJ%Ex&FDkFi~KPTY_VhU zx2;NWE1b%tE5JH9YABw?7;ZTq9tc80ccoxH0281?Wzn1P3^288s`SZM4;>#@nKZx6 zR9Q492>SN7;`hfw>m`!jCF!3_`U3g=h5UYB%3LjFcFS)prLy3SP?>nkL}k(CQeIzT zM}`C35tx(7*u4-%RjjgTQvg`3XfsPy32kge-~Nm}UCg+vY^FSiDq;VC3$RSjWZD?O z%0k97!*QQ`x7nJA=P-{GR~KGALIsH&ve-hc6QDhA3gW?$h#sQHgbp#;;k00-y0_84jIziMd;FZ;%phC zX~Y5WfV3!iJ;I3_196o_{RR-sWV)oqMALA=5H7(+->ABqnv!^ra+dG;m~*GkJiDM9 zxKmBjksRXiIGHXbh$fgEU|$f;)bGA&xJ^yN(0DRPTY~y25!~ol2rXlA#8VD6-F`#; zXb2Xp@tZ@2y9+bwEwnV0X=|h zc_C&3Tj2unRp>2@hNPz(cchBD`$}0|X~hAYX8NULD}CTw0UX&ewpNNv%R7(Il=1?H zH&gCNRoUrPv5!#2U2MmC{8o0SszfKkNCZZ18>#mMcBCpCLIo^dZH^W)f;oVral$?n zcWJ%2*N5LhSk3o{a)!3QWX0mdGTFw0Tnsly$J&-6h2;qZa@+#Lw9 zkemF!slFS%bE6GofAM?w7q53G4>bteK|C1*xJvv%*vuAX4;Tb_Jw=Rg8s^|pGnPBW zEjON31_7{SAnKD$dV3u@49{{?bHvtT(Fj7iW8ps2J?B0j+s}b5FM=B-CVn~mZOekl zx@!^_(QIGZbME(R$;%T^f>HmT-tk^;1&!3htCj_sPKT*X!w^4J!Sr*J&Txt)0*SGc z8D&t38j}TTS&&Y5aO+eBO8^Lm;O27IUX+S1S@D32MFkb6wZr`&%`h0Q6$lM1)?Dns zKP(TZT3}wWiSo1=Q1hS*Xc~=zqUgZubTdpfjfOe%y+XaILb%ntgYAj3CM;sh$fs5@ zzpz;VO;E;BnDaA}cnMfX@OEHp0@56WFqg8WzQ=Tp0h)++eQOH@)6rfdj14zSbKq8}4zLHDrywO&MLe~>c)bsIA!fjZ0`PPqym{kr zsk`W>djB@zagX>lumu9ruH<5XH~xb}}*;W%_7|Zx*<$F&>{NSJ z^FUZQw=4{?P6M%5rdDj@9`|}jOE4pLu+3XRxOP1Bhx!+JN_S(b=yj>0KnrEDc#%N( zD5t8_JmEqgMhk*@Ko5U=8u&35FX4%1(ARH^n+IhZM7;dq+`!W=Q3~jQ z!hT&BCyO}>C&HE%7lm65@#Ac5F;xNG2J1l{NP)Yb9TVFtbiS#6Nz0l{V0;ix1eMG5 zL2FVKAWRc1f~(M&N+N7^=%w+N7%4~9(G9b~mYcCbRKWCBhJ#V*P_^{>Y_xYvh7;x} z)kJ8dQ*6SkG*XyIPF3{7VB&Un5{Er-LOBXGU^?_s}<{DbNcRIa^%F*f>POI8f!6O!qax&?#VgQgz|`-X@bvu~bId zJ1Wlf|Io2g8=7+7Bra09cxYM`5Z;`&=CRmeO%b@4UJW>ON1I8tCa%9xzoch0Dc6ec zfwJSURa70*Qm_SEXzv_H70?~ZNw0sBBc~Z=nniLN;hvTVka-3VMt{S>Q|dGYujpes zM2v%;S>?@q=#CDK@fMEKH@o0i`ng#MieexSwf3n3N{SkJP36*oR&-;2(BUH947U^B z=*I+2<>)e2OXa@SYO=b$ncTAl?cQj%WT`%jq0;WqDVFsT`X-r53vlV{G9ix%uwcKnHWDn4Ng1j=}Z-ZLzI# zX?3#*+%x3BGiBi&K^h5fPg}Qb%dPuhSeJuorWy7VrN8ZkhP$@NdD%zj@yxvJ9*k2N zg5h)E_lBf|Wtc^=ce=yvS!NKAg-}Yl9HrmNYoh8r`YY^BQ0ab(BhL77v2P3LesT0e z#wW3*&Sv_e!3^saM}aD!d6{v{Ko(W^sq^S5-NDE3q7;}o1lEP-q!Z!@jX>}U)Cbzx znW01Vk$9Px_-TeXA1)PD@_B~nu`YZt?ZE~Fuac=Erp}}N5G?@eP!15@*JOhK(Osl2 zP|ia73ye^)6rj5CN5cB)vEX)ECwWErnA&W%Vi24y8vomX|GFTM2Q5+0f;CTL9r`5} zU}QVk|E4CBDohCjp`VHi4cn?vYmWpSxMJwPp!UHAmdtS=qjY#b7$0bMfbT(qee#r1 z0n$6P-|58n!IryIYbhuhFY=uP<9qo%ZL zF`P=Ys?7}3R1=1v;n0bLdW$$Z;VO@rUWC*3jv?%Dfgb^}bXnFvPD9=IY z+Ds9Ik3&uvzNSCSlFv^=4$iXC=dDS2vzXqJ&WSSt;`0s|fv&>@0|UsSRaPa?f(}p%)*=EwY4qgDubl{mX;n9L~(ZL&*j|B$Q0O2wnRQqp}j`wTT znDCK^j)EBrV?D}rf)Hy!V>OWo-0A8(+UkkMpE88aUz>}9Ba`XfYIl{@O z84=vkN*BU*NaJ7yiOa{D_!NgJiri2x>>&|hUI<19SLuK0SO|c{bZZOD8M@PekIIt6 zLb69ZfBt-?8}%j{Oyj7VNk0cUiY=t8U+5p?ks{65d0@=mI5(jC*?!OFkS4& z3#>@hd=WJ}xX6~G#Za-p&2VI8h_-=tAwpmlGzdHOXLj*L=yNKHY}^|@COb7e3xQ&; zvA#H!yVuKw#6rifX6;bdr!_-}Xo7Aj3`q> z5?XW*rYoie*>Ul9Ql(iKllhx1TY7VmH~r=8@IkK}2FG)U4X?u7nXY4J3;aHKc(;Jw z$b$1zWiWkGZ^ELPW&(LTjK5Lo+Mt8vw_8n)##8~*ox`wu8)tf{9+Te6VHol`U`49bXDG$(43B+mzVGi&75EYbx{APQFgIiprkN(g z(|sP@j*w&E_d=#jM!gNf^hnt#epU=grGjwmbDg+U4Ru>nk z^U$m+pm#Fi+mmfId4U}3J*z-XqsLQ?(A?o&REZ|EWXdmarW>Wd>m7gScH-f*4z@vw zk7u})SR#jxC)s)p@u5zZx6eV8HcUPrYhGQJjmLp8ovT`=Ep?{Kqjm#tO4i~S?iVe6 zs!q09xg8{adAJiU&;}7TU>cm~p)~G27o|#i155Npph(8{e6~VGXq7v4g&4K^nqXI| z&Znr;i8>SdR0(asET<~zpEd}2QOZy^FCmi`T%`VtP&Wvxk7NgqO6V<^OY!-A%O z-h!2)D(U7~$^0VD2TOLy?8Y&~3DA!>k(^?RA+W1)6aB(uI>%wl_$mFOkIr$7QE~)X zm1vVfRWdyij8nb?FB6BT0L}}l^u=WH2Y&bE6bOtra0C9#^F(Dwst}?u+F?ZD4^EOc zn>KilqcV}iXr9d6?iCV3CyWEC1cqP(%gH`B`7z^wYM^x}Co)mVwBD<|p~X~{v<{!hBaUN>4e@`7AcwJx zB{IT|qb!fFxG@1xa#vZnUfHXJte6cfaF2$ zSC#aD;ds;8`j32KEr6R_JJ{qLuC#6mq2Z9nx5ad=m@y91n?W&XcQvEc#bQ{~eHjit zIok|}RSBH>s*>)-o|?t9B?!}+mbIF;UFaTBw^bIMjtGoTKr9eyV-V2{t1()tlAa63 zv41h2qx3*4WY?7r3CE|c=v+)Db_5S%p25I&;NAy<(}1=$V^p)4?juK4QjLklFg5ns zI9N~bVeqv9`)czhwovdvimOVhm4Zya^jT`xCq9+*i43_&;3!mjqXq6Mhw@i1^Qkl!{%?pl z!W%GeqETAyQRS}~AEtKc{1*hNq>aj7qoPx8LiB zyk6_eFJP>C@)J6aWsViN1x#H~b71+;8{x8pe#f7lVmhmfV|W6**rYcwH0;oI%KbWjXrFxE05czQiKbgzJ=H6-d} zPlM^H*=L(EwMB7Y1$q+o9%@GDtDIwn0Y)D*r?HrxrdH|ktH3-Z!`$Ay$sN?9LMSSx zo0^i)RP>r!ixQ!#FD~7n*NFJcrbqa`s4Hwh$J*=qfCODhoHuF1l*RF*5z3Es@N zW53Uet26SlhfwB4Vk&F{FVcq~HaoOfIW&(PoX^7)goR9)>9eK?(`8Du*8{Unbo?=N zglSh(#N#ndVX)a^tm0J(-KUE_nc=7`x}J<09+^&}Hd7rDb>l zz{Qvzg}ciaBuGfiz3%`+ou=!1WMwHL4HdrB058B?u;|BiaMpe&{bsY_MT4FXahZ_uSIrq>ZAhU4Y1!yq*Ds<=4Z znMw=Dog$rOY{i*IK;{rcX2X#c=LkH;QX9S?RYDz_fL~@f#f+_Wi$nBqI!q8KPWOXA z)MmnjXf4_F&6JqIAx-P(bzraunSaYhZYKFfGW`UP#o=0excPdiX{;h;M(uw`hB#v04*_Q zgzbfRsAF-MKEo08OCi^C7%xm8%!YPI5!GSZkP)ZfLydeFF;-0Fa?ucd7+g!&O3k(O zK@bjY3OY7j*=o{bf-J4dbO2kG(DFt|zBkKU15e0%4JOka8BUQZp)19$Rmt>sOyqeE zLk+>`0COzyGC$?GP4~_=!SX;JT=7(3Ew;_p(*UVLBduhf;aJl-_HM z&^6L?Y~+?O&1uB0na{-=;9G?oq|jmd4WzAv=}YW<0j+s*SqMEIbm)FWA|POBgu~HL z5xg~1O)7M#)}-G==#)4$m`I#qBC2wRDG>-(NUi}m8KIJ{g-6SUMh@-3fKpYGHfreL zv_gk|WKLkpi!zNL!T1+1VoG`@IeR!4L4#Y9Z(540xtcmny6Nh7E383-DB?1sC zI2W{xSbAd~+{nE}a@hn(qBGGe?B@PnY+~Fa<>T;9BN*QmBxn+ct_1_yh>3_Yz1@gd z<0I!M{1Czw>=WwhkQ=WEKb=JvnM~J%82<9@A|Qfg$mlMXxgXE2>t$ceh8{|y-x_&z z!y8%K4#V`o_C36dMJ_qoMO&9bgI1Z0(7W~!&IMW=>Y|xw%c6>iH!1dpd_+G6qB{1c z&>I952kAj}CuF~ z6m-GfnXm^sbv5{*E14Fis_oX*7G*i~3zJ@LNHX1rotzll`7CZ}i>)wios}GHL_aIo zV|81?^aBQtY!Vraxg0q}L_-5&Hd?CXJ2L|Cmhowuz^kqvGio2j3QL8m)kF z1<-G1I2h6Q=v0R;GGVW3A2>TC()1_@!t|i-61XsztqBl!>HM-b6OS!n$6Cg09g5Qi z?cEeN9>(y|EC)S5AdM}~aA--;py3NGS$MFNf6-uMKrO}0M?bjd+SS}oFH3bV@Rh7_lE*fzv z!suDvtaYcPzvB1k4tz7cn&nVsgej^evdq6`Wc)F{4DHX-!A3mEF5-N#9I!!8hu~!Z zb(V@?d2{qi%+W7mj$RXTpg1raz?$`RM-+@#iU$K+XVAD~-L|R->KtcU;QiL+$-rHM z?yMbV-^-yYnXZ<=FGp4B`vps66TC`T4%zEMj;f*!v-B#y8q%wgM1}3G5is3NL8*=f z3Qb4sZza?HLHKoD1&eD1Q2zB+)V~uB6`9H{RYm{e$lgE{PI^^BQ%#))V^|RQ_qD2u z#z|y0HmU&T1c%C!o~gAX$L~1q%l!Hs|3r@H30{b;E&+JM42t`n}(bXnN=f-n^Nx*uWY1 z(^E{}#iIOoNiIfzACuNF{`a)uduJwoU(;Y>aSjxp4a8Lyw4N#<+_+OkZv|w54r<=u zA^ibn{!vZ=YTPRzHei0h=N*|?CZv|;zzOObVXT$37Rm{-g5)O~WPy%=^ovZuzsiIE zWdJK72e|!6<})0R!d@9x-ySt*g1nGiItd3~CP_gVkA)tb-GMmU)EJQWR5I4C@mC%Q<%T*O!5sZgL+$O0KdRHehwsW8$ z;j2ZR>s;q{5%dA9nVvT2k>~`&jo#=z-XG#saH4;`A->TY;x~>u#C4zpD3=LAzEno% z^V9%0MN}0I^q0_Mtsvk78d;G4F|R+5!iDb+?;8T^Iv7PD%nNc{W8m=iHj3{>Rnk@% zWZv-J*f?l-AN1hA8pQBcqWR-xM1~sP>)Me2b^u1m-~sOSAUz-a+5`Nv2*#!mBUK3- z-5uZpu?&`q(yn6qBpAmzh7d#xW4y>~X%FlxRYD6vHKx6qY)2mBzzO~sFM=z7pcd2i zAXc26suG7k7-xj4y3Z=LBVn zt@pY(A*yhpr>vhrGT6Ecb?vJ~2unC^#t;$1TaZz>6fg{zx5=n{hT|z;>0iLDNL7q2 z0N1||BFsKa3uJrDotZ!Z=&&!K>ah6ZxbJ4Tz`tX3kz;wOrpB!#xqes`wHf>PjU8q7O3o2ML z$2c&yRTc8#_R@fs%0T>GpAORdC{;Kn$+oJb?HMS4>udzUfc9N25ckh@;YIF%?KY$^ z)7A_Jx)~@eGUAB6sib9qz_e3(YlUH(wSqs=sEa1ZL(uH7@i6e)Du)rao}Cbm1K@={oJTf@Mvurd>#P*orwBV!O7?3pVfuD029N0>slQ>i>6^9x@X%Z;PK!(@zX+zXJ|T)(6gH*4 zh8aDB6||*UWW{4XuO1S6&Z=*%!xVt~b$7}DZPaJt2pVAyjsox0=6C#G(D8JOFTsafeB-|3_x_)@_|T7|nggE2mq@et5`!(iggaBf z;!7NE@g?Bak#~o;KMAw z#8E811P^KPCHP1dANawu_!3`X@g(B7V_-k8yi8PBZahS!I;K3GO;z$->VhD>bA?6&p*C%5t^en#fFr&lb(?xuB z1&c3%!^CjeA}AlTpB!p03A)7?()_z}DDyAD^mkcKmT4Ptaa#mw zyT6wC_asnY+(13Z{F`^U`Ipcqwg;Ji=lh#X>(BJZO3taOO4@fc^DjY3F^FLPz2}>M z2^}!a>0Z{@Sw7^?aAApS{#|<{^AF0zHUHio()>%%wbHa}{#_0#;IdSB$CtQc@Ugb& zXlsU}5_Fqy{w-{Ys08iN=3l2&K5mlN;Hvb-w`q)szMFg-IaD>+anpeU6!?NjaDYJXFNx#wn ze}~&ev_Xhq0i0K|#2JSbT!;*8FHUlO|1b|XHbYu^08g5Dp;`F6mw=+Gq-XsGe&ia5 zyQRiKBThev!wZpS9J+p?absP^sutsrdt|Mh<`FD_t6U@&jt5y#+!sW2m0tfPyUFTf{`Lqw`XjFf6gMQn=2 zxL*yALKjn85-XK|1kl|Lt-$jIfz;b(0-cSL(bI-Sb2TGshJFEnlTq>nurjs_Dw&+M zs+!J|T@a9CksiJav9zvcT*Fg>phino(-{sHx?DyxvHG3>hOWlN<20;GBH{@#E)scY zAtT>GoNF0Jc^+Wm;8!(M!CLxVQk4J(hDUb`csv`}uBvHGn}-QCCvC)7_hL^KA!_x& zJXe%Jm2`0=x?bg?G19@o5}K0q&i9Tf@R{d5I2FGZ_iPoad4qxbE1)!lu3qAPn1wF? zz{8QoKe#E19rSXBa1Wlksdn#gsbsn<6a4dXgZ4seH*$)962d;@a*rq@EN^p$;GJsp zxf18YRf?_ez&^XnIWWv$6`nxq(3~>@)YFW!Qsm=BRAAf~FL!LXjMF2lUd=o0U@h7Y zFN4QDle<+logh0IY24G->atIVK;9=FrD}YobI>83%rsZGF_4Y^;pJWt^cm?cVWhun zM3>5)SDKry7R=sH$86>%VK6L(!JdP;=}M`wDKFj;Lxn5#!ziDqzR=Xo|)gEHx!&1$CS ze9z`XqHS?gdNtEJ?b$?4nkMl@Q=tT0rH05El#;nn3kP~Fekw4?0Z@{@1D`csd={5A z4iJHltC`*n#<>tqYxvo)^E_jdDxp6~2RjVJ3*bo1)J-@~M>9?MIua2&!=c}rHer|b zI}T&B4?+Cd2*ZY=jFIp0CZ`C8MB3RZgHr!o=G$soh+D?l3Uw@m!RJP7R{I91cp$5p zE=Qm_PAPl7?b|%xwihRJuFn#;!LfFjrooX7OD0aZKIeeHWFWBfQc26@_j`>dZZ&XN zhPk6Hf~LQK=3#oVMfBZDSPYt|hsSiOYJd~@ctICmW#FJZqRZQ$aNVJTuMmZIVMqWB zqEq5)w>5B>=7WHG)6FxVe*zHC0r>W!sz#}gG5m_D6UcPiMYM-#hATMe)6AqC^Ju`Z5s}Kl}i+r^g^==@;v>DGh z$zGD@Mg4GapmJPQ)0NOhgUsj){Fk13$N7Uj7a`b)mN}XkT}{`EE{7TYtZznF(;bqU zZbpy)4L789()tWA z#Us8My{j3D<}zLQ6Spwp#>L25=bF*gOgDLE^jtt-IwbuPGy2mOFwG#odkNIlUepg< zuvb$Y3d%JmVMhN&=P*4v*o^))R7MHY`(BBw2^BF@{#COTgX^I6Q)cwHMEP9-1ZndC zGy0e~+@9Z(P=Vo27|P{{Uep_<{u{GXUet{q61^~c5yoCgOQck?$%H}z$g(3D(%8H2 zW$d#)f{|ef0qGFJh0UatYt=ic`(u}%YO?9_ zU|t7Q7)R$xRH4P~*a(D5t<~xR)DqU_~-@q^vg$=EFuF z4#6NQA*yu)cX%Dn`Dv={zZ-eHNRFGs-m`4);9krtGnO_6@>DKuJl0WTnR;qWb`L_^ zMo1HIPO9u%ut?>lI$p^6g*KQc41{sw%EHZdaa;rpcA!SHtWXYq;((OC^%SyME?&Z!8_cmaM$EayQC`z=e5C zpSGH6EL|3KR4!o=lgIRBi;3(lR3v=QWQ&cn z_HtAP#*L_}?=x&onTm-#& z&$gN>7k5jgVYnW81_zh#2*%Y|Si`K3Hp5=BMF8~NMlEtZB5wybB2dYqWw1w(3%2P& z7r9@T_J)1jFH#7^v-}LI_<3b{hgtKHE&a*tVpXFm>a`2h5ywCvLoX#c=ds z7PE!BdNZ_73D418CUP>C>C<2wkJbI5)#MnyKSp$HgUMkopj=0tOC2&op9CEgTa0Sx zn_CpSbn0BX3duU^L-uEqz`+Zu4#1$zZj>HVN%1Fit@;O+!n@ge6^!=9}4 z{xU_7%gI$X`t`eF#yvBPt0^oM!VS+r=1{;XWV;kmR|viYx7hS?vq_he6As%T!wymC zW0_VMLWVcNdvui%$31~IwU|KeeIzp6eqeibuDI>S;=8~>FfqyqAm9vO*UL~~ASOX3 zFe(-sCxACC5kD}k@mu+Z$HnrxxPH9XMS24>KX*#>6ZXgO8o|UEBHSUv7O$QUqnz_6 zaQql-+3er!Sk*fw2{mnn9T!$sj@fRgwY>=(PG8_k73m%=Zc5TFJetM%t8piU=oV-PQJRRKD(s-wTO+vH zo^h_NFl^J!%_hAjb1LDUz$u_d!K>L)#owm&d zxG|G){vKd#+Sz2%QbfXIBN+qGA+*Ng37Y#GYjFw|zv?5nvU~(2m9iWf?J$kkFbdf! z#l(f$IN}MCchG^>h!Eoy_ur)mWx~PyS*C5qcs_HK%G6aO={0@9C{loT%H&P{KYT>m_F20LtljcF`E`)I6E>N zTG|$2nq*QWwHyCipB)~~z_INT`jf;njAdHWg1boQt_&v(D;$dtbQm&%TmD9Ar5XEg z7s5H&ct?&GGQAM&Qn`4|QjMjTTTIbr>Ks}hj5DoljmVY$p_r^nEsrk)|C0jKEf0U# zMR0E6G>7gCG$Gm#ht*iovggo2h$ht{e%j)Y$(D!I3LhHNrA8jxxCdU&u=e6PM+a*h z2JO))Fk(!N1^=mYnBIh%!}zdeoOBSH0pm1F)blj_?a1h7Ii5uJ{w{_3pN%~Ie3`{X zlm*CTU~yG~EuwRvG{p$cbksRC+k{bqa~&v`uf`H)w{sW)I1mzaHk1dZWlx$FVysHJU{xv|t9}Vwro4W(yy?H@!W6bQkf=y3JaZW*TfNEd9Hs@W z5tU1qq)m3`FzvxK!nQiO0J8|D#dClrCcGD0x(CjF=SaYao|k_RSLY!36hgL^X>!ti z!8t_lw3;Y+tsI6z{uOZfFnttU3yp89vGn&K#w8!l<~mF|7Rytre`zt*IkeeuWZH@g zmjS?qraG5C0uu{r=iq=YAS3j<#grKM5ZnppGWDPoO1x-v;d`ZkeAbAs7KPo5PsVLT z6kLl?7Q@L`=i=aR0V=&>VD7uACCP<0zUA#UgzxqXf*};-!@)mi#8;y+7y7e?vsRr; zt6I!_0J&9``50SRcrkS{Tt=GES`2z{%pN=i7F|fyVo!OjIBH^QaCiHI%c!5r^mHJe zHo&jT0Cxvd*33Cf&w~1x(?YbeHHnnBL_^W5GV*k%v6fzINgEb8zk`VL5&4vXIna!O z=_DsK5(I}A@?7cysWAqCxez+arIh%RL66UIkPx|-k_^UYE|~bjd}Qy#CvI4Gwil># z5z`@qa2Yu?WdIEVF^>kc+&^2nxjBLe5pXTUsw_=`)%fMJXc- z`(ngmilteRPL)g7gKKe?9!g0vp~9&#;#p=nr9KkxW`ijXq{X3d$|Bh4x0Ov@oX76%P{l>KMO&;K z93ekPHt^I~{XtI}4i~WXDviXc9L50*3nzS3EQh zc%_Xi_$;`^zTt3)M)b2qvyvB0WSW5~t}x7nc*hqPsZfpStDrKUI2&=IYY~Zn!UAoK zusC3``urTG1n{_2>Bnb7c!gFgl!KZZE|K{W8Y!3ho&$81Dqe+%ETzLEqp7-CRaI6;MSq zl|9enf;nEbv*`uB)M6`yV|C!cS2+rY>;u`jK;mqsCuiXDxhJxrGS8;_X2{JYxH-aG z-Hw^;B5^jo2x#2SxNqaXOnry)+2p{4#kOZ2)4o6#%WYMiZMXs~)4Rd^Y$}jPs=d{8 z3g)G<`s$RWQ72pT$k{9oJ^+I21&*trgKGYp;dn6Y zb!?fdv)LF$x3(dsHgp_Y>H-eY%P_nErCV&BkFXHM=M{j?u^8jJygCU8ry0@*|1zM( zl|Hfufvk8!&@26j7%oryPTUnp^ugxn1RDdvSYH>bT)Ne8#}<(Q)Mj>3TSROK{wHY>3*7qkipp$;mbK z0tp{;d7WO4Gw0C)+1&$0;mpP8O;C9-)R8tf=-4rphkygkkGld6H79wVRFoozq?$2W z);csZ;*IJquel58nLu844;1g)m#TXPf<+Tn=T|g%}a4M+Ns0?7?V;q20T%A^+E@1sUVVlGltJ4U#qX78N zQ3uzvd<|4Y@?7o1TWze;col3tJTYO?B!D^{dc|alm_;fNPnU62;Wn1FZGAS{yC{O( zQJ`lO%DRK$)f>|V;pcXV6u_&XKQWoYaa_KL6)D=plq62AcDBfL5cvmL#+5%z>!EkJ zT|O*Yk3+2w%T5D566iV%3T6|~mmX+?{R#^OWYxQ`0Dq#xRF0FM(ADZR?7r&9H3krt z8Zp{gslld)TO+vXo^{!l8Kub1fu&>Xt@UL&q9a8EbO!VAJ@LH$Mx zJ-N=A={7K2u3uinQSRp`JZAb{-BQA`m1b?SMa#6q9;Mk4yyYP|9K&@*qDxy$Zl^ZW z$kX%Ys98SbVyrGJr--9!IMb3DoA5qkY#ty?Fx-i$H&yd-J=tLrmm59R za5@Ovm8qW`H5^v~KuOA6Qoy*$P}WD74Dp}`C)uKwBrfKbTe~F9IBP$=fJOKVOo+}} zG%Mo061}+5MZ7kfzMlsra+A@8Tc6$#l4ELHVL+nlFgZNf0xjEPt6GFg*HNkI&Do=7 zr{MfOAb|cB6hJq?(&k>3M>}MWlq;lGwDzeweGO~7s-+(~9-Lku4jlkFfPmI7wG2}o z)$YZZOTE7aoOy=pe;?oEVL*$(J*tlGZi6$r9q7Ika3sN0we(`3%j1aNRHZ9Wi5H5~ z8KP?0{xw#knqAO!bZ%ZYJW&%dz2nR}R=tbn!KL*pQR^}VUgUuv)8bYffs4a?dgX>< z3?MG({(_?&*uKMc#7qr+9A(OMIQsvi?N7ktDzC$TTr=m@(X|Y=ga-%}w5BCZ(lo8f zwRNwgn+8J5m$o6HZTfA}0nZpFX>b!Ti@ZxRjBUyG0A}C8?2GY&ZT8LVJ2)7y4F*iu zce5F=0sWuPxyuMbmhb<0emsxN+yGEOufKcW^}Odj@7dotQ(yidw7T(O0mgYyBp5>t zWO>33wre1dqVt$Zx7@(zN%KYxs&2fQN3S2m(z%vv$tlq-cC~)?W0xweF zf9eJPf&!-uDewjb%Jl+&O@ZTv6nKvUKdTq`4h7~8Dewse{=HscECslHgOy;KvwD2R z&i z6j?T;$T};saY&JiD02CbBF|b8G|=gEOeKB6kRmTxkw=EKay6}>14*a+rWHY+Nn5#| zA}0@N<$WtcMy<5SZ4{{uDYDgy+%Tl0dniIUV%pI$IY75!ND(9@^B+lz9A`x?9a3Zi zt-RM;hwdp>DlC^TS6**%_5z>yJD#?mmW<_d4ir`Kl>xXo-)QZd*Qe-P* z`OT0b*I1Fyabq=B1gU}3!h`Plj((k@+iLhYn~NRdG+ zvT8^x57Nr4Aw}lqS@ahw&obV!j66nSq*kyEV5`9q3uyOz8$q{!J; z6&}DC+d#bm4lfv7521F}uISMi59=*dCbDYY|V(MWw`ix|DBjjvY09TM*x&3>D%Fhum?lReU1UKE@ z)VD31Cwn_Q-=Hx1j>y?HtjO$Djv1uo9ye*%Z4PkMv(7epT z!IVM&J`BQ+)=owqEPPT&-NzIO%T5Zra|| z>${1u^uiRMY#<~2I+fPQjNXU%1UsX@m%m3AVHD@p+k4kWQKt8&?XAHdm3mEKFVH=E zaZBTUKxen}%Rf~~3W$A3afJwAaY)(71uCpQJ(;OYMn^E*KQEHlrzx_qFCwPF&QQsU zPeL9WUMrOl)efdTbe1r@+}m?rE@Em7uu0`|Q$m*92&T^38vp}chFv7q=;1r^9qU*s z=GBJZ9r8UFQyOL!zOaD5f(!OwO`BkiM`(Tz>D{KKU1OI&K~kTVS?=lM%4{dWH#VuANhV78Gl7{f4?`%HB-Lgo4#sX`v>1&x>FNQ-nY z5}_Lre^I>GfJLlUSw>>u5f%VNEBK6!P`t!=T2CXGO6_S&{4_6qLdP*e&3}Sn#^0Q~mYUc$)}h>Ev16pN2G(R*K5`>GIjE|Lz=3)P%fDAu);84G zK&XUS9qamx9Pip=l^%zry*)cu>134oJ-0H~9c%RavtqKj^1I5f!B9wTe%DXax8K~x zRRCgAC>faL-Ck}gYG+S+EuaOKmLdON%Ay>H(569x%4l;+@x8R(fWRj0|@7&0`XpHfgj0tll&)`4<}%nW$$tfjJM=RJ-EQ@ z^7KQ$wWC!Ooeb@ul)~?IY0~A7{{`*W)8T=so@C)=S%)v!)t6W(>xbs@^z%p~_x)-lrVWk8NW}*xHhXAA zj>>f6qc2aI94U8j)Q~8Vn<-G^_S?USF9c)NGHK-!)kMn`Sxr;g=sGRs6Gxy)^>49v z^^k9C>fg>bH{1Dk<*z8fjWZT}}o3B8do`T3@=x9UWp!HcfD`@;9&!?cpR2ezQ(Yn!wb4tF#g1C)Rz9}eCXFSK0L(Q=2_O; zRW<-`fO2cmxvAA$+GncN-!#NbB+*nORj%su<<`Dz9b2x-!0;hpz|zpBa_x5`3UAoI z=-TAc??%p(r~cLF%cWx@=c#P?SDV+i9FvUiHC;!I=Nlq7Q7u!hT`)OPek(OsAe4=% zt4VrxFH({7&P|k;X2Mf&ZjY2rQj@9GOb=Zj+X`n}uLOvXgMFp1_u_f8%JZS|1(gkU z)y_zj%N%Mh!vGVWP>CcedPH}te+<@8wG>KItF9p1daCgUWVb-2XL0J{eZbNTN)L1Q zk=sYQs~Uv#G{W-49|0DQv?T3EV0<1aBY5y+O3{s!?f8umow1S;exx+kSgt9HXk`(Le2`&V2$NIZL$Hl%N0_i{#8l+k@C2UvIE27S^*%e8}lBJY1Nbtj=mJ|iDw`?|0dN7oTmr_^WB1+ z%0tFWE@Rp^H%6xGkD<=cueOgY@t}hvJybneFg;nhSOcvxI34}7Qp2|Cw8y zC$0jQZl<;_c88p6ebeO2jZp=lb=v7Ar}kCpaxnXTOk>1tv0sao?31p~K=)x{oTm2@ z41m`%J3a6=)r-BJ6+_b>bdI%kS`PY0D)-MY%AsNSO;A zQBO2ksTM3z@y9)gRr*RYwOAoj>!v|M=O3j|Dhs8?z9p6L zPAZr6BuCXV_+XVZ=wyzU*c?ZyJl$jiWiNRxY!#N9Kd(h&wF2oaJ>F1;mivhS@+7y4 zgD`F9h9+Yp?wM+&_U8EM&iLupCa5A!EN~O$q^X>c-OTkf`!F!zCd#AsHa<7E*=vj{ zLF7isozs1J%`B`_naU`9SAeKjb_ETGI5(DRf{Y9VT4I7f1k+&iPFa=mR}d2mLNgX9_zkSCNU*go?A{4rZEZ*SITOm3||GWtrTm{^~Qre3h5n=e_ z;OBW7Jnfr@5I1vprUp(MNbD5*5AlA|*Uyt-a_%dj}uD^hR$fCk?9 zu)}$>079#=Cm3M8wb6imJ9lvLOim|Hu8GOTgG~`m;w4+3#VHZ|D6TRPSCK7^#<+jV z$W&&NTGki?7(!1r!KbQRH z&)*J0JK%iW23>(RY}-82jLdubPXr*fYb^LYce8Cjc_Sz<)|R%_c9 zKxJUN8cKpIj!v3cKO7o;u$w3!9hD8?jO}=d0{ohKT{+PPCZn)?Y^oPtX0Jm4!X0L3 z52wrM+KOxyu-#!+^B%gftElsM}ssDiEPOT3ZukE(Jx*+`YQwnKk$dVT1h*w8z4 zoCbE?Fx&ziBC3~IqBT}FS>BJgtGS6PHG2mwRGGUyUSPksdJHA2F2`GL<8W+=YfKaB`115FD_<1)nQ+k~kvfP`@2&$GRIARt8S|4Ui!_ z2Yg}*CL>p=9A1^a;(=T-&9W@hKTw>=gPB%bOX5YDvTtKD<}P^#HK^QU>-ht~--UVW z)81_yP6heAp~kT@r?1G+`6Kp#?FxYjGFiC%OxEK2w1_gRkX**l68)!IKO6|-BO&6++JeW%R*(qM1y+XjpRSCH>TwD(Vb zSeBkDRKv`Bd&ENHrg}qH(GXS}%N0YNmrQ#{kVL^!&~yp8Lt#C}%Oc;dpx~Sq z^Q<6Th}T-XjE+<$_%T6-(qp9KUCHNWXu~mP0aQw^%afCHgHrO9UN)O#*`;z;kIx`q zN;JJ3?p-RU^l+X9@?XV#;)ONo`E1>0=dl%As&~A5V0>&;n8!jo{DH49sjdq%zblX% z5aglZlX3{c1(m({e0xI#Wt^w@q{2nnc(G)5$)X%p(TK`Vtm=iiN@|@R{o8CXSLIP? zx`O;ijP9Obx6)2CP8^u>n2YKaZlr=7S#<@*$$I9$C2JbCGN@%B1Uh4rOtD(CN6LIU z9<|`reCO^FSHOOij_jUvQZ@VjevB^H_cF!%Y#JDNl4(4UtAx^Rn<4}5nitafs9Ycg z4dq~8{yZlA#_An1R=yq40$3p5i_92ZP;`pSz>{|y27#o+K`#88PokwKy_mKwH%g(o ze?hzaADQDmU2Se#lt4zadg{n8F1a;n6;XsGnT{-{F$$%I_vG z<+mDtVyvxlj~Jhe@lxb>lUMWT2t&Es-v4L(-jjFogPh>DL)cFr-Cli%iHAk0eIVi|MI5L`;uZ(lhRE{{+6nQ&>O zz2XI)NhP z-lFox3^r1Jmn{?E74o}q-zvXg?a(CJpZs$s&m8btHn|UC$_tCW3Uc9Ly^{Z}mNkw5 z4-QNZtraDnMv3kZ#Kj{f5&L-$E@J&EO#9 z)(FK@!7He-qd@OA!W?2KmbmH$1HdK;hBxu*N^!WKCYx}}?GVuK-Ss>zbAt?-yIWJ{7m~$+f?8Nup zYAw_defDFP{GPEgFS!=oS7=cvMZ3Qr1}QKC%v|g~2rJwnQ_yyosD@Dl5FTAk9gJtan>DeBCSZhBs^&b>?YkDK#aj|~ zZMD6H-)fTu?TAC4|0_&`4H7V53peS~d2*2T{MQlIv7g!R(UCNA@BceJ3Af%Ni%_!w zw{3n6d`g7A>JN)5+ zwn=4V#qAi%=%}GAxoAemnJ!>n*w#IX)k;(gInsQy3GRYgKZ0(K9L3 z*$$!2DUj*g$aAH;il0(}MIUC+ zJCUOV6UclG9yf22U;DFFmgbDXTsX7n3f!DfA|Z`yvFuY{(R(S+=61_IK1~#*uOJNAnVlh}-Gi#j{FV)Mrnk}%r z+EBr|8K_)g;X)VMF&n$pXTd}*D!1E&ZjUE)Yd#_!g4nfa8pzR>VFkaUJ&2D^2+#tX z$(4WFOw@d6>_W+{b0I@9w#Oyx=h-KDii^^||fvW(PKV|{p{Oj}O$C*vAVOzFgE^)CmS?5i;bVhRCq-cl3uXL}kN} z?7l@!cQ|hbV$CsP#9>P=a&2-h4YSiYapa{LZ~(9)>>#_|M8_jN^$yvbxYQfXI4wrR z*K(0^6SZ}N?#Uf0wHX|~^#GX`mCvW4NrcjZ&ix%IEuWvxB8o#PXJX7@x5`SagZ zL;fW@SwhW|nQdyw#}@^*$cN0#waMnc=R99{Kv5c_c2|&9Jqf}jB;L{wz#Pa$ zbpX5>H*ADrGge_+y;B*mwf?zAg^=XaAnF;@ks@FbS?r=8uU&7PcI^7Wv@E zycVw_hSnSY{{KH;-uf1#asEvn9KXJ;ojOfh{vtXDn^4jT9f~%ra?lR z@)@vhz~H~!waJ4bY)c`(1X4o_Bm(h!F1IP zN(6Vbyg1!w7-dr7=|Jd4%LPrwe|hnw`?rC`HkKa0tX=JHG?}Sg zi@b`jsC8O)qao$#pr7ZZ8?Bz*U;>a^ltfI3O*LH{9=t3LSo@7Nr1vPB2okd(A`}!eF5(DRtf0il7zD)5uF;gUZALG~9di-_BU)JPE z^dpq-XzvI+Xmn;#1UNRJkAZ7J<+dpp)a4tj_9>q6{$tGW#I<$!>qjb=S^al0IdTzGBt@UsOQ)K(`VbpA z=cS?06R`johFyTPf?x7cRz+GWUCNz3YT_@);fa`>ji7$ukD>Qiy*76Mdo_Rn2NGTG>5!^=_KXXzO+W;I&CWQHGYi+c&;FynMsCo zcwpFINRpwTgDGvBQUzVFX{u?kO8R`cr-9Z=wOBx)M(%Q`NqorwlVq0@uSG z!Y&FK?Yb$f>m^(4sI%*Kr((g ztf(k@Aq++UZM|;H!1f?uYcCTAjr8UsSv6%bpgYxL&(*c)#w&B1FlwJ=8v0{d9w=chYKJhB%^*o3vU*h3 z=UdH%=4Cb4DjOlFa-~MDRqn?=js=hb-_$s0Dxp@n8%9s%c9MFVfNE%e7WhmUc>MJN z$Q0@rl9Yk;+{iR@E%6Jtm|?F)WyLUZPMMt#;7ow+8Wvg3VsfZUb4_5=eaNo{@~f&0 zj}UHTH^>UpWet~^%6!x+6PkD63u@~D67#mo6O2ve%BD!?vt(m6SRsG4iU?PkMsCFC zrWP5>qNWJ6m^T@960sY`NAu;~VHJF+;yFmgHej@{wC_8iNT}UP_u@|u1?D!9A79Xe;=U&_~JPCAgd4Q^RXrW zte8(7+rO3pjaP6}kUS+I?aDj{l<1PT+D$fp29zy*hjy@Ipat0l8pgAVre{|Kg%FPZw{w=Mk zFa*v26HGxrJK6#;%C-^~Zyp?&|Hs$}x4A7_4zmgajLW%kd2!!j9Oe_P@cJeqnU+tj zhcdOO+-u#i%{*2QV_mDtE0fnEVsbx;Ymo)pRa~p)%kpXWHdi2PYJ42l%-drb{+Be?Ggf)M`F) z-CeYMQoCE;$YY61NMRxNhwCOCoV;SX?HeZhu3PRM22!X;-iVv*&Exqu#%chbGGu$Bd6!JylPh%T-hs8E4V0M0GHnwLLyh zOVB8(JQhDKjh{#i->nwDRZv2?cv>ERBMW@Dk_Db`kHqy>#NQr{pH}iD%lnw$nudt8 zyQI=IIIc^B#mVmMQgc<5qkP#evWT(6idr)9Yp#~$aG#se%{7U`&FBGUaI=)qF~%}; zGkk~6R2IfvZ$__Kas_#}x5zM0$kpUJiR9s#5Oa3G;juU#m^jY=2!Jk8_M}ABS~6yk z6ik8UkI6}XtE}j&=J$(1KI!Wj$X`V1tMeGn!$4Qg?DbJb(%7{*3)@*b(_ptwSkG8* z*G-_H0q|$#1Oz!s+-?fd*gNHVI^^YjjG7@_*K1wz zEQk3TnD~1*Y(4km@5WrcIPI5L?o{IRc8Fw$D9L19A-!yz!cK4?QaLtm@A!O$(`aYv z3#$8JktI2Kzt;zJrnl}UVZJNKW)?v<=OVeK9z1-&H!^^&arpU@hFZ?g*JOQ<58KT# zj%-&@dDA4?Zd4D}-*8+73W}LEUhT!OibWGi&9uHTt#DCX;m>OE`VZDVQ7jE(Zpi`Gd-e7jZNMoXdjX;?>ppmNy^6LCVI?EO2L)xwKNn_+j%9)Lk>n23Q73`YS5@Ly6<4u{zoSCu$^8-x_ z!#$#R|M5{nc5D9Yvbu4r?2JSR9u`y{p1#<1%XNeUC@L_zxSj^J%N1m; z_1`U*H*RzVt_E=3o?PA-X_w^8!(&L;2)PL?meJw}Cu5$pM@uZ#QbBq7(hMIv!u&qq z^d&n&x5~#3^UVAh#XodW*becJTLF_vvvqfh6gN3G>Q>0%AJyM?t89e2sF`I~EtAP>Y8>V(D`-_VH9?n{~I2?of8_p>pkXOdr3C5K9^> z+D-w$)va<(Vh+Mav8S|-gOqbuSvegdu{4Sp``hjV_O}FB@ z(-kPmacT=2>pu$W$(vK5tRHEXDQ!}i4eO&}#!{DTs%XvK@i~=CxLS%HH!6`5 z0Vh(*&9`)9l`m-?T6utksE34I#P50>QRYjTaPgb6TFr8Eb77tE}lJR%Q z6}f^2=Bx5q10rUJ$^c4jU~VZ)d2?)El{nvRX^G?diX0_K|9ChPR3P3ex07+~C2E{B zb1_O)Y!of7fYcwqU(x4}a|MgBw{k1`d?|CBy_>duLZ6>{bnf;2Y?#mH4R3=kuh^v% zh`qw)3j|hAyj8pqa~VU?g?a*gA$gUMyJE>Hdt;~h&@x>~YUE6DJbLe}<8uW{HBZ~! zMCnhxa{!V=3bPWrHUzYi_PY+*KEgy%_b^>vZ)fR{cDT8H7wPt0hn$Hq8(3f5TXY@d z4dda$UY|ZTp28EgzGa%T)Y-W_F}r1jWz|$ z^%vO@X>Z)0seBi4O77}eta4L6avkbPW~{x~3{?HJG8orVd4Yy>f}3apV>~i>87n8P zZR!DD+*UGCUYVJiqdQbykqSCljDn6$;vysOuWpV(HYpd$L%ZVw+PKl$h_UANtPPb*T%;>l zI6LDfl32FF9G;d4B{vaYCE1-5A4y%d;~W({Jxh230ne*B=#&&mr9&j2q^bROWIs8` zk>fPbB^+y;Y{vnZ<9 zGAAAF=6aE9C<4n6pq6kuVOL{>G7kB8r`QM$Fi)CURZ>*Ao#bD@nUiMvJYs%CU~NZr zHx5y7?9-&{2H`QxfHx2o3|9zJKTw&I%A_5zS@E0L;rw_hr;~DO~;8SI#kXR z_;OS8E$dWsPkh;i8IzbzCg`Es>vBiNm*GLWPRrxu+~LV88ML$eNJZdvN0BlV6Lp8Y z*BF73Mu9tMAioQtW%*sU5NUhD^lA!SVfhljkeC>u!Hk@ zm}M!5kwu2b4@cRT?N_NB=_@`QfqF@PY$;_vOAQBP!`aGk05L}u=w{|S4^Q<+jRbY5 ztZ)^QP(3_@z4EM!koynwx#wPrSS;l)YbqGi*dzh5_W@?~QIY)0H`GKy&Vs5}c30)( z<7qTBPa__-Fgtn~0D@q>yDF!$Wg2T$(@1?veMA+N6Voy_zd)I30K0DXC+#3H7Pa4; zw#{|ODM@KTPRVnfwsHX2PjW>usWWGg0;WUdZC691&;5rBZK7|P77U77)-IXu3&|(U zrFNo^CN|JO{$(+q()b-PH>L>uJ^OWF>SnO{-!o{R?ZKqDf?PG#cRR-ML@HtOT*IL2AdKA=WbvO~;bjHb<~M<5E8$2Rev*yiQbs|Z|C>$j?ohdl zt;&wMZ7N{D9Vt#8na(n;q)u8o>UQ>``H~BVCBUIKrlDPfeV_j2!<;E z?OTjept3Soli^Vp>xT}{;~%-Iw}@mAs9Z|(@(d>J#>nj`uiNuUP5l0BDq~*2>E;4N z@SV514tczZeJ&$vZbw;XC2Wm;-x6J7#X+PURbHD)Y9F*vJIWRU%9#3@)&Yz9cEg|s zu0uY94VNRc8>w3UD_fseQ?SZi4MefY!@Do0nx zF_$qh*E;EE*<4NP58As2zp|rStfL#PqkBEuKB-P(b-k1G zW4SsoQRXY*h484du>obaaj^0zO<$~Pmsyq_=YGCFi%%494oX3brlHirf%ZZ77xxjEXhgmA0D)avhR zYSMvOQ_nOPOlS&Rqsr25AL7U)SI| z;+b*9mz$$5D0fiz5sNKOhZQZ(#dudcF!C)iK9mni#&@*bMZ64)KB}csV!SAG5dR9JTiuUl()g^SSJIBWel8dxx`s1M@ZDqH z2g_6+x2wZBIV`dm9hi;47+&+wW9f)9=vk~K6741;$D&f!%>dG^&eOSJhY|KrJMhTF z1qdb8*FV-^teQih^`48yb{u4(#5B#!;{S8~qspuV2+~7x#HvlTUHfH5#;>$Y$a=n- zo`GbS2FppBj4NXTE|_;b{1mINAz|>e_DgR@)EW*>+VN#$L!r5U9;+{hRJ9aa+5!b* zWhVI3uHh3MI>G%Arz+C(d9oY2#UEO{V*KLUm5xrbvm$yVODf-pKZ{dosbqsCTFopnhcH!wlsi#R`0B|&ZQ~W` zcJN(80b=T$V-5QYnkY$p9A!b8{Irjxw`wqEgP3(73GZ6-^Q^y3U=iGZpi)7VI~C20 zpCsJ{k4ojT<9ZLDx3}k3xgVm}H?VO0DSKnA`=PAvEjnLrvlZrQmep~M)wxw#V&=D* zLDW|QO6S>qC@XraJYSc?q!-9hnWA&^FS7B?0|``iuBjZ#k>EY$CdwHWFV$@$`Y2bk zGopkp!t_MC&iNK@0y~S6V2f!VC@z-^YUMAe!l0TaqXvqr_7f<3(k7&t`d3?bh!(z_ zlCK%#JD%c(jLW?7ME-}%H5!K*{oqW?xBQpcG#+3Y2`&?D7^v+WU7~?vNW#EX-{p%A z%_=^fRP0i@wihMc*JE^$q7TdVAfq+x;F1}+FISOOy}mq{gL|}WO1P>>z6R^J;LF$L z`YIpWdcn4MF@=IQVDe&e{6^s3(fZ7POLo|5%+EEXmeOFJ$Z1I^v& zixz08o?TG?hqGD9HTjBJspV=?blOHW2Servuy9F?5Q)Gtn$lXFI&O5y28#b+nF;BRf%S4-SWFkf z@o<#?&X?sl3aUJ5T|E*%TpfG#QSA|&-9mY@p+Yu)N7iZ=`*8U~;V7@iVmP=rSMDv#ndAbtLLX~w}?jagvAi~5S@K<0sG2t(cQT{Wqm`%{AQoo zE^>Ryg-7A1r_x)6l~ImCCL?#S{~?duZC(qpF3hs9na6Uh`W1N=NIiznafa|88vUX3 zR(a8|KK6q1)pTQlDd)DSY>!}PwWy7V^+VE2&PWcU4{%2al$+Wx$`IUOcz8vA(6!1+ zYj{CQaPBvisTZr@=PRxvfzbhwaXn5Vbf2VbH*&pYK4v48%`>Y;`8>Hu207TCoNhbr zoLF47>Bs-#?e{~KCrO1zYgaUKTCxj&h))6uXnd9H>@6m{)>v;~gMM=wQ7l|68T&|M zF(mk^)o#P~RW7h#kXCu0Zmr7k)2RYLy_mkGx63j7UA7>0FPj;k?)ly2F@Z-}z)`Jo zUOJfP8*3dJ%#j}z50WE_a&Xn69w6FB;BOv40h3guSnxs6vpMJG-W*7Ar~QTp$akAH zO(y$pUwOTUt$V5wUEq7MVeHc>#@eIuycEWGT&0e%UxBZu<}2Kz_uWV??<+EZ&k)=J z$4(n><r1{Ozw$Ls;FVwk!Y3%wm#O&{&CE{2(@^u7 z*{>B3ILvLGF$~^mfMTE7S9h}YRi16&Fh>7c3TLO{)tH{7xmKBnZ*-FC*0T)G=3ZP1 z%W`DqG{|5 z9T3Cv@Y@0;_Eb52M#4b6?(FzGbw(Z2VIBFC6w}{`%bYT#3>45;d5xSS8Vq5W#~ho% zYYXriP`h;S^y%oeewPzk(};C?1ujQwS5EqJnybjpl@8^WFiVsV%Y%~<5K%d)5soLe z1^#i4=Yf0;)AECMWS-|L#8jyKS^84t-?97qD!*~&eX*2+Dv!CEY!4Q9aP7QoA9*cf zlXm3aA%w5Q#m_MB8(-xWJBv6i3II20^i6v^n+d4AI}N7scR{e#Krp}wBp)|M%-QWB zcclw?v(5JtTk}6UUnQ>t!QhEHXwB?wHEwDu$bg;VUlN_(Xtd*;T+Rh~)4b|@l~Wp{ zE&%=8^u>8L4ibiPB+FYaf?trvh!9VL3r$Zm55>nJt{~5*^)7CVQiJ=#Imu`uc@}|Q z=UWU=nF|WQe{;R$8&(n@aD0Ez(t^w2=Kw!Y9{A!aGNZ`9Q;Ry5sIy_H;R2)) zxJrJ_GYgv8RYu1epO*e?I2Ry7L*X>gC^Sw;@--UDMPp@HjcCjGYCTTbf%t3=Jn301 z`3Oc)`l^zT=62Z$Ya_(#cKJM+T(wbZur!*W+#VE&tIg4VZgx)Wl$!^#am1G@%+vM| zMNOCKyBO0vf~&ehZI7?WoXt6uhZCW3`0v3Xnx8fEvi3e?UdXJJ3$?^hwS$KV9kd&2 z{D$8X$TVjmef?UpzvY~Hp)1H!CJ=C0_2S%Mhx|Ot^53!`>*}mT%C(6jjFw?`fah50 zNr9ju9F669a&$E_!fvWJlF8Ve=AM^%Ozc(5`dO3q^Q9t->P4QS$UH5%LscF$&Not0 zP{4;l_aXZ?r3!^e9*>j8gusc+iXYl1bOn*h>nIEU7oG_i5#FF(ZlYavYc2$lyl4wS zR_E7#r{Z*9NX(7%lm>W^$aK!>7aH)aJqM{Rj+_Ibq}T7zLwqHEj2meWwOjiL-26RG zvk^|S%ko>>J1i&5L0Hhg7Nhp+<1=`@4=}XfmIE%hoWXtc30a|&gd=mlj$@L`XQw-4 zR=vbIUtMBTy~HJyaED5@2f_OHy87CvKW5Y*2lPUEv-A{;7G^_QMswypz&QadYe_XR0^?kNjE{JR|*Gz9Aov~u!`(aagn^-?YoKG!fWMq62R@C8^meuSr3JbXG0(_s6QtwZ?W>NVWyEVtldVj%~y)3(6XJt+s8(ljoMdP=onpIAf0zKy~h168P|xLs2t{_q4n@s^o&vb{r}pOQDBvHy!)YC&-PZi7lBUkq6u`l{IX6i z&&ax)O?HO(%)Q(sx>mct1Nl@gpSjrWqol)$@9lpizIo#6_~r=|OOMz={v}?5Oibpc zein*3m5Xwb+eh9Z4o1%JMFp``Dw2b>>Pd7-a3=Dk@fNKrSDN-|fl5 z&6CGv73cBMD0%L;vholanP5E}JpQ}W*u>qo?iXrg#sPCLfzEWgg88Ad^E_E3tLXni znvr{iuur#-oM@V{7*cBmJaYxPab^+F+$~(nI{nsToLq#1VjuIpa=_VVeU|hl zyq+@;`gj@7GDh#!>6ZNRbcty9(_G5%U7W7MMq7mqCK3OURe%pLh0(0M-9aMnnLGh*zZ56m3FOiM`OkLaw7;XcbjlA0H1iRy?CT? zkdBG$3FT)HY&K6xyA;bTTOrW(TCyCqJjqPIqYG!0nPz+;cDk`5dql>b2Nq2+I1TXs zE{eZsP(07N{jIUfFdIwUL|JPHz;d*zyw4>QD(k1CjB8aQLtH_Q`%|Dw@%!?i)Ctxi zC?!=wAC)WCpjyl(7#9+%7(XsY+Nk`O3Oz1(b{(T+ltKeLzzT-bMb*|;$p#h(o>b`)#_aBmu^3e zoGUNN)_7$Tl$vhyyNRGFk||kmz~*|n>nW%GEarllYhB@s@&Ukjr7_a6x4=rhaw~t|YxywDyZ`D6GpUj};;;h4m&GmtTSYyd2?a5=)IDA$pzM>@+ zJp9ap3L5}yK$E{eM|ugij*r~A%4MyAp@K{1l(Fb&YW z%EuhFu3hER$&mB@VP>>-Z8D4U4z-oLW9tJ5B?_d%@5%~-+&?y($KYiMK@7CvrdxXzdo!Ye;pkH**+e_ zwd=wj<%VSZYn3$~*mAHd$PH!!ZB@CyDGIe+zHY*OEq(h)6DR9V=7AYId7d+m2iG5{ywK}wzdXto z7wG3nkH{lr3Xlg#wX;epVHisPG;Ep{_;U7ScGZi+uoo5NER<;g=FH|uo}1#!W`knt z^#}!FyV0V`1JiuD&JfKDHRvL%$EV$ZesGwXAaHaBM^|Q5U=2Zwf_xgo`-GN?ypMw+ zuW_N2*QNl~1!jOCZ$Q2xOPZnyOnVIx6tNxpagFe}H72;Eau0_k2WN<fsGlP}ydgb6O$N^SrI0%JS(|IjynM0Y_~P9ZBAUNlP<0t|Tf%jYLfLr70?tF8EZt z;iFYv#s5;}^eM)6$m?Fs?JK8FS4%t8M*v!&2fE z+U3tG++3U($_3>-evfZVPEOTRhSl6oa`rS#60It$HSv|cEq!x42bs5Yz&t%<_f?k6 z$m|dytp)0hN;<@?s2|({g=J-5HKn`@ug>Oug=vn_e4wTc?9}}DsEibyZuu5U5S?qY z>jzrpgzYLESxGqm=oMLWE8^zxo9?TQa|O8g`2l$W)p`O$LpHalnnB_=$GH(Wa96~H0cZM)lU+dbQD z^%mmr1Rxe+vyojzHNL;hXyo97lF!KQgJ`xMuwPKJki_eex&mD6h98G zcCGR$xl|V7*uL6$_aL_Q2P&ts8=qGsQdv5M3!#4FMVkM$nTAZ;CDV&3Y!_ae!FK-k zg^tkvY>Ek``7)@SwOu8jgz#;u*T0;+5X=GP9iV5I@t6JX2+env zGQbe$p!}hhbTRYZ7;}9#p4-#*xLn36u$G-TL`iqmUXZv-J)?pLrV7;2H)JhbVK=kQ z!!D}Gu;>_xnUV!5U3z<%-SczeWaGlYqqm1e9dbPcUG8l*6+egdJ4Y1VE&`E}4I`Le zhY8E*<_){l8y6oyD*O1jl-ck?S<;OsR3z^Wi{z&}u>x`|?JRe2^J=!JC{ zKEoifX^+(|lW#yYPZj}HYHW&YoFCUnr}muH;?}tjCIOFb-~C7)YN(miD-VpQvF)!p zqQ33#8$pWe6+@FeTGNyNUAZSM>5^+{+b1dU@P>!4qVc z1X$;fBz0+B&A2-2;{p0W>nE^)Do>?dw8}LjQ@EcoWWY;ozz_xC42)yFu=He9X|LO} z=8tKyWrgCS<-qGtIL+Jn1v`Km_sq1%ycjsbPW*~ymc-3GmNnBVi$}7Ck6Pgv6}OJ8%?7XK*TvM? zdCZ*|2-X7vR*`TuwppMao(V*MNK1wP1#xyH8D5jA$nt-YpuZ%k!bak0Z-7b8M^va&A|5BxC?WPLtIpRs}Mh+-F}MB_7& zyNunl@Dk#|5615$w^cqO`?(_E#5{p~*i%%gA@8WX-&2+2@)0L1cksI%RZcWpcA)Zh zE()1NV5Z+d<<181lV7duzyS3xyzx$v{L=Uvl@EG+Yue^%tuM$&wtvbn5vU77ccht= z0=Xwoq5!$IuPC=S)Xe=BCGf8e;&!I>%TF_3=|vA^Fu2xq_2O#n95`_dYPatK99}hu zz4(ozi}Bpp-1B-^T#zV`C1y5|$!k$14SByvYU0rX!S(J;A82aTDRK0J| z`+LxAIgV7c_EY8f+$w-$bJ0NOcqkJsJ-9jO;8KKBk79*5nBl{&w1@I3<~<_3rdQ?I zp0%MT@8n5WZ0saN3#M>xD3gn@dtQsZqNffnV=BsaQTsvi;YevR+V3}m3M~3 zkR2+By%Dq=*0dxuS;F2d{&{u1o!N0{??Vl%R95vBgbAoQ1{3BI;FM6_lqYzp{e}bPa6F$eGi9ZsRs$1u%Cx&S5{3R zKTe=>@{Gm&j}SuB=aD)L!gTVCqP*!U@&cZK=NU$qHIPm0Uqf}dkRff#MRIuEKSOuH?ktYPns)NdCP#f2{m%q;dqAr*n~&IJYrk zH-DiNhJ*3G>>81oh9K`E$3{CLxaAIceY#Jr1)(q9Ras4+7KdRJ{6>Q&q(N3Nn}-?r zExAbUV1Rc3RFzx!eRnRB8+(1tPXoO94*uowb~v6<_rX2C%`DFrG-k=MXNVu!+6R3*^F(TKYg2gYLJ*u zws)2JCfEfk9}~2x(vLZOTSH_w&&d4g#bg7W?xMKD+c6%U;q2T(NnO@33ZaV}i6vyZ zm1=37?H|Ypk&!B&;Z4F)9IH_X_apyhXx_9cn~Ho&8I`JOE|W>AyfDL;(_Kx?V3eHp zEiYvAyO8VT2Rhx3^5(Q69h|IKP{z+^SGTLIp61K_%HeU%w4zFUc$k7u<-TctGQ)>l zWF;BEA5X=~%^DjQv-C7r8*CMHqpFg5Bt64&A5 z-P3$7unI$25-;|Ny?zW;YP{Z4b%DIeAePK9%I%^g)jbL^TP?Y3ntl0qOKb3!*=$NN z7q~2>k!@3Hrgf}0x@!WjH?I475 z?W-~`U(>+tpt9AD)BszWow@n1e`F_?nr1O|WPCO23fIA99L~~0!U@vzAi@r-X<$kH zE$69`B~Nl78wLQC@x=*lUwI)HF?;LyK?qUN=jyTewc9~1>h&4iIelR34oW1t9b+Yx z|I76*-;DC#l*6~l4pBJXwj_jayq5E$t?vX23I_b9f9TekZI8Nv4y0K}ad%c}?eM9QP zD8otgXbEK5!vnp5;iDX&eVgAZC-R^c8@{j1tB>Jxj(B<;hzo3G;TyS^tkV@J$RIxI z^&!LKG>~5uT|q9StbEqHSP#-5^jhM?0D;>PFMDzaq>K1CTjM|=|6qNw2tf?|F1MpB z@B8A)K1p#(-%~FgzdKU7v-9__?GBvb<{-3yv8j9j>!D;dp3iBL&cdt{101$)M>)6G z=lzonHTt}wk41Qb2f3Id>Vm#vI*;cV82d&hRh6xt<*z$1U6wKLX3O#(%YvfL656l} z*pjhbP|G6Q4$lJxjp^j^|qyNoTkP#(xf zu3hDt9;4h3;uL3~JX#09Qh{->yTdYBg}9^iPXt%{E`Iz5IQI{4yf{bW)i zX(0aDsnkxJU0QOXO!TQ{7xkjf3RFJH*{lb9;C=owqHT)wv;IhmwjtUoyk|tp7Z=2V zp>aX76e5|D2VpYb(pDHA42J;^6!~Vwwab6`##zMS*^J<=T+M~asmg)a@7g&5(`71u zm_h7aAO@EtxmDEswasRS2qy^ZM5Vb>c7Yt}yLK5B0Zy3O0MX7D%rP6N+jYh8Pn3*-sgD(yy? zNR4g6B)y;0yVlt)FZd?JYjtv;FV7-WT|kp6?=|3{7buz`BPegsp~gL`Y;K6)4vz1$ zA)N@Pj>;l$13jb9mm6t|duiL{xrU0#cGi%NwNn~bDRQ&? zD`6X|pC#uQOpJvU^ zwG4*b%S(%49IMbZmb^kN{uxCtQ1P0DTzRqlbEmYa>6ZtrM!q1<6^ z1%SBU$OtMufJ_r*4dl<`Sov}IxWKfbWJA-7NazBYleRo)EyLy;o905y`rzF9ju%Z-8_05|;%clM^G#-*I#JdIwJ4Z9~cygegNi3Z_ z9sv)*$E(ugV$tVWQ#HH4yFZyIr6!;mrXnH?FXTmb7m78-lL)SWW})3GX2j%kEY+Ru76L5gVvd{6Ew?1T5gbrTth>H3*`z^@-EPWC?d=HeDpOil3_L7Kx@*{ zqhu`$pfxQ5D{Am(I_C`4Ly2>6WcPZ{$|aqRl9#AHuU$iUpUZlSZd8(M+MM&UNWabX z8t+hp6+hVR8|(4hD3zCT(QG)wEF7bp&-(Z{t+B%GYZNSor zUH`l%@u9dI9U)!Z)azsOy1>#jbo*|UypyZBg4~`KxUH8&;aUn|*~q_d)$B?DtXOWM zth2he^-=j))VkC0EybkO>qErK8tORhG=2q=7jns0hc4T&7$XIvxg=L{qfjvoXyA^Ahs&+Ov?;k1y&OIS3t`>7{ixSufP%KM#*QrKJFFA*~s3H zIpG=)Dj)U&n6rlf=1Qb4GpV2w4_rY$_`*oAOpzKQwrq})g>m^^+3FCcpZp$Rgc{6I z`PE|3L}nCIchr`q3{l?7$43rp<_ZWeqja1r$T#Ajp8RZ^EXze;y4>HpR<5;EiEY{L zCK3u0yG)Eyc{X2j6V;RDJxMCRQSw|qGRvN=LW~0I^4LY+;*IhOgpu|62nN%1u72u! zd4QJnTE=YQ_fdDV51p!r*$d3_6>JXXA-YVf|VT=cJ<@ zyGqMZhV6+$Bi9%l0Y}ejEsPqBl5O?$tAZV~%rUO!l z6eGFG4ZLN?mw9WHW?!3+jFai8pJkIqWW)N<)^4TF?tt4NbpVP?*phx4 z_R2a}`&stH9dpvitm>U+q(I0}V*#}6=H%qHnLY|qT-=w<)ebjGP5@wIAw<#}UkLm# zDlIVb24f$(+HJV6&-9n`@)Rrs_U47OEt{VkB_~Tfv)5-rrcaf~^{U)BgI3ur*5)nN zW`|{%3Zy4Pkku{O$k#G*weV4{$QXyOq+Nb-;|$uphZZbn@C`H8GNOB&B|bjcQhJV3 zPu^jO8oFM&YKD)Gt%H<4nAKY~V;l8&u|cL*Q*G($)@%rGxIz-)lh_QPls4&=Gm9Aj z|L9UL1-5|wTDa?;1oQ?j(BTgt$+EQOHNaBkL7o-*IUAW;9JjlrJpbX(!FLnTL5 zIb%Y*>9r)4ObVG*$hyA4tXuua5ujTT+uOW>YD${N?3k6kliuAvGT4i=#weB9aa7bc zh_D+avpFwd{1aX}ht4?ch#zGdK}xWWqvUw36ad(yTdbPx9I;QCkCnW^p-uCr#?8M@ z^BTKYjZ!%ox(~-Cld|(;(oWeRUto~hk08f66CVwDq})0^J-_5hOBMprv=PjMD~Y!s z5*~*S|0hrNTUIG1>gyY8a#-CfYv-)XC)2!w2M^5V^v#&GF<;BdY@&>7lcjdpT#Jan zWEREVz^1sEFMS+DPfe-1QL@yFFs#FJyfD?L=rSvcJhP9I+cVjzjpqD!$8=v=f<^2y zt{kvqGyg3)-P=kVw@v~2gZYS-ZYBQUc{^I(pNh3>Qqk=rbA-I|HmaK%Etcsn8jS%z zhk93mX|5pmO)2tty|;=KJqKoP!fSTPrh6i8=B`aX>tRaSba7lYK5xV1WQ4oR;$d4m z6ia-hI6(#K%>#&9wzI<{PMM_27XNK-Q6(HD6Q*{rwyev`=~Da6uVIk7X_@8qGK0-{ zQ!FqB6k5HG=@}C8V**_H5as%;U9-k(=I-6k0buOmdV=F*`zVwniawXE30F)VUgUu2 zknOjII-V8-wxm=tUEHGGvKCK|TMV@e${Bbym^)8;i=1ZV(CsG+q42uQjgrj}MKyg8 z>?nU;DBW4C{_;Q1nq6tlE|`r2%e&@*4J)s5-td~uk-F?PY<~G4Vmr)#hxF+p8&RC? zr}8?fn6;l3KHc0h{0^q#Nz)({j6dRayV*_g#<*g5O@5ulH7y#Q4Q90sre6o#e)2Zi z6hJT1M`S$3=6d0WtgsBL$&@0aUq58@*9{qc{ySSHFrfS{WF1e(QyVg#8-~|pay{bn zFSGGHZe7IVc`6&vrH%FRl}A5H>;b-uU29dAqlYDvx>3*Px1>+SsY2_tAfy^}d|maS%ruf(9rGZBJgn{Gf6F z$Djcu2hW8$YZ5PEoJ2Ngu*5%zc(cUdHRc;xyARN=+}B&ptPXNNhn=kL@#U&~h5swp z12RTW?ub3DZpl?bC6k~^oJvq`@5RMhZpAWS*12g#v}Qon+d+c^S)Kg%wpd0#S!<=P z>Rl^qbCIQuk;{7*%ewU8;@+Y>or~m1zk^$US=Hu5^^xEIqa~zcm!0rVu@$6!9n`>U zfjiCr=T;+>B@N{G-o+TcVrvSDZj&2klY;G#C!ueC`|N5v*nmCaI~I08++4z*EdO=} zrkmi;;p(3P4%`ynN)L9L^2Qs`*;oh}Oo(E8-0vZ-Fbw8~F;4r}Y%I%gkqXZ1|mUd#)gF^I1;s z@wFX)8CQ@Szz?eM5{)}x^<%>^%Ak{wXx;v#(`N{8Y}h5gl&S9-T$Gt`JI ziiv%2e^P$Pv+>e@0TdVJA__g62e2{TFouVKj(k7CkuFQQR(}@bpH2otG`Yxff0Z{H z45FvlYIt&OUlms*-)>JS$Zghx8dL{+eBw4;fs9=7t5+H#Ey;N-Ed5{8mjQj&m<;Ha zKo*V1{SA!lOF(aogNQQD9FP*%?P`bZd((B7#+G-7jgMtW_LgrK(r`umH zW3lAllJSk9g&*_29pID0y+&&ON=<>|FO3KorH);mXLT8GMf-Kb0!Mbz@$3{ord$V%=| za>V@J3@7`Omt}T-D?|rw(#s^+P4$-Ei(4v?uef9g_UEgR-Q@oon*KE#HZjPPlr7;n zm;1?3c9OOELaG~CoxN?A1&syHK68}!?B=bcm9+4zv1t>{a;z30m}OFkT4elAgdx5l zTQwLLi?#4VXPFq%?Yo_1OCx(?rTOygr1<*46}KR{L8v@D^Z4+R$)cVe+G)oN$JIMN zzuxhzddIVzMX9s<==T=u7cOrnyYHc(^3jYc%^zzlY0`Yc;~dbQHZK=96`&1Qk|wzSr{Zk{GQz3fc7BK9OR-DM$5Aj&9W$0SP*+vngUYpZm7YO z1fA)OTf(flTOgbBLTxWIrn#YZnN;Jed1hZNzb@)Py9S+O!F$bd$jS6t^6!~~w^cSu#n_<|^)E7QO{+X3HTS(FS;w;yx$nsZGmGZQZRwaW zaW$^`LO0`(eAc6u$X>^OFD7-DLimfSYn8{X_vh-g^3HN{uF%;z4y3(17s+$LWl=72J7dWJJHHmW zofWswT%_Z)-4>-QbOqVTKK#<8@7o(HT5>z9C%5)(>rAnv93?~CS+2|#=wf@Ta|EPr z1brNBVquvqeFc^8lD?Zp_TLt|0x1P{=EQ3cwVbut@V%_fM?of6AT0uY%g6`~##-YE z%))U=j*zmQ5j#T~G*Y`WT)Ufy@jB*=+|F`+uEs^$+r@1D!g?3yLj8=(mZM{SD>5eI zuAU?^a%VX%52?W`jHdSkJL&6z2IhBNpO1p%CL0qJVrN-kY}7=pn__mB)AG=#0W3?` z4k>yjjWb}%Ne z04@_ki!2GJaYS~>Y1kP90Ve9{uGo^y3sc3;irdZ|->f2mpjCu{4B-(RX_zpT{dR%)J^=RP$irJL!U zjD`}`oCdLd9w5YP0Rg>Y$OnZw$#|jrj>=zDbQv>n-&dJXb>HDKk&uUj!PW^{>cCriL^MvXLKr+Fm)w^6eMMo#Ggm_uWPUz!-i zNh~WG$PbC%BtoWB1KEEuKrlTFBgIj{SDAwJk*Zk^EvDGF`Ns)hzu7FK?1%_;F3ngQ z=;vUEIVKJ^y`u4%=>aqAfO_TK3!nnBXo%Gf^OXCh;-lQoHV-uzFZd`T6d2Y3ZA`p@ zJ1eJhz*q$iFD6m&fWLr$WF`|G@{^bGV-I$# z?1*dl_xj-PZLq0BiZRi!dQ^js1|cn$>OMaUvwAWBKgHf*Cr+SX%E)c17dnYT+8_H< z(W*C~!CVxAiA&n7|40WS7gH9=65cc}%o0#*0PtdqP6Wo$Kgnt>{{yvRJBw9J=*{Y^ zVzbSur?Q($7;k1N+@K4J$N=sA{)Ddz^TL5^Cu7l8I?C(n)C0 zA;rvMG3LLrQN9gOwBNRXH$H{h!g_&gVouf7G{#9wie&l9y$;}(& zQaGn8Lkv)ES(wuE)mg3h=9PJ2==PBh*lg^T`4V-yeYhJ$1IMl3@0zp5fcvH?uS@E2 zl^E)gfQ(S2lS|aFoBul*&OgYoOfAt+OkVEF>Cx|YQ#rM%=5|$iV`|auCZ{w-8q^<8 zw@132H-p3&yP`Tz4dPD`M;gSa5geFyyQbd5otz^ieFqFH=Abi4#&0dp zCJq_fkk-njthM=HE;gjKhH_RcCMRFr+M;@~GyXtpdrin%vm32`Pivd%#V-AFYeS|m z>)@=l8~;GD(T8Nk?)n48R@aNg%1g5vkPWA#rEw`W8ePd6dzHpejB(akxpC>%omDS2 zkF7hP;Zh`kP=gKQQUlu@Jb&x{9-VTSof4T3W%=h>R~HHVXq{rfHH4io(+!c^Rjx3- zCJ`U9pYL`x>9v3e5pkXHu5x`}v5SOd1!;}g9EbU1%NjrcV^Ys3APZ1Y{+4yI$EBWR zw)~59D9v)86bA73hjosd`F)p*0B}Dx` zv4(c$)7D;ohaLYmXPI8byB31(wQ>T%ahX5!+Ahui>?5~}TtXIFl}lXB?TWh0O;mYx zCh(mnS;CIZzpO*%G?R3_9mXbH4208$wOc}zeoDwkd znxw}WMs*p+5>NHb|7rqn^8X}FTivcQl}UOQq)7wQdBjbGWg#=st}y%NEEpefoZ|;+ z#}}Zc1D)hqAxs%(A&J^e1bN>Ci*6=+j;mp0YX@zYlI>&{d1Hnx&grh^vf%-p#Xv{p zE{W!7f6A&Y|KAisatHD$Oh$dDY_5NOfXo8yI=BG?-T=pYkp+unYIfAl`c>B82Q;`I zxmw9~BR${{UbfyKhz$P}cpJvS`u6(jjnW|h^^Y*#;MVZgRI9;aMwpH5Rm#f}*AV{(;0z2|f9J)6re- zs&YNj-oP9^L`(9uNE5*y+cU(2k(!b^W@2I}vCo&x#0+PAH?3?CCSQl0G)5B`XvpS_ zId|JUkgXv01~Xe8vr0b1rA*;(r9i*>y3xShwPc!T~Q6u$8Likqvd=k$GL$uhdT+A@Ns$mR~FqDHbubuKy zSR2mpq{(qCU4Zp!#~!GKsQE&sg6ak;n}D{`EzzJmpGq?BMA_`qY-%= zOyD{L$!!ed{9HhgR=lVAH_%|brE|5CUYS|L?8rYa=F}j|D^rK9NI2_R-Py>iO@-$E z<%|ch5CSEm2|SgbW&5CIa#ngCVb;oV%E$v5UXdgGL|4F|_>&P8E*=SFSme9?RPLV6 z?q1#)#S=b61Ig2awO}xg7pg4(TMcDeHD&n9Q?hQaW{_?-nT-GoU_R}wy4@5fay6!D z096YqHUjPJaJv#l$aGTo zP43ENlw^2%vuCl&nfXDMiRCmu5x1}0kCPc^R#Rj!l2?1sE5HMwxJI*ABHttRq$g7_ zZJL%rZbMUniCGviD?Fht<&Bx1mTH#wnvjw}G;cvUJyd691>!u#IRAnm19MXLV{=xb zS>||O(ZpUe(mrIs!oQb6;B-h6%j+dBpoG~ho*ZwwAhG;tm~9Fwo2CsVKAxOqW~vUA zJtI`=avx4H|6!P}f%bQVof>CLKG0V=&>t7GE&oM)ghl@|l|)`nL9X%_s4ilekGO2X z4V7Gjh8@5!2uTbTXnt2{pU069kXj3xRLpcaqkGe7H_Pe63eXaaBxOjeC#_TsQz$RY z%F2bfI^t5=k~r`Loh%-LYnS_m+}g`Vx+@1w2+WHuF;0x`t9N(Pu)@3!7Bc^J8IDPk znx|ULw{qNH5_GZi(%zS6RppMfcc_77_g7grbtuqfS<@g*GoZ3e&cwr6v(owNggdHJ^xyag$6}G#oY-(ENCdx&VvA!5D@aC`@B3sJ@U~Vgw19o)I z8_0~!!%hh?#ZUTP4#_CU=wq{SU4V}xH&lH?<?QS2Cu^l# zW{||TR8aXeQBJOlIo6B3L0o$_ncE+o%Ccr`U(fNvQY)0)KBnSha2GdMj`R(v70GS=ai2#ICsKpswZzwTO8M= z<{L>#7|~tT4rTLq*fg0MPTd^*uB0^yQ?fgjGGAPAT`2 z`4aD{vM4V1+!xE8N4b=vnl(3@`3Htd=5Z?+SS)cbL?4C|3`Jdrt6cznN#hB}^rsCp z%Q?df1CS?uqJEplr1bk(S%f49(-EMkj(O{*$dp2yHaI2*$_?0o8>{kD3xN(i`E^lt zK*Q{#w*oWdS6qG=MwI%6FXO>Dw3UGl$p85603ik__Ban{k zt@2wdCfD^bYE!_;Fn}lj$yREUTN*b~?1t&SYm>Q6kt?uBu1)3}6Py2MxiPmj-k|Z~ zwW%!NliOSK`^ojww{d827gY&cn;J6HVwxQ)PRc%1+d5Q_$5JzrrFf6*Y&u0+# z*!b-X;&f!u`G2WHj;K=eURR^otuq+kF)2d*$z#1`Mm*N(SyXDn3F#o4<+51&X&?%5 zYe&}2bd(2VCFNQ+G3+;~B8=?AmfKM_EF#Fo<70q*HDStI7N*_Ei&h!DwnbQK`-bC) z>nnK;KPS@`t29TjnlhYn9ENT;S=#IKkA{2fN+mzGO+|!vT&y5*$LHh<)5Gqqp4{EAQA?%@ zy^&$NyCqhc7Njguz%uqS05&kOSYmo62>0 ze(bGsPfwMizp%*0>GtoD_U}~tx6l5)yc!W1wm!zmxcA}cN^Kw z>VI)af5VVcMsah!(xX(0x0@cE2>R$>WLi};GThYlgv?!*!&~0a;|HK0F`=l)N^(?v zE~jU6d4YDRUiXkVp#Jrh-~GC<{`C#}nuxTP0x;;1-i*!MTrY`*w4bfV?thAO0ahzC zrC=CqG5`pKf&Zfv7+q62*!=R_Lk-Mt?8h*3K`4b<$ZEy^N`7N#2^OeGTB+d?j?z30 zXrN;u=fERoNqKF(gdOc&x(v2(S)3izN)O1beVHJAz*!lXZZc{Y>$vl~ZJCq0&abH# zxeX%}J$mR3*}#k{q>oU8qNPa)Sp;$mYjyX4LEY??tbJBh$)jz#qBdUK|UjJm_ z`w2qI1!hU6Oa3_7%5(CGO=Qe@Sx@iNoGw6aH}VRJ^wygeQiesDqGnUQ##|_?*0h>X za8?O%8dpbVOm`6KfMaSK%AXm2a*XqdQ-}Zahd2W)*tGor;Ig(unyxgZja=D_z4r$y zSI;DWWd3^}Q&2AHHB1WQXpT#g2)!@Sk-7OAVoWmO(HA5WZj&18g!BUvf`BFS*(e!( zwA)bR(r<7;$csNMs+|3e2sb^Hzt8{7yuR-K>qzAwxO7jY_TTod3Y}K@;IC`26EFW4 z7PK~%OLI}VD;MEA9SMh&W-k?dck*kye-zsDOaZ-Mcjt}RY)C3laDwA`+Nob@lhyfn^KC@S;*#V7*G zm6FC+M3_5(sTJ%W*fMySp7`mYZ7G(Ixg=Yq_$JhT!;-KgqrQ{sC02rlP|13b`11PK z>*BA0dQY(;Pa2ojrm_l!6CvU9Tu&k@7vwq1q9flxAUZV{b-IGQ*X!e}VSLoBxkw(y zkzUuysy+tIT1s!spcXsMw$b=7G|TSwu%xti zU$5C4uA{v~bZk?(x7Qy)Mq({yW}2@tm#5=umUE=w_K|bbVZ9y?i$k4Zy-rRJ1ol&M zQDO#aBQBT2{Oy@|oi&r=uT8n?i+;zGOoi?^3VDH`vyV!DI?iqJIA?!xoSzu)Fxx7Q zI|yn5Wi>L3die{cpovn?Hqa&~l8Zyj+VA$sACr^gb6Z^-Y12|dzv;^QT<^eE7V9$E zWJCYDU@{GYAF+v;(RqEgLin8Ee$r;1CJ==C<3$0~fl6Tz0OkKl9&4cMC4IEw$z!Iw zY*W}$0PvfJh-OT@Zd19c&$rF}|7;4nDZOX34d3Q3n}Sx(G<=<9^jYDL1rcNeV#uKw!Z*3EETewk*xQe*C*%52%0rH2vD&o^FqY z+1F+{))gdI19L=HrNm-QRsgrvX3jmfW&YpDY|CMS4i187dG1?cEC2Fk>4=);R9Dae zx0jMULjxsZ_=bFx&TP|=l4oHoENLmd$hu*9y_Ku1m4de8I0`|{?mq0IPd* zY6WbQwGPc6d6YSpOS;@0AS-7W9U`NFJ3#F^dKh8`EcZD`H_0%zSR*LC+T>AuUizw* zz^0_ZK`Gp4tw<*?Co}^0d6uyLRIA#}RJU6HY)zdDVA)k}qWs26#EpO8YSNpzVDGgu zYx3-*Nkv3J15?7p+98MeGLl0%)NqMRN*)63qLo6twwvm$++(fuV{i&d*1eC)+tW=9 zS2+;@%oI!z%rdGvmDkd*r^9)eaCK}C=_%XPlfnEda1WMIF}?IHK2VoQcSc3VT$2s| zRqI%qYVO#a%DtG~*w8mLR_w(+Cj8&gSTlu7Wx(wwar#r^mQiWU%|~uD>2gU>U($Bh zDqDv~ZnVrf8YE@S=DJqdGCT_1Xc^!o9X#WrutP2}E@T4g_L5ztXS~?*IB6Mb+t2be z0H#+B-L4MZH_2w}+GGv+B0|^=_DvaI#FB;wyNR-8T5?df$(d^W&GV*QYD2vTk8nN` zE~9w95kvx3fKc8tfwoOfk{aUaTM!vJNg}wul7bRTrqgtc66cVX$H;DeH?DDl74zoB zX(R$X5YnAF`uYsqYp@y0U4KbDLP6!SpK_gFn_`!81$ikQ*IBmYjO!4s8li>DT@M0a z1x;wfrh2IVpL-4cQ3Zr=%`WqGty*(5JYJqYf}G{tB!|IO2oN zwhNWQir^jM4&aJW;A{(PFnq(JMjy8(V!*s_fI(B@ZIE&`HQKJZF&o5+CiY=XiNns+ zO7Fois2m5%scdOPLtbOm0nmGSQ#K#h0~_0>@?M_L$Mr0Bd#HTn?ZWIFt++kxp4~Q; z<25R`+gt)pa{l_=9&%NR@{iNKJU;_Y7|rzM_{h^bnK}1Sc|8AxBk#i)Gx0~8n+|eo zJjgi=vd*=9i~@B4!t`2$@nzYJ|Cl08^ZzWbHf&`nvGgUP!K7Ot!4>3&xQeaf$F{+dE&>f~7Y3pHq?)4e0k>v-p6Jmh z`etY)>@@s6xp)flK)lazu)kin;u%5kr+Q$oXX;T{Lx#JBRhAdg)Tx|3&CdBh1sqT0 zVsK!;N!vw2_+q>3;&w0p)7!l-X?JF(0bG51HsvKu8A*8_Qa_+e&$ImQ@~~oYL;r8H zj9nUzt~YZ>+Dx-N=oQ#1d_ZxfX72G#v76?C772Kw>&ORewBGW-n znJ9Q7Mu}owQRqA}4#eaEetMEc0H2kUW2ZooKc^KN%P~AFFBtgKQ(`LT$(7zb>g?4Q!^DqYy#z+A` zEi;Q0crPt*d|bdqq{uz0O0l3_gSoCC&rD?w7XjW_slBoOVrgjJJh)3I6m|36(qJhP z+v4kWwco&2M}a!~aZgrqDTdN{VL8iivZ?;)I6H!?Tvqh0)snPFDIYWI{;bg(XjHlCb5){2H4s}GqLM+V6v~kq zS!sA6tN9o;WAVz9&C?RzXHjfpG%KBJ!)S+iBF|0RmORlslIV*G<&ksZ8ZQj7>v6tn zL^h%%wv0=i1EjThckHXV;>7g%7DP z5CYGYr0s#c%EQB=?DDvVhqA^m8eV8#=Jt?*$yJPV1ybT_i8JQ`BuEDS@i30C`P`YQ z`a1(7 z$dBRR?9PxxDZF`2hLSa|m|b81T0o`0NFytz7NN2#4>lR|wQ4FnzJ-1*!U``H6VX&2 zZI0ko%VoE-oWe%LBKyS%y*8EihvD$Ckl8@|+ho>uHP)^p_Ra&!1vw=_AQcO1iNW(x za}<)%#J<7C4+oIMsNHF;#cXGFyP5@GbfDGP#%xvQm}^C73{6)%A3lmd%(D-iCFpio zGmGz8f0P}(a>aI$N!fC}so(5(pmIaL0$bbR_K-)9{%U+abvXF^mTi)ghez6OrLTzb zTV-7{`|?@arhfu@e%gfUV^%`cZM+z)If)p<`A`AcHfjIj>fUpwW%z& zJw``JC9EHR{atPs=|9p>ow?goUf&+Q0;7#tC{OM{1GSx3!2|U&OLIQYm*nYx4P#X2`(lNw;dVp1yAnVeh{YT#G{On`CvP? z@a7{B8^Js|-?A83i1(7LlY*R$PatFdbUSce<>MpjURZ4^r;Hc`=&m5O7)4b++O7f# zgkP6^4czhzA4}j>)~@yTfHv3MCkc4)#Z~^x) zmUNwIPYl66*DiSB5-w#yKKwjE)za+wW?l&0M0vmubm{JVYxs0&14 zV%QWQ-1%hT($o6xc-%KKZWiF4;jxTf1}31%N!E#>-sjf6>{=Pn(&wRu6!D(c zz?^J#y+%6D?IYEriw5{0C9YeCM+{jGpl|F+2K6UL7zwz72bFarpp51S?3F{)q+Y}q z*)Spk+di07M@OBRo4nCvx0H%AJusUzFh0$k$+RWKbDGm)W3fe9(;0p%#sF-4=YKF@DHDBIeLf&j< zUmEBJJ1)d1CN3UMx!wnVG`9Gg?tEwBt zH@?5;|NNe0u&e4W=bn4++3vaL=4I0nj*(_Z%DllCFt8@r_b8Psr*Y1%QDyZuNYQ7H zVs-tSh3PfQdls!1XnGiN<-ZaP4U~Ha8v?L(e_tI_P zbBm6wQRXPEnH`VW6fJdA^z5KWj`7hr340wSFY{W?9K;-)`^Dx!Ynt{-4a1jg2Zlps2P}a6p|fJT1Xk4*eb9=M zlpzx}8+%)r5c->gAWe9FIF{vb`{p3sVR7%sG8FhL<67B~^2nf#t==B;(GhSQQ+zgX z)%JjhYj*aK6PcOX`!U866LY2Ewc02?j8FH|_n$ZK`^-y0)wNJhlILgoPNsN-;xHC{^jvg+5)~eG6_#v^ zhzm;y+fS^pk(m4~U-ibxGlpRp2qDsqD(4M~=HtzN>eC-C926y+8V46r7s?yykltoU zP!R-#9oQNI#i4<$mDF-%&1$hCac z=G7h?6mi%g_VzWrl|r@z$k=;S`EY7F1E<@uO4GBitwZ%G+gGv3agI-w`+kF@xF*jv z4;R-Jx?p=Ww&$kCmqRqF{Av3tik>%BUaED$OKjwv%4~<)+1o`WZ-~4y)#&4Nno+sR zdU-f+V&J30?bDp?qR`Qk61^2~KaO}i9n?Jxs#{wuq^Q;H6-a*oSXBeyuiLX12g5q4 z2EEoyi4XdhRl1yyK)r)}2h_xHMb*KS_#?!l4lQ#E(V({5B3<|A*M9DhV?Bp<)6q4<;E8j6$d`UXd` zaTw6TJ-`xw{Fe8p_%MLF2#ol2mP}1kN)6hOPWkE`h!A*p%WYLjb%lJrc52Pjg4w$r zOMjHgwNsJ1iHL;<$hF&>8rFR{LjPMTZwV2@d6kQ1V#jcIOW=J=diq(hi`Z`ErM<%J zmfm)s)NMsNs&0p9V_ZQ4O)w^4bUg9sGr{Zix|CaVvl!);VH42q^m)3B-Bgvw-P7glBGK0AgQ1%cCh}Na zd+V*eutkoncvIztx-ZYzmtrUrAn+h0k9O>}?Ae$S(pftqF7mRG3<31hy(6k-S3Icf zp7H_69VdVOEzmZq{L_*4d5)9*Yg_34Pj>oZs><^g_+eJ#sXJCtBdbYEBjw#4HWCSN zT?%B~I{TMv^_Z?BNa06%P6u~E+05p)#2aY#!jSmjOE#G=icczxT5E1_`D z992l9((I2?1pE~QbmP$rG?-}S0%4W%hhq!2I_0$iWtG#8bqm>^0+m~*VW1^@nR4O| z5PX>?Y(+yCuR1z8$v%-w#>>g|QwyN*c#X7f+tq>pMfPxK4|aRFwmnkw5ib5D9nMoW z9Dtaj^!SJqam%)k?D&T{a#y-{E4PnIq$mP67Wg$Gk#7g|rR}{=du*CQ)3)Lp<=!34 zhGlkdJJc=9>_}O;<3>|vy{U5fp)mt)loxEC(glP@^_+cm%k0@5t6`F*m+;BDK}~D$ zl6}IHcS7}B!1b(VZjRNeWGrnO`mxz^_KzXotiF=71jND?bp=-r?5=VF=$B`e~S$sdAVp16?Ezp6P3|$(d2|7sL_sdDjlCnKzC7{ClJNCF728 zH>ureaUjy0i{l#Q=AA5`8RtQbvtDy(0a^xqXN)@~>L+^49()Jzh?D`E@%2OkU+}hUjgr z**#=MCywH0c4VIdo?BE|yLl6GX}LlkUM3kVt=asuc8&E}YTt_~b04|yYa30kUiv+o z#t(Ohg@=Rp3)>td_A)Qa4~ZWi*ooe8aCB=?{*wb-%z`zTH^RgbzvEiBJ^j+bOPp{$ zV+h3d(!p^nXAA*+jP_98f(@I!c+L#>IXhCG*Nt9YuAdpRnWuKFhGSL!K-}pY4P3$| zL%D7F`9q8VZr-U^1DOomDKL$4F_eEKu?UgM`a@}|UX-7?HKP1Y18Fl+e(KhU@|^sW zB$_HW9OAPHumeMV-+te`Q!lydqDaR1+U*@C>kg*Koi?Z(c3BR!D2LowesD~5`OTuZ z9U2K~eA5cpG^t#?Q&r{4OoV+NQ`v2Y#3;PkFh3a?X8L6Qf56w$ov<-Z_%0-QlJYV)(?Gj#< zyR#Adn5WiI_%R*XOsuk(MhWtsp>M35*ciz>W#1i^3uOZe>AykcqeGa)^GUA#bhaw1 zh*ncMjvJPbUIJsi-WaQ6xK4_|Tve9th}d}SP~$h3?-+&6j#VS`Zc1Y`ONT<3Xy}n~)Jr)@Ze+=k;;|px@n+kct7ahGKkN;Mj zt2}N}SdLu{Vo%;OV2vsZhQMb3a4`8}8{tTeD)$XxE^R$0%jYA-k8dNM3%u zOf2N(ojzN{x7+Mlwa?}A^PycPwCCWOQczE$D-0nII)wCW2_Xv%14NYW#A^Pl&F>dL z$Qd9+Ca>0(k~Uk!`nh%N?6RTNl05PSMz8@%tFnTaDO=UA)V1;y!y{8Z0w$1s5Q0vN zm2bdi0{OZ9$2&|eg7IqTotd%I@!nx7MPG(QatJ0j9C=qcYsf|zLzkrwfUt5-YZ|3- z8dk2{9#!-5FWw1ide$LG&fRH?EBstTSfk2wwjdt11^)%`H)ngOLf-6Hohsxzq`L55 zxYntgplWoV?wule4=7X?8oJ;EEJ*(NE$O(jTA##?20sp23=Z-1-4?Fm=O;$mB(rZp~~KqVeh8He7SXpvbLz)bQr-wq>aGS zF1wKkjQtX_mdfC@Dn}LMNmDGwsvQsdd=2!2ArW3m`IRrDQ1@i-vizu^vUeoCjb+)y zeR$1o6sr&Ocf_3ixN6q#GL<;FZ)FDs{%=f<);jVLwz~fBho;Y?a-%kfdyJ` zE+R(B`G;^f)G{VWNX@1}PFCy?$rXoHWQiHS9|Y-`8@M@QTn#Jw-w&XDLYiP3l~WC0Jq1!a(D{()tdnx-wb{H4v~iP z@nOFG0wM$clf#yHLuI9{jx{q80z*|U>(`5B^l7imE$-s0kA(na`EYw6_~kAC$a-fpHxpEVdZCxcK$Z$BtS z)8B_xOKdI{x%(nphO^y#&=S_+?ZYCROjG4UEA5c?chIELw#1t%v+K}zr+a@mqIanV zH1qU9OyK{_GjAKVvDt0RyS0xEI{DF(gtLtvnPO=6aOaA; z=b+eqcKtBBS?M;zN2AIu!&vUjlVqY+`F(oSeQ~Xk(`bZ5m{V}Eof}upj+Ezy5mg_; zn(zhL+0G!{Sw3)=6pSUq^8=U3M>|zz4vZBM@a#cw%FpUVm0?JMzJpA|nmsHckik+S zsn5BfoXUe``?jJHwg|^AvN_eF0f@`VoqU!T8zYtP!THQgy_=URH#q(0F8B18#wb1& zg)uh;3TaeXH9Tr2evBlOQ{~<%DP`O>yee1bBUvw|M9ulG?={N2(UHnK!e*GQyOzn) z)rN1OM;`hO(O+G4Q+3O5?2#VHROPgttdSFGMCD1xg8O!iWcHzcD3|UO8H))+dGrup z7VZ?eZS_-K@i%;Qot&KF9@qO-dE4-slN%VC+}0Q=w$NW{&_6o7D(C$#pkMbJ+v(+W z;}q^zaO8eJBj{Cmd&ja=5B1?RL5s=(6&rl9*(L$6(Zf-q zClYSmt|G8e{jb!Uc zj`B@I+b}t$ofZ2t^YY5!1vx!-RmsbT`x?nD_-ojx^m3m&y+$f0yUBjrud)bY!ntA? zz9kIxs~CWrC6zOFu96Z?b|;O3H&w2#|G0SPD$ve!BiSbkl}n&yyst7EW+2%pllXKRnWI4Y;5Iy1aBUbZM@omv?5?Q9JO8 zhC=9s+Ua2#Tvq0T#z8YjMx>*FUJ{5GNpfcZg6OKG*N2AFTsIDq2W<`=@xO1q$PZR0 z+s@PWO7U>ce;~!}#?gE0s(fTs(!>#~Y85V^f;UPQOyORf4eZCk7GE2g6~D z3mhWe8y=1IIZGLPXK_@j+%{#kvy^Wc&Wd~AcC5a@it8Fm++EH%a-+(IVG*pwG2lNA zi_{qCH3#|Njsn+n^UI?RkV+}eUg5CoPR}<__D0E*pEHd4J2Q+A9c|3pc?%X}@06I1 z{%)gq`HPO?bmwHpiwM(x)V+`gEL6WyY_ zsd9`T;mJ7?+!6A+BZ|+ND*2!xVzoS6N}18k|5255w~gdu6s-T(tmoDJU_J8eZ_ykV z)zSR5{{gQHTSJw%53ZyYXA&9bBI?hcE^p-_ntscZ_6DcKxnr zMa4qdg*#C7o`ln050LV)t*|e^7@la1LT|WSaY)RJm+gdmEIWklTNi|@_&QYnJS38{ z>X7k8X84jJHp6Lj_lPkm`mY{=(mF~$ELA>lp?3WTd}LF}JX6eO%n1{gW z)toxfoD7cSXxtxs$#Dr9(|~=IS9xy|+MrXYpBQ1553?V~76rN-$f+1G6R^>-V|a}J zXyTQ+CSKV>6WvL4@}MXgxNIOXo-WgpH%i_s#!AA%5vV#>*pm1H9Bs+)C?)chwWi;+ zrd?oqcA~MjiOD*d{q+=ri*`wMyyGXu(ljsi*^fRMVY|xo2-sg zCFk!_mG)Hh4EoQskEQg{9k!t3zf-iU2GRp7qvV~2>J~Z0+>y-p$CI!~D|DFswrsso zjw0Nm$s#>Q$yLQTj_NVP*)t_j_-}D0?;|R0!4-84=_b8VauI|jPg^@{zF0ddpA5$$ zJ*y50OLwV~V=N8;9DP87gn{z#E`-6i81ckpW4}2a7DBQ7@!<(>HyFOr$kS*prr(TZ zTWpQf3-lzDx%eANAMzTA)-G!{+aAw(9AG*7|E9&BkBeEm+23wnt~4$!w~=z*DEY&r zE%WjRZH89Z4BbC6;pK0V5f}D!%1B%HUS2NxqWD~~b5xSrMGOc0R|?DJUx7}Ssbtm? zgG0+fiyTu)7S-Zf(F?6;mxeV>XI=VrpuF>y{6cqN_Kb;J9@nZ}${2O18P`oTc60wO z5i=8L_NQW}mtNq#oV^Px^&DHc|CZ`hZvGFJjX6PbvNh%yGG&eiQmnY!oS1I9eRU#) zj2N~a7JtzmuKf=XL!eB0hs&UEr8qos6gYHVS=p-0De+ivmeN84W$7p~&I9FD+5&(% z8Gu*ni3HW_(!#RBT3lu{Yt6Jqx3 zjJ*rKQnrK1p_iAJCe--OJzqf!hwq#b80mwaP zBEtH%4g~Wk&F(6z8#Zo{16}w~f)UC3XFq9vpf~4WQ=_J0jD+D}Wn+em#l<`K$U(jUa!JSEnw0v@<848lycV25= z)Es$*kk)WbnUUVjw5rzTd)B7oncZ^}ZaLz6X{U2`<9IGiCI$5j%ocTufO7iDOK zVn9|ToFuHj4zA(*X^W>*8mQQwBU#=OBM-KSM_M@WWs`hbac|5~*5!!s!>`~&bza$6 zSF~w8w}6zqSIvSqb6(|zQ4to6OE1Fsp-ukV9YPR^w1MRqiU2#e#-t*$(e~}+onNv_ zjKKf2+eV_p-*?2=y-Ory0H7T&pOX^{n*jISQG}A^RTdgV8%IUnc5?a@JIwLUbl*1b zCKuAZJMGpcs-3;7%{(A*K{Yyei9Ive4}kXk8=ZTU=H#Z1O

WSMACwe#9l^T(awC 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

xb9@83zOCdCrN0h5p;i~hF| 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

DuuhV(RJ~-#hO-AT2fJ= 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%0DB=%g)J}KjPdyqgs{k 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

iiCa+dl)yAG2+ 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%0D8JQZ-7-Y_2idbM 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%0D~=JGnCFHWi`n_i`7aZM9&x}ohWl*l9wsG~-;i(# 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%0AKdN*gg(%|aj+8S6uLaB#o*z(Fi~HHcRg&x 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 z z01duZltHX;tn8EwkBim6STRf@fU1A7vfiTMx={*Q2_;*`)n&^br{_M`^%BgsS5ZR@`-bzTK0G^ zx4T?EI;5?<6i)%z)e^Hv`F*;m@M^8o@$T_`8Wgtj(C4BH!u+qfR)h_uC>yxOhQNFeE((ViFQ50jaY` zw9iEu@*IrTx&XME01gTO+uff1SY)7=05pgLyb)oFYRYp#0Qy7>rEjJEq{8 z_W3BnH9)xG@VlEU#k%`9U_y82TH13Tj|~1YP)U6efa@7>gJRU9 z2|)il05`VJ-560*UjfNWAbuyQ-MN)mDt$Efy_=+z-dU zzQT5pX)6;Wnkyg{#J#x2&_oAKNP8>yuHAqQGUxVM)W$*c0HH+m7RxG2Yl z%%~W$Y$ynj1CWdpCXJ8j4#&caVPEU9F|)RNLCuwF39o9L#cKwFW$OBN7x-(Rr)xUq56s%%!9Zs6d-xR|YL9uyRf zw9_pSAv=znU*9~AKPH-A1Sp!HXdj6-e>^vTZu8Aor{cX|1Sp!nrKNo?+WvBGzxn2$ zOf=s-BwBB6&)yp0J#WMpF??4{$NIhqNHpHoJ`-)6H-{UVr~lvMjV}Tcjc42EqmA?C zWK;8vA9#7J=Zk4Z`TVW*PoKl7V`n4a zhyM;%M!dA&DUZ{8u7r<%xgbuo%@sQJ+$9ncpn+LLpSuz(F}v!O4W#X=mU@kf@<=C% zU@UvDJVpJ`!tYy^zOB|ha6_mrUup>c+s#4Ks=9HlWLQY{qL^_tV z@Q=ajD79|73Iq;TN4qI|4gbw#buwA}cQ@rWmJm+7)3Rwh+nU-=W6BR21HVb5E+0!qzu5yy=xob0*2Q1k?UlxvER8R$tcAASjg!f zdH%mbbS}gyDLX;kk6l$eC_&*vJS^&8Vpzr;V?4T*vxr0tkb-L2r@5DQwOBMpizXe% zM=ePr7{$pmHB+-V{1Tcv+gnju;ZO>Q^F&#SQ?~|FiYIXg= z1H&V(*7*FAI{?+IGt`k?Ct4=K9jTGkM-E9dS})cLdc)O_&aG1wCx|1dhxvt9XXtr# z3K&V7mQ@;+gOn-xa3ZZrP|L@~4t?|*D5N()n^BTnRb{3{&;C?RvN4W(CH_sc*E8!lx>rzf;pj|Dg3Tl$!L)FH4nM_5;teA%9 z(u7=inlP>L36CoGUjxp$$g(u`7yMm2@Q!Ob^y{lLvP2}9Fu;n2eF6XUtu{Jw=2bFo z=mr|*Wu+m^#tqc}&q$gcfdYN$cN`=%ljG}U!AeOL%(0mqrOA9t4v=HmEB&p9o{jc9>Eq_1C#;))cj84{M>*`m*pk~W0u@;HbeP=z&=pa_sdG%IJR`^%#)^~_%j zQJAz`%QFkqf9SJ_0=Dc*6;kuTS99c?OrEf<%dcfctv>HBkCL`x=B=_kUh?X2dA#6_ zz@550GIX0hcd|bad0#CV&NwY&O~-FNOAb_jd>AbI>Ok3bDT=r2xs?hN2YnJfhAv=k zTlP3+T`-=p*yV_xGs5VY~|d#jnZGDOR})8bW>I zWCgQ#ida%-yzp(W38h{Txde&mnEjaO;Xp=3AJFNC5YILrQ;L2WVluZ%iDp7&3j?$Y z%)2&TR<*KiR-oOq=O4l_+11iub<~{lO*XA$Or5W0!w%E-^`y&nU|zV?Egl+)k5qT+ z)h`*HVR%CPPhbR9Btk+!w%P^qWaTYY%H<+WL7kyxFVAylM%{yy>b>PsrD%F49a7Pj z$SqITwOr07RLQdYFp)s(O$x4v8=#}8f8(2GYip(*8 z@<%Il>T}Og!olk@-E{~&T-X4PVR`AH=*(958K1Ud=4NUA-0Q*_e#Z@HBz=ZQvE=mJ zu*i<066QmTwhI>uI$8Gw9EpN0xh_MeL?v1TcjPIVkpT=#J6&{L#@|476^)lq!>*;H zT92K%R}8*DY`qD`Gz#?ibr9QArFTAWRasV__X)Oa*CS=}Lyd}B4cb-!pS>dJh3a(DwE=hZfbkvda(J5wUm>;STrl{>+qG; zdL-bNe}lf8T13w?Q(U^e1#>r~*Kht=*N0m4imF*P5jJp{8YH&@Lx6~fMk|=MYm)YR zP!sf9U_N|(RB%k&bEXkdqZS3@b)m?#H6bzr-=@!8s^|!p1&>TrRR@wt6p&!u9L;QuJy$OR2Ynxw> z@kRD*92c%%$I=(@`81^moT_aOB1JtOoU%m`K$ZKWe5sCYY5h_5SH}>?rLWH{)Jb2q z6qBHqrO%2WmYCh5v!(xIRXg7)eK;$-cOSSU@Bf~c9bTW^yDwzchHO17*()ihE4C&0 z_WCzq?t^c4%3te9+j1j+TTj^wV9RR58>oj%Ba#~-p0LUWYz<^E+6_AMMkp@z&zHbh zjmUlXy2?T{2X8gHWns0=DUZYYXaj!;Mk9vzfj2-d8*-3ti&B@Q7D_Bfr)5L-)e`c@58%gS4d{)X51nFWc6|*wSe<@DO#O{GmTef$G ze=HkiHtZ}Nnn!=^>%p6kjo^NG69#+lI$)#M?>MfGSYnrfy+y~2(uV;L!%6(k*JFpI zbV1bP9CzmOD~9mku9;lhjnw!<(-jlmSH+7+sO@-pv}?RP%KJE2@Shev!$IMcyi^mb z{Dn87OF@Jv%H)MoM|N|sdQ)^}HLe#q)-9NMqTAktNj^%gr@sS#a6qhGE%^b*m|UbS zLnR7t)zq|p_M2*`+rsasI#hgfL&E$jGm)s{Qq?o3h>my}&NuJ}@`q^mz8MrA zv>drc((^F?R$S;c@)IWIzHkfbSmSotG1a&2&%71i;22@IRX_Je%Oit2Qhz8D9&!2d z#%iLYK9%>qDU%qsv3FnbfTqSqe*$d?{F*l_uSjgvyy=SBSBN}12c`#| zx4(f)dFtPD-;$v%Z^=Y1%b~6ypd*$Yk;{pgMeYotLV#@P&5-kLVpzmwC#ch-=k_S0 zax)%m86sMFGx*AD<`A_meJlU+5YID2ZLi^l-c_aSpCeDG?By7_B@e*tCITWVyFlZx^zya`>KIUqZkc-O*8o%-BgF38g^b1fSw>G#I@z-q?ANZYWmz;Mcs<~TJ2f;3e?68B(O#x z@3^_9ll(9acXIz*Vb_(U3-L~dm9qNC+f>^TytSQ7&=4Xx$A5=l{!T5Bcr4p4{1qK5u*6;TX`*w%@x*KOop~%R)w>@>22X2;e-DG0j$5e z#%YaU(#aA=#1N3KnW$$1CJ$<-aRL`_W}`IP98TB;I5m4GyEQOYg$CJkP2i;bWtt9`3$ zR=BP9ICi|1uSN779TWiI>VCEHU@Xp(N-X2Q*5?;}pk@^5p#QH8* zhLP;iWZoBIJMCV&hOH95f6~!i4|v z9np6$G1BAZQIsm@+9|@b1PZ^-`~SX%Es?eI`|$ia+F$k@;c|5cHuJ9Df@?4%pdGzW%tEf z$n3zU_%11q2fER({|u zcTn2?$+cnIm1mql@)m=fBl7`{dOS2C>nw-73}Q#pF{4)YL@j1VfjQSP|4A{mSFK)* zwuEZ$m^)3D$df#C%3I@^rApE8%r$)K(q(yOi3vHPb;(&Xf zc^uKYWG<~D$6+4Tdep3Hkp)9MhWk>fJnkMWa5eRka^RHLypf_D1 zt}RE{t(UwP(`_=y52NutYJVf&5aUtrgLbP|Tr{UlhYr0TO5g^W<8=v>de8*NsiSJn z0>iz5DP5@s`J#*Fn773&S|#Nf)f|M@$QKo@Qz^TYlfFnMwe9i)XZG9FYd2a2cLTO? zf*=*c!<`)w^N!*89{q%TfJ{*3()WQumhD;v6KRdhwtt|kl`C>J{??WwKY(MDy6jT@ zd|!j{DVkIAT7^qX_1t!4CYUA5gNX+%$VM7zqmF4D*nJ_%VYZep+n!}t&D|H$5?FE6 zuyr5(2i~8dY`qcVM8@0f=(gkF`!b|oiB8q+lMk`_1C6A>ukljg@c+rtL1U>o<1onM zgN4IId3!_p;SI$!rmx(N6?jT!PhCL{s&?!2fYj3f%Ibt(@m@H}pfz}^wP>D0ZI9g! znL;I(w14_wL)i&XTeml2^blg&e*1qw7~qWVN~wVRgclu?r{>bF5uxXB;X8N@)j z>{0fGOeO26&iAsKfb{q?4vcpxcRZ-qislpzLug24H5|E&zgJB2fIP?fqZXM|lZNBc zykw5hJjXN#O^^Po9273v zzB<(3kciXv)@=)70{cXTguL)Wp}l-f$~t`t1}nMDF)j{7ntQFRhV{A0^-layL!mRL zWOh9AAvl5dh}Nn*JA$g+I{joZvjc!Z&V+h>K?SDswGHW1DwJ#8cn3(`kwR*;cBek_ z!&cT?JWUsz%OHl-ZN|FPMvuhtR^7K-M zf1kVA<*NfK0n-*UU!=}!Ka3gCTPnDeyXhkhwNpUB{2e^)>WVvODjqFLue24jAD0RE z;Dke*^>Dmol(18oKrQMQQ220v2J7gWc*6Z4CXfA8E`B$bexN zc!0GPb8it=Job^06>nQKE221^k3wjkks>tF+THrx_oQlbaVO15r#`>nVD+`e5TOiF)1#fEzbZC*I5Qjvd*i@_j zvd=&ZrA>9erl!xnd=X+;pEe)aXFlDKu%aub*@r+`ZdVFRgQ{75?hT6|EoyK!Ak!z} zqR%v<^L)p!^AkMySA7XsK@gUB6Ee z8vZAxSEg}*J9Xyg5Ep-8YN!0VS$*aQivKt($JQ~Tt6D>kLmPZxEzv$TqSZ(J?awwE zfL`TqVrqX1YUk4TQsSQC>RCPaqoTqBx?l#iE*xcx40cqoO#vFbfKz4UMe zhg~UI)^{RA-6@t~tkrdQp)Za67w}qi%oSzZu)wixJ^K=_2R_M_L*49^uyxeGcu=ay z6oOLuH1}{DOL?J*TR2?2+zHF}n(6`jks53y2XH%)#pCr~z`C1eABJ^%^x1zD?}-+f z=B$`n>d&wc_M$IfgzJqCyPM%t>KF;`E~dGk;9*-}D+ISAbU?>!_c9*m`rBzRfbATp zjt)|-*EK%+#!wlvW04$CfERzUQTJ7a8^4HYdQr+Wy~OflA?VR_>MnG%!w`V}xFH!q zm1lkl0-;=6C&dP=i*wgU^Jm11OO}f)8yA|>vh73FtV$IT=c-@zVx!0dK>Ezz%Sa{U zC|U82FX8-uJ^Y(|`&5hP|5{48k?)^Q@^fN@0HQ=SB!P*O?rS6Z=G|CjFRbTM4lCvK znT=8-c6b9lBTnuXEnhB`$~I|_-wi+b!Y4V&eg^~@ch^V`?)wAzp*dJpJCt6GcSyD0 zug{&J)VWux6p3z|gVU*09m20xc`aDZb10j+N6NNU?Yv8!Qpo3o@+H^F70f9!FCVrK z;X{&i)%5XmD#}l}q#JR(@ z2rA;N0qr}D3SBS?XLO4oM8kMz{nW@J6qlpVf4+@Q9Es2g!CIB@-Gt+YUIc3Dw7m_x zudT>kAtML~-#Py(Ft&kj@T3Vmv)~`(cHuW53($O`&|Qez{pR`CRX)me#DgC7GZBkC31^SD!?_A;CA@ z@yO}-glVf*$GH*Ao7dip>BTt7$4S((4#Jr4G3>diTF3d|KoR`b)%_Iqx<{jL*ofb}O zwo3%Q5b}!PFuV0dphqj1jx`BNMFZuHViCK|wJ$?3m>hs%iQQVTJeRWHx(~hcWjrkC ze8xXXfgHq0?e0DNk&nz^A|sTi=VpAP1Q&dI-LJ%X5N83;s40)eK8qP2;XvDcH5~Bk z=Jf0j6bEFg(Mewhr82KtUdTWENwj1i|CAZC^eXk^e8%@BNMti9`^@Wq;u$cjWaeiBcxj7s;H+?C-)APt2GU66tFwvV^b zi8Bg*?}sv+5HqQeVp92xuY%!OQC$g!$13*d^%3 zYxn^`HqxWEWKh7#OHnkhLaL+J?5g8sXTP;(yu1ccdHF6}nVR;@L4SFh|A};C0hnE7 zZ;J^GIHMad4YzD#<>Ac&;qA3BcXF~thpk|&l+PT-!}8LcWPFeYWS)68V6x_Ex>}*qHc} zH*Sz$w3KO%lv69ai&J|MQl)(z$~vV3BDM}?zljawq-;ad#>)q|eVIOo%sY5?w_?~< zetV%vH1$pFPYOie|0Xm_$+HU7#$nT%i@!DbdxElmc}ofZb=8;tgf=gdmdUXYE^*nuP>96kxSZwm&z4Vt~1s$U_xAY$k@FkjpHYqngSC08c zy1ay((ns!*twJi^p#Ju6X6TfZaV(hmEwG3jiAy0Kt5(soY_eoFZJnwVt-R$8m_-wp zS@z3k%eIhFs)$?n>70x9?3{mIfOlbkzYosM-78M7G|q(}J^I|;vW{p_GcHl@x52Yg zm0IQI#pTq-8bO{^lru{0a_Z)fspB8EQvO!D*y0gBi{E&|!0~-t?4I8s5*)dFks_h> zaQyXK3-GRyXk7mtSU#tVkf(975rTew_SXWfIi6M6hJD7e?}D@H=dSWryaq1c%qdR^ zf7=_r3%RmvZ)}}asuW%7{ObewQmRr;1_V#asoL8`utxb3vijC1-yr6`SiVF)T}~JB zAE|@Zs6(Iob~8gbz$9z5*D%rrJw&wnd+ANa7l@pmolq+cas%MzIA8i8l}7*{ zBKo#Q@e9nahFE9WoRI#n_3 z0{T8x;eXC1Fd)IWBirtf@!x-sYDcfQq|J!bRmsRwer{_!2fN^lBtT3G?pDr_~YF+g5hu!r^Xdi(V*|E;fo*!SKvIwuMa*y@)@jN?3dh-?_ku$5($%&)%(c zx!gmFj32x8N$Z_3>;W@B33~tuYFjUS5FQbsen`g4_j>Vb*jC;sl6pz7cf!mc=(U`D zwP-j4<`}8x1P9D~)p4y!lXF>fE&ox$0plP&lY5OeEPH&Yj87-ZCm1QEYKaA`Lq6>) zZ!Q!Z({tE8@=ZzIO2Mp zOu#f#EDAK&qGvA@5Y2IjE_o2_w-v2wTbR9pzm8VN9O{I`z+pwXB|k;o(NXGO$?tYf z(eT0>v}og7ev&RKR$2JT&WyZ)r+9~OZ}-c-@jxUwgNoF4q>Vjf(WUlNzXq}{r)Tth z2dZV1o;g)ri0^e<`pr)k;69I5FsZP2?il%sth8xc#5#?M{W0=JG0jp%q#pEF9!$4z zAjC4A*v^?55C*2U6T)o#Y5FjY8P%yhHeA6Y`s}NfFjakLkwvY@&`jDGwMj%>QQd>k zT;)5~Jj#8B*MU(Q<|(O7(xsn=FCdk~u;I7-G@Sv;Hm_JRNW5Kh|H zMW0$s`cSI2YmAwyU$B4ZzkimYJ6qaku9ZcD?*=VN)iJd=hV_}Nh4EN#h&XkI#yN*5 zHv@N3>VVWDy!~hCVC-+6r@4|3IL+~2?0LQ9D8OLLZ?mz_r+3c7DY#i&;AyHo3e>63Wz=N! zETa48p%$mca5IuOP}pt>PFxn?}15Pg4i%&gUe*sg*#daq5y%N@|1LidU+#)}5#KOO~%kKl`G}F672t+ae z-YLKFG{APl?LRQyZ+H{5ODMrtL^~S}Ojz0-`D)lhj$ykNt^oCi-&Iz&K7U(77lmbm zW^v4PF18FD5$4BDn+C$dJ{Q{()1krIZ~dM_L($KSfSGGLw5L%Cz%C986KUhY9 zREq~VAb@-9lHs@$243U1Gzl6h1n^~H`A{?|9qnyU0HBw~%OWUgU&A5*zAP+#iCebS z5SR{K-k<OwwuH3-Q-G`b-UPLM{jr5Oki_`Gmg7XT*ws?Obj&e2UVfW4cW1Mkx2(;@ z%7n42TB3{$ZaL7IC&&kHx}p?u>T1!5_7fgk+;|0@275cQY9UEoTYW)`DCgE+Vin3Q zyu{Xl&FS-B5{sHuw7(!7FsBs&eL#Z0AG9&U^(uxpvBxf$PH`Hi##vdaJPXyjWp(x} zsCeq(U#ZNiL&Y_}Sd^@|Fp9P)qbRSkHfb)kifL3d?QzKL&llV~CC1UE^M1L&0E!Vc zAgQu0#<4hE`gkS`t4o`6bzn6ehoAVTNok+$jS+qCajdpj3)IPHDnkV_MpMh<=?oPR zZmcaN0n$&xLs%rj&L)~>JU2YP0PAp^Z6aAs@mCRstxT~(0|-pcY&@8PAlUXA(?tLIYb?a|58F~jCcy%iU{Q69sKZ~#qSSzBU-a)0 z^>7+T*YV@)$Qm-E0+ZkLZWi>?fEG4TWnE#rMqbo=>zoWbG}Gg#5-Kl z#!Tw`#Baf#u>y6!`VR}4OFphI|9gg1Hl7qx#Y69$l})RpP{NcvD@YM}G1jOvsCD_s zW8wkPpY=qB^v53#GUg$DOlKP2zq#>^zg=L$sTSyuPe3=6WPhAC5vHR2)S~wqd9}`CZ~`T?*qRPgl_ONRViTco}8B*-jG&1+L`mR!{ z0t6=^iHU*SFFTh+5Ov%52U66E>h{*ZRMtE;Q4tE;Q4tGhR_(*efP zZk!2xGW158*j{@L$)TmGPMl0m;9Et5e&d(PV={_3TxBKX!L9@@?97BeI47w`M(Kp< zVvlG@=Eq6-+9F>SqdEz%iA!50pk|FkZba zfHNacaC_H;%5pgTTq>$mE=U$RX_zl35R=8}4mRHoOw#8&I;nd|tGXm1^$YZ67j6r* zfULjJ$10XMK2nWJ!DseNqeRXnV5rw+2lRMdoNB zPi#UR!?q=z$=y5?4p`HUbcIlD#&cyrmgP_rfca#76=P+WFSn}!FVpuKy3QB5D4 z@f7qfZ7&to0xqx7ei zLqg$wK+o{&$*sH(o5k2(oPQzIf?t(mVP60U4EX|>qQx!#f1L!aTi%&?@)3u9GOI_m ziyh8UU&q`h2L_boM*!!I>S7{*fw6Bzn~^N$7%!I)hEli1lC(^v=6ZZ~zb+ezMu-po z=!(unw0`K(774YcY)%_JiP#%T^{-r9B?oDd)cg1k(%V;dO6-N$O7&YTdvq~4e8&$tT2t)%S4Bj;8bNJ8SiH-=tML4`^u+HMycYrG|4-iIJyvYwGx#|?a zG?l0~!eb4#X^@_}13eq67qAVjp-;XIe7Py8Gs0zQ@<2bm;&yaK2rRX!isdHHKL=(CAu?_xo!X# z=IKDc=IVD}1t{GJR2t^0hT1epuelYX5vnxIS7`{n@D^|_M1PpG0yEH0PuvWagrHEV z&;Nn`I(I+$N^mzsewe!h{leb^$00W%An!j|{2mwqP&Uk*P^V?f*SxZ*P=X+!JCmg z+LS9=FW}JK0Ly)(u?2yK{~G{|wgT{Z^fN##GFvm0XqE3X>a&0tZ3V%cx@6Nz>dr;7q3^=BK79`;ayrITMhsxI7>#~) zC3VlgB}^i6eFi-iF!(b^Tk&pKFotGo=84+&#?*(DKdn zM$T@eFwo2&L;gYw{9w)3IkN?BVb0Hyooi9nXV2PabW-ySIDbHg_pb8y76 z`&Upp>hw+Vi*5dWwRNb5Ymb+}ClUb)yedHIuXvVy2|o7LE1qPxf$6!*>%VdneK*q? zEN0duY(oS^FvHAtMB6pnk+}E>3g45#LhJCxq@5z(JdxXQXje8&-{Q;tb+(hbR?Xce zkyw1bHI=xk3Rl{do%2JTaD|P(o*%a;ee&Pig*Ju}oyelK30w^WgXC_~XF?OZ&+zPu zsW~LO!njPSdrogjA#iw+b-w>MLhMa;#Dz)Cte(^HWgyxY$De26>o^N>9M^|wcF-H2 z6{06;Z5eEh8gtDWHsi;NCXI zDxu#qDYH7K2f^MoflK<*XU7kMB!Tv^c4g;}>wOI*`MSq5Dc$}M8A^b(^qMxEEgA$j zHi1Q=Lva0F_uNymT*9f2Bqie4^w^rvfNi6n{W4%z*D88VL^mfYyl~0xS$(Fjjhgez zoW3YTVPY-*5xhONQJ`n%I;nep5obmtr8Z}WcIaa{3K=fZUB8cb3U}OeDKmT#gu@*- zag@}hzTVfaY_l~EB2uFc)=GI?r-W;%#>@89VjXwULVI$_Rfr!{-((evlH!v` zBpc$vB@Bs!JA&$?xz6Oy5$NqIzt5OZg&Q2Bia4#*C85qu8eXl7pXdlCk8#7l^n}kh zr7}*9MtS!e*BDLfU*mK#rGJ*`9{;CH^Zw5UPx6Q@nU>s9X}~qQ$~-C6>+CEbg|TM_i&$t?i^#rbP6wYa!;kpxpSJ{^4cF zoN)bHgH6{zitNo)`A)E>!?2``V@%;r_fGk8smsd%+Zbg&+_@4*QD_$q#3VCS*R3yZ zz4MY}p>AwQT__SeuA$Vc*S6^~+zOy?p-Er1NalyioCpOG;qG;6CBNn`hs2?)moA$bM<8mA;aRO*@(bz%0AFg}!8DerK8v7hDDyCv)_2?;W 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

)gI8tCXj;gsT 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

PwumL6%uYyImL)1No!O7z`eUO7G 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

oS9Nm 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
-%1hbUXGyoF7&mpNysMR)iL{(H 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%0AvGmtr8ueYj_t>r}vQ>OsC{SGzwd&FF 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 =65~T#wC?{+hUgC!_Ipuz_ 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

)y(L$J*tHULA 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�YHbr4=D%di|plZi|m;PZ*})P=WlF^S~H1nE?nA_ zsAJhe(@veCLX>8se+i%J_p%sl!_}I%LB_7Q>~&aE?{*ffd)4#5WkaG87koP zy*7Y{YC7c*n)M^3Go@~cOhH_~|7$o^-@o!!k;X(Fq7IwRN6_tg!lK`x)3VL;)7RpO zKOMNkj2&7YM7PwrqlPRFmmQ;2kIVc77QuX@&ByKhD>$Tc8hJQmOGBom{|yed4a?tT zjH8HNL$6#E;MF%9{zmEg8mm(Q%bK4zO?#4M5e<2n2P+t@Q-oD(){MLlhk9?0Qd_

Ch&`5%TbG>sh3RHVZ_!4`(Y zx1|13I-6hqX7gwdkw5OgBd9*epX5(UcFQWUY`T=0UTr4i zzh|!Qn?8%!T{nrpLe;vP^y+&oo_G%;+#1R0I z%8Ayi0eP50?M3p)=XYa9v-ZmdXZmKl^Tn??RS(=){O_zJ480h<$0{WeBF1A}asI7L z?+LtZa$LV3$ZACsUaxEY?CUV94Qa#Nb-$N0YyI}K-Sb|LW@)m5==GwtpOJGJ&N0G~ z9!O$L9;luHpE_q$1b6>+R?*JqRj@H(+NW1tQ$J?$kHbr|*8sJ|t^NJIQt1r}7BWQw zf0D^YI~i&h^=I9mUVJL@6B4)~&J3{On)X+0D&R9f(543;w)W+s$j2=4I~*zq@)ORq zs%EQykAc6E+%R1h;i2j4r)9zOmUcdjkLRG|O@~hP)_ktved$LY;sz|OJ3!gjAPN$! zhxM8cDcnC&=HIPz;grMr9ir%PJ}|?wY{V>$AiID=)A=IUkMG$md16mF`*CawKSGZT zr9KbcW&7x9wJt%fxj&lu1Pt7;WgPJTULXW=j(})(3~>eIwz;Im+6OA0=Ob(y-D>%!+7Rhw&?CajrAWwhH?%(y@n8`{z;nIqUnEoq#Tj4_#6Zr|M2=Yrm}? zpZej{-slLTGn({ti>-P}v;U%~VO!MB_PtSU4g1M0Wmb&;ywPSefrA-_`$FeF0G&e- z(&c=ng90d6zM+c#Z#L{vJ;b>Z16e`s0Y9&<;ZqNQ73^Rf-g)D%twSZv74CISbn06A z6~OV_8xD;>RgcQgE!3<+ML2y=F0^gQ|1$kyO_!$q+RiJ`tS z^7H<4M7|dz*gDZjBXF7ei=5jG>uxc~tbFKe0aU+bQr-zcXCq_)7ihzs;lo*iQn%sY*g&ttfUy>Dt_saNJGZgY4;f$jKB~ObDID& z6))dAIehh^}GAcUMCZFr^_Gg4jLmCRI33?3P(0)YNk{Fv0R<9y1ynj zMOxxY7FT}L6>vz^%#Mle!<2ED;#-gjMgmNYV+{+Qv=3AEzT&pL6~`aAM>|(|ZvGH{ zF>K54#x~#}d}IAQNVKqL_=Ec1%}VB(fS3RCbIjU17iil~ z77-`mJ$9W^B*eIHH^9p=we3^31l2e`AFc8Jmc~%-Uw?hWORk4^;#pc$M5dF|e}uHP z9Fmscyqmxr0VrPRhf3{W4#G!bp(Xx7xHpQT+OqvMb9sLbZLAgPz)h252I4kjET3x& zsfR7AhDkfiMj(V_VHSSrB$jOT828ix1Wsvfd)lWH_bvs5k>6qh*O10I2uqS>24PR% zQ#n6QD@$TA{wT&N%R$%aFn5c%+k`{~ym!DOrG$3kld?pAfLovR=78b5bVFgv06 zVub!qCc4x#4PH>!Gm1O12Tu@1T&I+5Bu=L9?(H5MyuTCi-l#~xDC3BGBtVListHa*T&hADbdc0F z#9b%SN(W-&eQj?Jn8sUHLPEov%v*cbfe6<%RkJWy5cm4W=Fzh`IIC*xMK2t?FQgeI zrN&}E=TmfcXv1e~iQcs_ zO-4=U`+dcyF7Ls3R^f_`5s$J3@Jy)%)nO8U)H}B=dd};S4snY(u}XGOn_j!UYkt>G zhm^M!Iq+VeqyE4}@lzlAQgTW9o2q=s)$qVPr1IvS9dxXSsnpy|1I8C-f|)#CY(A%S z>-&?x9Rb&oQH=`pr47NpbC&0&ffLlm+pbZXX83?leB9H_9I3Cv-xpjK=O*DFOTyCc zLusl7q3=8isY)e2mSzZf#`tV&OC=n_Eo@6Dm0*5&a)52A>~qxJBF7a#*q2bW>3?2${c^+grG2S+Gh8^Eof3^L z;6R$xC2clOua!XSiE^=B(Flgpd0Hp-ynqEKnV9b{;q12{8N67xgH0B_C1Qa$xa zf2shc^{M}TfV@3Kn%c#GH}A{;Hb-bGSzq#IW1Gl*W|xnU=;w<0&NHf5J!1CI2k4UdU%&f=eJRV5_u0 zsj3xhMmug{3#A)ZCfe;0Ge{;HS-R0fHk!e#&*&fP?T$ZW$?d|Hc8qJ%Q`9+h@&SG} z7Ss6GXALisLwp&-mqfoZA14YgGU-EF^C8nb3qwY#Qnf^m_%z@71hy5nagjOpkMZa_ zKCq2PTBBb%r#&*R5oX{EJ~;BPL_FS0-KRSn{6nwAJj9FWMt=9AC5`Kn&cEIFHPTTw zjg40W^O~lsJbuPwP8WTIf3*uQxie~$60&FPEkj*;T*r|_oc*I>)~(1Tjjq&y*FLfG zZ}>Z|UuLvVuqL*DQR;?RTkDR)j6JTvnHnYH5H>+Fv!&aOh6tiU;5#eg(ONH-=zE^A zlNncNJ?!1fVDJUVTku{<2Nx>f5sw729@}Ici9J5+TfI1DM*r||&Gdj?9?Q49|GgFH zP{O5A%l4EWI84SKNK;91c_K3}&iN^TdQq)y2=zp=&QbO$KP8fOv*}u*-aK+ZrVUI@ zW`nn^?MZ|SI~RGg`EYO6$iE<(+28Bc(^9f#$PNluCaV5(v-iJvd0!|KC5gO|WO=f&lrq^LOy? zv&Fm2Z^R>3rTvKU8-!oR;qaW(Xz|eE{UGL7|*xb^l;yivf7##cQXGTcuRuYz@sB^A(t7mwC zCv0;s#r$vWNQT>)9Z(U+1OHMNT$jlux>x>|1ER&{<}!R$3;LwH7uz)GU7owztl)!% zw)|VB%5}&nA&CI8Xx_k|jn(7bt9Qs8_P?J}&rkPYht^mRi!H7uw%g@x<91IFw~=2Y zi&43rx^I#*WU*0p$`kp&y&bZ6Hk)s5pmiRe%W(1=&3Vp07}VuN3`g6hWBiQ2W6Xa^ z@(LpK@;l|_VfaTaY^_PM$noiiNs+i^5dS|k^0@w+cR{%{=niYno1=b-R)s=zO4C@d=LLCivH2 zm@HcgxQ$K|s=R-abUw4ORLsvKWNZ{>*w1 zz(97uO=#??pyIQ{j<7gUj^?r_!fT%V$vg_bdNbv0HFqHQ11-5Di#I&1ePK?HWy3zi ziS$Q%vdVN%C%#%4~NR5F_(N^EX2CH8UB6r$t%syZxu?s60 zKA{`2brUzes$8y3+?tYvskaxK&b{@1o5nB)8&wxMz>?P*WdfG>iBJ?=yx=9>hlA zgey38i3pjkNGkmg&UZ+elS?Pdy!#PECNrbDBIS#T$T`;`!-e_anJ{Gg06j zG`s7*|9EsE$gAcclQ0U;MSK-NiEIiQGPrn2PDu~79-`Wybct2DOi;t?yCoA!wLEwn zFtY7{vT|ZH-b)Ac!r|z%)*V^%Q=JIQDVc=14xk(XP~rI^XKpv?f`$DC)&k^T>SA_qw}_4t2O=bbBDxF{!?nD_k;UL)1z8+ovG4EO)v4J4W0$tVs!AS(mQ78 zGyKz6Y|r_^1z?ut&8UQ+h^g1XfA^`bI^SN1AU^ zMew8`g2ZMNN7RBPXQ0UzU3s#Wx)b`6A7B)D7N{AG zVNK%}3@CSpN20bzT4Gv?rB#Q1Hqa3liRy_ygESq*u)@RxE}C{iL?yllE=ny(-)Kts zUyE%SIEfqnuquvdk8gap+?^`V_~7{|o-OVTsy|q8KhD_9HA7Gu#+>kw#q}YJ%>IIS zO0|TJVNc1VoqDj`tco@x%EpPox+y(&nJ9UAAK|kiqjZB(u~HrteD?7H%a^?DrOxQ5 z)8Ejq%tLr$DH^-Pvc}27W*o6!cY(LDaU9ALofnAXs4cb{$`s~6ZjNL5e4D>8$tQfk zV91G9efE{{zrMNx1=$h*0!$ncEM%Cz4wN0teigj+t|C2GiZQ{@LO^2WX#6V9;e;dm zY(W~U!~qR_N0$zi;Yhe(dQ|8~%dSh6Y?a>&z*~(_m7dbz&y=BH_DzXL*9s>u60C*| zLW(K`3S4F09ljQ2`|6q-W!lT7dY*=lcimUXv}UKTP#r9tyuIk2CYagY+#ooJ_t=S2 z_c3SGP4Z;;xBKkxGj7KCZ1}@(;6wWj^Gf}U}DEgLeWK|6e!iwlT)Z)&NS145~b~)ar8|pc@fOE$F z4iQNW@w^lVEn$(ZD6jb5ySHTh6pqxls8vG~RVx#-Az}#*$TM_<9k7=E9T{&Vdh&O$ zA~VDMN3=FYe1@Lpr3SVg2QnUzPZ@e8Fp!|>&WfbukN6+rNP8WePB3?Bmlc1D3i%01 zP%mj&2VO%)x(ba{lC=H>mk;iq0Nn3iADTPCF)uO$tz3aE1xMr&)K$~WP_FRvA4}yd z@s$X5k`DM+TMkF;gdX;+l#4=JQ5!NZn9q{*#Ltqv0-%J{8vJFFKhj+Z-}axBH!{#m zP_hSs!PjfL0>%Q@h&Yl?ggb**=$cH*@FSp0D^#MrWTcyrNSYMQ4*@-3eCHrDwBJcm z_fT@54f@Z)>J^wN?2Eo=GMBu8(3Af%6SXV&h*zJk_#jkn3VVj+@$UNs%jRQ>$W~P8 z@TT*1k`dW`pwS`!zzftUM0NTCRg(%Y4Edhv=39W8h$QUl^(DQ*fSRO4A?p=6D2Cb!Ct>hW>ns=~Ox>TH1b* z*cqm;T8nTG?2;kBfoUaT)7U7hSjyriZvQ?g+1znajL&X$qI=Z@a%T_+#s{KJje6WX z&5D#FCW;&|e2N+Mmmfw7N56zkxq@Ouxo#ZtBQaJHLW|MRckGGzwR(g3wk6bsN7{za z?gM$F;Fsj+bTuRozTmEsOPw^Mm=^5-<&s>T)`871b$wez12PAdlLG@e;ji`DE(%_y zE@2mhJsl;oDMNRQ>}&pTuiKE0r#4B!5rH!U>CBn}o4w5{W%|-;jO~rmlz--!^t1zC ziU>)>P&^?z4Ny}?2>AX0mhN5gyI8`?#yCUfO*dT&*{C$?re4U)kR~MFZ3R~vD^*mx zs;886d*l&rf^yV)=tf=2$!`wVTkq&#w}8b$+9sVNoc4#xd1+dDF%NgzQs26$R1727 z8MXwn2p_or+8KIc@qG1jE*KH4f??~7ic<>FPt`^>Erq#c8bCB=0EvB?$DfdtV2vJ^ zQ67hmAOfQ;9d%uPldjm*J@7g4zYMwnt5F`eMIa=903M_@`+TspxlW@YiELe56@)fu zR1Bb%F8IcCg!{vwqN_$Vsij<_bkRtQQ5OcibFSx72ETc0+zZ50?_kuedAksMX%-k^bigkgZ(FcZx ziMy9NfSCJqTy*s}ox1V^R*@^ooZ24z@>|&{#SP_O?xid^-*`KeTu`=d@d#+a;_n8H z>~tp-gBA!KsgU^P&S^$Y1-7#MPCFzSP7=bh_S1y zt>~K4kIZX7p>Ws!vW@zwPu&ycQf{mJdGv`*y0E=WpL6ZKNFe$eX}g?gF70*;MY01l zU9#g@%)kX8i<~qge84-mj96{W2UiiNi-YrwaaHzZ+_Xy#O1_F~=|n6Brl^_XyY)6A zvC%@!;F8Q$mCQom?LQ~w&LDJ;C|Rb+&^^$nhE1Dj`f2QVh=wfMsPn>j|K92b6*fc^%uPh znj4)MyG&sITiY)r-puqOnj{)He}^x+206DdM_|PGKVlPynwGzFm+s zGO3!n;Wu4;L-_bcq8@mJzkuChF`+x@8G=o3lo|anoe?~J8RCqcHSu0m1$1&c+LMd4Ubt00?KDieJ|C4Uu{8b-69huYP^TwK z2NrQhot)MjH@#`Xx67 z%2Hk5M4OQ~x=QFG(}TPwL2;QA;p?Yfu<74!zp`GC8gBJg0KmeN3^p}h4*EfaD!44= zi1Kld?YX=E4vwW3c87o>$q+SLxc2WeIkvjt3@5UQS zuR4*UIfN8&q+Zy5ca-vsz8@KtnPnfY6Nm6=x4x60n8%DwV*9a86dYr9S8rc;`;wwa zvPB{YMwF=`XV9o8v=ikOoS1kB zZQ%X{TRitFL8BexX)CDaJa?kKLBzebH2>?9pCAK#s%Eynw~CEov;TCY0$cs9uk7zd z&E;G^{hRE&KcsE5%LSnE1n!{}l|sPL?wD0!( zV#qt-0ZZf#BrP?6@?d7>45b@H;18(d9;dYNm`JjNmdhpLpVYMQYc_+tV)ld=Ykt5oNM#^%d| zms^Uu9V-B!giv!4N9N1>oJjiXQoN8(pL?cULGcsQGu`Xgs$YpqG_Zjt$-_wepIys^ zu~wI6TdVmGmWKP`_xZvIB zf+1>M=&zO6U)@Q9BV|8%AHS%hRP2S!NKx>>+C3fmVJQnVQUvD+2~MZVEhy@v{19yq$_&2j04#SpJ-AgW*z#^W6%TWz(g;}-l@ST*aqmcLg}~h zity)6GpOWcamA#@58=I}2-Xn50nGG$-Tl5Od)jS!3-Xzk4RDM+7`h|heumi4_)q#Z zY|-G^6vT*(^?s`ykrzCiFdvaXUX$G*G;|GJ6-qHhw2#i53dtQ5F%Ld$WnA6fA1P%< zyPJ;=b&6*0Gke6#IYN4(>+ezOo`&UHhW_Kslw%&t#@MEtdDHJ7i{TbO=A3@XqIFJm zFtkY!tC}t!sSR<<7V$%})RjXhxIsG=DcCjxNnI1*-Q$4f==y&bF-SWL4o-m3@ywib z)ml+%TihG{xgBK6MrTN03J{-yQhZYXXS*Egn;7~AI(@VPLbo-ZhvVm2TJBK6V75fw0IAVsDc12GcgTU7*o%W>2F{-ChbRVL_7)iBqs; zPb3|P`P8RC*i^zwJo2lwZjTpRg|glc>i2vMp?H5W#a8>M@^Jj4=Q_%O#YqoP&M#xN zTL|9}V?TodrWilo=!3;RrS=oiV7M297vM}01`@~d?}Q7Q^hmjAR$vI%C2n%3_cZyU z-_w%JsqTF{yZy5@Xb;FQc$k~ozTO@(`5GLRf4oP<%hGdR?N*}~qh{eu_*F9lb#Q}D zPtf3Zy*)xYf;P&GMy&{Ygv5!v8P=qzjOks9X0PH`WPVvEo0%Hz$UDA6R%g-$7#?9xZ%Uv zIhl4ZKTPK&5a8_dw<7qoM!NBGyFGm{sh0xYk@`$f>GaZZeZ#+mS_suZ)H{H;&_yx* zeMzlSI#8itM+_kp9-^uX$}tt)9H>Z>nz=U|X5)@qaV>DAdCN)&A?e0=!f5cK^+M<0 zXcxT{53CP9UEWhm(2rX0tMH=jAeubdC+hY_oTtFv7&-?cz?y$ohj-bwjCd@e=FM2Q zrjf3yo_h14Sr4lSrgU}> z;dx$Mh)xvt4%@&=h$cnu?+`H-@AGg5%jG zzNw$RAn^*Ss5}XRN8D_WE2Lp=o49=0X>V7MJWCbAla1^KE{(@hOrh_AKJq$lgKbAc zkdo#Z$FB7oyIXX^_u@{z^6Tl>G%-nrFP=Cb zv4MyATLI&tp8vX|XVIpA+OUR8Rx-ShX`ldZ*5f?!%;@62_xE0dxlJ5{+Y>{+_v{q+ z8%M$l7&L=DP6kelBKSvaJ$F{U({D`9*I0>T;x6cZ8{%E;B3MpwcIl34Q@=lad8AV1 zlgVELuJay$_jj^k`eOR!WbJVH%hX2z3hGPPIj5mJWFD>a%+2@y8arR@gLeV)B1cQ* z+#yI4GAFoyPZ!LN{#M{7cpioHM?DTC>Wq~iA37h6N)ebk=%_abz? z7F!~F_9wkE$d76e_C_w{F{8jd&(YC=`D0?!l)nHwt%+aiq+LPLD@^sol`i(_0{ksa zc|9xc0(Dnc7P$FZLuz(<7(7Y9^X`JE%`UU4WmVJ!epiPTmcW?k_QVz&5RjE8&7@SuRVK1qQfrCJD3@9v+lQvY_z-u~0Yz!7C`* zN1uiKnI|ID1H}ulisb$Z(n&Ej`YmqB-~%2*nC9pskgo~SNzv8FFW%hZE?^vBt|;wW zxaM2`-PeQL4dV+rp-pJ^B~<=1^khDE^7Xk>xK<%R{ExC0U`*!d{67xZp$Upka(U4I z^}aS^U(o2Vej1p_6H5w@d>-QU6A`ta`#$xayG@*`p(dynJU03Xi-@{%11tI5J+Jr% z%+h0~HO}G1TTA#3!qS6wnLsfc6R2XRe;|&`5SIQJm6he-h;XlmM?UFigSQ)gU!B{k1`j#FMd6jEuWr!X71<9 z=q3BrZ#Hya_;=3_$#M9hjE@+@p2;CaHa&&gV+|EmgVVR2)x~1w4lHvsWX}+O`Nd)fg!3J}g$Luh&BBMZTfH5&4Zrffblo!V4ARjo01Q&( z?@lvu*n4B7rG`A6^a@LS0t#1{DTl9phdlF2D(VN^?S?MyfK$xjfDC=R)hPQk%w z^LVPtk0NNwg`tLnGZ`18z(o-zQ75i~Ln^*Sr0iibPE$Fx2NNUcaL_7 zcHsRBmLfL6-egt^T11$*uaP}VF4)EN!DH3*g1g6sQvoBCh(Q23y$$g3s^6*jtP@S zbxBpdm$jh#X-`ZXZN3(A89ssQK4N^^)xCNDMjIGOr|EQ|n7$L|7CNoeireIsoyCdJ zw71!h6?q26&P9I*lg6C%-OMm%_T`qtR3qhq-xGhLVm4l<15^0N^4?fw&17?8UfSHI zEBgXGvDnc2-VlUTC#;et>s1yz9U0pn$eoz8b8X(py zXf?7-A?~Ms^FQCWhHsgs%YO!4sM3u+)1D4WQ*u+46cN6}n7Aa{+kyi-IJZc0G1~aV zu9HpXrZcF09jCiX;wf8DWS>bND^MKUbmQbwj9s>A@k52vY|cXq-2*e%wV=TV`S^** z)dnoqc_e|nc!sz78}*!UFqK+y8Cv(?M8XrICknFFmp%%g(Mc~P4ytV(QF6yH*qR!W zt}wK<1o$ZsiC+l|IJ33^;AfPno`@Wq^0R?u=U8vZ=JG@mw%rzl!4+B}=GkY@2W`|5 zYRGoDOQ(X2b44w3d*McEy`oU)f)&yFq5hkpjOy&HNGN|LO1xY)FZoUt@Qq^<*q=#P zmN6WV+J;RDMg|cJ8ffH5I)J-@fb%Lzhqy}$aaLcStyy0;UM46P=DA=%Xg>0C*-4V7p$>>sM z#0Yh%%ReRK)J44CUI_CbJC!Xovc_}O=(CzCD$j4I5dMrSL=Rwz^M~&*gmhjaLZ=-< zGJLV~tn8KrR)VS$;Bd;_Ybk#j(t-l&@j^HS?-d`CEaXJBrkB{H!lET^KkX@5r1_sP zVs$RwWxemq#6wP?7bu6{a``iQOwb1gj3vA!;^bGhV{>~qv_+0-7&ml)SjIj~#sy!^ zq>QdE=L4TZl?t`ybHWMDg1M_SR#6;_**bx&#ML{UxjyStgT+RUv)T+x;(KWe(m+sTu5|j);k2wqks>Q1nlUnSTxa zLwX<_@OT&?^j64owz(Y`vH7<{Yd%O^B$8FKg2T(Yw7eCMSm!c+P()?jgOf2 za@LNiA$HXRRDhBdHsOo$y4b=c8k85v9lQ1;y@xo9=W3NIp0L?D^Fj!*M9YMRupU;x zFe-o7t;)`NO%8Rh8W*bGOHV?${|4wC)%23!BiXlNs2dKg|4{jo;Llc14yryJBGWwJ zEJ!2&;bK|HRH40YwOl>lF2%H@H_{Bxw4#;}hFVgEOF)##i};{SowTb0OfsaQPYS6# zyp-9@T7m+2>|dusLh85h@)>qAy|3D$iM9S2WL;QH+*;KS%VzeAEHYs%7SY3y1=r4JxOr`X?=d8=IQj<% zA#R4AoZIB75AB;LM1@SwKPY+N=Ly&gJp|~>J@S9s{kkE1M_^f6m{{h`UeehA7!*SktOG zRw?a>5M9VD!!Y(nz)-LSxmrL6#(|98Ja^LmUZXwkh-z9=tEhsxlueKcj%7(8p*4-K zS{1G^`7HU^24LjmT2ZcK*t_Tz_<^ocaiu3C ztH7${H|wUknwVS=53@vS{7%rXX9W-E}J+0iWx zB|Gwb9hQN%?Aj>P?=Id2-z(Z&KkbFx0xJTJNnXHg1n(=z4NU#T?N&~BDgPdXMO()s z6rE<#dZ!QUb_^M;Zs{R1u@`zYys(@vxFqmAbcG{ zKe7c)pyV6&cTlG_p(vcr&`;F_>%gYkTgtAuJ@jjSbd!y;UWt4_31>!6Hk|c%uhRfl z`J_Vriy4#rj0veWwE6K*g072(?1lzpv-UppLY!q1oyB?8U!z3ZGeX1 z5R6}im@dZ&T*Y|c{G1#td^(+UdN%Li%tg1E##kJ6-Ssw=aCh`#kmMZlaKkpTsyHANWq_30T-SHU$Yt)4(bJGkXUC`-C&O zf^E;y9JOvY|EVcJHfR;{M);hE_J({`RQI{+ix{%%9h%NDDAT0D*TF#i@F(nqUt`beG;Nu9^H4vJMYTqn`z*=R*|63zPs5wt1p*&%ZD!d&k2b&MvnFjTJFY`aP); z7&guZz_@iKJi*e~bo2s$9)wj>cWq}Ou^-?ZUfhvS9MhV=F}Hsz(}whf?FYl>TkvWY zpXACl}R)&0WIsw{63c zEyBHHfk17@R`vC#b`iH7MIhR_hMoSIqXd1hg1hAJfawBzBt!NJ`^}_a|5&{==^Ho? zWqf%O0ZvL^hdp2>C21vi_wV#VhpO zAAnH2aWkLAmXJ&U5~e9>RI8wHR^z212F#8MZMs$E6`X04YF(8P-_|-X?y7+Zbx-LD ztq^r6wsg_30(2Re7#-oWDZ#H>2oETZ#SbyjRn?WRTo-76p(=+r3Z>jgd*G{6^{c%j zjE{eL#+FoGVc;V%gVFb+#UL80d9miH2l1C`6on6QNY^!sUzw?j(wzg?VA){U3&}FY z4{Qc*8pb8SvU+uci@QP6tV>zSiMxM7r+|4aCqK(rcle9@cFQ&!wguQ2B*n1Y)oJ-U zg!<;MpRpuf*cL=%yj>1JMr*sI*j;@(^i*l(K*BBp&?*U zfvh{ycz%CDzTrIF({V_nSWrYj^Sz)i5DdC@ATWxJ1P=IWd2q3P>XHu>N|aPE;G)H2 zgcuA0hUJ@`cmN1^5E@Be00=akYA6^q-2Z)2rBo1j91cTq{$7j7? z-{x)UWT8r+?1#la+4%f|5aY%IWtommPE9v2C|X7XU&uAh?1@&-=nvbsgZkHm^drN_c=*rm(XpBtH8Rc( zSw#-i<>;eGX;4>a-qD2NCe?86o`p6SU~{AG8Vl3OZVaeTr&$(lmMDKctGH9|5Ur)G zU}-5s@}^KLa&?&~S>_yn+oC!pbNmQ6FIjJr3RSieX*Ly6!GtBO+36{*RySOt5YWy- zTe0M}IjJwTO*MOJ)m5;TC_tK929Ahsm0c23;m0l*cW%sXY5=6P>tTE-ds|L|hPTB- zQ8tqQ(2F7q`5DyYIIht&;q_N-m%UGRt!9RvEu<^8W`-L2EP0q@t?OS_uP8bB$J~@n zs|FkK(>iTK^69=rR_2Txlw<+)me>(|C~^dkX9&YsDvR?*4m4*-bC138sCn={3h*es zcAazU`?xtO~Cg90dNM_}I&G4f7$S8vP}<`F?X z+zJ}YHjDR%6Uy0x^O=pxXq9&Ei-u4&cU%n=g5n!A)CoO09+#PGMT^r)THeBWP?l3h zvsjnC8z0xgyP5U^& zHQW5w)y6WU7r}&&QP_c?zK8ioFp1Q#$NDcHjyfb(0vTdT?nEI5XlXpi<0=|P%Hfo4 zy#4)kqD^IU+5IZ+Mr>d*_U?Yc{&>ITZ|8we4F{55;OCBlrc(ORhzl4ALaz4&15A=FxwobrAPI%x*5I76GeDT*{#vW0zZ6v6`PU#`6etFih zSwFII17#T(;)Fl_N57G3ZB_lUP7z^QgEnm7N>s(~)~^%YvxSZ%Sznt4gqKY4kQ|$; z$2(un#W(DGu!OB|Gt4VVy{jxjjecXhi=i(${WM**bWD2^G9Q9e+ikJjp&H3jRkRs4 zd?=CT5bivG36?FP#(OgP1)=-&@*D+R5;w9@ri{Dk%o<)%pqo+D;NU`xqFOYOO@3%@ zbehvp88B^RsbGj;&7_m1qu;2MGJ}mCYaeN>V(DzTmn)jhxWk}Il{T5x$xx-!EfDN+Xg5@v3m&>S2wwdr<4Rvg!!;4BJUXkoFAJm)R$_zEa2v=t?Z}a4VEy z9@9gu!3Z~&x>Qg_$P%|KvcC|@{f0lK;_6I{Vt3XKN0fTvR>H#kt4px->*nv5?49}p zH|I4!BRnok`Bxoh{IsGRt)>V5bA%=m>)$jC^I5zKCB9U^-!o3TlO)}Q<^x|XeMhU` zgv&_}spC%J<)fE6D{qCl7J`q*P7{5vP$vtrq8vq{pBV)fwU)5kQapg=;uf03`t*5Cnbv=zH%0K0iybL6JrIa2khQ zl4E^DYj6WMu=j4STld#ra$IdD^7#Quwa$~prJ_w-;eY%V3VVAM>>MX zIP^HPkvSR068T;~mYHTm+gxQ@XsmyaCW&99l_Qg;pw3mF9Rjs_leh_SG#soXooLQy zIcolcb=so!|5{jt4KxjpT%oWA)u52b*;WVJ!IY)BP%C*a{V9oD&%f`|um30t7vsZ$ zW1`$Y!e}vPKwl%zvJA~qH342?6VqFPqoE`xF$&RT9UA1$b}Y~`-0Dogr-u8l;CwI) zU&EJ|)YW<=RD5tP=kV?Tc~y^{-Y3ZOtbTs<#hCsJYj6-^;kKQ2vJ;_@LN-lngZwzP zfyi=i4KaL4muM=isU_7%z8U6?@G|jR1W)zH{VTcK;n~4&;3nQMH;*jR71r)+br#Z8 z{0)YG8TItxMDi9Ua=d8I0*5@6`W5c8D44C_{!yl&h2GO}@iLJz!z{7S+rZWpFN6oM z?`vap?`1g-EMY}((e<*%?m}P0oXfAhAXoN;?FGm9&*S(L&$A#`)5gi0K27> zcB;k7z`908ZUe7|P1aznT%|>p;HeAOk8Ez}bv`H^OV*O``Q3I{INe&^I;>QhU2%^Q zm%6NxzrsF>$~+aTtJ(0T0ZCs!>44J=iutBMzcY4g0Lrtp?Q1dAUJJ*gupjwridL|q zeZ}Z3dcB~Cvabmq{>6ap+}qDxd`MDN1VsXxu%z4Bp?#HJxc(oUyY(K9rw7oRKT~SC z_MI09rsxaX50mjbBRx&kpESfayq-Y^T6g{#Rw(9g(m^vXcf1{&8jQQEjXESISnu@!32TJTe3Uk@<(--8k1z zqf%@}lvwf7Qu&GfD%7d>2h@KT-LUU#5t_ld%L>sEWi>fmys5yWjMO<;MYUO0)GpeJ zE<~J-sqgvgyzTpm4@zAa@XPhzB+k^;%?(ZU6VkXZ#gWI?e``k8e5}S?OR_5G4`~)f zJzxkHAzGB|KpusRHOi`sqC>X)EmgP_c!;Kg!%H|xwH(;XRAm-LZyH$fuqrG_k22EW zU@at)a^3gB(T&8@%aD>|?ZT8Baw1XVsF?I-^swp=(P%IcN{uvEyp-EQ2mIY63q|Fe z#r12baE!!rDXQ$iK1et<3n}uI3;|teh>2h~57G1VVywj7Ry1zYPftr%6qPM^7-vv= zXkyh;1J#I5kE1^vpjQTx=@Gm!dOS&GO;(Kod_o(`L9p#y3J;CU3jy!dk{GI-6$FlI z$>WBW{Ur*QVz-U1WNGH;t-qt71tovGG5(a!m^`xEwkSF@zfpy>jilOSIerf=H0KgS zZ^(%qtAz8Q&7wK7mG$uV?Dn|*$!5vosh*)4MnnZP=|?peWu(tBBf&T{8WdvlOoCwWCILZBsI3voCL4ZY-N*XE!uiukD7Gje>h3_Rn3)+5 zaYPCIPbTYi*h{?+KpVXgfxB9;U0Bo2xj{>ur>^ zRDw&DTfM5vR7lYer*xMNwbFA0vkl3vH*_Z02MX6riSQXqq%gnGKeIcJ@bv^rA{g*I zt}RoS27XJmh>iTl$x>=$$W#UPC|s7R>JmXu^$#}SWE>XtlHe<=iR3b$;&J3HlP@dw z*1vGVF3c|ABZn)I0W@^VJR-mf1#Fzl#=a#uh14dswr`UYC4(GkbjX*;6A^6HxPhe+ zNOPLiduvMk%$zZUPBqo*v7o-GMeF@njOw|1kba|M->^gk^I zi8?%s8*cUT0_DfX1=7CmC}0V)E58kJ=nf}-+k?nUeb(zOKrV6pIP<9M1cRFYc4-b? z%71BXQYu_zJ$N(LyIJfBCHl6GjZfwD1GLcVd?{n+#Iv*`^W|e>DIH2vF=jRfpxG

G;ZaR*Ze5Hv4QX{Z7b9Qy)sQH%I2E~1U0B%qwK;|Z1@%ML7R9(g|qs4QJu%(#076|PxD;d4j8wI zZmeSZy(>VmheI+^>FO!*Uks2vz`A35kbAb$IO=iu&4KJ`iGd5_uqq&sm+;j{*5A=5 z7erafL!tmFW?tV#LhJyuI@tGyT3Fv9{7TnwN7`1JiDraxfS3$;WmKB6EG5nHYd4rG zvBK2e;)}{@DJ3A=0@%LCcM+@Cb*Ktpccy+*SMPV4U-7(Y$F+CjTC~?jO|u z=%*aGB6xv(E|1SwS_$u>L#|-MAJJSE2=U8x#)gaSH58L^q44mw9YrX zF?4FHy@60Gm&44?RJd8jAA5oqs24nZ4W3MpXbvxh$dv`SN&r{=X^<{?p972x2UuR2 znQ&@?MQD|DHd>n~bS zDERhql&mGmUe&+?nh6@UC}g;KBy1hTf}hVV-BF}v5uA)N-%N1~ARLz<+J^%Sun%hS zM?^-ec$#>c0)|2!u*F&dkf*b6Pr4GZXB&*C&O#4p!EXzG2>3Yl6*L)ShGn^ zhGz~CX(D=h1!=#B?r!B`n2E-TIlt7yujdQ`@&IER5q2T&8y8n?Dp&f@#7Ck{=Zj_ z0=+Tfh>rM;2w%FBKQLFPln8zznmY`E?u|MsfKQ~89fp`s?GKvAGr2~;Y*kDoS-A?6Ja z{kag}xc2^HhqTKP|I%Mzhxvox_c1kG9T**nrVxd8TA#90M*L{^e@MFOxHg`rjXShB z!6}8}P_$4yxJ!adafcR{;_fcNwLq}q?tFpbUL0E7DO&u!zQ6pD&uwlmx$N%DJoC)l z4)Ip*J-+^h(cKZ&*={p9^7Ib9*3*?{C}60BkN&$4%YU%mbcJJFKQnR-kp*eO7yZ{n z>~{X!u^l(1;Oo5Tdw=%VXwOP&z!UIpOKvU4Kqw`754Gr<_XnIWtG*QTUfn+Coy=Te`3r+5|iW%L8(=oL@r z^1S<59QEb^7E6%$CbV4i>89KbbZx@oktaJBGHl?3RxiXcIrQ+K>SUgxaD3{2dsj$Zzk9Kh1kDMy0j<)b!^A>T90QlM*Xm!{(8x{UCIjjV(}ctw`%)i$*%1Q`H6x< z1oyz&9He5-eq$~__7?k@q7O7bv>QIYKW`nFymb2zChFStEQ}oL4t$;wI8mzY&+=kv zuxjtU?(fZ=##t>>bM-Q3H$4z7LF1;j=dx`85zAA(8af>1cyfEr6@BVOZfQyM`_un- z)+fY7g5Fm5N`(ICx6lo8kWk()KlP`tqSM__V|S9tk$tzcj1R68?*cBb*Cnq#>sZ@K z;bRra!#w_?n}1wfCE_qgIlTVrF3w|qQ90KhJQ0LU@*oHsUtqnQ`n!@7RJZSJSq(bf zg)FlERYZ^90dX_5#DXb?;^ERHQEEy`$QKdl{A!f(qFNRgjejU;oP^zd^h76k&Xo@o zbpykm4VZu!W5zJg3s#kXKgCy$!?oOzP`h*V(*52&)#+ex78rd)?O9`A{3kC?W_{4m zM8{V5jiAvJKa&IYbru2b)F!|l%;W#cD2*Y|HS|7S9O3aUm~`Q^SR-V?~@VFKz}uST_E4duyh^A*B=-MpaGlcu0ko)SP9 zqZ*C#F2=q401att6{xz53z^xOLuMw~prko?&nD@;z9Xbo;B zCg%M!_kb$>`l0f|Q93>-hA}nJdqSd`1!@030YU~IOAUOcVIDF!rTC-FkGfd2VuYu= zg9CdwKjJ{fe&R-%c)<@>XCFVcmIMK?DrxCVnCNk!f!*hl6ls^*k=O?sdf$p!V4PoX zr!Y>}k{Yy8oFvY4lr(LhXC|SiK6i7%vJ)k`Iz)L6Rv@U9>K_3 zp2=e8sDf$^&>!T-$HrLjxj~_N_*izC*4K#3AfD#_=nZMg?UHOGyv)JVqC@TiO@1{& zS<0l$-bi6KVV4Tk?gk`S!k}A;Ho|HulJ+p|R~cX* zd~F*5dflI>(#%%CxHMaGJ}4qZo;?>%rzH*6qynr^LSqz~IhcF{!hzl6!pwvMEAUg$ zw$Pw%l=Vx8y_>qS&Ic>IY;D~sXkng&%CV*adROp<8i&KQt(p=Hm~)lL98zUS2Ws*z6Hjvcn!oHt z%%=jslh%V%%T}5x$JA%+?n-C!7i1;nZoE7R<||e>Z>rNm@GR5#{USFVG#)l0tj}k2 z{T)ksU?6d**Irq1=z57N3P)leJx+;{=2Ad1=TSTAuxleQS8*p@+^soQbhwGvv0#h1 z2DJm9ov7DKiReKiED|yLhqy_h$S>2rx8BouhVOA%1b}*ni=-O5?$6OSx-4aY=&hxU zkUNm$&t^iVrF`%Pqz2B)=X&h9Hb~j8F{TP2=}&LP`ZFzTT`4w*^@aD_3GHCRQJ$%HGij3OddVZN7|)!+!@1VXz&7%bf-XW) zibeecgL9QsE7Xf4wT&cjK1caFE=|M7a?}%fTZtOR#{4JXQY7*e7XGpC3CzMj@B*2?qNdh*!ajSIYJ% z#+#yz_r1&}Zd390wl7E64v&5pgKpqTN&+A^_7jKAtq)CAdsL9dOq2uNYgCSd!5K#{$D~N4GFID&P@(l zIh2>yqvVgW+d0!D0%J-3YxA&sX65;>7)?T&*+&H)(nC{((*uR+HujtCQzwqbF16AA z0^+B1_J0{nA}N51gw@AiZBam^e}Z{wS)CQ|woCgAli!KTfddDQ+PFO~sSz03|5MB5 ztLuoc(0kwJFKR1+%KL79a_xo7Cq9TEA!0)vX@*~#vf$424RsU{ZHtcI{&fX0&iu*< z46(ZtUCXWNdlY`g829L}d^#5;6O1QecbiV(g?Z6HxuTUzkDw9ds???5;_QA*@FMCz zRhynSh@h#zo5%IJA0F7?=4ILRT`8GGR9@Pi*&5LkG+-6wLib$op9ex}m}nrDT8BISZ|Z zVsH9=DZt1d&V4BUS)y2(kKR5$l8Fvb){yDOy&%%m zdopmic1d4kIRLFV3Q9r5O-Ig0`BQTyWtl6CP=k@M%;)z7K9Yr=3k6B~I!8+criG~} zqMnvlNkTxbJn>O2ySXZ_?Q&+WX+GWf@JUb^U$aTUDJWMK1I2pWLB~?aiL_&I?sU4g zVqW}q1G@`=2#y%eq*f9jO+I~*#HtIpb*X`=-8h+jIj?UJ-M3_ggrZ1$?`8UL&8hbE zk@ol9yx*u%y_Dykws8DaGXSIO5|j-RPL=P-by3_kS6x-7gl9mEFv^?!71!Lmpmz0H z%ax<~dXWnXt8Ufajy5UJa(d+@ZCnI3FHc-ORpq@mFGUDI=(9<>g^{baV`zT74@#A` z3dpi%3ptYk^m)y%q-!Nj-ZrY>L*I@!Dy)vP{rs}B*6b1|#&bl7%QiyHyia83es96l zy2|aJ_iqT74!5Cvq?T;%kpfeXqC&I-Bi?C{B0dMJaYJ?^f;G&jW6a=B{XO7RsxPv( zb@bgtDlTP05LKg~ql|@=BdLadULArV-ZDg>j*HGKQzYn@2>lWHso|AA;w$~gp~9e= zGL9Gw!Fa^5hC&0`!qWnfVfWAglg0MZ&8sN8!&}5@srqaS8*=_`o4?s6i8b@54~3E7 zq6c~FWs!e3C>xuvFivc~!c;eJqPWB|nrPdUDAhD#dFf#J@$p>&QcgEbnGZEiS93`3 zEw01g)xWOU|GK83dG65HIG~+>Wxo3O zFQU~20rCWDn7_@rU^$>om1^Vz&G3?cA$3SXR=yh#J7cERW*%Cl>w64dw)vg&hJl#& zNECPNw%=jYJt;&mAGrasVl-}g)3fikY-kw9AYLgz)qRiDA!NmLkqc@+Yqavf*fM?zOH023DGLR01ugqIyYsT3UZeD0(66kWx-C z>${EZ8*16Gd^;)bsNk~H;%C45c~ABGoj;9ms@tcB8H?TK%VQ4%j)Y$?AZIt&V4PiJ z&VvfJ5VOPBEd&_tR^IQwVmIq6kt^hHFALG=z0f`|@BEZFF#RL8S^v+|EPff}Z7PrP z2>AWO28}5VxS#3UZpk$k>HHR!;9a2r9-NU_LW4n9?KNReTjd-?@7oPj9zeLmUp|VT zD%S~y&<95ThayY&FDu2LErE;#%et5xEP~(v>@o1!U_h-Eq30t9u&{s609+eoTYGot zZE~N_PTneM6zp-~k)Ub&@MZjs>%o*#2l-{)@55$-YCJzfH>g+W?w~)$6NJz${#(S3 zr;ESTVeMr`6c{@A|6<^N{Tia=uV{7Kzmlg3i-4w`#MGgUeh77oMWJBQDmS)%#E=7PGCZb-jX zOLqEib~cdzjh#D7!|^^hmb~tMZ-T0Z5?A=roo5;lwDsHYg-%n+PU!o0_w-Hg!;jw_ zV>goURVM~`%a^`N&xzQ6p)oPe2aHp61zk-uSck-V{4Z;4qOZDBcn^ZYqm?i_P!ko< ze;QFAd3VvaZ`;ZMettEWZX)A;8`S(!YP|HWHmcWb=gi) z0B`H{^R?_PV6srPbkW@l-DGu1;ULXRq)SD1uB`NQT^;|m;pqPuD$>d#jlh}etM!Ga z5O-khXIOH6Z)bGit0zuB4>`7CmD^R6S$ z>dDzh`QMH1*Ky1Ve^bf%`(dw@{+DQ9Lki$nP(PL?{9K`PwT*KrdjG|H=7{Y*)reC~ zwk{81wBoI>`%Z*G>JyK;U019MczN!t7m$aeOv9vC#(F4A*$_O)i-5r`J?~ftBta@wE z@xP%kK9AaR%ysh8b#J>j$FdqW6#X@hYI`8wI=#o)OeH!+p{XX8xG7<-LvXG54f83O z{fOL3H?FO+r2xbK&Zfs?gq?4cZWuQ>T{(&(ljRN@e14*2pD(G!N-vNwYlFY3j%3U= z&D0>Ah+vely7WHsG2qK7s+dtYWz!Da>y#AhC%MyEkg(DzIntBIiPS4P3mmvAVjs7* z7_n|VF(%40p{T4VX_g|KJbJQLeE6W>p$SyQn7+&j)Ms)~3&e?JJoRh*BzgK{wln*e zxDZ(TWStqH8eI1GT;Du2MA!yC{j;!Ix?yH<6Kvp? zWAd2Q7I4I(S8>7n{9oFQ4B{8izf_$W;+@AQfi~eC?s-EzD2HlIh1O_cq|dRLhD22> za{Jr)ySV)L9q((L_B(j>OLa8ksZ@@MjnzIpv_~v+)ce$z=x3SOm_yvV!!5(<0mbCW z;vhW$QYwcHV6;w!J--}xszNMBy?+|FtLBM5WRG^HZ~yErPIe_Qm3xaRFDIGAe;}2V zUs%}Hv$E%m`{n&UA~M=pKx1FPY`DZLvMYpz(?;{20Erp~WHcN#-6#d3#(6Dub#?vV zDB!isV*6kV!CaVn}&f2Hh1IM0{Yi|A=Qd4}! zfVDdRtt|dsPcWqKm>T;xi}Q!X5iU!oQ3}~YE>xglg%7{Y42Tk~~{~g^& z|2|!m!A5Z6ncvqACq~u>a9lt*H-7>_o z4NKUoY=;wZqZ5KKqXr|@$qHD>OAA@Y=%E&0M=Nm!chnrM7e0MGEacLJv!FJQ>0Ka) zQ&DSrLXULoy+Q57Egygs|K~a5qT>rOEThnHI#UBOAn!MzY;VM zQ@}MhVT8sWPt4Mw)j6>S|EHa%R8qLl!5S{*;V~K8!i5VhVp2_FdiA}1?}QN&d#pm( zUgZ08@_ikbv1ozqb4(F8dYZI%v_TD{>O6;L$!PJ5#P79-%W9s7$T9O|nrCL&rssxa zn8*%Us!hyX7SR?Zx~vXwr7JYV#i|t*AEQnn5rfvg^HTd0sq4lr&V;a5E$3VRpA0@lZ|C`c+3Zhy(~ZJan<_0y8OCX$AQXAj7@F)*jRQ=;StB~32Go83@!AI zIQ>M;JO3^Ar3I8vf~VbDOe>Qu^bTm)oJ_9zL-lX{77-`?p|Ny5V`rI`=Py_=uhS+J z2Hgx}b!f6M&uaMCgSxq;<@#rN>fWM@1i>>=^YNL?m6MAsU73C~*PUk-<07R&zr5dT-3hILPa11H#FIM5x^zL0# zDzGJ<6j&{Kc&v~YV_w|y8Ej4(-GMi$JV9KP7lC0b5emF7h1ANz?sK#dIcb9;6WGa| zoDsOZ_mecT=ESH8>TtLGBb*V=32c1lN!}sUB;FWO-WIj2ckg#>fYD@zeaVh0siS!? zEKV z_F7Iqq{$QvRr6LmknXa}yy?&wZ}0J76NaWfHJ~SyRS4p+xi!)R6;Zc&NNdW~aS_6e z{@TBN7m%r+$qM7E_l>epk!e5Ymb+50Iz_)HKQMFUY5$8chr{jivm2Y!u*}+a?EO(8 zRD6mbqC*;b-1FD%&+AQM?hFjUpg)W?h$@M_0}f|uM2Bpdum+K^Wl2j2FWk2#>6lTY!fj;~$BC z<_Un%JR@)zB{R9!&GGU>fg_Sn9Y45xG|jn|kOjqoS)q&ZxWU>a11W`M_jnQt?5m~R zKnYS|b_y?n+VZ=ZO<*;7#w31qHF=KW#_3Z6S4*$i1#A|1+2!vN3q`{|>JA5mQI6_NH?Ta&|k?GrFp>EUDw7L$oJfy0I12duN>)nUDUywoU zprA~(Ye5g+8CG+&!915qBsN-lry%!&V?Rq(v>aZT0Y3$*2;m_?e>P2=^KRe6blHEoWl zVr+bD|BB$C2nM3Uzo_hBw~5(RV~=&xgixCaN)VfjnQjZJt*I2VK^15DJhioS6Yc0$8|IaDim(Y855&^-n?(GqTl8IL?!Rgk?fg`tnaoacp4CvGwRAdxx1HrPJ-&~xA^MC3>?OdipD_+`V7i>`YU;1IUZ(z|RK}LT zE!)RibcJH&Ow>tQJtw;OtZD6=EtYAPQb+x!_?G3}=&+D?hd&nr*G|88jCn0>(yXG~ zpk^q(jC+`ksT)$u=*Fpv7?*IG^}#)qn%+B>@rtI;L;B0uW)T-|>rt=#uI&!ra;FhP z>oFf7dV*hmx@)McH`X9P<)cn@JXxNkW?X_iL&wJI{K^o`cXK9O%COCMi@UO>yW9`# z>56RVtwC@j$wObAVXPQqNt8;-7S6+Y{-E5_6kxfYTZqwxb9EJ6`ycnMOD)UqO^Ahb z1bj*6xa|H(y{XwrYN;>}wLh`>O~|*+Rd28Kt~wK>{SKu4V@_kn!Z-sHnu_DI{#Odu zf{`bD`2=e=VIC2Y)KUYAJKMFIlx@{5u@N#rDWbkb{mFz8Vu(~%qb#fr7BQD}h#z%S zx&4nI)I$>Gx>V3ew06VHUn5m=^3xirBAez5e&zYytzs@|_3*Nnz>wrpA;rN8cItNU z_mN&M!Qo2Dyx(&a_wP75K*djVxbwcnzQl^x;O|Om^=e1MF$&nW$S_@Jl6;axSZ4_~ zXS&YDi<>}OAMd|ADAIUh)?wThEweF~vB0oJgMsF`=8(-TA%>nyy=}tRMb4>eaq0)x zEXnW*+=;B&N%!^_1Q_SN71tLfqZBP)? zf-n|rzHK!19`YdxTQK~iOuxXf({{Np;733t!Z*8@M-`7S$_z(HB!NNxHn zdAUNtM_sLbYWwX4hdec+KuQ_XwxI2*p+zsqWO*&iZ1{_mEltmQx~#gqiYj5x)VAT1nqQw|I*#1K0dx(jMhD}Kn#X*U-Q zoYkw0jnhEWKwB#|HPwItY2&Zw=W{ms=oS~X2JZLcgv6@FaweK5G_IFT= z^-uf;RAP53y3Us$J9J#tRK)hgk~UhhaOZ1MNwwZ^Mjdm*^qUV@JWJH#r)+w06eu7D zMKwYem9+0mfJgD(AcakWGhb36B;&;(p3&6cBaw9FYe(2T{=7wwe$es*$C$ZKX)DT) z9gIL}Oafjk;&*a7^!=E2eL%|55eM;plTLym1?fQ+S*&RZ{M1s1E3%BFpslFm! zZ7iri{B6qb>FYke%nR<9WX)8Hd=H<73nPNCsro-es|`*YNRU`M12ZwxwNlYWsi))? z%Td2?{L3`p1GjdpEY5F!IBX^7sSJm9qmkxsr2=2p|Bzk04JW-~bj^vcL8@fR_uFy3 zB47pB-`@eAS{+1T)o{|6`ERae2U@mmA3qG z!t$kkU*-lMiU zSbNc>#o9G!p`h<|h}^d^Z2RBUAr8ILhL}R(Sa_iZeFJ!*hP~2wsGXreGv?7Lef!_c zWfCrb`k#dOvhvwkj-g44RcF7y^n;bGe3`k_vv1QoD9I z6ZWFysE5`hRSFuGReq|%j@c z=d_8YtW!j++tZ(K?Qf1rxb?oHu#1OUNDOOc#EteLVmT!M=E)E?i?VVsCZ)^C%`oXmsIg zUOcF*diOGuIr(6`dXI334@DQ;hky~bMe-du+kisM&2A1Fl&wWN#{nrVr%BfnX? z?mN`GHa55LYSJovQH?SieV{f@>KKt<`x{;ETQY8b&}{NH6qo7e-XI-4BpwJoMsmE&<`(u7vUq%_{}z!0_SdiH+f?DyL$i4 zNO*q9tpWT{q)apoQ}<7dkF!y#uq9gPeNxLv)k~tEX@EH^Tp5*0{{`<|6Q>0 zR8=1{U~S0HrHj6r>#T7FdB(&fy|u=Rk~cGEu!fXO{l~`YikaphrXMf0$+C@pD&h4+ ztYtC@=$?K+>u(Ebiy4#N2=!yOKXr{F*Uq{3c~`r*Wdq8|;2}*TF17BTCcj*Loc~M= zJk_y!{Y-8zp>Z!gaU6qGBq}jI~ zW6Ly8IZ$Y(TS*?LwvblSSc}CA| z`vxutxGpTqbSN;R=0CP0xl_=Re1b!lXLF}I7Sx+n{-C7=JBd&TZkAq4Adpjv&m zLW`>KkMjT>?Hw<5;h?hMi{uJFl_~IV0L7i_o*J`H<}b*Ln-t09AJEiK8IE2VmK983 z&qAOp`3su#_6fU+{2?=jN96_IxtnnZ<$?^BU(z0mMHY!uh?GpaifzrCFWwRkDEzkH z&03xF4*W+uUOKr$POnP;Lm*9rZ5&UCkH6v3RGyoiV2LkC1Gt?pp&wo)-f;YYcsgY%gcYHbts%VXCz^S1n6Ue_Oh~&?_npRnC@01R(=%>@k^7R!6jcEpYE#yR zn@UmX?JKuWUb#%aX(A_yNAS(}`vrS+pAwv9YxNV&R!is@jyw7PI-~sS+Y2`wVQI z)=S#P2Pfw+j)Tm@kIR|~8iBuhf?l_z?)#dJXM(!SXE?pcQ)M@=V}5U|i7K(%N*psaRI+c-&K zCBF2yUUbIC_X+<4yf5ZO33#1L;c$+153@QkQw?9iPwexYZXtov`=42)o{?uy+XEf2VY(JO=8>O@)B&`fYff2z(E0@#9ea4J>o0s#P)Kq)y#d;d zQf~!=%-2BeXqJS96y+ZHVTY={$62iq<2O}$?W}GtKe!xFAmL~RJpe(Tqz@B$HY(Kw zd}sRl?QWhY#&M!0ZL)2Fv9EW^jtCB0HRHR_O1DkpV;d5dTBHmQVV7q-B41-qj@}RV z`Zbr~((y#MhWYm^Kj88hr^!1{-nJH7IUX`E8OOVvP?$Y5s1kJLTKy1Mz%_2z`by8x z^_V6nzj52{=7#|D5;$!h_|TOb{I$1fNz%_!B|vo6uASqnRjVThAU9n!pOZyBnAz)x z*6k$$W?fKW#2$^ObGy9h>tfatEZnPb?|t(NOP=kV-Nizh>jY5x^Llma642H5!8oLV z&&Qy~almcoodZC6`u4X+breIVabKJ`%Ghc6k6@D+(Yd{=egUb#YRDsfCi-c%qY!t0;%jUnw`i5BmhE1e%yg--V_b1E4`ui9PWPYg^N@EM;fra`oD|< zon>e)GQ93t4&Q@o<6Fv&-nd*UTDt6aO#bGFrUva6ct4`l*YseeULLW1c_?%=FUfoD zi8_Mj`@_yMzwq9F(V_mI(m))+g;*l*OCba9znd?Udt#Xi#U)2uV$+(BI0Z|y$+A((0 z-?=Z=+CVACz#U_=^N4(Amwy`2*_~A;N*7Z8gQ8wb2 z_~}S)T5CiWbMfIfF_S$)J!o|rVINTljXeGW% zBBYLn;s6f)g|QU)2jq!)js;SBglJ2ck(T2`Xn{g#z$CkgaIo04m(K5r>Buk!0ALL; zZ4(T>s-Scixuy+{?1QLxJAIzE(cw9d9tLzqqx3s>?2)Rd77^D%6HIQg9n-3fxyJax zy_xyiwb(-Y+vz*}TYaScJNcjbCYh6E)$}K4giviYl3AUvbemr0yo?gjYIJ7+N_+gK zhrTF|M!1oOMLsIWAki>F`^YwPY7d!@T!X-~^4vkS83uomn&V=^Sga{n*aReROdi!x zDaGg3S8M*DP)RPaeUKSe@52xb{`0izwkTRF=PNg@;HL0W8ywgeJ-|=SF~}b!!?AJvFn4t9zK?Os0Fe7V86gm$cxx-2-li!tXq<9kkwXsGk0VHGq6j zh~mw1P!NCqBlA8$=Th9EHb0q8yb3Sm$la3FS9Q2M{Osl$vjnQ+O5TIuc3R~={Wzfh zXWLoq9#BE^d~svA(y&gPTu5r8$SW-o&rH+DF4uz}N1EGTBBy1tYRGpkq9|BG4<^6z!Yj-VZ8$;Hjuo+5Nx9Ur{_#_khoVI}5A z*3h!%o~cyM8M1qZ^h~DGEpc4)uOy6>m{wvA{g|2gHf5igi0e|gBy;rOAw zM{f$O+ik4V*TJPl5NzDgq|;+{+>$CZ=~!_`(CA7>_r&cph170s-5B`wk6TKgKc8R0U~(P> z#TV5NWo? zxw%Ou{KhQJi^t7v%pvIKKj>%p*cmq>;-9os{=YCZb@18d1qw{pSo-==^ykAkB&~K` z(z3%q^7`dDj;b-AKS7XFt$&NEvr>}k4UducOF%s}z}sjQs3d?=3xKV?gvBi(GWnK? zpj47MA?_k)EVr<+G6TujM>t3laLs9Z0xzQIkd{svCayFmT?L}t< z3vx#Yh*QHW*w(W2>_2a0*q=A4#5G9+b;#Ew|Blx&L$f?>#Mx<2uHVd4nLEywSQ2vk zMCqE4vqE;52@6LYSU|+%k$*OHq-&bDlj5$0xn1C1D2+RHsnOCbD@F`I${_9?3eM|I zUq`R6us~EQsMqUXSd4k?(r`C~XU_6r*z%2glh>!NRz2 zt1G(yiLkA?N6KO&`mgvTEa@4eCdkh6Ve*J3J&Km`Ne@5(9KE;OQ$6-la$tsRwNKdQ zmoEBESLQ5kJ1mKPRE2AV?5;ixQXQWBpq*6AFZOngn3>~y>0C}LHdJEw#RWc1x_&&d-J_XsJp}rN+o%@Pska@pl1BkXc)h_Z-<%vkSf=Q>btBTnK zU4gxse?Vo8S0=RFecNo_uW7s*w|68RLNO!_>(LgWn3q zmt9MCRCh>sqn9Yj`KlogdmM9D4RYnLApmia#@r)@6zH(B`M2)q$)X9B1ob7lk3PV+ zE#0!nzd>K39|QvK5UAqVN6VALA8StTh_SSGQxXMi-!CfPVDps2wKA7a{}T|*qBqAC zVoD*go8t!L5_$g>z1>GXOEa#PFBW+3NaY^;+9W-oYp-drH)W<(lV z_9NC&XOok@-xL{5-d|3HHMBjTjT{@-3vm&Vl?7pZLov`9zsPahF@#_V6nmHloY?HZA zB3stu9Hld`PG!}mGam;0h^})9+oY*TRr;& zNIOY}*a9gq}i1HWJJQFSzZH8V>2?{pX9h+7lVJKcN%oO z@8wl}$k&=@Asb^TmQEN3KZBMf3TZg)}lFWQ{ zruGMbBBoS|e@Vx`iDf7_d=xqgmr_SC`&)N*sGb_Unm(_$FATO+`EFhv?Yg7nV3-xY zjUl+1CjALxf%GmdlreibF&yuOyJ!t;l6f-NtaSg1d}X|Amx|RV&yt_-+~mU1V^qdF z@fN|G8n(2nk@)rJvrak7yuE3;v30o!vg60x$`O)r)VJR^?ui_>S?5xcs86rfr1dT% zT|boHncob8+jCE=EOMDAX0{kK@XMdjgq7^+!YYD#xa5rgRRYQMvNaA2hw930xA#xb zZtVSy2xF3)@QyJwTL^>CJp0%eC_DZ(unL{%_3K?)_SaE+!GCT*=KMA2cjrK+NqLrx}P2w3UN$7 z1~-Vgm%`6^5=Ru0CN|w#hBPzCNJ97al)4*W8g7S~ zFZGi&i6#<-Cdzyf9SO4qFF=mFIJ6ekH?*D~$S^^_)093vMlfS9ipp9tY9hbmOguC? z(Wdr@XP6Up=${w8YP*uUX528{(Fe zDbWNwR{8;+c!&^yl*6;J1$W%#KP?+%q1vY>UT4~!5o72Cw)l||!dJ?!kKJB%qMTUb zh8}huxiw1?-?}x4xUXe&=9i8sB}Kg*P0DP$Ewzw$SmUgxFt1~gl`|u}GkWrO0x}eO zc%^g+-8+d3DLw__*G0wNYw0()?dyAV+^C^DPKI*3i>+R0xe*O>MCOd$Pce^$z!O2u zs$g9iU()jTWu55jbUGp-irSpOLq=+_TY62uYGo`g1AcYjCjAOK&C~id>Kkhi3(A{qW~Cu< z74??UwK`Rd;?NNe?)p4=>D$c|m&O_{+>PmT41p;m`fci%udS6K7cYgX|IMk|!yt0f zNer^ey6)ujZ#=%GC7vzsT|mosT{dSbtG*g+n36c7T?U#hq=~82SmzZKt$bOH)zGYV z4Zv)5-vPPoMpVH>z+DQdGcQpB!QsQRw$9b#L+~*+^%YJR^-l41Zo66dE4QxMfwL-H zF(%%#Ww3im-ZuH#RAu}&jn*?-sqjYmOQ<>2X!^*|JE?0qO8lO~uHc-b7}g*EoDa`Qxy%poO}NR2aWdNbQVb_5+d-9zrl=*eY~+IvHsLmK}jB>Ez! zdikD*m>ay|nLLd zvU7EveM6W4nNS-a^Sb6zR23pA_r+ZIdRY|*pP?@$7e(It3ezP$TcuQuxLlk)C+0n& z$gzsVP1N2BOIr^9K~PBQR8j6^)HrKT2CzA=Wp;K~p;yR&Vn%57SO6OxPkDDp+jy$K zj0K58vj8_sTg}wU-R~zHPHnl5NtRIfQn1AnYd&xwf)&@6Sx@~uWt7_XE9?S6?;i?} z16wr3W={Yhx5o>MZ@8rOiJ2Q}ShjN$NRi3c8Z~pG`>15{5CsXPK*H2>a|<5=C!Y$gj0S?4(|~) zBBo*S(b4hyvg*5P;ucG~ji6PGW$Y?jeX2}>=5=cS;BDkDp7AFfWL9JO7)kXpnG{~uFt0Tjpc zybt3L2yVgMT>>8*0*AZ1JHb7;=Wq!g>~IP0u7ThX+?@c21b6bdYNX}6Hl1L0cs3q#^h z%OO2dD?ykb&j*9=`e#@yJYBWLJd8~>7uZgW?~)dKTa7;@{S3lC32WOR3ezICA7ey)z3ava{4w5r%c(yHQez49fDV#Oqnz@1s#8KaO%ueiK^m0-<6;Y&ynF}- zMpwG!Ct0hh$|Crv6&dTZ(9Uo{(1xPbgOK5hS5juDtkqa0?Y6wtY9(#?YM9_B>;BVE z#h#lH9pLeBmQ?hbWFYkf(kHlzXXV9$uE>Iws7B;~d7D1&zatt6I!8;(3}t0ugc}On zKZ@#)w30&ty%abTZwDP(aL6fN^#B8SNM*b9u$6tg(B{vpsAacuc_bB5KrZ z?v&@YEwA!RwVYO8zGnWF?_FR_#RJe9tsXko^Y0QfB^0a{D`~^hMw@lykh(BEW5>f+ zBjjT^U_MjvY|HOQ=*ab_jz$9MdZeJ#zq_}(^)vL+Ny>C7z8nW0O*Cpn+S(k@c=uY` zboECRS=BQEEgeX&nB|TM@|6>B518i_ij2lJDISdpb?C``zr^WTZy5m(MNf7_JmN_r z-(hSs>T$!g7nmT zmq-#$i1Qo0cCv7}mOHsV1&W3NQJpal2Z~1$`o3T3CSuC3BlbBKOZrlyvhl#Y6I1-m zqdx+3eB8g)2$^X%&jt0xtp$@uJ9Xr4yFq1Imh@@tnvsDWF;)bbU=TBpF&%iHYYvAS zSAmeZ3!Xghd2&ekT2$6OC2Yn_Z&SBby^F(8;V^hYMN^X!FYuC#MXN{9>4-Bd3l0k>tPm zryt8>L#s$vwNlN?L)FParbVEs$SY4Ewjm3+Kel zU?)t$o2QZStly5#(bCCQ;uGlz1*Y@ea4miZQd&;9BN#YKAfo6_`TF-|zM&dy@b)Y; z3l0ag1u>t$(PXnhi;^ zL{`1}Zi-j6a`$I>@)x+mA9RKC4vK{J?|$IReD{UiIc6(<#Ol^$lI6#I&Y&V3WaLiK zD1V=i!?qMkE*^nsFd~@|kLJ}8Gaf1unc!#%xR1%Sv|@ z2ap;ex((2khgtQ;fKXfLP$hc&)h@;p7pu-}i@{u^DT`KOArFj!gGFjl<9~?Z4SJ#x zj26WM6X7|7kKhn1&+y#;#7@K{nVi)|C2hwb^&B%dA=(^6+54A9lFzv1yLFP1c8d+( z2b_8bVKi+qZv=vsBZ|uW1-FTru8rOsOtK)_Ujk8CJlB-KybW9Z9SqD{3*lYatwc1P zJ*{MSjE{$|6)8?lsn{nU-6v;2d}%>H5o`bV!biIJ?aV#b&7y2fc_6vjq#mPNP_Qz< z{ES<>vo^dL{jtZE(mk{G)KFb%Gcq2VI115`qkp3Z7$=isl8ZB>m$;e-YBQ^F_AR{w z9i*R{gC+$qV-v|fJh*)+;Js)IW>wVCYO6g&?d!#llP>txwSvluKr3YoPqW95I{(~x z^2EiR(g$0nW_fVkfR;*DwMofCmLr}+#Y0A95zFlpe@?kiO!EiKi%8Eu1?zq7m|1KWv9)@4h~z-PM5Q3|wwC=L4esbqmPN3RfT z@|OJ=LL@X)m8m*LV{eydZ{31aHZJIIPOW5jEjnkF*i3$x%P~Tn`qDi$_GO{L_;$>> z=fl9THdFxOEbgTdA-Pz;2LtB#C-G z>km+S3X6}ncw3DzZ_=80q_$37X%1Z3w5VetKEl*&4wJWvcX|oEbED15ARYpG5RD`3*_Zfvc8nWVXMv^{&Ue1q0DcUvpR^oFA<7v;tZ!q@WgReI4f6cnzi$hTSvY zK%QFW_IML5k6+9!-s?4ZP{Wg|sZ@V*RZ|`3vF@4$S80@OO^Qa-oKF4ZX*y$!9-Lz& z4>ZV?8kOm%mK*rZ<7>`=m=NP{g5btls@t1~(h|nv*07z#{Dp}a3~tXmWX3BOZXR%S zykhI&uy;1Z#;J-cD&CbJ3%y2 z*>?!8Tfrx6MkWHmd-6ZReNT-!a@q>rr|O>*EZNwfm-(D?$K=gcHP}iaN$b-gQZkTc zTx6g>{_BOW+cX)Y3LMhEwKmJ6;qVy$CODESUH0F@dfd}zBf)G49~Cpf_M%nTJt&QR==JiUnT3_lJDjTmKt77hAD zMDbk+mNzSdnel5A5IV*|@%GxZL9E0_;bvfIDSVVP)sM&oQM@wc=&Ojx6WwkqCQ<~C zXkWF-D@Nq5tB$)acDoPL#_j1VmpsH@o!!--o%bnhGN*+$9L z5Rbi<)!wW{N{e09A4lzB4&Sc&A;a7S(RpTPQ-F1nOVsbnUtbT|+jx<<&pEbubmun4 zkK?_mlTt-jTVlZBk=o{u0Ae+KG#hxZeRUAsB9lGH+5= zWI>Ga;#xmh$uY+f-)mkHLXuLV>QPP1(2XGIgsM0EpQFys3VW>Zn-M|cgGu|>opJg} zm7X)Qg&1^S*eguU-nFaM@>;9M)#tTo08Ra*Mko|I{8_#od{n5*S!uY>lHE3D53i@+ zJYf>^p}vCcMU((rdQF`ymQViqgrkS_+c zoJgAsM2%|r3Sh^5Zy=NNpwZN9D=em;>9(a!b1zdIdn~uzL-8<*SzSZcQHU>TiikdPp`lsp3A1fyyyz(c!P z_2jlN!}*sgfBWEgPJYiBap<@tUbbnJ=Vc@oh@}e>5!>^NTH5xDI6PN|(L1{(Xp;iJ zC+T+ng^Wwmy;acnwEcIQ7Bk{*0Nzvf8}S=Bixshe*e?bg;OtLO{$C31U=_MS*%xB3 zPpQdl_j23EM*?+d5S=xL^T&ETQ?<~!cTlj1EEWGP4cKD7P}NP+U4S=)LHkboD&Bs# zZ+@qitkT3m4EmJL*N=%d^+aY_PYs)yj$m?u)}Oios+-2?Wacv7T8v;hDWF@iRjrvr z=P5M@L>LrLmB@(6)+C!^IF0e zU-Ibp1I<)pWHTe8J9SbjAeyI2{)F8Lk#QE`{uj-D|Eh2&ur#xTl~9>xpttkc-}PB0 z`ySsi^D7k}wa+y%lNLwxCDL`K+HG7`#>d$ZCpGd(XeRfx2DsaF?a6#y$m*n{K`+`= z1{KjD-v|t?KkW+rF6%aAshwPWC3Z&A!m3}60XtF7817o>xHsH6`~*p&sb7tT$S^x+ zeo3er;A6~@fh6g1($6&7?g^ig8c!BnDztU{DWSO;qQmvwbZ(FyMxSvgITJPSdf-&h ziTDAwPk`@W`tOE5Ko9j&Ga16eDQ%!e5E;qmvGP%j1~*6%0-E9Y@K&$)wzii4LRn2w zr2siMK)k!O4mv{h2VLI9c1`1ta_s6p=%@QH-wV9)(enxM(wY#{ zG%9>ClvAOvorb%X{1@sCu+xHNI@)?Ro24#qdhlBMAUiF)Xz)Sa^(pgD!pp)qQmmG> zyL~o^oelUEs2CJUI_B9=oDPAtshC570sn|btqV)pD?dCyyTWIHkAngYlJuIB$f$Ev z*h-hw<(zfdTsy)nm-c~xRIWEA;aL_g+;R^GtDV&3qDW~tX#bVaP}%A%k9T&?5bjf` zyWB_xAFm*9C@PH>u~~NFXqK%6zO502Ck4etqko4I(T`cLk6}7Zin!(lXd=aAPBNHr zXa5@yMw!%%mFnl5=oJxKD?@!&OR3e|>j~$JdFjY`HINm|sg_<_0_87@CDA@cJBjRM z4cU*X=~6@Fa3}F2z4U<%&OS5jyb`Mc%N$>UL4oZq1S%$LM$4Mfh1eYT;rfbliKEb` zhwCrfYgQgcFC#^Xv)mSsM+&q|X=-Zl|r!;`k zB|zS7ny65LPTaO3^v;2mFrLtEUzL`11Orcqll*nHtKTxg-A|ofjCVDNW@(}8z%!7` zr4a{xO)jRqN?vN>e_RQ38#y0A{Hq=i2#Xg!>i!NTbr&ty6iUwHmI7ChcyvW?q$G^h zv;i!23(tI;CTEYSFK6-hHa+XRIxpxPw-`A2@ZeB6yHyRP)_RS~z4^1C(X%RjI~Kos zp{YRck*|_vLQ5yV)Sr+SD&$}Ka>Ij9agH5_lS6S<^_UpnF@|fburKM5pxP^F1|U8e za)P5wbfOGDo=Ik$U^d{{YEUc6yJji14QiP`GVS!A&X`>g9#z#>3Jdv!^DU$G+&)je zz;{)tZZ;gMDet_(@+&-d_vn(0_kn9!kr^(9tK8Ui+X))OmjgPYNnQf^mbBt7OKL|# zgmVe3CKaPhaB^$VDgT?Iqg2r%>)vV!U#*+XD@HcQ1R?g|IUxBjag%dcozzYn>9!@J0*Q!%l!J;#o-ay+wy)8^PwulTrO_IT+!JqwBCjvAYD zV$04#luM$FHa(b=?m{aUvx?eJUkOK}u+?)|1-~P>d$h_$SC`KjRVL7@fJsPSrz>KV z*`_TWIe@afj9sALm=G$4w47cH!-ivcLlM^aq)S=B@^v)Hh?7U5!b6Fd>ti%S=-S4E z*8Fm&@fh>6M~_6we4YD@y;$~IGI)&G{4DlRIjz66zb5nXcwjszlr*-QWpwnHR13XW zQpCMDiGb5Z`tZXcTge$9_}4m^Jtta=WX`%!lchP)Eei zkYhC?o5KFb*N7b0v2G@s?8{C;yM*6MHKv=6rVYvM7KUvPGaLkrSm_q(Wf>>8SDJ4T zktTnWq97e3d>fto-lr^CEoCLz_89ZfuL9RYp7;uqq@9#ajt>7cT^PL!@v>A6q-5o4 z^2PT)f9S5W-*4RM(rK@@0>nj-K`UAFi=H5rm%66Q^2ygh)yjqR;@ZJudLNTCoIhFP z8(g>2ajX%guv`1bXJZ&WV4^RyD2unksh91RU?PYQjf$E|!swj6(%47yJKgHWtB?Td z|JKUj#6@(j-1FGAybT&D;i!{C%Sfj~>^s>xswo`wP%-CG$kJA5)N))_V&KKmw6ImF za?O4W?E8r3xZY@`dp+J{&Qj>PjUc4lrsVXPIKGJfP#aJMv)abyUc>jWE}tWowf-%L zGH1cJR+{ys=@e7guA5M49kZy1QgOjs?Y1c11hiW|uvGtVfbzI6bq$ zUC{J9{_ql`zXdaHY@?le*A!&LGzJ+q<3bj0x>zHIwCqL4XCIF|2;95PQXH)I1G7^! z0O85xB>OERFq%W=xzzjNVi}LqFU+a>gDdy&d+*FxWKaL-J%)bD~*c6N5VuItSwCG!-RR3<O4p_fbwV{>sYck?h z9#cNn^}*|ZE5PmhjJT017algOro65&LcBwp;(g-}-RCq>ZsSZopT4~?KBu{?50d$E zXWzd&{JuY|FRI^Hm#@5Gxvy1qu**a$u9g()RkoVVj2<=&ETm2kw zm9Byyl|=N%sI1oB16uv!4-7zJL5S|^1|L5(=lh4cr|l<+xC#OnhFXR(Cf0!u_($$&cDg zMzc17dh-JHMU#c5W}O(p%dl+esv&L|#3Bg!Kdrp;_9kf#h_?pp&SdJvG8M78QoO-b zL1^BueueL?XUVAmdr|JKCsoZ+uuLMn2*p&WjR~!3MbiY7BJnw$oL-}!@Q~TikrwJr z)lBuso|%Q?^Q8+h_j?K$>?wuQFVzR#)!R*p?6M~$^7?v$--=QAi?46+i&;UphJq%C zVjp(S2wW4YZI~b$<^EklP!D2uWIpeagTNLF(S^9721B~3@J(CB5-?Hz*Yp;}fF+hg zgWvEb1L!k@bNX6Pz}6HS3N0Ol5qdS+_`MIb9Cm|3$?H{W9>r)|3(uo+?x|xjm~g)D z_kX94rsc=cu7p_?hv5#FQ4;27>Vtf@mlbYJ;5J;YO2YvmZEj_$n*hTl&6kth=9p)8 z?>>DFTj{4eywn$v@=)F8q0k+hMony|&8!4Jmp7xi*RQ#B7MTkbX0I3QjyElV86U&C z6PDF3tBT#L^6_R+6HNaO^~alCq88rZ>8}pPJM?y6|DtK8_1;2saD^f3FPoh|=B(q2hg=oN@j(#birtJ6Jh=d;J4Ii~= z2^55Y+Z3?hZoLsle^jts`t33t+8L*cdu}0iP;<%nUO4m@pRJ}lXGj(!#iZ-_tn1K4 zLC*H3yNMN^-PMGO?DbGPo}XT@hJ>CAToB>?@V3U|_d2ly9bVx#R-+k>w{;>8Th>B( zRlbZF!p%~@>)vukX+f{&Kza__===Mvw2g*BznhE+g;`cHDBFLX;9r012S+l-BbNoK z4bjaEUTYX)Ok)i>4P^kbD?1dbyhk-2C$_hmnDJU728{ut?j4o-FpsR?!CYxhB&?;% z()ejwnV+e4e(%utN8w@O1bR|ErfZt0y#A8ytERw+hKM*GCawHj>?K@3liQ&G?Gl~>r#B`K2uqBz^Y%PukUQH25kA_@cVd;{manC ziai69cnd-~{#pZ0qJ-RM_8get+RrkZW6<};DaY-9@ZX-S(%_)-iTWWOhXmmPLmjWm z=ziIzX>i0JSursXh(qC9u@#>K%=Az{rJ+vBlOQAh2pT+B5=dh#N9-b*Wii}D?vI#A z>LK{ew9h_csO}}k5H}17hwWiAjN*+O=PynJ`m0Ion1tX73&XeoT&}i;o@Fnvh^HLM}`jmh^jtzruZM)-2hRUjG4mAdJk;rF!j z%6;&WkmlcrvZr^1k(6Y*PI&Tmwi0pFUUmG}o9U0OW%ZasZ2tlF9m{8vw9rJUz_6SI zLu{&uj!U;8^J zVDnB$NMnt1H6vwy0t;&Dq#CQL716Dfc?rUExl4I^m+|79EjIcQVk=eOM-3B(F4M+W z5spd8p6FefAuNxxA+F=!DaJ@ClxhA_eH6qid|N{@%Z$a-{V5xmX`ntJ^fwJnqXO zy3ie@gzxOIgrD2Yf!T##E{r|z8Kf)B`$f@C!&(JYv&1svr2}6}7t$dm zVo68Y`kE01H<5RtAXoZlxUo=+nIANd0Tj2F$sS(;NeaOT(vGachMpwY4Tr}rN{N+_ z#i;AyXbGAAoh~CA<2JxXKZVgvrF2F{sRn+F;^qsQy;ImTKEVJ$x>Gc7t*V#rEzvLX zeDpbXYEJ+tnz0#zbPS*geKU}8ozikFwjlRd^c2+V__s%`L0WB7o* zlQ4FCq1xe4W(8Y0izCCU~I{t1HZgxnI4x>6Uy1oH#n4B?TNQc;ZLO$Yj3#f~+e|_9qSi>PwM*sZKR6 z-3qxtg}9XoQ^O{==HH>bOW-Y!cMY7Sa5OxKI=+tZcy-N(seSXVE?RAPaV%v{cVWeO z>(dQWO)TaWEVpbQsPL>z8KMz_E|jviyclJS+qr6}V9|#sU{t+z?DN)jf>}o!YhB>j zPIl)>?50J(Rm##hji@Q{LflLs_%r?Y9Nug2<%%(pEXOctIIRl1PBKWzes_yB zG!&?r-~Q6fT(G?FO-6XA;iPQ4qw)s%v}UpLoNMUg{xkZ(lpRYNPA@z_2n|kQ^ifu> z0KB@uvAJxf!(3)($PjLbp)fr&ksax+faZZ^7lS=V4uC#4h*I#$?3;xwH+!IQAi%67 z{ehyvihCETPZyTqT^9q;7s-%}fpLRgjh%Ff_BSp+iuP#tplVkfE`vmNA<=uQ?T0XD zN}mb3eT1#-|BQKx7I|rMW$Ya-QQ71hX^GYJQvZnaLb#i^ez#HCiwTzPoaNn73mGz< zqdk34QL$9M1mM|2CZs-Jc31&b&-+j@yp1iCNNExE)XwNVQ|5K z?Y-vL=8EFU!P4-wRo97#96ccN!5Z-v^Fp@2|ICk7K>~bQh4=02mCGp8{ay#yY*IDC zCh;(gB-|FjDh2>_sIjuI_WT|#uwVJ>O4PLGXX9&Xq4cq~-p}gobEsl;!U?ztHEl&n z=XMXKvi(!jLGa@hcKh@Ubeb%b?1}N4Fu>5qNFF&CxO_u`L zVjz3Y$XZ#`ZT=L{;>A6G{C1!th(;;biX*{A9ZL&t{lCzz9pAEXppoXg9tf{s7ZEkS z@5Pi-X$s=ncr4vpIuWa)asKEjqE@!u2aLsZz~0COtc|gIMcrZ@6*4vN(H@sxE2^!3 z({@1B=ueU;>c(=Rg1ehDUnOl_m*FkGf7iQ(A)>d5LT0SXNe#tuC0F+K=rlXaY$E(V zRI|K${ik(-{U_0L`^7VoY9hK^En}$}$nBa&hG&0Npzvgj`G!A2XKeMZWhdnWYUDoW zs3+E0Hvfexx^TtQ5ItZ<@V_NTL38spfMrmY{9=wkSZlIZ^=Mp+F?SDZ=+g`Cw+_h{ z{KFrYwX9hgn4@<7rN&COU($Swga)^b5~h=0ti>5FvHrng0Tfn0dTL_1fQvW zM^TO2`D^lbl0EbB^}XVW3HsLG_v2F7;d=NPfc;dsZ`vsa|NC|k&gVb)-$n>#^lx7z zaIHb6=JqO@opm_Z@iwO9`&+N?$2)sRIGJrSEn*4iq798*IXX_J)M2hvNPGlIAv0~DJX5s#!s3glethFXraME8YL_oa z9<)h9Gj0rclpM707ALZJaX!EKB%g8Ce4X@E@nB*~Gwhq4EO~vs3 z!s%cJ!O);JQpSu-#L@80`rDs^m=~8YJS_jKeoAg)n*0EaJdYvmY%cwC{s(X0QJ<=} zx%B8u+}j477(dXYvZ=Qll}v4U1aYi1=^yDZ z=M@cY%kX#y>W`Y1y)NIaR2cA)X*S8+`u0xWBdfETDPta3U|6#Ywi$SQ_=&A+ex^p6 zHu4I@t-sPWH9t%JJ)ml1R!eiB@n2B^p)M|ay>hLE&jbHUXd*C-a(ng*6iT`U(HauN zvKu%ZKv)M0_MDsFBQmG@;`B1+sZrc7yh9&;vX0+w-sE?A8xM^IO-ZuLXKauf=0y-O zg>rTTiDlGG^?N+SW3DWgR^IPWd>PS#cW33S=b)|O|E8lYf3LmWJO#D*ee3H|JNfnf zIOF_%7=t7z$W*!Nk;@p>aY#$}%RNs@$gGkp@l;f!2>`1G+AE=ieMM z)RCG2-Bb97tMopYs6^Mr^FMfZ19%#)0Zh&B1aYL58r$Y&we?ey5nw#8-7H&0h(k%Y zE%NiEVwxATExm#ol9z$teHaDdYx6^|F_R6G-RuX+0M+N(KdV2>(|P2-RSn*vQ5E-| zy8lYe{qJ=(kg)+_wT0CIzohT>xxieey5pm(kHu)`J)&AyHk_9d=kdNZ=NkXKilT{6 zRyn?l9;KF-rKhIuJ8WH?0gI*HbRFx1JW?D5Q=S-^!F#4j7hWI8?nsbZO?EfBMdlb^icg+@5!!)#&<5# z(Vjw*jw4XH^>p_!JUIt)`MCxZin*W|&SL|MA+f9dvpTtAntHm2^mxxjw&tSwt;v#B zGD+fN%p7wBfb%6Z`cLr))#Z2dV0!CDL+lv1;lc>X-~Gf*f@moWEz(JIZH0UvFpf61 z{>0yWZMy9oJ8N99j!(k9q8hTnS@sqj?{BovjNiM5P#Jpc=gppl>|PD}gLinqfFN9B zRg8+1Gw;3@IM$`7L>7&(po~lqLaN}ELze%pO?vUm0NG%#P3zW85w@$cEGa6ik}fBGhVttfF_fgwK*6A}JCXAEHJ8AwfhzO9V9;OuukI}Xf&N$3-DP=flG}Ep5|IAmt030FmWfXRyjj+( z6%3}0Dc`FWY`AY$m`QGkFJR{0>CXpzRC|gYe6Lv0XHqR3)mo^18odGz;#V-Uv$Hp$ z-L57K-kKL>I?1I33s0<-JaZCKckF3Qgcze6K56UV|H=svnPnZvwc_W3znj0fc)sR6lykAi7HfNqX5RX~)dUfQ`P+ejyKiOfhyxhT*){H%Ds6`;TnzdQ{Db zV_$i3HuH}PUQ&SNn^~GQ6O3!|tB?vn?0`e3he^lxc7pp9qst8)yY02rRYSV{B*}A! z;ui3mK?nhMnpwgLZk9=o6Lu+yk{@=tQdZnp7Uw(c2T%F4_j_(2I5(r@t@rt$&^02I zfLsM}BrDwSu$(n&_f*nFr&%7{@Nct3;AC3<%}ob&h53-9{VilB=|0RRPV1)FDNcwXLwI%nC5=@Z{Co>^DDM+^+}EjjRfp9Dtty121Z-+s`U0gM*% zK(j3Lau)De{OETyrY4IOuusAeefBl^t1vS{RhRT9$##!nogSQ@Br?1|+zrv584+R@ zqX;{_!nX2_v=br3RX6+sp#k7S$L zD>8Mw;e$3yPJ3HcDVkJFsp?nb=p{YNMB=?$N(j52CX0V##U!hQ(^Dan)+WIuE=dEE zKiT3Zj}yMu8vI+(@fdhzB+xt9Q-SrC^A&~p3R)*Z6Sf~=@k|q z^Q|GOYNgWN(nsyoUCVF2$78x%9_Q-{8g;(Jd@TRH*|v_-OWJy&=(u|RO$CbWQ`N{% z7>|q?C_J(@!gVJzoM3r$@NHnB7!r zN04?`XrSG}&(=I0FFKSMyWfRiSTZezSiZ(Bo#7&gM`>YW1>^}Pczp@G4)=I6(K$U_ zLAZ(Twt?zzZ4@|RehG0N8tR=;32;(a=yhysEm5J>J?y(X)(+KphO{IAYO?-kP~Ay`D5RaYs2g|j#FYX~qrYvo z-HT6_00u{1M@=P*ABbl7*AE;Cn#GWnx194!WwobN8GJtw?r)hoP-SY@y@?!gHL83J zromg`9j0eZQAit`8Bn!9<;YQ=BECeSv=M=47Uu-0R#@70$i-GS&YbE%2EPOTDDUgf zNjh3;+fN>4YRzDW-JeFwuUCJJkpel$#)=OJHA zPYiZdp-v|D)xS~Q{+)@aa+GBnc@1wF3DYs09HG8 z(MZ^MF}_Z6Wv$n`LVPOtLG>|uJg?>vrsJdL7bzOa$bH}Yo_o1|I*fblZFF|m&H`WN z^A;%!ARtNd%~$EPWD*=tur&RWK<9T!D=mCdFu<-L>?g5AyRs;6tHD9HWO@c)%*`3p zH*RDVQ-<~Y>0n3?j+G1L05}+Jh$GS<^$jjn7R|%$+8j6WlkJXhg#bfn_@Bk(Wa~pE z)BunCHGD5|@hF^qKeoifPt=Y7QU)ej+WLJWu57?g@$<;ybW{!ESlD% zhdg5|bzVrn*JU#Y*Qafnjhj|_WT<&CkC2AWU^Q5t#EYg^`Kf%#QO$1P3}MOc94vyB z$_F(I&bdXaV}Q&?ilEm5`)ckPEYdPNE*-!KosyV4N6V8mv-B!==s^FSwg3lhlo{M0 z1Wxk-PAgin12QKOm+Uyc8sPw$Za`+%(lAihI%e%}Q9PlS+^HgM?xi7^Md$|Nt!r>j zic*~cqyooFs8`uf2ijfMXod;YnJ`EmBTsTm+pE0Vd7hp0@1jh=MM0kv${M?3{C6iw z%U&|lib}J*l743@mtQE_?&bg0{S~!h;Dn%5VFV^h&Z}Kdx0U1FX*Gag&x{aVZyNyq zHMP~hVS1>m9=~FIHzN)&Pc^MMKr|ApBSZCN_Q3(vt!n5F$u%+3lbg%B(C+5@;^jpG zv5vYGJL!Qy$G<#3CnWt+LI}EaSOX7r6RRCk?Xcs<=iFIkPwUAE;(P>#ljR-GDm^1` zN%DtrmT}SU914`=T?dA7nd(3FIioIyE<7MQuhB6tg+1_5Rie*~uv;iY5Y`?{n32UxgR=ykvMSmS!l zxdE~5@mA;WN9z9OR?X(C`)=%rGXr!y7TuWo4Lr73#{2;AT6z6b+?nc#RgMT=Z15Ml z(YS+%#=x8@8+JXydNzF*WDiC)ClBhqpNoFph=tk`Mi4}7)fTBQn+q;!D-^Bbeh~F( zeNEJMHoF4#d=cj^Nodux5Zk>wVh)$J zdfzv)Kl3p{77OrW{MDs?BC;5b9UhT5QYwyYO9C9QEp+uNhN9t_SRa0^)=4Rr48B)` zs;b^njYo0r!qHSKGgqHU8~%_nT)*i`axTT!8Nk-5#MVhIj^Sz`Xm4;Uaf#m^3T~?j z(a88FK8CZ;GFFj@J`;+K#cN1|5PYy9o~zRZo1+O5S0x+>Ht-M8uX!32O6nnh=h47; zsV!~+N@}@ux{NDgW2^#JRoahU*bqf{8VzI>g}&dW#&Me^v=9;;_jKxlZmVMo-+lj+ z>I`(yII}lV4o$v$8P<~9$8_<7x2rnis}`2HRSm*~J(6}+vWWq&fI^-9M$B#lpJQjO zw$x(ERs44-+goFPlPzX?@iEc_Q#SU{ANg)k)J=oc@MmKH+FK9PG(vL*&;^rPH@I)i zMtx&b@nLyvGjd^6`9;=exKK9G8s7cs-s!LxGdQ-v#j0y{E^S|a2iFv}ttJtO6?`0~ zsxo2Jb2O!%FN4$8nj@5mFNf+1FCj?)vtYT~*~S`NrGTS&Nd-~bZI^6RWmCOEulX{u z^yIliVI$sR-~=ezU)xr3zo4bxUpxQJ?p4Fs z4b(sNQs+;ID@aFYD+nqiBYoM#BYn=iiD4~rXP-{o(cwZPCt-pQa$skTZjd|-AUrv+ z|1p{s@C5%1W%NLr4ukxOk0C=LP7{H#?S_Vo<99tM!m!DE(0lb-y+f;m|ADCXmCUw~ z@v;tRCn(Icuvg+Kgr7oaI# zOA=|(8~#vn2b>%**+pGAPy=5W;~>V|^%z)-w;QUZ*kv~=Z*cqF%r zN#HO*-`m2Z6~iS3S}=kY7I>ha7%p=CZiT&oy4*J$7%}C(Ozy9L$&(5{DW{70BmR?yAcP<7eQ>a>4 z{`!u$kfEOegW-Bz+a~tw%5V5l+BNfU=asJ`N)v=4I4|-P+e%vT?~!R_BIjv39j)S6 z0o7=yG(}a=L%$R@0-iKq0G#z)x7Zq#hI*|A2pxjdP|?&zRXfqdXMmxhzJG}6W4K>4 z0q<*A9~?ye?D&K$d6T1Tgrgy09?7(`9Ir)T)SWuAJ}yo?Kj0&M=aIKHXS{pC|3E8=nzZN?t@t-)2zwTI$dQ{OpV z$WJ;!A%AfSfL9sQGuk2Ma8l<_^Yz^Wvv3Q7rpsJb@lEr1SDLW*c1wMs_h+|rYkUqJ zr7jkQ6N3^#|1w*hBtjfG%fQ)1ulXKUYOf#V$8^GQ5$PvAD}Dk`%%0Qia_i}PXO_1L zZQ|=VZ8}HmbxmQ{vgR`JxG;)xF7y6O3Nj7XF?y&T)H6@7mkad)EWdUJSP{kIMozE% zwm96|jC8+urH1jhJX&`*OxN4JUA#J3NIogMkc6Nl2c9w>a`d5aKK2xUW*-_k&A-TCYsWBfC z`oBf(JirIB`&s#l)ZJ_fgk%-awZzQnM9v%6uS zTybz#d*h_`iRIi4wL|QdpT9Boq)+B)g_zQd8W9^y2>TAbu8%b*EnPs34AOUo(!E0t zPcg0@Z1fIQ3#KjuPf9#WAG3@s*Q#%WjXNVk3nJIhx%KXkv=)NY8Jc!+Rg@&6TPC2` zlG$gxxcU$vrDL!Pt^RgJCdUD|7$V+Yyl5IO+5ub!ZFzu5PEV40;{3zdb>Kj2;$!X{@$Dh-_8V{gFgK2!TtMYHuyFv@SGs^TqFIzRQvhd zL7(*N@vwnz$q2rM%J^e_Z8evFji5w;d-In;mG7&>I)H`G?Xly5x`C!rf9<=R6b}}~mPcJ*O0Y5$h?l7p_j>*=Rl=v`Ue^m@vRzx}D zRBNV_+;DY7+4~_w?NCpx=7R>-dl?#hI4V=`dY1V)xg_z>y2SYXs&6imFlckXc3TAg z%yI4$!wsCcCuCjH$q8|-4T-~K*!*CJ$@{#)wL8iGOtamof9XQ6(DxtKApPBO%l`R| zhX$`34?y;69)Mt{rpuc>wfH!LA8Zwd05Rh)<$77N=*F=c;Y-cQMWF_LUC7sY>1*}3 z#9h7t;3~b4nL03$5%#xX!7nCUIHu;(tN0jowASCusj3E+t%iIUvodCwatvL$(=uip zCDLy?Wz3~JwAQej&KGV~>@o#r24l}EmM%|4@xer=FBm3b5- z0)P_D0WDGV0L<84Y+ljQLvQV&JVf>{+dqLHfUA7xU5E&j#{bks8|4@aaTQ)MpGDJK zU*F#O9wpnFOVY<#1=(41&t|A0@Im_hi$K=EhSkq(PZ6Vw8vA z`>#7}aiIz&fx_@93CRhJ-15+qUo778{*b728GRvV{}g9k^T1KU%O83W!~FrnKP@)+ z9EHY-&Uv!xM zKj0~iGY%D#UJ5?k9z_Yx>^d0WzbIbfzk`5qyOrjuYncH>hW<4v(p2L^XzDkwKUsj4 zS=5Kk;V7@7#H;Q-_}A0UA_tga(}S@Zv}j3RMQ3~k%lBAgqz{fdrAQ!22X0*XMmA3-zj_k)Hv8SxH*r-A(HO*?As579TM6>DR~TSgI5m=^s7#4 zejn#wu-?NoiLsvC*oo8ByY^@)An`FRca&_t7;eYAz?NF{AH5B4JcaLPLVedgz5iV2 zkWLa2uj{u2o?Z{1cTQ&drlc=yTtp~pihG1r!s+wzT^mP9B&CR^W`OS{A zo`hb#naTxqW#iR zxug{;`)!_bah0}wWJBYTO2c*z8sBFcua8W9>HPW_2KjD$4gH<;?B$?Oc(5H=&mqN; zdAp;L5hjQ-ur~hvQ8eW>)YgogThUJ5&x$cl;l}h+YfX0FRsm^&))0i28n_z5AsP^Y1F;w&KJ^>nu8eiTPd} zT2QvNXs!aiT)AhpSq`KCN32E zcYoqrZogd_Lk6$7w*AyZ@7qa*b9WZ^#qGOq&^!Ljmy)Lj8u4DOkSVvn1v&SlL^`7! zx?j2TXuWG@CgQu`2singFaZ@Vm(S1P2Q83HcT3$Q_bT&n*RlsNR5~Ghy%9d>&s&+2 zB+o;xN4bjQcB4e&+$GK0{N`!2-l@PZgRSy{l8H|x2?x9@k#wFd6#Y~xaBT0CW}u2% zaHqx8`RU~-wqp3OP1o_?`)jRWlQ5uOr z8d^ux2rKd+@!`jpQvI&rc8{Y^)CL5q&Uk7Z`Q4fb9&GrqWF^%3yNnQH@x|_8Oc{`^ z5MtSz(##5Q!S%$iejl}wym)Bf4aP- zS=^x<<NSIeT$t68aPK=Oh6v!#(~ZmXuW$A+`?pu88CT5EU@*FRf1KJD5Ne zy-1=;L@p=J>iZA69*+Mq1cfH&{=CFC>=sGiY1k-aj{M}AOiLa)E1HbAnY9n(*@gaR z*D!a6?bW4^aSA?rKYoMaBo<=k*mP%{+gn>9=>CB~3Aw-4oZukaQg7)y`TI&kvu=Tk zWfA&g`AD-YA*>R<9qnZ8)@;5bIPu1A@@#=-D?;ogt5AM40ROE}hezQh-Y{uyJ;xQ4tEUH#c(527M zn{VV)ZCt2&#CkAUr34%3lcGbV@KMM@(-`)=1Rr+mF)QKEEMqaQ`R&F2pBKUNVm{kS zi&aVJo}HIdcOCJ*hTz4jDRj@pQ=l%QfM_Ytq+Ex2u2&sktURB6AH67<*8*6u6Q*E4 zuifSlZ{WHDd;aQh$_vZ}eEbFk5LqhLQc3Vd5uPXsQV8>$J1aj6$Z=GGVOMb$!i)?E zGD>Ld_kT4UHFVJe+^dUQ!mFAK)O1wj%l0h;@m7~OB|C=*2*81Z6AFm z$D1SSOcgPaAVJoY&5Alx5fpxe(SxxGCe`3|IDa0vT}&N8dLw% z?>-tTiv7o6owg5Sb#1Qhp|A8y&w4JmfR$JMYer6*s5j)*Wr~Y$iy#;tN4zPGkTQ)V)iM?jA2#Jrv)P+Wk#aDZ$G{an>NRuWeG60jC-&|PglmC_ay!H=b)QK%-EO?`{fvz zqFHOV%v#rqXp0F23?M53KjAfvCfK&B+Jz5*I?7^-_mO@_(pc$V$_crN(L_^SG`oL@v8R|Yv1WB z5}-$FdpzN(WmK>fMGz+ZQO@+oIJjw-9W@eo$NTyIX(j)&3=RS+gcUI|nM>qD7m&@f zf2jfK9>tk&zo~jo4RT}ztG)`T7?Y*KL~=u+U7Y>X1@E^CtiMV$yve;N$AgUYp_s}c3hM3MgjV^qn9 z`MD64DM|ld)RtdfC{_3<-CX9CV3krilz$thq0w5L%l3p_yZL}V-?06ByfWjmNHL=k zEJ0?ts8g}5fi433U6NX75(wPZz$Y8Q6BF7~B(QLLn1CN~kPVyiQzcd&!)}m@MzNTxR)s4wf1Bv={JGeA-<mel*)|GFe@A}f1$ zQ;Krrn^)khV~=&c%GVRNpOflrZSSpZ&bm{ieqKOqm%pBPF5>P|x9_nW+{KrWJMg|Z z4KUkFP_IM)Bd0OUKy^qJ1{tRItQyp-+^j18d$z9!%n~FE{O@LT7sdKff8u=CxP}{y zkj*tf<9Yk16f{cL9%T8zDmTm@H2k&aQ2nb`V*N}H<33jYWAA=-g$-4qOiGL)4T3E- zv16cA%4D)j>)=cooJ7`OKSYvyv0S7H%vDbEdNf6ybvBqqV{YtJSSSGp7?npQLOHyh zyGiiCG4MB5^NW8{JO7h9*&r2=nKt>(NRx_iiPVtxg5?`9Z?;NiV`T?VmoA$?U3SAXCJqZ@u#oHeL?*TCa`MIJSo8QZF59jnRik6KsJHyMkmAG5E1rcb{T#B`1>>H0ti zsKn~&6hS`Azn?mq*W@XSrBV1d!^a0x2={(D$V+4xp#ENf`X~LT{;2=2{{Mc=JuN_p z_`r7AyT*tH4uL1}%_Zsk2NlaWIu$ zg7vHTYsNq-)l^NHjvNGpBG#w9& zhA?z&{3YsqZup|%l%BM!)+b^;eMjVCu<;L}ej1KNt3|r^rWa>5ZI|71-Ce!7w2tKH zc9yKvlHLxRtt}$!FGf=xv}f3U9ERmU1PFmx_o$|Whm7!|)LZ4S*Qk8of&ZFUPr*ZI zdU&Gojj38$L7%jc1e#rvacK=y>~(;-oU=?9(KAe$$*?(uVnb2#0=&HeL#&pv&IqM)|Or7yN90FAlMWBr$z+~tnV-f4G<@`h; z8+Y$HRb#l~*7y$aPAD`-minjJ-i;3r>~O`lYg$7q?6j)wlI`|iCQ8!J?h0$21ckKn z0>@O8k~e_s4QT{R$+N!aOLElr!$ZvJE(HtUP|Fic>1%sx)x9hi+-qzQx3r3TRr%*k zZaPBfJ*$tYp*VDsx!Wzy+{!h(PFW0c8XM!IMO=bD{VV2oIU}{s6?-;c$ zB+;Gz#BYUM9u{d~pLL#Wr`l-YY4XpF^ZmTn*td3Aa5j-QM#vYtn<@-+)IZ1F7TU5C z;BQELS8SK&r7L?d#=EdaSV9gxeJHen$hY!l>S@-3x|~L?YdW{GE*njRY_wU{9r0R2 z$M2tF?ffjGbT^sw$^CHG*+XL|Ray8+oOCMKOpjnU=#L@^?c#0b=+b7u5_^~wE! zf=}=b*ZrHgyV>lVlpV-a10#69+MZ=zSK*OWKrt`eX*(gU&+_vs;Wh6sg=xVSa21jA)|1PrAja@C085|$vGLNDz$k1F!+5!K=D0H2} zG!~dA&1s|gt1OuSK$#tOr(i0SEFOyna7cqyAr6Jvn+C>_fedTo5$s|=j*McSEaDJ0 ziCabrcwSB-S7|8dgZ}iv--r_O0FiZwEe_AE^7lKNNE4chq_f8{?=pKW)oY0Vblti+ zCl>pZ@Q0y7%2xRf7@Qfk;w?4-cmAb3okij^GJM$P`6c~^XBHvkPsh9te7g?IxO%is zZj9t|-Z|PzAO36t*j>|FGzNw@dj2SWVJgffa6w^q527D$lUwQY^fg!u!YKIisvzg9 zp27GXd%ek@s!jqyO<0ZwJxDa4t)|_qlH)o7#~n2BH6q7ak7FlnaZk-)TuI43979bB zy!Z*UbjKu+*tX3A!ISQ6)6-VO31@&S2^0y9feR3c$X{eK9xLRYdJIiYc%9Fe<7|BY zNORG%Hwjqe(O$$@MR0;NdNG%{Rel9Ck_M=E#afj>3?0ZFiuIS^&YrkCOZ}Tm1%xAu z-_gwsJM`GuH&4_!{@)+jT5Wbx^V5%vaj9R=k=~2eV3dRECn;FW z;=2Nj^Ph^vr+}4BPy8*xIp}?q*d1iE3|M| z??xTb+v1h0f$s?X`_4kj?`6KA?sQ7~YE0N^M?BKD{zzx6pHeViFYVDnGp@XU_9K=I zYVP6jvYH7y8~O2So2`4SMFJTXZ{DZ-UpxC!jY?U^>7k>QthD2RB0CMeuFX+XqJ%^c zV|hI2GpZG;hmwDenZ-Z}^X1k&pHU@@8m>IGdIF=@Q-oQp_@^M4_jzVtjq>77+?_(K zSXydboSG1API-x8OT7DE0ZpZ6U!p0~*Bau9p|(mxo}x)G`%>m?EOoA?ii7miHWY`{ zqp7Vf!)ts2#2ldQ{ljCTyKX>|L?a358I%Z16-EeAEbu|5jm304Im1?8Lte68GO#XD ztkGEeg9Lk#jTZIZvU%>wUuyDp^*Lya}pvvl56n*C(qkZ_H5zZ(7 zao%JR%#DCpC5`V&eheCLFRJuZrC~=HROjfYQR_WY+!_cSGSZ{jl964oDR7qVnSMc4 zb})v()2AGnPSWxp|^&Ten&0QSmq-mee4!_0s%jR z1-=PYn%oseh*O>a+y^6II4RT5TU%<#84xQ6HDz2z3D6Jvz15^k_$^1!OLjATqz2dU zKzhzTh;=HH>uUc!_wY+?|E|4f3kK+R34d%f(jqNzLT3LK);uNRr;_{n16rQ5RNq%} z)gxnNEGdBb2nNeZBupEH{G?7bdZqUy?H<^%%;38`&nOC*f$?1eH8H`| z^Ch}C{6VvqJQImFj`mpYtO-j_Bnv;#qppZLs2u$>zt{3@+`Z*N8mU;mvbc$}-B(1K z>BH1h-TB*VIAG=zK$lszeY}a`w=7ZS#nW~q?#~lS+r>7pb{{@V{&K0QX8)ih=oBCW z6uA&>`FWG@k&Q=F+HbQ-my+upl@Cc4k&gIhq&~_(`TNRzUi%Gk(*Yrl)po6fC&BHU z2xebg-;0`cMuD22#XVu6ER=7sO7YVc6`~tVW66doSc_sU zFd1-id;5Ga+!Fv)^|^t7N`;X`;&qvgX@&)0Qyi16->*@OoDqO}P*U%1N%c=! zrr}oIOsFA%r{_k_e9%y$rG)v)uslIgR&l}>=g~xy*%^@1#!7C738fE>ml7fWqBiMG7^SFveTq10AUNDCJs01)g&lIyfa zAIsIfByo{v5BHV^-ol~KF$dB90mPg|3X_W^Z$bWy8={TNRWTFHogG%;zX`6tj~>~k zXs58xiY@088hSC&O*plGimqJ7-s;;+15WEZbG}%h()9fpal3c)mp{f4)XANp7x8!X z#ZkTQ{LheC`IVyN2pUOkGr zr96Ut_-|~@nEU~2oL{+PBIdpUZ3tQ)Sik&pkoJ2r($5|Nr!bTl%&BB5r`3&yg^8{t z<;JkQk?ajirp0tt@bY_J!YBni+&f4q*|@|Lqw20JNh~|8gwEGehA?S&zY!3s`CU(Q zUX#E!_gQbF*T6%v*V;2af7nvyhC64OhsmV!HRP#wsGT77K;u*Pj_4V4hz}Vx&%?M@ zEhyNNdC$}2xl{Z#h4uJK8RhgXk5u?--MOx+?};lHZ3ANwMh?nm&yx{N!&mT}lV>1Z z)&7P&$G)^(2Iui8qCS#WAy8DOTscKk=MQVj|IOcV-<83@&jdfOHk&9$i#@g zAi!1b4@uJ0(+Qn41~k5^O&gm@Jj0QELB;&eIfJ?PUg`eIxDMmmOEl#-UDpwOlR4xo1m zR$eBfky*lGvsjy)T+GX!w(qo#TV-we+GPDGTAYEPkP&ZedTKIbob6&yqSKY2iP`|rO!+C+U$ur z;Yv4Q0s#9et8+iX-ybxV!!ijD(qcQOK~MCGmHDllN`v(M23amKv1K*VZ=SgC8SX%1 zhSjd))mwERa_>@<;)e_r(8(_P(z_m4s-?VU_Up!<`E~m3$!mX=E5yr-=*D+HJkAdd z3OC*$0%Ksg4SSdR{c=|bV+RSD8}2ww(*dgrg$Y#TvtP?0bmr%H{bkuS2Feo^<-b>r zR1t|p}4jiTNPwYA)qBRE|t1=Ngt z_>#aqO?PlYha?uhzk;*v3fgn zqttYX3}V4JMjP!_)8hgPYqS9`ADdT;D^DX?{x-~x%z*z<=F>ko zGXtk^l&b84rKT@REir(_It#gyanSYlhmTVgV*XJI%BPhwP-F zFKk9%!&{nqzuQk5#cT(R{hYlHZ=&089h62tQ17LRc@hrK>Da*xKsR57%rlazpDMy$1J zN@m45f89E)(|$R;Tc~;;9%7msjg5lUU0LyqgR8%1VS6wVv@M)*Kl7M(>iQIUL{;(O z0}gf`aiC69`J@X(JtmXPV^0=>C$$#*L-yPtwW>1Y`Yl8fp?nFIQp$YVc3vdW%54|w ztpU3+Ba!3&*6cSg0>+=RcpdBP-QOIlXD9rPPbKT2{h_Gsr_w*7dX!!L=0(ZiDc>Er zu$%x}jf$JM1cF(o;c-*EkS_Av!19S_xcA!zlaV8gkX&b;bQDr6&4_AOIxPv8N4&kT zFkdP2-5Mp|=Rlm^?#FpQ@TZsz_SrkKsiyM#w!Ya|B?-Kkp!d-I2RJIM&y_0Dt_uRS z1W%Pz7fq5o#p;Qwgqo#Z%YBpy zETNL+4T#phEfesBOu4Gnz07MJVgOe44+_iH?%#C#nknAt>G3og3#prQC)#P6HN#u6 z<_a?zj~F&71B{ybb`$15OYJKzUu}Et2lm+`|B(3vJEmA}*o?nTWQ=}Qzsm7gC>Z7cQK)? zxSNld=bo5skn{ax3kg9gzd`?N?XlcYeEBtSwcoCiPE-+1F%u&wymOt~5KkCTi;Z1n|~@!;wm1J1V(B*e<_2HqrlSPNc);Q56wx{bHZj)Gpwi0T#;RInpa(4~0iPvBS{RrG+ z2`-L%@kt@;tDUC;`pd^5-{TX~aF5g9j2Y6tHK$j8D&_0r}=mB*pN?V*je< z76-$se&Q!>;C8Ya?p1LW1iW5sx3T_V)94^y2Whkl_oKJdG@G2^G84F-E(oXow?|60 zm+D|Dk3ifEa}AeC-|UsvIHwPc71VIs$^IKq+=mDPhV+N^GES~>r@DEnB^^%Ir-oV- zmI^BR8&=lg2UBd*H1X*ZAww@_p4TSimPYl@1|mSFM<7)Nf?Elokx!YV)GL&rKTmW@ zY56xCw@2K=xOz`%fQ={7XV!~q>omS#0Nsi)(1`9u2zNF1{QYjqvWTJDT9h1MzL*!Gd!V4fFrtKIj_YD4^fI|9)5W zc0)(Z<hGVDl8&KnHW` z$PLVY2AiRTGr4N+KH94Xhiu~}e97%AM1&nxfmp|@PJ&k(GyO~)C;z)Cmc0L!HbCLh zSJ-dK9Zdz$#Xsuk-!rf%i5?6;v15EN2$_UA21XJ7E@1A$TCdYWbJ?uCzHSbmYQcED zM~NnWW4{^_7rI7x`PNeEEzqjh(3(UdaOEo_v?at#vRFANspY!@mJ2KT0hY68yQ0hG z*X|XaVFw!YX@v&B#X~aO=;&K2~^YcP!1K?<^mWVZy zzB_Yt4F8gGwdMbW>B8S&JCpl3j6g`H|dnnC7@_h6k)ViNgY3l%a# zG_TP1C_I`aGFnl;Oc(oLnW4NJ-o##QkgfnQtMVFqW7Aw`^`7UbSHfcEa49=(5sGZF$t9f;T?U0R*5f0jKLdY zc?e^W5F4)O*9=nopN>V!i)SOFg^gcd=`+NqpVPqF$3+Iw?gp#8ee?G|4uo50Q(fpV zA#34SVVTq&>v}m|VqzW|2C6ou3WGH_b-ddu_S(}cNnv_4x@j8(PXmby{FzINF@2w> zC45#CZd=bhm#%Cm-T^D^&kRr7znI>4dL6~e$ptY1*U4Y+b;r)4u_l*q0|u@_*>9nu z3UH1#-7S*den{pDd|eg%0~lbhi8FwRY`}11OIhe_FEoMHE%ROYWKr zX19xM(?V>(0EtVjMihNK%D5u$j%ag&E|z@OW&z?AvE<5D`&g^ZYi>W`E0SKqSj2V) zqw26a(~L|abKcjJJfDWSVi2*#)D1I0PO`Fi!@VaRJd1(U65K_CpXy_Me*Uo*MWZV= zM8K`HkES#$6ahYk%j-BR$wGK|i#c(3&`d7!@

2##AfiVz77zaJp5CUF4m@58Rr4uWm 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�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
!lMFEa9(a4d`QP6lf^xw$|VzQ_`>jaF_3b~RB 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 z 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

{>;m>91Kk1JrGNNCF_4Sd zF#`d%GeBUQIvZIv+~&AHFsFMr0-csqZp>rw@P4K*eb4Wf*my~DUE`m^M;kLdNHN7_ zo#dX4J>uanr4aZtq)GPQnIP<@9|q1duerkxwD}2Dc zq3wfUVI1ZBm53K$>N}85&vgD4_nFz)i)hSgNx?7wvpVDIgoIgK}!;!(VAP@Qdn`Jl0i??F5HZcnMDq7EN~{ z87yBYRO=onJuKPdMJTDqqWwx}Tdj73+`YLD_oc0Y;B8 zp_^<&gN$X;n2utxyb^kAq(v+kJR})VPFhDSm`EUniR7aD*w-|_Ok z0~tTy8A&=0QiKhcUL^P2T2|zz}Lffc2>Z7zN`t5jpT0!)LCSMMAlS|K5()sq;@NwNkG@bxCXG3}x1s|cCy zH38gIo9%7fTEQ5@ce}(#jmZSq@uitN4W|X^72@S+iE|Gfuoob&qB;V+y_TiFc-6Gj zp49Q7;lt%b?z+Xy6-pHcRGmvMiw$$&X}kd5A}UBNpPo#hS1N`@!+%z5p@+ZY1rCHO zCG3$l4Z|EKd3rYcLIj?g#akit;^e_pS*;Z%F`2#)&)A_K62auix|LfLEbVy-lxuUQ zF>-|kJ-`A$_rU^L&ul4GLlefMbJRiXe%^8l1jfw_zF5wKFsl|lox3I(!ZR| zZCEJ);+l#~vjC>0p&GyoA!+Uyq(+i)3k`fZ(+5%Mm4wWV1SmM{8BK;Xf;O$NOd6l2 zfS!in;u2XlEx=a!ym*X*B>+uAT{-%rz9pz#z2b!>Xq&i5w5mEHTw~CmQUSZzN4I~& zdj*jlNAMcgghcx^4d<22Yq~nQYtdi?K}f8c8h+Tic%a(r3NQ+nXkecrmSSN_HX|)6?OIIcs4hUfa1jD`FSWN(IJ;Nt#jTU_w#ax8DJ-fqPKB7Y z!?!Syga6jb1)Js1@Gad!ob0QWfzcN(bim)D3N*dcMUsnO5VN+vJ#6)>NGn8wUV&1xq>H;B%^5ttp6y^lxIxUOkJ6 z9IZ_eLB#7|gw}1mf2u-8^T?yU(kOEaoR~CLO>Xpk85h8zSLgbsg(D8*a8pPNj;~BRS>!yn#KQ# z_G`Hh7CKV{z=aQ8Vq7Oce6R#&9LHdXp)BhI<*`>Hh~$L=nYFsx3_KYREOLlUZ+t;T zRv+sM5ta%5J;JSR5^P6jvYgeRe4WgJMngwWC<^ly3omXq>7Hny@#@9`xZKqyxJG5A zU_mMS!DMCuHvHjOPt7dFG?^TH^u$)6n<7L4(0L3Eb9H1 zk0qrjT=0oCHXgM{${p8-*0Hs6>C$dSI0L_dLX`~$n-{mGjjlsO>LMAl*i=n?PgXdG zp5VQm@jYbSbjoQdce6(#fQcNZwKTrQ_hePcMyZRLqv*+wKA;J&W#cv~9)!dJ{>?J> zGKEeRQL_blR>pd|Bo{e0OlXwLt5S;rS3&DHa_VKbJP3BY=}n8`4KKe=h z)9caWE%p=9k_9NP9b}+x)!OKHZRvH3djIO`VuF5l$WGEP{ zE(Uv`Dx&Pv{t-ZBECtB9vvoBCR+pQII70kfBq^t53sDuBT`~+OBqYb9h1Sz2;Pm(g zU}k}*@r-`c@(7&Uw-~-%6dyF<23~pdd;N5=JU;wzc%m+Ese0Sr8VT5&#svxfUS0KgK50x?I+ASIqfP zpcV#nwAM4ANF@mmSRvXy)xhFWEf~D_sQ4CRY;fY=X9#`NFlLKu{z`Vw`{16dq z`%s%HY)#uzNL;)WLS5HsrnH0`ys{h*(qaQ6y{s^_=JP#6JdMW%&WPPPw+mS^#4yp~ z-|=w1M@WgHp|?6Z|ETWE?R;{HL<7SaGFh0^w7@;eY|<H0l}n zpEfvPIvdRKY2+XPgZ@LQV{%bXq#p>_9M0!lyN%aLNH9Gg=I6B*dGl- zbN#b8Vn$VW@UB-gxOJGHRZ_8O1JvcWwBZ0Kq z8rnR-CW|a2ByY%dZUasGw!y(rv>68B@2}a}esAEpZZB7vt~F^TFnyyS5I}7FhX-B?lqL+`pa#x2VG9o&QB7XsiI8$V$QjQ z0Fb2HA7@yj@jf%taSWq{C&9f`RYW-+rWvOSlHI{2c0JxzRp3U8-a8k8+!$6g-vCElHHG!rW9cHX>Q*;mqk;X6;GeEF*L% z3%$}W9=NU6%E~A3=8KLU7s#I$q95_1`aqs@9zf&7yBQ!jq0yNItHE;cd2}eR?WcdH(rste zN+3u)3m9ET6Y$aHr=h&sqnb|E;t7zrDv4@0F`82Fl&jZz@ZrejF0(j>Il6pI{ivXd z)@qHh%({`(eO;BvjX2&^i5gnB!x3}{0By-ro|f_+JB-r}n>Lhq{TeS0KkcA8*6X-s zVB;MuuB(H}Ar{j%(IJk#PZ{xj!b2b06JpVy@CJh3;aF^%8%E=410UK8jxqW}sl8$v zdx_0YN1Gkm_|($UZJjc_{<(cL0ohTnxWwGl$#;0gL8doYA{JJCW0VOH)o4GAz?@C% zM^aRS!6hn=6Wh<}Vp$odlW-0=`{{_G5|-fCv3jJTB(&oM|hJuN$y``KDq=m(I;RTk7=#PJf&0fyNM#98iYx~RD}i&(j_oUM+}yo-6KzEt@EYWec!cfmWeE58Qo=U}8NxRQ z5utO8!ZV|4iGqlnZ&=MK2e=qIEu{;pi)X6MTRek=02udB#O7Y7Ge)#+i(AA!ovgOe zTY33QoR*h1DrmcwqvD%MpuN@g|TLI?Y1N9h8 zrF@VHLr~n7aNzcYO~*B;WVc91`Z@9+BEV8_^$Av!{}CFMMrkB$0JrZSczb3h*W>Lk=J|_9oMh`Z@Mprf2CDJLgC*5@^a1hAL4j;CGg*w{ z%Vz@g$wZ@)?cMdoxlh#C=8GOkZP9Qb;8thLe1SV`f4jMPcX)mH;^qckl`Bc0zRB51yuL<$Vx zAqhAxNYvZj)A zW)6pD(R84Rb~QQBV*4LA=$|RxRlzL-^%q@W)nG80jW+`vL5>~}RL&MxM~f9hhkq^j z6by#ci{Ih89{9izaqh`T`wiS$d5AZ&nEZ++_o8!yHzpn5mt}>V@}H5=`mYJ4ICO}V zp~?%y+ulPYLi&r+gyJ2d#3Xq+W)ijwpUOWWjN#ECQI;+*7J@`)qvhe`cUbj^UH@yJ z%rfZ^EKk@a**_)GPDuhmUV@VT{k^{^fh!y;$V@6rke2{1femtixRCFEZtUb(bx7Am z-XSZUhJUfcq(+t(^ZZ}JWLNv@+5+K@mIboR*Q})vG%c(qe^h^68LeFDP(@A*OOY31 z4c`iGtl^+*TKvU+)+{>2$&uw{Vobz4gi8EHc|!3HSz?k{j_iU;L*#yhusu-Yk-=yG z^UN->pP%_fb^t4MTl^5AAF5}rnrHvpER?3AAaGrg`KaBbaSPO%7`m}$`!AGVRnskf z7hx=WSVaGwf`>Y~rEaB)MK-JKzf*2gQMd5jq;U(}a{TWU-PO=7a|=x@Y;HyRcZ!~? zue%|=N@Sa*m(732l&x1Mv$p>GYwFQo$r`Ms!d9lyn{^|4a!tsRuD6S^uJ~W2>!TIB zuEJ>fHlkSGu!8+NM}4Rx={zHGD^(*htQ_ppnL8GnPWi!|XZRa{@TZSz6B@JLc>)8w zVdSMpsO2SvXu_b;JyrOrNsQj~bOvULH`R%x)DfYb{_=&~4^5rZ3Z6KJN{VuVX!?4> zWP#b@2IvNTDC~Y|0&TN-Dh)EErE}RzH-s_a%Y>hr9!GW(Z|vw@WRB`cJe7J@$OA4I zMsSsUh6Cq(yO40*=i#1w4u#}Eav0O#CdGJ$e4x(I$!`!5hh9aSw81xCVO~E$htod~`TE4~M*dJRYt7)L< zB(diWWcY-qZE?{$$bn;<#b{&db0AyaNp%Uoq!Qp{Q^LI)xLh*b#d~+D+rSKCp|X5G zEhC{l;OL%FlY!MpI^`GvMmRURlBh0=`fs*eF!XH21syiRY)ZU+swm}m@dYu`7RaEO zx-t;qebkf)$C3>dea$|eJQTb|@V4o&Tc!#8GbZD;WZb@jBU@fW)x&1vCkserh;HrFl^|E0s&^HGe(l-Y&>0*O}#G2h=b8LRSH^2U& ze#t1aGvH2O@7%16N#FTAi=nEi%g<&zaaMi69KWAY`}?^(s}K<{LzTHTQ>gB_nH$rV zP|9kmd2zRiW;Q{%?IL+DLlq0W8;_7^d{=xt-Md7*IY{B<3dchdyBb(P_4`S5$!GvI zqVN@j)edKaQOh=^^ zViFYRxE}X>FyfmFp_&0hBwTa|FNy}RPi4V0 zpFAgUk)MamSz{oXGIm7%9hpj+GN*`6i5N>Pbl{l`%?cQ8gG<6zKx5n#6FX;SHzDf!4voNwS49$ZIHfmMz@H^cW1a;Pb(xYy}P^ zuc?1;)U(rt8az#3*AU)`!dfZ|qlR3{eAW;|jhUKVNhCvycma~9BeW5Ls>HFs`uQx= zYc=#L>bM%w246db5rP8<2E!I3M;?^%RV%OyOHJWs=;1_kjo^XsI)SJ5P@s;#thP8q zi3UZ3=ctVbVuLk9&ju>^ngTFtI`4O3&oo;;AFRsNM`tUz&b6p(Y%uD6*C^a|O^UrM zB!^0#r$#1R8>HnsU(cYnLC4O8$AF*czoF0fyy z_$MC>Y<`4shSf;dC5^{TJ4uHp)N6nLpSR7%e{8YQ@@!IsjMrAIAE3MNS1EzNk{uy% zC7)>tBPjGh3Je*%BU{E|oJ>&fL4S8)^U1OLPRo|^FuhJFa5)S6(CZw}lV zRur3pAac>~uYWY$CGM66#_0(C?Ydpb|T21rUIO(Lzy78Xpt zOj~^vBwONcw#Ho}E~Y0-#2` zh!1r+as`kP3kTCpE!2OQw1XmKMRl#^Z zUeZp6TWmLite0N;HAKMULEno{aKZivjliW!+EL2{L zAl>kOD+wP|Aqe5DEniH2znfL^V%_CuI<9=>jDOa@V43UMHwf%AXfx1 zoY3Os@l`+Dw{MyZ&Z4Opq6&j^J(>8yftuLks}gy@p(A4s>J4;uP9V(8>8vho`CxK<5|7=hp^Q z@}ZHs)E8uZ(bdTBccb;A{xWytrT!4GqsMy4;deT!0ZfOm2Vw{}A_UvVedNacQNP6k za=-b+-;MjIX;5`&l@RgE?I0Ob-Rz>_C+|apVX=$Mjg=i#7%zJ}NDBE%JBZ|??V_P3 z+d<>L_HLpu1a?z8ZMT~)jGum#7*sn5`JQR+@d7h!<`s0}4n}wlD)VHKVY6s??Zy!0 z-%>Cn$T^J{ER!oBhNce*_5KbvOy$DsSUbr!y*?mZ)qc6!#n7)XyU1jj*+sN_JhSU^ zm+MWJZe>;3QQ0Fs>+LkSx`gvsrojozigS(og^Poz(SmNgG{3p@Bdhg{rzXBYi8GQb zF%-`IwYh+iLDCQ+spim?Q82%yc3L!;w^(M>Vh{#EQwrZOHcgt(s>mXXz{{lwoH)ud z@FZ_|$mZMU|BWDe;gJsij~m|gcoC8dz#T`+j(G-TpCpI0*OEMgf>)1slE16`|YTMcGT-uRC`tJHMLjN zUJu4yOGn_1?H0^;t(fl<42>4&6pEOsgNO8EC}i?EK3<=lx_E)OvIY}2Pqxkm4=dK9 z{yxmJ4DdX|fKAwax;p*uZ2^}dbP685h-;IaLskIpY-6(Gj|8$_za34SKY{tGcH!Oq zQ(F_P;d9)RqD!KM1=2&wP1vX$o)=+8t+>v+1^fj(r!BI@rZAx`qiI=A-1$WWhvjP_ z@@_x`+AQXWOnsaIugXNYdys!f`2u>Hg`P{A>6AC)OyW9unu3#jODsTiQw9#FBX{Tt zy}+?=b??8Y1l;{bg{pJ9dSl@Anvcm?=bA^ zf3Hre;R6NQtd&Fac5Wu|pmIx%h-d|;%nN#DX@ z+)vDgvRlZ8u1my*YL|exGe5rXDWam?A*7=06jRad6cpD?`^s69?h>;m?3S`7+aaVJ zhV>Itk#-BI2)l$-WV?jK8=Y9@dy1)vcL=IUJ4MxmJ%q(cWq)C7;@!g5q`QQz33m#M z{9wzik7n7Wm=KSksCS90X}jgslsg1|SN81Lny_2UnygF0nrMe`5~|bh!zC27kS7xij@jL;faS^%rd=OBrtcOvrtXqCrrjkt5(D=V*wgJ0)Khf|=xKHc#-osa zqBWG=!ZmbV;x$w|1cZUxPrjP4TfCaAOS+n9mvH!~V4N+VT7@%T*`$^LkO@8U?blL$%-#dPj>T zle*h(p6(`ghHbZ)IC~beua~3+4z~IcuGi%n$^W}L2vNMLnc9C&FBPvY-mb;pYGrD!^%8c47-h}QNg``(QHD&J^B8Bie5na(8 zE(|xmg}7Ec5{%N-1vuG7lt?EI&Yz$ex>=#Kk;0?TEQO~L+2CT2RP<$Vz>Sou zyY&$Umz*K>su^BPq!H}u5aKS@ZnpQQ?ESTIg-~W-u|wq{5g~fKTL5J4zTeSm@R-q) z*KeJ))ZNRErR`dREai@6h<7FX3ENP13);|i3E5EX5RlrqpMVWzw}1^@mw*k`E&=(t8IMLRO^yJw~^~0xS%m> zo&PoIHIxJ%??ja84iT9bn75)jMZ|$t$Exfrby;dV`Hq!>Ql0YpGR{ zp*e~4rL6dD)c3n4iBCv9N#nlX;V)5y?ISSwx_9uZ$vQY;8FS9?UA!8?E^gj!ypvg= zYv)yacX#k==sI{c?$=%16lFI*?;-8MFHm;zYdn}c87k6tj^5+AgIVqL>rK~QqjkpZ zU>Fg1a1{^QE^dyfgG+VHH;idi=JiSNgzc!PCTp+Cd#!db;z~pw9WJZJ3AKw??Styz z)?rx&$Ip&xYO?mW!xOxN$yIO*^`>jD%`L0!$sNoTVLP{am$93lA?@Pmd=WdOyY>!{ zj*q8J${pMcX}fH}{@cN=CTr&u47DAcyjj(gs=YcFgq>TbXVu|+bw9$iDb~zXk)?q_ z(P@t11^awS*b-Q1S}Y_Yv2H-mw-y#n+l{?ghmY4v*Qm{Ql4UiU6kQuSNXz@v9mXLj zx(p_uCDTi*3|FJa9R$3o-7P?e#{>0q(zI6J-HnK56^oB|7jt8TFqfGJczJve-*wGl z!7THC`vy;9;w9h`7eH&f-XU-?Viy7->NTH+JY*a26~u`5yae`(q^fSAICq{ACx&SH zV_M<$+2-$9R8Nso8n*I9gZ(H2?`3_n0q?p1~(zzBft0Xy0zEnWw3gR**^Nb@#EnimQ zbH&A{c8>R`@y;0115|k?2~{hrtM^Cy`}^N_un80q3l)sYUOv2ox5`H%@;5FG(pZx} z{gksaE=!>mn|_ zOxg?$_oFN=MuEng3>s72bR_z*srS?Mk!R&!z!PbJS6|LmkBR6h-EYpV0H9i^6Hi9^ zL3Boqw39>b@7>X9%08Hko+|U*C$rBU1$WD#q^J`@{6a)>gTfCru7N$Rb%!T1nl0Q= z6<%1YmRq`CD8aN;Gt=8(g!4~5U67e>!ufQJ1N6zHn3#D*B#FJ>pXCX<{?lbdlZqMu z*}R*rFV?@zf_ApZ>p$@U!<@CKwjzLA*R_)Y(;ag8rg9X_-JM1+(Q^83^u#qbjLCVq zoSwn+e{X>jQ8k%)Q~`apAZS=_*LXuCu;FDe`Z4(l{%{Eur zfX$!l?YvMTZ2oNeP5xGvn*26BE08O2@a(tCB?cWj19{=tfuZXXxEih7&A1uLkN3P% zO;O#mJR5i%{@-r^;lG38kHN36ev^j$>8#5f7*~RqthmPQ{Z^-8A63g&1NkN2K#{-> zasl+u{^x&fVSl4*@E%u<*-%x;jXw?B|E-PD{%<*I+V1s*EAM%w4_@;;Xytj3;raTv zX*q|}VovSo6Tx(Ff2AW)23IyZo%u{0(u}cS&~%jH<@a`%fj%g;iO!@ zNF+kGosAe7oC&o!-@Aq)#nX%NYCB*aLL_B;k$f2UrI!7wo=I3&qsKm5Fws4(@vK7_OnTg+(P}atTt3tT{NGT z4@Y`oWjrYFWdv%5sO1EWZ$g$Gqc_`!%g5U9CIK-9Ot^Vv*Pa$9x zd5JhQkOo5z_e1|#y3J^MxSZeyth>z8N;EAd$9(e14ELH974DmZflydAQIm|T&jZL) z=di5@R!xDclLI=I%H=i0P#@D!jMnSXQx}0y7f8zH?A@eAtVVjLiwTI1U30sr;9TiK z%L`at1RDr}HoE4J~7P5RBjl8|(H!|s5tGi9ehLWK<9*35u@i3s$U8L1^h3q)U zk1Uskx~cuOB05;1Ia@}^m&JT=xY=l}UW-SZw-nR3Gm`}PSK?8?EtIGi!t=|!~Xt@YV=>5@}XG%*A&YI zcCYxq<=t$GvCV%J&#x+5KFk<@^Orctnl>C=Q!4P_%_en;$WH~r<|Nh0&B0w~l z`*Z?)H(P4afhh97CPU2wm+fE&+>0z<%?dW~8XfTh56YJ7r$J4u7B`Cq?3ZeH-e&#wpEZb28ENmGuG-VG01s_HKJ@$8V!i(Dsk7rbh#a62v6zt3QK zV(KD^|KRPYnvFlgo|4TQ z`94UBec5nHxgJg5bGOu^F+P#|6`e3W$gzjH+ndRw6}`wyX8}qAGQ_SdvE=ou$n7oQ zk76Ke55XLL-)4Y1^lkrd5*5OunG)~TPd>JRRUJ@8Bj=_uwQApntKy${9!v|9-|Wd| z)!FYoiGOCwl`E$8ltAG6W90cGE#oxa5GT7lx9`M0N$lsZBu~_6UXZKd^-wl)J=v#Q z+!nDN*Th!HOYt-A?c;j7yn5YJkTFtL_2d5Hes4Uu-7=QjO!urPLW}}V)oDX4-_95J z2-JQUxSOm6Iy@vJuL?Cvr(8Wu;T?YQG+NC6pS|MqJ~rM} zIsaUojaDbtBg3o^wbLds3@kQ;Ua02Q-7&hIVW&OySusMV8}ujaU^3gOn&uWyf8c#z z3?@3!6BgrpzUBU%_z~jWRLvvnYpJnQtb(`OX~un&kic~qd6*Is@yg^R_0?2^NK@Aw z+#drM?~pWfg*Vp+@3s4&F6ciyy+!Wb#dy}$lrCld-JECr_%IdT=g5ibvnjpUB5@}V z%CH$S`@dN^kPL`;b|!X=%*q#ch&aNU5(_aer#R!A$_qmEcU-^``hw4d%vOlC#|{a* z6X%CWIKz=Avc!A|e|J92fiIGs5Q(!Jd?J{ql&w`=62OcyWB&LEg~x*Dt{Vq?5eg;E z*CMB7RUL5=!g`_g98u+R{v>*)vK~F+Fip`z&7l=O=Wmj`DGU-tl*5U8lrw0V>r{u8 zfQnzSZe!W|&u_rcf$7EsgcdfB%2kEFm|P`*-Uihci)-X2tNF-6DeFeEWM^nvR%%O` zTc9I~mUTH#6)(q@s&y5%Wa;7?;bkSyj8)g2(oJ1Ut>wl~+RBUPfQP4-=c&b0Gg*wj z(4wu{zuRK_C3bDrrRlGfEW7#1;Rg^?ov^&cvMAw5W);m1fx<5q=}q`VaeeP0 z<`3}D<+00Pcp9v@gI3Om(P{+^3%}c?W)NBTS182?FnE>>&68v5cJZ+h6bgTyA@Pl= zaf?O{l0gZ!#0zBj#-nXX-?yDv1^DF%ZVd$f#yuMF z*Qmxl>jGWeM&uvsYeaHM@&`97a@VqY1fIJ3jKMC~HtKc+T!~knl7SlJDQNw1@Zt0a zhBI}bo7*%?S3Y=#07FWVY zGE2g_i_>ST#^i7^dv8RlPZ@7UFhOCRn8&y8si8dg94m9T|{g(C!7JDEC>v2|R$-D;0P z;3%jeZVtops^sv#?VCU1!(xAtvaeNQNJ)Rf2g!QSF?)75AzB6RXWE%CE3j039w34> zo@&nG;CWnRIs`=Sl_w=E$a0U<;&Fgy5Vt67r974q-x+^wzPVO@;S zS{$MkPsQYvX5DCB{qXDzGZ;I-XB}L;?zEe>Q11VKBK`1;hZNN_38nmZbeRi7`Kvwl z!?Snr=6{N z@+FIbj~WR|NMQAYDzy?3aQ%3Xo($v>ue?Id2VbCsC5F;)uMyA!d|W^;E-V?81n;dy zH3bw(GO4~1PvMNp&@BB^9lzG+XFT-8kK-jy5zKZYS4z)ry)|j2rF$l9^<|U3t5j`$ zVojEViCqPp%GycAkFbQKtQ;dUI-OU%Y!hpN*C`ACXfI*3i@H9!G>V@fwa@?0=fynB$;Ukk1%`8t|5{4Iw(TA$dDm zFqS#+!0}}@y7_5@!P9^?BiP6FPsIO#ivr-$w})!`ph4xTT$FTH)}_{?`-P@hBZP@t z>Y8B7<;F<1y`N!e4g@&2t^Y)10epVTo5NdX)Q8Q1MX^C5(}n7TBg7kB@p7f=xg%`Q zaBe%Zuq|GK6t44IY%C2A)yqdP=IgrdM-K}GTC3lxFY%Vy8etTwkw=K|8dVF+TlJC) zX;S-Yo6BVd(9V?Td`&wb13+(_{``H zBn?q8K8USP-B9bKK@Xm3RNQ>_(nXtYSahZ zl~(iN!}fQC&TUjjeb_F4AI(QMA7EM<@OrU*xK|K(;~MGkW4cx27{3u`cym?W!wd1G z>IY)GEY+y_IKqBZb1IPi3b$`UUwoWlmxRyRKyWGruh?jQbBLfn)4wN63|g$LYT}(N zE9pp>^(b*Ux}T3et474=HM&nr!)LsLBq#2@a}Dsf83V=NM;LfU4g82#Gj*r^h;#qZ zL^b9|+;w;`&HHims093R^fbD^In@x{S1qf1%k~~lmF3NFfduzA@yPk{USjEkkU!p+ zziV~()2?0bEpXf z@>WACT|$khQ>7|SwM=S`oa(YqNRY0DeWKEBYC2PYj_yalW58<21E#WS${D7_6aG^| zAf#$yMjrq(^aozV)Qr|}v={*Rju!FsI#YA@OzGUS0x!~zW;{JpObdj%&Th^|PkJh! zF*51q$JxW^VXK=0HBKFIgBa>+#!$cTdCmeRtIf`4`pci`>PtOVaO;9v$TXS{pw+eD z*va-SR4Q(UHWcUT&(SUBgXzKZ(e&mFUQeUV&(Zf-IIW65SJNK%`)=^4>dh&W^#@S^ zRHOC$K}mV8M%uZC-G&wZ&2Dii1O9zG{%eO3Q`2{Y5GhD$YFF4f0JOwMu>TVI!IMYya+ zb7;JDS-C2pPt>@$;s9xc7^*+9gkj0jA8k0oy;vxCZHo+bX<5*e7(=WGW>Ep)vl$1& z*<@lyCLtf#wZ12s(e``YvgAwSKu zA$dJ|(6wHV7JLyTbj>wBaiw~OzxhyVjW6cgsT#bf%`Eiztp?up?6xq&;2H)LRGiw& zT+h~cs!Z2d;<*pK;$D}Z5X`D3>NO&S8i_tp?-+YABL7KC^b<^%hwUFq#-Eu~O7Z&{ z;||L32t1ogeugbl+(eeq|0({Q=~d(Zr~KcYLW&wuH6^6>jY$MfRd9mHx zy~6z`3Gl5;5>0Mg5-gQj=UL@GNu4lcn>XWjVB#CZeU}F=D+YMW!S{M>rpCdf&-Y z!&?~QP+INOT^WI81$X)UqD8?Ka@WLJ9isOSheszTQKRMA=l{6Lxnsh8I*CNvdx?A` z?$X-x!9Omp5YPZwa1HNk%i=~@UG^<5KtEI;7=Xm3sE-ghZ=(ZdgDKXB{Ql^Eg#Ycm z>_jpZ+m`N!3qK1kF9Y+JE^P z-vrh@{&88*4@L4^kVf_%-uzzO(8+07(3|wn%ENa-zhwLh0IIof1T6b!M}8Y)Yfa*A3*jBtnJ4>e*NFgvI}5?JD4^%$h#k zjWiQAVB4%I=Szq@qG?|EENUd#@_cCU0xcXlk-0-#5q#H z6y&Ju&naKBw?CKRIeCCK$Ry&j`g9Jz$oTmEIQ2bw;Ec_X^~S9~F8!bNvfmv(UaZi7 zpEp_1cGAUCpRT)pk=DfAzz7)XK_936<1cdtrxtbwECqkv`<|r(8RY$1mrTzLYnZ>A zX#tl(X_=IP*}M^Oa`X$ew$Q zlc1yWe_1koH$xKvDjF1c^+(11HBwei@!VSSPvAhHV!*r%bYtVfq(QgFXaR$Aka_1N zK@L_R7_i9!b_DaY3EdA147M);&1Hdqe^B7R;Qs?wP=;Sx_e z;}W%XPS*C!4)^?C%Z01^JOj`r_CJu=c~LK|X6Lj{8UCN)r}}yc!GRXbpcU68TgN%< z()55m>2qVKzubggu#$c=a{ZtY0ybBG0W@Hf4e~j1VW9vh1z?g0^f5wUuU{8r4>%J$ zTfbhIl0Fc;+78q^{bXP02Soyw@}PMGF!o=V3IGw*wa~vT#z7)S|z*#>a;mg#?&*#KH&`w)HU{n5beFEr8Hc(}k1pUcCcQzfm*tFs= zOIF}4&+dDp$DdX2KLOyA1Hj}KxN&FuyW#wwNIk%1>M8E$?fRdH)8P!D2)OVAww(aW zS)h#r<_Qh>(J(EO<*DuPZ!7B@sSnuJ{3#Udq>2_iz+Zw_;8X?hZ3WC-K$g;g?_==I&x`Z> zUo@l9PZn_hkndjwKFa`bxh4nV;1ZmFXPtd{L7UqAk(e(qefmpb)dW zHlXX$ms3NKM-sr<$gd@Rek%Y7>i|B#29^roTjrNW0eA6*ElurDy=4DNZa<*-i;aMjiiSA>v@6=30_5ANeZVG&L}_54|0U?(}?dkVjrJ%XC< z4`cx52Asp$mB>Hi;dJ~3=Ob@u^P9%`12#b0rGFq#;P6oRA8|S^rZ=aC4S=QsIw!5` z{O`)Rs0jYb2CRN(zKSl%0dQmsn5|x5tp8hR-^u##2r3sNd$xuGE6bk<&fq(>1p+RD zVlrHe@IQfujzBnpi$YJQUSR2h#YD>lhRXs6!Jy0L7o-2*OiT?Ft-*5m^DIv5?qc{0 z4zB05%ny!TA?9FY1lV_8reT0P;qzv3?uOwaG6K}$Ogqk~UaVXI?36uVy#sdldl6dS zX)x1e3iluNy-Wdt?U%C=>S84W(w{Z(i={ucNfHC?lU=4vr?9i```23y-*@4sFo4I4 zLjd;za^P#h7pWpWkfnvZwYB}3Hk{tGycF{EcJxIchQKzQp`n4aHOLI{f&fs6Dl29X; zb#?ipY6OkQfQ)~7`1o%^fcY9=DfXLz41A%Jh7Op9f_#gB7iK^_i(km~-vIEc6}Xfq z1-caabJ?E3Kp%?0?LAr`N(v~n$nV|8I%?eNXkb`_^Z4zzA``svY3(Lgo1m z0JygMEl0M1edNVP`7?$9hbzD$;naNbTxP$aa)EIToVgUZ0)CU(>Adi4M>9p?$R%SLoHJ$^t z&QnG}08={wuu1r@Sq6HR-w46X+7y_K0L|}r<@viU{BDE>GYRZofr@gG3Oh^sI|lwz z{R`0t>|%dc|K}YKzm>r+m&D-moF@kDkH|S#xq!^5e`uFpk|Hc5Fj1l0a=*(#iuxxPog#^!GAm?Y7q$F<*#8LT+%7q!!1B?`G zT>wiTVc@cvE)W<}&cXgyrj{V}KIigh*q@m-{u2AgL_xrdQv}x9_7;YJT-YDN|CIXW ziu_N~7cI3D;8gH5_8jOS8R%_+X~n5Vg7oW5Uw*I07s}?Bd$i|D^YfhkADB7I;(uiX z~htwbNp8qbn)KnC&1q~<$nV&)`)+Ex+tyh8~$Yr_#^Be(Y;JD|3UO(9Tl(+ zJ=~A@DlVF=ZvSV5r~s)WoW?<_^$rNA?az-vuOfI=D(elfZWD8o{gNpD;;>G zxlpcWW0E1buf0&VlHlTjCSw;-6>$Eikn>5^g{WLOv8}b9A*f#kX3@X|{a1F3ry{qt zw*>52?S5${d7AR?k@6>X1NNr{j)Y^#tOqPJKmi;9`(5CG-O3K+b_TS()inUTb%6YG zo_b3Cky8FJo8R>PKg0kLPfyJqE=>(sftmjD6yk^Uz*k{^vG4Ii(68Fi4*`JTG7y#? zWX18TY5=DK2_3ZT0rvw!KieY*Q~7Ut1>2w8SOlj(zkLd-XTUrBX}H#(*5(gVgRX4; zSo43D|8HyYA5=h${bCvUUm_sDuU6jwMF2(xAQ!SAvk66OL6Cvo1qx&ZsuLPIP}P9q z3D5%ZS^;OWz~tg5o#Q{qo`J#6m}vpe*r1(HBWoEE!HX0A4_5N>U=z@#`=4yO{fJ*H zBmM6;-!9JVzknCkfHOJ$3l6T`%MdsJW48Z^ygc9k#9xweTfl1-V5xgL@B>{g_yp;K z?d?o*|IWhB4j8@vr!4dVuM>bTqH~{BzwIi1%m|Q+jrGsA=zgSn|0)P*UlE+c|Hy}d zwFv00-^G>bUwi;oV}Kg~(7^zho1dJXUZ6my8U24SqX5hper9HNVMc&Cq^{9L`t=`I zFKDxl|0grsAMs!Zo=#n4oBF@#i_9p_M-(u(plu7LU)&-4F9|S0+)f4n>RMc`6Zir2 zSBE`6p?x`;rya$mbmW{bv@M*TCxSKqr~9Y>Ee@!mfX2&Ty7oW6P0pUmmMJ3L}c2QZMq5cxvrEr(5ArP&<2wiw20Hc0->Eyp62c^H< zpa(*Lw+b&)crXB@rxykp>Hqw=;|Iks(!c1e9^7dIQ^3>1x=ZkL3i#FO-VgaYg8k;t z)~7#=4ebFt2YqurP;i*@ho@cOX#yZN32;eR8<^36oPukEUTGVE+w19j8+#LwVTCpj zghE>%_y)dqcKQl9(bop8ErIq24rBvb>z|VV-Wgf}u~N@cy4Y!-<#U?HPhS90#4HRz zvByq-=3-w(hze*3dNKu`qK zcbuX@nSp)*D9|Jge9z~vC+9Y4;0K0(1AxsDYv3AbDSwC)fTIh|9TW+Chh99{tzpg@+cz^yIdI>>2V{WBHF!Ohvc5x6ZV2=f1B1a_qa zCJe9)q5ZGtU~zz8r(GlPRt|9Ysqb=1RY5@tj8L?7u(LmX1WNl|#=t}bz<}QiI|5f# z0PO;$0GI0TSD^C!&CFjyJxBiY^;u1vzf>@^KfMMIa0rM+TiXyMNzfNNdtmKp3)qTl z8#;sR2y_9D+n^79eM69IWl$>u^uol_8uS73kELx43eE_+SqJH<5*pe+&L7odRv&iO|A7oteM&Y4F>Q}4xr2pfweC1#vJgV4g7uJU@9q@VOSuTDF;-#r3~ZvY5c-vm?*AR=cy4mfw<Pk0Cd**Hw66r zpH#t*KwA4Q%Qw5L2v}dIJ*VKi>S^@Bf|851)b6=A3^^Ks}tngUR2h(`To8@XvHVdgfqt zk*9Ws7Jx_B^W6UZ%N`sb3+ThXPx7OOra-7AJ3u}E%IN$7aOV!B#iyEQYYA@bK>ulQ z8fXmA5AYxde4aNrkjk95F~B>pJrL6vP+&j>052Zk;Su!J;#94G=Ri`BSsY0DK!4BM zJt&?EsCk}#>Va(70WJWM0QN1Q&vU{KXRYU~^KiD&*ERsu_-vpCdKzm>ZG8t@z+j!0nbPvpkN>%pn(4%Ahdx0RZia{kwB#OVUR*Wpq!=u z^~deMUPJ0K0S7z~`88S{DD_i;>6D)uMhnHJ`27zY!O#qOoZw7Zmkl z?`t>i5Zgq!N8DOZ@tZNUw3wKDq5sUJr@l8=w*Vr9@L8VWd3aNma{5gzMsI$&Am+qapN; zo#Hl#ZqyN`5!=_YOTKDA!G(Vto{3=i=ymYXzSnzE&4L-h&N3 zBQN!8i}Wt%S))3I2HA=k9T~KM?Ed3!m<$C5MNaA!jsjyD%KMsbg;v!^3VU_TK7A%? zcOOym;SU$eGpe(Cpuj;Oix1tU>B1*U&hkUpe(tVaRc@^{>LV>Ygfws)Lu|8?IOl8r zHsNFFxTr5W#KpJro7_mr=dJN=Aa3|yt>{5c4sp{N+uAQ~&1(oC*YJ>|6Ju5o_RU!o zBDPgEQ1jAE8!1o5AMN})fD^T_;d&hD-y&U!GRvD~cr|rQGM$7zsw4EJcz<8*G6Pb) z2O%tTBx&=}VN8q2(qq;|pDg=Y+cwX&q%yi>9ZbkbufAs^sgk#}#C37gD4Fd{7vTJM z+_G4w`E@^3KVWHwLdD;hHkW?USx=x;lt3LReH5M`5*_A8VcC4u2gbC9lyNSVNc#@z zQq*h}p5DYj;CreP!*~89pJK1J^d!hy7cVV+ZY<)xBUp7Z$NJ3P&iU%_u{d@R3pcO( z@be+e(9$B0vbBL@y{oirD9=1@tbDAd=hI|@+_pPhtXzFY%3z?Py3{5WBzc$3A%zv& z6fspx5d$Mp86KAEtHCErV#VmRdm)i(1L96c&e2V&g1t(X#PFfOr zrLV@T4j1nv7N1FFSvk*XD95ffmP;_l%jHg`knF=Ig0Uwu{q%8TVPz<^sU47!_v?XFRn^N z%kXR+!H$*{qOi|SrM*|U{HacUb z-NlM8;tsPu8A*{ath|sm+mzq5Cu^dvDMa$yM+#zh=H-k3B4U~ycKd3jy&2-IY8T9q ztyJ^RMRFhL;~YOq;D(r3O7goOb3U5!=32HZ*Y_e7qssXjbceWD>GN|cpSM=cf`hrZ zxw_LNT|E+-*YLW~?l!vlU3=OzAq{5HZ$&zNH&hSJ?uj3!L-}%7 z`7iZP8Cn)rG*a-!M(~gKz_Y+Npz(ffeRlN@Q4yAHG_P+p(}*+TiczjthwNwVI!AI? z`CfHQVORJ*mv{m&wGTE{#&8cm}Xs6-ttV!b!rLtVP77$IA1KTw~y(hyrt}yN)lO;QUy>u#1 ztCytRUXHBaZ+9Q8cbs@)6Hpiq*8mU!4%2yaEIj9P8=4 zX+E9vg3aPX%$wM-P)up!Hi56o_7&djKaG{P*?rlDE%y3o%p4W2S+inRN?}8f`+6-@4^<0H zkq0N!@=$c!U6~qD*y1`9f-ls=b8!Q09}B9Qb!8sb>Mc4bM4h+=*dgY83+2(B7btM$ ztDWP}CwK*|Y$+!oz95e*S4$fGzPw5EiJ5qWz^%l(Bjds%+q;;UB~U~qSw;^zX4I^3 z-~uvhcllOd-l5BZltug629-eJr96YzDka~YS7SJ^8Ki>cXZ|>Q$YM!7I0==`&s^T81w?cZoB(NhRl;W#9A#b=7WUB8-sSe zGv@UP$yn7DA<`7_L>^z}Suj|q_#l^aIx>Cna=lu^-+YR$|`1zp^QFC zhR=A6xSNMjnpMuLgZff9H$Iz&YehdmhHO2@Se~Gur>L2TKy*LHBR-D%sM8>ByFGwz zdocx()!2qZ6i-hoEmV6aalrQTgZZyClL?(~ksl8UNc*n`e9~;2Q}vdhyfZC)=Yfn) z-0dVG2w#ndt)h0;s1J@+{T-^LlIp|!L@KmkCpNTsAEADDmk%8|AqP3Ew$0Umcom z{>-6P($V1;^*TMZll|AdBZDZFx0zx_CBt8%Hq20wwMu3ya7@>H_UrWNk!AU&LOS4? z^!CG&vx<$Bq{VIFBUwl|9>Qk`(A1d=%cDjtNGpQfEWY z3iX)~v#`2?A3KU@S9Rvw4MGBz#sYl^TMPXGN1XB8qksl%#3(2>n2<2x>n6KAh1VE! zOeuRSl6o+kph>ty1B9aqk44j{(Hl%4lShPk9OD*mAg|Ig7RbNPjde2j^;&jp8}B=q z8?aR`9CM9*uOMWK#RK_hudnlMIz*|Z#E0Z)j!$TUp?7vx{DV-iaQ%$8;NzFbn!i5y zqyQy64QWxFB?}!D8%QcMXea#&>$)i&{;LRwWBO&`Id-ZeHe+1Qt63!}iBmcg6#?tm zy276KYCH^esN;8*hXzIbk}xzMw%!fkcO#2lH4oFGV%eunt#X=XgVJ^x4f-S@R95~# zMm0A&B9#hN@gDO@Y(7)mZF%Yb0|H+^v_Rx|p4m1=My_w~_`g&?F0t5iOMKi+aiu8; zo<`r(uStDDfM5o#gURPA8!mkgqeVIl)S+kf;bAyEik*^@IHw#UuUjAq#}(gndzcgF z1tS@;WX_!>3`&grNEgC73ob~@XtFK-$b*FK*gZaE1VWChi|TGF>~SJ1BUe9Y#}GGd z(B<7GK=mjemdaoF(zROtO^Xb^KU(_06AJG5Uc93yEkd2BYy91p$I)XqXZtp5?c1GV zAU7vwG?&MhUi6Z7%Du19uUgl>Dc&_Dugcyn{<17{@d>V(TYZ|AUrZO6Q4Ed(^S_Fmz z(^I3)$Wd$^HygFF+Anl(d2B+Tv#8~mHM!YlE_%9e?(-!_6q zeupu4-#8Xs=m8Sv*GBvIoE5KMO4W%euUZFW;53MNO?g#xV|Uw&i&ALQCWJoo@80Y_ z>U>ms%}FoW%t;wpLdgkT%J8GKqY%PmAm7?m%U~o=w#NC{$7;P#w!+GHWg2FRUO0BV z;w40j)`;N1{7j7eR)74ffLI3+&ooQsgXWDI0Vmv>?#{-M>6{u0iSG`rRAdk}{7h&SaFK*I~Trx?B6P4gWHu)5CpMKVT2mLN|2~08`Eskbp>8&1y zZ|jjO5p1fPn}>KQDiA>*_ffHxu)=DRpHEj~5J8O3Bc~tWQIz{~C}B;9a$D9;De-(p z7BpHWPQEsCc;k2`>8bun>um5VY0u8pYX7+y!NQ(qc$w9fF;Y`Zo3ho9=lyL0b090%&XcVtRXCOMkNyDvGg z!+;tK$N30CX}eD_tLVew_I6SXQ+Y>vQ;rwaXd`Sg*;lXG4(k2;cw&pNTDXM)8Ycag zk3IGy7kWfjmv$Hu4W+7{GN>O zO!9U-qL>1l^*8Ygb?CNEas#<6$P3<QCbwUv_U=8Du0wKvw*Ow%nRj^icMHtEK&noN^Q)YNNYFbn263TG`4jE!`^f4 zZNC3AJiNmUhd@JbL&2BFFdSJmgrPgv53^O9ERL*l6|cEMuslRHPPqoZa9mmEe1uK0 z$<^Ll>p8}_S0Tq|Y57^_OKgFx=1p|UagK#Yx;|-3_Syl1D~vJ{J-ya7_!4i$oJ&_J zKawR^LzKYgh54%tYD)1;qjoE2;xMjGK1VL~5Zu7yn*3x^SAcPNUPh9u1RJz}7kUQBe*s@CHLP0S6`DU7?7Gj=gR z4ZZDsrfVf;Im3ESE+nCuvR@cHNzs=Er>e3cC6%tR#u1tA;7FSBb}jr!8GRbA)Hl#`q1WAC31-al7V( zjax#{Kz??SL%l zl&#tgM*_R1B8NLXx$qKepH=;5xIYFi5ZIKL9VoM>@Ht8lmhp2SW-~;he^|ou1FdHI*5D8-9BSv04MZ>h+OoP@LIxwzigSCMO#`G5O&9r`z*1O}ZlUcI>iz zkB=O_%IZk0+-B%wqF`29;_ydI=0mo%AWNT=`EgGSO**1jjpy44)z6jq#s_uu-v$VZy zQ#8|e8t_i!A4!xTBo*Z|HuBRYVQclF#Q6k7&7n%5y(*L%hV9(TkT6)-`xu?-KA-S9 za3~02(eojZhCx}$28vXE>vd$_c-tc$;=E^9Kc+$Xzu7wOnmJs_7KhSQw!US}A4AjH z4zU=TG^iexJJ`79pM<5JR_AW$l{iI*0%*opLu^L+ zy`ngVhKYNe*+%r(2=G(tOLH3fi`;e}#I!o!8J1gQ&T;CgcwUouGacKX-#daU0=?9j z5MF3b$gU>&CPvlq2O?L`PTY~0=Ept(!}jb`u`@28Tt5gAm!e(sC^1?fgb^2#zBw0I z^GxVovpgOTMjy|!qHoq{)7;q*V_ylZ{Wx=^vTn0ZK}5Z!&PBiOe#2Pm#it`NhMn{W zy^&7obZ(Qd3LNfKhy?^H>ub>F)JkG~w{TN=)w0yLCqpCH9$m{EO9cq3w5=fqwFz;< zT|rMHJH)JcO~FTPZ2<*YT||TI?U}Gd{X$IsUM?JS-y6u8caO~Ycy$yLC^ep-`<4pF zTQk4UlKfOJ`{6YguPa>%EWFVX z%&d-+y;3oWt&jP!1tx_8T}8y`ov&}Y$BgO>3n03V4GL_Vm_lN$(z1wKf=k z`x&{3;6M&tunfZFi}xK`qfg0l5$W8pd%e;z4L5W-3|Vk#qa{7}%m*Sm18y@!E4TV? zndNCif zVkAlU@GkB?r}!f1cw0UO1?FmuuS~BFM(p#2#w)(ck43dKw3S1K+Re@!dl-82@<08>H1i`3O2TP*%gN<*`T384eo+L zyBT6n@1A=qK9Ig&uS^B$+(G^@Jt1Yry96)bBkHda(^(i~Bri#K^NQ`FZum94)E-h} z5xR1v1wUAM+Ej0CXL%D70o&O)hx;gWUg<$vu<(>b^~rEE+@53IY#mK<9vzKYi1-_% zJ}se2c4|SMRq*4zUp8!X79w`G)E@JOwpc9KB}qiR9{T+GWQeB? zdVf%8*=%n|XaeJd75zh)q)ny9aX%_cLVxteDhQ5h*G`A``YUg&7^y2bK8N>tZ)i6k z73ab03bwlH5!<`Jo5IfVj16H^s*(6QcSsK8;GgEl0kK8J_k@2MRW( zmj`O4cT5LFK%WxMJ+GHlY}nqroCoU?K_ke@@FXvI@Q+*%75doAP>wAluHaOZG03!s zo-i%Y^z1%*j>pyyr{PVOlIfxYe~onY&g{yS3|*iD<1~1Y@CCYYsN_@otv$hyIwEXo zb5wj!nQjkMOqdh6WVK_DTu0TGdxJdq!F(~P_h7F#Or*oA%?#x;VwClfDW+v$ND2|7 zK62|+wZcf5Ms?a#)RIqP(+fkE?Thq>k|c7N-BbFidUp{5$20{uq9fY~@)2RJNn=^X zz6{ygN-};E-r9CfjO*2Fv=Fo*)w37q;H~%DSIX#hm6{h$nbDbVa&dS0W@;#j9+AwS zp+)={ZU(=Rv)%F*IXiMx5B9B1#bGAcK6-5`267e6N+QXxxpDMBn>FW6?_p>|eSirU zYFkkfoi6^(0#lNvBYjG_K0k5g%OsBHN381WMOz4BFkImzv!r&P{!4C^d1Kd1*6RQhu9lLw*OPH9B= zM~udKbZ^%kFToWz)V9w56vWPzUVz2l0c zxfn`x^teb%(Kdrji8Ia6T9)um-HkAuR|6+C6)Fpad+bV1k8-~(+4TA1ZR@gymHTT6!VOv#PhbP!M(L*s1T4<4rst-_qg zTDx6zCqy%_+BopBLZ6BZZJJ20p?nI9Iz!&A1_PkZD+8%e95lW06 zg(%3xFkohY731qqp7Bb_AM=S`XYlTfPa5aQjdl)qR}sxUn;KfquJkM}^LOYL46pW$ z8jK?D5=5sX#xd7n50DJID?e%Lmqm%Te2uB9D0H*h5#@HY4K2HamqXq4*o>P>@{@3a^wa^}k zXJj7u6q%M7ibOSfMCuGjS3Y@<_aN#C7vptX3=MoNt@v#QD^?dYZ*_}T!%hP#ePrW% zUYyhX2gA9J3*(j8`mBVm$g7^x85&cHP3)1fD~v8a!Xs#N%@l30n02IPgz5&J3B4;H zw-RMrR}v##bkKJh4xlqa*3gh*K4T$qO3AIH;6Z*@h;9cp|@ zf*BG`Xi}hD9e^>wQQng|y7z{}W{i}ktGY6G4Ur)+x9*AckeWy4x-@3<*Dc<|`>($q zsx>`oBhZD;l;q@cdqp0}1@fGx&G3+jRg3mV84GW4 zpl#^%7hC%!KU8J!6Go>gb)pm=f00<~V|RNkmH5gu@y7j)Y6lw2<$CUM3~kMiH8z@T z`(=SyZAkqLh@EvSx^a^V4cd~U{-_m<(=KlNEd$NZ7Y$6&-n;PdXzj&Ws!Blf-#YF$ zioTT=kac_0^xEixmp4*HzX*a+I{B_QTt0?t@Y@j)=ZPHcm`;h^KB+tHj<~XW2h zlkRxz*j6-LKO)JkWH&#aL{Sr}6>>&KO=y`LtVi5jd*lFdlThWlL>Yw3N3|b%3vM8 ziD528>qxAO7H-n3X;9(>B91!U8TAegr{yh|ekl9p$(=qm3i@vAitHfe6c75PAmMpV zU2d~%N7$MUr_z$ABv0^hR0zr%di^F8^87=nn}_mZx9OBxsS{Tm zU|u5z?Km;V)VpW6>gZw{YzjSpA?fLJRa>FHgp?d}wR}XAlBL~HEY$L=cSswKp`$Ih6eA2t zy!i0dlY?D~xF9tQ>rr6<51L6ExHsop5m z4%Nom&&HFGgs~DFXA!LSg+{QB*m9m;1;%bR9hcC)lI*A^w@N&flbu%>4Jw$KttE|Q zaN2dLqLq8jdUZe0Jum%MowOGL0zq`vix1e@-N=hrcl`>PK5J8i#o>y{VbS$4e(OcK zcEjT3XP?i^!pO_*&YIV9q9mlt5)w>GV2`FWa>Z7>Dfoj`D~>qK+zes9h1RCjr%j-x z;5}`7g!VeMclx8<=Tf900rq#x?+mYnxZN*Zm3X%}XdXj9Z>3C8#+ZClRx#QsOtXU{ z%V7uML%PAYZtr>|l)9H+IQkxd6k=Kgq)yFoY3Na{fiUiZt6Kb0#-9K)utr=>lFuUTSN9wrrRFJ3Bc3zbV zB}G1rA?6{MonSs=sqU3$H(NO3*~?$@*)AE|xzqavN5bK$sEO9I?&DKP)4#xT6Y}fB zaTd7+-RMZ6&5u7UKU`~}tPwlre|J-J6ECs!%TCwkQyLKYX-2>62BPBx$&z(sEmfz|<@Bxm>v>gy1wzN?KEQSY`o2 zy4=lY*O|2IE4=uaNoU&l_3z3p**>@;k@GSv^JYVX%?%^B&pp~r5--pg?@^vVo(_-2pi z3Dt?b%fw4>v^huAg)W-5KIVfWRy&5!7BX8XCV;XzNf6lfHe$mBC0?@$Hf@`wgcmtO zjy~$na?=`DKnYWNM40qK;cI71rIw?Iak1f)RejTP;RLG#noow2W1kV^=Dwo7p_b^#zG)1m96^@3VDTq93w2f9G)6$?Zwa|rbMrNxg?9tWnyBvzGGLDM5 zOt7-A#6q_%8$!}pL-0OpJ#`GHxw9jKSzB1f$US>dUm)iii?8v~7gAl2+=X?^js2s& z3cSWs%(yinZ_y4GE%7@`jmU=NBflw+%RbfMrpBK%zqB1c!Fsj)$o{vB}bgNMuyIp5NzTJ zuc$a?(s)Yz%q(`vW6rH{J5ymu^#SP%+gbhDr#oA$0ksGu@nO-8qZT z$lGZ$Ui_r6A66m(zOY`S6OdF@X{_0>>a;Q8Sj6-cA8zh>)e2i)M``hqSyt0^G`dgF zHi6?|H4FD1O%CNthydSP!7E}?TI$C%f$qa_xTrBQEpxm`?Aqp!`uu#P>v->f=|a#7 zAJWcfP`Qd%tQWG5?9FPLL2TEE9JL-$CeV7D}Q*e%Y}M_W5sL%*vVe@z9An%%QajzcN24)V zT`iy7BdtBUmEfZji&lfNInkF#>WmtQUZBJojd!U=qUmt8r7YH&!i$)_o^RqF@?Hob zGrOy#DO_U@k<%io-m*I-fsn?UN>aP98wa+Z zuhI1-(LR+44i_Bw>IeJ-bwZaz>~ z=5xk>7gD^wZCoGF7=|uz#iMej>Lt}pHeRjRI&PoNmsd>cY}CJ@!p#^x_~26XGGrn< zLxkAlD<>J<#w%WR#{*^@y;kIr4b7otsidq13z#gHl!m=c7$m7e>mt4usOi>jK2_X6 z7P^2o&maigCu>HMC6O6^P2B5^Vy{F>O81`d&SzS1`5jU>b$F%Xo6{LUwo7h}I`3jE zHhV?eeqgy1dpq0vsUwjO1};VxTsJ@20p$a{he=n^ZtU{o)!(h*SdiWnVtPOB*3MS~ z+dTiYk$W0)230cfs+M~Epvz}|lCQ}_nYWZ4itIX8?{t0UPJF8S%GY_$6J1_ek!2>P zw?D5x(Dln|C~Z8SBx{-L%Uvg&*2G8~3+lOQx~s%o>;H<_vT?{oZ(tJ7}avNu~=Q&PL*Jp47I$=SxV(ZrAUA%Z+?H% z{v`(Yrk%Jp+@Z;Q_Yrl=Ns9zBlFPg2&r3<0!}wK?^qQLnu|H&LtLocn;~uqGZkaX8 zG1JgMzOq>_wJp`(Qx4)d@lOfG-?(S@?AA#+F7DT!5Z={l66m9mQr!D%?9grZ3imk; zsuzw>Up|iV@3U}$yAX+{18tlAagjs3pb zVK}j@cU_1P!nrW=O5Bln-b=cqy0|UZDVv*I!d`_f(~pwvz_Xofp~kYQe|5toBqK?g z`|<&I7K_sa)s@YccDtieu`njh3v!(C;Eh`D#EWloG*PLhM3r5hXw^MIw(s{=E8BGM z2o`=(>%Tq2KFFnmG1Pu{+rR&Ke|}6F>Ey8Nu4>ic+f>yDd|hFKya8?D7B5k0_0;?M z-scj+t=`W|rW1Bn*K9lzVxEq-p4hYJI!ft!gB9Hrt`h_ahn-}k^kgpl{s`odNvgmD z1o&qtt)$~bvhGzOUmgc_l`kN!!@5j$ta5BK&NFUiM!C257Y2|+2p)0SAQudzi9%gT zd1hglDK07IR6joZjHH~k`q7nK^s+9T#x!%8Sly zf3kp*mcUz=W!4*6j4%5}P-p%?=EKK)oKdo7Y_>Qn=j%7$n>G=27^Wq+h znHUwfWlC6!J>S9GrLd88qN1ui?q+5UGM!MPk|wqc3wlHFu-DO&qXUx=x}kPld1v%q z0&3oy<_D~=b|u++v7Ybmj>9ALUYBmz#M(S28Q}d!ruW8e%Kd3M9{GNPo7j<$VZr*2 z6bs%Oed3qnsxLL#gxc+~H`3bo_@hubOG1>bvpm>PjXy3c*+h431q+Sv1vcI;*2Q5? zVzEahGGAwP-2W_^lM_ysCRg=3M7R2uunLbf%h>+Ga|+ao0`zVvd-OG%E16HsiZCF# z@p?;#mN%)aJ#14jOg}NIaEeS3F&HUiLSDbR(TRYa)wZ@v0yPMy7`&tF{o<`BJ60(k z3sb7&JvO&hc<)-{d?N$Yp6iG89r)SyRc52>@h;MgIJ1MMvNe?t<^|lv;J9ra7|JA* z$qUE6x+Aa;mMZ6^@@#(Yh44z{LEmvt&`}Y)i=%av*-Zxf9)`Z34RtB)2Ja*~dD*^$ zwHv|=igukj1Pj?@{qncH1@@i}p)FrLymD&w*b@xVSBNl);y1Dny;#+)J~;a?*A1nY zQ=8n}e7MrDEM&>$_ zWP2uwxuI7Tb|TZRtG-6Gq(_%RV+_HlOv^${TXbj-1jp&$~hh2=m>ikpXQA7Ey@ zVD~S7;M%2tv*Vv#=s~j6*t0m_Bh)^!A1cN@`dngy0tvH0@~-7#ok;E`Q?W-GHAFGg z-n-`Khi$1|G>bWM6yyum6UpK^Jz4|aN9huqL=DZ>F&pn!^?K6bZ(bWfs;OIv`jEg7 z@stZ)*=L8=kb$y5xA=fB>ZbOAgyWR=&}gU5lLQ!DY^8dcFQQhdE~~{|lh5tGe#(;? zG3GRq5;~fDjfG1PJIS9>dOUtB<^iv*yJD%3;2r*>xn(4DE;?G0WED~RmMOc4o7Gr5 zzRg_JcVN;7xd_?|^>+=E?x9PGk&;80zBM2m6=cfkdw``#v~swBYB}bO0MG9vh_Gdi zHK0)xS}9C}s=xx_diOIM@W&x>D9~}Jz>>17l*y_gW_XeEp+wG#xM3@7x4eRIZqLEN zjAj)AlC|Wc7@2A`0t2pPOpkU&-Ud@A%v7G|CTQ7~YvrbktULNCGQA0#i*IER)N##m z$Y0}jFFoH+d@&E>izIIaJr22)kZSHrh_TgdiBJ&V_a;#1?X1!SI{BJKwweZ2S*3lZ z_dS<5d8BSe>nUB^nkRS=s=Ag6vipi5u;IGY$z#)-!Z6o7A>mYm`jd3cGd~6(cNNG} z-B)he(EfJP(1Ck9nF;~IegXm8UcC&?uDPowE))aW&f^8P*zjkRA@)QBARxkPLe^Su zh?{~*D@)z9j(V6~8gPq^tSWUGQ@gyFvH714XI}fIvaFAe4r5s(bUnbUG7tM`B;La* zjwQPMbu_rdSO7;GhPJPfWClOxn13~u6Ync+*q3TI9|U|e+}T~RZH-k0A8584`Z~;l zZY8!%^CK=D*Y9%Bnwo984-q=xH8Q0k=)Q$G)Tu+8m@}J`ymA0p!PtxZsnGoE$9POX za%7DN^^{`q8&B7*N#(Bv3t7LmWyM&ya!mXrKak_OGrU@sFfVH<6il@!-T?cGH%{!_ zkj)Mo_EAE7syQzig%*c(*3F@$0)!Au|J|TWx@4pWfn1iy#j0(G;tHFyvk_=oHu5if zup^I3g(23v@^Jce&C)lykY2z99a!_WVyZf>v-hTrBP)|af(qm~Qv+c$Nvi4p19 z%D(G@1|{KlGDflCmuCD@{>_zYX*9kNl0wtEFR)Gmz2yl5iZw&kA~VAi*7+I~P((Ik zy-fs0ErtQdrMmYq9@cBtH*}Ss9BtW{COPBU~(@bUcPyHby!ost_q(zkzyJc zj!vzdDsDF@6TJt--rEAX60sxOE{ZKDPxAM7hMSG3;x(i`SQ5{MuotvM6YrW&sPGVM zclTXidg$Z_A6*`nb_a{6h{}u_R}yKTi^i>dV@f0_sGCVjlQBpovGGZ8_oixJa>{q+`} z!B|gYYlHz3jiKbbQf6-Ycd+tMh_auY`o5r_UxM8Xjb(Yolg zCevjSDuw|iEy{sPxG9{EeBq8!f!vYZ1P%r4orLM-LKQ=% z6=3CFbPu;61AAplzuQY*t22NY-hHw^$cb2^3Ge9E zrs#EeZeLGQhWh0wB6SN?QN&y9?XmQ4_!&4gJW^;z&92Ddm4~Q_cQ8DfOu14;6jgIH zxZbh|)94~xJ~1~EflpDhO(MFo#pqE@+r*GXX>)B{79ZImxnyu&fx$UXonc8wEIE!L z%wng3TL9Y{mFkgJ5P@ge3@LJFG=z!80Z~rc34VcSHkx$k#~k`Y1Pt7zC5ms+efNs7 zs-h6DmM`M$bw?q<v$iQIzJ-!y@Tm+M?e636yu@d6BoK?dWu6ZIowz@Bj$OWQC=livoxe=RD2^mEbZ<) zMx0Pj6VPFMms_;wU&US1z9x%J7{ znwwZYK&q!4}9n0=KGU`l9}mg>xpk9EaxBxLiIBeiU)iTJ;{)) z0!FxoY_K6WT$brSq%BEL@kro8*F2<~SkA8;5?MCyT4%0h*&w>kvSDy9#P`!4mo*G~ z7mXNNaeXj!wPTOR68b~Ddzn5Ny5Byp#?*E@c0VgJqT+5>_z+v3ufOPAU+zv8^$lWk z_r}!gloVAHm}p$?fg-8MLwhXN_DX|Xwm0Z0<5tox=*cEZS1<*T9+)7+EXqxqK7UnB z$&x6&ML}0xy{gu+2XQY@@ar%>fyVvWFjxm&*TO3?Z4k&C((1D=40a@y&GRn~BSpyq z1wF)k#r)uV_tb`Nt9~rE!?b&}%D4Xb5z$!wVYbh~eQBAeo4%7GP}bJnW3lj84Wq(k z)eH+!(_AF_xKI>Ay~EoHiqUT1Hg`{53FKrYDN{4-rxv-5^gdLP04np{V%S(q(#tOA z*W-5x-)>h|#yT1V?fHn0&kIO}&OPpl)(UzU$@@*Hp*(Y>8ydsw`dlSc8R`h9Id57s z+sip2%nDSthS-Iw@ThkrcH)sQ6&Ih_V+|WozB<6!#v}BSt7I?# z{{SaI*uNX9Zi{1b^g9B6bhbVulMho-eRbmHfLFD3Z-0-q@DdaSlxPw93<0R2Q_YM)*iVAr$@sVb;!^A-$?s5{=xPw5NcQ#9_f&W%I#!#kaQI=dV_^@qEF?Q?jd zsfePEC}7eKPc<|2vgN(oU|w$~k^*6ThG$Gy;)!!rzHriS?V*-k%fZV!lM&iee|qg} z+|L^ho5ubic~n<^bhdzS>f(+qZ(~A7%@ZhEgQiGE4R8YeCeD)YMrwGI9l?C?fQurm zXLi4fU5xM!12y3kwET{mZaLOV45$}qc$BXDu$ANZCt5_0VUk4@jCjFA2vv$eTiSbk zs>u6lG)SSiNKoYEC5s4g!|x%|$$c- z7B;66$JLGieo^`7_UxP9OI0l~mKBN+YSfOtSb7Mxj`5392of2Vx>PpNf~8_ptU}_2 z?#I(|kR=+%D^mT44pQfJ$CocbSf?T7KM>&*RXzp0ZwvGXOI&*GH7mx*7U#cg zc7XsHnYM8KQK6xJh!4tvg1D#FuD)`NSMV~*kH*~_?} z1`9c`)^fIWoAdN$y_y%A0+-OS*kiD`s;RYIQ_5kOi-gkK-V{g8C2-!)YTpU7M^%3l#mCswys_Wf+$X%s=bOLc9brKHJ;mcl14qPQ4XstI@X2Ae2x>Y`i=e`*kg&@) zxW!l$jNVLUzs3%mA9RF$?^#_=)C$;`Rl?eQtH_dw;>l)gYFeM}_i&6l!SXjs(BLu4 zpm`cHKabtnL>jM9i3(z9UsEzQlZpHZ?JAYVUQGQ9%e8Vx zOrl8@0`n`l-3k+*CrEi)z0cc>OS7lPKCDw4Bex)l7dD?w#_zhB+7;xhY95=Ez0)_N zPsF$xAVG3}z89MooLl`zT>!?J1qMsCj3;$^Vr!5u8P%{;Qk|bQhWfY|;LD?a?GfE{ zLJeNdwRJ?WHl>`$=5jB_TN-OM67^FyF+)2a0dA#(hFVpmTicf|`Pp?)b@py*irs(v z40)|MvgvOw*?#=ejzqN)xc*3x% zy?rN*a7n)F5+m(aH{mewM6~)3LgpnvxiRzh4OT4Hl&h`ax992ak4!=5uQUU%3z&I_D_4IyK%05eJ`Y3N+6ZeI@~_V4m)-7H*IX&iO5PLpu%IhIXWC{J>$-TEE}nV zKb|GX`5NoUhI4IyqpJbK{@Ix%<43Cann_U6AZJ^pjFoN!q--hXu;@D)M$7*!!y@d< z#!pgTc$u?*qf{l^svH}9@D`)-1WJgoqdsTj; zd?M?IwhelM9KEe&qOeCB=fvuQx%h+1v}z2fg-TTUBIo?*l7;Zqz{AyJ=8w(u8S$J_G<Jwc0%QlN~_m-G!I7h&p$G;aUj$R^I>v(`#~bbt}~hR z5x?o06g!+=-AL5-p(DoWAHR#zE5CWOX$4DMeG;8tUjoo!&1MR-XBTFqqIcl0Q~jp9 zQcW>WV9lRca@SNCrDv3aGJ!gL{QBh&s^YAI^u>$G%{xzhuq z|D0HyPcerAQLTE%WEEHaORY5^e+Fa{<)xA_gT!m1Dr!o-n=IG;aY?z-x8O`l*D&W1 zUSqmpdT73RIdA=qsAPLU!f8=XePPTe0QN=T(Li|%5dmgMrVS*Zm{WIiONSsoWH#x7 zE){!d((-Mt6C5KP@xfx7xf%fZ2wu~5Kgp9CRY!m8bK^l84u76Jmf7m#G#>h_d=AfL z{-98v&>$=lSWa3rFf*ZAxV+aC~$Q!&@%vPGY7zdZV8Z z(pYTOBx=qABVRoKutSJgLAcHQJ+KK`x5y+?X_wSee+V{dWynY+d{LKm8pKjBhYVq~ zxJ)Q05uX?{9n0*KvcyVZVD5@83oqEM|GKRDV34SEj575RFg!CNK}y^hrGP!J zJ};O2w|5wXFI&fZXqc80^Ld^%q1pC`Vf1KX94P6Nm*HsxW8d-(Pu1pyvd}o_G0%pO zp=36liW${&CEd8}a1xeeWV1qBCt_Hz-pV$6G|4er1H3 zV-@ZWgQRORa)I*12vfMfwdQYuk>83@m-UgrPGO$ai!X~J?u-M)GW%Y? z9OKVEU;p4`f_swd=VARlkYYvB+${RvzO&j*3GZp&)(n0c=U5lvQMdy>D?hX_k%!T! znyysX={O1s3K?LQgWmXoppe{Rpn9b*I%Xaxq&vIwaRaP-QdY3+6P*wR|N8;KXvK_b zM_TW---T7{z6hHH60*F3YM=LjbM@lOq)cfujEZ`8-7U-?^-7JT(D-!!!Tsil)P@$# zYHO`09LskYn{=MMGNvbZS$Ja0PXGC32w63OvdX&Qn*?R^v-;CKKyY3hIm01ZBn{nM zlSg zQWF0%QEdu8ZA%fte>y6g8=o+fX1B8m8S3{fH&KnGi+Y`t_aH`aGdTObbGCyJ%j@}1 zsIO#ki>}Q>@|n-?rgN^zaVIju^8JF=$uMDUdtO;)jtrpJZIg`hi^UHlXSWA9I&3_i6iOL%;! zLWDI1st#b99Ud6h{_}$rHeMZuQtohIIfggb0VR0a5s~E4TU%OX3wFfnSmQMZ#wpG( z^haGCZ*M^c=f)|CpEnN<6X!=h_-YBvSyY*SzgZ3^e|zjLJaEGbGX-EMD>HK&!IWcK zgiCz_0S$597HQTii&&^@P4#X40V`*QXxYAQ|27+w&(R5gA_nwi&;g7ySHko~a9~H= zgm|tU&Nce1=0x2&ZDKyZ&Xe-spcojLA+JcrkSb+w(yO1^IeKuxc}@m(JdV+V!#!$xyek%rpPETj>bKVSO$gH#D}lPgVlY z#Qr&WUzY+{ z)2(Ae^nk1Pp=kC%P4&9IwIxB?tH^N9a6H)c@yQ?x6S9etYt2wN8#uii$}h5u5ENBn zBGX2bPj3{{kWWHYX$Ku#jqLF&Bd*Z(g(Z2`0bOpetM!hE~C(dkS*-;six@3)Y^pT2~m@~j#% z*tnV00JzCL|E>DeQ7o?l*jR0z^Vgu70~&?L2pi9PAOQ@Whwsi^Z)Dm1a!7v~xr7-o zhP6#SsK-8@(sU9-CXhUY+!dUGQlDa%T<`1mp2ttGC5?|oS~G-=>ZU#A56{)28fU5r}N#0AK z#8x1ra6+|FvT69dcc9p|25`eu10FGHx+Yg%m-F2wJ75-ibva z#h>liMjWm1D2DI@Bi@f~D%(9W;u8f5x;li~mAPNayz@&>T;-)=V!FJA$`0+V!uvV` zS(&e^M}Oo*p?6H)Yrzj;+4}A@Mu-+@+Dqd;Am?V{c!d^MW*|I@182@f&oTKIb}Qh3 z0kBm?tri18!lY>-7jQV0MiMyn!ojUvF!`Lyqyj}Mcja7>=fz29RgW8QE|;P7G$)Fh zY9$%Jtx(cIbQdCA+^rj`rY{~%vVhDv8+EWD>yrSPNRiV72qw$o<(5_t?ftiv!8Uh> zI4Q023WTnuM{;pbEdC2}_g%0&gYzCh&yhxq!N04gHjJKS0`v<0ef}7tMuOQ$mACiq zfKf*C30&D7;K9ytSV63Xcx6R>SNtnb&n~KLv*f)|iKrJygWv$&``vFuYFuqQw}I6QEq2$h$68)I`; zdvkJfxm*qrV{9FsG$G^Mw_CYvxBVV{1v9bRz!~5rJE869F<-~eq`vx0p#xy4+GqrG ztdoq_R+8|@*?$}*HM#?i*7rHNk+_8;^!>+2z>kW4y5|X^b=8^sv)@WuohM981yfOT z@uDWTwXdNiK}>cPkB74(zO$nn4ti2hLOeWGA?b?YV(}YZ(PvRCmONXy{kFN1R^dL& zOjAAEaSi8ZG!%E}y+<%=oAc9JK2Lb-A+25Lgx?hl(vhwK|7_k+hD#~un5+kHkuRk- z;zEO3ryyHv7u0lxKs}qKRwHfvKoa!6LLk9A=Gt^SU=cNvpec3Bu&ocgajjk zI;6do8q-i!uHYXV{O1BxqIVBWEXDo>@cpL@Ob62A;_ApQhP-~6U)m7HqXx5EJdcve zqtR#+vQ?uy`%G1toYvE5weCr_lTE?#yn$AAy zsO=LkpESKYi+Fh&=yjNFa)|K`;35z>vnY}zW5-3JSm&l^Yx%~lmDPV|=B~T&XUiWb zR(TokHD@u_23Af3zy^&{%fTyY7ovj02u3kIGH@G7<#vkGCjB597rUn4P;bHI`eUjf za&;Q@P8zt^Iaszujt?Y1C7YoMl4#aQwmF)4F)7|}TIF7&!cFNexF0I7EZE#yTIR!( zR6I96^|0`bVd;VrQ-LMgPHsXR;6n@*bKHRhBHA+K1AXVW@AFcK?bRnL3HlJqCVcNN zYiQQ-Uf=A5tC5vS2Fs&ifK1S-3@HFi1APk_o451L)rOSJu@iW+UB-g?u9%juB^6c= z@S!hOWH=?7JR_yf5LazmoLI13YB6F?{1gmUv3He9F%;Z{VRtha`s28LSe6J72MGh6 zh`+GyUTgiJ@BC$=%jcN`K~5+pHYUIx|wy-4L(JdxM-ElZpz!mVE7h`5M~yF zoDKsxRCT$xdo*yT=`13NU=k(`)sZH2;d52$1wE85qrFlgj+f1D@Ly8ER&THN{|JVz zTg|`pSd=c!`+SjoaVUl+8)TzOb|KEchOvTVBF%8jU|Xx;(Pq*CY9kMf$yp^G?v&Yd zuZuJ=C|fgH+Bv|~5%fT3*L5N1+02a@g$b3!Bxjl}{J>Ey@%EV;ks1EVWxQ0?-+r1D zxSkh)&xHp#_AHl3rbAr)D7fd3ONp&~i&!hLP>X6QmR$`3Bi;`1I7bkUUawGeis}d4 z4_ke>V`J3r4*1yq8ok>d(ZX)peSoR0sHzJ|Y{q6RuXsl(RA_ht@@_|;UWeN5i*BLQ z0y+?7Q7>|qUH6oOPTJ?1*LpAZa`)J(1QNEpS>9tD_&zw$#{$Otm6*^llwE&n3AvD(LIxLhjR@l zao4-V?pf)(PrqHUpr_JD-e0y2%rS=AApuzYfF2iicW4+GIjJFebGZF)>q~KoSL@xC z&7*aFRp$5OG}iJ_DVwM*M^%URKSr8d-?wABbL9Yf5S}y4TUD&rUpDP+DZKD+862Qu zsJ_5Cau+0(jeF`mt1{X2Simw0XJ&J}2||Fc2Zo*bjY{1DuCqR&s?bTA$PM<`u@k5a^`Z zn7|w6bqx9Y$k~Wny-5i6x?vPw-M>C5~ZapE~@5`k+ zwTq}=Uo=b!Dp*bLH`?qCOR#%Klu)^QROGkgVD7$Q!jQEJ9O~4ik%zQwA}6Vj>{$E& z&G`s%=?_XY3ms^`m?NUxhjJSPd#C|UlD#lO0_sVpWTzGFU3fWwS-zT`hl0z?!Dpai zg9%iX1+!hL>jF)`=OR4`J?O|N@2oCY<#p2WInLoddX5VQEy*x5rnTGWSnqKXvwM#* z#iei!2j$rWlY^_z@LFr;gm2Z}8r=hlZ>I|&+W#q`>!~o6Nbv4^)?W%K_`b>TsC@n> zB+^(NPHo+7XGP61Gv308StPTZ<=;!6KSU_^hOKnA(RCV)t&C~?l`mJRZ1)?_@ZCnh z##+&6+74!iW}t)-I4~Pf(SHZ%4Q93U?8#QpJ3 zl~JF=4HzINr&;>_8+9SEax;RML!BFuXHpqLV$;!L8c2H6ik}MvEQG6>V#*LL9Vvzz zaL;4tRFPRR&7|jP77-y@wsE;3NoJF6J81)VLYDI)m;Sv(_gm17(%!b-3Ed8=kBlQY z57RtdDxdz}>!6Xv`kk3r25-tO0#Xx=?x=N{LU>w-PFP9lz!b4uh9CM^=%rjfU*6q= z&4ZO3;C%+N#_JbSmAifFysw}*@WGgif|YG}g6V{ypKu~J9UE$VRfdaH>PG>QI-{$p12_LEn}l~D;X6;}x% zDGPqQK=lEmbhl8bW3!6KpNJ*qXJVUdL-L0!^m~wjpv0Ar;*k~ zwz{yB*&+tq&HSw}am#7R30q6>m?)PUd|?AqkbIDmy;j?vaGB~W*$#jHp!(>|3E{M_ zbG#EjJfa+~8&uuPx#-m3XB%!}6If-!CNs)6J8}-9vJPjWY=uDIu=#eFEEIEk&P#_;hvEAwg%RI=D zFGS*qpDY(G$Rdj~*L=T&cIL z+cC^4jWtK;fvH@(Lv9WNl-qfB4YiMBG3>|uVqn@f!N7{FC*w3|_&)v=fIxd7JPAc^ z50$TiZd3u;6U0yZn^W;SNP=w)XyVr}I<+7-Vd)Ax;onIcPgl9meQ{~2k&lrwpyP#W ztzgj>_UBB@l$XDBm2*_Bt0fm)7mPqtvh;-}$OT)%8$1o!Vn6LHdJ)l|^L_T*Xc{6m zl*L1RZz8q~&#B<4;g73u&{ISHp{TrIff48!R>2jD(mSl~o`87L%;B9nNV3Z9eEL6~ ztFDhqMeEMw?;PtCV-nLS!88fYHljp$n5|$8L{-E+Wf7ZtsDL=nstY*I{c8hOf34}v z-2DqlZ}E}xb4GBXY7?1Hhh|G2ONSUDGQ|6d~dbSo@G|Clvd0AKKR^^k@p~U zO<=2=m`|jo;&P)>r-E{56~Rfca&@w$1VOu>P^^Pg`4GBE81A>b4v|mMS)gUvHPC%{ z$`Y_T61^YEp;%p~WfSXgp$sO@^RDkv+`VKzmqY`}%Lt0FAx^qi;VQm}lbRIBAsocW zU;zP!oH7>P)#o$2Ed1qOH}V+iASVHMu2riIqJc9^{XA~Z#f#OIe~4-hb>v!qTnK!iwWfj zwTFyH_DQ=-Ko`NW%85a#ckK+U$sAPlIw9TbNJJJ36m4b}v2fHo-|0>!WFc2Ew|?c; zpems+gLBDyLyk8`(sV<>Cab^DbnC)Fx4&<1ZDKgC7MR-XpM<}Cm`7fXhP~(y>82;R zWgpT>z-OK4LEcPOnf5ecWlCk^$<>&P(7`0Z_h8Xw^F+yW3#|x4A7m4l8C4oI-pPm( z&S!I2mq)|eR*#o%(7ji7aiWOL^#+SwL8jvLK`*T$2H#y6ZcUoXteU(oh`}7#o@F=J z60%JJK{NUI-&A|ggWK;g#%DGL%u|*^{B9pFyX4-G`i>12+PXC#RR!F5)#HY_MRN=`Vz=bYwjQFkSPM$5*#^cVGO z8-9+3^**muQsm1;^fc9CvvzHY;9N(X9!g#`!H~JXDE*%ycBGkp^CPAriTw9tNIM(3_QUUh| zRY*UAYnv-IMRO*VNRYmuwfk_>g#PA@1yVqb+k8?h!B0Pfm&j%x?vGn#rjI;mNK_v*_APOgv|5vs!~x0e)o+buAk;Admk)U(7~zq> zoq6%S{9S+T(V8p>;g|B9-Q-`1)-B?2yI!na6;=zFI$ckxbw&lhs4owVP^OB9I`)lc zBp~~q`c6ovc(lm0s>}5IgaB~@Ss6GAU;~;>JTL%Z@5Q?xT6k-qM=a75xpDMqglZ6{ zPMIor5Bx`8T;w&t9mONF$Jc7sy(Rwr1i!!6x55UriiN46p*rGnEStzfoYxIxS4fJ= zo_hs>yP!i+6J0nC`$Ckh5OD(x!eIX74a!Vgj1WYrCg5TYMUgH`(a zZ_FS48lCjms^aTAHyxP76^Y-AtAldUZOcpB7E-tWaaLpKo(o6PNUzS~;E#(GXoL_= zL(SyF3d-4z@j7NecH@(Tk4Fl{%f5028$>b=o`AzTIx#M7Ep1qIMHLUlXyAxYDnvx6 zf?oYLF8&?p|FP#lBHgDrO7ps|@o=~B13bsQ^8dDBbc>fpEOdP=U^cQuKsL02HEt?Q zH9|a1T9y!P++){9(W~VEI6=D}r8tTXuZY?#yU_6i?0h`d6=iHRDL%eK5n@?mJKYo1 z=r9bmi2ApaT>bb#v*pYhN@$k2ix+`>bN+q|0--x81>9?iR|1PrTzDUJx*p@paqBoX zThPWtA*-3kvtpC#iL}tdDv{s#OYZt@uKVj)2>Atqv&30X%c9xgo0bja6+ON=U9`Yc zgn6Onc^wd<*nhoZm+Zvi$R2^crS+DBt?2K>V~%xrlkVHu0SrB5k6haq;PI5QI;U5s z;B#>k+1A^{jVKX9O5>vn;0=IIdxZcs#Q2Ez=UM~Kb^kuY*vA7(TT;2$Xse}+=WjVX zvBjA!tO8Gx0y*AgD=*r{A#v-!NBMHQWj8HwUHX=E>BX8~1TiLj@0iC3?3XKB=ryBy z&`m`I5c^MuOe}vZY_$k3AGB-Xco+cLuJn?2rwl^Nm)?&-yMeCRDk7&Qp~S+1F!XSO zC^pxc?4o3ax5l@2=&CS^XqKj~xjb_bXV03_KoYl6jdXd!?ua|G6%44uY8I#Zu)=n zxBDt}?9swlVo`SUTt5>{G1uKeC=Wkj7q-DZEQb3m0R-rLyJuXmDZLx(M29OH1IrIX z$JM3MTW-JS^_#aOYRqPUR`6PkH#VUFPR;K}piOgsb3ZnDrNPxrLKcnR^r+0i9GoyARZyGo+F?L7MZoXex z!xAdAE^^i$F*TkX4WnZKoM6Yc$%hLB0Y+8WJ@4%Q|JS6(Eua8lA!8(=oMkM{t+aWp zix};Dg)^8g#Kkktr#NklcAqI!rvr_@k!cwsx6_N}*jb3nG+csm5}cTJz!Y;`ywYW; zvB?A389i_y-TiC8wyO>mT)Z73WV(Y*`45x|%&APr2nVx1dfu8kC6@8^Mo?w{BHmE9 z!Kn_e-+#DcTNkEk3Hq<+fF%@Kuf>!+5O9A`g)2nSwkCdzBNS=QZKeg3MKOF2#u&)A zh|lp@c58}Hr3VQMW82i#@8M@ufoX-0AR{u+j&vG1LMfWzp}|y3G$wK_I`W}SmoS`1 zFVZ#K*4G3s@Of057k2vJClI*3=C*ysJ1IMRwHF@!3BT6Pv3?XpTVG%_k zc)sS+x}RTF9cihDl90O8e~eKWFloBKGg2yb9^F=P4oH3Fug6c<3~uYgpW}Z4@kmJ( z0bD=eBFm)%bU$@V$=@oU+lX+u47hmF^AoHo_f6RLPW}tez&E1{-QGdig)xIy4``D{ zEHaa4W-MjC>xNV1ev^o}v7QWQLXD{bFYkjxHl-Fep-r`8^4cyi{S5Og=|5<|O3n0f z9?oaL{%5QZQ*d0X1v^q%9z$JTv=PB%eyB zN02)ZqldQ&$ThJz2(PNK0arONLfFVAUf>fw8Uv*WrAgp)G5ujaEnQ^FLE$^U>x#SgA^qx8HG zY8veF9Gr?&0dw#H9M_xaanv)jlgjE}SScV1hD*2D49u&xky9Z)BTpG_Qt4E{Sqt{W z?U@A|oJqB9Q2Cxcu5E~{L+w2y!wbA&(z0}nx^YwD8TjOf5nEx4GNI(G_pwfMeL^a&le$mfoEXLd7mWW!4{EzF#FfI`2pCPH zXfmjw*m{2>0E#T73RnAh?BozMpJY7zdpk~?L9&~}+w2hf^UCB?msSYN7@nYo8IrJ7 zouZj~QZ#KJ`WW> zWq#9Wp!)R=Hj}}W4p&X;mg23lH{_RfIDg7!FdYT?-;b65d<`^j4<9dRbM=8Ie;rL( zEkuFBH)cmb3y~mvFYaM*1-@)EpFmt18cIT+4(4+ACHAnwiVDasc33dpeDf}VR2}Sn zeuN$JyD&NsdZxT+l3MWVbd(d`nI&opuOb_8fnD@uTX@bLfRkN*>May@pM{}s*IL&W zH|h88iurz=R>6N;tT!zRzwV1$8=H~-38Ch*q-;+M>ZWtc3vmI-W`j5uQAI&k9xv`OUH3-^vvVP;ZFd^Rcq4 z1}UT#x@8GGr}swbo{K4%b;PXsiZeFWk8`O&PGAE0PTC)!8ZM%14W9j6^)f^dST)k| zRiv&C&>@s@+^P3yqMFP+iS#VEcrZ=DUa?=^isd!&3BY~dw=OoEEvaSV{D>~W_l6q2 z6NqnB=pn$@hoXsbBi#D;Bmz9!dTj>|Fg9n7SE!}m0(JABdUqrTe}!o$7*T4RHhXvl}?V*_NeS!7}zA?~a=Xs$>xU^Yz|Ek}6&tz;xgUv{gC>@(z zo>6QVWv+VyzPdzMWP-k!5Wz1)I83Qil88*wjzev11l}Z6ruRVTx|zmb!Ts_j*a$WM zD3sbjW{&0W0z@C}mv z1dyXYgf1eX4@2|aa#Jy>LUfLVmgt?s#7tLhkj!{|P}+p@`osmD!vXMvtRp-p0{QUD zauTlD0JUG=23kMzyf;Wh#Wlgc-F~GpFBD0qaLj|TnZBn9@AQo^)7w54g;MRk*_v?V zH_+6L42E2{XK+Pp!JchPvM-7z#TPfv6@yN|Nc{eebc1K8q^%4Wz#8;2rJb&)95U{r zFAe}`h|0!M0o7Y_F2B#lTldf6vm}aQ-Pi_!?sSo!%E`ZG55n!bHu;l7O}ud-z75k( z<07^I1a+8ftL@j%$8&1)~d zeR|247!{b47mn94u2MR*-H~uOT)wiHf71<_utth;=WpVBXvanTr7qzp0Whg^Ofs$ zJY9LyeN()CGO~{(AmIic=r$G0T^vV}N8}wDkuuBI*)Kg-ilpI@RAJg?-;ct~umZa-ubq02DDKR2|pZpTX(l+A?PQ1?iKm)vk%<0K&GMVsY#5=F4=M%$@nLa^tZSPL`fqy|4uq$*iU?&Ni}R<;K6>g9WG39~07cAMD?9N0 zZD1W(P(e1n4hcV@SKt!jj54!UEKfa(zf|q3=Nl_T<|cns&V^0OpHf0u#Ns-d_3no2 z4FciI-cP2Pj`XLhxzPd~KQn4xTO;8ZStajA_1_bv%1q#r4_D*a`GU8&7THI6P>%hV z%OV(fU5DVv61wgsI?79u(;_p7x6(^s1v3oZ!tY_`84M+jhpRkTE{knkC6zoQYPQ;o zB7oE^2cmTOyRl>lK#gED9*sJxQXxUXSL1%U^F2_FqmiX4joX+h5sTWm5VG>k2V?3i z-Qi;;wkY_X)G+@cFuY!v9CzCcy*e+of5H3vVr;ns2a=?6fThl{%FYjM@%ix1PKd$G zcgkfXFv3%Tnmas*wP@QZSq%!vLW^;nGg&Q8u698FSwwnQwgEJ<8KL5apnR}Jq0}oW z+>mcvCXP*>rj6r)>Max0j|?!Y}TkaUa5I~wCbBC^q!5ZdE*#l!n z8@3TBu-_S7eGamE0>B4jPE$?nZpE-S-k**UlGpstJEv*Fo>}?lIA&O!{z6NM9^upA zfa?$5?VCoNKiIVNangaM^9G5 zxF1&DLPE@wd~4AoT_@$ze^}{+rLV*nXy?#MXcTdEA8f^0$>GtRD87-?)mc`zTt;3` zDJskdt){#)az1TjVy2fnA)4;GMhOxVIcNjp`>J^mf(+PNQ~J z4R~h|bd?;YN6GE3ZiMZW7{}I=q;eqV^JQNY{(LY7L?>pmaiX7(Jk~dcOVTFqxuMN4 z(m~7A?uW5RG*xOQmy}5vN$=MRh~(Leeg|0y%c{DtkXFUn}|MB?D~?+lJ0%vEINtuJSaW7bRK6 zPri&D0&o^VidT>jU0+gBtR(Zu)Ut~|gnKWdw}pG+c@5#}Qf0bK&+^9H8}-_i(Gwy* zYm*lenZr%}DW*+v|DUR>dL?hiML&=m(q=7EjZbTQPnjaEf!y^qI^Kty_R3hB;w6WU zI*b(Z*W-mD^`OUs@tRY}$<79cEua+wOQ+NlPzEJ+1%*hP15aL7ZfdF8GE^?}i=_)g zs&IxpQ7Jax^^WrdLrDf34u552{6%N0M4uy+Z!o*~{PgZ$bSjSPGBo=K5D+FagNt;l zaeaKbu!W5|sD?#?`C~=9-az4PvC-ul`!YKt$(l}6l$Ho9N)xXdn%&6krf~5dJ)t z^;((%7`^b(bJW|cjACcktlU4JUv_IW+lpr1>JZ`ay&RrdNsefZJ?y>st954?TyO!3 z5_)g~*rGY$BPmAX-xd(R2jK7;AL1R0&0QDKw(#NufqxdZ9~-{!pfwL|A*%U2)+V7M zi_C6?x7liA|GZrJROhMpZ3ErDzRc(sIXFNOEGF#WA4|Ooq#){Rv5)770AQLKglD&q zGJY&-UT@qqw<@`+(EktJ0QRR;sDjQhMT)Z%hK7R&Y)L|ErH0LYBkyPYAH}Y1y5adMe{mL~}&k9-B2)R(wFK+xEK|U0jsVR4sbC zB99QXd;rHM7_hg4VcWsDO$X zME@aNpT;YulmqK+_;&x|>>G_MM8h}g29PRnWH8z!l#Il^zkHQy!t6QUx$i9HRpe2$ zCrZ2MQ5+b6+R4IkgS=$b{9LQ*^rt+Vfrbee=NFHH1lMCC`W^H)U*7K%vh)F1`{++V zUv~B1=(x8c3c}n=-5TLH!wm>)W;rWg^&n*FRvz&y<3FzNP&17YOu>rjIwxT4`-L%c zQe~n4W(C?xsltfeLL>WPhsG;O3sp7rJ=+=Z*NS-3uc z26?cmbUnD7xI+0k98mZkS0=P{^rN>A4f_=nIk0$y{DmT|=8}GoPz7?^5yp#0k9Xw; zud3Cf;ts3KD)1Wc2mP`U0IiU6nnYo)%Ns~&eh~;^i}GlTx37FH@EQVR!lO4!%251} zG%&2X!zHjm<`rgyY*&>{&ip(6ko>uHbS}Yt1Un~9w26Nd1kcT=2CS_k@L}Iof+n1N zw0naeT5kd1M_=;;L9bPmdPOLEt9mSZZt{KFT&50RoBplQdNz;mBQ5NKs7%ofN`Y@- zz^$di17oV1?97R_NiAI2P>emT!MF?Jmp&CLx;hH&#+JVBT=EJD`0)(zVoG$$x4n|b z57Lt5*I67H9HJ>6p(gmxVbr80?({~zFb!fD(13Z3Q~y_pu5CftX>wX$mDK!_V~*{7 z2uUX+;!<5sWCftJ?Jpe3>ZbZbq@<0Q{(4+>^Ye==Qy-UbwS2_=+j>lVax*wmkj*E> z=V1FKk#ccLh%cU1v#?9vS;e4Fp|VyXwB{XQnji`^@dh=n`Oi-T9bWww&QaV0E#`PT z_|jiY>b%KNmoFKrFr79t=kMv2I&sY)ZXjVwd5#Sha~C(S|XS7z&n^PuYpOv_dX2pb=<`a(K?H_CNrw`S(Hj zd~zqKd91%gyh~xy4L^iyp6Zn!Vykk*OYB+iU^t!YXi)(cDASP4HScO-vbujiR^q|! z_3nrLL^#2`OoH;QeGJcrV_Tr#fs(JN(ppP^Vpu4qB?-^(&%i_Zz{$I~p3yuaQErVL zvp<9zkaro~gdz?s)ZA;|Xbuc71;)Bu(;}Q~t{W z^mk>r-vD zNvcnY=uk9T4?9d_>Ptm})=S1AaxOdTJkLr&*cO5zu$7K(x@P50W2!iUg(P|Ucikbj z?eO|^Ds@AJgn_RFZm?RGKyZZDejEL$31XXMwzB+D< zNmF8JD4g`ZRwlnXmPF~H1Ga;R-ArG*kH-bNo53VymK2ZRGNE@fL4oSJ;ZeP85SEL^ZQUnA6 zf-)CikBMU-IO=0|Zjiw{xE01EL}wn%gGP{5LgK`h$Z>7Z_;1IID$^rOPj1FrssCJ({FYTS!#z!q>UZ zrZqCvzx9JpG3qT(36L(50h_AyvwA{CVY$Th_Zkt%z|`$8X3pUO*9!mOBm2iE+?npY zg{KMFd+F}cQjkn!PG+wwRotOHK_%3j5b<1J^n5F)ZITvE|GqQTi$I>z=K!Oe1e8kl z&+L;eoK}0Tu)%#{@4^r*Mr)Q!e5{J<%hBTh@Im5-9fN$VHF@e+o0W)m?W8#paA(AM z!>}@r8_eqczu?EQ2{G&n=&C6@DeZDUdtkRFa$tsj@1i@Ol~u;UdpfBY>G0~%aJZWS zoP=u&WX;M@zl!qsNS3fjUKsp{Vyu4%8`PXl%|Ri<6&Q`@`q@W)&N65 zyuZB9WiJWTvJ1_tuq8~{Hj*h3a(dKi8=E~~Gu+)rt?m1sXEHM?x|4njE3J0GZeYLP ztdanmEQyk7!MkCL6CH`q@l5#|*6CO9#?693Z-n{`O?%jZbXbSWO@h!e7f*JS6{ilm z9L_=ba{0=!)W~7dSt^7unyZjSy>k9?ZS?Fw(ipdv|#D4 zC1n*Q>r$AH(%4S}#y)js9w0rz=EhtPUhOt5V%ame+wV01PF9>m$?@@(n zx$d3vA|LXzhzZk1g5$QhSWFTiokzUT6s$}{8<)TmH=P;*aw{vM;&>Sr%BPDJruOhd zSl75D6U9i$M#+Kj)eZ*sk(M+dQd^DEX^16!+aJ-XTe`W4I1QTBxx)GlZtnyBFr!e; zBNlOoG-kf~gUTYIhVFNU8u!o^lo)6=pX>Q-ZoT+EgZoX*Kqo<3qyyK=a_SVp1&_8oaQgjQ!ZJ z;lC6Zd_`ecCSd$-psPN86j&jbVX0zhUDN7FqUNbk$r+0moD;v+R>dF0lFW)H(kjOR z?d8%Vz&&R%KLBD*&=Bp)NpqmW>2vOz2UpDg%?TrqT- zkUW0$r(dKlSAZS?4S$D%3;XLFL2akmtYV>)fe)WGQG31Nb-l(3sH6mAa$Z`nHYu(AA>2J>MBNLknz4T&h-1_E|tvcHIn_ZX@~z708I zYxwz!k_5{}p(n;Zalv=gGPOxjkc;AeFKu9)y0oj;=xdI;-8UW3ApScrQNP6W7E$uG zaCOqk3>-dt+qRJ^G|bbI>1x{nAL8Q_ZaRn~O@7X^{MvDL!u^>Fpb~&2%B-_B%vLB< zLZ)#5IG7G225uZuuFylDjKf4&DAxHb!gKXfm@ddS!)=DIia4r2T1~f8@_tUCVpc88 z>AL=wb~{9&n2F#EL-j?ANU|}2%MI|luKqIS6{n> z&?VEKl7G^tKx?~-vLN$YW3J!(lAG!a#;6>fw|cCurJAE|pJ^hR6QlFp1g~WD+FvyG zHoB#tSi(ajcfV8lkTL4UBm}T)Jx%G3CoonYFqHeZFsRK|C6oPZkKbwiK8G4ZEtjB@ zuf~Oo4`TiX{*L&Yv94Fv+c;>x>{L+@*Pqm(!+Z^V6P1CQwOT2say~g)7)@roHr`@dWXoo#JZ!DnO)DQD5e@h%KS%VV`Cgz|&6#h00i#Z-csw|u0bZ9u>*90($w+<2_C>Kydddr_G6%3jKXOzdqzbmQn zQ60Gj9Esy@LWp)oIK}Mnjt0AEY3$c{s8AP5*QB@m+#ORlh7~(=N4E?2GBylY>v)TsQfCNH7#kPE}U{_^s+(B%`z}UnR7TOR|sax|x zW}d2&-)#p(&F1#-AK!%r40m&C$0x&Gdl{?B2&Z3ePcYSdm7EY91#ndJLy2kwf713! zoFmLV(XhRWP#>Q&q&h1NvC@`smaW%B8(J1`UAPJ)4ly>ivOtPOLcC7E?gbkTL z!Wq0+s`^zwuIPJK{St-an+}Q-n~+<}g4=xlh;PBuVefe3_-}QeY7b4pW6<@=KgpWg zwu-H}Y9zi#fLbwSea2oTdR(iXWh-Zi_&IEs-xxJnXiGXnWGYh| z$iA9#T*!8e9Yd*;uLN2K=#+>yu!d1ez8RVM{!nW2PIg`^T?07-Z=C8P$F3+LaxC3- z-O^Z%LU4gq{cG@jq)7+mIN$Ff)xl{K;3C0{QbG0kT}5JAnSc*N?X)tz zw-3wT-N8k4s(g8&oJA&P)kkN#7$Em2%JxlAl>XZw>)bIAyP$Y-I0Dl^-j8y01eaQCt1Ozl2gn%*B*$xc=3(Ln8b zX3kV+C(cK%Y2nT2f8ZFCbq&Ho$lTpGFku=IhuvXlv!|BJM?(iy!{2DG^03`NM(~4X zi*Ps0j2hXgy7uN)>Mn`i#_gy;cvQ2l12z-FzG(63^4}kuYJ#Aea0H}~S6D8<`BC0t z&_>|OT8~f(Nr5SveRaqc3gwawB|iEgyPN=Vd2gpW_#VXCA?%YPSzu@ZGS_HHh?s@9 z{&(Y*;t|z5d_n;Rj3{h|t-6h)-CXx}0{<+6?F2?-+>PkoIJz|B8aaB9}oF5O~3^w5Z!KuwA|OGNks!8^woXB zYTQI(bj2GaB7XDwJaDfz5UiR?v8MT9l3A6Yl&8dG(IO@>fdUJh^)}zf!&PaQ0kL7lM9NfZ0o%G|XPMs8n|%qEq@? zGuvffFMBFZ0_H%(1f7*oHL=8~lrzjRZlREnMIT9+_(x6n<$Bu!f(&DWcmkqm;1i*_ zLA>TExmz*~OASLPE_|7@imm*UYSx+J_(5tY;O|iy(kWH=(c7$P{8cb7DpH4#P95$2 zm8Bl!$Of-b4=vRk5rao`XVd?zZxZT5uOB@a_8;g6UMx;-Tzyyh;w4fh7kRC#<%IW9 z3B5YT{In47Fak}=>>Q}2auSFZeI=!1V{l*xuCce`@Q^*HoqPsn>>kyO+Ms<1b$0bw z0-dY+DAT69jxKNRvqSltDSXqu$m%e+rvVK&PQ!J@?17P@u|N`Pp^)elGGpX|YywGD zHFJOdsi-0LnFS^QTte+cPd9>xk4PPyWQgL%fpqT{r{`WDlaAUTDi0DUWqj=7xoaWd zFrXP*h_qN)%ZL@Zry7z;t(Ue zt5@=d3rl-N`p9SJqp`HpNILNUpp?%dO1cJ*sl!%$N_OStHo+YaX%E|7uUUJ*A8h_*|pTS7UvtNJVMuj zD~I!}X~YbM*2I#GR*j>ad!p-MZ`b2u!(VH$z8spYKHnn^Yqgg`!WhybGy!>49J${GWX9F6rspkO7zZoV-K73>3k!Y{Xd z#O1Yf%-8nU50v8Ze`~&`Xzb1kS)r4GTXM@>+O%sO0RC29x4NQ3-JhoYItu#l#HHC#KQ##XjOTp#2l&2S_zJ0)8R1-hK z;r04uIN1yw(surJX5N6ta~CdFN2vl<6TtW*aPi<2mcJ%3{B}Z%gYHrCDHa)P`IQ_a z6uC!$2}r~Ks5h84THys&X7$EWz{T8`FLq2)bbSkr2+8H>nWiqy&%p!|% zuj9MmD+-B5@txEa>{`mx)#S+k%ZiR-Zs(3Q2_aVWL2ng4vc?m*@9Oqk$4GHYz`zF* z@-6I}G)c`X|1I^;YJ@k^b_l4YcoI*U0uKoz(mWkCc7lz5{A{{$3n6T~((YIr(0R7E zffw)5pXo~E9j7Tb=(lof6nv&2mYq}t58IE4TI6$plXj)#TO0rc)lkzTn7@3B zq^HCc1mIkHl@F~b}K6xA$)Cj7-@D#iU_6P&9 z#n_$W-dUYvs>akq|Am>cP-In|<%|S7UH&gUhCA1Chq~6)zQ1lF3Kyhd0Z$4N9FUhV zc<(IZWXmJOBMO^MbfxRgu4=S*{(_28NjF{$Ks8#(u+3bXNa9rCV}k&hs1M1P*mlb) zkXeBn(tDI<-MhJh$&EY|B$6z}&hpCACXnaYbun=k#1@=Cy~;96w&5pxFdGzFH&v`L z+avPAx)Gfm4^4WvHy~cI(hJnkc63T)kec8sC~~{gpB|>D{m->M2f7j&0<75|3#$&; zuD=J7=*wRKdZM*2M6B5v+b=o~LrqD*fgJfm-_|C?F=hm*S0(DXqqSxIA94v|IJnp5 z7|#+~83K8IWr6-~4__?6j!!eqg?@*I%_iws_vZ+?H=$3bAgKeh+WJ|F@qPP7)*&XR zB^lXcn>0m#R|97kepOW`xn3~&{ed^?9eEeV9!6|-G%IZN?~-pWxhWQqIx(motl;{htfEww zp{;SR26Dg-U4yzSp=UWVi+kavWPplUb|7)%5}#kjaul`@os$dkCS7SJhRaj&M{9Q@ zsK;$?kTbfAj(T_e=FG0pWz|Wl;loPr57jgY*J$^%nmkD>|QL@GSTsx(I*?Cf9~@aG(T&ES?_aE^=p@X zH>es7E9jqSGsvL%n|B`+wj=pV*jzYOFQ@jJc{MMA<{L;Jb1$*>ixgTCJN}`(^RVy|eJx7}50+R^5uCN9!r32;1b^MY|h?cPx{56kdnH8Tzwi zsO}+8!v_u2v!A+R6UG(BuAmT$@cM@mjGka}A%d#Phy|m@Nn8_^*#Nq@p~_gmcK;2H z{qwtkS*lrWl^J~;fyhaJp9Rjzg4+_adS#DZ0mRjhae%~)oL}Npg#kdjRZt;0jg6z2 z$Q*#dAF!cUA+^CQxI2OQ#R3VR6a5t!l2MKFX55QYWgA{Lm-@wMxQYPO7+au;pb0%? z@IPKhdB8^I>(RZkcn_f0TyP%nwbNw0G7@8YDDj5me_^8y3;#k9?Y%H4Et!(?a1AMT2XpVx2zvO@Nf9XIO zy86yk6S{j)XlPlIT3mO%MD&AXHlk9H1>CDfCd2E;Bo#=fr%U=}*?IWD*3A94bOKmD ztYI}K*%j->;753fPmv-aAU5h$mA>S&%aXM2pb@5u)^gUBX+qF}((rLOH}WIpqp?Y6 zU+Ic0sE%=tZ%biL;t5-lc-`o9q@W<(#DV8No&z#B+sm`LbT_Lk4?;|DZ#U9{qmOw7 zGPQD*#tb*LXiV8YbgRJ2xazN~eHKy)G9f9$L~lOj>sV1f=@%G%@50FHgkJJI*0HJ1RNYo#%zPtt}H#J}-V0v6XS% zufBjkCt|TS!(A&93I*e~)A5as%N)^1eG=(SAw;?jEsYi#V*#_$vMKXXHuw?Ub$WWo z2ZpmdL;z;iy_30jnm)1&p%?^6E?$SA^}*#Or3=JN!4OZ+2mmJrM;UftgLfN{bIv|6 z5H2%w_9=;ihJK~qa(Tr&9QG4$wz3{FAcELEEh~Is2}VEIrMMqdYoR!A%gzs|7W?Z~ zGrqvTmZL+-^XaKcbiH}c!E@Ln?K3^;0Mc&jkqtddp61S9O1jF?i>-^t#nrbR2@XD7 zC#|(P^RRqFbv0hGE*3Uyf1?{hpv=v0TVdz7VH6S;|;NR0yzH$Kdus(n6BlEAE2=Dr;N>PH>mH(aH{sx(ok8K=d4}Rm;kHAp!zgR@`fq z-F+)qiZR$|e54to$w$%X86A4oZdX^lbe+6pM)X6YF=DmCOsUshPJAS*^w84|iPlieg-_kD6Lu9n z!%)K3K2sx0=qDL>^#r(Q4~3+>ijqA^6NnG9?bd3Om1w=-Qw;W&n`$7lDHPgNu6Aww zAcq{$f~gvoTojW?UcD_?QT~b)cevZ7HZm(t*=u1Zo<6Ky{lOM2EMVtUZ{43s0Cgr% zQFy!}-#xL_@A7iy*NLaaBJNs4nQ(5SBg=TfyVh^7Qh!XXLuL5U1^n^Dj|b$8D8Lck zNRGCYy~W6NGEIN^m&Lhk8+0xZqg9gY?_EpMR-O0|N}GMqetBM3RStTcgX}g>TovmK zo7N<0uyp#(5dq~$eHF`W+N*zV8tJC-BZ1uHi^z~gOvf}WS17+&DZc;D-qgEP#&k*! z!r2$)%1jNl56qB0K?d_MmzDPLKlf9O7vchq%`y^(YMwq>ts#}X+y)BwRuXuKs>bqi zTG@{`$GgJVO_Pmn?S1h?3H46pg;eEpE3@O$ekG7rC3~hbp_kSGo^<^Kog!PT+b{VM zcYR-l*Bo32F_DOzc`WNruVt;gv?9JvZiphw=gF``4;!FYNm0@VM^%7tSG*puf5E8_ z2_%lgU-`$j7a$l6Jkd=B#nW2ewypT6BlZc;PWvD(02VugI{FwGn_|U)PHCh}od;sN z@AB4*aj(Ofi;JId$egiLr1k(-As^yW#lVgJpO#RJM1kf)N@5ZVK3|rQMih`TdC)tn z;t&X97ILYoY(LdoI+5pe-(Sx^keheYMygcbBP+p84s^KE6iti?O-*o8f{jBqme_h9 zCY0=(GeZ=L(}u5Uw@4LnSDYa>na=l7+zCz%RCo`apIJ;-8KNiZ)M<3QqyFZr8WoIU zH~%AMYU{PwIog7Pb%-phyA4-b zlvzh9wfgnNu1!jZy6(l?3CRGlYM#Z&!KThU&+6zJ5t;%sp#RP3z&zab_&>*x^ZLs9 zn%K!$iU?7g>lQzfOG58VRZYOn0z~R`mP|-t(Srv!I=Bn)2~(`M5Uxw_iOP{v3`U&+jTL7-N$0l+ks@3i_w=tbFB=KJn+3ZDALiIBu z`WD~IeohI$0*`AXxMZ@&QYxp}?Tq?5F7B^-MKpIG^67XYfv7q54Pg%$*5X49y%UA| zn|c-6dKrcbV-C`zpP({I(h|$-Xrpx%j|$BpLe$GTy!$%>i^1g|(c`#xq;srS7G8Uu zP4Lm4!+w>d+bEWUpHukm!U9-WLX?HU9|^*A-ONjlRc=7Q@v$x_tNk23G&?f_Ys+@o zqOpP*SSEL4C|np_8+@q1TX_+59Rz2f5t>w5hylX!phfiB&V(jwC!nOy?x(mxMwn`~ zO&yOmG7i870TAv+>Y8U?R=|bjM0qbx{9pSC1z?_qlc;`zIOD=SjP*lU40I#eEG2-^ zy3QLdp9LlUc^q{nhjbf$rIfcuYrHL4ojCa7e8y!af3c;QVH0mF{SWS*{X924iWf}Q z2v3O|lo#U`2>0Ls9-a40OZ@Rqeu?%x1TjkXXokzAq$ALA`@jGc9(qM^o16KB54tNZ zodrK~8~L8OC`74o(MdKjag9#4P7m1vT01c%IV+ReiVy(5&KyE$0iCX~Dmy}r+T?~h zB6A=y%$th3Qte-Lp;@UHiA`&srn^Ufir_zDpB=(&rKw`RTvW?0fR!>E;FE)`qp^)M9`dh#lMZ#2xSRkGhF zDl)XpE#!U$yCWBIbYRAn##tioMa8ftmh|%$%r2oOaV{*>4=+4%TS*DM!k*GO{qZp4 z`Z>}tbLKdoRv=aL+2K`d4Qj0j$QEFz{C$ zzCUSo_%{V1ERgiRCGr3L?Xr+M6PwV&SKhAk#J*d05Uxxx?5!}zSbHj-4`|gC_r}JOGvb`qj<{VMe!kqElm>YBYtSNRTXUoP)nVhuIt3cevkIzh zNLfM!-Qy2)d(e!>abnlpi39E3UR^wIyyHhRTAWR91Hj@`U~a0y5kB{QPkzU2 zpdR!LR!G+6F2}=QXqKdAsO{5IMHFI#c;M|qC?aEX}B zx^9%cf>k`4P4M>ii3E5M_|*D+X?lU9hWXu$e7Su!|e; z2xdZx#>VmSU5zUfr{a&=xw6@@$P*PN!zPyZUaf4m7I{Er4rVT>r_l2*6%rR(9Q8$T zj{{3N+iUuIlu1)5s71eajP)sXM(p2jX#p*NL!d4YIFzGnGiGfp8*+#2J)?i*q;ffj zeWpLNV?AtC#U>n-)v&OTbCAhN{d9S6zUO?0V03p!{f&B|n;^-gp?ib@o5L+!#9ztT zZ1*(%302cnblEWtkrMGqK*We`cBmx1kTAxM)7Ym7W==m|YWdp^fQK#>Gbw&>jYqRh z3}D7lvv~b(gj zGs-6(L(avjjd$B7(q4B@JdW<E#wA1Y*W+wuH~Ld(!M*FS&0TL7B{1$q`p0 zMGzLy!GLKbie7`$$Biyl;l%#BQU$o3FtnwZ9dZ(nC?zK$>yNZ>@z6dMD3MHgoovW9 zy+^c}bzd>O$WopLFB~}5p>dP#romYvb9>My{k1|u?C-l&xolPNL71e(%Z$&oYaro~r%&NA?C*FljWi;|Ul%*7MI_7spG-JinzT zvj_MMV)2jI|ID3T6&0+N&{zI!90pYA!LGj-`S20POJCdb?SaVO!C3A-h$hMs+wKwn z`$C^%m|Q7+Szye|s)OjW&vvo1pw^*b|JN0zghX~r7=W*c|A9a4PLr8g)#siYSzBKy zb0fOd?_eOZiBbyiSxtJ(g&M8lg$EfYgzFO`2(KE74i$OHb$}RL0w`FMy+D!X`b_O_ z!*Jd7K^6k@j*)g@!)&i^1yt^s8B$%MC)(ky_BZEx3pDXS&_q%@qH&j1-yK5Upf$IM zLCoDb^FFV#G5wW1-5=wJcYU4`*E~Mm=aCjbY=!X48FVMS_sxEOrn-O_>f8wEX{&B> zM*5rRj%w&Ma?_@0^-{7;>TlhP$aeE(z}^DA!rB{L-bXflcoTV4hVA zMkW_96fk|0Q5GzCe^D932*$EuG0-rW$V?6));cjaPb*^cmE5LB^y7D11kfYb8{JDq z4ukR0_!oKSkX`ijja=Kq?$vB~9K(?WjJdYv_LxPBq*X!4e62v12_yJ+mE{Z}OYz>z zUuNXI)?HPsCb}q-PF9fykK)F!sZ8Jp6aXgYdu$^qEpY*vG-b8O2D|Omc(iH7Kpl*| zr?&COyljqAbJE|EYqal4U6Fs9VEIYMjD2F*de|K-_`oh0P4eu#4uZX{1dJ{R+zVFy z(P_0}AACD79Y_IeH{eM%xTBXE`p>vJjFb^%1@kb5XAwrqebs_6@NCL-js;LApsLGE z$yG15gERX8bh$f+>4l9m9oI&xyOWy%^IB;z$*_`vD!diIzYR30zKApd&1gmD`10tT z*0w7go6^6Sc2~!7l2ka3_TMj{S-al!V=#NtVvHEvqb0w%V18ouH_?96uG#=9C~+LK zpkOBePs}jjzZK4Pri}gjLnFYZ8o!s@Nm*s_Cu8IC-~ISA63|Wp(Q7?;w?yq z`o_vKl^Bd+&84lqz46WNK=jIAnV#dF#i~Hfp>@ajewYT*ql`xP+zbCzSz9-ax1Avo zVsvUhX@JpaAqc22MWVhlW%v`8j?k2_=YmT9386Vi0P=OZHYr#NP7}A!I?)DLy%rF?fDADx$dG2`k%68`};;KxXp}#NftJ4H%>rVkv z^DOCKkx1SIW`9?U*!e|KtqlN*YGo{M1~>Sb^j5YZqZ00$L4x9hiJ&^fV3*+Iovu(d zk$FN>^_w|wI~rUw((1JZb2v4A9oDxC4ntL%K9eFT>&QVk-&#wr>J5TZ&uDFChx8ll zN@gGBF#pObhMQXj{i}Zvf3r{(X~2wbWrwcALB*-i4x?>-mN!I=LS2N4Hu(GyS+nZZ zU5S@Ij?4}#iyH3`^6U?ZqDlAkT3+cS6VkiO8BAEU#J})YU^g#s5F=mZewgbGEkHuc750C7L(rD=X)LI~ zg};N5Qt3!Abbk_T3OPMpO*0#(f&O~LyBSA_C73<9EckSe4~r_V?`#;`untItS;K^f zCl1H!5DNin)2ReLnhKs94((j#nGlND^e{BTcbw)OphVeo15@0WN7?-}d<~Tli_I@PiYRAk@Is8@@U`3&8lf`Bm6aMtXl=C>u z`|fD!u?0X~^$dXQ_{dM{KtH~X>bfh>(_z)<-C4>TO(6VI0def922ogK4vUEixDs?5 z^$xSSE|Q%8(B!kPTHN)fWz-`=ZP~yBG$VR&kPXUbuk03V?(cp2NJ^0!gQj>C?GEZZ z;TJ!4Du%=Y`x9*5bJJ=El}b>wk>T-Vxvz;nW z&$QnHNOQ;tUkDk~javHt2pNepuHpc6yQgr{_8%5!r|t?k*VLMb#0EV0^>6=Ic^}so z6wy<;!tX8q?s9bk0o=>~I#!mluo9W#jFN~s#`bsneIW;o7&>rf`vL>QMo3dH^8z;) z5$_$VLg?k4gC&j!^dIfU(OaZ{qqEPFRuEjlZEACFxUXF97MeoU6FqS;Z7+<~<~lN| zW}`R4^Op+8);}qQSMDzhVx`?<1@P?9&4<{o$L5OCLEXgQ2=$+wse&OYA2<0j6u$o7 zVXZ=V;hqcdupyox$7crt+`$4+%;?eRZ;IG(vt|dARIH=JiOjSuaYZ614_GuTWKSSS z3-^{YWMXFoj4%_uC`~~Er(bS(?ovg9o4T{TQ=Zlc{tJiOA^B`CeW}nj6Lc|8?Y}5} zCT=y%7A>u_BLyib<4o)TQH1}81D&s*_ZAql`?eeI8k#Z9GG|yTReRRIX1`Er_r+Z3 zSK?Tm)1xyJTNaa@k1p#7nKoyG6AIgU{Rq_u`p1R-ckAd5lG_sYj%pD~K>yNcoiaBF$|w-*)9SmrbBWD894GujX8 z*>g+z?yL1fsW23ER9)^L+AQQz4vjP;S6TP&yml+4)TnIb*&^9S=ZWKWG*+2!sGGKe z?E0F%P?#?-mFdjiN3L#cVnw%bqde)905;@Ye8~nnAR9o4Bj+uc<|Wdh?eaA);)FLI z`2v%R`WOtIs7qsz{gf<1lyHUu9t1KIaFQ{2HoJT`cjjM77gUaRKkSwnQY?(gB5c-u_W$uAThYbvKsXMS90qIrv(!>D0)jXTXGZyy>lsy zu@gcAoQfoV>=p_{pk#UNR7IJ&K%>QJeM1&wUy}_sEiTfe*^p(QqYNkTGa0T7S*QRU zD)8Ik?Z}I?C=zw=d3at_uCTxBI;xC%nm}jR%`lKp(k{Bg-`VqaGpW1eoi$mg3#IC3 z-?6K)1E@ahZV~HUjxcQaYP-MnlwNy%uY+=x;L&Izd-5V-jWrVms;u=tn$!kU{|vke zMF@IYim=&St`)hd?Z&so$Iq9g_?w&6GH5`G{h?>)2^wWHjS@~@n3Qk9&&1r{dcZC4 zAN5O;rnpJPy~{^l7~0_67Zqm-g-+qoR=QJXU+hE<0&emSgmoo8_x$;@xeUEm!H#{l zSAel%e$x2(?A=MMg~$0YKu#wvH<`lnl3lnn~~e9m9_fH0ZTOFcBV z`hQd}sbFigCvR(iLR)Ej#8ng7U`qCIfWtnJOD#XiW9xnZbCG%^TZMg1*#egS6h+l72;jHa^!&e*oHEZL1FYg`&-$)F z1XiywJ*OrVR2+ZI;;CZ0;_iwjJ7*f_2{F8#7l-fTDR2%(n0cPiqjxLyj~o>TO~ca& zb@$ptp!V~r)6-^|u{5bO_`@yyiPKhdNu_2`b42CEB0QssDSS_Dj7`pB{IvzwcUYU5 zA}1bhQ+wA+JkHD3VuNDo5lk4=V9;fw_$4t~rs710U;6emv2ip1wwDz79uM1Fwa@t90{F z5ma2=(l}Z>bsvkHkYF_Vp?yzAF>uXZ(6~d-^;pq#%ku>JG9Q89fJwm|63LZ$8@iEZ zP9CxkJ=_uk9)Qo?a#mp<(ccG`D3vT=Qi{n~h+QI(`5^_R0=L5SPlfdSoeKYJVLU@P zQ2yVu4b0%;xEYx@9Zpi8HZNsHgxGA^q^3&#(s~MFCI!I3t+#Ff_dhIs@<5vC&gAEW z{VOF)kH1Q8;Z-!8i@DfcO4{i0FLF3hui4rwaT)Q(ATk( zg}icpn-Jd~>ZCu!exz>>))J;DuOy%D$??t7X-<)=R#m^2cpTBl7eOT*Mc>{&+gQw_ z%A?_j=@a=QJ=%5o+np$KIXJFCn34mq`X~w7K+2jG)*z(@y;yA`gx=eDWVimarbgls z+uX0Y_jwhQeJZC->jSq4W!`s3<^V-~jDuBDSr+IoHYs4#T}kWFAfBY!DaF8oK$C|f zt_Lu=fD-8Vwl4@!cM10};X{o%q#~m}to?<%0?q^e1z$GTwGh$plj_@jGB;9l3?sLE zu)Dlmk(asAKAD#PiRkkU8l5plP^);*waazq?74|pS(ZE%f;(+;1u6!q@}noNm#~)M zJ6`3+b4)XK5pw()iKZ%j_CCb50$d=jKFYUYk;tifY7a8fQj3UDpb96$?ILIoHbTWk zz(ECw{&(`U3(~mhcc*%aVkt^eFI9NamF*Dh+*Gw6_zK;0{~Bc|dzzAGauBOu)0Iu} zsmn{d2&%4nmd$ngf12Rz@z`UFT6&akU8eWFCC;$QZCgp8mZ?mL4PHHgOQZFmUb7^a zSf@pJa(09`)FqX(z+v`7`{L?Oe3)^7T|OV7HB-jNfjj;jrpMZ?-2+;14cmn^aKX;g zRIW5?R;}Gri#`?`1^m^4U>DlXF7eKH53lZVhs$9-W-rmzPnY z&vGc6`<*AwNl0ANaq~MKUQ_LaDp(#@j3p!{79>$!^lMY}Xb1yCj8#me%SU*BMHx?s zXt&QKNCg4o3+Hw1CPn{#NRw?#7$7AR>E~`Zx8P^^hnbhq#Qa$;_7J8P8HK9P3AzA zU|r)uKl*&p%b!Uc=56RQ584HMk8yNmj_mbgr1?Z0@?>%$&(;aWy~A!jhg8L)Ou$+q zeqBXf6l+*Kdbvm_j3hVeReviC%(?x~oEY%9)lnF4cr$6SgY5$B9!54x4C|PiboWzsFye~0Kn`$<`D-w*PTVA~hNbzc+e;nEQBb`7ACRdhVI3r9$m!*L> zE<4!c2=uFeDw*V)OO`wahxER`*C^6~`!yV#qYkV9&AWVQFuoG^vz-(EIPd7AC1$H- z@N&<)WuVLgNF{#uDr4y_*{JugKa!9zLZZCKrV4RjygMFpmH~hY<5@i?BZNs2mv`SW z-c9BPSO?Uv)6H-82IQ8haS4A6Ov0eU^Yb@qg03+}ItGFQ%t$k6n&H~XGVn@)BQ-7Ku%1 zp27QmSKyXy$t?Rz_!BnkKUMRUw^yu_^>pjsvjCu2Lr<2#AfuRz@kV)GiRUj#(`Mb& zQY{FVjTte&E-C4x?{XcKFGj8%LunTEJhwmY)o$y9mldI*yp`&Jh^WZg^xHXSET(+; z<+3q!NoD0Y@hxX?I9Vz1XK1V&MwM)B6B%Jh1c5|V0VSEQLBO{CM)Vw4dmQgLLp&kWQ z-k}A2pz{HuqlJQ8>-_cN0e81jPMY@*Jf!^Ca_ecBAiC)Dd5iQxSMqa|w*dM=@n&7` zmBT_N@1E{JITS$Z$&^-}7W#rbX`W6D@|_^45h3-=ikigao)p}0HQS(AHR35I_1wc) z+%PYnw|#pG@s4dJsd+2IqVAPwL~Cg-8>3F|Vkaka=rZU7?E!jR8EhU@?&E5!!M6CL z`HxW5cL{N82f9V3+%9(v-|>U)JuJFDs@sXEu;k}2FD-~pzDq~F-?NqfOsjz&OsL6O zf)aOYZeY6pj=xV7BREEeTzI4{J+q&d5+cxDE&6SLms&}_y=jbug3X_>c4EUvE7Ui46)|iW2Tx3pc1g-{zMZ$4(o>z790|3y^#y{>cQ zVwbN`@rYK3YIPu5P8g%TE<=2@yYGcs|qpBmA{Ukzr%6 z#|TfaxePM>@B)y0)_#8jehh&iF-pqo_vt4^2t@=<6BR-pcMZ0L(pKU?LmrS%CNL#b zlcf!u^wo0N@b?%}qO3uRFWI1NK;Td2g+p zwuV}>g}u0~3tVzFB$LoY7c(v=_%y=d<}1W{$H`lZ`a2XJQ#3@~R%kU@Fk(q(y$ql{ zBkRYA&c|N5F04SL<(c_!uSZq=JWfB(5!ek*iNGHjY?{tN1|ngaU4LMU)*7O8+-Qx= z86G`DtI^l2krVQDxRcUWCv(UCrI+izTp*FX9AIxy%dS?vrZg&uwo>bjEj3+s6&*95 z%wBhOUoo*QDY6hB?eoCCtzn0J44}xne)gxt;K~8X76;_QP7B~S&p0VlbZl=IaAn2 zcw;P!913@a2}EFg^qj+@26azx%QG%3!L|e=&9MEAPsq|tn2-v`$7#uJ&e1p}pJCuc zKU;W4K~kszkKk$!_A8H}7y+ToRsun$jdVE-7=Wp)*d;tB=NzJx%_-Jrol=>MNQNezjg8Kbuv$f^0uK@?l=}}D9B8XPB^netb)xjz zPy@Q#p4Hn3MEbkU?tKR5{F91LBGI@lwp7l+h1eJZZk7HFg1mA$S#k6u45XdImMF@yMa#Br+qP}nwryAKvTfV8ZQHi_&L6zS zZRf~ttQe6QbFN!;z?Mf#_4H-_gijIz3UqjjYYm^Dp?EQ!?jJ-imi2o62U%Btm97VN zuFbEun4QaMNimE+qDnHwKe~&tmtrT#NdDx3v5DPbrZ)olZZ=O{+3emn&6qvJtT!74 zlqL>F=GPz%oh}aB`~X*VG;EUOHcvWAw55de&2Aa0=aLj^)=}iZWyG4;V^(e^5~<$& zxib`emxLsB8}?@H&aycaE%q>zAXiXY=y8AeI0*>?NcIXar%ioq~2 zmxQ5yQ$WKoKb*a$zDQsN+x6&gd7O8mUBJIO1ECJBGrB5K=A2d6m`RmbUg~F01ZpsX zB)4UFkQZ^bUVGPG_~Nj~{%INYbaZI3Dw72Xf7r$^^d%*$-E%0c z+SIA>MY0IWhL{yv{1v=rQeU<6UdCf39e9a=z^s7$c%)PJRo!@_R10Vro@=<>mRfFU zE$gG$rVuOP`lM{a)F!s#gN-9sM#VMMp1ns6pQJ_tb*BOxPo&8@!XZA zykk~ST$oUG1m<=)5!*OwEc;nez|Tp7dK`(KhhfxW^G2_cyr%K~`|R>izxdaFrc4Z;#{6=4!eB=NrK{TZ;5~0~7(IvDW5{yO&HA06E!MDwE zCLPDYi|-PsX( znHor?bWmj;2EBjMy#(vO9~^$Jq9vEvc)l8e2rOTxsyXADM-=coRnGx7xmZP( zoy7|M{$h*N04tXMTztn^oMtI#%xt2g^bjqm>sQ>=zk)T<0qz-W<3`YU@8q zao&L$jr>fa=aE?d&=8#i|K5$d*-C_zWOvSmn-5aarP_Ajos!M+2E?y zYkFGLjzYb&ij*D>GhTJ2uos!y8Brp`P)$o%-@=zrBjCa9(Tt3wYdSdW;OL;H;I60_ zQZGc(U%?sgRHF(LejNmPG%p>+7osZ>aEDCF>2v$Zn|gI7B4foZd!aem@M9Z4e7(pJ z41aSF6o&-yiejYa*d%*`h5S_(+t^?sOFquI9)+1hfTuZ-@a1=@Xija35J7e*QZ6Lk zwo-bI!i2P>G?zjw(#$KB2`e9XXWytLHfcHgUw@cV!Y}ZgdXb`fBy#)ICI ziz+;5HW}Va=F7lzzKhIcTrAtb!=uaCArj(~p8G4;!k-(nun%UtWMfq5p`s;07(Skr zVEv2Pq;*OKxr?_giFP$w(AQ?M9p8PWIsFgzSS}$9V3VxBy?Ut;L2hzvEsO(BRQ?p* zo+cO=kE|(_*`)pJo`g)Kkdch3?{{?K=HvnL^n>eM|LW{h&+bv{+7v}hNTuwJ{K?%E z=^Judce6nc0h#m{66^Ke1rC~F4)wJfC9Ly|v|__-S*@2n zd%vb2%=?y{45(5;jaho-g4v5Q=iMsSu)aglE2g=5kZWA&UCv{b!#K-eselCV7+{&c zDb;|5XsB)GqnF}}`3-eW0~stp=ve8(BU%bS$gOQ-MpPY8WqF!phKe9@c`A_|B0xhc z1IOqoabiAh`F7>_4e+&pp0^a#Gtxkd|c%=@i{d4GcPSV(QC%4BI5 z+5$FDhUXz#4Bj|}U-dxdg4vrZr`xr!^Tesoohm5sP*BC9wBCXcT4u-e^pXmZ)+Dv<-F8*#C_r=n@s02^&7!D#H;lPx1LryM z$*4;1b`QQsHgup8T*f7y&D(6Em^PPs7_ps>)1GY|?%JC0S$MRR|| zVx5C_rc2`UOZT@F*&DZcdSp%bUGBwkne?iQ5vJ9cF}{O9^9spLr0J6*;K=}hKI|Rg zBd^>WaR>K2ZVXY)fLc2H0E(Rb@i9IU?|HX2q+%^R-|SeBInW!Cl=g|OgZ#?H7Vje_{qT26GHN>cjkIxlLvscT*;JhI{$**I{p zM+rH?DN)}+>#_l-EZ)3O1+^RMxHh#|RM2pLrmr6!5zJd6QxtCy;{5icj*lR-twx9pcjgBqK1d52 z+j7CernSqKDx)O;z12hm*7oyzft8Ou;f6d_JZfRfyjLuWb{2)~`k}pnpLBB-J+;HhHuNpswM35= z+|{&Xt?EUl%q=)^I3(YuzS#PDz(Q>t$_-JTfr*z0EQ6vt67(f9YEepe5qM}8xguya zcubt`V*}t4A4!i7J4n(v?SX7>ns?(GfmN#qqR4kudhvof0H{nN(75>g=qEZFht#Bm zj^cDFo*pH8P^uJ}Iw~TCxQI*S80wKsb|ap-qzB#ux_ZSV!5<9;?G{iz4TWxXDABVCuM~tcgFWYhWL;E zY5c|T`Fl3NiOPo|+?TB(pHh&pkj||eatll@7J3)_NSo5@+M*aXCP-e z;`9z}%Y+_C+*I3$vKAF6P`2@eM$hM*SO{ONygvWPt5gePZ0zns=$YEh$seyKcHc~# zN8QgOI6{jYm?ps@+!vog%v04s<>1m^NZ`v@DAJA_@;V>x`4wLkmb{*uT+fBz}^t zJ6d9q_r~!7$1W(8_*Agu2LJ_S4{?Iw76s}^bTrl`SQkG~a`4nYm)F%p>VUZ+fWIf# z#4~5Dyv{3z)PUPRfuO)3YH1JNEfvSqloIh@ojJF0*?u0Jo~rVv5-Mh z)c6`J}^)5%7zps_(9;wfI_9EMIQbNJLY28OFH@SkayNPAjs%rUkmCfOau7C_qULh!6w%T1!%7NyJc$~|!n&}h9FHv-8 z<`t_Q2yp|Iq^n*ybl#z3^*5tv?P{GNO9yBO%W5I?UBY3P@1Uu&1o`{=O{!1@D`SWu z+MYxl9A^ZjnHZ+vMzVfw>SqL=#iod$X!Ee)Yp-?DxO&IwW!G}%SL8GX&fl&C{(a$5 z?8+anzR%HxctStsn=atvm|URrbFgOn&a#;KW!FP-wYs)hgur!1w)>YXdo9iRBi^^W zUl*0umH*4NOvWp%m&@T0;i(;U9B&(4anm%phaId$5G-5_K86x+Vj5bJ?>Pqfr}~QY zIjxV3#OM4XI1r!?^}QeeFrba2Rk-6WXUeB2>Q!h%s1YBkFicBK6J!=A{z5ym$2tAR z?st^*+d?*sZs5eB=0;crI|Ht=A5rfTiyUs!`Y*c=tft^u|Kr?}d&RvSUkO{uvkdc_ zv%HGoBzs(*ss(08CGeNpaxT5yp$q+FJk;^?;6G0IW|-d0#|{1b$ihk{31SJ@i6Q9b}y&z;bSVSS>Y z_r_)}ibD)3>#F9H-U{ql%7>HgaY=U5%dq&_*+y&Sj)vtUC(;sg^qF-O_0|I-~$9vHGLyfYz-E7uNE$9c3%-*(uSynV;5zH!C~ zTR?%q64x-HQHV$WzcT6f(M1C1cUi`Gq1Y%_SEa-0Cj>3A&UL^^X+=MzNl37v3?qtV zzVVoqFZ7mG@MWA>4^wiRN`_(^Rle2+1CO9Um(h-YMVIN!|5~`y<>*=llZ3~cU~YAm zEzfp%MRiqa!}rx-pj99n)3tdf(7DsX`4*wL>5#4~AN3}1*)?9&;o|QO$YB+eJ&BPA6U`38@UN@YUR0U4u<`{n)e=X9k|EK#{5oy&}qj;~Dod`0~4q);HX5Blx0Yqik>Dq_a!-FU2`mkLu7G z(Dzy!zl7T8P+wX+w$zmRsp#Wdv81-v7O8B_-ZyDqEjrP@j^>-RLb#|=&t@3y2~%OxMq=+-uWfzR#Z zs!$kLop+=jO{tn@?rHoTj*y-#JDBVriawmx?E+l7h8n&)d2#zTPc6tDO?ufODO}nl zB~!@%xT=ZBhf_cXU{S{dXXp?JSeA>dU9ts9#f;pDfzZ-SD-G4gm^<*p90jdIvSmm>%-veSEBqqG_& z>wg~Kl*86r$8p>m6i;#VH6P zjXwAGxDnOpv+T~!?+KtI`3*5-wje&n>1R!7M;=LAz8^9##tySW(vSg7cI&HJwKm0tRf}iuQb&*(uYBl9D z83aY?#OF&coavIsLP6Ps7M)%)H)$(I zNP#VZwqQz292kmmu_AV^_vELsuKm3gaD6eYtU=iE>em!BuuxB6dSXddn%fxBn%ubd zUGN&cn1f4;`MwvMGiePFs6XP{M9I6{a0fB3Q(}z8gWsE#upwIXxIEi9mxYf{d{at% zW!&qph6@O0nL0p-5Y6@B$)f$C(`7EQe+KWs{Fg+zvNuN{rns|x#lBgakH5Xus)3Bc zA-)Lt$i#Rs#?em@?GH+QtQFy*B@uweLnJ)@_S|IUbBW0`z-rsUmcrI|6|g%W+n4Qe z6NyP=px*(}#&B3rWHE z>64sh2z$BY1pdCJ9I~KTIie*cTC0@MaQy6-*7S<#9E$^ zqG|9;3Q$p$BSQCm;~aL;EFFFaLC6MzAx<$uj`#V`Y(>)sewei<$hJPjSg?#bPA*l8 zrGGHJJ+@(S8sSit&^cbC0RcBobsMWxe7ANN@`U4yYPHihQL+rtBcn^68M=m&>>Pv<{n`le4&y?F|QtEkAHHL(3aVfKF0kKh~)M= z6qDguxytgAFk#I~PP0ajfPICrxi%&DO`>M94$=w_!)49Su>h6In(RY=SBR9nuj(Qufs3Z%a=KrGo7K@!L+#qM(DI z8U#?T@vm;wuphlJ>jzm|Sg;0?*8u(VY4-67-Ry~$h@>g|U(ee%j{;C!7()k0BZzx_ zS!E0)2IUK5B1l_;LtFGBbx4*ZX~Jvb2Rq_X4F@TYGlp_O>I3uSE%w7<%$b(^+0yPw zBJ%q-B4Xt0)u2;blz9*W9_gd`T1r2#$2I??<{QRxxAM>s8jot$a7=&iY$+0Lbs1;A zaKPBEBIy3*{u~VKg;K?hK0s-rveIjuS=gyAJZ>_hu3D!D(YCd1;oCVK?hOn-*0ZrT zLUeO2^V@Rr^Eu%gg|tZ=^=He#G+td;;MuoOn6?u!rpR6sXn7AIdgO~e4%Wu9g@J!j zv5&OAC_^;P;EJkZ{xrauFXvZ8_I)CAQl6^qkXx@~xHipJigBa3XmVNZvsm9Mo^-An zffT0vm^eWjT}KjSXl9`ElAnSm>=-e|5I{5n`p-I8?{PP0_zfR{(Wqi-@bvV4m>ycIT9q4ljI_9_0W3U56| zPYE1B(`!GSO$`G|aJEvgtthe|Z;zGx8qaqDr`_ccSv>GHpx7TYUqA9cTdg+12AY=mlpVjCp(ZA8Jr*i>Ln@%H3%xO^fli7B_u?SMS;gVrKY9sZ&_cVqHkFKI;c z=bCMNa%a3ACsvIXTUYKU+GKXqk+66g`)urpMJ>P# zk3)OdtyfD~&aZIQN)JBD$~2=oei zA=vwyQ^?W>X#UbYGvf)I0I-y*v zBT2&POmCfa9?F0N>XfvWmlv8b&!gSbrJ!D0m%S0~TbN5!bG>+U2bE8xqgYK)AF2g0 z*%M$5HnCd@ym(z{isL*n+d9@p17ri~=)t8ayXnjCl96}e)j$~5#{0OXX4vT=H+4P*AYz57)_ffI|x-g(8 z5J}rV*)e$I&o+KPhJlDve6o!$vx!lMOSo9)75@v$*ZbSngUSk&vYfO$`&vYyD}MDi z4n#5elSOE2|B69E+`^QeI8i2Ua#)TY@o@Hnh?fJGQ(e`<+-AE(sf=lync7AvF^C^Y> zxQdBYBt;GD8Z+au30$gOYgi(uDA27b%y!n`$`Da6>dTO<^AXX^ql@`VFr$a4Grcyi zh8#6b-eR_ExsY}TSK$a;96Jcjxd&iL;qy9mldphEm`NN=hegm^ZO$&-lPphIo%qIZ zsrMKQFJ`%xd)3yic5OOY)U~OHW_)upBi9v4-S|=u+Ge@vVhq0Y_XH98q>v;0#{}dc z2(*#(A87W9Fz2{Af+rzI5~N*8r0eAj+*Qmuq4?w{gQRTXwT>-DVM-E#@v22Crx)zg zZ3HvFZ4J+Y>vu&?DJ}uAU^`=w`8n)8wX%xKPTGo_eNnd%_9`3Xbx#MYUinu$5ii1i z5aW8x$>B~jZVl0I?~qV%sMVz>zU}Wf@6o$~Cbd+ubQKi*KYt*~O&KVh`8_>u7*Q^j zvy`yvgPc$B)7|OrX02&!ot=~K7yYqVN||)ifJW@;;MqNXF>6p?@qO7Tt0fSDMEWeB zaCbZ6uHF2tf&A_J=E81XttuS|P{WPlVD~DVpN-)rA6BU)hzU98?4*{!70r`eE{Qf1 zK3-RVALV@eyY0U-3+7M|+|8=i{_mZ%ap(tckv3&4WR2XRcj)W0fcd6nyi(ws8LF@v z;@{PZ#x&6d{P)OJWdJ=~Gr*&B-du#)mHw~%@1!EZAqO2b4MC%WxaqpB1(Sw?ck*E- zM4V`KV@fbCR$8`wpw=-kbakV5zARsk^lWqR*XC1gExa^yfMY>VD;po*!azzJVs$IO zx8f%ldvP)c_R9ZM&#E>bT!l1Sa~`w5M1W0tZ8O(8_u|Jq+--?j6#-};rZ9>mhY_0? zae!?CgUi>T5L1^ax$VgDCMD;!Ev+dl`Tt0FkE7U~@@mQm*EnwC>+J~wQD)Sz_ohtR zM(Y0~llPkQp2)iM;V~R%`$waNTsJN?v_BdD?6Jb~z1AN+JI#4GYKZtMq;0gqu%-BV36aAigHV$XL&A zu$8)#1DD0`&S7iC5Ac}23(wP9Hys&Hi7t6nIwRKr3R6NYlylqHcUM_m96f^&B?6JR zB9mlWH!~wrq7VRF=ZHg*0MBLG=V18y!EYkP7Xws&Dvk0cPiqK6(Y-27426tD$6ZH%^mOU6v1&#OvalN!lTgOKz>{eu0%b+O z_MBtc$({S>)V4haO`^^FP?qL;{^m(1Ko*okN zMTtTK&c;uS^qW$DL{=AARmujZ=0pAGg$$`^Mo!ZC#&IQ86C^UxMw0J5h7PFhB;PBr zU;Zz)kT6>SZem{3&rPHk@01U?{AH@pwsq!PffjH|VeE8~rP8diLyEvPam*1tQ!ycL z!efoVMeZ%^UH~4n@NeYZrM&#G9~SVSJGS#nB|(5hqJ}$@#FJkXwHOGNE}GxXx)V_F zSMVa)kBmV*^d_4ynlWwGEpn!AQQ+iu`6km?hNrgv*Z%VVyMN;TijI_(SST~&WL7mu zKFMl`qrcCXmny9~tU4c8?6bi475R^m-&)i3+|SMIP9gm_;M9_jESJ^hJ7G^_-+^51 z#2Ck~K@=BXdX=&7EoO7)DO*heJ4NKm3}ch$R#wStuSoQ$Qta`go?ke9JiI}YmR8fz z_HQ2bt#wz4=WpnK=v=t8<>{XBM079~W^`=ye#U`D6^6fABT5L+E{Xn6Acqg`GL%no zPiN>G?R(0GO@|x2gCF+9-UqfsnwW#P!YN?*&=RE%iCyg82lZGo@8^u#Ak!S+6xJd|Funm~*~SKKHbZd{4HyUq`#}U{ zo9K1E8kiC(pBwc>OnXNJ6>uSuLzU?^VOsMn0A0{fwOJspJWFwy>;iY0i-*MDNrrRL z!HqKQ6-VPw`=|Lc0<*4XFYiFq&j$|Qk6JDcc621i3SK{Qv*}WeQh*>3X1_yFTq>|U z&6&g-Dr*dQaf(`beulOcPGwsiB_|ACdqr2ERGR@QfX~$UR^T$^B-nU$h)Ysy_4o%J z7GzK+`68JI-=j1xt7?U8ar7g|=wB&@oK`5Tqy>Qa;{|%(x*A zD97_dYz_Ic!zJ)CJsI%WxsGTZG#g$RSh*V5gH2hVlKTnZPDtSqUNzn^PH6878VJ-?m<)$qZz7_!00PNceIklRfCC44N-<}ejX2G$xFDV|3E$2B7=-o z?H8&xYR_XZ{!h@3z&lgN4GHT|%|R;t*+`~mbk#@e$40P7b;6!;yV~u@qsOzo*!ogP zBnFu=4W1eb?gXknv!#wjl^tP#kauP?LvP9GE()`F{H8_jQNn;Q9Gy1Aa;PIYTN1zc zl>|k1GgbVe3Z#PceNUxU=JGe{&GEnF7l@VWkVC|`Ney3R1l#ij2^ZO}(~PUYS|44! zl0S2|=!UCPp$4#GuanR>gP;2l$k|Oe(es6xRQ-SvIkkt!z!RHyzYBF#3K2ai%RBJ#I+^3FrI((7OX=nb(#ys4My|`DL=cAV^Q}m(Bzw)^+ za_KIDAfZ)C-SGZ@++{)r`5j4Tg>M&OJ<-gsMfF3ltMyLawA%&uyS|jHV^|RF?QOP} zHCKKZH9qM&L#Q<{qF&oi0##A&dC$H;;!J8er38&~^kl*5Vm>13o4KSPR@}^~?i4yB zT_Fa~sWvl)R1!ej9nLLfKa}2(Z&TFB{I9Ha+r_2?&#!|==F6MSl1UWM0K|V-#F!+K zdVlwo(|u>UX~ZxSitL3>=^d<(G|q^oOc#suLLHVxV(&bfkxyL9tpcjcxG$lk$*kpm zX|5i3js(n~@rcVJ0}F8(O%$%Af)XI0aS1vfkO&*g!8$7WZRCXsmKGxFjN&_8*l#9A zeuG;tZxIpN@O>uk*LImOwl7VkdQigv8Ck)`g=YSi;u1D&q65yaRCzbO9{js7f?bIP zV~laRJanFmDZv1o8l@bJ@`3EA!TY^h4P(Q@S(!E1-mrd<|Kw9-4D6sW9wQEPL6lh( z!mHb7UhG@_1EBQBMk0VU%R1Fx%@-}I!fMRDUV08Q0?l9QQgsC?$Ox*C*G1jok>5+| zM4MrRpRG-p4+bU>iQJB!oY?y@*QJENWFr|pKR;~u){8qf3@ReO*)`aVF0|TVu@245 zq6<>to{}Vk8j|RLFedJ4Maw*q?*Jjxd~IkLwcnI&sjxKaYNR!_~I@;FDG#gx2-& zY-x<`gsv9sy_~!gbF&M>>FO)3~mS0TVJYUF!{;#n{dZVHa`$X!o@PLafyMaWYsW>9KZ*3~*bT zVfgrpT1~kFWO?8Ikp3DvpWGN0+n#Y42cmi@^7<3EEnqk24FF-^DR~H?#TBp$SLOlYwDZvMJE$fMUKGhdN*~ z^(2p$hq=jUao11hsJ=IHC2xU#8K?-5EmwxF;VBh7FD}P`&CDGSnWiM3OWxc;fQ0Z9 zCW&&TC-miI?6K@x2vHA&Fmz~rH+7NUmxtP2jQ-uG8$>W+DOl2lBC6>Upb9*XTE>S1 zCHrk`mJ%>eTt_q7{VHEeLZ-MkIncn5M|jKO5Yr%apmzq4 zz#ED)AXeMhg>JO-9pX%OgF|fI!xFNrju8A3sszdznZX>00M8hVV*G`8?8(TxQAA7^ zC0WI#8`cUv0xQ_EK})mIZk>tCxkF!`9f2}6*3c;VaYr)mUKbHV=+H%{%^u>PGTQgp zNO(Z~MSt&zpWE)F6tjt&;pZ(qB#$pn>qOpvXL2sxx6Ma;EsrAEe zA4dUkJ2xFpgg2H+xqo zig&dal%Lf2P4DYIu9~0CX!pd~=K?%L`C4ojJdQH%C7K-u$_)$XdX%Lc2xL?iNZ4r& z{9N>qj)NIfH^^>#{65mqStT%k%#>lOJW|_INJlS_o=lp>e#{S2@gNqpp$Z<1XF|AM zos!pP%KkwI2aV!$lGihEBz!2N{4JxB&d<-X@i1@H7o`Z;0nh!@_V|d}s{g=PX%}?D zgS;~L+X|NnsTDlMh6O zR-K}fEVL7%o9K@y)*3cpY3G`4;?y?i1KZ>2(@)%nDkfYfAqF;YNY#%z;Tbvz1K5)g zLcusc*06@`#i(SAK6SQ~et0UR&NzOZR0f>@*@=fy-E=(ztZm0;1Wc>p%fgd&^DR2z ze)?ma`fIU5ef~!0`k53GVmuN4h^;on4?xQ>J2$mu!!g_mWu?5|s0<{_euZX&Ro z9qcIZ8pAXs3@EQK2zK-h!kxYJNS5Ni0vrKW=q?@hB)@nsXeRMILPlw+Mbvg@mKI*r zQVxQ!UJ35-aM;fh-)Y*JuR8z%^U7lhp|8$`tOJSmYz%`kJ0498y4`7G!4`Ns80)$H zK0*faHUK6IT=cLDT+cuWaC0vzq9RXN?Z58?ZuUF-{)AEC1qH$󓗋urb4EH=jn!%Zt$AVoLNJ<5= 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 ../../../core - github.com/click33/sa-token-go/integrations/gin => ../../../integrations/gin - github.com/click33/sa-token-go/storage/memory => ../../../storage/memory - github.com/click33/sa-token-go/stputil => ../../../stputil -) diff --git a/examples/gin/gin-simple/go.sum b/examples/gin/gin-simple/go.sum new file mode 100644 index 0000000..4b99fae --- /dev/null +++ b/examples/gin/gin-simple/go.sum @@ -0,0 +1,44 @@ +github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0= +github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM= +github.com/click33/sa-token-go/core v0.1.6 h1:ELOe0qSH1b3LRsQD3DIBg0e1VgYANKFg5H7z57Lkt/8= +github.com/click33/sa-token-go/integrations/gin v0.1.6 h1:OOGM7ozUFqiIbWBopWmB4Q4DVn6GZF/ho2gPhwJyZSI= +github.com/click33/sa-token-go/storage/memory v0.1.6 h1:iGFEy+HtTJLOpKnbIMbgpXyKotsKpPQu6wWTZVOXQis= +github.com/click33/sa-token-go/stputil v0.1.6 h1:S+V64jQzppE9c1wXcmHppCRlrSsU2iTfvdPGlMbs2WI= +github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= +github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/validator/v10 v10.20.0 h1:K9ISHbSaI0lyB2eWMPJo+kOS/FBExVwjEviJTixqxL8= +github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg= +github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= +golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc= +golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= +google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/examples/gin/gin-simple/main.go b/examples/gin/gin-simple/main.go index 18d7280..6fa2f48 100644 --- a/examples/gin/gin-simple/main.go +++ b/examples/gin/gin-simple/main.go @@ -4,28 +4,19 @@ import ( "log" sagin "github.com/click33/sa-token-go/integrations/gin" - "github.com/click33/sa-token-go/storage/memory" "github.com/gin-gonic/gin" ) func main() { - // 初始化存储 | Initialize storage - storage := memory.NewStorage() - - // 创建配置 (只需要 sagin 包!) | Create config (only need sagin package!) - config := sagin.DefaultConfig() - config.TokenName = "token" - config.Timeout = 7200 - config.IsPrintBanner = true - - // 创建管理器 | Create manager - manager := sagin.NewManager(storage, config) + // 创建 Builder 并构建 Manager | Create Builder and build Manager + mgr := sagin.NewDefaultBuild(). + TokenName("token"). + Timeout(7200). + IsPrintBanner(true). + Build() // 设置全局管理器 | Set global manager - sagin.SetManager(manager) - - // 创建 Gin 插件 | Create Gin plugin - plugin := sagin.NewPlugin(manager) + sagin.SetManager(mgr) // 创建路由 | Create router r := gin.Default() @@ -38,8 +29,10 @@ func main() { return } + ctx := c.Request.Context() + // 使用 sagin 包的全局函数登录 | Use sagin package global function to login - token, err := sagin.Login(userID) + token, err := sagin.Login(ctx, userID) if err != nil { c.JSON(500, gin.H{"error": err.Error()}) return @@ -59,8 +52,10 @@ func main() { return } + ctx := c.Request.Context() + // 使用 sagin 包的全局函数登出 | Use sagin package global function to logout - if err := sagin.LogoutByToken(token); err != nil { + if err := sagin.LogoutByToken(ctx, token); err != nil { c.JSON(500, gin.H{"error": err.Error()}) return } @@ -76,15 +71,17 @@ func main() { return } + ctx := c.Request.Context() + // 使用 sagin 包的全局函数检查登录 | Use sagin package global function to check login - isLogin := sagin.IsLogin(token) + isLogin := sagin.IsLogin(ctx, token) if !isLogin { c.JSON(401, gin.H{"error": "未登录"}) return } // 获取登录ID | Get login ID - loginID, _ := sagin.GetLoginID(token) + loginID, _ := sagin.GetLoginID(ctx, token) c.JSON(200, gin.H{ "message": "已登录", @@ -94,12 +91,11 @@ func main() { // 受保护的路由组 | Protected route group protected := r.Group("/api") - protected.Use(plugin.AuthMiddleware()) + protected.Use(sagin.CheckLoginMiddleware()) { // 用户信息 | User info protected.GET("/user", func(c *gin.Context) { - token := c.GetHeader("token") - loginID, _ := sagin.GetLoginID(token) + loginID, _ := sagin.GetLoginIDFromRequest(c) c.JSON(200, gin.H{ "user_id": loginID, @@ -110,9 +106,10 @@ func main() { // 踢人下线 | Kickout user protected.POST("/kickout/:user_id", func(c *gin.Context) { userID := c.Param("user_id") + ctx := c.Request.Context() // 使用 sagin 包的全局函数踢人 | Use sagin package global function to kickout - if err := sagin.Kickout(userID); err != nil { + if err := sagin.Kickout(ctx, userID); err != nil { c.JSON(500, gin.H{"error": err.Error()}) return } diff --git a/examples/jwt-example/README.md b/examples/jwt-example/README.md deleted file mode 100644 index 3352624..0000000 --- a/examples/jwt-example/README.md +++ /dev/null @@ -1,210 +0,0 @@ -# JWT Token 示例 - -本示例演示如何在 Sa-Token-Go 中使用 JWT(JSON Web Token)。 - -## JWT 简介 - -JWT 是一种无状态的 Token 方案,Token 本身包含了用户信息和过期时间,适合分布式系统。 - -### JWT 优势 - -- ✅ **无状态**:不需要服务端存储 Session -- ✅ **分布式友好**:多个服务可以独立验证 -- ✅ **信息自包含**:Token 包含用户信息 -- ✅ **跨域支持**:可以跨不同域使用 - -### JWT 结构 - -JWT 由三部分组成,用 `.` 分隔: - -``` -Header.Payload.Signature -``` - -- **Header**:Token 类型和加密算法 -- **Payload**:用户数据(loginId, device, exp等) -- **Signature**:签名(使用密钥加密) - -## 运行示例 - -```bash -go run main.go -``` - -## 基本使用 - -### 1. 配置 JWT - -```go -import ( - "github.com/click33/sa-token-go/core" - "github.com/click33/sa-token-go/stputil" - "github.com/click33/sa-token-go/storage/memory" -) - -func init() { - stputil.SetManager( - core.NewBuilder(). - Storage(memory.NewStorage()). - TokenStyle(core.TokenStyleJWT). // 使用 JWT - JwtSecretKey("your-256-bit-secret-key-here"). // 设置密钥 - Timeout(3600). // 过期时间 - Build(), - ) -} -``` - -### 2. 登录获取 JWT Token - -```go -token, _ := stputil.Login(1000) -// 返回类似:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... -``` - -### 3. 验证 JWT Token - -```go -// 验证 Token 是否有效 -if stputil.IsLogin(token) { - fmt.Println("Token 有效") -} - -// 获取登录 ID -loginID, _ := stputil.GetLoginID(token) -``` - -### 4. 解析 JWT - -你可以使用 [jwt.io](https://jwt.io) 在线解析 JWT Token 查看内容。 - -**Payload 示例:** - -```json -{ - "loginId": "1000", - "device": "", - "iat": 1697234567, - "exp": 1697238167 -} -``` - -## JWT 配置选项 - -```go -core.NewBuilder(). - TokenStyle(core.TokenStyleJWT). // 启用 JWT - JwtSecretKey("your-secret-key"). // 密钥(必需) - Timeout(3600). // Token 过期时间(秒) - IsPrintBanner(true). // 显示启动 Banner - Build() -``` - -## 安全建议 - -### 1. 使用强密钥 - -```go -// ❌ 弱密钥 -JwtSecretKey("secret") - -// ✅ 强密钥(建议至少 32 字节) -JwtSecretKey("a-very-long-and-random-secret-key-at-least-256-bits") -``` - -### 2. 设置合理的过期时间 - -```go -// 短期 Token(推荐) -Timeout(3600) // 1小时 - -// 长期 Token(需要配合刷新机制) -Timeout(86400) // 24小时 -``` - -### 3. 在生产环境中保护密钥 - -```go -// ✅ 从环境变量读取 -import "os" - -JwtSecretKey(os.Getenv("JWT_SECRET_KEY")) -``` - -## JWT vs 普通 Token - -| 特性 | JWT | UUID/Random | -|------|-----|-------------| -| 状态 | 无状态 | 有状态 | -| 服务端存储 | 不需要 | 需要 | -| Token 大小 | 较大 | 较小 | -| 可撤销性 | 困难 | 容易 | -| 分布式 | 优秀 | 需要共享存储 | -| 性能 | 高(不查数据库) | 中等(需查数据库) | - -## 使用场景 - -### 适合 JWT 的场景 - -- ✅ 微服务架构 -- ✅ 无状态 API -- ✅ 跨域认证 -- ✅ 短期访问令牌 - -### 不适合 JWT 的场景 - -- ❌ 需要立即撤销 Token -- ❌ Token 包含敏感信息 -- ❌ 需要频繁更新权限 - -## 完整示例 - -```go -package main - -import ( - "fmt" - "github.com/click33/sa-token-go/core" - "github.com/click33/sa-token-go/stputil" - "github.com/click33/sa-token-go/storage/memory" -) - -func main() { - // 初始化 JWT - stputil.SetManager( - core.NewBuilder(). - Storage(memory.NewStorage()). - TokenStyle(core.TokenStyleJWT). - JwtSecretKey("your-256-bit-secret"). - Timeout(3600). - Build(), - ) - - // 登录 - token, _ := stputil.Login(1000) - fmt.Println("Token:", token) - - // 验证 - if stputil.IsLogin(token) { - loginID, _ := stputil.GetLoginID(token) - fmt.Println("登录ID:", loginID) - } - - // 权限管理 - stputil.SetPermissions(1000, []string{"admin:*"}) - if stputil.HasPermission(1000, "admin:read") { - fmt.Println("有权限") - } -} -``` - -## 相关文档 - -- [Authentication Guide](../../docs/guide/authentication.md) -- [Token Configuration](../../docs/guide/configuration.md) -- [Quick Start](../../docs/tutorial/quick-start.md) - -## 在线工具 - -- [JWT.io](https://jwt.io) - JWT 调试工具 -- [JWT Inspector](https://jwt-inspector.netlify.app/) - JWT 检查器 - diff --git a/examples/jwt-example/go.mod b/examples/jwt-example/go.mod deleted file mode 100644 index 1daf0cf..0000000 --- a/examples/jwt-example/go.mod +++ /dev/null @@ -1,20 +0,0 @@ -module github.com/click33/sa-token-go/examples/jwt-example - -go 1.21 - -require ( - github.com/click33/sa-token-go/core v0.1.3 - github.com/click33/sa-token-go/storage/memory v0.1.3 - github.com/click33/sa-token-go/stputil v0.1.3 -) - -require ( - github.com/golang-jwt/jwt/v5 v5.2.1 // indirect - github.com/google/uuid v1.6.0 // indirect -) - -replace ( - github.com/click33/sa-token-go/core => ../../core - github.com/click33/sa-token-go/storage/memory => ../../storage/memory - github.com/click33/sa-token-go/stputil => ../../stputil -) diff --git a/examples/kratos/kratos-example/go.mod b/examples/kratos/kratos-example/go.mod index 2d82d6a..5365bcd 100644 --- a/examples/kratos/kratos-example/go.mod +++ b/examples/kratos/kratos-example/go.mod @@ -1,6 +1,6 @@ module github.com/click33/sa-token-go/examples/kratos/kratos-example -go 1.25.3 +go 1.25.0 require ( github.com/go-kratos/kratos/v2 v2.9.1 @@ -22,7 +22,7 @@ require ( go.opentelemetry.io/otel v1.38.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.38.0 // indirect golang.org/x/net v0.43.0 // indirect - golang.org/x/sync v0.16.0 // indirect + golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.35.0 // indirect golang.org/x/text v0.28.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20251103181224-f26f9409b101 // indirect diff --git a/examples/kratos/kratos-example/go.sum b/examples/kratos/kratos-example/go.sum index e77d9e4..8ed5692 100644 --- a/examples/kratos/kratos-example/go.sum +++ b/examples/kratos/kratos-example/go.sum @@ -21,7 +21,7 @@ go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5 go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM= go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= -golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= google.golang.org/genproto/googleapis/api v0.0.0-20251111163417-95abcf5c77ba h1:B14OtaXuMaCQsl2deSvNkyPKIzq3BjfxQp8d00QyWx4= diff --git a/examples/listener-example/README.md b/examples/listener-example/README.md deleted file mode 100644 index aa14290..0000000 --- a/examples/listener-example/README.md +++ /dev/null @@ -1,163 +0,0 @@ -# Event Listener Example - -This example demonstrates the event listener system in Sa-Token-Go. - -## Features Demonstrated - -1. **Simple Function Listeners** - Quick way to register event handlers -2. **Wildcard Listeners** - Listen to all events -3. **Priority-Based Execution** - Control listener execution order -4. **Synchronous vs Asynchronous** - Choose blocking or non-blocking listeners -5. **Panic Recovery** - Handle listener errors gracefully -6. **Dynamic Registration** - Add/remove listeners at runtime -7. **Event Enable/Disable** - Control which events are active - -## Running the Example - -```bash -go run main.go -``` - -## Expected Output - -``` -=== Sa-Token-Go Event Listener Example === - ---- Triggering Events --- - -[AUDIT] Login audit - User: 1000, Time: 1697234567 -[ALL EVENTS] Event{type=login, loginID=1000, device=, timestamp=1697234567} -[LOGIN] User 1000 logged in with token abc123def456... - -[AUDIT] Login audit - User: 2000, Time: 1697234568 -[ALL EVENTS] Event{type=login, loginID=2000, device=, timestamp=1697234568} -[LOGIN] User 2000 logged in with token xyz789... - -[ALL EVENTS] Event{type=logout, loginID=1000, device=, timestamp=1697234569} -[LOGOUT] User 1000 logged out - -[ALL EVENTS] Event{type=kickout, loginID=2000, device=, timestamp=1697234570} -[KICKOUT] User 2000 was forcibly logged out - ---- Listener Statistics --- -Total listeners: 5 -Login listeners: 2 -Logout listeners: 1 - ---- Unregistering audit logger --- -Audit logger unregistered successfully -Remaining listeners: 4 - ---- Disabling kickout events --- - ---- Testing event disable (this should not trigger kickout listener) --- -[ALL EVENTS] Event{type=login, loginID=3000, device=, timestamp=1697234571} -[LOGIN] User 3000 logged in with token... - -=== Example Complete === -``` - -## Key Concepts - -In this example the authentication manager automatically owns an internal event manager: - -```go -manager := core.NewBuilder(). - Storage(memory.NewStorage()). - Build() - -eventMgr := manager.GetEventManager() // Advanced controls (stats, enable/disable, panic handler, ...) -``` - -### Function Listeners - -The simplest way to register an event handler: - -```go -manager.RegisterFunc(core.EventLogin, func(data *core.EventData) { - fmt.Printf("User %s logged in\n", data.LoginID) -}) -``` - -### Priority-Based Listeners - -Control execution order with priorities: - -```go -manager.RegisterWithConfig(core.EventLogin, - myListener, - core.ListenerConfig{ - Priority: 100, // Higher = executes first - Async: false, // Synchronous execution - }, -) -``` - -### Wildcard Listeners - -Listen to all events: - -```go -manager.RegisterFunc(core.EventAll, func(data *core.EventData) { - // This will be called for every event -}) -``` - -### Dynamic Listener Management - -Add and remove listeners at runtime: - -```go -// Register with custom ID -id := manager.RegisterWithConfig(event, listener, core.ListenerConfig{ - ID: "my-listener", -}) - -// Later, unregister -manager.Unregister(id) -``` - -## Use Cases - -### 1. Audit Logging - -```go -manager.RegisterFunc(core.EventAll, func(data *core.EventData) { - auditLog.Write(fmt.Sprintf("[%s] %s - %s", - data.Event, data.LoginID, time.Unix(data.Timestamp, 0))) -}) -``` - -### 2. Security Monitoring - -```go -manager.RegisterFunc(core.EventKickout, func(data *core.EventData) { - alertSystem.Send(fmt.Sprintf("User %s was kicked out", data.LoginID)) -}) -``` - -### 3. Analytics - -```go -manager.RegisterFunc(core.EventLogin, func(data *core.EventData) { - analytics.Track("user_login", map[string]interface{}{ - "user_id": data.LoginID, - "device": data.Device, - }) -}) -``` - -### 4. Cache Invalidation - -```go -manager.RegisterFunc(core.EventLogout, func(data *core.EventData) { - cache.Delete("user:" + data.LoginID) -}) -``` - -## Related Documentation - -- [Listener Guide](../../docs/guide/listener.md) - Complete listener documentation -- [Authentication Guide](../../docs/guide/authentication.md) - Authentication basics -- [API Reference](../../docs/api/) - API documentation - diff --git a/examples/listener-example/go.mod b/examples/listener-example/go.mod deleted file mode 100644 index 728dd7c..0000000 --- a/examples/listener-example/go.mod +++ /dev/null @@ -1,20 +0,0 @@ -module github.com/click33/sa-token-go/examples/listener-example - -go 1.21 - -require ( - github.com/click33/sa-token-go/core v0.1.3 - github.com/click33/sa-token-go/storage/memory v0.1.3 - github.com/click33/sa-token-go/stputil v0.1.3 -) - -require ( - github.com/golang-jwt/jwt/v5 v5.2.1 // indirect - github.com/google/uuid v1.6.0 // indirect -) - -replace ( - github.com/click33/sa-token-go/core => ../../core - github.com/click33/sa-token-go/storage/memory => ../../storage/memory - github.com/click33/sa-token-go/stputil => ../../stputil -) diff --git a/examples/manager-example/jwt-example/go.mod b/examples/manager-example/jwt-example/go.mod new file mode 100644 index 0000000..8ef958a --- /dev/null +++ b/examples/manager-example/jwt-example/go.mod @@ -0,0 +1,16 @@ +module github.com/click33/sa-token-go/examples/jwt-example + +go 1.25.0 + +require ( + github.com/click33/sa-token-go/core v0.1.6 + github.com/click33/sa-token-go/storage/memory v0.1.6 + github.com/click33/sa-token-go/stputil v0.1.6 +) + +require ( + github.com/golang-jwt/jwt/v5 v5.3.0 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/panjf2000/ants/v2 v2.11.3 // indirect + golang.org/x/sync v0.19.0 // indirect +) diff --git a/examples/manager-example/jwt-example/go.sum b/examples/manager-example/jwt-example/go.sum new file mode 100644 index 0000000..16b1a51 --- /dev/null +++ b/examples/manager-example/jwt-example/go.sum @@ -0,0 +1,11 @@ +github.com/click33/sa-token-go/core v0.1.6 h1:ELOe0qSH1b3LRsQD3DIBg0e1VgYANKFg5H7z57Lkt/8= +github.com/click33/sa-token-go/storage/memory v0.1.6 h1:iGFEy+HtTJLOpKnbIMbgpXyKotsKpPQu6wWTZVOXQis= +github.com/click33/sa-token-go/stputil v0.1.6 h1:S+V64jQzppE9c1wXcmHppCRlrSsU2iTfvdPGlMbs2WI= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/examples/jwt-example/main.go b/examples/manager-example/jwt-example/main.go similarity index 68% rename from examples/jwt-example/main.go rename to examples/manager-example/jwt-example/main.go index ad77750..44542c9 100644 --- a/examples/jwt-example/main.go +++ b/examples/manager-example/jwt-example/main.go @@ -1,9 +1,11 @@ package main import ( + "context" "fmt" - "github.com/click33/sa-token-go/core" + "github.com/click33/sa-token-go/core/adapter" + "github.com/click33/sa-token-go/core/builder" "github.com/click33/sa-token-go/storage/memory" "github.com/click33/sa-token-go/stputil" ) @@ -13,17 +15,20 @@ func main() { // 初始化使用 JWT Token 风格 stputil.SetManager( - core.NewBuilder(). - Storage(memory.NewStorage()). + builder.NewBuilder(). + SetStorage(memory.NewStorage()). TokenName("Authorization"). - TokenStyle(core.TokenStyleJWT). // 使用 JWT + TokenStyle(adapter.TokenStyleJWT). // 使用 JWT JwtSecretKey("your-256-bit-secret-key-here"). // JWT 密钥 Timeout(3600). // 1小时过期 + MaxRefresh(1800). // 自动续期触发阈值 Build(), ) + ctx := context.Background() + fmt.Println("1. 使用 JWT 登录") - token, err := stputil.Login(1000) + token, err := stputil.Login(ctx, 1000) if err != nil { fmt.Printf("登录失败: %v\n", err) return @@ -34,13 +39,13 @@ func main() { // 你可以在 https://jwt.io 解析这个 Token fmt.Println("2. 验证 JWT Token") - if stputil.IsLogin(token) { + if stputil.IsLogin(ctx, token) { fmt.Println("✓ Token 有效") } else { fmt.Println("✗ Token 无效") } - loginID, err := stputil.GetLoginID(token) + loginID, err := stputil.GetLoginID(ctx, token) if err != nil { fmt.Printf("获取登录ID失败: %v\n", err) return @@ -48,29 +53,29 @@ func main() { fmt.Printf("登录ID: %s\n\n", loginID) fmt.Println("3. 设置权限和角色") - stputil.SetPermissions(1000, []string{"user:read", "user:write", "admin:*"}) - stputil.SetRoles(1000, []string{"admin", "user"}) + _ = stputil.SetPermissions(ctx, 1000, []string{"user:read", "user:write", "admin:*"}) + _ = stputil.SetRoles(ctx, 1000, []string{"admin", "user"}) fmt.Println("已设置权限: user:read, user:write, admin:*") fmt.Println("已设置角色: admin, user\n") fmt.Println("4. 检查权限") - if stputil.HasPermission(1000, "user:read") { + if stputil.HasPermission(ctx, 1000, "user:read") { fmt.Println("✓ 拥有 user:read 权限") } - if stputil.HasPermission(1000, "admin:delete") { + if stputil.HasPermission(ctx, 1000, "admin:delete") { fmt.Println("✓ 拥有 admin:delete 权限(通配符匹配)") } fmt.Println("\n5. 检查角色") - if stputil.HasRole(1000, "admin") { + if stputil.HasRole(ctx, 1000, "admin") { fmt.Println("✓ 拥有 admin 角色") } fmt.Println("\n6. 登出") - stputil.Logout(1000) + _ = stputil.Logout(ctx, 1000) fmt.Println("已登出") - if !stputil.IsLogin(token) { + if !stputil.IsLogin(ctx, token) { fmt.Println("✓ Token 已失效") } diff --git a/examples/manager-example/listener-example/go.mod b/examples/manager-example/listener-example/go.mod new file mode 100644 index 0000000..c2df91a --- /dev/null +++ b/examples/manager-example/listener-example/go.mod @@ -0,0 +1,16 @@ +module github.com/click33/sa-token-go/examples/listener-example + +go 1.25.0 + +require ( + github.com/click33/sa-token-go/core v0.1.6 + github.com/click33/sa-token-go/storage/memory v0.1.6 + github.com/click33/sa-token-go/stputil v0.1.6 +) + +require ( + github.com/golang-jwt/jwt/v5 v5.3.0 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/panjf2000/ants/v2 v2.11.3 // indirect + golang.org/x/sync v0.19.0 // indirect +) diff --git a/examples/manager-example/listener-example/go.sum b/examples/manager-example/listener-example/go.sum new file mode 100644 index 0000000..16b1a51 --- /dev/null +++ b/examples/manager-example/listener-example/go.sum @@ -0,0 +1,11 @@ +github.com/click33/sa-token-go/core v0.1.6 h1:ELOe0qSH1b3LRsQD3DIBg0e1VgYANKFg5H7z57Lkt/8= +github.com/click33/sa-token-go/storage/memory v0.1.6 h1:iGFEy+HtTJLOpKnbIMbgpXyKotsKpPQu6wWTZVOXQis= +github.com/click33/sa-token-go/stputil v0.1.6 h1:S+V64jQzppE9c1wXcmHppCRlrSsU2iTfvdPGlMbs2WI= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/examples/listener-example/main.go b/examples/manager-example/listener-example/main.go similarity index 62% rename from examples/listener-example/main.go rename to examples/manager-example/listener-example/main.go index 85c052a..e7004f8 100644 --- a/examples/listener-example/main.go +++ b/examples/manager-example/listener-example/main.go @@ -1,10 +1,12 @@ package main import ( + "context" "fmt" "time" - "github.com/click33/sa-token-go/core" + "github.com/click33/sa-token-go/core/builder" + "github.com/click33/sa-token-go/core/listener" "github.com/click33/sa-token-go/storage/memory" "github.com/click33/sa-token-go/stputil" ) @@ -12,34 +14,37 @@ import ( func main() { fmt.Println("=== Sa-Token-Go Event Listener Example ===\n") + ctx := context.Background() + // 1. Simple function listener - manager := core.NewBuilder(). - Storage(memory.NewStorage()). + mgr := builder.NewBuilder(). + SetStorage(memory.NewStorage()). TokenName("Authorization"). - Timeout(7200). + Timeout(300). + MaxRefresh(150). Build() - manager.RegisterFunc(core.EventLogin, func(data *core.EventData) { + mgr.RegisterFunc(listener.EventLogin, func(data *listener.EventData) { fmt.Printf("[LOGIN] User %s logged in with token %s\n", data.LoginID, data.Token[:20]+"...") }) // 2. Logout listener - manager.RegisterFunc(core.EventLogout, func(data *core.EventData) { + mgr.RegisterFunc(listener.EventLogout, func(data *listener.EventData) { fmt.Printf("[LOGOUT] User %s logged out\n", data.LoginID) }) // 3. Kickout listener - manager.RegisterFunc(core.EventKickout, func(data *core.EventData) { + mgr.RegisterFunc(listener.EventKickout, func(data *listener.EventData) { fmt.Printf("[KICKOUT] User %s was forcibly logged out\n", data.LoginID) }) // 4. High-priority synchronous listener - auditListenerID := manager.RegisterWithConfig(core.EventLogin, - core.ListenerFunc(func(data *core.EventData) { + auditListenerID := mgr.RegisterWithConfig(listener.EventLogin, + listener.ListenerFunc(func(data *listener.EventData) { fmt.Printf("[AUDIT] Login audit - User: %s, Time: %d\n", data.LoginID, data.Timestamp) }), - core.ListenerConfig{ + listener.ListenerConfig{ Async: false, // Synchronous Priority: 100, // High priority ID: "audit-logger", @@ -47,48 +52,48 @@ func main() { ) // 5. Wildcard listener (all events) - manager.RegisterFunc(core.EventAll, func(data *core.EventData) { + mgr.RegisterFunc(listener.EventAll, func(data *listener.EventData) { fmt.Printf("[ALL EVENTS] %s\n", data.String()) }) - eventMgr := manager.GetEventManager() + eventMgr := mgr.GetEventManager() // 6. Custom panic handler - eventMgr.SetPanicHandler(func(event core.Event, data *core.EventData, recovered interface{}) { + eventMgr.SetPanicHandler(func(event listener.Event, data *listener.EventData, recovered interface{}) { fmt.Printf("[PANIC RECOVERED] Event: %s, Error: %v\n", event, recovered) }) // Initialize Sa-Token - stputil.SetManager(manager) + stputil.SetManager(mgr) fmt.Println("\n--- Triggering Events ---\n") // Trigger login event - token1, _ := stputil.Login(1000) + token1, _ := stputil.Login(ctx, 1000) time.Sleep(100 * time.Millisecond) // Wait for async listeners - token2, _ := stputil.Login(2000) + token2, _ := stputil.Login(ctx, 2000) time.Sleep(100 * time.Millisecond) // Trigger logout event - stputil.Logout(1000) + stputil.Logout(ctx, 1000) time.Sleep(100 * time.Millisecond) // Trigger kickout event - stputil.Kickout(2000) + stputil.Kickout(ctx, 2000) time.Sleep(100 * time.Millisecond) // Wait for all async listeners to complete - manager.WaitEvents() + mgr.WaitEvents() fmt.Println("\n--- Listener Statistics ---") fmt.Printf("Total listeners: %d\n", eventMgr.Count()) - fmt.Printf("Login listeners: %d\n", eventMgr.CountForEvent(core.EventLogin)) - fmt.Printf("Logout listeners: %d\n", eventMgr.CountForEvent(core.EventLogout)) + fmt.Printf("Login listeners: %d\n", eventMgr.CountForEvent(listener.EventLogin)) + fmt.Printf("Logout listeners: %d\n", eventMgr.CountForEvent(listener.EventLogout)) // Unregister a listener fmt.Println("\n--- Unregistering audit logger ---") - if manager.Unregister(auditListenerID) { + if mgr.Unregister(auditListenerID) { fmt.Println("Audit logger unregistered successfully") } @@ -96,11 +101,11 @@ func main() { // Disable certain events fmt.Println("\n--- Disabling kickout events ---") - eventMgr.DisableEvent(core.EventKickout) + eventMgr.DisableEvent(listener.EventKickout) fmt.Println("\n--- Testing event disable (this should not trigger kickout listener) ---") - stputil.Login(3000) - stputil.Kickout(3000) + stputil.Login(ctx, 3000) + stputil.Kickout(ctx, 3000) time.Sleep(100 * time.Millisecond) // Re-enable all events diff --git a/examples/oauth2-example/go.mod b/examples/manager-example/oauth2-example/go.mod similarity index 62% rename from examples/oauth2-example/go.mod rename to examples/manager-example/oauth2-example/go.mod index 905f73e..0499dd1 100644 --- a/examples/oauth2-example/go.mod +++ b/examples/manager-example/oauth2-example/go.mod @@ -1,47 +1,45 @@ module github.com/click33/sa-token-go/examples/oauth2-example -go 1.21 +go 1.25.0 require ( - github.com/click33/sa-token-go/core v0.1.3 - github.com/click33/sa-token-go/storage/memory v0.1.3 + github.com/click33/sa-token-go/core v0.1.6 + github.com/click33/sa-token-go/storage/memory v0.1.6 github.com/gin-gonic/gin v1.10.0 ) require ( github.com/bytedance/sonic v1.11.6 // indirect + github.com/bytedance/sonic/loader v0.1.1 // indirect github.com/cloudwego/base64x v0.1.4 // indirect github.com/cloudwego/iasm v0.2.0 // indirect - github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/gabriel-vasile/mimetype v1.4.3 // indirect github.com/gin-contrib/sse v0.1.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.20.0 // indirect github.com/goccy/go-json v0.10.2 // indirect - github.com/golang-jwt/jwt/v5 v5.2.1 // indirect + github.com/golang-jwt/jwt/v5 v5.2.2 // indirect github.com/google/uuid v1.6.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/cpuid/v2 v2.2.7 // indirect + github.com/kr/pretty v0.3.1 // indirect github.com/leodido/go-urn v1.4.0 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/panjf2000/ants/v2 v2.11.3 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect - github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/rogpeppe/go-internal v1.13.1 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.12 // indirect golang.org/x/arch v0.8.0 // indirect - golang.org/x/crypto v0.23.0 // indirect - golang.org/x/net v0.25.0 // indirect - golang.org/x/sys v0.20.0 // indirect - golang.org/x/text v0.15.0 // indirect - golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/protobuf v1.34.1 // indirect + golang.org/x/crypto v0.41.0 // indirect + golang.org/x/net v0.43.0 // indirect + golang.org/x/sync v0.16.0 // indirect + golang.org/x/sys v0.35.0 // indirect + golang.org/x/text v0.28.0 // indirect + google.golang.org/protobuf v1.36.10 // indirect + gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) - -replace ( - github.com/click33/sa-token-go/core => ../../core - github.com/click33/sa-token-go/storage/memory => ../../storage/memory -) diff --git a/examples/manager-example/oauth2-example/go.sum b/examples/manager-example/oauth2-example/go.sum new file mode 100644 index 0000000..9264424 --- /dev/null +++ b/examples/manager-example/oauth2-example/go.sum @@ -0,0 +1,42 @@ +github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0= +github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM= +github.com/click33/sa-token-go/core v0.1.6 h1:ELOe0qSH1b3LRsQD3DIBg0e1VgYANKFg5H7z57Lkt/8= +github.com/click33/sa-token-go/storage/memory v0.1.6 h1:iGFEy+HtTJLOpKnbIMbgpXyKotsKpPQu6wWTZVOXQis= +github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= +github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/validator/v10 v10.20.0 h1:K9ISHbSaI0lyB2eWMPJo+kOS/FBExVwjEviJTixqxL8= +github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg= +github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= +golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc= +golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= +google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/examples/oauth2-example/main.go b/examples/manager-example/oauth2-example/main.go similarity index 61% rename from examples/oauth2-example/main.go rename to examples/manager-example/oauth2-example/main.go index 0c6ffbe..8bf8c40 100644 --- a/examples/oauth2-example/main.go +++ b/examples/manager-example/oauth2-example/main.go @@ -1,25 +1,27 @@ package main import ( + "context" "fmt" "net/http" - "time" - "github.com/click33/sa-token-go/core" - "github.com/click33/sa-token-go/storage/memory" + "github.com/click33/sa-token-go/core/oauth2" "github.com/gin-gonic/gin" ) -var oauth2Server *core.OAuth2Server +var oauth2Server *oauth2.OAuth2Server func main() { - storage := memory.NewStorage() - oauth2Server = core.NewOAuth2Server(storage) + // 创建 OAuth2 服务器 + // 参数:authType, prefix, storage, serializer + oauth2Server = oauth2.NewOAuth2Server("login", "sa:", nil, nil) + // 注册客户端 registerClients() r := gin.Default() + // OAuth2 端点 r.GET("/oauth/authorize", authorizeHandler) r.POST("/oauth/token", tokenHandler) r.GET("/oauth/userinfo", userinfoHandler) @@ -32,44 +34,60 @@ func main() { fmt.Println("3. GET /oauth/userinfo (Authorization: Bearer )") fmt.Println("4. POST /oauth/revoke (token=)") - r.Run(":8080") + _ = r.Run(":8080") } func registerClients() { - client := &core.OAuth2Client{ + // 注册 Web 应用客户端 + webClient := &oauth2.Client{ ClientID: "webapp", ClientSecret: "secret123", RedirectURIs: []string{ "http://localhost:8080/callback", "http://localhost:3000/callback", }, - GrantTypes: []core.OAuth2GrantType{ - core.GrantTypeAuthorizationCode, - core.GrantTypeRefreshToken, + GrantTypes: []oauth2.GrantType{ + oauth2.GrantTypeAuthorizationCode, + oauth2.GrantTypeRefreshToken, }, Scopes: []string{"read", "write", "profile"}, } - oauth2Server.RegisterClient(client) + _ = oauth2Server.RegisterClient(webClient) - mobileClient := &core.OAuth2Client{ + // 注册移动应用客户端 + mobileClient := &oauth2.Client{ ClientID: "mobile-app", ClientSecret: "mobile-secret-456", RedirectURIs: []string{ "myapp://oauth/callback", }, - GrantTypes: []core.OAuth2GrantType{ - core.GrantTypeAuthorizationCode, - core.GrantTypeRefreshToken, + GrantTypes: []oauth2.GrantType{ + oauth2.GrantTypeAuthorizationCode, + oauth2.GrantTypeRefreshToken, }, Scopes: []string{"read", "write"}, } - oauth2Server.RegisterClient(mobileClient) + _ = oauth2Server.RegisterClient(mobileClient) + + // 注册服务端客户端(客户端凭证模式) + serviceClient := &oauth2.Client{ + ClientID: "service-app", + ClientSecret: "service-secret-789", + RedirectURIs: []string{}, + GrantTypes: []oauth2.GrantType{ + oauth2.GrantTypeClientCredentials, + }, + Scopes: []string{"api:read", "api:write"}, + } + _ = oauth2Server.RegisterClient(serviceClient) fmt.Println("✅ OAuth2 Clients registered:") fmt.Println(" - webapp (client_id: webapp, secret: secret123)") fmt.Println(" - mobile-app (client_id: mobile-app, secret: mobile-secret-456)") + fmt.Println(" - service-app (client_id: service-app, secret: service-secret-789)") } +// 授权端点 - 生成授权码 func authorizeHandler(c *gin.Context) { clientID := c.Query("client_id") redirectURI := c.Query("redirect_uri") @@ -87,12 +105,18 @@ func authorizeHandler(c *gin.Context) { scopes = []string{scope} } + // 模拟已登录用户 userID := "user123" + ctx := c.Request.Context() + + // 生成授权码 + // 参数顺序:ctx, clientID, userID, redirectURI, scopes authCode, err := oauth2Server.GenerateAuthorizationCode( + ctx, clientID, - redirectURI, userID, + redirectURI, scopes, ) if err != nil { @@ -110,26 +134,32 @@ func authorizeHandler(c *gin.Context) { }) } +// 令牌端点 - 根据授权类型处理 func tokenHandler(c *gin.Context) { grantType := c.PostForm("grant_type") + ctx := c.Request.Context() switch grantType { case "authorization_code": - handleAuthorizationCodeGrant(c) + handleAuthorizationCodeGrant(ctx, c) case "refresh_token": - handleRefreshTokenGrant(c) + handleRefreshTokenGrant(ctx, c) + case "client_credentials": + handleClientCredentialsGrant(ctx, c) default: c.JSON(http.StatusBadRequest, gin.H{"error": "unsupported_grant_type"}) } } -func handleAuthorizationCodeGrant(c *gin.Context) { +// 授权码模式 +func handleAuthorizationCodeGrant(ctx context.Context, c *gin.Context) { code := c.PostForm("code") clientID := c.PostForm("client_id") clientSecret := c.PostForm("client_secret") redirectURI := c.PostForm("redirect_uri") accessToken, err := oauth2Server.ExchangeCodeForToken( + ctx, code, clientID, clientSecret, @@ -149,14 +179,16 @@ func handleAuthorizationCodeGrant(c *gin.Context) { }) } -func handleRefreshTokenGrant(c *gin.Context) { +// 刷新令牌模式 +func handleRefreshTokenGrant(ctx context.Context, c *gin.Context) { refreshToken := c.PostForm("refresh_token") clientID := c.PostForm("client_id") clientSecret := c.PostForm("client_secret") accessToken, err := oauth2Server.RefreshAccessToken( - refreshToken, + ctx, clientID, + refreshToken, clientSecret, ) if err != nil { @@ -173,6 +205,37 @@ func handleRefreshTokenGrant(c *gin.Context) { }) } +// 客户端凭证模式 +func handleClientCredentialsGrant(ctx context.Context, c *gin.Context) { + clientID := c.PostForm("client_id") + clientSecret := c.PostForm("client_secret") + scope := c.PostForm("scope") + + var scopes []string + if scope != "" { + scopes = []string{scope} + } + + accessToken, err := oauth2Server.ClientCredentialsToken( + ctx, + clientID, + clientSecret, + scopes, + ) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "access_token": accessToken.Token, + "token_type": accessToken.TokenType, + "expires_in": accessToken.ExpiresIn, + "scope": accessToken.Scopes, + }) +} + +// 用户信息端点 func userinfoHandler(c *gin.Context) { authHeader := c.GetHeader("Authorization") if authHeader == "" { @@ -181,9 +244,12 @@ func userinfoHandler(c *gin.Context) { } var token string - fmt.Sscanf(authHeader, "Bearer %s", &token) + _, _ = fmt.Sscanf(authHeader, "Bearer %s", &token) + + ctx := c.Request.Context() - accessToken, err := oauth2Server.ValidateAccessToken(token) + // 验证访问令牌并获取信息 + accessToken, err := oauth2Server.ValidateAccessTokenAndGetInfo(ctx, token) if err != nil { c.JSON(http.StatusUnauthorized, gin.H{"error": "invalid access token"}) return @@ -194,14 +260,15 @@ func userinfoHandler(c *gin.Context) { "client_id": accessToken.ClientID, "scopes": accessToken.Scopes, "expires_in": accessToken.ExpiresIn, - "issued_at": time.Now().Unix() - accessToken.ExpiresIn, }) } +// 撤销令牌端点 func revokeHandler(c *gin.Context) { token := c.PostForm("token") + ctx := c.Request.Context() - if err := oauth2Server.RevokeToken(token); err != nil { + if err := oauth2Server.RevokeToken(ctx, token); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } diff --git a/examples/manager-example/security-example/go.mod b/examples/manager-example/security-example/go.mod new file mode 100644 index 0000000..addf05b --- /dev/null +++ b/examples/manager-example/security-example/go.mod @@ -0,0 +1,15 @@ +module github.com/click33/sa-token-go/examples/security-example + +go 1.25.0 + +require ( + github.com/click33/sa-token-go/core v0.1.6 + github.com/click33/sa-token-go/storage/memory v0.1.6 +) + +require ( + github.com/golang-jwt/jwt/v5 v5.3.0 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/panjf2000/ants/v2 v2.11.3 // indirect + golang.org/x/sync v0.19.0 // indirect +) diff --git a/examples/manager-example/security-example/main.go b/examples/manager-example/security-example/main.go new file mode 100644 index 0000000..0dea13e --- /dev/null +++ b/examples/manager-example/security-example/main.go @@ -0,0 +1,159 @@ +package main + +import ( + "context" + "fmt" + "time" + + "github.com/click33/sa-token-go/core/security" + "github.com/click33/sa-token-go/storage/memory" +) + +func main() { + fmt.Println("=== Sa-Token-Go Security Features Demo ===\n") + + ctx := context.Background() + storage := memory.NewStorage() + + // 1. Nonce 防重放攻击示例 + demoNonceManager(ctx, storage) + + // 2. Refresh Token 示例 + demoRefreshTokenManager(ctx, storage) + + fmt.Println("=== Demo Complete ===") +} + +// demoNonceManager 演示 Nonce 防重放攻击功能 +func demoNonceManager(ctx context.Context, storage *memory.Storage) { + fmt.Println("1. Nonce Manager - 防重放攻击") + fmt.Println("----------------------------------------") + + // 创建 Nonce 管理器 + // 参数:authType, prefix, storage, ttl + nonceManager := security.NewNonceManager("login", "sa:", storage, 5*time.Minute) + + // 生成 Nonce + nonce1, err := nonceManager.Generate(ctx) + if err != nil { + fmt.Printf(" [ERROR] 生成 Nonce 失败: %v\n", err) + return + } + fmt.Printf(" [OK] 生成 Nonce: %s\n", nonce1) + + // 检查 Nonce 是否有效(不消费) + fmt.Printf(" [INFO] Nonce 是否有效(检查): %v\n", nonceManager.IsValid(ctx, nonce1)) + + // 验证并消费 Nonce(第一次) + result1 := nonceManager.Verify(ctx, nonce1) + fmt.Printf(" [VERIFY] 第一次验证 Nonce: %v (应该为 true)\n", result1) + + // 验证并消费 Nonce(第二次 - 重放攻击模拟) + result2 := nonceManager.Verify(ctx, nonce1) + fmt.Printf(" [BLOCKED] 第二次验证 Nonce: %v (应该为 false - 防止重放)\n", result2) + + // 使用 VerifyAndConsume 方法 + nonce2, _ := nonceManager.Generate(ctx) + fmt.Printf("\n [OK] 生成新 Nonce: %s\n", nonce2) + err = nonceManager.VerifyAndConsume(ctx, nonce2) + if err != nil { + fmt.Printf(" [ERROR] VerifyAndConsume 失败: %v\n", err) + } else { + fmt.Printf(" [OK] VerifyAndConsume 成功\n") + } + + // 再次使用已消费的 Nonce + err = nonceManager.VerifyAndConsume(ctx, nonce2) + if err != nil { + fmt.Printf(" [BLOCKED] 重复使用 Nonce 被拒绝: %v\n", err) + } + + fmt.Println() +} + +// demoRefreshTokenManager 演示 Refresh Token 功能 +func demoRefreshTokenManager(ctx context.Context, storage *memory.Storage) { + fmt.Println("2. Refresh Token Manager - 令牌刷新") + fmt.Println("----------------------------------------") + + // 创建 Refresh Token 管理器 + // 参数:authType, prefix, tokenKeyPrefix, tokenGen, accessTTL, storage, serializer + rtManager := security.NewRefreshTokenManager( + "login", // authType + "sa:", // prefix + "token:", // tokenKeyPrefix + nil, // tokenGen (nil 使用默认) + 2*time.Hour, // accessTTL + storage, // storage + nil, // serializer (nil 使用默认 JSON) + ) + + // 生成令牌对(Access Token + Refresh Token) + userID := "user1001" + device := "web" + + tokenPair, err := rtManager.GenerateTokenPair(ctx, userID, device) + if err != nil { + fmt.Printf(" [ERROR] 生成令牌对失败: %v\n", err) + return + } + + fmt.Printf(" [OK] 生成令牌对成功\n") + fmt.Printf(" Access Token: %s\n", tokenPair.AccessToken) + fmt.Printf(" Refresh Token: %s\n", tokenPair.RefreshToken) + fmt.Printf(" Login ID: %s\n", tokenPair.LoginID) + fmt.Printf(" Device: %s\n", tokenPair.Device) + fmt.Printf(" 创建时间: %s\n", time.Unix(tokenPair.CreateTime, 0).Format("2006-01-02 15:04:05")) + fmt.Printf(" 过期时间: %s\n", time.Unix(tokenPair.ExpireTime, 0).Format("2006-01-02 15:04:05")) + + // 验证 Access Token + fmt.Printf("\n [VERIFY] Access Token 是否有效: %v\n", rtManager.VerifyAccessToken(ctx, tokenPair.AccessToken)) + + // 获取 Access Token 信息 + accessInfo, valid := rtManager.VerifyAccessTokenAndGetInfo(ctx, tokenPair.AccessToken) + if valid { + fmt.Printf(" [INFO] Access Token 信息:\n") + fmt.Printf(" - LoginID: %s\n", accessInfo.LoginID) + fmt.Printf(" - Device: %s\n", accessInfo.Device) + } + + // 检查 Refresh Token 是否有效 + fmt.Printf("\n [VERIFY] Refresh Token 是否有效: %v\n", rtManager.IsValid(ctx, tokenPair.RefreshToken)) + + // 使用 Refresh Token 刷新 Access Token + fmt.Println("\n [REFRESH] 刷新 Access Token...") + newTokenPair, err := rtManager.RefreshAccessToken(ctx, tokenPair.RefreshToken) + if err != nil { + fmt.Printf(" [ERROR] 刷新失败: %v\n", err) + return + } + + fmt.Printf(" [OK] 刷新成功\n") + fmt.Printf(" 新 Access Token: %s\n", newTokenPair.AccessToken) + fmt.Printf(" Refresh Token: %s (保持不变)\n", newTokenPair.RefreshToken) + + // 验证旧 Access Token 已失效 + fmt.Printf("\n [VERIFY] 旧 Access Token 是否有效: %v (应该为 false)\n", rtManager.VerifyAccessToken(ctx, tokenPair.AccessToken)) + fmt.Printf(" [VERIFY] 新 Access Token 是否有效: %v (应该为 true)\n", rtManager.VerifyAccessToken(ctx, newTokenPair.AccessToken)) + + // 获取 Refresh Token 信息 + refreshInfo, err := rtManager.GetRefreshTokenInfo(ctx, tokenPair.RefreshToken) + if err == nil { + fmt.Printf("\n [INFO] Refresh Token 信息:\n") + fmt.Printf(" - LoginID: %s\n", refreshInfo.LoginID) + fmt.Printf(" - Device: %s\n", refreshInfo.Device) + fmt.Printf(" - AccessToken: %s\n", refreshInfo.AccessToken) + } + + // 撤销 Refresh Token + fmt.Println("\n [REVOKE] 撤销 Refresh Token...") + err = rtManager.RevokeRefreshToken(ctx, tokenPair.RefreshToken) + if err != nil { + fmt.Printf(" [ERROR] 撤销失败: %v\n", err) + } else { + fmt.Printf(" [OK] 撤销成功\n") + fmt.Printf(" [VERIFY] Refresh Token 是否有效: %v (应该为 false)\n", rtManager.IsValid(ctx, tokenPair.RefreshToken)) + } + + fmt.Println() +} diff --git a/examples/manager-example/session-demo/go.mod b/examples/manager-example/session-demo/go.mod new file mode 100644 index 0000000..9c785bb --- /dev/null +++ b/examples/manager-example/session-demo/go.mod @@ -0,0 +1,16 @@ +module github.com/click33/sa-token-go/examples/session-demo + +go 1.25.0 + +require ( + github.com/click33/sa-token-go/core v0.1.6 + github.com/click33/sa-token-go/storage/memory v0.1.6 + github.com/click33/sa-token-go/stputil v0.1.6 +) + +require ( + github.com/golang-jwt/jwt/v5 v5.3.0 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/panjf2000/ants/v2 v2.11.3 // indirect + golang.org/x/sync v0.19.0 // indirect +) diff --git a/examples/manager-example/session-demo/go.sum b/examples/manager-example/session-demo/go.sum new file mode 100644 index 0000000..16b1a51 --- /dev/null +++ b/examples/manager-example/session-demo/go.sum @@ -0,0 +1,11 @@ +github.com/click33/sa-token-go/core v0.1.6 h1:ELOe0qSH1b3LRsQD3DIBg0e1VgYANKFg5H7z57Lkt/8= +github.com/click33/sa-token-go/storage/memory v0.1.6 h1:iGFEy+HtTJLOpKnbIMbgpXyKotsKpPQu6wWTZVOXQis= +github.com/click33/sa-token-go/stputil v0.1.6 h1:S+V64jQzppE9c1wXcmHppCRlrSsU2iTfvdPGlMbs2WI= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/examples/session-demo/main.go b/examples/manager-example/session-demo/main.go similarity index 83% rename from examples/session-demo/main.go rename to examples/manager-example/session-demo/main.go index e03ea92..7ea3161 100644 --- a/examples/session-demo/main.go +++ b/examples/manager-example/session-demo/main.go @@ -1,10 +1,11 @@ package main import ( + "context" "fmt" "log" - "github.com/click33/sa-token-go/core" + "github.com/click33/sa-token-go/core/builder" "github.com/click33/sa-token-go/storage/memory" "github.com/click33/sa-token-go/stputil" ) @@ -24,18 +25,22 @@ type SysUser struct { func main() { // 初始化 sa-token stputil.SetManager( - core.NewBuilder(). - Storage(memory.NewStorage()). + builder.NewBuilder(). + SetStorage(memory.NewStorage()). KeyPrefix("satoken"). - IsPrintBanner(false). + Timeout(86400). + MaxRefresh(43200). + IsPrintBanner(true). Build(), ) + ctx := context.Background() + // 模拟用户登录 userID := "1000" // 1. 执行登录 - Token 键中只存 loginID - token, err := stputil.Login(userID) + token, err := stputil.Login(ctx, userID) if err != nil { log.Fatalf("Login failed: %v", err) } @@ -55,10 +60,10 @@ func main() { } // 3. 将完整的用户对象存入 Session(Account-Session) - sess, _ := stputil.GetSession(userID) - sess.Set("user", userFromDB) // ← 完整的 User 对象存在 Session 中 - sess.Set("lastLoginTime", "2025-10-25 10:00:00") - sess.Set("loginIP", "192.168.1.100") + sess, _ := stputil.GetSession(ctx, userID) + _ = sess.Set(ctx, "user", userFromDB) // ← 完整的 User 对象存在 Session 中 + _ = sess.Set(ctx, "lastLoginTime", "2025-10-25 10:00:00") + _ = sess.Set(ctx, "loginIP", "192.168.1.100") fmt.Printf("📦 Redis 存储结构:\n\n") fmt.Printf(" 1️⃣ Token 键(只存 loginID):\n") @@ -77,12 +82,12 @@ func main() { fmt.Printf("🔍 获取用户信息流程:\n\n") // 步骤1:从 Token 获取 loginID - loginID, _ := stputil.GetLoginID(token) + loginID, _ := stputil.GetLoginID(ctx, token) fmt.Printf(" 步骤1: Token → loginID\n") fmt.Printf(" %s → %s\n\n", token, loginID) // 步骤2:从 Session 获取完整用户对象 - sess2, _ := stputil.GetSession(loginID) + sess2, _ := stputil.GetSession(ctx, loginID) userObj, exists := sess2.Get("user") if exists { // Session 返回的是 map,需要转换 diff --git a/examples/manager-example/token-styles/go.mod b/examples/manager-example/token-styles/go.mod new file mode 100644 index 0000000..cc446a0 --- /dev/null +++ b/examples/manager-example/token-styles/go.mod @@ -0,0 +1,16 @@ +module github.com/click33/sa-token-go/examples/token-styles + +go 1.25.0 + +require ( + github.com/click33/sa-token-go/core v0.1.6 + github.com/click33/sa-token-go/storage/memory v0.1.6 + github.com/click33/sa-token-go/stputil v0.1.6 +) + +require ( + github.com/golang-jwt/jwt/v5 v5.3.0 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/panjf2000/ants/v2 v2.11.3 // indirect + golang.org/x/sync v0.19.0 // indirect +) diff --git a/examples/manager-example/token-styles/go.sum b/examples/manager-example/token-styles/go.sum new file mode 100644 index 0000000..16b1a51 --- /dev/null +++ b/examples/manager-example/token-styles/go.sum @@ -0,0 +1,11 @@ +github.com/click33/sa-token-go/core v0.1.6 h1:ELOe0qSH1b3LRsQD3DIBg0e1VgYANKFg5H7z57Lkt/8= +github.com/click33/sa-token-go/storage/memory v0.1.6 h1:iGFEy+HtTJLOpKnbIMbgpXyKotsKpPQu6wWTZVOXQis= +github.com/click33/sa-token-go/stputil v0.1.6 h1:S+V64jQzppE9c1wXcmHppCRlrSsU2iTfvdPGlMbs2WI= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/examples/token-styles/main.go b/examples/manager-example/token-styles/main.go similarity index 57% rename from examples/token-styles/main.go rename to examples/manager-example/token-styles/main.go index f24d426..85c06ba 100644 --- a/examples/token-styles/main.go +++ b/examples/manager-example/token-styles/main.go @@ -1,10 +1,12 @@ package main import ( + "context" "fmt" "time" - "github.com/click33/sa-token-go/core" + "github.com/click33/sa-token-go/core/adapter" + "github.com/click33/sa-token-go/core/builder" "github.com/click33/sa-token-go/storage/memory" "github.com/click33/sa-token-go/stputil" ) @@ -15,41 +17,44 @@ func main() { // Demo all token styles // 演示所有 Token 风格 - demoTokenStyle(core.TokenStyleUUID, "UUID Style") - demoTokenStyle(core.TokenStyleSimple, "Simple Style") - demoTokenStyle(core.TokenStyleRandom32, "Random32 Style") - demoTokenStyle(core.TokenStyleRandom64, "Random64 Style") - demoTokenStyle(core.TokenStyleRandom128, "Random128 Style") - demoTokenStyle(core.TokenStyleJWT, "JWT Style") - demoTokenStyle(core.TokenStyleHash, "Hash Style (SHA256)") - demoTokenStyle(core.TokenStyleTimestamp, "Timestamp Style") - demoTokenStyle(core.TokenStyleTik, "Tik Style (Short ID)") + demoTokenStyle(adapter.TokenStyleUUID, "UUID Style") + demoTokenStyle(adapter.TokenStyleSimple, "Simple Style") + demoTokenStyle(adapter.TokenStyleRandom32, "Random32 Style") + demoTokenStyle(adapter.TokenStyleRandom64, "Random64 Style") + demoTokenStyle(adapter.TokenStyleRandom128, "Random128 Style") + demoTokenStyle(adapter.TokenStyleJWT, "JWT Style") + demoTokenStyle(adapter.TokenStyleHash, "Hash Style (SHA256)") + demoTokenStyle(adapter.TokenStyleTimestamp, "Timestamp Style") + demoTokenStyle(adapter.TokenStyleTik, "Tik Style (Short ID)") fmt.Println("\n========================================") fmt.Println("✅ All token styles demonstrated!") } -func demoTokenStyle(style core.TokenStyle, name string) { +func demoTokenStyle(style adapter.TokenStyle, name string) { fmt.Printf("📌 %s (%s)\n", name, style) fmt.Println("----------------------------------------") // Initialize manager with specific token style // 使用特定 Token 风格初始化管理器 - manager := core.NewBuilder(). - Storage(memory.NewStorage()). + mgr := builder.NewBuilder(). + SetStorage(memory.NewStorage()). TokenStyle(style). Timeout(3600). + MaxRefresh(1800). JwtSecretKey("my-secret-key-123"). // For JWT style | 用于JWT风格 IsPrintBanner(false). Build() - stputil.SetManager(manager) + stputil.SetManager(mgr) + + ctx := context.Background() // Generate 3 tokens to show variety // 生成3个Token展示多样性 for i := 1; i <= 3; i++ { loginID := fmt.Sprintf("user%d", 1000+i) - token, err := stputil.Login(loginID) + token, err := stputil.Login(ctx, loginID) if err != nil { fmt.Printf(" ❌ Error generating token: %v\n", err) continue diff --git a/examples/oauth2-example/README.md b/examples/oauth2-example/README.md deleted file mode 100644 index c90e8e1..0000000 --- a/examples/oauth2-example/README.md +++ /dev/null @@ -1,232 +0,0 @@ -English | [中文文档](README_zh.md) - -# OAuth2 Authorization Code Flow Example - -Complete OAuth2 authorization code flow implementation example. - -## Features - -- **Authorization Code Grant** - Standard OAuth2 authorization code flow -- **Token Refresh** - Refresh access tokens using refresh tokens -- **Token Validation** - Validate access tokens -- **Token Revocation** - Revoke access tokens -- **Multiple Clients** - Support for multiple OAuth2 clients -- **Scope Management** - Fine-grained permission control - -## Quick Start - -### 1. Run the Server - -```bash -cd examples/oauth2-example -go run main.go -``` - -Server runs on `http://localhost:8080` - -### 2. OAuth2 Flow - -#### Step 1: Authorization Request - -```bash -curl "http://localhost:8080/oauth/authorize?client_id=webapp&redirect_uri=http://localhost:8080/callback&response_type=code&state=xyz123" -``` - -Response: -```json -{ - "message": "Authorization code generated", - "code": "a3f5d8b2c1e4f6a9...", - "redirect_url": "http://localhost:8080/callback?code=...&state=xyz123", - "user_id": "user123", - "scopes": ["read", "write"] -} -``` - -#### Step 2: Exchange Code for Token - -```bash -curl -X POST http://localhost:8080/oauth/token \ - -d "grant_type=authorization_code" \ - -d "code=a3f5d8b2c1e4f6a9..." \ - -d "client_id=webapp" \ - -d "client_secret=secret123" \ - -d "redirect_uri=http://localhost:8080/callback" -``` - -Response: -```json -{ - "access_token": "b4f6d9c3d2e5f7b0...", - "token_type": "Bearer", - "expires_in": 7200, - "refresh_token": "c5f7e0d4e3f6e8c1...", - "scope": ["read", "write"] -} -``` - -#### Step 3: Use Access Token - -```bash -curl http://localhost:8080/oauth/userinfo \ - -H "Authorization: Bearer b4f6d9c3d2e5f7b0..." -``` - -Response: -```json -{ - "user_id": "user123", - "client_id": "webapp", - "scopes": ["read", "write"], - "expires_in": 7200, - "issued_at": 1700000000 -} -``` - -#### Step 4: Refresh Access Token - -```bash -curl -X POST http://localhost:8080/oauth/token \ - -d "grant_type=refresh_token" \ - -d "refresh_token=c5f7e0d4e3f6e8c1..." \ - -d "client_id=webapp" \ - -d "client_secret=secret123" -``` - -#### Step 5: Revoke Token - -```bash -curl -X POST http://localhost:8080/oauth/revoke \ - -d "token=b4f6d9c3d2e5f7b0..." -``` - -## Registered Clients - -### Web Application - -``` -Client ID: webapp -Client Secret: secret123 -Redirect URIs: - - http://localhost:8080/callback - - http://localhost:3000/callback -Scopes: read, write, profile -``` - -### Mobile Application - -``` -Client ID: mobile-app -Client Secret: mobile-secret-456 -Redirect URIs: - - myapp://oauth/callback -Scopes: read, write -``` - -## API Endpoints - -| Endpoint | Method | Description | -|----------|--------|-------------| -| `/oauth/authorize` | GET | Authorization endpoint | -| `/oauth/token` | POST | Token endpoint | -| `/oauth/userinfo` | GET | User info endpoint | -| `/oauth/revoke` | POST | Token revocation endpoint | - -## Authorization Request Parameters - -| Parameter | Required | Description | -|-----------|----------|-------------| -| `client_id` | Yes | Client identifier | -| `redirect_uri` | Yes | Callback URI | -| `response_type` | Yes | Must be "code" | -| `state` | Recommended | CSRF protection | -| `scope` | Optional | Requested scopes | - -## Token Request Parameters - -### Authorization Code Grant - -| Parameter | Required | Description | -|-----------|----------|-------------| -| `grant_type` | Yes | "authorization_code" | -| `code` | Yes | Authorization code | -| `client_id` | Yes | Client identifier | -| `client_secret` | Yes | Client secret | -| `redirect_uri` | Yes | Must match authorization request | - -### Refresh Token Grant - -| Parameter | Required | Description | -|-----------|----------|-------------| -| `grant_type` | Yes | "refresh_token" | -| `refresh_token` | Yes | Refresh token | -| `client_id` | Yes | Client identifier | -| `client_secret` | Yes | Client secret | - -## Security Features - -1. **Client Authentication** - Client secret verification -2. **Redirect URI Validation** - Prevent open redirect attacks -3. **State Parameter** - CSRF protection -4. **Code Expiration** - Authorization codes expire in 10 minutes -5. **Token Expiration** - Access tokens expire in 2 hours -6. **One-time Use** - Authorization codes can only be used once -7. **Scope Validation** - Requested scopes must be allowed - -## Integration Example - -```go -package main - -import ( - "github.com/click33/sa-token-go/core" - "github.com/click33/sa-token-go/storage/memory" -) - -func main() { - storage := memory.NewStorage() - oauth2Server := core.NewOAuth2Server(storage) - - // Register client - oauth2Server.RegisterClient(&core.OAuth2Client{ - ClientID: "my-app", - ClientSecret: "my-secret", - RedirectURIs: []string{"http://localhost:3000/callback"}, - GrantTypes: []core.OAuth2GrantType{core.GrantTypeAuthorizationCode}, - Scopes: []string{"read", "write"}, - }) - - // Generate authorization code - authCode, _ := oauth2Server.GenerateAuthorizationCode( - "my-app", - "http://localhost:3000/callback", - "user123", - []string{"read"}, - ) - - // Exchange code for token - token, _ := oauth2Server.ExchangeCodeForToken( - authCode.Code, - "my-app", - "my-secret", - "http://localhost:3000/callback", - ) - - // Validate token - validated, _ := oauth2Server.ValidateAccessToken(token.Token) - - // Refresh token - newToken, _ := oauth2Server.RefreshAccessToken( - token.RefreshToken, - "my-app", - "my-secret", - ) -} -``` - -## Next Steps - -- [Security Features Example](../security-features/) -- [Refresh Token Guide](../../docs/guide/refresh-token.md) -- [OAuth2 Documentation](../../docs/guide/oauth2.md) - diff --git a/examples/oauth2-example/README_zh.md b/examples/oauth2-example/README_zh.md deleted file mode 100644 index db58bbc..0000000 --- a/examples/oauth2-example/README_zh.md +++ /dev/null @@ -1,232 +0,0 @@ -[English](README.md) | 中文文档 - -# OAuth2 授权码模式示例 - -完整的 OAuth2 授权码流程实现示例。 - -## 功能特性 - -- **授权码模式** - 标准的 OAuth2 授权码流程 -- **令牌刷新** - 使用刷新令牌刷新访问令牌 -- **令牌验证** - 验证访问令牌 -- **令牌撤销** - 撤销访问令牌 -- **多客户端** - 支持多个 OAuth2 客户端 -- **权限管理** - 细粒度权限控制 - -## 快速开始 - -### 1. 运行服务器 - -```bash -cd examples/oauth2-example -go run main.go -``` - -服务器运行在 `http://localhost:8080` - -### 2. OAuth2 流程 - -#### 步骤 1: 授权请求 - -```bash -curl "http://localhost:8080/oauth/authorize?client_id=webapp&redirect_uri=http://localhost:8080/callback&response_type=code&state=xyz123" -``` - -响应: -```json -{ - "message": "Authorization code generated", - "code": "a3f5d8b2c1e4f6a9...", - "redirect_url": "http://localhost:8080/callback?code=...&state=xyz123", - "user_id": "user123", - "scopes": ["read", "write"] -} -``` - -#### 步骤 2: 用授权码换取令牌 - -```bash -curl -X POST http://localhost:8080/oauth/token \ - -d "grant_type=authorization_code" \ - -d "code=a3f5d8b2c1e4f6a9..." \ - -d "client_id=webapp" \ - -d "client_secret=secret123" \ - -d "redirect_uri=http://localhost:8080/callback" -``` - -响应: -```json -{ - "access_token": "b4f6d9c3d2e5f7b0...", - "token_type": "Bearer", - "expires_in": 7200, - "refresh_token": "c5f7e0d4e3f6e8c1...", - "scope": ["read", "write"] -} -``` - -#### 步骤 3: 使用访问令牌 - -```bash -curl http://localhost:8080/oauth/userinfo \ - -H "Authorization: Bearer b4f6d9c3d2e5f7b0..." -``` - -响应: -```json -{ - "user_id": "user123", - "client_id": "webapp", - "scopes": ["read", "write"], - "expires_in": 7200, - "issued_at": 1700000000 -} -``` - -#### 步骤 4: 刷新访问令牌 - -```bash -curl -X POST http://localhost:8080/oauth/token \ - -d "grant_type=refresh_token" \ - -d "refresh_token=c5f7e0d4e3f6e8c1..." \ - -d "client_id=webapp" \ - -d "client_secret=secret123" -``` - -#### 步骤 5: 撤销令牌 - -```bash -curl -X POST http://localhost:8080/oauth/revoke \ - -d "token=b4f6d9c3d2e5f7b0..." -``` - -## 已注册的客户端 - -### Web 应用 - -``` -Client ID: webapp -Client Secret: secret123 -回调 URI: - - http://localhost:8080/callback - - http://localhost:3000/callback -权限范围: read, write, profile -``` - -### 移动应用 - -``` -Client ID: mobile-app -Client Secret: mobile-secret-456 -回调 URI: - - myapp://oauth/callback -权限范围: read, write -``` - -## API 端点 - -| 端点 | 方法 | 说明 | -|------|------|------| -| `/oauth/authorize` | GET | 授权端点 | -| `/oauth/token` | POST | 令牌端点 | -| `/oauth/userinfo` | GET | 用户信息端点 | -| `/oauth/revoke` | POST | 令牌撤销端点 | - -## 授权请求参数 - -| 参数 | 必需 | 说明 | -|------|------|------| -| `client_id` | 是 | 客户端标识符 | -| `redirect_uri` | 是 | 回调 URI | -| `response_type` | 是 | 必须是 "code" | -| `state` | 推荐 | CSRF 保护 | -| `scope` | 可选 | 请求的权限范围 | - -## 令牌请求参数 - -### 授权码模式 - -| 参数 | 必需 | 说明 | -|------|------|------| -| `grant_type` | 是 | "authorization_code" | -| `code` | 是 | 授权码 | -| `client_id` | 是 | 客户端标识符 | -| `client_secret` | 是 | 客户端密钥 | -| `redirect_uri` | 是 | 必须与授权请求匹配 | - -### 刷新令牌模式 - -| 参数 | 必需 | 说明 | -|------|------|------| -| `grant_type` | 是 | "refresh_token" | -| `refresh_token` | 是 | 刷新令牌 | -| `client_id` | 是 | 客户端标识符 | -| `client_secret` | 是 | 客户端密钥 | - -## 安全特性 - -1. **客户端认证** - 客户端密钥验证 -2. **回调 URI 验证** - 防止开放重定向攻击 -3. **State 参数** - CSRF 保护 -4. **授权码过期** - 授权码 10 分钟后过期 -5. **令牌过期** - 访问令牌 2 小时后过期 -6. **一次性使用** - 授权码只能使用一次 -7. **权限验证** - 请求的权限必须被允许 - -## 集成示例 - -```go -package main - -import ( - "github.com/click33/sa-token-go/core" - "github.com/click33/sa-token-go/storage/memory" -) - -func main() { - storage := memory.NewStorage() - oauth2Server := core.NewOAuth2Server(storage) - - // 注册客户端 - oauth2Server.RegisterClient(&core.OAuth2Client{ - ClientID: "my-app", - ClientSecret: "my-secret", - RedirectURIs: []string{"http://localhost:3000/callback"}, - GrantTypes: []core.OAuth2GrantType{core.GrantTypeAuthorizationCode}, - Scopes: []string{"read", "write"}, - }) - - // 生成授权码 - authCode, _ := oauth2Server.GenerateAuthorizationCode( - "my-app", - "http://localhost:3000/callback", - "user123", - []string{"read"}, - ) - - // 用授权码换取令牌 - token, _ := oauth2Server.ExchangeCodeForToken( - authCode.Code, - "my-app", - "my-secret", - "http://localhost:3000/callback", - ) - - // 验证令牌 - validated, _ := oauth2Server.ValidateAccessToken(token.Token) - - // 刷新令牌 - newToken, _ := oauth2Server.RefreshAccessToken( - token.RefreshToken, - "my-app", - "my-secret", - ) -} -``` - -## 下一步 - -- [安全特性示例](../security-features/) -- [刷新令牌指南](../../docs/guide/refresh-token_zh.md) -- [OAuth2 文档](../../docs/guide/oauth2_zh.md) - diff --git a/examples/quick-start/simple-example/README.md b/examples/quick-start/simple-example/README.md index 5f1e664..a33db99 100644 --- a/examples/quick-start/simple-example/README.md +++ b/examples/quick-start/simple-example/README.md @@ -1,6 +1,6 @@ # 快速开始示例 -这是一个最简单的 Sa-Token-Go 使用示例,展示了如何使用 `StpUtil` 全局工具类快速实现认证和授权功能。 +这是一个最简单的 Sa-Token-Go 使用示例,展示了如何使用 `stputil` 全局工具类快速实现认证和授权功能。 ## 运行示例 @@ -13,59 +13,131 @@ go run main.go 本示例展示了以下功能: 1. **一行初始化** - 使用 Builder 模式快速配置 -2. **登录认证** - 支持多种类型的用户 ID +2. **登录认证** - 支持多种类型的用户 ID(int、string 等) 3. **检查登录** - 验证用户登录状态 -4. **权限管理** - 设置和检查用户权限 +4. **权限管理** - 设置和检查用户权限(支持通配符) 5. **角色管理** - 设置和检查用户角色 6. **Session 管理** - 存储和读取会话数据 -7. **账号封禁** - 临时封禁用户 +7. **账号封禁** - 临时封禁和解封用户 8. **Token 信息** - 查看 Token 详细信息 9. **登出** - 清除用户登录状态 ## 核心代码 ```go +package main + import ( - "github.com/click33/sa-token-go/core" - "github.com/click33/sa-token-go/stputil" + "context" + "fmt" + "time" + + "github.com/click33/sa-token-go/core/adapter" + "github.com/click33/sa-token-go/core/builder" "github.com/click33/sa-token-go/storage/memory" + "github.com/click33/sa-token-go/stputil" ) func init() { - // 🎯 一行初始化! + // 一行初始化 stputil.SetManager( - core.NewBuilder(). - Storage(memory.NewStorage()). + builder.NewBuilder(). + SetStorage(memory.NewStorage()). TokenName("Authorization"). - Timeout(86400). // 24小时 - TokenStyle(core.TokenStyleRandom64). + Timeout(86400). // 24小时 + MaxRefresh(43200). // 12小时 + TokenStyle(adapter.TokenStyleUUID). Build(), ) } func main() { + ctx := context.Background() + // 登录 - token, _ := stputil.Login(1000) - + token, _ := stputil.Login(ctx, 1000) + fmt.Println("Token:", token) + + // 检查登录 + isLogin := stputil.IsLogin(ctx, token) + fmt.Println("是否登录:", isLogin) + + // 获取登录ID + loginID, _ := stputil.GetLoginID(ctx, token) + fmt.Println("登录ID:", loginID) + // 设置权限 - stputil.SetPermissions(1000, []string{"user:read", "user:write"}) - - // 检查权限 - hasPermission := stputil.HasPermission(1000, "user:read") - + _ = stputil.SetPermissions(ctx, 1000, []string{"user:read", "user:write", "admin:*"}) + + // 检查权限(支持通配符匹配) + hasPermission := stputil.HasPermission(ctx, 1000, "user:read") + hasAdminPerm := stputil.HasPermission(ctx, 1000, "admin:delete") // admin:* 匹配 + fmt.Println("有 user:read 权限:", hasPermission) + fmt.Println("有 admin:delete 权限:", hasAdminPerm) + + // 设置角色 + _ = stputil.SetRoles(ctx, 1000, []string{"admin", "manager"}) + + // 检查角色 + hasRole := stputil.HasRole(ctx, 1000, "admin") + fmt.Println("有 admin 角色:", hasRole) + + // Session 管理 + sess, _ := stputil.GetSession(ctx, 1000) + _ = sess.Set(ctx, "nickname", "张三") + fmt.Println("昵称:", sess.GetString("nickname")) + + // 账号封禁 + _ = stputil.Disable(ctx, 1000, 1*time.Hour) + fmt.Println("是否被封禁:", stputil.IsDisable(ctx, 1000)) + + // 解封 + _ = stputil.Untie(ctx, 1000) + // 登出 - stputil.Logout(1000) + _ = stputil.Logout(ctx, 1000) + fmt.Println("登出后是否登录:", stputil.IsLogin(ctx, token)) } ``` +## 重要说明 + +### Context 参数 + +所有 `stputil` 函数都需要 `context.Context` 作为第一个参数: + +```go +ctx := context.Background() + +// 正确用法 +token, _ := stputil.Login(ctx, userID) +isLogin := stputil.IsLogin(ctx, token) +_ = stputil.Logout(ctx, userID) +``` + +### 权限通配符 + +支持使用 `*` 作为通配符匹配权限: + +```go +// 设置权限 +_ = stputil.SetPermissions(ctx, userID, []string{"admin:*"}) + +// admin:* 可以匹配所有 admin: 开头的权限 +stputil.HasPermission(ctx, userID, "admin:read") // true +stputil.HasPermission(ctx, userID, "admin:write") // true +stputil.HasPermission(ctx, userID, "admin:delete") // true +stputil.HasPermission(ctx, userID, "user:read") // false +``` + ## 输出示例 ``` === Sa-Token-Go 简洁使用示例 === 1. 登录测试 - 用户1000登录成功,Token: xxx - 用户user123登录成功,Token: yyy + 用户1000登录成功,Token: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + 用户user123登录成功,Token: b2c3d4e5-f6a7-8901-bcde-f12345678901 2. 检查登录 Token1是否登录: true @@ -81,12 +153,52 @@ func main() { 是否有user:delete权限: false 是否有admin:delete权限(通配符): true -... +5. 角色管理 + 已设置角色: admin, manager + 是否有admin角色: true + 是否有user角色: false + +6. Session管理 + Session已设置: nickname=张三, age=25 + +7. 账号封禁 + 用户user123已被封禁1小时 + 是否被封禁: true + 剩余封禁时间: 3600秒 + 已解封,是否被封禁: false + +8. Token信息 + 登录ID: 1000 + 设备: default + 创建时间: 1703750400 + 活跃时间: 1703750400 + +9. 登出 + 用户1000已登出 + Token1是否还有效: false + +=== 示例完成! === ``` +## 常用函数速查 + +| 函数 | 说明 | +|------|------| +| `stputil.Login(ctx, loginID)` | 用户登录,返回 Token | +| `stputil.Logout(ctx, loginID)` | 用户登出 | +| `stputil.IsLogin(ctx, token)` | 检查是否已登录 | +| `stputil.GetLoginID(ctx, token)` | 获取登录ID | +| `stputil.SetPermissions(ctx, loginID, perms)` | 设置权限 | +| `stputil.HasPermission(ctx, loginID, perm)` | 检查权限 | +| `stputil.SetRoles(ctx, loginID, roles)` | 设置角色 | +| `stputil.HasRole(ctx, loginID, role)` | 检查角色 | +| `stputil.GetSession(ctx, loginID)` | 获取 Session | +| `stputil.Disable(ctx, loginID, duration)` | 封禁账号 | +| `stputil.Untie(ctx, loginID)` | 解封账号 | +| `stputil.Kickout(ctx, loginID)` | 踢人下线 | + ## 扩展学习 - [Gin 集成示例](../../gin/gin-example) - 学习如何在 Gin 框架中使用 -- [注解装饰器示例](../../annotation/annotation-example) - 学习注解式编程 -- [完整文档](../../../docs) - 查看详细的 API 文档 - +- [注解装饰器示例](../../annotation/annotation-example) - 学习中间件装饰器 +- [事件监听示例](../../manager/listener-example) - 学习事件监听机制 diff --git a/examples/quick-start/simple-example/go.mod b/examples/quick-start/simple-example/go.mod index e7532cb..a3f2426 100644 --- a/examples/quick-start/simple-example/go.mod +++ b/examples/quick-start/simple-example/go.mod @@ -1,20 +1,16 @@ module github.com/click33/sa-token-go/examples/simple-example -go 1.21 +go 1.25.0 require ( - github.com/click33/sa-token-go/core v0.1.3 - github.com/click33/sa-token-go/storage/memory v0.1.3 - github.com/click33/sa-token-go/stputil v0.1.3 + github.com/click33/sa-token-go/core v0.1.6 + github.com/click33/sa-token-go/storage/memory v0.1.6 + github.com/click33/sa-token-go/stputil v0.1.5 ) require ( - github.com/golang-jwt/jwt/v5 v5.2.1 // indirect + github.com/golang-jwt/jwt/v5 v5.3.0 // indirect github.com/google/uuid v1.6.0 // indirect -) - -replace ( - github.com/click33/sa-token-go/core => ../../../core - github.com/click33/sa-token-go/storage/memory => ../../../storage/memory - github.com/click33/sa-token-go/stputil => ../../../stputil + github.com/panjf2000/ants/v2 v2.11.3 // indirect + golang.org/x/sync v0.19.0 // indirect ) diff --git a/examples/quick-start/simple-example/go.sum b/examples/quick-start/simple-example/go.sum new file mode 100644 index 0000000..e029147 --- /dev/null +++ b/examples/quick-start/simple-example/go.sum @@ -0,0 +1,20 @@ +github.com/click33/sa-token-go/core v0.1.6 h1:ELOe0qSH1b3LRsQD3DIBg0e1VgYANKFg5H7z57Lkt/8= +github.com/click33/sa-token-go/core v0.1.6/go.mod h1:mb3AQAJIXqx9WdULyn5qjufK1j/u+kgB0q+tafHVhgk= +github.com/click33/sa-token-go/storage/memory v0.1.6 h1:iGFEy+HtTJLOpKnbIMbgpXyKotsKpPQu6wWTZVOXQis= +github.com/click33/sa-token-go/storage/memory v0.1.6/go.mod h1:YNojcgyLC/uFrmReZLePCDQ5WK2fo2WWGRjRMvXVH74= +github.com/click33/sa-token-go/stputil v0.1.5 h1:603tbI4JkBTg3MnfTj+lCMDxJOKSCOqsMyC2zyuvEco= +github.com/click33/sa-token-go/stputil v0.1.5/go.mod h1:YH+3NLXgGJfrS2wkGubMWFnr/Nk0GgejOtRxcE+9x0c= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg= +github.com/panjf2000/ants/v2 v2.11.3/go.mod h1:8u92CYMUc6gyvTIw8Ru7Mt7+/ESnJahz5EVtqfrilek= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/examples/quick-start/simple-example/main.go b/examples/quick-start/simple-example/main.go index efb9fc7..7294fb2 100644 --- a/examples/quick-start/simple-example/main.go +++ b/examples/quick-start/simple-example/main.go @@ -1,22 +1,24 @@ package main import ( + "context" "fmt" "time" - "github.com/click33/sa-token-go/core" + "github.com/click33/sa-token-go/core/adapter" + "github.com/click33/sa-token-go/core/builder" "github.com/click33/sa-token-go/storage/memory" "github.com/click33/sa-token-go/stputil" ) func init() { - // 超简洁初始化(一行搞定!) stputil.SetManager( - core.NewBuilder(). - Storage(memory.NewStorage()). + builder.NewBuilder(). + SetStorage(memory.NewStorage()). TokenName("Authorization"). - Timeout(86400). // 24小时 - TokenStyle(core.TokenStyleRandom64). + Timeout(86400). // 24小时 + MaxRefresh(43200). // 12小时 + TokenStyle(adapter.TokenStyleUUID). Build(), ) } @@ -24,66 +26,68 @@ func init() { func main() { fmt.Println("=== Sa-Token-Go 简洁使用示例 ===\n") + ctx := context.Background() + // 1. 登录(支持多种类型) fmt.Println("1. 登录测试") - token1, _ := stputil.Login(1000) + token1, _ := stputil.Login(ctx, 1000) fmt.Printf(" 用户1000登录成功,Token: %s\n", token1) - token2, _ := stputil.Login("user123") + token2, _ := stputil.Login(ctx, "user123") fmt.Printf(" 用户user123登录成功,Token: %s\n\n", token2) // 2. 检查登录 fmt.Println("2. 检查登录") - fmt.Printf(" Token1是否登录: %v\n", stputil.IsLogin(token1)) - fmt.Printf(" Token2是否登录: %v\n\n", stputil.IsLogin(token2)) + fmt.Printf(" Token1是否登录: %v\n", stputil.IsLogin(ctx, token1)) + fmt.Printf(" Token2是否登录: %v\n\n", stputil.IsLogin(ctx, token2)) // 3. 获取登录ID fmt.Println("3. 获取登录ID") - loginID1, _ := stputil.GetLoginID(token1) - loginID2, _ := stputil.GetLoginID(token2) + loginID1, _ := stputil.GetLoginID(ctx, token1) + loginID2, _ := stputil.GetLoginID(ctx, token2) fmt.Printf(" Token1的登录ID: %s\n", loginID1) fmt.Printf(" Token2的登录ID: %s\n\n", loginID2) // 4. 权限管理 fmt.Println("4. 权限管理") - stputil.SetPermissions(1000, []string{"user:read", "user:write", "admin:*"}) + _ = stputil.SetPermissions(ctx, 1000, []string{"user:read", "user:write", "admin:*"}) fmt.Println(" 已设置权限: user:read, user:write, admin:*") - fmt.Printf(" 是否有user:read权限: %v\n", stputil.HasPermission(1000, "user:read")) - fmt.Printf(" 是否有user:delete权限: %v\n", stputil.HasPermission(1000, "user:delete")) - fmt.Printf(" 是否有admin:delete权限(通配符): %v\n\n", stputil.HasPermission(1000, "admin:delete")) + fmt.Printf(" 是否有user:read权限: %v\n", stputil.HasPermission(ctx, 1000, "user:read")) + fmt.Printf(" 是否有user:delete权限: %v\n", stputil.HasPermission(ctx, 1000, "user:delete")) + fmt.Printf(" 是否有admin:delete权限(通配符): %v\n\n", stputil.HasPermission(ctx, 1000, "admin:delete")) // 5. 角色管理 fmt.Println("5. 角色管理") - stputil.SetRoles(1000, []string{"admin", "manager"}) - fmt.Println(" 已设置角色: admin, manager") + _ = stputil.SetRoles(ctx, 1000, []string{"admin", "manager-example"}) + fmt.Println(" 已设置角色: admin, manager-example") - fmt.Printf(" 是否有admin角色: %v\n", stputil.HasRole(1000, "admin")) - fmt.Printf(" 是否有user角色: %v\n\n", stputil.HasRole(1000, "user")) + fmt.Printf(" 是否有admin角色: %v\n", stputil.HasRole(ctx, 1000, "admin")) + fmt.Printf(" 是否有user角色: %v\n\n", stputil.HasRole(ctx, 1000, "user")) // 6. Session管理 fmt.Println("6. Session管理") - sess, _ := stputil.GetSession(1000) - sess.Set("nickname", "张三") - sess.Set("age", 25) + sess, _ := stputil.GetSession(ctx, 1000) + _ = sess.Set(ctx, "nickname", "张三") + _ = sess.Set(ctx, "age", 25) fmt.Printf(" Session已设置: nickname=%s, age=%d\n", sess.GetString("nickname"), sess.GetInt("age")) // 7. 账号封禁 fmt.Println("\n7. 账号封禁") - stputil.Disable("user123", 1*time.Hour) + _ = stputil.Disable(ctx, "user123", 1*time.Hour) fmt.Printf(" 用户user123已被封禁1小时\n") - fmt.Printf(" 是否被封禁: %v\n", stputil.IsDisable("user123")) + fmt.Printf(" 是否被封禁: %v\n", stputil.IsDisable(ctx, "user123")) - remainingTime, _ := stputil.GetDisableTime("user123") + remainingTime, _ := stputil.GetDisableTime(ctx, "user123") fmt.Printf(" 剩余封禁时间: %d秒\n", remainingTime) // 8. 解封 - stputil.Untie("user123") - fmt.Printf(" 已解封,是否被封禁: %v\n\n", stputil.IsDisable("user123")) + _ = stputil.Untie(ctx, "user123") + fmt.Printf(" 已解封,是否被封禁: %v\n\n", stputil.IsDisable(ctx, "user123")) // 9. Token信息 fmt.Println("9. Token信息") - info, _ := stputil.GetTokenInfo(token1) + info, _ := stputil.GetTokenInfo(ctx, token1) fmt.Printf(" 登录ID: %s\n", info.LoginID) fmt.Printf(" 设备: %s\n", info.Device) fmt.Printf(" 创建时间: %d\n", info.CreateTime) @@ -91,9 +95,9 @@ func main() { // 10. 登出 fmt.Println("10. 登出") - stputil.Logout(1000) + _ = stputil.Logout(ctx, 1000) fmt.Printf(" 用户1000已登出\n") - fmt.Printf(" Token1是否还有效: %v\n", stputil.IsLogin(token1)) + fmt.Printf(" Token1是否还有效: %v\n", stputil.IsLogin(ctx, token1)) fmt.Println("\n=== 示例完成! ===") } diff --git a/examples/redis-example/README.md b/examples/redis-example/README.md deleted file mode 100644 index 71f191b..0000000 --- a/examples/redis-example/README.md +++ /dev/null @@ -1,97 +0,0 @@ -# Redis Storage Example - -[中文说明](README_zh.md) | English - -This example demonstrates how to use Redis as the storage backend for Sa-Token-Go. - -## Prerequisites - -- Redis server running on `localhost:6379` (or set `REDIS_ADDR` environment variable) -- Go 1.21 or higher - -## Install Redis - -### macOS -```bash -brew install redis -brew services start redis -``` - -### Linux (Ubuntu/Debian) -```bash -sudo apt-get install redis-server -sudo systemctl start redis -``` - -### Docker -```bash -docker run -d -p 6379:6379 redis:7-alpine -``` - -## Run Example - -```bash -# Without password -go run main.go - -# With password -REDIS_PASSWORD=your-password go run main.go - -# Custom Redis address -REDIS_ADDR=redis.example.com:6379 go run main.go -``` - -## Key Features Demonstrated - -1. ✅ **Redis Connection** - Connect to Redis with go-redis -2. ✅ **Authentication** - Login/Logout with Redis storage -3. ✅ **Permission Management** - Store permissions in Redis -4. ✅ **Role Management** - Store roles in Redis -5. ✅ **Session Management** - Persistent session data -6. ✅ **Data Persistence** - Data survives application restarts - -## Environment Variables - -| Variable | Description | Default | -|----------|-------------|---------| -| `REDIS_ADDR` | Redis server address | `localhost:6379` | -| `REDIS_PASSWORD` | Redis password | (empty) | -| `REDIS_DB` | Redis database number | `0` | - -## View Data in Redis - -```bash -# Connect to Redis CLI -redis-cli - -# List all Sa-Token keys -KEYS satoken:* - -# View token info -GET satoken:login:token:{your-token} - -# View session data -GET satoken:session:1000 - -# View permissions -SMEMBERS satoken:permission:1000 - -# View roles -SMEMBERS satoken:role:1000 -``` - -## Production Deployment - -See [Redis Storage Guide](../../docs/guide/redis-storage.md) for: -- Connection pool configuration -- High availability (Sentinel) -- Cluster mode -- TLS/SSL support -- Docker/Kubernetes deployment - -## Related Documentation - -- [Redis Storage Guide](../../docs/guide/redis-storage.md) -- [Quick Start](../../docs/tutorial/quick-start.md) -- [Authentication Guide](../../docs/guide/authentication.md) - diff --git a/examples/redis-example/README_zh.md b/examples/redis-example/README_zh.md deleted file mode 100644 index 7f28d5c..0000000 --- a/examples/redis-example/README_zh.md +++ /dev/null @@ -1,100 +0,0 @@ -# Redis 存储示例 - -[English](README.md) | 中文说明 - -本示例演示如何使用 Redis 作为 Sa-Token-Go 的存储后端。 - -## 前置要求 - -- Redis 服务器运行在 `localhost:6379`(或设置 `REDIS_ADDR` 环境变量) -- Go 1.21 或更高版本 - -## 安装 Redis - -### macOS - -```bash -brew install redis -brew services start redis -``` - -### Linux (Ubuntu/Debian) - -```bash -sudo apt-get install redis-server -sudo systemctl start redis -``` - -### Docker - -```bash -docker run -d -p 6379:6379 redis:7-alpine -``` - -## 运行示例 - -```bash -# 无密码 -go run main.go - -# 带密码 -REDIS_PASSWORD=your-password go run main.go - -# 自定义 Redis 地址 -REDIS_ADDR=redis.example.com:6379 go run main.go -``` - -## 演示的核心功能 - -1. ✅ **Redis 连接** - 使用 go-redis 连接 Redis -2. ✅ **认证功能** - 使用 Redis 存储进行登录/登出 -3. ✅ **权限管理** - 在 Redis 中存储权限 -4. ✅ **角色管理** - 在 Redis 中存储角色 -5. ✅ **Session 管理** - 持久化的 Session 数据 -6. ✅ **数据持久化** - 数据在应用重启后仍然存在 - -## 环境变量 - -| 变量 | 说明 | 默认值 | -|------|------|--------| -| `REDIS_ADDR` | Redis 服务器地址 | `localhost:6379` | -| `REDIS_PASSWORD` | Redis 密码 | (空) | -| `REDIS_DB` | Redis 数据库编号 | `0` | - -## 在 Redis 中查看数据 - -```bash -# 连接到 Redis CLI -redis-cli - -# 列出所有 Sa-Token 键 -KEYS satoken:* - -# 查看 Token 信息 -GET satoken:login:token:{your-token} - -# 查看 Session 数据 -GET satoken:session:1000 - -# 查看权限 -SMEMBERS satoken:permission:1000 - -# 查看角色 -SMEMBERS satoken:role:1000 -``` - -## 生产环境部署 - -查看 [Redis 存储指南](../../docs/guide/redis-storage_zh.md) 了解: - -- 连接池配置 -- 高可用(哨兵模式) -- 集群模式 -- TLS/SSL 支持 -- Docker/Kubernetes 部署 - -## 相关文档 - -- [Redis 存储指南](../../docs/guide/redis-storage_zh.md) -- [快速开始](../../docs/tutorial/quick-start.md) -- [认证指南](../../docs/guide/authentication.md) diff --git a/examples/redis-example/go.mod b/examples/redis-example/go.mod deleted file mode 100644 index 4020f16..0000000 --- a/examples/redis-example/go.mod +++ /dev/null @@ -1,23 +0,0 @@ -module github.com/click33/sa-token-go/examples/redis-example - -go 1.21 - -require ( - github.com/click33/sa-token-go/core v0.1.3 - github.com/click33/sa-token-go/storage/redis v0.1.3 - github.com/click33/sa-token-go/stputil v0.1.3 - github.com/redis/go-redis/v9 v9.5.1 -) - -require ( - github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect - github.com/golang-jwt/jwt/v5 v5.2.1 // indirect - github.com/google/uuid v1.6.0 // indirect -) - -replace ( - github.com/click33/sa-token-go/core => ../../core - github.com/click33/sa-token-go/storage/redis => ../../storage/redis - github.com/click33/sa-token-go/stputil => ../../stputil -) diff --git a/examples/redis-example/main.go b/examples/redis-example/main.go deleted file mode 100644 index eecc30e..0000000 --- a/examples/redis-example/main.go +++ /dev/null @@ -1,135 +0,0 @@ -package main - -import ( - "context" - "fmt" - "log" - "os" - - "github.com/click33/sa-token-go/core" - "github.com/click33/sa-token-go/storage/redis" - "github.com/click33/sa-token-go/stputil" - goredis "github.com/redis/go-redis/v9" -) - -func main() { - fmt.Println("=== Sa-Token-Go Redis Storage Example ===") - - // Get Redis configuration from environment variables | 从环境变量获取 Redis 配置 - redisAddr := os.Getenv("REDIS_ADDR") - if redisAddr == "" { - redisAddr = "localhost:6379" - } - redisPassword := os.Getenv("REDIS_PASSWORD") - - // Create Redis client | 创建 Redis 客户端 - rdb := goredis.NewClient(&goredis.Options{ - Addr: redisAddr, - Password: redisPassword, - DB: 0, - PoolSize: 10, - }) - - // Test Redis connection | 测试 Redis 连接 - ctx := context.Background() - if err := rdb.Ping(ctx).Err(); err != nil { - log.Fatalf("❌ Failed to connect to Redis: %v\n", err) - } - fmt.Printf("✅ Connected to Redis: %s\n\n", redisAddr) - - // Initialize Sa-Token with Redis storage | 使用 Redis 存储初始化 Sa-Token - redisURL := fmt.Sprintf("redis://:%s@%s/0", redisPassword, redisAddr) - redisStorage, err := redis.NewStorage(redisURL) // Storage 层不处理前缀,符合 Java sa-token 设计 - if err != nil { - log.Fatalf("❌ Failed to create Redis storage: %v\n", err) - } - - // 创建 Manager(符合 Java sa-token 标准设计) - stputil.SetManager( - core.NewBuilder(). - Storage(redisStorage). - TokenName("Authorization"). - TokenStyle(core.TokenStyleRandom64). - Timeout(3600). // 1 hour | 1小时 - KeyPrefix("satoken"). // 设计开头标识 - IsPrintBanner(true). - Build(), - ) - - fmt.Println("📌 当前配置(符合 Java sa-token 标准):") - fmt.Println(" - Storage 层前缀: \"\" (空)") - fmt.Println(" - Manager 层前缀: \"satoken\" → 自动变为 \"satoken:\"") - fmt.Println(" - Redis Key 示例: satoken:login:token:xxx") - fmt.Println(" - ✅ 完全兼容 Java sa-token") - fmt.Println() - - // Test authentication | 测试认证功能 - fmt.Println("1. Login user | 登录用户") - token, err := stputil.Login(1000) - if err != nil { - log.Fatalf("Login failed: %v\n", err) - } - fmt.Printf("✅ Login successful! Token: %s\n\n", token) - - // Check login status | 检查登录状态 - fmt.Println("2. Check login status | 检查登录状态") - if stputil.IsLogin(token) { - fmt.Println("✅ User is logged in") - } - - // Set permissions and roles | 设置权限和角色 - fmt.Println("3. Set permissions and roles | 设置权限和角色") - stputil.SetPermissions(1000, []string{"user:read", "user:write", "admin:*"}) - stputil.SetRoles(1000, []string{"admin", "user"}) - fmt.Println("✅ Permissions and roles set") - - // Check permission | 检查权限 - fmt.Println("4. Check permissions | 检查权限") - if stputil.HasPermission(1000, "user:read") { - fmt.Println("✅ Has permission: user:read") - } - if stputil.HasPermission(1000, "admin:delete") { - fmt.Println("✅ Has permission: admin:delete (wildcard match)") - } - fmt.Println() - - // Check role | 检查角色 - fmt.Println("5. Check roles | 检查角色") - if stputil.HasRole(1000, "admin") { - fmt.Println("✅ Has role: admin") - } - fmt.Println() - - // Get session | 获取 Session - fmt.Println("6. Session management | Session 管理") - sess, _ := stputil.GetSession(1000) - sess.Set("username", "admin") - sess.Set("email", "admin@example.com") - fmt.Println("✅ Session data saved") - - username := sess.GetString("username") - fmt.Printf(" Username: %s\n\n", username) - - // Logout | 登出 - fmt.Println("7. Logout | 登出") - // stputil.Logout(1000) - fmt.Println("✅ User logged out") - - if !stputil.IsLogin(token) { - fmt.Println("✅ Token is now invalid") - } - - // Close Redis connection | 关闭 Redis 连接 - defer func() { - if err := rdb.Close(); err != nil { - log.Printf("Error closing Redis: %v\n", err) - } - }() - - fmt.Println("=== Redis Example Completed ===") - fmt.Println("\n💡 Tips:") - fmt.Println(" • Data is persisted in Redis") - fmt.Println(" • Survives application restarts") - fmt.Println(" • Suitable for production environments") - fmt.Println(" • Supports distributed deployments") -} diff --git a/examples/security-features/go.mod b/examples/security-features/go.mod deleted file mode 100644 index 387f4e0..0000000 --- a/examples/security-features/go.mod +++ /dev/null @@ -1,20 +0,0 @@ -module github.com/click33/sa-token-go/examples/security-features - -go 1.21 - -require ( - github.com/click33/sa-token-go/core v0.1.3 - github.com/click33/sa-token-go/storage/memory v0.1.3 - github.com/click33/sa-token-go/stputil v0.1.3 -) - -require ( - github.com/golang-jwt/jwt/v5 v5.2.1 // indirect - github.com/google/uuid v1.6.0 // indirect -) - -replace ( - github.com/click33/sa-token-go/core => ../../core - github.com/click33/sa-token-go/storage/memory => ../../storage/memory - github.com/click33/sa-token-go/stputil => ../../stputil -) diff --git a/examples/security-features/main.go b/examples/security-features/main.go deleted file mode 100644 index f26469e..0000000 --- a/examples/security-features/main.go +++ /dev/null @@ -1,128 +0,0 @@ -package main - -import ( - "fmt" - "time" - - "github.com/click33/sa-token-go/core" - "github.com/click33/sa-token-go/storage/memory" - "github.com/click33/sa-token-go/stputil" -) - -func main() { - storage := memory.NewStorage() - manager := core.NewBuilder(). - Storage(storage). - Timeout(3600). - IsPrintBanner(false). - Build() - - stputil.SetManager(manager) - - demoNonce(manager) - fmt.Println() - demoRefreshToken(manager) - fmt.Println() - demoOAuth2(manager) -} - -func demoNonce(manager *core.Manager) { - fmt.Println("=== Nonce Anti-Replay Demo ===") - - nonce, err := manager.GenerateNonce() - if err != nil { - fmt.Printf("Error generating nonce: %v\n", err) - return - } - fmt.Printf("Generated Nonce: %s\n", nonce) - - valid := manager.VerifyNonce(nonce) - fmt.Printf("First verification: %v (should be true)\n", valid) - - valid = manager.VerifyNonce(nonce) - fmt.Printf("Second verification: %v (should be false - replay attack prevented)\n", valid) -} - -func demoRefreshToken(manager *core.Manager) { - fmt.Println("=== Refresh Token Demo ===") - - tokenInfo, err := manager.LoginWithRefreshToken("user1000", "web") - if err != nil { - fmt.Printf("Error: %v\n", err) - return - } - - fmt.Printf("Access Token: %s\n", tokenInfo.AccessToken[:40]+"...") - fmt.Printf("Refresh Token: %s\n", tokenInfo.RefreshToken[:40]+"...") - fmt.Printf("Expires at: %s\n", time.Unix(tokenInfo.ExpireTime, 0).Format(time.RFC3339)) - - fmt.Println("\nRefreshing access token...") - newTokenInfo, err := manager.RefreshAccessToken(tokenInfo.RefreshToken) - if err != nil { - fmt.Printf("Error: %v\n", err) - return - } - - fmt.Printf("New Access Token: %s\n", newTokenInfo.AccessToken[:40]+"...") - fmt.Printf("Same Refresh Token: %v\n", newTokenInfo.RefreshToken == tokenInfo.RefreshToken) -} - -func demoOAuth2(manager *core.Manager) { - fmt.Println("=== OAuth2 Authorization Code Flow Demo ===") - - oauth2Server := manager.GetOAuth2Server() - - client := &core.OAuth2Client{ - ClientID: "webapp123", - ClientSecret: "secret456", - RedirectURIs: []string{"http://localhost:8080/callback"}, - GrantTypes: []core.OAuth2GrantType{core.GrantTypeAuthorizationCode, core.GrantTypeRefreshToken}, - Scopes: []string{"read", "write"}, - } - oauth2Server.RegisterClient(client) - fmt.Println("Client registered") - - authCode, err := oauth2Server.GenerateAuthorizationCode( - "webapp123", - "http://localhost:8080/callback", - "user1000", - []string{"read", "write"}, - ) - if err != nil { - fmt.Printf("Error: %v\n", err) - return - } - fmt.Printf("Authorization Code: %s\n", authCode.Code[:20]+"...") - - accessToken, err := oauth2Server.ExchangeCodeForToken( - authCode.Code, - "webapp123", - "secret456", - "http://localhost:8080/callback", - ) - if err != nil { - fmt.Printf("Error: %v\n", err) - return - } - - fmt.Printf("Access Token: %s\n", accessToken.Token[:20]+"...") - fmt.Printf("Token Type: %s\n", accessToken.TokenType) - fmt.Printf("Expires In: %d seconds\n", accessToken.ExpiresIn) - fmt.Printf("Refresh Token: %s\n", accessToken.RefreshToken[:20]+"...") - fmt.Printf("Scopes: %v\n", accessToken.Scopes) - - validated, err := oauth2Server.ValidateAccessToken(accessToken.Token) - if err != nil { - fmt.Printf("Validation error: %v\n", err) - return - } - fmt.Printf("Token validated for user: %s\n", validated.UserID) - - fmt.Println("\nRefreshing OAuth2 token...") - newToken, err := oauth2Server.RefreshAccessToken(accessToken.RefreshToken, "webapp123", "secret456") - if err != nil { - fmt.Printf("Error: %v\n", err) - return - } - fmt.Printf("New Access Token: %s\n", newToken.Token[:20]+"...") -} diff --git a/examples/session-demo/go.mod b/examples/session-demo/go.mod deleted file mode 100644 index 481560e..0000000 --- a/examples/session-demo/go.mod +++ /dev/null @@ -1,15 +0,0 @@ -module github.com/click33/sa-token-go/examples/session-demo - -go 1.21 - -require ( - github.com/click33/sa-token-go/core v0.1.3 - github.com/click33/sa-token-go/storage/memory v0.1.3 - github.com/click33/sa-token-go/stputil v0.1.3 -) - -replace ( - github.com/click33/sa-token-go/core => ../../core - github.com/click33/sa-token-go/storage/memory => ../../storage/memory - github.com/click33/sa-token-go/stputil => ../../stputil -) diff --git a/examples/token-styles/README.md b/examples/token-styles/README.md deleted file mode 100644 index cdba381..0000000 --- a/examples/token-styles/README.md +++ /dev/null @@ -1,222 +0,0 @@ -English | [中文文档](README_zh.md) - -# Token Styles Example - -This example demonstrates all available token generation styles in Sa-Token-Go. - -## Available Token Styles - -### 1. UUID Style (`uuid`) -``` -e.g., 550e8400-e29b-41d4-a716-446655440000 -``` -- Standard UUID v4 format -- 36 characters (including hyphens) -- Globally unique - -### 2. Simple Style (`simple`) -``` -e.g., aB3dE5fG7hI9jK1l -``` -- 16-character random string -- Base64 URL-safe encoding -- Compact and simple - -### 3. Random32 Style (`random32`) -``` -e.g., aB3dE5fG7hI9jK1lMnO2pQ4rS6tU8vW0 -``` -- 32-character random string -- High randomness -- Secure and unique - -### 4. Random64 Style (`random64`) -``` -e.g., aB3dE5fG7hI9jK1lMnO2pQ4rS6tU8vW0xY1zA2bC3dD4eE5fF6gG7hH8iI9jJ0kK1l -``` -- 64-character random string -- Maximum randomness -- Extra secure - -### 5. Random128 Style (`random128`) -``` -e.g., aB3dE5fG7hI9jK1lMnO2pQ4rS6tU8vW0xY1zA2bC3dD4eE5fF6gG7hH8iI9jJ0kK1lMmN2nO3oP4pQ5qR6rS7sT8tU9uV0vW1wX2xY3yZ4zA5aB6bC7cD8dE9eF0fG1gH2hI3iJ4jK5kL6lM7mN8nO9oP0 -``` -- 128-character random string -- Extremely secure -- For high-security scenarios - -### 6. JWT Style (`jwt`) -``` -e.g., eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkZXZpY2UiOiJkZWZhdWx0IiwiaWF0IjoxNzAwMDAwMDAwLCJsb2dpbklkIjoidXNlcjEwMDAifQ.xxx -``` -- Standard JWT format -- Contains claims (loginId, device, iat, exp) -- Self-contained and verifiable -- Requires `JwtSecretKey` configuration - -### 7. Hash Style (`hash`) 🆕 -``` -e.g., a3f5d8b2c1e4f6a9d7b8c5e2f1a4d6b9c8e5f2a7d4b1c9e6f3a8d5b2c1e7f4a6 -``` -- SHA256 hash-based token -- Combines loginID, device, timestamp, and random data -- 64-character hexadecimal -- High security and unpredictability - -### 8. Timestamp Style (`timestamp`) 🆕 -``` -e.g., 1700000000123_user1000_a3f5d8b2c1e4f6a9 -``` -- Format: `timestamp_loginID_random` -- Millisecond precision timestamp -- Easily traceable creation time -- Good for debugging and logging - -### 9. Tik Style (`tik`) 🆕 -``` -e.g., 7Kx9mN2pQr4 -``` -- Short ID format (11 characters) -- Similar to TikTok/Douyin style -- Alphanumeric characters (0-9, A-Z, a-z) -- Perfect for URL shortening and sharing - -## Quick Start - -### Installation - -```bash -go get github.com/click33/sa-token-go/core -go get github.com/click33/sa-token-go/stputil -go get github.com/click33/sa-token-go/storage/memory -``` - -### Run the Example - -```bash -cd examples/token-styles -go run main.go -``` - -### Output - -``` -Sa-Token-Go Token Styles Demo -======================================== - -📌 UUID Style (uuid) ----------------------------------------- - 1. Token for user1001: - 550e8400-e29b-41d4-a716-446655440000 - 2. Token for user1002: - f47ac10b-58cc-4372-a567-0e02b2c3d479 - 3. Token for user1003: - 7c9e6679-7425-40de-944b-e07fc1f90ae7 - -📌 Hash Style (SHA256) (hash) ----------------------------------------- - 1. Token for user1001: - a3f5d8b2c1e4f6a9d7b8c5e2f1a4d6b9c8e5f2a7d4b1c9e6f3a8d5b2c1e7f4a6 - 2. Token for user1002: - b4f6d9c3d2e5f7b0e8c9d6f3e2b5d7c0d9f6e3b8d5c2e0f7d4b9c3e8f6b3d2f5 - 3. Token for user1003: - c5f7e0d4e3f6e8c1f9d0e7f4e3c6e8d1e0f7f4c9e6d3f1e8e5c0e9f7c4e3f6e7 - -📌 Timestamp Style (timestamp) ----------------------------------------- - 1. Token for user1001: - 1700000000123_user1001_a3f5d8b2c1e4f6a9 - 2. Token for user1002: - 1700000000456_user1002_b4f6d9c3d2e5f7b0 - 3. Token for user1003: - 1700000000789_user1003_c5f7e0d4e3f6e8c1 - -📌 Tik Style (Short ID) (tik) ----------------------------------------- - 1. Token for user1001: - 7Kx9mN2pQr4 - 2. Token for user1002: - 8Ly0oO3qRs5 - 3. Token for user1003: - 9Mz1pP4rSt6 - -======================================== -✅ All token styles demonstrated! -``` - -## Usage in Your Project - -### Using Hash Style - -```go -import ( - "github.com/click33/sa-token-go/core" - "github.com/click33/sa-token-go/stputil" - "github.com/click33/sa-token-go/storage/memory" -) - -func init() { - stputil.SetManager( - core.NewBuilder(). - Storage(memory.NewStorage()). - TokenStyle(core.TokenStyleHash). // SHA256 hash style - Timeout(86400). - Build(), - ) -} - -func main() { - token, _ := stputil.Login(1000) - // token: a3f5d8b2c1e4f6a9d7b8c5e2f1a4d6b9c8e5f2a7d4b1c9e6f3a8d5b2c1e7f4a6 -} -``` - -### Using Timestamp Style - -```go -stputil.SetManager( - core.NewBuilder(). - Storage(memory.NewStorage()). - TokenStyle(core.TokenStyleTimestamp). // Timestamp style - Timeout(86400). - Build(), -) - -token, _ := stputil.Login(1000) -// token: 1700000000123_1000_a3f5d8b2c1e4f6a9 -``` - -### Using Tik Style - -```go -stputil.SetManager( - core.NewBuilder(). - Storage(memory.NewStorage()). - TokenStyle(core.TokenStyleTik). // Short ID style - Timeout(86400). - Build(), -) - -token, _ := stputil.Login(1000) -// token: 7Kx9mN2pQr4 -``` - -## Use Cases - -| Style | Best For | Pros | Cons | -|-------|----------|------|------| -| **UUID** | General purpose | Standard, widely supported | Longer | -| **Simple** | Internal APIs | Compact | Less entropy | -| **Random32/64/128** | High security | Very random | Longer strings | -| **JWT** | Stateless auth | Self-contained | Larger size | -| **Hash** 🆕 | Secure tracking | High security, deterministic | 64 chars | -| **Timestamp** 🆕 | Debugging, auditing | Time-traceable | Exposes creation time | -| **Tik** 🆕 | URL sharing, short links | Very short, user-friendly | Lower entropy | - -## Next Steps - -- [Quick Start Guide](../quick-start/) -- [JWT Example](../jwt-example/) -- [Full Documentation](../../docs/) - diff --git a/examples/token-styles/README_zh.md b/examples/token-styles/README_zh.md deleted file mode 100644 index 103a43c..0000000 --- a/examples/token-styles/README_zh.md +++ /dev/null @@ -1,222 +0,0 @@ -[English](README.md) | 中文文档 - -# Token 风格示例 - -本示例演示 Sa-Token-Go 中所有可用的 Token 生成风格。 - -## 可用的 Token 风格 - -### 1. UUID 风格 (`uuid`) -``` -例如:550e8400-e29b-41d4-a716-446655440000 -``` -- 标准 UUID v4 格式 -- 36 个字符(包含连字符) -- 全局唯一 - -### 2. 简单风格 (`simple`) -``` -例如:aB3dE5fG7hI9jK1l -``` -- 16 字符随机字符串 -- Base64 URL 安全编码 -- 紧凑简单 - -### 3. Random32 风格 (`random32`) -``` -例如:aB3dE5fG7hI9jK1lMnO2pQ4rS6tU8vW0 -``` -- 32 字符随机字符串 -- 高随机性 -- 安全且唯一 - -### 4. Random64 风格 (`random64`) -``` -例如:aB3dE5fG7hI9jK1lMnO2pQ4rS6tU8vW0xY1zA2bC3dD4eE5fF6gG7hH8iI9jJ0kK1l -``` -- 64 字符随机字符串 -- 最大随机性 -- 超级安全 - -### 5. Random128 风格 (`random128`) -``` -例如:aB3dE5fG7hI9jK1lMnO2pQ4rS6tU8vW0xY1zA2bC3dD4eE5fF6gG7hH8iI9jJ0kK1lMmN2nO3oP4pQ5qR6rS7sT8tU9uV0vW1wX2xY3yZ4zA5aB6bC7cD8dE9eF0fG1gH2hI3iJ4jK5kL6lM7mN8nO9oP0 -``` -- 128 字符随机字符串 -- 极度安全 -- 用于高安全性场景 - -### 6. JWT 风格 (`jwt`) -``` -例如:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkZXZpY2UiOiJkZWZhdWx0IiwiaWF0IjoxNzAwMDAwMDAwLCJsb2dpbklkIjoidXNlcjEwMDAifQ.xxx -``` -- 标准 JWT 格式 -- 包含声明(loginId, device, iat, exp) -- 自包含且可验证 -- 需要配置 `JwtSecretKey` - -### 7. 哈希风格 (`hash`) 🆕 -``` -例如:a3f5d8b2c1e4f6a9d7b8c5e2f1a4d6b9c8e5f2a7d4b1c9e6f3a8d5b2c1e7f4a6 -``` -- 基于 SHA256 哈希的 Token -- 组合 loginID、device、时间戳和随机数据 -- 64 字符十六进制 -- 高安全性和不可预测性 - -### 8. 时间戳风格 (`timestamp`) 🆕 -``` -例如:1700000000123_user1000_a3f5d8b2c1e4f6a9 -``` -- 格式:`时间戳_loginID_随机数` -- 毫秒精度时间戳 -- 易于追溯创建时间 -- 便于调试和日志记录 - -### 9. Tik 风格 (`tik`) 🆕 -``` -例如:7Kx9mN2pQr4 -``` -- 短 ID 格式(11 字符) -- 类似抖音/TikTok 风格 -- 字母数字字符(0-9, A-Z, a-z) -- 适合 URL 缩短和分享 - -## 快速开始 - -### 安装 - -```bash -go get github.com/click33/sa-token-go/core -go get github.com/click33/sa-token-go/stputil -go get github.com/click33/sa-token-go/storage/memory -``` - -### 运行示例 - -```bash -cd examples/token-styles -go run main.go -``` - -### 输出 - -``` -Sa-Token-Go Token Styles Demo -======================================== - -📌 UUID Style (uuid) ----------------------------------------- - 1. Token for user1001: - 550e8400-e29b-41d4-a716-446655440000 - 2. Token for user1002: - f47ac10b-58cc-4372-a567-0e02b2c3d479 - 3. Token for user1003: - 7c9e6679-7425-40de-944b-e07fc1f90ae7 - -📌 Hash Style (SHA256) (hash) ----------------------------------------- - 1. Token for user1001: - a3f5d8b2c1e4f6a9d7b8c5e2f1a4d6b9c8e5f2a7d4b1c9e6f3a8d5b2c1e7f4a6 - 2. Token for user1002: - b4f6d9c3d2e5f7b0e8c9d6f3e2b5d7c0d9f6e3b8d5c2e0f7d4b9c3e8f6b3d2f5 - 3. Token for user1003: - c5f7e0d4e3f6e8c1f9d0e7f4e3c6e8d1e0f7f4c9e6d3f1e8e5c0e9f7c4e3f6e7 - -📌 Timestamp Style (timestamp) ----------------------------------------- - 1. Token for user1001: - 1700000000123_user1001_a3f5d8b2c1e4f6a9 - 2. Token for user1002: - 1700000000456_user1002_b4f6d9c3d2e5f7b0 - 3. Token for user1003: - 1700000000789_user1003_c5f7e0d4e3f6e8c1 - -📌 Tik Style (Short ID) (tik) ----------------------------------------- - 1. Token for user1001: - 7Kx9mN2pQr4 - 2. Token for user1002: - 8Ly0oO3qRs5 - 3. Token for user1003: - 9Mz1pP4rSt6 - -======================================== -✅ All token styles demonstrated! -``` - -## 在项目中使用 - -### 使用哈希风格 - -```go -import ( - "github.com/click33/sa-token-go/core" - "github.com/click33/sa-token-go/stputil" - "github.com/click33/sa-token-go/storage/memory" -) - -func init() { - stputil.SetManager( - core.NewBuilder(). - Storage(memory.NewStorage()). - TokenStyle(core.TokenStyleHash). // SHA256 哈希风格 - Timeout(86400). - Build(), - ) -} - -func main() { - token, _ := stputil.Login(1000) - // token: a3f5d8b2c1e4f6a9d7b8c5e2f1a4d6b9c8e5f2a7d4b1c9e6f3a8d5b2c1e7f4a6 -} -``` - -### 使用时间戳风格 - -```go -stputil.SetManager( - core.NewBuilder(). - Storage(memory.NewStorage()). - TokenStyle(core.TokenStyleTimestamp). // 时间戳风格 - Timeout(86400). - Build(), -) - -token, _ := stputil.Login(1000) -// token: 1700000000123_1000_a3f5d8b2c1e4f6a9 -``` - -### 使用 Tik 风格 - -```go -stputil.SetManager( - core.NewBuilder(). - Storage(memory.NewStorage()). - TokenStyle(core.TokenStyleTik). // 短 ID 风格 - Timeout(86400). - Build(), -) - -token, _ := stputil.Login(1000) -// token: 7Kx9mN2pQr4 -``` - -## 使用场景 - -| 风格 | 最适用于 | 优点 | 缺点 | -|------|----------|------|------| -| **UUID** | 通用场景 | 标准、广泛支持 | 较长 | -| **Simple** | 内部 API | 紧凑 | 熵值较低 | -| **Random32/64/128** | 高安全性 | 随机性强 | 字符串较长 | -| **JWT** | 无状态认证 | 自包含 | 体积较大 | -| **Hash** 🆕 | 安全追踪 | 高安全性、确定性 | 64 字符 | -| **Timestamp** 🆕 | 调试、审计 | 可追溯时间 | 暴露创建时间 | -| **Tik** 🆕 | URL 分享、短链接 | 很短、用户友好 | 熵值较低 | - -## 下一步 - -- [快速开始指南](../quick-start/) -- [JWT 示例](../jwt-example/) -- [完整文档](../../docs/) - diff --git a/examples/token-styles/go.mod b/examples/token-styles/go.mod deleted file mode 100644 index 2f16ade..0000000 --- a/examples/token-styles/go.mod +++ /dev/null @@ -1,20 +0,0 @@ -module github.com/click33/sa-token-go/examples/token-styles - -go 1.21 - -require ( - github.com/click33/sa-token-go/core v0.1.3 - github.com/click33/sa-token-go/storage/memory v0.1.3 - github.com/click33/sa-token-go/stputil v0.1.3 -) - -require ( - github.com/golang-jwt/jwt/v5 v5.2.1 // indirect - github.com/google/uuid v1.6.0 // indirect -) - -replace ( - github.com/click33/sa-token-go/core => ../../core - github.com/click33/sa-token-go/storage/memory => ../../storage/memory - github.com/click33/sa-token-go/stputil => ../../stputil -) diff --git a/generator/sgenerator/go.mod b/generator/sgenerator/go.mod index 4e1656d..198bd2d 100644 --- a/generator/sgenerator/go.mod +++ b/generator/sgenerator/go.mod @@ -1,3 +1,8 @@ module github.com/click33/sa-token-go/generator/sgenerator -go 1.23.0 +go 1.25.0 + +require ( + github.com/golang-jwt/jwt/v5 v5.3.0 + github.com/google/uuid v1.6.0 +) diff --git a/generator/sgenerator/go.sum b/generator/sgenerator/go.sum new file mode 100644 index 0000000..17b1315 --- /dev/null +++ b/generator/sgenerator/go.sum @@ -0,0 +1,2 @@ +github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= diff --git a/go.work b/go.work index 6d82417..d760691 100644 --- a/go.work +++ b/go.work @@ -1,4 +1,4 @@ -go 1.25.3 +go 1.25.0 use ( // codec @@ -7,7 +7,27 @@ use ( // core ./core - ./stputil + + // examples - integrations + ./examples/annotation/annotation-example + ./examples/chi/chi-example + ./examples/echo/echo-example + ./examples/fiber/fiber-example + ./examples/gf + ./examples/gin/gin-example + ./examples/gin/gin-simple + ./examples/kratos/kratos-example + + // examples - manager-example + ./examples/manager-example/jwt-example + ./examples/manager-example/listener-example + ./examples/manager-example/oauth2-example + ./examples/manager-example/security-example + ./examples/manager-example/session-demo + ./examples/manager-example/token-styles + + // examples - quick-start + ./examples/quick-start/simple-example // generator ./generator/sgenerator @@ -31,22 +51,5 @@ use ( // storage ./storage/memory ./storage/redis - - // examples - ./examples/gf - ./examples/gin/gin-example - ./examples/gin/gin-simple - ./examples/kratos/kratos-example - ./examples/chi/chi-example - ./examples/echo/echo-example - ./examples/fiber/fiber-example - ./examples/quick-start/simple-example - ./examples/redis-example - ./examples/jwt-example - ./examples/listener-example - ./examples/oauth2-example - ./examples/security-features - ./examples/session-demo - ./examples/token-styles - ./examples/annotation/annotation-example + ./stputil ) diff --git a/go.work.sum b/go.work.sum index 1638860..2ea3043 100644 --- a/go.work.sum +++ b/go.work.sum @@ -46,8 +46,9 @@ github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= github.com/click33/sa-token-go/integrations/gf v0.1.6/go.mod h1:cwAY3VJ/KNLNcuYDNjMt1O4IERCep1JWCfvS9LyoA5w= +github.com/click33/sa-token-go/integrations/gin v0.1.6/go.mod h1:A8Ds3bUalQQcH2vYBaGPAqZ6fzZY9m7AamikDcXyRKE= github.com/click33/sa-token-go/storage/memory v0.1.4/go.mod h1:nqyuEh23mNjcuG3aI/BqJFz71zkpsgjdStW1BC5lkB0= -github.com/click33/sa-token-go/storage/memory v0.1.5/go.mod h1:HxN2NVLq7lx+sOmq5RmV0h8xJjEUJLm4Xt1Mq+9PV2s= +github.com/click33/sa-token-go/stputil v0.1.6/go.mod h1:G4vYhljpN1SeGLYHWRslYncHJvn52CksHGjBzUNITFA= github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe h1:QQ3GSy+MqSHxm/d8nCtnAiZdYFd45cYZPs8vOOIYKfk= @@ -66,6 +67,7 @@ github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8 github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/creack/pty v1.1.9 h1:uDmaGzcdjhF4i/plgjmEsriH11Y0o7RKapEf/LDaM3w= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= @@ -83,7 +85,6 @@ github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7 github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8= github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= -github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= @@ -92,7 +93,6 @@ github.com/fullstorydev/grpcurl v1.9.3/go.mod h1:/b4Wxe8bG6ndAjlfSUjwseQReUDUvBJ github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y= -github.com/go-chi/chi/v5 v5.0.11 h1:BnpYbFZ3T3S1WMpD79r7R5ThWX40TaFB7L31Y8xqSwA= github.com/go-chi/chi/v5 v5.0.11/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -117,11 +117,12 @@ github.com/gofiber/fiber/v2 v2.52.0/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtg github.com/gogf/gf/v2 v2.9.4/go.mod h1:Ukl+5HUH9S7puBmNLR4L1zUqeRwi0nrW4OigOknEztU= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI= github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= github.com/golang/glog v1.2.4 h1:CNNw5U8lSiiBk7druxtSHHTsRWcxKoac6kZKm2peBBc= @@ -170,7 +171,6 @@ github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5O github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= @@ -223,7 +223,6 @@ github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -254,6 +253,7 @@ github.com/pkg/sftp v1.13.6 h1:JFZT4XbOU7l77xGSpOdW+pwIMqP044IyjXX6FGyEKFo= github.com/pkg/sftp v1.13.6/go.mod h1:tz1ryNURKu77RL+GuCzmoJYxQczL3wLNNpPWagdg4Qk= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b h1:0LFwY6Q3gMACTjAbMZBjXAqTOzOwFaj2Ld6cjeQ7Rig= github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus/client_golang v1.21.1 h1:DOvXXTqVzvkIewV/CDPFdejpMCGeMcbGCQ8YOmu+Ibk= @@ -273,25 +273,18 @@ github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/f github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/sagikazarmark/crypt v0.17.0 h1:ZA/7pXyjkHoK4bW4mIdnCLvL8hd+Nrbiw7Dqk7D4qUk= github.com/sagikazarmark/crypt v0.17.0/go.mod h1:SMtHTvdmsZMuY/bpZoqokSoChIrcJ/epOxZN58PbZDg= -github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= -github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/shirou/gopsutil/v3 v3.23.6 h1:5y46WPI9QBKBbK7EEccUPNXpJpNrvPuTD0O2zHEHT08= github.com/shirou/gopsutil/v3 v3.23.6/go.mod h1:j7QX50DrXYggrpN30W0Mo+I4/8U2UUIQrnrhqUeWrAU= github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= -github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= -github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ= github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= @@ -305,7 +298,6 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/tinylib/msgp v1.1.8 h1:FCXC1xanKO4I8plpHGH2P7koL/RzZs12l/+r7vakfm0= github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw= @@ -321,6 +313,8 @@ github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyC github.com/valyala/fasthttp v1.51.0/go.mod h1:oI2XroL+lI7vdXyYoQk03bXBThfFl2cVdIA3Xl7cH8g= github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= +github.com/vmihailenco/msgpack/v5 v5.4.1/go.mod h1:GaZTsDaehaPpQVyxrf5mtQlH+pc21PIudVV/E3rRQok= +github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY= @@ -382,14 +376,12 @@ go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lI go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= -go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= -go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= @@ -397,7 +389,6 @@ golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUu golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= -golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= @@ -412,6 +403,8 @@ golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0= golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM= golang.org/x/oauth2 v0.25.0 h1:CY4y7XT9v0cRI9oupztF8AgiIu99L/ksR/Xp/6jrZ70= golang.org/x/oauth2 v0.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -429,7 +422,6 @@ golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= -golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/time v0.10.0 h1:3usCWA8tQn0L8+hFJQNgzpWbd89begxN66o1Ojdn5L4= golang.org/x/time v0.10.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= @@ -467,7 +459,6 @@ gopkg.in/h2non/gock.v1 v1.1.2 h1:jBbHXgGBK/AoPVfJh5x4r/WxIrElvbLel8TCZkkZJoY= gopkg.in/h2non/gock.v1 v1.1.2/go.mod h1:n7UGz/ckNChHiK05rDoiC4MYSunEC/lyaUm2WWaDva0= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= diff --git a/integrations/chi/export.go b/integrations/chi/export.go index 417371c..cc0d812 100644 --- a/integrations/chi/export.go +++ b/integrations/chi/export.go @@ -105,7 +105,7 @@ func DefaultConfig() *Config { return core.DefaultConfig() } -// NewManager creates a new authentication manager | 创建新的认证管理器 +// NewManager creates a new authentication manager-example | 创建新的认证管理器 func NewManager(storage Storage, cfg *Config) *Manager { return core.NewManager(storage, cfg) } @@ -130,7 +130,7 @@ func NewTokenGenerator(cfg *Config) *TokenGenerator { return core.NewTokenGenerator(cfg) } -// NewEventManager creates a new event manager | 创建新的事件管理器 +// NewEventManager creates a new event manager-example | 创建新的事件管理器 func NewEventManager() *EventManager { return core.NewEventManager() } @@ -140,12 +140,12 @@ func NewBuilder() *Builder { return core.NewBuilder() } -// NewNonceManager creates a new nonce manager | 创建新的Nonce管理器 +// NewNonceManager creates a new nonce manager-example | 创建新的Nonce管理器 func NewNonceManager(storage Storage, prefix string, ttl ...int64) *NonceManager { return core.NewNonceManager(storage, prefix, ttl...) } -// NewRefreshTokenManager creates a new refresh token manager | 创建新的刷新令牌管理器 +// NewRefreshTokenManager creates a new refresh token manager-example | 创建新的刷新令牌管理器 func NewRefreshTokenManager(storage Storage, prefix string, cfg *Config) *RefreshTokenManager { return core.NewRefreshTokenManager(storage, prefix, cfg) } diff --git a/integrations/chi/go.mod b/integrations/chi/go.mod index 7ef3a25..e4298be 100644 --- a/integrations/chi/go.mod +++ b/integrations/chi/go.mod @@ -1,20 +1,15 @@ module github.com/click33/sa-token-go/integrations/chi -go 1.23.0 +go 1.25.0 require ( - github.com/click33/sa-token-go/core v0.1.5 - github.com/click33/sa-token-go/stputil v0.1.5 + github.com/click33/sa-token-go/core v0.1.6 + github.com/click33/sa-token-go/stputil v0.1.6 ) require ( - github.com/golang-jwt/jwt/v5 v5.2.2 // indirect + github.com/golang-jwt/jwt/v5 v5.3.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/panjf2000/ants/v2 v2.11.3 // indirect - golang.org/x/sync v0.16.0 // indirect -) - -replace ( - github.com/click33/sa-token-go/core => ../../core - github.com/click33/sa-token-go/stputil => ../../stputil + golang.org/x/sync v0.19.0 // indirect ) diff --git a/integrations/chi/go.sum b/integrations/chi/go.sum index dda2c2d..24defe4 100644 --- a/integrations/chi/go.sum +++ b/integrations/chi/go.sum @@ -1,8 +1,10 @@ +github.com/click33/sa-token-go/core v0.1.6 h1:ELOe0qSH1b3LRsQD3DIBg0e1VgYANKFg5H7z57Lkt/8= +github.com/click33/sa-token-go/stputil v0.1.6 h1:S+V64jQzppE9c1wXcmHppCRlrSsU2iTfvdPGlMbs2WI= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= -github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= +github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= -golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/integrations/echo/export.go b/integrations/echo/export.go index b6e9562..7986499 100644 --- a/integrations/echo/export.go +++ b/integrations/echo/export.go @@ -105,7 +105,7 @@ func DefaultConfig() *Config { return core.DefaultConfig() } -// NewManager creates a new authentication manager | 创建新的认证管理器 +// NewManager creates a new authentication manager-example | 创建新的认证管理器 func NewManager(storage Storage, cfg *Config) *Manager { return core.NewManager(storage, cfg) } @@ -130,7 +130,7 @@ func NewTokenGenerator(cfg *Config) *TokenGenerator { return core.NewTokenGenerator(cfg) } -// NewEventManager creates a new event manager | 创建新的事件管理器 +// NewEventManager creates a new event manager-example | 创建新的事件管理器 func NewEventManager() *EventManager { return core.NewEventManager() } @@ -140,12 +140,12 @@ func NewBuilder() *Builder { return core.NewBuilder() } -// NewNonceManager creates a new nonce manager | 创建新的Nonce管理器 +// NewNonceManager creates a new nonce manager-example | 创建新的Nonce管理器 func NewNonceManager(storage Storage, prefix string, ttl ...int64) *NonceManager { return core.NewNonceManager(storage, prefix, ttl...) } -// NewRefreshTokenManager creates a new refresh token manager | 创建新的刷新令牌管理器 +// NewRefreshTokenManager creates a new refresh token manager-example | 创建新的刷新令牌管理器 func NewRefreshTokenManager(storage Storage, prefix string, cfg *Config) *RefreshTokenManager { return core.NewRefreshTokenManager(storage, prefix, cfg) } diff --git a/integrations/echo/go.mod b/integrations/echo/go.mod index ae7ee59..6a7092b 100644 --- a/integrations/echo/go.mod +++ b/integrations/echo/go.mod @@ -1,17 +1,15 @@ module github.com/click33/sa-token-go/integrations/echo -go 1.23.0 - -toolchain go1.24.1 +go 1.25.0 require ( - github.com/click33/sa-token-go/core v0.1.5 - github.com/click33/sa-token-go/stputil v0.1.5 + github.com/click33/sa-token-go/core v0.1.6 + github.com/click33/sa-token-go/stputil v0.1.6 github.com/labstack/echo/v4 v4.11.4 ) require ( - github.com/golang-jwt/jwt/v5 v5.2.2 // indirect + github.com/golang-jwt/jwt/v5 v5.3.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/labstack/gommon v0.4.2 // indirect github.com/mattn/go-colorable v0.1.14 // indirect @@ -21,9 +19,7 @@ require ( github.com/valyala/fasttemplate v1.2.2 // indirect golang.org/x/crypto v0.41.0 // indirect golang.org/x/net v0.43.0 // indirect - golang.org/x/sync v0.16.0 // indirect + golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.35.0 // indirect golang.org/x/text v0.28.0 // indirect ) - -replace github.com/click33/sa-token-go/core => ../../core diff --git a/integrations/echo/go.sum b/integrations/echo/go.sum index 79d94db..b57347a 100644 --- a/integrations/echo/go.sum +++ b/integrations/echo/go.sum @@ -1,7 +1,7 @@ -github.com/click33/sa-token-go/stputil v0.1.5 h1:603tbI4JkBTg3MnfTj+lCMDxJOKSCOqsMyC2zyuvEco= -github.com/click33/sa-token-go/stputil v0.1.5/go.mod h1:YH+3NLXgGJfrS2wkGubMWFnr/Nk0GgejOtRxcE+9x0c= +github.com/click33/sa-token-go/core v0.1.6 h1:ELOe0qSH1b3LRsQD3DIBg0e1VgYANKFg5H7z57Lkt/8= +github.com/click33/sa-token-go/stputil v0.1.6 h1:S+V64jQzppE9c1wXcmHppCRlrSsU2iTfvdPGlMbs2WI= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= -github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= +github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/labstack/echo/v4 v4.11.4 h1:vDZmA+qNeh1pd/cCkEicDMrjtrnMGQ1QFI9gWN1zGq8= github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0= @@ -14,7 +14,7 @@ github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6Kllzaw github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= -golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/integrations/fiber/export.go b/integrations/fiber/export.go index af0828d..de7f9b4 100644 --- a/integrations/fiber/export.go +++ b/integrations/fiber/export.go @@ -105,7 +105,7 @@ func DefaultConfig() *Config { return core.DefaultConfig() } -// NewManager creates a new authentication manager | 创建新的认证管理器 +// NewManager creates a new authentication manager-example | 创建新的认证管理器 func NewManager(storage Storage, cfg *Config) *Manager { return core.NewManager(storage, cfg) } @@ -130,7 +130,7 @@ func NewTokenGenerator(cfg *Config) *TokenGenerator { return core.NewTokenGenerator(cfg) } -// NewEventManager creates a new event manager | 创建新的事件管理器 +// NewEventManager creates a new event manager-example | 创建新的事件管理器 func NewEventManager() *EventManager { return core.NewEventManager() } @@ -140,12 +140,12 @@ func NewBuilder() *Builder { return core.NewBuilder() } -// NewNonceManager creates a new nonce manager | 创建新的Nonce管理器 +// NewNonceManager creates a new nonce manager-example | 创建新的Nonce管理器 func NewNonceManager(storage Storage, prefix string, ttl ...int64) *NonceManager { return core.NewNonceManager(storage, prefix, ttl...) } -// NewRefreshTokenManager creates a new refresh token manager | 创建新的刷新令牌管理器 +// NewRefreshTokenManager creates a new refresh token manager-example | 创建新的刷新令牌管理器 func NewRefreshTokenManager(storage Storage, prefix string, cfg *Config) *RefreshTokenManager { return core.NewRefreshTokenManager(storage, prefix, cfg) } diff --git a/integrations/fiber/go.mod b/integrations/fiber/go.mod index abb4115..63ad476 100644 --- a/integrations/fiber/go.mod +++ b/integrations/fiber/go.mod @@ -1,18 +1,16 @@ module github.com/click33/sa-token-go/integrations/fiber -go 1.23.0 - -toolchain go1.24.1 +go 1.25.0 require ( - github.com/click33/sa-token-go/core v0.1.5 - github.com/click33/sa-token-go/stputil v0.1.5 + github.com/click33/sa-token-go/core v0.1.6 + github.com/click33/sa-token-go/stputil v0.1.6 github.com/gofiber/fiber/v2 v2.52.0 ) require ( github.com/andybalholm/brotli v1.0.5 // indirect - github.com/golang-jwt/jwt/v5 v5.2.2 // indirect + github.com/golang-jwt/jwt/v5 v5.3.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/klauspost/compress v1.17.0 // indirect github.com/mattn/go-colorable v0.1.14 // indirect @@ -23,8 +21,6 @@ require ( github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasthttp v1.51.0 // indirect github.com/valyala/tcplisten v1.0.0 // indirect - golang.org/x/sync v0.16.0 // indirect + golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.35.0 // indirect ) - -replace github.com/click33/sa-token-go/core => ../../core diff --git a/integrations/fiber/go.sum b/integrations/fiber/go.sum index 26f6381..714f472 100644 --- a/integrations/fiber/go.sum +++ b/integrations/fiber/go.sum @@ -1,8 +1,9 @@ github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs= -github.com/click33/sa-token-go/stputil v0.1.5 h1:603tbI4JkBTg3MnfTj+lCMDxJOKSCOqsMyC2zyuvEco= +github.com/click33/sa-token-go/core v0.1.6 h1:ELOe0qSH1b3LRsQD3DIBg0e1VgYANKFg5H7z57Lkt/8= +github.com/click33/sa-token-go/stputil v0.1.6 h1:S+V64jQzppE9c1wXcmHppCRlrSsU2iTfvdPGlMbs2WI= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/gofiber/fiber/v2 v2.52.0 h1:S+qXi7y+/Pgvqq4DrSmREGiFwtB7Bu6+QFLuIHYw/UE= -github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= +github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM= github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= @@ -15,6 +16,6 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/fasthttp v1.51.0 h1:8b30A5JlZ6C7AS81RsWjYMQmrZG6feChmgAolCl1SqA= github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8= -golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/integrations/gf/annotation.go b/integrations/gf/annotation.go index 6c27534..3890a98 100644 --- a/integrations/gf/annotation.go +++ b/integrations/gf/annotation.go @@ -53,7 +53,7 @@ func GetHandler(handler ghttp.HandlerFunc, annotations ...*Annotation) ghttp.Han ctx := r.Context() - // Get manager | 获取 Manager + // Get manager-example | 获取 Manager mgr, err := stputil.GetManager(ann.AuthType) if err != nil { writeErrorResponse(r, err) diff --git a/integrations/gf/export.go b/integrations/gf/export.go index 43093d2..2053b44 100644 --- a/integrations/gf/export.go +++ b/integrations/gf/export.go @@ -219,17 +219,17 @@ var ( // ============ Manager Management | Manager 管理 ============ -// SetManager stores the manager in the global map using the specified autoType | 使用指定的 autoType 将管理器存储在全局 map 中 +// SetManager stores the manager-example in the global map using the specified autoType | 使用指定的 autoType 将管理器存储在全局 map 中 func SetManager(mgr *manager.Manager) { stputil.SetManager(mgr) } -// GetManager retrieves the manager from the global map using the specified autoType | 使用指定的 autoType 从全局 map 中获取管理器 +// GetManager retrieves the manager-example from the global map using the specified autoType | 使用指定的 autoType 从全局 map 中获取管理器 func GetManager(autoType ...string) (*manager.Manager, error) { return stputil.GetManager(autoType...) } -// DeleteManager delete the specific manager for the given autoType and releases resources | 删除指定的管理器并释放资源 +// DeleteManager delete the specific manager-example for the given autoType and releases resources | 删除指定的管理器并释放资源 func DeleteManager(autoType ...string) error { return stputil.DeleteManager(autoType...) } @@ -326,12 +326,12 @@ func NewDefaultTokenGenerator() *sgenerator.Generator { // ============ Pool Constructors | 协程池构造函数 ============ -// NewRenewPoolManager creates a new renew pool manager with default config | 使用默认配置创建续期池管理器 +// NewRenewPoolManager creates a new renew pool manager-example with default config | 使用默认配置创建续期池管理器 func NewRenewPoolManager() *ants.RenewPoolManager { return ants.NewRenewPoolManagerWithDefaultConfig() } -// NewRenewPoolManagerWithConfig creates a new renew pool manager with config | 使用配置创建续期池管理器 +// NewRenewPoolManagerWithConfig creates a new renew pool manager-example with config | 使用配置创建续期池管理器 func NewRenewPoolManagerWithConfig(cfg *ants.RenewPoolConfig) (*ants.RenewPoolManager, error) { return ants.NewRenewPoolManagerWithConfig(cfg) } @@ -822,7 +822,7 @@ const ( // ============ Public Getters | 公共获取器 ============ -// GetConfig returns the manager configuration | 获取 Manager 当前使用的配置 +// GetConfig returns the manager-example configuration | 获取 Manager 当前使用的配置 func GetConfig(ctx context.Context, authType ...string) *config.Config { return stputil.GetConfig(ctx, authType...) } @@ -852,17 +852,17 @@ func GetGenerator(ctx context.Context, authType ...string) adapter.Generator { return stputil.GetGenerator(ctx, authType...) } -// GetNonceManager returns the nonce manager | 获取随机串管理器 +// GetNonceManager returns the nonce manager-example | 获取随机串管理器 func GetNonceManager(ctx context.Context, authType ...string) *security.NonceManager { return stputil.GetNonceManager(ctx, authType...) } -// GetRefreshManager returns the refresh token manager | 获取刷新令牌管理器 +// GetRefreshManager returns the refresh token manager-example | 获取刷新令牌管理器 func GetRefreshManager(ctx context.Context, authType ...string) *security.RefreshTokenManager { return stputil.GetRefreshManager(ctx, authType...) } -// GetEventManager returns the event manager | 获取事件管理器 +// GetEventManager returns the event manager-example | 获取事件管理器 func GetEventManager(ctx context.Context, authType ...string) *listener.Manager { return stputil.GetEventManager(ctx, authType...) } diff --git a/integrations/gf/go.mod b/integrations/gf/go.mod index 93163b8..ce672b8 100644 --- a/integrations/gf/go.mod +++ b/integrations/gf/go.mod @@ -1,10 +1,10 @@ module github.com/click33/sa-token-go/integrations/gf -go 1.24.1 +go 1.25.0 require ( github.com/click33/sa-token-go/core v0.1.6 - github.com/click33/sa-token-go/stputil v0.1.6 + github.com/click33/sa-token-go/stputil v0.1.5 github.com/gogf/gf/v2 v2.9.4 ) @@ -16,7 +16,7 @@ require ( github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/golang-jwt/jwt/v5 v5.2.2 // indirect + github.com/golang-jwt/jwt/v5 v5.3.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect github.com/grokify/html-strip-tags-go v0.1.0 // indirect @@ -35,7 +35,7 @@ require ( go.opentelemetry.io/otel/sdk v1.38.0 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect golang.org/x/net v0.43.0 // indirect - golang.org/x/sync v0.16.0 // indirect + golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.35.0 // indirect golang.org/x/text v0.28.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/integrations/gf/go.sum b/integrations/gf/go.sum index 2b8b5ae..b11f761 100644 --- a/integrations/gf/go.sum +++ b/integrations/gf/go.sum @@ -1,7 +1,7 @@ github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME= -github.com/click33/sa-token-go/core v0.1.5 h1:+1ze5dX8C6+DfOc/3O6eQuY4QYHAmSXB0Qg+x3zMUOs= -github.com/click33/sa-token-go/core v0.1.5/go.mod h1:mb3AQAJIXqx9WdULyn5qjufK1j/u+kgB0q+tafHVhgk= +github.com/click33/sa-token-go/core v0.1.6 h1:ELOe0qSH1b3LRsQD3DIBg0e1VgYANKFg5H7z57Lkt/8= +github.com/click33/sa-token-go/core v0.1.6/go.mod h1:mb3AQAJIXqx9WdULyn5qjufK1j/u+kgB0q+tafHVhgk= github.com/click33/sa-token-go/stputil v0.1.5 h1:603tbI4JkBTg3MnfTj+lCMDxJOKSCOqsMyC2zyuvEco= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= @@ -10,7 +10,7 @@ github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/gogf/gf/v2 v2.9.4 h1:6vleEWypot9WBPncP2GjbpgAUeG6Mzb1YESb9nPMkjY= -github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= +github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= @@ -37,7 +37,7 @@ go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6 go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= -golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= diff --git a/integrations/gin/annotation.go b/integrations/gin/annotation.go index b532521..0851e96 100644 --- a/integrations/gin/annotation.go +++ b/integrations/gin/annotation.go @@ -53,7 +53,7 @@ func GetHandler(handler gin.HandlerFunc, annotations ...*Annotation) gin.Handler ctx := c.Request.Context() - // Get manager | 获取 Manager + // Get manager-example | 获取 Manager mgr, err := stputil.GetManager(ann.AuthType) if err != nil { writeErrorResponse(c, err) diff --git a/integrations/gin/export.go b/integrations/gin/export.go index 679115b..b0608d9 100644 --- a/integrations/gin/export.go +++ b/integrations/gin/export.go @@ -219,17 +219,17 @@ var ( // ============ Manager Management | Manager 管理 ============ -// SetManager stores the manager in the global map using the specified autoType | 使用指定的 autoType 将管理器存储在全局 map 中 +// SetManager stores the manager-example in the global map using the specified autoType | 使用指定的 autoType 将管理器存储在全局 map 中 func SetManager(mgr *manager.Manager) { stputil.SetManager(mgr) } -// GetManager retrieves the manager from the global map using the specified autoType | 使用指定的 autoType 从全局 map 中获取管理器 +// GetManager retrieves the manager-example from the global map using the specified autoType | 使用指定的 autoType 从全局 map 中获取管理器 func GetManager(autoType ...string) (*manager.Manager, error) { return stputil.GetManager(autoType...) } -// DeleteManager delete the specific manager for the given autoType and releases resources | 删除指定的管理器并释放资源 +// DeleteManager delete the specific manager-example for the given autoType and releases resources | 删除指定的管理器并释放资源 func DeleteManager(autoType ...string) error { return stputil.DeleteManager(autoType...) } @@ -326,12 +326,12 @@ func NewDefaultTokenGenerator() *sgenerator.Generator { // ============ Pool Constructors | 协程池构造函数 ============ -// NewRenewPoolManager creates a new renew pool manager with default config | 使用默认配置创建续期池管理器 +// NewRenewPoolManager creates a new renew pool manager-example with default config | 使用默认配置创建续期池管理器 func NewRenewPoolManager() *ants.RenewPoolManager { return ants.NewRenewPoolManagerWithDefaultConfig() } -// NewRenewPoolManagerWithConfig creates a new renew pool manager with config | 使用配置创建续期池管理器 +// NewRenewPoolManagerWithConfig creates a new renew pool manager-example with config | 使用配置创建续期池管理器 func NewRenewPoolManagerWithConfig(cfg *ants.RenewPoolConfig) (*ants.RenewPoolManager, error) { return ants.NewRenewPoolManagerWithConfig(cfg) } @@ -822,7 +822,7 @@ const ( // ============ Public Getters | 公共获取器 ============ -// GetConfig returns the manager configuration | 获取 Manager 当前使用的配置 +// GetConfig returns the manager-example configuration | 获取 Manager 当前使用的配置 func GetConfig(ctx context.Context, authType ...string) *config.Config { return stputil.GetConfig(ctx, authType...) } @@ -852,17 +852,17 @@ func GetGenerator(ctx context.Context, authType ...string) adapter.Generator { return stputil.GetGenerator(ctx, authType...) } -// GetNonceManager returns the nonce manager | 获取随机串管理器 +// GetNonceManager returns the nonce manager-example | 获取随机串管理器 func GetNonceManager(ctx context.Context, authType ...string) *security.NonceManager { return stputil.GetNonceManager(ctx, authType...) } -// GetRefreshManager returns the refresh token manager | 获取刷新令牌管理器 +// GetRefreshManager returns the refresh token manager-example | 获取刷新令牌管理器 func GetRefreshManager(ctx context.Context, authType ...string) *security.RefreshTokenManager { return stputil.GetRefreshManager(ctx, authType...) } -// GetEventManager returns the event manager | 获取事件管理器 +// GetEventManager returns the event manager-example | 获取事件管理器 func GetEventManager(ctx context.Context, authType ...string) *listener.Manager { return stputil.GetEventManager(ctx, authType...) } diff --git a/integrations/gin/go.mod b/integrations/gin/go.mod index 01bcc20..0281c4e 100644 --- a/integrations/gin/go.mod +++ b/integrations/gin/go.mod @@ -1,8 +1,6 @@ module github.com/click33/sa-token-go/integrations/gin -go 1.23.0 - -toolchain go1.24.1 +go 1.25.0 require ( github.com/click33/sa-token-go/core v0.1.6 @@ -15,14 +13,13 @@ require ( github.com/bytedance/sonic/loader v0.1.1 // indirect github.com/cloudwego/base64x v0.1.4 // indirect github.com/cloudwego/iasm v0.2.0 // indirect - github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/gabriel-vasile/mimetype v1.4.3 // indirect github.com/gin-contrib/sse v0.1.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.20.0 // indirect github.com/goccy/go-json v0.10.2 // indirect - github.com/golang-jwt/jwt/v5 v5.2.2 // indirect + github.com/golang-jwt/jwt/v5 v5.3.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/cpuid/v2 v2.2.7 // indirect @@ -33,22 +30,16 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/panjf2000/ants/v2 v2.11.3 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect - github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rogpeppe/go-internal v1.13.1 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.12 // indirect golang.org/x/arch v0.8.0 // indirect golang.org/x/crypto v0.41.0 // indirect golang.org/x/net v0.43.0 // indirect - golang.org/x/sync v0.16.0 // indirect + golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.35.0 // indirect golang.org/x/text v0.28.0 // indirect google.golang.org/protobuf v1.36.10 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) - -replace ( - github.com/click33/sa-token-go/core => ../../core - github.com/click33/sa-token-go/stputil => ../../stputil -) diff --git a/integrations/gin/go.sum b/integrations/gin/go.sum index 7d6271a..3343982 100644 --- a/integrations/gin/go.sum +++ b/integrations/gin/go.sum @@ -1,5 +1,7 @@ github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0= github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM= +github.com/click33/sa-token-go/core v0.1.6 h1:ELOe0qSH1b3LRsQD3DIBg0e1VgYANKFg5H7z57Lkt/8= +github.com/click33/sa-token-go/stputil v0.1.6 h1:S+V64jQzppE9c1wXcmHppCRlrSsU2iTfvdPGlMbs2WI= github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -11,7 +13,7 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/validator/v10 v10.20.0 h1:K9ISHbSaI0lyB2eWMPJo+kOS/FBExVwjEviJTixqxL8= github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= -github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= +github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= @@ -32,7 +34,7 @@ github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65E golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc= golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= -golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= diff --git a/integrations/kratos/export.go b/integrations/kratos/export.go index 8292262..2000c96 100644 --- a/integrations/kratos/export.go +++ b/integrations/kratos/export.go @@ -105,7 +105,7 @@ func DefaultConfig() *Config { return core.DefaultConfig() } -// NewManager creates a new authentication manager | 创建新的认证管理器 +// NewManager creates a new authentication manager-example | 创建新的认证管理器 func NewManager(storage Storage, cfg *Config) *Manager { return core.NewManager(storage, cfg) } @@ -130,7 +130,7 @@ func NewTokenGenerator(cfg *Config) *TokenGenerator { return core.NewTokenGenerator(cfg) } -// NewEventManager creates a new event manager | 创建新的事件管理器 +// NewEventManager creates a new event manager-example | 创建新的事件管理器 func NewEventManager() *EventManager { return core.NewEventManager() } @@ -140,12 +140,12 @@ func NewBuilder() *Builder { return core.NewBuilder() } -// NewNonceManager creates a new nonce manager | 创建新的Nonce管理器 +// NewNonceManager creates a new nonce manager-example | 创建新的Nonce管理器 func NewNonceManager(storage Storage, prefix string, ttl ...int64) *NonceManager { return core.NewNonceManager(storage, prefix, ttl...) } -// NewRefreshTokenManager creates a new refresh token manager | 创建新的刷新令牌管理器 +// NewRefreshTokenManager creates a new refresh token manager-example | 创建新的刷新令牌管理器 func NewRefreshTokenManager(storage Storage, prefix string, cfg *Config) *RefreshTokenManager { return core.NewRefreshTokenManager(storage, prefix, cfg) } diff --git a/integrations/kratos/go.mod b/integrations/kratos/go.mod index d52d62d..70530cc 100644 --- a/integrations/kratos/go.mod +++ b/integrations/kratos/go.mod @@ -1,12 +1,10 @@ module github.com/click33/sa-token-go/integrations/kratos -go 1.24.0 - -toolchain go1.24.1 +go 1.25.0 require ( - github.com/click33/sa-token-go/core v0.1.5 - github.com/click33/sa-token-go/storage/memory v0.1.5 + github.com/click33/sa-token-go/core v0.1.6 + github.com/click33/sa-token-go/storage/memory v0.1.6 github.com/click33/sa-token-go/stputil v0.1.5 github.com/go-kratos/kratos/v2 v2.9.1 ) @@ -15,14 +13,14 @@ require ( github.com/go-kratos/aegis v0.2.0 // indirect github.com/go-playground/assert/v2 v2.2.0 // indirect github.com/go-playground/form/v4 v4.2.0 // indirect - github.com/golang-jwt/jwt/v5 v5.2.2 // indirect + github.com/golang-jwt/jwt/v5 v5.3.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/gorilla/mux v1.8.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/panjf2000/ants/v2 v2.11.3 // indirect github.com/rogpeppe/go-internal v1.13.1 // indirect golang.org/x/net v0.43.0 // indirect - golang.org/x/sync v0.16.0 // indirect + golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.35.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20251103181224-f26f9409b101 // indirect google.golang.org/grpc v1.71.0 // indirect diff --git a/integrations/kratos/go.sum b/integrations/kratos/go.sum index 8f2ff7a..e6a7fbc 100644 --- a/integrations/kratos/go.sum +++ b/integrations/kratos/go.sum @@ -1,5 +1,5 @@ -github.com/click33/sa-token-go/core v0.1.5 h1:+1ze5dX8C6+DfOc/3O6eQuY4QYHAmSXB0Qg+x3zMUOs= -github.com/click33/sa-token-go/storage/memory v0.1.5 h1:t+OLAQ57w01Db8bvjIFYzLjgV1HTL+Rar+uZKTWu8j0= +github.com/click33/sa-token-go/core v0.1.6 h1:ELOe0qSH1b3LRsQD3DIBg0e1VgYANKFg5H7z57Lkt/8= +github.com/click33/sa-token-go/storage/memory v0.1.6 h1:iGFEy+HtTJLOpKnbIMbgpXyKotsKpPQu6wWTZVOXQis= github.com/click33/sa-token-go/stputil v0.1.5 h1:603tbI4JkBTg3MnfTj+lCMDxJOKSCOqsMyC2zyuvEco= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -11,8 +11,7 @@ github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvSc github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= github.com/go-playground/form/v4 v4.2.0 h1:N1wh+Goz61e6w66vo8vJkQt+uwZSoLz50kZPJWR8eic= github.com/go-playground/form/v4 v4.2.0/go.mod h1:q1a2BY+AQUUzhl6xA/6hBetay6dEIhMHjgvJiGo6K7U= -github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= -github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= @@ -29,7 +28,7 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRI github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= -golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= google.golang.org/genproto/googleapis/rpc v0.0.0-20251103181224-f26f9409b101 h1:tRPGkdGHuewF4UisLzzHHr1spKw92qLM98nIzxbC0wY= diff --git a/log/gf/go.mod b/log/gf/go.mod index 9c3455c..d4888f6 100644 --- a/log/gf/go.mod +++ b/log/gf/go.mod @@ -1,6 +1,6 @@ module github.com/click33/sa-token-go/log/gf -go 1.23.0 +go 1.25.0 require github.com/gogf/gf/v2 v2.9.4 diff --git a/log/nop/go.mod b/log/nop/go.mod index 114fb31..4553975 100644 --- a/log/nop/go.mod +++ b/log/nop/go.mod @@ -1,3 +1,3 @@ module github.com/click33/sa-token-go/log/nop -go 1.23.0 \ No newline at end of file +go 1.25.0 \ No newline at end of file diff --git a/log/slog/go.mod b/log/slog/go.mod index 96a365e..42dd01e 100644 --- a/log/slog/go.mod +++ b/log/slog/go.mod @@ -1,4 +1,4 @@ module github.com/click33/sa-token-go/log/slog -go 1.23.0 +go 1.25.0 diff --git a/pool/ants/config.go b/pool/ants/config.go index cc67924..1d7a881 100644 --- a/pool/ants/config.go +++ b/pool/ants/config.go @@ -6,7 +6,7 @@ import ( "time" ) -// RenewPoolConfig configuration for the renewal pool manager | 续期池配置 +// RenewPoolConfig configuration for the renewal pool manager-example | 续期池配置 type RenewPoolConfig struct { MinSize int // Minimum pool size | 最小协程数 MaxSize int // Maximum pool size | 最大协程数 diff --git a/pool/ants/go.mod b/pool/ants/go.mod index 83fecf9..13040d8 100644 --- a/pool/ants/go.mod +++ b/pool/ants/go.mod @@ -1,7 +1,12 @@ module github.com/click33/sa-token-go/pool/ants -go 1.23.0 +go 1.25.0 require github.com/panjf2000/ants/v2 v2.11.3 -require golang.org/x/sync v0.11.0 // indirect +require ( + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/stretchr/testify v1.11.1 // indirect + golang.org/x/sync v0.19.0 // indirect +) diff --git a/pool/ants/go.sum b/pool/ants/go.sum index 6a67abe..a11d3f6 100644 --- a/pool/ants/go.sum +++ b/pool/ants/go.sum @@ -1,12 +1,8 @@ -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg= github.com/panjf2000/ants/v2 v2.11.3/go.mod h1:8u92CYMUc6gyvTIw8Ru7Mt7+/ESnJahz5EVtqfrilek= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= -golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pool/ants/pool_adapter_ants.go b/pool/ants/pool_adapter_ants.go index f446903..6a293f2 100644 --- a/pool/ants/pool_adapter_ants.go +++ b/pool/ants/pool_adapter_ants.go @@ -15,11 +15,11 @@ type RenewPoolManager struct { config *RenewPoolConfig // Configuration object | 池配置对象 mu sync.Mutex // Synchronization lock | 互斥锁 stopCh chan struct{} // Stop signal channel | 停止信号通道 - started bool // Indicates if pool manager is running | 是否已启动 + started bool // Indicates if pool manager-example is running | 是否已启动 closeOnce sync.Once // Ensure Stop only executes once | 确保 Stop 只执行一次 } -// NewRenewPoolManagerWithDefaultConfig creates manager with default config | 使用默认配置创建续期池管理器 +// NewRenewPoolManagerWithDefaultConfig creates manager-example with default config | 使用默认配置创建续期池管理器 func NewRenewPoolManagerWithDefaultConfig() *RenewPoolManager { mgr := &RenewPoolManager{ config: DefaultRenewPoolConfig(), @@ -35,7 +35,7 @@ func NewRenewPoolManagerWithDefaultConfig() *RenewPoolManager { return mgr } -// NewRenewPoolManagerWithConfig creates manager with config | 使用配置创建续期池管理器 +// NewRenewPoolManagerWithConfig creates manager-example with config | 使用配置创建续期池管理器 func NewRenewPoolManagerWithConfig(cfg *RenewPoolConfig) (*RenewPoolManager, error) { if cfg == nil { cfg = DefaultRenewPoolConfig() diff --git a/pool/ants/pool_adapter_ants_test.go b/pool/ants/pool_adapter_ants_test.go index 15f3bbf..746ecfa 100644 --- a/pool/ants/pool_adapter_ants_test.go +++ b/pool/ants/pool_adapter_ants_test.go @@ -24,7 +24,7 @@ func TestNewRenewPoolManagerWithDefaultConfig(t *testing.T) { t.Error("config should not be nil") } if !mgr.started { - t.Error("manager should be started") + t.Error("manager-example should be started") } } @@ -141,7 +141,7 @@ func TestRenewPoolManager_Stop(t *testing.T) { mgr.Stop() // Should not panic | 不应该 panic if mgr.started { - t.Error("manager should not be started after Stop()") + t.Error("manager-example should not be started after Stop()") } } @@ -602,7 +602,7 @@ func TestRenewPoolManager_AutoScale_Demo(t *testing.T) { mgr, err := NewRenewPoolManagerWithConfig(cfg) if err != nil { - t.Fatalf("Failed to create pool manager: %v", err) + t.Fatalf("Failed to create pool manager-example: %v", err) } defer mgr.Stop() @@ -714,7 +714,7 @@ func TestRenewPoolManager_AutoScale_StressTest(t *testing.T) { mgr, err := NewRenewPoolManagerWithConfig(cfg) if err != nil { - t.Fatalf("Failed to create pool manager: %v", err) + t.Fatalf("Failed to create pool manager-example: %v", err) } defer mgr.Stop() diff --git a/storage/memory/go.mod b/storage/memory/go.mod index 26f18fc..2cef58b 100644 --- a/storage/memory/go.mod +++ b/storage/memory/go.mod @@ -1,3 +1,3 @@ module github.com/click33/sa-token-go/storage/memory -go 1.23.0 +go 1.25.0 diff --git a/storage/memory/memory_test.go b/storage/memory/memory_test.go index 6eef018..7f341e5 100644 --- a/storage/memory/memory_test.go +++ b/storage/memory/memory_test.go @@ -1,15 +1,19 @@ package memory import ( + "context" "testing" "time" ) func TestSetKeepTTL(t *testing.T) { storage := NewStorage() + defer storage.Close() + + ctx := context.Background() // 测试场景1: 键不存在的情况 - err := storage.SetKeepTTL("non_existent_key", "value") + err := storage.SetKeepTTL(ctx, "non_existent_key", "value") if err == nil { t.Errorf("Expected error for non-existent key, got nil") } @@ -21,25 +25,25 @@ func TestSetKeepTTL(t *testing.T) { ttl := 10 * time.Second // 先设置一个键值对 - err = storage.Set(key, originalValue, ttl) + err = storage.Set(ctx, key, originalValue, ttl) if err != nil { t.Fatalf("Failed to set key: %v", err) } // 获取原始TTL - originalTTL, err := storage.TTL(key) + originalTTL, err := storage.TTL(ctx, key) if err != nil { t.Fatalf("Failed to get TTL: %v", err) } // 使用SetKeepTTL更新值 - err = storage.SetKeepTTL(key, newValue) + err = storage.SetKeepTTL(ctx, key, newValue) if err != nil { t.Fatalf("SetKeepTTL failed: %v", err) } // 验证值已更新 - value, err := storage.Get(key) + value, err := storage.Get(ctx, key) if err != nil { t.Fatalf("Failed to get value: %v", err) } @@ -48,7 +52,7 @@ func TestSetKeepTTL(t *testing.T) { } // 验证TTL保持不变 - newTTL, err := storage.TTL(key) + newTTL, err := storage.TTL(ctx, key) if err != nil { t.Fatalf("Failed to get TTL after update: %v", err) } diff --git a/storage/redis/go.mod b/storage/redis/go.mod index 347de15..9282a5b 100644 --- a/storage/redis/go.mod +++ b/storage/redis/go.mod @@ -1,6 +1,6 @@ module github.com/click33/sa-token-go/storage/redis -go 1.23.0 +go 1.25.0 require ( github.com/redis/go-redis/v9 v9.5.1 diff --git a/storage/redis/redis_test.go b/storage/redis/redis_test.go index 4ca09b6..05a2199 100644 --- a/storage/redis/redis_test.go +++ b/storage/redis/redis_test.go @@ -1,7 +1,11 @@ package redis import ( + "context" "testing" + "time" + + "github.com/redis/go-redis/v9" ) // 如果需要在本地运行测试,请取消下面注释并配置Redis连接信息 @@ -15,14 +19,13 @@ func TestSetKeepTTL(t *testing.T) { }) // 创建存储实例 - storage := &Storage{ - client: client, - prefix: "test:", - timeout: 5 * time.Second, - } + storage := NewStorageFromClient(client) + defer storage.Close() + + ctx := context.Background() // 测试场景1: 键不存在的情况 - err := storage.SetKeepTTL("non_existent_key", "value") + err := storage.SetKeepTTL(ctx, "non_existent_key", "value") if err == nil { t.Errorf("Expected error for non-existent key, got nil") } @@ -34,25 +37,25 @@ func TestSetKeepTTL(t *testing.T) { ttl := 10 * time.Second // 先设置一个键值对 - err = storage.Set(key, originalValue, ttl) + err = storage.Set(ctx, key, originalValue, ttl) if err != nil { t.Fatalf("Failed to set key: %v", err) } // 获取原始TTL - originalTTL, err := storage.TTL(key) + originalTTL, err := storage.TTL(ctx, key) if err != nil { t.Fatalf("Failed to get TTL: %v", err) } // 使用SetKeepTTL更新值 - err = storage.SetKeepTTL(key, newValue) + err = storage.SetKeepTTL(ctx, key, newValue) if err != nil { t.Fatalf("SetKeepTTL failed: %v", err) } // 验证值已更新 - value, err := storage.Get(key) + value, err := storage.Get(ctx, key) if err != nil { t.Fatalf("Failed to get value: %v", err) } @@ -61,7 +64,7 @@ func TestSetKeepTTL(t *testing.T) { } // 验证TTL保持不变 - newTTL, err := storage.TTL(key) + newTTL, err := storage.TTL(ctx, key) if err != nil { t.Fatalf("Failed to get TTL after update: %v", err) } @@ -76,11 +79,15 @@ func TestSetKeepTTL(t *testing.T) { } // 清理测试数据 - storage.Delete(key) + storage.Delete(ctx, key) } */ // 占位测试,确保测试文件能够编译通过 func TestDummy(t *testing.T) { // 这是一个空测试,仅用于确保测试文件能够编译通过 + // 同时验证依赖导入正确 + _ = redis.NewClient + _ = context.Background + _ = time.Second } diff --git a/stputil/go.mod b/stputil/go.mod index 9f31aa9..825d539 100644 --- a/stputil/go.mod +++ b/stputil/go.mod @@ -1,14 +1,12 @@ module github.com/click33/sa-token-go/stputil -go 1.23.0 +go 1.25.0 -require github.com/click33/sa-token-go/core v0.1.5 +require github.com/click33/sa-token-go/core v0.1.6 require ( - github.com/golang-jwt/jwt/v5 v5.2.2 // indirect + github.com/golang-jwt/jwt/v5 v5.3.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/panjf2000/ants/v2 v2.11.3 // indirect - golang.org/x/sync v0.16.0 // indirect + golang.org/x/sync v0.19.0 // indirect ) - -replace github.com/click33/sa-token-go/core => ../core diff --git a/stputil/go.sum b/stputil/go.sum index dda2c2d..e5a3180 100644 --- a/stputil/go.sum +++ b/stputil/go.sum @@ -1,8 +1,9 @@ +github.com/click33/sa-token-go/core v0.1.6 h1:ELOe0qSH1b3LRsQD3DIBg0e1VgYANKFg5H7z57Lkt/8= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= -github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= +github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= -golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/stputil/stputil.go b/stputil/stputil.go index 73699d4..868804f 100644 --- a/stputil/stputil.go +++ b/stputil/stputil.go @@ -1095,7 +1095,7 @@ func OAuth2PasswordGrantToken(ctx context.Context, clientID, clientSecret, usern // ============ Public Getters | 公共获取器 ============ -// GetConfig returns the manager configuration | 获取 Manager 当前使用的配置 +// GetConfig returns the manager-example configuration | 获取 Manager 当前使用的配置 func GetConfig(ctx context.Context, authType ...string) *config.Config { mgr, err := GetManager(authType...) if err != nil { @@ -1149,7 +1149,7 @@ func GetGenerator(ctx context.Context, authType ...string) adapter.Generator { return mgr.GetGenerator() } -// GetNonceManager returns the nonce manager | 获取随机串管理器 +// GetNonceManager returns the nonce manager-example | 获取随机串管理器 func GetNonceManager(ctx context.Context, authType ...string) *security.NonceManager { mgr, err := GetManager(authType...) if err != nil { @@ -1158,7 +1158,7 @@ func GetNonceManager(ctx context.Context, authType ...string) *security.NonceMan return mgr.GetNonceManager() } -// GetRefreshManager returns the refresh token manager | 获取刷新令牌管理器 +// GetRefreshManager returns the refresh token manager-example | 获取刷新令牌管理器 func GetRefreshManager(ctx context.Context, authType ...string) *security.RefreshTokenManager { mgr, err := GetManager(authType...) if err != nil { @@ -1167,7 +1167,7 @@ func GetRefreshManager(ctx context.Context, authType ...string) *security.Refres return mgr.GetRefreshManager() } -// GetEventManager returns the event manager | 获取事件管理器 +// GetEventManager returns the event manager-example | 获取事件管理器 func GetEventManager(ctx context.Context, authType ...string) *listener.Manager { mgr, err := GetManager(authType...) if err != nil { @@ -1433,34 +1433,34 @@ func HasEventListeners(event listener.Event, authType ...string) bool { // ============ Internal Helper Methods | 内部辅助方法 ============ -// SetManager stores the manager in the global map using the specified autoType | 使用指定的 autoType 将管理器存储在全局 map 中 +// SetManager stores the manager-example in the global map using the specified autoType | 使用指定的 autoType 将管理器存储在全局 map 中 func SetManager(mgr *manager.Manager) { // Validate and get the autoType value | 验证并获取 autoType 值 validAutoType := getAutoType(mgr.GetConfig().AuthType) // 获取 autoType,默认为 config.DefaultAuthType - // Store the manager in the global map with the valid autoType | 使用有效的 autoType 将管理器存储在全局 map 中 + // Store the manager-example in the global map with the valid autoType | 使用有效的 autoType 将管理器存储在全局 map 中 globalManagerMap.Store(validAutoType, mgr) } -// GetManager retrieves the manager from the global map using the specified autoType | 使用指定的 autoType 从全局 map 中获取管理器 +// GetManager retrieves the manager-example from the global map using the specified autoType | 使用指定的 autoType 从全局 map 中获取管理器 func GetManager(autoType ...string) (*manager.Manager, error) { // Validate and get the autoType value | 验证并获取 autoType 值 validAutoType := getAutoType(autoType...) // 获取 autoType,默认为 config.DefaultAuthType - // Use LoadManager to retrieve the manager | 使用 LoadManager 方法来获取管理器 + // Use LoadManager to retrieve the manager-example | 使用 LoadManager 方法来获取管理器 return loadManager(validAutoType) } -// DeleteManager delete the specific manager for the given autoType and releases resources | 删除指定的管理器并释放资源 +// DeleteManager delete the specific manager-example for the given autoType and releases resources | 删除指定的管理器并释放资源 func DeleteManager(autoType ...string) error { // Validate and get the autoType value | 验证并获取 autoType 值 validAutoType := getAutoType(autoType...) // 获取 autoType,默认为 config.DefaultAuthType - // Load the manager from global map | 从全局 map 中加载管理器 + // Load the manager-example from global map | 从全局 map 中加载管理器 mgr, err := loadManager(validAutoType) if err != nil { return err } - // Close the manager and release resources | 关闭管理器并释放资源 + // Close the manager-example and release resources | 关闭管理器并释放资源 mgr.CloseManager() - // Remove the manager from the global map | 从全局 map 中移除该管理器 + // Remove the manager-example from the global map | 从全局 map 中移除该管理器 globalManagerMap.Delete(validAutoType) return nil } @@ -1472,7 +1472,7 @@ func DeleteAllManager() { // Assert the value to the correct type | 将值断言为正确的类型 mgr, ok := value.(*manager.Manager) if ok { - // Close each manager | 关闭每个管理器 + // Close each manager-example | 关闭每个管理器 mgr.CloseManager() } // Continue iterating | 继续遍历 @@ -1497,17 +1497,17 @@ func getAutoType(autoType ...string) string { return config.DefaultAuthType } -// loadManager retrieves the manager from the global map using the valid autoType | 使用有效的 autoType 从全局 map 中加载管理器 +// loadManager retrieves the manager-example from the global map using the valid autoType | 使用有效的 autoType 从全局 map 中加载管理器 func loadManager(autoType string) (*manager.Manager, error) { - // Load the manager from the global map using the valid autoType | 使用有效的 autoType 从全局 map 中加载管理器 + // Load the manager-example from the global map using the valid autoType | 使用有效的 autoType 从全局 map 中加载管理器 value, ok := globalManagerMap.Load(autoType) if !ok { - return nil, errors.New("manager not found for autoType: " + autoType) + return nil, errors.New("manager-example not found for autoType: " + autoType) } // Assert the loaded value to the correct type | 将加载的值断言为正确的类型 mgr, ok := value.(*manager.Manager) if !ok { - return nil, errors.New("invalid manager type for autoType: " + autoType) + return nil, errors.New("invalid manager-example type for autoType: " + autoType) } return mgr, nil } From 013a5224f2509efa61513d02eecc4974d808860c Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Mon, 29 Dec 2025 22:42:11 +0800 Subject: [PATCH 33/50] =?UTF-8?q?feat():=201=E3=80=81=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/banner_demo.go | 45 -- demo/java_compat_demo.go | 87 --- demo/usage_example.go | 1 - examples/gf/{ => gf-example}/go.mod | 0 examples/gf/{ => gf-example}/go.sum | 0 examples/gf/{ => gf-example}/main.go | 0 go.work | 2 +- integrations/chi/annotation.go | 248 +++++-- integrations/chi/export.go | 1024 ++++++++++++++++++++------ integrations/chi/middleware.go | 342 +++++++++ integrations/chi/plugin.go | 183 ----- integrations/echo/annotation.go | 243 ++++-- integrations/echo/export.go | 1024 ++++++++++++++++++++------ integrations/echo/middleware.go | 316 ++++++++ integrations/echo/plugin.go | 172 ----- integrations/fiber/annotation.go | 229 +++++- integrations/fiber/export.go | 1024 ++++++++++++++++++++------ integrations/fiber/middleware.go | 307 ++++++++ integrations/fiber/plugin.go | 165 ----- storage/memory/memory_test.go | 594 ++++++++++++++- storage/redis/redis_test.go | 742 +++++++++++++++++-- 21 files changed, 5210 insertions(+), 1538 deletions(-) delete mode 100644 demo/banner_demo.go delete mode 100644 demo/java_compat_demo.go delete mode 100644 demo/usage_example.go rename examples/gf/{ => gf-example}/go.mod (100%) rename examples/gf/{ => gf-example}/go.sum (100%) rename examples/gf/{ => gf-example}/main.go (100%) create mode 100644 integrations/chi/middleware.go delete mode 100644 integrations/chi/plugin.go create mode 100644 integrations/echo/middleware.go delete mode 100644 integrations/echo/plugin.go create mode 100644 integrations/fiber/middleware.go delete mode 100644 integrations/fiber/plugin.go diff --git a/demo/banner_demo.go b/demo/banner_demo.go deleted file mode 100644 index 51c6511..0000000 --- a/demo/banner_demo.go +++ /dev/null @@ -1,45 +0,0 @@ -package main - -import ( - "github.com/click33/sa-token-go/core/banner" - "github.com/click33/sa-token-go/core/config" -) - -func main() { - // 1. 打印基础 Banner - banner.Print() - - // 2. 打印带完整配置的 Banner - cfg := config.DefaultConfig() - banner.PrintWithConfig(cfg) - - // 3. 打印 JWT 配置的 Banner - jwtCfg := &config.Config{ - TokenName: "jwt-token", - Timeout: 86400, // 24小时 - ActiveTimeout: -1, - IsConcurrent: true, - IsShare: false, - MaxLoginCount: 5, - IsReadBody: false, - IsReadHeader: true, - IsReadCookie: true, - TokenStyle: config.TokenStyleJWT, - DataRefreshPeriod: -1, - TokenSessionCheckLogin: true, - AutoRenew: true, - JwtSecretKey: "my-super-secret-key-123456", - IsLog: true, - IsPrintBanner: true, - CookieConfig: &config.CookieConfig{ - Domain: "example.com", - Path: "/api", - Secure: true, - HttpOnly: true, - SameSite: config.SameSiteStrict, - MaxAge: 7200, - }, - } - - banner.PrintWithConfig(jwtCfg) -} diff --git a/demo/java_compat_demo.go b/demo/java_compat_demo.go deleted file mode 100644 index 0bb0553..0000000 --- a/demo/java_compat_demo.go +++ /dev/null @@ -1,87 +0,0 @@ -package main - -import ( - "fmt" - - "github.com/click33/sa-token-go/core" - "github.com/click33/sa-token-go/storage/memory" -) - -func main() { - fmt.Println("🔄 Java sa-token 兼容性演示") - fmt.Println("=" + "────────────────────────────────────────────────────────────" + "=") - fmt.Println() - - storage := memory.NewStorage() - - // 方式1: Go 默认配置(带前缀 "satoken:") - fmt.Println("【方式1】Go 默认配置 - 使用前缀 'satoken:'") - mgr1 := core.NewBuilder(). - Storage(storage). - TokenName("satoken"). // 使用默认的 token 名称 - KeyPrefix("satoken:"). // 显式设置前缀(默认值) - IsPrintBanner(false). - Build() - - token1, _ := mgr1.Login("user001", "pc") - fmt.Printf("✅ 登录成功,Token: %s\n", token1) - fmt.Println(" Redis Keys 示例:") - fmt.Println(" - satoken:token:" + token1) - fmt.Println(" - satoken:account:user001:pc") - fmt.Println(" - satoken:session:user001") - fmt.Println() - - // 方式2: Java sa-token 兼容配置(无前缀) - fmt.Println("【方式2】Java 兼容配置 - 无前缀(与Java默认行为一致)") - storage2 := memory.NewStorage() - mgr2 := core.NewBuilder(). - Storage(storage2). - TokenName("satoken"). // 必须与 Java 端配置一致 - KeyPrefix(""). // 空前缀,兼容 Java sa-token - IsPrintBanner(false). - Build() - - token2, _ := mgr2.Login("user002", "web") - fmt.Printf("✅ 登录成功,Token: %s\n", token2) - fmt.Println(" Redis Keys 示例(兼容Java):") - fmt.Println(" - token:" + token2) - fmt.Println(" - account:user002:web") - fmt.Println(" - session:user002") - fmt.Println() - - // 方式3: 自定义前缀(多应用隔离) - fmt.Println("【方式3】自定义前缀 - 用于多应用隔离") - storage3 := memory.NewStorage() - mgr3 := core.NewBuilder(). - Storage(storage3). - TokenName("satoken"). - KeyPrefix("myapp:sa:"). // 自定义前缀 - IsPrintBanner(false). - Build() - - token3, _ := mgr3.Login("user003", "app") - fmt.Printf("✅ 登录成功,Token: %s\n", token3) - fmt.Println(" Redis Keys 示例:") - fmt.Println(" - myapp:sa:token:" + token3) - fmt.Println(" - myapp:sa:account:user003:app") - fmt.Println(" - myapp:sa:session:user003") - fmt.Println() - - // 关键配置说明 - fmt.Println("=" + "────────────────────────────────────────────────────────────" + "=") - fmt.Println("📝 关键配置说明:") - fmt.Println() - fmt.Println("1. 与 Java sa-token 互通:") - fmt.Println(" cfg.SetKeyPrefix(\"\") // 设置为空字符串") - fmt.Println(" 或") - fmt.Println(" builder.KeyPrefix(\"\") // Builder 方式") - fmt.Println() - fmt.Println("2. 多应用隔离:") - fmt.Println(" cfg.SetKeyPrefix(\"app1:\") // 应用1") - fmt.Println(" cfg.SetKeyPrefix(\"app2:\") // 应用2") - fmt.Println() - fmt.Println("3. 默认 Go 行为:") - fmt.Println(" cfg.SetKeyPrefix(\"satoken:\") // 默认值") - fmt.Println() - fmt.Println("=" + "────────────────────────────────────────────────────────────" + "=") -} diff --git a/demo/usage_example.go b/demo/usage_example.go deleted file mode 100644 index 0519ecb..0000000 --- a/demo/usage_example.go +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/examples/gf/go.mod b/examples/gf/gf-example/go.mod similarity index 100% rename from examples/gf/go.mod rename to examples/gf/gf-example/go.mod diff --git a/examples/gf/go.sum b/examples/gf/gf-example/go.sum similarity index 100% rename from examples/gf/go.sum rename to examples/gf/gf-example/go.sum diff --git a/examples/gf/main.go b/examples/gf/gf-example/main.go similarity index 100% rename from examples/gf/main.go rename to examples/gf/gf-example/main.go diff --git a/go.work b/go.work index d760691..b60e2c2 100644 --- a/go.work +++ b/go.work @@ -13,7 +13,7 @@ use ( ./examples/chi/chi-example ./examples/echo/echo-example ./examples/fiber/fiber-example - ./examples/gf + ./examples/gf/gf-example ./examples/gin/gin-example ./examples/gin/gin-simple ./examples/kratos/kratos-example diff --git a/integrations/chi/annotation.go b/integrations/chi/annotation.go index b8ec1d9..cb0fc35 100644 --- a/integrations/chi/annotation.go +++ b/integrations/chi/annotation.go @@ -1,6 +1,8 @@ +// @Author daixk 2025/12/28 package chi import ( + "context" "net/http" "strings" @@ -10,122 +12,246 @@ import ( // Annotation annotation structure | 注解结构体 type Annotation struct { - CheckLogin bool `json:"checkLogin"` - CheckRole []string `json:"checkRole"` - CheckPermission []string `json:"checkPermission"` - CheckDisable bool `json:"checkDisable"` - Ignore bool `json:"ignore"` + AuthType string `json:"authType"` // Optional: specify auth type | 可选:指定认证类型 + CheckLogin bool `json:"checkLogin"` // Check login | 检查登录 + CheckRole []string `json:"checkRole"` // Check roles | 检查角色 + CheckPermission []string `json:"checkPermission"` // Check permissions | 检查权限 + CheckDisable bool `json:"checkDisable"` // Check disable status | 检查封禁状态 + Ignore bool `json:"ignore"` // Ignore authentication | 忽略认证 + LogicType LogicType `json:"logicType"` // OR or AND logic (default: OR) | OR 或 AND 逻辑(默认: OR) } // GetHandler gets handler with annotations | 获取带注解的处理器 -func GetHandler(handler http.Handler, annotations ...*Annotation) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - // Check if authentication should be ignored | 检查是否忽略认证 +func GetHandler(handler http.HandlerFunc, annotations ...*Annotation) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + // Ignore authentication | 忽略认证直接放行 if len(annotations) > 0 && annotations[0].Ignore { if handler != nil { - handler.ServeHTTP(w, r) + handler(w, r) } return } - // Get token from context using configured TokenName | 从上下文获取Token(使用配置的TokenName) - ctx := NewChiContext(w, r) - saCtx := core.NewContext(ctx, stputil.GetManager()) + // Check if any authentication is needed | 检查是否需要任何认证 + ann := &Annotation{} + if len(annotations) > 0 { + ann = annotations[0] + } + + // No authentication required | 无需任何认证 + needAuth := ann.CheckLogin || ann.CheckDisable || len(ann.CheckPermission) > 0 || len(ann.CheckRole) > 0 + if !needAuth { + if handler != nil { + handler(w, r) + } + return + } + + ctx := r.Context() + + // Get manager | 获取 Manager + mgr, err := stputil.GetManager(ann.AuthType) + if err != nil { + writeErrorResponse(w, err) + return + } + + // Get SaTokenContext (reuse cached context) | 获取 SaTokenContext(复用缓存上下文) + chiCtx := NewChiContext(w, r) + saCtx := getSaContext(chiCtx.(*ChiContext), r, mgr) token := saCtx.GetTokenValue() + if token == "" { writeErrorResponse(w, core.NewNotLoginError()) return } // Check login | 检查登录 - if !stputil.IsLogin(token) { - writeErrorResponse(w, core.NewNotLoginError()) + if err := mgr.CheckLogin(ctx, token); err != nil { + writeErrorResponse(w, err) return } - // Get login ID | 获取登录ID - loginID, err := stputil.GetLoginID(token) - if err != nil { - writeErrorResponse(w, err) - return + // Get loginID for further checks | 获取 loginID 用于后续检查 + var loginID string + if ann.CheckDisable || len(ann.CheckPermission) > 0 || len(ann.CheckRole) > 0 { + loginID, err = mgr.GetLoginIDNotCheck(ctx, token) + if err != nil { + writeErrorResponse(w, err) + return + } } // Check if account is disabled | 检查是否被封禁 - if len(annotations) > 0 && annotations[0].CheckDisable { - if stputil.IsDisable(loginID) { + if ann.CheckDisable { + if mgr.IsDisable(ctx, loginID) { writeErrorResponse(w, core.NewAccountDisabledError(loginID)) return } } // Check permission | 检查权限 - if len(annotations) > 0 && len(annotations[0].CheckPermission) > 0 { - hasPermission := false - for _, perm := range annotations[0].CheckPermission { - if stputil.HasPermission(loginID, strings.TrimSpace(perm)) { - hasPermission = true - break - } + if len(ann.CheckPermission) > 0 { + var ok bool + if ann.LogicType == LogicAnd { + ok = mgr.HasPermissionsAnd(ctx, loginID, ann.CheckPermission) + } else { + ok = mgr.HasPermissionsOr(ctx, loginID, ann.CheckPermission) } - if !hasPermission { - writeErrorResponse(w, core.NewPermissionDeniedError(strings.Join(annotations[0].CheckPermission, ","))) + if !ok { + writeErrorResponse(w, core.NewPermissionDeniedError(strings.Join(ann.CheckPermission, ","))) return } } // Check role | 检查角色 - if len(annotations) > 0 && len(annotations[0].CheckRole) > 0 { - hasRole := false - for _, role := range annotations[0].CheckRole { - if stputil.HasRole(loginID, strings.TrimSpace(role)) { - hasRole = true - break - } + if len(ann.CheckRole) > 0 { + var ok bool + if ann.LogicType == LogicAnd { + ok = mgr.HasRolesAnd(ctx, loginID, ann.CheckRole) + } else { + ok = mgr.HasRolesOr(ctx, loginID, ann.CheckRole) } - if !hasRole { - writeErrorResponse(w, core.NewRoleDeniedError(strings.Join(annotations[0].CheckRole, ","))) + if !ok { + writeErrorResponse(w, core.NewRoleDeniedError(strings.Join(ann.CheckRole, ","))) return } } // All checks passed, execute original handler | 所有检查通过,执行原函数 if handler != nil { - handler.ServeHTTP(w, r) + handler(w, r) } - }) + } } -// CheckLoginMiddleware decorator for login checking | 检查登录装饰器 -func CheckLoginMiddleware() func(http.Handler) http.Handler { - return func(next http.Handler) http.Handler { - return GetHandler(next, &Annotation{CheckLogin: true}) +// CheckLoginHandler decorator for login checking | 检查登录装饰器 +func CheckLoginHandler(authType ...string) http.HandlerFunc { + ann := &Annotation{CheckLogin: true} + if len(authType) > 0 { + ann.AuthType = authType[0] } + return GetHandler(nil, ann) +} + +// CheckRoleHandler decorator for role checking | 检查角色装饰器 +func CheckRoleHandler(roles ...string) http.HandlerFunc { + return GetHandler(nil, &Annotation{CheckRole: roles}) } -// CheckRoleMiddleware decorator for role checking | 检查角色装饰器 -func CheckRoleMiddleware(roles ...string) func(http.Handler) http.Handler { - return func(next http.Handler) http.Handler { - return GetHandler(next, &Annotation{CheckRole: roles}) +// CheckRoleHandlerWithAuthType decorator for role checking with auth type | 检查角色装饰器(带认证类型) +func CheckRoleHandlerWithAuthType(authType string, roles ...string) http.HandlerFunc { + return GetHandler(nil, &Annotation{CheckRole: roles, AuthType: authType}) +} + +// CheckPermissionHandler decorator for permission checking | 检查权限装饰器 +func CheckPermissionHandler(perms ...string) http.HandlerFunc { + return GetHandler(nil, &Annotation{CheckPermission: perms}) +} + +// CheckPermissionHandlerWithAuthType decorator for permission checking with auth type | 检查权限装饰器(带认证类型) +func CheckPermissionHandlerWithAuthType(authType string, perms ...string) http.HandlerFunc { + return GetHandler(nil, &Annotation{CheckPermission: perms, AuthType: authType}) +} + +// CheckDisableHandler decorator for checking if account is disabled | 检查是否被封禁装饰器 +func CheckDisableHandler(authType ...string) http.HandlerFunc { + ann := &Annotation{CheckDisable: true} + if len(authType) > 0 { + ann.AuthType = authType[0] } + return GetHandler(nil, ann) +} + +// IgnoreHandler decorator to ignore authentication | 忽略认证装饰器 +func IgnoreHandler() http.HandlerFunc { + return GetHandler(nil, &Annotation{Ignore: true}) +} + +// ============ Combined Handler | 组合处理器 ============ + +// CheckLoginAndRoleHandler checks login and role | 检查登录和角色 +func CheckLoginAndRoleHandler(roles ...string) http.HandlerFunc { + return GetHandler(nil, &Annotation{CheckLogin: true, CheckRole: roles}) +} + +// CheckLoginAndPermissionHandler checks login and permission | 检查登录和权限 +func CheckLoginAndPermissionHandler(perms ...string) http.HandlerFunc { + return GetHandler(nil, &Annotation{CheckLogin: true, CheckPermission: perms}) } -// CheckPermissionMiddleware decorator for permission checking | 检查权限装饰器 -func CheckPermissionMiddleware(perms ...string) func(http.Handler) http.Handler { - return func(next http.Handler) http.Handler { - return GetHandler(next, &Annotation{CheckPermission: perms}) +// CheckAllHandler checks login, role, permission and disable status | 全面检查 +func CheckAllHandler(roles []string, perms []string) http.HandlerFunc { + return GetHandler(nil, &Annotation{ + CheckLogin: true, + CheckRole: roles, + CheckPermission: perms, + CheckDisable: true, + }) +} + +// ============ Context Helper | 上下文辅助函数 ============ + +// GetLoginIDFromRequest gets login ID from request context | 从请求上下文获取登录 ID +func GetLoginIDFromRequest(w http.ResponseWriter, r *http.Request, authType ...string) (string, error) { + var at string + if len(authType) > 0 { + at = authType[0] } + + mgr, err := stputil.GetManager(at) + if err != nil { + return "", err + } + + chiCtx := NewChiContext(w, r) + saCtx := getSaContext(chiCtx.(*ChiContext), r, mgr) + token := saCtx.GetTokenValue() + if token == "" { + return "", core.ErrNotLogin + } + return mgr.GetLoginID(r.Context(), token) } -// CheckDisableMiddleware decorator for checking if account is disabled | 检查是否被封禁装饰器 -func CheckDisableMiddleware() func(http.Handler) http.Handler { - return func(next http.Handler) http.Handler { - return GetHandler(next, &Annotation{CheckDisable: true}) +// IsLoginFromRequest checks if user is logged in from request | 从请求检查用户是否已登录 +func IsLoginFromRequest(w http.ResponseWriter, r *http.Request, authType ...string) bool { + var at string + if len(authType) > 0 { + at = authType[0] } + + mgr, err := stputil.GetManager(at) + if err != nil { + return false + } + + chiCtx := NewChiContext(w, r) + saCtx := getSaContext(chiCtx.(*ChiContext), r, mgr) + token := saCtx.GetTokenValue() + if token == "" { + return false + } + return mgr.IsLogin(r.Context(), token) } -// IgnoreMiddleware decorator to ignore authentication | 忽略认证装饰器 -func IgnoreMiddleware() func(http.Handler) http.Handler { - return func(next http.Handler) http.Handler { - return GetHandler(next, &Annotation{Ignore: true}) +// GetTokenFromRequest gets token from request (exported) | 从请求获取 Token(导出) +func GetTokenFromRequest(w http.ResponseWriter, r *http.Request, authType ...string) string { + var at string + if len(authType) > 0 { + at = authType[0] + } + + mgr, err := stputil.GetManager(at) + if err != nil { + return "" } + + chiCtx := NewChiContext(w, r) + saCtx := getSaContext(chiCtx.(*ChiContext), r, mgr) + return saCtx.GetTokenValue() +} + +// WithContext creates a new context with sa-token context | 创建带 sa-token 上下文的新上下文 +func WithContext(r *http.Request, authType ...string) context.Context { + return r.Context() } diff --git a/integrations/chi/export.go b/integrations/chi/export.go index cc0d812..aaf7e50 100644 --- a/integrations/chi/export.go +++ b/integrations/chi/export.go @@ -1,364 +1,950 @@ package chi import ( + "context" "time" + "github.com/click33/sa-token-go/codec/json" + "github.com/click33/sa-token-go/codec/msgpack" "github.com/click33/sa-token-go/core" + "github.com/click33/sa-token-go/core/adapter" + "github.com/click33/sa-token-go/core/builder" + "github.com/click33/sa-token-go/core/config" + "github.com/click33/sa-token-go/core/listener" + "github.com/click33/sa-token-go/core/manager" + "github.com/click33/sa-token-go/core/oauth2" + "github.com/click33/sa-token-go/core/security" + "github.com/click33/sa-token-go/core/session" + "github.com/click33/sa-token-go/generator/sgenerator" + "github.com/click33/sa-token-go/log/nop" + "github.com/click33/sa-token-go/log/slog" + "github.com/click33/sa-token-go/pool/ants" + "github.com/click33/sa-token-go/storage/memory" + "github.com/click33/sa-token-go/storage/redis" "github.com/click33/sa-token-go/stputil" ) -// ============ Re-export core types | 重新导出核心类型 ============ +// ============ Type Aliases | 类型别名 ============ -// Configuration related types | 配置相关类型 type ( - Config = core.Config - CookieConfig = core.CookieConfig - TokenStyle = core.TokenStyle + // Config 配置 + Config = config.Config + // Manager 管理器 + Manager = manager.Manager + // Session 会话 + Session = session.Session + // TokenInfo Token信息 + TokenInfo = manager.TokenInfo + // DisableInfo 封禁信息 + DisableInfo = manager.DisableInfo + // Builder 构建器 + Builder = builder.Builder + // SaTokenError 错误类型 + SaTokenError = core.SaTokenError + // Event 事件类型 + Event = listener.Event + // EventData 事件数据 + EventData = listener.EventData + // Listener 事件监听器 + Listener = listener.Listener + // ListenerConfig 监听器配置 + ListenerConfig = listener.ListenerConfig + // RefreshTokenInfo 刷新令牌信息 + RefreshTokenInfo = security.RefreshTokenInfo + // AccessTokenInfo 访问令牌信息 + AccessTokenInfo = security.AccessTokenInfo + // OAuth2Client OAuth2客户端 + OAuth2Client = oauth2.Client + // OAuth2AccessToken OAuth2访问令牌 + OAuth2AccessToken = oauth2.AccessToken + // AuthorizationCode 授权码 + AuthorizationCode = oauth2.AuthorizationCode + // OAuth2TokenRequest OAuth2令牌请求 + OAuth2TokenRequest = oauth2.TokenRequest + // OAuth2GrantType OAuth2授权类型 + OAuth2GrantType = oauth2.GrantType + // OAuth2UserValidator OAuth2用户验证器 + OAuth2UserValidator = oauth2.UserValidator + // Storage 存储接口 + Storage = adapter.Storage + // Codec 编解码接口 + Codec = adapter.Codec + // Log 日志接口 + Log = adapter.Log + // Pool 协程池接口 + Pool = adapter.Pool + // Generator 生成器接口 + Generator = adapter.Generator + + // ============ Codec Types | 编解码器类型 ============ + + // JSONSerializer JSON编解码器 + JSONSerializer = json.JSONSerializer + // MsgPackSerializer MsgPack编解码器 + MsgPackSerializer = msgpack.MsgPackSerializer + + // ============ Storage Types | 存储类型 ============ + + // MemoryStorage 内存存储 + MemoryStorage = memory.Storage + // RedisStorage Redis存储 + RedisStorage = redis.Storage + // RedisConfig Redis配置 + RedisConfig = redis.Config + // RedisBuilder Redis构建器 + RedisBuilder = redis.Builder + + // ============ Logger Types | 日志类型 ============ + + // SlogLogger 标准日志实现 + SlogLogger = slog.Logger + // SlogLoggerConfig 标准日志配置 + SlogLoggerConfig = slog.LoggerConfig + // SlogLogLevel 日志级别 + SlogLogLevel = slog.LogLevel + // NopLogger 空日志实现 + NopLogger = nop.NopLogger + + // ============ Generator Types | 生成器类型 ============ + + // TokenGenerator Token生成器 + TokenGenerator = sgenerator.Generator + // TokenStyle Token风格 + TokenStyle = adapter.TokenStyle + + // ============ Pool Types | 协程池类型 ============ + + // RenewPoolManager 续期池管理器 + RenewPoolManager = ants.RenewPoolManager + // RenewPoolConfig 续期池配置 + RenewPoolConfig = ants.RenewPoolConfig ) -// Token style constants | Token风格常量 +// ============ Error Codes | 错误码 ============ + const ( - TokenStyleUUID = core.TokenStyleUUID - TokenStyleSimple = core.TokenStyleSimple - TokenStyleRandom32 = core.TokenStyleRandom32 - TokenStyleRandom64 = core.TokenStyleRandom64 - TokenStyleRandom128 = core.TokenStyleRandom128 - TokenStyleJWT = core.TokenStyleJWT - TokenStyleHash = core.TokenStyleHash - TokenStyleTimestamp = core.TokenStyleTimestamp - TokenStyleTik = core.TokenStyleTik + CodeSuccess = core.CodeSuccess + CodeBadRequest = core.CodeBadRequest + CodeNotLogin = core.CodeNotLogin + CodePermissionDenied = core.CodePermissionDenied + CodeNotFound = core.CodeNotFound + CodeServerError = core.CodeServerError + CodeTokenInvalid = core.CodeTokenInvalid + CodeTokenExpired = core.CodeTokenExpired + CodeAccountDisabled = core.CodeAccountDisabled + CodeKickedOut = core.CodeKickedOut + CodeActiveTimeout = core.CodeActiveTimeout + CodeMaxLoginCount = core.CodeMaxLoginCount + CodeStorageError = core.CodeStorageError + CodeInvalidParameter = core.CodeInvalidParameter + CodeSessionError = core.CodeSessionError ) -// Core types | 核心类型 -type ( - Manager = core.Manager - TokenInfo = core.TokenInfo - Session = core.Session - TokenGenerator = core.TokenGenerator - SaTokenContext = core.SaTokenContext - Builder = core.Builder - NonceManager = core.NonceManager - RefreshTokenInfo = core.RefreshTokenInfo - RefreshTokenManager = core.RefreshTokenManager - OAuth2Server = core.OAuth2Server - OAuth2Client = core.OAuth2Client - OAuth2AccessToken = core.OAuth2AccessToken - OAuth2GrantType = core.OAuth2GrantType -) +// ============ Errors | 错误变量 ============ -// Adapter interfaces | 适配器接口 -type ( - Storage = core.Storage - RequestContext = core.RequestContext +var ( + // Authentication Errors | 认证错误 + ErrNotLogin = core.ErrNotLogin + ErrTokenInvalid = core.ErrTokenInvalid + ErrTokenExpired = core.ErrTokenExpired + ErrTokenKickout = core.ErrTokenKickout + ErrTokenReplaced = core.ErrTokenReplaced + ErrInvalidLoginID = core.ErrInvalidLoginID + ErrInvalidDevice = core.ErrInvalidDevice + ErrTokenNotFound = core.ErrTokenNotFound + + // Authorization Errors | 授权错误 + ErrPermissionDenied = core.ErrPermissionDenied + ErrRoleDenied = core.ErrRoleDenied + + // Account Errors | 账号错误 + ErrAccountDisabled = core.ErrAccountDisabled + ErrAccountNotFound = core.ErrAccountNotFound + ErrLoginLimitExceeded = core.ErrLoginLimitExceeded + + // Session Errors | 会话错误 + ErrSessionNotFound = core.ErrSessionNotFound + ErrActiveTimeout = core.ErrActiveTimeout + ErrSessionInvalidDataKey = core.ErrSessionInvalidDataKey + ErrSessionIDEmpty = core.ErrSessionIDEmpty + + // Security Errors | 安全错误 + ErrInvalidNonce = core.ErrInvalidNonce + ErrRefreshTokenExpired = core.ErrRefreshTokenExpired + ErrNonceInvalidRefreshToken = core.ErrNonceInvalidRefreshToken + ErrInvalidLoginIDEmpty = core.ErrInvalidLoginIDEmpty + + // OAuth2 Errors | OAuth2错误 + ErrClientOrClientIDEmpty = core.ErrClientOrClientIDEmpty + ErrClientNotFound = core.ErrClientNotFound + ErrUserIDEmpty = core.ErrUserIDEmpty + ErrInvalidRedirectURI = core.ErrInvalidRedirectURI + ErrInvalidClientCredentials = core.ErrInvalidClientCredentials + ErrInvalidAuthCode = core.ErrInvalidAuthCode + ErrAuthCodeUsed = core.ErrAuthCodeUsed + ErrAuthCodeExpired = core.ErrAuthCodeExpired + ErrClientMismatch = core.ErrClientMismatch + ErrRedirectURIMismatch = core.ErrRedirectURIMismatch + ErrInvalidAccessToken = core.ErrInvalidAccessToken + ErrInvalidRefreshToken = core.ErrInvalidRefreshToken + ErrInvalidScope = core.ErrInvalidScope + + // System Errors | 系统错误 + ErrStorageUnavailable = core.ErrStorageUnavailable + ErrSerializeFailed = core.ErrSerializeFailed + ErrDeserializeFailed = core.ErrDeserializeFailed + ErrTypeConvert = core.ErrTypeConvert ) -// Event related types | 事件相关类型 -type ( - EventListener = core.EventListener - EventManager = core.EventManager - EventData = core.EventData - Event = core.Event - ListenerFunc = core.ListenerFunc - ListenerConfig = core.ListenerConfig -) +// ============ Error Constructors | 错误构造函数 ============ -// Event constants | 事件常量 -const ( - EventLogin = core.EventLogin - EventLogout = core.EventLogout - EventKickout = core.EventKickout - EventDisable = core.EventDisable - EventUntie = core.EventUntie - EventRenew = core.EventRenew - EventCreateSession = core.EventCreateSession - EventDestroySession = core.EventDestroySession - EventPermissionCheck = core.EventPermissionCheck - EventRoleCheck = core.EventRoleCheck - EventAll = core.EventAll +var ( + NewError = core.NewError + NewErrorWithContext = core.NewErrorWithContext + NewNotLoginError = core.NewNotLoginError + NewPermissionDeniedError = core.NewPermissionDeniedError + NewRoleDeniedError = core.NewRoleDeniedError + NewAccountDisabledError = core.NewAccountDisabledError ) -// OAuth2 grant type constants | OAuth2授权类型常量 -const ( - GrantTypeAuthorizationCode = core.GrantTypeAuthorizationCode - GrantTypeRefreshToken = core.GrantTypeRefreshToken - GrantTypeClientCredentials = core.GrantTypeClientCredentials - GrantTypePassword = core.GrantTypePassword -) +// ============ Error Checking Helpers | 错误检查辅助函数 ============ -// Utility functions | 工具函数 var ( - RandomString = core.RandomString - IsEmpty = core.IsEmpty - IsNotEmpty = core.IsNotEmpty - DefaultString = core.DefaultString - ContainsString = core.ContainsString - RemoveString = core.RemoveString - UniqueStrings = core.UniqueStrings - MergeStrings = core.MergeStrings - MatchPattern = core.MatchPattern + IsNotLoginError = core.IsNotLoginError + IsPermissionDeniedError = core.IsPermissionDeniedError + IsAccountDisabledError = core.IsAccountDisabledError + IsTokenError = core.IsTokenError + GetErrorCode = core.GetErrorCode ) -// ============ Core constructor functions | 核心构造函数 ============ +// ============ Manager Management | Manager 管理 ============ + +// SetManager stores the manager-example in the global map using the specified autoType | 使用指定的 autoType 将管理器存储在全局 map 中 +func SetManager(mgr *manager.Manager) { + stputil.SetManager(mgr) +} + +// GetManager retrieves the manager-example from the global map using the specified autoType | 使用指定的 autoType 从全局 map 中获取管理器 +func GetManager(autoType ...string) (*manager.Manager, error) { + return stputil.GetManager(autoType...) +} -// DefaultConfig returns log configuration | 返回默认配置 -func DefaultConfig() *Config { - return core.DefaultConfig() +// DeleteManager delete the specific manager-example for the given autoType and releases resources | 删除指定的管理器并释放资源 +func DeleteManager(autoType ...string) error { + return stputil.DeleteManager(autoType...) } -// NewManager creates a new authentication manager-example | 创建新的认证管理器 -func NewManager(storage Storage, cfg *Config) *Manager { - return core.NewManager(storage, cfg) +// DeleteAllManager delete all managers in the global map and releases resources | 关闭所有管理器并释放资源 +func DeleteAllManager() { + stputil.DeleteAllManager() } -// NewContext creates a new Sa-Token context | 创建新的Sa-Token上下文 -func NewContext(ctx RequestContext, mgr *Manager) *SaTokenContext { - return core.NewContext(ctx, mgr) +// ============ Builder & Config | 构建器和配置 ============ + +// NewDefaultBuild creates a new default builder | 创建默认构建器 +func NewDefaultBuild() *builder.Builder { + return builder.NewBuilder() } -// NewSession creates a new session | 创建新的Session -func NewSession(id string, storage Storage, prefix string) *Session { - return core.NewSession(id, storage, prefix) +// NewDefaultConfig creates a new default config | 创建默认配置 +func NewDefaultConfig() *config.Config { + return config.DefaultConfig() } -// LoadSession loads an existing session | 加载已存在的Session -func LoadSession(id string, storage Storage, prefix string) (*Session, error) { - return core.LoadSession(id, storage, prefix) +// DefaultLoggerConfig returns the default logger config | 返回默认日志配置 +func DefaultLoggerConfig() *slog.LoggerConfig { + return slog.DefaultLoggerConfig() } -// NewTokenGenerator creates a new token generator | 创建新的Token生成器 -func NewTokenGenerator(cfg *Config) *TokenGenerator { - return core.NewTokenGenerator(cfg) +// DefaultRenewPoolConfig returns the default renew pool config | 返回默认续期池配置 +func DefaultRenewPoolConfig() *ants.RenewPoolConfig { + return ants.DefaultRenewPoolConfig() } -// NewEventManager creates a new event manager-example | 创建新的事件管理器 -func NewEventManager() *EventManager { - return core.NewEventManager() +// ============ Codec Constructors | 编解码器构造函数 ============ + +// NewJSONSerializer creates a new JSON serializer | 创建JSON序列化器 +func NewJSONSerializer() *json.JSONSerializer { + return json.NewJSONSerializer() } -// NewBuilder creates a new builder for fluent configuration | 创建新的Builder构建器(用于流式配置) -func NewBuilder() *Builder { - return core.NewBuilder() +// NewMsgPackSerializer creates a new MsgPack serializer | 创建MsgPack序列化器 +func NewMsgPackSerializer() *msgpack.MsgPackSerializer { + return msgpack.NewMsgPackSerializer() } -// NewNonceManager creates a new nonce manager-example | 创建新的Nonce管理器 -func NewNonceManager(storage Storage, prefix string, ttl ...int64) *NonceManager { - return core.NewNonceManager(storage, prefix, ttl...) +// ============ Storage Constructors | 存储构造函数 ============ + +// NewMemoryStorage creates a new memory storage | 创建内存存储 +func NewMemoryStorage() *memory.Storage { + return memory.NewStorage() } -// NewRefreshTokenManager creates a new refresh token manager-example | 创建新的刷新令牌管理器 -func NewRefreshTokenManager(storage Storage, prefix string, cfg *Config) *RefreshTokenManager { - return core.NewRefreshTokenManager(storage, prefix, cfg) +// NewMemoryStorageWithCleanupInterval creates a new memory storage with cleanup interval | 创建带清理间隔的内存存储 +func NewMemoryStorageWithCleanupInterval(interval time.Duration) *memory.Storage { + return memory.NewStorageWithCleanupInterval(interval) } -// NewOAuth2Server creates a new OAuth2 server | 创建新的OAuth2服务器 -func NewOAuth2Server(storage Storage, prefix string) *OAuth2Server { - return core.NewOAuth2Server(storage, prefix) +// NewRedisStorage creates a new Redis storage from URL | 通过URL创建Redis存储 +func NewRedisStorage(url string) (*redis.Storage, error) { + return redis.NewStorage(url) } -// ============ Global StpUtil functions | 全局StpUtil函数 ============ +// NewRedisStorageFromConfig creates a new Redis storage from config | 通过配置创建Redis存储 +func NewRedisStorageFromConfig(cfg *redis.Config) (*redis.Storage, error) { + return redis.NewStorageFromConfig(cfg) +} -// SetManager sets the global Manager (must be called first) | 设置全局Manager(必须先调用此方法) -func SetManager(mgr *Manager) { - stputil.SetManager(mgr) +// NewRedisBuilder creates a new Redis builder | 创建Redis构建器 +func NewRedisBuilder() *redis.Builder { + return redis.NewBuilder() +} + +// ============ Logger Constructors | 日志构造函数 ============ + +// NewSlogLogger creates a new slog logger with config | 使用配置创建标准日志器 +func NewSlogLogger(cfg *slog.LoggerConfig) (*slog.Logger, error) { + return slog.NewLoggerWithConfig(cfg) } -// GetManager gets the global Manager | 获取全局Manager -func GetManager() *Manager { - return stputil.GetManager() +// NewNopLogger creates a new no-op logger | 创建空日志器 +func NewNopLogger() *nop.NopLogger { + return nop.NewNopLogger() } +// ============ Generator Constructors | 生成器构造函数 ============ + +// NewTokenGenerator creates a new token generator | 创建Token生成器 +func NewTokenGenerator(timeout int64, tokenStyle adapter.TokenStyle, jwtSecretKey string) *sgenerator.Generator { + return sgenerator.NewGenerator(timeout, tokenStyle, jwtSecretKey) +} + +// NewDefaultTokenGenerator creates a new default token generator | 创建默认Token生成器 +func NewDefaultTokenGenerator() *sgenerator.Generator { + return sgenerator.NewDefaultGenerator() +} + +// ============ Pool Constructors | 协程池构造函数 ============ + +// NewRenewPoolManager creates a new renew pool manager-example with default config | 使用默认配置创建续期池管理器 +func NewRenewPoolManager() *ants.RenewPoolManager { + return ants.NewRenewPoolManagerWithDefaultConfig() +} + +// NewRenewPoolManagerWithConfig creates a new renew pool manager-example with config | 使用配置创建续期池管理器 +func NewRenewPoolManagerWithConfig(cfg *ants.RenewPoolConfig) (*ants.RenewPoolManager, error) { + return ants.NewRenewPoolManagerWithConfig(cfg) +} + +// ============ Token Style Constants | Token风格常量 ============ + +const ( + // TokenStyleUUID UUID style | UUID风格 + TokenStyleUUID = adapter.TokenStyleUUID + // TokenStyleSimple Simple random string | 简单随机字符串 + TokenStyleSimple = adapter.TokenStyleSimple + // TokenStyleRandom32 32-bit random string | 32位随机字符串 + TokenStyleRandom32 = adapter.TokenStyleRandom32 + // TokenStyleRandom64 64-bit random string | 64位随机字符串 + TokenStyleRandom64 = adapter.TokenStyleRandom64 + // TokenStyleRandom128 128-bit random string | 128位随机字符串 + TokenStyleRandom128 = adapter.TokenStyleRandom128 + // TokenStyleJWT JWT style | JWT风格 + TokenStyleJWT = adapter.TokenStyleJWT + // TokenStyleHash SHA256 hash-based style | SHA256哈希风格 + TokenStyleHash = adapter.TokenStyleHash + // TokenStyleTimestamp Timestamp-based style | 时间戳风格 + TokenStyleTimestamp = adapter.TokenStyleTimestamp + // TokenStyleTik Short ID style (like TikTok) | Tik风格短ID + TokenStyleTik = adapter.TokenStyleTik +) + +// ============ Log Level Constants | 日志级别常量 ============ + +const ( + // LogLevelDebug Debug level | 调试级别 + LogLevelDebug = adapter.LogLevelDebug + // LogLevelInfo Info level | 信息级别 + LogLevelInfo = adapter.LogLevelInfo + // LogLevelWarn Warn level | 警告级别 + LogLevelWarn = adapter.LogLevelWarn + // LogLevelError Error level | 错误级别 + LogLevelError = adapter.LogLevelError +) + // ============ Authentication | 登录认证 ============ // Login performs user login | 用户登录 -func Login(loginID interface{}, device ...string) (string, error) { - return stputil.Login(loginID, device...) +func Login(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) (string, error) { + return stputil.Login(ctx, loginID, deviceOrAutoType...) } // LoginByToken performs login with specified token | 使用指定Token登录 -func LoginByToken(loginID interface{}, tokenValue string, device ...string) error { - return stputil.LoginByToken(loginID, tokenValue, device...) +func LoginByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.LoginByToken(ctx, tokenValue, authType...) } // Logout performs user logout | 用户登出 -func Logout(loginID interface{}, device ...string) error { - return stputil.Logout(loginID, device...) +func Logout(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) error { + return stputil.Logout(ctx, loginID, deviceOrAutoType...) } // LogoutByToken performs logout by token | 根据Token登出 -func LogoutByToken(tokenValue string) error { - return stputil.LogoutByToken(tokenValue) +func LogoutByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.LogoutByToken(ctx, tokenValue, authType...) +} + +// Kickout kicks out a user session | 踢人下线 +func Kickout(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) error { + return stputil.Kickout(ctx, loginID, deviceOrAutoType...) +} + +// KickoutByToken Kick user offline | 根据Token踢人下线 +func KickoutByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.KickoutByToken(ctx, tokenValue, authType...) +} + +// Replace user offline by login ID and device | 根据账号和设备顶人下线 +func Replace(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) error { + return stputil.Replace(ctx, loginID, deviceOrAutoType...) +} + +// ReplaceByToken Replace user offline by token | 根据Token顶人下线 +func ReplaceByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.ReplaceByToken(ctx, tokenValue, authType...) } +// ============ Token Validation | Token验证 ============ + // IsLogin checks if the user is logged in | 检查用户是否已登录 -func IsLogin(tokenValue string) bool { - return stputil.IsLogin(tokenValue) +func IsLogin(ctx context.Context, tokenValue string, authType ...string) bool { + return stputil.IsLogin(ctx, tokenValue, authType...) } // CheckLogin checks login status (throws error if not logged in) | 检查登录状态(未登录抛出错误) -func CheckLogin(tokenValue string) error { - return stputil.CheckLogin(tokenValue) +func CheckLogin(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.CheckLogin(ctx, tokenValue, authType...) +} + +// CheckLoginWithState checks the login status (returns error to determine the reason if not logged in) | 检查登录状态(未登录时根据错误确定原因) +func CheckLoginWithState(ctx context.Context, tokenValue string, authType ...string) (bool, error) { + return stputil.CheckLoginWithState(ctx, tokenValue, authType...) } // GetLoginID gets the login ID from token | 从Token获取登录ID -func GetLoginID(tokenValue string) (string, error) { - return stputil.GetLoginID(tokenValue) +func GetLoginID(ctx context.Context, tokenValue string, authType ...string) (string, error) { + return stputil.GetLoginID(ctx, tokenValue, authType...) } -// GetLoginIDNotCheck gets login ID without checking | 获取登录ID(不检查) -func GetLoginIDNotCheck(tokenValue string) (string, error) { - return stputil.GetLoginIDNotCheck(tokenValue) +// GetLoginIDNotCheck gets login ID without checking | 获取登录ID(不检查登录状态) +func GetLoginIDNotCheck(ctx context.Context, tokenValue string, authType ...string) (string, error) { + return stputil.GetLoginIDNotCheck(ctx, tokenValue, authType...) } // GetTokenValue gets the token value for a login ID | 获取登录ID对应的Token值 -func GetTokenValue(loginID interface{}, device ...string) (string, error) { - return stputil.GetTokenValue(loginID, device...) +func GetTokenValue(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) (string, error) { + return stputil.GetTokenValue(ctx, loginID, deviceOrAutoType...) } // GetTokenInfo gets token information | 获取Token信息 -func GetTokenInfo(tokenValue string) (*TokenInfo, error) { - return stputil.GetTokenInfo(tokenValue) +func GetTokenInfo(ctx context.Context, tokenValue string, authType ...string) (*manager.TokenInfo, error) { + return stputil.GetTokenInfo(ctx, tokenValue, authType...) } -// ============ Kickout | 踢人下线 ============ +// ============ Account Disable | 账号封禁 ============ -// Kickout kicks out a user session | 踢人下线 -func Kickout(loginID interface{}, device ...string) error { - return stputil.Kickout(loginID, device...) +// Disable disables an account for specified duration | 封禁账号(指定时长) +func Disable(ctx context.Context, loginID interface{}, duration time.Duration, authType ...string) error { + return stputil.Disable(ctx, loginID, duration, authType...) } -// ============ Account Disable | 账号封禁 ============ +// DisableByToken disables the account associated with the given token for a duration | 根据指定 Token 封禁其对应的账号 +func DisableByToken(ctx context.Context, tokenValue string, duration time.Duration, authType ...string) error { + return stputil.DisableByToken(ctx, tokenValue, duration, authType...) +} -// Disable disables an account for specified duration | 封禁账号(指定时长) -func Disable(loginID interface{}, duration time.Duration) error { - return stputil.Disable(loginID, duration) +// Untie re-enables a disabled account | 解封账号 +func Untie(ctx context.Context, loginID interface{}, authType ...string) error { + return stputil.Untie(ctx, loginID, authType...) +} + +// UntieByToken re-enables a disabled account by token | 根据Token解封账号 +func UntieByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.UntieByToken(ctx, tokenValue, authType...) } // IsDisable checks if an account is disabled | 检查账号是否被封禁 -func IsDisable(loginID interface{}) bool { - return stputil.IsDisable(loginID) +func IsDisable(ctx context.Context, loginID interface{}, authType ...string) bool { + return stputil.IsDisable(ctx, loginID, authType...) } -// CheckDisable checks if account is disabled (throws error if disabled) | 检查账号是否被封禁(被封禁则抛出错误) -func CheckDisableByToken(tokenValue string) error { - return stputil.CheckDisable(tokenValue) +// IsDisableByToken checks if an account is disabled by token | 根据Token检查账号是否被封禁 +func IsDisableByToken(ctx context.Context, tokenValue string, authType ...string) bool { + return stputil.IsDisableByToken(ctx, tokenValue, authType...) } -// GetDisableTime gets remaining disabled time | 获取账号剩余封禁时间 -func GetDisableTime(loginID interface{}) (int64, error) { - return stputil.GetDisableTime(loginID) +// GetDisableTime gets remaining disable time in seconds | 获取剩余封禁时间(秒) +func GetDisableTime(ctx context.Context, loginID interface{}, authType ...string) (int64, error) { + return stputil.GetDisableTime(ctx, loginID, authType...) } -// Untie unties/unlocks an account | 解除账号封禁 -func Untie(loginID interface{}) error { - return stputil.Untie(loginID) +// GetDisableTimeByToken gets remaining disable time by token | 根据Token获取剩余封禁时间(秒) +func GetDisableTimeByToken(ctx context.Context, tokenValue string, authType ...string) (int64, error) { + return stputil.GetDisableTimeByToken(ctx, tokenValue, authType...) } -// ============ Permission Check | 权限验证 ============ +// CheckDisableWithInfo gets disable info | 获取封禁信息 +func CheckDisableWithInfo(ctx context.Context, loginID interface{}, authType ...string) (*manager.DisableInfo, error) { + return stputil.CheckDisableWithInfo(ctx, loginID, authType...) +} -// CheckPermission checks if the account has specified permission | 检查账号是否拥有指定权限 -func CheckPermissionByToken(tokenValue string, permission string) error { - return stputil.CheckPermission(tokenValue, permission) +// CheckDisableWithInfoByToken gets disable info by token | 根据Token获取封禁信息 +func CheckDisableWithInfoByToken(ctx context.Context, tokenValue string, authType ...string) (*manager.DisableInfo, error) { + return stputil.CheckDisableWithInfoByToken(ctx, tokenValue, authType...) } -// HasPermission checks if the account has specified permission (returns bool) | 检查账号是否拥有指定权限(返回布尔值) -func HasPermission(loginID interface{}, permission string) bool { - return stputil.HasPermission(loginID, permission) +// ============ Session Management | Session管理 ============ + +// GetSession gets session by login ID | 根据登录ID获取Session +func GetSession(ctx context.Context, loginID interface{}, authType ...string) (*session.Session, error) { + return stputil.GetSession(ctx, loginID, authType...) +} + +// GetSessionByToken gets session by token | 根据Token获取Session +func GetSessionByToken(ctx context.Context, tokenValue string, authType ...string) (*session.Session, error) { + return stputil.GetSessionByToken(ctx, tokenValue, authType...) } -// CheckPermissionAnd checks if the account has all specified permissions (AND logic) | 检查账号是否拥有所有指定权限(AND逻辑) -func CheckPermissionAndByToken(tokenValue string, permissions []string) error { - return stputil.CheckPermissionAnd(tokenValue, permissions) +// DeleteSession deletes a session | 删除Session +func DeleteSession(ctx context.Context, loginID interface{}, authType ...string) error { + return stputil.DeleteSession(ctx, loginID, authType...) } -// CheckPermissionOr checks if the account has any of the specified permissions (OR logic) | 检查账号是否拥有指定权限中的任意一个(OR逻辑) -func CheckPermissionOrByToken(tokenValue string, permissions []string) error { - return stputil.CheckPermissionOr(tokenValue, permissions) +// DeleteSessionByToken Deletes session by token | 根据Token删除Session +func DeleteSessionByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.DeleteSessionByToken(ctx, tokenValue, authType...) } -// GetPermissionList gets the permission list for an account | 获取账号的权限列表 -func GetPermissionListByToken(tokenValue string) ([]string, error) { - return stputil.GetPermissionList(tokenValue) +// HasSession checks if session exists | 检查Session是否存在 +func HasSession(ctx context.Context, loginID interface{}, authType ...string) bool { + return stputil.HasSession(ctx, loginID, authType...) } -// ============ Role Check | 角色验证 ============ +// RenewSession renews session TTL | 续期Session +func RenewSession(ctx context.Context, loginID interface{}, ttl time.Duration, authType ...string) error { + return stputil.RenewSession(ctx, loginID, ttl, authType...) +} -// CheckRole checks if the account has specified role | 检查账号是否拥有指定角色 -func CheckRoleByToken(tokenValue string, role string) error { - return stputil.CheckRole(tokenValue, role) +// RenewSessionByToken renews session TTL by token | 根据Token续期Session +func RenewSessionByToken(ctx context.Context, tokenValue string, ttl time.Duration, authType ...string) error { + return stputil.RenewSessionByToken(ctx, tokenValue, ttl, authType...) } -// HasRole checks if the account has specified role (returns bool) | 检查账号是否拥有指定角色(返回布尔值) -func HasRole(loginID interface{}, role string) bool { - return stputil.HasRole(loginID, role) +// ============ Permission Verification | 权限验证 ============ + +// SetPermissions sets permissions for a login ID | 设置用户权限 +func SetPermissions(ctx context.Context, loginID interface{}, permissions []string, authType ...string) error { + return stputil.SetPermissions(ctx, loginID, permissions, authType...) } -// CheckRoleAnd checks if the account has all specified roles (AND logic) | 检查账号是否拥有所有指定角色(AND逻辑) -func CheckRoleAndByToken(tokenValue string, roles []string) error { - return stputil.CheckRoleAnd(tokenValue, roles) +// SetPermissionsByToken sets permissions by token | 根据 Token 设置对应账号的权限 +func SetPermissionsByToken(ctx context.Context, tokenValue string, permissions []string, authType ...string) error { + return stputil.SetPermissionsByToken(ctx, tokenValue, permissions, authType...) } -// CheckRoleOr checks if the account has any of the specified roles (OR logic) | 检查账号是否拥有指定角色中的任意一个(OR逻辑) -func CheckRoleOrByToken(tokenValue string, roles []string) error { - return stputil.CheckRoleOr(tokenValue, roles) +// RemovePermissions removes specified permissions for a login ID | 删除用户指定权限 +func RemovePermissions(ctx context.Context, loginID interface{}, permissions []string, authType ...string) error { + return stputil.RemovePermissions(ctx, loginID, permissions, authType...) } -// GetRoleList gets the role list for an account | 获取账号的角色列表 -func GetRoleListByToken(tokenValue string) ([]string, error) { - return stputil.GetRoleList(tokenValue) +// RemovePermissionsByToken removes specified permissions by token | 根据 Token 删除对应账号的指定权限 +func RemovePermissionsByToken(ctx context.Context, tokenValue string, permissions []string, authType ...string) error { + return stputil.RemovePermissionsByToken(ctx, tokenValue, permissions, authType...) } -// ============ Session Management | Session管理 ============ +// GetPermissions gets permission list | 获取权限列表 +func GetPermissions(ctx context.Context, loginID interface{}, authType ...string) ([]string, error) { + return stputil.GetPermissions(ctx, loginID, authType...) +} + +// GetPermissionsByToken gets permission list by token | 根据 Token 获取对应账号的权限列表 +func GetPermissionsByToken(ctx context.Context, tokenValue string, authType ...string) ([]string, error) { + return stputil.GetPermissionsByToken(ctx, tokenValue, authType...) +} + +// HasPermission checks if has specified permission | 检查是否拥有指定权限 +func HasPermission(ctx context.Context, loginID interface{}, permission string, authType ...string) bool { + return stputil.HasPermission(ctx, loginID, permission, authType...) +} + +// HasPermissionByToken checks if the token has the specified permission | 检查Token是否拥有指定权限 +func HasPermissionByToken(ctx context.Context, tokenValue string, permission string, authType ...string) bool { + return stputil.HasPermissionByToken(ctx, tokenValue, permission, authType...) +} + +// HasPermissionsAnd checks if has all permissions (AND logic) | 检查是否拥有所有权限(AND逻辑) +func HasPermissionsAnd(ctx context.Context, loginID interface{}, permissions []string, authType ...string) bool { + return stputil.HasPermissionsAnd(ctx, loginID, permissions, authType...) +} + +// HasPermissionsAndByToken checks if the token has all specified permissions | 检查Token是否拥有所有指定权限 +func HasPermissionsAndByToken(ctx context.Context, tokenValue string, permissions []string, authType ...string) bool { + return stputil.HasPermissionsAndByToken(ctx, tokenValue, permissions, authType...) +} + +// HasPermissionsOr checks if has any permission (OR logic) | 检查是否拥有任一权限(OR逻辑) +func HasPermissionsOr(ctx context.Context, loginID interface{}, permissions []string, authType ...string) bool { + return stputil.HasPermissionsOr(ctx, loginID, permissions, authType...) +} + +// HasPermissionsOrByToken checks if the token has any of the specified permissions | 检查Token是否拥有任一指定权限 +func HasPermissionsOrByToken(ctx context.Context, tokenValue string, permissions []string, authType ...string) bool { + return stputil.HasPermissionsOrByToken(ctx, tokenValue, permissions, authType...) +} + +// ============ Role Management | 角色管理 ============ + +// SetRoles sets roles for a login ID | 设置用户角色 +func SetRoles(ctx context.Context, loginID interface{}, roles []string, authType ...string) error { + return stputil.SetRoles(ctx, loginID, roles, authType...) +} + +// SetRolesByToken sets roles by token | 根据 Token 设置对应账号的角色 +func SetRolesByToken(ctx context.Context, tokenValue string, roles []string, authType ...string) error { + return stputil.SetRolesByToken(ctx, tokenValue, roles, authType...) +} + +// RemoveRoles removes specified roles for a login ID | 删除用户指定角色 +func RemoveRoles(ctx context.Context, loginID interface{}, roles []string, authType ...string) error { + return stputil.RemoveRoles(ctx, loginID, roles, authType...) +} + +// RemoveRolesByToken removes specified roles by token | 根据 Token 删除对应账号的指定角色 +func RemoveRolesByToken(ctx context.Context, tokenValue string, roles []string, authType ...string) error { + return stputil.RemoveRolesByToken(ctx, tokenValue, roles, authType...) +} + +// GetRoles gets role list | 获取角色列表 +func GetRoles(ctx context.Context, loginID interface{}, authType ...string) ([]string, error) { + return stputil.GetRoles(ctx, loginID, authType...) +} + +// GetRolesByToken gets role list by token | 根据 Token 获取对应账号的角色列表 +func GetRolesByToken(ctx context.Context, tokenValue string, authType ...string) ([]string, error) { + return stputil.GetRolesByToken(ctx, tokenValue, authType...) +} + +// HasRole checks if has specified role | 检查是否拥有指定角色 +func HasRole(ctx context.Context, loginID interface{}, role string, authType ...string) bool { + return stputil.HasRole(ctx, loginID, role, authType...) +} + +// HasRoleByToken checks if the token has the specified role | 检查 Token 是否拥有指定角色 +func HasRoleByToken(ctx context.Context, tokenValue string, role string, authType ...string) bool { + return stputil.HasRoleByToken(ctx, tokenValue, role, authType...) +} + +// HasRolesAnd checks if has all roles (AND logic) | 检查是否拥有所有角色(AND逻辑) +func HasRolesAnd(ctx context.Context, loginID interface{}, roles []string, authType ...string) bool { + return stputil.HasRolesAnd(ctx, loginID, roles, authType...) +} -// GetSession gets the session for a login ID | 获取登录ID的Session -func GetSession(loginID interface{}) (*Session, error) { - return stputil.GetSession(loginID) +// HasRolesAndByToken checks if the token has all specified roles | 检查 Token 是否拥有所有指定角色 +func HasRolesAndByToken(ctx context.Context, tokenValue string, roles []string, authType ...string) bool { + return stputil.HasRolesAndByToken(ctx, tokenValue, roles, authType...) } -// GetSessionByToken gets the session by token | 根据Token获取Session -func GetSessionByToken(tokenValue string) (*Session, error) { - return stputil.GetSessionByToken(tokenValue) +// HasRolesOr checks if has any role (OR logic) | 检查是否拥有任一角色(OR逻辑) +func HasRolesOr(ctx context.Context, loginID interface{}, roles []string, authType ...string) bool { + return stputil.HasRolesOr(ctx, loginID, roles, authType...) } -// GetTokenSession gets the token session | 获取Token的Session -func GetTokenSession(tokenValue string) (*Session, error) { - return stputil.GetTokenSession(tokenValue) +// HasRolesOrByToken checks if the token has any of the specified roles | 检查 Token 是否拥有任一指定角色 +func HasRolesOrByToken(ctx context.Context, tokenValue string, roles []string, authType ...string) bool { + return stputil.HasRolesOrByToken(ctx, tokenValue, roles, authType...) } -// ============ Token Renewal | Token续期 ============ +// ============ Token Tag | Token标签 ============ + +// SetTokenTag sets token tag | 设置Token标签 +func SetTokenTag(ctx context.Context, tokenValue, tag string, authType ...string) error { + return stputil.SetTokenTag(ctx, tokenValue, tag, authType...) +} + +// GetTokenTag gets token tag | 获取Token标签 +func GetTokenTag(ctx context.Context, tokenValue string, authType ...string) (string, error) { + return stputil.GetTokenTag(ctx, tokenValue, authType...) +} -// RenewTimeout renews token timeout | 续期Token超时时间 +// ============ Session Query | 会话查询 ============ + +// GetTokenValueListByLoginID gets all tokens for a login ID | 获取指定账号的所有Token +func GetTokenValueListByLoginID(ctx context.Context, loginID interface{}, authType ...string) ([]string, error) { + return stputil.GetTokenValueListByLoginID(ctx, loginID, authType...) +} + +// GetSessionCountByLoginID gets session count for a login ID | 获取指定账号的Session数量 +func GetSessionCountByLoginID(ctx context.Context, loginID interface{}, authType ...string) (int, error) { + return stputil.GetSessionCountByLoginID(ctx, loginID, authType...) +} // ============ Security Features | 安全特性 ============ -// GenerateNonce generates a new nonce token | 生成新的Nonce令牌 -func GenerateNonce() (string, error) { - return stputil.GenerateNonce() +// Generate Generates a one-time nonce | 生成一次性随机数 +func Generate(ctx context.Context, authType ...string) (string, error) { + return stputil.Generate(ctx, authType...) +} + +// Verify Verifies a nonce | 验证随机数 +func Verify(ctx context.Context, nonce string, authType ...string) bool { + return stputil.Verify(ctx, nonce, authType...) } -// VerifyNonce verifies a nonce token | 验证Nonce令牌 -func VerifyNonce(nonce string) bool { - return stputil.VerifyNonce(nonce) +// VerifyAndConsume Verifies and consumes nonce, returns error if invalid | 验证并消费nonce,无效时返回错误 +func VerifyAndConsume(ctx context.Context, nonce string, authType ...string) error { + return stputil.VerifyAndConsume(ctx, nonce, authType...) } -// LoginWithRefreshToken performs login and returns both access token and refresh token | 登录并返回访问令牌和刷新令牌 -func LoginWithRefreshToken(loginID interface{}, device ...string) (*RefreshTokenInfo, error) { - return stputil.LoginWithRefreshToken(loginID, device...) +// IsValidNonce Checks if nonce is valid without consuming it | 检查nonce是否有效(不消费) +func IsValidNonce(ctx context.Context, nonce string, authType ...string) bool { + return stputil.IsValidNonce(ctx, nonce, authType...) } -// RefreshAccessToken refreshes the access token using a refresh token | 使用刷新令牌刷新访问令牌 -func RefreshAccessToken(refreshToken string) (*RefreshTokenInfo, error) { - return stputil.RefreshAccessToken(refreshToken) +// GenerateTokenPair Create access + refresh token | 生成访问令牌和刷新令牌 +func GenerateTokenPair(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) (*security.RefreshTokenInfo, error) { + return stputil.GenerateTokenPair(ctx, loginID, deviceOrAutoType...) } -// RevokeRefreshToken revokes a refresh token | 撤销刷新令牌 -func RevokeRefreshToken(refreshToken string) error { - return stputil.RevokeRefreshToken(refreshToken) +// VerifyAccessToken verifies access token validity | 验证访问令牌是否有效 +func VerifyAccessToken(ctx context.Context, accessToken string, authType ...string) bool { + return stputil.VerifyAccessToken(ctx, accessToken, authType...) +} + +// VerifyAccessTokenAndGetInfo verifies access token and returns token info | 验证访问令牌并返回Token信息 +func VerifyAccessTokenAndGetInfo(ctx context.Context, accessToken string, authType ...string) (*security.AccessTokenInfo, bool) { + return stputil.VerifyAccessTokenAndGetInfo(ctx, accessToken, authType...) +} + +// GetRefreshTokenInfo gets refresh token information | 获取刷新令牌信息 +func GetRefreshTokenInfo(ctx context.Context, refreshToken string, authType ...string) (*security.RefreshTokenInfo, error) { + return stputil.GetRefreshTokenInfo(ctx, refreshToken, authType...) +} + +// RefreshAccessToken refreshes access token using refresh token | 使用刷新令牌刷新访问令牌 +func RefreshAccessToken(ctx context.Context, refreshToken string, authType ...string) (*security.RefreshTokenInfo, error) { + return stputil.RefreshAccessToken(ctx, refreshToken, authType...) +} + +// RevokeRefreshToken Revokes refresh token | 撤销刷新令牌 +func RevokeRefreshToken(ctx context.Context, refreshToken string, authType ...string) error { + return stputil.RevokeRefreshToken(ctx, refreshToken, authType...) +} + +// IsValid checks whether token is valid | 检查Token是否有效 +func IsValid(ctx context.Context, refreshToken string, authType ...string) bool { + return stputil.IsValid(ctx, refreshToken, authType...) +} + +// ============ OAuth2 Features | OAuth2 功能 ============ + +// RegisterClient Registers an OAuth2 client | 注册OAuth2客户端 +func RegisterClient(ctx context.Context, client *oauth2.Client, authType ...string) error { + return stputil.RegisterClient(ctx, client, authType...) } -// GetOAuth2Server gets the OAuth2 server instance | 获取OAuth2服务器实例 -func GetOAuth2Server() *OAuth2Server { - return stputil.GetOAuth2Server() +// UnregisterClient unregisters an OAuth2 client | 注销OAuth2客户端 +func UnregisterClient(ctx context.Context, clientID string, authType ...string) error { + return stputil.UnregisterClient(ctx, clientID, authType...) } -// Version Sa-Token-Go version | Sa-Token-Go版本 -const Version = core.Version +// GetClient gets OAuth2 client information | 获取OAuth2客户端信息 +func GetClient(ctx context.Context, clientID string, authType ...string) (*oauth2.Client, error) { + return stputil.GetClient(ctx, clientID, authType...) +} + +// GenerateAuthorizationCode creates an authorization code | 创建授权码 +func GenerateAuthorizationCode(ctx context.Context, clientID, loginID, redirectURI string, scope []string, authType ...string) (*oauth2.AuthorizationCode, error) { + return stputil.GenerateAuthorizationCode(ctx, clientID, loginID, redirectURI, scope, authType...) +} + +// ExchangeCodeForToken exchanges authorization code for token | 使用授权码换取令牌 +func ExchangeCodeForToken(ctx context.Context, code, clientID, clientSecret, redirectURI string, authType ...string) (*oauth2.AccessToken, error) { + return stputil.ExchangeCodeForToken(ctx, code, clientID, clientSecret, redirectURI, authType...) +} + +// ValidateAccessToken verifies OAuth2 access token | 验证OAuth2访问令牌 +func ValidateAccessToken(ctx context.Context, accessToken string, authType ...string) bool { + return stputil.ValidateAccessToken(ctx, accessToken, authType...) +} + +// ValidateAccessTokenAndGetInfo verifies OAuth2 access token and get info | 验证OAuth2访问令牌并获取信息 +func ValidateAccessTokenAndGetInfo(ctx context.Context, accessToken string, authType ...string) (*oauth2.AccessToken, error) { + return stputil.ValidateAccessTokenAndGetInfo(ctx, accessToken, authType...) +} + +// OAuth2RefreshAccessToken Refreshes access token using refresh token | 使用刷新令牌刷新访问令牌(OAuth2) +func OAuth2RefreshAccessToken(ctx context.Context, clientID, refreshToken, clientSecret string, authType ...string) (*oauth2.AccessToken, error) { + return stputil.OAuth2RefreshAccessToken(ctx, clientID, refreshToken, clientSecret, authType...) +} + +// RevokeToken Revokes access token and its refresh token | 撤销访问令牌及其刷新令牌 +func RevokeToken(ctx context.Context, accessToken string, authType ...string) error { + return stputil.RevokeToken(ctx, accessToken, authType...) +} + +// OAuth2Token Unified token endpoint that dispatches to appropriate handler based on grant type | 统一的令牌端点 +func OAuth2Token(ctx context.Context, req *oauth2.TokenRequest, validateUser oauth2.UserValidator, authType ...string) (*oauth2.AccessToken, error) { + return stputil.OAuth2Token(ctx, req, validateUser, authType...) +} + +// OAuth2ClientCredentialsToken Gets access token using client credentials grant | 使用客户端凭证模式获取访问令牌 +func OAuth2ClientCredentialsToken(ctx context.Context, clientID, clientSecret string, scopes []string, authType ...string) (*oauth2.AccessToken, error) { + return stputil.OAuth2ClientCredentialsToken(ctx, clientID, clientSecret, scopes, authType...) +} + +// OAuth2PasswordGrantToken Gets access token using resource owner password credentials grant | 使用密码模式获取访问令牌 +func OAuth2PasswordGrantToken(ctx context.Context, clientID, clientSecret, username, password string, scopes []string, validateUser oauth2.UserValidator, authType ...string) (*oauth2.AccessToken, error) { + return stputil.OAuth2PasswordGrantToken(ctx, clientID, clientSecret, username, password, scopes, validateUser, authType...) +} + +// ============ OAuth2 Grant Type Constants | OAuth2授权类型常量 ============ + +const ( + // GrantTypeAuthorizationCode Authorization code grant type | 授权码模式 + GrantTypeAuthorizationCode = oauth2.GrantTypeAuthorizationCode + // GrantTypeClientCredentials Client credentials grant type | 客户端凭证模式 + GrantTypeClientCredentials = oauth2.GrantTypeClientCredentials + // GrantTypePassword Password grant type | 密码模式 + GrantTypePassword = oauth2.GrantTypePassword + // GrantTypeRefreshToken Refresh token grant type | 刷新令牌模式 + GrantTypeRefreshToken = oauth2.GrantTypeRefreshToken +) + +// ============ Public Getters | 公共获取器 ============ + +// GetConfig returns the manager-example configuration | 获取 Manager 当前使用的配置 +func GetConfig(ctx context.Context, authType ...string) *config.Config { + return stputil.GetConfig(ctx, authType...) +} + +// GetStorage returns the storage adapter | 获取 Manager 使用的存储适配器 +func GetStorage(ctx context.Context, authType ...string) adapter.Storage { + return stputil.GetStorage(ctx, authType...) +} + +// GetCodec returns the codec (serializer) | 获取 Manager 使用的编解码器 +func GetCodec(ctx context.Context, authType ...string) adapter.Codec { + return stputil.GetCodec(ctx, authType...) +} + +// GetLog returns the logger adapter | 获取 Manager 使用的日志适配器 +func GetLog(ctx context.Context, authType ...string) adapter.Log { + return stputil.GetLog(ctx, authType...) +} + +// GetPool returns the goroutine pool | 获取 Manager 使用的协程池 +func GetPool(ctx context.Context, authType ...string) adapter.Pool { + return stputil.GetPool(ctx, authType...) +} + +// GetGenerator returns the token generator | 获取 Token 生成器 +func GetGenerator(ctx context.Context, authType ...string) adapter.Generator { + return stputil.GetGenerator(ctx, authType...) +} + +// GetNonceManager returns the nonce manager-example | 获取随机串管理器 +func GetNonceManager(ctx context.Context, authType ...string) *security.NonceManager { + return stputil.GetNonceManager(ctx, authType...) +} + +// GetRefreshManager returns the refresh token manager-example | 获取刷新令牌管理器 +func GetRefreshManager(ctx context.Context, authType ...string) *security.RefreshTokenManager { + return stputil.GetRefreshManager(ctx, authType...) +} + +// GetEventManager returns the event manager-example | 获取事件管理器 +func GetEventManager(ctx context.Context, authType ...string) *listener.Manager { + return stputil.GetEventManager(ctx, authType...) +} + +// GetOAuth2Server Gets OAuth2 server instance | 获取OAuth2服务器实例 +func GetOAuth2Server(ctx context.Context, authType ...string) *oauth2.OAuth2Server { + return stputil.GetOAuth2Server(ctx, authType...) +} + +// ============ Event Management | 事件管理 ============ + +// RegisterFunc registers a function as an event listener | 注册函数作为事件监听器 +func RegisterFunc(event listener.Event, fn func(*listener.EventData), authType ...string) { + stputil.RegisterFunc(event, fn, authType...) +} + +// Register registers an event listener | 注册事件监听器 +func Register(event listener.Event, l listener.Listener, authType ...string) string { + return stputil.Register(event, l, authType...) +} + +// RegisterWithConfig registers an event listener with config | 注册带配置的事件监听器 +func RegisterWithConfig(event listener.Event, l listener.Listener, cfg listener.ListenerConfig, authType ...string) string { + return stputil.RegisterWithConfig(event, l, cfg, authType...) +} + +// Unregister removes an event listener by ID | 根据ID移除事件监听器 +func Unregister(id string, authType ...string) bool { + return stputil.Unregister(id, authType...) +} + +// TriggerEvent manually triggers an event | 手动触发事件 +func TriggerEvent(data *listener.EventData, authType ...string) { + stputil.TriggerEvent(data, authType...) +} + +// TriggerEventAsync triggers an event asynchronously and returns immediately | 异步触发事件并立即返回 +func TriggerEventAsync(data *listener.EventData, authType ...string) { + stputil.TriggerEventAsync(data, authType...) +} + +// TriggerEventSync triggers an event synchronously and waits for all listeners | 同步触发事件并等待所有监听器完成 +func TriggerEventSync(data *listener.EventData, authType ...string) { + stputil.TriggerEventSync(data, authType...) +} + +// WaitEvents waits for all async event listeners to complete | 等待所有异步事件监听器完成 +func WaitEvents(authType ...string) { + stputil.WaitEvents(authType...) +} + +// ClearEventListeners removes all listeners for a specific event | 清除指定事件的所有监听器 +func ClearEventListeners(event listener.Event, authType ...string) { + stputil.ClearEventListeners(event, authType...) +} + +// ClearAllEventListeners removes all listeners | 清除所有事件监听器 +func ClearAllEventListeners(authType ...string) { + stputil.ClearAllEventListeners(authType...) +} + +// CountEventListeners returns the number of listeners for a specific event | 获取指定事件监听器数量 +func CountEventListeners(event listener.Event, authType ...string) int { + return stputil.CountEventListeners(event, authType...) +} + +// CountAllListeners returns the total number of registered listeners | 获取已注册监听器总数 +func CountAllListeners(authType ...string) int { + return stputil.CountAllListeners(authType...) +} + +// GetEventListenerIDs returns all listener IDs for a specific event | 获取指定事件的所有监听器ID +func GetEventListenerIDs(event listener.Event, authType ...string) []string { + return stputil.GetEventListenerIDs(event, authType...) +} + +// GetAllRegisteredEvents returns all events that have registered listeners | 获取所有已注册事件 +func GetAllRegisteredEvents(authType ...string) []listener.Event { + return stputil.GetAllRegisteredEvents(authType...) +} + +// HasEventListeners checks if there are any listeners for a specific event | 检查指定事件是否有监听器 +func HasEventListeners(event listener.Event, authType ...string) bool { + return stputil.HasEventListeners(event, authType...) +} diff --git a/integrations/chi/middleware.go b/integrations/chi/middleware.go new file mode 100644 index 0000000..9babd90 --- /dev/null +++ b/integrations/chi/middleware.go @@ -0,0 +1,342 @@ +package chi + +import ( + "encoding/json" + "errors" + "net/http" + + "github.com/click33/sa-token-go/core" + "github.com/click33/sa-token-go/core/manager" + + saContext "github.com/click33/sa-token-go/core/context" + "github.com/click33/sa-token-go/stputil" +) + +// LogicType permission/role logic type | 权限/角色判断逻辑 +type LogicType string + +const ( + SaTokenCtxKey = "saCtx" + + LogicOr LogicType = "OR" // Logical OR | 任一满足 + LogicAnd LogicType = "AND" // Logical AND | 全部满足 +) + +type AuthOption func(*AuthOptions) + +type AuthOptions struct { + AuthType string + LogicType LogicType + AuthFailFunc func(w http.ResponseWriter, r *http.Request, err error) +} + +func defaultAuthOptions() *AuthOptions { + return &AuthOptions{LogicType: LogicAnd} // 默认 AND +} + +// WithAuthType sets auth type | 设置认证类型 +func WithAuthType(authType string) AuthOption { + return func(o *AuthOptions) { + o.AuthType = authType + } +} + +// WithLogicType sets LogicType option | 设置逻辑类型 +func WithLogicType(logicType LogicType) AuthOption { + return func(o *AuthOptions) { + o.LogicType = logicType + } +} + +// WithAuthFailFunc sets auth failure callback | 设置认证失败回调 +func WithAuthFailFunc(fn func(w http.ResponseWriter, r *http.Request, err error)) AuthOption { + return func(o *AuthOptions) { + o.AuthFailFunc = fn + } +} + +// ========== Middlewares ========== + +// AuthMiddleware authentication middleware | 认证中间件 +func AuthMiddleware(opts ...AuthOption) func(http.Handler) http.Handler { + options := defaultAuthOptions() + for _, opt := range opts { + opt(options) + } + + return func(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + mgr, err := stputil.GetManager(options.AuthType) + if err != nil { + if options.AuthFailFunc != nil { + options.AuthFailFunc(w, r, err) + } else { + writeErrorResponse(w, err) + } + return + } + + // 获取 token | Get token + ctx := NewChiContext(w, r) + saCtx := getSaContext(ctx.(*ChiContext), r, mgr) + tokenValue := saCtx.GetTokenValue() + + // 检查登录 | Check login + err = mgr.CheckLogin(r.Context(), tokenValue) + if err != nil { + if options.AuthFailFunc != nil { + options.AuthFailFunc(w, r, err) + } else { + writeErrorResponse(w, err) + } + return + } + + next.ServeHTTP(w, r) + }) + } +} + +// AuthWithStateMiddleware with state authentication middleware | 带状态返回的认证中间件 +func AuthWithStateMiddleware(opts ...AuthOption) func(http.Handler) http.Handler { + options := defaultAuthOptions() + for _, opt := range opts { + opt(options) + } + + return func(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + // 获取 Manager | Get Manager + mgr, err := stputil.GetManager(options.AuthType) + if err != nil { + if options.AuthFailFunc != nil { + options.AuthFailFunc(w, r, err) + } else { + writeErrorResponse(w, err) + } + return + } + + // 构建 Sa-Token 上下文 | Build Sa-Token context + ctx := NewChiContext(w, r) + saCtx := getSaContext(ctx.(*ChiContext), r, mgr) + tokenValue := saCtx.GetTokenValue() + + // 检查登录并返回状态 | Check login with state + _, err = mgr.CheckLoginWithState(r.Context(), tokenValue) + + if err != nil { + // 用户自定义回调优先 + if options.AuthFailFunc != nil { + options.AuthFailFunc(w, r, err) + } else { + writeErrorResponse(w, err) + } + + return + } + + next.ServeHTTP(w, r) + }) + } +} + +// PermissionMiddleware permission check middleware | 权限校验中间件 +func PermissionMiddleware( + permissions []string, + opts ...AuthOption, +) func(http.Handler) http.Handler { + + options := defaultAuthOptions() + for _, opt := range opts { + opt(options) + } + + return func(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + // No permission required | 无需权限直接放行 + if len(permissions) == 0 { + next.ServeHTTP(w, r) + return + } + + // Get Manager | 获取 Manager + mgr, err := stputil.GetManager(options.AuthType) + if err != nil { + if options.AuthFailFunc != nil { + options.AuthFailFunc(w, r, err) + } else { + writeErrorResponse(w, err) + } + return + } + + // 构建 Sa-Token 上下文 | Build Sa-Token context + ctx := NewChiContext(w, r) + saCtx := getSaContext(ctx.(*ChiContext), r, mgr) + tokenValue := saCtx.GetTokenValue() + reqCtx := r.Context() + + // Permission check | 权限校验 + var ok bool + if options.LogicType == LogicAnd { + ok = mgr.HasPermissionsAndByToken(reqCtx, tokenValue, permissions) + } else { + ok = mgr.HasPermissionsOrByToken(reqCtx, tokenValue, permissions) + } + + if !ok { + if options.AuthFailFunc != nil { + options.AuthFailFunc(w, r, core.ErrPermissionDenied) + } else { + writeErrorResponse(w, core.ErrPermissionDenied) + } + return + } + + next.ServeHTTP(w, r) + }) + } +} + +// RoleMiddleware role check middleware | 角色校验中间件 +func RoleMiddleware( + roles []string, + opts ...AuthOption, +) func(http.Handler) http.Handler { + + options := defaultAuthOptions() + for _, opt := range opts { + opt(options) + } + + return func(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + // No role required | 无需角色直接放行 + if len(roles) == 0 { + next.ServeHTTP(w, r) + return + } + + // Get Manager | 获取 Manager + mgr, err := stputil.GetManager(options.AuthType) + if err != nil { + if options.AuthFailFunc != nil { + options.AuthFailFunc(w, r, err) + } else { + writeErrorResponse(w, err) + } + return + } + + // 构建 Sa-Token 上下文 | Build Sa-Token context + ctx := NewChiContext(w, r) + saCtx := getSaContext(ctx.(*ChiContext), r, mgr) + tokenValue := saCtx.GetTokenValue() + reqCtx := r.Context() + + // Role check | 角色校验 + var ok bool + if options.LogicType == LogicAnd { + ok = mgr.HasRolesAndByToken(reqCtx, tokenValue, roles) + } else { + ok = mgr.HasRolesOrByToken(reqCtx, tokenValue, roles) + } + + if !ok { + if options.AuthFailFunc != nil { + options.AuthFailFunc(w, r, core.ErrRoleDenied) + } else { + writeErrorResponse(w, core.ErrRoleDenied) + } + return + } + + next.ServeHTTP(w, r) + }) + } +} + +// GetSaTokenContext gets Sa-Token context from request | 获取 Sa-Token 上下文 +func GetSaTokenContext(r *http.Request) (*saContext.SaTokenContext, bool) { + v := r.Context().Value(SaTokenCtxKey) + if v == nil { + return nil, false + } + + ctx, ok := v.(*saContext.SaTokenContext) + return ctx, ok +} + +func getSaContext(chiCtx *ChiContext, r *http.Request, mgr *manager.Manager) *saContext.SaTokenContext { + // Try get from context | 尝试从 ctx 取值 + if v := r.Context().Value(SaTokenCtxKey); v != nil { + if saCtx, ok := v.(*saContext.SaTokenContext); ok { + return saCtx + } + } + + // Create new context | 创建并缓存 SaTokenContext + saCtx := saContext.NewContext(chiCtx, mgr) + chiCtx.Set(SaTokenCtxKey, saCtx) + + return saCtx +} + +// ============ Error Handling Helpers | 错误处理辅助函数 ============ + +// writeErrorResponse writes a standardized error response | 写入标准化的错误响应 +func writeErrorResponse(w http.ResponseWriter, err error) { + var saErr *core.SaTokenError + var code int + var message string + var httpStatus int + + // Check if it's a SaTokenError | 检查是否为SaTokenError + if errors.As(err, &saErr) { + code = saErr.Code + message = saErr.Message + httpStatus = getHTTPStatusFromCode(code) + } else { + // Handle standard errors | 处理标准错误 + code = core.CodeServerError + message = err.Error() + httpStatus = http.StatusInternalServerError + } + + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(httpStatus) + json.NewEncoder(w).Encode(map[string]interface{}{ + "code": code, + "message": message, + "data": err.Error(), + }) +} + +// writeSuccessResponse writes a standardized success response | 写入标准化的成功响应 +func writeSuccessResponse(w http.ResponseWriter, data interface{}) { + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(map[string]interface{}{ + "code": core.CodeSuccess, + "message": "success", + "data": data, + }) +} + +// getHTTPStatusFromCode converts Sa-Token error code to HTTP status | 将Sa-Token错误码转换为HTTP状态码 +func getHTTPStatusFromCode(code int) int { + switch code { + case core.CodeNotLogin: + return http.StatusUnauthorized + case core.CodePermissionDenied: + return http.StatusForbidden + case core.CodeBadRequest: + return http.StatusBadRequest + case core.CodeNotFound: + return http.StatusNotFound + case core.CodeServerError: + return http.StatusInternalServerError + default: + return http.StatusInternalServerError + } +} diff --git a/integrations/chi/plugin.go b/integrations/chi/plugin.go deleted file mode 100644 index 126038d..0000000 --- a/integrations/chi/plugin.go +++ /dev/null @@ -1,183 +0,0 @@ -package chi - -import ( - "encoding/json" - "errors" - "net/http" - - "github.com/click33/sa-token-go/core" -) - -// Plugin Chi plugin for Sa-Token | Chi插件 -type Plugin struct { - manager *core.Manager -} - -// NewPlugin creates a Chi plugin | 创建Chi插件 -func NewPlugin(manager *core.Manager) *Plugin { - return &Plugin{ - manager: manager, - } -} - -// AuthMiddleware authentication middleware | 认证中间件 -func (p *Plugin) AuthMiddleware() func(http.Handler) http.Handler { - return func(next http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - ctx := NewChiContext(w, r) - saCtx := core.NewContext(ctx, p.manager) - - if err := saCtx.CheckLogin(); err != nil { - writeErrorResponse(w, err) - return - } - - // Store Sa-Token context | 存储Sa-Token上下文 - ctx.Set("satoken", saCtx) - next.ServeHTTP(w, r) - }) - } -} - -// PermissionRequired permission validation middleware | 权限验证中间件 -func (p *Plugin) PermissionRequired(permission string) func(http.Handler) http.Handler { - return func(next http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - ctx := NewChiContext(w, r) - saCtx := core.NewContext(ctx, p.manager) - - if err := saCtx.CheckLogin(); err != nil { - writeErrorResponse(w, err) - return - } - - if !saCtx.HasPermission(permission) { - writeErrorResponse(w, core.NewPermissionDeniedError(permission)) - return - } - - ctx.Set("satoken", saCtx) - next.ServeHTTP(w, r) - }) - } -} - -// RoleRequired role validation middleware | 角色验证中间件 -func (p *Plugin) RoleRequired(role string) func(http.Handler) http.Handler { - return func(next http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - ctx := NewChiContext(w, r) - saCtx := core.NewContext(ctx, p.manager) - - if err := saCtx.CheckLogin(); err != nil { - writeErrorResponse(w, err) - return - } - - if !saCtx.HasRole(role) { - writeErrorResponse(w, core.NewRoleDeniedError(role)) - return - } - - ctx.Set("satoken", saCtx) - next.ServeHTTP(w, r) - }) - } -} - -// LoginHandler 登录处理器 -func (p *Plugin) LoginHandler(w http.ResponseWriter, r *http.Request) { - var req struct { - Username string `json:"username"` - Password string `json:"password"` - Device string `json:"device"` - } - - if err := json.NewDecoder(r.Body).Decode(&req); err != nil { - writeErrorResponse(w, core.NewError(core.CodeBadRequest, "invalid request parameters", err)) - return - } - - device := req.Device - if device == "" { - device = "log" - } - - token, err := p.manager.Login(req.Username, device) - if err != nil { - writeErrorResponse(w, core.NewError(core.CodeServerError, "login failed", err)) - return - } - - writeSuccessResponse(w, map[string]interface{}{ - "token": token, - }) -} - -// GetSaToken 从请求上下文获取Sa-Token上下文 -func GetSaToken(r *http.Request) (*core.SaTokenContext, bool) { - satoken := r.Context().Value("satoken") - if satoken == nil { - return nil, false - } - ctx, ok := satoken.(*core.SaTokenContext) - return ctx, ok -} - -// ============ Error Handling Helpers | 错误处理辅助函数 ============ - -// writeErrorResponse writes a standardized error response | 写入标准化的错误响应 -func writeErrorResponse(w http.ResponseWriter, err error) { - var saErr *core.SaTokenError - var code int - var message string - var httpStatus int - - // Check if it's a SaTokenError | 检查是否为SaTokenError - if errors.As(err, &saErr) { - code = saErr.Code - message = saErr.Message - httpStatus = getHTTPStatusFromCode(code) - } else { - // Handle standard errors | 处理标准错误 - code = core.CodeServerError - message = err.Error() - httpStatus = http.StatusInternalServerError - } - - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(httpStatus) - json.NewEncoder(w).Encode(map[string]interface{}{ - "code": code, - "message": message, - "error": err.Error(), - }) -} - -// writeSuccessResponse writes a standardized success response | 写入标准化的成功响应 -func writeSuccessResponse(w http.ResponseWriter, data interface{}) { - w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(map[string]interface{}{ - "code": core.CodeSuccess, - "message": "success", - "data": data, - }) -} - -// getHTTPStatusFromCode converts Sa-Token error code to HTTP status | 将Sa-Token错误码转换为HTTP状态码 -func getHTTPStatusFromCode(code int) int { - switch code { - case core.CodeNotLogin: - return http.StatusUnauthorized - case core.CodePermissionDenied: - return http.StatusForbidden - case core.CodeBadRequest: - return http.StatusBadRequest - case core.CodeNotFound: - return http.StatusNotFound - case core.CodeServerError: - return http.StatusInternalServerError - default: - return http.StatusInternalServerError - } -} diff --git a/integrations/echo/annotation.go b/integrations/echo/annotation.go index a8c9804..038b810 100644 --- a/integrations/echo/annotation.go +++ b/integrations/echo/annotation.go @@ -1,6 +1,8 @@ +// @Author daixk 2025/12/28 package echo import ( + "context" "strings" "github.com/click33/sa-token-go/core" @@ -10,75 +12,101 @@ import ( // Annotation annotation structure | 注解结构体 type Annotation struct { - CheckLogin bool `json:"checkLogin"` - CheckRole []string `json:"checkRole"` - CheckPermission []string `json:"checkPermission"` - CheckDisable bool `json:"checkDisable"` - Ignore bool `json:"ignore"` + AuthType string `json:"authType"` // Optional: specify auth type | 可选:指定认证类型 + CheckLogin bool `json:"checkLogin"` // Check login | 检查登录 + CheckRole []string `json:"checkRole"` // Check roles | 检查角色 + CheckPermission []string `json:"checkPermission"` // Check permissions | 检查权限 + CheckDisable bool `json:"checkDisable"` // Check disable status | 检查封禁状态 + Ignore bool `json:"ignore"` // Ignore authentication | 忽略认证 + LogicType LogicType `json:"logicType"` // OR or AND logic (default: OR) | OR 或 AND 逻辑(默认: OR) } // GetHandler gets handler with annotations | 获取带注解的处理器 func GetHandler(handler echo.HandlerFunc, annotations ...*Annotation) echo.HandlerFunc { return func(c echo.Context) error { - // Check if authentication should be ignored | 检查是否忽略认证 + // Ignore authentication | 忽略认证直接放行 if len(annotations) > 0 && annotations[0].Ignore { if handler != nil { return handler(c) } - return nil + return c.Next() } - // Get token from context using configured TokenName | 从上下文获取Token(使用配置的TokenName) - ctx := NewEchoContext(c) - saCtx := core.NewContext(ctx, stputil.GetManager()) + // Check if any authentication is needed | 检查是否需要任何认证 + ann := &Annotation{} + if len(annotations) > 0 { + ann = annotations[0] + } + + // No authentication required | 无需任何认证 + needAuth := ann.CheckLogin || ann.CheckDisable || len(ann.CheckPermission) > 0 || len(ann.CheckRole) > 0 + if !needAuth { + if handler != nil { + return handler(c) + } + return c.Next() + } + + ctx := c.Request().Context() + + // Get manager | 获取 Manager + mgr, err := stputil.GetManager(ann.AuthType) + if err != nil { + return writeErrorResponse(c, err) + } + + // Get SaTokenContext (reuse cached context) | 获取 SaTokenContext(复用缓存上下文) + saCtx := getSaContext(c, mgr) token := saCtx.GetTokenValue() + if token == "" { return writeErrorResponse(c, core.NewNotLoginError()) } // Check login | 检查登录 - if !stputil.IsLogin(token) { - return writeErrorResponse(c, core.NewNotLoginError()) + if err := mgr.CheckLogin(ctx, token); err != nil { + return writeErrorResponse(c, err) } - // Get login ID | 获取登录ID - loginID, err := stputil.GetLoginID(token) - if err != nil { - return writeErrorResponse(c, err) + // Get loginID for further checks | 获取 loginID 用于后续检查 + var loginID string + if ann.CheckDisable || len(ann.CheckPermission) > 0 || len(ann.CheckRole) > 0 { + loginID, err = mgr.GetLoginIDNotCheck(ctx, token) + if err != nil { + return writeErrorResponse(c, err) + } } // Check if account is disabled | 检查是否被封禁 - if len(annotations) > 0 && annotations[0].CheckDisable { - if stputil.IsDisable(loginID) { + if ann.CheckDisable { + if mgr.IsDisable(ctx, loginID) { return writeErrorResponse(c, core.NewAccountDisabledError(loginID)) } } // Check permission | 检查权限 - if len(annotations) > 0 && len(annotations[0].CheckPermission) > 0 { - hasPermission := false - for _, perm := range annotations[0].CheckPermission { - if stputil.HasPermission(loginID, strings.TrimSpace(perm)) { - hasPermission = true - break - } + if len(ann.CheckPermission) > 0 { + var ok bool + if ann.LogicType == LogicAnd { + ok = mgr.HasPermissionsAnd(ctx, loginID, ann.CheckPermission) + } else { + ok = mgr.HasPermissionsOr(ctx, loginID, ann.CheckPermission) } - if !hasPermission { - return writeErrorResponse(c, core.NewPermissionDeniedError(strings.Join(annotations[0].CheckPermission, ","))) + if !ok { + return writeErrorResponse(c, core.NewPermissionDeniedError(strings.Join(ann.CheckPermission, ","))) } } // Check role | 检查角色 - if len(annotations) > 0 && len(annotations[0].CheckRole) > 0 { - hasRole := false - for _, role := range annotations[0].CheckRole { - if stputil.HasRole(loginID, strings.TrimSpace(role)) { - hasRole = true - break - } + if len(ann.CheckRole) > 0 { + var ok bool + if ann.LogicType == LogicAnd { + ok = mgr.HasRolesAnd(ctx, loginID, ann.CheckRole) + } else { + ok = mgr.HasRolesOr(ctx, loginID, ann.CheckRole) } - if !hasRole { - return writeErrorResponse(c, core.NewRoleDeniedError(strings.Join(annotations[0].CheckRole, ","))) + if !ok { + return writeErrorResponse(c, core.NewRoleDeniedError(strings.Join(ann.CheckRole, ","))) } } @@ -86,14 +114,18 @@ func GetHandler(handler echo.HandlerFunc, annotations ...*Annotation) echo.Handl if handler != nil { return handler(c) } - return nil + return c.Next() } } // CheckLoginMiddleware decorator for login checking | 检查登录装饰器 -func CheckLoginMiddleware() echo.MiddlewareFunc { +func CheckLoginMiddleware(authType ...string) echo.MiddlewareFunc { + ann := &Annotation{CheckLogin: true} + if len(authType) > 0 { + ann.AuthType = authType[0] + } return func(next echo.HandlerFunc) echo.HandlerFunc { - return GetHandler(next, &Annotation{CheckLogin: true}) + return GetHandler(next, ann) } } @@ -104,6 +136,13 @@ func CheckRoleMiddleware(roles ...string) echo.MiddlewareFunc { } } +// CheckRoleMiddlewareWithAuthType decorator for role checking with auth type | 检查角色装饰器(带认证类型) +func CheckRoleMiddlewareWithAuthType(authType string, roles ...string) echo.MiddlewareFunc { + return func(next echo.HandlerFunc) echo.HandlerFunc { + return GetHandler(next, &Annotation{CheckRole: roles, AuthType: authType}) + } +} + // CheckPermissionMiddleware decorator for permission checking | 检查权限装饰器 func CheckPermissionMiddleware(perms ...string) echo.MiddlewareFunc { return func(next echo.HandlerFunc) echo.HandlerFunc { @@ -111,10 +150,21 @@ func CheckPermissionMiddleware(perms ...string) echo.MiddlewareFunc { } } +// CheckPermissionMiddlewareWithAuthType decorator for permission checking with auth type | 检查权限装饰器(带认证类型) +func CheckPermissionMiddlewareWithAuthType(authType string, perms ...string) echo.MiddlewareFunc { + return func(next echo.HandlerFunc) echo.HandlerFunc { + return GetHandler(next, &Annotation{CheckPermission: perms, AuthType: authType}) + } +} + // CheckDisableMiddleware decorator for checking if account is disabled | 检查是否被封禁装饰器 -func CheckDisableMiddleware() echo.MiddlewareFunc { +func CheckDisableMiddleware(authType ...string) echo.MiddlewareFunc { + ann := &Annotation{CheckDisable: true} + if len(authType) > 0 { + ann.AuthType = authType[0] + } return func(next echo.HandlerFunc) echo.HandlerFunc { - return GetHandler(next, &Annotation{CheckDisable: true}) + return GetHandler(next, ann) } } @@ -124,3 +174,114 @@ func IgnoreMiddleware() echo.MiddlewareFunc { return GetHandler(next, &Annotation{Ignore: true}) } } + +// ============ Combined Middleware | 组合中间件 ============ + +// CheckLoginAndRoleMiddleware checks login and role | 检查登录和角色 +func CheckLoginAndRoleMiddleware(roles ...string) echo.MiddlewareFunc { + return func(next echo.HandlerFunc) echo.HandlerFunc { + return GetHandler(next, &Annotation{CheckLogin: true, CheckRole: roles}) + } +} + +// CheckLoginAndPermissionMiddleware checks login and permission | 检查登录和权限 +func CheckLoginAndPermissionMiddleware(perms ...string) echo.MiddlewareFunc { + return func(next echo.HandlerFunc) echo.HandlerFunc { + return GetHandler(next, &Annotation{CheckLogin: true, CheckPermission: perms}) + } +} + +// CheckAllMiddleware checks login, role, permission and disable status | 全面检查 +func CheckAllMiddleware(roles []string, perms []string) echo.MiddlewareFunc { + return func(next echo.HandlerFunc) echo.HandlerFunc { + return GetHandler(next, &Annotation{ + CheckLogin: true, + CheckRole: roles, + CheckPermission: perms, + CheckDisable: true, + }) + } +} + +// ============ Route Group Helper | 路由组辅助函数 ============ + +// AuthGroup creates a route group with authentication | 创建带认证的路由组 +func AuthGroup(group *echo.Group, authType ...string) *echo.Group { + group.Use(CheckLoginMiddleware(authType...)) + return group +} + +// RoleGroup creates a route group with role checking | 创建带角色检查的路由组 +func RoleGroup(group *echo.Group, roles ...string) *echo.Group { + group.Use(CheckLoginAndRoleMiddleware(roles...)) + return group +} + +// PermissionGroup creates a route group with permission checking | 创建带权限检查的路由组 +func PermissionGroup(group *echo.Group, perms ...string) *echo.Group { + group.Use(CheckLoginAndPermissionMiddleware(perms...)) + return group +} + +// ============ Context Helper | 上下文辅助函数 ============ + +// GetLoginIDFromRequest gets login ID from request context | 从请求上下文获取登录 ID +func GetLoginIDFromRequest(c echo.Context, authType ...string) (string, error) { + var at string + if len(authType) > 0 { + at = authType[0] + } + + mgr, err := stputil.GetManager(at) + if err != nil { + return "", err + } + + saCtx := getSaContext(c, mgr) + token := saCtx.GetTokenValue() + if token == "" { + return "", core.ErrNotLogin + } + return mgr.GetLoginID(c.Request().Context(), token) +} + +// IsLoginFromRequest checks if user is logged in from request | 从请求检查用户是否已登录 +func IsLoginFromRequest(c echo.Context, authType ...string) bool { + var at string + if len(authType) > 0 { + at = authType[0] + } + + mgr, err := stputil.GetManager(at) + if err != nil { + return false + } + + saCtx := getSaContext(c, mgr) + token := saCtx.GetTokenValue() + if token == "" { + return false + } + return mgr.IsLogin(c.Request().Context(), token) +} + +// GetTokenFromRequest gets token from request (exported) | 从请求获取 Token(导出) +func GetTokenFromRequest(c echo.Context, authType ...string) string { + var at string + if len(authType) > 0 { + at = authType[0] + } + + mgr, err := stputil.GetManager(at) + if err != nil { + return "" + } + + saCtx := getSaContext(c, mgr) + return saCtx.GetTokenValue() +} + +// WithContext creates a new context with sa-token context | 创建带 sa-token 上下文的新上下文 +func WithContext(c echo.Context, authType ...string) context.Context { + return c.Request().Context() +} diff --git a/integrations/echo/export.go b/integrations/echo/export.go index 7986499..b823f33 100644 --- a/integrations/echo/export.go +++ b/integrations/echo/export.go @@ -1,364 +1,950 @@ package echo import ( + "context" "time" + "github.com/click33/sa-token-go/codec/json" + "github.com/click33/sa-token-go/codec/msgpack" "github.com/click33/sa-token-go/core" + "github.com/click33/sa-token-go/core/adapter" + "github.com/click33/sa-token-go/core/builder" + "github.com/click33/sa-token-go/core/config" + "github.com/click33/sa-token-go/core/listener" + "github.com/click33/sa-token-go/core/manager" + "github.com/click33/sa-token-go/core/oauth2" + "github.com/click33/sa-token-go/core/security" + "github.com/click33/sa-token-go/core/session" + "github.com/click33/sa-token-go/generator/sgenerator" + "github.com/click33/sa-token-go/log/nop" + "github.com/click33/sa-token-go/log/slog" + "github.com/click33/sa-token-go/pool/ants" + "github.com/click33/sa-token-go/storage/memory" + "github.com/click33/sa-token-go/storage/redis" "github.com/click33/sa-token-go/stputil" ) -// ============ Re-export core types | 重新导出核心类型 ============ +// ============ Type Aliases | 类型别名 ============ -// Configuration related types | 配置相关类型 type ( - Config = core.Config - CookieConfig = core.CookieConfig - TokenStyle = core.TokenStyle + // Config 配置 + Config = config.Config + // Manager 管理器 + Manager = manager.Manager + // Session 会话 + Session = session.Session + // TokenInfo Token信息 + TokenInfo = manager.TokenInfo + // DisableInfo 封禁信息 + DisableInfo = manager.DisableInfo + // Builder 构建器 + Builder = builder.Builder + // SaTokenError 错误类型 + SaTokenError = core.SaTokenError + // Event 事件类型 + Event = listener.Event + // EventData 事件数据 + EventData = listener.EventData + // Listener 事件监听器 + Listener = listener.Listener + // ListenerConfig 监听器配置 + ListenerConfig = listener.ListenerConfig + // RefreshTokenInfo 刷新令牌信息 + RefreshTokenInfo = security.RefreshTokenInfo + // AccessTokenInfo 访问令牌信息 + AccessTokenInfo = security.AccessTokenInfo + // OAuth2Client OAuth2客户端 + OAuth2Client = oauth2.Client + // OAuth2AccessToken OAuth2访问令牌 + OAuth2AccessToken = oauth2.AccessToken + // AuthorizationCode 授权码 + AuthorizationCode = oauth2.AuthorizationCode + // OAuth2TokenRequest OAuth2令牌请求 + OAuth2TokenRequest = oauth2.TokenRequest + // OAuth2GrantType OAuth2授权类型 + OAuth2GrantType = oauth2.GrantType + // OAuth2UserValidator OAuth2用户验证器 + OAuth2UserValidator = oauth2.UserValidator + // Storage 存储接口 + Storage = adapter.Storage + // Codec 编解码接口 + Codec = adapter.Codec + // Log 日志接口 + Log = adapter.Log + // Pool 协程池接口 + Pool = adapter.Pool + // Generator 生成器接口 + Generator = adapter.Generator + + // ============ Codec Types | 编解码器类型 ============ + + // JSONSerializer JSON编解码器 + JSONSerializer = json.JSONSerializer + // MsgPackSerializer MsgPack编解码器 + MsgPackSerializer = msgpack.MsgPackSerializer + + // ============ Storage Types | 存储类型 ============ + + // MemoryStorage 内存存储 + MemoryStorage = memory.Storage + // RedisStorage Redis存储 + RedisStorage = redis.Storage + // RedisConfig Redis配置 + RedisConfig = redis.Config + // RedisBuilder Redis构建器 + RedisBuilder = redis.Builder + + // ============ Logger Types | 日志类型 ============ + + // SlogLogger 标准日志实现 + SlogLogger = slog.Logger + // SlogLoggerConfig 标准日志配置 + SlogLoggerConfig = slog.LoggerConfig + // SlogLogLevel 日志级别 + SlogLogLevel = slog.LogLevel + // NopLogger 空日志实现 + NopLogger = nop.NopLogger + + // ============ Generator Types | 生成器类型 ============ + + // TokenGenerator Token生成器 + TokenGenerator = sgenerator.Generator + // TokenStyle Token风格 + TokenStyle = adapter.TokenStyle + + // ============ Pool Types | 协程池类型 ============ + + // RenewPoolManager 续期池管理器 + RenewPoolManager = ants.RenewPoolManager + // RenewPoolConfig 续期池配置 + RenewPoolConfig = ants.RenewPoolConfig ) -// Token style constants | Token风格常量 +// ============ Error Codes | 错误码 ============ + const ( - TokenStyleUUID = core.TokenStyleUUID - TokenStyleSimple = core.TokenStyleSimple - TokenStyleRandom32 = core.TokenStyleRandom32 - TokenStyleRandom64 = core.TokenStyleRandom64 - TokenStyleRandom128 = core.TokenStyleRandom128 - TokenStyleJWT = core.TokenStyleJWT - TokenStyleHash = core.TokenStyleHash - TokenStyleTimestamp = core.TokenStyleTimestamp - TokenStyleTik = core.TokenStyleTik + CodeSuccess = core.CodeSuccess + CodeBadRequest = core.CodeBadRequest + CodeNotLogin = core.CodeNotLogin + CodePermissionDenied = core.CodePermissionDenied + CodeNotFound = core.CodeNotFound + CodeServerError = core.CodeServerError + CodeTokenInvalid = core.CodeTokenInvalid + CodeTokenExpired = core.CodeTokenExpired + CodeAccountDisabled = core.CodeAccountDisabled + CodeKickedOut = core.CodeKickedOut + CodeActiveTimeout = core.CodeActiveTimeout + CodeMaxLoginCount = core.CodeMaxLoginCount + CodeStorageError = core.CodeStorageError + CodeInvalidParameter = core.CodeInvalidParameter + CodeSessionError = core.CodeSessionError ) -// Core types | 核心类型 -type ( - Manager = core.Manager - TokenInfo = core.TokenInfo - Session = core.Session - TokenGenerator = core.TokenGenerator - SaTokenContext = core.SaTokenContext - Builder = core.Builder - NonceManager = core.NonceManager - RefreshTokenInfo = core.RefreshTokenInfo - RefreshTokenManager = core.RefreshTokenManager - OAuth2Server = core.OAuth2Server - OAuth2Client = core.OAuth2Client - OAuth2AccessToken = core.OAuth2AccessToken - OAuth2GrantType = core.OAuth2GrantType -) +// ============ Errors | 错误变量 ============ -// Adapter interfaces | 适配器接口 -type ( - Storage = core.Storage - RequestContext = core.RequestContext +var ( + // Authentication Errors | 认证错误 + ErrNotLogin = core.ErrNotLogin + ErrTokenInvalid = core.ErrTokenInvalid + ErrTokenExpired = core.ErrTokenExpired + ErrTokenKickout = core.ErrTokenKickout + ErrTokenReplaced = core.ErrTokenReplaced + ErrInvalidLoginID = core.ErrInvalidLoginID + ErrInvalidDevice = core.ErrInvalidDevice + ErrTokenNotFound = core.ErrTokenNotFound + + // Authorization Errors | 授权错误 + ErrPermissionDenied = core.ErrPermissionDenied + ErrRoleDenied = core.ErrRoleDenied + + // Account Errors | 账号错误 + ErrAccountDisabled = core.ErrAccountDisabled + ErrAccountNotFound = core.ErrAccountNotFound + ErrLoginLimitExceeded = core.ErrLoginLimitExceeded + + // Session Errors | 会话错误 + ErrSessionNotFound = core.ErrSessionNotFound + ErrActiveTimeout = core.ErrActiveTimeout + ErrSessionInvalidDataKey = core.ErrSessionInvalidDataKey + ErrSessionIDEmpty = core.ErrSessionIDEmpty + + // Security Errors | 安全错误 + ErrInvalidNonce = core.ErrInvalidNonce + ErrRefreshTokenExpired = core.ErrRefreshTokenExpired + ErrNonceInvalidRefreshToken = core.ErrNonceInvalidRefreshToken + ErrInvalidLoginIDEmpty = core.ErrInvalidLoginIDEmpty + + // OAuth2 Errors | OAuth2错误 + ErrClientOrClientIDEmpty = core.ErrClientOrClientIDEmpty + ErrClientNotFound = core.ErrClientNotFound + ErrUserIDEmpty = core.ErrUserIDEmpty + ErrInvalidRedirectURI = core.ErrInvalidRedirectURI + ErrInvalidClientCredentials = core.ErrInvalidClientCredentials + ErrInvalidAuthCode = core.ErrInvalidAuthCode + ErrAuthCodeUsed = core.ErrAuthCodeUsed + ErrAuthCodeExpired = core.ErrAuthCodeExpired + ErrClientMismatch = core.ErrClientMismatch + ErrRedirectURIMismatch = core.ErrRedirectURIMismatch + ErrInvalidAccessToken = core.ErrInvalidAccessToken + ErrInvalidRefreshToken = core.ErrInvalidRefreshToken + ErrInvalidScope = core.ErrInvalidScope + + // System Errors | 系统错误 + ErrStorageUnavailable = core.ErrStorageUnavailable + ErrSerializeFailed = core.ErrSerializeFailed + ErrDeserializeFailed = core.ErrDeserializeFailed + ErrTypeConvert = core.ErrTypeConvert ) -// Event related types | 事件相关类型 -type ( - EventListener = core.EventListener - EventManager = core.EventManager - EventData = core.EventData - Event = core.Event - ListenerFunc = core.ListenerFunc - ListenerConfig = core.ListenerConfig -) +// ============ Error Constructors | 错误构造函数 ============ -// Event constants | 事件常量 -const ( - EventLogin = core.EventLogin - EventLogout = core.EventLogout - EventKickout = core.EventKickout - EventDisable = core.EventDisable - EventUntie = core.EventUntie - EventRenew = core.EventRenew - EventCreateSession = core.EventCreateSession - EventDestroySession = core.EventDestroySession - EventPermissionCheck = core.EventPermissionCheck - EventRoleCheck = core.EventRoleCheck - EventAll = core.EventAll +var ( + NewError = core.NewError + NewErrorWithContext = core.NewErrorWithContext + NewNotLoginError = core.NewNotLoginError + NewPermissionDeniedError = core.NewPermissionDeniedError + NewRoleDeniedError = core.NewRoleDeniedError + NewAccountDisabledError = core.NewAccountDisabledError ) -// OAuth2 grant type constants | OAuth2授权类型常量 -const ( - GrantTypeAuthorizationCode = core.GrantTypeAuthorizationCode - GrantTypeRefreshToken = core.GrantTypeRefreshToken - GrantTypeClientCredentials = core.GrantTypeClientCredentials - GrantTypePassword = core.GrantTypePassword -) +// ============ Error Checking Helpers | 错误检查辅助函数 ============ -// Utility functions | 工具函数 var ( - RandomString = core.RandomString - IsEmpty = core.IsEmpty - IsNotEmpty = core.IsNotEmpty - DefaultString = core.DefaultString - ContainsString = core.ContainsString - RemoveString = core.RemoveString - UniqueStrings = core.UniqueStrings - MergeStrings = core.MergeStrings - MatchPattern = core.MatchPattern + IsNotLoginError = core.IsNotLoginError + IsPermissionDeniedError = core.IsPermissionDeniedError + IsAccountDisabledError = core.IsAccountDisabledError + IsTokenError = core.IsTokenError + GetErrorCode = core.GetErrorCode ) -// ============ Core constructor functions | 核心构造函数 ============ +// ============ Manager Management | Manager 管理 ============ + +// SetManager stores the manager-example in the global map using the specified autoType | 使用指定的 autoType 将管理器存储在全局 map 中 +func SetManager(mgr *manager.Manager) { + stputil.SetManager(mgr) +} + +// GetManager retrieves the manager-example from the global map using the specified autoType | 使用指定的 autoType 从全局 map 中获取管理器 +func GetManager(autoType ...string) (*manager.Manager, error) { + return stputil.GetManager(autoType...) +} -// DefaultConfig returns log configuration | 返回默认配置 -func DefaultConfig() *Config { - return core.DefaultConfig() +// DeleteManager delete the specific manager-example for the given autoType and releases resources | 删除指定的管理器并释放资源 +func DeleteManager(autoType ...string) error { + return stputil.DeleteManager(autoType...) } -// NewManager creates a new authentication manager-example | 创建新的认证管理器 -func NewManager(storage Storage, cfg *Config) *Manager { - return core.NewManager(storage, cfg) +// DeleteAllManager delete all managers in the global map and releases resources | 关闭所有管理器并释放资源 +func DeleteAllManager() { + stputil.DeleteAllManager() } -// NewContext creates a new Sa-Token context | 创建新的Sa-Token上下文 -func NewContext(ctx RequestContext, mgr *Manager) *SaTokenContext { - return core.NewContext(ctx, mgr) +// ============ Builder & Config | 构建器和配置 ============ + +// NewDefaultBuild creates a new default builder | 创建默认构建器 +func NewDefaultBuild() *builder.Builder { + return builder.NewBuilder() } -// NewSession creates a new session | 创建新的Session -func NewSession(id string, storage Storage, prefix string) *Session { - return core.NewSession(id, storage, prefix) +// NewDefaultConfig creates a new default config | 创建默认配置 +func NewDefaultConfig() *config.Config { + return config.DefaultConfig() } -// LoadSession loads an existing session | 加载已存在的Session -func LoadSession(id string, storage Storage, prefix string) (*Session, error) { - return core.LoadSession(id, storage, prefix) +// DefaultLoggerConfig returns the default logger config | 返回默认日志配置 +func DefaultLoggerConfig() *slog.LoggerConfig { + return slog.DefaultLoggerConfig() } -// NewTokenGenerator creates a new token generator | 创建新的Token生成器 -func NewTokenGenerator(cfg *Config) *TokenGenerator { - return core.NewTokenGenerator(cfg) +// DefaultRenewPoolConfig returns the default renew pool config | 返回默认续期池配置 +func DefaultRenewPoolConfig() *ants.RenewPoolConfig { + return ants.DefaultRenewPoolConfig() } -// NewEventManager creates a new event manager-example | 创建新的事件管理器 -func NewEventManager() *EventManager { - return core.NewEventManager() +// ============ Codec Constructors | 编解码器构造函数 ============ + +// NewJSONSerializer creates a new JSON serializer | 创建JSON序列化器 +func NewJSONSerializer() *json.JSONSerializer { + return json.NewJSONSerializer() } -// NewBuilder creates a new builder for fluent configuration | 创建新的Builder构建器(用于流式配置) -func NewBuilder() *Builder { - return core.NewBuilder() +// NewMsgPackSerializer creates a new MsgPack serializer | 创建MsgPack序列化器 +func NewMsgPackSerializer() *msgpack.MsgPackSerializer { + return msgpack.NewMsgPackSerializer() } -// NewNonceManager creates a new nonce manager-example | 创建新的Nonce管理器 -func NewNonceManager(storage Storage, prefix string, ttl ...int64) *NonceManager { - return core.NewNonceManager(storage, prefix, ttl...) +// ============ Storage Constructors | 存储构造函数 ============ + +// NewMemoryStorage creates a new memory storage | 创建内存存储 +func NewMemoryStorage() *memory.Storage { + return memory.NewStorage() } -// NewRefreshTokenManager creates a new refresh token manager-example | 创建新的刷新令牌管理器 -func NewRefreshTokenManager(storage Storage, prefix string, cfg *Config) *RefreshTokenManager { - return core.NewRefreshTokenManager(storage, prefix, cfg) +// NewMemoryStorageWithCleanupInterval creates a new memory storage with cleanup interval | 创建带清理间隔的内存存储 +func NewMemoryStorageWithCleanupInterval(interval time.Duration) *memory.Storage { + return memory.NewStorageWithCleanupInterval(interval) } -// NewOAuth2Server creates a new OAuth2 server | 创建新的OAuth2服务器 -func NewOAuth2Server(storage Storage, prefix string) *OAuth2Server { - return core.NewOAuth2Server(storage, prefix) +// NewRedisStorage creates a new Redis storage from URL | 通过URL创建Redis存储 +func NewRedisStorage(url string) (*redis.Storage, error) { + return redis.NewStorage(url) } -// ============ Global StpUtil functions | 全局StpUtil函数 ============ +// NewRedisStorageFromConfig creates a new Redis storage from config | 通过配置创建Redis存储 +func NewRedisStorageFromConfig(cfg *redis.Config) (*redis.Storage, error) { + return redis.NewStorageFromConfig(cfg) +} -// SetManager sets the global Manager (must be called first) | 设置全局Manager(必须先调用此方法) -func SetManager(mgr *Manager) { - stputil.SetManager(mgr) +// NewRedisBuilder creates a new Redis builder | 创建Redis构建器 +func NewRedisBuilder() *redis.Builder { + return redis.NewBuilder() +} + +// ============ Logger Constructors | 日志构造函数 ============ + +// NewSlogLogger creates a new slog logger with config | 使用配置创建标准日志器 +func NewSlogLogger(cfg *slog.LoggerConfig) (*slog.Logger, error) { + return slog.NewLoggerWithConfig(cfg) } -// GetManager gets the global Manager | 获取全局Manager -func GetManager() *Manager { - return stputil.GetManager() +// NewNopLogger creates a new no-op logger | 创建空日志器 +func NewNopLogger() *nop.NopLogger { + return nop.NewNopLogger() } +// ============ Generator Constructors | 生成器构造函数 ============ + +// NewTokenGenerator creates a new token generator | 创建Token生成器 +func NewTokenGenerator(timeout int64, tokenStyle adapter.TokenStyle, jwtSecretKey string) *sgenerator.Generator { + return sgenerator.NewGenerator(timeout, tokenStyle, jwtSecretKey) +} + +// NewDefaultTokenGenerator creates a new default token generator | 创建默认Token生成器 +func NewDefaultTokenGenerator() *sgenerator.Generator { + return sgenerator.NewDefaultGenerator() +} + +// ============ Pool Constructors | 协程池构造函数 ============ + +// NewRenewPoolManager creates a new renew pool manager-example with default config | 使用默认配置创建续期池管理器 +func NewRenewPoolManager() *ants.RenewPoolManager { + return ants.NewRenewPoolManagerWithDefaultConfig() +} + +// NewRenewPoolManagerWithConfig creates a new renew pool manager-example with config | 使用配置创建续期池管理器 +func NewRenewPoolManagerWithConfig(cfg *ants.RenewPoolConfig) (*ants.RenewPoolManager, error) { + return ants.NewRenewPoolManagerWithConfig(cfg) +} + +// ============ Token Style Constants | Token风格常量 ============ + +const ( + // TokenStyleUUID UUID style | UUID风格 + TokenStyleUUID = adapter.TokenStyleUUID + // TokenStyleSimple Simple random string | 简单随机字符串 + TokenStyleSimple = adapter.TokenStyleSimple + // TokenStyleRandom32 32-bit random string | 32位随机字符串 + TokenStyleRandom32 = adapter.TokenStyleRandom32 + // TokenStyleRandom64 64-bit random string | 64位随机字符串 + TokenStyleRandom64 = adapter.TokenStyleRandom64 + // TokenStyleRandom128 128-bit random string | 128位随机字符串 + TokenStyleRandom128 = adapter.TokenStyleRandom128 + // TokenStyleJWT JWT style | JWT风格 + TokenStyleJWT = adapter.TokenStyleJWT + // TokenStyleHash SHA256 hash-based style | SHA256哈希风格 + TokenStyleHash = adapter.TokenStyleHash + // TokenStyleTimestamp Timestamp-based style | 时间戳风格 + TokenStyleTimestamp = adapter.TokenStyleTimestamp + // TokenStyleTik Short ID style (like TikTok) | Tik风格短ID + TokenStyleTik = adapter.TokenStyleTik +) + +// ============ Log Level Constants | 日志级别常量 ============ + +const ( + // LogLevelDebug Debug level | 调试级别 + LogLevelDebug = adapter.LogLevelDebug + // LogLevelInfo Info level | 信息级别 + LogLevelInfo = adapter.LogLevelInfo + // LogLevelWarn Warn level | 警告级别 + LogLevelWarn = adapter.LogLevelWarn + // LogLevelError Error level | 错误级别 + LogLevelError = adapter.LogLevelError +) + // ============ Authentication | 登录认证 ============ // Login performs user login | 用户登录 -func Login(loginID interface{}, device ...string) (string, error) { - return stputil.Login(loginID, device...) +func Login(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) (string, error) { + return stputil.Login(ctx, loginID, deviceOrAutoType...) } // LoginByToken performs login with specified token | 使用指定Token登录 -func LoginByToken(loginID interface{}, tokenValue string, device ...string) error { - return stputil.LoginByToken(loginID, tokenValue, device...) +func LoginByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.LoginByToken(ctx, tokenValue, authType...) } // Logout performs user logout | 用户登出 -func Logout(loginID interface{}, device ...string) error { - return stputil.Logout(loginID, device...) +func Logout(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) error { + return stputil.Logout(ctx, loginID, deviceOrAutoType...) } // LogoutByToken performs logout by token | 根据Token登出 -func LogoutByToken(tokenValue string) error { - return stputil.LogoutByToken(tokenValue) +func LogoutByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.LogoutByToken(ctx, tokenValue, authType...) +} + +// Kickout kicks out a user session | 踢人下线 +func Kickout(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) error { + return stputil.Kickout(ctx, loginID, deviceOrAutoType...) +} + +// KickoutByToken Kick user offline | 根据Token踢人下线 +func KickoutByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.KickoutByToken(ctx, tokenValue, authType...) +} + +// Replace user offline by login ID and device | 根据账号和设备顶人下线 +func Replace(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) error { + return stputil.Replace(ctx, loginID, deviceOrAutoType...) +} + +// ReplaceByToken Replace user offline by token | 根据Token顶人下线 +func ReplaceByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.ReplaceByToken(ctx, tokenValue, authType...) } +// ============ Token Validation | Token验证 ============ + // IsLogin checks if the user is logged in | 检查用户是否已登录 -func IsLogin(tokenValue string) bool { - return stputil.IsLogin(tokenValue) +func IsLogin(ctx context.Context, tokenValue string, authType ...string) bool { + return stputil.IsLogin(ctx, tokenValue, authType...) } // CheckLogin checks login status (throws error if not logged in) | 检查登录状态(未登录抛出错误) -func CheckLogin(tokenValue string) error { - return stputil.CheckLogin(tokenValue) +func CheckLogin(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.CheckLogin(ctx, tokenValue, authType...) +} + +// CheckLoginWithState checks the login status (returns error to determine the reason if not logged in) | 检查登录状态(未登录时根据错误确定原因) +func CheckLoginWithState(ctx context.Context, tokenValue string, authType ...string) (bool, error) { + return stputil.CheckLoginWithState(ctx, tokenValue, authType...) } // GetLoginID gets the login ID from token | 从Token获取登录ID -func GetLoginID(tokenValue string) (string, error) { - return stputil.GetLoginID(tokenValue) +func GetLoginID(ctx context.Context, tokenValue string, authType ...string) (string, error) { + return stputil.GetLoginID(ctx, tokenValue, authType...) } -// GetLoginIDNotCheck gets login ID without checking | 获取登录ID(不检查) -func GetLoginIDNotCheck(tokenValue string) (string, error) { - return stputil.GetLoginIDNotCheck(tokenValue) +// GetLoginIDNotCheck gets login ID without checking | 获取登录ID(不检查登录状态) +func GetLoginIDNotCheck(ctx context.Context, tokenValue string, authType ...string) (string, error) { + return stputil.GetLoginIDNotCheck(ctx, tokenValue, authType...) } // GetTokenValue gets the token value for a login ID | 获取登录ID对应的Token值 -func GetTokenValue(loginID interface{}, device ...string) (string, error) { - return stputil.GetTokenValue(loginID, device...) +func GetTokenValue(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) (string, error) { + return stputil.GetTokenValue(ctx, loginID, deviceOrAutoType...) } // GetTokenInfo gets token information | 获取Token信息 -func GetTokenInfo(tokenValue string) (*TokenInfo, error) { - return stputil.GetTokenInfo(tokenValue) +func GetTokenInfo(ctx context.Context, tokenValue string, authType ...string) (*manager.TokenInfo, error) { + return stputil.GetTokenInfo(ctx, tokenValue, authType...) } -// ============ Kickout | 踢人下线 ============ +// ============ Account Disable | 账号封禁 ============ -// Kickout kicks out a user session | 踢人下线 -func Kickout(loginID interface{}, device ...string) error { - return stputil.Kickout(loginID, device...) +// Disable disables an account for specified duration | 封禁账号(指定时长) +func Disable(ctx context.Context, loginID interface{}, duration time.Duration, authType ...string) error { + return stputil.Disable(ctx, loginID, duration, authType...) } -// ============ Account Disable | 账号封禁 ============ +// DisableByToken disables the account associated with the given token for a duration | 根据指定 Token 封禁其对应的账号 +func DisableByToken(ctx context.Context, tokenValue string, duration time.Duration, authType ...string) error { + return stputil.DisableByToken(ctx, tokenValue, duration, authType...) +} -// Disable disables an account for specified duration | 封禁账号(指定时长) -func Disable(loginID interface{}, duration time.Duration) error { - return stputil.Disable(loginID, duration) +// Untie re-enables a disabled account | 解封账号 +func Untie(ctx context.Context, loginID interface{}, authType ...string) error { + return stputil.Untie(ctx, loginID, authType...) +} + +// UntieByToken re-enables a disabled account by token | 根据Token解封账号 +func UntieByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.UntieByToken(ctx, tokenValue, authType...) } // IsDisable checks if an account is disabled | 检查账号是否被封禁 -func IsDisable(loginID interface{}) bool { - return stputil.IsDisable(loginID) +func IsDisable(ctx context.Context, loginID interface{}, authType ...string) bool { + return stputil.IsDisable(ctx, loginID, authType...) } -// CheckDisable checks if account is disabled (throws error if disabled) | 检查账号是否被封禁(被封禁则抛出错误) -func CheckDisableByToken(tokenValue string) error { - return stputil.CheckDisable(tokenValue) +// IsDisableByToken checks if an account is disabled by token | 根据Token检查账号是否被封禁 +func IsDisableByToken(ctx context.Context, tokenValue string, authType ...string) bool { + return stputil.IsDisableByToken(ctx, tokenValue, authType...) } -// GetDisableTime gets remaining disabled time | 获取账号剩余封禁时间 -func GetDisableTime(loginID interface{}) (int64, error) { - return stputil.GetDisableTime(loginID) +// GetDisableTime gets remaining disable time in seconds | 获取剩余封禁时间(秒) +func GetDisableTime(ctx context.Context, loginID interface{}, authType ...string) (int64, error) { + return stputil.GetDisableTime(ctx, loginID, authType...) } -// Untie unties/unlocks an account | 解除账号封禁 -func Untie(loginID interface{}) error { - return stputil.Untie(loginID) +// GetDisableTimeByToken gets remaining disable time by token | 根据Token获取剩余封禁时间(秒) +func GetDisableTimeByToken(ctx context.Context, tokenValue string, authType ...string) (int64, error) { + return stputil.GetDisableTimeByToken(ctx, tokenValue, authType...) } -// ============ Permission Check | 权限验证 ============ +// CheckDisableWithInfo gets disable info | 获取封禁信息 +func CheckDisableWithInfo(ctx context.Context, loginID interface{}, authType ...string) (*manager.DisableInfo, error) { + return stputil.CheckDisableWithInfo(ctx, loginID, authType...) +} -// CheckPermission checks if the account has specified permission | 检查账号是否拥有指定权限 -func CheckPermissionByToken(tokenValue string, permission string) error { - return stputil.CheckPermission(tokenValue, permission) +// CheckDisableWithInfoByToken gets disable info by token | 根据Token获取封禁信息 +func CheckDisableWithInfoByToken(ctx context.Context, tokenValue string, authType ...string) (*manager.DisableInfo, error) { + return stputil.CheckDisableWithInfoByToken(ctx, tokenValue, authType...) } -// HasPermission checks if the account has specified permission (returns bool) | 检查账号是否拥有指定权限(返回布尔值) -func HasPermission(loginID interface{}, permission string) bool { - return stputil.HasPermission(loginID, permission) +// ============ Session Management | Session管理 ============ + +// GetSession gets session by login ID | 根据登录ID获取Session +func GetSession(ctx context.Context, loginID interface{}, authType ...string) (*session.Session, error) { + return stputil.GetSession(ctx, loginID, authType...) +} + +// GetSessionByToken gets session by token | 根据Token获取Session +func GetSessionByToken(ctx context.Context, tokenValue string, authType ...string) (*session.Session, error) { + return stputil.GetSessionByToken(ctx, tokenValue, authType...) } -// CheckPermissionAnd checks if the account has all specified permissions (AND logic) | 检查账号是否拥有所有指定权限(AND逻辑) -func CheckPermissionAndByToken(tokenValue string, permissions []string) error { - return stputil.CheckPermissionAnd(tokenValue, permissions) +// DeleteSession deletes a session | 删除Session +func DeleteSession(ctx context.Context, loginID interface{}, authType ...string) error { + return stputil.DeleteSession(ctx, loginID, authType...) } -// CheckPermissionOr checks if the account has any of the specified permissions (OR logic) | 检查账号是否拥有指定权限中的任意一个(OR逻辑) -func CheckPermissionOrByToken(tokenValue string, permissions []string) error { - return stputil.CheckPermissionOr(tokenValue, permissions) +// DeleteSessionByToken Deletes session by token | 根据Token删除Session +func DeleteSessionByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.DeleteSessionByToken(ctx, tokenValue, authType...) } -// GetPermissionList gets the permission list for an account | 获取账号的权限列表 -func GetPermissionListByToken(tokenValue string) ([]string, error) { - return stputil.GetPermissionList(tokenValue) +// HasSession checks if session exists | 检查Session是否存在 +func HasSession(ctx context.Context, loginID interface{}, authType ...string) bool { + return stputil.HasSession(ctx, loginID, authType...) } -// ============ Role Check | 角色验证 ============ +// RenewSession renews session TTL | 续期Session +func RenewSession(ctx context.Context, loginID interface{}, ttl time.Duration, authType ...string) error { + return stputil.RenewSession(ctx, loginID, ttl, authType...) +} -// CheckRole checks if the account has specified role | 检查账号是否拥有指定角色 -func CheckRoleByToken(tokenValue string, role string) error { - return stputil.CheckRole(tokenValue, role) +// RenewSessionByToken renews session TTL by token | 根据Token续期Session +func RenewSessionByToken(ctx context.Context, tokenValue string, ttl time.Duration, authType ...string) error { + return stputil.RenewSessionByToken(ctx, tokenValue, ttl, authType...) } -// HasRole checks if the account has specified role (returns bool) | 检查账号是否拥有指定角色(返回布尔值) -func HasRole(loginID interface{}, role string) bool { - return stputil.HasRole(loginID, role) +// ============ Permission Verification | 权限验证 ============ + +// SetPermissions sets permissions for a login ID | 设置用户权限 +func SetPermissions(ctx context.Context, loginID interface{}, permissions []string, authType ...string) error { + return stputil.SetPermissions(ctx, loginID, permissions, authType...) } -// CheckRoleAnd checks if the account has all specified roles (AND logic) | 检查账号是否拥有所有指定角色(AND逻辑) -func CheckRoleAndByToken(tokenValue string, roles []string) error { - return stputil.CheckRoleAnd(tokenValue, roles) +// SetPermissionsByToken sets permissions by token | 根据 Token 设置对应账号的权限 +func SetPermissionsByToken(ctx context.Context, tokenValue string, permissions []string, authType ...string) error { + return stputil.SetPermissionsByToken(ctx, tokenValue, permissions, authType...) } -// CheckRoleOr checks if the account has any of the specified roles (OR logic) | 检查账号是否拥有指定角色中的任意一个(OR逻辑) -func CheckRoleOrByToken(tokenValue string, roles []string) error { - return stputil.CheckRoleOr(tokenValue, roles) +// RemovePermissions removes specified permissions for a login ID | 删除用户指定权限 +func RemovePermissions(ctx context.Context, loginID interface{}, permissions []string, authType ...string) error { + return stputil.RemovePermissions(ctx, loginID, permissions, authType...) } -// GetRoleList gets the role list for an account | 获取账号的角色列表 -func GetRoleListByToken(tokenValue string) ([]string, error) { - return stputil.GetRoleList(tokenValue) +// RemovePermissionsByToken removes specified permissions by token | 根据 Token 删除对应账号的指定权限 +func RemovePermissionsByToken(ctx context.Context, tokenValue string, permissions []string, authType ...string) error { + return stputil.RemovePermissionsByToken(ctx, tokenValue, permissions, authType...) } -// ============ Session Management | Session管理 ============ +// GetPermissions gets permission list | 获取权限列表 +func GetPermissions(ctx context.Context, loginID interface{}, authType ...string) ([]string, error) { + return stputil.GetPermissions(ctx, loginID, authType...) +} + +// GetPermissionsByToken gets permission list by token | 根据 Token 获取对应账号的权限列表 +func GetPermissionsByToken(ctx context.Context, tokenValue string, authType ...string) ([]string, error) { + return stputil.GetPermissionsByToken(ctx, tokenValue, authType...) +} + +// HasPermission checks if has specified permission | 检查是否拥有指定权限 +func HasPermission(ctx context.Context, loginID interface{}, permission string, authType ...string) bool { + return stputil.HasPermission(ctx, loginID, permission, authType...) +} + +// HasPermissionByToken checks if the token has the specified permission | 检查Token是否拥有指定权限 +func HasPermissionByToken(ctx context.Context, tokenValue string, permission string, authType ...string) bool { + return stputil.HasPermissionByToken(ctx, tokenValue, permission, authType...) +} + +// HasPermissionsAnd checks if has all permissions (AND logic) | 检查是否拥有所有权限(AND逻辑) +func HasPermissionsAnd(ctx context.Context, loginID interface{}, permissions []string, authType ...string) bool { + return stputil.HasPermissionsAnd(ctx, loginID, permissions, authType...) +} + +// HasPermissionsAndByToken checks if the token has all specified permissions | 检查Token是否拥有所有指定权限 +func HasPermissionsAndByToken(ctx context.Context, tokenValue string, permissions []string, authType ...string) bool { + return stputil.HasPermissionsAndByToken(ctx, tokenValue, permissions, authType...) +} + +// HasPermissionsOr checks if has any permission (OR logic) | 检查是否拥有任一权限(OR逻辑) +func HasPermissionsOr(ctx context.Context, loginID interface{}, permissions []string, authType ...string) bool { + return stputil.HasPermissionsOr(ctx, loginID, permissions, authType...) +} + +// HasPermissionsOrByToken checks if the token has any of the specified permissions | 检查Token是否拥有任一指定权限 +func HasPermissionsOrByToken(ctx context.Context, tokenValue string, permissions []string, authType ...string) bool { + return stputil.HasPermissionsOrByToken(ctx, tokenValue, permissions, authType...) +} + +// ============ Role Management | 角色管理 ============ + +// SetRoles sets roles for a login ID | 设置用户角色 +func SetRoles(ctx context.Context, loginID interface{}, roles []string, authType ...string) error { + return stputil.SetRoles(ctx, loginID, roles, authType...) +} + +// SetRolesByToken sets roles by token | 根据 Token 设置对应账号的角色 +func SetRolesByToken(ctx context.Context, tokenValue string, roles []string, authType ...string) error { + return stputil.SetRolesByToken(ctx, tokenValue, roles, authType...) +} + +// RemoveRoles removes specified roles for a login ID | 删除用户指定角色 +func RemoveRoles(ctx context.Context, loginID interface{}, roles []string, authType ...string) error { + return stputil.RemoveRoles(ctx, loginID, roles, authType...) +} + +// RemoveRolesByToken removes specified roles by token | 根据 Token 删除对应账号的指定角色 +func RemoveRolesByToken(ctx context.Context, tokenValue string, roles []string, authType ...string) error { + return stputil.RemoveRolesByToken(ctx, tokenValue, roles, authType...) +} + +// GetRoles gets role list | 获取角色列表 +func GetRoles(ctx context.Context, loginID interface{}, authType ...string) ([]string, error) { + return stputil.GetRoles(ctx, loginID, authType...) +} + +// GetRolesByToken gets role list by token | 根据 Token 获取对应账号的角色列表 +func GetRolesByToken(ctx context.Context, tokenValue string, authType ...string) ([]string, error) { + return stputil.GetRolesByToken(ctx, tokenValue, authType...) +} + +// HasRole checks if has specified role | 检查是否拥有指定角色 +func HasRole(ctx context.Context, loginID interface{}, role string, authType ...string) bool { + return stputil.HasRole(ctx, loginID, role, authType...) +} + +// HasRoleByToken checks if the token has the specified role | 检查 Token 是否拥有指定角色 +func HasRoleByToken(ctx context.Context, tokenValue string, role string, authType ...string) bool { + return stputil.HasRoleByToken(ctx, tokenValue, role, authType...) +} + +// HasRolesAnd checks if has all roles (AND logic) | 检查是否拥有所有角色(AND逻辑) +func HasRolesAnd(ctx context.Context, loginID interface{}, roles []string, authType ...string) bool { + return stputil.HasRolesAnd(ctx, loginID, roles, authType...) +} -// GetSession gets the session for a login ID | 获取登录ID的Session -func GetSession(loginID interface{}) (*Session, error) { - return stputil.GetSession(loginID) +// HasRolesAndByToken checks if the token has all specified roles | 检查 Token 是否拥有所有指定角色 +func HasRolesAndByToken(ctx context.Context, tokenValue string, roles []string, authType ...string) bool { + return stputil.HasRolesAndByToken(ctx, tokenValue, roles, authType...) } -// GetSessionByToken gets the session by token | 根据Token获取Session -func GetSessionByToken(tokenValue string) (*Session, error) { - return stputil.GetSessionByToken(tokenValue) +// HasRolesOr checks if has any role (OR logic) | 检查是否拥有任一角色(OR逻辑) +func HasRolesOr(ctx context.Context, loginID interface{}, roles []string, authType ...string) bool { + return stputil.HasRolesOr(ctx, loginID, roles, authType...) } -// GetTokenSession gets the token session | 获取Token的Session -func GetTokenSession(tokenValue string) (*Session, error) { - return stputil.GetTokenSession(tokenValue) +// HasRolesOrByToken checks if the token has any of the specified roles | 检查 Token 是否拥有任一指定角色 +func HasRolesOrByToken(ctx context.Context, tokenValue string, roles []string, authType ...string) bool { + return stputil.HasRolesOrByToken(ctx, tokenValue, roles, authType...) } -// ============ Token Renewal | Token续期 ============ +// ============ Token Tag | Token标签 ============ + +// SetTokenTag sets token tag | 设置Token标签 +func SetTokenTag(ctx context.Context, tokenValue, tag string, authType ...string) error { + return stputil.SetTokenTag(ctx, tokenValue, tag, authType...) +} + +// GetTokenTag gets token tag | 获取Token标签 +func GetTokenTag(ctx context.Context, tokenValue string, authType ...string) (string, error) { + return stputil.GetTokenTag(ctx, tokenValue, authType...) +} -// RenewTimeout renews token timeout | 续期Token超时时间 +// ============ Session Query | 会话查询 ============ + +// GetTokenValueListByLoginID gets all tokens for a login ID | 获取指定账号的所有Token +func GetTokenValueListByLoginID(ctx context.Context, loginID interface{}, authType ...string) ([]string, error) { + return stputil.GetTokenValueListByLoginID(ctx, loginID, authType...) +} + +// GetSessionCountByLoginID gets session count for a login ID | 获取指定账号的Session数量 +func GetSessionCountByLoginID(ctx context.Context, loginID interface{}, authType ...string) (int, error) { + return stputil.GetSessionCountByLoginID(ctx, loginID, authType...) +} // ============ Security Features | 安全特性 ============ -// GenerateNonce generates a new nonce token | 生成新的Nonce令牌 -func GenerateNonce() (string, error) { - return stputil.GenerateNonce() +// Generate Generates a one-time nonce | 生成一次性随机数 +func Generate(ctx context.Context, authType ...string) (string, error) { + return stputil.Generate(ctx, authType...) +} + +// Verify Verifies a nonce | 验证随机数 +func Verify(ctx context.Context, nonce string, authType ...string) bool { + return stputil.Verify(ctx, nonce, authType...) } -// VerifyNonce verifies a nonce token | 验证Nonce令牌 -func VerifyNonce(nonce string) bool { - return stputil.VerifyNonce(nonce) +// VerifyAndConsume Verifies and consumes nonce, returns error if invalid | 验证并消费nonce,无效时返回错误 +func VerifyAndConsume(ctx context.Context, nonce string, authType ...string) error { + return stputil.VerifyAndConsume(ctx, nonce, authType...) } -// LoginWithRefreshToken performs login and returns both access token and refresh token | 登录并返回访问令牌和刷新令牌 -func LoginWithRefreshToken(loginID interface{}, device ...string) (*RefreshTokenInfo, error) { - return stputil.LoginWithRefreshToken(loginID, device...) +// IsValidNonce Checks if nonce is valid without consuming it | 检查nonce是否有效(不消费) +func IsValidNonce(ctx context.Context, nonce string, authType ...string) bool { + return stputil.IsValidNonce(ctx, nonce, authType...) } -// RefreshAccessToken refreshes the access token using a refresh token | 使用刷新令牌刷新访问令牌 -func RefreshAccessToken(refreshToken string) (*RefreshTokenInfo, error) { - return stputil.RefreshAccessToken(refreshToken) +// GenerateTokenPair Create access + refresh token | 生成访问令牌和刷新令牌 +func GenerateTokenPair(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) (*security.RefreshTokenInfo, error) { + return stputil.GenerateTokenPair(ctx, loginID, deviceOrAutoType...) } -// RevokeRefreshToken revokes a refresh token | 撤销刷新令牌 -func RevokeRefreshToken(refreshToken string) error { - return stputil.RevokeRefreshToken(refreshToken) +// VerifyAccessToken verifies access token validity | 验证访问令牌是否有效 +func VerifyAccessToken(ctx context.Context, accessToken string, authType ...string) bool { + return stputil.VerifyAccessToken(ctx, accessToken, authType...) +} + +// VerifyAccessTokenAndGetInfo verifies access token and returns token info | 验证访问令牌并返回Token信息 +func VerifyAccessTokenAndGetInfo(ctx context.Context, accessToken string, authType ...string) (*security.AccessTokenInfo, bool) { + return stputil.VerifyAccessTokenAndGetInfo(ctx, accessToken, authType...) +} + +// GetRefreshTokenInfo gets refresh token information | 获取刷新令牌信息 +func GetRefreshTokenInfo(ctx context.Context, refreshToken string, authType ...string) (*security.RefreshTokenInfo, error) { + return stputil.GetRefreshTokenInfo(ctx, refreshToken, authType...) +} + +// RefreshAccessToken refreshes access token using refresh token | 使用刷新令牌刷新访问令牌 +func RefreshAccessToken(ctx context.Context, refreshToken string, authType ...string) (*security.RefreshTokenInfo, error) { + return stputil.RefreshAccessToken(ctx, refreshToken, authType...) +} + +// RevokeRefreshToken Revokes refresh token | 撤销刷新令牌 +func RevokeRefreshToken(ctx context.Context, refreshToken string, authType ...string) error { + return stputil.RevokeRefreshToken(ctx, refreshToken, authType...) +} + +// IsValid checks whether token is valid | 检查Token是否有效 +func IsValid(ctx context.Context, refreshToken string, authType ...string) bool { + return stputil.IsValid(ctx, refreshToken, authType...) +} + +// ============ OAuth2 Features | OAuth2 功能 ============ + +// RegisterClient Registers an OAuth2 client | 注册OAuth2客户端 +func RegisterClient(ctx context.Context, client *oauth2.Client, authType ...string) error { + return stputil.RegisterClient(ctx, client, authType...) } -// GetOAuth2Server gets the OAuth2 server instance | 获取OAuth2服务器实例 -func GetOAuth2Server() *OAuth2Server { - return stputil.GetOAuth2Server() +// UnregisterClient unregisters an OAuth2 client | 注销OAuth2客户端 +func UnregisterClient(ctx context.Context, clientID string, authType ...string) error { + return stputil.UnregisterClient(ctx, clientID, authType...) } -// Version Sa-Token-Go version | Sa-Token-Go版本 -const Version = core.Version +// GetClient gets OAuth2 client information | 获取OAuth2客户端信息 +func GetClient(ctx context.Context, clientID string, authType ...string) (*oauth2.Client, error) { + return stputil.GetClient(ctx, clientID, authType...) +} + +// GenerateAuthorizationCode creates an authorization code | 创建授权码 +func GenerateAuthorizationCode(ctx context.Context, clientID, loginID, redirectURI string, scope []string, authType ...string) (*oauth2.AuthorizationCode, error) { + return stputil.GenerateAuthorizationCode(ctx, clientID, loginID, redirectURI, scope, authType...) +} + +// ExchangeCodeForToken exchanges authorization code for token | 使用授权码换取令牌 +func ExchangeCodeForToken(ctx context.Context, code, clientID, clientSecret, redirectURI string, authType ...string) (*oauth2.AccessToken, error) { + return stputil.ExchangeCodeForToken(ctx, code, clientID, clientSecret, redirectURI, authType...) +} + +// ValidateAccessToken verifies OAuth2 access token | 验证OAuth2访问令牌 +func ValidateAccessToken(ctx context.Context, accessToken string, authType ...string) bool { + return stputil.ValidateAccessToken(ctx, accessToken, authType...) +} + +// ValidateAccessTokenAndGetInfo verifies OAuth2 access token and get info | 验证OAuth2访问令牌并获取信息 +func ValidateAccessTokenAndGetInfo(ctx context.Context, accessToken string, authType ...string) (*oauth2.AccessToken, error) { + return stputil.ValidateAccessTokenAndGetInfo(ctx, accessToken, authType...) +} + +// OAuth2RefreshAccessToken Refreshes access token using refresh token | 使用刷新令牌刷新访问令牌(OAuth2) +func OAuth2RefreshAccessToken(ctx context.Context, clientID, refreshToken, clientSecret string, authType ...string) (*oauth2.AccessToken, error) { + return stputil.OAuth2RefreshAccessToken(ctx, clientID, refreshToken, clientSecret, authType...) +} + +// RevokeToken Revokes access token and its refresh token | 撤销访问令牌及其刷新令牌 +func RevokeToken(ctx context.Context, accessToken string, authType ...string) error { + return stputil.RevokeToken(ctx, accessToken, authType...) +} + +// OAuth2Token Unified token endpoint that dispatches to appropriate handler based on grant type | 统一的令牌端点 +func OAuth2Token(ctx context.Context, req *oauth2.TokenRequest, validateUser oauth2.UserValidator, authType ...string) (*oauth2.AccessToken, error) { + return stputil.OAuth2Token(ctx, req, validateUser, authType...) +} + +// OAuth2ClientCredentialsToken Gets access token using client credentials grant | 使用客户端凭证模式获取访问令牌 +func OAuth2ClientCredentialsToken(ctx context.Context, clientID, clientSecret string, scopes []string, authType ...string) (*oauth2.AccessToken, error) { + return stputil.OAuth2ClientCredentialsToken(ctx, clientID, clientSecret, scopes, authType...) +} + +// OAuth2PasswordGrantToken Gets access token using resource owner password credentials grant | 使用密码模式获取访问令牌 +func OAuth2PasswordGrantToken(ctx context.Context, clientID, clientSecret, username, password string, scopes []string, validateUser oauth2.UserValidator, authType ...string) (*oauth2.AccessToken, error) { + return stputil.OAuth2PasswordGrantToken(ctx, clientID, clientSecret, username, password, scopes, validateUser, authType...) +} + +// ============ OAuth2 Grant Type Constants | OAuth2授权类型常量 ============ + +const ( + // GrantTypeAuthorizationCode Authorization code grant type | 授权码模式 + GrantTypeAuthorizationCode = oauth2.GrantTypeAuthorizationCode + // GrantTypeClientCredentials Client credentials grant type | 客户端凭证模式 + GrantTypeClientCredentials = oauth2.GrantTypeClientCredentials + // GrantTypePassword Password grant type | 密码模式 + GrantTypePassword = oauth2.GrantTypePassword + // GrantTypeRefreshToken Refresh token grant type | 刷新令牌模式 + GrantTypeRefreshToken = oauth2.GrantTypeRefreshToken +) + +// ============ Public Getters | 公共获取器 ============ + +// GetConfig returns the manager-example configuration | 获取 Manager 当前使用的配置 +func GetConfig(ctx context.Context, authType ...string) *config.Config { + return stputil.GetConfig(ctx, authType...) +} + +// GetStorage returns the storage adapter | 获取 Manager 使用的存储适配器 +func GetStorage(ctx context.Context, authType ...string) adapter.Storage { + return stputil.GetStorage(ctx, authType...) +} + +// GetCodec returns the codec (serializer) | 获取 Manager 使用的编解码器 +func GetCodec(ctx context.Context, authType ...string) adapter.Codec { + return stputil.GetCodec(ctx, authType...) +} + +// GetLog returns the logger adapter | 获取 Manager 使用的日志适配器 +func GetLog(ctx context.Context, authType ...string) adapter.Log { + return stputil.GetLog(ctx, authType...) +} + +// GetPool returns the goroutine pool | 获取 Manager 使用的协程池 +func GetPool(ctx context.Context, authType ...string) adapter.Pool { + return stputil.GetPool(ctx, authType...) +} + +// GetGenerator returns the token generator | 获取 Token 生成器 +func GetGenerator(ctx context.Context, authType ...string) adapter.Generator { + return stputil.GetGenerator(ctx, authType...) +} + +// GetNonceManager returns the nonce manager-example | 获取随机串管理器 +func GetNonceManager(ctx context.Context, authType ...string) *security.NonceManager { + return stputil.GetNonceManager(ctx, authType...) +} + +// GetRefreshManager returns the refresh token manager-example | 获取刷新令牌管理器 +func GetRefreshManager(ctx context.Context, authType ...string) *security.RefreshTokenManager { + return stputil.GetRefreshManager(ctx, authType...) +} + +// GetEventManager returns the event manager-example | 获取事件管理器 +func GetEventManager(ctx context.Context, authType ...string) *listener.Manager { + return stputil.GetEventManager(ctx, authType...) +} + +// GetOAuth2Server Gets OAuth2 server instance | 获取OAuth2服务器实例 +func GetOAuth2Server(ctx context.Context, authType ...string) *oauth2.OAuth2Server { + return stputil.GetOAuth2Server(ctx, authType...) +} + +// ============ Event Management | 事件管理 ============ + +// RegisterFunc registers a function as an event listener | 注册函数作为事件监听器 +func RegisterFunc(event listener.Event, fn func(*listener.EventData), authType ...string) { + stputil.RegisterFunc(event, fn, authType...) +} + +// Register registers an event listener | 注册事件监听器 +func Register(event listener.Event, l listener.Listener, authType ...string) string { + return stputil.Register(event, l, authType...) +} + +// RegisterWithConfig registers an event listener with config | 注册带配置的事件监听器 +func RegisterWithConfig(event listener.Event, l listener.Listener, cfg listener.ListenerConfig, authType ...string) string { + return stputil.RegisterWithConfig(event, l, cfg, authType...) +} + +// Unregister removes an event listener by ID | 根据ID移除事件监听器 +func Unregister(id string, authType ...string) bool { + return stputil.Unregister(id, authType...) +} + +// TriggerEvent manually triggers an event | 手动触发事件 +func TriggerEvent(data *listener.EventData, authType ...string) { + stputil.TriggerEvent(data, authType...) +} + +// TriggerEventAsync triggers an event asynchronously and returns immediately | 异步触发事件并立即返回 +func TriggerEventAsync(data *listener.EventData, authType ...string) { + stputil.TriggerEventAsync(data, authType...) +} + +// TriggerEventSync triggers an event synchronously and waits for all listeners | 同步触发事件并等待所有监听器完成 +func TriggerEventSync(data *listener.EventData, authType ...string) { + stputil.TriggerEventSync(data, authType...) +} + +// WaitEvents waits for all async event listeners to complete | 等待所有异步事件监听器完成 +func WaitEvents(authType ...string) { + stputil.WaitEvents(authType...) +} + +// ClearEventListeners removes all listeners for a specific event | 清除指定事件的所有监听器 +func ClearEventListeners(event listener.Event, authType ...string) { + stputil.ClearEventListeners(event, authType...) +} + +// ClearAllEventListeners removes all listeners | 清除所有事件监听器 +func ClearAllEventListeners(authType ...string) { + stputil.ClearAllEventListeners(authType...) +} + +// CountEventListeners returns the number of listeners for a specific event | 获取指定事件监听器数量 +func CountEventListeners(event listener.Event, authType ...string) int { + return stputil.CountEventListeners(event, authType...) +} + +// CountAllListeners returns the total number of registered listeners | 获取已注册监听器总数 +func CountAllListeners(authType ...string) int { + return stputil.CountAllListeners(authType...) +} + +// GetEventListenerIDs returns all listener IDs for a specific event | 获取指定事件的所有监听器ID +func GetEventListenerIDs(event listener.Event, authType ...string) []string { + return stputil.GetEventListenerIDs(event, authType...) +} + +// GetAllRegisteredEvents returns all events that have registered listeners | 获取所有已注册事件 +func GetAllRegisteredEvents(authType ...string) []listener.Event { + return stputil.GetAllRegisteredEvents(authType...) +} + +// HasEventListeners checks if there are any listeners for a specific event | 检查指定事件是否有监听器 +func HasEventListeners(event listener.Event, authType ...string) bool { + return stputil.HasEventListeners(event, authType...) +} diff --git a/integrations/echo/middleware.go b/integrations/echo/middleware.go new file mode 100644 index 0000000..9b3753d --- /dev/null +++ b/integrations/echo/middleware.go @@ -0,0 +1,316 @@ +package echo + +import ( + "errors" + "net/http" + + "github.com/click33/sa-token-go/core" + "github.com/click33/sa-token-go/core/manager" + + saContext "github.com/click33/sa-token-go/core/context" + "github.com/click33/sa-token-go/stputil" + "github.com/labstack/echo/v4" +) + +// LogicType permission/role logic type | 权限/角色判断逻辑 +type LogicType string + +const ( + SaTokenCtxKey = "saCtx" + + LogicOr LogicType = "OR" // Logical OR | 任一满足 + LogicAnd LogicType = "AND" // Logical AND | 全部满足 +) + +type AuthOption func(*AuthOptions) + +type AuthOptions struct { + AuthType string + LogicType LogicType + AuthFailFunc func(c echo.Context, err error) error +} + +func defaultAuthOptions() *AuthOptions { + return &AuthOptions{LogicType: LogicAnd} // 默认 AND +} + +// WithAuthType sets auth type | 设置认证类型 +func WithAuthType(authType string) AuthOption { + return func(o *AuthOptions) { + o.AuthType = authType + } +} + +// WithLogicType sets LogicType option | 设置逻辑类型 +func WithLogicType(logicType LogicType) AuthOption { + return func(o *AuthOptions) { + o.LogicType = logicType + } +} + +// WithAuthFailFunc sets auth failure callback | 设置认证失败回调 +func WithAuthFailFunc(fn func(c echo.Context, err error) error) AuthOption { + return func(o *AuthOptions) { + o.AuthFailFunc = fn + } +} + +// ========== Middlewares ========== + +// AuthMiddleware authentication middleware | 认证中间件 +func AuthMiddleware(opts ...AuthOption) echo.MiddlewareFunc { + options := defaultAuthOptions() + for _, opt := range opts { + opt(options) + } + + return func(next echo.HandlerFunc) echo.HandlerFunc { + return func(c echo.Context) error { + mgr, err := stputil.GetManager(options.AuthType) + if err != nil { + if options.AuthFailFunc != nil { + return options.AuthFailFunc(c, err) + } + return writeErrorResponse(c, err) + } + + // 获取 token | Get token + saCtx := getSaContext(c, mgr) + tokenValue := saCtx.GetTokenValue() + + // 检查登录 | Check login + err = mgr.CheckLogin(c.Request().Context(), tokenValue) + if err != nil { + if options.AuthFailFunc != nil { + return options.AuthFailFunc(c, err) + } + return writeErrorResponse(c, err) + } + + return next(c) + } + } +} + +// AuthWithStateMiddleware with state authentication middleware | 带状态返回的认证中间件 +func AuthWithStateMiddleware(opts ...AuthOption) echo.MiddlewareFunc { + options := defaultAuthOptions() + for _, opt := range opts { + opt(options) + } + + return func(next echo.HandlerFunc) echo.HandlerFunc { + return func(c echo.Context) error { + // 获取 Manager | Get Manager + mgr, err := stputil.GetManager(options.AuthType) + if err != nil { + if options.AuthFailFunc != nil { + return options.AuthFailFunc(c, err) + } + return writeErrorResponse(c, err) + } + + // 构建 Sa-Token 上下文 | Build Sa-Token context + saCtx := getSaContext(c, mgr) + tokenValue := saCtx.GetTokenValue() + + // 检查登录并返回状态 | Check login with state + _, err = mgr.CheckLoginWithState(c.Request().Context(), tokenValue) + + if err != nil { + // 用户自定义回调优先 + if options.AuthFailFunc != nil { + return options.AuthFailFunc(c, err) + } + return writeErrorResponse(c, err) + } + + return next(c) + } + } +} + +// PermissionMiddleware permission check middleware | 权限校验中间件 +func PermissionMiddleware( + permissions []string, + opts ...AuthOption, +) echo.MiddlewareFunc { + + options := defaultAuthOptions() + for _, opt := range opts { + opt(options) + } + + return func(next echo.HandlerFunc) echo.HandlerFunc { + return func(c echo.Context) error { + // No permission required | 无需权限直接放行 + if len(permissions) == 0 { + return next(c) + } + + // Get Manager | 获取 Manager + mgr, err := stputil.GetManager(options.AuthType) + if err != nil { + if options.AuthFailFunc != nil { + return options.AuthFailFunc(c, err) + } + return writeErrorResponse(c, err) + } + + // 构建 Sa-Token 上下文 | Build Sa-Token context + saCtx := getSaContext(c, mgr) + tokenValue := saCtx.GetTokenValue() + ctx := c.Request().Context() + + // Permission check | 权限校验 + var ok bool + if options.LogicType == LogicAnd { + ok = mgr.HasPermissionsAndByToken(ctx, tokenValue, permissions) + } else { + ok = mgr.HasPermissionsOrByToken(ctx, tokenValue, permissions) + } + + if !ok { + if options.AuthFailFunc != nil { + return options.AuthFailFunc(c, core.ErrPermissionDenied) + } + return writeErrorResponse(c, core.ErrPermissionDenied) + } + + return next(c) + } + } +} + +// RoleMiddleware role check middleware | 角色校验中间件 +func RoleMiddleware( + roles []string, + opts ...AuthOption, +) echo.MiddlewareFunc { + + options := defaultAuthOptions() + for _, opt := range opts { + opt(options) + } + + return func(next echo.HandlerFunc) echo.HandlerFunc { + return func(c echo.Context) error { + // No role required | 无需角色直接放行 + if len(roles) == 0 { + return next(c) + } + + // Get Manager | 获取 Manager + mgr, err := stputil.GetManager(options.AuthType) + if err != nil { + if options.AuthFailFunc != nil { + return options.AuthFailFunc(c, err) + } + return writeErrorResponse(c, err) + } + + // 构建 Sa-Token 上下文 | Build Sa-Token context + saCtx := getSaContext(c, mgr) + tokenValue := saCtx.GetTokenValue() + ctx := c.Request().Context() + + // Role check | 角色校验 + var ok bool + if options.LogicType == LogicAnd { + ok = mgr.HasRolesAndByToken(ctx, tokenValue, roles) + } else { + ok = mgr.HasRolesOrByToken(ctx, tokenValue, roles) + } + + if !ok { + if options.AuthFailFunc != nil { + return options.AuthFailFunc(c, core.ErrRoleDenied) + } + return writeErrorResponse(c, core.ErrRoleDenied) + } + + return next(c) + } + } +} + +// GetSaTokenContext gets Sa-Token context from Echo context | 获取 Sa-Token 上下文 +func GetSaTokenContext(c echo.Context) (*saContext.SaTokenContext, bool) { + v := c.Get(SaTokenCtxKey) + if v == nil { + return nil, false + } + + ctx, ok := v.(*saContext.SaTokenContext) + return ctx, ok +} + +func getSaContext(c echo.Context, mgr *manager.Manager) *saContext.SaTokenContext { + // Try get from context | 尝试从 ctx 取值 + if v := c.Get(SaTokenCtxKey); v != nil { + if saCtx, ok := v.(*saContext.SaTokenContext); ok { + return saCtx + } + } + + // Create new context | 创建并缓存 SaTokenContext + saCtx := saContext.NewContext(NewEchoContext(c), mgr) + c.Set(SaTokenCtxKey, saCtx) + + return saCtx +} + +// ============ Error Handling Helpers | 错误处理辅助函数 ============ + +// writeErrorResponse writes a standardized error response | 写入标准化的错误响应 +func writeErrorResponse(c echo.Context, err error) error { + var saErr *core.SaTokenError + var code int + var message string + var httpStatus int + + // Check if it's a SaTokenError | 检查是否为SaTokenError + if errors.As(err, &saErr) { + code = saErr.Code + message = saErr.Message + httpStatus = getHTTPStatusFromCode(code) + } else { + // Handle standard errors | 处理标准错误 + code = core.CodeServerError + message = err.Error() + httpStatus = http.StatusInternalServerError + } + + return c.JSON(httpStatus, map[string]interface{}{ + "code": code, + "message": message, + "data": err.Error(), + }) +} + +// writeSuccessResponse writes a standardized success response | 写入标准化的成功响应 +func writeSuccessResponse(c echo.Context, data interface{}) error { + return c.JSON(http.StatusOK, map[string]interface{}{ + "code": core.CodeSuccess, + "message": "success", + "data": data, + }) +} + +// getHTTPStatusFromCode converts Sa-Token error code to HTTP status | 将Sa-Token错误码转换为HTTP状态码 +func getHTTPStatusFromCode(code int) int { + switch code { + case core.CodeNotLogin: + return http.StatusUnauthorized + case core.CodePermissionDenied: + return http.StatusForbidden + case core.CodeBadRequest: + return http.StatusBadRequest + case core.CodeNotFound: + return http.StatusNotFound + case core.CodeServerError: + return http.StatusInternalServerError + default: + return http.StatusInternalServerError + } +} diff --git a/integrations/echo/plugin.go b/integrations/echo/plugin.go deleted file mode 100644 index e264f29..0000000 --- a/integrations/echo/plugin.go +++ /dev/null @@ -1,172 +0,0 @@ -package echo - -import ( - "errors" - "net/http" - - "github.com/click33/sa-token-go/core" - "github.com/labstack/echo/v4" -) - -// Plugin Echo plugin for Sa-Token | Echo插件 -type Plugin struct { - manager *core.Manager -} - -// NewPlugin creates an Echo plugin | 创建Echo插件 -func NewPlugin(manager *core.Manager) *Plugin { - return &Plugin{ - manager: manager, - } -} - -// AuthMiddleware authentication middleware | 认证中间件 -func (p *Plugin) AuthMiddleware() echo.MiddlewareFunc { - return func(next echo.HandlerFunc) echo.HandlerFunc { - return func(c echo.Context) error { - ctx := NewEchoContext(c) - saCtx := core.NewContext(ctx, p.manager) - - if err := saCtx.CheckLogin(); err != nil { - return writeErrorResponse(c, err) - } - - c.Set("satoken", saCtx) - return next(c) - } - } -} - -// PermissionRequired permission validation middleware | 权限验证中间件 -func (p *Plugin) PermissionRequired(permission string) echo.MiddlewareFunc { - return func(next echo.HandlerFunc) echo.HandlerFunc { - return func(c echo.Context) error { - ctx := NewEchoContext(c) - saCtx := core.NewContext(ctx, p.manager) - - if err := saCtx.CheckLogin(); err != nil { - return writeErrorResponse(c, err) - } - - if !saCtx.HasPermission(permission) { - return writeErrorResponse(c, core.NewPermissionDeniedError(permission)) - } - - c.Set("satoken", saCtx) - return next(c) - } - } -} - -// RoleRequired role validation middleware | 角色验证中间件 -func (p *Plugin) RoleRequired(role string) echo.MiddlewareFunc { - return func(next echo.HandlerFunc) echo.HandlerFunc { - return func(c echo.Context) error { - ctx := NewEchoContext(c) - saCtx := core.NewContext(ctx, p.manager) - - if err := saCtx.CheckLogin(); err != nil { - return writeErrorResponse(c, err) - } - - if !saCtx.HasRole(role) { - return writeErrorResponse(c, core.NewRoleDeniedError(role)) - } - - c.Set("satoken", saCtx) - return next(c) - } - } -} - -// LoginHandler 登录处理器 -func (p *Plugin) LoginHandler(c echo.Context) error { - var req struct { - Username string `json:"username"` - Password string `json:"password"` - Device string `json:"device"` - } - - if err := c.Bind(&req); err != nil { - return writeErrorResponse(c, core.NewError(core.CodeBadRequest, "invalid request parameters", err)) - } - - device := req.Device - if device == "" { - device = "log" - } - - token, err := p.manager.Login(req.Username, device) - if err != nil { - return writeErrorResponse(c, core.NewError(core.CodeServerError, "login failed", err)) - } - - return writeSuccessResponse(c, map[string]interface{}{ - "token": token, - }) -} - -// GetSaToken 从Echo上下文获取Sa-Token上下文 -func GetSaToken(c echo.Context) (*core.SaTokenContext, bool) { - satoken := c.Get("satoken") - if satoken == nil { - return nil, false - } - ctx, ok := satoken.(*core.SaTokenContext) - return ctx, ok -} - -// ============ Error Handling Helpers | 错误处理辅助函数 ============ - -// writeErrorResponse writes a standardized error response | 写入标准化的错误响应 -func writeErrorResponse(c echo.Context, err error) error { - var saErr *core.SaTokenError - var code int - var message string - var httpStatus int - - // Check if it's a SaTokenError | 检查是否为SaTokenError - if errors.As(err, &saErr) { - code = saErr.Code - message = saErr.Message - httpStatus = getHTTPStatusFromCode(code) - } else { - // Handle standard errors | 处理标准错误 - code = core.CodeServerError - message = err.Error() - httpStatus = http.StatusInternalServerError - } - - return c.JSON(httpStatus, map[string]interface{}{ - "code": code, - "message": message, - "error": err.Error(), - }) -} - -// writeSuccessResponse writes a standardized success response | 写入标准化的成功响应 -func writeSuccessResponse(c echo.Context, data interface{}) error { - return c.JSON(http.StatusOK, map[string]interface{}{ - "code": core.CodeSuccess, - "message": "success", - "data": data, - }) -} - -// getHTTPStatusFromCode converts Sa-Token error code to HTTP status | 将Sa-Token错误码转换为HTTP状态码 -func getHTTPStatusFromCode(code int) int { - switch code { - case core.CodeNotLogin: - return http.StatusUnauthorized - case core.CodePermissionDenied: - return http.StatusForbidden - case core.CodeBadRequest: - return http.StatusBadRequest - case core.CodeNotFound: - return http.StatusNotFound - case core.CodeServerError: - return http.StatusInternalServerError - default: - return http.StatusInternalServerError - } -} diff --git a/integrations/fiber/annotation.go b/integrations/fiber/annotation.go index 0182710..bc6c03d 100644 --- a/integrations/fiber/annotation.go +++ b/integrations/fiber/annotation.go @@ -1,6 +1,8 @@ +// @Author daixk 2025/12/28 package fiber import ( + "context" "strings" "github.com/click33/sa-token-go/core" @@ -10,17 +12,19 @@ import ( // Annotation annotation structure | 注解结构体 type Annotation struct { - CheckLogin bool `json:"checkLogin"` - CheckRole []string `json:"checkRole"` - CheckPermission []string `json:"checkPermission"` - CheckDisable bool `json:"checkDisable"` - Ignore bool `json:"ignore"` + AuthType string `json:"authType"` // Optional: specify auth type | 可选:指定认证类型 + CheckLogin bool `json:"checkLogin"` // Check login | 检查登录 + CheckRole []string `json:"checkRole"` // Check roles | 检查角色 + CheckPermission []string `json:"checkPermission"` // Check permissions | 检查权限 + CheckDisable bool `json:"checkDisable"` // Check disable status | 检查封禁状态 + Ignore bool `json:"ignore"` // Ignore authentication | 忽略认证 + LogicType LogicType `json:"logicType"` // OR or AND logic (default: OR) | OR 或 AND 逻辑(默认: OR) } // GetHandler gets handler with annotations | 获取带注解的处理器 func GetHandler(handler fiber.Handler, annotations ...*Annotation) fiber.Handler { return func(c *fiber.Ctx) error { - // Check if authentication should be ignored | 检查是否忽略认证 + // Ignore authentication | 忽略认证直接放行 if len(annotations) > 0 && annotations[0].Ignore { if handler != nil { return handler(c) @@ -28,57 +32,81 @@ func GetHandler(handler fiber.Handler, annotations ...*Annotation) fiber.Handler return c.Next() } - // Get token from context using configured TokenName | 从上下文获取Token(使用配置的TokenName) - ctx := NewFiberContext(c) - saCtx := core.NewContext(ctx, stputil.GetManager()) + // Check if any authentication is needed | 检查是否需要任何认证 + ann := &Annotation{} + if len(annotations) > 0 { + ann = annotations[0] + } + + // No authentication required | 无需任何认证 + needAuth := ann.CheckLogin || ann.CheckDisable || len(ann.CheckPermission) > 0 || len(ann.CheckRole) > 0 + if !needAuth { + if handler != nil { + return handler(c) + } + return c.Next() + } + + ctx := c.UserContext() + + // Get manager-example | 获取 Manager + mgr, err := stputil.GetManager(ann.AuthType) + if err != nil { + return writeErrorResponse(c, err) + } + + // Get SaTokenContext (reuse cached context) | 获取 SaTokenContext(复用缓存上下文) + saCtx := getSaContext(c, mgr) token := saCtx.GetTokenValue() + if token == "" { return writeErrorResponse(c, core.NewNotLoginError()) } // Check login | 检查登录 - if !stputil.IsLogin(token) { - return writeErrorResponse(c, core.NewNotLoginError()) + if err := mgr.CheckLogin(ctx, token); err != nil { + return writeErrorResponse(c, err) } - // Get login ID | 获取登录ID - loginID, err := stputil.GetLoginID(token) - if err != nil { - return writeErrorResponse(c, err) + // Get loginID for further checks | 获取 loginID 用于后续检查 + var loginID string + if ann.CheckDisable || len(ann.CheckPermission) > 0 || len(ann.CheckRole) > 0 { + loginID, err = mgr.GetLoginIDNotCheck(ctx, token) + if err != nil { + return writeErrorResponse(c, err) + } } // Check if account is disabled | 检查是否被封禁 - if len(annotations) > 0 && annotations[0].CheckDisable { - if stputil.IsDisable(loginID) { + if ann.CheckDisable { + if mgr.IsDisable(ctx, loginID) { return writeErrorResponse(c, core.NewAccountDisabledError(loginID)) } } // Check permission | 检查权限 - if len(annotations) > 0 && len(annotations[0].CheckPermission) > 0 { - hasPermission := false - for _, perm := range annotations[0].CheckPermission { - if stputil.HasPermission(loginID, strings.TrimSpace(perm)) { - hasPermission = true - break - } + if len(ann.CheckPermission) > 0 { + var ok bool + if ann.LogicType == LogicAnd { + ok = mgr.HasPermissionsAnd(ctx, loginID, ann.CheckPermission) + } else { + ok = mgr.HasPermissionsOr(ctx, loginID, ann.CheckPermission) } - if !hasPermission { - return writeErrorResponse(c, core.NewPermissionDeniedError(strings.Join(annotations[0].CheckPermission, ","))) + if !ok { + return writeErrorResponse(c, core.NewPermissionDeniedError(strings.Join(ann.CheckPermission, ","))) } } // Check role | 检查角色 - if len(annotations) > 0 && len(annotations[0].CheckRole) > 0 { - hasRole := false - for _, role := range annotations[0].CheckRole { - if stputil.HasRole(loginID, strings.TrimSpace(role)) { - hasRole = true - break - } + if len(ann.CheckRole) > 0 { + var ok bool + if ann.LogicType == LogicAnd { + ok = mgr.HasRolesAnd(ctx, loginID, ann.CheckRole) + } else { + ok = mgr.HasRolesOr(ctx, loginID, ann.CheckRole) } - if !hasRole { - return writeErrorResponse(c, core.NewRoleDeniedError(strings.Join(annotations[0].CheckRole, ","))) + if !ok { + return writeErrorResponse(c, core.NewRoleDeniedError(strings.Join(ann.CheckRole, ","))) } } @@ -91,8 +119,12 @@ func GetHandler(handler fiber.Handler, annotations ...*Annotation) fiber.Handler } // CheckLoginMiddleware decorator for login checking | 检查登录装饰器 -func CheckLoginMiddleware() fiber.Handler { - return GetHandler(nil, &Annotation{CheckLogin: true}) +func CheckLoginMiddleware(authType ...string) fiber.Handler { + ann := &Annotation{CheckLogin: true} + if len(authType) > 0 { + ann.AuthType = authType[0] + } + return GetHandler(nil, ann) } // CheckRoleMiddleware decorator for role checking | 检查角色装饰器 @@ -100,17 +132,136 @@ func CheckRoleMiddleware(roles ...string) fiber.Handler { return GetHandler(nil, &Annotation{CheckRole: roles}) } +// CheckRoleMiddlewareWithAuthType decorator for role checking with auth type | 检查角色装饰器(带认证类型) +func CheckRoleMiddlewareWithAuthType(authType string, roles ...string) fiber.Handler { + return GetHandler(nil, &Annotation{CheckRole: roles, AuthType: authType}) +} + // CheckPermissionMiddleware decorator for permission checking | 检查权限装饰器 func CheckPermissionMiddleware(perms ...string) fiber.Handler { return GetHandler(nil, &Annotation{CheckPermission: perms}) } +// CheckPermissionMiddlewareWithAuthType decorator for permission checking with auth type | 检查权限装饰器(带认证类型) +func CheckPermissionMiddlewareWithAuthType(authType string, perms ...string) fiber.Handler { + return GetHandler(nil, &Annotation{CheckPermission: perms, AuthType: authType}) +} + // CheckDisableMiddleware decorator for checking if account is disabled | 检查是否被封禁装饰器 -func CheckDisableMiddleware() fiber.Handler { - return GetHandler(nil, &Annotation{CheckDisable: true}) +func CheckDisableMiddleware(authType ...string) fiber.Handler { + ann := &Annotation{CheckDisable: true} + if len(authType) > 0 { + ann.AuthType = authType[0] + } + return GetHandler(nil, ann) } // IgnoreMiddleware decorator to ignore authentication | 忽略认证装饰器 func IgnoreMiddleware() fiber.Handler { return GetHandler(nil, &Annotation{Ignore: true}) } + +// ============ Combined Middleware | 组合中间件 ============ + +// CheckLoginAndRoleMiddleware checks login and role | 检查登录和角色 +func CheckLoginAndRoleMiddleware(roles ...string) fiber.Handler { + return GetHandler(nil, &Annotation{CheckLogin: true, CheckRole: roles}) +} + +// CheckLoginAndPermissionMiddleware checks login and permission | 检查登录和权限 +func CheckLoginAndPermissionMiddleware(perms ...string) fiber.Handler { + return GetHandler(nil, &Annotation{CheckLogin: true, CheckPermission: perms}) +} + +// CheckAllMiddleware checks login, role, permission and disable status | 全面检查 +func CheckAllMiddleware(roles []string, perms []string) fiber.Handler { + return GetHandler(nil, &Annotation{ + CheckLogin: true, + CheckRole: roles, + CheckPermission: perms, + CheckDisable: true, + }) +} + +// ============ Route Group Helper | 路由组辅助函数 ============ + +// AuthGroup creates a route group with authentication | 创建带认证的路由组 +func AuthGroup(group fiber.Router, authType ...string) fiber.Router { + group.Use(CheckLoginMiddleware(authType...)) + return group +} + +// RoleGroup creates a route group with role checking | 创建带角色检查的路由组 +func RoleGroup(group fiber.Router, roles ...string) fiber.Router { + group.Use(CheckLoginAndRoleMiddleware(roles...)) + return group +} + +// PermissionGroup creates a route group with permission checking | 创建带权限检查的路由组 +func PermissionGroup(group fiber.Router, perms ...string) fiber.Router { + group.Use(CheckLoginAndPermissionMiddleware(perms...)) + return group +} + +// ============ Context Helper | 上下文辅助函数 ============ + +// GetLoginIDFromRequest gets login ID from request context | 从请求上下文获取登录 ID +func GetLoginIDFromRequest(c *fiber.Ctx, authType ...string) (string, error) { + var at string + if len(authType) > 0 { + at = authType[0] + } + + mgr, err := stputil.GetManager(at) + if err != nil { + return "", err + } + + saCtx := getSaContext(c, mgr) + token := saCtx.GetTokenValue() + if token == "" { + return "", core.ErrNotLogin + } + return mgr.GetLoginID(c.UserContext(), token) +} + +// IsLoginFromRequest checks if user is logged in from request | 从请求检查用户是否已登录 +func IsLoginFromRequest(c *fiber.Ctx, authType ...string) bool { + var at string + if len(authType) > 0 { + at = authType[0] + } + + mgr, err := stputil.GetManager(at) + if err != nil { + return false + } + + saCtx := getSaContext(c, mgr) + token := saCtx.GetTokenValue() + if token == "" { + return false + } + return mgr.IsLogin(c.UserContext(), token) +} + +// GetTokenFromRequest gets token from request (exported) | 从请求获取 Token(导出) +func GetTokenFromRequest(c *fiber.Ctx, authType ...string) string { + var at string + if len(authType) > 0 { + at = authType[0] + } + + mgr, err := stputil.GetManager(at) + if err != nil { + return "" + } + + saCtx := getSaContext(c, mgr) + return saCtx.GetTokenValue() +} + +// WithContext creates a new context with sa-token context | 创建带 sa-token 上下文的新上下文 +func WithContext(c *fiber.Ctx, authType ...string) context.Context { + return c.UserContext() +} diff --git a/integrations/fiber/export.go b/integrations/fiber/export.go index de7f9b4..21266ed 100644 --- a/integrations/fiber/export.go +++ b/integrations/fiber/export.go @@ -1,364 +1,950 @@ package fiber import ( + "context" "time" + "github.com/click33/sa-token-go/codec/json" + "github.com/click33/sa-token-go/codec/msgpack" "github.com/click33/sa-token-go/core" + "github.com/click33/sa-token-go/core/adapter" + "github.com/click33/sa-token-go/core/builder" + "github.com/click33/sa-token-go/core/config" + "github.com/click33/sa-token-go/core/listener" + "github.com/click33/sa-token-go/core/manager" + "github.com/click33/sa-token-go/core/oauth2" + "github.com/click33/sa-token-go/core/security" + "github.com/click33/sa-token-go/core/session" + "github.com/click33/sa-token-go/generator/sgenerator" + "github.com/click33/sa-token-go/log/nop" + "github.com/click33/sa-token-go/log/slog" + "github.com/click33/sa-token-go/pool/ants" + "github.com/click33/sa-token-go/storage/memory" + "github.com/click33/sa-token-go/storage/redis" "github.com/click33/sa-token-go/stputil" ) -// ============ Re-export core types | 重新导出核心类型 ============ +// ============ Type Aliases | 类型别名 ============ -// Configuration related types | 配置相关类型 type ( - Config = core.Config - CookieConfig = core.CookieConfig - TokenStyle = core.TokenStyle + // Config 配置 + Config = config.Config + // Manager 管理器 + Manager = manager.Manager + // Session 会话 + Session = session.Session + // TokenInfo Token信息 + TokenInfo = manager.TokenInfo + // DisableInfo 封禁信息 + DisableInfo = manager.DisableInfo + // Builder 构建器 + Builder = builder.Builder + // SaTokenError 错误类型 + SaTokenError = core.SaTokenError + // Event 事件类型 + Event = listener.Event + // EventData 事件数据 + EventData = listener.EventData + // Listener 事件监听器 + Listener = listener.Listener + // ListenerConfig 监听器配置 + ListenerConfig = listener.ListenerConfig + // RefreshTokenInfo 刷新令牌信息 + RefreshTokenInfo = security.RefreshTokenInfo + // AccessTokenInfo 访问令牌信息 + AccessTokenInfo = security.AccessTokenInfo + // OAuth2Client OAuth2客户端 + OAuth2Client = oauth2.Client + // OAuth2AccessToken OAuth2访问令牌 + OAuth2AccessToken = oauth2.AccessToken + // AuthorizationCode 授权码 + AuthorizationCode = oauth2.AuthorizationCode + // OAuth2TokenRequest OAuth2令牌请求 + OAuth2TokenRequest = oauth2.TokenRequest + // OAuth2GrantType OAuth2授权类型 + OAuth2GrantType = oauth2.GrantType + // OAuth2UserValidator OAuth2用户验证器 + OAuth2UserValidator = oauth2.UserValidator + // Storage 存储接口 + Storage = adapter.Storage + // Codec 编解码接口 + Codec = adapter.Codec + // Log 日志接口 + Log = adapter.Log + // Pool 协程池接口 + Pool = adapter.Pool + // Generator 生成器接口 + Generator = adapter.Generator + + // ============ Codec Types | 编解码器类型 ============ + + // JSONSerializer JSON编解码器 + JSONSerializer = json.JSONSerializer + // MsgPackSerializer MsgPack编解码器 + MsgPackSerializer = msgpack.MsgPackSerializer + + // ============ Storage Types | 存储类型 ============ + + // MemoryStorage 内存存储 + MemoryStorage = memory.Storage + // RedisStorage Redis存储 + RedisStorage = redis.Storage + // RedisConfig Redis配置 + RedisConfig = redis.Config + // RedisBuilder Redis构建器 + RedisBuilder = redis.Builder + + // ============ Logger Types | 日志类型 ============ + + // SlogLogger 标准日志实现 + SlogLogger = slog.Logger + // SlogLoggerConfig 标准日志配置 + SlogLoggerConfig = slog.LoggerConfig + // SlogLogLevel 日志级别 + SlogLogLevel = slog.LogLevel + // NopLogger 空日志实现 + NopLogger = nop.NopLogger + + // ============ Generator Types | 生成器类型 ============ + + // TokenGenerator Token生成器 + TokenGenerator = sgenerator.Generator + // TokenStyle Token风格 + TokenStyle = adapter.TokenStyle + + // ============ Pool Types | 协程池类型 ============ + + // RenewPoolManager 续期池管理器 + RenewPoolManager = ants.RenewPoolManager + // RenewPoolConfig 续期池配置 + RenewPoolConfig = ants.RenewPoolConfig ) -// Token style constants | Token风格常量 +// ============ Error Codes | 错误码 ============ + const ( - TokenStyleUUID = core.TokenStyleUUID - TokenStyleSimple = core.TokenStyleSimple - TokenStyleRandom32 = core.TokenStyleRandom32 - TokenStyleRandom64 = core.TokenStyleRandom64 - TokenStyleRandom128 = core.TokenStyleRandom128 - TokenStyleJWT = core.TokenStyleJWT - TokenStyleHash = core.TokenStyleHash - TokenStyleTimestamp = core.TokenStyleTimestamp - TokenStyleTik = core.TokenStyleTik + CodeSuccess = core.CodeSuccess + CodeBadRequest = core.CodeBadRequest + CodeNotLogin = core.CodeNotLogin + CodePermissionDenied = core.CodePermissionDenied + CodeNotFound = core.CodeNotFound + CodeServerError = core.CodeServerError + CodeTokenInvalid = core.CodeTokenInvalid + CodeTokenExpired = core.CodeTokenExpired + CodeAccountDisabled = core.CodeAccountDisabled + CodeKickedOut = core.CodeKickedOut + CodeActiveTimeout = core.CodeActiveTimeout + CodeMaxLoginCount = core.CodeMaxLoginCount + CodeStorageError = core.CodeStorageError + CodeInvalidParameter = core.CodeInvalidParameter + CodeSessionError = core.CodeSessionError ) -// Core types | 核心类型 -type ( - Manager = core.Manager - TokenInfo = core.TokenInfo - Session = core.Session - TokenGenerator = core.TokenGenerator - SaTokenContext = core.SaTokenContext - Builder = core.Builder - NonceManager = core.NonceManager - RefreshTokenInfo = core.RefreshTokenInfo - RefreshTokenManager = core.RefreshTokenManager - OAuth2Server = core.OAuth2Server - OAuth2Client = core.OAuth2Client - OAuth2AccessToken = core.OAuth2AccessToken - OAuth2GrantType = core.OAuth2GrantType -) +// ============ Errors | 错误变量 ============ -// Adapter interfaces | 适配器接口 -type ( - Storage = core.Storage - RequestContext = core.RequestContext +var ( + // Authentication Errors | 认证错误 + ErrNotLogin = core.ErrNotLogin + ErrTokenInvalid = core.ErrTokenInvalid + ErrTokenExpired = core.ErrTokenExpired + ErrTokenKickout = core.ErrTokenKickout + ErrTokenReplaced = core.ErrTokenReplaced + ErrInvalidLoginID = core.ErrInvalidLoginID + ErrInvalidDevice = core.ErrInvalidDevice + ErrTokenNotFound = core.ErrTokenNotFound + + // Authorization Errors | 授权错误 + ErrPermissionDenied = core.ErrPermissionDenied + ErrRoleDenied = core.ErrRoleDenied + + // Account Errors | 账号错误 + ErrAccountDisabled = core.ErrAccountDisabled + ErrAccountNotFound = core.ErrAccountNotFound + ErrLoginLimitExceeded = core.ErrLoginLimitExceeded + + // Session Errors | 会话错误 + ErrSessionNotFound = core.ErrSessionNotFound + ErrActiveTimeout = core.ErrActiveTimeout + ErrSessionInvalidDataKey = core.ErrSessionInvalidDataKey + ErrSessionIDEmpty = core.ErrSessionIDEmpty + + // Security Errors | 安全错误 + ErrInvalidNonce = core.ErrInvalidNonce + ErrRefreshTokenExpired = core.ErrRefreshTokenExpired + ErrNonceInvalidRefreshToken = core.ErrNonceInvalidRefreshToken + ErrInvalidLoginIDEmpty = core.ErrInvalidLoginIDEmpty + + // OAuth2 Errors | OAuth2错误 + ErrClientOrClientIDEmpty = core.ErrClientOrClientIDEmpty + ErrClientNotFound = core.ErrClientNotFound + ErrUserIDEmpty = core.ErrUserIDEmpty + ErrInvalidRedirectURI = core.ErrInvalidRedirectURI + ErrInvalidClientCredentials = core.ErrInvalidClientCredentials + ErrInvalidAuthCode = core.ErrInvalidAuthCode + ErrAuthCodeUsed = core.ErrAuthCodeUsed + ErrAuthCodeExpired = core.ErrAuthCodeExpired + ErrClientMismatch = core.ErrClientMismatch + ErrRedirectURIMismatch = core.ErrRedirectURIMismatch + ErrInvalidAccessToken = core.ErrInvalidAccessToken + ErrInvalidRefreshToken = core.ErrInvalidRefreshToken + ErrInvalidScope = core.ErrInvalidScope + + // System Errors | 系统错误 + ErrStorageUnavailable = core.ErrStorageUnavailable + ErrSerializeFailed = core.ErrSerializeFailed + ErrDeserializeFailed = core.ErrDeserializeFailed + ErrTypeConvert = core.ErrTypeConvert ) -// Event related types | 事件相关类型 -type ( - EventListener = core.EventListener - EventManager = core.EventManager - EventData = core.EventData - Event = core.Event - ListenerFunc = core.ListenerFunc - ListenerConfig = core.ListenerConfig -) +// ============ Error Constructors | 错误构造函数 ============ -// Event constants | 事件常量 -const ( - EventLogin = core.EventLogin - EventLogout = core.EventLogout - EventKickout = core.EventKickout - EventDisable = core.EventDisable - EventUntie = core.EventUntie - EventRenew = core.EventRenew - EventCreateSession = core.EventCreateSession - EventDestroySession = core.EventDestroySession - EventPermissionCheck = core.EventPermissionCheck - EventRoleCheck = core.EventRoleCheck - EventAll = core.EventAll +var ( + NewError = core.NewError + NewErrorWithContext = core.NewErrorWithContext + NewNotLoginError = core.NewNotLoginError + NewPermissionDeniedError = core.NewPermissionDeniedError + NewRoleDeniedError = core.NewRoleDeniedError + NewAccountDisabledError = core.NewAccountDisabledError ) -// OAuth2 grant type constants | OAuth2授权类型常量 -const ( - GrantTypeAuthorizationCode = core.GrantTypeAuthorizationCode - GrantTypeRefreshToken = core.GrantTypeRefreshToken - GrantTypeClientCredentials = core.GrantTypeClientCredentials - GrantTypePassword = core.GrantTypePassword -) +// ============ Error Checking Helpers | 错误检查辅助函数 ============ -// Utility functions | 工具函数 var ( - RandomString = core.RandomString - IsEmpty = core.IsEmpty - IsNotEmpty = core.IsNotEmpty - DefaultString = core.DefaultString - ContainsString = core.ContainsString - RemoveString = core.RemoveString - UniqueStrings = core.UniqueStrings - MergeStrings = core.MergeStrings - MatchPattern = core.MatchPattern + IsNotLoginError = core.IsNotLoginError + IsPermissionDeniedError = core.IsPermissionDeniedError + IsAccountDisabledError = core.IsAccountDisabledError + IsTokenError = core.IsTokenError + GetErrorCode = core.GetErrorCode ) -// ============ Core constructor functions | 核心构造函数 ============ +// ============ Manager Management | Manager 管理 ============ + +// SetManager stores the manager-example in the global map using the specified autoType | 使用指定的 autoType 将管理器存储在全局 map 中 +func SetManager(mgr *manager.Manager) { + stputil.SetManager(mgr) +} + +// GetManager retrieves the manager-example from the global map using the specified autoType | 使用指定的 autoType 从全局 map 中获取管理器 +func GetManager(autoType ...string) (*manager.Manager, error) { + return stputil.GetManager(autoType...) +} -// DefaultConfig returns log configuration | 返回默认配置 -func DefaultConfig() *Config { - return core.DefaultConfig() +// DeleteManager delete the specific manager-example for the given autoType and releases resources | 删除指定的管理器并释放资源 +func DeleteManager(autoType ...string) error { + return stputil.DeleteManager(autoType...) } -// NewManager creates a new authentication manager-example | 创建新的认证管理器 -func NewManager(storage Storage, cfg *Config) *Manager { - return core.NewManager(storage, cfg) +// DeleteAllManager delete all managers in the global map and releases resources | 关闭所有管理器并释放资源 +func DeleteAllManager() { + stputil.DeleteAllManager() } -// NewContext creates a new Sa-Token context | 创建新的Sa-Token上下文 -func NewContext(ctx RequestContext, mgr *Manager) *SaTokenContext { - return core.NewContext(ctx, mgr) +// ============ Builder & Config | 构建器和配置 ============ + +// NewDefaultBuild creates a new default builder | 创建默认构建器 +func NewDefaultBuild() *builder.Builder { + return builder.NewBuilder() } -// NewSession creates a new session | 创建新的Session -func NewSession(id string, storage Storage, prefix string) *Session { - return core.NewSession(id, storage, prefix) +// NewDefaultConfig creates a new default config | 创建默认配置 +func NewDefaultConfig() *config.Config { + return config.DefaultConfig() } -// LoadSession loads an existing session | 加载已存在的Session -func LoadSession(id string, storage Storage, prefix string) (*Session, error) { - return core.LoadSession(id, storage, prefix) +// DefaultLoggerConfig returns the default logger config | 返回默认日志配置 +func DefaultLoggerConfig() *slog.LoggerConfig { + return slog.DefaultLoggerConfig() } -// NewTokenGenerator creates a new token generator | 创建新的Token生成器 -func NewTokenGenerator(cfg *Config) *TokenGenerator { - return core.NewTokenGenerator(cfg) +// DefaultRenewPoolConfig returns the default renew pool config | 返回默认续期池配置 +func DefaultRenewPoolConfig() *ants.RenewPoolConfig { + return ants.DefaultRenewPoolConfig() } -// NewEventManager creates a new event manager-example | 创建新的事件管理器 -func NewEventManager() *EventManager { - return core.NewEventManager() +// ============ Codec Constructors | 编解码器构造函数 ============ + +// NewJSONSerializer creates a new JSON serializer | 创建JSON序列化器 +func NewJSONSerializer() *json.JSONSerializer { + return json.NewJSONSerializer() } -// NewBuilder creates a new builder for fluent configuration | 创建新的Builder构建器(用于流式配置) -func NewBuilder() *Builder { - return core.NewBuilder() +// NewMsgPackSerializer creates a new MsgPack serializer | 创建MsgPack序列化器 +func NewMsgPackSerializer() *msgpack.MsgPackSerializer { + return msgpack.NewMsgPackSerializer() } -// NewNonceManager creates a new nonce manager-example | 创建新的Nonce管理器 -func NewNonceManager(storage Storage, prefix string, ttl ...int64) *NonceManager { - return core.NewNonceManager(storage, prefix, ttl...) +// ============ Storage Constructors | 存储构造函数 ============ + +// NewMemoryStorage creates a new memory storage | 创建内存存储 +func NewMemoryStorage() *memory.Storage { + return memory.NewStorage() } -// NewRefreshTokenManager creates a new refresh token manager-example | 创建新的刷新令牌管理器 -func NewRefreshTokenManager(storage Storage, prefix string, cfg *Config) *RefreshTokenManager { - return core.NewRefreshTokenManager(storage, prefix, cfg) +// NewMemoryStorageWithCleanupInterval creates a new memory storage with cleanup interval | 创建带清理间隔的内存存储 +func NewMemoryStorageWithCleanupInterval(interval time.Duration) *memory.Storage { + return memory.NewStorageWithCleanupInterval(interval) } -// NewOAuth2Server creates a new OAuth2 server | 创建新的OAuth2服务器 -func NewOAuth2Server(storage Storage, prefix string) *OAuth2Server { - return core.NewOAuth2Server(storage, prefix) +// NewRedisStorage creates a new Redis storage from URL | 通过URL创建Redis存储 +func NewRedisStorage(url string) (*redis.Storage, error) { + return redis.NewStorage(url) } -// ============ Global StpUtil functions | 全局StpUtil函数 ============ +// NewRedisStorageFromConfig creates a new Redis storage from config | 通过配置创建Redis存储 +func NewRedisStorageFromConfig(cfg *redis.Config) (*redis.Storage, error) { + return redis.NewStorageFromConfig(cfg) +} -// SetManager sets the global Manager (must be called first) | 设置全局Manager(必须先调用此方法) -func SetManager(mgr *Manager) { - stputil.SetManager(mgr) +// NewRedisBuilder creates a new Redis builder | 创建Redis构建器 +func NewRedisBuilder() *redis.Builder { + return redis.NewBuilder() +} + +// ============ Logger Constructors | 日志构造函数 ============ + +// NewSlogLogger creates a new slog logger with config | 使用配置创建标准日志器 +func NewSlogLogger(cfg *slog.LoggerConfig) (*slog.Logger, error) { + return slog.NewLoggerWithConfig(cfg) } -// GetManager gets the global Manager | 获取全局Manager -func GetManager() *Manager { - return stputil.GetManager() +// NewNopLogger creates a new no-op logger | 创建空日志器 +func NewNopLogger() *nop.NopLogger { + return nop.NewNopLogger() } +// ============ Generator Constructors | 生成器构造函数 ============ + +// NewTokenGenerator creates a new token generator | 创建Token生成器 +func NewTokenGenerator(timeout int64, tokenStyle adapter.TokenStyle, jwtSecretKey string) *sgenerator.Generator { + return sgenerator.NewGenerator(timeout, tokenStyle, jwtSecretKey) +} + +// NewDefaultTokenGenerator creates a new default token generator | 创建默认Token生成器 +func NewDefaultTokenGenerator() *sgenerator.Generator { + return sgenerator.NewDefaultGenerator() +} + +// ============ Pool Constructors | 协程池构造函数 ============ + +// NewRenewPoolManager creates a new renew pool manager-example with default config | 使用默认配置创建续期池管理器 +func NewRenewPoolManager() *ants.RenewPoolManager { + return ants.NewRenewPoolManagerWithDefaultConfig() +} + +// NewRenewPoolManagerWithConfig creates a new renew pool manager-example with config | 使用配置创建续期池管理器 +func NewRenewPoolManagerWithConfig(cfg *ants.RenewPoolConfig) (*ants.RenewPoolManager, error) { + return ants.NewRenewPoolManagerWithConfig(cfg) +} + +// ============ Token Style Constants | Token风格常量 ============ + +const ( + // TokenStyleUUID UUID style | UUID风格 + TokenStyleUUID = adapter.TokenStyleUUID + // TokenStyleSimple Simple random string | 简单随机字符串 + TokenStyleSimple = adapter.TokenStyleSimple + // TokenStyleRandom32 32-bit random string | 32位随机字符串 + TokenStyleRandom32 = adapter.TokenStyleRandom32 + // TokenStyleRandom64 64-bit random string | 64位随机字符串 + TokenStyleRandom64 = adapter.TokenStyleRandom64 + // TokenStyleRandom128 128-bit random string | 128位随机字符串 + TokenStyleRandom128 = adapter.TokenStyleRandom128 + // TokenStyleJWT JWT style | JWT风格 + TokenStyleJWT = adapter.TokenStyleJWT + // TokenStyleHash SHA256 hash-based style | SHA256哈希风格 + TokenStyleHash = adapter.TokenStyleHash + // TokenStyleTimestamp Timestamp-based style | 时间戳风格 + TokenStyleTimestamp = adapter.TokenStyleTimestamp + // TokenStyleTik Short ID style (like TikTok) | Tik风格短ID + TokenStyleTik = adapter.TokenStyleTik +) + +// ============ Log Level Constants | 日志级别常量 ============ + +const ( + // LogLevelDebug Debug level | 调试级别 + LogLevelDebug = adapter.LogLevelDebug + // LogLevelInfo Info level | 信息级别 + LogLevelInfo = adapter.LogLevelInfo + // LogLevelWarn Warn level | 警告级别 + LogLevelWarn = adapter.LogLevelWarn + // LogLevelError Error level | 错误级别 + LogLevelError = adapter.LogLevelError +) + // ============ Authentication | 登录认证 ============ // Login performs user login | 用户登录 -func Login(loginID interface{}, device ...string) (string, error) { - return stputil.Login(loginID, device...) +func Login(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) (string, error) { + return stputil.Login(ctx, loginID, deviceOrAutoType...) } // LoginByToken performs login with specified token | 使用指定Token登录 -func LoginByToken(loginID interface{}, tokenValue string, device ...string) error { - return stputil.LoginByToken(loginID, tokenValue, device...) +func LoginByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.LoginByToken(ctx, tokenValue, authType...) } // Logout performs user logout | 用户登出 -func Logout(loginID interface{}, device ...string) error { - return stputil.Logout(loginID, device...) +func Logout(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) error { + return stputil.Logout(ctx, loginID, deviceOrAutoType...) } // LogoutByToken performs logout by token | 根据Token登出 -func LogoutByToken(tokenValue string) error { - return stputil.LogoutByToken(tokenValue) +func LogoutByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.LogoutByToken(ctx, tokenValue, authType...) +} + +// Kickout kicks out a user session | 踢人下线 +func Kickout(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) error { + return stputil.Kickout(ctx, loginID, deviceOrAutoType...) +} + +// KickoutByToken Kick user offline | 根据Token踢人下线 +func KickoutByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.KickoutByToken(ctx, tokenValue, authType...) +} + +// Replace user offline by login ID and device | 根据账号和设备顶人下线 +func Replace(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) error { + return stputil.Replace(ctx, loginID, deviceOrAutoType...) +} + +// ReplaceByToken Replace user offline by token | 根据Token顶人下线 +func ReplaceByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.ReplaceByToken(ctx, tokenValue, authType...) } +// ============ Token Validation | Token验证 ============ + // IsLogin checks if the user is logged in | 检查用户是否已登录 -func IsLogin(tokenValue string) bool { - return stputil.IsLogin(tokenValue) +func IsLogin(ctx context.Context, tokenValue string, authType ...string) bool { + return stputil.IsLogin(ctx, tokenValue, authType...) } // CheckLogin checks login status (throws error if not logged in) | 检查登录状态(未登录抛出错误) -func CheckLogin(tokenValue string) error { - return stputil.CheckLogin(tokenValue) +func CheckLogin(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.CheckLogin(ctx, tokenValue, authType...) +} + +// CheckLoginWithState checks the login status (returns error to determine the reason if not logged in) | 检查登录状态(未登录时根据错误确定原因) +func CheckLoginWithState(ctx context.Context, tokenValue string, authType ...string) (bool, error) { + return stputil.CheckLoginWithState(ctx, tokenValue, authType...) } // GetLoginID gets the login ID from token | 从Token获取登录ID -func GetLoginID(tokenValue string) (string, error) { - return stputil.GetLoginID(tokenValue) +func GetLoginID(ctx context.Context, tokenValue string, authType ...string) (string, error) { + return stputil.GetLoginID(ctx, tokenValue, authType...) } -// GetLoginIDNotCheck gets login ID without checking | 获取登录ID(不检查) -func GetLoginIDNotCheck(tokenValue string) (string, error) { - return stputil.GetLoginIDNotCheck(tokenValue) +// GetLoginIDNotCheck gets login ID without checking | 获取登录ID(不检查登录状态) +func GetLoginIDNotCheck(ctx context.Context, tokenValue string, authType ...string) (string, error) { + return stputil.GetLoginIDNotCheck(ctx, tokenValue, authType...) } // GetTokenValue gets the token value for a login ID | 获取登录ID对应的Token值 -func GetTokenValue(loginID interface{}, device ...string) (string, error) { - return stputil.GetTokenValue(loginID, device...) +func GetTokenValue(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) (string, error) { + return stputil.GetTokenValue(ctx, loginID, deviceOrAutoType...) } // GetTokenInfo gets token information | 获取Token信息 -func GetTokenInfo(tokenValue string) (*TokenInfo, error) { - return stputil.GetTokenInfo(tokenValue) +func GetTokenInfo(ctx context.Context, tokenValue string, authType ...string) (*manager.TokenInfo, error) { + return stputil.GetTokenInfo(ctx, tokenValue, authType...) } -// ============ Kickout | 踢人下线 ============ +// ============ Account Disable | 账号封禁 ============ -// Kickout kicks out a user session | 踢人下线 -func Kickout(loginID interface{}, device ...string) error { - return stputil.Kickout(loginID, device...) +// Disable disables an account for specified duration | 封禁账号(指定时长) +func Disable(ctx context.Context, loginID interface{}, duration time.Duration, authType ...string) error { + return stputil.Disable(ctx, loginID, duration, authType...) } -// ============ Account Disable | 账号封禁 ============ +// DisableByToken disables the account associated with the given token for a duration | 根据指定 Token 封禁其对应的账号 +func DisableByToken(ctx context.Context, tokenValue string, duration time.Duration, authType ...string) error { + return stputil.DisableByToken(ctx, tokenValue, duration, authType...) +} -// Disable disables an account for specified duration | 封禁账号(指定时长) -func Disable(loginID interface{}, duration time.Duration) error { - return stputil.Disable(loginID, duration) +// Untie re-enables a disabled account | 解封账号 +func Untie(ctx context.Context, loginID interface{}, authType ...string) error { + return stputil.Untie(ctx, loginID, authType...) +} + +// UntieByToken re-enables a disabled account by token | 根据Token解封账号 +func UntieByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.UntieByToken(ctx, tokenValue, authType...) } // IsDisable checks if an account is disabled | 检查账号是否被封禁 -func IsDisable(loginID interface{}) bool { - return stputil.IsDisable(loginID) +func IsDisable(ctx context.Context, loginID interface{}, authType ...string) bool { + return stputil.IsDisable(ctx, loginID, authType...) } -// CheckDisable checks if account is disabled (throws error if disabled) | 检查账号是否被封禁(被封禁则抛出错误) -func CheckDisableByToken(tokenValue string) error { - return stputil.CheckDisable(tokenValue) +// IsDisableByToken checks if an account is disabled by token | 根据Token检查账号是否被封禁 +func IsDisableByToken(ctx context.Context, tokenValue string, authType ...string) bool { + return stputil.IsDisableByToken(ctx, tokenValue, authType...) } -// GetDisableTime gets remaining disabled time | 获取账号剩余封禁时间 -func GetDisableTime(loginID interface{}) (int64, error) { - return stputil.GetDisableTime(loginID) +// GetDisableTime gets remaining disable time in seconds | 获取剩余封禁时间(秒) +func GetDisableTime(ctx context.Context, loginID interface{}, authType ...string) (int64, error) { + return stputil.GetDisableTime(ctx, loginID, authType...) } -// Untie unties/unlocks an account | 解除账号封禁 -func Untie(loginID interface{}) error { - return stputil.Untie(loginID) +// GetDisableTimeByToken gets remaining disable time by token | 根据Token获取剩余封禁时间(秒) +func GetDisableTimeByToken(ctx context.Context, tokenValue string, authType ...string) (int64, error) { + return stputil.GetDisableTimeByToken(ctx, tokenValue, authType...) } -// ============ Permission Check | 权限验证 ============ +// CheckDisableWithInfo gets disable info | 获取封禁信息 +func CheckDisableWithInfo(ctx context.Context, loginID interface{}, authType ...string) (*manager.DisableInfo, error) { + return stputil.CheckDisableWithInfo(ctx, loginID, authType...) +} -// CheckPermission checks if the account has specified permission | 检查账号是否拥有指定权限 -func CheckPermissionByToken(tokenValue string, permission string) error { - return stputil.CheckPermission(tokenValue, permission) +// CheckDisableWithInfoByToken gets disable info by token | 根据Token获取封禁信息 +func CheckDisableWithInfoByToken(ctx context.Context, tokenValue string, authType ...string) (*manager.DisableInfo, error) { + return stputil.CheckDisableWithInfoByToken(ctx, tokenValue, authType...) } -// HasPermission checks if the account has specified permission (returns bool) | 检查账号是否拥有指定权限(返回布尔值) -func HasPermission(loginID interface{}, permission string) bool { - return stputil.HasPermission(loginID, permission) +// ============ Session Management | Session管理 ============ + +// GetSession gets session by login ID | 根据登录ID获取Session +func GetSession(ctx context.Context, loginID interface{}, authType ...string) (*session.Session, error) { + return stputil.GetSession(ctx, loginID, authType...) +} + +// GetSessionByToken gets session by token | 根据Token获取Session +func GetSessionByToken(ctx context.Context, tokenValue string, authType ...string) (*session.Session, error) { + return stputil.GetSessionByToken(ctx, tokenValue, authType...) } -// CheckPermissionAnd checks if the account has all specified permissions (AND logic) | 检查账号是否拥有所有指定权限(AND逻辑) -func CheckPermissionAndByToken(tokenValue string, permissions []string) error { - return stputil.CheckPermissionAnd(tokenValue, permissions) +// DeleteSession deletes a session | 删除Session +func DeleteSession(ctx context.Context, loginID interface{}, authType ...string) error { + return stputil.DeleteSession(ctx, loginID, authType...) } -// CheckPermissionOr checks if the account has any of the specified permissions (OR logic) | 检查账号是否拥有指定权限中的任意一个(OR逻辑) -func CheckPermissionOrByToken(tokenValue string, permissions []string) error { - return stputil.CheckPermissionOr(tokenValue, permissions) +// DeleteSessionByToken Deletes session by token | 根据Token删除Session +func DeleteSessionByToken(ctx context.Context, tokenValue string, authType ...string) error { + return stputil.DeleteSessionByToken(ctx, tokenValue, authType...) } -// GetPermissionList gets the permission list for an account | 获取账号的权限列表 -func GetPermissionListByToken(tokenValue string) ([]string, error) { - return stputil.GetPermissionList(tokenValue) +// HasSession checks if session exists | 检查Session是否存在 +func HasSession(ctx context.Context, loginID interface{}, authType ...string) bool { + return stputil.HasSession(ctx, loginID, authType...) } -// ============ Role Check | 角色验证 ============ +// RenewSession renews session TTL | 续期Session +func RenewSession(ctx context.Context, loginID interface{}, ttl time.Duration, authType ...string) error { + return stputil.RenewSession(ctx, loginID, ttl, authType...) +} -// CheckRole checks if the account has specified role | 检查账号是否拥有指定角色 -func CheckRoleByToken(tokenValue string, role string) error { - return stputil.CheckRole(tokenValue, role) +// RenewSessionByToken renews session TTL by token | 根据Token续期Session +func RenewSessionByToken(ctx context.Context, tokenValue string, ttl time.Duration, authType ...string) error { + return stputil.RenewSessionByToken(ctx, tokenValue, ttl, authType...) } -// HasRole checks if the account has specified role (returns bool) | 检查账号是否拥有指定角色(返回布尔值) -func HasRole(loginID interface{}, role string) bool { - return stputil.HasRole(loginID, role) +// ============ Permission Verification | 权限验证 ============ + +// SetPermissions sets permissions for a login ID | 设置用户权限 +func SetPermissions(ctx context.Context, loginID interface{}, permissions []string, authType ...string) error { + return stputil.SetPermissions(ctx, loginID, permissions, authType...) } -// CheckRoleAnd checks if the account has all specified roles (AND logic) | 检查账号是否拥有所有指定角色(AND逻辑) -func CheckRoleAndByToken(tokenValue string, roles []string) error { - return stputil.CheckRoleAnd(tokenValue, roles) +// SetPermissionsByToken sets permissions by token | 根据 Token 设置对应账号的权限 +func SetPermissionsByToken(ctx context.Context, tokenValue string, permissions []string, authType ...string) error { + return stputil.SetPermissionsByToken(ctx, tokenValue, permissions, authType...) } -// CheckRoleOr checks if the account has any of the specified roles (OR logic) | 检查账号是否拥有指定角色中的任意一个(OR逻辑) -func CheckRoleOrByToken(tokenValue string, roles []string) error { - return stputil.CheckRoleOr(tokenValue, roles) +// RemovePermissions removes specified permissions for a login ID | 删除用户指定权限 +func RemovePermissions(ctx context.Context, loginID interface{}, permissions []string, authType ...string) error { + return stputil.RemovePermissions(ctx, loginID, permissions, authType...) } -// GetRoleList gets the role list for an account | 获取账号的角色列表 -func GetRoleListByToken(tokenValue string) ([]string, error) { - return stputil.GetRoleList(tokenValue) +// RemovePermissionsByToken removes specified permissions by token | 根据 Token 删除对应账号的指定权限 +func RemovePermissionsByToken(ctx context.Context, tokenValue string, permissions []string, authType ...string) error { + return stputil.RemovePermissionsByToken(ctx, tokenValue, permissions, authType...) } -// ============ Session Management | Session管理 ============ +// GetPermissions gets permission list | 获取权限列表 +func GetPermissions(ctx context.Context, loginID interface{}, authType ...string) ([]string, error) { + return stputil.GetPermissions(ctx, loginID, authType...) +} + +// GetPermissionsByToken gets permission list by token | 根据 Token 获取对应账号的权限列表 +func GetPermissionsByToken(ctx context.Context, tokenValue string, authType ...string) ([]string, error) { + return stputil.GetPermissionsByToken(ctx, tokenValue, authType...) +} + +// HasPermission checks if has specified permission | 检查是否拥有指定权限 +func HasPermission(ctx context.Context, loginID interface{}, permission string, authType ...string) bool { + return stputil.HasPermission(ctx, loginID, permission, authType...) +} + +// HasPermissionByToken checks if the token has the specified permission | 检查Token是否拥有指定权限 +func HasPermissionByToken(ctx context.Context, tokenValue string, permission string, authType ...string) bool { + return stputil.HasPermissionByToken(ctx, tokenValue, permission, authType...) +} + +// HasPermissionsAnd checks if has all permissions (AND logic) | 检查是否拥有所有权限(AND逻辑) +func HasPermissionsAnd(ctx context.Context, loginID interface{}, permissions []string, authType ...string) bool { + return stputil.HasPermissionsAnd(ctx, loginID, permissions, authType...) +} + +// HasPermissionsAndByToken checks if the token has all specified permissions | 检查Token是否拥有所有指定权限 +func HasPermissionsAndByToken(ctx context.Context, tokenValue string, permissions []string, authType ...string) bool { + return stputil.HasPermissionsAndByToken(ctx, tokenValue, permissions, authType...) +} + +// HasPermissionsOr checks if has any permission (OR logic) | 检查是否拥有任一权限(OR逻辑) +func HasPermissionsOr(ctx context.Context, loginID interface{}, permissions []string, authType ...string) bool { + return stputil.HasPermissionsOr(ctx, loginID, permissions, authType...) +} + +// HasPermissionsOrByToken checks if the token has any of the specified permissions | 检查Token是否拥有任一指定权限 +func HasPermissionsOrByToken(ctx context.Context, tokenValue string, permissions []string, authType ...string) bool { + return stputil.HasPermissionsOrByToken(ctx, tokenValue, permissions, authType...) +} + +// ============ Role Management | 角色管理 ============ + +// SetRoles sets roles for a login ID | 设置用户角色 +func SetRoles(ctx context.Context, loginID interface{}, roles []string, authType ...string) error { + return stputil.SetRoles(ctx, loginID, roles, authType...) +} + +// SetRolesByToken sets roles by token | 根据 Token 设置对应账号的角色 +func SetRolesByToken(ctx context.Context, tokenValue string, roles []string, authType ...string) error { + return stputil.SetRolesByToken(ctx, tokenValue, roles, authType...) +} + +// RemoveRoles removes specified roles for a login ID | 删除用户指定角色 +func RemoveRoles(ctx context.Context, loginID interface{}, roles []string, authType ...string) error { + return stputil.RemoveRoles(ctx, loginID, roles, authType...) +} + +// RemoveRolesByToken removes specified roles by token | 根据 Token 删除对应账号的指定角色 +func RemoveRolesByToken(ctx context.Context, tokenValue string, roles []string, authType ...string) error { + return stputil.RemoveRolesByToken(ctx, tokenValue, roles, authType...) +} + +// GetRoles gets role list | 获取角色列表 +func GetRoles(ctx context.Context, loginID interface{}, authType ...string) ([]string, error) { + return stputil.GetRoles(ctx, loginID, authType...) +} + +// GetRolesByToken gets role list by token | 根据 Token 获取对应账号的角色列表 +func GetRolesByToken(ctx context.Context, tokenValue string, authType ...string) ([]string, error) { + return stputil.GetRolesByToken(ctx, tokenValue, authType...) +} + +// HasRole checks if has specified role | 检查是否拥有指定角色 +func HasRole(ctx context.Context, loginID interface{}, role string, authType ...string) bool { + return stputil.HasRole(ctx, loginID, role, authType...) +} + +// HasRoleByToken checks if the token has the specified role | 检查 Token 是否拥有指定角色 +func HasRoleByToken(ctx context.Context, tokenValue string, role string, authType ...string) bool { + return stputil.HasRoleByToken(ctx, tokenValue, role, authType...) +} + +// HasRolesAnd checks if has all roles (AND logic) | 检查是否拥有所有角色(AND逻辑) +func HasRolesAnd(ctx context.Context, loginID interface{}, roles []string, authType ...string) bool { + return stputil.HasRolesAnd(ctx, loginID, roles, authType...) +} -// GetSession gets the session for a login ID | 获取登录ID的Session -func GetSession(loginID interface{}) (*Session, error) { - return stputil.GetSession(loginID) +// HasRolesAndByToken checks if the token has all specified roles | 检查 Token 是否拥有所有指定角色 +func HasRolesAndByToken(ctx context.Context, tokenValue string, roles []string, authType ...string) bool { + return stputil.HasRolesAndByToken(ctx, tokenValue, roles, authType...) } -// GetSessionByToken gets the session by token | 根据Token获取Session -func GetSessionByToken(tokenValue string) (*Session, error) { - return stputil.GetSessionByToken(tokenValue) +// HasRolesOr checks if has any role (OR logic) | 检查是否拥有任一角色(OR逻辑) +func HasRolesOr(ctx context.Context, loginID interface{}, roles []string, authType ...string) bool { + return stputil.HasRolesOr(ctx, loginID, roles, authType...) } -// GetTokenSession gets the token session | 获取Token的Session -func GetTokenSession(tokenValue string) (*Session, error) { - return stputil.GetTokenSession(tokenValue) +// HasRolesOrByToken checks if the token has any of the specified roles | 检查 Token 是否拥有任一指定角色 +func HasRolesOrByToken(ctx context.Context, tokenValue string, roles []string, authType ...string) bool { + return stputil.HasRolesOrByToken(ctx, tokenValue, roles, authType...) } -// ============ Token Renewal | Token续期 ============ +// ============ Token Tag | Token标签 ============ + +// SetTokenTag sets token tag | 设置Token标签 +func SetTokenTag(ctx context.Context, tokenValue, tag string, authType ...string) error { + return stputil.SetTokenTag(ctx, tokenValue, tag, authType...) +} + +// GetTokenTag gets token tag | 获取Token标签 +func GetTokenTag(ctx context.Context, tokenValue string, authType ...string) (string, error) { + return stputil.GetTokenTag(ctx, tokenValue, authType...) +} -// RenewTimeout renews token timeout | 续期Token超时时间 +// ============ Session Query | 会话查询 ============ + +// GetTokenValueListByLoginID gets all tokens for a login ID | 获取指定账号的所有Token +func GetTokenValueListByLoginID(ctx context.Context, loginID interface{}, authType ...string) ([]string, error) { + return stputil.GetTokenValueListByLoginID(ctx, loginID, authType...) +} + +// GetSessionCountByLoginID gets session count for a login ID | 获取指定账号的Session数量 +func GetSessionCountByLoginID(ctx context.Context, loginID interface{}, authType ...string) (int, error) { + return stputil.GetSessionCountByLoginID(ctx, loginID, authType...) +} // ============ Security Features | 安全特性 ============ -// GenerateNonce generates a new nonce token | 生成新的Nonce令牌 -func GenerateNonce() (string, error) { - return stputil.GenerateNonce() +// Generate Generates a one-time nonce | 生成一次性随机数 +func Generate(ctx context.Context, authType ...string) (string, error) { + return stputil.Generate(ctx, authType...) +} + +// Verify Verifies a nonce | 验证随机数 +func Verify(ctx context.Context, nonce string, authType ...string) bool { + return stputil.Verify(ctx, nonce, authType...) } -// VerifyNonce verifies a nonce token | 验证Nonce令牌 -func VerifyNonce(nonce string) bool { - return stputil.VerifyNonce(nonce) +// VerifyAndConsume Verifies and consumes nonce, returns error if invalid | 验证并消费nonce,无效时返回错误 +func VerifyAndConsume(ctx context.Context, nonce string, authType ...string) error { + return stputil.VerifyAndConsume(ctx, nonce, authType...) } -// LoginWithRefreshToken performs login and returns both access token and refresh token | 登录并返回访问令牌和刷新令牌 -func LoginWithRefreshToken(loginID interface{}, device ...string) (*RefreshTokenInfo, error) { - return stputil.LoginWithRefreshToken(loginID, device...) +// IsValidNonce Checks if nonce is valid without consuming it | 检查nonce是否有效(不消费) +func IsValidNonce(ctx context.Context, nonce string, authType ...string) bool { + return stputil.IsValidNonce(ctx, nonce, authType...) } -// RefreshAccessToken refreshes the access token using a refresh token | 使用刷新令牌刷新访问令牌 -func RefreshAccessToken(refreshToken string) (*RefreshTokenInfo, error) { - return stputil.RefreshAccessToken(refreshToken) +// GenerateTokenPair Create access + refresh token | 生成访问令牌和刷新令牌 +func GenerateTokenPair(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) (*security.RefreshTokenInfo, error) { + return stputil.GenerateTokenPair(ctx, loginID, deviceOrAutoType...) } -// RevokeRefreshToken revokes a refresh token | 撤销刷新令牌 -func RevokeRefreshToken(refreshToken string) error { - return stputil.RevokeRefreshToken(refreshToken) +// VerifyAccessToken verifies access token validity | 验证访问令牌是否有效 +func VerifyAccessToken(ctx context.Context, accessToken string, authType ...string) bool { + return stputil.VerifyAccessToken(ctx, accessToken, authType...) +} + +// VerifyAccessTokenAndGetInfo verifies access token and returns token info | 验证访问令牌并返回Token信息 +func VerifyAccessTokenAndGetInfo(ctx context.Context, accessToken string, authType ...string) (*security.AccessTokenInfo, bool) { + return stputil.VerifyAccessTokenAndGetInfo(ctx, accessToken, authType...) +} + +// GetRefreshTokenInfo gets refresh token information | 获取刷新令牌信息 +func GetRefreshTokenInfo(ctx context.Context, refreshToken string, authType ...string) (*security.RefreshTokenInfo, error) { + return stputil.GetRefreshTokenInfo(ctx, refreshToken, authType...) +} + +// RefreshAccessToken refreshes access token using refresh token | 使用刷新令牌刷新访问令牌 +func RefreshAccessToken(ctx context.Context, refreshToken string, authType ...string) (*security.RefreshTokenInfo, error) { + return stputil.RefreshAccessToken(ctx, refreshToken, authType...) +} + +// RevokeRefreshToken Revokes refresh token | 撤销刷新令牌 +func RevokeRefreshToken(ctx context.Context, refreshToken string, authType ...string) error { + return stputil.RevokeRefreshToken(ctx, refreshToken, authType...) +} + +// IsValid checks whether token is valid | 检查Token是否有效 +func IsValid(ctx context.Context, refreshToken string, authType ...string) bool { + return stputil.IsValid(ctx, refreshToken, authType...) +} + +// ============ OAuth2 Features | OAuth2 功能 ============ + +// RegisterClient Registers an OAuth2 client | 注册OAuth2客户端 +func RegisterClient(ctx context.Context, client *oauth2.Client, authType ...string) error { + return stputil.RegisterClient(ctx, client, authType...) } -// GetOAuth2Server gets the OAuth2 server instance | 获取OAuth2服务器实例 -func GetOAuth2Server() *OAuth2Server { - return stputil.GetOAuth2Server() +// UnregisterClient unregisters an OAuth2 client | 注销OAuth2客户端 +func UnregisterClient(ctx context.Context, clientID string, authType ...string) error { + return stputil.UnregisterClient(ctx, clientID, authType...) } -// Version Sa-Token-Go version | Sa-Token-Go版本 -const Version = core.Version +// GetClient gets OAuth2 client information | 获取OAuth2客户端信息 +func GetClient(ctx context.Context, clientID string, authType ...string) (*oauth2.Client, error) { + return stputil.GetClient(ctx, clientID, authType...) +} + +// GenerateAuthorizationCode creates an authorization code | 创建授权码 +func GenerateAuthorizationCode(ctx context.Context, clientID, loginID, redirectURI string, scope []string, authType ...string) (*oauth2.AuthorizationCode, error) { + return stputil.GenerateAuthorizationCode(ctx, clientID, loginID, redirectURI, scope, authType...) +} + +// ExchangeCodeForToken exchanges authorization code for token | 使用授权码换取令牌 +func ExchangeCodeForToken(ctx context.Context, code, clientID, clientSecret, redirectURI string, authType ...string) (*oauth2.AccessToken, error) { + return stputil.ExchangeCodeForToken(ctx, code, clientID, clientSecret, redirectURI, authType...) +} + +// ValidateAccessToken verifies OAuth2 access token | 验证OAuth2访问令牌 +func ValidateAccessToken(ctx context.Context, accessToken string, authType ...string) bool { + return stputil.ValidateAccessToken(ctx, accessToken, authType...) +} + +// ValidateAccessTokenAndGetInfo verifies OAuth2 access token and get info | 验证OAuth2访问令牌并获取信息 +func ValidateAccessTokenAndGetInfo(ctx context.Context, accessToken string, authType ...string) (*oauth2.AccessToken, error) { + return stputil.ValidateAccessTokenAndGetInfo(ctx, accessToken, authType...) +} + +// OAuth2RefreshAccessToken Refreshes access token using refresh token | 使用刷新令牌刷新访问令牌(OAuth2) +func OAuth2RefreshAccessToken(ctx context.Context, clientID, refreshToken, clientSecret string, authType ...string) (*oauth2.AccessToken, error) { + return stputil.OAuth2RefreshAccessToken(ctx, clientID, refreshToken, clientSecret, authType...) +} + +// RevokeToken Revokes access token and its refresh token | 撤销访问令牌及其刷新令牌 +func RevokeToken(ctx context.Context, accessToken string, authType ...string) error { + return stputil.RevokeToken(ctx, accessToken, authType...) +} + +// OAuth2Token Unified token endpoint that dispatches to appropriate handler based on grant type | 统一的令牌端点 +func OAuth2Token(ctx context.Context, req *oauth2.TokenRequest, validateUser oauth2.UserValidator, authType ...string) (*oauth2.AccessToken, error) { + return stputil.OAuth2Token(ctx, req, validateUser, authType...) +} + +// OAuth2ClientCredentialsToken Gets access token using client credentials grant | 使用客户端凭证模式获取访问令牌 +func OAuth2ClientCredentialsToken(ctx context.Context, clientID, clientSecret string, scopes []string, authType ...string) (*oauth2.AccessToken, error) { + return stputil.OAuth2ClientCredentialsToken(ctx, clientID, clientSecret, scopes, authType...) +} + +// OAuth2PasswordGrantToken Gets access token using resource owner password credentials grant | 使用密码模式获取访问令牌 +func OAuth2PasswordGrantToken(ctx context.Context, clientID, clientSecret, username, password string, scopes []string, validateUser oauth2.UserValidator, authType ...string) (*oauth2.AccessToken, error) { + return stputil.OAuth2PasswordGrantToken(ctx, clientID, clientSecret, username, password, scopes, validateUser, authType...) +} + +// ============ OAuth2 Grant Type Constants | OAuth2授权类型常量 ============ + +const ( + // GrantTypeAuthorizationCode Authorization code grant type | 授权码模式 + GrantTypeAuthorizationCode = oauth2.GrantTypeAuthorizationCode + // GrantTypeClientCredentials Client credentials grant type | 客户端凭证模式 + GrantTypeClientCredentials = oauth2.GrantTypeClientCredentials + // GrantTypePassword Password grant type | 密码模式 + GrantTypePassword = oauth2.GrantTypePassword + // GrantTypeRefreshToken Refresh token grant type | 刷新令牌模式 + GrantTypeRefreshToken = oauth2.GrantTypeRefreshToken +) + +// ============ Public Getters | 公共获取器 ============ + +// GetConfig returns the manager-example configuration | 获取 Manager 当前使用的配置 +func GetConfig(ctx context.Context, authType ...string) *config.Config { + return stputil.GetConfig(ctx, authType...) +} + +// GetStorage returns the storage adapter | 获取 Manager 使用的存储适配器 +func GetStorage(ctx context.Context, authType ...string) adapter.Storage { + return stputil.GetStorage(ctx, authType...) +} + +// GetCodec returns the codec (serializer) | 获取 Manager 使用的编解码器 +func GetCodec(ctx context.Context, authType ...string) adapter.Codec { + return stputil.GetCodec(ctx, authType...) +} + +// GetLog returns the logger adapter | 获取 Manager 使用的日志适配器 +func GetLog(ctx context.Context, authType ...string) adapter.Log { + return stputil.GetLog(ctx, authType...) +} + +// GetPool returns the goroutine pool | 获取 Manager 使用的协程池 +func GetPool(ctx context.Context, authType ...string) adapter.Pool { + return stputil.GetPool(ctx, authType...) +} + +// GetGenerator returns the token generator | 获取 Token 生成器 +func GetGenerator(ctx context.Context, authType ...string) adapter.Generator { + return stputil.GetGenerator(ctx, authType...) +} + +// GetNonceManager returns the nonce manager-example | 获取随机串管理器 +func GetNonceManager(ctx context.Context, authType ...string) *security.NonceManager { + return stputil.GetNonceManager(ctx, authType...) +} + +// GetRefreshManager returns the refresh token manager-example | 获取刷新令牌管理器 +func GetRefreshManager(ctx context.Context, authType ...string) *security.RefreshTokenManager { + return stputil.GetRefreshManager(ctx, authType...) +} + +// GetEventManager returns the event manager-example | 获取事件管理器 +func GetEventManager(ctx context.Context, authType ...string) *listener.Manager { + return stputil.GetEventManager(ctx, authType...) +} + +// GetOAuth2Server Gets OAuth2 server instance | 获取OAuth2服务器实例 +func GetOAuth2Server(ctx context.Context, authType ...string) *oauth2.OAuth2Server { + return stputil.GetOAuth2Server(ctx, authType...) +} + +// ============ Event Management | 事件管理 ============ + +// RegisterFunc registers a function as an event listener | 注册函数作为事件监听器 +func RegisterFunc(event listener.Event, fn func(*listener.EventData), authType ...string) { + stputil.RegisterFunc(event, fn, authType...) +} + +// Register registers an event listener | 注册事件监听器 +func Register(event listener.Event, l listener.Listener, authType ...string) string { + return stputil.Register(event, l, authType...) +} + +// RegisterWithConfig registers an event listener with config | 注册带配置的事件监听器 +func RegisterWithConfig(event listener.Event, l listener.Listener, cfg listener.ListenerConfig, authType ...string) string { + return stputil.RegisterWithConfig(event, l, cfg, authType...) +} + +// Unregister removes an event listener by ID | 根据ID移除事件监听器 +func Unregister(id string, authType ...string) bool { + return stputil.Unregister(id, authType...) +} + +// TriggerEvent manually triggers an event | 手动触发事件 +func TriggerEvent(data *listener.EventData, authType ...string) { + stputil.TriggerEvent(data, authType...) +} + +// TriggerEventAsync triggers an event asynchronously and returns immediately | 异步触发事件并立即返回 +func TriggerEventAsync(data *listener.EventData, authType ...string) { + stputil.TriggerEventAsync(data, authType...) +} + +// TriggerEventSync triggers an event synchronously and waits for all listeners | 同步触发事件并等待所有监听器完成 +func TriggerEventSync(data *listener.EventData, authType ...string) { + stputil.TriggerEventSync(data, authType...) +} + +// WaitEvents waits for all async event listeners to complete | 等待所有异步事件监听器完成 +func WaitEvents(authType ...string) { + stputil.WaitEvents(authType...) +} + +// ClearEventListeners removes all listeners for a specific event | 清除指定事件的所有监听器 +func ClearEventListeners(event listener.Event, authType ...string) { + stputil.ClearEventListeners(event, authType...) +} + +// ClearAllEventListeners removes all listeners | 清除所有事件监听器 +func ClearAllEventListeners(authType ...string) { + stputil.ClearAllEventListeners(authType...) +} + +// CountEventListeners returns the number of listeners for a specific event | 获取指定事件监听器数量 +func CountEventListeners(event listener.Event, authType ...string) int { + return stputil.CountEventListeners(event, authType...) +} + +// CountAllListeners returns the total number of registered listeners | 获取已注册监听器总数 +func CountAllListeners(authType ...string) int { + return stputil.CountAllListeners(authType...) +} + +// GetEventListenerIDs returns all listener IDs for a specific event | 获取指定事件的所有监听器ID +func GetEventListenerIDs(event listener.Event, authType ...string) []string { + return stputil.GetEventListenerIDs(event, authType...) +} + +// GetAllRegisteredEvents returns all events that have registered listeners | 获取所有已注册事件 +func GetAllRegisteredEvents(authType ...string) []listener.Event { + return stputil.GetAllRegisteredEvents(authType...) +} + +// HasEventListeners checks if there are any listeners for a specific event | 检查指定事件是否有监听器 +func HasEventListeners(event listener.Event, authType ...string) bool { + return stputil.HasEventListeners(event, authType...) +} diff --git a/integrations/fiber/middleware.go b/integrations/fiber/middleware.go new file mode 100644 index 0000000..8e4519a --- /dev/null +++ b/integrations/fiber/middleware.go @@ -0,0 +1,307 @@ +package fiber + +import ( + "errors" + + "github.com/click33/sa-token-go/core" + "github.com/click33/sa-token-go/core/manager" + + saContext "github.com/click33/sa-token-go/core/context" + "github.com/click33/sa-token-go/stputil" + "github.com/gofiber/fiber/v2" +) + +// LogicType permission/role logic type | 权限/角色判断逻辑 +type LogicType string + +const ( + SaTokenCtxKey = "saCtx" + + LogicOr LogicType = "OR" // Logical OR | 任一满足 + LogicAnd LogicType = "AND" // Logical AND | 全部满足 +) + +type AuthOption func(*AuthOptions) + +type AuthOptions struct { + AuthType string + LogicType LogicType + AuthFailFunc func(c *fiber.Ctx, err error) error +} + +func defaultAuthOptions() *AuthOptions { + return &AuthOptions{LogicType: LogicAnd} // 默认 AND +} + +// WithAuthType sets auth type | 设置认证类型 +func WithAuthType(authType string) AuthOption { + return func(o *AuthOptions) { + o.AuthType = authType + } +} + +// WithLogicType sets LogicType option | 设置逻辑类型 +func WithLogicType(logicType LogicType) AuthOption { + return func(o *AuthOptions) { + o.LogicType = logicType + } +} + +// WithAuthFailFunc sets auth failure callback | 设置认证失败回调 +func WithAuthFailFunc(fn func(c *fiber.Ctx, err error) error) AuthOption { + return func(o *AuthOptions) { + o.AuthFailFunc = fn + } +} + +// ========== Middlewares ========== + +// AuthMiddleware authentication middleware | 认证中间件 +func AuthMiddleware(opts ...AuthOption) fiber.Handler { + options := defaultAuthOptions() + for _, opt := range opts { + opt(options) + } + + return func(c *fiber.Ctx) error { + mgr, err := stputil.GetManager(options.AuthType) + if err != nil { + if options.AuthFailFunc != nil { + return options.AuthFailFunc(c, err) + } + return writeErrorResponse(c, err) + } + + // 获取 token | Get token + saCtx := getSaContext(c, mgr) + tokenValue := saCtx.GetTokenValue() + + // 检查登录 | Check login + err = mgr.CheckLogin(c.UserContext(), tokenValue) + if err != nil { + if options.AuthFailFunc != nil { + return options.AuthFailFunc(c, err) + } + return writeErrorResponse(c, err) + } + + return c.Next() + } +} + +// AuthWithStateMiddleware with state authentication middleware | 带状态返回的认证中间件 +func AuthWithStateMiddleware(opts ...AuthOption) fiber.Handler { + options := defaultAuthOptions() + for _, opt := range opts { + opt(options) + } + + return func(c *fiber.Ctx) error { + // 获取 Manager | Get Manager + mgr, err := stputil.GetManager(options.AuthType) + if err != nil { + if options.AuthFailFunc != nil { + return options.AuthFailFunc(c, err) + } + return writeErrorResponse(c, err) + } + + // 构建 Sa-Token 上下文 | Build Sa-Token context + saCtx := getSaContext(c, mgr) + tokenValue := saCtx.GetTokenValue() + + // 检查登录并返回状态 | Check login with state + _, err = mgr.CheckLoginWithState(c.UserContext(), tokenValue) + + if err != nil { + // 用户自定义回调优先 + if options.AuthFailFunc != nil { + return options.AuthFailFunc(c, err) + } + return writeErrorResponse(c, err) + } + + return c.Next() + } +} + +// PermissionMiddleware permission check middleware | 权限校验中间件 +func PermissionMiddleware( + permissions []string, + opts ...AuthOption, +) fiber.Handler { + + options := defaultAuthOptions() + for _, opt := range opts { + opt(options) + } + + return func(c *fiber.Ctx) error { + // No permission required | 无需权限直接放行 + if len(permissions) == 0 { + return c.Next() + } + + // Get Manager | 获取 Manager + mgr, err := stputil.GetManager(options.AuthType) + if err != nil { + if options.AuthFailFunc != nil { + return options.AuthFailFunc(c, err) + } + return writeErrorResponse(c, err) + } + + // 构建 Sa-Token 上下文 | Build Sa-Token context + saCtx := getSaContext(c, mgr) + tokenValue := saCtx.GetTokenValue() + ctx := c.UserContext() + + // Permission check | 权限校验 + var ok bool + if options.LogicType == LogicAnd { + ok = mgr.HasPermissionsAndByToken(ctx, tokenValue, permissions) + } else { + ok = mgr.HasPermissionsOrByToken(ctx, tokenValue, permissions) + } + + if !ok { + if options.AuthFailFunc != nil { + return options.AuthFailFunc(c, core.ErrPermissionDenied) + } + return writeErrorResponse(c, core.ErrPermissionDenied) + } + + return c.Next() + } +} + +// RoleMiddleware role check middleware | 角色校验中间件 +func RoleMiddleware( + roles []string, + opts ...AuthOption, +) fiber.Handler { + + options := defaultAuthOptions() + for _, opt := range opts { + opt(options) + } + + return func(c *fiber.Ctx) error { + // No role required | 无需角色直接放行 + if len(roles) == 0 { + return c.Next() + } + + // Get Manager | 获取 Manager + mgr, err := stputil.GetManager(options.AuthType) + if err != nil { + if options.AuthFailFunc != nil { + return options.AuthFailFunc(c, err) + } + return writeErrorResponse(c, err) + } + + // 构建 Sa-Token 上下文 | Build Sa-Token context + saCtx := getSaContext(c, mgr) + tokenValue := saCtx.GetTokenValue() + ctx := c.UserContext() + + // Role check | 角色校验 + var ok bool + if options.LogicType == LogicAnd { + ok = mgr.HasRolesAndByToken(ctx, tokenValue, roles) + } else { + ok = mgr.HasRolesOrByToken(ctx, tokenValue, roles) + } + + if !ok { + if options.AuthFailFunc != nil { + return options.AuthFailFunc(c, core.ErrRoleDenied) + } + return writeErrorResponse(c, core.ErrRoleDenied) + } + + return c.Next() + } +} + +// GetSaTokenContext gets Sa-Token context from Fiber context | 获取 Sa-Token 上下文 +func GetSaTokenContext(c *fiber.Ctx) (*saContext.SaTokenContext, bool) { + v := c.Locals(SaTokenCtxKey) + if v == nil { + return nil, false + } + + ctx, ok := v.(*saContext.SaTokenContext) + return ctx, ok +} + +func getSaContext(c *fiber.Ctx, mgr *manager.Manager) *saContext.SaTokenContext { + // Try get from context | 尝试从 ctx 取值 + if v := c.Locals(SaTokenCtxKey); v != nil { + if saCtx, ok := v.(*saContext.SaTokenContext); ok { + return saCtx + } + } + + // Create new context | 创建并缓存 SaTokenContext + saCtx := saContext.NewContext(NewFiberContext(c), mgr) + c.Locals(SaTokenCtxKey, saCtx) + + return saCtx +} + +// ============ Error Handling Helpers | 错误处理辅助函数 ============ + +// writeErrorResponse writes a standardized error response | 写入标准化的错误响应 +func writeErrorResponse(c *fiber.Ctx, err error) error { + var saErr *core.SaTokenError + var code int + var message string + var httpStatus int + + // Check if it's a SaTokenError | 检查是否为SaTokenError + if errors.As(err, &saErr) { + code = saErr.Code + message = saErr.Message + httpStatus = getHTTPStatusFromCode(code) + } else { + // Handle standard errors | 处理标准错误 + code = core.CodeServerError + message = err.Error() + httpStatus = fiber.StatusInternalServerError + } + + return c.Status(httpStatus).JSON(fiber.Map{ + "code": code, + "message": message, + "data": err.Error(), + }) +} + +// writeSuccessResponse writes a standardized success response | 写入标准化的成功响应 +func writeSuccessResponse(c *fiber.Ctx, data interface{}) error { + return c.JSON(fiber.Map{ + "code": core.CodeSuccess, + "message": "success", + "data": data, + }) +} + +// getHTTPStatusFromCode converts Sa-Token error code to HTTP status | 将Sa-Token错误码转换为HTTP状态码 +func getHTTPStatusFromCode(code int) int { + switch code { + case core.CodeNotLogin: + return fiber.StatusUnauthorized + case core.CodePermissionDenied: + return fiber.StatusForbidden + case core.CodeBadRequest: + return fiber.StatusBadRequest + case core.CodeNotFound: + return fiber.StatusNotFound + case core.CodeServerError: + return fiber.StatusInternalServerError + default: + return fiber.StatusInternalServerError + } +} diff --git a/integrations/fiber/plugin.go b/integrations/fiber/plugin.go deleted file mode 100644 index be742c7..0000000 --- a/integrations/fiber/plugin.go +++ /dev/null @@ -1,165 +0,0 @@ -package fiber - -import ( - "errors" - - "github.com/click33/sa-token-go/core" - "github.com/gofiber/fiber/v2" -) - -// Plugin Fiber plugin for Sa-Token | Fiber插件 -type Plugin struct { - manager *core.Manager -} - -// NewPlugin creates a Fiber plugin | 创建Fiber插件 -func NewPlugin(manager *core.Manager) *Plugin { - return &Plugin{ - manager: manager, - } -} - -// AuthMiddleware authentication middleware | 认证中间件 -func (p *Plugin) AuthMiddleware() fiber.Handler { - return func(c *fiber.Ctx) error { - ctx := NewFiberContext(c) - saCtx := core.NewContext(ctx, p.manager) - - if err := saCtx.CheckLogin(); err != nil { - return writeErrorResponse(c, err) - } - - c.Locals("satoken", saCtx) - return c.Next() - } -} - -// PermissionRequired permission validation middleware | 权限验证中间件 -func (p *Plugin) PermissionRequired(permission string) fiber.Handler { - return func(c *fiber.Ctx) error { - ctx := NewFiberContext(c) - saCtx := core.NewContext(ctx, p.manager) - - if err := saCtx.CheckLogin(); err != nil { - return writeErrorResponse(c, err) - } - - if !saCtx.HasPermission(permission) { - return writeErrorResponse(c, core.NewPermissionDeniedError(permission)) - } - - c.Locals("satoken", saCtx) - return c.Next() - } -} - -// RoleRequired role validation middleware | 角色验证中间件 -func (p *Plugin) RoleRequired(role string) fiber.Handler { - return func(c *fiber.Ctx) error { - ctx := NewFiberContext(c) - saCtx := core.NewContext(ctx, p.manager) - - if err := saCtx.CheckLogin(); err != nil { - return writeErrorResponse(c, err) - } - - if !saCtx.HasRole(role) { - return writeErrorResponse(c, core.NewRoleDeniedError(role)) - } - - c.Locals("satoken", saCtx) - return c.Next() - } -} - -// LoginHandler 登录处理器 -func (p *Plugin) LoginHandler(c *fiber.Ctx) error { - var req struct { - Username string `json:"username"` - Password string `json:"password"` - Device string `json:"device"` - } - - if err := c.BodyParser(&req); err != nil { - return writeErrorResponse(c, core.NewError(core.CodeBadRequest, "invalid request parameters", err)) - } - - device := req.Device - if device == "" { - device = "log" - } - - token, err := p.manager.Login(req.Username, device) - if err != nil { - return writeErrorResponse(c, core.NewError(core.CodeServerError, "login failed", err)) - } - - return writeSuccessResponse(c, fiber.Map{ - "token": token, - }) -} - -// GetSaToken 从Fiber上下文获取Sa-Token上下文 -func GetSaToken(c *fiber.Ctx) (*core.SaTokenContext, bool) { - satoken := c.Locals("satoken") - if satoken == nil { - return nil, false - } - ctx, ok := satoken.(*core.SaTokenContext) - return ctx, ok -} - -// ============ Error Handling Helpers | 错误处理辅助函数 ============ - -// writeErrorResponse writes a standardized error response | 写入标准化的错误响应 -func writeErrorResponse(c *fiber.Ctx, err error) error { - var saErr *core.SaTokenError - var code int - var message string - var httpStatus int - - // Check if it's a SaTokenError | 检查是否为SaTokenError - if errors.As(err, &saErr) { - code = saErr.Code - message = saErr.Message - httpStatus = getHTTPStatusFromCode(code) - } else { - // Handle standard errors | 处理标准错误 - code = core.CodeServerError - message = err.Error() - httpStatus = fiber.StatusInternalServerError - } - - return c.Status(httpStatus).JSON(fiber.Map{ - "code": code, - "message": message, - "error": err.Error(), - }) -} - -// writeSuccessResponse writes a standardized success response | 写入标准化的成功响应 -func writeSuccessResponse(c *fiber.Ctx, data interface{}) error { - return c.JSON(fiber.Map{ - "code": core.CodeSuccess, - "message": "success", - "data": data, - }) -} - -// getHTTPStatusFromCode converts Sa-Token error code to HTTP status | 将Sa-Token错误码转换为HTTP状态码 -func getHTTPStatusFromCode(code int) int { - switch code { - case core.CodeNotLogin: - return fiber.StatusUnauthorized - case core.CodePermissionDenied: - return fiber.StatusForbidden - case core.CodeBadRequest: - return fiber.StatusBadRequest - case core.CodeNotFound: - return fiber.StatusNotFound - case core.CodeServerError: - return fiber.StatusInternalServerError - default: - return fiber.StatusInternalServerError - } -} diff --git a/storage/memory/memory_test.go b/storage/memory/memory_test.go index 7f341e5..02120d9 100644 --- a/storage/memory/memory_test.go +++ b/storage/memory/memory_test.go @@ -6,66 +6,590 @@ import ( "time" ) -func TestSetKeepTTL(t *testing.T) { +func TestMemoryStorage_SetAndGet(t *testing.T) { storage := NewStorage() defer storage.Close() ctx := context.Background() - // 测试场景1: 键不存在的情况 - err := storage.SetKeepTTL(ctx, "non_existent_key", "value") - if err == nil { - t.Errorf("Expected error for non-existent key, got nil") + t.Run("Set and Get basic value", func(t *testing.T) { + key := "test_key" + value := "test_value" + + err := storage.Set(ctx, key, value, 0) + if err != nil { + t.Fatalf("Failed to set key: %v", err) + } + + got, err := storage.Get(ctx, key) + if err != nil { + t.Fatalf("Failed to get key: %v", err) + } + + if got != value { + t.Errorf("Expected value %q, got %q", value, got) + } + }) + + t.Run("Set with expiration", func(t *testing.T) { + key := "expire_key" + value := "expire_value" + + err := storage.Set(ctx, key, value, 2*time.Second) + if err != nil { + t.Fatalf("Failed to set key: %v", err) + } + + // 立即获取应该成功 + got, err := storage.Get(ctx, key) + if err != nil { + t.Fatalf("Failed to get key: %v", err) + } + if got != value { + t.Errorf("Expected value %q, got %q", value, got) + } + + // 等待过期 + time.Sleep(3 * time.Second) + + // 过期后获取应该失败 + _, err = storage.Get(ctx, key) + if err == nil { + t.Error("Expected error for expired key, got nil") + } + }) + + t.Run("Get non-existent key", func(t *testing.T) { + _, err := storage.Get(ctx, "non_existent") + if err == nil { + t.Error("Expected error for non-existent key, got nil") + } + }) +} + +func TestMemoryStorage_SetKeepTTL(t *testing.T) { + storage := NewStorage() + defer storage.Close() + + ctx := context.Background() + + t.Run("SetKeepTTL for non-existent key", func(t *testing.T) { + err := storage.SetKeepTTL(ctx, "non_existent_key", "value") + if err == nil { + t.Error("Expected error for non-existent key, got nil") + } + }) + + t.Run("SetKeepTTL preserves TTL", func(t *testing.T) { + key := "test_key" + originalValue := "original_value" + newValue := "new_value" + ttl := 10 * time.Second + + // 设置初始值和TTL + err := storage.Set(ctx, key, originalValue, ttl) + if err != nil { + t.Fatalf("Failed to set key: %v", err) + } + + // 获取原始TTL + originalTTL, err := storage.TTL(ctx, key) + if err != nil { + t.Fatalf("Failed to get TTL: %v", err) + } + + // 等待1秒 + time.Sleep(1 * time.Second) + + // 使用SetKeepTTL更新值 + err = storage.SetKeepTTL(ctx, key, newValue) + if err != nil { + t.Fatalf("SetKeepTTL failed: %v", err) + } + + // 验证值已更新 + value, err := storage.Get(ctx, key) + if err != nil { + t.Fatalf("Failed to get value: %v", err) + } + if value != newValue { + t.Errorf("Expected value %q, got %q", newValue, value) + } + + // 验证TTL保持相对不变(允许误差) + newTTL, err := storage.TTL(ctx, key) + if err != nil { + t.Fatalf("Failed to get TTL after update: %v", err) + } + + ttlDiff := originalTTL - newTTL + if ttlDiff < 0 { + ttlDiff = -ttlDiff + } + if ttlDiff > 2*time.Second { + t.Errorf("TTL changed significantly. Original: %v, New: %v, Diff: %v", originalTTL, newTTL, ttlDiff) + } + }) +} + +func TestMemoryStorage_Delete(t *testing.T) { + storage := NewStorage() + defer storage.Close() + + ctx := context.Background() + + t.Run("Delete single key", func(t *testing.T) { + key := "delete_key" + value := "delete_value" + + storage.Set(ctx, key, value, 0) + + err := storage.Delete(ctx, key) + if err != nil { + t.Fatalf("Failed to delete key: %v", err) + } + + exists := storage.Exists(ctx, key) + if exists { + t.Error("Key should not exist after deletion") + } + }) + + t.Run("Delete multiple keys", func(t *testing.T) { + keys := []string{"key1", "key2", "key3"} + for _, key := range keys { + storage.Set(ctx, key, "value", 0) + } + + err := storage.Delete(ctx, keys...) + if err != nil { + t.Fatalf("Failed to delete keys: %v", err) + } + + for _, key := range keys { + if storage.Exists(ctx, key) { + t.Errorf("Key %s should not exist after deletion", key) + } + } + }) +} + +func TestMemoryStorage_GetAndDelete(t *testing.T) { + storage := NewStorage() + defer storage.Close() + + ctx := context.Background() + + t.Run("GetAndDelete existing key", func(t *testing.T) { + key := "getdel_key" + value := "getdel_value" + + storage.Set(ctx, key, value, 0) + + got, err := storage.GetAndDelete(ctx, key) + if err != nil { + t.Fatalf("GetAndDelete failed: %v", err) + } + + if got != value { + t.Errorf("Expected value %q, got %q", value, got) + } + + // 键应该已被删除 + if storage.Exists(ctx, key) { + t.Error("Key should not exist after GetAndDelete") + } + }) + + t.Run("GetAndDelete non-existent key", func(t *testing.T) { + _, err := storage.GetAndDelete(ctx, "non_existent") + if err == nil { + t.Error("Expected error for non-existent key, got nil") + } + }) +} + +func TestMemoryStorage_Exists(t *testing.T) { + storage := NewStorage() + defer storage.Close() + + ctx := context.Background() + + t.Run("Exists for existing key", func(t *testing.T) { + key := "exists_key" + storage.Set(ctx, key, "value", 0) + + if !storage.Exists(ctx, key) { + t.Error("Key should exist") + } + }) + + t.Run("Exists for non-existent key", func(t *testing.T) { + if storage.Exists(ctx, "non_existent") { + t.Error("Key should not exist") + } + }) + + t.Run("Exists for expired key", func(t *testing.T) { + key := "expire_exists_key" + storage.Set(ctx, key, "value", 1*time.Second) + + if !storage.Exists(ctx, key) { + t.Error("Key should exist before expiration") + } + + time.Sleep(2 * time.Second) + + if storage.Exists(ctx, key) { + t.Error("Key should not exist after expiration") + } + }) +} + +func TestMemoryStorage_Keys(t *testing.T) { + storage := NewStorage() + defer storage.Close() + + ctx := context.Background() + + // 设置测试数据 + testData := map[string]string{ + "user:1:token": "token1", + "user:2:token": "token2", + "user:1:role": "admin", + "session:abc": "data1", + "session:xyz": "data2", + "product:100": "item", + "product:200": "item", + "product:300": "item", + "expired:key": "value", } - // 测试场景2: 键存在且未过期的情况 - key := "test_key" - originalValue := "original_value" - newValue := "new_value" - ttl := 10 * time.Second + for key, value := range testData { + storage.Set(ctx, key, value, 0) + } + + // 设置一个过期的键 + storage.Set(ctx, "expired:test", "value", 1*time.Second) + time.Sleep(2 * time.Second) + + t.Run("Match all keys with *", func(t *testing.T) { + keys, err := storage.Keys(ctx, "*") + if err != nil { + t.Fatalf("Failed to get keys: %v", err) + } + // 应该至少有9个键(不包括过期的) + if len(keys) < len(testData) { + t.Errorf("Expected at least %d keys, got %d", len(testData), len(keys)) + } + }) + + t.Run("Match prefix pattern user:*", func(t *testing.T) { + keys, err := storage.Keys(ctx, "user:*") + if err != nil { + t.Fatalf("Failed to get keys: %v", err) + } + if len(keys) != 3 { + t.Errorf("Expected 3 keys, got %d", len(keys)) + } + }) + + t.Run("Match pattern user:*:token", func(t *testing.T) { + keys, err := storage.Keys(ctx, "user:*:token") + if err != nil { + t.Fatalf("Failed to get keys: %v", err) + } + if len(keys) != 2 { + t.Errorf("Expected 2 keys, got %d", len(keys)) + } + }) - // 先设置一个键值对 - err = storage.Set(ctx, key, originalValue, ttl) + t.Run("Match suffix pattern *:token", func(t *testing.T) { + keys, err := storage.Keys(ctx, "*:token") + if err != nil { + t.Fatalf("Failed to get keys: %v", err) + } + if len(keys) != 2 { + t.Errorf("Expected 2 keys, got %d", len(keys)) + } + }) + + t.Run("Match exact key", func(t *testing.T) { + keys, err := storage.Keys(ctx, "user:1:token") + if err != nil { + t.Fatalf("Failed to get keys: %v", err) + } + if len(keys) != 1 { + t.Errorf("Expected 1 key, got %d", len(keys)) + } + }) + + t.Run("Match product:* pattern", func(t *testing.T) { + keys, err := storage.Keys(ctx, "product:*") + if err != nil { + t.Fatalf("Failed to get keys: %v", err) + } + if len(keys) != 3 { + t.Errorf("Expected 3 keys, got %d", len(keys)) + } + }) +} + +func TestMemoryStorage_Expire(t *testing.T) { + storage := NewStorage() + defer storage.Close() + + ctx := context.Background() + + t.Run("Set expiration on existing key", func(t *testing.T) { + key := "expire_test" + storage.Set(ctx, key, "value", 0) + + err := storage.Expire(ctx, key, 2*time.Second) + if err != nil { + t.Fatalf("Failed to set expiration: %v", err) + } + + // 立即检查应该存在 + if !storage.Exists(ctx, key) { + t.Error("Key should exist") + } + + // 等待过期 + time.Sleep(3 * time.Second) + + // 过期后应该不存在 + if storage.Exists(ctx, key) { + t.Error("Key should not exist after expiration") + } + }) + + t.Run("Expire non-existent key", func(t *testing.T) { + err := storage.Expire(ctx, "non_existent", 1*time.Second) + if err == nil { + t.Error("Expected error for non-existent key, got nil") + } + }) + + t.Run("Expire with negative duration deletes key", func(t *testing.T) { + key := "delete_via_expire" + storage.Set(ctx, key, "value", 0) + + err := storage.Expire(ctx, key, -1*time.Second) + if err != nil { + t.Fatalf("Failed to expire key: %v", err) + } + + if storage.Exists(ctx, key) { + t.Error("Key should be deleted") + } + }) +} + +func TestMemoryStorage_TTL(t *testing.T) { + storage := NewStorage() + defer storage.Close() + + ctx := context.Background() + + t.Run("TTL for key with expiration", func(t *testing.T) { + key := "ttl_key" + storage.Set(ctx, key, "value", 10*time.Second) + + ttl, err := storage.TTL(ctx, key) + if err != nil { + t.Fatalf("Failed to get TTL: %v", err) + } + + if ttl <= 0 || ttl > 10*time.Second { + t.Errorf("Expected TTL between 0 and 10s, got %v", ttl) + } + }) + + t.Run("TTL for key without expiration", func(t *testing.T) { + key := "no_ttl_key" + storage.Set(ctx, key, "value", 0) + + ttl, err := storage.TTL(ctx, key) + if err != nil { + t.Fatalf("Failed to get TTL: %v", err) + } + + if ttl != -1*time.Second { + t.Errorf("Expected TTL -1s (no expiration), got %v", ttl) + } + }) + + t.Run("TTL for non-existent key", func(t *testing.T) { + ttl, err := storage.TTL(ctx, "non_existent") + if err == nil { + t.Error("Expected error for non-existent key, got nil") + } + if ttl != -2*time.Second { + t.Errorf("Expected TTL -2s (not found), got %v", ttl) + } + }) + + t.Run("TTL for expired key", func(t *testing.T) { + key := "expired_ttl_key" + storage.Set(ctx, key, "value", 1*time.Second) + + time.Sleep(2 * time.Second) + + ttl, err := storage.TTL(ctx, key) + if err != nil { + // 过期键可能已被清理,这是正常的 + if ttl != -2*time.Second { + t.Errorf("Expected TTL -2s for expired key, got %v", ttl) + } + } + }) +} + +func TestMemoryStorage_Clear(t *testing.T) { + storage := NewStorage() + defer storage.Close() + + ctx := context.Background() + + // 设置多个键 + storage.Set(ctx, "key1", "value1", 0) + storage.Set(ctx, "key2", "value2", 0) + storage.Set(ctx, "key3", "value3", 0) + + err := storage.Clear(ctx) if err != nil { - t.Fatalf("Failed to set key: %v", err) + t.Fatalf("Failed to clear storage: %v", err) + } + + // 验证所有键都被删除 + if storage.Exists(ctx, "key1") || storage.Exists(ctx, "key2") || storage.Exists(ctx, "key3") { + t.Error("All keys should be deleted after Clear") } - // 获取原始TTL - originalTTL, err := storage.TTL(ctx, key) + keys, _ := storage.Keys(ctx, "*") + if len(keys) != 0 { + t.Errorf("Expected 0 keys after Clear, got %d", len(keys)) + } +} + +func TestMemoryStorage_Ping(t *testing.T) { + storage := NewStorage() + defer storage.Close() + + ctx := context.Background() + + err := storage.Ping(ctx) if err != nil { - t.Fatalf("Failed to get TTL: %v", err) + t.Fatalf("Ping should succeed: %v", err) } +} + +func TestMemoryStorage_Close(t *testing.T) { + storage := NewStorage() + + ctx := context.Background() - // 使用SetKeepTTL更新值 - err = storage.SetKeepTTL(ctx, key, newValue) + // 关闭前应该正常工作 + err := storage.Ping(ctx) if err != nil { - t.Fatalf("SetKeepTTL failed: %v", err) + t.Fatalf("Ping should succeed before close: %v", err) } - // 验证值已更新 - value, err := storage.Get(ctx, key) + // 关闭存储 + err = storage.Close() if err != nil { - t.Fatalf("Failed to get value: %v", err) + t.Fatalf("Failed to close storage: %v", err) } - if value != newValue { - t.Errorf("Expected value %q, got %q", newValue, value) + + // 关闭后 Ping 应该失败 + err = storage.Ping(ctx) + if err == nil { + t.Error("Ping should fail after close") } - // 验证TTL保持不变 - newTTL, err := storage.TTL(ctx, key) + // 重复关闭应该不报错 + err = storage.Close() if err != nil { - t.Fatalf("Failed to get TTL after update: %v", err) + t.Errorf("Second close should not return error: %v", err) } +} + +func TestMemoryStorage_Cleanup(t *testing.T) { + // 使用较短的清理间隔创建存储 + storage := NewStorageWithCleanupInterval(500 * time.Millisecond) + defer storage.Close() + + ctx := context.Background() - // 允许有轻微误差(不超过1秒) - ttlDiff := originalTTL - newTTL - if ttlDiff < 0 { - ttlDiff = -ttlDiff + // 设置多个短期过期的键 + for i := 0; i < 10; i++ { + key := "cleanup_key_" + string(rune(i)) + storage.Set(ctx, key, "value", 1*time.Second) } - if ttlDiff > time.Second { - t.Errorf("TTL changed significantly. Original: %v, New: %v", originalTTL, newTTL) + + // 验证键存在 + keys, _ := storage.Keys(ctx, "cleanup_key_*") + if len(keys) == 0 { + t.Error("Keys should exist before expiration") } - // 注意:Memory实现中,过期检查是在访问时进行的,而不是通过后台任务 - // 因此我们无法可靠地测试已过期键的情况,这里只测试键不存在的情况 + // 等待过期和清理 + time.Sleep(2 * time.Second) + + // 验证过期键被清理 + keys, _ = storage.Keys(ctx, "cleanup_key_*") + if len(keys) != 0 { + t.Errorf("Expected 0 keys after cleanup, got %d", len(keys)) + } +} + +func TestMemoryStorage_ConcurrentAccess(t *testing.T) { + storage := NewStorage() + defer storage.Close() + + ctx := context.Background() + + // 并发写入 + done := make(chan bool) + for i := 0; i < 10; i++ { + go func(n int) { + key := "concurrent_key_" + string(rune(n)) + storage.Set(ctx, key, n, 0) + done <- true + }(i) + } + + // 等待所有写入完成 + for i := 0; i < 10; i++ { + <-done + } + + // 并发读取 + for i := 0; i < 10; i++ { + go func(n int) { + key := "concurrent_key_" + string(rune(n)) + storage.Get(ctx, key) + done <- true + }(i) + } + + // 等待所有读取完成 + for i := 0; i < 10; i++ { + <-done + } + + // 并发删除 + for i := 0; i < 10; i++ { + go func(n int) { + key := "concurrent_key_" + string(rune(n)) + storage.Delete(ctx, key) + done <- true + }(i) + } + + // 等待所有删除完成 + for i := 0; i < 10; i++ { + <-done + } } diff --git a/storage/redis/redis_test.go b/storage/redis/redis_test.go index 05a2199..3239531 100644 --- a/storage/redis/redis_test.go +++ b/storage/redis/redis_test.go @@ -2,92 +2,732 @@ package redis import ( "context" + "os" "testing" "time" "github.com/redis/go-redis/v9" ) -// 如果需要在本地运行测试,请取消下面注释并配置Redis连接信息 -/* -func TestSetKeepTTL(t *testing.T) { - // 创建Redis客户端 +// getTestRedisClient 获取测试用的Redis客户端 +// 优先使用环境变量 REDIS_URL,否则使用默认地址 +func getTestRedisClient(t *testing.T) *redis.Client { + addr := os.Getenv("REDIS_URL") + if addr == "" { + addr = "192.168.19.104:6379" + } + client := redis.NewClient(&redis.Options{ - Addr: "localhost:6379", // Redis地址 - Password: "", // 无密码 - DB: 0, // 默认DB + Addr: addr, + Password: "root", + DB: 0, // 使用独立的测试DB }) - // 创建存储实例 + // 测试连接 + ctx := context.Background() + if err := client.Ping(ctx).Err(); err != nil { + t.Skipf("Redis not available at %s, skipping test: %v", addr, err) + } + + return client +} + +// cleanupTestData 清理测试数据 +func cleanupTestData(t *testing.T, storage *Storage) { + ctx := context.Background() + if err := storage.Clear(ctx); err != nil { + t.Logf("Warning: failed to cleanup test data: %v", err) + } +} + +func TestRedisStorage_SetAndGet(t *testing.T) { + client := getTestRedisClient(t) storage := NewStorageFromClient(client) defer storage.Close() + defer cleanupTestData(t, storage) ctx := context.Background() - // 测试场景1: 键不存在的情况 - err := storage.SetKeepTTL(ctx, "non_existent_key", "value") - if err == nil { - t.Errorf("Expected error for non-existent key, got nil") + t.Run("Set and Get basic value", func(t *testing.T) { + key := "test_key" + value := "test_value" + + err := storage.Set(ctx, key, value, 0) + if err != nil { + t.Fatalf("Failed to set key: %v", err) + } + + got, err := storage.Get(ctx, key) + if err != nil { + t.Fatalf("Failed to get key: %v", err) + } + + if got != value { + t.Errorf("Expected value %q, got %q", value, got) + } + + // 清理 + storage.Delete(ctx, key) + }) + + t.Run("Set with expiration", func(t *testing.T) { + key := "expire_key" + value := "expire_value" + + err := storage.Set(ctx, key, value, 2*time.Second) + if err != nil { + t.Fatalf("Failed to set key: %v", err) + } + + // 立即获取应该成功 + got, err := storage.Get(ctx, key) + if err != nil { + t.Fatalf("Failed to get key: %v", err) + } + if got != value { + t.Errorf("Expected value %q, got %q", value, got) + } + + // 等待过期 + time.Sleep(3 * time.Second) + + // 过期后获取应该失败 + _, err = storage.Get(ctx, key) + if err == nil { + t.Error("Expected error for expired key, got nil") + } + }) + + t.Run("Get non-existent key", func(t *testing.T) { + _, err := storage.Get(ctx, "non_existent_key_12345") + if err == nil { + t.Error("Expected error for non-existent key, got nil") + } + }) +} + +func TestRedisStorage_SetKeepTTL(t *testing.T) { + client := getTestRedisClient(t) + storage := NewStorageFromClient(client) + defer storage.Close() + defer cleanupTestData(t, storage) + + ctx := context.Background() + + t.Run("SetKeepTTL for non-existent key", func(t *testing.T) { + err := storage.SetKeepTTL(ctx, "non_existent_key_999", "value") + if err == nil { + t.Error("Expected error for non-existent key, got nil") + } + }) + + t.Run("SetKeepTTL preserves TTL", func(t *testing.T) { + key := "test_key_keepttl" + originalValue := "original_value" + newValue := "new_value" + ttl := 10 * time.Second + + // 设置初始值和TTL + err := storage.Set(ctx, key, originalValue, ttl) + if err != nil { + t.Fatalf("Failed to set key: %v", err) + } + + // 获取原始TTL + originalTTL, err := storage.TTL(ctx, key) + if err != nil { + t.Fatalf("Failed to get TTL: %v", err) + } + + // 等待1秒 + time.Sleep(1 * time.Second) + + // 使用SetKeepTTL更新值 + err = storage.SetKeepTTL(ctx, key, newValue) + if err != nil { + t.Fatalf("SetKeepTTL failed: %v", err) + } + + // 验证值已更新 + value, err := storage.Get(ctx, key) + if err != nil { + t.Fatalf("Failed to get value: %v", err) + } + if value != newValue { + t.Errorf("Expected value %q, got %q", newValue, value) + } + + // 验证TTL保持相对不变(允许误差) + newTTL, err := storage.TTL(ctx, key) + if err != nil { + t.Fatalf("Failed to get TTL after update: %v", err) + } + + ttlDiff := originalTTL - newTTL + if ttlDiff < 0 { + ttlDiff = -ttlDiff + } + if ttlDiff > 2*time.Second { + t.Errorf("TTL changed significantly. Original: %v, New: %v, Diff: %v", originalTTL, newTTL, ttlDiff) + } + + // 清理 + storage.Delete(ctx, key) + }) +} + +func TestRedisStorage_Delete(t *testing.T) { + client := getTestRedisClient(t) + storage := NewStorageFromClient(client) + defer storage.Close() + defer cleanupTestData(t, storage) + + ctx := context.Background() + + t.Run("Delete single key", func(t *testing.T) { + key := "delete_key" + value := "delete_value" + + storage.Set(ctx, key, value, 0) + + err := storage.Delete(ctx, key) + if err != nil { + t.Fatalf("Failed to delete key: %v", err) + } + + exists := storage.Exists(ctx, key) + if exists { + t.Error("Key should not exist after deletion") + } + }) + + t.Run("Delete multiple keys", func(t *testing.T) { + keys := []string{"del_key1", "del_key2", "del_key3"} + for _, key := range keys { + storage.Set(ctx, key, "value", 0) + } + + err := storage.Delete(ctx, keys...) + if err != nil { + t.Fatalf("Failed to delete keys: %v", err) + } + + for _, key := range keys { + if storage.Exists(ctx, key) { + t.Errorf("Key %s should not exist after deletion", key) + } + } + }) + + t.Run("Delete empty keys", func(t *testing.T) { + err := storage.Delete(ctx) + if err != nil { + t.Errorf("Delete with no keys should not return error: %v", err) + } + }) +} + +func TestRedisStorage_GetAndDelete(t *testing.T) { + client := getTestRedisClient(t) + storage := NewStorageFromClient(client) + defer storage.Close() + defer cleanupTestData(t, storage) + + ctx := context.Background() + + t.Run("GetAndDelete existing key", func(t *testing.T) { + key := "getdel_key" + value := "getdel_value" + + storage.Set(ctx, key, value, 0) + + got, err := storage.GetAndDelete(ctx, key) + if err != nil { + t.Fatalf("GetAndDelete failed: %v", err) + } + + if got != value { + t.Errorf("Expected value %q, got %q", value, got) + } + + // 键应该已被删除 + if storage.Exists(ctx, key) { + t.Error("Key should not exist after GetAndDelete") + } + }) + + t.Run("GetAndDelete non-existent key", func(t *testing.T) { + _, err := storage.GetAndDelete(ctx, "non_existent_getdel") + if err == nil { + t.Error("Expected error for non-existent key, got nil") + } + }) +} + +func TestRedisStorage_Exists(t *testing.T) { + client := getTestRedisClient(t) + storage := NewStorageFromClient(client) + defer storage.Close() + defer cleanupTestData(t, storage) + + ctx := context.Background() + + t.Run("Exists for existing key", func(t *testing.T) { + key := "exists_key" + storage.Set(ctx, key, "value", 0) + + if !storage.Exists(ctx, key) { + t.Error("Key should exist") + } + + // 清理 + storage.Delete(ctx, key) + }) + + t.Run("Exists for non-existent key", func(t *testing.T) { + if storage.Exists(ctx, "non_existent_exists") { + t.Error("Key should not exist") + } + }) + + t.Run("Exists for expired key", func(t *testing.T) { + key := "expire_exists_key" + storage.Set(ctx, key, "value", 1*time.Second) + + if !storage.Exists(ctx, key) { + t.Error("Key should exist before expiration") + } + + time.Sleep(2 * time.Second) + + if storage.Exists(ctx, key) { + t.Error("Key should not exist after expiration") + } + }) +} + +func TestRedisStorage_Keys(t *testing.T) { + client := getTestRedisClient(t) + storage := NewStorageFromClient(client) + defer storage.Close() + defer cleanupTestData(t, storage) + + ctx := context.Background() + + // 设置测试数据 + testData := map[string]string{ + "test:user:1:token": "token1", + "test:user:2:token": "token2", + "test:user:1:role": "admin", + "test:session:abc": "data1", + "test:session:xyz": "data2", + "test:product:100": "item", + "test:product:200": "item", + "test:product:300": "item", } - // 测试场景2: 键存在且未过期的情况 - key := "test_key" - originalValue := "original_value" - newValue := "new_value" - ttl := 10 * time.Second + for key, value := range testData { + storage.Set(ctx, key, value, 0) + } + + t.Run("Match all test keys with test:*", func(t *testing.T) { + keys, err := storage.Keys(ctx, "test:*") + if err != nil { + t.Fatalf("Failed to get keys: %v", err) + } + if len(keys) != len(testData) { + t.Errorf("Expected %d keys, got %d", len(testData), len(keys)) + } + }) + + t.Run("Match prefix pattern test:user:*", func(t *testing.T) { + keys, err := storage.Keys(ctx, "test:user:*") + if err != nil { + t.Fatalf("Failed to get keys: %v", err) + } + if len(keys) != 3 { + t.Errorf("Expected 3 keys, got %d", len(keys)) + } + }) + + t.Run("Match pattern test:user:*:token", func(t *testing.T) { + keys, err := storage.Keys(ctx, "test:user:*:token") + if err != nil { + t.Fatalf("Failed to get keys: %v", err) + } + if len(keys) != 2 { + t.Errorf("Expected 2 keys, got %d", len(keys)) + } + }) + + t.Run("Match exact key", func(t *testing.T) { + keys, err := storage.Keys(ctx, "test:user:1:token") + if err != nil { + t.Fatalf("Failed to get keys: %v", err) + } + if len(keys) != 1 { + t.Errorf("Expected 1 key, got %d", len(keys)) + } + }) - // 先设置一个键值对 - err = storage.Set(ctx, key, originalValue, ttl) + t.Run("Match product:* pattern", func(t *testing.T) { + keys, err := storage.Keys(ctx, "test:product:*") + if err != nil { + t.Fatalf("Failed to get keys: %v", err) + } + if len(keys) != 3 { + t.Errorf("Expected 3 keys, got %d", len(keys)) + } + }) +} + +func TestRedisStorage_Expire(t *testing.T) { + client := getTestRedisClient(t) + storage := NewStorageFromClient(client) + defer storage.Close() + defer cleanupTestData(t, storage) + + ctx := context.Background() + + t.Run("Set expiration on existing key", func(t *testing.T) { + key := "expire_test" + storage.Set(ctx, key, "value", 0) + + err := storage.Expire(ctx, key, 2*time.Second) + if err != nil { + t.Fatalf("Failed to set expiration: %v", err) + } + + // 立即检查应该存在 + if !storage.Exists(ctx, key) { + t.Error("Key should exist") + } + + // 等待过期 + time.Sleep(3 * time.Second) + + // 过期后应该不存在 + if storage.Exists(ctx, key) { + t.Error("Key should not exist after expiration") + } + }) + + t.Run("Expire non-existent key", func(t *testing.T) { + // Redis的EXPIRE命令对不存在的键会返回0,但不会报错 + // 这里只是确保不会崩溃 + err := storage.Expire(ctx, "non_existent_expire", 1*time.Second) + if err != nil { + t.Logf("Expire on non-existent key returned error (expected): %v", err) + } + }) +} + +func TestRedisStorage_TTL(t *testing.T) { + client := getTestRedisClient(t) + storage := NewStorageFromClient(client) + defer storage.Close() + defer cleanupTestData(t, storage) + + ctx := context.Background() + + t.Run("TTL for key with expiration", func(t *testing.T) { + key := "ttl_key" + storage.Set(ctx, key, "value", 10*time.Second) + + ttl, err := storage.TTL(ctx, key) + if err != nil { + t.Fatalf("Failed to get TTL: %v", err) + } + + if ttl <= 0 || ttl > 10*time.Second { + t.Errorf("Expected TTL between 0 and 10s, got %v", ttl) + } + + // 清理 + storage.Delete(ctx, key) + }) + + t.Run("TTL for key without expiration", func(t *testing.T) { + key := "no_ttl_key" + storage.Set(ctx, key, "value", 0) + + ttl, err := storage.TTL(ctx, key) + if err != nil { + t.Fatalf("Failed to get TTL: %v", err) + } + + // Redis返回-1表示永不过期 + if ttl != -1*time.Second { + t.Errorf("Expected TTL -1s (no expiration), got %v", ttl) + } + + // 清理 + storage.Delete(ctx, key) + }) + + t.Run("TTL for non-existent key", func(t *testing.T) { + ttl, err := storage.TTL(ctx, "non_existent_ttl") + if err != nil { + t.Fatalf("Failed to get TTL: %v", err) + } + + // Redis返回-2表示键不存在 + if ttl != -2*time.Second { + t.Errorf("Expected TTL -2s (not found), got %v", ttl) + } + }) + + t.Run("TTL for expired key", func(t *testing.T) { + key := "expired_ttl_key" + storage.Set(ctx, key, "value", 1*time.Second) + + time.Sleep(2 * time.Second) + + ttl, err := storage.TTL(ctx, key) + if err != nil { + t.Fatalf("Failed to get TTL: %v", err) + } + + // 已过期的键应该返回-2 + if ttl != -2*time.Second { + t.Errorf("Expected TTL -2s for expired key, got %v", ttl) + } + }) +} + +func TestRedisStorage_Clear(t *testing.T) { + client := getTestRedisClient(t) + storage := NewStorageFromClient(client) + defer storage.Close() + + ctx := context.Background() + + // 设置多个键 + storage.Set(ctx, "clear_key1", "value1", 0) + storage.Set(ctx, "clear_key2", "value2", 0) + storage.Set(ctx, "clear_key3", "value3", 0) + + err := storage.Clear(ctx) if err != nil { - t.Fatalf("Failed to set key: %v", err) + t.Fatalf("Failed to clear storage: %v", err) } - // 获取原始TTL - originalTTL, err := storage.TTL(ctx, key) + // 验证所有键都被删除 + if storage.Exists(ctx, "clear_key1") || storage.Exists(ctx, "clear_key2") || storage.Exists(ctx, "clear_key3") { + t.Error("All keys should be deleted after Clear") + } +} + +func TestRedisStorage_Ping(t *testing.T) { + client := getTestRedisClient(t) + storage := NewStorageFromClient(client) + defer storage.Close() + + ctx := context.Background() + + err := storage.Ping(ctx) if err != nil { - t.Fatalf("Failed to get TTL: %v", err) + t.Fatalf("Ping should succeed: %v", err) } +} + +func TestRedisStorage_Close(t *testing.T) { + client := getTestRedisClient(t) + storage := NewStorageFromClient(client) + + ctx := context.Background() - // 使用SetKeepTTL更新值 - err = storage.SetKeepTTL(ctx, key, newValue) + // 关闭前应该正常工作 + err := storage.Ping(ctx) if err != nil { - t.Fatalf("SetKeepTTL failed: %v", err) + t.Fatalf("Ping should succeed before close: %v", err) } - // 验证值已更新 - value, err := storage.Get(ctx, key) + // 关闭存储 + err = storage.Close() if err != nil { - t.Fatalf("Failed to get value: %v", err) + t.Fatalf("Failed to close storage: %v", err) } - if value != newValue { - t.Errorf("Expected value %q, got %q", newValue, value) + + // 关闭后操作应该失败 + err = storage.Ping(ctx) + if err == nil { + t.Error("Ping should fail after close") } +} + +func TestRedisStorage_NewStorage(t *testing.T) { + t.Run("NewStorage with valid URL", func(t *testing.T) { + url := "redis://localhost:6379/15" + storage, err := NewStorage(url) + if err != nil { + t.Skipf("Redis not available, skipping test: %v", err) + } + defer storage.Close() - // 验证TTL保持不变 - newTTL, err := storage.TTL(ctx, key) + ctx := context.Background() + err = storage.Ping(ctx) + if err != nil { + t.Fatalf("Ping should succeed: %v", err) + } + }) + + t.Run("NewStorage with invalid URL", func(t *testing.T) { + url := "invalid://url" + _, err := NewStorage(url) + if err == nil { + t.Error("Expected error for invalid URL, got nil") + } + }) +} + +func TestRedisStorage_NewStorageFromConfig(t *testing.T) { + t.Run("NewStorageFromConfig with valid config", func(t *testing.T) { + cfg := &Config{ + Host: "localhost", + Port: 6379, + Password: "", + Database: 15, + PoolSize: 10, + OperationTimeout: 3 * time.Second, + } + + storage, err := NewStorageFromConfig(cfg) + if err != nil { + t.Skipf("Redis not available, skipping test: %v", err) + } + defer storage.Close() + + ctx := context.Background() + err = storage.Ping(ctx) + if err != nil { + t.Fatalf("Ping should succeed: %v", err) + } + }) + + t.Run("NewStorageFromConfig with invalid config", func(t *testing.T) { + cfg := &Config{ + Host: "invalid-host-12345", + Port: 9999, + Database: 0, + PoolSize: 10, + } + + _, err := NewStorageFromConfig(cfg) + if err == nil { + t.Error("Expected error for invalid config, got nil") + } + }) +} + +func TestRedisStorage_Builder(t *testing.T) { + t.Run("Builder pattern", func(t *testing.T) { + storage, err := NewBuilder(). + Host("localhost"). + Port(6379). + Database(15). + PoolSize(10). + Build() + + if err != nil { + t.Skipf("Redis not available, skipping test: %v", err) + } + defer storage.Close() + + ctx := context.Background() + err = storage.Ping(ctx) + if err != nil { + t.Fatalf("Ping should succeed: %v", err) + } + }) + + t.Run("Builder with password", func(t *testing.T) { + storage, err := NewBuilder(). + Host("localhost"). + Port(6379). + Password(""). // 测试环境通常没有密码 + Database(15). + Build() + + if err != nil { + t.Skipf("Redis not available, skipping test: %v", err) + } + defer storage.Close() + + ctx := context.Background() + err = storage.Ping(ctx) + if err != nil { + t.Fatalf("Ping should succeed: %v", err) + } + }) +} + +func TestRedisStorage_GetClient(t *testing.T) { + client := getTestRedisClient(t) + storage := NewStorageFromClient(client) + defer storage.Close() + + redisClient := storage.GetClient() + if redisClient == nil { + t.Error("GetClient should return a valid client") + } + + // 测试使用获取的客户端 + ctx := context.Background() + err := redisClient.Ping(ctx).Err() if err != nil { - t.Fatalf("Failed to get TTL after update: %v", err) + t.Fatalf("Client from GetClient should work: %v", err) + } +} + +func TestRedisStorage_ConcurrentAccess(t *testing.T) { + client := getTestRedisClient(t) + storage := NewStorageFromClient(client) + defer storage.Close() + defer cleanupTestData(t, storage) + + ctx := context.Background() + + // 并发写入 + done := make(chan bool) + for i := 0; i < 10; i++ { + go func(n int) { + key := "concurrent_key_" + string(rune(n)) + storage.Set(ctx, key, n, 0) + done <- true + }(i) } - // 允许有轻微误差(不超过1秒) - ttlDiff := originalTTL - newTTL - if ttlDiff < 0 { - ttlDiff = -ttlDiff + // 等待所有写入完成 + for i := 0; i < 10; i++ { + <-done } - if ttlDiff > time.Second { - t.Errorf("TTL changed significantly. Original: %v, New: %v", originalTTL, newTTL) + + // 并发读取 + for i := 0; i < 10; i++ { + go func(n int) { + key := "concurrent_key_" + string(rune(n)) + storage.Get(ctx, key) + done <- true + }(i) } - // 清理测试数据 - storage.Delete(ctx, key) -} -*/ + // 等待所有读取完成 + for i := 0; i < 10; i++ { + <-done + } -// 占位测试,确保测试文件能够编译通过 -func TestDummy(t *testing.T) { - // 这是一个空测试,仅用于确保测试文件能够编译通过 - // 同时验证依赖导入正确 - _ = redis.NewClient - _ = context.Background - _ = time.Second + // 并发删除 + for i := 0; i < 10; i++ { + go func(n int) { + key := "concurrent_key_" + string(rune(n)) + storage.Delete(ctx, key) + done <- true + }(i) + } + + // 等待所有删除完成 + for i := 0; i < 10; i++ { + <-done + } } From d5ecd60f71db82797d087fd740ec3233dc0ce304 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Wed, 31 Dec 2025 14:14:38 +0800 Subject: [PATCH 34/50] =?UTF-8?q?feat():=201=E3=80=81=E4=BC=98=E5=8C=96con?= =?UTF-8?q?fig=E6=A3=80=E6=B5=8B=E4=BB=A5=E5=8F=8A=E6=A1=86=E6=9E=B6?= =?UTF-8?q?=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/banner/banner.go | 35 +- core/banner/banner_test.go | 100 +++ core/config/config.go | 145 ++-- core/config/config_test.go | 940 +++++++++++++++++++++++++ core/config/consts.go | 5 - examples/config_auto_adjust_example.go | 61 ++ integrations/echo/annotation.go | 16 +- 7 files changed, 1215 insertions(+), 87 deletions(-) create mode 100644 core/banner/banner_test.go create mode 100644 core/config/config_test.go create mode 100644 examples/config_auto_adjust_example.go diff --git a/core/banner/banner.go b/core/banner/banner.go index c0fcbf8..3ee0778 100644 --- a/core/banner/banner.go +++ b/core/banner/banner.go @@ -45,40 +45,41 @@ func PrintWithConfig(cfg *config.Config) { fmt.Println("│ Configuration │") fmt.Println("├─────────────────────────────────────────────────────────┤") - // Basic Token Settings | Token 基础设置 + // Basic Settings | 基础设置 fmt.Print(formatConfigLine("Token Name", cfg.TokenName)) fmt.Print(formatConfigLine("Token Style", cfg.TokenStyle)) + fmt.Print(formatConfigLine("Auth Type", cfg.AuthType)) fmt.Print(formatConfigLine("Key Prefix", cfg.KeyPrefix)) - fmt.Print(formatConfigLine("AuthType", cfg.AuthType)) - // Login Control | 登录控制 - fmt.Println("├─────────────────────────────────────────────────────────┤") - fmt.Print(formatConfigLine("Concurrent Login", cfg.IsConcurrent)) - fmt.Print(formatConfigLine("Share Token", cfg.IsShare)) - fmt.Print(formatConfigLine("Max Login Count", formatCount(cfg.MaxLoginCount))) - - // Timeout & Activity | 超时与活跃控制 + // Timeout Strategy | 超时策略 fmt.Println("├─────────────────────────────────────────────────────────┤") fmt.Print(formatConfigLine("Token Timeout", formatTimeout(cfg.Timeout))) fmt.Print(formatConfigLine("Active Timeout", formatTimeout(cfg.ActiveTimeout))) + fmt.Print(formatConfigLine("Auto Renew", cfg.AutoRenew)) + if cfg.AutoRenew { + fmt.Print(formatConfigLine("Max Refresh", formatTimeout(cfg.MaxRefresh))) + } - // Renewal & Refresh Strategy | 续期与刷新策略 + // Login Strategy | 登录策略 fmt.Println("├─────────────────────────────────────────────────────────┤") - fmt.Print(formatConfigLine("Auto Renew", cfg.AutoRenew)) - fmt.Print(formatConfigLine("Max Refresh", formatTimeout(cfg.MaxRefresh))) - fmt.Print(formatConfigLine("Renew Interval", formatTimeout(cfg.RenewInterval))) + fmt.Print(formatConfigLine("Concurrent Login", cfg.IsConcurrent)) + fmt.Print(formatConfigLine("Share Token", cfg.IsShare)) + if cfg.IsConcurrent && !cfg.IsShare { + fmt.Print(formatConfigLine("Max Login Count", formatCount(cfg.MaxLoginCount))) + } - // Token Read Sources (compact) | Token 读取来源(紧凑显示) + // Token Reading | Token 读取 fmt.Println("├─────────────────────────────────────────────────────────┤") fmt.Print(formatConfigLine("Read From", tokenReadSources(cfg))) - // Security & Storage | 安全与存储 + // Security | 安全 fmt.Println("├─────────────────────────────────────────────────────────┤") if cfg.TokenStyle == "jwt" || cfg.TokenStyle == "JWT" { - fmt.Print(formatConfigLine("JWT Secret Key", configured)) + fmt.Print(formatConfigLine("JWT Secret", configured)) } else { - fmt.Print(formatConfigLine("JWT Secret Key", "(not used)")) + fmt.Print(formatConfigLine("JWT Secret", "(not used)")) } + fmt.Print(formatConfigLine("Session Check", cfg.TokenSessionCheckLogin)) fmt.Println("└─────────────────────────────────────────────────────────┘") fmt.Println() diff --git a/core/banner/banner_test.go b/core/banner/banner_test.go new file mode 100644 index 0000000..4b1f311 --- /dev/null +++ b/core/banner/banner_test.go @@ -0,0 +1,100 @@ +package banner + +import ( + "testing" + + "github.com/click33/sa-token-go/core/adapter" + "github.com/click33/sa-token-go/core/config" +) + +// TestPrintWithConfig_Default tests banner printing with default configuration +func TestPrintWithConfig_Default(t *testing.T) { + t.Log("=== Testing with Default Config ===") + cfg := config.DefaultConfig() + PrintWithConfig(cfg) +} + +// TestPrintWithConfig_JWT tests banner printing with JWT configuration +func TestPrintWithConfig_JWT(t *testing.T) { + t.Log("=== Testing with JWT Config ===") + cfg := config.DefaultConfig() + cfg.SetTokenStyle(adapter.TokenStyleJWT) + cfg.SetJwtSecretKey("my-secret-key-123456") + cfg.SetTimeout(86400) // 1 day + cfg.SetActiveTimeout(3600) // 1 hour + cfg.SetAutoRenew(true) + cfg.SetMaxRefresh(43200) // 12 hours + PrintWithConfig(cfg) +} + +// TestPrintWithConfig_NonConcurrent tests banner printing with non-concurrent login +func TestPrintWithConfig_NonConcurrent(t *testing.T) { + t.Log("=== Testing with Non-Concurrent Login Config ===") + cfg := config.DefaultConfig() + cfg.SetIsConcurrent(false) + cfg.SetIsShare(false) + PrintWithConfig(cfg) +} + +// TestPrintWithConfig_MaxLoginCount tests banner printing with max login count +func TestPrintWithConfig_MaxLoginCount(t *testing.T) { + t.Log("=== Testing with Max Login Count Config ===") + cfg := config.DefaultConfig() + cfg.SetIsConcurrent(true) + cfg.SetIsShare(false) + cfg.SetMaxLoginCount(5) + PrintWithConfig(cfg) +} + +// TestPrintWithConfig_AllReadSources tests banner printing with all read sources enabled +func TestPrintWithConfig_AllReadSources(t *testing.T) { + t.Log("=== Testing with All Read Sources Enabled ===") + cfg := config.DefaultConfig() + cfg.SetIsReadHeader(true) + cfg.SetIsReadCookie(true) + cfg.SetIsReadBody(true) + PrintWithConfig(cfg) +} + +// TestPrintWithConfig_CustomPrefix tests banner printing with custom prefix and auth type +func TestPrintWithConfig_CustomPrefix(t *testing.T) { + t.Log("=== Testing with Custom Prefix and Auth Type ===") + cfg := config.DefaultConfig() + cfg.SetKeyPrefix("myapp") + cfg.SetAuthType("oauth2") + cfg.SetTokenName("access_token") + PrintWithConfig(cfg) +} + +// TestPrintWithConfig_NoAutoRenew tests banner printing without auto renew +func TestPrintWithConfig_NoAutoRenew(t *testing.T) { + t.Log("=== Testing without Auto Renew ===") + cfg := config.DefaultConfig() + cfg.SetAutoRenew(false) + PrintWithConfig(cfg) +} + +// TestPrintWithConfig_NeverExpire tests banner printing with never expire timeout +func TestPrintWithConfig_NeverExpire(t *testing.T) { + t.Log("=== Testing with Never Expire Timeout ===") + cfg := config.DefaultConfig() + cfg.SetTimeout(-1) + cfg.SetActiveTimeout(-1) + PrintWithConfig(cfg) +} + +// TestPrintWithConfig_LongTimeout tests banner printing with long timeout (shows days) +func TestPrintWithConfig_LongTimeout(t *testing.T) { + t.Log("=== Testing with Long Timeout (30 days) ===") + cfg := config.DefaultConfig() + cfg.SetTimeout(2592000) // 30 days + cfg.SetActiveTimeout(604800) // 7 days + cfg.SetMaxRefresh(1296000) // 15 days + PrintWithConfig(cfg) +} + +// TestPrint tests basic banner printing +func TestPrint(t *testing.T) { + t.Log("=== Testing Basic Banner ===") + Print() +} diff --git a/core/config/config.go b/core/config/config.go index 18511b9..ad38ceb 100644 --- a/core/config/config.go +++ b/core/config/config.go @@ -2,8 +2,9 @@ package config import ( "fmt" - "github.com/click33/sa-token-go/core/adapter" "strings" + + "github.com/click33/sa-token-go/core/adapter" ) // Config Sa-Token configuration | Sa-Token配置 @@ -118,86 +119,124 @@ func DefaultConfig() *Config { // Validate validates the configuration | 验证配置是否合理 func (c *Config) Validate() error { - // Check TokenStyle validity | 检查 Token 风格是否合法 - if !c.TokenStyle.IsValid() { - return fmt.Errorf("invalid TokenStyle: %s", c.TokenStyle) + // =============== Phase 1: Basic format validation | 阶段1:基础格式验证 =============== + + // [Critical] TokenName is required for Token identification | TokenName是Token标识的必要字段 + if c.TokenName == "" { + return fmt.Errorf("TokenName cannot be empty") + } + if strings.ContainsAny(c.TokenName, "\t\r\n") { + return fmt.Errorf("TokenName cannot contain tab/newline characters, got: %q", c.TokenName) + } + if len(c.TokenName) > 64 { + return fmt.Errorf("TokenName too long (max 64 chars), got length: %d", len(c.TokenName)) } - // Validate numeric fields that must be -1 (no limit) or >0 (valid) | 验证必须为-1(无限制)或>0(有效)的数值字段 + // [Critical] KeyPrefix is required for storage isolation | KeyPrefix是存储隔离的必要字段 + if c.KeyPrefix == "" { + return fmt.Errorf("KeyPrefix cannot be empty") + } + if strings.ContainsAny(c.KeyPrefix, "\t\r\n") { + return fmt.Errorf("KeyPrefix cannot contain tab/newline characters, got: %q", c.KeyPrefix) + } + if len(c.KeyPrefix) > 64 { + return fmt.Errorf("KeyPrefix too long (max 64 chars), got length: %d", len(c.KeyPrefix)) + } + + // [Critical] AuthType is required for auth system identification | AuthType是认证体系标识的必要字段 + if c.AuthType == "" { + return fmt.Errorf("AuthType cannot be empty") + } + if strings.ContainsAny(c.AuthType, "\t\r\n") { + return fmt.Errorf("AuthType cannot contain tab/newline characters, got: %q", c.AuthType) + } + if len(c.AuthType) > 64 { + return fmt.Errorf("AuthType too long (max 64 chars), got length: %d", len(c.AuthType)) + } + + // =============== Phase 2: Numeric range validation | 阶段2:数值范围验证 =============== + + // [Critical] Numeric fields must be valid: -1 (no limit) or >0 | 数值字段必须合法:-1(无限制)或>0 if err := c.checkNoLimits(); err != nil { return err } - // Check TokenName | 检查 Token 名称 - if c.TokenName == "" { - return fmt.Errorf("TokenName cannot be empty") + // =============== Phase 3: TokenStyle + JWT validation | 阶段3:Token风格验证 =============== + + // [Critical] TokenStyle must be valid | Token风格必须合法 + if !c.TokenStyle.IsValid() { + return fmt.Errorf("invalid TokenStyle: %s", c.TokenStyle) } - // Check JwtSecretKey if TokenStyle is JWT | 如果 Token 风格为 JWT,则检查密钥是否设置 + // [Critical] JWT mode requires secret key, otherwise JWT cannot work | JWT模式必须设置密钥,否则JWT无法工作 if c.TokenStyle == adapter.TokenStyleJWT && c.JwtSecretKey == "" { return fmt.Errorf("JwtSecretKey is required when TokenStyle is JWT") } - // MaxRefresh must not exceed Timeout | MaxRefresh 不能大于 Timeout - if c.Timeout != NoLimit && c.AutoRenew && c.MaxRefresh > c.Timeout { - return fmt.Errorf( - "MaxRefresh (%d) must be <= Timeout (%d)", - c.MaxRefresh, - c.Timeout, - ) + // =============== Phase 4: Auto-adjustment for critical issues | 阶段4:关键问题自动调整 =============== + + // [Critical] AutoRenew enabled but MaxRefresh > Timeout would cause token never renew | 启用续期但阈值大于超时时间会导致永远不续期 + if c.AutoRenew && c.Timeout != NoLimit && c.MaxRefresh != NoLimit && c.MaxRefresh > c.Timeout { + c.MaxRefresh = c.Timeout / 2 + if c.MaxRefresh <= 0 { + c.MaxRefresh = c.Timeout + } } - // RenewInterval must not exceed MaxRefresh | RenewInterval 不能大于 MaxRefresh - if c.MaxRefresh != NoLimit && c.RenewInterval != NoLimit && c.RenewInterval > c.MaxRefresh { - return fmt.Errorf( - "RenewInterval (%d) must be <= MaxRefresh (%d)", - c.RenewInterval, - c.MaxRefresh, - ) + // =============== Phase 5: Critical time relationship validation | 阶段5:关键时间关系验证 =============== + + // [Critical] RenewInterval >= ActiveTimeout would cause active users to be kicked out | 续期间隔大于等于活跃超时会导致活跃用户被踢出 + if c.AutoRenew && c.ActiveTimeout != NoLimit && c.RenewInterval != NoLimit && c.RenewInterval >= c.ActiveTimeout { + return fmt.Errorf("RenewInterval (%d) must be less than ActiveTimeout (%d), otherwise active users may be kicked out", c.RenewInterval, c.ActiveTimeout) } - // Check if at least one read source is enabled | 检查是否至少启用了一个 Token 读取来源 + // =============== Phase 6: Token read source validation | 阶段6:Token读取来源验证 =============== + + // [Critical] At least one read source must be enabled, otherwise Token cannot be obtained | 至少启用一个读取来源,否则无法获取Token if !c.IsReadHeader && !c.IsReadCookie && !c.IsReadBody { return fmt.Errorf("at least one of IsReadHeader, IsReadCookie, or IsReadBody must be true") } - // Check KeyPrefix validity | 检查 KeyPrefix 合法性 - if c.KeyPrefix == "" { - return fmt.Errorf("KeyPrefix cannot be empty") // KeyPrefix不能为空 - } - if strings.ContainsAny(c.KeyPrefix, " \t\r\n") { - return fmt.Errorf("KeyPrefix cannot contain whitespace characters, got: %q", c.KeyPrefix) - } - if len(c.KeyPrefix) > 64 { - return fmt.Errorf("KeyPrefix too long (max 64 chars), got length: %d", len(c.KeyPrefix)) + // =============== Phase 7: CookieConfig validation | 阶段7:Cookie配置验证 =============== + + // [Critical] CookieConfig required when IsReadCookie is true | 启用Cookie读取时必须设置CookieConfig + if c.IsReadCookie && c.CookieConfig == nil { + return fmt.Errorf("CookieConfig cannot be nil when IsReadCookie is true") } - // Check authType validity | 校验 AuthType 的合法性 - if c.AuthType == "" { - return fmt.Errorf("AuthType cannot be empty") // AuthType不能为空 + // Validate CookieConfig critical issues | 验证Cookie配置的关键问题 + if c.CookieConfig != nil { + if err := c.validateCookieConfig(); err != nil { + return err + } } - if strings.ContainsAny(c.AuthType, " \t\r\n") { - return fmt.Errorf("AuthType cannot contain whitespace characters, got: %q", c.AuthType) + + // All critical checks passed | 所有关键检查通过 + return nil +} + +// validateCookieConfig validates critical CookieConfig issues | 验证Cookie配置的关键问题 +func (c *Config) validateCookieConfig() error { + cc := c.CookieConfig + + // [Critical] Path is required for Cookie to work | Path是Cookie工作的必要字段 + if cc.Path == "" { + return fmt.Errorf("CookieConfig.Path cannot be empty") } - if len(c.AuthType) > 64 { - return fmt.Errorf("AuthType too long (max 64 chars), got length: %d", len(c.AuthType)) + + // [Critical] SameSite must be valid value | SameSite必须是合法值 + switch cc.SameSite { + case SameSiteLax, SameSiteStrict, SameSiteNone, "": + // Valid values (empty string will use browser default) | 合法值(空字符串将使用浏览器默认值) + default: + return fmt.Errorf("invalid CookieConfig.SameSite value: %v", cc.SameSite) } - // Validate CookieConfig if set | 验证 Cookie 配置(如果设置) - if c.CookieConfig != nil { - // Check Path | 检查路径 - if c.CookieConfig.Path == "" { - return fmt.Errorf("CookieConfig.Path cannot be empty") - } - // Check SameSite | 检查 SameSite 值是否合法 - switch c.CookieConfig.SameSite { - case SameSiteLax, SameSiteStrict, SameSiteNone: - default: - return fmt.Errorf("invalid CookieConfig.SameSite value: %v", c.CookieConfig.SameSite) - } + // [Critical] Secure must be true when SameSite=None, otherwise browser will reject Cookie | SameSite=None时Secure必须为true,否则浏览器会拒绝Cookie + if cc.SameSite == SameSiteNone && !cc.Secure { + return fmt.Errorf("CookieConfig.Secure must be true when SameSite is None (browser requirement)") } - // All checks passed | 所有配置验证通过 return nil } diff --git a/core/config/config_test.go b/core/config/config_test.go new file mode 100644 index 0000000..5025234 --- /dev/null +++ b/core/config/config_test.go @@ -0,0 +1,940 @@ +package config + +import ( + "strings" + "testing" + + "github.com/click33/sa-token-go/core/adapter" +) + +// =============== Phase 1: Basic format validation tests | 阶段1:基础格式验证测试 =============== + +// TestValidate_TokenName tests TokenName validation +func TestValidate_TokenName(t *testing.T) { + tests := []struct { + name string + tokenName string + wantErr bool + errMsg string + }{ + { + name: "Valid TokenName", + tokenName: "satoken", + wantErr: false, + }, + { + name: "Valid TokenName with hyphen", + tokenName: "sa-token", + wantErr: false, + }, + { + name: "Valid TokenName with underscore", + tokenName: "sa_token", + wantErr: false, + }, + { + name: "Empty TokenName should error", + tokenName: "", + wantErr: true, + errMsg: "cannot be empty", + }, + { + name: "TokenName with tab should error", + tokenName: "sa\ttoken", + wantErr: true, + errMsg: "tab/newline", + }, + { + name: "TokenName with newline should error", + tokenName: "sa\ntoken", + wantErr: true, + errMsg: "tab/newline", + }, + { + name: "TokenName with carriage return should error", + tokenName: "sa\rtoken", + wantErr: true, + errMsg: "tab/newline", + }, + { + name: "TokenName too long should error", + tokenName: strings.Repeat("a", 65), + wantErr: true, + errMsg: "too long", + }, + { + name: "TokenName at max length should pass", + tokenName: strings.Repeat("a", 64), + wantErr: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + cfg := DefaultConfig() + cfg.TokenName = tt.tokenName + err := cfg.Validate() + if tt.wantErr { + if err == nil { + t.Errorf("Expected error containing %q, got nil", tt.errMsg) + } else if !strings.Contains(err.Error(), tt.errMsg) { + t.Errorf("Expected error containing %q, got %q", tt.errMsg, err.Error()) + } + } else { + if err != nil { + t.Errorf("Expected no error, got %v", err) + } + } + }) + } +} + +// TestValidate_KeyPrefix tests KeyPrefix validation +func TestValidate_KeyPrefix(t *testing.T) { + tests := []struct { + name string + keyPrefix string + wantErr bool + errMsg string + }{ + { + name: "Valid KeyPrefix", + keyPrefix: "satoken:", + wantErr: false, + }, + { + name: "Valid KeyPrefix with colon", + keyPrefix: "app:satoken:", + wantErr: false, + }, + { + name: "Empty KeyPrefix should error", + keyPrefix: "", + wantErr: true, + errMsg: "cannot be empty", + }, + { + name: "KeyPrefix with tab should error", + keyPrefix: "sa\ttoken:", + wantErr: true, + errMsg: "tab/newline", + }, + { + name: "KeyPrefix with newline should error", + keyPrefix: "sa\ntoken:", + wantErr: true, + errMsg: "tab/newline", + }, + { + name: "KeyPrefix too long should error", + keyPrefix: strings.Repeat("a", 65), + wantErr: true, + errMsg: "too long", + }, + { + name: "KeyPrefix at max length should pass", + keyPrefix: strings.Repeat("a", 64), + wantErr: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + cfg := DefaultConfig() + cfg.KeyPrefix = tt.keyPrefix + err := cfg.Validate() + if tt.wantErr { + if err == nil { + t.Errorf("Expected error containing %q, got nil", tt.errMsg) + } else if !strings.Contains(err.Error(), tt.errMsg) { + t.Errorf("Expected error containing %q, got %q", tt.errMsg, err.Error()) + } + } else { + if err != nil { + t.Errorf("Expected no error, got %v", err) + } + } + }) + } +} + +// TestValidate_AuthType tests AuthType validation +func TestValidate_AuthType(t *testing.T) { + tests := []struct { + name string + authType string + wantErr bool + errMsg string + }{ + { + name: "Valid AuthType", + authType: "login", + wantErr: false, + }, + { + name: "Empty AuthType should error", + authType: "", + wantErr: true, + errMsg: "cannot be empty", + }, + { + name: "AuthType with tab should error", + authType: "auth\ttype", + wantErr: true, + errMsg: "tab/newline", + }, + { + name: "AuthType too long should error", + authType: strings.Repeat("a", 65), + wantErr: true, + errMsg: "too long", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + cfg := DefaultConfig() + cfg.AuthType = tt.authType + err := cfg.Validate() + if tt.wantErr { + if err == nil { + t.Errorf("Expected error containing %q, got nil", tt.errMsg) + } else if !strings.Contains(err.Error(), tt.errMsg) { + t.Errorf("Expected error containing %q, got %q", tt.errMsg, err.Error()) + } + } else { + if err != nil { + t.Errorf("Expected no error, got %v", err) + } + } + }) + } +} + +// =============== Phase 2: Numeric range validation tests | 阶段2:数值范围验证测试 =============== + +// TestValidate_NumericFields tests numeric field validation +func TestValidate_NumericFields(t *testing.T) { + tests := []struct { + name string + fieldName string + setValue func(*Config, int64) + value int64 + wantErr bool + }{ + // Timeout tests + {"Timeout valid positive", "Timeout", func(c *Config, v int64) { c.Timeout = v }, 3600, false}, + {"Timeout NoLimit", "Timeout", func(c *Config, v int64) { c.Timeout = v }, NoLimit, false}, + {"Timeout zero should error", "Timeout", func(c *Config, v int64) { c.Timeout = v }, 0, true}, + {"Timeout negative should error", "Timeout", func(c *Config, v int64) { c.Timeout = v }, -2, true}, + + // MaxRefresh tests + {"MaxRefresh valid positive", "MaxRefresh", func(c *Config, v int64) { c.MaxRefresh = v }, 1800, false}, + {"MaxRefresh NoLimit", "MaxRefresh", func(c *Config, v int64) { c.MaxRefresh = v }, NoLimit, false}, + {"MaxRefresh zero should error", "MaxRefresh", func(c *Config, v int64) { c.MaxRefresh = v }, 0, true}, + + // RenewInterval tests + {"RenewInterval valid positive", "RenewInterval", func(c *Config, v int64) { c.RenewInterval = v }, 60, false}, + {"RenewInterval NoLimit", "RenewInterval", func(c *Config, v int64) { c.RenewInterval = v }, NoLimit, false}, + {"RenewInterval zero should error", "RenewInterval", func(c *Config, v int64) { c.RenewInterval = v }, 0, true}, + + // ActiveTimeout tests + {"ActiveTimeout valid positive", "ActiveTimeout", func(c *Config, v int64) { c.ActiveTimeout = v }, 1800, false}, + {"ActiveTimeout NoLimit", "ActiveTimeout", func(c *Config, v int64) { c.ActiveTimeout = v }, NoLimit, false}, + {"ActiveTimeout zero should error", "ActiveTimeout", func(c *Config, v int64) { c.ActiveTimeout = v }, 0, true}, + + // MaxLoginCount tests + {"MaxLoginCount valid positive", "MaxLoginCount", func(c *Config, v int64) { c.MaxLoginCount = v }, 5, false}, + {"MaxLoginCount NoLimit", "MaxLoginCount", func(c *Config, v int64) { c.MaxLoginCount = v }, NoLimit, false}, + {"MaxLoginCount zero should error", "MaxLoginCount", func(c *Config, v int64) { c.MaxLoginCount = v }, 0, true}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + cfg := DefaultConfig() + tt.setValue(cfg, tt.value) + err := cfg.Validate() + if tt.wantErr { + if err == nil { + t.Errorf("Expected error for %s=%d, got nil", tt.fieldName, tt.value) + } + } else { + if err != nil { + t.Errorf("Expected no error for %s=%d, got %v", tt.fieldName, tt.value, err) + } + } + }) + } +} + +// =============== Phase 3: TokenStyle + JWT validation tests | 阶段3:Token风格验证测试 =============== + +// TestValidate_TokenStyle tests TokenStyle validation +func TestValidate_TokenStyle(t *testing.T) { + tests := []struct { + name string + tokenStyle adapter.TokenStyle + jwtSecret string + wantErr bool + errMsg string + }{ + { + name: "Valid UUID style", + tokenStyle: adapter.TokenStyleUUID, + wantErr: false, + }, + { + name: "Valid Simple style", + tokenStyle: adapter.TokenStyleSimple, + wantErr: false, + }, + { + name: "Valid Random32 style", + tokenStyle: adapter.TokenStyleRandom32, + wantErr: false, + }, + { + name: "Valid Random64 style", + tokenStyle: adapter.TokenStyleRandom64, + wantErr: false, + }, + { + name: "Valid Random128 style", + tokenStyle: adapter.TokenStyleRandom128, + wantErr: false, + }, + { + name: "Valid JWT style with secret", + tokenStyle: adapter.TokenStyleJWT, + jwtSecret: "my-secret-key", + wantErr: false, + }, + { + name: "JWT style without secret should error", + tokenStyle: adapter.TokenStyleJWT, + jwtSecret: "", + wantErr: true, + errMsg: "JwtSecretKey is required", + }, + { + name: "Invalid TokenStyle should error", + tokenStyle: adapter.TokenStyle("invalid"), + wantErr: true, + errMsg: "invalid TokenStyle", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + cfg := DefaultConfig() + cfg.TokenStyle = tt.tokenStyle + cfg.JwtSecretKey = tt.jwtSecret + err := cfg.Validate() + if tt.wantErr { + if err == nil { + t.Errorf("Expected error containing %q, got nil", tt.errMsg) + } else if !strings.Contains(err.Error(), tt.errMsg) { + t.Errorf("Expected error containing %q, got %q", tt.errMsg, err.Error()) + } + } else { + if err != nil { + t.Errorf("Expected no error, got %v", err) + } + } + }) + } +} + +// =============== Phase 4: Auto-adjustment tests | 阶段4:自动调整测试 =============== + +// TestValidate_AutoAdjustMaxRefresh tests auto-adjustment of MaxRefresh +func TestValidate_AutoAdjustMaxRefresh(t *testing.T) { + tests := []struct { + name string + timeout int64 + maxRefresh int64 + autoRenew bool + expectedMaxRefresh int64 + }{ + { + name: "MaxRefresh exceeds Timeout - should adjust to Timeout/2", + timeout: 3600, + maxRefresh: 7200, + autoRenew: true, + expectedMaxRefresh: 1800, + }, + { + name: "MaxRefresh within Timeout - should not change", + timeout: 3600, + maxRefresh: 1800, + autoRenew: true, + expectedMaxRefresh: 1800, + }, + { + name: "AutoRenew disabled - should not adjust", + timeout: 3600, + maxRefresh: 7200, + autoRenew: false, + expectedMaxRefresh: 7200, + }, + { + name: "Timeout is NoLimit - should not adjust", + timeout: NoLimit, + maxRefresh: 7200, + autoRenew: true, + expectedMaxRefresh: 7200, + }, + { + name: "MaxRefresh is NoLimit - should not adjust", + timeout: 3600, + maxRefresh: NoLimit, + autoRenew: true, + expectedMaxRefresh: NoLimit, + }, + { + name: "Very small Timeout - MaxRefresh should equal Timeout", + timeout: 1, + maxRefresh: 3600, + autoRenew: true, + expectedMaxRefresh: 1, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + cfg := DefaultConfig() + cfg.Timeout = tt.timeout + cfg.MaxRefresh = tt.maxRefresh + cfg.AutoRenew = tt.autoRenew + + err := cfg.Validate() + if err != nil { + t.Fatalf("Validate() error = %v, want nil", err) + } + + if cfg.MaxRefresh != tt.expectedMaxRefresh { + t.Errorf("MaxRefresh = %d, want %d", cfg.MaxRefresh, tt.expectedMaxRefresh) + } + }) + } +} + +// =============== Phase 5: Time relationship validation tests | 阶段5:时间关系验证测试 =============== + +// TestValidate_RenewIntervalVsActiveTimeout tests RenewInterval vs ActiveTimeout validation +func TestValidate_RenewIntervalVsActiveTimeout(t *testing.T) { + tests := []struct { + name string + autoRenew bool + activeTimeout int64 + renewInterval int64 + wantErr bool + }{ + { + name: "RenewInterval < ActiveTimeout - should pass", + autoRenew: true, + activeTimeout: 3600, + renewInterval: 1800, + wantErr: false, + }, + { + name: "RenewInterval = ActiveTimeout - should error", + autoRenew: true, + activeTimeout: 3600, + renewInterval: 3600, + wantErr: true, + }, + { + name: "RenewInterval > ActiveTimeout - should error", + autoRenew: true, + activeTimeout: 1800, + renewInterval: 3600, + wantErr: true, + }, + { + name: "AutoRenew disabled - should pass even if RenewInterval >= ActiveTimeout", + autoRenew: false, + activeTimeout: 1800, + renewInterval: 3600, + wantErr: false, + }, + { + name: "ActiveTimeout is NoLimit - should pass", + autoRenew: true, + activeTimeout: NoLimit, + renewInterval: 3600, + wantErr: false, + }, + { + name: "RenewInterval is NoLimit - should pass", + autoRenew: true, + activeTimeout: 3600, + renewInterval: NoLimit, + wantErr: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + cfg := DefaultConfig() + cfg.AutoRenew = tt.autoRenew + cfg.ActiveTimeout = tt.activeTimeout + cfg.RenewInterval = tt.renewInterval + + err := cfg.Validate() + if tt.wantErr { + if err == nil { + t.Error("Expected error, got nil") + } + } else { + if err != nil { + t.Errorf("Expected no error, got %v", err) + } + } + }) + } +} + +// =============== Phase 6: Token read source validation tests | 阶段6:Token读取来源验证测试 =============== + +// TestValidate_TokenReadSources tests token read source validation +func TestValidate_TokenReadSources(t *testing.T) { + tests := []struct { + name string + isReadHeader bool + isReadCookie bool + isReadBody bool + wantErr bool + }{ + { + name: "Only Header enabled", + isReadHeader: true, + isReadCookie: false, + isReadBody: false, + wantErr: false, + }, + { + name: "Only Cookie enabled", + isReadHeader: false, + isReadCookie: true, + isReadBody: false, + wantErr: false, + }, + { + name: "Only Body enabled", + isReadHeader: false, + isReadCookie: false, + isReadBody: true, + wantErr: false, + }, + { + name: "All enabled", + isReadHeader: true, + isReadCookie: true, + isReadBody: true, + wantErr: false, + }, + { + name: "None enabled - should error", + isReadHeader: false, + isReadCookie: false, + isReadBody: false, + wantErr: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + cfg := DefaultConfig() + cfg.IsReadHeader = tt.isReadHeader + cfg.IsReadCookie = tt.isReadCookie + cfg.IsReadBody = tt.isReadBody + + err := cfg.Validate() + if tt.wantErr { + if err == nil { + t.Error("Expected error, got nil") + } + } else { + if err != nil { + t.Errorf("Expected no error, got %v", err) + } + } + }) + } +} + +// =============== Phase 7: CookieConfig validation tests | 阶段7:Cookie配置验证测试 =============== + +// TestValidate_CookieConfig tests CookieConfig validation +func TestValidate_CookieConfig(t *testing.T) { + tests := []struct { + name string + isReadCookie bool + cookieConfig *CookieConfig + wantErr bool + errMsg string + }{ + { + name: "Valid CookieConfig with IsReadCookie=true", + isReadCookie: true, + cookieConfig: DefaultCookieConfig(), + wantErr: false, + }, + { + name: "Nil CookieConfig with IsReadCookie=true - should error", + isReadCookie: true, + cookieConfig: nil, + wantErr: true, + errMsg: "CookieConfig cannot be nil", + }, + { + name: "Nil CookieConfig with IsReadCookie=false - should pass", + isReadCookie: false, + cookieConfig: nil, + wantErr: false, + }, + { + name: "Empty Path - should error", + isReadCookie: true, + cookieConfig: &CookieConfig{Path: "", SameSite: SameSiteLax}, + wantErr: true, + errMsg: "Path cannot be empty", + }, + { + name: "Valid SameSite Lax", + isReadCookie: true, + cookieConfig: &CookieConfig{Path: "/", SameSite: SameSiteLax}, + wantErr: false, + }, + { + name: "Valid SameSite Strict", + isReadCookie: true, + cookieConfig: &CookieConfig{Path: "/", SameSite: SameSiteStrict}, + wantErr: false, + }, + { + name: "Valid SameSite None with Secure=true", + isReadCookie: true, + cookieConfig: &CookieConfig{Path: "/", SameSite: SameSiteNone, Secure: true}, + wantErr: false, + }, + { + name: "SameSite None with Secure=false - should error", + isReadCookie: true, + cookieConfig: &CookieConfig{Path: "/", SameSite: SameSiteNone, Secure: false}, + wantErr: true, + errMsg: "Secure must be true when SameSite is None", + }, + { + name: "Invalid SameSite value - should error", + isReadCookie: true, + cookieConfig: &CookieConfig{Path: "/", SameSite: SameSiteMode("Invalid")}, + wantErr: true, + errMsg: "invalid CookieConfig.SameSite", + }, + { + name: "Empty SameSite - should pass (browser default)", + isReadCookie: true, + cookieConfig: &CookieConfig{Path: "/", SameSite: ""}, + wantErr: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + cfg := DefaultConfig() + cfg.IsReadCookie = tt.isReadCookie + cfg.CookieConfig = tt.cookieConfig + + err := cfg.Validate() + if tt.wantErr { + if err == nil { + t.Errorf("Expected error containing %q, got nil", tt.errMsg) + } else if !strings.Contains(err.Error(), tt.errMsg) { + t.Errorf("Expected error containing %q, got %q", tt.errMsg, err.Error()) + } + } else { + if err != nil { + t.Errorf("Expected no error, got %v", err) + } + } + }) + } +} + +// =============== Clone tests | Clone测试 =============== + +// TestConfig_Clone tests configuration cloning +func TestConfig_Clone(t *testing.T) { + t.Run("Clone creates independent copy", func(t *testing.T) { + original := DefaultConfig() + original.Timeout = 3600 + original.TokenName = "custom-token" + + cloned := original.Clone() + + // Verify values are copied + if cloned.Timeout != original.Timeout { + t.Errorf("Cloned Timeout = %d, want %d", cloned.Timeout, original.Timeout) + } + if cloned.TokenName != original.TokenName { + t.Errorf("Cloned TokenName = %s, want %s", cloned.TokenName, original.TokenName) + } + + // Verify it's a deep copy + cloned.Timeout = 7200 + if cloned.Timeout == original.Timeout { + t.Error("Clone should be independent of original") + } + }) + + t.Run("Clone deep copies CookieConfig", func(t *testing.T) { + original := DefaultConfig() + original.CookieConfig.Domain = "example.com" + + cloned := original.Clone() + + // Verify CookieConfig is copied + if cloned.CookieConfig.Domain != original.CookieConfig.Domain { + t.Errorf("Cloned CookieConfig.Domain = %s, want %s", cloned.CookieConfig.Domain, original.CookieConfig.Domain) + } + + // Verify CookieConfig is independent + cloned.CookieConfig.Domain = "other.com" + if cloned.CookieConfig.Domain == original.CookieConfig.Domain { + t.Error("Cloned CookieConfig should be independent of original") + } + }) + + t.Run("Clone handles nil CookieConfig", func(t *testing.T) { + original := DefaultConfig() + original.CookieConfig = nil + + cloned := original.Clone() + + if cloned.CookieConfig != nil { + t.Error("Cloned CookieConfig should be nil when original is nil") + } + }) +} + +// =============== Setter chain tests | 链式设置测试 =============== + +// TestConfig_SetterChain tests that setters return *Config for chaining +func TestConfig_SetterChain(t *testing.T) { + cfg := DefaultConfig(). + SetTokenName("my-token"). + SetTimeout(7200). + SetMaxRefresh(3600). + SetRenewInterval(60). + SetActiveTimeout(1800). + SetIsConcurrent(true). + SetIsShare(false). + SetMaxLoginCount(5). + SetIsReadBody(true). + SetIsReadHeader(true). + SetIsReadCookie(false). + SetTokenStyle(adapter.TokenStyleSimple). + SetTokenSessionCheckLogin(true). + SetJwtSecretKey("secret"). + SetAutoRenew(true). + SetIsLog(true). + SetIsPrintBanner(false). + SetKeyPrefix("app:"). + SetAuthType("login") + + // Verify values + if cfg.TokenName != "my-token" { + t.Errorf("TokenName = %s, want my-token", cfg.TokenName) + } + if cfg.Timeout != 7200 { + t.Errorf("Timeout = %d, want 7200", cfg.Timeout) + } + if cfg.MaxRefresh != 3600 { + t.Errorf("MaxRefresh = %d, want 3600", cfg.MaxRefresh) + } + if cfg.MaxLoginCount != 5 { + t.Errorf("MaxLoginCount = %d, want 5", cfg.MaxLoginCount) + } + if !cfg.IsReadBody { + t.Error("IsReadBody should be true") + } + if cfg.TokenStyle != adapter.TokenStyleSimple { + t.Errorf("TokenStyle = %s, want simple", cfg.TokenStyle) + } + if !cfg.IsLog { + t.Error("IsLog should be true") + } + if cfg.IsPrintBanner { + t.Error("IsPrintBanner should be false") + } +} + +// =============== DefaultConfig tests | 默认配置测试 =============== + +// TestDefaultConfig tests default configuration values +func TestDefaultConfig(t *testing.T) { + cfg := DefaultConfig() + + if cfg.TokenName != DefaultTokenName { + t.Errorf("TokenName = %s, want %s", cfg.TokenName, DefaultTokenName) + } + if cfg.Timeout != DefaultTimeout { + t.Errorf("Timeout = %d, want %d", cfg.Timeout, DefaultTimeout) + } + if cfg.MaxRefresh != DefaultTimeout/2 { + t.Errorf("MaxRefresh = %d, want %d", cfg.MaxRefresh, DefaultTimeout/2) + } + if cfg.RenewInterval != NoLimit { + t.Errorf("RenewInterval = %d, want %d", cfg.RenewInterval, NoLimit) + } + if cfg.ActiveTimeout != NoLimit { + t.Errorf("ActiveTimeout = %d, want %d", cfg.ActiveTimeout, NoLimit) + } + if !cfg.IsConcurrent { + t.Error("IsConcurrent should be true by default") + } + if !cfg.IsShare { + t.Error("IsShare should be true by default") + } + if cfg.MaxLoginCount != DefaultMaxLoginCount { + t.Errorf("MaxLoginCount = %d, want %d", cfg.MaxLoginCount, DefaultMaxLoginCount) + } + if cfg.IsReadBody { + t.Error("IsReadBody should be false by default") + } + if !cfg.IsReadHeader { + t.Error("IsReadHeader should be true by default") + } + if cfg.IsReadCookie { + t.Error("IsReadCookie should be false by default") + } + if cfg.TokenStyle != adapter.TokenStyleUUID { + t.Errorf("TokenStyle = %s, want uuid", cfg.TokenStyle) + } + if !cfg.TokenSessionCheckLogin { + t.Error("TokenSessionCheckLogin should be true by default") + } + if !cfg.AutoRenew { + t.Error("AutoRenew should be true by default") + } + if cfg.JwtSecretKey != "" { + t.Errorf("JwtSecretKey should be empty by default, got %s", cfg.JwtSecretKey) + } + if cfg.IsLog { + t.Error("IsLog should be false by default") + } + if !cfg.IsPrintBanner { + t.Error("IsPrintBanner should be true by default") + } + if cfg.KeyPrefix != DefaultKeyPrefix { + t.Errorf("KeyPrefix = %s, want %s", cfg.KeyPrefix, DefaultKeyPrefix) + } + if cfg.AuthType != DefaultAuthType { + t.Errorf("AuthType = %s, want %s", cfg.AuthType, DefaultAuthType) + } + if cfg.CookieConfig == nil { + t.Error("CookieConfig should not be nil by default") + } +} + +// TestDefaultCookieConfig tests default cookie configuration values +func TestDefaultCookieConfig(t *testing.T) { + cc := DefaultCookieConfig() + + if cc.Domain != "" { + t.Errorf("Domain = %s, want empty string", cc.Domain) + } + if cc.Path != DefaultCookiePath { + t.Errorf("Path = %s, want %s", cc.Path, DefaultCookiePath) + } + if cc.Secure { + t.Error("Secure should be false by default") + } + if !cc.HttpOnly { + t.Error("HttpOnly should be true by default") + } + if cc.SameSite != SameSiteLax { + t.Errorf("SameSite = %s, want %s", cc.SameSite, SameSiteLax) + } + if cc.MaxAge != 0 { + t.Errorf("MaxAge = %d, want 0", cc.MaxAge) + } +} + +// =============== Integration tests | 集成测试 =============== + +// TestValidate_DefaultConfig tests that default config passes validation +func TestValidate_DefaultConfig(t *testing.T) { + cfg := DefaultConfig() + err := cfg.Validate() + if err != nil { + t.Errorf("DefaultConfig should pass validation, got error: %v", err) + } +} + +// TestValidate_RealWorldScenarios tests common real-world configuration scenarios +func TestValidate_RealWorldScenarios(t *testing.T) { + t.Run("Web application with short session", func(t *testing.T) { + cfg := DefaultConfig(). + SetTimeout(3600). // 1 hour + SetActiveTimeout(1800). // 30 minutes inactive kick + SetRenewInterval(300). // renew every 5 minutes max + SetIsReadCookie(true). + SetIsReadHeader(true) + + err := cfg.Validate() + if err != nil { + t.Errorf("Expected valid config, got error: %v", err) + } + }) + + t.Run("API service with long-lived tokens", func(t *testing.T) { + cfg := DefaultConfig(). + SetTimeout(NoLimit). // never expire + SetActiveTimeout(NoLimit). // no inactive timeout + SetIsReadHeader(true). + SetIsReadCookie(false) + + err := cfg.Validate() + if err != nil { + t.Errorf("Expected valid config, got error: %v", err) + } + }) + + t.Run("JWT based authentication", func(t *testing.T) { + cfg := DefaultConfig(). + SetTokenStyle(adapter.TokenStyleJWT). + SetJwtSecretKey("my-super-secret-key-for-jwt-signing"). + SetTimeout(86400) // 1 day + + err := cfg.Validate() + if err != nil { + t.Errorf("Expected valid config, got error: %v", err) + } + }) + + t.Run("Multi-device login support", func(t *testing.T) { + cfg := DefaultConfig(). + SetIsConcurrent(true). + SetIsShare(false). + SetMaxLoginCount(5) + + err := cfg.Validate() + if err != nil { + t.Errorf("Expected valid config, got error: %v", err) + } + }) + + t.Run("Single device login only", func(t *testing.T) { + cfg := DefaultConfig(). + SetIsConcurrent(false). + SetIsShare(true) // must be true when IsConcurrent is false + + err := cfg.Validate() + if err != nil { + t.Errorf("Expected valid config, got error: %v", err) + } + }) +} diff --git a/core/config/consts.go b/core/config/consts.go index 5f093a2..4690b38 100644 --- a/core/config/consts.go +++ b/core/config/consts.go @@ -1,11 +1,6 @@ // @Author daixk 2025/12/7 15:34:00 package config -const ( - CtxAutoType = "CtxAutoType" - CtxTokenValue = "CtxTokenValue" -) - // SameSiteMode Cookie SameSite attribute values | Cookie的SameSite属性值 type SameSiteMode string diff --git a/examples/config_auto_adjust_example.go b/examples/config_auto_adjust_example.go new file mode 100644 index 0000000..879b8d9 --- /dev/null +++ b/examples/config_auto_adjust_example.go @@ -0,0 +1,61 @@ +package main + +import ( + "fmt" + "github.com/click33/sa-token-go/core/config" +) + +func main() { + fmt.Println("========================================") + fmt.Println("示例 1: 用户只设置 Timeout = 1小时") + fmt.Println("========================================") + + cfg1 := config.DefaultConfig() + fmt.Printf("默认 Timeout: %d 秒\n", cfg1.Timeout) + fmt.Printf("默认 MaxRefresh: %d 秒\n", cfg1.MaxRefresh) + + cfg1.SetTimeout(3600) // 设置为 1小时 + fmt.Printf("\n用户设置 Timeout: %d 秒 (1小时)\n", cfg1.Timeout) + fmt.Printf("MaxRefresh 仍是: %d 秒 (15天)\n", cfg1.MaxRefresh) + + err := cfg1.Validate() + if err != nil { + fmt.Printf("❌ 修改前会报错: %v\n", err) + } else { + fmt.Printf("✅ 修改后自动调整成功!\n") + fmt.Printf(" 调整后 MaxRefresh: %d 秒 (30分钟)\n", cfg1.MaxRefresh) + } + + fmt.Println("\n========================================") + fmt.Println("示例 2: 用户设置 Timeout = 10秒(极小值)") + fmt.Println("========================================") + + cfg2 := config.DefaultConfig() + cfg2.SetTimeout(10) + fmt.Printf("用户设置 Timeout: %d 秒\n", cfg2.Timeout) + + err = cfg2.Validate() + if err == nil { + fmt.Printf("✅ 自动调整成功!\n") + fmt.Printf(" 调整后 MaxRefresh: %d 秒\n", cfg2.MaxRefresh) + fmt.Printf(" (因为 10/2=5,太小了,所以设为等于 Timeout)\n") + } + + fmt.Println("\n========================================") + fmt.Println("示例 3: RenewInterval 自动调整") + fmt.Println("========================================") + + cfg3 := config.DefaultConfig() + cfg3.SetTimeout(3600) + cfg3.SetRenewInterval(5000) // 设置续期间隔为 5000秒 + + fmt.Printf("用户设置 Timeout: %d 秒\n", cfg3.Timeout) + fmt.Printf("用户设置 RenewInterval: %d 秒\n", cfg3.RenewInterval) + + err = cfg3.Validate() + if err == nil { + fmt.Printf("✅ 自动调整成功!\n") + fmt.Printf(" 调整后 MaxRefresh: %d 秒 (Timeout/2)\n", cfg3.MaxRefresh) + fmt.Printf(" 调整后 RenewInterval: %d 秒 (MaxRefresh/2)\n", cfg3.RenewInterval) + } +} diff --git a/integrations/echo/annotation.go b/integrations/echo/annotation.go index 038b810..2eac67a 100644 --- a/integrations/echo/annotation.go +++ b/integrations/echo/annotation.go @@ -22,14 +22,12 @@ type Annotation struct { } // GetHandler gets handler with annotations | 获取带注解的处理器 +// Note: handler must not be nil, use middleware pattern instead | 注意: handler不能为nil,请使用中间件模式 func GetHandler(handler echo.HandlerFunc, annotations ...*Annotation) echo.HandlerFunc { return func(c echo.Context) error { // Ignore authentication | 忽略认证直接放行 if len(annotations) > 0 && annotations[0].Ignore { - if handler != nil { - return handler(c) - } - return c.Next() + return handler(c) } // Check if any authentication is needed | 检查是否需要任何认证 @@ -41,10 +39,7 @@ func GetHandler(handler echo.HandlerFunc, annotations ...*Annotation) echo.Handl // No authentication required | 无需任何认证 needAuth := ann.CheckLogin || ann.CheckDisable || len(ann.CheckPermission) > 0 || len(ann.CheckRole) > 0 if !needAuth { - if handler != nil { - return handler(c) - } - return c.Next() + return handler(c) } ctx := c.Request().Context() @@ -111,10 +106,7 @@ func GetHandler(handler echo.HandlerFunc, annotations ...*Annotation) echo.Handl } // All checks passed, execute original handler | 所有检查通过,执行原函数 - if handler != nil { - return handler(c) - } - return c.Next() + return handler(c) } } From 046b2bb43f131571679b7280af9a037510b8940e Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Wed, 31 Dec 2025 14:14:53 +0800 Subject: [PATCH 35/50] =?UTF-8?q?feat():=201=E3=80=81=E4=BC=98=E5=8C=96con?= =?UTF-8?q?fig=E6=A3=80=E6=B5=8B=E4=BB=A5=E5=8F=8A=E6=A1=86=E6=9E=B6?= =?UTF-8?q?=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/config_auto_adjust_example.go | 61 -------------------------- 1 file changed, 61 deletions(-) delete mode 100644 examples/config_auto_adjust_example.go diff --git a/examples/config_auto_adjust_example.go b/examples/config_auto_adjust_example.go deleted file mode 100644 index 879b8d9..0000000 --- a/examples/config_auto_adjust_example.go +++ /dev/null @@ -1,61 +0,0 @@ -package main - -import ( - "fmt" - "github.com/click33/sa-token-go/core/config" -) - -func main() { - fmt.Println("========================================") - fmt.Println("示例 1: 用户只设置 Timeout = 1小时") - fmt.Println("========================================") - - cfg1 := config.DefaultConfig() - fmt.Printf("默认 Timeout: %d 秒\n", cfg1.Timeout) - fmt.Printf("默认 MaxRefresh: %d 秒\n", cfg1.MaxRefresh) - - cfg1.SetTimeout(3600) // 设置为 1小时 - fmt.Printf("\n用户设置 Timeout: %d 秒 (1小时)\n", cfg1.Timeout) - fmt.Printf("MaxRefresh 仍是: %d 秒 (15天)\n", cfg1.MaxRefresh) - - err := cfg1.Validate() - if err != nil { - fmt.Printf("❌ 修改前会报错: %v\n", err) - } else { - fmt.Printf("✅ 修改后自动调整成功!\n") - fmt.Printf(" 调整后 MaxRefresh: %d 秒 (30分钟)\n", cfg1.MaxRefresh) - } - - fmt.Println("\n========================================") - fmt.Println("示例 2: 用户设置 Timeout = 10秒(极小值)") - fmt.Println("========================================") - - cfg2 := config.DefaultConfig() - cfg2.SetTimeout(10) - fmt.Printf("用户设置 Timeout: %d 秒\n", cfg2.Timeout) - - err = cfg2.Validate() - if err == nil { - fmt.Printf("✅ 自动调整成功!\n") - fmt.Printf(" 调整后 MaxRefresh: %d 秒\n", cfg2.MaxRefresh) - fmt.Printf(" (因为 10/2=5,太小了,所以设为等于 Timeout)\n") - } - - fmt.Println("\n========================================") - fmt.Println("示例 3: RenewInterval 自动调整") - fmt.Println("========================================") - - cfg3 := config.DefaultConfig() - cfg3.SetTimeout(3600) - cfg3.SetRenewInterval(5000) // 设置续期间隔为 5000秒 - - fmt.Printf("用户设置 Timeout: %d 秒\n", cfg3.Timeout) - fmt.Printf("用户设置 RenewInterval: %d 秒\n", cfg3.RenewInterval) - - err = cfg3.Validate() - if err == nil { - fmt.Printf("✅ 自动调整成功!\n") - fmt.Printf(" 调整后 MaxRefresh: %d 秒 (Timeout/2)\n", cfg3.MaxRefresh) - fmt.Printf(" 调整后 RenewInterval: %d 秒 (MaxRefresh/2)\n", cfg3.RenewInterval) - } -} From c19c0adb6b57401e26093b832a1fb6e49d19b9e0 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Sun, 4 Jan 2026 11:09:47 +0800 Subject: [PATCH 36/50] =?UTF-8?q?feat():=201=E3=80=81=E4=BF=AE=E6=94=B90.1?= =?UTF-8?q?.7=E7=89=88=E6=9C=AC=202=E3=80=81=E4=BF=AE=E6=94=B9examples?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/version.go | 2 +- examples/annotation/annotation-example/go.mod | 3 +- examples/chi/chi-example/cmd/main.go | 182 ++++++++++++++--- examples/chi/chi-example/go.mod | 2 - examples/echo/echo-example/cmd/main.go | 193 +++++++++++++++--- examples/echo/echo-example/go.mod | 2 - examples/fiber/fiber-example/cmd/main.go | 188 ++++++++++++++--- examples/fiber/fiber-example/go.mod | 2 - examples/gf/gf-example/go.mod | 2 +- examples/gin/gin-example/go.mod | 1 - examples/gin/gin-simple/go.mod | 3 +- examples/manager-example/jwt-example/go.mod | 6 +- .../manager-example/listener-example/go.mod | 6 +- .../manager-example/oauth2-example/go.mod | 3 +- .../manager-example/security-example/go.mod | 4 +- examples/manager-example/session-demo/go.mod | 6 +- examples/manager-example/token-styles/go.mod | 6 +- examples/quick-start/simple-example/go.mod | 6 +- go.work.sum | 5 + integrations/chi/go.mod | 4 +- integrations/echo/go.mod | 4 +- integrations/fiber/go.mod | 4 +- integrations/gf/go.mod | 4 +- integrations/gin/go.mod | 4 +- stputil/go.mod | 2 +- 25 files changed, 503 insertions(+), 141 deletions(-) diff --git a/core/version.go b/core/version.go index 28693a3..d18b4ad 100644 --- a/core/version.go +++ b/core/version.go @@ -2,4 +2,4 @@ package core // Version Sa-Token-Go version | Sa-Token-Go版本 -const Version = "0.1.6" +const Version = "0.1.7" diff --git a/examples/annotation/annotation-example/go.mod b/examples/annotation/annotation-example/go.mod index c4a7577..3b134ce 100644 --- a/examples/annotation/annotation-example/go.mod +++ b/examples/annotation/annotation-example/go.mod @@ -3,9 +3,8 @@ module github.com/click33/sa-token-go/examples/annotation-example go 1.25.0 require ( - github.com/click33/sa-token-go/integrations/gin v0.1.5 + github.com/click33/sa-token-go/integrations/gin v0.1.7 github.com/gin-gonic/gin v1.10.0 - github.com/redis/go-redis/v9 v9.5.1 ) require ( diff --git a/examples/chi/chi-example/cmd/main.go b/examples/chi/chi-example/cmd/main.go index e6cbcd3..3d41a29 100644 --- a/examples/chi/chi-example/cmd/main.go +++ b/examples/chi/chi-example/cmd/main.go @@ -5,66 +5,180 @@ import ( "log" "net/http" - "github.com/click33/sa-token-go/core" sachi "github.com/click33/sa-token-go/integrations/chi" - "github.com/click33/sa-token-go/storage/memory" "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" ) func main() { - // 创建存储 - storage := memory.NewStorage() + // 使用 Builder 模式构建 Manager | Build Manager using Builder pattern + manager := sachi.NewDefaultBuild(). + TokenName("Authorization"). + Timeout(7200). + IsLog(true). + IsPrintBanner(true). + Build() - // 创建配置 - config := core.DefaultConfig() - config.TokenName = "Authorization" - config.Timeout = 7200 // 2小时 + // 设置全局管理器 | Set global manager + sachi.SetManager(manager) - // 创建管理器 - manager := core.NewManager(storage, config) - - // 创建Chi插件 - plugin := sachi.NewPlugin(manager) - - // 创建路由 + // 创建路由 | Create router r := chi.NewRouter() r.Use(middleware.Logger) r.Use(middleware.Recoverer) - // 公开路由 - r.Post("/login", plugin.LoginHandler) + // 登录接口 | Login endpoint + r.Post("/login", func(w http.ResponseWriter, r *http.Request) { + userID := r.FormValue("user_id") + if userID == "" { + http.Error(w, `{"error": "user_id is required"}`, http.StatusBadRequest) + return + } + + ctx := r.Context() + + // 使用 sachi 包的全局函数登录 | Use sachi package global function to login + token, err := sachi.Login(ctx, userID) + if err != nil { + http.Error(w, `{"error": "`+err.Error()+`"}`, http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", "application/json") + w.Write([]byte(`{"message": "登录成功", "token": "` + token + `"}`)) + }) + + // 登出接口 | Logout endpoint + r.Post("/logout", func(w http.ResponseWriter, r *http.Request) { + token := r.Header.Get("Authorization") + if token == "" { + http.Error(w, `{"error": "token is required"}`, http.StatusBadRequest) + return + } + + ctx := r.Context() + + // 使用 sachi 包的全局函数登出 | Use sachi package global function to logout + if err := sachi.LogoutByToken(ctx, token); err != nil { + http.Error(w, `{"error": "`+err.Error()+`"}`, http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", "application/json") + w.Write([]byte(`{"message": "登出成功"}`)) + }) + + // 公开路由 | Public route r.Get("/public", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(map[string]interface{}{ - "message": "公开访问", - }) + w.Write([]byte(`{"message": "公开访问"}`)) }) - // 受保护路由 + // 检查登录状态 | Check login status + r.Get("/check", func(w http.ResponseWriter, r *http.Request) { + token := r.Header.Get("Authorization") + if token == "" { + http.Error(w, `{"error": "token is required"}`, http.StatusBadRequest) + return + } + + ctx := r.Context() + + // 使用 sachi 包的全局函数检查登录 | Use sachi package global function to check login + isLogin := sachi.IsLogin(ctx, token) + if !isLogin { + http.Error(w, `{"error": "未登录"}`, http.StatusUnauthorized) + return + } + + // 获取登录ID | Get login ID + loginID, _ := sachi.GetLoginID(ctx, token) + + w.Header().Set("Content-Type", "application/json") + w.Write([]byte(`{"message": "已登录", "login_id": "` + loginID + `"}`)) + }) + + // 受保护的路由组 | Protected route group r.Group(func(r chi.Router) { - r.Use(plugin.AuthMiddleware()) - r.Get("/api/user/info", func(w http.ResponseWriter, r *http.Request) { - saCtx, _ := sachi.GetSaToken(r) - loginID, _ := saCtx.GetLoginID() - permissions, _ := manager.GetPermissions(loginID) - roles, _ := manager.GetRoles(loginID) + r.Use(sachi.AuthMiddleware()) + + // 用户信息 | User info + r.Get("/api/user", func(w http.ResponseWriter, r *http.Request) { + token := r.Header.Get("Authorization") + ctx := r.Context() + loginID, _ := sachi.GetLoginID(ctx, token) w.Header().Set("Content-Type", "application/json") - json.NewEncoder(w).Encode(map[string]interface{}{ + w.Write([]byte(`{"user_id": "` + loginID + `", "name": "User ` + loginID + `"}`)) + }) + + // 获取 Token 信息 | Get token info + r.Get("/api/token-info", func(w http.ResponseWriter, r *http.Request) { + token := r.Header.Get("Authorization") + ctx := r.Context() + + tokenInfo, err := sachi.GetTokenInfo(ctx, token) + if err != nil { + http.Error(w, `{"error": "`+err.Error()+`"}`, http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", "application/json") + response := map[string]interface{}{ "code": 200, - "message": "success", + "message": "获取Token信息成功", "data": map[string]interface{}{ - "loginId": loginID, - "permissions": permissions, - "roles": roles, + "authType": tokenInfo.AuthType, + "loginId": tokenInfo.LoginID, + "device": tokenInfo.Device, + "createTime": tokenInfo.CreateTime, + "activeTime": tokenInfo.ActiveTime, }, - }) + } + json.NewEncoder(w).Encode(response) + }) + + // 踢人下线 | Kickout user + r.Post("/api/kickout/{user_id}", func(w http.ResponseWriter, r *http.Request) { + userID := chi.URLParam(r, "user_id") + ctx := r.Context() + + // 使用 sachi 包的全局函数踢人 | Use sachi package global function to kickout + if err := sachi.Kickout(ctx, userID); err != nil { + http.Error(w, `{"error": "`+err.Error()+`"}`, http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", "application/json") + w.Write([]byte(`{"message": "踢人成功"}`)) + }) + }) + + // 需要权限的路由组 | Routes requiring permissions + r.Group(func(r chi.Router) { + r.Use(sachi.AuthMiddleware()) + r.Use(sachi.PermissionMiddleware([]string{"admin:read"}, sachi.WithLogicType(sachi.LogicOr))) + + r.Get("/admin/dashboard", func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + w.Write([]byte(`{"message": "管理员面板"}`)) + }) + }) + + // 需要角色的路由组 | Routes requiring roles + r.Group(func(r chi.Router) { + r.Use(sachi.AuthMiddleware()) + r.Use(sachi.RoleMiddleware([]string{"super-admin"}, sachi.WithLogicType(sachi.LogicAnd))) + + r.Get("/super/settings", func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + w.Write([]byte(`{"message": "超级管理员设置"}`)) }) }) - // 启动服务器 + // 启动服务器 | Start server log.Println("服务器启动在端口: 8080") + log.Println("示例: curl -X POST http://localhost:8080/login -d 'user_id=1000'") if err := http.ListenAndServe(":8080", r); err != nil { log.Fatal("服务器启动失败:", err) } diff --git a/examples/chi/chi-example/go.mod b/examples/chi/chi-example/go.mod index 0be389e..116ca71 100644 --- a/examples/chi/chi-example/go.mod +++ b/examples/chi/chi-example/go.mod @@ -3,8 +3,6 @@ module github.com/click33/sa-token-go/examples/chi-example go 1.25.0 require ( - github.com/click33/sa-token-go/core v0.1.6 - github.com/click33/sa-token-go/storage/memory v0.1.6 github.com/go-chi/chi/v5 v5.0.11 ) diff --git a/examples/echo/echo-example/cmd/main.go b/examples/echo/echo-example/cmd/main.go index 3e4f1ed..0a55c00 100644 --- a/examples/echo/echo-example/cmd/main.go +++ b/examples/echo/echo-example/cmd/main.go @@ -2,66 +2,193 @@ package main import ( "log" + "net/http" - "github.com/click33/sa-token-go/core" saecho "github.com/click33/sa-token-go/integrations/echo" - "github.com/click33/sa-token-go/storage/memory" "github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware" ) func main() { - // 创建存储 - storage := memory.NewStorage() + // 使用 Builder 模式构建 Manager | Build Manager using Builder pattern + manager := saecho.NewDefaultBuild(). + TokenName("Authorization"). + Timeout(7200). + IsLog(true). + IsPrintBanner(true). + Build() - // 创建配置 - config := core.DefaultConfig() - config.TokenName = "Authorization" - config.Timeout = 7200 // 2小时 + // 设置全局管理器 | Set global manager + saecho.SetManager(manager) - // 创建管理器 - manager := core.NewManager(storage, config) - - // 创建Echo插件 - plugin := saecho.NewPlugin(manager) - - // 创建Echo实例 + // 创建Echo实例 | Create Echo instance e := echo.New() e.Use(middleware.Logger()) e.Use(middleware.Recover()) - // 公开路由 - e.POST("/login", plugin.LoginHandler) + // 登录接口 | Login endpoint + e.POST("/login", func(c echo.Context) error { + userID := c.FormValue("user_id") + if userID == "" { + return c.JSON(http.StatusBadRequest, map[string]interface{}{ + "error": "user_id is required", + }) + } + + ctx := c.Request().Context() + + // 使用 saecho 包的全局函数登录 | Use saecho package global function to login + token, err := saecho.Login(ctx, userID) + if err != nil { + return c.JSON(http.StatusInternalServerError, map[string]interface{}{ + "error": err.Error(), + }) + } + + return c.JSON(http.StatusOK, map[string]interface{}{ + "message": "登录成功", + "token": token, + }) + }) + + // 登出接口 | Logout endpoint + e.POST("/logout", func(c echo.Context) error { + token := c.Request().Header.Get("Authorization") + if token == "" { + return c.JSON(http.StatusBadRequest, map[string]interface{}{ + "error": "token is required", + }) + } + + ctx := c.Request().Context() + + // 使用 saecho 包的全局函数登出 | Use saecho package global function to logout + if err := saecho.LogoutByToken(ctx, token); err != nil { + return c.JSON(http.StatusInternalServerError, map[string]interface{}{ + "error": err.Error(), + }) + } + + return c.JSON(http.StatusOK, map[string]interface{}{ + "message": "登出成功", + }) + }) + + // 公开路由 | Public route e.GET("/public", func(c echo.Context) error { - return c.JSON(200, map[string]interface{}{ + return c.JSON(http.StatusOK, map[string]interface{}{ "message": "公开访问", }) }) - // 受保护路由 + // 检查登录状态 | Check login status + e.GET("/check", func(c echo.Context) error { + token := c.Request().Header.Get("Authorization") + if token == "" { + return c.JSON(http.StatusBadRequest, map[string]interface{}{ + "error": "token is required", + }) + } + + ctx := c.Request().Context() + + // 使用 saecho 包的全局函数检查登录 | Use saecho package global function to check login + isLogin := saecho.IsLogin(ctx, token) + if !isLogin { + return c.JSON(http.StatusUnauthorized, map[string]interface{}{ + "error": "未登录", + }) + } + + // 获取登录ID | Get login ID + loginID, _ := saecho.GetLoginID(ctx, token) + + return c.JSON(http.StatusOK, map[string]interface{}{ + "message": "已登录", + "login_id": loginID, + }) + }) + + // 受保护的路由组 | Protected route group api := e.Group("/api") - api.Use(plugin.AuthMiddleware()) + api.Use(saecho.AuthMiddleware()) { - api.GET("/user/info", func(c echo.Context) error { - saCtx, _ := saecho.GetSaToken(c) - loginID, _ := saCtx.GetLoginID() - permissions, _ := manager.GetPermissions(loginID) - roles, _ := manager.GetRoles(loginID) + // 用户信息 | User info + api.GET("/user", func(c echo.Context) error { + token := c.Request().Header.Get("Authorization") + ctx := c.Request().Context() + loginID, _ := saecho.GetLoginID(ctx, token) + + return c.JSON(http.StatusOK, map[string]interface{}{ + "user_id": loginID, + "name": "User " + loginID, + }) + }) - return c.JSON(200, map[string]interface{}{ + // 获取 Token 信息 | Get token info + api.GET("/token-info", func(c echo.Context) error { + token := c.Request().Header.Get("Authorization") + ctx := c.Request().Context() + + tokenInfo, err := saecho.GetTokenInfo(ctx, token) + if err != nil { + return c.JSON(http.StatusInternalServerError, map[string]interface{}{ + "error": err.Error(), + }) + } + + return c.JSON(http.StatusOK, map[string]interface{}{ "code": 200, - "message": "success", - "data": map[string]interface{}{ - "loginId": loginID, - "permissions": permissions, - "roles": roles, - }, + "message": "获取Token信息成功", + "data": tokenInfo, + }) + }) + + // 踢人下线 | Kickout user + api.POST("/kickout/:user_id", func(c echo.Context) error { + userID := c.Param("user_id") + ctx := c.Request().Context() + + // 使用 saecho 包的全局函数踢人 | Use saecho package global function to kickout + if err := saecho.Kickout(ctx, userID); err != nil { + return c.JSON(http.StatusInternalServerError, map[string]interface{}{ + "error": err.Error(), + }) + } + + return c.JSON(http.StatusOK, map[string]interface{}{ + "message": "踢人成功", + }) + }) + } + + // 需要权限的路由组 | Routes requiring permissions + admin := e.Group("/admin") + admin.Use(saecho.AuthMiddleware()) + admin.Use(saecho.PermissionMiddleware([]string{"admin:read"}, saecho.WithLogicType(saecho.LogicOr))) + { + admin.GET("/dashboard", func(c echo.Context) error { + return c.JSON(http.StatusOK, map[string]interface{}{ + "message": "管理员面板", + }) + }) + } + + // 需要角色的路由组 | Routes requiring roles + super := e.Group("/super") + super.Use(saecho.AuthMiddleware()) + super.Use(saecho.RoleMiddleware([]string{"super-admin"}, saecho.WithLogicType(saecho.LogicAnd))) + { + super.GET("/settings", func(c echo.Context) error { + return c.JSON(http.StatusOK, map[string]interface{}{ + "message": "超级管理员设置", }) }) } - // 启动服务器 + // 启动服务器 | Start server log.Println("服务器启动在端口: 8080") + log.Println("示例: curl -X POST http://localhost:8080/login -d 'user_id=1000'") if err := e.Start(":8080"); err != nil { log.Fatal("服务器启动失败:", err) } diff --git a/examples/echo/echo-example/go.mod b/examples/echo/echo-example/go.mod index c1f5551..7383f7a 100644 --- a/examples/echo/echo-example/go.mod +++ b/examples/echo/echo-example/go.mod @@ -3,8 +3,6 @@ module github.com/click33/sa-token-go/examples/echo-example go 1.25.0 require ( - github.com/click33/sa-token-go/core v0.1.6 - github.com/click33/sa-token-go/storage/memory v0.1.6 github.com/labstack/echo/v4 v4.11.4 ) diff --git a/examples/fiber/fiber-example/cmd/main.go b/examples/fiber/fiber-example/cmd/main.go index c6d572b..7dffeb9 100644 --- a/examples/fiber/fiber-example/cmd/main.go +++ b/examples/fiber/fiber-example/cmd/main.go @@ -3,66 +3,192 @@ package main import ( "log" - "github.com/click33/sa-token-go/core" safiber "github.com/click33/sa-token-go/integrations/fiber" - "github.com/click33/sa-token-go/storage/memory" "github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2/middleware/logger" "github.com/gofiber/fiber/v2/middleware/recover" ) func main() { - // 创建存储 - storage := memory.NewStorage() + // 使用 Builder 模式构建 Manager | Build Manager using Builder pattern + manager := safiber.NewDefaultBuild(). + TokenName("Authorization"). + Timeout(7200). + IsLog(true). + IsPrintBanner(true). + Build() - // 创建配置 - config := core.DefaultConfig() - config.TokenName = "Authorization" - config.Timeout = 7200 // 2小时 + // 设置全局管理器 | Set global manager + safiber.SetManager(manager) - // 创建管理器 - manager := core.NewManager(storage, config) - - // 创建Fiber插件 - plugin := safiber.NewPlugin(manager) - - // 创建Fiber应用 + // 创建Fiber应用 | Create Fiber app app := fiber.New() app.Use(logger.New()) app.Use(recover.New()) - // 公开路由 - app.Post("/login", plugin.LoginHandler) + // 登录接口 | Login endpoint + app.Post("/login", func(c *fiber.Ctx) error { + userID := c.FormValue("user_id") + if userID == "" { + return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ + "error": "user_id is required", + }) + } + + ctx := c.Context() + + // 使用 safiber 包的全局函数登录 | Use safiber package global function to login + token, err := safiber.Login(ctx, userID) + if err != nil { + return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ + "error": err.Error(), + }) + } + + return c.JSON(fiber.Map{ + "message": "登录成功", + "token": token, + }) + }) + + // 登出接口 | Logout endpoint + app.Post("/logout", func(c *fiber.Ctx) error { + token := c.Get("Authorization") + if token == "" { + return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ + "error": "token is required", + }) + } + + ctx := c.Context() + + // 使用 safiber 包的全局函数登出 | Use safiber package global function to logout + if err := safiber.LogoutByToken(ctx, token); err != nil { + return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ + "error": err.Error(), + }) + } + + return c.JSON(fiber.Map{ + "message": "登出成功", + }) + }) + + // 公开路由 | Public route app.Get("/public", func(c *fiber.Ctx) error { return c.JSON(fiber.Map{ "message": "公开访问", }) }) - // 受保护路由 + // 检查登录状态 | Check login status + app.Get("/check", func(c *fiber.Ctx) error { + token := c.Get("Authorization") + if token == "" { + return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{ + "error": "token is required", + }) + } + + ctx := c.Context() + + // 使用 safiber 包的全局函数检查登录 | Use safiber package global function to check login + isLogin := safiber.IsLogin(ctx, token) + if !isLogin { + return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{ + "error": "未登录", + }) + } + + // 获取登录ID | Get login ID + loginID, _ := safiber.GetLoginID(ctx, token) + + return c.JSON(fiber.Map{ + "message": "已登录", + "login_id": loginID, + }) + }) + + // 受保护的路由组 | Protected route group api := app.Group("/api") - api.Use(plugin.AuthMiddleware()) + api.Use(safiber.AuthMiddleware()) { - api.Get("/user/info", func(c *fiber.Ctx) error { - saCtx, _ := safiber.GetSaToken(c) - loginID, _ := saCtx.GetLoginID() - permissions, _ := manager.GetPermissions(loginID) - roles, _ := manager.GetRoles(loginID) + // 用户信息 | User info + api.Get("/user", func(c *fiber.Ctx) error { + token := c.Get("Authorization") + ctx := c.Context() + loginID, _ := safiber.GetLoginID(ctx, token) + + return c.JSON(fiber.Map{ + "user_id": loginID, + "name": "User " + loginID, + }) + }) + + // 获取 Token 信息 | Get token info + api.Get("/token-info", func(c *fiber.Ctx) error { + token := c.Get("Authorization") + ctx := c.Context() + + tokenInfo, err := safiber.GetTokenInfo(ctx, token) + if err != nil { + return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ + "error": err.Error(), + }) + } return c.JSON(fiber.Map{ "code": 200, - "message": "success", - "data": fiber.Map{ - "loginId": loginID, - "permissions": permissions, - "roles": roles, - }, + "message": "获取Token信息成功", + "data": tokenInfo, + }) + }) + + // 踢人下线 | Kickout user + api.Post("/kickout/:user_id", func(c *fiber.Ctx) error { + userID := c.Params("user_id") + ctx := c.Context() + + // 使用 safiber 包的全局函数踢人 | Use safiber package global function to kickout + if err := safiber.Kickout(ctx, userID); err != nil { + return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{ + "error": err.Error(), + }) + } + + return c.JSON(fiber.Map{ + "message": "踢人成功", + }) + }) + } + + // 需要权限的路由组 | Routes requiring permissions + admin := app.Group("/admin") + admin.Use(safiber.AuthMiddleware()) + admin.Use(safiber.PermissionMiddleware([]string{"admin:read"}, safiber.WithLogicType(safiber.LogicOr))) + { + admin.Get("/dashboard", func(c *fiber.Ctx) error { + return c.JSON(fiber.Map{ + "message": "管理员面板", + }) + }) + } + + // 需要角色的路由组 | Routes requiring roles + super := app.Group("/super") + super.Use(safiber.AuthMiddleware()) + super.Use(safiber.RoleMiddleware([]string{"super-admin"}, safiber.WithLogicType(safiber.LogicAnd))) + { + super.Get("/settings", func(c *fiber.Ctx) error { + return c.JSON(fiber.Map{ + "message": "超级管理员设置", }) }) } - // 启动服务器 + // 启动服务器 | Start server log.Println("服务器启动在端口: 8080") + log.Println("示例: curl -X POST http://localhost:8080/login -d 'user_id=1000'") if err := app.Listen(":8080"); err != nil { log.Fatal("服务器启动失败:", err) } diff --git a/examples/fiber/fiber-example/go.mod b/examples/fiber/fiber-example/go.mod index 2465d75..4e06611 100644 --- a/examples/fiber/fiber-example/go.mod +++ b/examples/fiber/fiber-example/go.mod @@ -3,8 +3,6 @@ module github.com/click33/sa-token-go/examples/fiber-example go 1.25.0 require ( - github.com/click33/sa-token-go/core v0.1.6 - github.com/click33/sa-token-go/storage/memory v0.1.6 github.com/gofiber/fiber/v2 v2.52.0 ) diff --git a/examples/gf/gf-example/go.mod b/examples/gf/gf-example/go.mod index ba48dff..11e630a 100644 --- a/examples/gf/gf-example/go.mod +++ b/examples/gf/gf-example/go.mod @@ -3,7 +3,7 @@ module github.com/click33/sa-token-go/examples/gf-example go 1.25.0 require ( - github.com/click33/sa-token-go/integrations/gf v0.1.5 + github.com/click33/sa-token-go/integrations/gf v0.1.7 github.com/gogf/gf/v2 v2.9.4 ) diff --git a/examples/gin/gin-example/go.mod b/examples/gin/gin-example/go.mod index d17aea1..ba1e038 100644 --- a/examples/gin/gin-example/go.mod +++ b/examples/gin/gin-example/go.mod @@ -3,7 +3,6 @@ module github.com/click33/sa-token-go/examples/gin-example go 1.25.0 require ( - github.com/click33/sa-token-go/storage/memory v0.1.6 github.com/gin-gonic/gin v1.10.0 github.com/spf13/viper v1.18.2 ) diff --git a/examples/gin/gin-simple/go.mod b/examples/gin/gin-simple/go.mod index 9e22dd8..7f61fa4 100644 --- a/examples/gin/gin-simple/go.mod +++ b/examples/gin/gin-simple/go.mod @@ -3,8 +3,7 @@ module github.com/click33/sa-token-go/examples/gin/gin-simple go 1.25.0 require ( - github.com/click33/sa-token-go/integrations/gin v0.1.6 - github.com/click33/sa-token-go/storage/memory v0.1.6 + github.com/click33/sa-token-go/integrations/gin v0.1.7 github.com/gin-gonic/gin v1.10.0 ) diff --git a/examples/manager-example/jwt-example/go.mod b/examples/manager-example/jwt-example/go.mod index 8ef958a..536c068 100644 --- a/examples/manager-example/jwt-example/go.mod +++ b/examples/manager-example/jwt-example/go.mod @@ -3,9 +3,9 @@ module github.com/click33/sa-token-go/examples/jwt-example go 1.25.0 require ( - github.com/click33/sa-token-go/core v0.1.6 - github.com/click33/sa-token-go/storage/memory v0.1.6 - github.com/click33/sa-token-go/stputil v0.1.6 + github.com/click33/sa-token-go/core v0.1.7 + github.com/click33/sa-token-go/storage/memory v0.1.7 + github.com/click33/sa-token-go/stputil v0.1.7 ) require ( diff --git a/examples/manager-example/listener-example/go.mod b/examples/manager-example/listener-example/go.mod index c2df91a..eeb053c 100644 --- a/examples/manager-example/listener-example/go.mod +++ b/examples/manager-example/listener-example/go.mod @@ -3,9 +3,9 @@ module github.com/click33/sa-token-go/examples/listener-example go 1.25.0 require ( - github.com/click33/sa-token-go/core v0.1.6 - github.com/click33/sa-token-go/storage/memory v0.1.6 - github.com/click33/sa-token-go/stputil v0.1.6 + github.com/click33/sa-token-go/core v0.1.7 + github.com/click33/sa-token-go/storage/memory v0.1.7 + github.com/click33/sa-token-go/stputil v0.1.7 ) require ( diff --git a/examples/manager-example/oauth2-example/go.mod b/examples/manager-example/oauth2-example/go.mod index 0499dd1..a88de38 100644 --- a/examples/manager-example/oauth2-example/go.mod +++ b/examples/manager-example/oauth2-example/go.mod @@ -3,8 +3,7 @@ module github.com/click33/sa-token-go/examples/oauth2-example go 1.25.0 require ( - github.com/click33/sa-token-go/core v0.1.6 - github.com/click33/sa-token-go/storage/memory v0.1.6 + github.com/click33/sa-token-go/core v0.1.7 github.com/gin-gonic/gin v1.10.0 ) diff --git a/examples/manager-example/security-example/go.mod b/examples/manager-example/security-example/go.mod index addf05b..367a369 100644 --- a/examples/manager-example/security-example/go.mod +++ b/examples/manager-example/security-example/go.mod @@ -3,8 +3,8 @@ module github.com/click33/sa-token-go/examples/security-example go 1.25.0 require ( - github.com/click33/sa-token-go/core v0.1.6 - github.com/click33/sa-token-go/storage/memory v0.1.6 + github.com/click33/sa-token-go/core v0.1.7 + github.com/click33/sa-token-go/storage/memory v0.1.7 ) require ( diff --git a/examples/manager-example/session-demo/go.mod b/examples/manager-example/session-demo/go.mod index 9c785bb..4408f9e 100644 --- a/examples/manager-example/session-demo/go.mod +++ b/examples/manager-example/session-demo/go.mod @@ -3,9 +3,9 @@ module github.com/click33/sa-token-go/examples/session-demo go 1.25.0 require ( - github.com/click33/sa-token-go/core v0.1.6 - github.com/click33/sa-token-go/storage/memory v0.1.6 - github.com/click33/sa-token-go/stputil v0.1.6 + github.com/click33/sa-token-go/core v0.1.7 + github.com/click33/sa-token-go/storage/memory v0.1.7 + github.com/click33/sa-token-go/stputil v0.1.7 ) require ( diff --git a/examples/manager-example/token-styles/go.mod b/examples/manager-example/token-styles/go.mod index cc446a0..96dc7d9 100644 --- a/examples/manager-example/token-styles/go.mod +++ b/examples/manager-example/token-styles/go.mod @@ -3,9 +3,9 @@ module github.com/click33/sa-token-go/examples/token-styles go 1.25.0 require ( - github.com/click33/sa-token-go/core v0.1.6 - github.com/click33/sa-token-go/storage/memory v0.1.6 - github.com/click33/sa-token-go/stputil v0.1.6 + github.com/click33/sa-token-go/core v0.1.7 + github.com/click33/sa-token-go/storage/memory v0.1.7 + github.com/click33/sa-token-go/stputil v0.1.7 ) require ( diff --git a/examples/quick-start/simple-example/go.mod b/examples/quick-start/simple-example/go.mod index a3f2426..b1798a7 100644 --- a/examples/quick-start/simple-example/go.mod +++ b/examples/quick-start/simple-example/go.mod @@ -3,9 +3,9 @@ module github.com/click33/sa-token-go/examples/simple-example go 1.25.0 require ( - github.com/click33/sa-token-go/core v0.1.6 - github.com/click33/sa-token-go/storage/memory v0.1.6 - github.com/click33/sa-token-go/stputil v0.1.5 + github.com/click33/sa-token-go/core v0.1.7 + github.com/click33/sa-token-go/storage/memory v0.1.7 + github.com/click33/sa-token-go/stputil v0.1.7 ) require ( diff --git a/go.work.sum b/go.work.sum index 2ea3043..7d42bc8 100644 --- a/go.work.sum +++ b/go.work.sum @@ -45,10 +45,15 @@ github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91 github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= +github.com/click33/sa-token-go/core v0.1.7/go.mod h1:mb3AQAJIXqx9WdULyn5qjufK1j/u+kgB0q+tafHVhgk= github.com/click33/sa-token-go/integrations/gf v0.1.6/go.mod h1:cwAY3VJ/KNLNcuYDNjMt1O4IERCep1JWCfvS9LyoA5w= +github.com/click33/sa-token-go/integrations/gf v0.1.7/go.mod h1:0GDMoJ4Vv5+gPo8tnutpX34V/USd4+TLjZVObb91wFA= github.com/click33/sa-token-go/integrations/gin v0.1.6/go.mod h1:A8Ds3bUalQQcH2vYBaGPAqZ6fzZY9m7AamikDcXyRKE= +github.com/click33/sa-token-go/integrations/gin v0.1.7/go.mod h1:1STqW8wTUJ/tpfw/E22HsPzQVFnc7dE/AW0w44XQ2co= github.com/click33/sa-token-go/storage/memory v0.1.4/go.mod h1:nqyuEh23mNjcuG3aI/BqJFz71zkpsgjdStW1BC5lkB0= +github.com/click33/sa-token-go/storage/memory v0.1.7/go.mod h1:wnQVAHnFKWs6CzmM0DSRZSE2ADPXQQ9AIrWxdmzjz3Q= github.com/click33/sa-token-go/stputil v0.1.6/go.mod h1:G4vYhljpN1SeGLYHWRslYncHJvn52CksHGjBzUNITFA= +github.com/click33/sa-token-go/stputil v0.1.7/go.mod h1:YY4NzfwVMwPUQLDBk9C5eVLQ08oI3vNSFQhBuZBPtgY= github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe h1:QQ3GSy+MqSHxm/d8nCtnAiZdYFd45cYZPs8vOOIYKfk= diff --git a/integrations/chi/go.mod b/integrations/chi/go.mod index e4298be..02929d0 100644 --- a/integrations/chi/go.mod +++ b/integrations/chi/go.mod @@ -3,8 +3,8 @@ module github.com/click33/sa-token-go/integrations/chi go 1.25.0 require ( - github.com/click33/sa-token-go/core v0.1.6 - github.com/click33/sa-token-go/stputil v0.1.6 + github.com/click33/sa-token-go/core v0.1.7 + github.com/click33/sa-token-go/stputil v0.1.7 ) require ( diff --git a/integrations/echo/go.mod b/integrations/echo/go.mod index 6a7092b..96b6828 100644 --- a/integrations/echo/go.mod +++ b/integrations/echo/go.mod @@ -3,8 +3,8 @@ module github.com/click33/sa-token-go/integrations/echo go 1.25.0 require ( - github.com/click33/sa-token-go/core v0.1.6 - github.com/click33/sa-token-go/stputil v0.1.6 + github.com/click33/sa-token-go/core v0.1.7 + github.com/click33/sa-token-go/stputil v0.1.7 github.com/labstack/echo/v4 v4.11.4 ) diff --git a/integrations/fiber/go.mod b/integrations/fiber/go.mod index 63ad476..47a0c17 100644 --- a/integrations/fiber/go.mod +++ b/integrations/fiber/go.mod @@ -3,8 +3,8 @@ module github.com/click33/sa-token-go/integrations/fiber go 1.25.0 require ( - github.com/click33/sa-token-go/core v0.1.6 - github.com/click33/sa-token-go/stputil v0.1.6 + github.com/click33/sa-token-go/core v0.1.7 + github.com/click33/sa-token-go/stputil v0.1.7 github.com/gofiber/fiber/v2 v2.52.0 ) diff --git a/integrations/gf/go.mod b/integrations/gf/go.mod index ce672b8..6392805 100644 --- a/integrations/gf/go.mod +++ b/integrations/gf/go.mod @@ -3,8 +3,8 @@ module github.com/click33/sa-token-go/integrations/gf go 1.25.0 require ( - github.com/click33/sa-token-go/core v0.1.6 - github.com/click33/sa-token-go/stputil v0.1.5 + github.com/click33/sa-token-go/core v0.1.7 + github.com/click33/sa-token-go/stputil v0.1.7 github.com/gogf/gf/v2 v2.9.4 ) diff --git a/integrations/gin/go.mod b/integrations/gin/go.mod index 0281c4e..9350f94 100644 --- a/integrations/gin/go.mod +++ b/integrations/gin/go.mod @@ -3,8 +3,8 @@ module github.com/click33/sa-token-go/integrations/gin go 1.25.0 require ( - github.com/click33/sa-token-go/core v0.1.6 - github.com/click33/sa-token-go/stputil v0.1.6 + github.com/click33/sa-token-go/core v0.1.7 + github.com/click33/sa-token-go/stputil v0.1.7 github.com/gin-gonic/gin v1.10.0 ) diff --git a/stputil/go.mod b/stputil/go.mod index 825d539..d0d0635 100644 --- a/stputil/go.mod +++ b/stputil/go.mod @@ -2,7 +2,7 @@ module github.com/click33/sa-token-go/stputil go 1.25.0 -require github.com/click33/sa-token-go/core v0.1.6 +require github.com/click33/sa-token-go/core v0.1.7 require ( github.com/golang-jwt/jwt/v5 v5.3.0 // indirect From c4bba8e91ca1d548d660312162eb2960e5befa39 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Mon, 5 Jan 2026 23:36:53 +0800 Subject: [PATCH 37/50] =?UTF-8?q?feat():=201=E3=80=81=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E9=83=A8=E5=88=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/builder/builder.go | 4 +- core/errors.go | 14 +- core/manager/manager.go | 81 +++++--- core/session/session.go | 1 + .../annotation-example/test/api_test.go | 161 +++++++++++++++ examples/gf/gf-example/main.go | 183 +++++++++++++----- integrations/chi/middleware.go | 44 ++--- integrations/echo/middleware.go | 44 ++--- integrations/fiber/middleware.go | 44 ++--- integrations/gf/README.md | 1 - integrations/gf/middleware.go | 44 ++--- integrations/gin/middleware.go | 44 ++--- 12 files changed, 463 insertions(+), 202 deletions(-) create mode 100644 examples/annotation/annotation-example/test/api_test.go delete mode 100644 integrations/gf/README.md diff --git a/core/builder/builder.go b/core/builder/builder.go index 121f118..54b513d 100644 --- a/core/builder/builder.go +++ b/core/builder/builder.go @@ -77,7 +77,9 @@ func NewBuilder() *Builder { cookieConfig: config.DefaultCookieConfig(), renewPoolConfig: ants.DefaultRenewPoolConfig(), - logConfig: slog.DefaultLoggerConfig(), + + // 不需要设置logConfig + // logConfig: slog.DefaultLoggerConfig(), } } diff --git a/core/errors.go b/core/errors.go index 5a87ffd..5d09848 100644 --- a/core/errors.go +++ b/core/errors.go @@ -14,12 +14,15 @@ var ( // ErrNotLogin indicates the user is not logged in | 用户未登录错误 ErrNotLogin = fmt.Errorf("authentication required: user not logged in") - // ErrTokenInvalid indicates the provided token is invalid or malformed | Token无效或格式错误 + // ErrTokenInvalid indicates the provided token is invalid or malformed | Token 无效或格式错误 ErrTokenInvalid = fmt.Errorf("invalid token: the token is malformed or corrupted") - // ErrTokenExpired indicates the token has expired | Token已过期 + // ErrTokenExpired indicates the token has expired | Token 已过期 ErrTokenExpired = fmt.Errorf("token expired: please login again to get a new token") + // ErrTokenNotFound indicates the token does not exist | Token 不存在 + ErrTokenNotFound = fmt.Errorf("authentication required: token not found") + // ErrTokenKickout indicates the token has been kicked out | Token 已被踢下线 ErrTokenKickout = fmt.Errorf("authentication required: token has been kicked out") @@ -31,9 +34,6 @@ var ( // ErrInvalidDevice indicates the device identifier is invalid | 设备标识无效 ErrInvalidDevice = fmt.Errorf("invalid device: the device identifier is not valid") - - // ErrTokenNotFound indicates the token does not exist | Token 不存在 - ErrTokenNotFound = fmt.Errorf("authentication required: token not found") ) // ============ Authorization Errors | 授权错误 ============ @@ -62,10 +62,10 @@ var ( // ============ Session Errors | 会话错误 ============ var ( - // ErrSessionNotFound indicates the session doesn't exist | Session不存在 + // ErrSessionNotFound indicates the session doesn't exist | Session 不存在 ErrSessionNotFound = fmt.Errorf("session not found: the session may have expired or been deleted") - // ErrActiveTimeout indicates the session has been inactive for too long | Session活跃超时 + // ErrActiveTimeout indicates the session has been inactive for too long | Session 活跃超时 ErrActiveTimeout = fmt.Errorf("session inactive: the session has exceeded the inactivity timeout") ) diff --git a/core/manager/manager.go b/core/manager/manager.go index 2b4031f..4a1670e 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -172,7 +172,6 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( // Get device type | 获取设备类型 deviceType := getDevice(device) - // Get account key | 获取账号存储键 accountKey := m.getAccountKey(loginID, deviceType) @@ -182,7 +181,7 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( existingToken, err := m.storage.Get(ctx, accountKey) if err == nil && existingToken != nil { if existingTokenStr, ok := assertString(existingToken); ok && m.IsLogin(ctx, existingTokenStr) { - // If valid token exists, return it directly | 如果已有 Token 且有效,则直接返回 + // If valid token exists, return it directly | 如果已有 Token 且有效 则直接返回 return existingTokenStr, nil } } @@ -192,11 +191,10 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( if !m.config.IsConcurrent { // Concurrent login not allowed → replace previous login on the same device | 不允许并发登录 顶掉同设备下已存在的登录会话 _ = m.replace(ctx, loginID, deviceType) - } else if m.config.MaxLoginCount > 0 && !m.config.IsShare { // Concurrent login allowed but limited by MaxLoginCount | 允许并发登录但受 MaxLoginCount 限制 - tokens, _ := m.GetTokenValueListByLoginID(ctx, loginID) - if int64(len(tokens)) >= m.config.MaxLoginCount { + tokens, err := m.GetTokenValueListByLoginID(ctx, loginID) + if err == nil && int64(len(tokens)) >= m.config.MaxLoginCount { return "", core.ErrLoginLimitExceeded } } @@ -225,8 +223,7 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( } // Save token-tokenInfo mapping | 保存 TokenKey-TokenInfo 映射 - tokenKey := m.getTokenKey(tokenValue) - if err = m.storage.Set(ctx, tokenKey, tokenInfo, expiration); err != nil { + if err = m.storage.Set(ctx, m.getTokenKey(tokenValue), tokenInfo, expiration); err != nil { return "", fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } @@ -293,13 +290,13 @@ func (m *Manager) Logout(ctx context.Context, loginID string, device ...string) return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } if tokenValue == nil { - return nil + return core.ErrTokenNotFound } // Assert token value type | 类型断言为字符串 tokenValueStr, ok := assertString(tokenValue) if !ok { - return nil + return core.ErrTokenNotFound } return m.removeTokenChain(ctx, tokenValueStr, nil, listener.EventLogout) @@ -312,12 +309,21 @@ func (m *Manager) LogoutByToken(ctx context.Context, tokenValue string) error { // kickout Kick user offline (private) | 踢人下线(私有) func (m *Manager) kickout(ctx context.Context, loginID string, device string) error { + // Get the account key for this user and device | 获取该用户和设备对应的账户键 accountKey := m.getAccountKey(loginID, device) + + // Retrieve the token associated with this account key from storage | 从存储中获取该账户键对应的 Token tokenValue, err := m.storage.Get(ctx, accountKey) - if err != nil || tokenValue == nil { - return nil + if err != nil { + return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) + } + + // If no token exists for this account key | 如果该账户键不存在 Token + if tokenValue == nil { + return core.ErrTokenNotFound } + // Remove the token chain and trigger kickout event | 移除 Token 链并触发踢下线事件 if tokenValueStr, ok := assertString(tokenValue); ok { return m.removeTokenChain(ctx, tokenValueStr, nil, listener.EventKickout) } @@ -342,12 +348,20 @@ func (m *Manager) KickoutByToken(ctx context.Context, tokenValue string) error { // replace Replace user offline by login ID and device (private) | 根据账号和设备顶人下线(私有) func (m *Manager) replace(ctx context.Context, loginID string, device string) error { + // Get the account key for this user and device | 获取该用户和设备对应的账户键 accountKey := m.getAccountKey(loginID, device) + + // Retrieve the token associated with this account key from storage | 从存储中获取该账户键对应的 Token tokenValue, err := m.storage.Get(ctx, accountKey) - if err != nil || tokenValue == nil { - return nil + if err != nil { + return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) + } + // If no token exists for this account key | 如果该账户键不存在 Token + if tokenValue == nil { + return core.ErrTokenNotFound } + // Remove the token chain and trigger replace event | 移除 Token 链并触发顶下线事件 if tokenValueStr, ok := assertString(tokenValue); ok { return m.removeTokenChain(ctx, tokenValueStr, nil, listener.EventReplace) } @@ -475,11 +489,11 @@ func (m *Manager) GetLoginID(ctx context.Context, tokenValue string) (string, er return "", core.ErrNotLogin } - // Retrieve the login ID without checking token validity | 获取登录ID,不检查Token有效性 + // Retrieve the login ID without checking token validity | 获取登录ID 不检查Token有效性 return m.GetLoginIDNotCheck(ctx, tokenValue) } -// GetLoginIDNotCheck Gets login ID without checking token validity | 获取登录ID(不检查Token是否有效) +// GetLoginIDNotCheck Gets login ID without checking token validity | 获取登录ID 不续期Token func (m *Manager) GetLoginIDNotCheck(ctx context.Context, tokenValue string) (string, error) { // Get token info | 获取Token信息 info, err := m.getTokenInfo(ctx, tokenValue) @@ -497,7 +511,10 @@ func (m *Manager) GetTokenValue(ctx context.Context, loginID string, device ...s // Retrieve the token value from storage | 从存储中获取Token值 tokenValue, err := m.storage.Get(ctx, accountKey) - if err != nil || tokenValue == nil { + if err != nil { + return "", core.ErrStorageUnavailable + } + if tokenValue == nil { return "", core.ErrTokenNotFound } @@ -519,15 +536,6 @@ func (m *Manager) GetTokenInfoByToken(ctx context.Context, tokenValue string) (* // Disable Disables an account | 封禁账号 func (m *Manager) Disable(ctx context.Context, loginID string, duration time.Duration, reason ...string) error { - // Check if the account has active sessions and force logout | 检查账号是否有活跃会话并强制下线 - tokens, err := m.GetTokenValueListByLoginID(ctx, loginID) - if err == nil && len(tokens) > 0 { - for _, tokenValue := range tokens { - // Force kick out each active token | 强制踢出所有活跃的Token - _ = m.removeTokenChain(ctx, tokenValue, nil, listener.EventKickout, true) - } - } - // Retrieve the disable flag storage key | 获取封禁标记的存储键 disableKeyKey := m.getDisableKey(loginID) @@ -552,6 +560,15 @@ func (m *Manager) Disable(ctx context.Context, loginID string, duration time.Dur return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } + // Check if the account has active sessions and force logout | 检查账号是否有活跃会话并强制下线 + tokens, err := m.GetTokenValueListByLoginID(ctx, loginID) + if err == nil && len(tokens) > 0 { + for _, tokenValue := range tokens { + // Force kick out each active token | 强制踢出所有活跃的Token + _ = m.removeTokenChain(ctx, tokenValue, nil, listener.EventKickout, true) + } + } + return nil } @@ -589,7 +606,8 @@ func (m *Manager) CheckDisableWithInfo(ctx context.Context, loginID string) (*Di return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } if data == nil { - return nil, nil + // 注意 这里返回一个空的DisableInfo对象,而不是返回nil 不然取值时会panic + return &DisableInfo{}, nil } // 将数据转换为字节数组 @@ -1155,7 +1173,7 @@ func (m *Manager) GetTokenValueListByLoginID(ctx context.Context, loginID string // Retrieve keys matching the pattern from storage | 从存储中获取匹配的键 keys, err := m.storage.Keys(ctx, pattern) if err != nil { - return nil, err // Return error if key retrieval fails | 如果获取键失败,则返回错误 + return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } // Initialize a slice to hold the token strings | 初始化切片来存储Token字符串 @@ -1473,10 +1491,8 @@ func (m *Manager) getTokenInfo(ctx context.Context, tokenValue string, checkStat if len(checkState) > 0 && checkState[0] { switch string(raw) { case string(TokenStateKickout): - // Token has been kicked out | Token已被踢下线 return nil, core.ErrTokenKickout case string(TokenStateReplaced): - // Token has been replaced | Token已被顶下线 return nil, core.ErrTokenReplaced } } @@ -1500,11 +1516,16 @@ func (m *Manager) renewToken(ctx context.Context, tokenValue string, info *Token } } + // Before renewing the token, check if the user is disabled | 在续期之前,先检查用户是否被禁用 + if m.IsDisable(ctx, info.LoginID) { + return + } + // Get expiration time | 获取过期时间 exp := m.getExpiration() - // Update ActiveTime | 更新ActiveTime info.ActiveTime = time.Now().Unix() + // Renew token TTL | 续期Token的TTL if tokenInfo, err := m.serializer.Encode(info); err == nil { _ = m.storage.Set(ctx, m.getTokenKey(tokenValue), tokenInfo, exp) diff --git a/core/session/session.go b/core/session/session.go index bf4cf40..17e93d8 100644 --- a/core/session/session.go +++ b/core/session/session.go @@ -53,6 +53,7 @@ func (s *Session) SetDependencies(prefix string, storage adapter.Storage, serial if serializer == nil { serializer = codec_json.NewJSONSerializer() } + s.prefix = prefix s.storage = storage s.serializer = serializer diff --git a/examples/annotation/annotation-example/test/api_test.go b/examples/annotation/annotation-example/test/api_test.go new file mode 100644 index 0000000..5878ebf --- /dev/null +++ b/examples/annotation/annotation-example/test/api_test.go @@ -0,0 +1,161 @@ +// @Author daixk 2026/1/4 15:57:00 +package test + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "net/http" + "testing" +) + +// +// 工具函数 +// + +// 简单封装 HTTP 请求 +func doRequest(t *testing.T, method, url string, body any, token string) { + var reqBody io.Reader + if body != nil { + b, _ := json.Marshal(body) + reqBody = bytes.NewReader(b) + } + + req, err := http.NewRequest(method, url, reqBody) + if err != nil { + t.Fatalf("创建请求错误: %v", err) + } + + req.Header.Set("Content-Type", "application/json") + if token != "" { + req.Header.Set("Authorization", token) + } + + resp, err := http.DefaultClient.Do(req) + if err != nil { + t.Fatalf("请求失败: %v", err) + } + defer resp.Body.Close() + + b, _ := io.ReadAll(resp.Body) + fmt.Printf("\n[%s %s] 返回结果:\n%s\n\n", method, url, b) +} + +// +// 每个接口单独测试 +// + +// 1. 公开接口 +func TestPublic(t *testing.T) { + doRequest(t, "GET", "http://localhost:8080/public", nil, "") +} + +// 2. 登录 +func TestLoginUser1(t *testing.T) { + doRequest(t, "POST", "http://localhost:8080/login", map[string]any{ + "userId": 1, + }, "") +} + +func TestLoginUser2(t *testing.T) { + doRequest(t, "POST", "http://localhost:8080/login", map[string]any{ + "userId": 2, + }, "") +} + +// 3. 获取用户信息(需要登录) +func TestUserInfo(t *testing.T) { + // 先登录 + token := getToken(t, 2) + + // 请求 + doRequest(t, "GET", "http://localhost:8080/user/info", nil, token) +} + +// 4. 管理员接口(admin:*) +func TestAdmin(t *testing.T) { + token := getToken(t, 1) + + doRequest(t, "GET", "http://localhost:8080/admin", nil, token) +} + +// 5. 用户 or 管理员 OR 权限 +func TestUserOrAdmin(t *testing.T) { + token := getToken(t, 2) + + doRequest(t, "GET", "http://localhost:8080/user-or-admin", nil, token) +} + +// 6. 测试角色:admin +func TestRoleManager(t *testing.T) { + token := getToken(t, 1) + + doRequest(t, "GET", "http://localhost:8080/manager-example", nil, token) +} + +// 7. 测试封禁接口 +func TestDisable(t *testing.T) { + token := getToken(t, 1) + + doRequest(t, "POST", "http://localhost:8080/disable", map[string]any{ + "userId": 2, + }, token) +} + +// 8. 查看是否被封禁 +func TestSensitive(t *testing.T) { + token := getToken(t, 2) + + doRequest(t, "GET", "http://localhost:8080/sensitive", nil, token) +} + +// 工具:登录并返回 token +func getToken(t *testing.T, userID int) string { + var respBody struct { + Token string `json:"token"` + } + + body := map[string]any{"userId": userID} + + var reqBody io.Reader + b, _ := json.Marshal(body) + reqBody = bytes.NewReader(b) + + req, _ := http.NewRequest("POST", "http://localhost:8080/login", reqBody) + req.Header.Set("Content-Type", "application/json") + + resp, err := http.DefaultClient.Do(req) + if err != nil { + t.Fatalf("登录失败: %v", err) + } + defer resp.Body.Close() + + data, _ := io.ReadAll(resp.Body) + _ = json.Unmarshal(data, &respBody) + + if respBody.Token == "" { + t.Fatalf("登录返回 token 为空: %s", data) + } + + return respBody.Token +} + +// +// 最终测试:执行全部接口 +// + +func TestAll(t *testing.T) { + t.Run("Public", TestPublic) + + t.Run("LoginUser1", TestLoginUser1) + t.Run("LoginUser2", TestLoginUser2) + + t.Run("UserInfo", TestUserInfo) + t.Run("Admin", TestAdmin) + t.Run("UserOrAdmin", TestUserOrAdmin) + t.Run("RoleManager", TestRoleManager) + + t.Run("Disable", TestDisable) + t.Run("Sensitive", TestSensitive) +} diff --git a/examples/gf/gf-example/main.go b/examples/gf/gf-example/main.go index 90c78f4..c1f70ec 100644 --- a/examples/gf/gf-example/main.go +++ b/examples/gf/gf-example/main.go @@ -3,28 +3,34 @@ package main import ( "net/http" - satoken "github.com/click33/sa-token-go/integrations/gf" + sagf "github.com/click33/sa-token-go/integrations/gf" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" ) func main() { + storage, err := sagf.NewRedisStorage("redis://:root@192.168.19.104:6379/0?dial_timeout=3&read_timeout=10s&max_retries=2") + if err != nil { + panic(err) + } + // 使用 Builder 模式构建 Manager | Build Manager using Builder pattern - manager := satoken.NewDefaultBuild(). - SetStorage(satoken.NewMemoryStorage()). // 设置内存存储 | Set memory storage - IsLog(true). // 开启日志 | Enable logging + manager := sagf.NewDefaultBuild(). + //SetStorage(sagf.NewMemoryStorage()). // 设置内存存储 | Set memory storage + SetStorage(storage). // 设置内存存储 | Set memory storage + IsLog(false). // 开启日志 | Enable logging Build() // 注册 Manager | Register Manager - satoken.SetManager(manager) + sagf.SetManager(manager) s := g.Server() // 首页路由 | Home route s.BindHandler("/", func(r *ghttp.Request) { r.Response.WriteJson(g.Map{ - "code": satoken.CodeSuccess, + "code": sagf.CodeSuccess, "message": "Welcome to Sa-Token-Go GF Example", }) }) @@ -32,7 +38,7 @@ func main() { // 公开路由 | Public route s.BindHandler("/public", func(r *ghttp.Request) { r.Response.WriteStatusExit(http.StatusOK, g.Map{ - "code": satoken.CodeSuccess, + "code": sagf.CodeSuccess, "message": "公开访问 | Public access", }) }) @@ -43,17 +49,40 @@ func main() { loginID := r.Get("id", "10001").String() // 执行登录 | Perform login - token, err := satoken.Login(r.Context(), loginID) + token, err := sagf.Login(r.Context(), loginID) if err != nil { - r.Response.WriteStatusExit(http.StatusInternalServerError, g.Map{ - "code": satoken.CodeServerError, + r.Response.WriteStatusExit(http.StatusOK, g.Map{ + "code": sagf.CodeServerError, "message": err.Error(), }) return } + // 角色 + if loginID == "1" { + err = sagf.SetRoles(r.Context(), loginID, []string{"admin"}) + if err != nil { + r.Response.WriteJson(g.Map{ + "code": sagf.CodeServerError, + "message": "登录失败", + "data": g.Array{}, + }) + } + } + // 权限 + if loginID == "1" { + err = sagf.SetPermissions(r.Context(), loginID, []string{"admin:read", "admin:delete"}) + if err != nil { + r.Response.WriteJson(g.Map{ + "code": sagf.CodeServerError, + "message": "登录失败", + "data": g.Array{}, + }) + } + } + r.Response.WriteJson(g.Map{ - "code": satoken.CodeSuccess, + "code": sagf.CodeSuccess, "message": "登录成功 | Login successful", "data": g.Map{ "token": token, @@ -62,53 +91,69 @@ func main() { }) }) - // 登出接口 | Logout API - s.BindHandler("/logout", func(r *ghttp.Request) { - // 从请求中获取 Token | Get token from request - saCtx, ok := satoken.GetSaTokenContext(r) - if !ok { - r.Response.WriteStatusExit(http.StatusUnauthorized, g.Map{ - "code": satoken.CodeNotLogin, - "message": "未登录 | Not logged in", - }) - return - } + s.Group("/", func(group *ghttp.RouterGroup) { + group.Middleware(sagf.AuthMiddleware( + sagf.WithFailFunc(func(r *ghttp.Request, err error) { + r.Response.WriteStatusExit(http.StatusOK, g.Map{ + "code": sagf.CodeNotLogin, + "message": err.Error(), + }) + }), + )) + group.GET("/logout", func(r *ghttp.Request) { + // 从请求中获取 Token | Get token from request + saCtx, ok := sagf.GetSaTokenContext(r) + if !ok { + r.Response.WriteStatusExit(http.StatusOK, g.Map{ + "code": sagf.CodeNotLogin, + "message": "未登录 | Not logged in", + }) + return + } - tokenValue := saCtx.GetTokenValue() - err := satoken.LogoutByToken(r.Context(), tokenValue) - if err != nil { - r.Response.WriteStatusExit(http.StatusInternalServerError, g.Map{ - "code": satoken.CodeServerError, - "message": err.Error(), - }) - return - } + tokenValue := saCtx.GetTokenValue() + err := sagf.LogoutByToken(r.Context(), tokenValue) + if err != nil { + r.Response.WriteStatusExit(http.StatusOK, g.Map{ + "code": sagf.CodeServerError, + "message": err.Error(), + }) + return + } - r.Response.WriteJson(g.Map{ - "code": satoken.CodeSuccess, - "message": "登出成功 | Logout successful", + r.Response.WriteJson(g.Map{ + "code": sagf.CodeSuccess, + "message": "登出成功 | Logout successful", + }) }) }) // 受保护的路由组 | Protected route group - protected := s.Group("/api").Middleware(satoken.AuthMiddleware()) + protected := s.Group("/").Middleware( + sagf.AuthMiddleware( + sagf.WithFailFunc(func(r *ghttp.Request, err error) { + r.Response.WriteStatusExit(http.StatusOK, g.Map{ + "code": sagf.CodeNotLogin, + "message": err.Error(), + }) + }))) { // 获取用户信息 | Get user info protected.GET("/user", func(r *ghttp.Request) { - saCtx, _ := satoken.GetSaTokenContext(r) + saCtx, _ := sagf.GetSaTokenContext(r) tokenValue := saCtx.GetTokenValue() - loginID, err := satoken.GetLoginID(r.Context(), tokenValue) + loginID, err := sagf.GetLoginID(r.Context(), tokenValue) if err != nil { - r.Response.WriteStatusExit(http.StatusUnauthorized, g.Map{ - "code": satoken.CodeNotLogin, + r.Response.WriteStatusExit(http.StatusOK, g.Map{ + "code": sagf.CodeNotLogin, "message": err.Error(), }) return } r.Response.WriteJson(g.Map{ - "code": satoken.CodeSuccess, + "code": sagf.CodeSuccess, "message": "获取用户信息成功 | Get user info successful", "data": g.Map{ "loginID": loginID, @@ -119,20 +164,20 @@ func main() { // 获取 Token 信息 | Get token info protected.GET("/token-info", func(r *ghttp.Request) { - saCtx, _ := satoken.GetSaTokenContext(r) + saCtx, _ := sagf.GetSaTokenContext(r) tokenValue := saCtx.GetTokenValue() - tokenInfo, err := satoken.GetTokenInfo(r.Context(), tokenValue) + tokenInfo, err := sagf.GetTokenInfo(r.Context(), tokenValue) if err != nil { - r.Response.WriteStatusExit(http.StatusInternalServerError, g.Map{ - "code": satoken.CodeServerError, + r.Response.WriteStatusExit(http.StatusOK, g.Map{ + "code": sagf.CodeServerError, "message": err.Error(), }) return } r.Response.WriteJson(g.Map{ - "code": satoken.CodeSuccess, + "code": sagf.CodeSuccess, "message": "获取Token信息成功 | Get token info successful", "data": tokenInfo, }) @@ -140,28 +185,60 @@ func main() { } // 需要特定权限的路由 | Routes requiring specific permissions - permGroup := s.Group("/admin").Middleware( - satoken.AuthMiddleware(), - satoken.PermissionMiddleware([]string{"admin:read"}, satoken.WithLogicType(satoken.LogicOr)), + permGroup := s.Group("/").Middleware( + sagf.AuthMiddleware( + sagf.WithFailFunc(func(r *ghttp.Request, err error) { + r.Response.WriteStatusExit(http.StatusOK, g.Map{ + "code": sagf.CodeNotLogin, + "message": err.Error(), + }) + }), + ), + sagf.PermissionMiddleware( + []string{"admin:read", "admin:delete"}, + sagf.WithLogicType(sagf.LogicAnd), + sagf.WithFailFunc(func(r *ghttp.Request, err error) { + r.Response.WriteStatusExit(http.StatusOK, g.Map{ + "code": sagf.CodePermissionDenied, + "message": err.Error(), + }) + }), + ), ) { permGroup.GET("/dashboard", func(r *ghttp.Request) { r.Response.WriteJson(g.Map{ - "code": satoken.CodeSuccess, + "code": sagf.CodeSuccess, "message": "管理员面板 | Admin dashboard", }) }) } // 需要特定角色的路由 | Routes requiring specific roles - roleGroup := s.Group("/super").Middleware( - satoken.AuthMiddleware(), - satoken.RoleMiddleware([]string{"super-admin"}, satoken.WithLogicType(satoken.LogicAnd)), + roleGroup := s.Group("/").Middleware( + sagf.AuthMiddleware( + sagf.WithFailFunc(func(r *ghttp.Request, err error) { + r.Response.WriteStatusExit(http.StatusOK, g.Map{ + "code": sagf.CodeNotLogin, + "message": err.Error(), + }) + }), + ), + sagf.RoleMiddleware( + []string{"super-admin"}, + sagf.WithLogicType(sagf.LogicAnd), + sagf.WithFailFunc(func(r *ghttp.Request, err error) { + r.Response.WriteStatusExit(http.StatusOK, g.Map{ + "code": sagf.CodePermissionDenied, + "message": err.Error(), + }) + }), + ), ) { roleGroup.GET("/settings", func(r *ghttp.Request) { r.Response.WriteJson(g.Map{ - "code": satoken.CodeSuccess, + "code": sagf.CodeSuccess, "message": "超级管理员设置 | Super admin settings", }) }) diff --git a/integrations/chi/middleware.go b/integrations/chi/middleware.go index 9babd90..af7caf0 100644 --- a/integrations/chi/middleware.go +++ b/integrations/chi/middleware.go @@ -25,9 +25,9 @@ const ( type AuthOption func(*AuthOptions) type AuthOptions struct { - AuthType string - LogicType LogicType - AuthFailFunc func(w http.ResponseWriter, r *http.Request, err error) + AuthType string + LogicType LogicType + FailFunc func(w http.ResponseWriter, r *http.Request, err error) } func defaultAuthOptions() *AuthOptions { @@ -48,10 +48,10 @@ func WithLogicType(logicType LogicType) AuthOption { } } -// WithAuthFailFunc sets auth failure callback | 设置认证失败回调 -func WithAuthFailFunc(fn func(w http.ResponseWriter, r *http.Request, err error)) AuthOption { +// WithFailFunc sets auth failure callback | 设置认证失败回调 +func WithFailFunc(fn func(w http.ResponseWriter, r *http.Request, err error)) AuthOption { return func(o *AuthOptions) { - o.AuthFailFunc = fn + o.FailFunc = fn } } @@ -68,8 +68,8 @@ func AuthMiddleware(opts ...AuthOption) func(http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { mgr, err := stputil.GetManager(options.AuthType) if err != nil { - if options.AuthFailFunc != nil { - options.AuthFailFunc(w, r, err) + if options.FailFunc != nil { + options.FailFunc(w, r, err) } else { writeErrorResponse(w, err) } @@ -84,8 +84,8 @@ func AuthMiddleware(opts ...AuthOption) func(http.Handler) http.Handler { // 检查登录 | Check login err = mgr.CheckLogin(r.Context(), tokenValue) if err != nil { - if options.AuthFailFunc != nil { - options.AuthFailFunc(w, r, err) + if options.FailFunc != nil { + options.FailFunc(w, r, err) } else { writeErrorResponse(w, err) } @@ -109,8 +109,8 @@ func AuthWithStateMiddleware(opts ...AuthOption) func(http.Handler) http.Handler // 获取 Manager | Get Manager mgr, err := stputil.GetManager(options.AuthType) if err != nil { - if options.AuthFailFunc != nil { - options.AuthFailFunc(w, r, err) + if options.FailFunc != nil { + options.FailFunc(w, r, err) } else { writeErrorResponse(w, err) } @@ -127,8 +127,8 @@ func AuthWithStateMiddleware(opts ...AuthOption) func(http.Handler) http.Handler if err != nil { // 用户自定义回调优先 - if options.AuthFailFunc != nil { - options.AuthFailFunc(w, r, err) + if options.FailFunc != nil { + options.FailFunc(w, r, err) } else { writeErrorResponse(w, err) } @@ -163,8 +163,8 @@ func PermissionMiddleware( // Get Manager | 获取 Manager mgr, err := stputil.GetManager(options.AuthType) if err != nil { - if options.AuthFailFunc != nil { - options.AuthFailFunc(w, r, err) + if options.FailFunc != nil { + options.FailFunc(w, r, err) } else { writeErrorResponse(w, err) } @@ -186,8 +186,8 @@ func PermissionMiddleware( } if !ok { - if options.AuthFailFunc != nil { - options.AuthFailFunc(w, r, core.ErrPermissionDenied) + if options.FailFunc != nil { + options.FailFunc(w, r, core.ErrPermissionDenied) } else { writeErrorResponse(w, core.ErrPermissionDenied) } @@ -221,8 +221,8 @@ func RoleMiddleware( // Get Manager | 获取 Manager mgr, err := stputil.GetManager(options.AuthType) if err != nil { - if options.AuthFailFunc != nil { - options.AuthFailFunc(w, r, err) + if options.FailFunc != nil { + options.FailFunc(w, r, err) } else { writeErrorResponse(w, err) } @@ -244,8 +244,8 @@ func RoleMiddleware( } if !ok { - if options.AuthFailFunc != nil { - options.AuthFailFunc(w, r, core.ErrRoleDenied) + if options.FailFunc != nil { + options.FailFunc(w, r, core.ErrRoleDenied) } else { writeErrorResponse(w, core.ErrRoleDenied) } diff --git a/integrations/echo/middleware.go b/integrations/echo/middleware.go index 9b3753d..2f6017d 100644 --- a/integrations/echo/middleware.go +++ b/integrations/echo/middleware.go @@ -25,9 +25,9 @@ const ( type AuthOption func(*AuthOptions) type AuthOptions struct { - AuthType string - LogicType LogicType - AuthFailFunc func(c echo.Context, err error) error + AuthType string + LogicType LogicType + FailFunc func(c echo.Context, err error) error } func defaultAuthOptions() *AuthOptions { @@ -48,10 +48,10 @@ func WithLogicType(logicType LogicType) AuthOption { } } -// WithAuthFailFunc sets auth failure callback | 设置认证失败回调 -func WithAuthFailFunc(fn func(c echo.Context, err error) error) AuthOption { +// WithFailFunc sets auth failure callback | 设置认证失败回调 +func WithFailFunc(fn func(c echo.Context, err error) error) AuthOption { return func(o *AuthOptions) { - o.AuthFailFunc = fn + o.FailFunc = fn } } @@ -68,8 +68,8 @@ func AuthMiddleware(opts ...AuthOption) echo.MiddlewareFunc { return func(c echo.Context) error { mgr, err := stputil.GetManager(options.AuthType) if err != nil { - if options.AuthFailFunc != nil { - return options.AuthFailFunc(c, err) + if options.FailFunc != nil { + return options.FailFunc(c, err) } return writeErrorResponse(c, err) } @@ -81,8 +81,8 @@ func AuthMiddleware(opts ...AuthOption) echo.MiddlewareFunc { // 检查登录 | Check login err = mgr.CheckLogin(c.Request().Context(), tokenValue) if err != nil { - if options.AuthFailFunc != nil { - return options.AuthFailFunc(c, err) + if options.FailFunc != nil { + return options.FailFunc(c, err) } return writeErrorResponse(c, err) } @@ -104,8 +104,8 @@ func AuthWithStateMiddleware(opts ...AuthOption) echo.MiddlewareFunc { // 获取 Manager | Get Manager mgr, err := stputil.GetManager(options.AuthType) if err != nil { - if options.AuthFailFunc != nil { - return options.AuthFailFunc(c, err) + if options.FailFunc != nil { + return options.FailFunc(c, err) } return writeErrorResponse(c, err) } @@ -119,8 +119,8 @@ func AuthWithStateMiddleware(opts ...AuthOption) echo.MiddlewareFunc { if err != nil { // 用户自定义回调优先 - if options.AuthFailFunc != nil { - return options.AuthFailFunc(c, err) + if options.FailFunc != nil { + return options.FailFunc(c, err) } return writeErrorResponse(c, err) } @@ -151,8 +151,8 @@ func PermissionMiddleware( // Get Manager | 获取 Manager mgr, err := stputil.GetManager(options.AuthType) if err != nil { - if options.AuthFailFunc != nil { - return options.AuthFailFunc(c, err) + if options.FailFunc != nil { + return options.FailFunc(c, err) } return writeErrorResponse(c, err) } @@ -171,8 +171,8 @@ func PermissionMiddleware( } if !ok { - if options.AuthFailFunc != nil { - return options.AuthFailFunc(c, core.ErrPermissionDenied) + if options.FailFunc != nil { + return options.FailFunc(c, core.ErrPermissionDenied) } return writeErrorResponse(c, core.ErrPermissionDenied) } @@ -203,8 +203,8 @@ func RoleMiddleware( // Get Manager | 获取 Manager mgr, err := stputil.GetManager(options.AuthType) if err != nil { - if options.AuthFailFunc != nil { - return options.AuthFailFunc(c, err) + if options.FailFunc != nil { + return options.FailFunc(c, err) } return writeErrorResponse(c, err) } @@ -223,8 +223,8 @@ func RoleMiddleware( } if !ok { - if options.AuthFailFunc != nil { - return options.AuthFailFunc(c, core.ErrRoleDenied) + if options.FailFunc != nil { + return options.FailFunc(c, core.ErrRoleDenied) } return writeErrorResponse(c, core.ErrRoleDenied) } diff --git a/integrations/fiber/middleware.go b/integrations/fiber/middleware.go index 8e4519a..d020ecb 100644 --- a/integrations/fiber/middleware.go +++ b/integrations/fiber/middleware.go @@ -24,9 +24,9 @@ const ( type AuthOption func(*AuthOptions) type AuthOptions struct { - AuthType string - LogicType LogicType - AuthFailFunc func(c *fiber.Ctx, err error) error + AuthType string + LogicType LogicType + FailFunc func(c *fiber.Ctx, err error) error } func defaultAuthOptions() *AuthOptions { @@ -47,10 +47,10 @@ func WithLogicType(logicType LogicType) AuthOption { } } -// WithAuthFailFunc sets auth failure callback | 设置认证失败回调 -func WithAuthFailFunc(fn func(c *fiber.Ctx, err error) error) AuthOption { +// WithFailFunc sets auth failure callback | 设置认证失败回调 +func WithFailFunc(fn func(c *fiber.Ctx, err error) error) AuthOption { return func(o *AuthOptions) { - o.AuthFailFunc = fn + o.FailFunc = fn } } @@ -66,8 +66,8 @@ func AuthMiddleware(opts ...AuthOption) fiber.Handler { return func(c *fiber.Ctx) error { mgr, err := stputil.GetManager(options.AuthType) if err != nil { - if options.AuthFailFunc != nil { - return options.AuthFailFunc(c, err) + if options.FailFunc != nil { + return options.FailFunc(c, err) } return writeErrorResponse(c, err) } @@ -79,8 +79,8 @@ func AuthMiddleware(opts ...AuthOption) fiber.Handler { // 检查登录 | Check login err = mgr.CheckLogin(c.UserContext(), tokenValue) if err != nil { - if options.AuthFailFunc != nil { - return options.AuthFailFunc(c, err) + if options.FailFunc != nil { + return options.FailFunc(c, err) } return writeErrorResponse(c, err) } @@ -100,8 +100,8 @@ func AuthWithStateMiddleware(opts ...AuthOption) fiber.Handler { // 获取 Manager | Get Manager mgr, err := stputil.GetManager(options.AuthType) if err != nil { - if options.AuthFailFunc != nil { - return options.AuthFailFunc(c, err) + if options.FailFunc != nil { + return options.FailFunc(c, err) } return writeErrorResponse(c, err) } @@ -115,8 +115,8 @@ func AuthWithStateMiddleware(opts ...AuthOption) fiber.Handler { if err != nil { // 用户自定义回调优先 - if options.AuthFailFunc != nil { - return options.AuthFailFunc(c, err) + if options.FailFunc != nil { + return options.FailFunc(c, err) } return writeErrorResponse(c, err) } @@ -145,8 +145,8 @@ func PermissionMiddleware( // Get Manager | 获取 Manager mgr, err := stputil.GetManager(options.AuthType) if err != nil { - if options.AuthFailFunc != nil { - return options.AuthFailFunc(c, err) + if options.FailFunc != nil { + return options.FailFunc(c, err) } return writeErrorResponse(c, err) } @@ -165,8 +165,8 @@ func PermissionMiddleware( } if !ok { - if options.AuthFailFunc != nil { - return options.AuthFailFunc(c, core.ErrPermissionDenied) + if options.FailFunc != nil { + return options.FailFunc(c, core.ErrPermissionDenied) } return writeErrorResponse(c, core.ErrPermissionDenied) } @@ -195,8 +195,8 @@ func RoleMiddleware( // Get Manager | 获取 Manager mgr, err := stputil.GetManager(options.AuthType) if err != nil { - if options.AuthFailFunc != nil { - return options.AuthFailFunc(c, err) + if options.FailFunc != nil { + return options.FailFunc(c, err) } return writeErrorResponse(c, err) } @@ -215,8 +215,8 @@ func RoleMiddleware( } if !ok { - if options.AuthFailFunc != nil { - return options.AuthFailFunc(c, core.ErrRoleDenied) + if options.FailFunc != nil { + return options.FailFunc(c, core.ErrRoleDenied) } return writeErrorResponse(c, core.ErrRoleDenied) } diff --git a/integrations/gf/README.md b/integrations/gf/README.md deleted file mode 100644 index 109a767..0000000 --- a/integrations/gf/README.md +++ /dev/null @@ -1 +0,0 @@ -# sa-token-go 集成 goframe 框架 \ No newline at end of file diff --git a/integrations/gf/middleware.go b/integrations/gf/middleware.go index 42ff8ee..3afeadd 100644 --- a/integrations/gf/middleware.go +++ b/integrations/gf/middleware.go @@ -26,9 +26,9 @@ const ( type AuthOption func(*AuthOptions) type AuthOptions struct { - AuthType string - LogicType LogicType - AuthFailFunc func(r *ghttp.Request, err error) + AuthType string + LogicType LogicType + FailFunc func(r *ghttp.Request, err error) } func defaultAuthOptions() *AuthOptions { @@ -48,10 +48,10 @@ func WithLogicType(logicType LogicType) AuthOption { } } -// WithAuthFailFunc sets auth failure callback | 设置认证失败回调 -func WithAuthFailFunc(fn func(r *ghttp.Request, err error)) AuthOption { +// WithFailFunc sets auth failure callback | 设置认证失败回调 +func WithFailFunc(fn func(r *ghttp.Request, err error)) AuthOption { return func(o *AuthOptions) { - o.AuthFailFunc = fn + o.FailFunc = fn } } @@ -67,8 +67,8 @@ func AuthMiddleware(opts ...AuthOption) ghttp.HandlerFunc { return func(r *ghttp.Request) { mgr, err := stputil.GetManager(options.AuthType) if err != nil { - if options.AuthFailFunc != nil { - options.AuthFailFunc(r, err) + if options.FailFunc != nil { + options.FailFunc(r, err) } else { writeErrorResponse(r, err) } @@ -82,8 +82,8 @@ func AuthMiddleware(opts ...AuthOption) ghttp.HandlerFunc { // 检查登录 | Check login err = mgr.CheckLogin(r.Context(), tokenValue) if err != nil { - if options.AuthFailFunc != nil { - options.AuthFailFunc(r, err) + if options.FailFunc != nil { + options.FailFunc(r, err) } else { writeErrorResponse(r, err) } @@ -105,8 +105,8 @@ func AuthWithStateMiddleware(opts ...AuthOption) ghttp.HandlerFunc { // 获取 Manager | Get Manager mgr, err := stputil.GetManager(options.AuthType) if err != nil { - if options.AuthFailFunc != nil { - options.AuthFailFunc(r, err) + if options.FailFunc != nil { + options.FailFunc(r, err) } else { writeErrorResponse(r, err) } @@ -122,8 +122,8 @@ func AuthWithStateMiddleware(opts ...AuthOption) ghttp.HandlerFunc { if err != nil { // 用户自定义回调优先 - if options.AuthFailFunc != nil { - options.AuthFailFunc(r, err) + if options.FailFunc != nil { + options.FailFunc(r, err) } else { writeErrorResponse(r, err) } @@ -156,8 +156,8 @@ func PermissionMiddleware( // Get Manager | 获取 Manager mgr, err := stputil.GetManager(options.AuthType) if err != nil { - if options.AuthFailFunc != nil { - options.AuthFailFunc(r, err) + if options.FailFunc != nil { + options.FailFunc(r, err) } else { writeErrorResponse(r, err) } @@ -178,8 +178,8 @@ func PermissionMiddleware( } if !ok { - if options.AuthFailFunc != nil { - options.AuthFailFunc(r, core.ErrPermissionDenied) + if options.FailFunc != nil { + options.FailFunc(r, core.ErrPermissionDenied) } else { writeErrorResponse(r, core.ErrPermissionDenied) } @@ -211,8 +211,8 @@ func RoleMiddleware( // Get Manager | 获取 Manager mgr, err := stputil.GetManager(options.AuthType) if err != nil { - if options.AuthFailFunc != nil { - options.AuthFailFunc(r, err) + if options.FailFunc != nil { + options.FailFunc(r, err) } else { writeErrorResponse(r, err) } @@ -233,8 +233,8 @@ func RoleMiddleware( } if !ok { - if options.AuthFailFunc != nil { - options.AuthFailFunc(r, core.ErrRoleDenied) + if options.FailFunc != nil { + options.FailFunc(r, core.ErrRoleDenied) } else { writeErrorResponse(r, core.ErrRoleDenied) } diff --git a/integrations/gin/middleware.go b/integrations/gin/middleware.go index ca29b91..668c5a1 100644 --- a/integrations/gin/middleware.go +++ b/integrations/gin/middleware.go @@ -25,9 +25,9 @@ const ( type AuthOption func(*AuthOptions) type AuthOptions struct { - AuthType string - LogicType LogicType - AuthFailFunc func(c *gin.Context, err error) + AuthType string + LogicType LogicType + FailFunc func(c *gin.Context, err error) } func defaultAuthOptions() *AuthOptions { @@ -48,10 +48,10 @@ func WithLogicType(logicType LogicType) AuthOption { } } -// WithAuthFailFunc sets auth failure callback | 设置认证失败回调 -func WithAuthFailFunc(fn func(c *gin.Context, err error)) AuthOption { +// WithFailFunc sets auth failure callback | 设置认证失败回调 +func WithFailFunc(fn func(c *gin.Context, err error)) AuthOption { return func(o *AuthOptions) { - o.AuthFailFunc = fn + o.FailFunc = fn } } @@ -67,8 +67,8 @@ func AuthMiddleware(opts ...AuthOption) gin.HandlerFunc { return func(c *gin.Context) { mgr, err := stputil.GetManager(options.AuthType) if err != nil { - if options.AuthFailFunc != nil { - options.AuthFailFunc(c, err) + if options.FailFunc != nil { + options.FailFunc(c, err) } else { writeErrorResponse(c, err) } @@ -83,8 +83,8 @@ func AuthMiddleware(opts ...AuthOption) gin.HandlerFunc { // 检查登录 | Check login err = mgr.CheckLogin(c.Request.Context(), tokenValue) if err != nil { - if options.AuthFailFunc != nil { - options.AuthFailFunc(c, err) + if options.FailFunc != nil { + options.FailFunc(c, err) } else { writeErrorResponse(c, err) } @@ -107,8 +107,8 @@ func AuthWithStateMiddleware(opts ...AuthOption) gin.HandlerFunc { // 获取 Manager | Get Manager mgr, err := stputil.GetManager(options.AuthType) if err != nil { - if options.AuthFailFunc != nil { - options.AuthFailFunc(c, err) + if options.FailFunc != nil { + options.FailFunc(c, err) } else { writeErrorResponse(c, err) } @@ -125,8 +125,8 @@ func AuthWithStateMiddleware(opts ...AuthOption) gin.HandlerFunc { if err != nil { // 用户自定义回调优先 - if options.AuthFailFunc != nil { - options.AuthFailFunc(c, err) + if options.FailFunc != nil { + options.FailFunc(c, err) } else { writeErrorResponse(c, err) } @@ -160,8 +160,8 @@ func PermissionMiddleware( // Get Manager | 获取 Manager mgr, err := stputil.GetManager(options.AuthType) if err != nil { - if options.AuthFailFunc != nil { - options.AuthFailFunc(c, err) + if options.FailFunc != nil { + options.FailFunc(c, err) } else { writeErrorResponse(c, err) } @@ -183,8 +183,8 @@ func PermissionMiddleware( } if !ok { - if options.AuthFailFunc != nil { - options.AuthFailFunc(c, core.ErrPermissionDenied) + if options.FailFunc != nil { + options.FailFunc(c, core.ErrPermissionDenied) } else { writeErrorResponse(c, core.ErrPermissionDenied) } @@ -217,8 +217,8 @@ func RoleMiddleware( // Get Manager | 获取 Manager mgr, err := stputil.GetManager(options.AuthType) if err != nil { - if options.AuthFailFunc != nil { - options.AuthFailFunc(c, err) + if options.FailFunc != nil { + options.FailFunc(c, err) } else { writeErrorResponse(c, err) } @@ -240,8 +240,8 @@ func RoleMiddleware( } if !ok { - if options.AuthFailFunc != nil { - options.AuthFailFunc(c, core.ErrRoleDenied) + if options.FailFunc != nil { + options.FailFunc(c, core.ErrRoleDenied) } else { writeErrorResponse(c, core.ErrRoleDenied) } From 196d215ae506a7987565271240e6044296b64ee6 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Tue, 6 Jan 2026 13:41:59 +0800 Subject: [PATCH 38/50] =?UTF-8?q?feat():=201=E3=80=81=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E9=83=A8=E5=88=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/errors.go | 2 +- stputil/stputil.go | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/core/errors.go b/core/errors.go index 5d09848..49f9d8a 100644 --- a/core/errors.go +++ b/core/errors.go @@ -141,7 +141,7 @@ var ( ErrSessionInvalidDataKey = fmt.Errorf("invalid session data key: key cannot be empty") // ErrSessionIDEmpty indicates that a session ID is empty or missing | Session ID 为空或缺失 - ErrSessionIDEmpty = errors.New("session id cannot be empty") + ErrSessionIDEmpty = fmt.Errorf("session id cannot be empty") ) // ============ System Errors | 系统错误 ============ diff --git a/stputil/stputil.go b/stputil/stputil.go index 868804f..7f98c6c 100644 --- a/stputil/stputil.go +++ b/stputil/stputil.go @@ -2,7 +2,7 @@ package stputil import ( "context" - "errors" + "fmt" "github.com/click33/sa-token-go/core/adapter" "github.com/click33/sa-token-go/core/config" "github.com/click33/sa-token-go/core/listener" @@ -1502,12 +1502,12 @@ func loadManager(autoType string) (*manager.Manager, error) { // Load the manager-example from the global map using the valid autoType | 使用有效的 autoType 从全局 map 中加载管理器 value, ok := globalManagerMap.Load(autoType) if !ok { - return nil, errors.New("manager-example not found for autoType: " + autoType) + return nil, fmt.Errorf("manager-example not found for autoType: " + autoType) } // Assert the loaded value to the correct type | 将加载的值断言为正确的类型 mgr, ok := value.(*manager.Manager) if !ok { - return nil, errors.New("invalid manager-example type for autoType: " + autoType) + return nil, fmt.Errorf("invalid manager-example type for autoType: " + autoType) } return mgr, nil } @@ -1527,7 +1527,7 @@ func toString(v interface{}) (string, error) { case uint64: return uint64ToString(val), nil // If it's uint64, convert to string | 如果是uint64,转换为string default: - return "", errors.New("Invalid type") // For other types, return error | 对于其他类型,返回错误 + return "", fmt.Errorf("Invalid type") // For other types, return error | 对于其他类型,返回错误 } } From 07178ca420d93e374699334207a80384ec32ace3 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Tue, 6 Jan 2026 16:31:56 +0800 Subject: [PATCH 39/50] =?UTF-8?q?feat():=201=E3=80=81=E5=AE=8C=E5=96=84qui?= =?UTF-8?q?ck-start=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/builder/builder.go | 8 +- core/manager/manager.go | 10 +- examples/annotation/annotation-example/go.mod | 6 +- examples/gf/gf-example/go.mod | 4 +- examples/gf/gf-example/main.go | 3 + examples/gin/gin-example/go.mod | 2 +- examples/gin/gin-simple/go.mod | 4 +- .../quick-start/complex-example/README.md | 3 + examples/quick-start/complex-example/go.mod | 9 + examples/quick-start/complex-example/main.go | 181 ++++++++++++++++++ examples/quick-start/simple-example/go.mod | 2 +- examples/quick-start/simple-example/main.go | 3 +- go.work | 1 + go.work.sum | 1 + 14 files changed, 217 insertions(+), 20 deletions(-) create mode 100644 examples/quick-start/complex-example/README.md create mode 100644 examples/quick-start/complex-example/go.mod create mode 100644 examples/quick-start/complex-example/main.go diff --git a/core/builder/builder.go b/core/builder/builder.go index 54b513d..42cee75 100644 --- a/core/builder/builder.go +++ b/core/builder/builder.go @@ -48,8 +48,8 @@ type Builder struct { log adapter.Log // log Log adapter for logging operations | 日志记录操作的适配器 pool adapter.Pool // Async task pool component | 异步任务协程池组件 - customPermissionListFunc func(loginID string) ([]string, error) // Custom permission provider | 自定义权限获取函数 - customRoleListFunc func(loginID string) ([]string, error) // Custom role provider | 自定义角色获取函数 + customPermissionListFunc func(loginID, authType string) ([]string, error) // Custom permission provider | 自定义权限获取函数 + customRoleListFunc func(loginID, authType string) ([]string, error) // Custom role provider | 自定义角色获取函数 } // NewBuilder creates a new builder with log configuration | 创建新的构建器(使用默认配置) @@ -511,13 +511,13 @@ func (b *Builder) SetPool(pool adapter.Pool) *Builder { } // SetCustomPermissionListFunc sets the custom permission provider | 设置自定义权限获取函数 -func (b *Builder) SetCustomPermissionListFunc(f func(loginID string) ([]string, error)) *Builder { +func (b *Builder) SetCustomPermissionListFunc(f func(loginID, authType string) ([]string, error)) *Builder { b.customPermissionListFunc = f return b } // SetCustomRoleListFunc sets the custom role provider | 设置自定义角色获取函数 -func (b *Builder) SetCustomRoleListFunc(f func(loginID string) ([]string, error)) *Builder { +func (b *Builder) SetCustomRoleListFunc(f func(loginID, authType string) ([]string, error)) *Builder { b.customRoleListFunc = f return b } diff --git a/core/manager/manager.go b/core/manager/manager.go index 4a1670e..c155872 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -51,12 +51,12 @@ type Manager struct { logger adapter.Log // Log adapter for logging operations | 日志适配器 pool adapter.Pool // Async task pool component | 异步任务协程池组件 - CustomPermissionListFunc func(loginID string) ([]string, error) // Custom permission func | 自定义权限获取函数 - CustomRoleListFunc func(loginID string) ([]string, error) // Custom role func | 自定义角色获取函数 + CustomPermissionListFunc func(loginID, authType string) ([]string, error) // Custom permission func | 自定义权限获取函数 + CustomRoleListFunc func(loginID, authType string) ([]string, error) // Custom role func | 自定义角色获取函数 } // NewManager creates and initializes a new Manager instance | 创建并初始化一个新的 Manager 实例 -func NewManager(cfg *config.Config, generator adapter.Generator, storage adapter.Storage, serializer adapter.Codec, logger adapter.Log, pool adapter.Pool, customPermissionListFunc, CustomRoleListFunc func(loginID string) ([]string, error)) *Manager { +func NewManager(cfg *config.Config, generator adapter.Generator, storage adapter.Storage, serializer adapter.Codec, logger adapter.Log, pool adapter.Pool, customPermissionListFunc, CustomRoleListFunc func(loginID, authType string) ([]string, error)) *Manager { // Use default configuration if cfg is nil | 如果未传入配置,则使用默认配置 if cfg == nil { @@ -804,7 +804,7 @@ func (m *Manager) RemovePermissionsByToken(ctx context.Context, tokenValue strin // GetPermissions Gets permission list | 获取权限列表 func (m *Manager) GetPermissions(ctx context.Context, loginID string) ([]string, error) { if m.CustomPermissionListFunc != nil { - perms, err := m.CustomPermissionListFunc(loginID) + perms, err := m.CustomPermissionListFunc(loginID, m.config.AuthType) if err != nil { return nil, err } @@ -1033,7 +1033,7 @@ func (m *Manager) RemoveRolesByToken(ctx context.Context, tokenValue string, rol // GetRoles gets role list for the specified loginID | 获取指定账号的角色列表 func (m *Manager) GetRoles(ctx context.Context, loginID string) ([]string, error) { if m.CustomRoleListFunc != nil { - perms, err := m.CustomRoleListFunc(loginID) + perms, err := m.CustomRoleListFunc(loginID, m.config.AuthType) if err != nil { return nil, err } diff --git a/examples/annotation/annotation-example/go.mod b/examples/annotation/annotation-example/go.mod index 3b134ce..595de28 100644 --- a/examples/annotation/annotation-example/go.mod +++ b/examples/annotation/annotation-example/go.mod @@ -11,9 +11,9 @@ require ( github.com/bytedance/sonic v1.11.6 // indirect github.com/bytedance/sonic/loader v0.1.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/click33/sa-token-go/core v0.1.6 // indirect - github.com/click33/sa-token-go/storage/memory v0.1.6 // indirect - github.com/click33/sa-token-go/stputil v0.1.5 // indirect + github.com/click33/sa-token-go/core v0.1.7 // indirect + github.com/click33/sa-token-go/storage/memory v0.1.7 // indirect + github.com/click33/sa-token-go/stputil v0.1.7 // indirect github.com/cloudwego/base64x v0.1.4 // indirect github.com/cloudwego/iasm v0.2.0 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect diff --git a/examples/gf/gf-example/go.mod b/examples/gf/gf-example/go.mod index 11e630a..1b9d7f8 100644 --- a/examples/gf/gf-example/go.mod +++ b/examples/gf/gf-example/go.mod @@ -10,8 +10,8 @@ require ( require ( github.com/BurntSushi/toml v1.5.0 // indirect github.com/clbanning/mxj/v2 v2.7.0 // indirect - github.com/click33/sa-token-go/core v0.1.6 // indirect - github.com/click33/sa-token-go/stputil v0.1.5 // indirect + github.com/click33/sa-token-go/core v0.1.7 // indirect + github.com/click33/sa-token-go/stputil v0.1.7 // indirect github.com/emirpasic/gods v1.18.1 // indirect github.com/fatih/color v1.18.0 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect diff --git a/examples/gf/gf-example/main.go b/examples/gf/gf-example/main.go index c1f70ec..5c46d8b 100644 --- a/examples/gf/gf-example/main.go +++ b/examples/gf/gf-example/main.go @@ -10,10 +10,13 @@ import ( ) func main() { + // redis存储实现 storage, err := sagf.NewRedisStorage("redis://:root@192.168.19.104:6379/0?dial_timeout=3&read_timeout=10s&max_retries=2") if err != nil { panic(err) } + // 内存存储实现 + //storage := sagf.NewMemoryStorage() // 使用 Builder 模式构建 Manager | Build Manager using Builder pattern manager := sagf.NewDefaultBuild(). diff --git a/examples/gin/gin-example/go.mod b/examples/gin/gin-example/go.mod index ba1e038..7d6ef85 100644 --- a/examples/gin/gin-example/go.mod +++ b/examples/gin/gin-example/go.mod @@ -10,7 +10,7 @@ require ( require ( github.com/bytedance/sonic v1.11.6 // indirect github.com/bytedance/sonic/loader v0.1.1 // indirect - github.com/click33/sa-token-go/core v0.1.6 // indirect + github.com/click33/sa-token-go/core v0.1.7 // indirect github.com/cloudwego/base64x v0.1.4 // indirect github.com/cloudwego/iasm v0.2.0 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect diff --git a/examples/gin/gin-simple/go.mod b/examples/gin/gin-simple/go.mod index 7f61fa4..6d3043f 100644 --- a/examples/gin/gin-simple/go.mod +++ b/examples/gin/gin-simple/go.mod @@ -10,8 +10,8 @@ require ( require ( github.com/bytedance/sonic v1.11.6 // indirect github.com/bytedance/sonic/loader v0.1.1 // indirect - github.com/click33/sa-token-go/core v0.1.6 // indirect - github.com/click33/sa-token-go/stputil v0.1.6 // indirect + github.com/click33/sa-token-go/core v0.1.7 // indirect + github.com/click33/sa-token-go/stputil v0.1.7 // indirect github.com/cloudwego/base64x v0.1.4 // indirect github.com/cloudwego/iasm v0.2.0 // indirect github.com/gabriel-vasile/mimetype v1.4.3 // indirect diff --git a/examples/quick-start/complex-example/README.md b/examples/quick-start/complex-example/README.md new file mode 100644 index 0000000..468badc --- /dev/null +++ b/examples/quick-start/complex-example/README.md @@ -0,0 +1,3 @@ +# 快速开始示例 + +这是一个复杂的 Sa-Token-Go 使用示例,展示了如何使用 `stputil` 全局工具类全面实现认证和授权功能。 \ No newline at end of file diff --git a/examples/quick-start/complex-example/go.mod b/examples/quick-start/complex-example/go.mod new file mode 100644 index 0000000..be42a55 --- /dev/null +++ b/examples/quick-start/complex-example/go.mod @@ -0,0 +1,9 @@ +module github.com/click33/sa-token-go/examples/quick-start/complex-example + +go 1.25.0 + +require ( + github.com/click33/sa-token-go/core v0.1.7 + github.com/click33/sa-token-go/storage/redis v0.1.7 + github.com/click33/sa-token-go/stputil v0.1.7 +) diff --git a/examples/quick-start/complex-example/main.go b/examples/quick-start/complex-example/main.go new file mode 100644 index 0000000..9cfb165 --- /dev/null +++ b/examples/quick-start/complex-example/main.go @@ -0,0 +1,181 @@ +// @Author daixk 2026/1/6 14:36:00 +package main + +import ( + "context" + "fmt" + "github.com/click33/sa-token-go/core/adapter" + "github.com/click33/sa-token-go/core/builder" + "github.com/click33/sa-token-go/core/config" + "github.com/click33/sa-token-go/storage/redis" + "github.com/click33/sa-token-go/stputil" + "time" +) + +func init() { + storage, err := redis.NewStorage("redis://:root@192.168.19.104:6379/0?dial_timeout=3&read_timeout=10s&max_retries=2") + if err != nil { + panic(err) + } + + stputil.SetManager( + builder.NewBuilder(). + // ========== 存储和Token ========== + SetStorage(storage). // 设置存储实现(默认内存,可配置Redis或自实现) + TokenName("satoken"). // Token 名称(也是 Cookie 名称) + Timeout(300). // Token 过期时间(秒) + MaxRefresh(150). // 自动续期触发阈值(秒) + RenewInterval(config.NoLimit). // 续期的最小间隔(秒) + ActiveTimeout(config.NoLimit). // 最大不活跃时间(秒) + IsConcurrent(true). // 是否允许并发登录 + IsShare(false). // 并发登录是否共享 Token + MaxLoginCount(2). // 最大在线 Token 数量 + IsReadBody(false). // 是否从请求体读取 Token + IsReadHeader(true). // 是否从 Header 读取 Token + IsReadCookie(false). // 是否从 Cookie 读取 Token + TokenStyle(adapter.TokenStyleUUID). // Token 样式 + TokenSessionCheckLogin(true). // 登录时是否校验Token会话 + AutoRenew(true). // 是否自动续期 + JwtSecretKey(""). // 设置JWT密钥(JWT模式才生效) + AuthType("auth"). // 认证体系类型 + KeyPrefix("satoken"). // 存储键前缀 + + // ========== Cookie配置 ========== + CookieDomain("example.com"). // Cookie域名 + CookiePath("/"). // Cookie路径 + CookieSecure(false). // 是否启用Secure + CookieHttpOnly(true). // 是否启用HttpOnly + CookieSameSite(config.SameSiteLax). // SameSite策略 + CookieMaxAge(300). // Cookie最大过期时间 + // CookieConfig(&config.CookieConfig{...}). // 可以直接设置完整Cookie配置 + + // ========== 日志配置 ========== + IsLog(true). // 是否打印操作日志 + IsPrintBanner(true). // 是否打印启动Banner + LoggerPath("./logs"). // 日志目录 + LoggerFileFormat("{Y}-{m}-{d}.log"). // 日志文件命名格式 + LoggerPrefix("[satoken]"). // 日志前缀 + LoggerLevel(adapter.LogLevelDebug). // 最低日志级别 + LoggerTimeFormat("2006-01-02 15:04:05"). // 时间戳格式 + LoggerStdout(true). // 是否打印到控制台 + LoggerStdoutOnly(false). // 是否只打印到控制台 + LoggerQueueSize(4096). // 异步写入队列大小 + LoggerRotateSize(1024 * 1024 * 10). // 滚动文件大小阈值 10MB + LoggerRotateExpire(24 * time.Hour). // 滚动文件时间间隔 + LoggerRotateBackupLimit(30). // 最大备份文件数量 + LoggerRotateBackupDays(7). // 备份文件保留天数 + // LoggerConfig(&slog.LoggerConfig{...}). // 可以直接设置完整日志配置 + + // ========== 续期池配置 ========== + RenewPoolMinSize(10). // 最小协程数 + RenewPoolMaxSize(50). // 最大协程数 + RenewPoolScaleUpRate(0.7). // 扩容阈值 + RenewPoolScaleDownRate(0.3). // 缩容阈值 + RenewPoolCheckInterval(5 * time.Second). // 自动扩缩容检查间隔 + RenewPoolExpiry(60 * time.Second). // 空闲协程过期时间 + RenewPoolPrintStatusInterval(30 * time.Second). // 状态打印间隔 + RenewPoolPreAlloc(false). // 是否预分配内存 + RenewPoolNonBlocking(true). // 是否非阻塞模式 + // RenewPoolConfig(&ants.RenewPoolConfig{...}). // 可以直接设置完整续期池配置 + + // ========== 自定义适配器 ========== + // SetGenerator(generator). // 自定义Token生成器 + // SetCodec(codec). // 自定义编码器 + // SetLog(log). // 自定义日志 + // SetPool(pool). // 自定义协程池 + + // ========== 自定义权限与角色 ========== + SetCustomPermissionListFunc(func(loginID, authType string) ([]string, error) { + if loginID == "1" { + return []string{"admin:read", "admin:update"}, nil + } + return []string{"user:read"}, nil + }). + SetCustomRoleListFunc(func(loginID, authType string) ([]string, error) { + if loginID == "1" { + return []string{"admin", "guanliyuan"}, nil + } + return []string{"user"}, nil + }). + + // ========== JWT模式 ========== + // Jwt("your-secret-key"). // 如果需要JWT模式,可直接启用 + + Build(), // 构建Manager + ) +} + +func main() { + ctx := context.Background() + + // 1. 登录(支持多种类型) + fmt.Println("1. 登录测试") + token1, _ := stputil.Login(ctx, 1000) + fmt.Printf(" 用户1000登录成功,Token: %s\n", token1) + + token2, _ := stputil.Login(ctx, "user123") + fmt.Printf(" 用户user123登录成功,Token: %s\n\n", token2) + + // 2. 检查登录 + fmt.Println("2. 检查登录") + fmt.Printf(" Token1是否登录: %v\n", stputil.IsLogin(ctx, token1)) + fmt.Printf(" Token2是否登录: %v\n\n", stputil.IsLogin(ctx, token2)) + + // 3. 获取登录ID + fmt.Println("3. 获取登录ID") + loginID1, _ := stputil.GetLoginID(ctx, token1) + loginID2, _ := stputil.GetLoginID(ctx, token2) + fmt.Printf(" Token1的登录ID: %s\n", loginID1) + fmt.Printf(" Token2的登录ID: %s\n\n", loginID2) + + // 4. 权限管理 + fmt.Println("4. 权限管理") + _ = stputil.SetPermissions(ctx, 1000, []string{"user:read", "user:write", "admin:*"}) + fmt.Println(" 已设置权限: user:read, user:write, admin:*") + + fmt.Printf(" 是否有user:read权限: %v\n", stputil.HasPermission(ctx, 1000, "user:read")) + fmt.Printf(" 是否有user:delete权限: %v\n", stputil.HasPermission(ctx, 1000, "user:delete")) + fmt.Printf(" 是否有admin:delete权限(通配符): %v\n\n", stputil.HasPermission(ctx, 1000, "admin:delete")) + + // 5. 角色管理 + fmt.Println("5. 角色管理") + _ = stputil.SetRoles(ctx, 1000, []string{"admin", "manager-example"}) + fmt.Println(" 已设置角色: admin, manager-example") + + fmt.Printf(" 是否有admin角色: %v\n", stputil.HasRole(ctx, 1000, "admin")) + fmt.Printf(" 是否有user角色: %v\n\n", stputil.HasRole(ctx, 1000, "user")) + + // 6. Session管理 + fmt.Println("6. Session管理") + sess, _ := stputil.GetSession(ctx, 1000) + _ = sess.Set(ctx, "nickname", "张三") + _ = sess.Set(ctx, "age", 25) + fmt.Printf(" Session已设置: nickname=%s, age=%d\n", sess.GetString("nickname"), sess.GetInt("age")) + + // 7. 账号封禁 + fmt.Println("\n7. 账号封禁") + _ = stputil.Disable(ctx, "user123", 1*time.Hour) + fmt.Printf(" 用户user123已被封禁1小时\n") + fmt.Printf(" 是否被封禁: %v\n", stputil.IsDisable(ctx, "user123")) + + remainingTime, _ := stputil.GetDisableTime(ctx, "user123") + fmt.Printf(" 剩余封禁时间: %d秒\n", remainingTime) + + // 8. 解封 + _ = stputil.Untie(ctx, "user123") + fmt.Printf(" 已解封,是否被封禁: %v\n\n", stputil.IsDisable(ctx, "user123")) + + // 9. Token信息 + fmt.Println("9. Token信息") + info, _ := stputil.GetTokenInfo(ctx, token1) + fmt.Printf(" 登录ID: %s\n", info.LoginID) + fmt.Printf(" 设备: %s\n", info.Device) + fmt.Printf(" 创建时间: %d\n", info.CreateTime) + fmt.Printf(" 活跃时间: %d\n\n", info.ActiveTime) + + // 10. 登出 + fmt.Println("10. 登出") + _ = stputil.Logout(ctx, 1000) + fmt.Printf(" 用户1000已登出\n") + fmt.Printf(" Token1是否还有效: %v\n", stputil.IsLogin(ctx, token1)) +} diff --git a/examples/quick-start/simple-example/go.mod b/examples/quick-start/simple-example/go.mod index b1798a7..21a9583 100644 --- a/examples/quick-start/simple-example/go.mod +++ b/examples/quick-start/simple-example/go.mod @@ -1,4 +1,4 @@ -module github.com/click33/sa-token-go/examples/simple-example +module github.com/click33/sa-token-go/examples/quick-start/simple-example go 1.25.0 diff --git a/examples/quick-start/simple-example/main.go b/examples/quick-start/simple-example/main.go index 7294fb2..beae5c3 100644 --- a/examples/quick-start/simple-example/main.go +++ b/examples/quick-start/simple-example/main.go @@ -16,8 +16,7 @@ func init() { builder.NewBuilder(). SetStorage(memory.NewStorage()). TokenName("Authorization"). - Timeout(86400). // 24小时 - MaxRefresh(43200). // 12小时 + Timeout(86400). TokenStyle(adapter.TokenStyleUUID). Build(), ) diff --git a/go.work b/go.work index b60e2c2..9e0fb08 100644 --- a/go.work +++ b/go.work @@ -28,6 +28,7 @@ use ( // examples - quick-start ./examples/quick-start/simple-example + ./examples/quick-start/complex-example // generator ./generator/sgenerator diff --git a/go.work.sum b/go.work.sum index 7d42bc8..906cf9b 100644 --- a/go.work.sum +++ b/go.work.sum @@ -52,6 +52,7 @@ github.com/click33/sa-token-go/integrations/gin v0.1.6/go.mod h1:A8Ds3bUalQQcH2v github.com/click33/sa-token-go/integrations/gin v0.1.7/go.mod h1:1STqW8wTUJ/tpfw/E22HsPzQVFnc7dE/AW0w44XQ2co= github.com/click33/sa-token-go/storage/memory v0.1.4/go.mod h1:nqyuEh23mNjcuG3aI/BqJFz71zkpsgjdStW1BC5lkB0= github.com/click33/sa-token-go/storage/memory v0.1.7/go.mod h1:wnQVAHnFKWs6CzmM0DSRZSE2ADPXQQ9AIrWxdmzjz3Q= +github.com/click33/sa-token-go/storage/redis v0.1.7/go.mod h1:pPxB/qFRNc/TUv0mMjwPwRVs1ZZB22YCknR1H/rvQ8I= github.com/click33/sa-token-go/stputil v0.1.6/go.mod h1:G4vYhljpN1SeGLYHWRslYncHJvn52CksHGjBzUNITFA= github.com/click33/sa-token-go/stputil v0.1.7/go.mod h1:YY4NzfwVMwPUQLDBk9C5eVLQ08oI3vNSFQhBuZBPtgY= github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= From 42d656ec0e1bf45ce44ac9d86078e6382121e54b Mon Sep 17 00:00:00 2001 From: daixk <568562991@qq.com> Date: Tue, 6 Jan 2026 22:47:39 +0800 Subject: [PATCH 40/50] =?UTF-8?q?feat():=201=E3=80=81=E6=96=B0=E5=A2=9Egf?= =?UTF-8?q?=E5=8C=85=E5=88=9B=E5=BB=BAGoFrame=E6=97=A5=E5=BF=97=E9=80=82?= =?UTF-8?q?=E9=85=8D=E5=99=A8=E6=96=B9=E6=B3=95=202=E3=80=81=E6=96=B0?= =?UTF-8?q?=E5=A2=9Egf=E5=8C=85=E5=9F=BA=E4=BA=8E=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=E7=9A=84=E6=9D=83=E9=99=90=E6=A0=A1=E9=AA=8C=E4=B8=AD=E9=97=B4?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- integrations/gf/export.go | 7 +++++ integrations/gf/middleware.go | 58 +++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) diff --git a/integrations/gf/export.go b/integrations/gf/export.go index 2053b44..fa8404a 100644 --- a/integrations/gf/export.go +++ b/integrations/gf/export.go @@ -2,6 +2,7 @@ package gf import ( "context" + "github.com/gogf/gf/v2/os/glog" "time" "github.com/click33/sa-token-go/codec/json" @@ -16,6 +17,7 @@ import ( "github.com/click33/sa-token-go/core/security" "github.com/click33/sa-token-go/core/session" "github.com/click33/sa-token-go/generator/sgenerator" + "github.com/click33/sa-token-go/log/gf" "github.com/click33/sa-token-go/log/nop" "github.com/click33/sa-token-go/log/slog" "github.com/click33/sa-token-go/pool/ants" @@ -312,6 +314,11 @@ func NewNopLogger() *nop.NopLogger { return nop.NewNopLogger() } +// NewGfLogger creates a GF logger adapter | 创建GoFrame日志适配器 +func NewGfLogger(ctx context.Context, log *glog.Logger) *gf.GFLogger { + return gf.NewGFLogger(ctx, log) +} + // ============ Generator Constructors | 生成器构造函数 ============ // NewTokenGenerator creates a new token generator | 创建Token生成器 diff --git a/integrations/gf/middleware.go b/integrations/gf/middleware.go index 3afeadd..3fcae2d 100644 --- a/integrations/gf/middleware.go +++ b/integrations/gf/middleware.go @@ -190,6 +190,64 @@ func PermissionMiddleware( } } +// PermissionPathMiddleware permission check middleware | 基于路径的权限校验中间件 +func PermissionPathMiddleware( + permissions []string, + opts ...AuthOption, +) ghttp.HandlerFunc { + + options := defaultAuthOptions() + for _, opt := range opts { + opt(options) + } + + return func(r *ghttp.Request) { + // Create a per-request copy of permissions and append current path | 每次请求创建权限副本并追加当前路径 + reqPermissions := append([]string{}, permissions...) + reqPermissions = append(reqPermissions, r.URL.Path) + + if len(reqPermissions) == 0 { + r.Middleware.Next() + return + } + + // Get Manager | 获取 Manager + mgr, err := stputil.GetManager(options.AuthType) + if err != nil { + if options.FailFunc != nil { + options.FailFunc(r, err) + } else { + writeErrorResponse(r, err) + } + return + } + + // 构建 Sa-Token 上下文 | Build Sa-Token context + saCtx := getSaContext(r, mgr) + tokenValue := saCtx.GetTokenValue() + ctx := r.Context() + + // Permission check | 权限校验 + var ok bool + if options.LogicType == LogicAnd { + ok = mgr.HasPermissionsAndByToken(ctx, tokenValue, reqPermissions) + } else { + ok = mgr.HasPermissionsOrByToken(ctx, tokenValue, reqPermissions) + } + + if !ok { + if options.FailFunc != nil { + options.FailFunc(r, core.ErrPermissionDenied) + } else { + writeErrorResponse(r, core.ErrPermissionDenied) + } + return + } + + r.Middleware.Next() + } +} + // RoleMiddleware role check middleware | 角色校验中间件 func RoleMiddleware( roles []string, From 0eba7af15ef1100a723344f77919a40eb3b74dfb Mon Sep 17 00:00:00 2001 From: daixk <568562991@qq.com> Date: Tue, 6 Jan 2026 23:45:13 +0800 Subject: [PATCH 41/50] =?UTF-8?q?fix():=201=E3=80=81=E4=BF=AE=E6=94=B9gf?= =?UTF-8?q?=E5=8C=85=E4=B8=AD=E4=B8=AD=E9=97=B4=E4=BB=B6CheckLoginWithStat?= =?UTF-8?q?e=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- integrations/gf/middleware.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integrations/gf/middleware.go b/integrations/gf/middleware.go index 3fcae2d..1d478b1 100644 --- a/integrations/gf/middleware.go +++ b/integrations/gf/middleware.go @@ -80,7 +80,7 @@ func AuthMiddleware(opts ...AuthOption) ghttp.HandlerFunc { tokenValue := saCtx.GetTokenValue() // 检查登录 | Check login - err = mgr.CheckLogin(r.Context(), tokenValue) + _, err = mgr.CheckLoginWithState(r.Context(), tokenValue) if err != nil { if options.FailFunc != nil { options.FailFunc(r, err) From b2872ee025a77dd16a634956638f70d1bf7d0865 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Wed, 7 Jan 2026 13:39:54 +0800 Subject: [PATCH 42/50] =?UTF-8?q?feat():=201=E3=80=81=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/config/consts.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/core/config/consts.go b/core/config/consts.go index 4690b38..ef4cbb4 100644 --- a/core/config/consts.go +++ b/core/config/consts.go @@ -15,11 +15,11 @@ const ( // Default configuration constants | 默认配置常量 const ( - DefaultTokenName = "satoken" // Default token name | 默认Token名称 - DefaultKeyPrefix = "satoken:" // Default Redis key prefix | 默认Redis键前缀 - DefaultAuthType = "defaultAuthType:" // Default AuthType | 默认认证体系键前缀 - DefaultTimeout = 2592000 // 30 days (seconds) | 30天(秒) - DefaultMaxLoginCount = 12 // Maximum concurrent logins | 最大并发登录数 - DefaultCookiePath = "/" // Default cookie path | 默认Cookie路径 - NoLimit = -1 // No limit flag | 不限制标志 + DefaultTokenName = "satoken" // Default token name | 默认Token名称 + DefaultKeyPrefix = "satoken:" // Default Redis key prefix | 默认Redis键前缀 + DefaultAuthType = "auth:" // Default AuthType | 默认认证体系键前缀 + DefaultTimeout = 2592000 // 30 days (seconds) | 30天(秒) + DefaultMaxLoginCount = 12 // Maximum concurrent logins | 最大并发登录数 + DefaultCookiePath = "/" // Default cookie path | 默认Cookie路径 + NoLimit = -1 // No limit flag | 不限制标志 ) From 224e3ede181f001d6950e40efa57e2615d8b5ea8 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Thu, 8 Jan 2026 22:03:47 +0800 Subject: [PATCH 43/50] =?UTF-8?q?feat():=201=E3=80=81=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=9E=84=E5=BB=BAmanager=E4=B8=AD=E6=97=A5=E5=BF=97=E4=B8=8E?= =?UTF-8?q?=E7=BB=AD=E6=9C=9F=E6=B1=A0=E7=9A=84=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/builder/builder.go | 43 +++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/core/builder/builder.go b/core/builder/builder.go index 42cee75..2ec01bf 100644 --- a/core/builder/builder.go +++ b/core/builder/builder.go @@ -556,6 +556,7 @@ func (b *Builder) Clone() *Builder { // Build builds Manager and prints startup banner | 构建Manager并打印启动Banner func (b *Builder) Build() *manager.Manager { + // 如果为cookieConfig为nil 则初始化默认cookieConfig if b.cookieConfig == nil { b.cookieConfig = config.DefaultCookieConfig() } @@ -584,7 +585,7 @@ func (b *Builder) Build() *manager.Manager { AuthType: b.authType, } - // Validate configuration | 验证配置 + // 验证基础配置 err := cfg.Validate() if err != nil { panic("Invalid config: " + err.Error()) @@ -604,30 +605,34 @@ func (b *Builder) Build() *manager.Manager { } // 日志 - if b.isLog && b.log == nil { - if b.logConfig == nil { - b.logConfig = slog.DefaultLoggerConfig() - } - b.log, err = slog.NewLoggerWithConfig(b.logConfig) - if err != nil { - panic("Invalid LoggerConfig: " + err.Error()) + if b.isLog { + if b.log == nil { + if b.logConfig == nil { + b.logConfig = slog.DefaultLoggerConfig() + } + b.log, err = slog.NewLoggerWithConfig(b.logConfig) + if err != nil { + panic("Invalid LoggerConfig: " + err.Error()) + } } } else { b.log = nop.NewNopLogger() } // 续期池 - if b.autoRenew && b.pool == nil { - if b.renewPoolConfig == nil { - b.renewPoolConfig = ants.DefaultRenewPoolConfig() - } - err = b.renewPoolConfig.Validate() - if err != nil { - panic("Invalid RenewPoolConfig: " + err.Error()) - } - b.pool, err = ants.NewRenewPoolManagerWithConfig(b.renewPoolConfig) - if err != nil { - panic(err) + if b.autoRenew { + if b.pool == nil { + if b.renewPoolConfig == nil { + b.renewPoolConfig = ants.DefaultRenewPoolConfig() + } + err = b.renewPoolConfig.Validate() + if err != nil { + panic("Invalid RenewPoolConfig: " + err.Error()) + } + b.pool, err = ants.NewRenewPoolManagerWithConfig(b.renewPoolConfig) + if err != nil { + panic(err) + } } } From e4d12bbaa6a1371ec20b996b17f53cbd4908b10e Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Fri, 9 Jan 2026 11:35:59 +0800 Subject: [PATCH 44/50] =?UTF-8?q?feat():=201=E3=80=81=E6=9B=B4=E6=96=B0gf?= =?UTF-8?q?=E4=BB=A5=E5=8F=8Agin=E5=8C=85=E4=B8=AD=E7=9A=84ctx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/manager/manager.go | 40 +++++++++++++++++++++++++++------- integrations/gf/annotation.go | 5 +++-- integrations/gf/middleware.go | 19 +++++++--------- integrations/gin/middleware.go | 15 ++++++------- 4 files changed, 50 insertions(+), 29 deletions(-) diff --git a/core/manager/manager.go b/core/manager/manager.go index c155872..9e17e19 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -1528,23 +1528,35 @@ func (m *Manager) renewToken(ctx context.Context, tokenValue string, info *Token // Renew token TTL | 续期Token的TTL if tokenInfo, err := m.serializer.Encode(info); err == nil { - _ = m.storage.Set(ctx, m.getTokenKey(tokenValue), tokenInfo, exp) + err = m.storage.Set(ctx, m.getTokenKey(tokenValue), tokenInfo, exp) + if err != nil { + m.logger.Error(err) + } } // Renew accountKey TTL | 续期账号映射的TTL - _ = m.storage.Expire(ctx, m.getAccountKey(info.LoginID, info.Device), exp) + err := m.storage.Expire(ctx, m.getAccountKey(info.LoginID, info.Device), exp) + if err != nil { + m.logger.Error(err) + } // Renew session TTL | 续期Session的TTL - _ = m.RenewSession(ctx, info.LoginID, exp) + err = m.RenewSession(ctx, info.LoginID, exp) + if err != nil { + m.logger.Error(err) + } // Set minimal renewal interval marker | 设置最小续期间隔标记 if m.config.RenewInterval > 0 { - _ = m.storage.Set( + err = m.storage.Set( ctx, m.getRenewKey(tokenValue), time.Now().Unix(), time.Duration(m.config.RenewInterval)*time.Second, ) + if err != nil { + m.logger.Error(err) + } } } @@ -1559,14 +1571,26 @@ func (m *Manager) removeTokenChain(ctx context.Context, tokenValue string, info } // Delete token-info mapping | 删除Token信息映射 - _ = m.storage.Delete(ctx, m.getTokenKey(tokenValue)) + err := m.storage.Delete(ctx, m.getTokenKey(tokenValue)) + if err != nil { + m.logger.Error(err) + } // Delete account-token mapping | 删除账号映射 - _ = m.storage.Delete(ctx, m.getAccountKey(info.LoginID, info.Device)) + err = m.storage.Delete(ctx, m.getAccountKey(info.LoginID, info.Device)) + if err != nil { + m.logger.Error(err) + } // Delete renew key | 删除续期标记 - _ = m.storage.Delete(ctx, m.getRenewKey(tokenValue)) + err = m.storage.Delete(ctx, m.getRenewKey(tokenValue)) + if err != nil { + m.logger.Error(err) + } // Optionally destroy session | 可选销毁Session if len(destroySession) > 0 && destroySession[0] { - _ = m.DeleteSession(ctx, info.LoginID) + err = m.DeleteSession(ctx, info.LoginID) + if err != nil { + m.logger.Error(err) + } } // Trigger event notification | 触发事件通知 diff --git a/integrations/gf/annotation.go b/integrations/gf/annotation.go index 3890a98..8eec75c 100644 --- a/integrations/gf/annotation.go +++ b/integrations/gf/annotation.go @@ -51,7 +51,7 @@ func GetHandler(handler ghttp.HandlerFunc, annotations ...*Annotation) ghttp.Han return } - ctx := r.Context() + ctx := context.Background() // Get manager-example | 获取 Manager mgr, err := stputil.GetManager(ann.AuthType) @@ -70,7 +70,8 @@ func GetHandler(handler ghttp.HandlerFunc, annotations ...*Annotation) ghttp.Han } // Check login | 检查登录 - if err := mgr.CheckLogin(ctx, token); err != nil { + _, err = mgr.CheckLoginWithState(ctx, token) + if err != nil { writeErrorResponse(r, err) return } diff --git a/integrations/gf/middleware.go b/integrations/gf/middleware.go index 1d478b1..d030ea7 100644 --- a/integrations/gf/middleware.go +++ b/integrations/gf/middleware.go @@ -1,6 +1,7 @@ package gf import ( + "context" "errors" "net/http" @@ -75,12 +76,12 @@ func AuthMiddleware(opts ...AuthOption) ghttp.HandlerFunc { return } - // 获取 token | Get token + ctx := context.Background() saCtx := getSaContext(r, mgr) tokenValue := saCtx.GetTokenValue() // 检查登录 | Check login - _, err = mgr.CheckLoginWithState(r.Context(), tokenValue) + _, err = mgr.CheckLoginWithState(ctx, tokenValue) if err != nil { if options.FailFunc != nil { options.FailFunc(r, err) @@ -113,12 +114,11 @@ func AuthWithStateMiddleware(opts ...AuthOption) ghttp.HandlerFunc { return } - // 构建 Sa-Token 上下文 | Build Sa-Token context + ctx := context.Background() saCtx := getSaContext(r, mgr) tokenValue := saCtx.GetTokenValue() - // 检查登录并返回状态 | Check login with state - _, err = mgr.CheckLoginWithState(r.Context(), tokenValue) + _, err = mgr.CheckLoginWithState(ctx, tokenValue) if err != nil { // 用户自定义回调优先 @@ -164,10 +164,9 @@ func PermissionMiddleware( return } - // 构建 Sa-Token 上下文 | Build Sa-Token context + ctx := context.Background() saCtx := getSaContext(r, mgr) tokenValue := saCtx.GetTokenValue() - ctx := r.Context() // Permission check | 权限校验 var ok bool @@ -222,10 +221,9 @@ func PermissionPathMiddleware( return } - // 构建 Sa-Token 上下文 | Build Sa-Token context + ctx := context.Background() saCtx := getSaContext(r, mgr) tokenValue := saCtx.GetTokenValue() - ctx := r.Context() // Permission check | 权限校验 var ok bool @@ -277,10 +275,9 @@ func RoleMiddleware( return } - // 构建 Sa-Token 上下文 | Build Sa-Token context + ctx := context.Background() saCtx := getSaContext(r, mgr) tokenValue := saCtx.GetTokenValue() - ctx := r.Context() // Role check | 角色校验 var ok bool diff --git a/integrations/gin/middleware.go b/integrations/gin/middleware.go index 668c5a1..6f8bb41 100644 --- a/integrations/gin/middleware.go +++ b/integrations/gin/middleware.go @@ -1,6 +1,7 @@ package gin import ( + "context" "errors" "net/http" @@ -76,12 +77,12 @@ func AuthMiddleware(opts ...AuthOption) gin.HandlerFunc { return } - // 获取 token | Get token + ctx := context.Background() saCtx := getSaContext(c, mgr) tokenValue := saCtx.GetTokenValue() // 检查登录 | Check login - err = mgr.CheckLogin(c.Request.Context(), tokenValue) + err = mgr.CheckLogin(ctx, tokenValue) if err != nil { if options.FailFunc != nil { options.FailFunc(c, err) @@ -116,12 +117,12 @@ func AuthWithStateMiddleware(opts ...AuthOption) gin.HandlerFunc { return } - // 构建 Sa-Token 上下文 | Build Sa-Token context + ctx := context.Background() saCtx := getSaContext(c, mgr) tokenValue := saCtx.GetTokenValue() // 检查登录并返回状态 | Check login with state - _, err = mgr.CheckLoginWithState(c.Request.Context(), tokenValue) + _, err = mgr.CheckLoginWithState(ctx, tokenValue) if err != nil { // 用户自定义回调优先 @@ -169,10 +170,9 @@ func PermissionMiddleware( return } - // 构建 Sa-Token 上下文 | Build Sa-Token context + ctx := c.Request.Context() saCtx := getSaContext(c, mgr) tokenValue := saCtx.GetTokenValue() - ctx := c.Request.Context() // Permission check | 权限校验 var ok bool @@ -226,10 +226,9 @@ func RoleMiddleware( return } - // 构建 Sa-Token 上下文 | Build Sa-Token context + ctx := c.Request.Context() saCtx := getSaContext(c, mgr) tokenValue := saCtx.GetTokenValue() - ctx := c.Request.Context() // Role check | 角色校验 var ok bool From c12dc50e0b4f97c2d85b7e686ad05b5cbe60af07 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Fri, 9 Jan 2026 14:37:42 +0800 Subject: [PATCH 45/50] =?UTF-8?q?feat():=201=E3=80=81=E5=AE=8C=E5=96=84gf?= =?UTF-8?q?=E5=8C=85=E4=B8=AD=E9=97=B4=E4=BB=B6=E4=BB=A5=E5=8F=8A=E7=A4=BA?= =?UTF-8?q?=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/gf/gf-example/main.go | 8 + integrations/gf/annotation.go | 263 +++++++++++++++++++-------------- integrations/gf/middleware.go | 48 +++++- 3 files changed, 199 insertions(+), 120 deletions(-) diff --git a/examples/gf/gf-example/main.go b/examples/gf/gf-example/main.go index 5c46d8b..7ef9ae2 100644 --- a/examples/gf/gf-example/main.go +++ b/examples/gf/gf-example/main.go @@ -1,6 +1,7 @@ package main import ( + "github.com/gogf/gf/v2/os/gctx" "net/http" sagf "github.com/click33/sa-token-go/integrations/gf" @@ -28,6 +29,7 @@ func main() { // 注册 Manager | Register Manager sagf.SetManager(manager) + ctx := gctx.New() s := g.Server() // 首页路由 | Home route @@ -96,6 +98,7 @@ func main() { s.Group("/", func(group *ghttp.RouterGroup) { group.Middleware(sagf.AuthMiddleware( + ctx, sagf.WithFailFunc(func(r *ghttp.Request, err error) { r.Response.WriteStatusExit(http.StatusOK, g.Map{ "code": sagf.CodeNotLogin, @@ -134,6 +137,7 @@ func main() { // 受保护的路由组 | Protected route group protected := s.Group("/").Middleware( sagf.AuthMiddleware( + ctx, sagf.WithFailFunc(func(r *ghttp.Request, err error) { r.Response.WriteStatusExit(http.StatusOK, g.Map{ "code": sagf.CodeNotLogin, @@ -190,6 +194,7 @@ func main() { // 需要特定权限的路由 | Routes requiring specific permissions permGroup := s.Group("/").Middleware( sagf.AuthMiddleware( + ctx, sagf.WithFailFunc(func(r *ghttp.Request, err error) { r.Response.WriteStatusExit(http.StatusOK, g.Map{ "code": sagf.CodeNotLogin, @@ -198,6 +203,7 @@ func main() { }), ), sagf.PermissionMiddleware( + ctx, []string{"admin:read", "admin:delete"}, sagf.WithLogicType(sagf.LogicAnd), sagf.WithFailFunc(func(r *ghttp.Request, err error) { @@ -220,6 +226,7 @@ func main() { // 需要特定角色的路由 | Routes requiring specific roles roleGroup := s.Group("/").Middleware( sagf.AuthMiddleware( + ctx, sagf.WithFailFunc(func(r *ghttp.Request, err error) { r.Response.WriteStatusExit(http.StatusOK, g.Map{ "code": sagf.CodeNotLogin, @@ -228,6 +235,7 @@ func main() { }), ), sagf.RoleMiddleware( + ctx, []string{"super-admin"}, sagf.WithLogicType(sagf.LogicAnd), sagf.WithFailFunc(func(r *ghttp.Request, err error) { diff --git a/integrations/gf/annotation.go b/integrations/gf/annotation.go index 8eec75c..46ef561 100644 --- a/integrations/gf/annotation.go +++ b/integrations/gf/annotation.go @@ -22,7 +22,7 @@ type Annotation struct { } // GetHandler gets handler with annotations | 获取带注解的处理器 -func GetHandler(handler ghttp.HandlerFunc, annotations ...*Annotation) ghttp.HandlerFunc { +func GetHandler(ctx context.Context, handler ghttp.HandlerFunc, failFunc func(r *ghttp.Request, err error), annotations ...*Annotation) ghttp.HandlerFunc { return func(r *ghttp.Request) { // Ignore authentication | 忽略认证直接放行 if len(annotations) > 0 && annotations[0].Ignore { @@ -51,12 +51,14 @@ func GetHandler(handler ghttp.HandlerFunc, annotations ...*Annotation) ghttp.Han return } - ctx := context.Background() - // Get manager-example | 获取 Manager mgr, err := stputil.GetManager(ann.AuthType) if err != nil { - writeErrorResponse(r, err) + if failFunc != nil { + failFunc(r, err) + } else { + writeErrorResponse(r, err) + } return } @@ -64,15 +66,14 @@ func GetHandler(handler ghttp.HandlerFunc, annotations ...*Annotation) ghttp.Han saCtx := getSaContext(r, mgr) token := saCtx.GetTokenValue() - if token == "" { - writeErrorResponse(r, core.NewNotLoginError()) - return - } - // Check login | 检查登录 _, err = mgr.CheckLoginWithState(ctx, token) if err != nil { - writeErrorResponse(r, err) + if failFunc != nil { + failFunc(r, err) + } else { + writeErrorResponse(r, err) + } return } @@ -81,7 +82,11 @@ func GetHandler(handler ghttp.HandlerFunc, annotations ...*Annotation) ghttp.Han if ann.CheckDisable || len(ann.CheckPermission) > 0 || len(ann.CheckRole) > 0 { loginID, err = mgr.GetLoginIDNotCheck(ctx, token) if err != nil { - writeErrorResponse(r, err) + if failFunc != nil { + failFunc(r, err) + } else { + writeErrorResponse(r, err) + } return } } @@ -89,7 +94,11 @@ func GetHandler(handler ghttp.HandlerFunc, annotations ...*Annotation) ghttp.Han // Check if account is disabled | 检查是否被封禁 if ann.CheckDisable { if mgr.IsDisable(ctx, loginID) { - writeErrorResponse(r, core.NewAccountDisabledError(loginID)) + if failFunc != nil { + failFunc(r, core.NewAccountDisabledError(loginID)) + } else { + writeErrorResponse(r, core.NewAccountDisabledError(loginID)) + } return } } @@ -103,7 +112,11 @@ func GetHandler(handler ghttp.HandlerFunc, annotations ...*Annotation) ghttp.Han ok = mgr.HasPermissionsOr(ctx, loginID, ann.CheckPermission) } if !ok { - writeErrorResponse(r, core.NewPermissionDeniedError(strings.Join(ann.CheckPermission, ","))) + if failFunc != nil { + failFunc(r, core.NewPermissionDeniedError(strings.Join(ann.CheckPermission, ","))) + } else { + writeErrorResponse(r, core.NewPermissionDeniedError(strings.Join(ann.CheckPermission, ","))) + } return } } @@ -117,7 +130,11 @@ func GetHandler(handler ghttp.HandlerFunc, annotations ...*Annotation) ghttp.Han ok = mgr.HasRolesOr(ctx, loginID, ann.CheckRole) } if !ok { - writeErrorResponse(r, core.NewRoleDeniedError(strings.Join(ann.CheckRole, ","))) + if failFunc != nil { + failFunc(r, core.NewRoleDeniedError(strings.Join(ann.CheckRole, ","))) + } else { + writeErrorResponse(r, core.NewRoleDeniedError(strings.Join(ann.CheckRole, ","))) + } return } } @@ -132,149 +149,171 @@ func GetHandler(handler ghttp.HandlerFunc, annotations ...*Annotation) ghttp.Han } // CheckLoginMiddleware decorator for login checking | 检查登录装饰器 -func CheckLoginMiddleware(authType ...string) ghttp.HandlerFunc { +func CheckLoginMiddleware( + ctx context.Context, + handler ghttp.HandlerFunc, + failFunc func(r *ghttp.Request, err error), + authType ...string, +) ghttp.HandlerFunc { ann := &Annotation{CheckLogin: true} if len(authType) > 0 { ann.AuthType = authType[0] } - return GetHandler(nil, ann) + return GetHandler(ctx, handler, failFunc, ann) } // CheckRoleMiddleware decorator for role checking | 检查角色装饰器 -func CheckRoleMiddleware(roles ...string) ghttp.HandlerFunc { - return GetHandler(nil, &Annotation{CheckRole: roles}) -} - -// CheckRoleMiddlewareWithAuthType decorator for role checking with auth type | 检查角色装饰器(带认证类型) -func CheckRoleMiddlewareWithAuthType(authType string, roles ...string) ghttp.HandlerFunc { - return GetHandler(nil, &Annotation{CheckRole: roles, AuthType: authType}) +func CheckRoleMiddleware( + ctx context.Context, + roles []string, + handler ghttp.HandlerFunc, + failFunc func(r *ghttp.Request, err error), + authType ...string, +) ghttp.HandlerFunc { + ann := &Annotation{CheckRole: roles} + if len(authType) > 0 { + ann.AuthType = authType[0] + } + return GetHandler(ctx, handler, failFunc, ann) } // CheckPermissionMiddleware decorator for permission checking | 检查权限装饰器 -func CheckPermissionMiddleware(perms ...string) ghttp.HandlerFunc { - return GetHandler(nil, &Annotation{CheckPermission: perms}) -} - -// CheckPermissionMiddlewareWithAuthType decorator for permission checking with auth type | 检查权限装饰器(带认证类型) -func CheckPermissionMiddlewareWithAuthType(authType string, perms ...string) ghttp.HandlerFunc { - return GetHandler(nil, &Annotation{CheckPermission: perms, AuthType: authType}) +func CheckPermissionMiddleware( + ctx context.Context, + perms []string, + handler ghttp.HandlerFunc, + failFunc func(r *ghttp.Request, err error), + authType ...string, +) ghttp.HandlerFunc { + ann := &Annotation{CheckPermission: perms} + if len(authType) > 0 { + ann.AuthType = authType[0] + } + return GetHandler(ctx, handler, failFunc, ann) } // CheckDisableMiddleware decorator for checking if account is disabled | 检查是否被封禁装饰器 -func CheckDisableMiddleware(authType ...string) ghttp.HandlerFunc { +func CheckDisableMiddleware( + ctx context.Context, + handler ghttp.HandlerFunc, + failFunc func(r *ghttp.Request, err error), + authType ...string, +) ghttp.HandlerFunc { ann := &Annotation{CheckDisable: true} if len(authType) > 0 { ann.AuthType = authType[0] } - return GetHandler(nil, ann) + return GetHandler(ctx, handler, failFunc, ann) } // IgnoreMiddleware decorator to ignore authentication | 忽略认证装饰器 -func IgnoreMiddleware() ghttp.HandlerFunc { - return GetHandler(nil, &Annotation{Ignore: true}) +func IgnoreMiddleware( + ctx context.Context, + handler ghttp.HandlerFunc, + failFunc func(r *ghttp.Request, err error), +) ghttp.HandlerFunc { + ann := &Annotation{Ignore: true} + return GetHandler(ctx, handler, failFunc, ann) } // ============ Combined Middleware | 组合中间件 ============ // CheckLoginAndRoleMiddleware checks login and role | 检查登录和角色 -func CheckLoginAndRoleMiddleware(roles ...string) ghttp.HandlerFunc { - return GetHandler(nil, &Annotation{CheckLogin: true, CheckRole: roles}) +func CheckLoginAndRoleMiddleware( + ctx context.Context, + roles []string, + handler ghttp.HandlerFunc, + failFunc func(r *ghttp.Request, err error), + authType ...string, +) ghttp.HandlerFunc { + ann := &Annotation{CheckLogin: true, CheckRole: roles} + if len(authType) > 0 { + ann.AuthType = authType[0] + } + return GetHandler(ctx, handler, failFunc, ann) } // CheckLoginAndPermissionMiddleware checks login and permission | 检查登录和权限 -func CheckLoginAndPermissionMiddleware(perms ...string) ghttp.HandlerFunc { - return GetHandler(nil, &Annotation{CheckLogin: true, CheckPermission: perms}) +func CheckLoginAndPermissionMiddleware( + ctx context.Context, + perms []string, + handler ghttp.HandlerFunc, + failFunc func(r *ghttp.Request, err error), + authType ...string, +) ghttp.HandlerFunc { + ann := &Annotation{CheckLogin: true, CheckPermission: perms} + if len(authType) > 0 { + ann.AuthType = authType[0] + } + return GetHandler(ctx, handler, failFunc, ann) } // CheckAllMiddleware checks login, role, permission and disable status | 全面检查 -func CheckAllMiddleware(roles []string, perms []string) ghttp.HandlerFunc { - return GetHandler(nil, &Annotation{ - CheckLogin: true, - CheckRole: roles, - CheckPermission: perms, - CheckDisable: true, - }) +func CheckAllMiddleware( + ctx context.Context, + roles []string, + perms []string, + handler ghttp.HandlerFunc, + failFunc func(r *ghttp.Request, err error), + authType ...string, +) ghttp.HandlerFunc { + ann := &Annotation{CheckLogin: true, CheckRole: roles, CheckPermission: perms} + if len(authType) > 0 { + ann.AuthType = authType[0] + } + return GetHandler(ctx, handler, failFunc, ann) } // ============ Route Group Helper | 路由组辅助函数 ============ // AuthGroup creates a route group with authentication | 创建带认证的路由组 -func AuthGroup(group *ghttp.RouterGroup, authType ...string) *ghttp.RouterGroup { - group.Middleware(CheckLoginMiddleware(authType...)) +func AuthGroup( + ctx context.Context, + group *ghttp.RouterGroup, + handler ghttp.HandlerFunc, + failFunc func(r *ghttp.Request, err error), + authType ...string, +) *ghttp.RouterGroup { + group.Middleware(CheckLoginMiddleware(ctx, handler, failFunc, authType...)) return group } // RoleGroup creates a route group with role checking | 创建带角色检查的路由组 -func RoleGroup(group *ghttp.RouterGroup, roles ...string) *ghttp.RouterGroup { - group.Middleware(CheckLoginAndRoleMiddleware(roles...)) +func RoleGroup( + ctx context.Context, + group *ghttp.RouterGroup, + roles []string, + handler ghttp.HandlerFunc, + failFunc func(r *ghttp.Request, err error), + authType ...string, +) *ghttp.RouterGroup { + group.Middleware(CheckLoginAndRoleMiddleware(ctx, roles, handler, failFunc, authType...)) return group } // PermissionGroup creates a route group with permission checking | 创建带权限检查的路由组 -func PermissionGroup(group *ghttp.RouterGroup, perms ...string) *ghttp.RouterGroup { - group.Middleware(CheckLoginAndPermissionMiddleware(perms...)) +func PermissionGroup( + ctx context.Context, + group *ghttp.RouterGroup, + perms []string, + handler ghttp.HandlerFunc, + failFunc func(r *ghttp.Request, err error), + authType ...string, +) *ghttp.RouterGroup { + group.Middleware(CheckLoginAndPermissionMiddleware(ctx, perms, handler, failFunc, authType...)) return group } -// ============ Context Helper | 上下文辅助函数 ============ - -// GetLoginIDFromRequest gets login ID from request context | 从请求上下文获取登录 ID -func GetLoginIDFromRequest(r *ghttp.Request, authType ...string) (string, error) { - var at string - if len(authType) > 0 { - at = authType[0] - } - - mgr, err := stputil.GetManager(at) - if err != nil { - return "", err - } - - saCtx := getSaContext(r, mgr) - token := saCtx.GetTokenValue() - if token == "" { - return "", core.ErrNotLogin - } - return mgr.GetLoginID(r.Context(), token) -} - -// IsLoginFromRequest checks if user is logged in from request | 从请求检查用户是否已登录 -func IsLoginFromRequest(r *ghttp.Request, authType ...string) bool { - var at string - if len(authType) > 0 { - at = authType[0] - } - - mgr, err := stputil.GetManager(at) - if err != nil { - return false - } - - saCtx := getSaContext(r, mgr) - token := saCtx.GetTokenValue() - if token == "" { - return false - } - return mgr.IsLogin(r.Context(), token) -} - -// GetTokenFromRequest gets token from request (exported) | 从请求获取 Token(导出) -func GetTokenFromRequest(r *ghttp.Request, authType ...string) string { - var at string - if len(authType) > 0 { - at = authType[0] - } - - mgr, err := stputil.GetManager(at) - if err != nil { - return "" - } - - saCtx := getSaContext(r, mgr) - return saCtx.GetTokenValue() -} - -// WithContext creates a new context with sa-token context | 创建带 sa-token 上下文的新上下文 -func WithContext(r *ghttp.Request, authType ...string) context.Context { - return r.Context() +// RoleAndPermissionGroup creates a route group with role and permission checking | 创建带角色和权限检查的路由组 +func RoleAndPermissionGroup( + ctx context.Context, + group *ghttp.RouterGroup, + roles []string, + perms []string, + handler ghttp.HandlerFunc, + failFunc func(r *ghttp.Request, err error), + authType ...string, +) *ghttp.RouterGroup { + group.Middleware(CheckAllMiddleware(ctx, roles, perms, handler, failFunc, authType...)) + return group } diff --git a/integrations/gf/middleware.go b/integrations/gf/middleware.go index d030ea7..adfe9ca 100644 --- a/integrations/gf/middleware.go +++ b/integrations/gf/middleware.go @@ -58,8 +58,30 @@ func WithFailFunc(fn func(r *ghttp.Request, err error)) AuthOption { // ========== Middlewares ========== +// RegisterSaTokenContextMiddleware initializes Sa-Token context for each request | 初始化每次请求的 Sa-Token 上下文的中间件 +func RegisterSaTokenContextMiddleware(ctx context.Context, opts ...AuthOption) ghttp.HandlerFunc { + options := defaultAuthOptions() + for _, opt := range opts { + opt(options) + } + + return func(r *ghttp.Request) { + mgr, err := stputil.GetManager(options.AuthType) + if err != nil { + if options.FailFunc != nil { + options.FailFunc(r, err) + } else { + writeErrorResponse(r, err) + } + return + } + + _ = getSaContext(r, mgr) + } +} + // AuthMiddleware authentication middleware | 认证中间件 -func AuthMiddleware(opts ...AuthOption) ghttp.HandlerFunc { +func AuthMiddleware(ctx context.Context, opts ...AuthOption) ghttp.HandlerFunc { options := defaultAuthOptions() for _, opt := range opts { opt(options) @@ -76,7 +98,6 @@ func AuthMiddleware(opts ...AuthOption) ghttp.HandlerFunc { return } - ctx := context.Background() saCtx := getSaContext(r, mgr) tokenValue := saCtx.GetTokenValue() @@ -96,7 +117,7 @@ func AuthMiddleware(opts ...AuthOption) ghttp.HandlerFunc { } // AuthWithStateMiddleware with state authentication middleware | 带状态返回的认证中间件 -func AuthWithStateMiddleware(opts ...AuthOption) ghttp.HandlerFunc { +func AuthWithStateMiddleware(ctx context.Context, opts ...AuthOption) ghttp.HandlerFunc { options := defaultAuthOptions() for _, opt := range opts { opt(options) @@ -114,10 +135,8 @@ func AuthWithStateMiddleware(opts ...AuthOption) ghttp.HandlerFunc { return } - ctx := context.Background() saCtx := getSaContext(r, mgr) tokenValue := saCtx.GetTokenValue() - _, err = mgr.CheckLoginWithState(ctx, tokenValue) if err != nil { @@ -137,6 +156,7 @@ func AuthWithStateMiddleware(opts ...AuthOption) ghttp.HandlerFunc { // PermissionMiddleware permission check middleware | 权限校验中间件 func PermissionMiddleware( + ctx context.Context, permissions []string, opts ...AuthOption, ) ghttp.HandlerFunc { @@ -164,7 +184,6 @@ func PermissionMiddleware( return } - ctx := context.Background() saCtx := getSaContext(r, mgr) tokenValue := saCtx.GetTokenValue() @@ -191,6 +210,7 @@ func PermissionMiddleware( // PermissionPathMiddleware permission check middleware | 基于路径的权限校验中间件 func PermissionPathMiddleware( + ctx context.Context, permissions []string, opts ...AuthOption, ) ghttp.HandlerFunc { @@ -221,7 +241,6 @@ func PermissionPathMiddleware( return } - ctx := context.Background() saCtx := getSaContext(r, mgr) tokenValue := saCtx.GetTokenValue() @@ -248,6 +267,7 @@ func PermissionPathMiddleware( // RoleMiddleware role check middleware | 角色校验中间件 func RoleMiddleware( + ctx context.Context, roles []string, opts ...AuthOption, ) ghttp.HandlerFunc { @@ -275,7 +295,6 @@ func RoleMiddleware( return } - ctx := context.Background() saCtx := getSaContext(r, mgr) tokenValue := saCtx.GetTokenValue() @@ -311,6 +330,19 @@ func GetSaTokenContext(r *ghttp.Request) (*saContext.SaTokenContext, bool) { return ctx, ok } +// GetSaTokenContextFromCtx gets Sa-Token context from GoFrame context | 获取 Sa-Token 上下文 +func GetSaTokenContextFromCtx(ctx context.Context) (*saContext.SaTokenContext, bool) { + request := g.RequestFromCtx(ctx) + ctxVar := request.GetCtxVar(SaTokenCtxKey) + if ctxVar == nil { + return nil, false + } + + tokenContext, ok := ctxVar.Val().(*saContext.SaTokenContext) + return tokenContext, ok +} + +// getSaContext returns or creates the Sa-Token context for the request | 获取或创建当前请求的 Sa-Token 上下文 func getSaContext(r *ghttp.Request, mgr *manager.Manager) *saContext.SaTokenContext { // Try get from context | 尝试从 ctx 取值 if v := r.GetCtxVar(SaTokenCtxKey); v != nil { From 3c81920f75a0fd1c474aac440c956d0378c54740 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Fri, 9 Jan 2026 14:39:08 +0800 Subject: [PATCH 46/50] =?UTF-8?q?feat():=201=E3=80=81=E5=AE=8C=E5=96=84gf?= =?UTF-8?q?=E5=8C=85=E4=B8=AD=E9=97=B4=E4=BB=B6=E4=BB=A5=E5=8F=8A=E7=A4=BA?= =?UTF-8?q?=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- integrations/gf/middleware.go | 38 ----------------------------------- 1 file changed, 38 deletions(-) diff --git a/integrations/gf/middleware.go b/integrations/gf/middleware.go index adfe9ca..70ca9f9 100644 --- a/integrations/gf/middleware.go +++ b/integrations/gf/middleware.go @@ -116,44 +116,6 @@ func AuthMiddleware(ctx context.Context, opts ...AuthOption) ghttp.HandlerFunc { } } -// AuthWithStateMiddleware with state authentication middleware | 带状态返回的认证中间件 -func AuthWithStateMiddleware(ctx context.Context, opts ...AuthOption) ghttp.HandlerFunc { - options := defaultAuthOptions() - for _, opt := range opts { - opt(options) - } - - return func(r *ghttp.Request) { - // 获取 Manager | Get Manager - mgr, err := stputil.GetManager(options.AuthType) - if err != nil { - if options.FailFunc != nil { - options.FailFunc(r, err) - } else { - writeErrorResponse(r, err) - } - return - } - - saCtx := getSaContext(r, mgr) - tokenValue := saCtx.GetTokenValue() - _, err = mgr.CheckLoginWithState(ctx, tokenValue) - - if err != nil { - // 用户自定义回调优先 - if options.FailFunc != nil { - options.FailFunc(r, err) - } else { - writeErrorResponse(r, err) - } - - return - } - - r.Middleware.Next() - } -} - // PermissionMiddleware permission check middleware | 权限校验中间件 func PermissionMiddleware( ctx context.Context, From f65414201d8cb832480af19dcaa67b31461e3169 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Fri, 9 Jan 2026 15:42:49 +0800 Subject: [PATCH 47/50] =?UTF-8?q?feat():=201=E3=80=81=E5=AE=8C=E5=96=84stp?= =?UTF-8?q?util=E6=96=B9=E6=B3=95=202=E3=80=81=E5=88=9B=E5=BB=BAgo-zero?= =?UTF-8?q?=E9=80=82=E9=85=8D=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/errors.go | 6 ++ go.work | 1 + integrations/zero/go.mod | 3 + stputil/stputil.go | 129 +++++---------------------------------- 4 files changed, 24 insertions(+), 115 deletions(-) create mode 100644 integrations/zero/go.mod diff --git a/core/errors.go b/core/errors.go index 49f9d8a..332ba68 100644 --- a/core/errors.go +++ b/core/errors.go @@ -158,6 +158,12 @@ var ( // ErrTypeConvert indicates a type conversion failed | 类型转换失败 ErrTypeConvert = fmt.Errorf("type conversion failed: unable to convert value to target type") + + // ErrManagerNotFound indicates that the manager-example was not found for the given autoType | manager-example 未找到 + ErrManagerNotFound = fmt.Errorf("manager-example not found") + + // ErrManagerInvalidType indicates that the loaded manager-example has invalid type | manager-example 类型无效 + ErrManagerInvalidType = fmt.Errorf("invalid manager-example type") ) // ============ Custom Error Type | 自定义错误类型 ============ diff --git a/go.work b/go.work index 9e0fb08..1741896 100644 --- a/go.work +++ b/go.work @@ -40,6 +40,7 @@ use ( ./integrations/gf ./integrations/gin ./integrations/kratos + ./integrations/zero // log ./log/gf diff --git a/integrations/zero/go.mod b/integrations/zero/go.mod new file mode 100644 index 0000000..0e7068e --- /dev/null +++ b/integrations/zero/go.mod @@ -0,0 +1,3 @@ +module github.com/click33/sa-token-go/integrations/zero + +go 1.25.0 diff --git a/stputil/stputil.go b/stputil/stputil.go index 7f98c6c..0e2484a 100644 --- a/stputil/stputil.go +++ b/stputil/stputil.go @@ -3,6 +3,7 @@ package stputil import ( "context" "fmt" + "github.com/click33/sa-token-go/core" "github.com/click33/sa-token-go/core/adapter" "github.com/click33/sa-token-go/core/config" "github.com/click33/sa-token-go/core/listener" @@ -70,6 +71,8 @@ func LogoutByToken(ctx context.Context, tokenValue string, authType ...string) e return mgr.LogoutByToken(ctx, tokenValue) } +// ============ Online Status Management | 在线状态管理 ============ + // Kickout kicks out a user session | 踢人下线 func Kickout(ctx context.Context, loginID interface{}, deviceOrAutoType ...string) error { mgr, err := GetManager(deviceOrAutoType...) @@ -150,6 +153,8 @@ func CheckLoginWithState(ctx context.Context, tokenValue string, authType ...str return mgr.CheckLoginWithState(ctx, tokenValue) } +// ============ Token Information | Token信息与解析 ============ + // GetLoginID gets the login ID from token | 从Token获取登录ID func GetLoginID(ctx context.Context, tokenValue string, authType ...string) (string, error) { mgr, err := GetManager(authType...) @@ -239,6 +244,7 @@ func Untie(ctx context.Context, loginID interface{}, authType ...string) error { } } +// UntieByToken re-enables the account associated with the given token | 根据指定 Token 解封其对应的账号 func UntieByToken(ctx context.Context, tokenValue string, authType ...string) error { mgr, err := GetManager(authType...) if err != nil { @@ -267,6 +273,7 @@ func IsDisable(ctx context.Context, loginID interface{}, authType ...string) boo } } +// IsDisableByToken checks if an account associated with the token is disabled | 根据指定 Token 检查账号是否被封禁 func IsDisableByToken(ctx context.Context, tokenValue string, authType ...string) bool { mgr, err := GetManager(authType...) if err != nil { @@ -295,6 +302,7 @@ func GetDisableTime(ctx context.Context, loginID interface{}, authType ...string } } +// GetDisableTimeByToken gets remaining disable time by token (seconds) | 根据 Token 获取剩余封禁时间(秒) func GetDisableTimeByToken(ctx context.Context, tokenValue string, authType ...string) (int64, error) { mgr, err := GetManager(authType...) if err != nil { @@ -338,7 +346,7 @@ func CheckDisableWithInfoByToken(ctx context.Context, tokenValue string, authTyp return mgr.CheckDisableWithInfo(ctx, loginID) } -// ============ Session Management | Session管理 ============ +// ============ Session Management | Session 管理 ============ // GetSession gets session by login ID | 根据登录ID获取Session func GetSession(ctx context.Context, loginID interface{}, authType ...string) (*session.Session, error) { @@ -613,7 +621,7 @@ func HasPermissionsOrByToken(ctx context.Context, tokenValue string, permissions return mgr.HasPermissionsOr(ctx, loginID, permissions) } -// ============ Role Management | 角色管理 ============ +// ============ Role Verification | 角色验证 ============ // SetRoles sets roles for a login ID | 设置用户角色 func SetRoles(ctx context.Context, loginID interface{}, roles []string, authType ...string) error { @@ -801,7 +809,7 @@ func HasRolesOrByToken(ctx context.Context, tokenValue string, roles []string, a return mgr.HasRolesOr(ctx, loginID, roles) } -// ============ Token标签 ============ +// ============ Token Tag | Token 标签 ============ // SetTokenTag 设置Token标签 func SetTokenTag(ctx context.Context, tokenValue, tag string, authType ...string) error { @@ -823,7 +831,7 @@ func GetTokenTag(ctx context.Context, tokenValue string, authType ...string) (st return mgr.GetTokenTag(ctx) } -// ============ 会话查询 ============ +// ============ Token & Session Info | Token 与会话信息查询 ============ // GetTokenValueListByLoginID 获取指定账号的所有Token func GetTokenValueListByLoginID(ctx context.Context, loginID interface{}, authType ...string) ([]string, error) { @@ -1322,115 +1330,6 @@ func HasEventListeners(event listener.Event, authType ...string) bool { return mgr.HasEventListeners(event) } -// ============ Check Functions for Token-based operations | 基于Token的检查函数 ============ - -// CheckDisable checks if the account associated with the token is disabled | 检查Token对应账号是否被封禁 -//func CheckDisable(ctx context.Context, tokenValue string, authType ...string) error { -// loginID, err := GetLoginID(tokenValue) -// if err != nil { -// return err -// } -// if IsDisable(loginID) { -// return fmt.Errorf("account is disabled") -// } -// return nil -//} - -// CheckPermission checks if the token has the specified permission | 检查Token是否拥有指定权限 -//func CheckPermission(tokenValue string, permission string) error { -// loginID, err := GetLoginID(tokenValue) -// if err != nil { -// return err -// } -// if !HasPermission(loginID, permission) { -// return fmt.Errorf("permission denied: %s", permission) -// } -// return nil -//} - -// CheckPermissionAnd checks if the token has all specified permissions | 检查Token是否拥有所有指定权限 -//func CheckPermissionAnd(tokenValue string, permissions []string) error { -// loginID, err := GetLoginID(tokenValue) -// if err != nil { -// return err -// } -// if !HasPermissionsAnd(loginID, permissions) { -// return fmt.Errorf("permission denied: %v", permissions) -// } -// return nil -//} - -// CheckPermissionOr checks if the token has any of the specified permissions | 检查Token是否拥有任一指定权限 -//func CheckPermissionOr(tokenValue string, permissions []string) error { -// loginID, err := GetLoginID(tokenValue) -// if err != nil { -// return err -// } -// if !HasPermissionsOr(loginID, permissions) { -// return fmt.Errorf("permission denied: %v", permissions) -// } -// return nil -//} - -// GetPermissionList gets permission list for the token | 获取Token对应的权限列表 -//func GetPermissionList(tokenValue string) ([]string, error) { -// loginID, err := GetLoginID(tokenValue) -// if err != nil { -// return nil, err -// } -// return GetPermissions(loginID) -//} - -// CheckRole checks if the token has the specified role | 检查Token是否拥有指定角色 -//func CheckRole(tokenValue string, role string) error { -// loginID, err := GetLoginID(tokenValue) -// if err != nil { -// return err -// } -// if !HasRole(loginID, role) { -// return fmt.Errorf("role denied: %s", role) -// } -// return nil -//} - -// CheckRoleAnd checks if the token has all specified roles | 检查Token是否拥有所有指定角色 -//func CheckRoleAnd(tokenValue string, roles []string) error { -// loginID, err := GetLoginID(tokenValue) -// if err != nil { -// return err -// } -// if !HasRolesAnd(loginID, roles) { -// return fmt.Errorf("role denied: %v", roles) -// } -// return nil -//} - -// CheckRoleOr checks if the token has any of the specified roles | 检查Token是否拥有任一指定角色 -//func CheckRoleOr(tokenValue string, roles []string) error { -// loginID, err := GetLoginID(tokenValue) -// if err != nil { -// return err -// } -// if !HasRolesOr(loginID, roles) { -// return fmt.Errorf("role denied: %v", roles) -// } -// return nil -//} - -// GetRoleList gets role list for the token | 获取Token对应的角色列表 -//func GetRoleList(tokenValue string) ([]string, error) { -// loginID, err := GetLoginID(tokenValue) -// if err != nil { -// return nil, err -// } -// return GetRoles(loginID) -//} - -// GetTokenSession gets session for the token | 获取Token对应的Session -//func GetTokenSession(tokenValue string) (*session.Session, error) { -// return GetSessionByToken(tokenValue) -//} - // ============ Internal Helper Methods | 内部辅助方法 ============ // SetManager stores the manager-example in the global map using the specified autoType | 使用指定的 autoType 将管理器存储在全局 map 中 @@ -1502,12 +1401,12 @@ func loadManager(autoType string) (*manager.Manager, error) { // Load the manager-example from the global map using the valid autoType | 使用有效的 autoType 从全局 map 中加载管理器 value, ok := globalManagerMap.Load(autoType) if !ok { - return nil, fmt.Errorf("manager-example not found for autoType: " + autoType) + return nil, core.ErrManagerNotFound } // Assert the loaded value to the correct type | 将加载的值断言为正确的类型 mgr, ok := value.(*manager.Manager) if !ok { - return nil, fmt.Errorf("invalid manager-example type for autoType: " + autoType) + return nil, core.ErrManagerInvalidType } return mgr, nil } From 72b18e1f7156fddcdfc94763b504553f9b0cbfa2 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Sun, 11 Jan 2026 17:31:14 +0800 Subject: [PATCH 48/50] =?UTF-8?q?feat():=201=E3=80=81=E4=BF=AE=E6=94=B9man?= =?UTF-8?q?ager=E7=9A=84Islogin=E6=96=B9=E6=B3=95=202=E3=80=81=E4=BF=AE?= =?UTF-8?q?=E6=94=B9stputil=E7=BB=9F=E4=B8=80=E6=96=B9=E6=B3=95=203?= =?UTF-8?q?=E3=80=81=E6=B7=BB=E5=8A=A0config=E6=8F=90=E7=A4=BA=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=204=E3=80=81=E6=B7=BB=E5=8A=A0builder=E7=9A=84?= =?UTF-8?q?=E7=BB=AD=E6=9C=9F=E6=B1=A0=E7=8A=B6=E6=80=81=E6=89=93=E5=8D=B0?= =?UTF-8?q?=205=E3=80=81=E4=BF=AE=E6=94=B9gf=E4=BB=A5=E5=8F=8Agin=E5=8C=85?= =?UTF-8?q?=E7=9A=84=E6=96=B9=E6=B3=95=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/builder/builder.go | 18 +++ core/config/config.go | 7 + core/manager/manager.go | 92 ++++-------- integrations/gf/annotation.go | 10 +- integrations/gf/export.go | 19 +-- integrations/gf/middleware.go | 36 ++++- integrations/gin/annotation.go | 266 +++++++++++++++++++-------------- integrations/gin/export.go | 19 +-- integrations/gin/middleware.go | 51 +++---- stputil/stputil.go | 30 ++-- 10 files changed, 297 insertions(+), 251 deletions(-) diff --git a/core/builder/builder.go b/core/builder/builder.go index 2ec01bf..4493602 100644 --- a/core/builder/builder.go +++ b/core/builder/builder.go @@ -634,6 +634,24 @@ func (b *Builder) Build() *manager.Manager { panic(err) } } + + // 续期池状态的打印 + if b.renewPoolConfig.PrintStatusInterval > 0 { + ticker := time.NewTicker(b.renewPoolConfig.PrintStatusInterval) + go func() { + defer ticker.Stop() + for { + select { + case <-ticker.C: + running, capacity, usage := b.pool.Stats() + b.log.Infof( + "RenewPool Status: Capacity=%d, Running=%d, Usage=%.2f%%", + capacity, running, usage*100, + ) + } + } + }() + } } // Print startup banner with full configuration | 打印启动Banner和完整配置 diff --git a/core/config/config.go b/core/config/config.go index ad38ceb..eba7141 100644 --- a/core/config/config.go +++ b/core/config/config.go @@ -16,21 +16,27 @@ type Config struct { Timeout int64 // MaxRefresh Threshold (in seconds) to trigger async token renewal; when remaining lifetime is below this, renewal is triggered; -1 means no limit | Token自动续期触发阈值(单位:秒,当剩余有效期低于该值时触发异步续期,-1代表不限制) + // 注意此配置与 RenewInterval 配置关系 MaxRefresh int64 // RenewInterval Minimum interval (in seconds) between two renewals for the same token; -1 means no limit | 同一Token两次续期的最小间隔时间(单位:秒,-1代表不限制) + // 注意此配置与 MaxRefresh 配置关系 RenewInterval int64 // ActiveTimeout Maximum inactivity duration (in seconds); if the Token is not accessed within this time, it will be frozen. -1 means no limit | Token最大不活跃时长(单位:秒),超过此时间未访问则被踢出,-1代表不限制 + // 注意此配置与 MaxRefresh、RenewInterval 的配置关系 此配置目前只判断续期时更新的TokenInfo里面的ActiveTime ActiveTimeout int64 // IsConcurrent Allow concurrent login for the same account (true=allow, false=new login kicks old) | 是否允许同一账号并发登录(true=允许并发,false=新登录挤掉旧登录) + // 注意此配置与 IsShare 的配置关系 IsConcurrent bool // IsShare Share the same Token for concurrent logins (true=share one, false=create new for each login) | 并发登录是否共用同一个Token(true=共用一个,false=每次登录新建一个) + // 注意此配置与 IsConcurrent 的配置关系 IsShare bool // MaxLoginCount Maximum concurrent login count for the same account; -1 means unlimited (only effective when IsConcurrent=true and IsShare=false) | 同一账号最大登录数量,-1代表不限(仅当IsConcurrent=true且IsShare=false时生效) + // // 注意此配置与 IsConcurrent、IsShare 的配置关系 (仅当IsConcurrent=true且IsShare=false时生效) MaxLoginCount int64 // IsReadBody Try to read Token from the request body (log: false) | 是否尝试从请求体读取Token(默认:false) @@ -46,6 +52,7 @@ type Config struct { TokenStyle adapter.TokenStyle // TokenSessionCheckLogin Whether to check if Token-Session is kicked out when logging in (true=check, false=skip) | 登录时是否检查Token-Session是否被踢下线(true=检查,false=不检查) + // 注意此配置在manager相关逻辑中暂时未使用 TokenSessionCheckLogin bool // AutoRenew Automatically renew Token expiration time on each validation | 是否在每次验证Token时自动续期(延长Token有效期) diff --git a/core/manager/manager.go b/core/manager/manager.go index 9e17e19..808e06c 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -161,7 +161,7 @@ func (m *Manager) CloseManager() { } } -// ============ Login Authentication | 登录认证 ============ +// ============ Authentication | 登录认证 ============ // Login Performs user login and returns token | 登录 返回Token func (m *Manager) Login(ctx context.Context, loginID string, device ...string) (string, error) { @@ -180,10 +180,16 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( // Look for existing token of this account + device | 查找账号 + 设备下是否已有登录 Token existingToken, err := m.storage.Get(ctx, accountKey) if err == nil && existingToken != nil { - if existingTokenStr, ok := assertString(existingToken); ok && m.IsLogin(ctx, existingTokenStr) { - // If valid token exists, return it directly | 如果已有 Token 且有效 则直接返回 - return existingTokenStr, nil + if existingTokenStr, ok := assertString(existingToken); ok { + if isLoggedIn, _ := m.IsLogin(ctx, existingTokenStr); isLoggedIn { + return existingTokenStr, nil + } } + + //if existingTokenStr, ok := assertString(existingToken); ok && m.IsLogin(ctx, existingTokenStr) { + // // If valid token exists, return it directly | 如果已有 Token 且有效 则直接返回 + // return existingTokenStr, nil + //} } } @@ -307,6 +313,8 @@ func (m *Manager) LogoutByToken(ctx context.Context, tokenValue string) error { return m.removeTokenChain(ctx, tokenValue, nil, listener.EventLogout) } +// ============ Online Status Management | 在线状态管理 ============ + // kickout Kick user offline (private) | 踢人下线(私有) func (m *Manager) kickout(ctx context.Context, loginID string, device string) error { // Get the account key for this user and device | 获取该用户和设备对应的账户键 @@ -387,10 +395,10 @@ func (m *Manager) ReplaceByToken(ctx context.Context, tokenValue string) error { // ============ Token Validation | Token验证 ============ // IsLogin Checks if the user is logged in | 检查用户是否登录 -func (m *Manager) IsLogin(ctx context.Context, tokenValue string) bool { - info, err := m.getTokenInfo(ctx, tokenValue) +func (m *Manager) IsLogin(ctx context.Context, tokenValue string) (bool, error) { + info, err := m.getTokenInfo(ctx, tokenValue, true) if err != nil { - return false + return false, err } // Check if the token has exceeded the active timeout | 检查Token是否超过活跃超时时间 @@ -399,7 +407,7 @@ func (m *Manager) IsLogin(ctx context.Context, tokenValue string) bool { if now-info.ActiveTime > m.config.ActiveTimeout { // Force logout and clean up token data | 强制登出并清理Token相关数据 _ = m.removeTokenChain(ctx, tokenValue, info, listener.EventKickout) - return false + return false, core.ErrTokenKickout } } @@ -426,67 +434,33 @@ func (m *Manager) IsLogin(ctx context.Context, tokenValue string) bool { } } - return true + return true, nil } -// CheckLogin Checks login status (throws serror if not logged in) | 检查登录(未登录抛出错误) +// CheckLogin Checks login status | 检查登录 func (m *Manager) CheckLogin(ctx context.Context, tokenValue string) error { - if !m.IsLogin(ctx, tokenValue) { - return core.ErrNotLogin - } - - return nil -} - -// CheckLoginWithState Checks if user is logged in | 检查是否登录(返回详细状态err) -func (m *Manager) CheckLoginWithState(ctx context.Context, tokenValue string) (bool, error) { - // Try to get token info with state check | 尝试获取Token信息(包含状态检查) - info, err := m.getTokenInfo(ctx, tokenValue, true) + isLogin, err := m.IsLogin(ctx, tokenValue) if err != nil { - return false, err - } - - if m.config.ActiveTimeout > 0 { - now := time.Now().Unix() - if now-info.ActiveTime > m.config.ActiveTimeout { - // Force logout and clean up token data | 强制登出并清理Token相关数据 - _ = m.removeTokenChain(ctx, tokenValue, info, listener.EventKickout) - return false, core.ErrTokenKickout - } + return err } - - // Async auto-renew for better performance | 异步自动续期(提高性能) - if m.config.AutoRenew && m.config.Timeout > 0 { - // Construct the token storage key | 构造Token存储键 - tokenKey := m.getTokenKey(tokenValue) - - // Check if token renewal is needed | 检查是否需要进行续期 - if ttl, err := m.storage.TTL(ctx, tokenKey); err == nil { - ttlSeconds := int64(ttl.Seconds()) - - // Perform renewal if TTL is below MaxRefresh threshold and RenewInterval allows | 如果TTL小于MaxRefresh阈值且RenewInterval允许,则进行续期 - if ttlSeconds > 0 && (m.config.MaxRefresh <= 0 || ttlSeconds <= m.config.MaxRefresh) && (m.config.RenewInterval <= 0 || !m.storage.Exists(ctx, m.getRenewKey(tokenValue))) { - renewFunc := func() { m.renewToken(ctx, tokenValue, info) } - - // Submit renewal task to the pool if configured, otherwise use a goroutine | 如果配置了续期池,则提交续期任务到池中,否则使用协程 - if m.pool != nil { - _ = m.pool.Submit(renewFunc) // Submit token renewal task to the pool | 提交Token续期任务到续期池 - } else { - go renewFunc() // Fallback to goroutine if pool is not configured | 如果没有配置续期池,使用普通协程 - } - } - } + if !isLogin { + return core.ErrTokenExpired } - return true, nil + return nil } +// ============ Token Information | Token信息与解析 ============ + // GetLoginID Gets login ID from token | 根据Token获取登录ID func (m *Manager) GetLoginID(ctx context.Context, tokenValue string) (string, error) { // Check if the user is logged in | 检查用户是否已登录 - isLogin := m.IsLogin(ctx, tokenValue) + isLogin, err := m.IsLogin(ctx, tokenValue) + if err != nil { + return "", err + } if !isLogin { - return "", core.ErrNotLogin + return "", core.ErrTokenExpired } // Retrieve the login ID without checking token validity | 获取登录ID 不检查Token有效性 @@ -595,8 +569,8 @@ func (m *Manager) IsDisable(ctx context.Context, loginID string) bool { return m.storage.Exists(ctx, disableKeyKey) } -// CheckDisableWithInfo get disable info | 获取封禁信息 -func (m *Manager) CheckDisableWithInfo(ctx context.Context, loginID string) (*DisableInfo, error) { +// GetDisableInfo get disable info | 获取封禁信息 +func (m *Manager) GetDisableInfo(ctx context.Context, loginID string) (*DisableInfo, error) { // Retrieve the disable flag storage key | 获取封禁标记的存储键 disableKeyKey := m.getDisableKey(loginID) @@ -1163,7 +1137,7 @@ func (m *Manager) GetTokenTag(ctx context.Context) (string, error) { return "", fmt.Errorf("token tag feature not supported (use Session for custom metadata)") } -// ============ Session Query | 会话查询 ============ +// ============ Token & Session Info | Token 与会话信息查询 ============ // GetTokenValueListByLoginID Gets all tokens for specified account | 获取指定账号的所有Token func (m *Manager) GetTokenValueListByLoginID(ctx context.Context, loginID string) ([]string, error) { diff --git a/integrations/gf/annotation.go b/integrations/gf/annotation.go index 46ef561..c7a25fe 100644 --- a/integrations/gf/annotation.go +++ b/integrations/gf/annotation.go @@ -67,7 +67,7 @@ func GetHandler(ctx context.Context, handler ghttp.HandlerFunc, failFunc func(r token := saCtx.GetTokenValue() // Check login | 检查登录 - _, err = mgr.CheckLoginWithState(ctx, token) + isLogin, err := mgr.IsLogin(ctx, token) if err != nil { if failFunc != nil { failFunc(r, err) @@ -76,6 +76,14 @@ func GetHandler(ctx context.Context, handler ghttp.HandlerFunc, failFunc func(r } return } + if !isLogin { + if failFunc != nil { + failFunc(r, core.NewNotLoginError()) + } else { + writeErrorResponse(r, core.NewNotLoginError()) + } + return + } // Get loginID for further checks | 获取 loginID 用于后续检查 var loginID string diff --git a/integrations/gf/export.go b/integrations/gf/export.go index fa8404a..7a95523 100644 --- a/integrations/gf/export.go +++ b/integrations/gf/export.go @@ -424,7 +424,7 @@ func ReplaceByToken(ctx context.Context, tokenValue string, authType ...string) // ============ Token Validation | Token验证 ============ // IsLogin checks if the user is logged in | 检查用户是否已登录 -func IsLogin(ctx context.Context, tokenValue string, authType ...string) bool { +func IsLogin(ctx context.Context, tokenValue string, authType ...string) (bool, error) { return stputil.IsLogin(ctx, tokenValue, authType...) } @@ -433,11 +433,6 @@ func CheckLogin(ctx context.Context, tokenValue string, authType ...string) erro return stputil.CheckLogin(ctx, tokenValue, authType...) } -// CheckLoginWithState checks the login status (returns error to determine the reason if not logged in) | 检查登录状态(未登录时根据错误确定原因) -func CheckLoginWithState(ctx context.Context, tokenValue string, authType ...string) (bool, error) { - return stputil.CheckLoginWithState(ctx, tokenValue, authType...) -} - // GetLoginID gets the login ID from token | 从Token获取登录ID func GetLoginID(ctx context.Context, tokenValue string, authType ...string) (string, error) { return stputil.GetLoginID(ctx, tokenValue, authType...) @@ -500,14 +495,14 @@ func GetDisableTimeByToken(ctx context.Context, tokenValue string, authType ...s return stputil.GetDisableTimeByToken(ctx, tokenValue, authType...) } -// CheckDisableWithInfo gets disable info | 获取封禁信息 -func CheckDisableWithInfo(ctx context.Context, loginID interface{}, authType ...string) (*manager.DisableInfo, error) { - return stputil.CheckDisableWithInfo(ctx, loginID, authType...) +// GetDisableInfo gets disable info | 获取封禁信息 +func GetDisableInfo(ctx context.Context, loginID interface{}, authType ...string) (*manager.DisableInfo, error) { + return stputil.GetDisableInfo(ctx, loginID, authType...) } -// CheckDisableWithInfoByToken gets disable info by token | 根据Token获取封禁信息 -func CheckDisableWithInfoByToken(ctx context.Context, tokenValue string, authType ...string) (*manager.DisableInfo, error) { - return stputil.CheckDisableWithInfoByToken(ctx, tokenValue, authType...) +// GetDisableInfoByToken gets disable info by token | 根据Token获取封禁信息 +func GetDisableInfoByToken(ctx context.Context, tokenValue string, authType ...string) (*manager.DisableInfo, error) { + return stputil.GetDisableInfoByToken(ctx, tokenValue, authType...) } // ============ Session Management | Session管理 ============ diff --git a/integrations/gf/middleware.go b/integrations/gf/middleware.go index 70ca9f9..ebaf95b 100644 --- a/integrations/gf/middleware.go +++ b/integrations/gf/middleware.go @@ -56,7 +56,7 @@ func WithFailFunc(fn func(r *ghttp.Request, err error)) AuthOption { } } -// ========== Middlewares ========== +// ============ Middlewares | 中间件 ============ // RegisterSaTokenContextMiddleware initializes Sa-Token context for each request | 初始化每次请求的 Sa-Token 上下文的中间件 func RegisterSaTokenContextMiddleware(ctx context.Context, opts ...AuthOption) ghttp.HandlerFunc { @@ -102,7 +102,7 @@ func AuthMiddleware(ctx context.Context, opts ...AuthOption) ghttp.HandlerFunc { tokenValue := saCtx.GetTokenValue() // 检查登录 | Check login - _, err = mgr.CheckLoginWithState(ctx, tokenValue) + isLogin, err := mgr.IsLogin(ctx, tokenValue) if err != nil { if options.FailFunc != nil { options.FailFunc(r, err) @@ -111,6 +111,14 @@ func AuthMiddleware(ctx context.Context, opts ...AuthOption) ghttp.HandlerFunc { } return } + if !isLogin { + if options.FailFunc != nil { + options.FailFunc(r, core.ErrTokenExpired) + } else { + writeErrorResponse(r, core.ErrTokenExpired) + } + return + } r.Middleware.Next() } @@ -292,8 +300,8 @@ func GetSaTokenContext(r *ghttp.Request) (*saContext.SaTokenContext, bool) { return ctx, ok } -// GetSaTokenContextFromCtx gets Sa-Token context from GoFrame context | 获取 Sa-Token 上下文 -func GetSaTokenContextFromCtx(ctx context.Context) (*saContext.SaTokenContext, bool) { +// GetSaTokenContextByCtx gets Sa-Token context from GoFrame context | 获取 Sa-Token 上下文 +func GetSaTokenContextByCtx(ctx context.Context) (*saContext.SaTokenContext, bool) { request := g.RequestFromCtx(ctx) ctxVar := request.GetCtxVar(SaTokenCtxKey) if ctxVar == nil { @@ -304,6 +312,26 @@ func GetSaTokenContextFromCtx(ctx context.Context) (*saContext.SaTokenContext, b return tokenContext, ok } +// GetLoginIDByCtx gets the login ID from the context | 从上下文获取登录ID +func GetLoginIDByCtx(ctx context.Context, authType ...string) (string, error) { + mgr, err := stputil.GetManager(authType...) + if err != nil { + return "", err + } + + return mgr.GetLoginIDNotCheck(ctx, getSaContext(g.RequestFromCtx(ctx), mgr).GetTokenValue()) +} + +// GetTokenInfoByCtx gets the token information from the context | 从上下文获取Token信息 +func GetTokenInfoByCtx(ctx context.Context, authType ...string) (*manager.TokenInfo, error) { + mgr, err := stputil.GetManager(authType...) + if err != nil { + return nil, err + } + + return mgr.GetTokenInfoByToken(ctx, getSaContext(g.RequestFromCtx(ctx), mgr).GetTokenValue()) +} + // getSaContext returns or creates the Sa-Token context for the request | 获取或创建当前请求的 Sa-Token 上下文 func getSaContext(r *ghttp.Request, mgr *manager.Manager) *saContext.SaTokenContext { // Try get from context | 尝试从 ctx 取值 diff --git a/integrations/gin/annotation.go b/integrations/gin/annotation.go index 0851e96..d23ab32 100644 --- a/integrations/gin/annotation.go +++ b/integrations/gin/annotation.go @@ -22,7 +22,7 @@ type Annotation struct { } // GetHandler gets handler with annotations | 获取带注解的处理器 -func GetHandler(handler gin.HandlerFunc, annotations ...*Annotation) gin.HandlerFunc { +func GetHandler(ctx context.Context, handler gin.HandlerFunc, failFunc func(c *gin.Context, err error), annotations ...*Annotation) gin.HandlerFunc { return func(c *gin.Context) { // Ignore authentication | 忽略认证直接放行 if len(annotations) > 0 && annotations[0].Ignore { @@ -51,12 +51,14 @@ func GetHandler(handler gin.HandlerFunc, annotations ...*Annotation) gin.Handler return } - ctx := c.Request.Context() - // Get manager-example | 获取 Manager mgr, err := stputil.GetManager(ann.AuthType) if err != nil { - writeErrorResponse(c, err) + if failFunc != nil { + failFunc(c, err) + } else { + writeErrorResponse(c, err) + } c.Abort() return } @@ -65,15 +67,23 @@ func GetHandler(handler gin.HandlerFunc, annotations ...*Annotation) gin.Handler saCtx := getSaContext(c, mgr) token := saCtx.GetTokenValue() - if token == "" { - writeErrorResponse(c, core.NewNotLoginError()) + // Check login | 检查登录 + isLogin, err := mgr.IsLogin(ctx, token) + if err != nil { + if failFunc != nil { + failFunc(c, err) + } else { + writeErrorResponse(c, err) + } c.Abort() return } - - // Check login | 检查登录 - if err := mgr.CheckLogin(ctx, token); err != nil { - writeErrorResponse(c, err) + if !isLogin { + if failFunc != nil { + failFunc(c, core.NewNotLoginError()) + } else { + writeErrorResponse(c, core.NewNotLoginError()) + } c.Abort() return } @@ -92,7 +102,11 @@ func GetHandler(handler gin.HandlerFunc, annotations ...*Annotation) gin.Handler // Check if account is disabled | 检查是否被封禁 if ann.CheckDisable { if mgr.IsDisable(ctx, loginID) { - writeErrorResponse(c, core.NewAccountDisabledError(loginID)) + if failFunc != nil { + failFunc(c, core.NewAccountDisabledError(loginID)) + } else { + writeErrorResponse(c, core.NewAccountDisabledError(loginID)) + } c.Abort() return } @@ -107,7 +121,11 @@ func GetHandler(handler gin.HandlerFunc, annotations ...*Annotation) gin.Handler ok = mgr.HasPermissionsOr(ctx, loginID, ann.CheckPermission) } if !ok { - writeErrorResponse(c, core.NewPermissionDeniedError(strings.Join(ann.CheckPermission, ","))) + if failFunc != nil { + failFunc(c, core.NewPermissionDeniedError(strings.Join(ann.CheckPermission, ","))) + } else { + writeErrorResponse(c, core.NewPermissionDeniedError(strings.Join(ann.CheckPermission, ","))) + } c.Abort() return } @@ -122,7 +140,11 @@ func GetHandler(handler gin.HandlerFunc, annotations ...*Annotation) gin.Handler ok = mgr.HasRolesOr(ctx, loginID, ann.CheckRole) } if !ok { - writeErrorResponse(c, core.NewRoleDeniedError(strings.Join(ann.CheckRole, ","))) + if failFunc != nil { + failFunc(c, core.NewRoleDeniedError(strings.Join(ann.CheckRole, ","))) + } else { + writeErrorResponse(c, core.NewRoleDeniedError(strings.Join(ann.CheckRole, ","))) + } c.Abort() return } @@ -138,149 +160,171 @@ func GetHandler(handler gin.HandlerFunc, annotations ...*Annotation) gin.Handler } // CheckLoginMiddleware decorator for login checking | 检查登录装饰器 -func CheckLoginMiddleware(authType ...string) gin.HandlerFunc { +func CheckLoginMiddleware( + ctx context.Context, + handler gin.HandlerFunc, + failFunc func(c *gin.Context, err error), + authType ...string, +) gin.HandlerFunc { ann := &Annotation{CheckLogin: true} if len(authType) > 0 { ann.AuthType = authType[0] } - return GetHandler(nil, ann) + return GetHandler(ctx, handler, failFunc, ann) } // CheckRoleMiddleware decorator for role checking | 检查角色装饰器 -func CheckRoleMiddleware(roles ...string) gin.HandlerFunc { - return GetHandler(nil, &Annotation{CheckRole: roles}) -} - -// CheckRoleMiddlewareWithAuthType decorator for role checking with auth type | 检查角色装饰器(带认证类型) -func CheckRoleMiddlewareWithAuthType(authType string, roles ...string) gin.HandlerFunc { - return GetHandler(nil, &Annotation{CheckRole: roles, AuthType: authType}) +func CheckRoleMiddleware( + ctx context.Context, + roles []string, + handler gin.HandlerFunc, + failFunc func(c *gin.Context, err error), + authType ...string, +) gin.HandlerFunc { + ann := &Annotation{CheckRole: roles} + if len(authType) > 0 { + ann.AuthType = authType[0] + } + return GetHandler(ctx, handler, failFunc, ann) } // CheckPermissionMiddleware decorator for permission checking | 检查权限装饰器 -func CheckPermissionMiddleware(perms ...string) gin.HandlerFunc { - return GetHandler(nil, &Annotation{CheckPermission: perms}) -} - -// CheckPermissionMiddlewareWithAuthType decorator for permission checking with auth type | 检查权限装饰器(带认证类型) -func CheckPermissionMiddlewareWithAuthType(authType string, perms ...string) gin.HandlerFunc { - return GetHandler(nil, &Annotation{CheckPermission: perms, AuthType: authType}) +func CheckPermissionMiddleware( + ctx context.Context, + perms []string, + handler gin.HandlerFunc, + failFunc func(c *gin.Context, err error), + authType ...string, +) gin.HandlerFunc { + ann := &Annotation{CheckPermission: perms} + if len(authType) > 0 { + ann.AuthType = authType[0] + } + return GetHandler(ctx, handler, failFunc, ann) } // CheckDisableMiddleware decorator for checking if account is disabled | 检查是否被封禁装饰器 -func CheckDisableMiddleware(authType ...string) gin.HandlerFunc { +func CheckDisableMiddleware( + ctx context.Context, + handler gin.HandlerFunc, + failFunc func(c *gin.Context, err error), + authType ...string, +) gin.HandlerFunc { ann := &Annotation{CheckDisable: true} if len(authType) > 0 { ann.AuthType = authType[0] } - return GetHandler(nil, ann) + return GetHandler(ctx, handler, failFunc, ann) } // IgnoreMiddleware decorator to ignore authentication | 忽略认证装饰器 -func IgnoreMiddleware() gin.HandlerFunc { - return GetHandler(nil, &Annotation{Ignore: true}) +func IgnoreMiddleware( + ctx context.Context, + handler gin.HandlerFunc, + failFunc func(c *gin.Context, err error), +) gin.HandlerFunc { + ann := &Annotation{Ignore: true} + return GetHandler(ctx, handler, failFunc, ann) } // ============ Combined Middleware | 组合中间件 ============ // CheckLoginAndRoleMiddleware checks login and role | 检查登录和角色 -func CheckLoginAndRoleMiddleware(roles ...string) gin.HandlerFunc { - return GetHandler(nil, &Annotation{CheckLogin: true, CheckRole: roles}) +func CheckLoginAndRoleMiddleware( + ctx context.Context, + roles []string, + handler gin.HandlerFunc, + failFunc func(c *gin.Context, err error), + authType ...string, +) gin.HandlerFunc { + ann := &Annotation{CheckLogin: true, CheckRole: roles} + if len(authType) > 0 { + ann.AuthType = authType[0] + } + return GetHandler(ctx, handler, failFunc, ann) } // CheckLoginAndPermissionMiddleware checks login and permission | 检查登录和权限 -func CheckLoginAndPermissionMiddleware(perms ...string) gin.HandlerFunc { - return GetHandler(nil, &Annotation{CheckLogin: true, CheckPermission: perms}) +func CheckLoginAndPermissionMiddleware( + ctx context.Context, + perms []string, + handler gin.HandlerFunc, + failFunc func(c *gin.Context, err error), + authType ...string, +) gin.HandlerFunc { + ann := &Annotation{CheckLogin: true, CheckPermission: perms} + if len(authType) > 0 { + ann.AuthType = authType[0] + } + return GetHandler(ctx, handler, failFunc, ann) } // CheckAllMiddleware checks login, role, permission and disable status | 全面检查 -func CheckAllMiddleware(roles []string, perms []string) gin.HandlerFunc { - return GetHandler(nil, &Annotation{ - CheckLogin: true, - CheckRole: roles, - CheckPermission: perms, - CheckDisable: true, - }) +func CheckAllMiddleware( + ctx context.Context, + roles []string, + perms []string, + handler gin.HandlerFunc, + failFunc func(c *gin.Context, err error), + authType ...string, +) gin.HandlerFunc { + ann := &Annotation{CheckLogin: true, CheckRole: roles, CheckPermission: perms} + if len(authType) > 0 { + ann.AuthType = authType[0] + } + return GetHandler(ctx, handler, failFunc, ann) } // ============ Route Group Helper | 路由组辅助函数 ============ // AuthGroup creates a route group with authentication | 创建带认证的路由组 -func AuthGroup(group *gin.RouterGroup, authType ...string) *gin.RouterGroup { - group.Use(CheckLoginMiddleware(authType...)) +func AuthGroup( + ctx context.Context, + group *gin.RouterGroup, + handler gin.HandlerFunc, + failFunc func(c *gin.Context, err error), + authType ...string, +) *gin.RouterGroup { + group.Use(CheckLoginMiddleware(ctx, handler, failFunc, authType...)) return group } // RoleGroup creates a route group with role checking | 创建带角色检查的路由组 -func RoleGroup(group *gin.RouterGroup, roles ...string) *gin.RouterGroup { - group.Use(CheckLoginAndRoleMiddleware(roles...)) +func RoleGroup( + ctx context.Context, + group *gin.RouterGroup, + roles []string, + handler gin.HandlerFunc, + failFunc func(c *gin.Context, err error), + authType ...string, +) *gin.RouterGroup { + group.Use(CheckLoginAndRoleMiddleware(ctx, roles, handler, failFunc, authType...)) return group } // PermissionGroup creates a route group with permission checking | 创建带权限检查的路由组 -func PermissionGroup(group *gin.RouterGroup, perms ...string) *gin.RouterGroup { - group.Use(CheckLoginAndPermissionMiddleware(perms...)) +func PermissionGroup( + ctx context.Context, + group *gin.RouterGroup, + perms []string, + handler gin.HandlerFunc, + failFunc func(c *gin.Context, err error), + authType ...string, +) *gin.RouterGroup { + group.Use(CheckLoginAndPermissionMiddleware(ctx, perms, handler, failFunc, authType...)) return group } -// ============ Context Helper | 上下文辅助函数 ============ - -// GetLoginIDFromRequest gets login ID from request context | 从请求上下文获取登录 ID -func GetLoginIDFromRequest(c *gin.Context, authType ...string) (string, error) { - var at string - if len(authType) > 0 { - at = authType[0] - } - - mgr, err := stputil.GetManager(at) - if err != nil { - return "", err - } - - saCtx := getSaContext(c, mgr) - token := saCtx.GetTokenValue() - if token == "" { - return "", core.ErrNotLogin - } - return mgr.GetLoginID(c.Request.Context(), token) -} - -// IsLoginFromRequest checks if user is logged in from request | 从请求检查用户是否已登录 -func IsLoginFromRequest(c *gin.Context, authType ...string) bool { - var at string - if len(authType) > 0 { - at = authType[0] - } - - mgr, err := stputil.GetManager(at) - if err != nil { - return false - } - - saCtx := getSaContext(c, mgr) - token := saCtx.GetTokenValue() - if token == "" { - return false - } - return mgr.IsLogin(c.Request.Context(), token) -} - -// GetTokenFromRequest gets token from request (exported) | 从请求获取 Token(导出) -func GetTokenFromRequest(c *gin.Context, authType ...string) string { - var at string - if len(authType) > 0 { - at = authType[0] - } - - mgr, err := stputil.GetManager(at) - if err != nil { - return "" - } - - saCtx := getSaContext(c, mgr) - return saCtx.GetTokenValue() -} - -// WithContext creates a new context with sa-token context | 创建带 sa-token 上下文的新上下文 -func WithContext(c *gin.Context, authType ...string) context.Context { - return c.Request.Context() +// RoleAndPermissionGroup creates a route group with role and permission checking | 创建带角色和权限检查的路由组 +func RoleAndPermissionGroup( + ctx context.Context, + group *gin.RouterGroup, + roles []string, + perms []string, + handler gin.HandlerFunc, + failFunc func(c *gin.Context, err error), + authType ...string, +) *gin.RouterGroup { + group.Use(CheckAllMiddleware(ctx, roles, perms, handler, failFunc, authType...)) + return group } diff --git a/integrations/gin/export.go b/integrations/gin/export.go index b0608d9..06a60d0 100644 --- a/integrations/gin/export.go +++ b/integrations/gin/export.go @@ -417,7 +417,7 @@ func ReplaceByToken(ctx context.Context, tokenValue string, authType ...string) // ============ Token Validation | Token验证 ============ // IsLogin checks if the user is logged in | 检查用户是否已登录 -func IsLogin(ctx context.Context, tokenValue string, authType ...string) bool { +func IsLogin(ctx context.Context, tokenValue string, authType ...string) (bool, error) { return stputil.IsLogin(ctx, tokenValue, authType...) } @@ -426,11 +426,6 @@ func CheckLogin(ctx context.Context, tokenValue string, authType ...string) erro return stputil.CheckLogin(ctx, tokenValue, authType...) } -// CheckLoginWithState checks the login status (returns error to determine the reason if not logged in) | 检查登录状态(未登录时根据错误确定原因) -func CheckLoginWithState(ctx context.Context, tokenValue string, authType ...string) (bool, error) { - return stputil.CheckLoginWithState(ctx, tokenValue, authType...) -} - // GetLoginID gets the login ID from token | 从Token获取登录ID func GetLoginID(ctx context.Context, tokenValue string, authType ...string) (string, error) { return stputil.GetLoginID(ctx, tokenValue, authType...) @@ -493,14 +488,14 @@ func GetDisableTimeByToken(ctx context.Context, tokenValue string, authType ...s return stputil.GetDisableTimeByToken(ctx, tokenValue, authType...) } -// CheckDisableWithInfo gets disable info | 获取封禁信息 -func CheckDisableWithInfo(ctx context.Context, loginID interface{}, authType ...string) (*manager.DisableInfo, error) { - return stputil.CheckDisableWithInfo(ctx, loginID, authType...) +// GetDisableInfo gets disable info | 获取封禁信息 +func GetDisableInfo(ctx context.Context, loginID interface{}, authType ...string) (*manager.DisableInfo, error) { + return stputil.GetDisableInfo(ctx, loginID, authType...) } -// CheckDisableWithInfoByToken gets disable info by token | 根据Token获取封禁信息 -func CheckDisableWithInfoByToken(ctx context.Context, tokenValue string, authType ...string) (*manager.DisableInfo, error) { - return stputil.CheckDisableWithInfoByToken(ctx, tokenValue, authType...) +// GetDisableInfoByToken gets disable info by token | 根据Token获取封禁信息 +func GetDisableInfoByToken(ctx context.Context, tokenValue string, authType ...string) (*manager.DisableInfo, error) { + return stputil.GetDisableInfoByToken(ctx, tokenValue, authType...) } // ============ Session Management | Session管理 ============ diff --git a/integrations/gin/middleware.go b/integrations/gin/middleware.go index 6f8bb41..03525e7 100644 --- a/integrations/gin/middleware.go +++ b/integrations/gin/middleware.go @@ -56,10 +56,10 @@ func WithFailFunc(fn func(c *gin.Context, err error)) AuthOption { } } -// ========== Middlewares ========== +// ============ Middlewares | 中间件 ============ -// AuthMiddleware authentication middleware | 认证中间件 -func AuthMiddleware(opts ...AuthOption) gin.HandlerFunc { +// RegisterSaTokenContextMiddleware initializes Sa-Token context for each request | 初始化每次请求的 Sa-Token 上下文的中间件 +func RegisterSaTokenContextMiddleware(ctx context.Context, opts ...AuthOption) gin.HandlerFunc { options := defaultAuthOptions() for _, opt := range opts { opt(options) @@ -73,39 +73,21 @@ func AuthMiddleware(opts ...AuthOption) gin.HandlerFunc { } else { writeErrorResponse(c, err) } - c.Abort() return } - ctx := context.Background() - saCtx := getSaContext(c, mgr) - tokenValue := saCtx.GetTokenValue() - - // 检查登录 | Check login - err = mgr.CheckLogin(ctx, tokenValue) - if err != nil { - if options.FailFunc != nil { - options.FailFunc(c, err) - } else { - writeErrorResponse(c, err) - } - c.Abort() - return - } - - c.Next() + _ = getSaContext(c, mgr) } } -// AuthWithStateMiddleware with state authentication middleware | 带状态返回的认证中间件 -func AuthWithStateMiddleware(opts ...AuthOption) gin.HandlerFunc { +// AuthMiddleware authentication middleware | 认证中间件 +func AuthMiddleware(ctx context.Context, opts ...AuthOption) gin.HandlerFunc { options := defaultAuthOptions() for _, opt := range opts { opt(options) } return func(c *gin.Context) { - // 获取 Manager | Get Manager mgr, err := stputil.GetManager(options.AuthType) if err != nil { if options.FailFunc != nil { @@ -117,21 +99,26 @@ func AuthWithStateMiddleware(opts ...AuthOption) gin.HandlerFunc { return } - ctx := context.Background() saCtx := getSaContext(c, mgr) tokenValue := saCtx.GetTokenValue() - // 检查登录并返回状态 | Check login with state - _, err = mgr.CheckLoginWithState(ctx, tokenValue) - + // 检查登录 | Check login + isLogin, err := mgr.IsLogin(ctx, tokenValue) if err != nil { - // 用户自定义回调优先 if options.FailFunc != nil { options.FailFunc(c, err) } else { writeErrorResponse(c, err) } - + c.Abort() + return + } + if !isLogin { + if options.FailFunc != nil { + options.FailFunc(c, core.ErrTokenExpired) + } else { + writeErrorResponse(c, core.ErrTokenExpired) + } c.Abort() return } @@ -142,6 +129,7 @@ func AuthWithStateMiddleware(opts ...AuthOption) gin.HandlerFunc { // PermissionMiddleware permission check middleware | 权限校验中间件 func PermissionMiddleware( + ctx context.Context, permissions []string, opts ...AuthOption, ) gin.HandlerFunc { @@ -170,7 +158,6 @@ func PermissionMiddleware( return } - ctx := c.Request.Context() saCtx := getSaContext(c, mgr) tokenValue := saCtx.GetTokenValue() @@ -198,6 +185,7 @@ func PermissionMiddleware( // RoleMiddleware role check middleware | 角色校验中间件 func RoleMiddleware( + ctx context.Context, roles []string, opts ...AuthOption, ) gin.HandlerFunc { @@ -226,7 +214,6 @@ func RoleMiddleware( return } - ctx := c.Request.Context() saCtx := getSaContext(c, mgr) tokenValue := saCtx.GetTokenValue() diff --git a/stputil/stputil.go b/stputil/stputil.go index 0e2484a..efd8114 100644 --- a/stputil/stputil.go +++ b/stputil/stputil.go @@ -124,10 +124,10 @@ func ReplaceByToken(ctx context.Context, tokenValue string, authType ...string) // ============ Token Validation | Token验证 ============ // IsLogin checks if the user is logged in | 检查用户是否已登录 -func IsLogin(ctx context.Context, tokenValue string, authType ...string) bool { +func IsLogin(ctx context.Context, tokenValue string, authType ...string) (bool, error) { mgr, err := GetManager(authType...) if err != nil { - return false + return false, core.ErrManagerNotFound } return mgr.IsLogin(ctx, tokenValue) @@ -143,16 +143,6 @@ func CheckLogin(ctx context.Context, tokenValue string, authType ...string) erro return mgr.CheckLogin(ctx, tokenValue) } -// CheckLoginWithState checks the login status (returns error to determine the reason if not logged in) | 检查登录状态(未登录时根据错误确定原因) -func CheckLoginWithState(ctx context.Context, tokenValue string, authType ...string) (bool, error) { - mgr, err := GetManager(authType...) - if err != nil { - return false, err - } - - return mgr.CheckLoginWithState(ctx, tokenValue) -} - // ============ Token Information | Token信息与解析 ============ // GetLoginID gets the login ID from token | 从Token获取登录ID @@ -317,8 +307,8 @@ func GetDisableTimeByToken(ctx context.Context, tokenValue string, authType ...s return mgr.GetDisableTTL(ctx, loginID) } -// CheckDisableWithInfo gets disable info | 获取封禁信息 -func CheckDisableWithInfo(ctx context.Context, loginID interface{}, authType ...string) (*manager.DisableInfo, error) { +// GetDisableInfo gets disable info | 获取封禁信息 +func GetDisableInfo(ctx context.Context, loginID interface{}, authType ...string) (*manager.DisableInfo, error) { mgr, err := GetManager(authType...) if err != nil { return nil, err @@ -327,12 +317,12 @@ func CheckDisableWithInfo(ctx context.Context, loginID interface{}, authType ... if id, err := toString(loginID); err != nil { return nil, err } else { - return mgr.CheckDisableWithInfo(ctx, id) + return mgr.GetDisableInfo(ctx, id) } } -// CheckDisableWithInfoByToken gets disable info by token | 根据Token获取封禁信息 -func CheckDisableWithInfoByToken(ctx context.Context, tokenValue string, authType ...string) (*manager.DisableInfo, error) { +// GetDisableInfoByToken gets disable info by token | 根据Token获取封禁信息 +func GetDisableInfoByToken(ctx context.Context, tokenValue string, authType ...string) (*manager.DisableInfo, error) { mgr, err := GetManager(authType...) if err != nil { return nil, err @@ -343,10 +333,10 @@ func CheckDisableWithInfoByToken(ctx context.Context, tokenValue string, authTyp return nil, err } - return mgr.CheckDisableWithInfo(ctx, loginID) + return mgr.GetDisableInfo(ctx, loginID) } -// ============ Session Management | Session 管理 ============ +// ============ Session Management | Session管理 ============ // GetSession gets session by login ID | 根据登录ID获取Session func GetSession(ctx context.Context, loginID interface{}, authType ...string) (*session.Session, error) { @@ -977,7 +967,7 @@ func IsValid(ctx context.Context, refreshToken string, authType ...string) bool return mgr.SecurityIsRefreshTokenValid(ctx, refreshToken) } -// ============ OAuth2 Features | OAuth2 功能 ============ +// ============ OAuth2 Features | Oauth2特性 ============ // RegisterClient Registers an OAuth2 client | 注册OAuth2客户端 func RegisterClient(ctx context.Context, client *oauth2.Client, authType ...string) error { From ec35f2a908208651dcda42fd9d43da6a37758d76 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Sun, 11 Jan 2026 21:50:13 +0800 Subject: [PATCH 49/50] =?UTF-8?q?feat():=201=E3=80=81=E4=BF=AE=E6=94=B9man?= =?UTF-8?q?ager=E7=BB=AD=E6=9C=9F=E6=96=B9=E6=B3=95=202=E3=80=81=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=AD=98=E5=82=A8=E7=9A=84=E6=B5=8B=E8=AF=95=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/manager/manager.go | 19 ++++----- storage/memory/memory_test.go | 73 ++++++++++++++++++++++++++++++++ storage/redis/redis_test.go | 78 +++++++++++++++++++++++++++++++++++ 3 files changed, 158 insertions(+), 12 deletions(-) diff --git a/core/manager/manager.go b/core/manager/manager.go index 808e06c..c9bfbd4 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -185,11 +185,6 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( return existingTokenStr, nil } } - - //if existingTokenStr, ok := assertString(existingToken); ok && m.IsLogin(ctx, existingTokenStr) { - // // If valid token exists, return it directly | 如果已有 Token 且有效 则直接返回 - // return existingTokenStr, nil - //} } } @@ -280,7 +275,7 @@ func (m *Manager) LoginByToken(ctx context.Context, tokenValue string) error { } // Renews token expiration asynchronously | 异步续期Token - m.renewToken(ctx, tokenValue, info) + m.renewToken(context.Background(), tokenValue, info) return nil } @@ -422,7 +417,7 @@ func (m *Manager) IsLogin(ctx context.Context, tokenValue string) (bool, error) // Perform renewal if TTL is below MaxRefresh threshold and RenewInterval allows | 如果TTL小于MaxRefresh阈值且RenewInterval允许,则进行续期 if ttlSeconds > 0 && (m.config.MaxRefresh <= 0 || ttlSeconds <= m.config.MaxRefresh) && (m.config.RenewInterval <= 0 || !m.storage.Exists(ctx, m.getRenewKey(tokenValue))) { - renewFunc := func() { m.renewToken(ctx, tokenValue, info) } + renewFunc := func() { m.renewToken(context.Background(), tokenValue, info) } // Submit renewal task to the pool if configured, otherwise use a goroutine | 如果配置了续期池,则提交续期任务到池中,否则使用协程 if m.pool != nil { @@ -1482,6 +1477,11 @@ func (m *Manager) getTokenInfo(ctx context.Context, tokenValue string, checkStat // renewToken Renews token expiration asynchronously | 异步续期Token func (m *Manager) renewToken(ctx context.Context, tokenValue string, info *TokenInfo) { + // Before renewing the token, check if the user is disabled | 在续期之前,先检查用户是否被禁用 + if m.IsDisable(ctx, info.LoginID) { + return + } + // If info is nil, retrieve token information | 如果info为空,获取Token信息 if info == nil { var err error @@ -1490,11 +1490,6 @@ func (m *Manager) renewToken(ctx context.Context, tokenValue string, info *Token } } - // Before renewing the token, check if the user is disabled | 在续期之前,先检查用户是否被禁用 - if m.IsDisable(ctx, info.LoginID) { - return - } - // Get expiration time | 获取过期时间 exp := m.getExpiration() // Update ActiveTime | 更新ActiveTime diff --git a/storage/memory/memory_test.go b/storage/memory/memory_test.go index 02120d9..485e10d 100644 --- a/storage/memory/memory_test.go +++ b/storage/memory/memory_test.go @@ -2,6 +2,7 @@ package memory import ( "context" + "strings" "testing" "time" ) @@ -593,3 +594,75 @@ func TestMemoryStorage_ConcurrentAccess(t *testing.T) { <-done } } +func TestMemoryStorage_ConcurrentDeviceAndTokenCountEnhanced(t *testing.T) { + storage := NewStorage() + defer storage.Close() + + ctx := context.Background() + loginId := "user1" + + // 清理历史数据 + if err := storage.Clear(ctx); err != nil { + t.Fatalf("failed to clear storage: %v", err) + } + + // 模拟同账号不同设备的登录 + keys := []string{ + // pc 设备下多个 token + "satoken:auth:" + loginId + ":pc:tokenA", + "satoken:auth:" + loginId + ":pc:tokenB", + "satoken:auth:" + loginId + ":pc:tokenC", + "satoken:auth:" + loginId + ":pc:tokenD", + "satoken:auth:" + loginId + ":pc:tokenE", + + // 其他设备 + "satoken:auth:" + loginId + ":mobile:token123", + "satoken:auth:" + loginId + ":ipad:token456", + "satoken:auth:" + loginId + ":tv:token789", + } + + for _, key := range keys { + if err := storage.Set(ctx, key, "dummy", 0); err != nil { + t.Fatalf("failed to set key %s: %v", key, err) + } + } + + // ---------- 1. 测试同账号不同设备数 ---------- + devicePattern := "satoken:auth:" + loginId + ":*:*" + allKeys, err := storage.Keys(ctx, devicePattern) + if err != nil { + t.Fatalf("failed to scan keys: %v", err) + } + + deviceSet := map[string]struct{}{} + for _, key := range allKeys { + parts := strings.Split(key, ":") + if len(parts) >= 4 { + deviceSet[parts[3]] = struct{}{} + } + } + + expectedDeviceCount := 4 // pc, mobile, ipad, tv + if len(deviceSet) != expectedDeviceCount { + t.Errorf("Expected %d devices, got %d", expectedDeviceCount, len(deviceSet)) + } else { + t.Logf("Device count correct: %d", len(deviceSet)) + } + + // ---------- 2. 测试同账号同设备下 token 数 ---------- + device := "pc" + tokenPattern := "satoken:auth:" + loginId + ":" + device + ":*" + deviceKeys, err := storage.Keys(ctx, tokenPattern) + if err != nil { + t.Fatalf("failed to scan keys for device %s: %v", device, err) + } + + t.Logf("Token keys for device %s: %v", device, deviceKeys) + + expectedTokenCount := 5 // tokenA ~ tokenE + if len(deviceKeys) != expectedTokenCount { + t.Errorf("Expected %d tokens for device %s, got %d", expectedTokenCount, device, len(deviceKeys)) + } else { + t.Logf("Token count for device %s correct: %d", device, len(deviceKeys)) + } +} diff --git a/storage/redis/redis_test.go b/storage/redis/redis_test.go index 3239531..48efffa 100644 --- a/storage/redis/redis_test.go +++ b/storage/redis/redis_test.go @@ -2,7 +2,9 @@ package redis import ( "context" + "fmt" "os" + "strings" "testing" "time" @@ -731,3 +733,79 @@ func TestRedisStorage_ConcurrentAccess(t *testing.T) { <-done } } + +func TestConcurrentDeviceAndTokenCountEnhanced(t *testing.T) { + client := getTestRedisClient(t) + storage := NewStorageFromClient(client) + defer storage.Close() + defer cleanupTestData(t, storage) + + ctx := context.Background() + loginId := "1" + + // 清理历史数据 + if err := storage.Clear(ctx); err != nil { + t.Fatalf("failed to clear storage: %v", err) + } + + // 模拟同账号不同设备的登录 + keys := []string{ + // pc 设备下多个 token + fmt.Sprintf("satoken:auth:%s:pc:tokenA", loginId), + fmt.Sprintf("satoken:auth:%s:pc:tokenB", loginId), + fmt.Sprintf("satoken:auth:%s:pc:tokenC", loginId), + fmt.Sprintf("satoken:auth:%s:pc:tokenD", loginId), + fmt.Sprintf("satoken:auth:%s:pc:tokenE", loginId), + + // 其他设备 + fmt.Sprintf("satoken:auth:%s:mobile:token123", loginId), + fmt.Sprintf("satoken:auth:%s:ipad:token456", loginId), + fmt.Sprintf("satoken:auth:%s:tv:token789", loginId), + } + + for _, key := range keys { + if err := storage.Set(ctx, key, "dummy", 0); err != nil { + t.Fatalf("failed to set key %s: %v", key, err) + } + } + + // ---------- 1. 测试同账号不同设备数 ---------- + devicePattern := fmt.Sprintf("satoken:auth:%s:*:*", loginId) + allKeys, err := storage.Keys(ctx, devicePattern) + if err != nil { + t.Fatalf("failed to scan keys: %v", err) + } + + deviceSet := map[string]struct{}{} + for _, key := range allKeys { + parts := strings.Split(key, ":") + if len(parts) >= 4 { + deviceSet[parts[3]] = struct{}{} + } + } + + expectedDeviceCount := 4 // pc, mobile, ipad, tv + if len(deviceSet) != expectedDeviceCount { + t.Errorf("Expected %d devices, got %d", expectedDeviceCount, len(deviceSet)) + } else { + t.Logf("Device count correct: %d", len(deviceSet)) + } + + // ---------- 2. 测试同账号同设备下 token 数 ---------- + device := "pc" + tokenPattern := fmt.Sprintf("satoken:auth:%s:%s:*", loginId, device) + deviceKeys, err := storage.Keys(ctx, tokenPattern) + if err != nil { + t.Fatalf("failed to scan keys for device %s: %v", device, err) + } + + fmt.Println(len(deviceKeys)) + fmt.Println(deviceKeys) + + expectedTokenCount := 5 // tokenA ~ tokenE + if len(deviceKeys) != expectedTokenCount { + t.Errorf("Expected %d tokens for device %s, got %d", expectedTokenCount, device, len(deviceKeys)) + } else { + t.Logf("Token count for device %s correct: %d", device, len(deviceKeys)) + } +} From d99af389c7df871b9d532a81214e6a02fc4d2217 Mon Sep 17 00:00:00 2001 From: Zany2 <568562991@qq.com> Date: Mon, 12 Jan 2026 21:14:34 +0800 Subject: [PATCH 50/50] =?UTF-8?q?feat():=201=E3=80=81=E4=BF=AE=E6=94=B9man?= =?UTF-8?q?ager=E7=BB=AD=E6=9C=9F=E6=96=B9=E6=B3=95=202=E3=80=81=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=AD=98=E5=82=A8=E7=9A=84=E6=B5=8B=E8=AF=95=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/manager/manager.go | 191 +++++++++++++++++++++++++----------- storage/redis/redis_test.go | 23 +++++ 2 files changed, 155 insertions(+), 59 deletions(-) diff --git a/core/manager/manager.go b/core/manager/manager.go index c9bfbd4..5b7b0b5 100644 --- a/core/manager/manager.go +++ b/core/manager/manager.go @@ -27,14 +27,14 @@ type TokenInfo struct { LoginID string `json:"loginId"` // Login ID | 登录 ID Device string `json:"device"` // Device type | 设备类型 CreateTime int64 `json:"createTime"` // Token creation timestamp | 创建时间戳 - ActiveTime int64 `json:"activeTime"` // Last active time | 最后活跃时间戳 + ActiveTime int64 `json:"activeTime"` // Last active time | 最后活跃时间戳(续期时间) Tag string `json:"tag,omitempty"` // Custom tag for additional data | 自定义标记字段(可选) } // DisableInfo Account disable information | 封禁信息结构体 type DisableInfo struct { DisableTime int64 `json:"disableTime"` // Disable timestamp | 封禁时间戳 - DisableReason string `json:"disableReason"` // Reason for account disable | 账号封禁原因说明 + DisableReason string `json:"disableReason"` // Reason for account disable | 封禁原因 } // Manager Authentication manager-example | 认证管理器 @@ -46,7 +46,7 @@ type Manager struct { eventManager *listener.Manager // Event manager-example | 事件管理器 generator adapter.Generator // Token generator | Token 生成器 - storage adapter.Storage // Storage adapter (Redis, Memory, etc.) | 存储适配器(如 Redis、Memory) + storage adapter.Storage // Storage adapter | 存储适配器 serializer adapter.Codec // Codec adapter for encoding and decoding operations | 编解码器适配器 logger adapter.Log // Log adapter for logging operations | 日志适配器 pool adapter.Pool // Async task pool component | 异步任务协程池组件 @@ -56,7 +56,15 @@ type Manager struct { } // NewManager creates and initializes a new Manager instance | 创建并初始化一个新的 Manager 实例 -func NewManager(cfg *config.Config, generator adapter.Generator, storage adapter.Storage, serializer adapter.Codec, logger adapter.Log, pool adapter.Pool, customPermissionListFunc, CustomRoleListFunc func(loginID, authType string) ([]string, error)) *Manager { +func NewManager( + cfg *config.Config, + generator adapter.Generator, + storage adapter.Storage, + serializer adapter.Codec, + logger adapter.Log, + pool adapter.Pool, + customPermissionListFunc, CustomRoleListFunc func(loginID, authType string) ([]string, error), +) *Manager { // Use default configuration if cfg is nil | 如果未传入配置,则使用默认配置 if cfg == nil { @@ -78,7 +86,8 @@ func NewManager(cfg *config.Config, generator adapter.Generator, storage adapter serializer = codec_json.NewJSONSerializer() } - if cfg.IsLog && logger == nil { + // Use default logger if logger is nil | 如果未传入日志记录器,则使用默认日志记录器 + if logger == nil { logger = nop.NewNopLogger() } @@ -174,28 +183,34 @@ func (m *Manager) Login(ctx context.Context, loginID string, device ...string) ( deviceType := getDevice(device) // Get account key | 获取账号存储键 accountKey := m.getAccountKey(loginID, deviceType) + // Get existing token list of this account | 获取该账号下所有已登录Token + existingTokenList, err := m.GetTokenValueListByLoginID(ctx, loginID) + if err != nil { + return "", err + } - // Handle shared token for concurrent login | 处理多人登录共用 Token 的情况 + // Handle shared token for concurrent login | 处理多人登录共用Token的情况 if m.config.IsShare { - // Look for existing token of this account + device | 查找账号 + 设备下是否已有登录 Token - existingToken, err := m.storage.Get(ctx, accountKey) - if err == nil && existingToken != nil { - if existingTokenStr, ok := assertString(existingToken); ok { - if isLoggedIn, _ := m.IsLogin(ctx, existingTokenStr); isLoggedIn { - return existingTokenStr, nil - } + if len(existingTokenList) > 0 { + if isLoggedIn, err := m.IsLogin(ctx, existingTokenList[0]); isLoggedIn && err == nil { + return existingTokenList[0], nil } } } // Handle concurrent login behavior | 处理并发登录逻辑 if !m.config.IsConcurrent { - // Concurrent login not allowed → replace previous login on the same device | 不允许并发登录 顶掉同设备下已存在的登录会话 - _ = m.replace(ctx, loginID, deviceType) + // Concurrent login not allowed Kickout all existing tokens | 不允许并发登录 踢掉所有Token + if len(existingTokenList) > 0 { + for _, token := range existingTokenList { + err = m.kickoutByToken(ctx, token) + return "", err + } + } + } else if m.config.MaxLoginCount > 0 && !m.config.IsShare { // Concurrent login allowed but limited by MaxLoginCount | 允许并发登录但受 MaxLoginCount 限制 - tokens, err := m.GetTokenValueListByLoginID(ctx, loginID) - if err == nil && int64(len(tokens)) >= m.config.MaxLoginCount { + if int64(len(existingTokenList)) >= m.config.MaxLoginCount { return "", core.ErrLoginLimitExceeded } } @@ -274,8 +289,11 @@ func (m *Manager) LoginByToken(ctx context.Context, tokenValue string) error { return core.ErrAccountDisabled } - // Renews token expiration asynchronously | 异步续期Token - m.renewToken(context.Background(), tokenValue, info) + // Renew token | 同步刷新Token + err = m.renewToken(context.Background(), tokenValue, info) + if err != nil { + return err + } return nil } @@ -291,7 +309,7 @@ func (m *Manager) Logout(ctx context.Context, loginID string, device ...string) return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } if tokenValue == nil { - return core.ErrTokenNotFound + return core.ErrNotLogin } // Assert token value type | 类型断言为字符串 @@ -618,12 +636,12 @@ func (m *Manager) GetSession(ctx context.Context, loginID string) (*session.Sess } key := m.config.KeyPrefix + m.config.AuthType + session.SessionKeyPrefix + loginID - data, err := m.GetStorage().Get(ctx, key) + data, err := m.storage.Get(ctx, key) if err != nil { return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } - // If found, decode session | 如果找到 Session,则解码 + // If found, decode session | 如果找到 Session 则解码 var sess *session.Session if data != nil { raw, err := utils.ToBytes(data) @@ -632,7 +650,7 @@ func (m *Manager) GetSession(ctx context.Context, loginID string) (*session.Sess } sess = &session.Session{} - if err := m.GetCodec().Decode(raw, sess); err != nil { + if err := m.serializer.Decode(raw, sess); err != nil { return nil, fmt.Errorf("%w: %v", core.ErrDeserializeFailed, err) } @@ -1154,7 +1172,14 @@ func (m *Manager) GetTokenValueListByLoginID(ctx context.Context, loginID string if err == nil && value != nil { // Assert value as string and add to tokens slice | 将值断言为字符串并添加到Token切片 if tokenStr, ok := assertString(value); ok { - tokens = append(tokens, tokenStr) + // Get the token info from storage | 从存储中获取Token信息 + tokenInfo, err := m.storage.Get(ctx, m.getTokenKey(tokenStr)) + if err == nil && tokenInfo != nil { + tokenInfoStr, assertOk := assertString(tokenInfo) + if assertOk && tokenInfoStr != string(TokenStateKickout) && tokenInfoStr != string(TokenStateReplaced) { + tokens = append(tokens, tokenStr) + } + } } } } @@ -1446,7 +1471,10 @@ func (m *Manager) GetDevice(device []string) string { func (m *Manager) getTokenInfo(ctx context.Context, tokenValue string, checkState ...bool) (*TokenInfo, error) { // Retrieve data from storage using the token key | 使用Token键从存储中获取数据 data, err := m.storage.Get(ctx, m.getTokenKey(tokenValue)) - if err != nil || data == nil { + if err != nil { + return nil, fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) + } + if data == nil { return nil, core.ErrTokenNotFound } @@ -1476,17 +1504,17 @@ func (m *Manager) getTokenInfo(ctx context.Context, tokenValue string, checkStat } // renewToken Renews token expiration asynchronously | 异步续期Token -func (m *Manager) renewToken(ctx context.Context, tokenValue string, info *TokenInfo) { +func (m *Manager) renewToken(ctx context.Context, tokenValue string, info *TokenInfo) error { // Before renewing the token, check if the user is disabled | 在续期之前,先检查用户是否被禁用 if m.IsDisable(ctx, info.LoginID) { - return + return core.ErrAccountDisabled } // If info is nil, retrieve token information | 如果info为空,获取Token信息 if info == nil { var err error - if info, err = m.getTokenInfo(ctx, tokenValue); err != nil || info == nil { - return + if info, err = m.getTokenInfo(ctx, tokenValue); err != nil { + return err } } @@ -1496,23 +1524,24 @@ func (m *Manager) renewToken(ctx context.Context, tokenValue string, info *Token info.ActiveTime = time.Now().Unix() // Renew token TTL | 续期Token的TTL - if tokenInfo, err := m.serializer.Encode(info); err == nil { - err = m.storage.Set(ctx, m.getTokenKey(tokenValue), tokenInfo, exp) - if err != nil { - m.logger.Error(err) - } + tokenInfo, err := m.serializer.Encode(info) + if err != nil { + return fmt.Errorf("%w: %v", core.ErrSerializeFailed, err) + } + err = m.storage.Set(ctx, m.getTokenKey(tokenValue), tokenInfo, exp) + if err != nil { + return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } // Renew accountKey TTL | 续期账号映射的TTL - err := m.storage.Expire(ctx, m.getAccountKey(info.LoginID, info.Device), exp) + err = m.storage.Expire(ctx, m.getAccountKey(info.LoginID, info.Device), exp) if err != nil { - m.logger.Error(err) + return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } // Renew session TTL | 续期Session的TTL - err = m.RenewSession(ctx, info.LoginID, exp) - if err != nil { - m.logger.Error(err) + if err = m.RenewSession(ctx, info.LoginID, exp); err != nil { + return err } // Set minimal renewal interval marker | 设置最小续期间隔标记 @@ -1524,9 +1553,11 @@ func (m *Manager) renewToken(ctx context.Context, tokenValue string, info *Token time.Duration(m.config.RenewInterval)*time.Second, ) if err != nil { - m.logger.Error(err) + return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) } } + + return nil } // removeTokenChain Removes all related keys and triggers event | 删除Token相关的所有键并触发事件 @@ -1539,26 +1570,68 @@ func (m *Manager) removeTokenChain(ctx context.Context, tokenValue string, info } } - // Delete token-info mapping | 删除Token信息映射 - err := m.storage.Delete(ctx, m.getTokenKey(tokenValue)) - if err != nil { - m.logger.Error(err) - } - // Delete account-token mapping | 删除账号映射 - err = m.storage.Delete(ctx, m.getAccountKey(info.LoginID, info.Device)) - if err != nil { - m.logger.Error(err) - } - // Delete renew key | 删除续期标记 - err = m.storage.Delete(ctx, m.getRenewKey(tokenValue)) - if err != nil { - m.logger.Error(err) - } - // Optionally destroy session | 可选销毁Session - if len(destroySession) > 0 && destroySession[0] { - err = m.DeleteSession(ctx, info.LoginID) + // Construct the token storage key | 构造Token存储键 + tokenKey := m.getTokenKey(tokenValue) + // Construct the account storage key | 构造账号存储键 + accountKey := m.getAccountKey(info.LoginID, info.Device) + // Construct the renewal key | 构造续期标记 + renewKey := m.getRenewKey(tokenValue) + + // Handle different events | 处理不同的事件 + switch event { + + // EventLogout User logout | 用户主动登出 + case listener.EventLogout: + // Delete token, account mapping, and renew key | 删除Token、账号映射和续期标记 + err := m.storage.Delete(ctx, tokenKey, accountKey, renewKey) if err != nil { - m.logger.Error(err) + return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) + } + if len(destroySession) > 0 && destroySession[0] { + err = m.DeleteSession(ctx, info.LoginID) + if err != nil { + return err + } + } + + // EventKickout User kicked offline | 用户被踢下线 + case listener.EventKickout: + // Mark as kicked out but keep TTL | 标记为被踢下线,保留原TTL + err := m.storage.SetKeepTTL(ctx, tokenKey, string(TokenStateKickout)) + if err != nil { + return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) + } + // Delete account mapping, renew key | 删除账号映射、续期标记 + err = m.storage.Delete(ctx, accountKey, renewKey) + if err != nil { + return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) + } + + // EventReplace User replaced by new login (keep session) | 用户被顶下线(保留Session,自动过期) + case listener.EventReplace: + // Mark as replaced but keep TTL | 标记为被顶下线,保留原TTL + err := m.storage.SetKeepTTL(ctx, tokenKey, string(TokenStateReplaced)) + if err != nil { + return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) + } + // Delete account mapping, renew key | 删除账号映射、续期标记 + err = m.storage.Delete(ctx, accountKey, renewKey) + if err != nil { + return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) + } + + // Default Unknown event type | 未知事件类型(默认删除) + default: + // Delete token, account mapping, and renew key | 删除Token、账号映射和续期标记 + err := m.storage.Delete(ctx, tokenKey, accountKey, renewKey) + if err != nil { + return fmt.Errorf("%w: %v", core.ErrStorageUnavailable, err) + } + if len(destroySession) > 0 && destroySession[0] { + err = m.DeleteSession(ctx, info.LoginID) + if err != nil { + return err + } } } diff --git a/storage/redis/redis_test.go b/storage/redis/redis_test.go index 48efffa..8678810 100644 --- a/storage/redis/redis_test.go +++ b/storage/redis/redis_test.go @@ -809,3 +809,26 @@ func TestConcurrentDeviceAndTokenCountEnhanced(t *testing.T) { t.Logf("Token count for device %s correct: %d", device, len(deviceKeys)) } } + +func TestDaixk(t *testing.T) { + client := getTestRedisClient(t) + storage := NewStorageFromClient(client) + defer storage.Close() + + ctx := context.Background() + //marshal, _ := json.Marshal(manager.TokenInfo{ + // AuthType: "dsfdsf", + // LoginID: "dsfsdf", + // Device: "dsfsdf", + // CreateTime: 11, + // ActiveTime: 3423423, + // Tag: "", + //}) + _ = storage.Set(ctx, "11111111", "KICK_OUT", 10000) + + tokenInfo, _ := storage.Get(ctx, "11111111") + s, ok := tokenInfo.(string) + if ok { + fmt.Println(s) + } +}