从MaterialSkin横向导航栏出发,聊聊WinForm界面设计的‘克制’与‘适配’
从MaterialSkin横向导航栏出发聊聊WinForm界面设计的‘克制’与‘适配’在追求用户体验至上的今天WinForm开发者常常面临一个两难选择如何在保持Windows原生风格的同时为应用注入现代感MaterialSkin这类第三方控件库的出现似乎为我们提供了一条捷径。但真正考验开发者功力的不是如何快速实现炫酷效果而是懂得在功能丰富与界面简洁之间找到平衡点。1. 设计哲学为什么需要克制Material Design最初是为移动端和Web设计的语言直接套用到桌面端往往会产生水土不服。我曾接手过一个项目开发者在每个按钮、每处阴影都极致追求Material效果最终呈现的却是一个既不像Windows也不像Android的弗兰肯斯坦式界面。克制的三个维度视觉密度桌面应用通常需要展示更多信息Material的8dp栅格系统可能需要调整为12-16dp交互习惯移动端的滑动操作在PC端应转换为鼠标悬停/点击控件组合不是所有Material组件都适合WinForm比如FAB按钮在数据密集型表单中就显得突兀提示在Visual Studio中创建界面审计清单列出每个Material控件的使用理由没有明确价值的一律禁用。2. 横向导航栏的适配实践2.1 显示模式的选择策略通过对比测试三种显示模式在不同场景下的表现模式适用场景分辨率适应性学习成本TextOnly专业工具/复杂系统高低IconOnly平板模式/常驻后台程序中高IconAndText通用型应用/混合使用环境低中// 动态切换显示模式的示例代码 materialTabSelector1.DisplayStyle DisplayStyle.IconAndText; if (Screen.PrimaryScreen.Bounds.Width 1366) { materialTabSelector1.DisplayStyle DisplayStyle.Icon; }2.2 图标系统的工程化管理常见错误做法是将所有图标堆砌在一个ImageList中。更专业的做法是建立图标资源字典!-- icons.resx -- data namenav_home typeSystem.Drawing.Bitmap valueiVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/APgvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AkEEjEXWtR5eQAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAABKklEQVRIx3UMUoDQRTG8Z8psJBUKTyAR7ATvIBgJ3gDG8HGRrC0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG0sbG